@cline/core 0.0.60-nightly.1784085310 → 0.0.61
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/hub/daemon/entry.js +158 -158
- package/dist/hub/index.js +157 -157
- package/dist/index.js +157 -157
- package/dist/runtime/host/local-runtime-host.d.ts +1 -0
- package/dist/services/llms/provider-settings.d.ts +6 -0
- package/dist/services/local-runtime-bootstrap.d.ts +2 -0
- package/dist/services/workspace/workspace-manifest.d.ts +11 -0
- package/dist/types/sessions.d.ts +4 -0
- 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{IZ.delete($.lockDir),QE($)}}function U1($,W,Z={}){let Q=JE($,Z);return iK(Q,$,W)}async function H6($,W,Z={}){let Q=await jE($,Z);return iK(Q,$,W)}function XE($){let W=BE($);if(!W.mcpServers||typeof W.mcpServers!=="object"||Array.isArray(W.mcpServers))W.mcpServers={};return W}function YE($,W){let Z=JSON.stringify($),Q=JSON.parse(Z),J=W(Q),j=JSON.stringify(Q),X=W($);if(JSON.stringify($)!==j)throw new x$("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 x$("MCP settings mutator must be deterministic and free of side effects; repeated calls produced different return values.");return X}function VE($){let W=IK($,"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 BE($){try{return VE($)}catch(W){if(W.code==="ENOENT")return{};throw W}}function nK($,W){if(!Object.hasOwn($,W))return;let Z=$[W];if(!Z||typeof Z!=="object"||Array.isArray(Z))return;return Z}function HE($,W,Z){Object.defineProperty($,W,{value:Z,enumerable:!0,configurable:!0,writable:!0})}function I2($={}){let W=$.filePath??Q0(),Z=IK(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=tN.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 G6($){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 GE($){if($===void 0)return;let W=RJ.safeParse($);if(!W.success)return;return G6(W.data)}function t1($={}){let W=$.filePath??Q0();return kK(W)}function e0($={}){let W=I2($);return Object.entries(W.mcpServers).map(([Z,Q])=>({name:Z,transport:Q.transport,disabled:Q.disabled,metadata:Q.metadata,oauth:Q.oauth}))}function x2($){let W=$.filePath??Q0(),Z=$.name.trim();if(!Z)throw Error("MCP server settings toggle requires a server name.");U1(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=nK(j,Z);if(!X)throw Error(`Unknown MCP server: ${Z}`);let Y={...X};if($.disabled)Y.disabled=!0;else delete Y.disabled;HE(j,Z,Y),Q.mcpServers=j})}function g2($,W={}){let Z=I2(W);if(!Object.hasOwn(Z.mcpServers,$))return;return G6(Z.mcpServers[$]?.oauth)}function aK($,W){return(Z)=>{let Q=Z.mcpServers,J=nK(Q,$);if(!J)throw Error(`Unknown MCP server: ${$}`);let j=GE(J.oauth)??{},X=G6(W(j));if(X)J.oauth=X;else delete J.oauth;return X??{}}}function m2($,W,Z={}){let Q=Z.filePath??Q0();return U1(Q,aK($,W))}async function S5($,W,Z={}){let Q=Z.filePath??Q0();return H6(Q,aK($,W))}function b5($={}){return e0($).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 v2($,W={}){let Z=e0(W);for(let Q of Z)await $.registerServer(Q);return Z}var P5,vK,RJ,dN,lN,pN,rN,iN,nN,cK,aN,oN,sN,tN,B6,g$,x$,NJ=1e4,uK=25,$E,IZ;var xZ=W2(()=>{P5=S.record(S.string(),S.string()),vK=S.record(S.string(),S.unknown()),RJ=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(),dN=S.object({type:S.literal("stdio"),command:S.string().min(1),args:S.array(S.string()).optional(),cwd:S.string().min(1).optional(),env:P5.optional()}),lN=S.object({type:S.literal("sse"),url:S.string().url(),headers:P5.optional()}),pN=S.object({type:S.literal("streamableHttp"),url:S.string().url(),headers:P5.optional()}),rN=S.discriminatedUnion("type",[dN,lN,pN]),iN=S.object({transport:rN,disabled:S.boolean().optional(),metadata:vK.optional(),oauth:RJ.optional()}),nN=S.enum(["stdio","sse","http","streamableHttp"]).optional(),cK=S.object({type:S.enum(["stdio","sse","streamableHttp"]).optional(),transportType:nN,disabled:S.boolean().optional(),metadata:vK.optional(),oauth:RJ.optional()});aN=cK.extend({command:S.string().min(1),args:S.array(S.string()).optional(),cwd:S.string().min(1).optional(),env:P5.optional()}).superRefine(($,W)=>{let Z=$.type??qJ($.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})),oN=cK.extend({url:S.string().url(),headers:P5.optional()}).superRefine(($,W)=>{let Z=$.type??qJ($.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??qJ($.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}}),sN=S.union([iN,aN,oN]),tN=S.object({mcpServers:S.record(S.string(),sN)}).passthrough();B6=class B6 extends Error{constructor($){super($);this.name="McpSettingsUpdateSkippedError"}};g$=class g$ extends Error{constructor($){super($);this.name="McpSettingsLockTimeoutError"}};x$=class x$ extends Error{constructor($){super($);this.name="McpSettingsMutatorPurityError"}};$E=new Int32Array(new SharedArrayBuffer(4)),IZ=new Set});import{existsSync as MS,mkdirSync as RS,readFileSync as NS,writeFileSync as ES}from"node:fs";import{resolve as wS}from"node:path";import{resolveSessionDataDir as CS}from"@cline/shared/storage";import{nanoid as PS}from"nanoid";import*as SS from"node-machine-id";function u0($){let W=$?.trim();if(W)return W;let Z=hS();if(Z)return Z;return kS()}function yS(){let $=SS;return $.machineIdSync??$.default?.machineIdSync}function hS(){try{let $=yS();if(!$)return;return $().trim()||void 0}catch{return}}function kS(){let $=CS(),W=wS($,bS);try{if(MS(W)){let Q=NS(W,"utf8").trim();if(Q.length>0)return Q}}catch{}let Z=`cl-${PS()}`;try{RS($,{recursive:!0}),ES(W,Z,"utf8")}catch{}return Z}var bS="machine-id";var T6=()=>{};class HW{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(Fy(V)){J[B]=V;continue}try{J[B]=JSON.stringify(V)}catch{J[B]=String(V)}}return J}}function Fy($){return typeof $==="string"||typeof $==="number"||typeof $==="boolean"}class GW{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 x6{adapters;metadata;distinctId;commonProperties;constructor($={}){if(this.adapters=[...$.adapters??[]],$.logger)this.adapters.push(new GW({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 dj=()=>{};import{metrics as Ay,trace as Uy}from"@opentelemetry/api";import{logs as fy}from"@opentelemetry/api-logs";import{OTLPLogExporter as Dy}from"@opentelemetry/exporter-logs-otlp-http";import{OTLPMetricExporter as _y}from"@opentelemetry/exporter-metrics-otlp-http";import{OTLPTraceExporter as Ly}from"@opentelemetry/exporter-trace-otlp-http";import{resourceFromAttributes as Oy}from"@opentelemetry/resources";import{BatchLogRecordProcessor as Ty,ConsoleLogRecordExporter as zy,LoggerProvider as qy}from"@opentelemetry/sdk-logs";import{ConsoleMetricExporter as My,MeterProvider as Ry,PeriodicExportingMetricReader as EU}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as Ny,ConsoleSpanExporter as Ey,SimpleSpanProcessor as wy}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as Cy}from"@opentelemetry/sdk-trace-node";import{ATTR_SERVICE_NAME as Py,ATTR_SERVICE_VERSION as Sy}from"@opentelemetry/semantic-conventions";class wU{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 g6{meterProvider;loggerProvider;tracerProvider;options;constructor($={}){this.options=$;let W=Oy({[Py]:$.serviceName??"cline",...$.serviceVersion?{[Sy]:$.serviceVersion}:{}});if(this.meterProvider=this.createMeterProvider(W),this.loggerProvider=this.createLoggerProvider(W),this.tracerProvider=this.createTracerProvider(W),this.meterProvider)Ay.setGlobalMeterProvider(this.meterProvider);if(this.loggerProvider)fy.setGlobalLoggerProvider(this.loggerProvider);if(this.tracerProvider)this.tracerProvider.register()}getTracer($="cline",W){return Uy.getTracer($,W??this.options.serviceVersion)}createAdapter($){return new HW({...$,meterProvider:this.meterProvider,loggerProvider:this.loggerProvider})}createTelemetryService($){let W=this.createAdapter({name:$.name,enabled:this.options.enabled,metadata:$.metadata});return new x6({...$,adapters:[W],distinctId:u0($.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=lj(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)=>hy(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 Ry({resource:$,readers:J})}createTracerProvider($){let W=lj(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=yy(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 Cy({resource:$,spanProcessors:J})}createLoggerProvider($){let W=lj(this.options.logsExporter);if(W.length===0)return null;let Z=W.map((Q)=>{let J=by(Q,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(!J)return null;return new Ty(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 qy({resource:$,processors:Z})}}function KW($){let W=new g6($),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 Y$($){if(w9())return{telemetry:new wU($)};if($.enabled!==!0)return{telemetry:new x6({...$,distinctId:u0($.distinctId)})};return KW($)}function i$($){let{telemetry:W,provider:Z}=Y$($);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 lj($){if(!$)return[];return(Array.isArray($)?$:$.split(",")).map((Z)=>Z.trim()).filter((Z)=>Z==="console"||Z==="otlp")}function by($,W){if($==="console")return new zy;if(!W.endpoint)return null;let Z=pj(W.endpoint,"/v1/logs");return new Dy({url:Z,headers:W.headers})}function yy($,W){if($==="console")return new wy(new Ey);if(!W.endpoint)return null;let Z=pj(W.endpoint,"/v1/traces");return new Ny(new Ly({url:Z,headers:W.headers}))}function hy($,W){if($==="console")return new EU({exporter:new My,exportIntervalMillis:W.interval,exportTimeoutMillis:W.timeout});if(!W.endpoint)return null;let Z=pj(W.endpoint,"/v1/metrics");return new EU({exporter:new _y({url:Z,headers:W.headers}),exportIntervalMillis:W.interval,exportTimeoutMillis:W.timeout})}function pj($,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 FW=W2(()=>{A1();T6();dj()});var cf={};E(cf,{resolveCoreDistinctId:()=>u0,createOpenTelemetryTelemetryService:()=>KW,createConfiguredTelemetryService:()=>Y$,createConfiguredTelemetryHandle:()=>i$,OpenTelemetryProvider:()=>g6,OpenTelemetryAdapter:()=>HW});var PQ=W2(()=>{T6();FW()});import{AgentRuntimeAbortError as qv}from"@cline/agents";import{initVcr as Mv,resolveClineBuildEnv as Rv}from"@cline/shared";import{normalizeProviderId as fv}from"@cline/llms";var G_={};E(G_,{LocalRuntimeHost:()=>b1});import{readdirSync as Yv}from"node:fs";import{homedir as Vv}from"node:os";import{isAbsolute as Bv,join as bY,resolve as yY}from"node:path";import{captureSdkError as e$,createSessionId as Hv,isLikelyAuthError as Gv,normalizeUserInput as Kv}from"@cline/shared";import{setHomeDirIfUnset as Fv}from"@cline/shared/storage";var zV={};E(zV,{saveProviderOAuthCredentials:()=>J2,resolveProviderApiKeyFromSettings:()=>v7,loginAndSaveProviderOAuthCredentials:()=>Y4,isOAuthProvider:()=>Q2,getProviderOAuthCredentialsFromSettings:()=>V4,getProviderAuthStorageId:()=>m7,getProviderAuthHandler:()=>G0,getPersistedProviderApiKey:()=>O8,formatProviderOAuthApiKey:()=>c7});import{decodeJwtPayload as KL,getClineEnvironmentConfig as OV}from"@cline/shared";var QV={};E(QV,{startClineDeviceAuth:()=>y7,refreshClineToken:()=>Z9,loginClineOAuth:()=>e6,getValidClineCredentials:()=>$4,completeClineDeviceAuth:()=>h7});import{getClineEnvironmentConfig as w7}from"@cline/shared";var mY={};E(mY,{setSdkLogger:()=>N7,sdkDebug:()=>Z0,hashSecret:()=>M0,getSdkLogger:()=>C_});import{createHash as w_}from"node:crypto";var R7;function N7($){R7=$}function C_(){return R7}function M0($){if(typeof $!=="string"||$.length===0)return"unset";return w_("sha256").update($).digest("hex").slice(0,8)}function Z0($){try{R7?.debug($)}catch{}}O0();var nY={};E(nY,{startLocalOAuthServer:()=>H1});function I_(){let $;return{promise:new Promise((Z)=>{$=Z}),resolve:$}}async function H1($){let W=await import("node:http"),Z=$.host??"127.0.0.1",Q=$.timeoutMs??300000,J=$.successHtml??x_,j=I_(),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,_)=>{try{let D=new URL(U.url||"",`http://${Z}:${F}`);if(D.pathname!==$.callbackPath){_.statusCode=404,_.end("Not found");return}let M={url:D,code:D.searchParams.get("code")??void 0,state:D.searchParams.get("state")??void 0,provider:D.searchParams.get("provider")??void 0,error:D.searchParams.get("error")??void 0};if(M.error){_.statusCode=400,_.end(`Authentication failed: ${M.error}`),G(),H(M);return}if(!M.code){_.statusCode=400,_.end("Missing authorization code");return}if($.expectedState&&M.state!==$.expectedState){_.statusCode=400,_.end("State mismatch");return}_.statusCode=200,_.setHeader("Content-Type","text/html; charset=utf-8"),_.end(J),G(),H(M)}catch{_.statusCode=500,_.end("Internal error")}}),f=await new Promise((U)=>{let _=(D)=>{A.off("error",_),U({bound:!1,error:D})};A.once("error",_),A.listen(F,Z,()=>{A.off("error",_),V=A,U({bound:!0})})});if(f.error){if(f.error.code==="EADDRINUSE")continue;throw G(),f.error}if(f.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 x_=`<!DOCTYPE html>
|
|
1
|
+
import{createRequire as y_}from"node:module";var{defineProperty:N7,getOwnPropertyNames:P_}=Object;var mY=Object.prototype.hasOwnProperty;function vY($){return this[$]}var N=($,W,Z)=>{var Q=P_(W);for(let J of Q)if(!mY.call($,J)&&J!=="default")N7($,J,{get:vY.bind(W,J),enumerable:!0});if(Z){for(let J of Q)if(!mY.call(Z,J)&&J!=="default")N7(Z,J,{get:vY.bind(W,J),enumerable:!0});return Z}};var S_=($)=>$;function b_($,W){this[$]=S_.bind(null,W)}var w=($,W)=>{for(var Z in W)N7($,Z,{get:W[Z],enumerable:!0,configurable:!0,set:b_.bind(W,Z)})};var W2=($,W)=>()=>($&&(W=$($=0)),W);var cY=y_(import.meta.url);import{AGENT_UNEXPECTED_REASONING_TOKENS_EVENT as I_,captureAgentUnexpectedReasoningTokens as lY,SDK_ERROR_TELEMETRY_EVENT as x_}from"@cline/shared";function a($,W,Z){$?.capture({event:W,properties:Z})}function gW($){if(!$)return;return $.substring(0,g_)}function m_($){if(typeof $==="string")return"Error";return $.name?.trim()||$.constructor?.name||"Error"}function v_($){return typeof $==="string"?$:$.message}function dY($,W){return $.some((Z)=>W.has(Z.trim().toLowerCase()))}function pY($){a($,v.CLIENT.EXTENSION_ACTIVATED)}function mW($,W){let Z=[...W.vcs_types],Q={root_count:W.root_count,vcs_types:Z,is_multi_root:W.root_count>1,has_git:dY(Z,new Set(["git"])),has_mercurial:dY(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;a($,v.WORKSPACE.INITIALIZED,Q)}function vW($,W,Z){a($,v.WORKSPACE.INIT_ERROR,{error_type:m_(W),error_message:gW(v_(W)),fallback_to_single_root:Z.fallback_to_single_root,workspace_count:Z.workspace_count??0})}function rY($,W){a($,v.WORKSPACE.PATH_RESOLVED,{...W})}function g1($,W){a($,v.USER.AUTH_STARTED,{provider:W})}function m1($,W){a($,v.USER.AUTH_SUCCEEDED,{provider:W})}function v1($,W,Z){a($,v.USER.AUTH_FAILED,{provider:W,errorMessage:gW(Z)})}function U$($,W,Z,Q){a($,v.USER.AUTH_LOGGED_OUT,{provider:W,reason:Z,status:Q?.status,errorCode:Q?.errorCode})}function w7($,W,Z){a($,v.USER.AUTH_REFRESH_SOFT_FAILURE,{provider:W,status:Z?.status,errorCode:Z?.errorCode,errorName:Z?.errorName,tokenExpired:Z?.tokenExpired})}function iY($,W){a($,v.USER.PROVIDER_CONFIGURED,{provider:W})}function nY($,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 cW($,W){a($,v.TASK.CREATED,W)}function uW($,W){a($,v.TASK.RESTARTED,W)}function t6($,W){a($,v.TASK.COMPLETED,W)}function A8($,W){a($,v.TASK.CONVERSATION_TURN,{...W,timestamp:new Date().toISOString()})}function dW($,W){a($,v.TASK.TOKEN_USAGE,W)}function lW($,W,Z){a($,v.TASK.MODE_SWITCH,{ulid:W,mode:Z})}function U8($,W){a($,v.TASK.TOOL_USED,W)}function pW($,W){a($,v.TASK.SKILL_USED,W)}function rW($,W){a($,v.TASK.DIFF_EDIT_FAILED,W)}function e6($,W){a($,v.TASK.PROVIDER_API_ERROR,{...W,errorMessage:gW(W.errorMessage)??"unknown",timestamp:new Date().toISOString()})}function aY($,W){a($,v.SDK.TOOL_TIMEOUT,c_(W))}function c_($){let W={};for(let[Z,Q]of Object.entries($))if(Q!==void 0)W[Z]=Q;return W}function iW($,W,Z){a($,v.TASK.MENTION_USED,{mentionType:W,contentLength:Z,timestamp:new Date().toISOString()})}function nW($,W,Z,Q){a($,v.TASK.MENTION_FAILED,{mentionType:W,errorType:Z,errorMessage:gW(Q),timestamp:new Date().toISOString()})}function aW($,W,Z,Q,J){a($,v.TASK.MENTION_SEARCH_RESULTS,{queryLength:W.length,resultCount:Z,searchType:Q,isEmpty:J,timestamp:new Date().toISOString()})}function f$($,W){a($,v.TASK.AGENT_CREATED,{...W,timestamp:new Date().toISOString()})}function oW($,W){a($,v.TASK.AGENT_TEAM_CREATED,{...W,timestamp:new Date().toISOString()})}function $4($,W){a($,W.event==="ended"?v.TASK.SUBAGENT_COMPLETED:v.TASK.SUBAGENT_STARTED,{...W,timestamp:new Date().toISOString()})}function sW($,W,Z,Q){a($,v.HOOKS.DISCOVERY_COMPLETED,{hookName:W,globalCount:Z,workspaceCount:Q,totalCount:Z+Q,timestamp:new Date().toISOString()})}function tW($,W){a($,v.TASK.COMPACTION_EXECUTED,{...W,timestamp:new Date().toISOString()})}function eW($,W){a($,v.TASK.COMPACTION_SKIPPED,{...W,timestamp:new Date().toISOString()})}function oY($,W){a($,v.TASK.COMPACTION_BUDGET_EMERGENCY,{...W,timestamp:new Date().toISOString()})}var g_=500,v;var O0=W2(()=>{v={CLIENT:{EXTENSION_ACTIVATED:"user.extension_activated"},SESSION:{STARTED:"session.started",ENDED:"session.ended"},AGENT:{UNEXPECTED_REASONING_TOKENS:I_},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",PROVIDER_CONFIGURED:"user.provider_configured",TELEMETRY_OPT_OUT:"user.opt_out"},TASK:{CREATED:"task.created",RESTARTED:"task.restarted",COMPLETED:"task.completed",CONVERSATION_TURN:"task.conversation_turn",TOKEN_USAGE:"task.tokens",MODE_SWITCH:"task.mode",TOOL_USED:"task.tool_used",SKILL_USED:"task.skill_used",DIFF_EDIT_FAILED:"task.diff_edit_failed",PROVIDER_API_ERROR:"task.provider_api_error",MENTION_USED:"task.mention_used",MENTION_FAILED:"task.mention_failed",MENTION_SEARCH_RESULTS:"task.mention_search_results",AGENT_CREATED:"task.agent_created",AGENT_TEAM_CREATED:"task.agent_team_created",SUBAGENT_STARTED:"task.subagent_started",SUBAGENT_COMPLETED:"task.subagent_completed",COMPACTION_EXECUTED:"task.compaction_executed",COMPACTION_SKIPPED:"task.compaction_skipped",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:x_,TOOL_TIMEOUT:"sdk.tool_timeout"},FEATURE_FLAGS:{FLAG_CALLED:"$feature_flag_called"}}});import{mkdirSync as bT,readFileSync as yT,statSync as hT,writeFileSync as kT}from"node:fs";import{dirname as IT}from"node:path";import{resolveGlobalSettingsPath as pB}from"@cline/shared/storage";import{z as _2}from"zod";function E9(){return k4.parse({})}function gT(){w9=void 0}function mT($){if($.disabledTools)Object.freeze($.disabledTools);if($.disabledPlugins)Object.freeze($.disabledPlugins);return Object.freeze($)}function vT($){let W;try{W=yT($,"utf8")}catch{return E9()}try{let Z=k4.safeParse(JSON.parse(W));return Z.success?Z.data:E9()}catch{return E9()}}function cT(){let $=pB(),W=hT($,{throwIfNoEntry:!1}),Z=W?.mtimeMs??0,Q=W?.size??0,J=w9;if(J&&J.path===$&&J.mtimeMs===Z&&J.size===Q)return J;let j=mT(W?vT($):E9());return w9={path:$,mtimeMs:Z,size:Q,value:j},w9}function N0(){return cT().value}function M1($,W={}){let Z=pB(),Q=N0();bT(IT(Z),{recursive:!0});let J=k4.parse($);if(!Q.telemetryOptOut&&J.telemetryOptOut)nY(W.telemetry);kT(Z,`${JSON.stringify(J,null,2)}
|
|
2
|
+
`,"utf8"),gT()}function C9(){return N0().telemetryOptOut}function rB($,W={}){M1({...N0(),telemetryOptOut:$},W)}function iB(){return N0().autoUpdateEnabled}function nB($,W={}){M1({...N0(),autoUpdateEnabled:$},W)}function aB(){return N0().compactionStrategy??"basic"}function oB($){M1({...N0(),compactionStrategy:$})}function N1($){return new Set($??N0().disabledTools??[])}function I4($){return new Set($??N0().disabledPlugins??[])}function sB($){return N1().has($)}function P9($){let W=N0(),Z=new Set(W.disabledTools??[]),Q=Z.has($);if(Q)Z.delete($);else Z.add($);return M1({...W,disabledTools:[...Z]}),!Q}function G3($,W){let Z=[...new Set($.map((j)=>j.trim()).filter(Boolean))];if(Z.length===0)return;let Q=N0(),J=N1(Q.disabledTools);for(let j of Z)if(W)J.add(j);else J.delete(j);M1({...Q,disabledTools:[...J]})}function tB($,W){return G3([$],W),W}function eB($){return I4().has($)}function $H($,W){let Z=$.trim();if(!Z)return;let Q=N0(),J=I4(Q.disabledPlugins);if(W)J.add(Z);else J.delete(Z);M1({...Q,disabledPlugins:[...J]})}function S9($,W){let Z=I4(W);if(Z.size===0)return[...$];return $.filter((Q)=>!Z.has(Q))}function i1($,W){let Z=N1(W);if(Z.size===0)return[...$];return $.filter((Q)=>!Z.has(Q.name))}function b9($,W){if(!$||$.length===0)return $;let Z=N1(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 lB,xT,k4,w9;var U1=W2(()=>{O0();lB=_2.preprocess(($)=>Array.isArray($)?$.filter((W)=>typeof W==="string").map((W)=>W.trim()).filter(Boolean):void 0,_2.array(_2.string()).optional()).transform(($)=>{if(!$)return;let W=[...new Set($)].sort((Z,Q)=>Z.localeCompare(Q));return W.length>0?W:void 0}),xT=_2.enum(["basic","agentic"]).catch("basic"),k4=_2.object({telemetryOptOut:_2.boolean().default(!1).catch(!1),autoUpdateEnabled:_2.boolean().default(!0).catch(!0),compactionStrategy:xT.optional(),disabledTools:lB.optional(),disabledPlugins:lB.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 OH={};w(OH,{normalizeUserMessage:()=>cz,buildInitialUserContent:()=>vz});async function vz($,W,Z,Q){let J=uz(W),j=await lz(Z,Q);if(J.length===0&&!j)return $;let X=[{type:"text",text:$},...J];if(j)X.push(...j);return X}function cz($){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 uz($){if(!$||$.length===0)return[];let W=[];for(let Z of $){let Q=dz(Z);if(Q)W.push(Q)}return W}function dz($){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 lz($,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 ZF={};w(ZF,{updateMcpSettingsFileSync:()=>f1,updateMcpSettingsFile:()=>G6,updateMcpServerOAuthStateAsync:()=>y5,updateMcpServerOAuthState:()=>m2,setMcpServerDisabled:()=>x2,resolveMcpServerRegistrations:()=>t0,resolveDefaultMcpSettingsPath:()=>Q0,registerMcpServersFromSettingsFile:()=>v2,normalizeMcpServerOAuthState:()=>K6,loadMcpSettingsFile:()=>I2,listMcpServerOAuthStatuses:()=>h5,hasMcpSettingsFile:()=>$$,getMcpServerOAuthState:()=>g2,McpSettingsUpdateSkippedError:()=>H6,McpSettingsMutatorPurityError:()=>x$,McpSettingsLockTimeoutError:()=>g$});import{existsSync as cK,mkdirSync as MJ,readFileSync as uK,renameSync as EJ,rmdirSync as dR,rmSync as NJ,statSync as lR,unlinkSync as dK,writeFileSync as lK}from"node:fs";import{randomUUID as pR}from"node:crypto";import{dirname as pK,join as vK}from"node:path";import{setTimeout as rR}from"node:timers/promises";import{resolveMcpSettingsPath as iR}from"@cline/shared/storage";import{z as S}from"zod";function RJ($){if(!$)return;if($==="http")return"streamableHttp";return $}function Q0(){return iR()}function JE($,W){MJ(pK($),{recursive:!0});let Z=`${$}.tmp.${process.pid}.${Date.now()}.${Math.random().toString(36).slice(2)}`;try{lK(Z,W,{encoding:"utf8",flag:"wx"}),EJ(Z,$)}catch(Q){try{dK(Z)}catch{}throw Q}}function XE($){Atomics.wait(jE,0,0,$)}function YE($){return`${$}.lock`}function aK(){return`${process.pid}.${Date.now()}.${pR()}`}function oK($,W){MJ(pK($),{recursive:!0});let Z=`${$}.tmp.${W}`;NJ(Z,{recursive:!0,force:!0}),MJ(Z,{recursive:!0}),lK(vK(Z,`owner.${W}`),W,{encoding:"utf8",flag:"wx"});try{return EJ(Z,$),{lockDir:$,ownerFile:vK($,`owner.${W}`)}}catch(Q){if(NJ(Z,{recursive:!0,force:!0}),cK($))return;throw Q}}function sK($,W){let Z;try{Z=Date.now()-lR($).mtimeMs}catch(J){if(J.code==="ENOENT")return;throw J}if(Z<CJ)return;W.logger?.log(`[mcp-settings] Stale lock directory at ${$} (age ${Z}ms); reclaiming.`,{severity:"warn"});let Q=`${$}.stale.${aK()}`;try{EJ($,Q)}catch(J){if(J.code==="ENOENT")return;throw J}NJ(Q,{recursive:!0,force:!0})}function VE($){try{dK($.ownerFile)}catch(W){if(W.code!=="ENOENT")throw W}try{dR($.lockDir)}catch(W){let Z=W.code;if(Z!=="ENOENT"&&Z!=="ENOTEMPTY"&&Z!=="EEXIST")throw W}}function tK($){let W=YE($);if(gZ.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:aK()}}function BE($,W){let{lockDir:Z,token:Q}=tK($),J=W.timeoutMs??CJ,j=Date.now();while(!0){let X=oK(Z,Q);if(X)return gZ.add(Z),X;if(Date.now()-j>J)throw new g$(`Timed out waiting for MCP settings lock at ${Z} after ${J}ms.`);sK(Z,W),XE(nK)}}async function HE($,W){let{lockDir:Z,token:Q}=tK($),J=W.timeoutMs??CJ,j=Date.now();while(!0){let X=oK(Z,Q);if(X)return gZ.add(Z),X;if(Date.now()-j>J)throw new g$(`Timed out waiting for MCP settings lock at ${Z} after ${J}ms.`);sK(Z,W),await rR(nK)}}function eK($,W,Z){try{let Q=GE(W),J=KE(Q,Z);return JE(W,`${JSON.stringify(Q,null,2)}
|
|
4
|
+
`),J}finally{gZ.delete($.lockDir),VE($)}}function f1($,W,Z={}){let Q=BE($,Z);return eK(Q,$,W)}async function G6($,W,Z={}){let Q=await HE($,Z);return eK(Q,$,W)}function GE($){let W=AE($);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 x$("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 x$("MCP settings mutator must be deterministic and free of side effects; repeated calls produced different return values.");return X}function FE($){let W=uK($,"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 AE($){try{return FE($)}catch(W){if(W.code==="ENOENT")return{};throw W}}function $F($,W){if(!Object.hasOwn($,W))return;let Z=$[W];if(!Z||typeof Z!=="object"||Array.isArray(Z))return;return Z}function UE($,W,Z){Object.defineProperty($,W,{value:Z,enumerable:!0,configurable:!0,writable:!0})}function I2($={}){let W=$.filePath??Q0(),Z=uK(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=QE.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 K6($){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 fE($){if($===void 0)return;let W=wJ.safeParse($);if(!W.success)return;return K6(W.data)}function $$($={}){let W=$.filePath??Q0();return cK(W)}function t0($={}){let W=I2($);return Object.entries(W.mcpServers).map(([Z,Q])=>({name:Z,transport:Q.transport,disabled:Q.disabled,metadata:Q.metadata,oauth:Q.oauth}))}function x2($){let W=$.filePath??Q0(),Z=$.name.trim();if(!Z)throw Error("MCP server settings toggle requires a server name.");f1(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=$F(j,Z);if(!X)throw Error(`Unknown MCP server: ${Z}`);let Y={...X};if($.disabled)Y.disabled=!0;else delete Y.disabled;UE(j,Z,Y),Q.mcpServers=j})}function g2($,W={}){let Z=I2(W);if(!Object.hasOwn(Z.mcpServers,$))return;return K6(Z.mcpServers[$]?.oauth)}function WF($,W){return(Z)=>{let Q=Z.mcpServers,J=$F(Q,$);if(!J)throw Error(`Unknown MCP server: ${$}`);let j=fE(J.oauth)??{},X=K6(W(j));if(X)J.oauth=X;else delete J.oauth;return X??{}}}function m2($,W,Z={}){let Q=Z.filePath??Q0();return f1(Q,WF($,W))}async function y5($,W,Z={}){let Q=Z.filePath??Q0();return G6(Q,WF($,W))}function h5($={}){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 v2($,W={}){let Z=t0(W);for(let Q of Z)await $.registerServer(Q);return Z}var b5,rK,wJ,nR,aR,oR,sR,tR,eR,iK,$E,WE,ZE,QE,H6,g$,x$,CJ=1e4,nK=25,jE,gZ;var mZ=W2(()=>{b5=S.record(S.string(),S.string()),rK=S.record(S.string(),S.unknown()),wJ=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(),nR=S.object({type:S.literal("stdio"),command:S.string().min(1),args:S.array(S.string()).optional(),cwd:S.string().min(1).optional(),env:b5.optional()}),aR=S.object({type:S.literal("sse"),url:S.string().url(),headers:b5.optional()}),oR=S.object({type:S.literal("streamableHttp"),url:S.string().url(),headers:b5.optional()}),sR=S.discriminatedUnion("type",[nR,aR,oR]),tR=S.object({transport:sR,disabled:S.boolean().optional(),metadata:rK.optional(),oauth:wJ.optional()}),eR=S.enum(["stdio","sse","http","streamableHttp"]).optional(),iK=S.object({type:S.enum(["stdio","sse","streamableHttp"]).optional(),transportType:eR,disabled:S.boolean().optional(),metadata:rK.optional(),oauth:wJ.optional()});$E=iK.extend({command:S.string().min(1),args:S.array(S.string()).optional(),cwd:S.string().min(1).optional(),env:b5.optional()}).superRefine(($,W)=>{let Z=$.type??RJ($.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})),WE=iK.extend({url:S.string().url(),headers:b5.optional()}).superRefine(($,W)=>{let Z=$.type??RJ($.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??RJ($.transportType)??"sse")==="streamableHttp")return{transport:{type:"streamableHttp",url:$.url,headers:$.headers},disabled:$.disabled,metadata:$.metadata,oauth:$.oauth};return{transport:{type:"sse",url:$.url,headers:$.headers},disabled:$.disabled,metadata:$.metadata,oauth:$.oauth}}),ZE=S.union([tR,$E,WE]),QE=S.object({mcpServers:S.record(S.string(),ZE)}).passthrough();H6=class H6 extends Error{constructor($){super($);this.name="McpSettingsUpdateSkippedError"}};g$=class g$ extends Error{constructor($){super($);this.name="McpSettingsLockTimeoutError"}};x$=class x$ extends Error{constructor($){super($);this.name="McpSettingsMutatorPurityError"}};jE=new Int32Array(new SharedArrayBuffer(4)),gZ=new Set});import{existsSync as CS,mkdirSync as PS,readFileSync as SS,writeFileSync as bS}from"node:fs";import{resolve as yS}from"node:path";import{resolveSessionDataDir as hS}from"@cline/shared/storage";import{nanoid as kS}from"nanoid";import*as IS from"node-machine-id";function v0($){let W=$?.trim();if(W)return W;let Z=mS();if(Z)return Z;return vS()}function gS(){let $=IS;return $.machineIdSync??$.default?.machineIdSync}function mS(){try{let $=gS();if(!$)return;return $().trim()||void 0}catch{return}}function vS(){let $=hS(),W=yS($,xS);try{if(CS(W)){let Q=SS(W,"utf8").trim();if(Q.length>0)return Q}}catch{}let Z=`cl-${kS()}`;try{PS($,{recursive:!0}),bS(W,Z,"utf8")}catch{}return Z}var xS="machine-id";var z6=()=>{};class KW{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(_y(V)){J[B]=V;continue}try{J[B]=JSON.stringify(V)}catch{J[B]=String(V)}}return J}}function _y($){return typeof $==="string"||typeof $==="number"||typeof $==="boolean"}class FW{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 g6{adapters;metadata;distinctId;commonProperties;constructor($={}){if(this.adapters=[...$.adapters??[]],$.logger)this.adapters.push(new FW({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 rj=()=>{};import{metrics as Ly,trace as Oy}from"@opentelemetry/api";import{logs as Ty}from"@opentelemetry/api-logs";import{OTLPLogExporter as zy}from"@opentelemetry/exporter-logs-otlp-http";import{OTLPMetricExporter as qy}from"@opentelemetry/exporter-metrics-otlp-http";import{OTLPTraceExporter as My}from"@opentelemetry/exporter-trace-otlp-http";import{resourceFromAttributes as Ny}from"@opentelemetry/resources";import{BatchLogRecordProcessor as Ry,ConsoleLogRecordExporter as Ey,LoggerProvider as wy}from"@opentelemetry/sdk-logs";import{ConsoleMetricExporter as Cy,MeterProvider as Py,PeriodicExportingMetricReader as yU}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as Sy,ConsoleSpanExporter as by,SimpleSpanProcessor as yy}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as hy}from"@opentelemetry/sdk-trace-node";import{ATTR_SERVICE_NAME as ky,ATTR_SERVICE_VERSION as Iy}from"@opentelemetry/semantic-conventions";class hU{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 m6{meterProvider;loggerProvider;tracerProvider;options;constructor($={}){this.options=$;let W=Ny({[ky]:$.serviceName??"cline",...$.serviceVersion?{[Iy]:$.serviceVersion}:{}});if(this.meterProvider=this.createMeterProvider(W),this.loggerProvider=this.createLoggerProvider(W),this.tracerProvider=this.createTracerProvider(W),this.meterProvider)Ly.setGlobalMeterProvider(this.meterProvider);if(this.loggerProvider)Ty.setGlobalLoggerProvider(this.loggerProvider);if(this.tracerProvider)this.tracerProvider.register()}getTracer($="cline",W){return Oy.getTracer($,W??this.options.serviceVersion)}createAdapter($){return new KW({...$,meterProvider:this.meterProvider,loggerProvider:this.loggerProvider})}createTelemetryService($){let W=this.createAdapter({name:$.name,enabled:this.options.enabled,metadata:$.metadata});return new g6({...$,adapters:[W],distinctId:v0($.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=ij(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)=>my(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 Py({resource:$,readers:J})}createTracerProvider($){let W=ij(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=gy(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 hy({resource:$,spanProcessors:J})}createLoggerProvider($){let W=ij(this.options.logsExporter);if(W.length===0)return null;let Z=W.map((Q)=>{let J=xy(Q,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(!J)return null;return new Ry(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 wy({resource:$,processors:Z})}}function AW($){let W=new m6($),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(C9())return{telemetry:new hU($)};if($.enabled!==!0)return{telemetry:new g6({...$,distinctId:v0($.distinctId)})};return AW($)}function i$($){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 ij($){if(!$)return[];return(Array.isArray($)?$:$.split(",")).map((Z)=>Z.trim()).filter((Z)=>Z==="console"||Z==="otlp")}function xy($,W){if($==="console")return new Ey;if(!W.endpoint)return null;let Z=nj(W.endpoint,"/v1/logs");return new zy({url:Z,headers:W.headers})}function gy($,W){if($==="console")return new yy(new by);if(!W.endpoint)return null;let Z=nj(W.endpoint,"/v1/traces");return new Sy(new My({url:Z,headers:W.headers}))}function my($,W){if($==="console")return new yU({exporter:new Cy,exportIntervalMillis:W.interval,exportTimeoutMillis:W.timeout});if(!W.endpoint)return null;let Z=nj(W.endpoint,"/v1/metrics");return new yU({exporter:new qy({url:Z,headers:W.headers}),exportIntervalMillis:W.interval,exportTimeoutMillis:W.timeout})}function nj($,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 UW=W2(()=>{U1();z6();rj()});var nf={};w(nf,{resolveCoreDistinctId:()=>v0,createOpenTelemetryTelemetryService:()=>AW,createConfiguredTelemetryService:()=>B$,createConfiguredTelemetryHandle:()=>i$,OpenTelemetryProvider:()=>m6,OpenTelemetryAdapter:()=>KW});var bQ=W2(()=>{z6();UW()});import{AgentRuntimeAbortError as wv}from"@cline/agents";import{initVcr as Cv,resolveClineBuildEnv as Pv}from"@cline/shared";import{normalizeProviderId as Tv}from"@cline/llms";var D_={};w(D_,{LocalRuntimeHost:()=>h1});import{readdirSync as Kv}from"node:fs";import{homedir as Fv}from"node:os";import{isAbsolute as Av,join as kY,resolve as IY}from"node:path";import{captureSdkError as e$,createSessionId as Uv,isLikelyAuthError as fv,normalizeUserInput as Dv}from"@cline/shared";import{setHomeDirIfUnset as _v}from"@cline/shared/storage";var NV={};w(NV,{saveProviderOAuthCredentials:()=>J2,resolveProviderApiKeyFromSettings:()=>c7,loginAndSaveProviderOAuthCredentials:()=>B4,isOAuthProvider:()=>Q2,getProviderOAuthCredentialsFromSettings:()=>H4,getProviderAuthStorageId:()=>v7,getProviderAuthHandler:()=>H0,getPersistedProviderApiKey:()=>T8,formatProviderOAuthApiKey:()=>u7});import{decodeJwtPayload as _L,getClineEnvironmentConfig as qV}from"@cline/shared";var XV={};w(XV,{startClineDeviceAuth:()=>h7,refreshClineToken:()=>Q9,loginClineOAuth:()=>W4,getValidClineCredentials:()=>Z4,completeClineDeviceAuth:()=>k7});import{getClineEnvironmentConfig as C7}from"@cline/shared";var uY={};w(uY,{setSdkLogger:()=>E7,sdkDebug:()=>Z0,hashSecret:()=>M0,getSdkLogger:()=>k_});import{createHash as h_}from"node:crypto";var R7;function E7($){R7=$}function k_(){return R7}function M0($){if(typeof $!=="string"||$.length===0)return"unset";return h_("sha256").update($).digest("hex").slice(0,8)}function Z0($){try{R7?.debug($)}catch{}}O0();var sY={};w(sY,{startLocalOAuthServer:()=>G1});function u_(){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??d_,j=u_(),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,_)=>{try{let D=new URL(U.url||"",`http://${Z}:${F}`);if(D.pathname!==$.callbackPath){_.statusCode=404,_.end("Not found");return}let M={url:D,code:D.searchParams.get("code")??void 0,state:D.searchParams.get("state")??void 0,provider:D.searchParams.get("provider")??void 0,error:D.searchParams.get("error")??void 0};if(M.error){_.statusCode=400,_.end(`Authentication failed: ${M.error}`),G(),H(M);return}if(!M.code){_.statusCode=400,_.end("Missing authorization code");return}if($.expectedState&&M.state!==$.expectedState){_.statusCode=400,_.end("State mismatch");return}_.statusCode=200,_.setHeader("Content-Type","text/html; charset=utf-8"),_.end(J),G(),H(M)}catch{_.statusCode=500,_.end("Internal error")}}),f=await new Promise((U)=>{let _=(D)=>{A.off("error",_),U({bound:!1,error:D})};A.once("error",_),A.listen(F,Z,()=>{A.off("error",_),V=A,U({bound:!0})})});if(f.error){if(f.error.code==="EADDRINUSE")continue;throw G(),f.error}if(f.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 d_=`<!DOCTYPE html>
|
|
5
5
|
<html lang="en">
|
|
6
6
|
<head>
|
|
7
7
|
<meta charset="utf-8">
|
|
@@ -42,27 +42,27 @@ import{createRequire as E_}from"node:module";var{defineProperty:M7,getOwnPropert
|
|
|
42
42
|
</div>
|
|
43
43
|
<script>setTimeout(() => window.close(), 3000);</script>
|
|
44
44
|
</body>
|
|
45
|
-
</html>`;function aY($){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 g_($){let Z=new TextEncoder().encode($),Q=await crypto.subtle.digest("SHA-256",Z);return new Uint8Array(Q)}function m_($=32){let W=new Uint8Array($);return crypto.getRandomValues(W),aY(W)}async function eW(){let $=m_(),W=aY(await g_($));return{verifier:$,challenge:W}}function $9($){return $.endsWith("/")?$.slice(0,-1):$}function Z2($,W){return new URL(W,`${$9($)}/`).toString()}function U8($,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 f8($){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 D8($,W){return Date.now()>=$.expires-W}async function _8($){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 U8(W,$.parseOptions);if(await Q,Z)throw Z;if(W)return U8(W,$.parseOptions);return{}}var W9={authorize:"/api/v1/auth/authorize",token:"/api/v1/auth/token",register:"/api/v1/auth/register",refresh:"/api/v1/auth/refresh"},eY={deviceAuthorization:"/user_management/authorize/device",authenticate:"/user_management/authenticate"},C7="https://api.workos.com",v_="/auth",oY=Array.from({length:11},($,W)=>48801+W),c_=300000,u_=30000,L8=30000,d_=300,l_=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 p_($){let W=Date.parse($);if(Number.isNaN(W))throw Error(`Invalid expiresAt value: ${$}`);return W}function P7($,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:p_($.expiresAt),accountId:Q??void 0,email:$.userInfo.email||Z.email,metadata:j}}async function S7($){if(!$)return{};return typeof $==="function"?await $():$}function sY($,W){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return W;return Math.floor($)}async function tY($){await new Promise((W)=>setTimeout(W,$))}function b7($,W){if(!$.success||!$.data?.accessToken)throw Error(W);return $.data}async function $V($,W){let Z=await fetch(Z2(C7,eY.deviceAuthorization),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({client_id:$}),signal:AbortSignal.timeout(W?.requestTimeoutMs??L8)}),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:sY(Q.expires_in,d_),pollIntervalSeconds:sY(Q.interval,l_)}}async function WV($){let W=Date.now()+$.expiresInSeconds*1000,Z=Math.max(1,$.initialPollIntervalSeconds);while(Date.now()<=W){let Q=await fetch(Z2($.workosApiBaseUrl,eY.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 tY(Z*1000);break}case"slow_down":{Z+=1,await tY(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 ZV($,W,Z){let Q={accessToken:$.accessToken,refreshToken:$.refreshToken},J=await fetch(Z2(W.apiBaseUrl,W9.register),{method:"POST",headers:{"Content-Type":"application/json",...await S7(W.headers)},body:JSON.stringify(Q),signal:AbortSignal.timeout(W.requestTimeoutMs??L8)});if(!J.ok){let X=await J.text().catch(()=>""),Y=f8(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 P7(b7(j,"Invalid token exchange response"),Z??W.provider,{metadata:{sessionStartedAtMs:Date.now()}})}async function r_($,W,Z,Q){let J={grant_type:"authorization_code",code:$,client_type:"extension",redirect_uri:W,provider:Q??Z.provider},j=await fetch(Z2(Z.apiBaseUrl,W9.token),{method:"POST",headers:{"Content-Type":"application/json",...await S7(Z.headers)},body:JSON.stringify(J),signal:AbortSignal.timeout(Z.requestTimeoutMs??L8)});if(!j.ok){let Y=await j.text().catch(()=>""),V=f8(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 P7(b7(X,"Invalid token exchange response"),Q??Z.provider,{metadata:{sessionStartedAtMs:Date.now()}})}async function e6($){I1($.telemetry,$.provider??"cline");let W=$.useWorkOSDeviceAuth??!0,Z=$.callbackPorts?.length?$.callbackPorts:oY,Q=$.callbackPath??v_,J=W?null:await H1({ports:Z,callbackPath:Q,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),j=J?.callbackUrl||`http://127.0.0.1:${Z[0]??oY[0]}${Q}`;try{let X;if(W){let Y=w7().workOsClientId,V=await $V(Y,$);$.callbacks.onAuth({url:V.verificationUriComplete??V.verificationUri,instructions:`Enter this code in your browser: ${V.userCode}`});let B=await WV({clientId:Y,deviceCode:V.deviceCode,expiresInSeconds:V.expiresInSeconds,initialPollIntervalSeconds:V.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??L8,workosApiBaseUrl:C7,onProgress:$.callbacks.onProgress});X=await ZV(B,$,$.provider)}else{let Y=new URL(Z2($.apiBaseUrl,W9.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 _8({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=U8(G,{includeProvider:!0});V=K.code,B=K.provider??B}if(!V)throw Error("Missing authorization code");X=await r_(V,j,$,B)}return x1($.telemetry,$.provider??"cline"),B1($.telemetry,{id:X.accountId,email:X.email,provider:$.provider??"cline"}),X}catch(X){throw g1($.telemetry,$.provider??"cline",X instanceof Error?X.message:String(X)),X}finally{J?.close()}}async function y7($){return await $V(w7().workOsClientId,$)}async function h7($){let W=$.provider??"cline";I1($.telemetry,W);try{let Z=await WV({clientId:w7().workOsClientId,deviceCode:$.deviceCode,expiresInSeconds:$.expiresInSeconds,initialPollIntervalSeconds:$.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??L8,workosApiBaseUrl:C7}),Q=await ZV(Z,{apiBaseUrl:$.apiBaseUrl,headers:$.headers,requestTimeoutMs:$.requestTimeoutMs,provider:$.provider},$.provider);return x1($.telemetry,W),B1($.telemetry,{id:Q.accountId,email:Q.email,provider:W}),Q}catch(Z){throw g1($.telemetry,W,Z instanceof Error?Z.message:String(Z)),Z}}async function Z9($,W){let Z=Z2(W.apiBaseUrl,W9.refresh);Z0(`cline.refresh.request url=${Z} refreshTokenHash=${M0($.refresh)}`);let Q=await fetch(Z,{method:"POST",headers:{"Content-Type":"application/json",...await S7(W.headers)},body:JSON.stringify({refreshToken:$.refresh,grantType:"refresh_token"}),signal:AbortSignal.timeout(W.requestTimeoutMs??L8)});if(!Q.ok){let Y=await Q.text().catch(()=>""),V=f8(Y);throw Z0(`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=P7(b7(J,"Invalid token refresh response"),j,$);return Z0(`cline.refresh.success newAccessTokenHash=${M0(X.access)} newRefreshTokenHash=${M0(X.refresh)} expires=${X.expires}`),X}async function $4($,W,Z){if(!$)return Z0("cline.getCredentials outcome=no_current_credentials"),null;let Q=Z?.refreshBufferMs??c_,J=Z?.retryableTokenGraceMs??u_,j=Z?.forceRefresh===!0;if(!j&&!D8($,Q))return Z0(`cline.getCredentials outcome=still_valid forceRefresh=${j}`),$;Z0(`cline.getCredentials outcome=needs_refresh forceRefresh=${j} accessTokenHash=${M0($.access)}`);try{return await Z9($,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 Z0(`cline.getCredentials outcome=invalid_grant status=${X.status} errorCode=${X.errorCode??"none"}`),A$(W.telemetry,W.provider??"cline","invalid_grant",{status:X.status,errorCode:X.errorCode}),null;if($.expires-Date.now()>J)return Z0(`cline.getCredentials outcome=transient_failure_kept_current error=${X instanceof Error?X.message:String(X)}`),E7(W.telemetry,W.provider??"cline",{...Y,tokenExpired:!1}),$;throw Z0(`cline.getCredentials outcome=transient_failure_rethrown error=${X instanceof Error?X.message:String(X)}`),E7(W.telemetry,W.provider??"cline",{...Y,tokenExpired:!0}),X}}O0();var jV={};E(jV,{refreshOpenAICodexToken:()=>J9,loginOpenAICodex:()=>W4,getValidOpenAICodexCredentials:()=>Z4,OPENAI_CODEX_OAUTH_CONFIG:()=>Y0});import{decodeJwtPayload as k7}from"@cline/shared";import{nanoid as i_}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 Q9 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 n_($,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 a_($){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=f8(Q);throw new Q9(`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 Q9)throw W;return{type:"failed"}}}async function o_($="pi"){let{verifier:W,challenge:Z}=await eW(),Q=i_(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 s_(){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 t_($,W){let Z=W?k7(W):k7($),Q=Z?Z:k7($),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 JV($,W){let Z=t_($.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 W4($){I1($.telemetry,"openai-codex");let W=s_(),{verifier:Z,state:Q,url:J}=await o_($.originator),j=await H1({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 _8({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=U8(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 n_(X,Z,W.redirectUri);if(V.type!=="success")throw Error("Token exchange failed");let B=JV(V);return x1($.telemetry,"openai-codex"),B1($.telemetry,{id:B.accountId,email:B.email,provider:"openai-codex"}),B}catch(Y){throw g1($.telemetry,"openai-codex",Y instanceof Error?Y.message:String(Y)),Y}finally{j.close()}}async function J9($,W){let Z=await a_($);if(Z.type!=="success")throw Error("Failed to refresh OpenAI Codex token");let Q=JV(Z,W);if(!Q.refresh)throw Error("Failed to refresh OpenAI Codex token: missing refresh token");return Q}async function Z4($,W){if(!$)return null;let Z=W?.refreshBufferMs??Y0.refreshBufferMs,Q=W?.retryableTokenGraceMs??Y0.retryableTokenGraceMs;if(W?.forceRefresh!==!0&&!D8($,Z))return $;try{return await J9($.refresh,$)}catch(j){if(j instanceof Q9&&j.isLikelyInvalidGrant())return A$(W?.telemetry,"openai-codex","invalid_grant"),null;if($.expires-Date.now()>Q)return $;return null}}O0();var LV={};E(LV,{refreshOcaToken:()=>V9,loginOcaOAuth:()=>j4,getValidOcaCredentials:()=>X4,OCI_HEADER_OPC_REQUEST_ID:()=>e_,DEFAULT_INTERNAL_OCA_BASE_URL:()=>j9,DEFAULT_INTERNAL_IDCS_URL:()=>VV,DEFAULT_INTERNAL_IDCS_SCOPES:()=>BV,DEFAULT_INTERNAL_IDCS_CLIENT_ID:()=>YV,DEFAULT_EXTERNAL_OCA_BASE_URL:()=>X9,DEFAULT_EXTERNAL_IDCS_URL:()=>GV,DEFAULT_EXTERNAL_IDCS_SCOPES:()=>KV,DEFAULT_EXTERNAL_IDCS_CLIENT_ID:()=>HV});import{decodeJwtPayload as Q4}from"@cline/shared";import{nanoid as XV}from"nanoid";class I7{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 YV="a8331954c0cf48ba99b5dd223a14c6ea",VV="https://idcs-9dc693e80d9b469480d7afe00e743931.identity.oraclecloud.com",BV="openid offline_access",j9="https://code-internal.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",HV="c1aba3deed5740659981a752714eba33",GV="https://login-ext.identity.oraclecloud.com",KV="openid offline_access",X9="https://code.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",e_="opc-request-id",$L="/auth/oca",WL=Array.from({length:11},($,W)=>48801+W),ZL=300000,QL=30000,FV=30000,JL=600000;class Y9 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:YV,idcsUrl:VV,scopes:BV,baseUrl:j9},external:{clientId:HV,idcsUrl:GV,scopes:KV,baseUrl:X9}},J4=new Map,jL=86400000,XL=300000,YL=32,x7=new I7(jL,YL);function AV($){if(typeof $==="function")return $();return $??"internal"}function UV($){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 VL($=Date.now()){let W=$-JL;for(let[Z,Q]of J4.entries())if(Q.createdAt<W)J4.delete(Z)}function BL($,W,Z){if(typeof $.expires_in==="number"&&$.expires_in>0)return Date.now()+$.expires_in*1000;let J=Q4(W)?.exp;if(typeof J==="number"&&J>0)return J*1000;let X=Q4(Z)?.exp;if(typeof X==="number"&&X>0)return X*1000;return Date.now()+3600000}function fV($,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=Q4($.id_token),X=Q4(Q),Y=j?.sub??X?.sub,V=j?.email??X?.email;return{access:Q,refresh:J,expires:BL($,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 DV($,W){let Z=$9($),Q=x7.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 x7.set(Z,V,Date.now(),XL),V}let Y=(await j.json()).token_endpoint||`${Z}/oauth2/v1/token`;return x7.set(Z,Y),Y}function _V($){return{code:$.error,message:$.error_description}}async function HL($){let W=J4.get($.state);if(!W)throw Error("No PKCE verifier found for this state");J4.delete($.state);let Z=$.mode==="external"?$.config.external:$.config.internal,Q=await DV(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=_V(X);throw new Y9(`Token exchange failed: ${j.status}${V.message?` - ${V.message}`:""}`,{status:j.status,errorCode:V.code})}let Y=Q4(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 fV(X,$.mode)}function GL($){let W=$.mode==="external"?$.config.external:$.config.internal,Z=new URL(`${$9(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 j4($){I1($.telemetry,"oca");let W=UV($.config),Z=AV($.mode),Q=$.callbackPorts?.length?$.callbackPorts:WL,J=$.callbackPath??$L,j=$.requestTimeoutMs??FV,X=await H1({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=XV(16),B=XV(16),{verifier:H,challenge:G}=await eW();VL(),J4.set(V,{verifier:H,nonce:B,mode:Z,redirectUri:Y,createdAt:Date.now()});let K=GL({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 _8({waitForCallback:X.waitForCallback,cancelWait:X.cancelWait,onManualCodeInput:$.callbacks.onManualCodeInput}),A=F.code,f=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(!f||f!==V)throw Error("State mismatch");let U=await HL({code:A,state:f,mode:Z,config:W,requestTimeoutMs:j});return x1($.telemetry,"oca"),B1($.telemetry,{id:U.accountId,email:U.email,provider:"oca"}),U}catch(F){throw g1($.telemetry,"oca",F instanceof Error?F.message:String(F)),F}finally{X.close()}}async function V9($,W={}){let Z=UV(W.config),Q=W.requestTimeoutMs??FV,J=$.metadata?.mode,j=J==="internal"||J==="external"?J:AV(W.mode),X=j==="external"?Z.external:Z.internal,Y=await DV(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=_V(H);throw new Y9(`Token refresh failed: ${B.status}${G.message?` - ${G.message}`:""}`,{status:B.status,errorCode:G.code})}return fV(H,j,$)}async function X4($,W,Z){if(!$)return null;let Q=W?.refreshBufferMs??Z?.refreshBufferMs??ZL,J=W?.retryableTokenGraceMs??Z?.retryableTokenGraceMs??QL;if(W?.forceRefresh!==!0&&!D8($,Q))return $;try{return await V9($,Z)}catch(X){if(X instanceof Y9&&X.isLikelyInvalidGrant())return A$(Z?.telemetry,"oca","invalid_grant"),null;if($.expires-Date.now()>J)return $;return null}}var B9="workos:";function FL($){let W=$.trim();return W.toLowerCase().startsWith(B9)?W:`${B9}${W}`}function AL($){let W=$.trim();return W.toLowerCase().startsWith(B9)?W.slice(B9.length):W}function UL($){let Z=KL($)?.exp;if(typeof Z==="number"&&Z>0)return Z*1000;return null}function fL($,W){let Z=$.auth?.expiresAt;if(typeof Z==="number"&&Number.isFinite(Z)&&Z>0)return Z;let Q=UL(W);if(Q)return Q;return Date.now()-1}function DL($,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:fL($,J),accountId:$.auth?.accountId,metadata:$.auth?.metadata}}function _L($){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 g7($){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 _L({...Z,storageProviderId:W,formatAccessToken:$.formatAccessToken})},isConfigured(Z){return!!Z?.auth?.accessToken},normalizeStoredAccessToken:$.normalizeStoredAccessToken}}function TV($){return g7({providerId:$.providerId,storageProviderId:$.storageProviderId,formatAccessToken:FL,normalizeStoredAccessToken:AL,login:({settings:W,callbacks:Z,telemetry:Q})=>e6({apiBaseUrl:W?.baseUrl?.trim()||OV().apiBaseUrl,useWorkOSDeviceAuth:!0,callbacks:Z,telemetry:Q}),refresh:({settings:W,credentials:Z,forceRefresh:Q,telemetry:J})=>$4(Z,{apiBaseUrl:W.baseUrl?.trim()||OV().apiBaseUrl,telemetry:J},{forceRefresh:Q})})}var LL=[TV({providerId:"cline"}),TV({providerId:"cline-pass",storageProviderId:"cline"}),g7({providerId:"oca",login:({settings:$,callbacks:W,telemetry:Z})=>j4({mode:$?.oca?.mode,callbacks:W,telemetry:Z}),refresh:({settings:$,credentials:W,forceRefresh:Z,telemetry:Q})=>X4(W,{forceRefresh:Z,telemetry:Q},{mode:$.oca?.mode,telemetry:Q})}),g7({providerId:"openai-codex",login:({callbacks:$,telemetry:W})=>W4({onAuth:$.onAuth,onPrompt:$.onPrompt,onProgress:$.onProgress,onManualCodeInput:$.onManualCodeInput,telemetry:W}),refresh:({credentials:$,forceRefresh:W,telemetry:Z})=>Z4($,{forceRefresh:W,telemetry:Z})})],OL=new Map(LL.map(($)=>[$.providerId,$]));function G0($){return OL.get($.trim().toLowerCase())}function Q2($){return G0($)!==void 0}function m7($){return G0($)?.storageProviderId}function v7($,W){let Z=G0(W),Q=Z?.storageProviderId??W,J=$.getProviderSettings(Q);return Z?.getApiKey(J)??O8(W,J)}async function Y4($,W,Z){let Q=G0(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 V4($,W){let Z=G0($);if(!Z)return null;return DL(W,{normalizeAccessToken:Z.normalizeStoredAccessToken})}function J2($){let W=G0($.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 O8($,W){let Z=G0($);if(Z)return Z.getApiKey(W);return W?.auth?.accessToken?.trim()||W?.apiKey?.trim()||W?.auth?.apiKey?.trim()||void 0}function c7($,W){let Z=G0($);if(!Z)return W.access;return Z.getApiKey({provider:Z.storageProviderId,auth:{accessToken:W.access}})??W.access}O0();var YB={};E(YB,{createContextCompactionPrepareTurn:()=>D4,createCompactionStateAwarePrepareTurn:()=>_4});import{estimateRequestInputTokens as JO}from"@cline/shared";var wV={};E(wV,{projectSessionCompactionState:()=>j2,parseSessionCompactionState:()=>G1,createSessionCompactionState:()=>T8,SessionCompactionStateSchema:()=>B4});import{createHash as TL}from"node:crypto";import{formatDisplayUserInput as qV}from"@cline/shared";import{z as T1}from"zod";function zL($){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 qL=T1.custom(zL),B4=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(qL),system_prompt:T1.string().optional()});function u7($){return JSON.parse(JSON.stringify($))}function MV($){if($.role!=="user")return $;if(typeof $.content==="string")return{...$,content:qV($.content)};return{...$,content:$.content.map((W)=>W.type==="text"?{...W,text:qV(W.text)}:W)}}function RV($){if($.includes(":"))throw TypeError("Message role cannot contain ':' in compaction boundary keys")}function ML($){let W=MV($);return RV(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 NV($){if(!$)return"";let W=MV($);if(typeof W.id==="string"&&W.id.trim())return`id:${W.id.trim()}`;if(RV(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 EV($,W=$.length){let Z=TL("sha256");Z.update(`cline-session-compaction-source-v1
|
|
45
|
+
</html>`;function tY($){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 l_($){let Z=new TextEncoder().encode($),Q=await crypto.subtle.digest("SHA-256",Z);return new Uint8Array(Q)}function p_($=32){let W=new Uint8Array($);return crypto.getRandomValues(W),tY(W)}async function $9(){let $=p_(),W=tY(await l_($));return{verifier:$,challenge:W}}function W9($){return $.endsWith("/")?$.slice(0,-1):$}function Z2($,W){return new URL(W,`${W9($)}/`).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 D8($){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 _8($,W){return Date.now()>=$.expires-W}async function L8($){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 Z9={authorize:"/api/v1/auth/authorize",token:"/api/v1/auth/token",register:"/api/v1/auth/register",refresh:"/api/v1/auth/refresh"},ZV={deviceAuthorization:"/user_management/authorize/device",authenticate:"/user_management/authenticate"},P7="https://api.workos.com",r_="/auth",eY=Array.from({length:11},($,W)=>48801+W),i_=300000,n_=30000,O8=30000,a_=300,o_=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 s_($){let W=Date.parse($);if(Number.isNaN(W))throw Error(`Invalid expiresAt value: ${$}`);return W}function S7($,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:s_($.expiresAt),accountId:Q??void 0,email:$.userInfo.email||Z.email,metadata:j}}async function b7($){if(!$)return{};return typeof $==="function"?await $():$}function $V($,W){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return W;return Math.floor($)}async function WV($){await new Promise((W)=>setTimeout(W,$))}function y7($,W){if(!$.success||!$.data?.accessToken)throw Error(W);return $.data}async function QV($,W){let Z=await fetch(Z2(P7,ZV.deviceAuthorization),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({client_id:$}),signal:AbortSignal.timeout(W?.requestTimeoutMs??O8)}),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:$V(Q.expires_in,a_),pollIntervalSeconds:$V(Q.interval,o_)}}async function JV($){let W=Date.now()+$.expiresInSeconds*1000,Z=Math.max(1,$.initialPollIntervalSeconds);while(Date.now()<=W){let Q=await fetch(Z2($.workosApiBaseUrl,ZV.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 WV(Z*1000);break}case"slow_down":{Z+=1,await WV(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 jV($,W,Z){let Q={accessToken:$.accessToken,refreshToken:$.refreshToken},J=await fetch(Z2(W.apiBaseUrl,Z9.register),{method:"POST",headers:{"Content-Type":"application/json",...await b7(W.headers)},body:JSON.stringify(Q),signal:AbortSignal.timeout(W.requestTimeoutMs??O8)});if(!J.ok){let X=await J.text().catch(()=>""),Y=D8(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 S7(y7(j,"Invalid token exchange response"),Z??W.provider,{metadata:{sessionStartedAtMs:Date.now()}})}async function t_($,W,Z,Q){let J={grant_type:"authorization_code",code:$,client_type:"extension",redirect_uri:W,provider:Q??Z.provider},j=await fetch(Z2(Z.apiBaseUrl,Z9.token),{method:"POST",headers:{"Content-Type":"application/json",...await b7(Z.headers)},body:JSON.stringify(J),signal:AbortSignal.timeout(Z.requestTimeoutMs??O8)});if(!j.ok){let Y=await j.text().catch(()=>""),V=D8(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 S7(y7(X,"Invalid token exchange response"),Q??Z.provider,{metadata:{sessionStartedAtMs:Date.now()}})}async function W4($){g1($.telemetry,$.provider??"cline");let W=$.useWorkOSDeviceAuth??!0,Z=$.callbackPorts?.length?$.callbackPorts:eY,Q=$.callbackPath??r_,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]??eY[0]}${Q}`;try{let X;if(W){let Y=C7().workOsClientId,V=await QV(Y,$);$.callbacks.onAuth({url:V.verificationUriComplete??V.verificationUri,instructions:`Enter this code in your browser: ${V.userCode}`});let B=await JV({clientId:Y,deviceCode:V.deviceCode,expiresInSeconds:V.expiresInSeconds,initialPollIntervalSeconds:V.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??O8,workosApiBaseUrl:P7,onProgress:$.callbacks.onProgress});X=await jV(B,$,$.provider)}else{let Y=new URL(Z2($.apiBaseUrl,Z9.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 L8({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 t_(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 h7($){return await QV(C7().workOsClientId,$)}async function k7($){let W=$.provider??"cline";g1($.telemetry,W);try{let Z=await JV({clientId:C7().workOsClientId,deviceCode:$.deviceCode,expiresInSeconds:$.expiresInSeconds,initialPollIntervalSeconds:$.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??O8,workosApiBaseUrl:P7}),Q=await jV(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 Q9($,W){let Z=Z2(W.apiBaseUrl,Z9.refresh);Z0(`cline.refresh.request url=${Z} refreshTokenHash=${M0($.refresh)}`);let Q=await fetch(Z,{method:"POST",headers:{"Content-Type":"application/json",...await b7(W.headers)},body:JSON.stringify({refreshToken:$.refresh,grantType:"refresh_token"}),signal:AbortSignal.timeout(W.requestTimeoutMs??O8)});if(!Q.ok){let Y=await Q.text().catch(()=>""),V=D8(Y);throw Z0(`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=S7(y7(J,"Invalid token refresh response"),j,$);return Z0(`cline.refresh.success newAccessTokenHash=${M0(X.access)} newRefreshTokenHash=${M0(X.refresh)} expires=${X.expires}`),X}async function Z4($,W,Z){if(!$)return Z0("cline.getCredentials outcome=no_current_credentials"),null;let Q=Z?.refreshBufferMs??i_,J=Z?.retryableTokenGraceMs??n_,j=Z?.forceRefresh===!0;if(!j&&!_8($,Q))return Z0(`cline.getCredentials outcome=still_valid forceRefresh=${j}`),$;Z0(`cline.getCredentials outcome=needs_refresh forceRefresh=${j} accessTokenHash=${M0($.access)}`);try{return await Q9($,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 Z0(`cline.getCredentials outcome=invalid_grant status=${X.status} errorCode=${X.errorCode??"none"}`),U$(W.telemetry,W.provider??"cline","invalid_grant",{status:X.status,errorCode:X.errorCode}),null;if($.expires-Date.now()>J)return Z0(`cline.getCredentials outcome=transient_failure_kept_current error=${X instanceof Error?X.message:String(X)}`),w7(W.telemetry,W.provider??"cline",{...Y,tokenExpired:!1}),$;throw Z0(`cline.getCredentials outcome=transient_failure_rethrown error=${X instanceof Error?X.message:String(X)}`),w7(W.telemetry,W.provider??"cline",{...Y,tokenExpired:!0}),X}}O0();var VV={};w(VV,{refreshOpenAICodexToken:()=>j9,loginOpenAICodex:()=>Q4,getValidOpenAICodexCredentials:()=>J4,OPENAI_CODEX_OAUTH_CONFIG:()=>Y0});import{decodeJwtPayload as I7}from"@cline/shared";import{nanoid as e_}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 J9 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 $L($,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 WL($){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=D8(Q);throw new J9(`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 J9)throw W;return{type:"failed"}}}async function ZL($="pi"){let{verifier:W,challenge:Z}=await $9(),Q=e_(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 QL(){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 JL($,W){let Z=W?I7(W):I7($),Q=Z?Z:I7($),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 YV($,W){let Z=JL($.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 Q4($){g1($.telemetry,"openai-codex");let W=QL(),{verifier:Z,state:Q,url:J}=await ZL($.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 L8({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 $L(X,Z,W.redirectUri);if(V.type!=="success")throw Error("Token exchange failed");let B=YV(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 j9($,W){let Z=await WL($);if(Z.type!=="success")throw Error("Failed to refresh OpenAI Codex token");let Q=YV(Z,W);if(!Q.refresh)throw Error("Failed to refresh OpenAI Codex token: missing refresh token");return Q}async function J4($,W){if(!$)return null;let Z=W?.refreshBufferMs??Y0.refreshBufferMs,Q=W?.retryableTokenGraceMs??Y0.retryableTokenGraceMs;if(W?.forceRefresh!==!0&&!_8($,Z))return $;try{return await j9($.refresh,$)}catch(j){if(j instanceof J9&&j.isLikelyInvalidGrant())return U$(W?.telemetry,"openai-codex","invalid_grant"),null;if($.expires-Date.now()>Q)return $;return null}}O0();var zV={};w(zV,{refreshOcaToken:()=>B9,loginOcaOAuth:()=>Y4,getValidOcaCredentials:()=>V4,OCI_HEADER_OPC_REQUEST_ID:()=>jL,DEFAULT_INTERNAL_OCA_BASE_URL:()=>X9,DEFAULT_INTERNAL_IDCS_URL:()=>GV,DEFAULT_INTERNAL_IDCS_SCOPES:()=>KV,DEFAULT_INTERNAL_IDCS_CLIENT_ID:()=>HV,DEFAULT_EXTERNAL_OCA_BASE_URL:()=>Y9,DEFAULT_EXTERNAL_IDCS_URL:()=>AV,DEFAULT_EXTERNAL_IDCS_SCOPES:()=>UV,DEFAULT_EXTERNAL_IDCS_CLIENT_ID:()=>FV});import{decodeJwtPayload as j4}from"@cline/shared";import{nanoid as BV}from"nanoid";class x7{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 HV="a8331954c0cf48ba99b5dd223a14c6ea",GV="https://idcs-9dc693e80d9b469480d7afe00e743931.identity.oraclecloud.com",KV="openid offline_access",X9="https://code-internal.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",FV="c1aba3deed5740659981a752714eba33",AV="https://login-ext.identity.oraclecloud.com",UV="openid offline_access",Y9="https://code.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",jL="opc-request-id",XL="/auth/oca",YL=Array.from({length:11},($,W)=>48801+W),VL=300000,BL=30000,fV=30000,HL=600000;class V9 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 D$={internal:{clientId:HV,idcsUrl:GV,scopes:KV,baseUrl:X9},external:{clientId:FV,idcsUrl:AV,scopes:UV,baseUrl:Y9}},X4=new Map,GL=86400000,KL=300000,FL=32,g7=new x7(GL,FL);function DV($){if(typeof $==="function")return $();return $??"internal"}function _V($){return{internal:{clientId:$?.internal?.clientId??D$.internal.clientId,idcsUrl:$?.internal?.idcsUrl??D$.internal.idcsUrl,scopes:$?.internal?.scopes??D$.internal.scopes,baseUrl:$?.internal?.baseUrl??D$.internal.baseUrl},external:{clientId:$?.external?.clientId??D$.external.clientId,idcsUrl:$?.external?.idcsUrl??D$.external.idcsUrl,scopes:$?.external?.scopes??D$.external.scopes,baseUrl:$?.external?.baseUrl??D$.external.baseUrl}}}function AL($=Date.now()){let W=$-HL;for(let[Z,Q]of X4.entries())if(Q.createdAt<W)X4.delete(Z)}function UL($,W,Z){if(typeof $.expires_in==="number"&&$.expires_in>0)return Date.now()+$.expires_in*1000;let J=j4(W)?.exp;if(typeof J==="number"&&J>0)return J*1000;let X=j4(Z)?.exp;if(typeof X==="number"&&X>0)return X*1000;return Date.now()+3600000}function LV($,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=j4($.id_token),X=j4(Q),Y=j?.sub??X?.sub,V=j?.email??X?.email;return{access:Q,refresh:J,expires:UL($,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 OV($,W){let Z=W9($),Q=g7.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 g7.set(Z,V,Date.now(),KL),V}let Y=(await j.json()).token_endpoint||`${Z}/oauth2/v1/token`;return g7.set(Z,Y),Y}function TV($){return{code:$.error,message:$.error_description}}async function fL($){let W=X4.get($.state);if(!W)throw Error("No PKCE verifier found for this state");X4.delete($.state);let Z=$.mode==="external"?$.config.external:$.config.internal,Q=await OV(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=TV(X);throw new V9(`Token exchange failed: ${j.status}${V.message?` - ${V.message}`:""}`,{status:j.status,errorCode:V.code})}let Y=j4(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 LV(X,$.mode)}function DL($){let W=$.mode==="external"?$.config.external:$.config.internal,Z=new URL(`${W9(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 Y4($){g1($.telemetry,"oca");let W=_V($.config),Z=DV($.mode),Q=$.callbackPorts?.length?$.callbackPorts:YL,J=$.callbackPath??XL,j=$.requestTimeoutMs??fV,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=BV(16),B=BV(16),{verifier:H,challenge:G}=await $9();AL(),X4.set(V,{verifier:H,nonce:B,mode:Z,redirectUri:Y,createdAt:Date.now()});let K=DL({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 L8({waitForCallback:X.waitForCallback,cancelWait:X.cancelWait,onManualCodeInput:$.callbacks.onManualCodeInput}),A=F.code,f=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(!f||f!==V)throw Error("State mismatch");let U=await fL({code:A,state:f,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 B9($,W={}){let Z=_V(W.config),Q=W.requestTimeoutMs??fV,J=$.metadata?.mode,j=J==="internal"||J==="external"?J:DV(W.mode),X=j==="external"?Z.external:Z.internal,Y=await OV(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=TV(H);throw new V9(`Token refresh failed: ${B.status}${G.message?` - ${G.message}`:""}`,{status:B.status,errorCode:G.code})}return LV(H,j,$)}async function V4($,W,Z){if(!$)return null;let Q=W?.refreshBufferMs??Z?.refreshBufferMs??VL,J=W?.retryableTokenGraceMs??Z?.retryableTokenGraceMs??BL;if(W?.forceRefresh!==!0&&!_8($,Q))return $;try{return await B9($,Z)}catch(X){if(X instanceof V9&&X.isLikelyInvalidGrant())return U$(Z?.telemetry,"oca","invalid_grant"),null;if($.expires-Date.now()>J)return $;return null}}var H9="workos:";function LL($){let W=$.trim();return W.toLowerCase().startsWith(H9)?W:`${H9}${W}`}function OL($){let W=$.trim();return W.toLowerCase().startsWith(H9)?W.slice(H9.length):W}function TL($){let Z=_L($)?.exp;if(typeof Z==="number"&&Z>0)return Z*1000;return null}function zL($,W){let Z=$.auth?.expiresAt;if(typeof Z==="number"&&Number.isFinite(Z)&&Z>0)return Z;let Q=TL(W);if(Q)return Q;return Date.now()-1}function qL($,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:zL($,J),accountId:$.auth?.accountId,metadata:$.auth?.metadata}}function ML($){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 m7($){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 ML({...Z,storageProviderId:W,formatAccessToken:$.formatAccessToken})},isConfigured(Z){return!!Z?.auth?.accessToken},normalizeStoredAccessToken:$.normalizeStoredAccessToken}}function MV($){return m7({providerId:$.providerId,storageProviderId:$.storageProviderId,formatAccessToken:LL,normalizeStoredAccessToken:OL,login:({settings:W,callbacks:Z,telemetry:Q})=>W4({apiBaseUrl:W?.baseUrl?.trim()||qV().apiBaseUrl,useWorkOSDeviceAuth:!0,callbacks:Z,telemetry:Q}),refresh:({settings:W,credentials:Z,forceRefresh:Q,telemetry:J})=>Z4(Z,{apiBaseUrl:W.baseUrl?.trim()||qV().apiBaseUrl,telemetry:J},{forceRefresh:Q})})}var NL=[MV({providerId:"cline"}),MV({providerId:"cline-pass",storageProviderId:"cline"}),m7({providerId:"oca",login:({settings:$,callbacks:W,telemetry:Z})=>Y4({mode:$?.oca?.mode,callbacks:W,telemetry:Z}),refresh:({settings:$,credentials:W,forceRefresh:Z,telemetry:Q})=>V4(W,{forceRefresh:Z,telemetry:Q},{mode:$.oca?.mode,telemetry:Q})}),m7({providerId:"openai-codex",login:({callbacks:$,telemetry:W})=>Q4({onAuth:$.onAuth,onPrompt:$.onPrompt,onProgress:$.onProgress,onManualCodeInput:$.onManualCodeInput,telemetry:W}),refresh:({credentials:$,forceRefresh:W,telemetry:Z})=>J4($,{forceRefresh:W,telemetry:Z})})],RL=new Map(NL.map(($)=>[$.providerId,$]));function H0($){return RL.get($.trim().toLowerCase())}function Q2($){return H0($)!==void 0}function v7($){return H0($)?.storageProviderId}function c7($,W){let Z=H0(W),Q=Z?.storageProviderId??W,J=$.getProviderSettings(Q);return Z?.getApiKey(J)??T8(W,J)}async function B4($,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 H4($,W){let Z=H0($);if(!Z)return null;return qL(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 T8($,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 u7($,W){let Z=H0($);if(!Z)return W.access;return Z.getApiKey({provider:Z.storageProviderId,auth:{accessToken:W.access}})??W.access}O0();var HB={};w(HB,{createContextCompactionPrepareTurn:()=>L4,createCompactionStateAwarePrepareTurn:()=>O4});import{estimateRequestInputTokens as HO}from"@cline/shared";var SV={};w(SV,{projectSessionCompactionState:()=>j2,parseSessionCompactionState:()=>K1,createSessionCompactionState:()=>z8,SessionCompactionStateSchema:()=>G4});import{createHash as EL}from"node:crypto";import{formatDisplayUserInput as RV}from"@cline/shared";import{z as z1}from"zod";function wL($){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 CL=z1.custom(wL),G4=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(CL),system_prompt:z1.string().optional()});function d7($){return JSON.parse(JSON.stringify($))}function EV($){if($.role!=="user")return $;if(typeof $.content==="string")return{...$,content:RV($.content)};return{...$,content:$.content.map((W)=>W.type==="text"?{...W,text:RV(W.text)}:W)}}function wV($){if($.includes(":"))throw TypeError("Message role cannot contain ':' in compaction boundary keys")}function PL($){let W=EV($);return wV(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 CV($){if(!$)return"";let W=EV($);if(typeof W.id==="string"&&W.id.trim())return`id:${W.id.trim()}`;if(wV(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 PV($,W=$.length){let Z=EL("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(PL(Q))),Z.update(`
|
|
48
|
+
`);return`sha256:${Z.digest("hex")}`}function z8($){let W=$.sourceMessages.at(-1),Z=CV(W);return G4.parse({version:1,updated_at:$.updatedAt??new Date().toISOString(),...$.conversationId?.trim()?{conversation_id:$.conversationId.trim()}:{},source_message_count:$.sourceMessages.length,source_prefix_hash:PV($.sourceMessages),...Z?{source_last_message_key:Z}:{},messages:d7($.compactedMessages),...$.systemPrompt!==void 0?{system_prompt:$.systemPrompt}:{}})}function j2($,W){if(!($.source_message_count<=W.length))return;let Q=!!$.source_prefix_hash&&PV(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&&CV(J)===$.source_last_message_key;if(!(Q||j))return;return[...d7($.messages),...d7(W.slice($.source_message_count))]}function K1($){let W=G4.safeParse($);return W.success?W.data:void 0}import{createHandlerAsync as oL}from"@cline/llms";function SL($){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 bV($){return $.map((W)=>({...W,content:Array.isArray(W.content)?W.content.map((Z)=>({...Z})):W.content,...W.metadata?{metadata:{...W.metadata}}:{}}))}function q1($){try{return JSON.stringify($).length}catch{return String($).length}}function G9($,W){return $.reduce((Z,Q)=>Z+W(Q),0)}function IV($){return $.role==="user"&&Array.isArray($.content)&&$.content.length>0&&$.content.every((W)=>W.type==="tool_result")}function K9($){for(let W=$.length-1;W>=0;W-=1){let Z=$[W];if(Z.role==="user"&&!IV(Z))return W}return-1}function bL($){for(let W=0;W<$.length;W+=1){let Z=$[W];if(Z.role==="user"&&!IV(Z))return W}return-1}function p7($){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 yL($){let W=new Map;for(let Z=0;Z<$.length;Z+=1)for(let Q of p7($[Z])){let J=W.get(Q);if(J)J.add(Z);else W.set(Q,new Set([Z]))}return W}function l7($){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 hL($,W){let Z=yL($),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 p7($[j]))for(let Y of Z.get(X)??[])if(!Q.has(Y))J.push(Y)}return Q}function kL($){return $.type==="image"||$.type==="redacted_thinking"}function IL($){return $.type==="image"}function xL($,W,Z){if(W.dropThinkingBlocks&&$.type==="thinking")return!0;return W.dropUnsafeOutsideLiveTail&&!Z&&kL($)}function yV($,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:q1(Y),finalSize:0});continue}J.push(Y),j.push(W[X])}return{messages:J,originalIndexes:j}}function gL($,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(xL(G,j,B))return V=!0,Z.push({kind:"dropped_block",path:{messageIndex:W[Y],blockIndex:K},reason:"unsafe_to_truncate",originalSize:q1(G),finalSize:0}),[];if(G.type==="tool_result"&&Array.isArray(G.content)){let F=G.content.filter((A)=>{if(j.dropUnsafeOutsideLiveTail&&!B&&IL(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:q1(G),finalSize:q1(A)}),[A]}}return[G]});return V?{...X,content:H}:X})}function mL($,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:q1(Y),finalSize:0}),!1});return j?{...Q,content:X}:Q})}function q8($,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 hV($,W){if(typeof $==="string")return q8($,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=q8(Q.text,Z);return Z-=J.length,{...Q,text:J}}if(Q.type==="file"){let J=q8(Q.content,Z);return Z-=J.length,{...Q,content:J}}return Q})}function vL($){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 cL($,W){if(typeof $.content==="string")return{...$,content:q8($.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:hV(Q.content,0)};return Q}if(Q.type==="text"){let J=q8(Q.text,Z);return Z-=J.length,{...Q,text:J}}if(Q.type==="file"){let J=q8(Q.content,Z);return Z-=J.length,{...Q,content:J}}if(Q.type==="tool_result"){let J=hV(Q.content,Z);return Z-=vL(J),{...Q,content:J}}return Q})}}function uL($){if(typeof $.content==="string")return $.content.length>0;return $.content.some((W)=>W.type==="text"||W.type==="file"||W.type==="tool_result")}function dL($,W,Z){return{messages:$.filter((Q,J)=>!Z.has(J)),originalIndexes:W.filter((Q,J)=>!Z.has(J))}}function lL($,W){if(W<0)return!1;for(let Z of $)if(Z>=W)return!0;return!1}function kV($,W){return W>=0&&$.has(W)}function K4($){let W=[],Z=[],Q=SL($.policyIntent);if($.targetTokens<=0)return{status:"failed",messages:bV($.messages),actions:W,liveTailHandling:"preserved_out_of_band",estimatedTokens:G9($.messages,$.estimateMessageTokens),warnings:[{code:"budget_impossible",message:"Target budget must be greater than zero."}]};let J=bV($.messages),j=J.map((B,H)=>H);if(Q.dropThinkingBlocks){let B=yV(mL(J,j,W),j,W,"unsafe_to_truncate");J=B.messages,j=B.originalIndexes}let X=Q.protectLatestTypedUser?K9(J):-1,Y=Q.protectLiveTailFromDrop?l7(J):J.length;if(Q.dropUnsafeOutsideLiveTail){let B=yV(gL(J,j,W,X,Y,Q),j,W);J=B.messages,j=B.originalIndexes}let V=G9(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=K9(J);if(B===H)continue;if(Q.protectLiveTailFromDrop&&B>=l7(J))continue;if(!uL(J[B]))continue;let G=q1(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]=cL(J[B],F),W.push({kind:"truncated_text",path:{messageIndex:j[B]},reason:"over_budget",originalSize:G,finalSize:q1(J[B])}),V=G9(J,$.estimateMessageTokens)}for(let B=0;B<J.length&&V>$.targetTokens;){let H=bL(J),G=K9(J),K=Q.protectLiveTailFromDrop?l7(J):J.length;if(B===H||B===G){W.push({kind:"preserved",path:{messageIndex:j[B]},reason:"protected_live_tail",originalSize:q1(J[B]),finalSize:q1(J[B])}),B+=1;continue}let F=hL(J,B);if(kV(F,H)){B+=1;continue}if(kV(F,G)){B+=1;continue}if(lL(F,K)){B+=1;continue}for(let f of F)W.push({kind:"dropped_message",path:{messageIndex:j[f]},reason:F.size>1||p7(J[f]).size>0?"tool_pair_boundary":"over_budget",originalSize:q1(J[f]),finalSize:0});let A=dL(J,j,F);J=A.messages,j=A.originalIndexes,V=G9(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 Fc,estimateTokens as F9}from"@cline/shared";var vV=128000,pL=0.9,X2=0.9,cV=0.7,uV=20000,xV=1024,gV=2000,dV=2000,lV=8;function mV($){return typeof $==="number"&&Number.isFinite($)&&$>0}function f4($){let W=mV($.contextWindow)?$.contextWindow:void 0,Z=mV($.maxInputTokens)?$.maxInputTokens:void 0;if(Z!==void 0)return W===void 0?Z:Math.min(Z,W);return W===void 0?void 0:W*pL}function U4($,W){if($.length<=W)return $;return`${$.slice(0,W)}
|
|
51
|
+
...[truncated ${$.length-W} chars]`}function rL($){let W=r7($);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 r7($){if(typeof $==="string")return U4($,gV);return $.map((W)=>{switch(W.type){case"text":return{...W,text:U4(W.text,gV)};case"file":return{...W,content:U4(W.content,dV)};case"image":return W;default:return W}})}function iL($){return Object.entries($).map(([W,Z])=>`${W}=${JSON.stringify(Z)}`).join(", ")}function pV($){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]: ${U4(Z.thinking,2000)}`);break;case"redacted_thinking":W.push("[Bot thinking]: [redacted]");break;case"tool_use":W.push(`[Bot tool calls]: ${Z.name}(${iL(Z.input)})`);break;case"tool_result":W.push(`[Tool result]: ${rL(Z.content)}`);break;case"file":W.push(`[${$.role==="user"?"User":"Bot"} file ${Z.path}]: ${U4(Z.content,dV)}`);break;case"image":W.push(`[${$.role==="user"?"User":"Bot"} image]: ${Z.mediaType}`);break}return W.join(`
|
|
55
|
+
`)}function rV($){return $.map(pV).join(`
|
|
56
56
|
|
|
57
|
-
`).trim()}function
|
|
57
|
+
`).trim()}function iV(){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=pV(W)}let j=F9(J.length);return $.set(Z,j),j}}function D4($){return $.metadata?.kind==="compaction_summary"}function i7($){if(!D4($))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 nL($){if($.role!=="user"||!Array.isArray($.content))return!1;return $.content.length>0&&$.content.every((W)=>W.type==="tool_result")}function _4($){return $.role==="user"&&!nL($)&&!D4($)}function nV($){for(let W=0;W<$.length;W+=1)if(_4($[W]))return W;return-1}function A9($){for(let W=$.length-1;W>=0;W-=1)if(_4($[W]))return W;return 0}function aV($){for(let W=$.length-1;W>=0;W-=1)if($[W].role==="assistant")return W;return-1}function oV($){for(let W=$.length-1;W>=0;W-=1)if(D4($[W]))return W;return-1}function sV($,W,Z){let Q=A9($);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&&!_4($[X]))X-=1;return X}function A4($){if(typeof $==="string"&&$.trim().length>0)return[$];if(Array.isArray($))return $.flatMap((W)=>A4(W));if($&&typeof $==="object"){let W=$,Z=[];for(let Q of["path","file_path","target_file","new_file_path","old_file_path"])Z.push(...A4(W[Q]));if(Array.isArray(W.files)){for(let Q of W.files)if(Q&&typeof Q==="object")Z.push(...A4(Q.path))}if(Array.isArray(W.file_paths))Z.push(...A4(W.file_paths));return Z}return[]}function F4($,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 n7($){let W=[],Z=[];for(let Q of $){let J=i7(Q);if(J){W=F4(W,J.details.readFiles),Z=F4(Z,J.details.modifiedFiles);continue}if(!Array.isArray(Q.content))continue;for(let j of Q.content){if(j.type==="file"){W=F4(W,[j.path]);continue}if(j.type!=="tool_use")continue;let X=A4(j.input);if(j.name==="read_files"){W=F4(W,X);continue}if(j.name==="editor"||j.name==="apply_patch")Z=F4(Z,X)}}return{readFiles:W,modifiedFiles:Z}}function aL($){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 tV($,W){if(/^## Files$/im.test($))return $.trim();return`${$.trim()}
|
|
64
64
|
|
|
65
|
-
${
|
|
65
|
+
${aL(W)}`.trim()}function a7($){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 eV($){let W=$.summarizer,Z=(J)=>{if(J.providerId==="openai-codex"){let{maxOutputTokens:j,...X}=J;return{...X,thinking:!1}}return{...J,maxOutputTokens:J.maxOutputTokens??xV,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??xV})}function $B($){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 WB($,W){let Z=Number.isFinite(W)?Math.max(1,W):1,Q=Math.max(16,Z*aL);if(typeof $.content==="string"){let X=$B($.content,Q).trim();return{...$,content:X||"..."}}let J=Q,j=$.content.map((X)=>{if(X.type!=="text"||J<=0)return X;let Y=$B(X.text,J).trim();return J-=Y.length,{...X,text:Y||"..."}});return{...$,content:j}}function sL($,W){let Z=pV($),Q=F9($),J=rV($),j=[],X=0;for(let Y=0;Y<$.length;Y+=1){let V=oL($[Y]);if(!V)continue;let B=W(V);X+=B,j.push({index:Y,message:V,estimatedTokens:B,toolPairIds:QB(V),isFirstUser:Y===Z,isLastUser:Y===Q,isLastAssistant:Y===J})}return{candidates:j,totalTokens:X}}function ZB($,W,Z,Q){let J=$[W],j=J.estimatedTokens;return J.message=Z,J.estimatedTokens=Q(Z),J.toolPairIds=QB(Z),J.estimatedTokens-j}function QB($){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 tL($){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 eL($,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 $O($,W){let Z=0;for(let Q of $){if(W.has(Q))continue;$[Z]=Q,Z+=1}$.length=Z}function A9($,W,Z,Q){let J=new Set($),j=tL($);for(let X=0;X<$.length&&Q>Z;){if(!W($[X])){X+=1;continue}let Y=eL(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,$O($,Y)}return Q}function WO($,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(cV,Y.estimatedTokens-(Z-W));if(V>=Y.estimatedTokens)continue;Z+=ZB($,X,WB(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+=ZB($,j,WB(Y.message,V),J),Y.estimatedTokens>=B)break}}return Z}function ZO($,W){return JSON.stringify($)!==JSON.stringify(W)}function QO($){let W=F9($);if(W<0||W===0&&!f4($[0]))return{compactable:$,protectedTail:[]};return{compactable:$.slice(0,W),protectedTail:$.slice(W)}}function JB($){let W=Math.max(1,Math.min($.context.budget.messages.targetTokens,$.context.budget.messages.triggerTokens)),{compactable:Z,protectedTail:Q}=QO($.context.messages);if(Z.length===0)return;let J=eV(Q,$.estimateMessageTokens),j=Math.max(1,W-J),X=sL(Z,$.estimateMessageTokens),{candidates:Y}=X;if(Y.length===0)return;let V=X.totalTokens,B=V;B=A9(Y,(U)=>U.message.role==="assistant"&&!U.isLastAssistant,j,B),B=A9(Y,(U)=>U.message.role==="user"&&!U.isFirstUser&&!U.isLastUser,j,B),B=A9(Y,(U)=>U.message.role==="assistant"&&U.isLastAssistant,j,B),B=A9(Y,(U)=>U.message.role==="user"&&U.isLastUser&&!U.isFirstUser,j,B),B=WO(Y,j,B,$.context.budget.messages.triggerTokens,$.estimateMessageTokens);let H=[...Y.map((U)=>U.message),...Q],G=H4({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(!ZO($.context.messages,K))return;let F=V+J,A=eV(K,$.estimateMessageTokens),f=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:f,budgetWarnings:G.warnings.map((U)=>U.code),targetTokens:W,maxInputTokens:$.context.budget.request.maxInputTokens}),{messages:K,budget:{policyIntent:"basic_compaction_projection",actionCount:f,warningCount:G.warnings.length,liveTailHandling:G.liveTailHandling}}}var jO=0.5;function XB($){try{return JSON.stringify($).length}catch{return String($).length}}function XO($){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=XB(j.content);W+=1,Z+=X,Q=Math.max(Q,X)}}return{toolResultCount:W,toolResultSerializedChars:Z,maxToolResultSerializedChars:Q}}var YO={basic:({context:$,estimateMessageTokens:W,logger:Z})=>JB({context:$,estimateMessageTokens:W,logger:Z}),agentic:({context:$,providerConfig:W,compaction:Z,estimateMessageTokens:Q,logger:J})=>tV({context:$,providerConfig:W,summarizer:Z?.summarizer,preserveRecentTokens:Math.min(Z?.preserveRecentTokens??mV,$.budget.messages.targetTokens),estimateMessageTokens:Q,logger:J})};function VO($){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 BO($){let W=$.messagePairCount>=5&&typeof $.modelMaxTokens==="number"&&Number.isFinite($.modelMaxTokens)&&$.modelMaxTokens<$.maxInputTokens?Math.floor($.maxInputTokens*jO):Math.floor($.triggerTokens*gV),Z=Math.max(1,$.triggerTokens-1);return Math.max(1,Math.min(W,$.maxInputTokens,Z))}function jB($,W){return Math.max(1,Math.floor($-W))}function HO($){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 D4($,W={}){let Z=$.compaction;if(Z?.enabled!==!0)return;let Q=$.providerConfig??{providerId:$.providerId,modelId:$.modelId},J=lV(),j=Z?.strategy??"basic",X=YO[j],Y=W.mode??"auto",V=Z?.compact?"custom":j;return async(B)=>{let H=B.apiMessages.reduce((n,o)=>n+J(o),0),G=JO({systemPrompt:B.systemPrompt,messages:B.apiMessages,tools:B.tools}),K=B.messages.reduce((n,o)=>n+J(o),0),F=Math.max(0,G-H),A=A4({maxInputTokens:B.model.info?.maxInputTokens,contextWindow:B.model.info?.contextWindow})??xV,f=A*X2,U=jB(f,F),_=G>=f;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:f,messageTriggerTokens:U,thresholdRatio:X2,shouldCompact:_,messageCount:B.messages.length,apiMessageCount:B.apiMessages.length,apiMessagesJsonChars:XB(B.apiMessages),...XO(B.apiMessages)}),Y==="auto"&&!_)return;let D,M;if(Y==="auto")D=BO({maxInputTokens:A,modelMaxTokens:B.model.info?.maxTokens,triggerTokens:f,messagePairCount:HO(B.messages)}),M=jB(D,F);else M=VO({messageInputTokens:K,messageTriggerTokens:U,manualTargetRatio:W.manualTargetRatio}),D=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:f,targetTokens:D,overheadTokens:F,thresholdRatio:X2,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,iteration:B.iteration,triggerTokens:f,targetTokens:D,maxInputTokens:A,messageTargetTokens:M});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}),y=Date.now()-C,P=$.sessionId??B.conversationId,d={agentId:B.agentId,conversationId:B.conversationId,parentAgentId:B.parentAgentId??void 0};if(N?.messages){let n=N.messages.reduce((G$,h1)=>G$+J(h1),0),o=F+n;if($.logger?.log("Context compaction completed",{severity:"info",strategy:j,maxInputTokens:A,messageInputTokens:K,apiInputTokens:H,requestInputTokens:G,requestOverheadTokens:F,afterMessageTokens:n,afterRequestTokens:o,tokensSaved:G-o,utilizationBefore:`${(G/A*100).toFixed(1)}%`,utilizationAfter:`${(o/A*100).toFixed(1)}%`,thresholdTrigger:`${(X2*100).toFixed(1)}%`,messagesBefore:L,messagesAfter:N.messages.length,messagesRemoved:L-N.messages.length}),sW($.telemetry,{ulid:P,strategy:V,mode:Y,messagesBefore:L,messagesAfter:N.messages.length,messagesRemoved:L-N.messages.length,tokensBefore:G,tokensAfter:o,tokensSaved:G-o,triggerTokens:f,maxInputTokens:A,thresholdRatio:X2,durationMs:y,provider:$.providerId,modelId:$.modelId,...d}),N.budget&&(N.budget.actionCount>0||N.budget.warningCount>0))iY($.telemetry,{ulid:P,strategy:V,mode:Y,policyIntent:N.budget.policyIntent,actionCount:N.budget.actionCount,warningCount:N.budget.warningCount,liveTailHandling:N.budget.liveTailHandling,provider:$.providerId,modelId:$.modelId,...d}),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 tW($.telemetry,{ulid:P,strategy:V,mode:Y,reason:"no_result",tokensBefore:G,triggerTokens:f,maxInputTokens:A,thresholdRatio:X2,durationMs:y,provider:$.providerId,modelId:$.modelId,...d});return N}}function _4($){return async(W)=>{let Z=$.getState?.(),Q=Z?j2(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=T8({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=T8({sourceMessages:W.messages,compactedMessages:J.messages,conversationId:W.conversationId,systemPrompt:J.systemPrompt});await $.saveState?.(j)}return J}}var nH={};E(nH,{zodToJsonSchema:()=>Tq,validateWithZod:()=>Oq,truncateCommandOutput:()=>H2,resolveToolRoutingConfig:()=>b8,resolveToolPresetName:()=>l1,resolveCoreSelectedToolIds:()=>v9,getCoreHeadlessToolNames:()=>v4,getCoreDefaultEnabledToolIds:()=>m9,getCoreBuiltinToolCatalog:()=>M2,getCoreAcpToolNames:()=>c9,createWebFetchTool:()=>W3,createWebFetchExecutor:()=>S4,createToolPoliciesWithPreset:()=>M9,createSubmitAndExitTool:()=>j3,createSkillsTool:()=>K2,createShellTool:()=>w4,createShellExecutor:()=>G2,createSearchTool:()=>$3,createSearchExecutor:()=>P4,createReadFilesTool:()=>e7,createFileReadExecutor:()=>C4,createEditorTool:()=>Q3,createEditorExecutor:()=>U2,createDefaultToolsWithPreset:()=>R9,createDefaultTools:()=>T$,createDefaultShellExecutor:()=>b4,createDefaultExecutors:()=>P8,createBuiltinTools:()=>R2,createAskQuestionTool:()=>J3,createApplyPatchTool:()=>Z3,createApplyPatchExecutor:()=>A2,computePatchChanges:()=>E8,WebFetchRequestSchema:()=>o7,ToolPresets:()=>o0,TEAM_TOOL_NAMES:()=>k8,SubmitInputSchema:()=>E4,StructuredCommandInputSchema:()=>V2,SkillsInputSchema:()=>R4,SearchCodebaseInputSchema:()=>O4,RunCommandsInputSchema:()=>T4,ReadFilesInputSchema:()=>L4,ReadFileRequestSchema:()=>D9,PatchActionType:()=>F2,MAX_COMMAND_OUTPUT_CHARS:()=>v1,FetchWebContentInputSchema:()=>z4,EditFileInputSchema:()=>q4,DefaultToolNames:()=>T0,DEFAULT_MODEL_TOOL_ROUTING_RULES:()=>S8,CommandExitError:()=>c1,AskQuestionInputSchema:()=>N4,ApplyPatchInputSchema:()=>M4,ALL_DEFAULT_TOOL_NAMES:()=>D$});import{validateWithZod as Oq,zodToJsonSchema as Tq}from"@cline/shared";var T0={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"},D$=[T0.READ_FILES,T0.SEARCH_CODEBASE,T0.RUN_COMMANDS,T0.FETCH_WEB_CONTENT,T0.APPLY_PATCH,T0.EDITOR,T0.SKILLS,T0.ASK,T0.SUBMIT_AND_EXIT];O0();import{createTool as L$,validateWithZod as O$,zodToJsonSchema as u1}from"@cline/shared";var VB="__clineInternalTelemetry";function BB($){let W=$?.__clineInternalTelemetry;return W&&typeof W==="object"&&"capture"in W&&typeof W.capture==="function"?W:void 0}import{spawn as zB}from"node:child_process";import{StringDecoder as fO}from"node:string_decoder";import{getDefaultShell as DO,getShellArgs as _O}from"@cline/shared";import{validateWithZod as KO}from"@cline/shared";import{z}from"zod";var _$=6000,Y2=z.string().describe("The absolute path of a text file to read content from"),U9=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"),D9=z.object({path:Y2,start_line:U9.shape.start_line,end_line:U9.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"),L4=z.object({files:z.array(D9).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.")}),HB={start_line:U9.shape.start_line,end_line:U9.shape.end_line},q8=z.union([D9,z.object({file_path:Y2,...HB}).transform(({file_path:$,...W})=>({path:$,...W})),z.object({filePath:Y2,...HB}).transform(({filePath:$,...W})=>({path:$,...W}))]),GB=z.union([L4,q8,z.array(q8),z.array(z.string()),z.string(),z.object({files:z.array(z.union([Y2,q8]))}),z.object({files:q8}),z.object({files:Y2}),z.object({file_paths:z.array(Y2)}),z.object({file_paths:z.string()}),z.object({paths:z.array(z.union([Y2,q8]))}),z.object({paths:q8}),z.object({paths:z.string()})]),O4=z.object({queries:z.array(z.string()).describe("Array of regex search queries to execute")}),KB=z.union([O4,z.array(z.string()),z.string(),z.object({queries:z.string()})]),f9=z.string().describe(`The non-interactive shell command to execute - MUST keep input short and concise (within ${_$*2} characters) to avoid timeouts.`),V2=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.")}),FB=z.union([f9,V2]),T4=z.object({commands:z.array(f9).describe("Array of complete shell command strings to execute.")}),GO=z.object({commands:z.array(FB)}),AB=z.union([T4,GO,z.object({commands:FB}),z.array(V2),V2,z.object({command:f9}),z.object({cmd:f9}),z.array(z.string()),z.string()]),o7=z.object({url:z.string().describe("The URL to fetch"),prompt:z.string().min(2).describe("Analysis prompt for the fetched content")}),z4=z.object({requests:z.array(o7).describe("Array of the URLs for the web fetch requests")}),q4=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 ${_$} 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 ${_$} 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."),M4=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."),UB=z.union([M4,z.string()]),R4=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")}),N4=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")}),E4=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 o7=1024;function sL($){let W=f4({maxInputTokens:$.maxInputTokens??$.modelInfo?.maxInputTokens,contextWindow:$.modelInfo?.contextWindow});if(W!==void 0)return W;let Z=$.knownModels?.[$.modelId];return f4({maxInputTokens:Z?.maxInputTokens,contextWindow:Z?.contextWindow})}function tL($){return K4({messages:$.messages,targetTokens:Math.max(1,$.targetTokens),policyIntent:"agentic_summary",estimateMessageTokens:$.estimateMessageTokens})}async function eL($){let W=await oL($.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 $O($){try{return JSON.stringify($).length}catch{return String($).length}}async function WB($){let W=$.context.messages;if(W.length<2)return;let Z=sV(W,$.preserveRecentTokens,$.estimateMessageTokens);if(Z<=0||Z>=W.length)return;let Q=W.slice(0,Z),J=oV(Q),j=J>=0?i7(Q[J])?.summary:void 0,X=J>=0?Q.slice(J+1):Q;if(X.length===0)return;let Y=n7(Q),V=eV({activeProviderConfig:$.providerConfig,summarizer:$.summarizer}),B=sL(V),H=$.summarizer===void 0,G=Math.max($.context.budget.request.maxInputTokens,$.context.budget.request.triggerTokens,o7);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:o7});let K=B??(H?G:o7),F=F9(a7({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 f=tL({messages:X,targetTokens:A,estimateMessageTokens:$.estimateMessageTokens});if(f.status==="failed"){$.logger?.log("Skipped agentic compaction: summary input budget failed",{severity:"warn",budgetWarnings:f.warnings.map((p)=>p.code),summaryInputEstimatedTokens:f.estimatedTokens,targetTokens:A,summarizerProviderId:V.providerId,summarizerModelId:V.modelId});return}let U=n7(f.messages),_=rV(f.messages),D=a7({previousSummary:j,conversationText:_,fileOps:U});$.logger?.debug("Agentic compaction summarizer diagnostics",{messagesToSummarize:Q.length,newMessagesToFold:X.length,preservedMessages:W.length-Z,previousSummaryChars:j?.length??0,conversationTextChars:_.length,summaryRequestChars:D.length,summaryRequestEstimatedTokens:F9(D.length),newMessagesJsonChars:$O(X),summaryInputEstimatedTokens:f.estimatedTokens,summaryInputActions:f.actions.length,summaryInputWarnings:f.warnings.map((p)=>p.code),summaryRequestOverheadTokens:F,summarizerProviderId:V.providerId,summarizerModelId:V.modelId,summarizerInputLimit:K,maxInputTokens:$.context.budget.request.maxInputTokens,triggerTokens:$.context.budget.request.triggerTokens});let M=await eL({providerConfig:V,request:D,logger:$.logger});if(!M.trim())return;let T=tV(M,U),O=W.reduce((p,x)=>p+$.estimateMessageTokens(x),0),L=[$B({summary:T,fileOps:U,tokensBefore:O}),...W.slice(Z)],C=L.reduce((p,x)=>p+$.estimateMessageTokens(x),0);$.logger?.debug("Performed agentic compaction",{messagesBefore:W.length,messagesAfter:L.length,messagesSummarized:Z,messagesPreserved:W.length-Z,tokensBefore:O,tokensAfter:C,maxInputTokens:$.context.budget.request.maxInputTokens});let R=f.actions.filter((p)=>p.reason==="over_budget"||p.reason==="tool_pair_boundary").length;return{messages:L,budget:{policyIntent:"agentic_summary",actionCount:R,warningCount:f.warnings.length,liveTailHandling:f.liveTailHandling}}}import{CHARS_PER_TOKEN as WO}from"@cline/shared";function ZO($){if(D4($))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:r7(Z.content)}:Z)}}function ZB($,W){return $.reduce((Z,Q)=>Z+W(Q),0)}function QB($,W){if($.length<=W)return $;let Z=`
|
|
90
|
+
...`,Q=Math.max(1,W-Z.length);return`${$.slice(0,Q)}${Z}`}function JB($,W){let Z=Number.isFinite(W)?Math.max(1,W):1,Q=Math.max(16,Z*WO);if(typeof $.content==="string"){let X=QB($.content,Q).trim();return{...$,content:X||"..."}}let J=Q,j=$.content.map((X)=>{if(X.type!=="text"||J<=0)return X;let Y=QB(X.text,J).trim();return J-=Y.length,{...X,text:Y||"..."}});return{...$,content:j}}function QO($,W){let Z=nV($),Q=A9($),J=aV($),j=[],X=0;for(let Y=0;Y<$.length;Y+=1){let V=ZO($[Y]);if(!V)continue;let B=W(V);X+=B,j.push({index:Y,message:V,estimatedTokens:B,toolPairIds:XB(V),isFirstUser:Y===Z,isLastUser:Y===Q,isLastAssistant:Y===J})}return{candidates:j,totalTokens:X}}function jB($,W,Z,Q){let J=$[W],j=J.estimatedTokens;return J.message=Z,J.estimatedTokens=Q(Z),J.toolPairIds=XB(Z),J.estimatedTokens-j}function XB($){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 JO($){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 jO($,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 XO($,W){let Z=0;for(let Q of $){if(W.has(Q))continue;$[Z]=Q,Z+=1}$.length=Z}function U9($,W,Z,Q){let J=new Set($),j=JO($);for(let X=0;X<$.length&&Q>Z;){if(!W($[X])){X+=1;continue}let Y=jO(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,XO($,Y)}return Q}function YO($,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(lV,Y.estimatedTokens-(Z-W));if(V>=Y.estimatedTokens)continue;Z+=jB($,X,JB(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+=jB($,j,JB(Y.message,V),J),Y.estimatedTokens>=B)break}}return Z}function VO($,W){return JSON.stringify($)!==JSON.stringify(W)}function BO($){let W=A9($);if(W<0||W===0&&!_4($[0]))return{compactable:$,protectedTail:[]};return{compactable:$.slice(0,W),protectedTail:$.slice(W)}}function YB($){let W=Math.max(1,Math.min($.context.budget.messages.targetTokens,$.context.budget.messages.triggerTokens)),{compactable:Z,protectedTail:Q}=BO($.context.messages);if(Z.length===0)return;let J=ZB(Q,$.estimateMessageTokens),j=Math.max(1,W-J),X=QO(Z,$.estimateMessageTokens),{candidates:Y}=X;if(Y.length===0)return;let V=X.totalTokens,B=V;B=U9(Y,(U)=>U.message.role==="assistant"&&!U.isLastAssistant,j,B),B=U9(Y,(U)=>U.message.role==="user"&&!U.isFirstUser&&!U.isLastUser,j,B),B=U9(Y,(U)=>U.message.role==="assistant"&&U.isLastAssistant,j,B),B=U9(Y,(U)=>U.message.role==="user"&&U.isLastUser&&!U.isFirstUser,j,B),B=YO(Y,j,B,$.context.budget.messages.triggerTokens,$.estimateMessageTokens);let H=[...Y.map((U)=>U.message),...Q],G=K4({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(!VO($.context.messages,K))return;let F=V+J,A=ZB(K,$.estimateMessageTokens),f=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:f,budgetWarnings:G.warnings.map((U)=>U.code),targetTokens:W,maxInputTokens:$.context.budget.request.maxInputTokens}),{messages:K,budget:{policyIntent:"basic_compaction_projection",actionCount:f,warningCount:G.warnings.length,liveTailHandling:G.liveTailHandling}}}var GO=0.5;function BB($){try{return JSON.stringify($).length}catch{return String($).length}}function KO($){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=BB(j.content);W+=1,Z+=X,Q=Math.max(Q,X)}}return{toolResultCount:W,toolResultSerializedChars:Z,maxToolResultSerializedChars:Q}}var FO={basic:({context:$,estimateMessageTokens:W,logger:Z})=>YB({context:$,estimateMessageTokens:W,logger:Z}),agentic:({context:$,providerConfig:W,compaction:Z,estimateMessageTokens:Q,logger:J})=>WB({context:$,providerConfig:W,summarizer:Z?.summarizer,preserveRecentTokens:Math.min(Z?.preserveRecentTokens??uV,$.budget.messages.targetTokens),estimateMessageTokens:Q,logger:J})};function AO($){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 UO($){let W=$.messagePairCount>=5&&typeof $.modelMaxTokens==="number"&&Number.isFinite($.modelMaxTokens)&&$.modelMaxTokens<$.maxInputTokens?Math.floor($.maxInputTokens*GO):Math.floor($.triggerTokens*cV),Z=Math.max(1,$.triggerTokens-1);return Math.max(1,Math.min(W,$.maxInputTokens,Z))}function VB($,W){return Math.max(1,Math.floor($-W))}function fO($){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 L4($,W={}){let Z=$.compaction;if(Z?.enabled!==!0)return;let Q=$.providerConfig??{providerId:$.providerId,modelId:$.modelId},J=iV(),j=Z?.strategy??"basic",X=FO[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=HO({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})??vV,f=A*X2,U=VB(f,F),_=G>=f;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:f,messageTriggerTokens:U,thresholdRatio:X2,shouldCompact:_,messageCount:B.messages.length,apiMessageCount:B.apiMessages.length,apiMessagesJsonChars:BB(B.apiMessages),...KO(B.apiMessages)}),Y==="auto"&&!_)return;let D,M;if(Y==="auto")D=UO({maxInputTokens:A,modelMaxTokens:B.model.info?.maxTokens,triggerTokens:f,messagePairCount:fO(B.messages)}),M=VB(D,F);else M=AO({messageInputTokens:K,messageTriggerTokens:U,manualTargetRatio:W.manualTargetRatio}),D=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:f,targetTokens:D,overheadTokens:F,thresholdRatio:X2,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:f,targetTokens:D,maxInputTokens:A,messageTargetTokens:M});let L=B.messages.length,C=Date.now(),R=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(R?.messages){let r=R.messages.reduce((I1,$2)=>I1+J($2),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:`${(X2*100).toFixed(1)}%`,messagesBefore:L,messagesAfter:R.messages.length,messagesRemoved:L-R.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:R.messages.length,maxInputTokens:A}),tW($.telemetry,{ulid:x,strategy:V,mode:Y,messagesBefore:L,messagesAfter:R.messages.length,messagesRemoved:L-R.messages.length,tokensBefore:G,tokensAfter:d,tokensSaved:G-d,triggerTokens:f,maxInputTokens:A,thresholdRatio:X2,durationMs:p,provider:$.providerId,modelId:$.modelId,...P}),R.budget&&(R.budget.actionCount>0||R.budget.warningCount>0))oY($.telemetry,{ulid:x,strategy:V,mode:Y,policyIntent:R.budget.policyIntent,actionCount:R.budget.actionCount,warningCount:R.budget.warningCount,liveTailHandling:R.budget.liveTailHandling,provider:$.providerId,modelId:$.modelId,...P}),B.emitStatusNotice?.("compaction-budget-adjusted",{kind:"compaction_budget_emergency",reason:"compaction_budget_emergency",iteration:B.iteration,policyIntent:R.budget.policyIntent,actionCount:R.budget.actionCount,warningCount:R.budget.warningCount})}else B.emitStatusNotice?.(Y==="manual"?"compaction-skipped":"auto-compaction-skipped",{kind:O,reason:O,phase:"skipped",iteration:B.iteration,maxInputTokens:A}),eW($.telemetry,{ulid:x,strategy:V,mode:Y,reason:"no_result",tokensBefore:G,triggerTokens:f,maxInputTokens:A,thresholdRatio:X2,durationMs:p,provider:$.providerId,modelId:$.modelId,...P});return R}}function O4($){return async(W)=>{let Z=$.getState?.(),Q=Z?j2(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=z8({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=z8({sourceMessages:W.messages,compactedMessages:J.messages,conversationId:W.conversationId,systemPrompt:J.systemPrompt});await $.saveState?.(j)}return J}}var sH={};w(sH,{zodToJsonSchema:()=>Eq,validateWithZod:()=>Rq,truncateCommandOutput:()=>H2,resolveToolRoutingConfig:()=>y8,resolveToolPresetName:()=>r1,resolveCoreSelectedToolIds:()=>c9,getCoreHeadlessToolNames:()=>u4,getCoreDefaultEnabledToolIds:()=>v9,getCoreBuiltinToolCatalog:()=>M2,getCoreAcpToolNames:()=>u9,createWebFetchTool:()=>Z3,createWebFetchExecutor:()=>y4,createToolPoliciesWithPreset:()=>N9,createSubmitAndExitTool:()=>X3,createSkillsTool:()=>K2,createShellTool:()=>P4,createShellExecutor:()=>G2,createSearchTool:()=>W3,createSearchExecutor:()=>b4,createReadFilesTool:()=>$3,createFileReadExecutor:()=>S4,createEditorTool:()=>J3,createEditorExecutor:()=>U2,createDefaultToolsWithPreset:()=>R9,createDefaultTools:()=>z$,createDefaultShellExecutor:()=>h4,createDefaultExecutors:()=>S8,createBuiltinTools:()=>N2,createAskQuestionTool:()=>j3,createApplyPatchTool:()=>Q3,createApplyPatchExecutor:()=>A2,computePatchChanges:()=>w8,WebFetchRequestSchema:()=>s7,ToolPresets:()=>a0,TEAM_TOOL_NAMES:()=>I8,SubmitInputSchema:()=>C4,StructuredCommandInputSchema:()=>V2,SkillsInputSchema:()=>E4,SearchCodebaseInputSchema:()=>z4,RunCommandsInputSchema:()=>q4,ReadFilesInputSchema:()=>T4,ReadFileRequestSchema:()=>_9,PatchActionType:()=>F2,MAX_COMMAND_OUTPUT_CHARS:()=>u1,FetchWebContentInputSchema:()=>M4,EditFileInputSchema:()=>N4,DefaultToolNames:()=>T0,DEFAULT_MODEL_TOOL_ROUTING_RULES:()=>b8,CommandExitError:()=>d1,AskQuestionInputSchema:()=>w4,ApplyPatchInputSchema:()=>R4,ALL_DEFAULT_TOOL_NAMES:()=>_$});import{validateWithZod as Rq,zodToJsonSchema as Eq}from"@cline/shared";var T0={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"},_$=[T0.READ_FILES,T0.SEARCH_CODEBASE,T0.RUN_COMMANDS,T0.FETCH_WEB_CONTENT,T0.APPLY_PATCH,T0.EDITOR,T0.SKILLS,T0.ASK,T0.SUBMIT_AND_EXIT];O0();import{createTool as O$,validateWithZod as T$,zodToJsonSchema as l1}from"@cline/shared";var GB="__clineInternalTelemetry";function KB($){let W=$?.__clineInternalTelemetry;return W&&typeof W==="object"&&"capture"in W&&typeof W.capture==="function"?W:void 0}import{spawn as NB}from"node:child_process";import{StringDecoder as zO}from"node:string_decoder";import{getDefaultShell as qO,getShellArgs as MO}from"@cline/shared";import{validateWithZod as _O}from"@cline/shared";import{z}from"zod";var L$=6000,Y2=z.string().describe("The absolute path of a text file to read content from"),f9=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"),_9=z.object({path:Y2,start_line:f9.shape.start_line,end_line:f9.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"),T4=z.object({files:z.array(_9).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.")}),FB={start_line:f9.shape.start_line,end_line:f9.shape.end_line},M8=z.union([_9,z.object({file_path:Y2,...FB}).transform(({file_path:$,...W})=>({path:$,...W})),z.object({filePath:Y2,...FB}).transform(({filePath:$,...W})=>({path:$,...W}))]),AB=z.union([T4,M8,z.array(M8),z.array(z.string()),z.string(),z.object({files:z.array(z.union([Y2,M8]))}),z.object({files:M8}),z.object({files:Y2}),z.object({file_paths:z.array(Y2)}),z.object({file_paths:z.string()}),z.object({paths:z.array(z.union([Y2,M8]))}),z.object({paths:M8}),z.object({paths:z.string()})]),z4=z.object({queries:z.array(z.string()).describe("Array of regex search queries to execute")}),UB=z.union([z4,z.array(z.string()),z.string(),z.object({queries:z.string()})]),D9=z.string().describe(`The non-interactive shell command to execute - MUST keep input short and concise (within ${L$*2} characters) to avoid timeouts.`),V2=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.")}),fB=z.union([D9,V2]),q4=z.object({commands:z.array(D9).describe("Array of complete shell command strings to execute.")}),DO=z.object({commands:z.array(fB)}),DB=z.union([q4,DO,z.object({commands:fB}),z.array(V2),V2,z.object({command:D9}),z.object({cmd:D9}),z.array(z.string()),z.string()]),s7=z.object({url:z.string().describe("The URL to fetch"),prompt:z.string().min(2).describe("Analysis prompt for the fetched content")}),M4=z.object({requests:z.array(s7).describe("Array of the URLs for the web fetch requests")}),N4=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 ${L$} 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 ${L$} 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."),R4=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."),_B=z.union([R4,z.string()]),E4=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")}),w4=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")}),C4=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 B2($){if($ instanceof Error)return $.message;return String($)}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 B2($){if($ instanceof Error)return $.message;return String($)}function OB($){if(typeof $.old_text==="string"&&$.old_text.length>L$)return`Editor input too large: old_text was ${$.old_text.length} characters, exceeding the recommended limit of ${L$}. Split the edit into smaller tool calls so later tool calls are less likely to be truncated or time out.`;if($.new_text.length>L$)return`Editor input too large: new_text was ${$.new_text.length} characters, exceeding the recommended limit of ${L$}. Split the edit into smaller tool calls so later tool calls are less likely to be truncated or time out.`;return null}class N8 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 N8(Z,W)),W)})])}function L9($){let{path:W,start_line:Z,end_line:Q}=$;if(Z==null&&Q==null)return W;return`${W}:${Z??1}-${Q??"EOF"}`}function TB($){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 LO=new Set(["start_line","end_line"]);function OO($){if($===null||typeof $!=="object"||Array.isArray($))return!1;let W=Object.keys($);return W.length>0&&W.every((Z)=>LO.has(Z))}function LB($){let W=[];for(let Z of $){if(OO(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 zB($){if(Array.isArray($))return LB($);if($!==null&&typeof $==="object")for(let W of["files","paths"]){let Z=$[W];if(Array.isArray(Z))return{...$,[W]:LB(Z)}}return $}function qB($){let W=_O(DB,$);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 TO($){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 t7=200;function MB($){let W=TO($);if(W.length<=t7)return W;let Z=W.length-t7;return`${W.slice(0,t7)} ... [command truncated: ${Z} more chars; full command is in the tool call input]`}var u1=48000;function H2($,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 R8=2000,
|
|
94
|
+
`+$.slice(-j)}var R8=2000,e7=2000,O9=48000,E8=48000;class d1 extends Error{exitCode;output;constructor($,W){super(`Command exited with code ${$}`);this.exitCode=$;this.output=W;this.name="CommandExitError"}}function RB($){let W=Math.ceil($/2),Z=Math.max(1,$-W),Q=new zO("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 NO($,W,Z,Q,J){return new Promise((j,X)=>{let Y=process.platform==="win32",V=NB($.executable,$.args,{cwd:$.cwd,env:{...process.env,...$.env},stdio:["pipe","pipe","pipe"],detached:!Y,windowsHide:!0}),B=V.pid,H=RB(Q),G=RB(Q),K=!1,F=!1,A=(T)=>{if(F)return;F=!0,T()},f=()=>{if(!B)return;if(Y){NB("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,f(),A(()=>X(T))},_=setTimeout(()=>U(new N8(`Command timed out after ${Z}ms`,Z)),Z),D=()=>U(Error("Command was aborted"));if(W.signal)W.signal.addEventListener("abort",D);let M=()=>{clearTimeout(_),W.signal?.removeEventListener("abort",D)};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(),L=G.snapshot();if(T!==0){let C=T??1,R=J?O.text+(L.text?`
|
|
95
95
|
[stderr]
|
|
96
|
-
${L.text}`:""):O.text,
|
|
97
|
-
${
|
|
96
|
+
${L.text}`:""):O.text,p=O.dropped||J&&L.dropped,x=J?O.totalChars+L.totalChars:O.totalChars;if(p||R.length>Q)R=H2(R,{maxChars:Q,totalChars:x});let P=R.length>0?`[Command exited with code ${C}]
|
|
97
|
+
${R}`:`[Command exited with code ${C}]`;A(()=>X(new d1(C,P)))}else{let C=J?O.text+(L.text?`
|
|
98
98
|
[stderr]
|
|
99
|
-
${L.text}`:""):O.text;if(O.dropped||J&&L.dropped||C.length>Q){let
|
|
100
|
-
`))}return W}function
|
|
99
|
+
${L.text}`:""):O.text;if(O.dropped||J&&L.dropped||C.length>Q){let p=J?O.totalChars+L.totalChars:O.totalChars;C=H2(C,{maxChars:Q,totalChars:p})}A(()=>j(C))}}),V.on("error",(T)=>{M(),A(()=>X(Error(`Failed to execute command: ${T.message}`)))})})}function G2($={}){let{shell:W=qO(process.platform),timeoutMs:Z=30000,env:Q={},combineOutput:J=!0}=$,j=$.maxOutputChars??$.maxOutputBytes??u1;return(X,Y,V)=>{let B=typeof X!=="string";return NO({executable:B?X.command:W,args:B?X.args??[]:MO(W,X),cwd:Y,env:Q},V,Z,j,J)}}function EB($,W){let Z=$.metadata?.[W];return typeof Z==="string"?Z:void 0}function RO($,W){aY(KB($.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:EB($,"mode"),source:EB($,"source"),session_id:$.sessionId,agent_id:$.agentId,conversation_id:$.conversationId,run_id:$.runId,iteration:$.iteration,tool_call_id:$.toolCallId})}function EO($){let W=$.match(/(?<![<])<<-?\s*(?:"([^"]+)"|'([^']+)'|([A-Za-z0-9_./-]+))/);return W?.[1]??W?.[2]??W?.[3]}function wO($){let W=[];for(let Z=0;Z<$.length;Z+=1){let Q=$[Z],J=EO(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 CO($){let W=[],Z=[],Q=()=>{if(Z.length>0)W.push(...wO(Z)),Z=[]};for(let J of $){if(typeof J==="string"){Z.push(J);continue}Q(),W.push(J)}return Q(),W}async function PO($,W){let{executor:Z,cwd:Q,context:J,timeoutMs:j,timeoutSource:X}=W;return Promise.all($.map(async(Y)=>{let V=Date.now(),B=MB(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 N8)RO(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=B2(H);return{query:B,result:"",error:`Command failed: ${G}`,success:!1}}}))}function $3($,W={}){let Z=W.fileReadTimeoutMs??1e4;return O$({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 ${R8} lines / ~${Math.round(O9/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(T4),timeoutMs:Z*2,retryable:!0,maxRetries:1,execute:async(Q,J)=>{let j=T$(AB,zB(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=TB(Y);if(V)return{query:L9(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:L9(Y),result:B,success:!0}}catch(B){let H=B2(B);return{query:L9(Y),result:"",error:`Error reading file: ${H}`,success:!1}}}))}})}function W3($,W={}){let Z=W.searchTimeoutMs??30000,Q=W.cwd??process.cwd();return O$({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(E8/1000)}k characters per query is middle-truncated; narrow patterns beat broad ones.`,inputSchema:l1(z4),timeoutMs:Z*2,retryable:!0,maxRetries:1,execute:async(J,j)=>{let X=T$(UB,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=B2(B);return{query:V,result:"",error:`Search failed: ${H}`,success:!1}}}))}})}var wB="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 P4($,W={}){let Z=W.bashTimeoutMs??30000,Q=W.bashTimeoutMs===void 0?"default_setting":"configured_setting",J=W.cwd??process.cwd(),j=process.platform==="win32";return O$({name:"run_commands",description:j?"Run non-interactive shell commands from the root of the workspace in Windows environment. "+wB+`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 PowerShell; quote paths and arguments for PowerShell and use ';' to sequence commands. Include multiple commands in the same call when they are independent and safe to run concurrently. When independent reads, searches, or edits are also needed, call those tools in the same response.`:"Run non-interactive shell commands from the root of the workspace. "+wB+`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.`,inputSchema:l1(q4),timeoutMs:Z*2,retryable:!1,maxRetries:0,execute:async(X,Y)=>{let V=CO(qB(X));return PO(V,{executor:$,cwd:J,context:Y,timeoutMs:Z,timeoutSource:Q})}})}function Z3($,W={}){let Z=W.webFetchTimeoutMs??30000;return O$({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(M4),timeoutMs:Z*2,retryable:!0,maxRetries:2,execute:async(Q,J)=>{let j=T$(M4,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=B2(Y);return{query:X.url,result:"",error:`Error fetching web content: ${V}`,success:!1}}}))}})}var SO=`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: ${f.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
|
|
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
|
|
149
|
-
`),J=[],j=0;for(let X of W){if(X.origIndex>Q.length)throw new
|
|
150
|
-
`)}async function
|
|
151
|
-
`)}return j}function
|
|
136
|
+
*** End Patch`;function Q3($,W={}){let Z=W.applyPatchTimeoutMs??30000,Q=W.cwd??process.cwd();return O$({name:"apply_patch",description:SO,inputSchema:l1(R4),timeoutMs:Z,retryable:!1,maxRetries:0,execute:async(J,j)=>{let X=T$(_B,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: ${B2(V)}`,success:!1}}}})}function J3($,W={}){let Z=W.editorTimeoutMs??30000,Q=W.cwd??process.cwd();return O$({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(N4),timeoutMs:Z,retryable:!1,maxRetries:0,execute:async(J,j)=>{let X=T$(N4,J),Y=X.insert_line==null?"edit":"insert",V=OB(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=B2(B);return{query:`${Y}:${X.path}`,result:"",error:`Editor operation failed: ${H}`,success:!1}}}})}function K2($,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=O$({name:"skills",description:Q,inputSchema:l1(E4),timeoutMs:Z,retryable:!1,maxRetries:0,execute:async(j,X)=>{let Y=T$(E4,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 j3($){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(w4),retryable:!1,maxRetries:0,execute:async(W,Z)=>{let Q=T$(w4,W);return $(Q.question,Q.options,Z)}}}function X3($,W={}){let Z=W.submitTimeoutMs??15000;return O$({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(C4),lifecycle:{completesRun:!0},timeoutMs:Z,retryable:!1,maxRetries:0,execute:async(Q,J)=>{let j=T$(C4,Q);return c1($(j.summary,j.verified,J),Z,`submit_and_exit timed out after ${Z}ms`)}})}function z$($){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($3(W.readFile,G));if(Q&&W.search)K.push(W3(W.search,G));if(J&&W.bash)K.push(P4(W.bash,G));if(j&&W.webFetch)K.push(Z3(W.webFetch,G));if(Y&&W.editor)K.push(J3(W.editor,G));else if(X&&W.applyPatch)K.push(Q3(W.applyPatch,G));if(V&&W.skills)K.push(K2(W.skills,G));let F=H?W.submit:void 0;if(B&&W.askQuestion&&!F)K.push(j3(W.askQuestion));if(F)K.push(X3(F,G));return K}import*as i0 from"node:fs/promises";import*as n0 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"},PB=["%%bash","apply_patch","EOF","```"],F2;((Q)=>{Q.ADD="add";Q.DELETE="delete";Q.UPDATE="update"})(F2||={});class G0 extends Error{constructor($){super($);this.name="DiffError"}}function r0($){let W={"‐":"-","‑":"-","‒":"-","–":"-","—":"-","−":"-","“":'"',"”":'"',"„":'"',"«":'"',"»":'"',"‘":"'","’":"'","‛":"'"," ":" "," ":" "};return $.normalize("NFC").replace(/./gu,(Z)=>W[Z]??Z).replace(/\\`/g,"`").replace(/\\'/g,"'").replace(/\\"/g,'"')}class Y3{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=r0(Y.trim());for(let _=J;_<Q.length;_++){let D=Q[_];if(D&&(r0(D)===U||r0(D.trim())===U)){if(J=_+1,r0(D.trim())===U&&r0(D)!==U)this.fuzz++;break}}}let[B,H,G,K]=hO(this.lines,this.index),[F,A,f]=yO(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: ${f.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=bO(Q,Z);return(Z.length-J)/Z.length}function bO($,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 yO($,W,Z,Q){if(W.length===0)return[Z,0,1];let J=0,j=(X)=>{let Y=r0(W.join(`
|
|
141
|
+
`));for(let B=X;B<$.length;B++){let H=r0($.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=r0($.slice(B,B+W.length).map((K)=>K.trimEnd()).join(`
|
|
143
|
+
`)),G=r0(W.map((K)=>K.trimEnd()).join(`
|
|
144
|
+
`));if(H===G)return[B,1,1]}for(let B=X;B<$.length;B++){let H=r0($.slice(B,B+W.length).map((K)=>K.trim()).join(`
|
|
145
|
+
`)),G=r0(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=r0($.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 hO($,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 V3($,W,Z){let Q=n0.isAbsolute(W),J=Q?n0.normalize(W):n0.resolve($,W);if(!Z||Q)return J;let j=n0.relative($,J);if(j.startsWith("..")||n0.isAbsolute(j))throw new G0(`Path must stay within cwd: ${W}`);return J}function kO($){return $.split(`
|
|
148
|
+
`).map((W)=>W.replace(/\r$/,""))}function SB($){if($.trim()==="")return!1;return PB.some((W)=>$.startsWith(W))}function IO($){let W=0,Z=$.length;while(W<Z&&SB($[W]??""))W++;while(Z>W&&SB($[Z-1]??""))Z--;return $.slice(W,Z)}function xO($){let W=kO($),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=IO(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 gO($,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 mO($,W,Z){if(W.length===0)return $;let Q=$.split(`
|
|
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 vO($,W,Z,Q){let J=gO($,[n.UPDATE,n.DELETE]),j={};for(let X of J){let Y=V3(W,X,Q),V;try{V=await i0.readFile(Y,Z)}catch{throw new G0(`File not found: ${X}`)}j[X]=V.replace(/\r\n/g,`
|
|
151
|
+
`)}return j}function cO($,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:mO(W[Q]??"",J.chunks,Q),movePath:J.movePath};break}return Z}function uO($){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
|
|
153
|
+
`)}async function dO($,W,Z,Q){let J=[];for(let[j,X]of Object.entries($)){let Y=V3(W,j,Q);switch(X.type){case"delete":await i0.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 i0.mkdir(n0.dirname(Y),{recursive:!0}),await i0.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=V3(W,X.movePath,Q);await i0.mkdir(n0.dirname(V),{recursive:!0}),await i0.writeFile(V,X.newContent,{encoding:Z}),await i0.rm(Y,{force:!0}),J.push(`${j} -> ${X.movePath}`)}else await i0.writeFile(Y,X.newContent,{encoding:Z}),J.push(j);break}}}return J}async function w8($,W,Z={}){let{encoding:Q="utf-8",restrictToCwd:J=!0}=Z,j=xO($),X=await vO(j.lines,W,Q,J),Y=new Y3(j.lines,X),{patch:V,fuzz:B}=Y.parse();if(V.warnings&&V.warnings.length>0)throw new G0(uO(V.warnings));return{changes:cO(V,X),fuzz:B}}function A2($={}){let{encoding:W="utf-8",restrictToCwd:Z=!0}=$;return async(Q,J,j)=>{let{changes:X,fuzz:Y}=await w8(Q.input,J,{encoding:W,restrictToCwd:Z}),V=await dO(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 lO($,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 pO($,W){if(W.length===0)return 0;return $.split(W).length-1}function rO($,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 f=j;f<j+H;f++)K.push(`-${f+1}: ${Q[f]}`);for(let f=j;f<j+G;f++)K.push(`+${f+1}: ${J[f]}`);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 iO($,W,Z){return await A1.mkdir(F1.dirname($),{recursive:!0}),await A1.writeFile($,W,{encoding:Z}),`File created successfully at: ${$}`}async function nO($){try{return await A1.access($),!0}catch{return!1}}async function aO($,W,Z,Q,J){let j=await A1.readFile($,Q),X=pO(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=rO(j,Y,J);return`Edited ${$}
|
|
158
|
+
${V}`}async function oO($,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
|
-
`)),await
|
|
161
|
-
`),{encoding:Q}),`Inserted content at line ${W} in ${$}.`}function U2($={}){let{encoding:W="utf-8",restrictToCwd:Z=!0,maxDiffLines:Q=200}=$;return async(J,j,X)=>{let Y=
|
|
162
|
-
`),L=H[H.length-1]?.lineNumber;if(L===void 0)return O;let C=Math.min(Y,K);if(L>=C)return O;let
|
|
163
|
-
|
|
164
|
-
[Showing lines ${X}-${L} of ${
|
|
165
|
-
`).filter((U)=>U.trim());for(let U of f){if(A.length>=Z)break;let _=JSON.parse(U);if(_.type==="match"){let D=_.data,M=[];if(_.data.submatches&&_.data.submatches.length>0){let T=_.data.submatches[0];A.push({file:D.path.text,line:D.line_number,column:(T?.start??0)+1,match:T?.match?.text??"",context:M})}}else if(_.type==="context"&&A.length>0){let D=A[A.length-1],M=_.data.line_number===D.line?">":" ";D.context.push(`${M} ${_.data.line_number}: ${_.data.lines?.text??_.data.line?.text??""}`)}}K(A.length>0?A:null)}catch{K(null)}return}K(null)}),Y.on("error",()=>{K(null)})})}function
|
|
166
|
-
`))}let F;try{F=new RegExp(V,"gim")}catch(D){throw Error(`Invalid regex pattern: ${V}. ${D instanceof Error?D.message:""}`)}let A=[],f=0,U=await
|
|
167
|
-
`);for(let L=0;L<O.length;L++){let C=O[L];F.lastIndex=0;let
|
|
168
|
-
Searched ${f} files.`;let _=[`Found ${A.length} result${A.length===1?"":"s"} for pattern: ${V}`,`Searched ${f} files.`,""];for(let D of A)_.push(`${D.file}:${D.line}:${D.column}`),_.push(...D.context),_.push("");if(A.length>=Q)_.push(`(Showing first ${Q} results. Refine your search for more specific results.)`);return
|
|
169
|
-
`))}}function
|
|
160
|
+
`)),await A1.writeFile($,j.join(`
|
|
161
|
+
`),{encoding:Q}),`Inserted content at line ${W} in ${$}.`}function U2($={}){let{encoding:W="utf-8",restrictToCwd:Z=!0,maxDiffLines:Q=200}=$;return async(J,j,X)=>{let Y=lO(j,J.path,Z);if(J.insert_line!=null)return oO(Y,J.insert_line,J.new_text,W);if(!await nO(Y))return iO(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 aO(Y,J.old_text,J.new_text,W,Q)}}import{createReadStream as sO}from"node:fs";import*as T9 from"node:fs/promises";import*as q$ from"node:path";import{createInterface as tO}from"node:readline";import{resolveExistingFilePath as eO}from"@cline/shared/storage";var $T=new Map([[".gif","image/gif"],[".png","image/png"],[".jpg","image/jpeg"],[".jpeg","image/jpeg"],[".webp","image/webp"]]),WT={maxFileSizeBytes:1e7,encoding:"utf-8",includeLineNumbers:!0},bB=1e8,ZT=50000;function yB($){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 QT($,W,Z,Q,J,j){if(j?.aborted)throw yB(j);let X=Math.max(Q??1,1),Y=J??Number.POSITIVE_INFINITY,V=Number.isFinite(Y),B=V?Y:X+ZT-1,H=[],G=0,K=0,F=!1,A=!1,f=Number.isFinite(Y)?Math.min(Y,X+R8-1):X+R8-1,U=Z?String(f).length+3:0,_=sO($,{encoding:W}),D=tO({input:_,crlfDelay:Number.POSITIVE_INFINITY}),M=j?()=>_.destroy(yB(j)):void 0;if(j&&M)j.addEventListener("abort",M,{once:!0});try{for await(let p of D){if(K+=1,K>Y){K=Y;break}if(!V&&F&&K>=B){A=!0;break}if(K<X||F)continue;if(H.length>=R8){F=!0;continue}let x=p;if(x.length>e7)x=`${x.slice(0,e7)} [line truncated]`;let P=G+x.length+U+1;if(P>O9&&H.length>0){F=!0;continue}H.push({lineNumber:K,text:x}),G=P}}finally{if(j&&M)j.removeEventListener("abort",M);D.close(),_.destroy()}let T=String(H[H.length-1]?.lineNumber??K).length,O=H.map(({lineNumber:p,text:x})=>Z?`${String(p).padStart(T," ")} | ${x}`:x).join(`
|
|
162
|
+
`),L=H[H.length-1]?.lineNumber;if(L===void 0)return O;let C=Math.min(Y,K);if(L>=C)return O;let R=A?`${K}+ lines`:C;return`${O}
|
|
163
|
+
|
|
164
|
+
[Showing lines ${X}-${L} of ${R}. Use start_line/end_line to read other sections.]`}function S4($={}){let{maxFileSizeBytes:W,encoding:Z,includeLineNumbers:Q}={...WT,...$};return async(J,j)=>{let{path:X,start_line:Y,end_line:V}=J,B=q$.isAbsolute(X)?q$.normalize(X):q$.resolve(process.cwd(),X),H=eO(B)??B,G=q$.extname(H).toLowerCase(),K=$T.get(G),F=await T9.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 T9.readFile(H);return[{type:"text",text:"Successfully read image"},{type:"image",data:A.toString("base64"),mediaType:K}]}if(F.size>bB)throw Error(`Text file too large to stream safely: ${F.size} bytes (max: ${bB} bytes). Use a targeted command such as sed, grep, head, or tail to inspect specific sections.`);return QT(H,Z,Q,Y,V,j.signal)}}import{spawn as cB}from"node:child_process";import*as uB from"node:fs/promises";import*as M9 from"node:path";var mB={};w(mB,{prewarmFileIndex:()=>q9,getFileIndex:()=>p1,enrichPromptWithMentions:()=>P8});import{spawn as JT}from"node:child_process";import{readdir as jT}from"node:fs/promises";import H3 from"node:path";import{isMainThread as IB,parentPort as hB,Worker as XT}from"node:worker_threads";var YT=15000,VT=600000,BT=1000,HT=new Set([".git","node_modules","dist","build",".next","coverage",".turbo",".cache","target","out"]);function kB($){let W=$&&typeof $==="object"&&"code"in $?String($.code??""):"";return W==="EACCES"||W==="EPERM"||W==="ENOENT"}var C8=new Map;function GT(){if(!IB)return!1;return!0}function KT($){if(C8.size<=1)return;for(let[W,Z]of C8.entries()){if(Z.pending)continue;if($-Z.lastAccessedAt>VT)C8.delete(W)}}function FT($,W){return H3.relative($,W).split(H3.sep).join("/")}async function AT($){let Z=(await new Promise((Q,J)=>{let j=JT("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 xB($,W,Z){let Q;try{Q=await jT(W,{withFileTypes:!0})}catch(J){if(kB(J))return;throw J}for(let J of Q){let j=H3.join(W,J.name);if(J.isDirectory()){if(HT.has(J.name))continue;try{await xB($,j,Z)}catch(X){if(kB(X))continue;throw X}continue}if(J.isFile())Z.add(FT($,j))}}async function UT($){let W=new Set;return await xB($,$,W),W}async function z9($){try{return await AT($)}catch{return UT($)}}function fT(){if(IB||!hB)return;let $=hB;$.on("message",(W)=>{if(W.type!=="index")return;z9(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 gB{worker=new XT(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)},BT);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)}}fT();var B3;function DT(){if(!GT())return null;if(B3===void 0)B3=new gB;return B3}async function _T($){let W=DT();if(!W)return z9($);try{let Z=await W.requestIndex($);if(Z===null)return z9($);return new Set(Z)}catch{return z9($)}}async function p1($,W={}){let Z=W.ttlMs??YT,Q=Date.now();KT(Q);let J=C8.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=_T($).then((X)=>{return C8.set($,{files:X,lastBuiltAt:Date.now(),lastAccessedAt:Date.now(),pending:null}),X});return C8.set($,{files:J?.files??new Set,lastBuiltAt:J?.lastBuiltAt??0,lastAccessedAt:Q,pending:j}),j}async function q9($,W={}){await p1($,{...W,ttlMs:0})}import{stat as LT}from"node:fs/promises";import f2 from"node:path";var OT=/[),.:;!?`'"]+$/,TT=/^[(`'"]+/;function zT($){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(TT,"").replace(OT,"");if(j.length===0||j.includes("@"))continue;Z.push(j)}return Array.from(new Set(Z))}function qT($,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 P8($,W,Z={}){let Q=zT($);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=qT(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 LT(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 MT=["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"],NT=["node_modules",".git","dist","build",".next","coverage","__pycache__",".venv","venv",".cache",".turbo",".output","out","target","bin","obj"],D2=null;function RT(){if(D2!==null)return Promise.resolve(D2);return new Promise(($)=>{let W=cB("rg",["--version"],{stdio:["ignore","pipe","pipe"],windowsHide:!0});W.on("close",(Z)=>{D2=Z===0,$(D2)}),W.on("error",()=>{D2=!1,$(!1)}),setTimeout(()=>{if(!W.killed)W.kill("SIGTERM");if(D2===null)D2=!1,$(!1)},1000)})}function ET($,W,Z,Q,J=5000,j){return new Promise((X)=>{let Y=cB("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=[],f=V.split(`
|
|
165
|
+
`).filter((U)=>U.trim());for(let U of f){if(A.length>=Z)break;let _=JSON.parse(U);if(_.type==="match"){let D=_.data,M=[];if(_.data.submatches&&_.data.submatches.length>0){let T=_.data.submatches[0];A.push({file:D.path.text,line:D.line_number,column:(T?.start??0)+1,match:T?.match?.text??"",context:M})}}else if(_.type==="context"&&A.length>0){let D=A[A.length-1],M=_.data.line_number===D.line?">":" ";D.context.push(`${M} ${_.data.line_number}: ${_.data.lines?.text??_.data.line?.text??""}`)}}K(A.length>0?A:null)}catch{K(null)}return}K(null)}),Y.on("error",()=>{K(null)})})}function wT($,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=M9.posix.extname(j).slice(1).toLowerCase();return Z.has(Y)||!Y&&!j.startsWith(".")}function b4($={}){let{includeExtensions:W=MT,excludeDirs:Z=NT,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 RT(),K=null;if(G)K=await ET(V,B,Q,J,5000,H.signal);if(K){let D=[`Found ${K.length} result${K.length===1?"":"s"} for pattern: ${V}`,""];for(let M of K)D.push(`${M.file}:${M.line}:${M.column}`),D.push(...M.context),D.push("");if(K.length>=Q)D.push(`(Showing first ${Q} results. Refine your search for more specific results.)`);return vB(D.join(`
|
|
166
|
+
`))}let F;try{F=new RegExp(V,"gim")}catch(D){throw Error(`Invalid regex pattern: ${V}. ${D instanceof Error?D.message:""}`)}let A=[],f=0,U=await p1(B);for(let D of U){if(H.signal?.aborted)throw Error("Search operation aborted");if(!wT(D,X,Y,j))continue;if(A.length>=Q)break;f++;let M=M9.join(B,D);try{let O=(await uB.readFile(M,"utf-8")).split(`
|
|
167
|
+
`);for(let L=0;L<O.length;L++){let C=O[L];F.lastIndex=0;let R=F.exec(C);while(R!==null){if(A.length>=Q)break;let p=Math.max(0,L-J),x=Math.min(O.length-1,L+J),P=[];for(let r=p;r<=x;r++){let d=r===L?">":" ";P.push(`${d} ${r+1}: ${O[r]}`)}if(A.push({file:D,line:L+1,column:R.index+1,match:R[0],context:P}),R.index===F.lastIndex)F.lastIndex++;R=F.exec(C)}}}catch{}}if(A.length===0)return`No results found for pattern: ${V}
|
|
168
|
+
Searched ${f} files.`;let _=[`Found ${A.length} result${A.length===1?"":"s"} for pattern: ${V}`,`Searched ${f} files.`,""];for(let D of A)_.push(`${D.file}:${D.line}:${D.column}`),_.push(...D.context),_.push("");if(A.length>=Q)_.push(`(Showing first ${Q} results. Refine your search for more specific results.)`);return vB(_.join(`
|
|
169
|
+
`))}}function vB($){if($.length<=E8)return $;let W=Math.ceil(E8/2),Z=Math.max(1,E8-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 CT($){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
|
|
175
|
+
`).trim()}function y4($={}){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")||"",f=F.body?.getReader();if(!f)throw Error("Failed to read response body");let U=[],_=0;while(!0){let{done:C,value:R}=await f.read();if(C)break;if(_+=R.length,_>Z)throw f.cancel(),Error(`Response too large: exceeded ${Z} bytes`);U.push(R)}let D=new Uint8Array(_),M=0;for(let C of U)D.set(C,M),M+=C.length;let T=new TextDecoder("utf-8").decode(D),O;if(A.includes("text/html")||A.includes("application/xhtml"))O=CT(T);else if(A.includes("application/json"))try{let C=JSON.parse(T);O=JSON.stringify(C,null,2)}catch{O=T}else O=T;let L=[`URL: ${X}`,`Content-Type: ${A}`,`Size: ${_} bytes`,"","--- Content ---",O.slice(0,50000)];if(O.length>50000)L.push(`
|
|
176
176
|
[Content truncated: showing first 50000 of ${O.length} characters]`);return L.push("","--- Analysis Request ---",`Prompt: ${Y}`),L.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 b4($={}){return G2($)}function P8($={}){return{readFile:C4($.fileRead),search:P4($.search),bash:b4($.bash),webFetch:S4($.webFetch),applyPatch:A2($.applyPatch),editor:U2($.editor)}}var MT={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"},S8=[{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 vB($,W){if(!W||W.length===0)return!0;let Z=$.toLowerCase();return W.some((Q)=>Z.includes(Q.toLowerCase()))}function RT($,W,Z,Q){if($.mode&&$.mode!=="any"&&$.mode!==Q)return!1;return vB(W,$.providerIdIncludes)&&vB(Z,$.modelIdIncludes)}function b8($,W,Z,Q){if(!Q||Q.length===0)return{};let J=new Map;for(let X of Q){if(!RT(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[MT[X]]=Y;return j}var o0={act:{enableReadFiles:!0,enableSearch:!0,enableBash:!0,enableWebFetch:!0,enableApplyPatch:!1,enableEditor:!0,enableSkills:!0,enableAskQuestion:!0,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!0},plan:{enableReadFiles:!0,enableSearch:!0,enableBash:!0,enableWebFetch:!0,enableApplyPatch:!1,enableEditor:!1,enableSkills:!0,enableAskQuestion:!0,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!0},search:{enableReadFiles:!0,enableSearch:!0,enableBash:!1,enableWebFetch:!1,enableApplyPatch:!1,enableEditor:!1,enableSkills:!1,enableAskQuestion:!1,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!0},minimal:{enableReadFiles:!1,enableSearch:!1,enableBash:!0,enableWebFetch:!1,enableApplyPatch:!1,enableEditor:!1,enableSkills:!1,enableAskQuestion:!1,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!1},yolo:{enableReadFiles:!0,enableSearch:!1,enableBash:!0,enableWebFetch:!1,enableApplyPatch:!1,enableEditor:!0,enableSkills:!1,enableAskQuestion:!1,enableSubmitAndExit:!0,enableSpawnAgent:!1,enableAgentTeams:!1}};function l1($){if($.mode==="plan")return"plan";if($.mode==="yolo")return"yolo";return"act"}function M9($){if($!=="yolo")return{};let W={enabled:!0,autoApprove:!0},Z={"*":W};for(let Q of D$)Z[Q]=W;return Z}function R9($,W){let Z=o0[$],{enableSpawnAgent:Q,enableAgentTeams:J,...j}=Z;return T$({...j,...W})}import{createTool as sz,zodToJsonSchema as tz}from"@cline/shared";import{z as q3}from"zod";A1();import{createAgentRuntime as mz}from"@cline/agents";import{createContributionRegistry as vz,mergeModelOptions as _H}from"@cline/shared";import{createGateway as pT,createHandlerAsync as rT,hasRegisteredHandler as iT,MODEL_COLLECTIONS_BY_PROVIDER_ID as nT,normalizeProviderId as aT}from"@cline/llms";import{EMPTY_CONTENT_TEXT as IT}from"@cline/shared";function xT($){let W=mT($.content),Z=[],Q=$.id??uT(),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(vT),createdAt:$.ts??Date.now(),metadata:$.metadata,modelInfo:$.modelInfo,metrics:tB($.metrics)}),j=[]};if(W.length===0)return Z.push({id:Q,role:$.role,content:[{type:"text",text:IT}],createdAt:$.ts??Date.now(),metadata:$.metadata,modelInfo:$.modelInfo,metrics:tB($.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:[$H(Y)],createdAt:$.ts??Date.now(),metadata:$.metadata})}return X(),Z}function b9($){return $.flatMap(xT)}function gT($){let W=$.content.map(WH).filter((Z)=>Z!==void 0);return{id:$.id,role:$.role==="tool"?"user":$.role,content:W,ts:$.createdAt,metadata:$.metadata,modelInfo:$.modelInfo,metrics:cT($.metrics)}}function y8($){return $.map(gT)}function y9($){let W=[];for(let Z of $){let Q=Z.content.map(WH).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 mT($){if(typeof $==="string")return $.trim().length>0?[{type:"text",text:$}]:[];return[...$]}function vT($){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 $H($)}}function $H($){return{type:"tool-result",toolCallId:$.tool_use_id,toolName:$.name,output:$.content,isError:$.is_error}}function WH($){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 tB($){if(!$)return;return{inputTokens:$.inputTokens??0,outputTokens:$.outputTokens??0,cacheReadTokens:$.cacheReadTokens??0,cacheWriteTokens:$.cacheWriteTokens??0,cost:$.cost}}function cT($){if(!$)return;return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,cost:$.cost}}var eB=0;function uT(){return eB+=1,`msg_${Date.now().toString(36)}_${eB.toString(36)}`}function dT($){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:lT($),error:$.error}];default:return[]}}function lT($){if($.success===!1)return"error";if($.incompleteReason==="max_output_tokens"||$.incompleteReason==="max-tokens")return"max-tokens";return"stop"}function ZH($){return{async*stream(W){let Z=!1,Q=!1;try{let J=typeof $==="function"?await $():$;J.setAbortSignal?.(W.signal);let j=y9(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 dT(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 oT($){let W=Object.fromEntries(Object.entries($).filter(([,Z])=>Z!==void 0));return Object.keys(W).length>0?W:void 0}function sT($){return $.providerId==="openai-compatible"||$.clientType==="openai-compatible"}function tT($){let W={region:$.region,apiLine:$.apiLine,openRouterProviderSorting:$.openRouterProviderSorting,modelCatalog:$.modelCatalog};if(sT($))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 oT(W)}function G3($){let W=$.providerConfig;if(W?.knownModels)return W.knownModels;if($.knownModels)return $.knownModels;return nT[$.providerId]?.models??void 0}function eT($){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 $z($,W){return{id:$,name:W.name??$,description:W.description,contextWindow:W.contextWindow,maxInputTokens:W.maxInputTokens,maxOutputTokens:W.maxTokens,capabilities:eT(W.capabilities),metadata:{family:W.family,pricing:W.pricing,status:W.status,releaseDate:W.releaseDate}}}function QH($,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:G3($),maxOutputTokens:$.maxTokensPerTurn,reasoningEffort:$.reasoningEffort,thinkingBudgetTokens:$.thinkingBudgetTokens,thinking:$.thinking,logger:W,extensionContext:$.extensionContext};if(iT(aT(j.providerId)))return ZH(()=>rT(j));return pT({fetch:j.fetch,providerConfigs:[{providerId:j.providerId,apiKey:j.apiKey,baseUrl:j.baseUrl,headers:j.headers,fetch:j.fetch,options:tT(j),models:j.knownModels?Object.entries(j.knownModels).map(([X,Y])=>$z(X,Y)):void 0}],logger:W,telemetry:Z??$.telemetry??$.extensionContext?.telemetry}).createAgentModel({providerId:j.providerId,modelId:j.modelId},{maxTokens:j.maxOutputTokens})}import{createMediaBudgetState as Wz,IMAGE_OMITTED_PLACEHOLDER as JH,normalizeUserInput as jH,resolveMediaBudget as Zz,validateAndReserveImageMedia as Qz}from"@cline/shared";var Jz=8000,jz=50000,Xz=6000000,Yz=200000,Vz=12000,Bz=65536,I4=2000,XH=40000,Hz=8,K3={maxToolResultChars:"CLINE_MESSAGE_BUILDER_MAX_TOOL_RESULT_CHARS",maxTotalTextBytes:"CLINE_MESSAGE_BUILDER_MAX_TOTAL_TEXT_BYTES",minOutdatedRewriteBytes:"CLINE_MESSAGE_BUILDER_MIN_OUTDATED_REWRITE_BYTES"},Gz=new Set(["read","read_files"]),L2="[outdated - see the latest file content]",YH="Tool execution was interrupted before a result was produced.",VH=($)=>`
|
|
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 h4($={}){return G2($)}function S8($={}){return{readFile:S4($.fileRead),search:b4($.search),bash:h4($.bash),webFetch:y4($.webFetch),applyPatch:A2($.applyPatch),editor:U2($.editor)}}var PT={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"},b8=[{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 dB($,W){if(!W||W.length===0)return!0;let Z=$.toLowerCase();return W.some((Q)=>Z.includes(Q.toLowerCase()))}function ST($,W,Z,Q){if($.mode&&$.mode!=="any"&&$.mode!==Q)return!1;return dB(W,$.providerIdIncludes)&&dB(Z,$.modelIdIncludes)}function y8($,W,Z,Q){if(!Q||Q.length===0)return{};let J=new Map;for(let X of Q){if(!ST(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[PT[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 r1($){if($.mode==="plan")return"plan";if($.mode==="yolo")return"yolo";return"act"}function N9($){if($!=="yolo")return{};let W={enabled:!0,autoApprove:!0},Z={"*":W};for(let Q of _$)Z[Q]=W;return Z}function R9($,W){let Z=a0[$],{enableSpawnAgent:Q,enableAgentTeams:J,...j}=Z;return z$({...j,...W})}import{createTool as Qq,zodToJsonSchema as Jq}from"@cline/shared";import{z as M3}from"zod";U1();import{createAgentRuntime as pz}from"@cline/agents";import{createContributionRegistry as rz,mergeModelOptions as TH}from"@cline/shared";import{createGateway as sT,createHandlerAsync as tT,hasRegisteredHandler as eT,MODEL_COLLECTIONS_BY_PROVIDER_ID as $z,normalizeProviderId as Wz}from"@cline/llms";import{EMPTY_CONTENT_TEXT as uT}from"@cline/shared";function dT($){let W=pT($.content),Z=[],Q=$.id??nT(),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(rT),createdAt:$.ts??Date.now(),metadata:$.metadata,modelInfo:$.modelInfo,metrics:WH($.metrics)}),j=[]};if(W.length===0)return Z.push({id:Q,role:$.role,content:[{type:"text",text:uT}],createdAt:$.ts??Date.now(),metadata:$.metadata,modelInfo:$.modelInfo,metrics:WH($.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:[QH(Y)],createdAt:$.ts??Date.now(),metadata:$.metadata})}return X(),Z}function y9($){return $.flatMap(dT)}function lT($){let W=$.content.map(JH).filter((Z)=>Z!==void 0);return{id:$.id,role:$.role==="tool"?"user":$.role,content:W,ts:$.createdAt,metadata:$.metadata,modelInfo:$.modelInfo,metrics:iT($.metrics)}}function h8($){return $.map(lT)}function h9($){let W=[];for(let Z of $){let Q=Z.content.map(JH).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 pT($){if(typeof $==="string")return $.trim().length>0?[{type:"text",text:$}]:[];return[...$]}function rT($){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 QH($)}}function QH($){return{type:"tool-result",toolCallId:$.tool_use_id,toolName:$.name,output:$.content,isError:$.is_error}}function JH($){switch($.type){case"text":return{type:"text",text:$.text};case"reasoning":{if($.redacted===!0)return{type:"redacted_thinking",data:$.metadata?.data??""};let 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 WH($){if(!$)return;return{inputTokens:$.inputTokens??0,outputTokens:$.outputTokens??0,cacheReadTokens:$.cacheReadTokens??0,cacheWriteTokens:$.cacheWriteTokens??0,cost:$.cost}}function iT($){if(!$)return;return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,cost:$.cost}}var ZH=0;function nT(){return ZH+=1,`msg_${Date.now().toString(36)}_${ZH.toString(36)}`}function aT($){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:oT($),error:$.error}];default:return[]}}function oT($){if($.success===!1)return"error";if($.incompleteReason==="max_output_tokens"||$.incompleteReason==="max-tokens")return"max-tokens";return"stop"}function jH($){return{async*stream(W){let Z=!1,Q=!1;try{let J=typeof $==="function"?await $():$;J.setAbortSignal?.(W.signal);let j=h9(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 aT(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 Zz($){let W=Object.fromEntries(Object.entries($).filter(([,Z])=>Z!==void 0));return Object.keys(W).length>0?W:void 0}function Qz($){return $.providerId==="openai-compatible"||$.clientType==="openai-compatible"}function Jz($){let W={region:$.region,apiLine:$.apiLine,openRouterProviderSorting:$.openRouterProviderSorting,modelCatalog:$.modelCatalog};if(Qz($))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 Zz(W)}function K3($){let W=$.providerConfig;if(W?.knownModels)return W.knownModels;if($.knownModels)return $.knownModels;return $z[$.providerId]?.models??void 0}function jz($){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 Xz($,W){return{id:$,name:W.name??$,description:W.description,contextWindow:W.contextWindow,maxInputTokens:W.maxInputTokens,maxOutputTokens:W.maxTokens,capabilities:jz(W.capabilities),metadata:{family:W.family,pricing:W.pricing,status:W.status,releaseDate:W.releaseDate}}}function XH($,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:K3($),maxOutputTokens:$.maxTokensPerTurn,reasoningEffort:$.reasoningEffort,thinkingBudgetTokens:$.thinkingBudgetTokens,thinking:$.thinking,logger:W,extensionContext:$.extensionContext};if(eT(Wz(j.providerId)))return jH(()=>tT(j));return sT({fetch:j.fetch,providerConfigs:[{providerId:j.providerId,apiKey:j.apiKey,baseUrl:j.baseUrl,headers:j.headers,fetch:j.fetch,options:Jz(j),models:j.knownModels?Object.entries(j.knownModels).map(([X,Y])=>Xz(X,Y)):void 0}],logger:W,telemetry:Z??$.telemetry??$.extensionContext?.telemetry}).createAgentModel({providerId:j.providerId,modelId:j.modelId},{maxTokens:j.maxOutputTokens})}import{createMediaBudgetState as Yz,IMAGE_OMITTED_PLACEHOLDER as YH,normalizeUserInput as VH,resolveMediaBudget as Vz,validateAndReserveImageMedia as Bz}from"@cline/shared";var Hz=8000,Gz=50000,Kz=6000000,Fz=200000,Az=12000,Uz=65536,g4=2000,BH=40000,fz=8,F3={maxToolResultChars:"CLINE_MESSAGE_BUILDER_MAX_TOOL_RESULT_CHARS",maxTotalTextBytes:"CLINE_MESSAGE_BUILDER_MAX_TOTAL_TEXT_BYTES",minOutdatedRewriteBytes:"CLINE_MESSAGE_BUILDER_MIN_OUTDATED_REWRITE_BYTES"},Dz=new Set(["read","read_files"]),L2="[outdated - see the latest file content]",HH="Tool execution was interrupted before a result was produced.",GH=($)=>`
|
|
178
178
|
|
|
179
179
|
...[truncated ${$} chars]...
|
|
180
180
|
|
|
181
|
-
`,
|
|
181
|
+
`,m4=($)=>`
|
|
182
182
|
|
|
183
183
|
...[truncated ${$} chars to fit provider request budget]...
|
|
184
184
|
|
|
185
|
-
`,
|
|
185
|
+
`,_z=($)=>`
|
|
186
186
|
|
|
187
187
|
...[assistant text truncated: omitted ${$} chars]...
|
|
188
188
|
|
|
189
|
-
`,
|
|
189
|
+
`,KH=($)=>`
|
|
190
190
|
|
|
191
191
|
...[assistant text truncated: omitted ${$} chars to fit provider request budget]...
|
|
192
192
|
|
|
193
|
-
`,
|
|
193
|
+
`,Lz=($)=>`
|
|
194
194
|
|
|
195
195
|
...[assistant text truncated: omitted ${$} chars due to repeated tool-call markup]...
|
|
196
196
|
|
|
197
|
-
`;function KH($=process.env){return{maxToolResultChars:GH($[K3.maxToolResultChars]),maxTotalTextBytes:GH($[K3.maxTotalTextBytes]),minOutdatedRewriteBytes:Uz($[K3.minOutdatedRewriteBytes])}}class A3{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=k4($.maxToolResultChars,Jz),this.maxFileContentChars=k4($.maxFileContentChars,jz),this.maxTotalTextBytes=k4($.maxTotalTextBytes,Xz),this.mediaBudget=$.mediaBudget??{},this.maxAssistantTextChars=k4($.maxAssistantTextChars,Yz),this.maxAssistantToolMarkupChars=k4($.maxAssistantToolMarkupChars,Vz),this.minOutdatedRewriteBytes=fz($.minOutdatedRewriteBytes,Bz)}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=jH(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=jH($.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=h8($.content,this.maxFileContentChars,VH);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(q$(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 $?`${YH} Tool: ${$}.`:YH}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(q$(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)??L2;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:L2}}if(j.type==="image"){if(J===0)return j;return J-=1,{type:"text",text:L2}}if(q$(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:L2};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=L2;else if(typeof Q.content==="string")Q.content=L2;else Q.result=L2;return Q}isReadTool($){return!!$&&Gz.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(q$(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(U3($))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 h8($,this.maxToolResultChars,VH)}truncateAssistantText($){if(this.hasRepeatedToolCallMarkup($))return h8($,this.maxAssistantToolMarkupChars,Fz);return h8($,this.maxAssistantTextChars,Kz)}hasRepeatedToolCallMarkup($){if($.length<=this.maxAssistantToolMarkupChars)return!1;let W=0;for(let Z of $.matchAll(Az))if(W+=1,W>=Hz)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)=>_z(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=Dz(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+=h9(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(q$(J))W+=h9(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:XH,makeMarker:BH,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"){k9(J.input,Z);continue}if(Q.role==="assistant"&&J.type==="text"){W.push({byteLength:j0(J.text),minBytes:XH,makeMarker:BH,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:I4,makeMarker:x4,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:I4,makeMarker:x4,get:()=>j.text,set:(X)=>{j.text=X}});else if(j.type==="file")W.push({byteLength:j0(j.content),minBytes:I4,makeMarker:x4,get:()=>j.content,set:(X)=>{j.content=X}});else if(q$(j))k9(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=Wz(),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 Zz(this.mediaBudget)}applyMediaBudgetToBlock($,W,Z){if(F3($))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(F3($))return this.limitImageContent($,W,Z);if(q$($))return this.limitNestedMedia($,W,Z);return $}limitNestedMedia($,W,Z){if(F3($)){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(!FH($))return{type:"text",text:JH};let Q=Qz($.mediaType,$.data,{maxImageEncodedBytes:W.maxImageEncodedBytes,maxImageDecodedBytes:W.maxImageDecodedBytes,maxTotalMediaBytes:W.maxTotalMediaBytes},Z);if(!Q.ok)return{type:"text",text:JH};return{...$,data:Q.base64,mediaType:Q.mediaType}}}var HH=String.raw`[\|\uFF5C]`,Az=new RegExp(String.raw`<\s*(?:${HH}\s*)?DSML\s*(?:${HH}\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 GH($){if($===void 0)return;let W=Number.parseInt($,10);return Number.isFinite(W)&&W>0?W:void 0}function Uz($){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 k4($,W){return typeof $==="number"&&Number.isFinite($)&&$>0?Math.floor($):W}function fz($,W){if(typeof $!=="number"||Number.isNaN($)||$<0)return W;return Number.isFinite($)?Math.floor($):$}function h8($,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 Dz($,W,Z){if(j0($)<=W)return $;let Q=0,J=$.length,j=h8($,0,Z);while(Q<=J){let X=Q+J>>>1,Y=h8($,X,Z);if(j0(Y)<=W)j=Y,Q=X+1;else J=X-1}return j}function _z($){if($.type==="tool_use")return{...$,input:I9($.input)};if($.type!=="tool_result"||typeof $.content==="string")return{...$};return{...$,content:$.content.map((W)=>q$(W)?I9(W):{...W})}}function q$($){if($===null||typeof $!=="object")return!1;let W=$.type;return W!=="text"&&W!=="image"&&W!=="file"}function F3($){return $!==null&&typeof $==="object"&&$.type==="image"}function FH($){return $!==null&&typeof $==="object"&&$.type==="image"&&typeof $.data==="string"&&typeof $.mediaType==="string"}function U3($){return FH($)}function h9($){if(typeof $==="string")return j0($);if(Array.isArray($)){let W=0;for(let Z of $)W+=h9(Z);return W}if($!==null&&typeof $==="object"){if(U3($))return 0;let W=0;for(let Z of Object.values($))W+=h9(Z);return W}return 0}function k9($,W){if(Array.isArray($)){$.forEach((Z,Q)=>{if(typeof Z==="string")W.push({byteLength:j0(Z),minBytes:I4,makeMarker:x4,get:()=>$[Q],set:(J)=>{$[Q]=J}});else k9(Z,W)});return}if($!==null&&typeof $==="object"){if(U3($))return;let Z=$;for(let Q of Object.keys(Z)){let J=Z[Q];if(typeof J==="string")W.push({byteLength:j0(J),minBytes:I4,makeMarker:x4,get:()=>Z[Q],set:(j)=>{Z[Q]=j}});else k9(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 f3(){return`conv_${Date.now()}_${Math.random().toString(36).slice(2,9)}`}class D3{messages=[];conversationId=f3();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=f3(),this.sessionStarted=!1}clearHistory(){this.messages=[],this.conversationId=f3(),this.sessionStarted=!1}restore($){this.messages=[...$],this.sessionStarted=!1}isSessionStarted(){return this.sessionStarted}markSessionStarted(){this.sessionStarted=!0}}function AH($){let{agentConfig:W}=$,Z=Lz(W),Q=Oz(W),J=$.hooks,j=Tz(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($.apiTimeoutMs!==void 0)W.apiTimeoutMs=$.apiTimeoutMs;return Object.keys(W).length>0?W:void 0}function Oz($){let W=$.providerConfig?.family;return{id:$.modelId,provider:$.providerId,family:W}}function Tz($){if($===void 0)return;return $>=2?"parallel":"sequential"}var UH={};E(UH,{normalizeConnectionUpdate:()=>O2,buildConnectionUpdate:()=>_3});function _3($){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 O2($){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 zz(){return{lastToolName:"",lastToolSignature:"",consecutiveIdenticalCount:0}}function qz($){$.lastToolName="",$.lastToolSignature="",$.consecutiveIdenticalCount=0}function L3($){if($==null||typeof $!=="object")return $;if(Array.isArray($))return $.map(L3);let W={};for(let Z of Object.keys($).sort())W[Z]=L3($[Z]);return W}function Mz($){if($==null)return"null";if(typeof $==="string")return $;if(typeof $!=="object")return String($);try{return JSON.stringify(L3($))}catch{return String($)}}function Rz($,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 fH={softThreshold:3,hardThreshold:5};class O3{config;state=zz();constructor($){this.config={softThreshold:$?.softThreshold??fH.softThreshold,hardThreshold:$?.hardThreshold??fH.hardThreshold}}inspect($){let W=Mz($.input),Z=Rz(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(){qz(this.state)}}class T3{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=await Ez({iteration:$.iteration,consecutiveMistakes:Z,maxConsecutiveMistakes:W,reason:$.reason,details:$.details},this.options.onLimitReached);if(J.action==="continue"){let j=J.guidance?.trim();if(j)this.options.appendRecoveryNotice(j,$.reason);return this.consecutiveMistakes=0,{action:"continue",guidance:j}}return{action:"stop",reason:J.reason?.trim()||void 0,message:Nz({iteration:$.iteration,consecutiveMistakes:Z,maxConsecutiveMistakes:W,reason:$.reason,details:$.details,stopReason:J.reason})}}reset(){this.consecutiveMistakes=0}get value(){return this.consecutiveMistakes}}function Nz($){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 Ez($,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 wz($){switch($){case"auto_compaction":case"manual_compaction":case"compaction_budget_emergency":return $;default:return}}function Cz($){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 Sz($){return $.content.find((W)=>W.type==="tool-result")}function bz($){switch($){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}function yz($){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 z3{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:wz($.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=Cz($);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=Sz($.message),J=Q?.output,j=yz(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:bz($.status),text:$.outputText,iterations:$.iterations,usage:W}]}}function cz($){if(typeof $==="string")return $;if($ instanceof Error)return $.message;try{return JSON.stringify($)}catch{return String($)}}async function uz($){let Z=(typeof $.content==="function"?await $.content():$.content).trim();return Z.length>0?Z:void 0}function dz($,W){let Z=$.trim(),Q=W.map((J)=>J.trim()).filter(Boolean).join(`
|
|
197
|
+
`;function UH($=process.env){return{maxToolResultChars:AH($[F3.maxToolResultChars]),maxTotalTextBytes:AH($[F3.maxTotalTextBytes]),minOutdatedRewriteBytes:Tz($[F3.minOutdatedRewriteBytes])}}class U3{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=x4($.maxToolResultChars,Hz),this.maxFileContentChars=x4($.maxFileContentChars,Gz),this.maxTotalTextBytes=x4($.maxTotalTextBytes,Kz),this.mediaBudget=$.mediaBudget??{},this.maxAssistantTextChars=x4($.maxAssistantTextChars,Fz),this.maxAssistantToolMarkupChars=x4($.maxAssistantToolMarkupChars,Az),this.minOutdatedRewriteBytes=zz($.minOutdatedRewriteBytes,Uz)}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=VH(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=VH($.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=k8($.content,this.maxFileContentChars,GH);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(M$(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 $?`${HH} Tool: ${$}.`:HH}resetIndexes(){this.indexedMessageCount=0,this.indexedTailRef=void 0,this.toolNameByIdCache.clear(),this.readLocatorsByToolUseIdCache.clear(),this.latestReadToolUseByLocatorCache.clear(),this.latestFullContentOwnerByPathCache.clear(),this.readResultLocatorCache=new WeakMap}getReadLocators($){let 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(M$(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)??L2;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:L2}}if(j.type==="image"){if(J===0)return j;return J-=1,{type:"text",text:L2}}if(M$(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:L2};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=L2;else if(typeof Q.content==="string")Q.content=L2;else Q.result=L2;return Q}isReadTool($){return!!$&&Dz.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(M$(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(f3($))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 k8($,this.maxToolResultChars,GH)}truncateAssistantText($){if(this.hasRepeatedToolCallMarkup($))return k8($,this.maxAssistantToolMarkupChars,Lz);return k8($,this.maxAssistantTextChars,_z)}hasRepeatedToolCallMarkup($){if($.length<=this.maxAssistantToolMarkupChars)return!1;let W=0;for(let Z of $.matchAll(Oz))if(W+=1,W>=fz)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)=>Mz(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=qz(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+=k9(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(M$(J))W+=k9(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:BH,makeMarker:KH,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"){I9(J.input,Z);continue}if(Q.role==="assistant"&&J.type==="text"){W.push({byteLength:j0(J.text),minBytes:BH,makeMarker:KH,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:g4,makeMarker:m4,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:g4,makeMarker:m4,get:()=>j.text,set:(X)=>{j.text=X}});else if(j.type==="file")W.push({byteLength:j0(j.content),minBytes:g4,makeMarker:m4,get:()=>j.content,set:(X)=>{j.content=X}});else if(M$(j))I9(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=Yz(),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 Vz(this.mediaBudget)}applyMediaBudgetToBlock($,W,Z){if(A3($))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(A3($))return this.limitImageContent($,W,Z);if(M$($))return this.limitNestedMedia($,W,Z);return $}limitNestedMedia($,W,Z){if(A3($)){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(!fH($))return{type:"text",text:YH};let Q=Bz($.mediaType,$.data,{maxImageEncodedBytes:W.maxImageEncodedBytes,maxImageDecodedBytes:W.maxImageDecodedBytes,maxTotalMediaBytes:W.maxTotalMediaBytes},Z);if(!Q.ok)return{type:"text",text:YH};return{...$,data:Q.base64,mediaType:Q.mediaType}}}var FH=String.raw`[\|\uFF5C]`,Oz=new RegExp(String.raw`<\s*(?:${FH}\s*)?DSML\s*(?:${FH}\s*)?(?:tool_calls|invoke)\b[^>]*>|<\s*/?\s*(?:tool_calls?|tool_call|function_calls?|function_call|invoke)\b[^>]*>`,"gi");function j0($){return Buffer.byteLength($,"utf8")}function AH($){if($===void 0)return;let W=Number.parseInt($,10);return Number.isFinite(W)&&W>0?W:void 0}function Tz($){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 x4($,W){return typeof $==="number"&&Number.isFinite($)&&$>0?Math.floor($):W}function zz($,W){if(typeof $!=="number"||Number.isNaN($)||$<0)return W;return Number.isFinite($)?Math.floor($):$}function k8($,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 qz($,W,Z){if(j0($)<=W)return $;let Q=0,J=$.length,j=k8($,0,Z);while(Q<=J){let X=Q+J>>>1,Y=k8($,X,Z);if(j0(Y)<=W)j=Y,Q=X+1;else J=X-1}return j}function Mz($){if($.type==="tool_use")return{...$,input:x9($.input)};if($.type!=="tool_result"||typeof $.content==="string")return{...$};return{...$,content:$.content.map((W)=>M$(W)?x9(W):{...W})}}function M$($){if($===null||typeof $!=="object")return!1;let W=$.type;return W!=="text"&&W!=="image"&&W!=="file"}function A3($){return $!==null&&typeof $==="object"&&$.type==="image"}function fH($){return $!==null&&typeof $==="object"&&$.type==="image"&&typeof $.data==="string"&&typeof $.mediaType==="string"}function f3($){return fH($)}function k9($){if(typeof $==="string")return j0($);if(Array.isArray($)){let W=0;for(let Z of $)W+=k9(Z);return W}if($!==null&&typeof $==="object"){if(f3($))return 0;let W=0;for(let Z of Object.values($))W+=k9(Z);return W}return 0}function I9($,W){if(Array.isArray($)){$.forEach((Z,Q)=>{if(typeof Z==="string")W.push({byteLength:j0(Z),minBytes:g4,makeMarker:m4,get:()=>$[Q],set:(J)=>{$[Q]=J}});else I9(Z,W)});return}if($!==null&&typeof $==="object"){if(f3($))return;let Z=$;for(let Q of Object.keys(Z)){let J=Z[Q];if(typeof J==="string")W.push({byteLength:j0(J),minBytes:g4,makeMarker:m4,get:()=>Z[Q],set:(j)=>{Z[Q]=j}});else I9(J,W)}}}function x9($){if(Array.isArray($))return $.map(x9);if($!==null&&typeof $==="object"){let W={};for(let[Z,Q]of Object.entries($))W[Z]=x9(Q);return W}return $}function D3(){return`conv_${Date.now()}_${Math.random().toString(36).slice(2,9)}`}class _3{messages=[];conversationId=D3();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=D3(),this.sessionStarted=!1}clearHistory(){this.messages=[],this.conversationId=D3(),this.sessionStarted=!1}restore($){this.messages=[...$],this.sessionStarted=!1}isSessionStarted(){return this.sessionStarted}markSessionStarted(){this.sessionStarted=!0}}function DH($){let{agentConfig:W}=$,Z=Nz(W),Q=Rz(W),J=$.hooks,j=Ez(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 Nz($){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($.apiTimeoutMs!==void 0)W.apiTimeoutMs=$.apiTimeoutMs;return Object.keys(W).length>0?W:void 0}function Rz($){let W=$.providerConfig?.family;return{id:$.modelId,provider:$.providerId,family:W}}function Ez($){if($===void 0)return;return $>=2?"parallel":"sequential"}var _H={};w(_H,{normalizeConnectionUpdate:()=>O2,buildConnectionUpdate:()=>L3});function L3($){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 O2($){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 wz(){return{lastToolName:"",lastToolSignature:"",consecutiveIdenticalCount:0}}function Cz($){$.lastToolName="",$.lastToolSignature="",$.consecutiveIdenticalCount=0}function O3($){if($==null||typeof $!=="object")return $;if(Array.isArray($))return $.map(O3);let W={};for(let Z of Object.keys($).sort())W[Z]=O3($[Z]);return W}function Pz($){if($==null)return"null";if(typeof $==="string")return $;if(typeof $!=="object")return String($);try{return JSON.stringify(O3($))}catch{return String($)}}function Sz($,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 LH={softThreshold:3,hardThreshold:5};class T3{config;state=wz();constructor($){this.config={softThreshold:$?.softThreshold??LH.softThreshold,hardThreshold:$?.hardThreshold??LH.hardThreshold}}inspect($){let W=Pz($.input),Z=Sz(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(){Cz(this.state)}}class z3{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=await yz({iteration:$.iteration,consecutiveMistakes:Z,maxConsecutiveMistakes:W,reason:$.reason,details:$.details},this.options.onLimitReached);if(J.action==="continue"){let j=J.guidance?.trim();if(j)this.options.appendRecoveryNotice(j,$.reason);return this.consecutiveMistakes=0,{action:"continue",guidance:j}}return{action:"stop",reason:J.reason?.trim()||void 0,message:bz({iteration:$.iteration,consecutiveMistakes:Z,maxConsecutiveMistakes:W,reason:$.reason,details:$.details,stopReason:J.reason})}}reset(){this.consecutiveMistakes=0}get value(){return this.consecutiveMistakes}}function bz($){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 yz($,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 hz($){switch($){case"auto_compaction":case"manual_compaction":case"compaction_budget_emergency":return $;default:return}}function kz($){let W=$.content.filter((Z)=>Z.type==="text");if(W.length===0)return;return W.map((Z)=>Z.text).join("")}function Iz($){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 xz($){return $.content.find((W)=>W.type==="tool-result")}function gz($){switch($){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}function mz($){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 q3{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:hz($.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=kz($);if(Z!==void 0)W.push({type:"content_end",contentType:"text",text:Z});let Q=Iz($);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=xz($.message),J=Q?.output,j=mz(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:gz($.status),text:$.outputText,iterations:$.iterations,usage:W}]}}function iz($){if(typeof $==="string")return $;if($ instanceof Error)return $.message;try{return JSON.stringify($)}catch{return String($)}}async function nz($){let Z=(typeof $.content==="function"?await $.content():$.content).trim();return Z.length>0?Z:void 0}function az($,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 lz($,W){let Z=W?.["*"]??{},Q=W?.[$]??{};return{...Z,...Q}.enabled!==!1}function pz($,W){return $.filter((Z)=>lz(Z.name,W))}function rz($,W){return p1(pz($,W))}function iz($){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:_H(J?.options,X.options)},Q={...Q,...X.messages?{messages:X.messages}:{},...X.tools?{tools:X.tools}:{},...X.options?{options:_H(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 M${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 z3;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??mz,this.conversation=new D3($.initialMessages),this.messageBuilder=new A3(KH()),this.contributionRegistry=vz({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 T3({maxConsecutiveMistakes:Z,onLimitReached:$.onConsecutiveMistakeLimitReached,emit:(j)=>this.emitLegacyEvent(j),log:(j,X,Y)=>nz(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 O3(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=O2($),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 uz(W);if(Z)$.push(Z)}return dz(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 D=await oz(Z,$.userImages,$.userFiles,this.config.userFileContentLoader);this.conversation.appendMessage({role:"user",content:D})}let Q=await this.composeSystemPrompt(),J=QH(this.config,this.logger,this.telemetry),j=new Map;for(let D of this.contributionRegistry.getRegisteredTools())j.set(D.name,D);let X=rz([...j.values()],this.config.toolPolicies),Y=new Map;for(let D of X)Y.set(D.name,D);for(let D of this.config.tools)Y.set(D.name,D);let V=this.conversation.getConversationId(),B=LH(this.config),H=Array.from(Y.values()),G=b9(this.conversation.getMessages()),K=AH({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,[VB]: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((D)=>{this.handleRuntimeEvent(D)}),f,U;try{if($.isContinue)f=await F.continue(void 0);else f=await F.run("")}catch(D){U=D instanceof Error?D:Error(String(D))}finally{A();try{await this.activeTrackerWork}catch(D){this.logger?.error?.("SessionRuntime tracker work failed during drain",{agentId:this.agentId,error:D})}this.activeRuntime=null,this.running=!1,this.abortRequested=!1,this.abortReason=void 0}if(f&&f.messages.length>0){let D=y8(f.messages);this.conversation.replaceMessages(D)}let _=new Date;try{return this.buildLegacyResult({runResult:f,thrownError:U,startedAt:W,endedAt:_})}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 $=iz([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=y8(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:b9(X.messages)}:{},...X.systemPrompt!==void 0?{systemPrompt:X.systemPrompt}:{}}}}async prepareMessagesForModelRequest($){let W=await this.prepareProviderMessagesForApi(y9($));return b9(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?cz(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(y8($));return}if(W.length===0)return;let Z=new Set(this.conversation.getMessages().map((J)=>J.id).filter((J)=>typeof J==="string")),Q=y8(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":az(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?y8(W.messages):this.conversation.getMessages(),H=LH(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 nz($,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 az($){if(!$)return"error";switch($.status){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}async function oz($,W,Z,Q){let{buildInitialUserContent:J}=await Promise.resolve().then(() => DH);return J($,W,Z,Q)}function LH($){if($.knownModels?.[$.modelId])return $.knownModels[$.modelId];let W=G3($);if(W?.[$.modelId])return W[$.modelId];return}import{buildClineSystemPrompt as OH}from"@cline/shared";function TH($,W){let Z=$.trim();if(W.providerId.toLowerCase()!=="cline")return Z;return OH({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 zH($,W){let Z=$.trim();if(W.providerId.toLowerCase()!=="cline")return Z;return OH({ide:W.clineIdeName||"Terminal",workspaceRoot:W.cwd?.trim()||"/",providerId:W.providerId,overridePrompt:Z,metadata:W.workspaceMetadata,platform:W.clinePlatform})}function R$($){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}),updateConnectionDefaults:(Z)=>{W={...W,...Z}}}}function T2($){let W=$.configProvider.getRuntimeConfig(),Z=$.kind==="teammate"?TH($.prompt,W):zH($.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 N$($){let W=T2($),Z=new M$(W);if(W.onEvent)Z.subscribeEvents(W.onEvent);return Z}var ez=q3.object({systemPrompt:q3.string().describe("System prompt defining the sub-agent's behavior"),task:q3.string().describe("Task for the sub-agent to complete")});function E$($){return sz({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:tz(ez),execute:async(W,Z)=>{let Q=$.createSubAgentTools?await $.createSubAgentTools(W,Z):$.subAgentTools??[],J=N$({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 U0,TEAM_AWAIT_TIMEOUT_MS as $q,TEAM_RUN_MESSAGE_PREVIEW_LIMIT as Wq,TEAM_RUN_TEXT_PREVIEW_LIMIT as Zq,TEAM_TASK_IGNORED_FIELDS_BY_ACTION as Qq,TeamAttachOutcomeFragmentInputSchema as qH,TeamAwaitRunsInputSchema as MH,TeamBroadcastInputSchema as RH,TeamBroadcastToolResultSchema as Jq,TeamCancelRunInputSchema as NH,TeamCancelRunToolResultSchema as jq,TeamCleanupInputSchema as EH,TeamCleanupToolResultSchema as Xq,TeamCreateOutcomeInputSchema as wH,TeamCreateOutcomeToolResultSchema as Yq,TeamFinalizeOutcomeInputSchema as CH,TeamFinalizeOutcomeToolResultSchema as Vq,TeamListOutcomesInputSchema as PH,TeamListRunsInputSchema as SH,TeamMailboxMessageToolResultSchema as Bq,TeamMissionLogInputSchema as bH,TeamMissionLogToolResultSchema as Hq,TeamOutcomeFragmentToolResultSchema as yH,TeamOutcomeToolResultSchema as Gq,TeamReadMailboxInputSchema as hH,TeamReviewOutcomeFragmentInputSchema as kH,TeamRunTaskInputSchema as IH,TeamRunTaskToolResultSchema as M3,TeamRunToolSummarySchema as R3,TeamSendMessageInputSchema as xH,TeamSendMessageToolResultSchema as Kq,TeamShutdownTeammateInputSchema as gH,TeamSimpleAgentStatusToolResultSchema as mH,TeamSpawnTeammateInputSchema as vH,TeamStatusInputSchema as cH,TeamStatusToolResultSchema as Fq,TeamTaskInputSchema as uH,TeamTaskToolResultSchema as m4,validateWithZod as x,zodToJsonSchema as f0}from"@cline/shared";function dH($,W){let Z=$.replace(/\s+/g," ").trim();if(Z.length<=W)return Z;return`${Z.slice(0,Math.max(0,W-3)).trimEnd()}...`}function z2($,W){if($===void 0)throw Error(`Missing required field: ${W}`);return $}function Aq($){let W=$.result;if(!W)return;return{textPreview:dH(W.text,Zq),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 x9($){return $?.toISOString()}function N3($){return{id:$.id,agentId:$.agentId,taskId:$.taskId,status:$.status,messagePreview:dH($.message,Wq),priority:$.priority,retryCount:$.retryCount,maxRetries:$.maxRetries,nextAttemptAt:x9($.nextAttemptAt),continueConversation:$.continueConversation,startedAt:$.startedAt.toISOString(),endedAt:x9($.endedAt),leaseOwner:$.leaseOwner,heartbeatAt:x9($.heartbeatAt),lastProgressAt:x9($.lastProgressAt),lastProgressMessage:$.lastProgressMessage,currentActivity:$.currentActivity,error:$.error,resultSummary:Aq($)}}function Uq($){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 k8=["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 lH($){let W=[];if($.createBaseTools)W.push(...$.createBaseTools());W.push(...q2({runtime:$.runtime,requesterId:$.spec.agentId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!1})),$.runtime.spawnTeammate({agentId:$.spec.agentId,config:T2({kind:"teammate",prompt:$.spec.rolePrompt,role:$.spec.rolePrompt,configProvider:$.teammateConfigProvider,tools:W,maxIterations:$.spec.maxIterations,cwd:$.teammateConfigProvider.getRuntimeConfig().cwd})})}function I8($){let W=$.leadAgentId??"lead",Z=$.restoredFromPersistence===!0,Q=q2({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;lH({runtime:$.runtime,requesterId:W,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:j}),J.push(j.agentId)}return{tools:Q,restoredFromPersistence:Z,restoredTeammates:J}}function q2($){let W=$.allowSpawn??!0,Z=$.includeSpawnTool??!0,Q=$.includeManagementTools??!0,J=[];if(Z)J.push(U0({name:"team_spawn_teammate",description:"Spawn a teammate with a required agentId and rolePrompt.",inputSchema:f0(vH),execute:async(X)=>{let Y=x(vH,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(lH({runtime:$.runtime,requesterId:$.requesterId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:V}),!Q)$.onLeadToolsUnlocked?.(q2({...$,includeSpawnTool:!1,includeManagementTools:!0,onLeadToolsUnlocked:void 0}));return x(mH,{agentId:Y.agentId,status:"spawned"})}}));if(!Q)return J;J.push(U0({name:"team_shutdown_teammate",description:"Shutdown a teammate by agentId.",inputSchema:f0(gH),execute:async(X)=>{let Y=x(gH,X);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");return $.runtime.shutdownTeammate(Y.agentId,Y.reason),x(mH,{agentId:Y.agentId,status:"stopped"})}})),J.push(U0({name:"team_status",description:"Return a snapshot of team members, task counts, mailbox, and mission log stats.",inputSchema:f0(cH),execute:async(X)=>{return x(cH,X),x(Fq,$.runtime.getSnapshot())}})),J.push(U0({name:"team_task",description:"Manage shared team tasks with action-specific payloads. create requires title and description, with optional dependsOn and assignee. list accepts optional status, assignee. claim requires taskId. complete requires taskId and summary. block requires taskId and reason. Do not include fields from other actions.",inputSchema:f0(uH),execute:async(X)=>{let Y=x(uH,X);switch(Y.action){case"create":{let V=new Set(Qq.create??[]),B=Object.entries(X).filter(([G,K])=>V.has(G)&&K!=null).map(([G])=>G),H=$.runtime.createTask({title:z2(Y.title,"title"),description:z2(Y.description,"description"),dependsOn:Y.dependsOn,assignee:Y.assignee,createdBy:$.requesterId});return x(m4,{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(m4,{action:"list",tasks:$.runtime.listTaskItems({status:Y.status,assignee:Y.assignee})});case"claim":{let V=$.runtime.claimTask(z2(Y.taskId,"taskId"),$.requesterId);return x(m4,{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(z2(Y.taskId,"taskId"),$.requesterId,z2(Y.summary,"summary"));return x(m4,{action:"complete",taskId:V.id,status:V.status})}case"block":{let V=$.runtime.blockTask(z2(Y.taskId,"taskId"),$.requesterId,z2(Y.reason,"reason"));return x(m4,{action:"block",taskId:V.id,status:V.status})}}}}));let j=new Map;return J.push(U0({name:"team_run_task",description:"Route a delegated task to a teammate. Choose sync (wait) or async (run in background).",inputSchema:f0(IH),execute:async(X)=>{let Y=x(IH,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(M3,{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(M3,{...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(M3,{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(U0({name:"team_cancel_run",description:"Cancel one async teammate run.",inputSchema:f0(NH),execute:async(X)=>{let Y=x(NH,X),V=$.runtime.cancelRun(Y.runId,Y.reason);return x(jq,{runId:V.id,status:V.status})}})),J.push(U0({name:"team_list_runs",description:"List teammate runs started with team_run_task in async mode, including live activity/progress fields when available.",inputSchema:f0(SH),execute:async(X)=>x(R3.array(),$.runtime.listRuns(x(SH,X)).map(N3))})),J.push(U0({name:"team_await_runs",description:"Wait for async teammate runs. Provide runId to wait for one run, or omit it to wait for all active async runs. Uses a long timeout for legitimate teammate work.",inputSchema:f0(MH),timeoutMs:$q,execute:async(X)=>{let Y=x(MH,X);if(Y.runId){let H=await $.runtime.awaitRun(Y.runId);return Uq(H),x(R3,N3(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(R3.array(),V.map(N3))}})),J.push(U0({name:"team_send_message",description:"Send a mailbox message to a specific teammate.",inputSchema:f0(xH),execute:async(X)=>{let Y=x(xH,X),V=$.runtime.sendMessage($.requesterId,Y.toAgentId,Y.subject,Y.body,Y.taskId??void 0);return x(Kq,{id:V.id,toAgentId:V.toAgentId})}})),J.push(U0({name:"team_broadcast",description:"Broadcast a message to all teammates.",inputSchema:f0(RH),execute:async(X)=>{let Y=x(RH,X),V=$.runtime.broadcast($.requesterId,Y.subject,Y.body,{taskId:Y.taskId??void 0});return x(Jq,{delivered:V.length})}})),J.push(U0({name:"team_read_mailbox",description:"Read the current agent mailbox.",inputSchema:f0(hH),execute:async(X)=>{let Y=x(hH,X);return x(Bq.array(),$.runtime.listMailbox($.requesterId,{unreadOnly:Y.unreadOnly,markRead:!0}))}})),J.push(U0({name:"team_mission_log",description:"Append a mission log update for your team.",inputSchema:f0(bH),execute:async(X)=>{let Y=x(bH,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(Hq,{id:V.id})}})),J.push(U0({name:"team_cleanup",description:"Clean up the team runtime. Fails if teammates are still running.",inputSchema:f0(EH),execute:async(X)=>{if(x(EH,X),$.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can run cleanup.");return $.runtime.cleanup(),x(Xq,{status:"cleaned"})}})),J.push(U0({name:"team_create_outcome",description:"Create a converged team outcome.",inputSchema:f0(wH),execute:async(X)=>{let Y=x(wH,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(U0({name:"team_attach_outcome_fragment",description:"Attach a fragment to an outcome section.",inputSchema:f0(qH),execute:async(X)=>{let Y=x(qH,X),V=$.runtime.attachOutcomeFragment({outcomeId:Y.outcomeId,section:Y.section,sourceAgentId:$.requesterId,sourceRunId:Y.sourceRunId||void 0,content:Y.content});return x(yH,{fragmentId:V.id,status:V.status})}})),J.push(U0({name:"team_review_outcome_fragment",description:"Review one outcome fragment.",inputSchema:f0(kH),execute:async(X)=>{let Y=x(kH,X),V=$.runtime.reviewOutcomeFragment({fragmentId:Y.fragmentId,reviewedBy:$.requesterId,approved:Y.approved});return x(yH,{fragmentId:V.id,status:V.status})}})),J.push(U0({name:"team_finalize_outcome",description:"Finalize one outcome.",inputSchema:f0(CH),execute:async(X)=>{let Y=x(CH,X),V=$.runtime.finalizeOutcome(Y.outcomeId);return x(Vq,{outcomeId:V.id,status:V.status})}})),J.push(U0({name:"team_list_outcomes",description:"List team outcomes.",inputSchema:f0(PH),execute:async(X)=>{return x(PH,X),x(Gq.array(),$.runtime.listOutcomes())}})),J}function g9($){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 pH($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}var fq=[{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:E$({configProvider:{}}).description,headlessToolNames:["spawn_agent"]},{id:"teams",description:"Enable team collaboration tools for teammate management, task coordination, mailbox messaging, mission logs, and outcomes.",headlessToolNames:[...k8]}],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 _q($){return $==="plan"||$==="yolo"?$:"act"}function iH($){let W=_q($.mode),Z=o0[l1({mode:W})],Q=b8($.providerId??"",$.modelId??"",W,S8);return{mode:W,flags:{...Z,...Q,...typeof $.enableSpawnAgent==="boolean"?{enableSpawnAgent:$.enableSpawnAgent}:{},...typeof $.enableAgentTeams==="boolean"?{enableAgentTeams:$.enableAgentTeams}:{}}}}function rH($,W){if(W.disabledToolIds?.has($))return!1;let{flags:Z}=iH(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 Lq($,W){if($.id==="editor"){let{flags:Z}=iH(W),Q=Z.enableApplyPatch===!0&&Z.enableEditor!==!0;return{...$,defaultEnabled:rH($.id,W),headlessToolNames:[Q?"apply_patch":"editor"]}}return{...$,defaultEnabled:rH($.id,W)}}function M2($={}){return fq.map((W)=>Lq(W,$))}function m9($={}){return M2($).filter((W)=>W.defaultEnabled).map((W)=>W.id)}function v9($){if(!$.enabled)return new Set;let W=M2($.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 v4($,W={}){return M2(W).filter((Z)=>$.has(Z.id)).flatMap((Z)=>Z.headlessToolNames)}function c9($,W={}){return v4($,W)}function R2($={}){let{executorOptions:W={},executors:Z,...Q}=$,J={...P8(W),...Z??{}};return T$({...Q,executors:J})}import{mkdirSync as Rq,writeFileSync as Nq}from"node:fs";import{dirname as Eq}from"node:path";import{normalizeUserInput as wq,stripModeNotices as Cq}from"@cline/shared";import{nanoid as Pq}from"nanoid";var aH={};E(aH,{sanitizeSessionToken:()=>N2,parseTeamTaskSubSessionId:()=>g8,parseSubSessionId:()=>u4,makeTeamTaskSubSessionId:()=>c4,makeSubSessionId:()=>x8,deriveSubsessionStatus:()=>d4});import{nanoid as zq}from"nanoid";function N2($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function x8($,W){let Z=N2($),Q=N2(W),J=`${Z}__${Q}`;return J.length>180?J.slice(0,180):J}function c4($,W){let Z=N2($),Q=N2(W);return`${Z}__teamtask__${Q}__${zq(6)}`}function g8($){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 u4($){if(g8($))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 d4($){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 W0}from"zod";var tH={};E(tH,{isTerminalSessionStatus:()=>sH,isNonTerminalSessionStatus:()=>F0,SessionSource:()=>A0,SESSION_STATUSES:()=>l4,NON_TERMINAL_SESSION_STATUSES:()=>oH});import{SESSION_STATUS_VALUES as qq}from"@cline/shared";var l4=qq,oH=["idle","running","pending"];function sH($){return!oH.includes($)}function F0($){return!sH($)}var A0={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=W0.enum(l4),g0=W0.object({version:W0.literal(1),session_id:W0.string().min(1),source:W0.string().min(1),pid:W0.number().int(),started_at:W0.string().min(1),ended_at:W0.string().min(1).optional(),exit_code:W0.number().int().nullable().optional(),status:Mq,interactive:W0.boolean(),provider:W0.string().min(1),model:W0.string().min(1),cwd:W0.string().min(1),workspace_root:W0.string().min(1),team_name:W0.string().min(1).optional(),enable_tools:W0.boolean(),enable_spawn:W0.boolean(),enable_teams:W0.boolean(),prompt:W0.string().optional(),metadata:W0.record(W0.string(),W0.unknown()).optional(),messages_path:W0.string().min(1).optional(),compaction_path:W0.string().min(1).optional()});function eH($){if(!$)return!1;return Object.values($).some((W)=>typeof W==="function")}function w3($,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 $G($){return JSON.stringify($,(W,Z)=>{if(Z instanceof Error)return{name:Z.name,message:Z.message,stack:Z.stack};return Z})}function r1($){return typeof $==="string"&&$.trim()?$.trim():void 0}function E3($,W){let Z={...$};Z.id=r1(Z.id)??Pq();let Q=Z.modelInfo&&typeof Z.modelInfo==="object"?{...Z.modelInfo}:void 0,J={id:r1(Q?.id)??r1(Z.modelId)??r1(W?.id),provider:r1(Q?.provider)??r1(Z.providerId)??r1(W?.provider),family:r1(Q?.family)??r1(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 u9($){return $.map((W)=>E3(W))}function d9($,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 E3(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]={...E3(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 p4($){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 Sq=120;function E2($){let W=$?.trim();return W?W.slice(0,Sq):void 0}function C3($){let W=Cq(wq($??"")).trim();if(!W)return;return E2(W.split(`
|
|
203
|
-
`)[0]?.trim())}function
|
|
204
|
-
`,"utf8")}function ZG($,W){return g0.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 QG($,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}}O0();var JG={};E(JG,{summarizeUsageFromMessages:()=>v8,sumUsageTotals:()=>i4,getCurrentContextSize:()=>b3,createInitialAccumulatedUsage:()=>z0,accumulateUsageTotals:()=>D0});function z0(){return{inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0}}function D0($,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 i4($){let W=z0();for(let Z of $)W=D0(W,Z);return W}function m8($){return typeof $==="number"&&Number.isFinite($)?$:0}function v8($){let W=z0();for(let Z of $){let Q=Z.metrics;if(!Q)continue;W=D0(W,{inputTokens:m8(Q.inputTokens),outputTokens:m8(Q.outputTokens),cacheReadTokens:m8(Q.cacheReadTokens),cacheWriteTokens:m8(Q.cacheWriteTokens),totalCost:m8(Q.cost)})}return W}function b3($){for(let W=$.length-1;W>=0;W-=1){let Z=$[W];if(Z?.role!=="assistant")continue;let Q=m8(Z.metrics?.inputTokens);return Q>0?Q:void 0}return}function bq($){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 y3($){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 i1($){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 yq($){return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheWriteTokens:$.cacheWriteTokens,cacheReadTokens:$.cacheReadTokens,totalCost:$.cost}}function hq($){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 h3($,W,Z){let{sessionId:Q,config:J,liveSession:j,emit:X}=$,Y=J.telemetry,V=j?.runtime.teamRuntime,B=Z?.isPrimaryAgentEvent??!0,H=y3(W),G=i1({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=bq(W.input);if(K)lW(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(A8(Y,{ulid:Q,tool:K,autoApproved:void 0,success:F,modelId:J.modelId,provider:J.providerId,...G}),!F&&(K==="editor"||K==="apply_patch"))pW(Y,{ulid:Q,modelId:J.modelId,provider:J.providerId,errorType:W.error,...G})}if(W.type==="notice"&&W.reason==="api_error")s6(Y,{ulid:Q,model:J.modelId,provider:J.providerId,errorMessage:W.message,...G});if(W.type==="error")s6(Y,{ulid:Q,model:J.modelId,provider:J.providerId,errorMessage:W.error?.message??"unknown error",...G});if(W.type==="usage"&&j?.turnUsageBaseline){let K=yq(W);if(B){j.turnPrimaryUsage=D0(j.turnPrimaryUsage??z0(),K);let A=D0(j.turnUsageBaseline,j.turnPrimaryUsage);$.usageBySession.set(Q,A),F8(Y,{ulid:Q,provider:J.providerId,model:J.modelId,source:"assistant",mode:J.mode,...G}),uW(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=hq({isPrimaryAgentEvent:B,overrides:Z,eventMetadata:H}),f=j.turnUsageByAgent??new Map;j.turnUsageByAgent=f,f.set(A,D0(f.get(A)??z0(),K))}let F=D0(j.turnPrimaryUsage??z0(),i4(j.turnUsageByAgent?.values()??[]));$.aggregateUsageBySession.set(Q,D0(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:$G(W),ts:Date.now()}})}function C$($){return $.workspaceRoot??$.cwd}import{resolveProviderRequestHeaders as pR}from"@cline/llms";import{hasRuntimeConfigExtension as rR}from"@cline/shared";var c8="0.0.60-nightly.1784085310";var n4={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:c8,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"]};A1();import{existsSync as a9,readFileSync as TM,statSync as zM}from"node:fs";import{basename as qM,dirname as i9,join as o9,resolve as n9}from"node:path";import{discoverPluginModulePaths as MM,resolveConfiguredPluginModulePaths as NG,resolvePluginConfigSearchPaths as RM,SKILLS_CONFIG_DIRECTORY_NAME as NM}from"@cline/shared/storage";import{resolve as $M}from"node:path";import{normalizePluginManifest as WM}from"@cline/shared";import{existsSync as N0,readFileSync as d8}from"node:fs";import{builtinModules as kq,createRequire as g3}from"node:module";import{dirname as P$,extname as o4,isAbsolute as Iq,resolve as a}from"node:path";import{fileURLToPath as YG}from"node:url";import{PLUGIN_FILE_EXTENSIONS as xq}from"@cline/shared";var VG=P$(YG(import.meta.url)),gq=g3(import.meta.url),mq=a(VG,"..","..","..","..",".."),k3=uq(mq),vq=["@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"],m3=new Set(kq.flatMap(($)=>[$,$.replace(/^node:/,"")])),a4=new Set(xq),cq=["development","node","import","require","default"];function uq($){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(N0(J))W[Q]=J;for(let Q of["agents","core","llms","shared"]){let J=a($,"packages",Q),j=a(J,"package.json");if(!N0(j))continue;try{let X=JSON.parse(d8(j,"utf8"));if(typeof X.name!=="string"||!X.exports)continue;if(typeof X.exports==="string"){let Y=a(J,X.exports);if(N0(Y))W[X.name]=Y;continue}if(typeof X.exports!=="object")continue;for(let[Y,V]of Object.entries(X.exports)){let B=dq(J,V);if(!B)continue;let H=Y==="."?X.name:`${X.name}/${Y.replace(/^\.\//,"")}`;W[H]=B}}catch{}}return W}function dq($,W){let Z=v3(W);if(!Z)return null;let Q=BG($,Z);for(let J of Q)if(N0(J))return J;return null}function v3($,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 cq){let J=v3(Z[Q],W);if(J)return J}return null}function BG($,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 lq($){return Object.fromEntries(Object.entries($).sort(([W],[Z])=>Z.length-W.length))}function l9($){return!($.startsWith(".")||$.startsWith("/")||$.startsWith("file:")||$.startsWith("data:")||$.startsWith("http:")||$.startsWith("https:"))}function u8($){if($.startsWith("@")){let[W,Z]=$.split("/",3);return Z?`${W}/${Z}`:$}return $.split("/",1)[0]??$}function pq($){let W=u8($);if($===W)return".";return`.${$.slice(W.length)}`}function HG($){return u8($).startsWith("@cline/")}function I3($,W){let Z=u8(W),Q=P$($);while(!0){let J=a(Q,"node_modules",Z);if(N0(J)||N0(a(J,"package.json")))return!0;let j=a(Q,"..");if(j===Q)return!1;Q=j}}function XG($){return x3($)!==null}function x3($){try{return gq.resolve($)}catch{}return rq($)}function rq($){let W=u8($),Z=GG(W);if(!Z)return null;let Q=a(Z,"package.json");try{let J=JSON.parse(d8(Q,"utf8")),j=pq($),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=v3(X)??(j==="."&&typeof J.main==="string"?J.main:null);if(!Y)return null;let V=a(Z,Y),B=[V,...BG(Z,Y).filter((H)=>H!==V)];for(let H of B)if(N0(H))return H;return null}catch{return null}}function iq(){let $=[VG],W=process.env.CLINE_WRAPPER_PATH?.trim();if(W)$.push(P$(P$(W)));let Z=process.execPath?.trim();if(Z)$.push(P$(Z));return[...new Set($.map((Q)=>a(Q)))]}function nq($,W){let Z=$;while(!0){let Q=a(Z,"package.json");if(N0(Q))try{if(JSON.parse(d8(Q,"utf8")).name===W)return Z}catch{}let J=a(Z,"node_modules",W,"package.json");if(N0(J))return P$(J);let j=a(Z,"..");if(j===Z)return null;Z=j}}function GG($){for(let W of iq()){let Z=nq(W,$);if(Z)return Z}return null}function aq($){let Z=P$($);for(let Q=0;Q<4;Q++){let J=a(Z,"package.json");if(N0(J))try{let X=JSON.parse(d8(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 KG($,W){let Z=W.startsWith("file:")?YG(W):Iq(W)?W:a(P$($),W);if(N0(Z)&&a4.has(o4(Z)))return Z;for(let Q of a4){let J=`${Z}${Q}`;if(N0(J))return J}for(let Q of a4){let J=a(Z,`index${Q}`);if(N0(J))return J}return null}function FG($){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 oq($){return o4($)!==".ts"}function AG($,W,Z=new Set){if(Z.has($)||!N0($))return;if(Z.add($),!a4.has(o4($)))return;let Q=d8($,"utf8"),J=oq($);for(let j of FG(Q)){if(j.startsWith("node:")||m3.has(j))continue;if(l9(j)){if(!J)continue;if(Object.hasOwn(k3,j)||Object.hasOwn(k3,u8(j))||I3($,j)||HG(j)&&XG(j)||W&&XG(j))continue;throw Error(`Cannot find module '${u8(j)}'`)}let X=KG($,j);if(X)AG(X,W,Z)}}function UG($,W=new Set,Z=new Set){if(W.has($)||!N0($))return Z;if(W.add($),!a4.has(o4($)))return Z;let Q=d8($,"utf8");for(let J of FG(Q)){if(Z.add(J),l9(J))continue;let j=KG($,J);if(j)UG(j,W,Z)}return Z}function sq($,W){let Z=g3($),Q={},J=UG($),j=new Set(vq);for(let[X,Y]of Object.entries(k3)){try{Z.resolve(X);continue}catch{}Q[X]=Y}for(let X of J)if(l9(X)&&(HG(X)||W))j.add(X);for(let X of j){if(Object.hasOwn(Q,X)||I3($,X))continue;let Y=x3(X);if(Y)Q[X]=Y}if(!W)return Q;for(let X of J){if(!l9(X)||Object.hasOwn(Q,X)||I3($,X)||X.startsWith("node:")||m3.has(X))continue;let Y=x3(X);if(Y)Q[X]=Y}return Q}function tq($){let W=o4($);return W===".ts"||W===".tsx"||W===".mts"||W===".cts"}var w2;function eq(){if(w2!==void 0)return w2;let $=GG("jiti");if(!$)return w2=null,null;let W=a($,"dist","babel.cjs");if(!N0(W))return w2=null,null;try{let Q=g3(W)(W);w2=typeof Q==="function"?Q:null}catch{w2=null}return w2}async function fG($,W={}){let Z=!aq($);AG($,Z);let Q=sq($,Z),J=lq(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])=>tq(G)).map(([G])=>G),V=eq(),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:[...m3],transformModules:Y,tryNative:!1,...B?{transform:B}:{}}).import($,{})}function DG($,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 _G($){return typeof $==="object"&&$!==null}function c3($){return Array.isArray($)&&$.every((W)=>typeof W==="string")}function ZM($,W){if(!_G($.manifest))throw Error(`Invalid plugin module at ${W}: missing required "manifest"`);if(!c3($.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")&&!c3($.manifest.providerIds))throw Error(`Invalid plugin module at ${W}: manifest.providerIds must be a string array when provided`);if(Object.hasOwn($.manifest,"modelIds")&&!c3($.manifest.modelIds))throw Error(`Invalid plugin module at ${W}: manifest.modelIds must be a string array when provided`)}function QM($,W){if(!_G($))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"`);ZM($,W)}async function s4($,W={}){let Z=$M(W.cwd??process.cwd(),$),Q=await fG(Z,{useCache:W.useCache}),J=W.exportName??"plugin",j=Q.default??Q[J];QM(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 p9($,W={}){return(await C2($,W)).plugins}async function C2($,W={}){let Z=[],Q=[],J=new Map,j=0;for(let Y of $)try{let V=await s4(Y,W);if(!DG(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 p3}from"node:fs";import{createRequire as RG}from"node:module";import{dirname as r9,join as p8}from"node:path";import{fileURLToPath as VM}from"node:url";var qG={};E(qG,{resolveSubprocessRuntimeExecutable:()=>u3,buildSubprocessSandboxCommand:()=>zG,SubprocessSandbox:()=>l8,CLINE_JS_RUNTIME_PATH_ENV:()=>TG});import{spawn as JM}from"node:child_process";import{basename as jM}from"node:path";import{augmentNodeCommandForDebug as XM,withResolvedClineBuildEnv as YM}from"@cline/shared";function LG($){if($ instanceof Error)return $;return Error(String($))}var TG="CLINE_JS_RUNTIME_PATH";function OG($){let W=$?.trim();if(!W)return!1;let Z=jM(W).toLowerCase();return Z==="node"||Z==="node.exe"||Z==="bun"||Z==="bun.exe"}function u3($={}){let W=$.env??process.env,Z=$.runtimeExecutable?.trim()||W[TG]?.trim();if(Z)return Z;let Q=$.execPath?.trim()||process.execPath;if(OG(Q))return Q;for(let J of[W.BUN_EXEC_PATH,W.npm_node_execpath,W.NODE]){let j=J?.trim();if(j&&OG(j))return j}return"node"}function zG($,W={}){let Z=u3({env:W.env,execPath:W.execPath,runtimeExecutable:W.runtimeExecutable});return XM([Z,...$],{env:W.env,execArgv:W.execArgv,debugRole:W.name==="plugin-sandbox"?"plugin-sandbox":"sandbox"})}class l8{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=zG($,{name:this.options.name,runtimeExecutable:this.options.runtimeExecutable}),Z=JM(W[0]??u3(this.options),W.slice(1),{stdio:["ignore","ignore","pipe","ipc"],env:YM(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: ${LG(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 "${$}": ${LG(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 BM($){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 t4($){return($ instanceof Error?$.message:String($)).includes("Unknown sandbox plugin id:")}function HM(){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=RG($).resolve(`${HM()}/package.json`),Q=p8(r9(Z),"extensions","plugin-sandbox-bootstrap.js");return p3(Q)?Q:void 0}catch{return}}function KM(){let $=process.execPath?.trim();if(!$)return;let W=p8(r9(r9($)),"extensions","plugin-sandbox-bootstrap.js");return p3(W)?W:void 0}function FM(){let $=r9(VM(import.meta.url)),W=RG(import.meta.url),Z=[p8($,"plugin-sandbox-bootstrap.js"),p8($,"extensions","plugin-sandbox-bootstrap.js"),p8($,"agents","plugin-sandbox-bootstrap.js"),GM(),KM()];for(let j of Z.filter((X)=>typeof X==="string"))if(p3(j))return{file:j};let Q=p8($,"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)=>P2($,["update-ref","-d",j])))}catch{}}async function
|
|
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)??oM(yG(),"hooks.jsonl");yG(X),nM(X,J,"utf8")};return{beforeRun:async(Q)=>{let J=t3(Q,"");Z({...E0(J,W),hookName:"agent_start",taskStart:{taskMetadata:{}}});return},beforeTool:async(Q)=>{let J=gG(Q);Z({...E0(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:e9(J.call.input)}});return},afterTool:async(Q)=>{let J=mG(Q);Z({...E0(J,W),hookName:"tool_result",iteration:J.iteration,tool_result:J.record,postToolUse:{toolName:J.record.name,parameters:e9(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=b$(Q);if(J.status==="completed"){Z({...E0(j,W),hookName:"agent_end",iteration:J.iterations,turn:{outputText:J.outputText,status:J.status},taskComplete:{taskMetadata:{}}});return}if(J.status==="aborted"||s3(J.error?.message)){Z({...E0(j,W),hookName:"agent_abort",reason:J.error?.message,taskCancel:{taskMetadata:{}}});return}if(J.error)Z({...E0(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=t3({snapshot:Q.snapshot},vG(Q.message.content));Z({...E0(J,W),hookName:"prompt_submit",userPromptSubmit:{prompt:J.userMessage,attachments:[]}})}}}function J5($){let W=jR($.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;S2({commands:F,cwd:$.cwd,logger:$.logger,payload:K==="agent_resume"?{...E0(G,$),hookName:K,taskResume:{taskMetadata:{},previousState:{}}}:{...E0(G,$),hookName:K,taskStart:{taskMetadata:{}}}})},J=async(G)=>{let K=W.prompt_submit??[];if(K.length>0)S2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...E0(G,$),hookName:"prompt_submit",userPromptSubmit:{prompt:G.userMessage,attachments:[]}}})},j=async(G)=>{let K=W.tool_call??[];if(K.length===0)return;return XR({commands:K,cwd:$.cwd,logger:$.logger,timeoutMs:$.toolCallTimeoutMs??120000,payload:{...E0(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:e9(G.call.input)}}})},X=async(G)=>{let K=W.tool_result??[];if(K.length===0)return;S2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...E0(G,$),hookName:"tool_result",iteration:G.iteration,tool_result:G.record,postToolUse:{toolName:G.record.name,parameters:e9(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;S2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...E0(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;S2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...E0(G,$),hookName:"agent_error",iteration:G.iteration,error:{name:G.error.name,message:G.error.message,stack:G.error.stack}}})},B=async(G)=>{if(s3(G.reason)){let F=W.agent_abort??[];if(F.length>0)S2({commands:F,cwd:$.cwd,logger:$.logger,payload:{...E0(G,$),hookName:"agent_abort",reason:G.reason,taskCancel:{taskMetadata:{}}}})}let K=W.session_shutdown??[];if(K.length===0)return;S2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...E0(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(b$(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(t3({snapshot:G.snapshot},vG(G.message.content)))}}if((W.tool_call?.length??0)>0)H.beforeTool=async(G)=>{let K=await j(gG(G));return YR(K)};if((W.tool_result?.length??0)>0)H.afterTool=async(G)=>{await X(mG(G));return};if((W.agent_end?.length??0)>0)H.afterRun=async({snapshot:G,result:K})=>{if(K.status!=="completed")return;await Y({...b$(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"||s3(A.error?.message)){await B({...b$(F),reason:A.error?.message});return}if(A.error)await V({...b$(F),iteration:A.iterations,error:A.error})}}return H}function s8($){return n8("core.hook_config_files",J5($))}function b2($,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 y2($){let W=$.filter((Z)=>Z!==void 0);if(W.length===0)return;return{beforeRun:b2(W,"beforeRun"),afterRun:b2(W,"afterRun"),beforeModel:b2(W,"beforeModel"),afterModel:b2(W,"afterModel"),beforeTool:b2(W,"beforeTool"),afterTool:b2(W,"afterTool"),onEvent:b2(W,"onEvent")}}var cG={};E(cG,{normalizeRuntimeCapabilities:()=>w0});function w0(...$){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 oG={};E(oG,{toProviderConfig:()=>t0,emptyStoredProviderSettings:()=>k$,StoredProviderSettingsSchema:()=>W6,StoredProviderSettingsEntrySchema:()=>zZ,ProviderSettingsSchemaTyped:()=>$6});import{z as h$}from"zod";var aG={};E(aG,{toProviderConfig:()=>t0,safeParseSettings:()=>TZ,safeCreateProviderConfig:()=>BJ,parseSettings:()=>OZ,normalizeProviderId:()=>e8,isBuiltInProviderId:()=>YJ,createProviderConfig:()=>VJ,SapSettingsSchema:()=>DZ,ReasoningSettingsSchema:()=>FZ,ProviderSettingsSchema:()=>y$,ProviderProtocolSchema:()=>HZ,ProviderIdSchema:()=>B5,ProviderClientSchema:()=>GZ,OcaSettingsSchema:()=>_Z,ModelCatalogSettingsSchema:()=>LZ,GcpSettingsSchema:()=>UZ,BUILT_IN_PROVIDER_IDS:()=>XJ,BUILT_IN_PROVIDER:()=>V5,AzureSettingsSchema:()=>fZ,AwsSettingsSchema:()=>AZ,AuthSettingsSchema:()=>KZ});import*as s0 from"@cline/llms";import{z as w}from"zod";var nG={};E(nG,{resolveProviderConfig:()=>Y5,getProviderConfig:()=>BZ,getLiveModelsCatalog:()=>t8,clearPublicModelsCatalogCache:()=>PR,clearPrivateModelsCatalogCache:()=>jJ,clearLiveModelsCatalogCache:()=>JJ,OPENAI_COMPATIBLE_PROVIDERS:()=>X5,DEFAULT_MODELS_CATALOG_URL:()=>jZ});import*as $0 from"@cline/llms";function $J($){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 VR($,W){let Z=$J($);if(Z.length>0)return Z;if(!$||typeof $!=="object")return[];let Q=$,J=$J(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=$J(j.models??j);if(Y.length>0)return Y}return[]}async function $Z($,W){let Z=await fetch($,{method:"GET"});if(!Z.ok)throw Error(`failed to fetch models from ${$}: HTTP ${Z.status}`);return VR(await Z.json(),W)}function uG($){return $.replace(/\/+$/,"")}function WZ($,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=uG(X.pathname),B=uG(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 BR($){return Object.fromEntries(Object.entries($).map(([W,Z])=>[W,{...Z}]))}function HR($){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($0.MODEL_COLLECTIONS_BY_PROVIDER_ID).map(($)=>({id:$.provider.id,baseUrl:$.provider.baseUrl??"",modelsSourceUrl:$.provider.modelsSourceUrl,modelId:$.provider.defaultModelId,knownModels:BR($.models),capabilities:$.provider.capabilities?[...$.provider.capabilities]:void 0,env:$.provider.env?[...$.provider.env]:void 0,client:$.provider.client,protocol:$.provider.protocol})),lG=Object.fromEntries(GR.map(($)=>[$.id,$]));function KR($){return lG[$]}function FR(){return Object.fromEntries(Object.entries(lG).filter(([,$])=>HR($)))}function pG($=[]){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 jZ="https://models.dev/api.json",AR=600000,rG=300000,UR=5000,JZ=new Map,j5=new Map,WJ=new Map,ZZ=new Map;async function fR(){return $0.getGeneratedProviderModels()}async function DR($,W={},Z={},Q={},J={},j={}){if($==="litellm")return $0.sortModelsByReleaseDate(Q);let X=await fR(),Y=$0.resolveProviderModelCatalogKeys($),V=Object.assign({},...Y.map((K)=>X[K]??{})),B=Boolean($0.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl),H=Object.keys(J).length>0;if(B&&H)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 G=$0.sortModelsByReleaseDate({...V,...W,...Z,...Q,...J});if($==="cline")return $0.sortModelsByReleaseDate({...$0.preferCanonicalModelIds(G,$0.VERCEL_OPENROUTER_MODEL_ID_ALIAS_RULES),...j});return $0.sortModelsByReleaseDate({...G,...j})}function _R($,W){let Z=$0.resolveProviderModelCatalogKeys($);return Object.assign({},...Z.map((Q)=>W[Q]??{}))}function XZ($){let W=$?.trim();return W&&W.length>0?W:""}function QJ($){let W=$.apiKey?.trim()||$.accessToken?.trim();return W&&W.length>0?W:void 0}function LR($){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 OR($,W){return`${$}:${XZ(W.baseUrl)}:${LR(QJ(W)??"")}`}async function YZ($,W,Z=UR){let Q=new AbortController,J=setTimeout(()=>Q.abort(),Z);try{return await fetch($,{...W,signal:Q.signal})}finally{clearTimeout(J)}}function h2($,W,Z){if(Z&&!$.includes(W))$.push(W)}function VZ($,W){let Z=["streaming","tools"];return h2(Z,"images",Boolean(W.supportsImages)),h2(Z,"prompt-cache",Boolean(W.supportsPromptCache)),h2(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 TR($,W){let Z=await YZ("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]=VZ(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 dG($){if(typeof $==="number")return Number.isFinite($)?$:void 0;if(typeof $==="string"){let W=Number($);return Number.isFinite(W)?W:void 0}return}async function zR($,W){let Z=await YZ("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]=VZ(Y,{name:Y,maxInputTokens:128000,supportsImages:!0,supportsPromptCache:!0})}return j}async function qR($,W){let Q=`${(XZ($.baseUrl)||"https://inference.poolside.ai/v1").replace(/\/+$/,"")}/models`,J=await YZ(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"];h2(F,"tools",H.includes("tools")),h2(F,"reasoning",H.includes("reasoning")),h2(F,"temperature",G.includes("temperature")),h2(F,"images",K.includes("image"));let A={input:dG(V.pricing?.prompt),output:dG(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=XZ($).replace(/\/+$/,"");if(!W)return"http://localhost:4000";return W.endsWith("/v1")?W.slice(0,-3):W}function RR($){return[`${$}/v1/model/info`,`${$}/model/info`]}async function NR($){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 ER($,W){let Z=MR($.baseUrl),Q=[],J=[["x-litellm-api-key",{"x-litellm-api-key":W}],["Authorization",{Authorization:`Bearer ${W}`}]];for(let j of RR(Z))for(let[X,Y]of J)try{let V=await YZ(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(),f=K.litellm_params?.model?.trim()||F;if(!f)continue;let U=K.model_info,_=VZ(f,{name:F??f,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[f]=_,F)G[F]={..._,id:F,name:F}}return G}Q.push(`${new URL(j).pathname} (${X}): ${await NR(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 iG={baseten:TR,hicap:zR,litellm:ER,poolside:qR},ZJ=new Map,QZ=new Map;function wR($,W){return`${$}:${XZ(W.baseUrl)}`}async function CR($,W,Z){let Q=$0.MODEL_COLLECTIONS_BY_PROVIDER_ID[$],J=WZ(Z.baseUrl,Q?.provider.baseUrl,Q?.provider.modelsSourceUrl);if(!J)return{};let j=W?.cacheTtlMs??rG,X=wR($,Z),Y=Date.now(),V=ZJ.get(X);if(V&&V.expiresAt>Y)return V.data;let B=QZ.get(X);if(B)return B;let H=$Z(J,$).then((G)=>{let K=Object.fromEntries(G.map((F)=>[F,VZ(F,{name:F})]));return ZJ.set(X,{data:K,expiresAt:Y+j}),K}).finally(()=>{QZ.delete(X)});return QZ.set(X,H),H}function PR(){ZJ.clear(),QZ.clear()}async function SR($,W){let Z=QJ(W);if(!Z)return{};let Q=iG[$];if(!Q)return{};return Q(W,Z)}function bR($,W,Z){if(!Z)return!1;if(!iG[$])return!1;if(W?.loadPrivateOnAuth===!1)return!1;return Boolean(QJ(Z))}async function yR($,W,Z){let Q=W?.cacheTtlMs??rG,J=OR($,Z),j=Date.now(),X=WJ.get(J);if(X&&X.expiresAt>j)return X.data;let Y=ZZ.get(J);if(Y)return Y;let V=SR($,Z).then((B)=>{return WJ.set(J,{data:B,expiresAt:j+Q}),B}).finally(()=>{ZZ.delete(J)});return ZZ.set(J,V),V}async function hR($){return $0.fetchLiveProviderModels($,globalThis.fetch)}async function t8($={}){let W=$.url??jZ,Z=$.cacheTtlMs??AR,Q=Date.now(),J=JZ.get(W);if(J&&J.expiresAt>Q)return J.data;let j=j5.get(W);if(j)return j;let X=hR(W).then((Y)=>{return JZ.set(W,{data:Y,expiresAt:Q+Z}),Y}).finally(()=>{j5.delete(W)});return j5.set(W,X),X}function JJ($){if($){JZ.delete($),j5.delete($);return}JZ.clear(),j5.clear()}function jJ(){WJ.clear(),ZZ.clear()}function kR($){return Object.fromEntries(Object.entries($).map(([W,Z])=>[W,{baseUrl:Z.baseUrl,modelId:Z.modelId,capabilities:pG(Z.capabilities)}]))}var X5=kR(FR());function BZ($){let W=KR($);if(!W)return;return{baseUrl:W.baseUrl||void 0,modelId:W.modelId,knownModels:W.knownModels,capabilities:pG(W.capabilities)}}async function Y5($,W,Z){let Q=BZ($);if(!Q)return;try{let J=W?.loadLatestOnInit?await t8(W):void 0,j=J?_R($,J):{},X=Z&&bR($,W,Z)?await yR($,W,Z):{},V=Boolean($0.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl)?Z??{providerId:$,modelId:Q.modelId,baseUrl:Q.baseUrl}:Z,B=V?await CR($,W,V).catch(()=>({})):{},H=await DR($,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 V5=s0.BUILT_IN_PROVIDER,XJ=s0.BUILT_IN_PROVIDER_IDS,YJ=s0.isBuiltInProviderId,e8=s0.normalizeProviderId,B5=w.string().min(1).regex(/^[a-z0-9][a-z0-9-]*$/i),HZ=w.enum(["anthropic","gemini","openai-chat","openai-responses","openai-r1","ai-sdk"]),GZ=w.enum(["anthropic","ai-sdk","ai-sdk-community","openai","openai-compatible","openai-r1","gemini","bedrock","custom","fetch","vertex"]),KZ=w.object({apiKey:w.string().optional(),accessToken:w.string().optional(),refreshToken:w.string().optional(),expiresAt:w.number().int().positive().optional(),accountId:w.string().optional(),metadata:w.record(w.string(),w.unknown()).optional()}),IR=w.enum(["none","low","medium","high","xhigh"]),FZ=w.object({enabled:w.boolean().optional(),effort:IR.optional(),budgetTokens:w.number().int().positive().optional()}),AZ=w.object({accessKey:w.string().optional(),secretKey:w.string().optional(),sessionToken:w.string().optional(),region:w.string().optional(),profile:w.string().optional(),authentication:w.enum(["iam","api-key","apikey","profile"]).optional(),usePromptCache:w.boolean().optional(),useCrossRegionInference:w.boolean().optional(),useGlobalInference:w.boolean().optional(),endpoint:w.string().url().optional(),customModelBaseId:w.string().optional()}),UZ=w.object({projectId:w.string().optional(),region:w.string().optional()}),fZ=w.object({apiVersion:w.string().optional(),useIdentity:w.boolean().optional()}),DZ=w.object({clientId:w.string().optional(),clientSecret:w.string().optional(),tokenUrl:w.string().url().optional(),resourceGroup:w.string().optional(),deploymentId:w.string().optional(),useOrchestrationMode:w.boolean().optional(),api:w.enum(["orchestration","foundation-models"]).optional(),defaultSettings:w.record(w.string(),w.unknown()).optional()}),_Z=w.object({mode:w.enum(["internal","external"]).optional(),usePromptCache:w.boolean().optional()}),LZ=w.object({loadLatestOnInit:w.boolean().optional(),loadPrivateOnAuth:w.boolean().optional(),url:w.string().url().optional(),cacheTtlMs:w.number().int().positive().optional(),failOnError:w.boolean().optional()}),y$=w.object({provider:B5,apiKey:w.string().optional(),auth:KZ.optional(),model:w.string().optional(),protocol:HZ.optional(),client:GZ.optional(),routingProviderId:B5.optional(),maxTokens:w.number().int().positive().optional(),contextWindow:w.number().int().positive().optional(),baseUrl:w.string().url().optional(),headers:w.record(w.string(),w.string()).optional(),timeout:w.number().int().positive().optional(),reasoning:FZ.optional(),aws:AZ.optional(),gcp:UZ.optional(),azure:fZ.optional(),sap:DZ.optional(),oca:_Z.optional(),region:w.string().optional(),apiLine:w.enum(["china","international"]).optional(),capabilities:w.array(w.enum(["reasoning","prompt-cache","streaming","tools","vision","computer-use","oauth","popular"])).optional(),modelCatalog:LZ.optional()});function OZ($){return y$.parse($)}function TZ($){return y$.safeParse($)}function xR($){return $.protocol==="openai-responses"||$.client==="openai"}function t0($,W={}){let Z=$.provider,Q=e8(Z),J=W.includeKnownModels!==!1,j=$.reasoning?.effort||"none",X=j==="none"?void 0:j,Y=X5[Q],V=Object.assign({},...s0.resolveProviderModelCatalogKeys(Q).map((f)=>s0.getGeneratedModelsForProvider(f))),B=Object.keys(V)[0],H=O8(Q,$),G=$.baseUrl??(Q==="oca"?$.oca?.mode==="internal"?j9:X9:Y?.baseUrl),K=$.routingProviderId??(xR($)&&Q!==V5.OPENAI_NATIVE?V5.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(([f,U])=>U!==void 0))}function VJ($){let W=OZ($);return t0(W)}function BJ($){let W=TZ($);if(W.success)return{success:!0,config:t0(W.data)};return{success:!1,error:W.error}}var $6=y$;var zZ=h$.object({settings:y$,updatedAt:h$.string().datetime(),tokenSource:h$.enum(["manual","oauth","migration"]).default("manual")}),W6=h$.object({version:h$.literal(1),lastUsedProvider:h$.string().min(1).optional(),providers:h$.record(h$.string(),zZ)});function k$(){return{version:1,providers:{}}}A1();var WK={};E(WK,{InMemoryWorkspaceManager:()=>Q6});import{upsertWorkspaceInfo as cR,WorkspaceManifestSchema as GJ}from"@cline/shared";var $K={};E($K,{normalizeWorkspacePath:()=>o1,generateWorkspaceInfoWithDiagnostics:()=>H5,generateWorkspaceInfo:()=>Z6,buildWorkspaceMetadataWithInfo:()=>HJ,buildWorkspaceMetadata:()=>G5});import{basename as gR,resolve as mR}from"node:path";import{performance as sG}from"node:perf_hooks";import{processWorkspaceInfo as eG}from"@cline/shared";import vR from"simple-git";function o1($){return mR($)}async function Z6($){return(await H5($)).info}function tG($){let W=$ instanceof Error?$.message:String($);return/unknown revision|ambiguous argument|does not have any commits yet/i.test(W)}function qZ($){if($ instanceof Error)return{errorType:$.name?.trim()||$.constructor.name||"Error",message:$.message};return{errorType:"Error",message:String($)}}async function H5($){let W=o1($),Z={rootPath:W,hint:gR(W)},Q;try{let J=vR({baseDir:W});if(!await J.checkIsRepo())return{info:Z,vcsType:"none"};try{let X=await J.getRemotes(!0);if(X.length>0){let Y=X.map((V)=>{let B=V.refs.fetch||V.refs.push;return`${V.name}: ${B}`});Z.associatedRemoteUrls=Y}}catch(X){Q??=qZ(X)}try{let X=(await J.revparse(["HEAD"])).trim();if(X.length>0)Z.latestGitCommitHash=X}catch(X){if(!tG(X))Q??=qZ(X)}try{let X=(await J.branch()).current.trim();if(X.length>0)Z.latestGitBranchName=X}catch(X){if(!tG(X))Q??=qZ(X)}return{info:Z,vcsType:"git",error:Q}}catch(J){return{info:Z,vcsType:"none",error:qZ(J)}}}async function G5($){let W=await Z6($);return eG(W)}async function HJ($){let W=sG.now(),Z=await H5($),Q=sG.now()-W,J=Z.info;return{workspaceInfo:J,workspaceMetadata:eG(J),durationMs:Q,vcsType:Z.vcsType,initError:Z.error}}class Q6{manifest;listeners=new Set;constructor($){this.manifest=GJ.parse($??{workspaces:{}})}async addWorkspacePath($){let W=await Z6($);return this.manifest=cR(this.manifest,W),this.emit({type:"workspace_added",workspace:W}),W}async switchWorkspace($){let W=o1($),Z=this.manifest.workspaces[W];if(Z)return this.manifest=GJ.parse({...this.manifest,currentWorkspacePath:W}),this.emit({type:"workspace_switched",workspace:Z}),Z;let Q=await this.addWorkspacePath(W);return this.manifest=GJ.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=o1($);return this.manifest.workspaces[W]}listWorkspaces(){return Object.values(this.manifest.workspaces)}getManifest(){return this.manifest}emit($){for(let W of this.listeners)W($)}}O0();import{createHash as uR}from"node:crypto";var ZK=new Set,QK=new Set;function dR($){return uR("sha256").update($).digest("hex")}function lR($){if($.vcsTypes&&$.vcsTypes.length>0)return $.vcsTypes;return[$.vcsType==="git"?"git":"none"]}function JK($){if(!$.telemetry)return;let W=dR($.rootPath),Z=$.rootCount??1;if(!ZK.has(W))ZK.add(W),gW($.telemetry,{root_count:Z,vcs_types:lR($),init_duration_ms:$.durationMs,feature_flag_enabled:$.featureFlagEnabled??!0,is_remote_workspace:$.isRemoteWorkspace});if($.initError&&!QK.has(W)){QK.add(W);let Q=Error($.initError.message);Q.name=$.initError.errorType||"Error",mW($.telemetry,Q,{fallback_to_single_root:!0,workspace_count:Z})}}function iR($){return`${$.pluginName??$.pluginPath}: ${$.message}`}function nR($,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(iR).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 aR($,W){let Z=typeof $.thinking==="boolean",Q=typeof $.reasoningEffort==="string";if(!Z&&!Q)return W;return{...W??{},...Z?{enabled:$.thinking}:{},...Q?{effort:$.reasoningEffort}:{}}}function jK($,W){return rR($,W)}function oR($){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 sR($,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=pR({providerId:$.providerId,sessionId:W,source:Z,defaultSource:A0.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:c8,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:aR($,X?.reasoning),modelCatalog:Y},G={...t0(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 XK($){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}=$,f=C$(W.config),{modelCatalogDefaults:U,userInstructionService:_,configExtensions:D,onTeamRestored:M,...T}=K??{},O=Object.keys(T).length>0?T:void 0,{workspaceInfo:L,workspaceMetadata:C,durationMs:N,vcsType:y,initError:P}=await HJ(f),d=O?.extensionContext,n={...d??{},workspace:{...L,...d?.workspace??{}},session:{...d?.session??{},sessionId:Z},logger:d?.logger??O?.logger,telemetry:d?.telemetry??O?.telemetry??J};JK({telemetry:n.telemetry,rootPath:L.rootPath,workspaceInfo:L,rootCount:1,vcsType:y,durationMs:N,initError:P,featureFlagEnabled:!0});let o=s8({cwd:W.config.cwd,workspacePath:f,rootSessionId:Z,logger:O?.logger,workspaceInfo:L}),G$=eH(O?.hooks)?void 0:o8({rootSessionId:Z,workspacePath:f,workspaceInfo:L}),h1=y2([O?.hooks,G$]),x0;if(jK(D,"plugins"))try{x0=await i8({pluginPaths:O?.pluginPaths,workspacePath:f,cwd:W.config.cwd,onEvent:V,providerId:W.config.providerId,modelId:W.config.modelId,workspaceInfo:L,session:n.session,client:n.client,user:n.user,logger:n.logger,telemetry:n.telemetry,automation:n.automation}),nR(x0.failures,x0.warnings,O?.logger)}catch(K8){let z7=K8 instanceof Error?K8.message:String(K8);O?.logger?.log?.(`plugin loading failed; continuing without plugins (${z7})`)}let V0=w3(o?[o]:void 0,w3(O?.extensions,S9(x0?.extensions))),K$=jK(D,"plugins")?a1(x0?.pluginPaths??[]):void 0,L0={...W.config,...O??{},sessionId:Z,hooks:h1,extensions:V0,extensionContext:n,telemetry:n.telemetry},b0=sR(L0,Z,W.source,Q,U,Y),L1=y2([L0.hooks,L0.checkpoint?.enabled===!0?bG({cwd:L0.cwd,sessionId:Z,logger:L0.logger,createCheckpoint:L0.checkpoint?.createCheckpoint,initialRunCount:oR(W.initialMessages),readSessionMetadata:F,writeSessionMetadata:A}):void 0]),g={...L0,providerConfig:b0,workspaceMetadata:C,hooks:L1},q0=W.toolPolicies??L0.toolPolicies??X,I=w0(j,W.capabilities),e=I?.requestToolApproval,y0=I?.toolExecutors,B0=H?.(g),kW=new Q6({currentWorkspacePath:L.rootPath,workspaces:{[L.rootPath]:L}});return{effectiveInput:W,config:g,providerConfig:b0,workspaceMetadata:C,workspaceInfo:L,extensions:V0,hooks:L1,toolPolicies:q0,requestToolApproval:e,pluginSandboxShutdown:x0?.shutdown,runtimeBuilderInput:{config:g,hooks:L1,extensions:V0,onTeamEvent:B,createSpawnTool:G,onTeamRestored:M,onSubAgentEvent:B0?.onSubAgentEvent,onSubAgentStart:B0?.onSubAgentStart,onSubAgentEnd:B0?.onSubAgentEnd,userInstructionService:_,pluginSkillDirectories:K$,configExtensions:D,toolExecutors:y0,toolPolicies:q0,workspaceManager:kW,logger:g.logger,telemetry:g.telemetry,requestToolApproval:e}}}import{existsSync as MZ,mkdirSync as tR,readdirSync as eR,rmdirSync as $N,rmSync as WN,unlinkSync as ZN}from"node:fs";import{dirname as YK,join as K5}from"node:path";function X0(){return new Date().toISOString()}function F5($){if(!$||!MZ($))return;try{ZN($)}catch{}}function QN($){let W=g8($);if(W)return{rootSessionId:W.rootSessionId,fileStem:`${W.agentId}__${W.teamTaskId}`};let Z=u4($);if(Z)return{rootSessionId:Z.rootSessionId,fileStem:Z.agentId};return{rootSessionId:$,fileStem:$}}class KJ{ensureSessionsDir;constructor($){this.ensureSessionsDir=$}sessionArtifactsDir($){return K5(this.ensureSessionsDir(),$)}ensureSessionArtifactsDir($){let W=this.sessionArtifactsDir($);if(!MZ(W))tR(W,{recursive:!0});return W}sessionMessagesPath($){return K5(this.sessionArtifactsDir($),`${$}.messages.json`)}sessionCompactionPath($){return K5(this.sessionArtifactsDir($),`${$}.compaction.json`)}sessionManifestPath($,W=!1){let Z=W?this.ensureSessionArtifactsDir($):this.sessionArtifactsDir($);return K5(Z,`${$}.json`)}removeSessionDirIfEmpty($){let W=this.sessionArtifactsDir($),Z=this.ensureSessionsDir();while(W.startsWith(Z)&&W!==Z){if(!MZ(W)){W=YK(W);continue}try{if(eR(W).length>0)break;$N(W)}catch{break}W=YK(W)}}removeSessionDir($){this.removeDir(this.sessionArtifactsDir($))}removeDir($){if(!MZ($))return;try{WN($,{recursive:!0,force:!0})}catch{}}subagentArtifactPaths($,W,Z){let{rootSessionId:Q,fileStem:J}=QN($),j=this.sessionArtifactsDir(Q);return{messagesPath:K5(j,`${J}.messages.json`)}}}import{resolveDocumentsExtensionPath as JN}from"@cline/shared/storage";O0();function VK($,W,Z,Q,J){if(Z)cW($.telemetry,{ulid:W,apiProvider:$.providerId,...J});else vW($.telemetry,{ulid:W,apiProvider:$.providerId,...J});jN($.telemetry,{workspacePath:Q})}function jN($,W){let Z=JN("Hooks"),Q=S$(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())oW($,j,X.global,X.workspace)}function BK($,W){for(let Z of W.mentions)nW($,Z,W.matchedFiles.includes(Z)?1:0,"file",!W.matchedFiles.includes(Z));for(let Z of W.matchedFiles)rW($,"file",Z.length);for(let Z of W.ignoredMentions)iW($,"file","not_found",Z)}var H_={};E(H_,{ProviderSettingsManager:()=>Y1});import{chmodSync as K_,existsSync as zY,mkdirSync as lm,readFileSync as pm,renameSync as rm,rmSync as im,writeFileSync as nm}from"node:fs";import{basename as F_,dirname as qY}from"node:path";import{resolveProviderSettingsPath as am}from"@cline/shared/storage";var q={};E(q,{writeHubDiscovery:()=>eZ,writeGlobalSettings:()=>q1,withHubStartupLock:()=>$Q,verifyHubConnection:()=>N1,updateMcpSettingsFileSync:()=>U1,updateMcpSettingsFile:()=>H6,updateMcpServerOAuthStateAsync:()=>S5,updateMcpServerOAuthState:()=>m2,updateLocalProvider:()=>B7,uninstallPlugin:()=>MW,uninstallMarketplaceSkill:()=>lQ,uninstallMarketplacePlugin:()=>pQ,uninstallMarketplaceMcpServerFromSettings:()=>uQ,uninstallMarketplaceEntry:()=>cX,truncateNotificationBody:()=>AW,truncateCommandOutput:()=>H2,toggleDisabledTool:()=>C9,toTeamProgressLifecycleEvent:()=>R6,toProviderConfig:()=>t0,toHubStatusUrl:()=>Qj,toHubHealthUrl:()=>WQ,toHookConfigFileName:()=>Q5,syncPluginMcpServersToSettings:()=>zW,summarizeUsageFromMessages:()=>v8,stopLocalHubServerGracefully:()=>Uj,startLocalOAuthServer:()=>H1,startHubWebSocketServer:()=>Y8,startHubServer:()=>gf,startClineDeviceAuth:()=>y7,splitCoreSessionConfig:()=>g5,spawnDetachedHubServerWithRetry:()=>D6,spawnDetachedHubServer:()=>Bj,setTelemetryOptOutGlobally:()=>dB,setSdkLogger:()=>N7,setMcpServerDisabled:()=>x2,setDisabledTools:()=>H3,setDisabledPlugin:()=>sB,setCompactionStrategyGlobally:()=>iB,setAutoUpdateEnabledGlobally:()=>pB,sendHubCommand:()=>SU,sdkDebug:()=>Z0,saveProviderOAuthCredentials:()=>J2,saveLocalProviderSettings:()=>ZY,saveLocalProviderOAuthCredentials:()=>XY,sanitizeSessionToken:()=>N2,safeParseSettings:()=>TZ,safeCreateProviderConfig:()=>BJ,runSubprocessEvent:()=>b6,runHook:()=>h6,reviveTeamStateDates:()=>g9,restartLocalHubIfIdleAfterStartupTimeout:()=>XQ,resolveWorkspaceHubOwnerContext:()=>jA,resolveWorkflowsConfigSearchPaths:()=>M5,resolveSkillsConfigSearchPaths:()=>z5,resolveSharedHubOwnerContext:()=>c0,resolveSessionBackend:()=>Ij,resolveRulesConfigSearchPaths:()=>q5,resolveProviderConfig:()=>Y5,resolveProviderApiKeyFromSettings:()=>v7,resolveProductionHubOwnerContext:()=>J1,resolvePluginSkillDirectoriesFromPaths:()=>a1,resolvePluginConfigSearchPaths:()=>e4,resolveMcpServerRegistrations:()=>e0,resolveMarketplaceMcpServerName:()=>NW,resolveLocalClineAuthToken:()=>VY,resolveHubUrl:()=>rj,resolveHubOwnerContext:()=>W$,resolveHubEndpointOptions:()=>Q1,resolveHubBuildId:()=>tZ,resolveHooksConfigSearchPaths:()=>W5,resolveDisabledToolNames:()=>M1,resolveDisabledPluginPaths:()=>h4,resolveDefaultMcpSettingsPath:()=>Q0,resolveDefaultHubPort:()=>f6,resolveDefaultHubPathname:()=>Vj,resolveDefaultHubHost:()=>Yj,resolveCoreSelectedToolIds:()=>v9,resolveCoreDistinctId:()=>u0,resolveCompatibleLocalHubUrl:()=>s5,resolveClineDir:()=>WA,resolveClineDataDir:()=>i2,resolveAndLoadAgentPlugins:()=>i8,resolveAgentPluginPaths:()=>n1,requestHubShutdown:()=>o5,requestDesktopToolApproval:()=>RX,removePluginMcpServersFromSettings:()=>qW,rememberRecoverableLocalHubUrl:()=>d$,registerRemoteConfigSessionBlobUpload:()=>yQ,registerMcpServersFromSettingsFile:()=>v2,registerDisposable:()=>vm,refreshProviderModelsFromSource:()=>QY,refreshOpenAICodexToken:()=>J9,refreshOcaToken:()=>V9,refreshClineToken:()=>Z9,readSessionCheckpointHistory:()=>Z8,readRemoteConfigSessionBlobUploadMetadata:()=>fX,readHubDiscovery:()=>_0,readGlobalSettings:()=>R0,readCompactionStrategyGlobally:()=>rB,readBearerToken:()=>NQ,projectSessionCompactionState:()=>j2,probeHubServer:()=>Z$,probeHubConnection:()=>PU,prewarmFileIndex:()=>z9,prewarmDetachedHubServer:()=>QQ,prepareRemoteConfigCoreIntegration:()=>_X,parseWorkflowConfigFromMarkdown:()=>T5,parseUserCommandEnvelope:()=>mm,parseSkillConfigFromMarkdown:()=>L5,parseSettings:()=>OZ,parseSessionCompactionState:()=>G1,parseRuleConfigFromMarkdown:()=>O5,parsePluginSource:()=>$7,parseMcpInstallArgs:()=>TW,parseHookEventPayload:()=>y6,parseConfiguredAgentConfig:()=>WW,normalizeWorkspacePath:()=>o1,normalizeUserInput:()=>gm,normalizeSdkError:()=>xm,normalizeRuntimeCapabilities:()=>w0,normalizeProviderId:()=>e8,normalizeOAuthProvider:()=>JY,normalizeHubWebSocketUrl:()=>l$,noopBasicLogger:()=>Im,migrateLegacyProviderSettings:()=>SW,mergeRulesForSystemPrompt:()=>V6,mergeAgentHooks:()=>y2,marketplaceEntryKey:()=>vX,markLocalProviderEnabled:()=>eX,makeTeamTaskSubSessionId:()=>c4,makeSubSessionId:()=>x8,loginOpenAICodex:()=>W4,loginOcaOAuth:()=>j4,loginLocalProvider:()=>jY,loginClineOAuth:()=>e6,loginAndSaveProviderOAuthCredentials:()=>Y4,loginAndSaveLocalProviderOAuthCredentials:()=>YY,loadOpenTelemetryAdapter:()=>Bm,loadMcpSettingsFile:()=>I2,loadLlmsConfigFromFile:()=>LY,loadConfiguredAgentConfigs:()=>z6,loadAgentPluginsFromPathsWithDiagnostics:()=>C2,loadAgentPluginsFromPaths:()=>p9,loadAgentPluginFromPath:()=>s4,listSessionHistoryFromBackend:()=>eJ,listPluginToolsWithDiagnostics:()=>pZ,listPluginTools:()=>h5,listMcpServerOAuthStatuses:()=>b5,listLocalProviders:()=>$Y,listHookConfigFiles:()=>S$,isToolDisabledGlobally:()=>nB,isTelemetryOptedOutGlobally:()=>w9,isSessionNotFoundError:()=>$$,isRuleEnabled:()=>hZ,isPluginDisabledGlobally:()=>oB,isOfficialPluginSlug:()=>eQ,isOAuthProvider:()=>Q2,isMarketplaceSkillInstalled:()=>dQ,isLocalHubOrigin:()=>UX,isLocalHubHostName:()=>EQ,isHubReconnectableTransportError:()=>Fj,isHubCommandTimeoutError:()=>jQ,isDiscoveryFilePresent:()=>QA,isClinePassLimitMessage:()=>qm,isClinePassLimitError:()=>zm,isClineOrgIndividualInferenceSubscriptionMessage:()=>Tm,isClineOrgIndividualInferenceSubscriptionError:()=>Om,isClineNotSubscribedMessage:()=>Lm,isClineNotSubscribedError:()=>_m,isClineAccountActionRequest:()=>RZ,isBuiltInProviderId:()=>YJ,isAutoUpdateEnabledGlobally:()=>lB,installPlugin:()=>iX,installMcpServer:()=>NX,identifyAccount:()=>B1,hashSecret:()=>M0,hasMcpSettingsFile:()=>t1,getValidOpenAICodexCredentials:()=>Z4,getValidOcaCredentials:()=>X4,getValidClineCredentials:()=>$4,getProviderOAuthCredentialsFromSettings:()=>V4,getProviderConfigFields:()=>BY,getProviderConfig:()=>BZ,getProviderAuthStorageId:()=>m7,getProviderAuthHandler:()=>G0,getPersistedProviderApiKey:()=>O8,getMcpServerOAuthState:()=>g2,getMarketplaceSkillCandidates:()=>EW,getLocalProviderModels:()=>WY,getLiveModelsCatalog:()=>t8,getGlobalMarketplaceSkillPaths:()=>wW,getFileIndex:()=>d1,getCurrentContextSize:()=>b3,getCoreHeadlessToolNames:()=>v4,getCoreDefaultEnabledToolIds:()=>m9,getCoreBuiltinToolCatalog:()=>M2,getCoreAcpToolNames:()=>c9,getClinePassSubscriptionUrl:()=>Dm,getClineOrgIndividualInferenceSubscriptionMessage:()=>fm,getClineNotSubscribedMessage:()=>Um,getClineDefaultSystemPrompt:()=>Mm,generateWorkspaceInfoWithDiagnostics:()=>H5,generateWorkspaceInfo:()=>Z6,formatRulesForSystemPrompt:()=>Y6,formatProviderOAuthApiKey:()=>c7,formatDisplayUserInput:()=>km,findInstalledGlobalMarketplaceSkillName:()=>CW,findCheckpointForRun:()=>P6,filterExtensionToolRegistrations:()=>S9,filterDisabledTools:()=>p1,filterDisabledPluginPaths:()=>P9,fetchClineRecommendedModels:()=>DY,extractClinePassLimitMessage:()=>Am,executeClineAccountAction:()=>NZ,ensureHubWebSocketServer:()=>wQ,ensureHubServer:()=>mf,ensureDetachedHubServer:()=>GA,ensureCustomProvidersLoaded:()=>X7,ensureCompatibleLocalHubUrl:()=>o2,enrichPromptWithMentions:()=>C8,emptyWorkspaceManifest:()=>bm,emptyStoredProviderSettings:()=>k$,discoverPluginModulePaths:()=>$5,disablePluginMcpServersInSettings:()=>PX,deriveSubsessionStatus:()=>d4,deleteLocalProvider:()=>H7,defineLlmsConfig:()=>_Y,createWorkflowsConfigDefinition:()=>E5,createUserInstructionConfigService:()=>I$,createToolPoliciesWithPreset:()=>M9,createTool:()=>Sm,createTeamName:()=>IQ,createSubprocessHooks:()=>DQ,createSpawnAgentTool:()=>E$,createSkillsConfigDefinition:()=>R5,createShellTool:()=>w4,createShellExecutor:()=>G2,createSessionHost:()=>w6,createSessionCompactionState:()=>T8,createRuntimeHost:()=>w6,createRulesConfigDefinition:()=>N5,createRemoteConfigSessionMessagesArtifactUploader:()=>DX,createProviderConfig:()=>VJ,createOpenTelemetryTelemetryService:()=>KW,createOAuthClientCallbacks:()=>J6,createMcpTools:()=>A6,createLocalHubScheduleRuntimeHandlers:()=>CQ,createLlmsSdk:()=>TY,createInitialAccumulatedUsage:()=>z0,createInMemoryHubOwnerContext:()=>ZA,createHubServerUrl:()=>f1,createHubAuthToken:()=>sZ,createHookConfigFileHooks:()=>J5,createHookConfigFileExtension:()=>s8,createHookAuditHooks:()=>o8,createEditorExecutor:()=>U2,createDisabledMcpToolPolicy:()=>y5,createDisabledMcpToolPolicies:()=>lZ,createDelegatedAgentConfigProvider:()=>R$,createDelegatedAgent:()=>N$,createDefaultToolsWithPreset:()=>R9,createDefaultTools:()=>T$,createDefaultShellExecutor:()=>b4,createDefaultMcpServerClientFactory:()=>K6,createDefaultExecutors:()=>P8,createCoreSettingsService:()=>u2,createCoreSessionSnapshot:()=>E1,createContributionRegistry:()=>Pm,createContextCompactionPrepareTurn:()=>D4,createConfiguredTelemetryService:()=>Y$,createConfiguredTelemetryHandle:()=>i$,createConfiguredAgentTools:()=>q6,createCompactionStateAwarePrepareTurn:()=>_4,createClineTelemetryServiceMetadata:()=>Cm,createClineTelemetryServiceConfig:()=>wm,createCheckpointComparePlan:()=>FQ,createBuiltinTools:()=>R2,createApplyPatchExecutor:()=>A2,createAgentTeamsTools:()=>q2,createAgentRuntime:()=>dm,createAgentHooksExtension:()=>n8,connectToHub:()=>OQ,computePatchChanges:()=>E8,completeClineDeviceAuth:()=>h7,compareCheckpointToWorkspace:()=>VW,collectPluginMcpOAuthCandidates:()=>W7,clearPrivateModelsCatalogCache:()=>jJ,clearLiveModelsCatalogCache:()=>JJ,clearHubDiscovery:()=>v0,captureWorkspacePathResolved:()=>dY,captureWorkspaceInitialized:()=>gW,captureWorkspaceInitError:()=>mW,captureToolUsage:()=>A8,captureTokenUsage:()=>uW,captureTaskRestarted:()=>cW,captureTaskCreated:()=>vW,captureTaskCompleted:()=>o6,captureSubagentExecution:()=>t6,captureSkillUsed:()=>lW,captureSdkError:()=>Em,captureProviderConfigured:()=>lY,captureProviderApiError:()=>s6,captureModeSwitch:()=>dW,captureMentionUsed:()=>rW,captureMentionSearchResults:()=>nW,captureMentionFailed:()=>iW,captureHookDiscovery:()=>oW,captureExtensionActivated:()=>uY,captureDiffEditFailure:()=>pW,captureConversationTurnEvent:()=>F8,captureCompactionSkipped:()=>tW,captureCompactionExecuted:()=>sW,captureAuthSucceeded:()=>x1,captureAuthStarted:()=>I1,captureAuthLoggedOut:()=>A$,captureAuthFailed:()=>g1,captureAgentUnexpectedReasoningTokens:()=>cY,captureAgentTeamCreated:()=>aW,captureAgentCreated:()=>U$,buildWorkspaceMetadata:()=>G5,buildTeamProgressSummary:()=>M6,buildSdkErrorProperties:()=>Rm,buildRemoteConfigSessionBlobUploadMetadata:()=>SQ,buildMcpInstallTransport:()=>xQ,buildDelegatedAgentConfig:()=>T2,buildConnectionUpdate:()=>_3,buildConfiguredAgentToolName:()=>ZW,buildConfiguredAgentToolDescriptors:()=>QW,buildCheckpointWorkspaceDiff:()=>AQ,bootstrapAgentTeams:()=>I8,authorizeMcpServerOAuth:()=>vZ,addLocalProvider:()=>tX,accumulateUsageTotals:()=>D0,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>_5,UnifiedConfigFileWatcher:()=>k2,ToolPresets:()=>o0,TelemetryService:()=>x6,TelemetryLoggerSink:()=>GW,TEAM_TOOL_NAMES:()=>k8,SubprocessSandbox:()=>l8,StructuredCommandInputSchema:()=>V2,StoredProviderSettingsSchema:()=>W6,StoredProviderSettingsEntrySchema:()=>zZ,SqliteTeamStore:()=>V8,SqliteSessionStore:()=>C1,SessionVersioningService:()=>o$,SessionVersioningError:()=>l0,SessionSource:()=>A0,SessionNotFoundError:()=>e1,SapSettingsSchema:()=>DZ,SKILLS_CONFIG_DIRECTORY_NAME:()=>D5,SESSION_STATUSES:()=>l4,SESSION_NOT_FOUND_ERROR_CODE:()=>d2,SDK_ERROR_TELEMETRY_EVENT:()=>cm,RpcClineAccountService:()=>U5,RemoteRuntimeHost:()=>O6,ReasoningSettingsSchema:()=>FZ,RULES_CONFIG_DIRECTORY_NAME:()=>yZ,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY:()=>bQ,ProviderSettingsSchema:()=>y$,ProviderSettingsManager:()=>Y1,ProviderProtocolSchema:()=>HZ,ProviderIdSchema:()=>B5,ProviderClientSchema:()=>GZ,PatchActionType:()=>F2,OpenTelemetryProvider:()=>g6,OcaSettingsSchema:()=>_Z,OPENAI_COMPATIBLE_PROVIDERS:()=>X5,NodeHubClient:()=>D1,NoOpFeatureFlagsProvider:()=>W8,NativeHubTransportAdapter:()=>LW,ModelCatalogSettingsSchema:()=>LZ,McpSettingsUpdateSkippedError:()=>B6,McpSettingsMutatorPurityError:()=>x$,McpSettingsLockTimeoutError:()=>g$,MAX_COMMAND_OUTPUT_CHARS:()=>v1,LocalRuntimeHost:()=>b1,Llms:()=>Hm,InMemoryWorkspaceManager:()=>Q6,InMemoryMcpManager:()=>c2,HubUIClient:()=>aj,HubTransportError:()=>h0,HubSessionClient:()=>nj,HubServerTransport:()=>v6,HubScheduleService:()=>I6,HubScheduleCommandService:()=>k6,HubRuntimeHost:()=>Q$,HubCommandError:()=>_6,HookEventPayloadSchema:()=>fQ,HookEventNameSchema:()=>UQ,HookConfigFileName:()=>a8,HOOK_CONFIG_FILE_EVENT_MAP:()=>Z5,HOOKS_CONFIG_DIRECTORY_NAME:()=>s9,GlobalSettingsSchema:()=>y4,GcpSettingsSchema:()=>UZ,FileTeamPersistenceStore:()=>F7,FeatureFlagsService:()=>$8,FeatureFlagDefaultValue:()=>hm,FEATURE_FLAGS:()=>ym,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>L7,DefaultToolNames:()=>T0,DefaultRuntimeBuilder:()=>d6,DefaultLlmsSdk:()=>yW,DEFAULT_MODELS_CATALOG_URL:()=>jZ,DEFAULT_HUB_PORT:()=>jj,DEFAULT_HUB_PATHNAME:()=>Xj,DEFAULT_HUB_HOST:()=>Jj,CoreSettingsService:()=>m$,CoreSessionService:()=>S1,ContributionRegistry:()=>Nm,CommandExitError:()=>c1,ClinePassLimitError:()=>Fm,ClineOrgIndividualInferenceSubscriptionError:()=>Km,ClineNotSubscribedError:()=>Gm,ClineCore:()=>BW,ClineAccountService:()=>A5,ChatViewStateSchema:()=>UY,ChatSummarySchema:()=>_7,ChatSessionStatusSchema:()=>U7,ChatSessionConfigSchema:()=>A7,ChatMessageSchema:()=>D7,ChatMessageRoleSchema:()=>f7,CORE_TELEMETRY_EVENTS:()=>v,CORE_BUILD_VERSION:()=>bW,BrowserWebSocketHubAdapter:()=>_W,BUILT_IN_PROVIDER_IDS:()=>XJ,BUILT_IN_PROVIDER:()=>V5,AzureSettingsSchema:()=>fZ,AwsSettingsSchema:()=>AZ,AuthSettingsSchema:()=>KZ,AgentTeamsRuntime:()=>e2,AgentTeam:()=>E6,Agent:()=>um,ALL_DEFAULT_TOOL_NAMES:()=>D$});R(q,I$0);import*as Hm from"@cline/llms";import{ClineNotSubscribedError as Gm,ClineOrgIndividualInferenceSubscriptionError as Km,ClinePassLimitError as Fm,extractClinePassLimitMessage as Am,getClineNotSubscribedMessage as Um,getClineOrgIndividualInferenceSubscriptionMessage as fm,getClinePassSubscriptionUrl as Dm,isClineNotSubscribedError as _m,isClineNotSubscribedMessage as Lm,isClineOrgIndividualInferenceSubscriptionError as Om,isClineOrgIndividualInferenceSubscriptionMessage as Tm,isClinePassLimitError as zm,isClinePassLimitMessage as qm}from"@cline/llms";import{buildClineSystemPrompt as Mm,buildSdkErrorProperties as Rm,ContributionRegistry as Nm,captureSdkError as Em,createClineTelemetryServiceConfig as wm,createClineTelemetryServiceMetadata as Cm,createContributionRegistry as Pm,createTool as Sm,emptyWorkspaceManifest as bm,FEATURE_FLAGS as ym,FeatureFlagDefaultValue as hm,formatDisplayUserInput as km,noopBasicLogger as Im,normalizeSdkError as xm,normalizeUserInput as gm,parseUserCommandEnvelope as mm,registerDisposable as vm,SDK_ERROR_TELEMETRY_EVENT as cm}from"@cline/shared";import"@cline/shared/storage";var GK={};E(GK,{isClineAccountActionRequest:()=>RZ,executeClineAccountAction:()=>NZ,RpcClineAccountService:()=>U5,ClineAccountService:()=>A5});function XN($){if(typeof $!=="object"||$===null||!("error"in $))return;let W=$.error;return typeof W==="string"&&W.trim()?W:void 0}function HK($,W,Z){let Q=XN(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 A5{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(HK(X.status,Y,void 0));throw Error("Cline account response was not valid JSON")}if(!X.ok)throw Error(HK(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 RZ($){return $.action==="clineAccount"}async function NZ($,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 U5{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 KK={};E(KK,{createOAuthClientCallbacks:()=>J6});function J6($){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 TU={};E(TU,{ClineCore:()=>BW});function FK($){if($===!0)return{};if(!$)return;return $}function AK($){if($==="user")return"global";return $}class FJ{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 UK($){let{host:W}=$;return{async startSession(Z){let Q=(Z.cwd?.trim()||Z.workspaceRoot).trim(),J=await W.startSession({source:Z.source?.trim()||A0.CLI,interactive:!1,config:{providerId:e8(Z.provider),modelId:Z.model,apiKey:Z.apiKey?.trim()||void 0,cwd:Q,workspaceRoot:Z.workspaceRoot,systemPrompt:Z.systemPrompt??"",mode:BN(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:VN(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 EZ($){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 VN($){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 BN($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}var LF={};E(LF,{createCoreSettingsService:()=>u2,CoreSettingsService:()=>m$});import{existsSync as I5,readFileSync as nE}from"node:fs";import{basename as PJ,dirname as KF,extname as aE,isAbsolute as UF,join as oE,relative as fF,resolve as FF}from"node:path";var PK={};E(PK,{resolveWorkflowsConfigSearchPaths:()=>M5,resolveSkillsConfigSearchPaths:()=>z5,resolveRulesConfigSearchPaths:()=>q5,parseWorkflowConfigFromMarkdown:()=>T5,parseSkillConfigFromMarkdown:()=>L5,parseRuleConfigFromMarkdown:()=>O5,createWorkflowsConfigDefinition:()=>E5,createUserInstructionConfigService:()=>I$,createSkillsConfigDefinition:()=>R5,createRulesConfigDefinition:()=>N5,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>_5,UnifiedConfigFileWatcher:()=>k2,SKILLS_CONFIG_DIRECTORY_NAME:()=>D5,RULES_CONFIG_DIRECTORY_NAME:()=>yZ});import{createHash as HN}from"node:crypto";import{watch as GN}from"node:fs";import{readdir as KN,readFile as FN}from"node:fs/promises";import{join as AN}from"node:path";function UN($){return HN("sha1").update($).digest("hex")}function _K($){return Boolean($&&typeof $==="object"&&"code"in $)}function fK($){return _K($)&&$.code==="ENOENT"}function DK($){return _K($)&&($.code==="EACCES"||$.code==="EPERM")}class k2{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=GN(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(!fK(Z)&&!DK(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 FN(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:UN(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 KN($,{withFileTypes:!0})).filter((Z)=>Z.isFile()).map((Z)=>({directoryPath:$,fileName:Z.name,filePath:AN($,Z.name)})).sort((Z,Q)=>Z.fileName.localeCompare(Q.fileName))}catch(W){if(fK(W)||DK(W))return[];throw W}}}import{readdir as UJ,readFile as fN,stat as AJ}from"node:fs/promises";import{basename as s1,dirname as DN,extname as CZ,join as m0,resolve as f5}from"node:path";import{AGENTS_RULES_FILE_NAME as LK,RULES_CONFIG_DIRECTORY_NAME as yZ,resolveGlobalAgentsRulesPath as _N,resolveRulesConfigSearchPaths as LN,resolveSkillsConfigSearchPaths as ON,resolveWorkflowsConfigSearchPaths as TN,SKILLS_CONFIG_DIRECTORY_NAME as D5,WORKFLOWS_CONFIG_DIRECTORY_NAME as _5}from"@cline/shared/storage";import zN from"yaml";var wZ="SKILL.md",qN="managed.json",MN=new Set([".md",".markdown",".txt"]);function fJ($){return $.trim().toLowerCase()}function j6($){let W=$;return W?.code==="ENOENT"||W?.code==="EACCES"||W?.code==="EPERM"||W?.code==="ELOOP"}function PZ($){return MN.has(CZ($).toLowerCase())}function OK($){let W=[],Z=new Set;for(let Q of $){let J=f5(Q);if(Z.has(J))continue;Z.add(J),W.push(Q)}return W}function RN($){let W=[...$?.directories??z5($?.workspacePath)];if($?.pluginSkillDirectories)W.push(...$.pluginSkillDirectories);else if($?.includePluginSkills)W.push(...PG({pluginPaths:$.pluginPaths,workspacePath:$.workspacePath,cwd:$.cwd??$.workspacePath}));return OK(W)}async function DJ($){try{let W=await UJ($,{withFileTypes:!0}),Z=[];for(let Q of W){if(!Q.isDirectory())continue;let J=m0($,Q.name),j=m0(J,qN);try{let X=await fN(j,"utf8"),Y=JSON.parse(X);if(Y&&typeof Y==="object")Z.push(J)}catch(X){if(j6(X))continue;if(X?.name==="SyntaxError")continue;throw X}}return Z.sort((Q,J)=>Q.localeCompare(J))}catch(W){if(j6(W))return[];throw W}}function _J($){let W=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,Z=$.match(W);if(!Z)return{data:{},body:$,hadFrontmatter:!1};let[,Q,J]=Z;try{let j=zN.parse(Q);return{data:j&&typeof j==="object"&&!Array.isArray(j)?j:{},body:J,hadFrontmatter:!0}}catch(j){let X=j instanceof Error?j.message:String(j);return{data:{},body:$,hadFrontmatter:!0,parseError:X}}}function SZ($,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 X6($,W){if($===void 0||$===null)return;if(typeof $!=="boolean")throw Error(`Frontmatter field '${W}' must be a boolean.`);return $}function NN($,W){if(s1($.filePath).toLowerCase()!==LK.toLowerCase())return s1($.filePath,CZ($.filePath));if(W&&f5($.filePath)===f5(W,LK))return"Workspace AGENTS.md";if(f5($.filePath)===f5(_N()))return"Global AGENTS.md";return s1($.filePath,CZ($.filePath))}function L5($,W){let{data:Z,body:Q,parseError:J}=_J($);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=SZ(Z.name,"name",!1)??W.trim();if(!Y)throw Error("Missing skill name.");return{name:Y,description:SZ(Z.description,"description",!1),disabled:X6(Z.disabled,"disabled")??(X6(Z.enabled,"enabled")===!1?!0:void 0),instructions:j,frontmatter:Z}}function O5($,W){let{data:Z,body:Q,parseError:J}=_J($);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=SZ(Z.name,"name",!1)??W.trim();if(!X)throw Error("Missing rule name.");return{name:X,disabled:X6(Z.disabled,"disabled")??(X6(Z.enabled,"enabled")===!1?!0:void 0),instructions:j,frontmatter:Z}}function T5($,W){let{data:Z,body:Q,parseError:J}=_J($);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=SZ(Z.name,"name",!1)??W.trim();if(!X)throw Error("Missing workflow name.");return{name:X,disabled:X6(Z.disabled,"disabled")??(X6(Z.enabled,"enabled")===!1?!0:void 0),instructions:j,frontmatter:Z}}function z5($){return ON($)}function q5($){return LN($)}function M5($){return TN($)}async function TK($){if(s1($)===".cline"){let W=await DJ($);return(await Promise.all(W.map((Q)=>TK(m0(Q,D5))))).flat()}try{let W=await UJ($,{withFileTypes:!0}),Z=[];for(let Q of W){if(Q.isFile()&&Q.name===wZ){Z.push({directoryPath:$,fileName:Q.name,filePath:m0($,Q.name)});continue}let J=m0($,Q.name);if(Q.isDirectory()||Q.isSymbolicLink()&&await AJ(J).then((X)=>X.isDirectory()).catch((X)=>{if(j6(X))return!1;throw X}))Z.push({directoryPath:J,fileName:wZ,filePath:m0(J,wZ)})}return Z}catch(W){if(j6(W))return[];throw W}}async function bZ($){if(s1($)===".cline"){let W=await DJ($);return(await Promise.all(W.map((Q)=>bZ(m0(Q,"rules.md"))))).flat()}try{if((await AJ($)).isFile())return[{directoryPath:DN($),fileName:s1($),filePath:$}]}catch(W){if(!j6(W))throw W}try{let Z=(await UJ($,{withFileTypes:!0})).filter((J)=>J.isFile()&&PZ(J.name)).map((J)=>({directoryPath:$,fileName:J.name,filePath:m0($,J.name)})),Q=m0($,"AGENTS.md");try{if((await AJ(Q)).isFile()){if(!Z.some((X)=>X.fileName==="AGENTS.md"))Z.push({directoryPath:$,fileName:"AGENTS.md",filePath:Q})}}catch{}return Z}catch(W){if(j6(W))return[];throw W}}async function EN($){if(s1($)===".cline"){let W=await DJ($);return(await Promise.all(W.map((Q)=>bZ(m0(Q,_5))))).flat()}return bZ($)}function R5($){let W=RN($),Z=$?.workspacePath?m0($.workspacePath,".cline"):void 0;return{type:"skill",directories:Z?OK([...W,Z]):W,discoverFiles:TK,includeFile:(Q)=>Q===wZ,parseFile:(Q)=>L5(Q.content,s1(Q.directoryPath)),resolveId:(Q)=>fJ(Q.name)}}function N5($){let W=$?.directories??q5($?.workspacePath),Z=$?.workspacePath?m0($.workspacePath,".cline"):void 0;return{type:"rule",directories:Z?[...W,Z]:W,discoverFiles:bZ,includeFile:(Q,J)=>Q===".clinerules"||PZ(Q)||PZ(J),parseFile:(Q)=>O5(Q.content,NN(Q,$?.workspacePath)),resolveId:(Q)=>fJ(Q.name)}}function E5($){let W=$?.directories??M5($?.workspacePath),Z=$?.workspacePath?m0($.workspacePath,".cline"):void 0;return{type:"workflow",directories:Z?[...W,Z]:W,discoverFiles:EN,includeFile:(Q)=>PZ(Q),parseFile:(Q)=>T5(Q.content,s1(Q.filePath,CZ(Q.filePath))),resolveId:(Q)=>fJ(Q.name)}}function zK($){let W=[R5($?.skills),N5($?.rules),E5($?.workflows)];return new k2(W,{debounceMs:$?.debounceMs,emitParseErrors:$?.emitParseErrors})}import{truncateSplit as qK}from"@cline/shared";function wN($,W){if($.description?.trim())return qK($.description,".");if(W==="workflow")return;return qK($.instructions,".")}function CN($){return $.disabled!==!0}function MK($,W){return[...$.getSnapshot(W).entries()].map(([Z,Q])=>({id:Z,record:Q})).filter(({record:Z})=>CN(Z.item)).map(({id:Z,record:Q})=>({id:Z,name:Q.item.name,instructions:Q.item.instructions,description:wN(Q.item,W),kind:W})).sort((Z,Q)=>Z.name.localeCompare(Q.name))}function w5($){let W=new Map;for(let Z of[...MK($,"workflow"),...MK($,"skill")])if(!W.has(Z.name))W.set(Z.name,Z);return[...W.values()].sort((Z,Q)=>Z.name.localeCompare(Q.name))}function RK($,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=w5(W).find((Y)=>Y.name===Q);return X?`${X.instructions}${j}`:$}var EK={};E(EK,{mergeRulesForSystemPrompt:()=>V6,loadRulesForSystemPromptFromWatcher:()=>LJ,listEnabledRulesFromWatcher:()=>NK,isRuleEnabled:()=>hZ,formatRulesForSystemPrompt:()=>Y6});function hZ($){return $.disabled!==!0}function Y6($){if($.length===0)return"";return`
|
|
201
|
+
${Q}`;return Z||Q}function oz($,W){let Z=W?.["*"]??{},Q=W?.[$]??{};return{...Z,...Q}.enabled!==!1}function sz($,W){return $.filter((Z)=>oz(Z.name,W))}function tz($,W){return i1(sz($,W))}function ez($){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:TH(J?.options,X.options)},Q={...Q,...X.messages?{messages:X.messages}:{},...X.tools?{tools:X.tools}:{},...X.options?{options:TH(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 q3;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??pz,this.conversation=new _3($.initialMessages),this.messageBuilder=new U3(UH()),this.contributionRegistry=rz({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 z3({maxConsecutiveMistakes:Z,onLimitReached:$.onConsecutiveMistakeLimitReached,emit:(j)=>this.emitLegacyEvent(j),log:(j,X,Y)=>$q(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 T3(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=O2($),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 nz(W);if(Z)$.push(Z)}return az(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 D=await Zq(Z,$.userImages,$.userFiles,this.config.userFileContentLoader);this.conversation.appendMessage({role:"user",content:D})}let Q=await this.composeSystemPrompt(),J=XH(this.config,this.logger,this.telemetry),j=new Map;for(let D of this.contributionRegistry.getRegisteredTools())j.set(D.name,D);let X=tz([...j.values()],this.config.toolPolicies),Y=new Map;for(let D of X)Y.set(D.name,D);for(let D of this.config.tools)Y.set(D.name,D);let V=this.conversation.getConversationId(),B=zH(this.config),H=Array.from(Y.values()),G=y9(this.conversation.getMessages()),K=DH({agentConfig:this.config,sessionId:this.config.sessionId,agentId:this.agentId,conversationId:V,parentAgentId:this.parentAgentId,model:J,logger:this.logger,telemetry:this.telemetry,tools:H,toolContextMetadata:{modelSupportsImages:B?.capabilities?.includes("images")??!0,...this.config.toolContextMetadata,[GB]: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((D)=>{this.handleRuntimeEvent(D)}),f,U;try{if($.isContinue)f=await F.continue(void 0);else f=await F.run("")}catch(D){U=D instanceof Error?D:Error(String(D))}finally{A();try{await this.activeTrackerWork}catch(D){this.logger?.error?.("SessionRuntime tracker work failed during drain",{agentId:this.agentId,error:D})}this.activeRuntime=null,this.running=!1,this.abortRequested=!1,this.abortReason=void 0}if(f&&f.messages.length>0){let D=h8(f.messages);this.conversation.replaceMessages(D)}let _=new Date;try{return this.buildLegacyResult({runResult:f,thrownError:U,startedAt:W,endedAt:_})}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 $=ez([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=h8(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:y9(X.messages)}:{},...X.systemPrompt!==void 0?{systemPrompt:X.systemPrompt}:{}}}}async prepareMessagesForModelRequest($){let W=await this.prepareProviderMessagesForApi(h9($));return y9(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?iz(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(h8($));return}if(W.length===0)return;let Z=new Set(this.conversation.getMessages().map((J)=>J.id).filter((J)=>typeof J==="string")),Q=h8(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":Wq(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?h8(W.messages):this.conversation.getMessages(),H=zH(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 $q($,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 Wq($){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(() => OH);return J($,W,Z,Q)}function zH($){if($.knownModels?.[$.modelId])return $.knownModels[$.modelId];let W=K3($);if(W?.[$.modelId])return W[$.modelId];return}import{buildClineSystemPrompt as qH}from"@cline/shared";function MH($,W){let Z=$.trim();if(W.providerId.toLowerCase()!=="cline")return Z;return qH({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 NH($,W){let Z=$.trim();if(W.providerId.toLowerCase()!=="cline")return Z;return qH({ide:W.clineIdeName||"Terminal",workspaceRoot:W.cwd?.trim()||"/",providerId:W.providerId,overridePrompt:Z,metadata:W.workspaceMetadata,platform:W.clinePlatform})}function R$($){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}),updateConnectionDefaults:(Z)=>{W={...W,...Z}}}}function T2($){let W=$.configProvider.getRuntimeConfig(),Z=$.kind==="teammate"?MH($.prompt,W):NH($.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 E$($){let W=T2($),Z=new N$(W);if(W.onEvent)Z.subscribeEvents(W.onEvent);return Z}var jq=M3.object({systemPrompt:M3.string().describe("System prompt defining the sub-agent's behavior"),task:M3.string().describe("Task for the sub-agent to complete")});function w$($){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:Jq(jq),execute:async(W,Z)=>{let Q=$.createSubAgentTools?await $.createSubAgentTools(W,Z):$.subAgentTools??[],J=E$({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 U0,TEAM_AWAIT_TIMEOUT_MS as Xq,TEAM_RUN_MESSAGE_PREVIEW_LIMIT as Yq,TEAM_RUN_TEXT_PREVIEW_LIMIT as Vq,TEAM_TASK_IGNORED_FIELDS_BY_ACTION as Bq,TeamAttachOutcomeFragmentInputSchema as RH,TeamAwaitRunsInputSchema as EH,TeamBroadcastInputSchema as wH,TeamBroadcastToolResultSchema as Hq,TeamCancelRunInputSchema as CH,TeamCancelRunToolResultSchema as Gq,TeamCleanupInputSchema as PH,TeamCleanupToolResultSchema as Kq,TeamCreateOutcomeInputSchema as SH,TeamCreateOutcomeToolResultSchema as Fq,TeamFinalizeOutcomeInputSchema as bH,TeamFinalizeOutcomeToolResultSchema as Aq,TeamListOutcomesInputSchema as yH,TeamListRunsInputSchema as hH,TeamMailboxMessageToolResultSchema as Uq,TeamMissionLogInputSchema as kH,TeamMissionLogToolResultSchema as fq,TeamOutcomeFragmentToolResultSchema as IH,TeamOutcomeToolResultSchema as Dq,TeamReadMailboxInputSchema as xH,TeamReviewOutcomeFragmentInputSchema as gH,TeamRunTaskInputSchema as mH,TeamRunTaskToolResultSchema as N3,TeamRunToolSummarySchema as R3,TeamSendMessageInputSchema as vH,TeamSendMessageToolResultSchema as _q,TeamShutdownTeammateInputSchema as cH,TeamSimpleAgentStatusToolResultSchema as uH,TeamSpawnTeammateInputSchema as dH,TeamStatusInputSchema as lH,TeamStatusToolResultSchema as Lq,TeamTaskInputSchema as pH,TeamTaskToolResultSchema as c4,validateWithZod as g,zodToJsonSchema as f0}from"@cline/shared";function rH($,W){let Z=$.replace(/\s+/g," ").trim();if(Z.length<=W)return Z;return`${Z.slice(0,Math.max(0,W-3)).trimEnd()}...`}function z2($,W){if($===void 0)throw Error(`Missing required field: ${W}`);return $}function Oq($){let W=$.result;if(!W)return;return{textPreview:rH(W.text,Vq),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 g9($){return $?.toISOString()}function E3($){return{id:$.id,agentId:$.agentId,taskId:$.taskId,status:$.status,messagePreview:rH($.message,Yq),priority:$.priority,retryCount:$.retryCount,maxRetries:$.maxRetries,nextAttemptAt:g9($.nextAttemptAt),continueConversation:$.continueConversation,startedAt:$.startedAt.toISOString(),endedAt:g9($.endedAt),leaseOwner:$.leaseOwner,heartbeatAt:g9($.heartbeatAt),lastProgressAt:g9($.lastProgressAt),lastProgressMessage:$.lastProgressMessage,currentActivity:$.currentActivity,error:$.error,resultSummary:Oq($)}}function Tq($){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 I8=["team_spawn_teammate","team_shutdown_teammate","team_status","team_task","team_run_task","team_cancel_run","team_list_runs","team_await_runs","team_send_message","team_broadcast","team_read_mailbox","team_mission_log","team_cleanup","team_create_outcome","team_attach_outcome_fragment","team_review_outcome_fragment","team_finalize_outcome","team_list_outcomes"];function iH($){let W=[];if($.createBaseTools)W.push(...$.createBaseTools());W.push(...q2({runtime:$.runtime,requesterId:$.spec.agentId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!1})),$.runtime.spawnTeammate({agentId:$.spec.agentId,config:T2({kind:"teammate",prompt:$.spec.rolePrompt,role:$.spec.rolePrompt,configProvider:$.teammateConfigProvider,tools:W,maxIterations:$.spec.maxIterations,cwd:$.teammateConfigProvider.getRuntimeConfig().cwd})})}function x8($){let W=$.leadAgentId??"lead",Z=$.restoredFromPersistence===!0,Q=q2({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;iH({runtime:$.runtime,requesterId:W,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:j}),J.push(j.agentId)}return{tools:Q,restoredFromPersistence:Z,restoredTeammates:J}}function q2($){let W=$.allowSpawn??!0,Z=$.includeSpawnTool??!0,Q=$.includeManagementTools??!0,J=[];if(Z)J.push(U0({name:"team_spawn_teammate",description:"Spawn a teammate with a required agentId and rolePrompt.",inputSchema:f0(dH),execute:async(X)=>{let Y=g(dH,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(iH({runtime:$.runtime,requesterId:$.requesterId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:V}),!Q)$.onLeadToolsUnlocked?.(q2({...$,includeSpawnTool:!1,includeManagementTools:!0,onLeadToolsUnlocked:void 0}));return g(uH,{agentId:Y.agentId,status:"spawned"})}}));if(!Q)return J;J.push(U0({name:"team_shutdown_teammate",description:"Shutdown a teammate by agentId.",inputSchema:f0(cH),execute:async(X)=>{let Y=g(cH,X);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");return $.runtime.shutdownTeammate(Y.agentId,Y.reason),g(uH,{agentId:Y.agentId,status:"stopped"})}})),J.push(U0({name:"team_status",description:"Return a snapshot of team members, task counts, mailbox, and mission log stats.",inputSchema:f0(lH),execute:async(X)=>{return g(lH,X),g(Lq,$.runtime.getSnapshot())}})),J.push(U0({name:"team_task",description:"Manage shared team tasks with action-specific payloads. create requires title and description, with optional dependsOn and assignee. list accepts optional status, assignee. claim requires taskId. complete requires taskId and summary. block requires taskId and reason. Do not include fields from other actions.",inputSchema:f0(pH),execute:async(X)=>{let Y=g(pH,X);switch(Y.action){case"create":{let V=new Set(Bq.create??[]),B=Object.entries(X).filter(([G,K])=>V.has(G)&&K!=null).map(([G])=>G),H=$.runtime.createTask({title:z2(Y.title,"title"),description:z2(Y.description,"description"),dependsOn:Y.dependsOn,assignee:Y.assignee,createdBy:$.requesterId});return g(c4,{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(c4,{action:"list",tasks:$.runtime.listTaskItems({status:Y.status,assignee:Y.assignee})});case"claim":{let V=$.runtime.claimTask(z2(Y.taskId,"taskId"),$.requesterId);return g(c4,{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(z2(Y.taskId,"taskId"),$.requesterId,z2(Y.summary,"summary"));return g(c4,{action:"complete",taskId:V.id,status:V.status})}case"block":{let V=$.runtime.blockTask(z2(Y.taskId,"taskId"),$.requesterId,z2(Y.reason,"reason"));return g(c4,{action:"block",taskId:V.id,status:V.status})}}}}));let j=new Map;return J.push(U0({name:"team_run_task",description:"Route a delegated task to a teammate. Choose sync (wait) or async (run in background).",inputSchema:f0(mH),execute:async(X)=>{let Y=g(mH,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(N3,{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(N3,{...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(N3,{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(U0({name:"team_cancel_run",description:"Cancel one async teammate run.",inputSchema:f0(CH),execute:async(X)=>{let Y=g(CH,X),V=$.runtime.cancelRun(Y.runId,Y.reason);return g(Gq,{runId:V.id,status:V.status})}})),J.push(U0({name:"team_list_runs",description:"List teammate runs started with team_run_task in async mode, including live activity/progress fields when available.",inputSchema:f0(hH),execute:async(X)=>g(R3.array(),$.runtime.listRuns(g(hH,X)).map(E3))})),J.push(U0({name:"team_await_runs",description:"Wait for async teammate runs. Provide runId to wait for one run, or omit it to wait for all active async runs. Uses a long timeout for legitimate teammate work.",inputSchema:f0(EH),timeoutMs:Xq,execute:async(X)=>{let Y=g(EH,X);if(Y.runId){let H=await $.runtime.awaitRun(Y.runId);return Tq(H),g(R3,E3(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(R3.array(),V.map(E3))}})),J.push(U0({name:"team_send_message",description:"Send a mailbox message to a specific teammate.",inputSchema:f0(vH),execute:async(X)=>{let Y=g(vH,X),V=$.runtime.sendMessage($.requesterId,Y.toAgentId,Y.subject,Y.body,Y.taskId??void 0);return g(_q,{id:V.id,toAgentId:V.toAgentId})}})),J.push(U0({name:"team_broadcast",description:"Broadcast a message to all teammates.",inputSchema:f0(wH),execute:async(X)=>{let Y=g(wH,X),V=$.runtime.broadcast($.requesterId,Y.subject,Y.body,{taskId:Y.taskId??void 0});return g(Hq,{delivered:V.length})}})),J.push(U0({name:"team_read_mailbox",description:"Read the current agent mailbox.",inputSchema:f0(xH),execute:async(X)=>{let Y=g(xH,X);return g(Uq.array(),$.runtime.listMailbox($.requesterId,{unreadOnly:Y.unreadOnly,markRead:!0}))}})),J.push(U0({name:"team_mission_log",description:"Append a mission log update for your team.",inputSchema:f0(kH),execute:async(X)=>{let Y=g(kH,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(fq,{id:V.id})}})),J.push(U0({name:"team_cleanup",description:"Clean up the team runtime. Fails if teammates are still running.",inputSchema:f0(PH),execute:async(X)=>{if(g(PH,X),$.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can run cleanup.");return $.runtime.cleanup(),g(Kq,{status:"cleaned"})}})),J.push(U0({name:"team_create_outcome",description:"Create a converged team outcome.",inputSchema:f0(SH),execute:async(X)=>{let Y=g(SH,X),V=$.runtime.createOutcome({title:Y.title,requiredSections:Y.requiredSections,createdBy:$.requesterId});return g(Fq,{outcomeId:V.id,status:V.status,requiredSections:V.requiredSections})}})),J.push(U0({name:"team_attach_outcome_fragment",description:"Attach a fragment to an outcome section.",inputSchema:f0(RH),execute:async(X)=>{let Y=g(RH,X),V=$.runtime.attachOutcomeFragment({outcomeId:Y.outcomeId,section:Y.section,sourceAgentId:$.requesterId,sourceRunId:Y.sourceRunId||void 0,content:Y.content});return g(IH,{fragmentId:V.id,status:V.status})}})),J.push(U0({name:"team_review_outcome_fragment",description:"Review one outcome fragment.",inputSchema:f0(gH),execute:async(X)=>{let Y=g(gH,X),V=$.runtime.reviewOutcomeFragment({fragmentId:Y.fragmentId,reviewedBy:$.requesterId,approved:Y.approved});return g(IH,{fragmentId:V.id,status:V.status})}})),J.push(U0({name:"team_finalize_outcome",description:"Finalize one outcome.",inputSchema:f0(bH),execute:async(X)=>{let Y=g(bH,X),V=$.runtime.finalizeOutcome(Y.outcomeId);return g(Aq,{outcomeId:V.id,status:V.status})}})),J.push(U0({name:"team_list_outcomes",description:"List team outcomes.",inputSchema:f0(yH),execute:async(X)=>{return g(yH,X),g(Dq.array(),$.runtime.listOutcomes())}})),J}function m9($){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 nH($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}var zq=[{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:w$({configProvider:{}}).description,headlessToolNames:["spawn_agent"]},{id:"teams",description:"Enable team collaboration tools for teammate management, task coordination, mailbox messaging, mission logs, and outcomes.",headlessToolNames:[...I8]}],qq={read_files:"enableReadFiles",search_codebase:"enableSearch",run_commands:"enableBash",fetch_web_content:"enableWebFetch",apply_patch:"enableApplyPatch",editor:"enableEditor",skills:"enableSkills",ask_question:"enableAskQuestion"};function Mq($){return $==="plan"||$==="yolo"?$:"act"}function oH($){let W=Mq($.mode),Z=a0[r1({mode:W})],Q=y8($.providerId??"",$.modelId??"",W,b8);return{mode:W,flags:{...Z,...Q,...typeof $.enableSpawnAgent==="boolean"?{enableSpawnAgent:$.enableSpawnAgent}:{},...typeof $.enableAgentTeams==="boolean"?{enableAgentTeams:$.enableAgentTeams}:{}}}}function aH($,W){if(W.disabledToolIds?.has($))return!1;let{flags:Z}=oH(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=qq[$];return Q?Z[Q]===!0:!1}function Nq($,W){if($.id==="editor"){let{flags:Z}=oH(W),Q=Z.enableApplyPatch===!0&&Z.enableEditor!==!0;return{...$,defaultEnabled:aH($.id,W),headlessToolNames:[Q?"apply_patch":"editor"]}}return{...$,defaultEnabled:aH($.id,W)}}function M2($={}){return zq.map((W)=>Nq(W,$))}function v9($={}){return M2($).filter((W)=>W.defaultEnabled).map((W)=>W.id)}function c9($){if(!$.enabled)return new Set;let W=M2($.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 u4($,W={}){return M2(W).filter((Z)=>$.has(Z.id)).flatMap((Z)=>Z.headlessToolNames)}function u9($,W={}){return u4($,W)}function N2($={}){let{executorOptions:W={},executors:Z,...Q}=$,J={...S8(W),...Z??{}};return z$({...Q,executors:J})}import{mkdirSync as Sq,writeFileSync as bq}from"node:fs";import{dirname as yq}from"node:path";import{normalizeUserInput as hq,stripModeNotices as kq}from"@cline/shared";import{nanoid as Iq}from"nanoid";var tH={};w(tH,{sanitizeSessionToken:()=>R2,parseTeamTaskSubSessionId:()=>m8,parseSubSessionId:()=>l4,makeTeamTaskSubSessionId:()=>d4,makeSubSessionId:()=>g8,deriveSubsessionStatus:()=>p4});import{nanoid as wq}from"nanoid";function R2($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function g8($,W){let Z=R2($),Q=R2(W),J=`${Z}__${Q}`;return J.length>180?J.slice(0,180):J}function d4($,W){let Z=R2($),Q=R2(W);return`${Z}__teamtask__${Q}__${wq(6)}`}function m8($){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 l4($){if(m8($))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 p4($){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 W0}from"zod";var WG={};w(WG,{isTerminalSessionStatus:()=>$G,isNonTerminalSessionStatus:()=>K0,SessionSource:()=>F0,SESSION_STATUSES:()=>r4,NON_TERMINAL_SESSION_STATUSES:()=>eH});import{SESSION_STATUS_VALUES as Cq}from"@cline/shared";var r4=Cq,eH=["idle","running","pending"];function $G($){return!eH.includes($)}function K0($){return!$G($)}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 Pq=W0.enum(r4),I0=W0.object({version:W0.literal(1),session_id:W0.string().min(1),source:W0.string().min(1),pid:W0.number().int(),started_at:W0.string().min(1),ended_at:W0.string().min(1).optional(),exit_code:W0.number().int().nullable().optional(),status:Pq,interactive:W0.boolean(),provider:W0.string().min(1),model:W0.string().min(1),cwd:W0.string().min(1),workspace_root:W0.string().min(1),team_name:W0.string().min(1).optional(),enable_tools:W0.boolean(),enable_spawn:W0.boolean(),enable_teams:W0.boolean(),prompt:W0.string().optional(),metadata:W0.record(W0.string(),W0.unknown()).optional(),messages_path:W0.string().min(1).optional(),compaction_path:W0.string().min(1).optional()});function ZG($){if(!$)return!1;return Object.values($).some((W)=>typeof W==="function")}function C3($,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 QG($){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 w3($,W){let Z={...$};Z.id=n1(Z.id)??Iq();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 d9($){return $.map((W)=>w3(W))}function l9($,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 w3(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]={...w3(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 i4($){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 xq=120;function E2($){let W=$?.trim();return W?W.slice(0,xq):void 0}function P3($){let W=kq(hq($??"")).trim();if(!W)return;return E2(W.split(`
|
|
203
|
+
`)[0]?.trim())}function C$($){if(!$)return;let W={...$},Z=E2(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 n4($){let W=C$($.metadata)??{},Z=$.title!==void 0?E2($.title):P3($.prompt);if(Z)W.title=Z;return Object.keys(W).length>0?W:void 0}function S3($){let W=m8($);if(W)return{agent:"teammate",sessionId:W.rootSessionId,taskType:"team"};let Z=l4($);if(Z)return{agent:"subagent",sessionId:Z.rootSessionId,taskType:"subagent_task"};return{agent:"lead",sessionId:$}}function b3($){return{version:1,updated_at:$.updatedAt,agent:$.context.agent,sessionId:$.context.sessionId,...$.context.taskType?{taskType:$.context.taskType}:{},messages:d9($.messages),...$.systemPrompt?{system_prompt:$.systemPrompt}:{}}}function JG($,W,Z){Sq(yq($),{recursive:!0}),bq($,`${JSON.stringify(b3({updatedAt:W,context:Z,messages:[]}),null,2)}
|
|
204
|
+
`,"utf8")}function jG($,W){return I0.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 XG($,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}}O0();var YG={};w(YG,{summarizeUsageFromMessages:()=>c8,sumUsageTotals:()=>a4,getCurrentContextSize:()=>y3,createInitialAccumulatedUsage:()=>z0,accumulateUsageTotals:()=>D0});function z0(){return{inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0}}function D0($,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 a4($){let W=z0();for(let Z of $)W=D0(W,Z);return W}function v8($){return typeof $==="number"&&Number.isFinite($)?$:0}function c8($){let W=z0();for(let Z of $){let Q=Z.metrics;if(!Q)continue;W=D0(W,{inputTokens:v8(Q.inputTokens),outputTokens:v8(Q.outputTokens),cacheReadTokens:v8(Q.cacheReadTokens),cacheWriteTokens:v8(Q.cacheWriteTokens),totalCost:v8(Q.cost)})}return W}function y3($){for(let W=$.length-1;W>=0;W-=1){let Z=$[W];if(Z?.role!=="assistant")continue;let Q=v8(Z.metrics?.inputTokens);return Q>0?Q:void 0}return}function gq($){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 h3($){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 mq($){return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheWriteTokens:$.cacheWriteTokens,cacheReadTokens:$.cacheReadTokens,totalCost:$.cost}}function vq($){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 k3($,W,Z){let{sessionId:Q,config:J,liveSession:j,emit:X}=$,Y=J.telemetry,V=j?.runtime.teamRuntime,B=Z?.isPrimaryAgentEvent??!0,H=h3(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=gq(W.input);if(K)pW(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(U8(Y,{ulid:Q,tool:K,autoApproved:void 0,success:F,modelId:J.modelId,provider:J.providerId,...G}),!F&&(K==="editor"||K==="apply_patch"))rW(Y,{ulid:Q,modelId:J.modelId,provider:J.providerId,errorType:W.error,...G})}if(W.type==="notice"&&W.reason==="api_error")e6(Y,{ulid:Q,model:J.modelId,provider:J.providerId,errorMessage:W.message,...G});if(W.type==="error")e6(Y,{ulid:Q,model:J.modelId,provider:J.providerId,errorMessage:W.error?.message??"unknown error",...G});if(W.type==="usage"&&j?.turnUsageBaseline){let K=mq(W);if(B){j.turnPrimaryUsage=D0(j.turnPrimaryUsage??z0(),K);let A=D0(j.turnUsageBaseline,j.turnPrimaryUsage);$.usageBySession.set(Q,A),A8(Y,{ulid:Q,provider:J.providerId,model:J.modelId,source:"assistant",mode:J.mode,...G}),dW(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=vq({isPrimaryAgentEvent:B,overrides:Z,eventMetadata:H}),f=j.turnUsageByAgent??new Map;j.turnUsageByAgent=f,f.set(A,D0(f.get(A)??z0(),K))}let F=D0(j.turnPrimaryUsage??z0(),a4(j.turnUsageByAgent?.values()??[]));$.aggregateUsageBySession.set(Q,D0(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:QG(W),ts:Date.now()}})}function o1($){return $.workspaceRoot??$.cwd}import{resolveProviderRequestHeaders as oN}from"@cline/llms";import{hasRuntimeConfigExtension as sN}from"@cline/shared";var u8="0.0.61";var o4={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:u8,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 o9,readFileSync as EM,statSync as wM}from"node:fs";import{basename as CM,dirname as n9,join as s9,resolve as a9}from"node:path";import{discoverPluginModulePaths as PM,resolveConfiguredPluginModulePaths as CG,resolvePluginConfigSearchPaths as SM,SKILLS_CONFIG_DIRECTORY_NAME as bM}from"@cline/shared/storage";import{resolve as XM}from"node:path";import{normalizePluginManifest as YM}from"@cline/shared";import{existsSync as R0,readFileSync as l8}from"node:fs";import{builtinModules as cq,createRequire as m3}from"node:module";import{dirname as P$,extname as t4,isAbsolute as uq,resolve as o}from"node:path";import{fileURLToPath as HG}from"node:url";import{PLUGIN_FILE_EXTENSIONS as dq}from"@cline/shared";var GG=P$(HG(import.meta.url)),lq=m3(import.meta.url),pq=o(GG,"..","..","..","..",".."),I3=nq(pq),rq=["@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"],v3=new Set(cq.flatMap(($)=>[$,$.replace(/^node:/,"")])),s4=new Set(dq),iq=["development","node","import","require","default"];function nq($){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(R0(J))W[Q]=J;for(let Q of["agents","core","llms","shared"]){let J=o($,"packages",Q),j=o(J,"package.json");if(!R0(j))continue;try{let X=JSON.parse(l8(j,"utf8"));if(typeof X.name!=="string"||!X.exports)continue;if(typeof X.exports==="string"){let Y=o(J,X.exports);if(R0(Y))W[X.name]=Y;continue}if(typeof X.exports!=="object")continue;for(let[Y,V]of Object.entries(X.exports)){let B=aq(J,V);if(!B)continue;let H=Y==="."?X.name:`${X.name}/${Y.replace(/^\.\//,"")}`;W[H]=B}}catch{}}return W}function aq($,W){let Z=c3(W);if(!Z)return null;let Q=KG($,Z);for(let J of Q)if(R0(J))return J;return null}function c3($,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 iq){let J=c3(Z[Q],W);if(J)return J}return null}function KG($,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 oq($){return Object.fromEntries(Object.entries($).sort(([W],[Z])=>Z.length-W.length))}function p9($){return!($.startsWith(".")||$.startsWith("/")||$.startsWith("file:")||$.startsWith("data:")||$.startsWith("http:")||$.startsWith("https:"))}function d8($){if($.startsWith("@")){let[W,Z]=$.split("/",3);return Z?`${W}/${Z}`:$}return $.split("/",1)[0]??$}function sq($){let W=d8($);if($===W)return".";return`.${$.slice(W.length)}`}function FG($){return d8($).startsWith("@cline/")}function x3($,W){let Z=d8(W),Q=P$($);while(!0){let J=o(Q,"node_modules",Z);if(R0(J)||R0(o(J,"package.json")))return!0;let j=o(Q,"..");if(j===Q)return!1;Q=j}}function BG($){return g3($)!==null}function g3($){try{return lq.resolve($)}catch{}return tq($)}function tq($){let W=d8($),Z=AG(W);if(!Z)return null;let Q=o(Z,"package.json");try{let J=JSON.parse(l8(Q,"utf8")),j=sq($),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=c3(X)??(j==="."&&typeof J.main==="string"?J.main:null);if(!Y)return null;let V=o(Z,Y),B=[V,...KG(Z,Y).filter((H)=>H!==V)];for(let H of B)if(R0(H))return H;return null}catch{return null}}function eq(){let $=[GG],W=process.env.CLINE_WRAPPER_PATH?.trim();if(W)$.push(P$(P$(W)));let Z=process.execPath?.trim();if(Z)$.push(P$(Z));return[...new Set($.map((Q)=>o(Q)))]}function $M($,W){let Z=$;while(!0){let Q=o(Z,"package.json");if(R0(Q))try{if(JSON.parse(l8(Q,"utf8")).name===W)return Z}catch{}let J=o(Z,"node_modules",W,"package.json");if(R0(J))return P$(J);let j=o(Z,"..");if(j===Z)return null;Z=j}}function AG($){for(let W of eq()){let Z=$M(W,$);if(Z)return Z}return null}function WM($){let Z=P$($);for(let Q=0;Q<4;Q++){let J=o(Z,"package.json");if(R0(J))try{let X=JSON.parse(l8(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 UG($,W){let Z=W.startsWith("file:")?HG(W):uq(W)?W:o(P$($),W);if(R0(Z)&&s4.has(t4(Z)))return Z;for(let Q of s4){let J=`${Z}${Q}`;if(R0(J))return J}for(let Q of s4){let J=o(Z,`index${Q}`);if(R0(J))return J}return null}function fG($){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 ZM($){return t4($)!==".ts"}function DG($,W,Z=new Set){if(Z.has($)||!R0($))return;if(Z.add($),!s4.has(t4($)))return;let Q=l8($,"utf8"),J=ZM($);for(let j of fG(Q)){if(j.startsWith("node:")||v3.has(j))continue;if(p9(j)){if(!J)continue;if(Object.hasOwn(I3,j)||Object.hasOwn(I3,d8(j))||x3($,j)||FG(j)&&BG(j)||W&&BG(j))continue;throw Error(`Cannot find module '${d8(j)}'`)}let X=UG($,j);if(X)DG(X,W,Z)}}function _G($,W=new Set,Z=new Set){if(W.has($)||!R0($))return Z;if(W.add($),!s4.has(t4($)))return Z;let Q=l8($,"utf8");for(let J of fG(Q)){if(Z.add(J),p9(J))continue;let j=UG($,J);if(j)_G(j,W,Z)}return Z}function QM($,W){let Z=m3($),Q={},J=_G($),j=new Set(rq);for(let[X,Y]of Object.entries(I3)){try{Z.resolve(X);continue}catch{}Q[X]=Y}for(let X of J)if(p9(X)&&(FG(X)||W))j.add(X);for(let X of j){if(Object.hasOwn(Q,X)||x3($,X))continue;let Y=g3(X);if(Y)Q[X]=Y}if(!W)return Q;for(let X of J){if(!p9(X)||Object.hasOwn(Q,X)||x3($,X)||X.startsWith("node:")||v3.has(X))continue;let Y=g3(X);if(Y)Q[X]=Y}return Q}function JM($){let W=t4($);return W===".ts"||W===".tsx"||W===".mts"||W===".cts"}var w2;function jM(){if(w2!==void 0)return w2;let $=AG("jiti");if(!$)return w2=null,null;let W=o($,"dist","babel.cjs");if(!R0(W))return w2=null,null;try{let Q=m3(W)(W);w2=typeof Q==="function"?Q:null}catch{w2=null}return w2}async function LG($,W={}){let Z=!WM($);DG($,Z);let Q=QM($,Z),J=oq(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])=>JM(G)).map(([G])=>G),V=jM(),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:[...v3],transformModules:Y,tryNative:!1,...B?{transform:B}:{}}).import($,{})}function OG($,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 TG($){return typeof $==="object"&&$!==null}function u3($){return Array.isArray($)&&$.every((W)=>typeof W==="string")}function VM($,W){if(!TG($.manifest))throw Error(`Invalid plugin module at ${W}: missing required "manifest"`);if(!u3($.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")&&!u3($.manifest.providerIds))throw Error(`Invalid plugin module at ${W}: manifest.providerIds must be a string array when provided`);if(Object.hasOwn($.manifest,"modelIds")&&!u3($.manifest.modelIds))throw Error(`Invalid plugin module at ${W}: manifest.modelIds must be a string array when provided`)}function BM($,W){if(!TG($))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"`);VM($,W)}async function e4($,W={}){let Z=XM(W.cwd??process.cwd(),$),Q=await LG(Z,{useCache:W.useCache}),J=W.exportName??"plugin",j=Q.default??Q[J];BM(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:YM(X.manifest),setup:V}}async function r9($,W={}){return(await C2($,W)).plugins}async function C2($,W={}){let Z=[],Q=[],J=new Map,j=0;for(let Y of $)try{let V=await e4(Y,W);if(!OG(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 r3}from"node:fs";import{createRequire as wG}from"node:module";import{dirname as i9,join as r8}from"node:path";import{fileURLToPath as AM}from"node:url";var RG={};w(RG,{resolveSubprocessRuntimeExecutable:()=>d3,buildSubprocessSandboxCommand:()=>NG,SubprocessSandbox:()=>p8,CLINE_JS_RUNTIME_PATH_ENV:()=>MG});import{spawn as HM}from"node:child_process";import{basename as GM}from"node:path";import{augmentNodeCommandForDebug as KM,withResolvedClineBuildEnv as FM}from"@cline/shared";function zG($){if($ instanceof Error)return $;return Error(String($))}var MG="CLINE_JS_RUNTIME_PATH";function qG($){let W=$?.trim();if(!W)return!1;let Z=GM(W).toLowerCase();return Z==="node"||Z==="node.exe"||Z==="bun"||Z==="bun.exe"}function d3($={}){let W=$.env??process.env,Z=$.runtimeExecutable?.trim()||W[MG]?.trim();if(Z)return Z;let Q=$.execPath?.trim()||process.execPath;if(qG(Q))return Q;for(let J of[W.BUN_EXEC_PATH,W.npm_node_execpath,W.NODE]){let j=J?.trim();if(j&&qG(j))return j}return"node"}function NG($,W={}){let Z=d3({env:W.env,execPath:W.execPath,runtimeExecutable:W.runtimeExecutable});return KM([Z,...$],{env:W.env,execArgv:W.execArgv,debugRole:W.name==="plugin-sandbox"?"plugin-sandbox":"sandbox"})}class p8{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=NG($,{name:this.options.name,runtimeExecutable:this.options.runtimeExecutable}),Z=HM(W[0]??d3(this.options),W.slice(1),{stdio:["ignore","ignore","pipe","ipc"],env:FM(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: ${zG(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 "${$}": ${zG(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 UM($){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 $5($){return($ instanceof Error?$.message:String($)).includes("Unknown sandbox plugin id:")}function fM(){return`@cline/cli-${process.platform==="win32"?"windows":process.platform}-${process.arch}`}function DM(){let $=process.env.CLINE_WRAPPER_PATH?.trim();if(!$)return;try{let Z=wG($).resolve(`${fM()}/package.json`),Q=r8(i9(Z),"extensions","plugin-sandbox-bootstrap.js");return r3(Q)?Q:void 0}catch{return}}function _M(){let $=process.execPath?.trim();if(!$)return;let W=r8(i9(i9($)),"extensions","plugin-sandbox-bootstrap.js");return r3(W)?W:void 0}function LM(){let $=i9(AM(import.meta.url)),W=wG(import.meta.url),Z=[r8($,"plugin-sandbox-bootstrap.js"),r8($,"extensions","plugin-sandbox-bootstrap.js"),r8($,"agents","plugin-sandbox-bootstrap.js"),DM(),_M()];for(let j of Z.filter((X)=>typeof X==="string"))if(r3(j))return{file:j};let Q=r8($,"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 l3=LM();function p3($,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 i8($){let W=new p8({name:"plugin-sandbox",..."file"in l3?{bootstrapFile:l3.file}:{bootstrapScript:l3.script},onEvent:$.onEvent}),Z=p3($.importTimeoutMs,4000,"CLINE_PLUGIN_IMPORT_TIMEOUT_MS"),Q=p3($.hookTimeoutMs,3000),J=p3($.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(UM);return{extensions:B.map((G)=>{let K={name:G.name,__clinePluginPath:G.pluginPath,manifest:G.manifest,setup:(F)=>{OM(F,W,G,J,Y),TM(F,W,G,J,Y),zM(F,W,G,J,Y),MM(F,W,G,J,Y),qM(F,G)}};return K.hooks=RM(W,G,Q,Y),K}),failures:V.failures,pluginPaths:B.map((G)=>G.pluginPath),shutdown:async()=>{await W.shutdown()},warnings:V.warnings}}function OM($,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(!$5(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 TM($,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(!$5(Y))throw Y;return await J(),await W.call("executeCommand",{pluginId:Z.pluginId,contributionId:j.id,input:X},{timeoutMs:Q})}}})}function zM($,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(!$5(X))throw X;return await J(),await W.call("resolveRuleContent",{pluginId:Z.pluginId,contributionId:j.id},{timeoutMs:Q})}}:j.content??""})}function qM($,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 MM($,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 EG(Y)?Y:X}catch(Y){if(!$5(Y))throw Y;await J();let V=await W.call("buildMessages",{pluginId:Z.pluginId,contributionId:j.id,messages:X},{timeoutMs:Q});return EG(V)?V:X}}})}function EG($){return Array.isArray($)&&$.every((W)=>typeof W==="object"&&W!==null&&("role"in W)&&("content"in W))}function NM($,W,Z,Q,J){return async(j)=>{try{return await $.call("invokeHook",{pluginId:W,hookName:Z,payload:j},{timeoutMs:Q})}catch(X){if(!$5(X))throw X;return await J(),await $.call("invokeHook",{pluginId:W,hookName:Z,payload:j},{timeoutMs:Q})}}}function RM($,W,Z,Q){let J={};for(let j of W.hooks??[])J[j]=NM($,W.pluginId,j,Z,Q);return Object.keys(J).length>0?J:void 0}var n3="package.json",yM="package";function W5($){return SM($)}function Z5($){return PM($)}function hM($){try{return o9($)&&wM($).isDirectory()}catch{return!1}}function a3($){let W=[],Z=new Set;for(let Q of $){let J=a9(Q);if(Z.has(J))continue;Z.add(J),W.push(J)}return W}function PG($){let W=a3($);return S9(W)}function SG($){return W5($).flatMap((W)=>Z5(W)).filter((W)=>o9(W))}function kM($,W){let Z=[];for(let Q of $)try{Z.push(...CG([Q],W))}catch{}return Z}function i3($){return typeof $==="object"&&$!==null}function IM($){try{let W=JSON.parse(EM(s9($,n3),"utf8"));if(!i3(W)||!i3(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(!i3(J)||!Array.isArray(J.paths))continue;for(let j of J.paths)if(typeof j==="string")Q.push(j)}return Q}catch{return[]}}function bG($,W){let Z=a9(W);return IM($).some((Q)=>a9($,Q)===Z)}function xM($,W){return CM($)===yM&&o9(s9(n9($),n3))&&bG(n9($),W)}function gM($){let W=a9($),Z=[],Q=n9(W);while(!0){if(xM(Q,W)){Z.push(Q);break}if(o9(s9(Q,n3))){if(bG(Q,W))Z.push(Q);break}let J=n9(Q);if(J===Q)break;Q=J}return a3(Z)}function s1($={}){let W=$.cwd??process.cwd(),Z=SG($.workspacePath),Q=CG($.pluginPaths??[],W);return PG([...Q,...Z])}function mM($={}){let W=$.cwd??process.cwd(),Z=SG($.workspacePath),Q=kM($.pluginPaths??[],W);return PG([...Q,...Z])}function t1($){let W=[];for(let Z of $)for(let Q of gM(Z)){let J=s9(Q,bM);if(hM(J))W.push(J)}return a3(W)}function yG($={}){return t1(mM($))}async function n8($={}){let W=s1($);if(W.length===0)return{extensions:[],failures:[],warnings:[],pluginPaths:[]};if($.mode==="in_process"){let Q=await C2(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 i8({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 vM}from"node:child_process";import{promisify as cM}from"node:util";var uM=cM(vM);function o3($,W){$?.log(W,{severity:"warn"})}function dM($){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 P2($,W){let Z=await uM("git",["-C",$,...W],{windowsHide:!0});return{stdout:Z.stdout.trim(),stderr:Z.stderr.trim()}}async function s3($,W){if(!$)return;let Z=`refs/cline/checkpoints/${W}/`;try{let{stdout:Q}=await P2($,["for-each-ref","--format=%(refname)",Z]),J=Q.trim().split(`
|
|
206
|
+
`).filter(Boolean);await Promise.allSettled(J.map((j)=>P2($,["update-ref","-d",j])))}catch{}}async function hG($,W,Z){if(!$||Z.length===0)return;await Promise.allSettled(Z.map((Q)=>P2($,["update-ref",`refs/cline/checkpoints/${W}/${Q.runCount}`,Q.ref])))}function lM($,W){let Z=$.findIndex((Q)=>Q.runCount===W.runCount);if(Z<0)return[...$,W];return $.map((Q,J)=>J===Z?W:Q)}function kG($){let W=$.initialRunCount??0,Z,Q=async()=>{if(Z!==void 0)return Z;try{Z=(await P2($.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 P2($.cwd,["rev-parse","HEAD"])).stdout.trim();if(!G)return;return{ref:G,createdAt:Date.now(),runCount:W,kind:"commit"}}catch(H){o3($.logger,`${B}: ${H instanceof Error?H.message:String(H)}`);return}},X=`cline checkpoint session=${$.sessionId} run=${W}`,Y="";try{Y=(await P2($.cwd,["stash","create",X])).stdout.trim()}catch(B){return o3($.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 P2($.cwd,["update-ref",V,Y])}catch(B){o3($.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=dM(Y);if(V?.latest.ref===X.ref)return;let B=lM(V?.history??[],X);await $.writeSessionMetadata({...Y??{},checkpoint:{latest:X,history:B}});return}}}import{spawn as eM}from"node:child_process";import{appendFileSync as $N,readFileSync as WN}from"node:fs";import{join as ZN}from"node:path";import{augmentNodeCommandForDebug as gG,withResolvedClineBuildEnv as $J}from"@cline/shared";import{ensureHookLogDir as IG}from"@cline/shared/storage";function a8($,W){if(!W)return;return{name:$,manifest:{capabilities:["hooks"]},hooks:W}}import{existsSync as pM,readdirSync as rM}from"node:fs";import{basename as iM,extname as nM,join as aM}from"node:path";import{HOOKS_CONFIG_DIRECTORY_NAME as t9,resolveHooksConfigSearchPaths as oM}from"@cline/shared/storage";function Q5($){return oM($)}var o8;((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"})(o8||={});var J5={["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"},sM=new Map(Object.values(o8).map(($)=>[$.toLowerCase(),$])),tM=new Set(["",".sh",".bash",".zsh",".js",".mjs",".cjs",".ts",".mts",".cts",".py",".ps1"]);function j5($){let W=nM($).toLowerCase();if(!tM.has(W))return;let Z=iM($,W).trim().toLowerCase();return sM.get(Z)}function S$($){let W=[],Z=new Set,Q=Q5($).filter((J)=>pM(J));for(let J of Q)try{for(let j of rM(J,{withFileTypes:!0})){if(!j.isFile())continue;let X=j5(j.name);if(!X)continue;let Y=aM(J,j.name);if(Z.has(Y))continue;Z.add(Y),W.push({fileName:X,hookEventName:J5[X],path:Y})}}catch{}return W.sort((J,j)=>J.path.localeCompare(j.path))}function $Z($){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 e9($,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 QN($,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 JN($){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 t3($){let W=String($??"").toLowerCase();return W.includes("cancel")||W.includes("abort")||W.includes("interrupt")}function E0($,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 jN($){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 XN($,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 mG($,W){if(W.command.length===0)throw Error("runHookCommand requires non-empty command");try{return await xG($,W)}catch(Z){let Q=BN(W.command,process.platform,Z);if(!Q)throw Z;return await xG($,{...W,command:Q})}}async function xG($,W){let Z=gG(W.command,{env:W.env,debugRole:"hook"}),Q=eM(Z[0],Z.slice(1),{cwd:W.cwd,env:$J(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 XN(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:f}=jN(Y);K({exitCode:F,stdout:Y,stderr:V,parsedJson:A,parseError:f,timedOut:B})})});return await Promise.race([G,j])}function YN($){try{let Z=WN($,"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 VN($){return!!($&&typeof $==="object"&&("code"in $)&&$.code==="ENOENT")}function BN($,W=process.platform,Z){if(W!=="win32"||!VN(Z))return;if($[0]!=="py"||$[1]!=="-3")return;return["python",...$.slice(2)]}function vG($){if($.length===0)return;let[W,...Z]=$,Q=W.replace(/\\/g,"/").toLowerCase(),J=Q.split("/").at(-1)??Q;if(J==="env")return vG(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 HN($){let W=YN($);if(W&&W.length>0)return[...vG(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 gG(["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 GN($){let W={};for(let Z of S$($)){if(!Z.hookEventName)continue;let Q=Z.hookEventName,J=W[Q]??[];J.push(HN(Z.path)),W[Q]=J}return W}async function KN($){let W;for(let Z of $.commands){let Q=Z.join(" ");try{let J=await mG($.payload,{command:Z,cwd:$.cwd,env:$J(process.env),detached:!1,timeoutMs:$.timeoutMs});if(J?.timedOut){e9($.logger,`hook command timed out: ${Q}`);continue}if(J?.parseError){e9($.logger,`hook command returned invalid JSON control output: ${Q} (${J.parseError})`);continue}W=QN(W,JN(J?.parsedJson))}catch(J){e9($.logger,`hook command failed: ${Q}`,J)}}return W}function S2($){for(let W of $.commands){let Z=W.join(" ");mG($.payload,{command:W,cwd:$.cwd,env:$J(process.env),detached:!0}).catch((Q)=>{e9($.logger,`hook command failed: ${Z}`,Q)})}}function b$($){return{agentId:$.agentId,conversationId:$.conversationId??$.runId??$.agentId,parentAgentId:$.parentAgentId??null}}function e3($,W){return{...b$($.snapshot),userMessage:W}}function cG($){return{...b$($.snapshot),iteration:$.snapshot.iteration,call:{id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:$.input}}}function uG($){return{...b$($.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 dG($){return $.filter((W)=>W.type==="text"&&typeof W.text==="string").map((W)=>W.text).join("")}function FN($){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 s8($){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)??ZN(IG(),"hooks.jsonl");IG(X),$N(X,J,"utf8")};return{beforeRun:async(Q)=>{let J=e3(Q,"");Z({...E0(J,W),hookName:"agent_start",taskStart:{taskMetadata:{}}});return},beforeTool:async(Q)=>{let J=cG(Q);Z({...E0(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:$Z(J.call.input)}});return},afterTool:async(Q)=>{let J=uG(Q);Z({...E0(J,W),hookName:"tool_result",iteration:J.iteration,tool_result:J.record,postToolUse:{toolName:J.record.name,parameters:$Z(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=b$(Q);if(J.status==="completed"){Z({...E0(j,W),hookName:"agent_end",iteration:J.iterations,turn:{outputText:J.outputText,status:J.status},taskComplete:{taskMetadata:{}}});return}if(J.status==="aborted"||t3(J.error?.message)){Z({...E0(j,W),hookName:"agent_abort",reason:J.error?.message,taskCancel:{taskMetadata:{}}});return}if(J.error)Z({...E0(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=e3({snapshot:Q.snapshot},dG(Q.message.content));Z({...E0(J,W),hookName:"prompt_submit",userPromptSubmit:{prompt:J.userMessage,attachments:[]}})}}}function X5($){let W=GN($.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;S2({commands:F,cwd:$.cwd,logger:$.logger,payload:K==="agent_resume"?{...E0(G,$),hookName:K,taskResume:{taskMetadata:{},previousState:{}}}:{...E0(G,$),hookName:K,taskStart:{taskMetadata:{}}}})},J=async(G)=>{let K=W.prompt_submit??[];if(K.length>0)S2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...E0(G,$),hookName:"prompt_submit",userPromptSubmit:{prompt:G.userMessage,attachments:[]}}})},j=async(G)=>{let K=W.tool_call??[];if(K.length===0)return;return KN({commands:K,cwd:$.cwd,logger:$.logger,timeoutMs:$.toolCallTimeoutMs??120000,payload:{...E0(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:$Z(G.call.input)}}})},X=async(G)=>{let K=W.tool_result??[];if(K.length===0)return;S2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...E0(G,$),hookName:"tool_result",iteration:G.iteration,tool_result:G.record,postToolUse:{toolName:G.record.name,parameters:$Z(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;S2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...E0(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;S2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...E0(G,$),hookName:"agent_error",iteration:G.iteration,error:{name:G.error.name,message:G.error.message,stack:G.error.stack}}})},B=async(G)=>{if(t3(G.reason)){let F=W.agent_abort??[];if(F.length>0)S2({commands:F,cwd:$.cwd,logger:$.logger,payload:{...E0(G,$),hookName:"agent_abort",reason:G.reason,taskCancel:{taskMetadata:{}}}})}let K=W.session_shutdown??[];if(K.length===0)return;S2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...E0(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(b$(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(e3({snapshot:G.snapshot},dG(G.message.content)))}}if((W.tool_call?.length??0)>0)H.beforeTool=async(G)=>{let K=await j(cG(G));return FN(K)};if((W.tool_result?.length??0)>0)H.afterTool=async(G)=>{await X(uG(G));return};if((W.agent_end?.length??0)>0)H.afterRun=async({snapshot:G,result:K})=>{if(K.status!=="completed")return;await Y({...b$(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"||t3(A.error?.message)){await B({...b$(F),reason:A.error?.message});return}if(A.error)await V({...b$(F),iteration:A.iterations,error:A.error})}}return H}function t8($){return a8("core.hook_config_files",X5($))}function b2($,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 y2($){let W=$.filter((Z)=>Z!==void 0);if(W.length===0)return;return{beforeRun:b2(W,"beforeRun"),afterRun:b2(W,"afterRun"),beforeModel:b2(W,"beforeModel"),afterModel:b2(W,"afterModel"),beforeTool:b2(W,"beforeTool"),afterTool:b2(W,"afterTool"),onEvent:b2(W,"onEvent")}}var lG={};w(lG,{normalizeRuntimeCapabilities:()=>w0});function w0(...$){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 eG={};w(eG,{toProviderConfig:()=>s0,emptyStoredProviderSettings:()=>k$,StoredProviderSettingsSchema:()=>Z6,StoredProviderSettingsEntrySchema:()=>qZ,ProviderSettingsSchemaTyped:()=>W6});import{z as h$}from"zod";var tG={};w(tG,{toProviderConfig:()=>s0,safeParseSettings:()=>zZ,safeCreateProviderConfig:()=>HJ,parseSettings:()=>TZ,normalizeProviderId:()=>$6,isBuiltInProviderId:()=>VJ,createProviderConfig:()=>BJ,SapSettingsSchema:()=>_Z,ReasoningSettingsSchema:()=>AZ,ProviderSettingsSchema:()=>y$,ProviderProtocolSchema:()=>GZ,ProviderIdSchema:()=>G5,ProviderClientSchema:()=>KZ,OcaSettingsSchema:()=>LZ,ModelCatalogSettingsSchema:()=>OZ,GcpSettingsSchema:()=>fZ,BUILT_IN_PROVIDER_IDS:()=>YJ,BUILT_IN_PROVIDER:()=>H5,AzureSettingsSchema:()=>DZ,AwsSettingsSchema:()=>UZ,AuthSettingsSchema:()=>FZ});import*as o0 from"@cline/llms";import{z as E}from"zod";var sG={};w(sG,{resolveProviderConfig:()=>B5,getProviderConfig:()=>HZ,getLiveModelsCatalog:()=>e8,clearPublicModelsCatalogCache:()=>IN,clearPrivateModelsCatalogCache:()=>XJ,clearLiveModelsCatalogCache:()=>jJ,OPENAI_COMPATIBLE_PROVIDERS:()=>V5,DEFAULT_MODELS_CATALOG_URL:()=>XZ});import*as e from"@cline/llms";function WJ($){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 AN($,W){let Z=WJ($);if(Z.length>0)return Z;if(!$||typeof $!=="object")return[];let Q=$,J=WJ(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=WJ(j.models??j);if(Y.length>0)return Y}return[]}async function WZ($,W){let Z=await fetch($,{method:"GET"});if(!Z.ok)throw Error(`failed to fetch models from ${$}: HTTP ${Z.status}`);return AN(await Z.json(),W)}function pG($){return $.replace(/\/+$/,"")}function ZZ($,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=pG(X.pathname),B=pG(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 UN($){return Object.fromEntries(Object.entries($).map(([W,Z])=>[W,{...Z}]))}function fN($){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 DN=Object.values(e.MODEL_COLLECTIONS_BY_PROVIDER_ID).map(($)=>({id:$.provider.id,baseUrl:$.provider.baseUrl??"",modelsSourceUrl:$.provider.modelsSourceUrl,modelId:$.provider.defaultModelId,knownModels:UN($.models),capabilities:$.provider.capabilities?[...$.provider.capabilities]:void 0,env:$.provider.env?[...$.provider.env]:void 0,client:$.provider.client,protocol:$.provider.protocol})),iG=Object.fromEntries(DN.map(($)=>[$.id,$]));function _N($){return iG[$]}function LN(){return Object.fromEntries(Object.entries(iG).filter(([,$])=>fN($)))}function nG($=[]){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 XZ="https://models.dev/api.json",ON=600000,aG=300000,TN=5000,jZ=new Map,Y5=new Map,ZJ=new Map,QZ=new Map;async function zN(){return e.getGeneratedProviderModels()}async function qN($,W={},Z={},Q={},J={},j={}){if($==="litellm")return e.sortModelsByReleaseDate(Q);let X=await zN(),Y=e.resolveProviderModelCatalogKeys($),V=Object.assign({},...Y.map((K)=>X[K]??{})),B=Boolean(e.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl),H=Object.keys(J).length>0;if(B&&H)return e.sortModelsByReleaseDate({...J,...j});if($==="openai-codex")return e.sortModelsByReleaseDate({...W,...e.filterOpenAICodexModels(Z),...J,...j});if($==="cline-pass"&&Object.keys(Z).length>0)return{...Z,...j};let G=e.sortModelsByReleaseDate({...V,...W,...Z,...Q,...J});if($==="cline")return e.sortModelsByReleaseDate({...e.preferCanonicalModelIds(G,e.VERCEL_OPENROUTER_MODEL_ID_ALIAS_RULES),...j});return e.sortModelsByReleaseDate({...G,...j})}function MN($,W){let Z=e.resolveProviderModelCatalogKeys($);return Object.assign({},...Z.map((Q)=>W[Q]??{}))}function YZ($){let W=$?.trim();return W&&W.length>0?W:""}function JJ($){let W=$.apiKey?.trim()||$.accessToken?.trim();return W&&W.length>0?W:void 0}function NN($){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 RN($,W){return`${$}:${YZ(W.baseUrl)}:${NN(JJ(W)??"")}`}async function VZ($,W,Z=TN){let Q=new AbortController,J=setTimeout(()=>Q.abort(),Z);try{return await fetch($,{...W,signal:Q.signal})}finally{clearTimeout(J)}}function h2($,W,Z){if(Z&&!$.includes(W))$.push(W)}function BZ($,W){let Z=["streaming","tools"];return h2(Z,"images",Boolean(W.supportsImages)),h2(Z,"prompt-cache",Boolean(W.supportsPromptCache)),h2(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 EN($,W){let Z=await VZ("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]=BZ(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 rG($){if(typeof $==="number")return Number.isFinite($)?$:void 0;if(typeof $==="string"){let W=Number($);return Number.isFinite(W)?W:void 0}return}async function wN($,W){let Z=await VZ("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]=BZ(Y,{name:Y,maxInputTokens:128000,supportsImages:!0,supportsPromptCache:!0})}return j}async function CN($,W){let Q=`${(YZ($.baseUrl)||"https://inference.poolside.ai/v1").replace(/\/+$/,"")}/models`,J=await VZ(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"];h2(F,"tools",H.includes("tools")),h2(F,"reasoning",H.includes("reasoning")),h2(F,"temperature",G.includes("temperature")),h2(F,"images",K.includes("image"));let A={input:rG(V.pricing?.prompt),output:rG(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 PN($){let W=YZ($).replace(/\/+$/,"");if(!W)return"http://localhost:4000";return W.endsWith("/v1")?W.slice(0,-3):W}function SN($){return[`${$}/v1/model/info`,`${$}/model/info`]}async function bN($){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 yN($,W){let Z=PN($.baseUrl),Q=[],J=[["x-litellm-api-key",{"x-litellm-api-key":W}],["Authorization",{Authorization:`Bearer ${W}`}]];for(let j of SN(Z))for(let[X,Y]of J)try{let V=await VZ(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(),f=K.litellm_params?.model?.trim()||F;if(!f)continue;let U=K.model_info,_=BZ(f,{name:F??f,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[f]=_,F)G[F]={..._,id:F,name:F}}return G}Q.push(`${new URL(j).pathname} (${X}): ${await bN(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 oG={baseten:EN,hicap:wN,litellm:yN,poolside:CN},QJ=new Map,JZ=new Map;function hN($,W){return`${$}:${YZ(W.baseUrl)}`}async function kN($,W,Z){let Q=e.MODEL_COLLECTIONS_BY_PROVIDER_ID[$],J=ZZ(Z.baseUrl,Q?.provider.baseUrl,Q?.provider.modelsSourceUrl);if(!J)return{};let j=W?.cacheTtlMs??aG,X=hN($,Z),Y=Date.now(),V=QJ.get(X);if(V&&V.expiresAt>Y)return V.data;let B=JZ.get(X);if(B)return B;let H=WZ(J,$).then((G)=>{let K=Object.fromEntries(G.map((F)=>[F,BZ(F,{name:F})]));return QJ.set(X,{data:K,expiresAt:Y+j}),K}).finally(()=>{JZ.delete(X)});return JZ.set(X,H),H}function IN(){QJ.clear(),JZ.clear()}async function xN($,W){let Z=JJ(W);if(!Z)return{};let Q=oG[$];if(!Q)return{};return Q(W,Z)}function gN($,W,Z){if(!Z)return!1;if(!oG[$])return!1;if(W?.loadPrivateOnAuth===!1)return!1;return Boolean(JJ(Z))}async function mN($,W,Z){let Q=W?.cacheTtlMs??aG,J=RN($,Z),j=Date.now(),X=ZJ.get(J);if(X&&X.expiresAt>j)return X.data;let Y=QZ.get(J);if(Y)return Y;let V=xN($,Z).then((B)=>{return ZJ.set(J,{data:B,expiresAt:j+Q}),B}).finally(()=>{QZ.delete(J)});return QZ.set(J,V),V}async function vN($){return e.fetchLiveProviderModels($,globalThis.fetch)}async function e8($={}){let W=$.url??XZ,Z=$.cacheTtlMs??ON,Q=Date.now(),J=jZ.get(W);if(J&&J.expiresAt>Q)return J.data;let j=Y5.get(W);if(j)return j;let X=vN(W).then((Y)=>{return jZ.set(W,{data:Y,expiresAt:Q+Z}),Y}).finally(()=>{Y5.delete(W)});return Y5.set(W,X),X}function jJ($){if($){jZ.delete($),Y5.delete($);return}jZ.clear(),Y5.clear()}function XJ(){ZJ.clear(),QZ.clear()}function cN($){return Object.fromEntries(Object.entries($).map(([W,Z])=>[W,{baseUrl:Z.baseUrl,modelId:Z.modelId,capabilities:nG(Z.capabilities)}]))}var V5=cN(LN());function HZ($){let W=_N($);if(!W)return;return{baseUrl:W.baseUrl||void 0,modelId:W.modelId,knownModels:W.knownModels,capabilities:nG(W.capabilities)}}async function B5($,W,Z){let Q=HZ($);if(!Q)return;try{let J=W?.loadLatestOnInit?await e8(W):void 0,j=J?MN($,J):{},X=Z&&gN($,W,Z)?await mN($,W,Z):{},V=Boolean(e.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl)?Z??{providerId:$,modelId:Q.modelId,baseUrl:Q.baseUrl}:Z,B=V?await kN($,W,V).catch(()=>({})):{},H=await qN($,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 H5=o0.BUILT_IN_PROVIDER,YJ=o0.BUILT_IN_PROVIDER_IDS,VJ=o0.isBuiltInProviderId,$6=o0.normalizeProviderId,G5=E.string().min(1).regex(/^[a-z0-9][a-z0-9-]*$/i),GZ=E.enum(["anthropic","gemini","openai-chat","openai-responses","openai-r1","ai-sdk"]),KZ=E.enum(["anthropic","ai-sdk","ai-sdk-community","openai","openai-compatible","openai-r1","gemini","bedrock","custom","fetch","vertex"]),FZ=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()}),uN=E.enum(["none","low","medium","high","xhigh"]),AZ=E.object({enabled:E.boolean().optional(),effort:uN.optional(),budgetTokens:E.number().int().positive().optional()}),UZ=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()}),fZ=E.object({projectId:E.string().optional(),region:E.string().optional()}),DZ=E.object({apiVersion:E.string().optional(),useIdentity:E.boolean().optional()}),_Z=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()}),LZ=E.object({mode:E.enum(["internal","external"]).optional(),usePromptCache:E.boolean().optional()}),OZ=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()}),y$=E.object({provider:G5,apiKey:E.string().optional(),auth:FZ.optional(),model:E.string().optional(),protocol:GZ.optional(),client:KZ.optional(),routingProviderId:G5.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:AZ.optional(),aws:UZ.optional(),gcp:fZ.optional(),azure:DZ.optional(),sap:_Z.optional(),oca:LZ.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:OZ.optional()});function TZ($){return y$.parse($)}function zZ($){return y$.safeParse($)}function dN($){return $.protocol==="openai-responses"||$.client==="openai"}function s0($,W={}){let Z=$.provider,Q=$6(Z),J=W.includeKnownModels!==!1,j=$.reasoning?.effort||"none",X=j==="none"?void 0:j,Y=V5[Q],V=Object.assign({},...o0.resolveProviderModelCatalogKeys(Q).map((f)=>o0.getGeneratedModelsForProvider(f))),B=Object.keys(V)[0],H=T8(Q,$),G=$.baseUrl??(Q==="oca"?$.oca?.mode==="internal"?X9:Y9:Y?.baseUrl),K=$.routingProviderId??(dN($)&&Q!==H5.OPENAI_NATIVE?H5.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(([f,U])=>U!==void 0))}function BJ($){let W=TZ($);return s0(W)}function HJ($){let W=zZ($);if(W.success)return{success:!0,config:s0(W.data)};return{success:!1,error:W.error}}var W6=y$;var qZ=h$.object({settings:y$,updatedAt:h$.string().datetime(),tokenSource:h$.enum(["manual","oauth","migration"]).default("manual")}),Z6=h$.object({version:h$.literal(1),lastUsedProvider:h$.string().min(1).optional(),providers:h$.record(h$.string(),qZ)});function k$(){return{version:1,providers:{}}}U1();var YK={};w(YK,{InMemoryWorkspaceManager:()=>J6});import{upsertWorkspaceInfo as rN,WorkspaceManifestSchema as AJ}from"@cline/shared";var XK={};w(XK,{withSessionGitMetadata:()=>NZ,readSessionGitMetadata:()=>JK,readGitWorkspaceState:()=>KJ,normalizeWorkspacePath:()=>R1,hasCurrentSessionGitMetadata:()=>GJ,generateWorkspaceInfoWithDiagnostics:()=>K5,generateWorkspaceInfo:()=>Q6,buildWorkspaceMetadataWithInfo:()=>FJ,buildWorkspaceMetadata:()=>F5});import{basename as lN,resolve as pN}from"node:path";import{performance as $K}from"node:perf_hooks";import{processWorkspaceInfo as ZK}from"@cline/shared";import QK from"simple-git";function JK($){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 NZ($,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 GJ($,W){let Z=JK($);return Z.url===W.url&&Z.branch===W.branch}function jK($){let W=$.find(({name:Z})=>Z==="origin")??$[0];return(W?.refs.fetch||W?.refs.push)?.trim()||void 0}function R1($){return pN($)}async function Q6($){return(await K5($)).info}function WK($){let W=$ instanceof Error?$.message:String($);return/unknown revision|ambiguous argument|does not have any commits yet/i.test(W)}function MZ($){if($ instanceof Error)return{errorType:$.name?.trim()||$.constructor.name||"Error",message:$.message};return{errorType:"Error",message:String($)}}async function K5($){let W=R1($),Z={rootPath:W,hint:lN(W)},Q={},J;try{let j=QK({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=jK(Y);if(B)Q.url=B}}catch(Y){J??=MZ(Y)}try{let Y=(await j.revparse(["HEAD"])).trim();if(Y.length>0)Z.latestGitCommitHash=Y}catch(Y){if(!WK(Y))J??=MZ(Y)}try{let Y=(await j.branch()).current.trim();if(Y.length>0)Z.latestGitBranchName=Y,Q.branch=Y}catch(Y){if(!WK(Y))J??=MZ(Y)}return{info:Z,vcsType:"git",gitState:Q,error:J}}catch(j){return{info:Z,vcsType:"none",gitState:Q,error:MZ(j)}}}async function KJ($){try{let W=QK({baseDir:R1($)});if(!await W.checkIsRepo())return{};let[Z,Q]=await Promise.all([W.getRemotes(!0),W.branch()]),J=jK(Z),j=Q.current.trim();return{...J?{url:J}:{},...j?{branch:j}:{}}}catch{return}}async function F5($){let W=await Q6($);return ZK(W)}async function FJ($){let W=$K.now(),Z=await K5($),Q=$K.now()-W,J=Z.info;return{workspaceInfo:J,workspaceMetadata:ZK(J),durationMs:Q,vcsType:Z.vcsType,gitState:Z.gitState,initError:Z.error}}class J6{manifest;listeners=new Set;constructor($){this.manifest=AJ.parse($??{workspaces:{}})}async addWorkspacePath($){let W=await Q6($);return this.manifest=rN(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=AJ.parse({...this.manifest,currentWorkspacePath:W}),this.emit({type:"workspace_switched",workspace:Z}),Z;let Q=await this.addWorkspacePath(W);return this.manifest=AJ.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($)}}O0();import{createHash as iN}from"node:crypto";var VK=new Set,BK=new Set;function nN($){return iN("sha256").update($).digest("hex")}function aN($){if($.vcsTypes&&$.vcsTypes.length>0)return $.vcsTypes;return[$.vcsType==="git"?"git":"none"]}function HK($){if(!$.telemetry)return;let W=nN($.rootPath),Z=$.rootCount??1;if(!VK.has(W))VK.add(W),mW($.telemetry,{root_count:Z,vcs_types:aN($),init_duration_ms:$.durationMs,feature_flag_enabled:$.featureFlagEnabled??!0,is_remote_workspace:$.isRemoteWorkspace});if($.initError&&!BK.has(W)){BK.add(W);let Q=Error($.initError.message);Q.name=$.initError.errorType||"Error",vW($.telemetry,Q,{fallback_to_single_root:!0,workspace_count:Z})}}function tN($){return`${$.pluginName??$.pluginPath}: ${$.message}`}function eN($,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(tN).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 $R($,W){let Z=typeof $.thinking==="boolean",Q=typeof $.reasoningEffort==="string";if(!Z&&!Q)return W;return{...W??{},...Z?{enabled:$.thinking}:{},...Q?{effort:$.reasoningEffort}:{}}}function GK($,W){return sN($,W)}function WR($){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 ZR($,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=oN({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:u8,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:$R($,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 KK($){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}=$,f=o1(W.config),{modelCatalogDefaults:U,userInstructionService:_,configExtensions:D,onTeamRestored:M,...T}=K??{},O=Object.keys(T).length>0?T:void 0,{workspaceInfo:L,workspaceMetadata:C,gitState:R,durationMs:p,vcsType:x,initError:P}=await FJ(f),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};HK({telemetry:d.telemetry,rootPath:L.rootPath,workspaceInfo:L,rootCount:1,vcsType:x,durationMs:p,initError:P,featureFlagEnabled:!0});let I1=t8({cwd:W.config.cwd,workspacePath:f,rootSessionId:Z,logger:O?.logger,workspaceInfo:L}),$2=ZG(O?.hooks)?void 0:s8({rootSessionId:Z,workspacePath:f,workspaceInfo:L}),F$=y2([O?.hooks,$2]),k0;if(GK(D,"plugins"))try{k0=await n8({pluginPaths:O?.pluginPaths,workspacePath:f,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}),eN(k0.failures,k0.warnings,O?.logger)}catch(s6){let F8=s6 instanceof Error?s6.message:String(s6);O?.logger?.log?.(`plugin loading failed; continuing without plugins (${F8})`)}let O1=C3(I1?[I1]:void 0,C3(O?.extensions,b9(k0?.extensions))),K8=GK(D,"plugins")?t1(k0?.pluginPaths??[]):void 0,V0={...W.config,...O??{},sessionId:Z,hooks:F$,extensions:O1,extensionContext:d,telemetry:d.telemetry},l0=ZR(V0,Z,W.source,Q,U,Y),V1=y2([V0.hooks,V0.checkpoint?.enabled===!0?kG({cwd:V0.cwd,sessionId:Z,logger:V0.logger,createCheckpoint:V0.checkpoint?.createCheckpoint,initialRunCount:WR(W.initialMessages),readSessionMetadata:F,writeSessionMetadata:A}):void 0]),y={...V0,providerConfig:l0,workspaceMetadata:C,hooks:V1},B1=W.toolPolicies??V0.toolPolicies??X,k=w0(j,W.capabilities),$0=k?.requestToolApproval,L0=k?.toolExecutors,q0=H?.(y),xW=new J6({currentWorkspacePath:L.rootPath,workspaces:{[L.rootPath]:L}});return{effectiveInput:W,config:y,providerConfig:l0,workspaceMetadata:C,workspaceInfo:L,gitState:R,extensions:O1,hooks:V1,toolPolicies:B1,requestToolApproval:$0,pluginSandboxShutdown:k0?.shutdown,runtimeBuilderInput:{config:y,hooks:V1,extensions:O1,onTeamEvent:B,createSpawnTool:G,onTeamRestored:M,onSubAgentEvent:q0?.onSubAgentEvent,onSubAgentStart:q0?.onSubAgentStart,onSubAgentEnd:q0?.onSubAgentEnd,userInstructionService:_,pluginSkillDirectories:K8,configExtensions:D,toolExecutors:L0,toolPolicies:B1,workspaceManager:xW,logger:y.logger,telemetry:y.telemetry,requestToolApproval:$0}}}import{existsSync as RZ,mkdirSync as QR,readdirSync as JR,rmdirSync as jR,rmSync as XR,unlinkSync as YR}from"node:fs";import{dirname as FK,join as A5}from"node:path";function X0(){return new Date().toISOString()}function U5($){if(!$||!RZ($))return;try{YR($)}catch{}}function VR($){let W=m8($);if(W)return{rootSessionId:W.rootSessionId,fileStem:`${W.agentId}__${W.teamTaskId}`};let Z=l4($);if(Z)return{rootSessionId:Z.rootSessionId,fileStem:Z.agentId};return{rootSessionId:$,fileStem:$}}class UJ{ensureSessionsDir;constructor($){this.ensureSessionsDir=$}sessionArtifactsDir($){return A5(this.ensureSessionsDir(),$)}ensureSessionArtifactsDir($){let W=this.sessionArtifactsDir($);if(!RZ(W))QR(W,{recursive:!0});return W}sessionMessagesPath($){return A5(this.sessionArtifactsDir($),`${$}.messages.json`)}sessionCompactionPath($){return A5(this.sessionArtifactsDir($),`${$}.compaction.json`)}sessionManifestPath($,W=!1){let Z=W?this.ensureSessionArtifactsDir($):this.sessionArtifactsDir($);return A5(Z,`${$}.json`)}removeSessionDirIfEmpty($){let W=this.sessionArtifactsDir($),Z=this.ensureSessionsDir();while(W.startsWith(Z)&&W!==Z){if(!RZ(W)){W=FK(W);continue}try{if(JR(W).length>0)break;jR(W)}catch{break}W=FK(W)}}removeSessionDir($){this.removeDir(this.sessionArtifactsDir($))}removeDir($){if(!RZ($))return;try{XR($,{recursive:!0,force:!0})}catch{}}subagentArtifactPaths($,W,Z){let{rootSessionId:Q,fileStem:J}=VR($),j=this.sessionArtifactsDir(Q);return{messagesPath:A5(j,`${J}.messages.json`)}}}import{resolveDocumentsExtensionPath as BR}from"@cline/shared/storage";O0();function AK($,W,Z,Q,J){if(Z)uW($.telemetry,{ulid:W,apiProvider:$.providerId,...J});else cW($.telemetry,{ulid:W,apiProvider:$.providerId,...J});HR($.telemetry,{workspacePath:Q})}function HR($,W){let Z=BR("Hooks"),Q=S$(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())sW($,j,X.global,X.workspace)}function UK($,W){for(let Z of W.mentions)aW($,Z,W.matchedFiles.includes(Z)?1:0,"file",!W.matchedFiles.includes(Z));for(let Z of W.matchedFiles)iW($,"file",Z.length);for(let Z of W.ignoredMentions)nW($,"file","not_found",Z)}var f_={};w(f_,{ProviderSettingsManager:()=>X1});import{chmodSync as __,existsSync as NY,mkdirSync as am,readFileSync as om,renameSync as sm,rmSync as tm,writeFileSync as em}from"node:fs";import{basename as L_,dirname as RY}from"node:path";import{resolveProviderSettingsPath as $v}from"@cline/shared/storage";var q={};w(q,{writeHubDiscovery:()=>WQ,writeGlobalSettings:()=>M1,withHubStartupLock:()=>ZQ,verifyHubConnection:()=>w1,updateMcpSettingsFileSync:()=>f1,updateMcpSettingsFile:()=>G6,updateMcpServerOAuthStateAsync:()=>y5,updateMcpServerOAuthState:()=>m2,updateLocalProvider:()=>G7,uninstallPlugin:()=>RW,uninstallMarketplaceSkill:()=>rQ,uninstallMarketplacePlugin:()=>iQ,uninstallMarketplaceMcpServerFromSettings:()=>lQ,uninstallMarketplaceEntry:()=>lX,truncateNotificationBody:()=>fW,truncateCommandOutput:()=>H2,toggleDisabledTool:()=>P9,toTeamProgressLifecycleEvent:()=>R6,toProviderConfig:()=>s0,toHubStatusUrl:()=>Xj,toHubHealthUrl:()=>QQ,toHookConfigFileName:()=>j5,syncPluginMcpServersToSettings:()=>MW,summarizeUsageFromMessages:()=>c8,stopLocalHubServerGracefully:()=>_j,startLocalOAuthServer:()=>G1,startHubWebSocketServer:()=>Y8,startHubServer:()=>lf,startClineDeviceAuth:()=>h7,splitCoreSessionConfig:()=>v5,spawnDetachedHubServerWithRetry:()=>_6,spawnDetachedHubServer:()=>Kj,setTelemetryOptOutGlobally:()=>rB,setSdkLogger:()=>E7,setMcpServerDisabled:()=>x2,setDisabledTools:()=>G3,setDisabledPlugin:()=>$H,setCompactionStrategyGlobally:()=>oB,setAutoUpdateEnabledGlobally:()=>nB,sendHubCommand:()=>xU,sdkDebug:()=>Z0,saveProviderOAuthCredentials:()=>J2,saveLocalProviderSettings:()=>jY,saveLocalProviderOAuthCredentials:()=>BY,sanitizeSessionToken:()=>R2,safeParseSettings:()=>zZ,safeCreateProviderConfig:()=>HJ,runSubprocessEvent:()=>y6,runHook:()=>k6,reviveTeamStateDates:()=>m9,restartLocalHubIfIdleAfterStartupTimeout:()=>VQ,resolveWorkspaceHubOwnerContext:()=>GA,resolveWorkflowsConfigSearchPaths:()=>R5,resolveSkillsConfigSearchPaths:()=>M5,resolveSharedHubOwnerContext:()=>m0,resolveSessionBackend:()=>mj,resolveRulesConfigSearchPaths:()=>N5,resolveProviderConfig:()=>B5,resolveProviderApiKeyFromSettings:()=>c7,resolveProductionHubOwnerContext:()=>Q1,resolvePluginSkillDirectoriesFromPaths:()=>t1,resolvePluginConfigSearchPaths:()=>W5,resolveMcpServerRegistrations:()=>t0,resolveMarketplaceMcpServerName:()=>wW,resolveLocalClineAuthToken:()=>GY,resolveHubUrl:()=>aj,resolveHubOwnerContext:()=>Q$,resolveHubEndpointOptions:()=>Z1,resolveHubBuildId:()=>$Q,resolveHooksConfigSearchPaths:()=>Q5,resolveDisabledToolNames:()=>N1,resolveDisabledPluginPaths:()=>I4,resolveDefaultMcpSettingsPath:()=>Q0,resolveDefaultHubPort:()=>D6,resolveDefaultHubPathname:()=>Gj,resolveDefaultHubHost:()=>Hj,resolveCoreSelectedToolIds:()=>c9,resolveCoreDistinctId:()=>v0,resolveCompatibleLocalHubUrl:()=>e5,resolveClineDir:()=>YA,resolveClineDataDir:()=>i2,resolveAndLoadAgentPlugins:()=>n8,resolveAgentPluginPaths:()=>s1,requestHubShutdown:()=>t5,requestDesktopToolApproval:()=>wX,removePluginMcpServersFromSettings:()=>NW,rememberRecoverableLocalHubUrl:()=>d$,registerRemoteConfigSessionBlobUpload:()=>kQ,registerMcpServersFromSettingsFile:()=>v2,registerDisposable:()=>pm,refreshProviderModelsFromSource:()=>XY,refreshOpenAICodexToken:()=>j9,refreshOcaToken:()=>B9,refreshClineToken:()=>Q9,readSessionCheckpointHistory:()=>Z8,readRemoteConfigSessionBlobUploadMetadata:()=>LX,readHubDiscovery:()=>_0,readGlobalSettings:()=>N0,readCompactionStrategyGlobally:()=>aB,readBearerToken:()=>wQ,projectSessionCompactionState:()=>j2,probeHubServer:()=>J$,probeHubConnection:()=>IU,prewarmFileIndex:()=>q9,prewarmDetachedHubServer:()=>jQ,prepareRemoteConfigCoreIntegration:()=>TX,parseWorkflowConfigFromMarkdown:()=>q5,parseUserCommandEnvelope:()=>lm,parseSkillConfigFromMarkdown:()=>T5,parseSettings:()=>TZ,parseSessionCompactionState:()=>K1,parseRuleConfigFromMarkdown:()=>z5,parsePluginSource:()=>Z7,parseMcpInstallArgs:()=>qW,parseHookEventPayload:()=>h6,parseConfiguredAgentConfig:()=>QW,normalizeWorkspacePath:()=>R1,normalizeUserInput:()=>dm,normalizeSdkError:()=>um,normalizeRuntimeCapabilities:()=>w0,normalizeProviderId:()=>$6,normalizeOAuthProvider:()=>YY,normalizeHubWebSocketUrl:()=>l$,noopBasicLogger:()=>cm,migrateLegacyProviderSettings:()=>yW,mergeRulesForSystemPrompt:()=>B6,mergeAgentHooks:()=>y2,marketplaceEntryKey:()=>dX,markLocalProviderEnabled:()=>ZY,makeTeamTaskSubSessionId:()=>d4,makeSubSessionId:()=>g8,loginOpenAICodex:()=>Q4,loginOcaOAuth:()=>Y4,loginLocalProvider:()=>VY,loginClineOAuth:()=>W4,loginAndSaveProviderOAuthCredentials:()=>B4,loginAndSaveLocalProviderOAuthCredentials:()=>HY,loadOpenTelemetryAdapter:()=>Am,loadMcpSettingsFile:()=>I2,loadLlmsConfigFromFile:()=>zY,loadConfiguredAgentConfigs:()=>q6,loadAgentPluginsFromPathsWithDiagnostics:()=>C2,loadAgentPluginsFromPaths:()=>r9,loadAgentPluginFromPath:()=>e4,listSessionHistoryFromBackend:()=>Zj,listPluginToolsWithDiagnostics:()=>iZ,listPluginTools:()=>I5,listMcpServerOAuthStatuses:()=>h5,listLocalProviders:()=>QY,listHookConfigFiles:()=>S$,isToolDisabledGlobally:()=>sB,isTelemetryOptedOutGlobally:()=>C9,isSessionNotFoundError:()=>Z$,isRuleEnabled:()=>IZ,isPluginDisabledGlobally:()=>eB,isOfficialPluginSlug:()=>W7,isOAuthProvider:()=>Q2,isMarketplaceSkillInstalled:()=>pQ,isLocalHubOrigin:()=>_X,isLocalHubHostName:()=>CQ,isHubReconnectableTransportError:()=>fj,isHubCommandTimeoutError:()=>YQ,isDiscoveryFilePresent:()=>BA,isClinePassLimitMessage:()=>wm,isClinePassLimitError:()=>Em,isClineOrgIndividualInferenceSubscriptionMessage:()=>Rm,isClineOrgIndividualInferenceSubscriptionError:()=>Nm,isClineNotSubscribedMessage:()=>Mm,isClineNotSubscribedError:()=>qm,isClineAccountActionRequest:()=>EZ,isBuiltInProviderId:()=>VJ,isAutoUpdateEnabledGlobally:()=>iB,installPlugin:()=>oX,installMcpServer:()=>CX,identifyAccount:()=>H1,hashSecret:()=>M0,hasMcpSettingsFile:()=>$$,getValidOpenAICodexCredentials:()=>J4,getValidOcaCredentials:()=>V4,getValidClineCredentials:()=>Z4,getProviderOAuthCredentialsFromSettings:()=>H4,getProviderConfigFields:()=>KY,getProviderConfig:()=>HZ,getProviderAuthStorageId:()=>v7,getProviderAuthHandler:()=>H0,getPersistedProviderApiKey:()=>T8,getMcpServerOAuthState:()=>g2,getMarketplaceSkillCandidates:()=>CW,getLocalProviderModels:()=>JY,getLiveModelsCatalog:()=>e8,getGlobalMarketplaceSkillPaths:()=>PW,getFileIndex:()=>p1,getCurrentContextSize:()=>y3,getCoreHeadlessToolNames:()=>u4,getCoreDefaultEnabledToolIds:()=>v9,getCoreBuiltinToolCatalog:()=>M2,getCoreAcpToolNames:()=>u9,getClinePassSubscriptionUrl:()=>zm,getClineOrgIndividualInferenceSubscriptionMessage:()=>Tm,getClineNotSubscribedMessage:()=>Om,getClineDefaultSystemPrompt:()=>Cm,generateWorkspaceInfoWithDiagnostics:()=>K5,generateWorkspaceInfo:()=>Q6,formatRulesForSystemPrompt:()=>V6,formatProviderOAuthApiKey:()=>u7,formatDisplayUserInput:()=>vm,findInstalledGlobalMarketplaceSkillName:()=>SW,findCheckpointForRun:()=>S6,filterExtensionToolRegistrations:()=>b9,filterDisabledTools:()=>i1,filterDisabledPluginPaths:()=>S9,fetchClineRecommendedModels:()=>OY,extractClinePassLimitMessage:()=>Lm,executeClineAccountAction:()=>wZ,ensureHubWebSocketServer:()=>PQ,ensureHubServer:()=>pf,ensureDetachedHubServer:()=>DA,ensureCustomProvidersLoaded:()=>V7,ensureCompatibleLocalHubUrl:()=>o2,enrichPromptWithMentions:()=>P8,emptyWorkspaceManifest:()=>xm,emptyStoredProviderSettings:()=>k$,discoverPluginModulePaths:()=>Z5,disablePluginMcpServersInSettings:()=>yX,deriveSubsessionStatus:()=>p4,deleteLocalProvider:()=>K7,defineLlmsConfig:()=>TY,createWorkflowsConfigDefinition:()=>C5,createUserInstructionConfigService:()=>I$,createToolPoliciesWithPreset:()=>N9,createTool:()=>Im,createTeamName:()=>gQ,createSubprocessHooks:()=>LQ,createSpawnAgentTool:()=>w$,createSkillsConfigDefinition:()=>E5,createShellTool:()=>P4,createShellExecutor:()=>G2,createSessionHost:()=>C6,createSessionCompactionState:()=>z8,createRuntimeHost:()=>C6,createRulesConfigDefinition:()=>w5,createRemoteConfigSessionMessagesArtifactUploader:()=>OX,createProviderConfig:()=>BJ,createOpenTelemetryTelemetryService:()=>AW,createOAuthClientCallbacks:()=>j6,createMcpTools:()=>U6,createLocalHubScheduleRuntimeHandlers:()=>SQ,createLlmsSdk:()=>MY,createInitialAccumulatedUsage:()=>z0,createInMemoryHubOwnerContext:()=>VA,createHubServerUrl:()=>D1,createHubAuthToken:()=>eZ,createHookConfigFileHooks:()=>X5,createHookConfigFileExtension:()=>t8,createHookAuditHooks:()=>s8,createEditorExecutor:()=>U2,createDisabledMcpToolPolicy:()=>k5,createDisabledMcpToolPolicies:()=>rZ,createDelegatedAgentConfigProvider:()=>R$,createDelegatedAgent:()=>E$,createDefaultToolsWithPreset:()=>R9,createDefaultTools:()=>z$,createDefaultShellExecutor:()=>h4,createDefaultMcpServerClientFactory:()=>F6,createDefaultExecutors:()=>S8,createCoreSettingsService:()=>u2,createCoreSessionSnapshot:()=>C1,createContributionRegistry:()=>km,createContextCompactionPrepareTurn:()=>L4,createConfiguredTelemetryService:()=>B$,createConfiguredTelemetryHandle:()=>i$,createConfiguredAgentTools:()=>M6,createCompactionStateAwarePrepareTurn:()=>O4,createClineTelemetryServiceMetadata:()=>hm,createClineTelemetryServiceConfig:()=>ym,createCheckpointComparePlan:()=>UQ,createBuiltinTools:()=>N2,createApplyPatchExecutor:()=>A2,createAgentTeamsTools:()=>q2,createAgentRuntime:()=>nm,createAgentHooksExtension:()=>a8,connectToHub:()=>zQ,computePatchChanges:()=>w8,completeClineDeviceAuth:()=>k7,compareCheckpointToWorkspace:()=>HW,collectPluginMcpOAuthCandidates:()=>Q7,clearPrivateModelsCatalogCache:()=>XJ,clearLiveModelsCatalogCache:()=>jJ,clearHubDiscovery:()=>g0,captureWorkspacePathResolved:()=>rY,captureWorkspaceInitialized:()=>mW,captureWorkspaceInitError:()=>vW,captureToolUsage:()=>U8,captureTokenUsage:()=>dW,captureTaskRestarted:()=>uW,captureTaskCreated:()=>cW,captureTaskCompleted:()=>t6,captureSubagentExecution:()=>$4,captureSkillUsed:()=>pW,captureSdkError:()=>bm,captureProviderConfigured:()=>iY,captureProviderApiError:()=>e6,captureModeSwitch:()=>lW,captureMentionUsed:()=>iW,captureMentionSearchResults:()=>aW,captureMentionFailed:()=>nW,captureHookDiscovery:()=>sW,captureExtensionActivated:()=>pY,captureDiffEditFailure:()=>rW,captureConversationTurnEvent:()=>A8,captureCompactionSkipped:()=>eW,captureCompactionExecuted:()=>tW,captureAuthSucceeded:()=>m1,captureAuthStarted:()=>g1,captureAuthLoggedOut:()=>U$,captureAuthFailed:()=>v1,captureAgentUnexpectedReasoningTokens:()=>lY,captureAgentTeamCreated:()=>oW,captureAgentCreated:()=>f$,buildWorkspaceMetadata:()=>F5,buildTeamProgressSummary:()=>N6,buildSdkErrorProperties:()=>Pm,buildRemoteConfigSessionBlobUploadMetadata:()=>yQ,buildMcpInstallTransport:()=>mQ,buildDelegatedAgentConfig:()=>T2,buildConnectionUpdate:()=>L3,buildConfiguredAgentToolName:()=>JW,buildConfiguredAgentToolDescriptors:()=>jW,buildCheckpointWorkspaceDiff:()=>fQ,bootstrapAgentTeams:()=>x8,authorizeMcpServerOAuth:()=>uZ,addLocalProvider:()=>WY,accumulateUsageTotals:()=>D0,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>O5,UnifiedConfigFileWatcher:()=>k2,ToolPresets:()=>a0,TelemetryService:()=>g6,TelemetryLoggerSink:()=>FW,TEAM_TOOL_NAMES:()=>I8,SubprocessSandbox:()=>p8,StructuredCommandInputSchema:()=>V2,StoredProviderSettingsSchema:()=>Z6,StoredProviderSettingsEntrySchema:()=>qZ,SqliteTeamStore:()=>V8,SqliteSessionStore:()=>S1,SessionVersioningService:()=>o$,SessionVersioningError:()=>u0,SessionSource:()=>F0,SessionNotFoundError:()=>W$,SapSettingsSchema:()=>_Z,SKILLS_CONFIG_DIRECTORY_NAME:()=>L5,SESSION_STATUSES:()=>r4,SESSION_NOT_FOUND_ERROR_CODE:()=>d2,SDK_ERROR_TELEMETRY_EVENT:()=>rm,RpcClineAccountService:()=>D5,RemoteRuntimeHost:()=>T6,ReasoningSettingsSchema:()=>AZ,RULES_CONFIG_DIRECTORY_NAME:()=>kZ,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY:()=>hQ,ProviderSettingsSchema:()=>y$,ProviderSettingsManager:()=>X1,ProviderProtocolSchema:()=>GZ,ProviderIdSchema:()=>G5,ProviderClientSchema:()=>KZ,PatchActionType:()=>F2,OpenTelemetryProvider:()=>m6,OcaSettingsSchema:()=>LZ,OPENAI_COMPATIBLE_PROVIDERS:()=>V5,NodeHubClient:()=>_1,NoOpFeatureFlagsProvider:()=>W8,NativeHubTransportAdapter:()=>TW,ModelCatalogSettingsSchema:()=>OZ,McpSettingsUpdateSkippedError:()=>H6,McpSettingsMutatorPurityError:()=>x$,McpSettingsLockTimeoutError:()=>g$,MAX_COMMAND_OUTPUT_CHARS:()=>u1,LocalRuntimeHost:()=>h1,Llms:()=>Um,InMemoryWorkspaceManager:()=>J6,InMemoryMcpManager:()=>c2,HubUIClient:()=>tj,HubTransportError:()=>b0,HubSessionClient:()=>sj,HubServerTransport:()=>c6,HubScheduleService:()=>x6,HubScheduleCommandService:()=>I6,HubRuntimeHost:()=>j$,HubCommandError:()=>L6,HookEventPayloadSchema:()=>_Q,HookEventNameSchema:()=>DQ,HookConfigFileName:()=>o8,HOOK_CONFIG_FILE_EVENT_MAP:()=>J5,HOOKS_CONFIG_DIRECTORY_NAME:()=>t9,GlobalSettingsSchema:()=>k4,GcpSettingsSchema:()=>fZ,FileTeamPersistenceStore:()=>U7,FeatureFlagsService:()=>$8,FeatureFlagDefaultValue:()=>mm,FEATURE_FLAGS:()=>gm,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>T7,DefaultToolNames:()=>T0,DefaultRuntimeBuilder:()=>l6,DefaultLlmsSdk:()=>kW,DEFAULT_MODELS_CATALOG_URL:()=>XZ,DEFAULT_HUB_PORT:()=>Vj,DEFAULT_HUB_PATHNAME:()=>Bj,DEFAULT_HUB_HOST:()=>Yj,CoreSettingsService:()=>m$,CoreSessionService:()=>y1,ContributionRegistry:()=>Sm,CommandExitError:()=>d1,ClinePassLimitError:()=>_m,ClineOrgIndividualInferenceSubscriptionError:()=>Dm,ClineNotSubscribedError:()=>fm,ClineCore:()=>GW,ClineAccountService:()=>f5,ChatViewStateSchema:()=>_Y,ChatSummarySchema:()=>O7,ChatSessionStatusSchema:()=>D7,ChatSessionConfigSchema:()=>f7,ChatMessageSchema:()=>L7,ChatMessageRoleSchema:()=>_7,CORE_TELEMETRY_EVENTS:()=>v,CORE_BUILD_VERSION:()=>hW,BrowserWebSocketHubAdapter:()=>OW,BUILT_IN_PROVIDER_IDS:()=>YJ,BUILT_IN_PROVIDER:()=>H5,AzureSettingsSchema:()=>DZ,AwsSettingsSchema:()=>UZ,AuthSettingsSchema:()=>FZ,AgentTeamsRuntime:()=>e2,AgentTeam:()=>w6,Agent:()=>im,ALL_DEFAULT_TOOL_NAMES:()=>_$});N(q,c$0);import*as Um from"@cline/llms";import{ClineNotSubscribedError as fm,ClineOrgIndividualInferenceSubscriptionError as Dm,ClinePassLimitError as _m,extractClinePassLimitMessage as Lm,getClineNotSubscribedMessage as Om,getClineOrgIndividualInferenceSubscriptionMessage as Tm,getClinePassSubscriptionUrl as zm,isClineNotSubscribedError as qm,isClineNotSubscribedMessage as Mm,isClineOrgIndividualInferenceSubscriptionError as Nm,isClineOrgIndividualInferenceSubscriptionMessage as Rm,isClinePassLimitError as Em,isClinePassLimitMessage as wm}from"@cline/llms";import{buildClineSystemPrompt as Cm,buildSdkErrorProperties as Pm,ContributionRegistry as Sm,captureSdkError as bm,createClineTelemetryServiceConfig as ym,createClineTelemetryServiceMetadata as hm,createContributionRegistry as km,createTool as Im,emptyWorkspaceManifest as xm,FEATURE_FLAGS as gm,FeatureFlagDefaultValue as mm,formatDisplayUserInput as vm,noopBasicLogger as cm,normalizeSdkError as um,normalizeUserInput as dm,parseUserCommandEnvelope as lm,registerDisposable as pm,SDK_ERROR_TELEMETRY_EVENT as rm}from"@cline/shared";import"@cline/shared/storage";var DK={};w(DK,{isClineAccountActionRequest:()=>EZ,executeClineAccountAction:()=>wZ,RpcClineAccountService:()=>D5,ClineAccountService:()=>f5});function GR($){if(typeof $!=="object"||$===null||!("error"in $))return;let W=$.error;return typeof W==="string"&&W.trim()?W:void 0}function fK($,W,Z){let Q=GR(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(fK(X.status,Y,void 0));throw Error("Cline account response was not valid JSON")}if(!X.ok)throw Error(fK(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 EZ($){return $.action==="clineAccount"}async function wZ($,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 D5{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 _K={};w(_K,{createOAuthClientCallbacks:()=>j6});function j6($){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 EU={};w(EU,{ClineCore:()=>GW});function LK($){if($===!0)return{};if(!$)return;return $}function OK($){if($==="user")return"global";return $}class fJ{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 TK($){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:$6(Z.provider),modelId:Z.model,apiKey:Z.apiKey?.trim()||void 0,cwd:Q,workspaceRoot:Z.workspaceRoot,systemPrompt:Z.systemPrompt??"",mode:AR(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:FR(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 CZ($){let W=KR($.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 KR($,W){if(!$)return;return{ingestEvent:(Z)=>{W.ingestEvent(Z)}}}function FR($){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 AR($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}var NF={};w(NF,{createCoreSettingsService:()=>u2,CoreSettingsService:()=>m$});import{existsSync as g5,readFileSync as eE}from"node:fs";import{basename as yJ,dirname as _F,extname as $w,isAbsolute as TF,join as Ww,relative as zF,resolve as LF}from"node:path";var IK={};w(IK,{resolveWorkflowsConfigSearchPaths:()=>R5,resolveSkillsConfigSearchPaths:()=>M5,resolveRulesConfigSearchPaths:()=>N5,parseWorkflowConfigFromMarkdown:()=>q5,parseSkillConfigFromMarkdown:()=>T5,parseRuleConfigFromMarkdown:()=>z5,createWorkflowsConfigDefinition:()=>C5,createUserInstructionConfigService:()=>I$,createSkillsConfigDefinition:()=>E5,createRulesConfigDefinition:()=>w5,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>O5,UnifiedConfigFileWatcher:()=>k2,SKILLS_CONFIG_DIRECTORY_NAME:()=>L5,RULES_CONFIG_DIRECTORY_NAME:()=>kZ});import{createHash as UR}from"node:crypto";import{watch as fR}from"node:fs";import{readdir as DR,readFile as _R}from"node:fs/promises";import{join as LR}from"node:path";function OR($){return UR("sha1").update($).digest("hex")}function MK($){return Boolean($&&typeof $==="object"&&"code"in $)}function zK($){return MK($)&&$.code==="ENOENT"}function qK($){return MK($)&&($.code==="EACCES"||$.code==="EPERM")}class k2{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=fR(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(!zK(Z)&&!qK(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 _R(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:OR(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 DR($,{withFileTypes:!0})).filter((Z)=>Z.isFile()).map((Z)=>({directoryPath:$,fileName:Z.name,filePath:LR($,Z.name)})).sort((Z,Q)=>Z.fileName.localeCompare(Q.fileName))}catch(W){if(zK(W)||qK(W))return[];throw W}}}import{readdir as _J,readFile as TR,stat as DJ}from"node:fs/promises";import{basename as e1,dirname as zR,extname as SZ,join as x0,resolve as _5}from"node:path";import{AGENTS_RULES_FILE_NAME as NK,RULES_CONFIG_DIRECTORY_NAME as kZ,resolveGlobalAgentsRulesPath as qR,resolveRulesConfigSearchPaths as MR,resolveSkillsConfigSearchPaths as NR,resolveWorkflowsConfigSearchPaths as RR,SKILLS_CONFIG_DIRECTORY_NAME as L5,WORKFLOWS_CONFIG_DIRECTORY_NAME as O5}from"@cline/shared/storage";import ER from"yaml";var PZ="SKILL.md",wR="managed.json",CR=new Set([".md",".markdown",".txt"]);function LJ($){return $.trim().toLowerCase()}function X6($){let W=$;return W?.code==="ENOENT"||W?.code==="EACCES"||W?.code==="EPERM"||W?.code==="ELOOP"}function bZ($){return CR.has(SZ($).toLowerCase())}function RK($){let W=[],Z=new Set;for(let Q of $){let J=_5(Q);if(Z.has(J))continue;Z.add(J),W.push(Q)}return W}function PR($){let W=[...$?.directories??M5($?.workspacePath)];if($?.pluginSkillDirectories)W.push(...$.pluginSkillDirectories);else if($?.includePluginSkills)W.push(...yG({pluginPaths:$.pluginPaths,workspacePath:$.workspacePath,cwd:$.cwd??$.workspacePath}));return RK(W)}async function OJ($){try{let W=await _J($,{withFileTypes:!0}),Z=[];for(let Q of W){if(!Q.isDirectory())continue;let J=x0($,Q.name),j=x0(J,wR);try{let X=await TR(j,"utf8"),Y=JSON.parse(X);if(Y&&typeof Y==="object")Z.push(J)}catch(X){if(X6(X))continue;if(X?.name==="SyntaxError")continue;throw X}}return Z.sort((Q,J)=>Q.localeCompare(J))}catch(W){if(X6(W))return[];throw W}}function TJ($){let W=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,Z=$.match(W);if(!Z)return{data:{},body:$,hadFrontmatter:!1};let[,Q,J]=Z;try{let j=ER.parse(Q);return{data:j&&typeof j==="object"&&!Array.isArray(j)?j:{},body:J,hadFrontmatter:!0}}catch(j){let X=j instanceof Error?j.message:String(j);return{data:{},body:$,hadFrontmatter:!0,parseError:X}}}function yZ($,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 Y6($,W){if($===void 0||$===null)return;if(typeof $!=="boolean")throw Error(`Frontmatter field '${W}' must be a boolean.`);return $}function SR($,W){if(e1($.filePath).toLowerCase()!==NK.toLowerCase())return e1($.filePath,SZ($.filePath));if(W&&_5($.filePath)===_5(W,NK))return"Workspace AGENTS.md";if(_5($.filePath)===_5(qR()))return"Global AGENTS.md";return e1($.filePath,SZ($.filePath))}function T5($,W){let{data:Z,body:Q,parseError:J}=TJ($);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=yZ(Z.name,"name",!1)??W.trim();if(!Y)throw Error("Missing skill name.");return{name:Y,description:yZ(Z.description,"description",!1),disabled:Y6(Z.disabled,"disabled")??(Y6(Z.enabled,"enabled")===!1?!0:void 0),instructions:j,frontmatter:Z}}function z5($,W){let{data:Z,body:Q,parseError:J}=TJ($);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=yZ(Z.name,"name",!1)??W.trim();if(!X)throw Error("Missing rule name.");return{name:X,disabled:Y6(Z.disabled,"disabled")??(Y6(Z.enabled,"enabled")===!1?!0:void 0),instructions:j,frontmatter:Z}}function q5($,W){let{data:Z,body:Q,parseError:J}=TJ($);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=yZ(Z.name,"name",!1)??W.trim();if(!X)throw Error("Missing workflow name.");return{name:X,disabled:Y6(Z.disabled,"disabled")??(Y6(Z.enabled,"enabled")===!1?!0:void 0),instructions:j,frontmatter:Z}}function M5($){return NR($)}function N5($){return MR($)}function R5($){return RR($)}async function EK($){if(e1($)===".cline"){let W=await OJ($);return(await Promise.all(W.map((Q)=>EK(x0(Q,L5))))).flat()}try{let W=await _J($,{withFileTypes:!0}),Z=[];for(let Q of W){if(Q.isFile()&&Q.name===PZ){Z.push({directoryPath:$,fileName:Q.name,filePath:x0($,Q.name)});continue}let J=x0($,Q.name);if(Q.isDirectory()||Q.isSymbolicLink()&&await DJ(J).then((X)=>X.isDirectory()).catch((X)=>{if(X6(X))return!1;throw X}))Z.push({directoryPath:J,fileName:PZ,filePath:x0(J,PZ)})}return Z}catch(W){if(X6(W))return[];throw W}}async function hZ($){if(e1($)===".cline"){let W=await OJ($);return(await Promise.all(W.map((Q)=>hZ(x0(Q,"rules.md"))))).flat()}try{if((await DJ($)).isFile())return[{directoryPath:zR($),fileName:e1($),filePath:$}]}catch(W){if(!X6(W))throw W}try{let Z=(await _J($,{withFileTypes:!0})).filter((J)=>J.isFile()&&bZ(J.name)).map((J)=>({directoryPath:$,fileName:J.name,filePath:x0($,J.name)})),Q=x0($,"AGENTS.md");try{if((await DJ(Q)).isFile()){if(!Z.some((X)=>X.fileName==="AGENTS.md"))Z.push({directoryPath:$,fileName:"AGENTS.md",filePath:Q})}}catch{}return Z}catch(W){if(X6(W))return[];throw W}}async function bR($){if(e1($)===".cline"){let W=await OJ($);return(await Promise.all(W.map((Q)=>hZ(x0(Q,O5))))).flat()}return hZ($)}function E5($){let W=PR($),Z=$?.workspacePath?x0($.workspacePath,".cline"):void 0;return{type:"skill",directories:Z?RK([...W,Z]):W,discoverFiles:EK,includeFile:(Q)=>Q===PZ,parseFile:(Q)=>T5(Q.content,e1(Q.directoryPath)),resolveId:(Q)=>LJ(Q.name)}}function w5($){let W=$?.directories??N5($?.workspacePath),Z=$?.workspacePath?x0($.workspacePath,".cline"):void 0;return{type:"rule",directories:Z?[...W,Z]:W,discoverFiles:hZ,includeFile:(Q,J)=>Q===".clinerules"||bZ(Q)||bZ(J),parseFile:(Q)=>z5(Q.content,SR(Q,$?.workspacePath)),resolveId:(Q)=>LJ(Q.name)}}function C5($){let W=$?.directories??R5($?.workspacePath),Z=$?.workspacePath?x0($.workspacePath,".cline"):void 0;return{type:"workflow",directories:Z?[...W,Z]:W,discoverFiles:bR,includeFile:(Q)=>bZ(Q),parseFile:(Q)=>q5(Q.content,e1(Q.filePath,SZ(Q.filePath))),resolveId:(Q)=>LJ(Q.name)}}function wK($){let W=[E5($?.skills),w5($?.rules),C5($?.workflows)];return new k2(W,{debounceMs:$?.debounceMs,emitParseErrors:$?.emitParseErrors})}import{truncateSplit as CK}from"@cline/shared";function yR($,W){if($.description?.trim())return CK($.description,".");if(W==="workflow")return;return CK($.instructions,".")}function hR($){return $.disabled!==!0}function PK($,W){return[...$.getSnapshot(W).entries()].map(([Z,Q])=>({id:Z,record:Q})).filter(({record:Z})=>hR(Z.item)).map(({id:Z,record:Q})=>({id:Z,name:Q.item.name,instructions:Q.item.instructions,description:yR(Q.item,W),kind:W})).sort((Z,Q)=>Z.name.localeCompare(Q.name))}function P5($){let W=new Map;for(let Z of[...PK($,"workflow"),...PK($,"skill")])if(!W.has(Z.name))W.set(Z.name,Z);return[...W.values()].sort((Z,Q)=>Z.name.localeCompare(Q.name))}function SK($,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=P5(W).find((Y)=>Y.name===Q);return X?`${X.instructions}${j}`:$}var yK={};w(yK,{mergeRulesForSystemPrompt:()=>B6,loadRulesForSystemPromptFromWatcher:()=>zJ,listEnabledRulesFromWatcher:()=>bK,isRuleEnabled:()=>IZ,formatRulesForSystemPrompt:()=>V6});function IZ($){return $.disabled!==!0}function V6($){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 B6($,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 bK($){return[...$.getSnapshot("rule").values()].map((Z)=>Z.item).filter(IZ).sort((Z,Q)=>Z.name.localeCompare(Q.name))}function zJ($){return V6(bK($))}function xZ($){return $.trim().replace(/^\/+/,"").toLowerCase()}function kR($){if(!$||$.length===0)return;let W=$.map(xZ).filter((Z)=>Z.length>0);return W.length>0?new Set(W):void 0}function IR($,W,Z){if(!Z)return!0;let Q=xZ($),J=xZ(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 S5($,W){let Z=kR(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)=>IR(J.id,J.name,Z))}function xR($,W){return S5($,W).filter((Z)=>!Z.disabled).map((Z)=>Z.name.trim()).filter((Z)=>Z.length>0).sort((Z,Q)=>Z.localeCompare(Q))}function gR($,W,Z){let Q=xZ(W);if(!Q)return{error:"Missing skill name."};let J=S5($,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=xR($,Z);return{error:B.length>0?`Skill "${W}" not found. Available skills: ${B.join(", ")}`:"No skills are currently available."}}function qJ($,W=Promise.resolve(),Z){let Q=new Set,J=async(j,X)=>{await W;let Y=gR($,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:()=>S5($,Z).map(({skill:j,...X})=>X),enumerable:!0,configurable:!1}),J}function hK($){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:()=>zJ($.watcher)});if($.registerSkillsTool)Q.registerTool(K2(qJ($.watcher,W,$.allowedSkillNames)));for(let J of P5($.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 kK{watcher;ready;stopped=!1;constructor($){this.watcher=wK($)}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 P5(this.watcher)}resolveRuntimeSlashCommand($){return SK($,this.watcher)}hasConfiguredSkills($){return S5(this.watcher,$).some((W)=>!W.disabled)}createSkillsExecutor($){return qJ(this.watcher,(this.ready??Promise.resolve()).catch(()=>{}),$)}createExtension($){return hK({...$,watcher:this.watcher,watcherReady:(this.ready??Promise.resolve()).catch(()=>{})})}}function I$($){return new kK($)}import{readFile as mR,writeFile as vR}from"node:fs/promises";import gK from"yaml";function cR($){let W=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,Z=$.match(W);if(!Z)return{data:{},body:$,hadFrontmatter:!1};let[,Q,J]=Z,j=gK.parse(Q);return{data:j&&typeof j==="object"&&!Array.isArray(j)?j:{},body:J,hadFrontmatter:!0}}function xK($,W){return`---
|
|
226
|
+
${gK.stringify($).trimEnd()}
|
|
227
227
|
---
|
|
228
|
-
${W}`}function
|
|
228
|
+
${W}`}function uR($,W){let{data:Z,body:Q,hadFrontmatter:J}=cR($);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 xK(Z,Q)}return Z.disabled=!0,xK(Z,Q)}async function mK({filePath:$,enabled:W}){let Z=await mR($,"utf8"),Q=uR(Z,W);return await vR($,Q),{filePath:$,enabled:W,disabled:!W}}var AF={};w(AF,{updateMcpSettingsFileSync:()=>f1,updateMcpSettingsFile:()=>G6,updateMcpServerOAuthStateAsync:()=>y5,updateMcpServerOAuthState:()=>m2,setMcpServerDisabled:()=>x2,resolvePluginMcpServerRegistrations:()=>lZ,resolveMcpServerRegistrations:()=>t0,resolveDefaultMcpSettingsPath:()=>Q0,registerMcpServersFromSettingsFile:()=>v2,normalizePluginMcpServerRegistration:()=>bJ,loadMcpSettingsFile:()=>I2,listMcpServerOAuthStatuses:()=>h5,hasMcpSettingsFile:()=>$$,getMcpServerOAuthState:()=>g2,createMcpTools:()=>U6,createDisabledMcpToolPolicy:()=>k5,createDisabledMcpToolPolicies:()=>rZ,createDefaultMcpServerClientFactory:()=>F6,authorizeMcpServerOAuth:()=>uZ,McpSettingsUpdateSkippedError:()=>H6,McpSettingsMutatorPurityError:()=>x$,McpSettingsLockTimeoutError:()=>g$,InMemoryMcpManager:()=>c2});import{spawn as EE}from"node:child_process";import{StringDecoder as VF}from"node:string_decoder";import{UnauthorizedError as JF}from"@modelcontextprotocol/sdk/client/auth.js";import{Client as wE}from"@modelcontextprotocol/sdk/client/index.js";import{randomUUID as DE}from"node:crypto";import{UnauthorizedError as _E}from"@modelcontextprotocol/sdk/client/auth.js";import{Client as LE}from"@modelcontextprotocol/sdk/client/index.js";import{SSEClientTransport as OE}from"@modelcontextprotocol/sdk/client/sse.js";import{StreamableHTTPClientTransport as TE}from"@modelcontextprotocol/sdk/client/streamableHttp.js";mZ();var zE="/mcp/oauth/callback",qE=[1456,1457,1458],ME=300000;function NE($){if($ instanceof Error){let W=$.message.trim();if(W.length>0)return W}return String($)}function RE($){return{client_name:"Cline",redirect_uris:[$],grant_types:["authorization_code","refresh_token"],response_types:["code"],token_endpoint_auth_method:"none"}}function cZ($){let W={};try{W=g2($.serverName,{filePath:$.settingsPath})??{}}catch{W={}}let Z,Q,J=async(X)=>{let Y=K6(X(W))??{};try{W=m2($.serverName,()=>Y,{filePath:$.settingsPath})}catch{W=Y}};return{provider:{get redirectUrl(){return W.redirectUrl??$.redirectUrl},get clientMetadata(){return RE(W.redirectUrl??$.redirectUrl)},state:()=>{return Q=DE(),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 vZ($){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 OE(new URL(W.url),{authProvider:$.oauthProvider,requestInit:Z,fetch:$.fetch});return new TE(new URL(W.url),{authProvider:$.oauthProvider,requestInit:Z,fetch:$.fetch})}function QF($){return new LE({name:$.clientName?.trim()||"@cline/core",version:$.clientVersion?.trim()||"0.0.0"})}async function uZ($){let W=$.serverName.trim();if(!W)throw Error("MCP server name cannot be empty.");let{resolveMcpServerRegistrations:Z}=await Promise.resolve().then(() => (mZ(),ZF)),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:qE,callbackPath:$.callbackPath??zE,timeoutMs:$.timeoutMs??ME,successHtml:$.successHtml,onListening:$.onServerListening,onClose:$.onServerClose});if(!J.callbackUrl)throw Error("Unable to bind local MCP OAuth callback server.");let j=cZ({settingsPath:$.filePath,serverName:W,redirectUrl:J.callbackUrl,onAuthorizationUrl:async(V)=>{await $.openUrl?.(V)}});await j.resetInteractiveState();let X=QF($),Y;try{let V=vZ({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 _E))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=QF($);let F=vZ({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 CE="2024-11-05",PE=5000,SE=1500,jF="http://127.0.0.1:1456/mcp/oauth/callback";function dZ($){return $ instanceof Error?$.message:String($)}function XF($){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 YF($){return Buffer.from(`${JSON.stringify($)}
|
|
231
|
+
`,"utf8")}class PJ{buffer="";decoder=new VF("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 QF{registration;process;nextRequestId=1;pending=new Map;framedParser=new EJ;newlineParser=new wJ;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:ME,capabilities:{},clientInfo:{name:"@cline/core",version:"0.0.0"}},NE),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 EJ,this.newlineParser=new wJ,this.stderrBuffer="",this.protocolMode=$;let Z=process.platform==="win32"?{windowsHide:!0,shell:!0}:{},Q=zE(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: ${cZ(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}": ${cZ($)}.${Z}`)),W.kill()}async request($,W,Z=RE){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"?$F(j):WF(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"?$F(Q):WF(Q))}failAllPending($){for(let[W,Z]of this.pending)clearTimeout(Z.timeout),this.pending.delete(W),Z.reject($)}}class JF{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 $=mZ({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??eK});this.authContext=$;try{let W=new qE({name:this.options.clientName?.trim()||"@cline/core",version:this.options.clientVersion?.trim()||"0.0.0"}),Z=gZ({registration:this.registration,oauthProvider:$.provider,fetch:this.options.fetch});await W.connect(Z),await $.clearError(),this.client=W}catch(W){let Z=W instanceof tK?this.formatUnauthorizedMessage($.getLastAuthorizationUrl()):cZ(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??mZ({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??eK}),Z=$ instanceof tK?this.formatUnauthorizedMessage(W.getLastAuthorizationUrl()):cZ($);throw await W.markError(Z),Error(Z)}}function K6($={}){return(W)=>W.transport.type==="stdio"?new QF(W):new JF(W,$)}xZ();function $1(){return Date.now()}function EE($){return $.map((W)=>({name:W.name,description:W.description,inputSchema:W.inputSchema}))}class c2{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:$1()});return}let Z=JSON.stringify(W.registration.transport)!==JSON.stringify($.transport);if(W.registration={...$},W.updatedAt=$1(),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=$1(),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&&$1()-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=EE(Q);return W.toolCache=J,W.toolCacheUpdatedAt=$1(),W.updatedAt=$1(),J})}async callTool($){return this.runExclusive($.serverName,async()=>{let W=this.requireServer($.serverName),Z=await this.ensureConnectedClient(W);return W.updatedAt=$1(),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=$1();try{let W=$.client??await this.clientFactory($.registration);await W.connect(),$.client=W,$.status="connected",$.lastError=void 0,$.updatedAt=$1()}catch(W){throw $.status="disconnected",$.lastError=W instanceof Error?W.message:String(W),$.updatedAt=$1(),W}}async disconnectState($){if(!$.client){$.status="disconnected",$.updatedAt=$1();return}try{await $.client.disconnect()}finally{$.status="disconnected",$.updatedAt=$1()}}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 F6($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function jF($){return F6($)&&Object.values($).every((W)=>typeof W==="string")}function wE($){return Array.isArray($)&&$.every((W)=>typeof W==="string")}function CE($){if(!F6($))return!1;return($.fromEnv===void 0||typeof $.fromEnv==="string")&&($.value===void 0||typeof $.value==="string")&&($.required===void 0||typeof $.required==="boolean")}function PE($){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 CJ($){if(!F6($))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(!F6(Q))return{name:W,loadError:"invalid env"};for(let[V,B]of Object.entries(Q))if(typeof B!=="string"&&!CE(B))return{name:W,loadError:`invalid env "${V}"`}}let J=$.transport;if(!F6(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=F6($.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&&!wE(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&&!jF(G))return{name:W,loadError:"stdio MCP transport env must be strings"};let K=PE({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&&!jF(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 uZ($){let W=new Map;return $.map(({server:Z,owner:Q,ownerLabel:J})=>{let j=CJ(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 SE}from"node:crypto";var XF=64,bE=/[^a-zA-Z0-9_-]+/g,YF=8,yE=1,hE="mcp_tool";function kE($){return SE("sha1").update($).digest("hex").slice(0,YF)}function IE($){return $.replace(bE,"_")}var dZ=({serverName:$,toolName:W})=>{let Z=`${$}__${W}`,Q=IE(Z);if(Q===Z&&Z.length<=XF)return Z;let J=kE(Z),j=XF-yE-YF;return`${Q.slice(0,j)||hE}_${J}`};function y5($){return{[($.nameTransform??dZ)({serverName:$.serverName,toolName:$.toolName})]:{enabled:!1}}}function lZ($){let W={};for(let Z of $.toolNames)Object.assign(W,y5({serverName:$.serverName,toolName:Z,nameTransform:$.nameTransform}));return W}import{createTool as xE}from"@cline/shared";function gE($,W){let Z=W.description?.trim();if(Z)return Z;return`Execute MCP tool "${W.name}" from server "${$}".`}async function A6($){let W=await $.provider.listTools($.serverName),Z=$.nameTransform??dZ;return W.map((Q)=>{let J=Z({serverName:$.serverName,toolName:Q.name});return xE({name:J,description:gE($.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})})})}A1();var GF={};E(GF,{listPluginToolsWithDiagnostics:()=>pZ,listPluginTools:()=>h5});import{stat as mE}from"node:fs/promises";import{isAbsolute as vE,relative as cE,resolve as BF}from"node:path";A1();function uE($,W){let Z=cE(BF($),BF(W));return Z===""||!Z.startsWith("..")&&!vE(Z)}var dE=32,U6=new Map;function lE($,W){if(!U6.has($)&&U6.size>=dE){let Z=U6.keys().next().value;if(Z)U6.delete(Z)}U6.set($,W)}async function pE($){let W=await Promise.all($.pluginPaths.map(async(Z)=>{try{let Q=await mE(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 HF($,W){return $.map((Z)=>({...Z,enabled:!W.has(Z.name)}))}function rE($){return $.sort((W,Z)=>{let Q=W.name.localeCompare(Z.name);if(Q!==0)return Q;return W.path.localeCompare(Z.path)})}async function iE($,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 pZ($){let W=n1({workspacePath:$.workspacePath,cwd:$.cwd}),Z=M1($.disabledToolNames);if(W.length===0)return{tools:[],failures:[],warnings:[]};let Q=await pE({pluginPaths:W,workspacePath:$.workspacePath,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId}),J=U6.get(Q);if(J)return{tools:HF(J.tools,Z),failures:J.failures,warnings:J.warnings};let j=[],X=[],Y=[],V;try{V=await r8({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=uE($.workspacePath,G)?"workspace-plugin":"global-plugin",F;try{F=await iE(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=rE(j);return lE(Q,{tools:B,failures:X,warnings:Y}),{tools:HF(B,Z),failures:X,warnings:Y}}async function h5($){return(await pZ($)).tools}function x5($,W){if(!W)return"global";let Z=fF(W,$);return!Z.startsWith("..")&&!UF(Z)?"workspace":"global"}function sE($,W){return x5($,W)==="workspace"?"workspace-plugin":"global-plugin"}function tE($,W){let Z=fF(FF($),FF(W));return Z===""||!Z.startsWith("..")&&!UF(Z)}function eE($){try{let W=JSON.parse(nE($,"utf8"));return typeof W.name==="string"&&W.name.trim()?W.name.trim():void 0}catch{return}}function $w($){let W=KF($);while(!0){let Z=oE(W,"package.json");if(I5(Z)){let J=eE(Z);if(J)return J;break}let Q=KF(W);if(Q===W)break;W=Q}return PJ($,aE($))}function Ww($){let W=[];for(let Z of n1({workspacePath:$.workspaceRoot||void 0,cwd:$.cwd}))for(let Q of a1([Z]))W.push({directory:Q,pluginName:$w(Z),pluginPath:Z,source:$.workspaceRoot?sE(Z,$.workspaceRoot):"global-plugin"});return W.sort((Z,Q)=>Q.directory.length-Z.directory.length)}function Zw($,W){return W.find((Z)=>tE(Z.directory,$))}function k5($){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 DF($){return $.workspaceRoot?.trim()||$.cwd?.trim()||""}function _F($,W){return $.cwd?.trim()||W||process.cwd()}async function AF($,W){if($.userInstructionService)return await W($.userInstructionService);let Z=DF($),Q=_F($,Z),J=I$({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 Qw($,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 m${async list($={}){return await AF($,async(W)=>{let Z=DF($),Q=Ww({workspaceRoot:Z,cwd:_F($,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:x5(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:x5(H.filePath,Z),description:G.instructions,toggleable:!1})}for(let H of W.listRecords("skill")){let G=H.item,K=Zw(H.filePath,Q);X.push({id:H.id,name:G.name,path:H.filePath,enabled:G.disabled!==!0,kind:"skill",source:K?.source??x5(H.filePath,Z),description:G.description,pluginName:K?.pluginName,pluginPath:K?.pluginPath,toggleable:!0})}}if(Z)try{for(let H of await h5({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(t1({filePath:B}))try{for(let H of e0({filePath:B}))V.push({id:H.name,name:H.name,path:B,enabled:H.disabled!==!0,kind:"mcp",source:x5(B,Z),description:H.transport.type,toggleable:!0})}catch{}return{workflows:k5(J.filter((H)=>I5(H.path))),rules:k5(j.filter((H)=>I5(H.path))),skills:k5(X.filter((H)=>I5(H.path))),tools:k5(Y),mcp:k5(V.filter((H)=>I5(H.path)))}})}async toggle($){if($.type==="skills")return await AF($,async(W)=>{let Z=Qw(W,$),Q=Z?.filePath;if(!Q)throw Error(`Unable to resolve skill setting '${$.id??$.name??PJ($.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??PJ($.path??"")}'; provide an explicit enabled value or a resolvable workspace context.`);return await yK({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)C9($.name);else aB($.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=e0({filePath:Z}).find((j)=>j.name===W);if(!J)throw Error(`Unknown MCP server: ${W}`);Q=J.disabled===!0}return x2({filePath:Z,name:W,disabled:!Q}),{snapshot:await this.list($),changedTypes:["mcp"]}}throw Error(`Settings type '${$.type}' does not support toggles.`)}}function u2(){return new m$}function OF($){return{async list(W){let Z=$;if(Z.listSettings)return await Z.listSettings(W);return await u2().list(W)},async toggle(W){let Z=$;if(Z.toggleSetting)return await Z.toggleSetting(W);return await u2().toggle(W)}}}function TF($){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 zF={};E(zF,{splitCoreSessionConfig:()=>g5,isSessionNotFoundError:()=>$$,SessionNotFoundError:()=>e1,SESSION_NOT_FOUND_ERROR_CODE:()=>d2});var d2="session_not_found";class e1 extends Error{sessionId;code="session_not_found";constructor($,W){super(W??($?`session not found: ${$}`:"session not found"));this.sessionId=$;this.name="SessionNotFoundError"}}function $$($){return $ instanceof e1||typeof $==="object"&&$!==null&&"code"in $&&$.code==="session_not_found"}function g5($){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 qF($){let W=$.config;return"providerId"in W?{...$,config:{...W,...Jw($.localRuntime)},localRuntime:$.localRuntime}:$}function SJ($,W={}){let Z=g5($.config),Q=w0(W.defaultCapabilities,$.capabilities),J=jw(Z.localRuntime,$.localRuntime),j=W.withExtensionContext?.(J?.extensionContext);if(j)J={...J??{},extensionContext:j};return{...$,...Z,...J?{localRuntime:J}:{},...Q?{capabilities:Q}:{}}}function Jw($){if(!$)return{};let{modelCatalogDefaults:W,userInstructionService:Z,configExtensions:Q,onTeamRestored:J,...j}=$;return j}function jw(...$){let W={};for(let Z of $)if(Z)Object.assign(W,Z);return Object.keys(W).length>0?W:void 0}O0();function MF($){let W=$.input.config.telemetry??$.telemetry;if(!W)return;W.capture({event:v.SESSION.STARTED,properties:{sessionId:$.sessionId,source:$.input.source??A0.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 m5($){return!!$&&typeof $==="object"&&!Array.isArray($)}function bJ($){let W=$?.trim();return W?W:void 0}function Xw($,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 RF($,W){return new Date(new Date($).getTime()+Math.max(0,Math.floor(W))*1000).toISOString()}function NF($,W){return new Date(new Date($).getTime()-Math.max(0,Math.floor(W))*1000).toISOString()}function Yw($,W){if(!$)return W;return new Date($).getTime()>=new Date(W).getTime()?$:W}function Vw($,W){let Z=$.eventId.trim(),Q=$.eventType.trim(),J=$.source.trim(),j=bJ($.subject),X=bJ($.dedupeKey)??`${Q}:${J}:${j??Z}`;return{eventId:Z,eventType:Q,source:J,subject:j,occurredAt:Xw($.occurredAt,W),workspaceRoot:bJ($.workspaceRoot),payload:m5($.payload)?$.payload:void 0,attributes:m5($.attributes)?$.attributes:void 0,dedupeKey:X}}function yJ($,W){if(!W)return;let Z=W.split("."),Q=$;for(let J of Z){if(!m5(Q))return;Q=Q[J]}return Q}function Bw($,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=yJ(Z,W);if(Q!==void 0)return Q;if($.attributes){let J=yJ($.attributes,W);if(J!==void 0)return J}if($.payload)return yJ($.payload,W);return}function rZ($,W){if(Array.isArray(W))return W.some((Z)=>rZ($,Z));if(Array.isArray($))return $.some((Z)=>rZ(Z,W));if(m5(W)){if(!m5($))return!1;return Object.entries(W).every(([Z,Q])=>rZ($[Z],Q))}return Object.is($,W)}function Hw($,W){if(!W||Object.keys(W).length===0)return!0;return Object.entries(W).every(([Z,Q])=>rZ(Bw($,Z),Q))}class hJ{store;nowFn;logger;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now()),this.logger=$.logger}ingestEvent($){let W=new Date(this.nowFn()).toISOString(),Z=Vw($,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(!Hw(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=Yw(V.scheduledFor,RF(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:NF(Z,j)}))return{reason:"dedupe_window"};let X=$.cooldownSeconds??0;if(X>0&&this.store.hasRecentEventRunForSpec({specId:$.specId,sinceIso:NF(Z,X)}))return{reason:"cooldown"};return{run:this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"event",triggerEventId:W.eventId,scheduledFor:J>0?RF(Z,J):Z}),reason:"dedupe_window"}}}class v5{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 Dw}from"node:path";import{buildClineSystemPrompt as _w}from"@cline/shared";import{nowIso as EF}from"@cline/shared/db";import{mkdirSync as Gw,writeFileSync as Kw}from"node:fs";import{join as Fw}from"node:path";import{resolveCronReportsDir as Aw}from"@cline/shared/storage";function v$($){if(/[:#\n]/.test($)||$.includes('"'))return JSON.stringify($);return $}function l2($,W){if(W===void 0||W===null)return;return`${$}: ${v$(W)}`}function Uw($,W,Z){let Q=[`runId: ${v$($.runId)}`,`specId: ${v$(W.specId)}`,`externalId: ${v$(W.externalId)}`,`title: ${v$(W.title)}`,`triggerKind: ${v$($.triggerKind)}`,`status: ${v$($.status)}`,`sourcePath: ${v$(W.sourcePath)}`],J=[l2("sessionId",$.sessionId),l2("startedAt",$.startedAt),l2("completedAt",$.completedAt),l2("triggerEventId",$.triggerEventId),l2("triggerEventType",Z?.eventType),l2("triggerEventSource",Z?.source),l2("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 SJ{buffer="";decoder=new VF("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 BF{registration;process;nextRequestId=1;pending=new Map;framedParser=new PJ;newlineParser=new SJ;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:CE,capabilities:{},clientInfo:{name:"@cline/core",version:"0.0.0"}},SE),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 PJ,this.newlineParser=new SJ,this.stderrBuffer="",this.protocolMode=$;let Z=process.platform==="win32"?{windowsHide:!0,shell:!0}:{},Q=EE(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: ${dZ(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}": ${dZ($)}.${Z}`)),W.kill()}async request($,W,Z=PE){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"?XF(j):YF(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"?XF(Q):YF(Q))}failAllPending($){for(let[W,Z]of this.pending)clearTimeout(Z.timeout),this.pending.delete(W),Z.reject($)}}class HF{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 $=cZ({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??jF});this.authContext=$;try{let W=new wE({name:this.options.clientName?.trim()||"@cline/core",version:this.options.clientVersion?.trim()||"0.0.0"}),Z=vZ({registration:this.registration,oauthProvider:$.provider,fetch:this.options.fetch});await W.connect(Z),await $.clearError(),this.client=W}catch(W){let Z=W instanceof JF?this.formatUnauthorizedMessage($.getLastAuthorizationUrl()):dZ(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??cZ({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??jF}),Z=$ instanceof JF?this.formatUnauthorizedMessage(W.getLastAuthorizationUrl()):dZ($);throw await W.markError(Z),Error(Z)}}function F6($={}){return(W)=>W.transport.type==="stdio"?new BF(W):new HF(W,$)}mZ();function e0(){return Date.now()}function bE($){return $.map((W)=>({name:W.name,description:W.description,inputSchema:W.inputSchema}))}class c2{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=bE(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 A6($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function GF($){return A6($)&&Object.values($).every((W)=>typeof W==="string")}function yE($){return Array.isArray($)&&$.every((W)=>typeof W==="string")}function hE($){if(!A6($))return!1;return($.fromEnv===void 0||typeof $.fromEnv==="string")&&($.value===void 0||typeof $.value==="string")&&($.required===void 0||typeof $.required==="boolean")}function kE($){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 bJ($){if(!A6($))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(!A6(Q))return{name:W,loadError:"invalid env"};for(let[V,B]of Object.entries(Q))if(typeof B!=="string"&&!hE(B))return{name:W,loadError:`invalid env "${V}"`}}let J=$.transport;if(!A6(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=A6($.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&&!yE(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&&!GF(G))return{name:W,loadError:"stdio MCP transport env must be strings"};let K=kE({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&&!GF(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 lZ($){let W=new Map;return $.map(({server:Z,owner:Q,ownerLabel:J})=>{let j=bJ(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 KF=64,xE=/[^a-zA-Z0-9_-]+/g,FF=8,gE=1,mE="mcp_tool";function vE($){return IE("sha1").update($).digest("hex").slice(0,FF)}function cE($){return $.replace(xE,"_")}var pZ=({serverName:$,toolName:W})=>{let Z=`${$}__${W}`,Q=cE(Z);if(Q===Z&&Z.length<=KF)return Z;let J=vE(Z),j=KF-gE-FF;return`${Q.slice(0,j)||mE}_${J}`};function k5($){return{[($.nameTransform??pZ)({serverName:$.serverName,toolName:$.toolName})]:{enabled:!1}}}function rZ($){let W={};for(let Z of $.toolNames)Object.assign(W,k5({serverName:$.serverName,toolName:Z,nameTransform:$.nameTransform}));return W}import{createTool as uE}from"@cline/shared";function dE($,W){let Z=W.description?.trim();if(Z)return Z;return`Execute MCP tool "${W.name}" from server "${$}".`}async function U6($){let W=await $.provider.listTools($.serverName),Z=$.nameTransform??pZ;return W.map((Q)=>{let J=Z({serverName:$.serverName,toolName:Q.name});return uE({name:J,description:dE($.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 DF={};w(DF,{listPluginToolsWithDiagnostics:()=>iZ,listPluginTools:()=>I5});import{stat as lE}from"node:fs/promises";import{isAbsolute as pE,relative as rE,resolve as UF}from"node:path";U1();function iE($,W){let Z=rE(UF($),UF(W));return Z===""||!Z.startsWith("..")&&!pE(Z)}var nE=32,f6=new Map;function aE($,W){if(!f6.has($)&&f6.size>=nE){let Z=f6.keys().next().value;if(Z)f6.delete(Z)}f6.set($,W)}async function oE($){let W=await Promise.all($.pluginPaths.map(async(Z)=>{try{let Q=await lE(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 fF($,W){return $.map((Z)=>({...Z,enabled:!W.has(Z.name)}))}function sE($){return $.sort((W,Z)=>{let Q=W.name.localeCompare(Z.name);if(Q!==0)return Q;return W.path.localeCompare(Z.path)})}async function tE($,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 iZ($){let W=s1({workspacePath:$.workspacePath,cwd:$.cwd}),Z=N1($.disabledToolNames);if(W.length===0)return{tools:[],failures:[],warnings:[]};let Q=await oE({pluginPaths:W,workspacePath:$.workspacePath,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId}),J=f6.get(Q);if(J)return{tools:fF(J.tools,Z),failures:J.failures,warnings:J.warnings};let j=[],X=[],Y=[],V;try{V=await i8({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=iE($.workspacePath,G)?"workspace-plugin":"global-plugin",F;try{F=await tE(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=sE(j);return aE(Q,{tools:B,failures:X,warnings:Y}),{tools:fF(B,Z),failures:X,warnings:Y}}async function I5($){return(await iZ($)).tools}function m5($,W){if(!W)return"global";let Z=zF(W,$);return!Z.startsWith("..")&&!TF(Z)?"workspace":"global"}function Zw($,W){return m5($,W)==="workspace"?"workspace-plugin":"global-plugin"}function Qw($,W){let Z=zF(LF($),LF(W));return Z===""||!Z.startsWith("..")&&!TF(Z)}function Jw($){try{let W=JSON.parse(eE($,"utf8"));return typeof W.name==="string"&&W.name.trim()?W.name.trim():void 0}catch{return}}function jw($){let W=_F($);while(!0){let Z=Ww(W,"package.json");if(g5(Z)){let J=Jw(Z);if(J)return J;break}let Q=_F(W);if(Q===W)break;W=Q}return yJ($,$w($))}function Xw($){let W=[];for(let Z of s1({workspacePath:$.workspaceRoot||void 0,cwd:$.cwd}))for(let Q of t1([Z]))W.push({directory:Q,pluginName:jw(Z),pluginPath:Z,source:$.workspaceRoot?Zw(Z,$.workspaceRoot):"global-plugin"});return W.sort((Z,Q)=>Q.directory.length-Z.directory.length)}function Yw($,W){return W.find((Z)=>Qw(Z.directory,$))}function x5($){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 qF($){return $.workspaceRoot?.trim()||$.cwd?.trim()||""}function MF($,W){return $.cwd?.trim()||W||process.cwd()}async function OF($,W){if($.userInstructionService)return await W($.userInstructionService);let Z=qF($),Q=MF($,Z),J=I$({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 Vw($,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 m${async list($={}){return await OF($,async(W)=>{let Z=qF($),Q=Xw({workspaceRoot:Z,cwd:MF($,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:m5(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:m5(H.filePath,Z),description:G.instructions,toggleable:!1})}for(let H of W.listRecords("skill")){let G=H.item,K=Yw(H.filePath,Q);X.push({id:H.id,name:G.name,path:H.filePath,enabled:G.disabled!==!0,kind:"skill",source:K?.source??m5(H.filePath,Z),description:G.description,pluginName:K?.pluginName,pluginPath:K?.pluginPath,toggleable:!0})}}if(Z)try{for(let H of await I5({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($$({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:m5(B,Z),description:H.transport.type,toggleable:!0})}catch{}return{workflows:x5(J.filter((H)=>g5(H.path))),rules:x5(j.filter((H)=>g5(H.path))),skills:x5(X.filter((H)=>g5(H.path))),tools:x5(Y),mcp:x5(V.filter((H)=>g5(H.path)))}})}async toggle($){if($.type==="skills")return await OF($,async(W)=>{let Z=Vw(W,$),Q=Z?.filePath;if(!Q)throw Error(`Unable to resolve skill setting '${$.id??$.name??yJ($.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??yJ($.path??"")}'; provide an explicit enabled value or a resolvable workspace context.`);return await mK({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)P9($.name);else tB($.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 x2({filePath:Z,name:W,disabled:!Q}),{snapshot:await this.list($),changedTypes:["mcp"]}}throw Error(`Settings type '${$.type}' does not support toggles.`)}}function u2(){return new m$}function RF($){return{async list(W){let Z=$;if(Z.listSettings)return await Z.listSettings(W);return await u2().list(W)},async toggle(W){let Z=$;if(Z.toggleSetting)return await Z.toggleSetting(W);return await u2().toggle(W)}}}function EF($){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 wF={};w(wF,{splitCoreSessionConfig:()=>v5,isSessionNotFoundError:()=>Z$,SessionNotFoundError:()=>W$,SESSION_NOT_FOUND_ERROR_CODE:()=>d2});var d2="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 v5($){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 hJ($,W={}){let Z=v5($.config),Q=w0(W.defaultCapabilities,$.capabilities),J=Hw(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 Hw(...$){let W={};for(let Z of $)if(Z)Object.assign(W,Z);return Object.keys(W).length>0?W:void 0}O0();function PF($){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 c5($){return!!$&&typeof $==="object"&&!Array.isArray($)}function kJ($){let W=$?.trim();return W?W:void 0}function Gw($,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 SF($,W){return new Date(new Date($).getTime()+Math.max(0,Math.floor(W))*1000).toISOString()}function bF($,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 Fw($,W){let Z=$.eventId.trim(),Q=$.eventType.trim(),J=$.source.trim(),j=kJ($.subject),X=kJ($.dedupeKey)??`${Q}:${J}:${j??Z}`;return{eventId:Z,eventType:Q,source:J,subject:j,occurredAt:Gw($.occurredAt,W),workspaceRoot:kJ($.workspaceRoot),payload:c5($.payload)?$.payload:void 0,attributes:c5($.attributes)?$.attributes:void 0,dedupeKey:X}}function IJ($,W){if(!W)return;let Z=W.split("."),Q=$;for(let J of Z){if(!c5(Q))return;Q=Q[J]}return Q}function Aw($,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=IJ(Z,W);if(Q!==void 0)return Q;if($.attributes){let J=IJ($.attributes,W);if(J!==void 0)return J}if($.payload)return IJ($.payload,W);return}function nZ($,W){if(Array.isArray(W))return W.some((Z)=>nZ($,Z));if(Array.isArray($))return $.some((Z)=>nZ(Z,W));if(c5(W)){if(!c5($))return!1;return Object.entries(W).every(([Z,Q])=>nZ($[Z],Q))}return Object.is($,W)}function Uw($,W){if(!W||Object.keys(W).length===0)return!0;return Object.entries(W).every(([Z,Q])=>nZ(Aw($,Z),Q))}class xJ{store;nowFn;logger;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now()),this.logger=$.logger}ingestEvent($){let W=new Date(this.nowFn()).toISOString(),Z=Fw($,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(!Uw(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,SF(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:bF(Z,j)}))return{reason:"dedupe_window"};let X=$.cooldownSeconds??0;if(X>0&&this.store.hasRecentEventRunForSpec({specId:$.specId,sinceIso:bF(Z,X)}))return{reason:"cooldown"};return{run:this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"event",triggerEventId:W.eventId,scheduledFor:J>0?SF(Z,J):Z}),reason:"dedupe_window"}}}class u5{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 zw}from"node:path";import{buildClineSystemPrompt as qw}from"@cline/shared";import{nowIso as yF}from"@cline/shared/db";import{mkdirSync as fw,writeFileSync as Dw}from"node:fs";import{join as _w}from"node:path";import{resolveCronReportsDir as Lw}from"@cline/shared/storage";function v$($){if(/[:#\n]/.test($)||$.includes('"'))return JSON.stringify($);return $}function l2($,W){if(W===void 0||W===null)return;return`${$}: ${v$(W)}`}function Ow($,W,Z){let Q=[`runId: ${v$($.runId)}`,`specId: ${v$(W.specId)}`,`externalId: ${v$(W.externalId)}`,`title: ${v$(W.title)}`,`triggerKind: ${v$($.triggerKind)}`,`status: ${v$($.status)}`,`sourcePath: ${v$(W.sourcePath)}`],J=[l2("sessionId",$.sessionId),l2("startedAt",$.startedAt),l2("completedAt",$.completedAt),l2("triggerEventId",$.triggerEventId),l2("triggerEventType",Z?.eventType),l2("triggerEventSource",Z?.source),l2("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 Tw($){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 gJ($){let W=Lw($.specs);fw(W,{recursive:!0});let Z=_w(W,`${$.run.runId}.md`),Q=`${Ow($.run,$.spec,$.data.triggerEvent)}
|
|
258
|
+
${Tw($.data)}`;return Dw(Z,Q,"utf8"),Z}class mJ{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 Mw=15000,Nw=90,hF=["rules","skills","plugins"];function Rw($,W){return new Set($.extensions??hF).has(W)}function Ew($,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[T0.SUBMIT_AND_EXIT]={enabled:!0,autoApprove:!0};return Z}function ww($){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 vJ extends Error{constructor($){super($);this.name="TimeoutError"}}async function Cw($,W){if(W<=0)return $;let Z,Q=new Promise((J,j)=>{Z=setTimeout(()=>{j(new vJ("cron run timed out"))},W)});try{return await Promise.race([$,Q])}finally{if(Z)clearTimeout(Z)}}class d5{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 mJ($.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??Mw);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:yF(),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 Cw(F,A)).result,_=Date.now(),D=gJ({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:_-V,triggerEvent:j}});this.store.completeRun(W.runId,{status:"done",sessionId:X,reportPath:D,claimToken:$.claimToken}),this.publishScheduleExecutionEvent("schedule.execution.completed",Z,W.runId),this.store.updateSpecLastRunAt(Z.specId,yF())}catch(H){let G=H instanceof vJ;if(X&&G)try{await this.options.runtimeHandlers.abortSession(X)}catch{}let K=H instanceof Error?H.message:String(H),F=Date.now(),A=gJ({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=ww($.notesDirectory),j=B6(void 0,J),X=await F5(W),Y=qw({ide:"Cline Cron",workspaceRoot:W,workspaceName:zw(W),metadata:X,rules:$.systemPrompt?void 0:j,mode:Z,providerId:Q,overridePrompt:$.systemPrompt,platform:typeof process<"u"&&process?.platform||"unknown"});return $.systemPrompt?B6(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:Ew($,X),configExtensions:hF.filter((Y)=>Rw($,Y))}}}import{existsSync as tw,readdirSync as ew,readFileSync as $C,statSync as WC}from"node:fs";import{relative as ZC}from"node:path";import{resolveCronSpecsDir as QC}from"@cline/shared/storage";function l5($,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 Pw=["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"],IF=["sun","mon","tue","wed","thu","fri","sat"];function p5($,W,Z){let Q=$[W];if(typeof Q!=="string")throw Error(`Invalid cron pattern "${Z}": missing field ${W+1}`);return Q}function cJ($,W){let Z=$[0];if(typeof Z!=="number")throw Error(`Invalid cron pattern: no values parsed for ${W}`);return Z}function uJ($){let W=$.trim().split(/\s+/);if(W.length!==5)throw Error(`Invalid cron pattern "${$}": expected 5 fields, got ${W.length}`);return{minutes:l5(p5(W,0,$),0,59),hours:l5(p5(W,1,$),0,23),daysOfMonth:l5(p5(W,2,$),1,31),months:l5(p5(W,3,$),1,12,Pw),daysOfWeek:l5(p5(W,4,$),0,6,IF)}}function dJ($){uJ($)}function xF($,W,Z=Date.now()){p2($,Z,W)}var kF=new Map,Sw=new Map(IF.map(($,W)=>[$,W]));function gF($){let W=$?.trim();return W?W:void 0}function mF($){let W=kF.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 kF.set($,Z),Z}function bw($){let W=gF($);if(!W)return;mF(W).format(new Date)}function yw($,W){let Z=mF(W).formatToParts(new Date($)),Q=new Map(Z.map((X)=>[X.type,X.value])),J=Q.get("weekday")?.toLowerCase().slice(0,3)??"",j=Sw.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 hw($){let W=new Date($);return{month:W.getMonth()+1,dayOfMonth:W.getDate(),dayOfWeek:W.getDay(),hour:W.getHours(),minute:W.getMinutes()}}function kw($,W){return $.months.includes(W.month)&&$.daysOfMonth.includes(W.dayOfMonth)&&$.daysOfWeek.includes(W.dayOfWeek)&&$.hours.includes(W.hour)&&$.minutes.includes(W.minute)}function Iw($,W,Z){let Q=uJ($),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(kw(Q,yw(j,Z)))return j;j+=60000}throw Error(`No cron occurrence found within 4 years for pattern "${$}" in timezone "${Z}"`)}function p2($,W,Z){let Q=gF(Z);if(Q)return bw(Q),Iw($,W,Q);let J=uJ($),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}=hw(j.getTime());if(!J.months.includes(Y)){let K=J.months.find((A)=>A>Y)??cJ(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)??cJ(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)??cJ(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 xw}from"node:crypto";import gw from"yaml";function mw($){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 vw($){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 $1($){if(typeof $!=="string")return;let W=$.trim();return W.length>0?W:void 0}function cw($){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 rJ($){if(!$||typeof $!=="object"||Array.isArray($))return;return $}function uw($){let W=rJ($);if(!W)return;let Z=$1(W.providerId),Q=$1(W.modelId);if(Z===void 0&&Q===void 0)return;return{providerId:Z,modelId:Q}}function dw($){if(typeof $!=="string")return;let W=$.trim().toLowerCase();if(W==="act"||W==="plan"||W==="yolo")return W;return}function cF($,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 lw=new Set(_$);function pw($){let W=cF($,{preserveEmptyArray:!0});if(!W)return;let Z=W.filter((Q)=>!lw.has(Q));if(Z.length>0)throw Error(`unknown tool(s): ${Z.join(", ")}`);return W}var rw=new Set(["rules","skills","plugins"]);function iw($){let W=cF($,{preserveEmptyArray:!0});if(!W)return;let Z=W.filter((Q)=>!rw.has(Q));if(Z.length>0)throw Error(`unknown extension(s): ${Z.join(", ")}`);return W}function lJ($){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return;return Math.floor($)}function pJ($){if(typeof $!=="number"||!Number.isFinite($)||$<0)return;return Math.floor($)}function iJ($){if($===null||typeof $!=="object")return JSON.stringify($??null);if(Array.isArray($))return`[${$.map((Z)=>iJ(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)}:${iJ(Q)}`).join(",")}}`}function uF($,W){let Z=xw("sha256");return Z.update(iJ($)),Z.update(`
|
|
267
|
+
`),Z.update(W),Z.digest("hex")}function nw($){return($.split("/").pop()??$).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}var aw=["schedule","timezone"],ow=["event","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds","maxParallel"],sw=["cwd"];function vF($,W,Z,Q,J){return{externalId:$,relativePath:$,triggerKind:W,body:Z,contentHash:uF(Q,Z),error:J}}function E1($,W,Z,Q,J,j){return{externalId:$,relativePath:W,triggerKind:Z,body:Q,contentHash:J,error:j}}function dF($){let W=$.relativePath.replace(/\\/g,"/"),Z=mw(W),{frontmatter:Q,body:J}=vw($.raw),j={};if(Q!==void 0&&Q.trim().length>0)try{let D=gw.parse(Q);if(D&&typeof D==="object"&&!Array.isArray(D))j=D;else if(D!==null&&D!==void 0)return vF(W,Z,J,{},"frontmatter must be a YAML mapping")}catch(D){return vF(W,Z,J,{},D instanceof Error?`failed to parse frontmatter: ${D.message}`:"failed to parse frontmatter")}let X=uF(j,J),Y=$1(j.id),V=Y??W;if(Z!=="schedule"){for(let D of aw)if(j[D]!==void 0)return E1(V,W,Z,J,X,`field "${D}" is only allowed on *.cron.md specs`)}for(let D of sw)if(j[D]!==void 0)return E1(V,W,Z,J,X,`field "${D}" is no longer supported; cron specs use workspaceRoot as cwd`);if(Z!=="event"){for(let D of ow)if(j[D]!==void 0)return E1(V,W,Z,J,X,`field "${D}" is only allowed on .event.md specs`)}let B=$1(j.prompt),H=J.trim(),G=B??(H.length>0?H:void 0);if(!G)return E1(V,W,Z,J,X,"prompt is required (frontmatter `prompt` or markdown body)");let K=$1(j.workspaceRoot);if(!K)return E1(V,W,Z,J,X,"workspaceRoot is required");let F,A;try{F=pw(j.tools),A=iw(j.extensions)}catch(D){return E1(V,W,Z,J,X,D instanceof Error?D.message:String(D))}let f=dw(j.mode);if(j.mode!==void 0&&f===void 0)return E1(V,W,Z,J,X,"mode must be one of: act, plan, yolo");let U={id:Y,title:$1(j.title)??Y??nw(W),prompt:G,workspaceRoot:K,mode:f??"yolo",systemPrompt:$1(j.systemPrompt),modelSelection:uw(j.modelSelection),maxIterations:lJ(j.maxIterations),timeoutSeconds:lJ(j.timeoutSeconds),tools:F,notesDirectory:$1(j.notesDirectory),extensions:A,source:$1(j.source)??"user",tags:cw(j.tags),enabled:typeof j.enabled==="boolean"?j.enabled:!0,metadata:rJ(j.metadata)},_;if(Z==="schedule"){let D=$1(j.schedule);if(!D)return E1(V,W,Z,J,X,"schedule is required for *.cron.md specs");let M=$1(j.timezone);try{xF(D,M)}catch(O){return E1(V,W,Z,J,X,O instanceof Error?O.message:String(O))}_={...U,triggerKind:"schedule",schedule:D,timezone:M}}else if(Z==="event"){let D=$1(j.event);if(!D)return E1(V,W,Z,J,X,"event is required for .event.md specs");_={...U,triggerKind:"event",event:D,filters:rJ(j.filters),debounceSeconds:pJ(j.debounceSeconds),dedupeWindowSeconds:pJ(j.dedupeWindowSeconds),cooldownSeconds:pJ(j.cooldownSeconds),maxParallel:lJ(j.maxParallel)}}else _={...U,triggerKind:"one_off"};return{externalId:V,relativePath:W,triggerKind:Z,body:J,contentHash:X,spec:_}}function JC($,W){return ZC($,W).replace(/\\/g,"/")}function jC($){if(!tw($))return[];let W=[],Z=[$];while(Z.length>0){let Q=Z.pop();if(!Q)continue;let J;try{J=ew(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 nJ{store;cronDir;constructor($){this.store=$.store,this.cronDir=QC($.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=jC(this.cronDir),Z=new Set;for(let J of W){let j=JC(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=$C(W,"utf8"),J=WC(W).mtimeMs}catch{return}let X=dF({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=p2($.scheduleExpr,Q,$.timezone),j=new Date(J).toISOString();if($.nextRunAt!==j)this.store.updateSpecNextRunAt($.specId,j)}catch{}}}import{existsSync as XC,mkdirSync as YC,watch as VC}from"node:fs";import{relative as BC,resolve as HC}from"node:path";var GC=250;class aJ{reconciler;debounceMs;onError;onReconciled;watcher;pending=new Map;disposed=!1;constructor($){this.reconciler=$.reconciler,this.debounceMs=Math.max(0,$.debounceMs??GC),this.onError=$.onError??(()=>{}),this.onReconciled=$.onReconciled??(()=>{})}start(){if(this.disposed)throw Error("CronWatcher disposed");if(this.watcher)return;let $=this.reconciler.getCronDir();try{YC($,{recursive:!0}),this.watcher=VC($,{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=HC(this.reconciler.getCronDir(),$);if(!XC(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 r5}from"node:crypto";import{asOptionalString as c,asString as J0,loadSqliteDb as FC,nowIso as C0}from"@cline/shared/db";import{resolveCronDbPath as AC}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 lF($){$.exec("PRAGMA journal_mode = WAL;"),$.exec("PRAGMA busy_timeout = 5000;"),$.exec("PRAGMA foreign_keys = ON;");for(let W of KC)$.exec(W)}function aZ($){if(!$)return;try{let W=JSON.parse($);if(W&&typeof W==="object"&&!Array.isArray(W))return W}catch{}return}function oJ($,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 r2($){if(typeof $==="number"&&Number.isFinite($))return $;if(typeof $==="bigint")return Number($);return}function c$($){return{specId:J0($.spec_id),externalId:J0($.external_id),sourcePath:J0($.source_path),triggerKind:J0($.trigger_kind),sourceMtimeMs:r2($.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:aZ(c($.filters_json)),debounceSeconds:r2($.debounce_seconds),dedupeWindowSeconds:r2($.dedupe_window_seconds),cooldownSeconds:r2($.cooldown_seconds),mode:c($.mode),systemPrompt:c($.system_prompt),providerId:c($.provider_id),modelId:c($.model_id),maxIterations:r2($.max_iterations),timeoutSeconds:r2($.timeout_seconds),maxParallel:r2($.max_parallel),tools:oJ(c($.tools_json),{preserveEmpty:!0}),notesDirectory:c($.notes_directory),extensions:oJ(c($.extensions_json),{preserveEmpty:!0}),source:c($.source),tags:oJ(c($.tags_json)),metadata:aZ(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 sJ($){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 pF($){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:aZ(c($.payload_json)),attributes:aZ(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 rF($){return $?JSON.stringify($):null}var UC=["prompt","workspaceRoot","mode","systemPrompt","providerId","modelId","maxIterations","timeoutSeconds","maxParallel","tools","notesDirectory","extensions","source","scheduleExpr","timezone","eventType","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds"];function iF($){if($===void 0)return null;if($&&typeof $==="object")return JSON.stringify($);return $}function fC($,W,Z,Q){for(let J of UC){let j=$[J],X=W[J];if(iF(j)!==iF(X))return!0}if(Z===!1&&Q===!0)return!0;return!1}function DC($){return($.split("/").pop()??$).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}function _C($){return`hub/schedules/${$}.cron.md`}function LC($){let W={...$.metadata??{},...$.createdBy?{__hubScheduleCreatedBy:$.createdBy}:{},...$.cwd?{__hubScheduleCwd:$.cwd}:{},...$.runtimeOptions?{__hubRuntimeOptions:$.runtimeOptions}:{}};return Object.keys(W).length>0?W:void 0}function tJ($){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:LC($)}}function nF($){return JSON.stringify(tJ($))}function OC($,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 i5{db;constructor($={}){let W=$.dbPath??AC();this.db=FC(W),lF(this.db)}close(){this.db.close?.()}getSpecBySourcePath($){let W=this.db.prepare("SELECT * FROM cron_specs WHERE source_path = ?").get($);return W?c$(W):void 0}getSpec($){let W=this.db.prepare("SELECT * FROM cron_specs WHERE spec_id = ?").get($);return W?c$(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?c$(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)=>c$(X))}createHubSchedule($){let W=`sched_${r5()}`,Z=this.upsertSpec({externalId:W,sourcePath:_C(W),triggerKind:"schedule",sourceHash:nF($),parseStatus:"valid",spec:tJ($)});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
360
|
ORDER BY created_at ASC LIMIT 1`).get($);return W?c$(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)=>c$(j))}updateHubSchedule($,W){let Z=this.getHubSchedule($);if(!Z)return;let Q=
|
|
362
|
+
ORDER BY created_at DESC LIMIT ?`).all(...Z,Q).map((j)=>c$(j))}updateHubSchedule($,W){let Z=this.getHubSchedule($);if(!Z)return;let Q=OC(Z,W),J=this.upsertSpec({externalId:$,sourcePath:Z.sourcePath,triggerKind:"schedule",sourceHash:nF(Q),parseStatus:"valid",spec:tJ(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:C0()})}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)=>c$(Z))}upsertSpec($){let W=C0(),Z=this.getSpecBySourcePath($.sourcePath),Q=$.spec,J={title:Q?.title??Z?.title??
|
|
368
|
+
ORDER BY created_at ASC`).all($).map((Z)=>c$(Z))}upsertSpec($){let W=C0(),Z=this.getSpecBySourcePath($.sourcePath),Q=$.spec,J={title:Q?.title??Z?.title??DC($.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_${r5()}`;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&&fC(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(C0(),$)}updateSpecNextRunAt($,W){this.db.prepare("UPDATE cron_specs SET next_run_at = ?, updated_at = ? WHERE spec_id = ?").run(W??null,C0(),$)}updateSpecLastRunAt($,W){this.db.prepare("UPDATE cron_specs SET last_run_at = ?, updated_at = ? WHERE spec_id = ?").run(W,C0(),$)}updateLastMaterializedRunId($,W){this.db.prepare("UPDATE cron_specs SET last_materialized_run_id = ?, updated_at = ? WHERE spec_id = ?").run(W,C0(),$)}initializeScheduleNextRun($){let W=this.getSpec($);if(!W||W.triggerKind!=="schedule"||!W.enabled||!W.scheduleExpr){this.updateSpecNextRunAt($,void 0);return}let Z=new Date(p2(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=c$(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(p2(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_${
|
|
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(C0(),$)}updateSpecNextRunAt($,W){this.db.prepare("UPDATE cron_specs SET next_run_at = ?, updated_at = ? WHERE spec_id = ?").run(W??null,C0(),$)}updateSpecLastRunAt($,W){this.db.prepare("UPDATE cron_specs SET last_run_at = ?, updated_at = ? WHERE spec_id = ?").run(W,C0(),$)}updateLastMaterializedRunId($,W){this.db.prepare("UPDATE cron_specs SET last_materialized_run_id = ?, updated_at = ? WHERE spec_id = ?").run(W,C0(),$)}initializeScheduleNextRun($){let W=this.getSpec($);if(!W||W.triggerKind!=="schedule"||!W.enabled||!W.scheduleExpr){this.updateSpecNextRunAt($,void 0);return}let Z=new Date(p2(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=c$(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(p2(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_${r5()}`,Y;try{Y=new Date(p2(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?sJ(W):void 0}insertEventLog($,W={}){let Z=C0(),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,rF($.payload),rF($.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?pF(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)=>pF(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,C0(),$).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,C0(),$).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)=>sJ(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?sJ(W):void 0}updateQueuedEventRunForDebounce($){let W=C0();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_${r5()}`,Z=C0();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=J0(Y.run_id);if(!V)continue;let B=`cclaim_${
|
|
459
|
+
LIMIT ?`).all(W,W,J);for(let Y of X){let V=J0(Y.run_id);if(!V)continue;let B=`cclaim_${r5()}`;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,C0(),$)}attachReportPathToRun($,W){this.db.prepare("UPDATE cron_runs SET report_path = ?, updated_at = ? WHERE run_id = ?").run(W,C0(),$)}}class
|
|
504
|
-
`).trim()}function
|
|
505
|
-
`)[0]??J);return
|
|
506
|
-
`,{encoding:"utf8",mode:384}),await
|
|
507
|
-
`,"utf8");try{return await W()}finally{await sF(Z)}}catch(J){if((J instanceof Error&&"code"in J?String(J.code):"")!=="EEXIST")throw J;let X=await sC(Z),Y=X?Date.now()-Date.parse(X.acquiredAt):oF+1;if(!X||!nC(X.pid)||Y>oF){await sF(Z);continue}if(Date.now()>=Q)throw Error(`Timed out waiting for hub startup lock ${Z}`);await aC(pC)}}async function Z$($,W){try{let Z=await fetch(W?.authToken?Qj($):WQ($),{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 f1($,W,Z="/hub"){return new URL(`ws://${$}:${W}${Z}`).toString()}function WQ($){let W=new URL($);return W.protocol=W.protocol==="wss:"?"https:":"http:",W.pathname="/health",W.search="",W.toString()}function Qj($){let W=new URL(WQ($));return W.pathname="/status",W.toString()}function QA($){return vC($)}import{CLINE_HUB_DEV_PORT as tC,CLINE_HUB_PORT as eC,resolveClineBuildEnv as $P}from"@cline/shared";var WP="CLINE_HUB_HOST",ZP="CLINE_HUB_PORT",QP="CLINE_HUB_PATHNAME",Jj="127.0.0.1",jj=eC,Xj="/hub";function JA($){return $P($)==="development"?tC:jj}function Yj($={}){return($.env??process.env)[WP]?.trim()||Jj}function f6($={}){let Z=($.env??process.env)[ZP]?.trim();if(!Z)return JA($);let Q=Number.parseInt(Z,10);if(!Number.isInteger(Q)||Q<1||Q>65535)return JA($);return Q}function Vj($={}){return($.env??process.env)[QP]?.trim()||Xj}function Q1($={},W={}){return{host:$.host??Yj(W),port:$.port??f6(W),pathname:$.pathname??Vj(W)}}import{join as JP}from"node:path";var jP="shared:cline",XP="CLINE_HUB_DISCOVERY_PATH",YP="hub-production";function jA($){let W=o1($.trim());return W$(`workspace:${W||$.trim()}`)}function c0($=jP){return W$($)}function J1(){return{ownerId:YP,discoveryPath:process.env[XP]?.trim()||JP(i2(),"locks","hub","production.json")}}var LP=8000,OP=200,TP=3000,zP=100,qP=[100,250,500,1000,2000],MP="--cline-hub-daemon";function RP($){return[...$.host?["--host",$.host]:[],...typeof $.port==="number"?["--port",String($.port)]:[],...$.pathname?["--pathname",$.pathname]:[]]}function NP(){try{let $=AP(i2(),"logs","hub-daemon.log");return HP(FP($),{recursive:!0}),{fd:GP($,"a"),logPath:$}}catch{return}}function BA(){return VA()==="production"?J1():c0()}function n2($){return DP($).compatible}function XA($,W,Z){if(!W||W.url!==Z)return $;return{...$,authToken:$.authToken??W.authToken,pid:$.pid??W.pid}}async function a2($,W){try{return await Z$($,{authToken:W})}catch{return}}async function EP($,W){let Z=Date.now()+W;while(Date.now()<Z){if(!(await a2($))?.url)return!0;await new Promise((J)=>setTimeout(J,zP))}return!1}async function ZQ($,W){if(await o5($.url,$.authToken).catch(()=>!1),$.pid)try{process.kill($.pid,"SIGTERM")}catch{}let Z=await EP($.url,TP);return await v0(W).catch(()=>{return}),Z}async function a5($,W){if(n2($))return!0;return ZQ($,W)}async function HA($){if(VA()!=="production")return;let W=c0();if(W.discoveryPath===$.discoveryPath)return;let Z=await _0(W.discoveryPath);if(Z?.url)await ZQ(Z,W.discoveryPath);else await v0(W.discoveryPath).catch(()=>{return})}function wP(){let $=import.meta.url.endsWith(".ts")?"ts":"js";return UP(new URL(`./entry.${$}`,import.meta.url))}function CP($,W){let Z=wP(),Q=process.execPath?.trim();if(!Q)throw Error("unable to resolve runtime executable for hub daemon");let J=KP(Q).toLowerCase().includes("bun"),j=Z.startsWith("/$bunfs/"),X=J&&Z.toLowerCase().endsWith(".ts"),Y=j?[MP]:[...X?["--conditions=development"]:[],Z];return{launcher:Q,args:[...Y,"--cwd",$,...RP(W)],cwd:$,env:{..._P(process.env),CLINE_NO_INTERACTIVE:"1",[fP]:"1"}}}function PP($){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 Bj($,W={}){if(YA())return;let Z=CP($,W),Q=NP();try{VP(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)BP(Q.fd)}}async function D6($,W={}){for(let Z=0;;Z++)try{Bj($,W);return}catch(Q){let J=qP[Z];if(!PP(Q)||J===void 0)throw Q;await new Promise((j)=>setTimeout(j,J))}}function QQ($,W={}){if(YA())return;let Z=BA(),Q=Q1(W),J=f1(Q.host,Q.port,Q.pathname),j=W.allowPortFallback===!0&&Q.port!==0;HA(Z).catch(()=>{return}).then(()=>_0(Z.discoveryPath)).then(async(X)=>{let Y=!1;if(X?.url)if(!X.authToken){if(Y=!0,!await ZQ(X,Z.discoveryPath)&&!j)return}else{let H=await a2(X.url,X.authToken);if(H?.url&&n2(H)&&await N1(H.url,{authToken:X.authToken}))return;if(H?.url)await a5({...H,authToken:X.authToken},Z.discoveryPath);else await v0(Z.discoveryPath).catch(()=>{return})}let V=await a2(J);if(V?.url){if(n2(V)){if(!j||!Y)return}else if(!await a5({...V,authToken:void 0},Z.discoveryPath)&&!j)return}let B=j?{...Q,port:0}:Q;await D6($,B)}).catch(()=>{})}async function GA($,W={}){let Z=BA(),Q=W.host!==void 0||W.port!==void 0||W.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),J=Q1(W),j=f1(J.host,J.port,J.pathname),X=(F)=>{if(!Q)d$(F.url,F.authToken);return F};await HA(Z).catch(()=>{return});let Y=await _0(Z.discoveryPath),V=!1;if(Y?.url){let F=Y.authToken;if(!F)V=!0,await ZQ(Y,Z.discoveryPath);else{let A=await a2(Y.url,F);if(A?.url&&n2(A)&&await N1(A.url,{authToken:F}))return X({url:A.url,authToken:F});if(A?.url)await a5({...A,authToken:F},Z.discoveryPath);else await v0(Z.discoveryPath).catch(()=>{return})}}let B=await a2(j);if(B?.url){let F=XA(B,Y,j);if(n2(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 a5(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 D6($,G);let K=Date.now()+LP;while(Date.now()<K){let F=await _0(Z.discoveryPath);if(F?.url&&F.authToken){let f=await a2(F.url,F.authToken);if(f?.url&&n2(f)&&await N1(f.url,{authToken:F.authToken}))return X({url:f.url,authToken:F.authToken})}let A=await a2(j);if(A?.url&&!n2(A)){let f=XA(A,F,j);if(!await a5(f,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((f)=>setTimeout(f,OP))}throw Error("Timed out waiting for detached hub startup.")}function JQ(){return yP()==="production"?J1():c0()}function kP(){let $=globalThis.WebSocket;if(!$)throw Error("Global WebSocket is not available in this runtime. Node 22+ is required for hub mode.");return $}function fA($){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 fA($.data);return String($)}function IP($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString("utf8");if($ instanceof ArrayBuffer)return Buffer.from($).toString("utf8");return""}function KA($){let W=$,Z=IP(W.reason);return new h0("hub_connection_closed",W.code||Z?`Hub connection closed (code=${W.code??0}${Z?`, reason=${Z}`:""})`:Hj,{closeCode:W.code,closeReason:Z||void 0})}function xP($,W){if($ instanceof h0)return $;if($ instanceof Error)return new h0("hub_connect_failed",$.message);if($&&typeof $==="object"&&"error"in $&&$.error instanceof Error)return new h0("hub_connect_failed",$.error.message);let Z=$&&typeof $==="object"&&"message"in $&&typeof $.message==="string"?$.message.trim():"";if(Z)return new h0("hub_connect_failed",Z);let Q=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return new h0("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 gP=8000,mP=200,FA="*",AA=8000,vP="cline-hub-auth.",DA=new Map,_A=new Set,cP=3000,uP=3000,dP=100,Hj="Hub connection closed",lP=250,pP=5000,UA=0.5;class h0 extends Error{code;details;constructor($,W,Z){super(W);this.code=$;this.details=Z;this.name="HubTransportError"}}function Fj($){return $ instanceof h0}class _6 extends Error{command;code;constructor($,W,Z){super(Z);this.command=$;this.code=W;this.name="HubCommandError"}}function jQ($,W){return $ instanceof _6&&$.code==="hub_command_timeout"&&(W===void 0||$.command===W)}function LA($){let W=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),W)return W;let Z=Aj($.toString());return Z?DA.get(Z):void 0}function rP($){try{let Z=new URL($).hostname.toLowerCase().replace(/^\[|\]$/g,"");return Z==="localhost"||Z==="127.0.0.1"||Z==="::1"}catch{return!1}}function Aj($){if(!rP($))return;let W=new URL(l$($));return W.search="",W.hash="",W.toString()}function Gj($){let W=Aj($);return!!W&&_A.has(W)}function d$($,W){let Z=Aj($);if(Z){if(_A.add(Z),W?.trim())DA.set(Z,W)}return $}class D1{options;socket;connectPromise;clientId;currentUrl;recoveryPromise;pendingReplies=new Map;listeners=new Set;subscriptionCounts=new Map;reconnectTimer;reconnectAttempt=0;closedByClient=!1;lastCloseError=new h0("hub_connection_closed",Hj);sawSocketClose=!1;registered=!1;constructor($){this.options=$;this.clientId=$.clientId??`core-${Math.random().toString(36).slice(2,10)}-${Date.now().toString(36)}`,this.currentUrl=$.url}getClientId(){return this.clientId}getUrl(){return this.currentUrl}async connect(){if(this.socket&&(this.socket.readyState===1||this.socket.readyState===0))return this.connectPromise??Promise.resolve();this.closedByClient=!1,this.clearReconnectTimer();let $=new URL(this.currentUrl),W=this.options.authToken?.trim()||LA($);$.hash="";let Q=new(kP())($.toString(),W?[`${vP}${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 h0("hub_connect_timeout",`Timed out connecting to hub after ${AA}ms`),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0;try{Q.close()}catch{}X(this.lastCloseError)},AA);Q.addEventListener("open",()=>{if(Y)return;Y=!0,clearTimeout(V),j()}),Q.addEventListener("error",(B)=>{if(Y)return;Y=!0,clearTimeout(V),this.lastCloseError=xP(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=KA(B),this.sawSocketClose=!0;this.connectPromise=void 0,this.socket=void 0,X(this.lastCloseError)})}),Q.addEventListener("message",(j)=>{this.handleFrame(JSON.parse(fA(j)))}),Q.addEventListener("close",(j)=>{if(this.socket!==Q)return;if(!J)this.lastCloseError=KA(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=SP("hubreq_"),j=hP($,Q?.timeoutMs),X=new Promise((V,B)=>{let H=j===null?void 0:setTimeout(()=>{if(!this.pendingReplies.delete(J))return;B(new _6($,"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===d2){let V=Z??(typeof W?.sessionId==="string"?W.sessionId:void 0);throw new e1(V,Y.error.message)}throw new _6($,Y.error?.code,Y.error?.message??`Hub command ${$} failed`)}return Y}async recoverLocalHubTransport($){if(!Gj(this.currentUrl)||!Fj($))return!1;if(this.recoveryPromise)return await this.recoveryPromise;return this.recoveryPromise=(async()=>{let W=await o2({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(lP*2**this.reconnectAttempt,pP),W=Math.round($*(1-UA)+Math.random()*$*UA);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(!Gj(this.currentUrl)){this.reconnectAttempt+=1,this.scheduleReconnect();return}try{let $=await o2({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 h0("hub_connection_closed",Hj),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 h0("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 $??FA}subscriptionSessionIdFromKey($){return $===FA?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 l$($){let W=new URL($);if(W.protocol==="http:")W.protocol="ws:";else if(W.protocol==="https:")W.protocol="wss:";return W.toString()}async function N1($,W){let Z=new D1({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 Kj($,W){let Z=l$($),Q=await Z$(Z,{authToken:W?.authToken});if(!Q)return{status:"unreachable",url:Z};if(!bP(Q).compatible)return{status:"protocol_mismatch",url:Z};if(W?.verifyConnection===!0&&!await N1(Z,{workspaceRoot:W.workspaceRoot,cwd:W.cwd,authToken:W.authToken}))return{status:"unreachable",url:Z};return{status:"compatible",url:Z}}async function iP($){let W=Date.now()+gP;while(Date.now()<W){let Z=await _0($.discoveryPath);if(Z?.url){let Q=await Kj(Z.url,{verifyConnection:!0,authToken:Z.authToken});if(Q.status==="compatible")return d$(Q.url,Z.authToken)}await new Promise((Q)=>setTimeout(Q,mP))}return}async function nP($){let W=Date.now()+uP;while(Date.now()<W){if(!(await Z$($).catch(()=>{return}))?.url)return!0;await new Promise((Q)=>setTimeout(Q,dP))}return!1}function aP($,W){try{return l$($)===l$(W)}catch{return!1}}function oP($){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 sP($,W,Z){let Q=new D1({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:cP});return!oP(J.payload)}catch{return!1}finally{await Q.dispose().catch(()=>{return})}}async function s5($={}){if($.endpoint?.trim()){let J=await Kj($.endpoint);return J.status==="compatible"?J.url:void 0}let W=JQ(),Z=await _0(W.discoveryPath);if(!Z?.url)return;let Q=await Kj(Z.url,{authToken:Z.authToken});if(Q.status==="compatible")return d$(Q.url,Z.authToken);if(Q.status==="protocol_mismatch")await v0(W.discoveryPath).catch(()=>{return});return}async function o2($={}){let W=await s5($);if(W&&await N1(W,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return W;if($.endpoint?.trim())return;let Z=JQ();return await D6($.workspaceRoot??process.cwd()),await iP(Z)}async function o5($,W){let Z=new URL($),Q=W?.trim()||LA(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 Uj($=JQ()){let W=await _0($.discoveryPath);if(!W?.url)return!1;try{if(await o5(W.url,W.authToken))return!0}catch{}return!1}async function XQ($){if(!Gj($.url))return;let W=JQ(),Z=await _0(W.discoveryPath);if(!Z?.url||!aP(Z.url,$.url))return;if(!await sP(Z.url,Z.authToken,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return;if(!await Uj())return;if(!await nP(Z.url))return;return await v0(W.discoveryPath).catch(()=>{return}),await o2({workspaceRoot:$.workspaceRoot,cwd:$.cwd})}var bA={};E(bA,{HubRuntimeHost:()=>Q$});import{resolveProviderRequestHeaders as WS}from"@cline/llms";import{captureSdkError as fj,createSessionId as TA,HUB_CHECKPOINT_CAPABILITY as ZS,HUB_COMPACTION_CAPABILITY as QS,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as JS,HUB_HOOK_CAPABILITY_PREFIX as jS,HUB_MISTAKE_LIMIT_CAPABILITY as XS,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as YS,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as VS,isHubToolExecutorName as BS}from"@cline/shared";var OA={};E(OA,{createCoreSessionSnapshot:()=>E1,coreSessionSnapshotToRecord:()=>YQ});function tP($){return $?JSON.parse(JSON.stringify($)):void 0}function eP($){return $?JSON.parse(JSON.stringify($)):void 0}function $S($){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 E1($){let{session:W}=$,Z=tP(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:eP($.messages)}:{},...$.usage?{usage:{...$.usage}}:{},...$.aggregateUsage?{aggregateUsage:{...$.aggregateUsage}}:{},...(()=>{let Q=$S(Z);return Q?{checkpoint:Q}:{}})()}}function YQ($){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 L6($){if(!$)return;return JSON.parse(JSON.stringify($))}var HS=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function zA($){if(!$||typeof $!=="object"||Array.isArray($))return;return JSON.parse(JSON.stringify($))}function qA($){if(!$)return;let{userInstructionService:W,...Z}=$;return JSON.parse(JSON.stringify(Z))}function MA($,W){let Z={...$.config,sessionId:W},Q=WS({providerId:$.config.providerId,sessionId:W,source:$.source,defaultSource:A0.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:c8,openAiCodex:{accessToken:$.config.apiKey,userAgentVersion:process.env.npm_package_version},headers:{config:$.config.headers}});if(Q)Z.headers=Q;return Z}function RA($){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 s2($,W,Z){$.manifest.push(W),$.handlers.set(W.capabilityName,Z)}function NA($,W){let Z={manifest:[],handlers:new Map};for(let J of Object.keys(W.toolExecutors??{}).filter(BS)){let j=W.toolExecutors?.[J];if(typeof j!=="function")continue;s2(Z,{kind:"toolExecutor",executor:J,capabilityName:`${YS}${J}`},async({payload:X,abortSignal:Y})=>{let V=Array.isArray(X.args)?[...X.args]:[],B={...RA(X.context),signal:Y};return{result:await j(...V,B)}})}for(let J of $?.extraTools??[])s2(Z,{kind:"tool",name:J.name,description:J.description,inputSchema:L6(J.inputSchema)??{},...J.lifecycle?{lifecycle:L6(J.lifecycle)}:{},capabilityName:`${JS}${J.name}`},async({payload:j,abortSignal:X,progress:Y})=>{let V={...RA(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 HS){let j=Q[J];if(typeof j!=="function")continue;s2(Z,{kind:"hook",name:J,capabilityName:`${jS}${J}`},async({payload:X})=>({control:await j(X.context)}))}if($?.compaction?.compact){let J=$.compaction.compact;s2(Z,{kind:"compaction",capabilityName:QS,config:zA($.compaction)},async({payload:j})=>({result:await J(j.context)}))}if($?.checkpoint?.createCheckpoint){let J=$.checkpoint.createCheckpoint;s2(Z,{kind:"checkpoint",capabilityName:ZS,config:zA($.checkpoint)},async({payload:j})=>({result:await J(j.context)}))}if($?.onConsecutiveMistakeLimitReached){let J=$.onConsecutiveMistakeLimitReached;s2(Z,{kind:"mistakeLimit",capabilityName:XS},async({payload:j})=>({result:await J(j.context)}))}if($?.userInstructionService){let J=$.userInstructionService;s2(Z,{kind:"userInstructionService",capabilityName:VS},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 PA($){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 GS($){return PA($)??"Capability request was cancelled."}function KS($){if(typeof $!=="string")return $;try{return JSON.parse($)}catch{return $}}function FS($){return $==="completed"||$==="max_iterations"||$==="aborted"||$==="mistake_limit"||$==="error"}function AS($){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 EA($){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 Dj($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function p$($,W){return Dj($?.[W])??0}function US($){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:p$(W,"inputTokens"),outputTokens:p$(W,"outputTokens"),cacheReadTokens:p$(W,"cacheReadTokens"),cacheWriteTokens:p$(W,"cacheWriteTokens"),cost:Dj(W?.totalCost),totalInputTokens:p$(Z,"inputTokens"),totalOutputTokens:p$(Z,"outputTokens"),totalCacheReadTokens:p$(Z,"cacheReadTokens"),totalCacheWriteTokens:p$(Z,"cacheWriteTokens"),totalCost:Dj(Z?.totalCost)},teamAgentId:typeof Q?.teamAgentId==="string"?Q.teamAgentId:void 0,teamRole:J}}function fS($){let W=$?.result&&typeof $.result==="object"&&!Array.isArray($.result)?$.result:void 0,Z=$?.reason??W?.finishReason,Q=FS(Z)?Z:Z==="failed"?"error":"completed",J=AS($?.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 t2($,W){return $.error?.message??`hub command failed: ${W}`}function t5($){switch($){case"idle":case"completed":return"completed";case"failed":return"failed";case"aborted":return"cancelled";default:return"running"}}function SA($){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:A0.CORE,pid:typeof W?.pid==="number"?W.pid:void 0,startedAt:new Date($.createdAt).toISOString(),endedAt:t5($.status)==="running"?void 0:new Date($.updatedAt).toISOString(),exitCode:t5($.status)==="completed"?0:t5($.status)==="failed"?1:void 0,status:t5($.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 r$($){if(!$||typeof $!=="object"||Array.isArray($))return;let W=$;return W.version===1&&typeof W.sessionId==="string"?JSON.parse(JSON.stringify(W)):void 0}function DS($){let W=r$($?.snapshot);if(W)return YQ(W);let Z=$?.session;return Z?SA(Z):void 0}function wA($,W,Z){let Q=Z?.workspaceRoot?.trim()||W.config.workspaceRoot||W.config.cwd;return g0.parse({version:1,session_id:$,source:W.source??A0.CORE,pid:process.pid,started_at:new Date(Z?.createdAt??Date.now()).toISOString(),status:t5(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 CA($,W){return g0.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 Q${runtimeAddress;pendingPrompts;client;clientOptions;clientContext;events=new i5;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=w0($.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 D1({...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(!jQ($,"session.create"))return!1;let W=await XQ({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=NA($.localRuntime,W),Q=$.config.sessionId?.trim()||TA(),J=()=>this.client.command("session.create",{workspaceRoot:$.config.workspaceRoot?.trim()||$.config.cwd,cwd:$.config.cwd,sessionConfig:L6(MA($,Q)),metadata:{...$.sessionMetadata??{},source:$.source??A0.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:L6($.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=r$(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?CA(X,$):wA(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?NA(Q.localRuntime,J??{}):{manifest:[],handlers:new Map},X,Y;if(Q)X=Q.config.sessionId?.trim()||TA(),Y=MA(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:L6(Y),metadata:{...Q.sessionMetadata??{},source:Q.source??A0.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:L6(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=r$(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?CA(B,Q??{}):wA(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=r$(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=EA(Q?.usage),j=EA(Q?.aggregateUsage);return J||j?{usage:J,aggregateUsage:j}:void 0}async abort($,W){await this.client.command("run.abort",{sessionId:$,reason:PA(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))return;throw Z}return DS(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=r$(J);return j?[YQ(j)]:[]}):[];if(Z.length>0)return Z;return(W.payload?.sessions??[]).map(SA)}async listSettings($){let W=await this.client.command("settings.list",qA($));if(!W.ok)throw Error(t2(W,"settings.list"));return W.payload?.snapshot}async toggleSetting($){let W=await this.client.command("settings.toggle",qA($));if(!W.ok)throw Error(t2(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(t2(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)fj(this.telemetry,{component:"core",operation:"hub.runtime_host.update_session_compaction_state",error:Error(t2(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(t2(Z,"session.compaction.get"));return G1(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 fj(this.telemetry,{component:"core",operation:"hub.runtime_host.read_session_messages",error:Error(t2(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(t2(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 w0(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:fS($.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=r$($.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"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=US($.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=r$($.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=r$($.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&&F0(Z.status))return;this.events.emit({type:"ended",payload:{sessionId:W,reason:Q,ts:$.timestamp??Date.now()}});return}default:return}}captureDetachedHubEventError($,W,Z){try{fj(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(GS($.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=KS($.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 yA={};E(yA,{RemoteRuntimeHost:()=>O6});class O6 extends Q${constructor($){super({url:l$($.endpoint),authToken:$.authToken,clientType:$.clientType??"core-remote-runtime",displayName:$.displayName??"core remote runtime",capabilities:$.capabilities},{workspaceRoot:$.workspaceRoot,cwd:$.cwd})}}var hA={};E(hA,{SqliteSessionStore:()=>C1});import{existsSync as _S,mkdirSync as LS}from"node:fs";import{join as OS}from"node:path";import{asBool as e5,asOptionalString as w1,asString as J$,ensureSessionSchema as TS,loadSqliteDb as zS,nowIso as VQ,toBoolInt as $W}from"@cline/shared/db";import{resolveDbDataDir as qS}from"@cline/shared/storage";class C1{sessionsDirPath;db;constructor($={}){this.sessionsDirPath=$.sessionsDir??qS()}init(){this.getRawDb()}ensureSessionsDir(){if(!_S(this.sessionsDirPath))LS(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}sessionDbPath(){return OS(this.ensureSessionsDir(),"sessions.db")}getRawDb(){if(this.db)return this.db;let $=zS(this.sessionDbPath());return TS($,{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=VQ();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,C0(),$)}attachReportPathToRun($,W){this.db.prepare("UPDATE cron_runs SET report_path = ?, updated_at = ? WHERE run_id = ?").run(W,C0(),$)}}class n5{store;reconciler;watcher;eventIngress;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new i5({dbPath:$.dbPath});let W=$.specs;this.reconciler=new nJ({store:this.store,specs:W}),this.materializer=new u5({store:this.store}),this.eventIngress=new xJ({store:this.store,logger:$.logger}),this.runner=new d5({store:this.store,materializer:this.materializer,runtimeHandlers:$.runtimeHandlers,workspaceRoot:$.workspaceRoot,specs:W,logger:$.logger,pollIntervalMs:$.pollIntervalMs,claimLeaseSeconds:$.claimLeaseSeconds,globalMaxConcurrency:$.globalMaxConcurrency}),this.watcher=new aJ({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 WA={};w(WA,{manifestToSessionRecord:()=>sZ,listSessionHistoryFromBackend:()=>Zj,listSessionHistory:()=>tZ,hydrateSessionHistory:()=>$A});import{readdir as qC,readFile as sF}from"node:fs/promises";import{join as tF}from"node:path";import{formatDisplayUserInput as MC,normalizeUserInput as NC}from"@cline/shared";import{resolveSessionDataDir as eF}from"@cline/shared/storage";import{existsSync as TC}from"node:fs";import{readFile as zC}from"node:fs/promises";class a5{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 u$($){let W=$?.trim();if(!W||!TC(W))return[];try{let Z=(await zC(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 eJ($){return $?{...$}:void 0}async function aF($,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 o5($){if(typeof $!=="string")return;let W=$.trim();return W.length>0?W:void 0}function W1($){let W=o5($);if(!W)return;return W.toLowerCase()==="unknown"?void 0:W}function oZ($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function RC($){if(!$||typeof $!=="object"||Array.isArray($))return;return{...$}}function Wj($){let W=$??200;return Number.isFinite(W)?Math.max(0,Math.floor(W)):200}function EC($){if($===0)return 0;return Math.min(Math.max($*2,20),2000)}function wC($){return $.isSubagent!==!0&&!o5($.parentSessionId)}function CC($){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 sZ($){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 PC($){let W=Wj($);if(W===0)return[];let Z=eF(),J=(await qC(Z,{withFileTypes:!0}).catch(()=>[])).filter((X)=>X.isDirectory()).map((X)=>({entry:X,recency:CC(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=tF(Z,Y,`${Y}.json`),B=await sF(V,"utf8").catch(()=>{return});if(!B)return;let H;try{H=JSON.parse(B)}catch{return}let G=I0.safeParse(H);if(!G.success)return;return sZ(G.data)}))).filter((X)=>Boolean(X)).sort((X,Y)=>Y.startedAt.localeCompare(X.startedAt)).slice(0,W)}async function SC($,W,Z){let Q=Wj(W);if(Q===0)return await $.listSessions(0),[];let J=Z.includeSubagents?Q:EC(Q),j=await $.listSessions(J);return(Z.includeSubagents?j:j.filter(wC)).slice(0,Q)}function bC($){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 oF($){return $.replace(/\s+/g," ").trim()}function yC($,W){if($.length<=W)return $;return`${$.slice(0,Math.max(0,W-3)).trimEnd()}...`}function hC($){for(let W of["user","assistant"])for(let Z of $){if(Z.role!==W)continue;let Q=oF(bC(Z.content));if(!Q)continue;let J=W==="user"?oF(MC(Q)):Q,j=NC(J.split(`
|
|
505
|
+
`)[0]??J);return yC(j,50)}return}function kC($){let W=0;for(let Z of $)W+=oZ(Z.metrics?.cost)??0;return W}function IC($){let W,Z;for(let Q=$.length-1;Q>=0;Q-=1){let J=$[Q];if(!W)W=W1(J.modelInfo?.provider);if(!Z)Z=W1(J.modelInfo?.id);if(W&&Z)break}return{provider:W,model:Z}}function xC($){return W1($?.provider)??W1($?.provider&&typeof $.provider==="object"&&!Array.isArray($.provider)?$.provider.id:void 0)}function gC($){return W1($?.model)??W1($?.model&&typeof $.model==="object"&&!Array.isArray($.model)?$.model.id:void 0)}function $j($,W){let Z=RC($.metadata),Q=o5(W?.title)??o5(Z?.title),J=oZ(W?.totalCost)??oZ(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:W1(W?.provider)??W1($.provider)??xC(Z)??"",model:W1(W?.model)??W1($.model)??gC(Z)??"",metadata:j}}function mC($){let W=$.content;if(!Array.isArray(W))return!1;return W.some((Z)=>!!Z&&typeof Z==="object"&&Z.type==="tool-call")}function vC($,W){if($.status!=="running"||$.interactive!==!0)return!1;let Z=W.at(-1);return Z?.role==="assistant"&&!mC(Z)}async function cC($,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 vC(Z,Q)?{...Z,status:"idle"}:Z}))}async function $A($,W){return await Promise.all(W.map(async(Z)=>{let Q=$j(Z),J=Boolean(o5(Q.metadata?.title)),j=Boolean(W1(Q.provider)),X=Boolean(W1(Q.model)),Y=oZ(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=IC(B),G=kC(B);return $j(Z,{title:J?void 0:hC(B),provider:j?void 0:H.provider,model:X?void 0:H.model,totalCost:V||G<=0?void 0:G})}))}async function tZ($,W={}){let Z=Wj(W.limit),Q=W.includeSubagents===!0,J=await SC($,Z,{includeSubagents:Q}),j=W.includeManifestFallback===!0&&J.length<Z?await PC(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 cC($,Y);if(W.hydrate===!1)return V.map((B)=>$j(B));return await $A($,V)}async function uC($){let W=$.trim();if(!W)return;let Z=tF(eF(),W,`${W}.json`),Q=await sF(Z,"utf8").catch(()=>{return});if(!Q)return;try{let J=I0.safeParse(JSON.parse(Q));return J.success?J.data.messages_path:void 0}catch{return}}async function Zj($,W={}){let Z=new Map;return await tZ({listSessions:async(J)=>{let j=await $.listSessions(J);Z.clear();for(let X of j)Z.set(X.sessionId,X);return j.map(i4)},readSessionMessages:async(J)=>{let j=Z.get(J)?.messagesPath??await uC(J);return await u$(j)}},W)}var fU={};w(fU,{resolveSessionBackend:()=>mj,createRuntimeHost:()=>C6});import{captureSdkError as AU}from"@cline/shared";import{createSessionId as IP,isHubProtocolCompatible as xP,resolveClineBuildEnv as gP,resolveHubCommandTimeoutMs as mP}from"@cline/shared";import{spawn as FP}from"node:child_process";import{closeSync as AP,mkdirSync as UP,openSync as fP}from"node:fs";import{basename as DP,dirname as _P,join as LP}from"node:path";import{fileURLToPath as OP}from"node:url";import{CLINE_RUN_AS_HUB_DAEMON_ENV as TP,isHubDaemonProcess as FA,isHubProtocolCompatible as zP,resolveClineBuildEnv as AA,withResolvedClineBuildEnv as qP}from"@cline/shared";import{createHash as dC,randomBytes as lC}from"node:crypto";import{existsSync as pC}from"node:fs";import{chmod as rC,mkdir as Qj,readFile as JA,rm as Jj,writeFile as jA}from"node:fs/promises";import{dirname as XA,join as jj}from"node:path";import{resolveClineDataDir as i2,resolveClineDir as YA}from"@cline/shared/storage";var iC="CLINE_HUB_DISCOVERY_PATH",nC="CLINE_HUB_BUILD_ID",ZA=30000,aC=15000,oC=100;function sC($){return $.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function tC($){return dC("sha256").update($).digest("hex").slice(0,12)}function eC($){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 eZ(){return lC(32).toString("hex")}function $P($){return new Promise((W)=>setTimeout(W,$))}function WP($){return`${$}.lock`}async function ZP($){try{let W=JSON.parse(await JA(jj($,"owner.json"),"utf8"));if(typeof W.pid!=="number"||typeof W.acquiredAt!=="string")return;return{pid:W.pid,acquiredAt:W.acquiredAt}}catch{return}}async function QA($){await Jj($,{recursive:!0,force:!0}).catch(()=>{return})}function $Q(){return process.env[nC]?.trim()||String(o4.version)}function Q$($=process.argv[1]?.trim()||process.cwd()){let W=`hub-${tC($)}`,Z=process.env[iC]?.trim()||jj(i2(),"locks","hub","owners",`${sC(W)}.json`);return{ownerId:W,discoveryPath:Z}}function VA($=`hub-${Date.now().toString(36)}`){return Q$($)}async function _0($){try{let W=JSON.parse(await JA($,"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 WQ($,W){await Qj(XA($),{recursive:!0}),await Jj($,{force:!0}).catch(()=>{return}),await jA($,`${JSON.stringify(W,null,2)}
|
|
506
|
+
`,{encoding:"utf8",mode:384}),await rC($,384)}async function g0($){await Jj($,{force:!0}).catch(()=>{return})}async function ZQ($,W){let Z=WP($);await Qj(XA(Z),{recursive:!0});let Q=Date.now()+aC;while(!0)try{await Qj(Z,{recursive:!1}),await jA(jj(Z,"owner.json"),`${JSON.stringify({pid:process.pid,acquiredAt:new Date().toISOString()},null,2)}
|
|
507
|
+
`,"utf8");try{return await W()}finally{await QA(Z)}}catch(J){if((J instanceof Error&&"code"in J?String(J.code):"")!=="EEXIST")throw J;let X=await ZP(Z),Y=X?Date.now()-Date.parse(X.acquiredAt):ZA+1;if(!X||!eC(X.pid)||Y>ZA){await QA(Z);continue}if(Date.now()>=Q)throw Error(`Timed out waiting for hub startup lock ${Z}`);await $P(oC)}}async function J$($,W){try{let Z=await fetch(W?.authToken?Xj($):QQ($),{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 D1($,W,Z="/hub"){return new URL(`ws://${$}:${W}${Z}`).toString()}function QQ($){let W=new URL($);return W.protocol=W.protocol==="wss:"?"https:":"http:",W.pathname="/health",W.search="",W.toString()}function Xj($){let W=new URL(QQ($));return W.pathname="/status",W.toString()}function BA($){return pC($)}import{CLINE_HUB_DEV_PORT as QP,CLINE_HUB_PORT as JP,resolveClineBuildEnv as jP}from"@cline/shared";var XP="CLINE_HUB_HOST",YP="CLINE_HUB_PORT",VP="CLINE_HUB_PATHNAME",Yj="127.0.0.1",Vj=JP,Bj="/hub";function HA($){return jP($)==="development"?QP:Vj}function Hj($={}){return($.env??process.env)[XP]?.trim()||Yj}function D6($={}){let Z=($.env??process.env)[YP]?.trim();if(!Z)return HA($);let Q=Number.parseInt(Z,10);if(!Number.isInteger(Q)||Q<1||Q>65535)return HA($);return Q}function Gj($={}){return($.env??process.env)[VP]?.trim()||Bj}function Z1($={},W={}){return{host:$.host??Hj(W),port:$.port??D6(W),pathname:$.pathname??Gj(W)}}import{join as BP}from"node:path";var HP="shared:cline",GP="CLINE_HUB_DISCOVERY_PATH",KP="hub-production";function GA($){let W=R1($.trim());return Q$(`workspace:${W||$.trim()}`)}function m0($=HP){return Q$($)}function Q1(){return{ownerId:KP,discoveryPath:process.env[GP]?.trim()||BP(i2(),"locks","hub","production.json")}}var MP=8000,NP=200,RP=3000,EP=100,wP=[100,250,500,1000,2000],CP="--cline-hub-daemon";function PP($){return[...$.host?["--host",$.host]:[],...typeof $.port==="number"?["--port",String($.port)]:[],...$.pathname?["--pathname",$.pathname]:[]]}function SP(){try{let $=LP(i2(),"logs","hub-daemon.log");return UP(_P($),{recursive:!0}),{fd:fP($,"a"),logPath:$}}catch{return}}function UA(){return AA()==="production"?Q1():m0()}function n2($){return zP($).compatible}function KA($,W,Z){if(!W||W.url!==Z)return $;return{...$,authToken:$.authToken??W.authToken,pid:$.pid??W.pid}}async function a2($,W){try{return await J$($,{authToken:W})}catch{return}}async function bP($,W){let Z=Date.now()+W;while(Date.now()<Z){if(!(await a2($))?.url)return!0;await new Promise((J)=>setTimeout(J,EP))}return!1}async function JQ($,W){if(await t5($.url,$.authToken).catch(()=>!1),$.pid)try{process.kill($.pid,"SIGTERM")}catch{}let Z=await bP($.url,RP);return await g0(W).catch(()=>{return}),Z}async function s5($,W){if(n2($))return!0;return JQ($,W)}async function fA($){if(AA()!=="production")return;let W=m0();if(W.discoveryPath===$.discoveryPath)return;let Z=await _0(W.discoveryPath);if(Z?.url)await JQ(Z,W.discoveryPath);else await g0(W.discoveryPath).catch(()=>{return})}function yP(){let $=import.meta.url.endsWith(".ts")?"ts":"js";return OP(new URL(`./entry.${$}`,import.meta.url))}function hP($,W){let Z=yP(),Q=process.execPath?.trim();if(!Q)throw Error("unable to resolve runtime executable for hub daemon");let J=DP(Q).toLowerCase().includes("bun"),j=Z.startsWith("/$bunfs/"),X=J&&Z.toLowerCase().endsWith(".ts"),Y=j?[CP]:[...X?["--conditions=development"]:[],Z];return{launcher:Q,args:[...Y,"--cwd",$,...PP(W)],cwd:$,env:{...qP(process.env),CLINE_NO_INTERACTIVE:"1",[TP]:"1"}}}function kP($){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 Kj($,W={}){if(FA())return;let Z=hP($,W),Q=SP();try{FP(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)AP(Q.fd)}}async function _6($,W={}){for(let Z=0;;Z++)try{Kj($,W);return}catch(Q){let J=wP[Z];if(!kP(Q)||J===void 0)throw Q;await new Promise((j)=>setTimeout(j,J))}}function jQ($,W={}){if(FA())return;let Z=UA(),Q=Z1(W),J=D1(Q.host,Q.port,Q.pathname),j=W.allowPortFallback===!0&&Q.port!==0;fA(Z).catch(()=>{return}).then(()=>_0(Z.discoveryPath)).then(async(X)=>{let Y=!1;if(X?.url)if(!X.authToken){if(Y=!0,!await JQ(X,Z.discoveryPath)&&!j)return}else{let H=await a2(X.url,X.authToken);if(H?.url&&n2(H)&&await w1(H.url,{authToken:X.authToken}))return;if(H?.url)await s5({...H,authToken:X.authToken},Z.discoveryPath);else await g0(Z.discoveryPath).catch(()=>{return})}let V=await a2(J);if(V?.url){if(n2(V)){if(!j||!Y)return}else if(!await s5({...V,authToken:void 0},Z.discoveryPath)&&!j)return}let B=j?{...Q,port:0}:Q;await _6($,B)}).catch(()=>{})}async function DA($,W={}){let Z=UA(),Q=W.host!==void 0||W.port!==void 0||W.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),J=Z1(W),j=D1(J.host,J.port,J.pathname),X=(F)=>{if(!Q)d$(F.url,F.authToken);return F};await fA(Z).catch(()=>{return});let Y=await _0(Z.discoveryPath),V=!1;if(Y?.url){let F=Y.authToken;if(!F)V=!0,await JQ(Y,Z.discoveryPath);else{let A=await a2(Y.url,F);if(A?.url&&n2(A)&&await w1(A.url,{authToken:F}))return X({url:A.url,authToken:F});if(A?.url)await s5({...A,authToken:F},Z.discoveryPath);else await g0(Z.discoveryPath).catch(()=>{return})}}let B=await a2(j);if(B?.url){let F=KA(B,Y,j);if(n2(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 s5(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 _6($,G);let K=Date.now()+MP;while(Date.now()<K){let F=await _0(Z.discoveryPath);if(F?.url&&F.authToken){let f=await a2(F.url,F.authToken);if(f?.url&&n2(f)&&await w1(f.url,{authToken:F.authToken}))return X({url:f.url,authToken:F.authToken})}let A=await a2(j);if(A?.url&&!n2(A)){let f=KA(A,F,j);if(!await s5(f,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((f)=>setTimeout(f,NP))}throw Error("Timed out waiting for detached hub startup.")}function XQ(){return gP()==="production"?Q1():m0()}function vP(){let $=globalThis.WebSocket;if(!$)throw Error("Global WebSocket is not available in this runtime. Node 22+ is required for hub mode.");return $}function zA($){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 zA($.data);return String($)}function cP($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString("utf8");if($ instanceof ArrayBuffer)return Buffer.from($).toString("utf8");return""}function _A($){let W=$,Z=cP(W.reason);return new b0("hub_connection_closed",W.code||Z?`Hub connection closed (code=${W.code??0}${Z?`, reason=${Z}`:""})`:Fj,{closeCode:W.code,closeReason:Z||void 0})}function uP($,W){if($ instanceof b0)return $;if($ instanceof Error)return new b0("hub_connect_failed",$.message);if($&&typeof $==="object"&&"error"in $&&$.error instanceof Error)return new b0("hub_connect_failed",$.error.message);let Z=$&&typeof $==="object"&&"message"in $&&typeof $.message==="string"?$.message.trim():"";if(Z)return new b0("hub_connect_failed",Z);let Q=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return new b0("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 dP=8000,lP=200,LA="*",OA=8000,pP="cline-hub-auth.",qA=new Map,MA=new Set,rP=3000,iP=3000,nP=100,Fj="Hub connection closed",aP=250,oP=5000,TA=0.5;class b0 extends Error{code;details;constructor($,W,Z){super(W);this.code=$;this.details=Z;this.name="HubTransportError"}}function fj($){return $ instanceof b0}class L6 extends Error{command;code;constructor($,W,Z){super(Z);this.command=$;this.code=W;this.name="HubCommandError"}}function YQ($,W){return $ instanceof L6&&$.code==="hub_command_timeout"&&(W===void 0||$.command===W)}function NA($){let W=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),W)return W;let Z=Dj($.toString());return Z?qA.get(Z):void 0}function sP($){try{let Z=new URL($).hostname.toLowerCase().replace(/^\[|\]$/g,"");return Z==="localhost"||Z==="127.0.0.1"||Z==="::1"}catch{return!1}}function Dj($){if(!sP($))return;let W=new URL(l$($));return W.search="",W.hash="",W.toString()}function Aj($){let W=Dj($);return!!W&&MA.has(W)}function d$($,W){let Z=Dj($);if(Z){if(MA.add(Z),W?.trim())qA.set(Z,W)}return $}class _1{options;socket;connectPromise;clientId;currentUrl;recoveryPromise;pendingReplies=new Map;listeners=new Set;subscriptionCounts=new Map;reconnectTimer;reconnectAttempt=0;closedByClient=!1;lastCloseError=new b0("hub_connection_closed",Fj);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()||NA($);$.hash="";let Q=new(vP())($.toString(),W?[`${pP}${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 b0("hub_connect_timeout",`Timed out connecting to hub after ${OA}ms`),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0;try{Q.close()}catch{}X(this.lastCloseError)},OA);Q.addEventListener("open",()=>{if(Y)return;Y=!0,clearTimeout(V),j()}),Q.addEventListener("error",(B)=>{if(Y)return;Y=!0,clearTimeout(V),this.lastCloseError=uP(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=_A(B),this.sawSocketClose=!0;this.connectPromise=void 0,this.socket=void 0,X(this.lastCloseError)})}),Q.addEventListener("message",(j)=>{this.handleFrame(JSON.parse(zA(j)))}),Q.addEventListener("close",(j)=>{if(this.socket!==Q)return;if(!J)this.lastCloseError=_A(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=mP($,Q?.timeoutMs),X=new Promise((V,B)=>{let H=j===null?void 0:setTimeout(()=>{if(!this.pendingReplies.delete(J))return;B(new L6($,"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===d2){let V=Z??(typeof W?.sessionId==="string"?W.sessionId:void 0);throw new W$(V,Y.error.message)}throw new L6($,Y.error?.code,Y.error?.message??`Hub command ${$} failed`)}return Y}async recoverLocalHubTransport($){if(!Aj(this.currentUrl)||!fj($))return!1;if(this.recoveryPromise)return await this.recoveryPromise;return this.recoveryPromise=(async()=>{let W=await o2({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(aP*2**this.reconnectAttempt,oP),W=Math.round($*(1-TA)+Math.random()*$*TA);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(!Aj(this.currentUrl)){this.reconnectAttempt+=1,this.scheduleReconnect();return}try{let $=await o2({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 b0("hub_connection_closed",Fj),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 b0("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 $??LA}subscriptionSessionIdFromKey($){return $===LA?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 l$($){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 _1({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 Uj($,W){let Z=l$($),Q=await J$(Z,{authToken:W?.authToken});if(!Q)return{status:"unreachable",url:Z};if(!xP(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 tP($){let W=Date.now()+dP;while(Date.now()<W){let Z=await _0($.discoveryPath);if(Z?.url){let Q=await Uj(Z.url,{verifyConnection:!0,authToken:Z.authToken});if(Q.status==="compatible")return d$(Q.url,Z.authToken)}await new Promise((Q)=>setTimeout(Q,lP))}return}async function eP($){let W=Date.now()+iP;while(Date.now()<W){if(!(await J$($).catch(()=>{return}))?.url)return!0;await new Promise((Q)=>setTimeout(Q,nP))}return!1}function $S($,W){try{return l$($)===l$(W)}catch{return!1}}function WS($){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 ZS($,W,Z){let Q=new _1({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:rP});return!WS(J.payload)}catch{return!1}finally{await Q.dispose().catch(()=>{return})}}async function e5($={}){if($.endpoint?.trim()){let J=await Uj($.endpoint);return J.status==="compatible"?J.url:void 0}let W=XQ(),Z=await _0(W.discoveryPath);if(!Z?.url)return;let Q=await Uj(Z.url,{authToken:Z.authToken});if(Q.status==="compatible")return d$(Q.url,Z.authToken);if(Q.status==="protocol_mismatch")await g0(W.discoveryPath).catch(()=>{return});return}async function o2($={}){let W=await e5($);if(W&&await w1(W,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return W;if($.endpoint?.trim())return;let Z=XQ();return await _6($.workspaceRoot??process.cwd()),await tP(Z)}async function t5($,W){let Z=new URL($),Q=W?.trim()||NA(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 _j($=XQ()){let W=await _0($.discoveryPath);if(!W?.url)return!1;try{if(await t5(W.url,W.authToken))return!0}catch{}return!1}async function VQ($){if(!Aj($.url))return;let W=XQ(),Z=await _0(W.discoveryPath);if(!Z?.url||!$S(Z.url,$.url))return;if(!await ZS(Z.url,Z.authToken,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return;if(!await _j())return;if(!await eP(Z.url))return;return await g0(W.discoveryPath).catch(()=>{return}),await o2({workspaceRoot:$.workspaceRoot,cwd:$.cwd})}var gA={};w(gA,{HubRuntimeHost:()=>j$});import{resolveProviderRequestHeaders as XS}from"@cline/llms";import{captureSdkError as Lj,createSessionId as EA,HUB_CHECKPOINT_CAPABILITY as YS,HUB_COMPACTION_CAPABILITY as VS,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as BS,HUB_HOOK_CAPABILITY_PREFIX as HS,HUB_MISTAKE_LIMIT_CAPABILITY as GS,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as KS,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as FS,isHubToolExecutorName as AS}from"@cline/shared";var RA={};w(RA,{createCoreSessionSnapshot:()=>C1,coreSessionSnapshotToRecord:()=>BQ});function QS($){return $?JSON.parse(JSON.stringify($)):void 0}function JS($){return $?JSON.parse(JSON.stringify($)):void 0}function jS($){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=QS(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:JS($.messages)}:{},...$.usage?{usage:{...$.usage}}:{},...$.aggregateUsage?{aggregateUsage:{...$.aggregateUsage}}:{},...(()=>{let Q=jS(Z);return Q?{checkpoint:Q}:{}})()}}function BQ($){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 O6($){if(!$)return;return JSON.parse(JSON.stringify($))}var US=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function wA($){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 PA($,W){let Z={...$.config,sessionId:W},Q=XS({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:u8,openAiCodex:{accessToken:$.config.apiKey,userAgentVersion:process.env.npm_package_version},headers:{config:$.config.headers}});if(Q)Z.headers=Q;return Z}function SA($){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 s2($,W,Z){$.manifest.push(W),$.handlers.set(W.capabilityName,Z)}function bA($,W){let Z={manifest:[],handlers:new Map};for(let J of Object.keys(W.toolExecutors??{}).filter(AS)){let j=W.toolExecutors?.[J];if(typeof j!=="function")continue;s2(Z,{kind:"toolExecutor",executor:J,capabilityName:`${KS}${J}`},async({payload:X,abortSignal:Y})=>{let V=Array.isArray(X.args)?[...X.args]:[],B={...SA(X.context),signal:Y};return{result:await j(...V,B)}})}for(let J of $?.extraTools??[])s2(Z,{kind:"tool",name:J.name,description:J.description,inputSchema:O6(J.inputSchema)??{},...J.lifecycle?{lifecycle:O6(J.lifecycle)}:{},capabilityName:`${BS}${J.name}`},async({payload:j,abortSignal:X,progress:Y})=>{let V={...SA(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 US){let j=Q[J];if(typeof j!=="function")continue;s2(Z,{kind:"hook",name:J,capabilityName:`${HS}${J}`},async({payload:X})=>({control:await j(X.context)}))}if($?.compaction?.compact){let J=$.compaction.compact;s2(Z,{kind:"compaction",capabilityName:VS,config:wA($.compaction)},async({payload:j})=>({result:await J(j.context)}))}if($?.checkpoint?.createCheckpoint){let J=$.checkpoint.createCheckpoint;s2(Z,{kind:"checkpoint",capabilityName:YS,config:wA($.checkpoint)},async({payload:j})=>({result:await J(j.context)}))}if($?.onConsecutiveMistakeLimitReached){let J=$.onConsecutiveMistakeLimitReached;s2(Z,{kind:"mistakeLimit",capabilityName:GS},async({payload:j})=>({result:await J(j.context)}))}if($?.userInstructionService){let J=$.userInstructionService;s2(Z,{kind:"userInstructionService",capabilityName:FS},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 IA($){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 fS($){return IA($)??"Capability request was cancelled."}function DS($){if(typeof $!=="string")return $;try{return JSON.parse($)}catch{return $}}function _S($){return $==="completed"||$==="max_iterations"||$==="aborted"||$==="mistake_limit"||$==="error"}function LS($){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 yA($){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 Oj($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function p$($,W){return Oj($?.[W])??0}function OS($){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:p$(W,"inputTokens"),outputTokens:p$(W,"outputTokens"),cacheReadTokens:p$(W,"cacheReadTokens"),cacheWriteTokens:p$(W,"cacheWriteTokens"),cost:Oj(W?.totalCost),totalInputTokens:p$(Z,"inputTokens"),totalOutputTokens:p$(Z,"outputTokens"),totalCacheReadTokens:p$(Z,"cacheReadTokens"),totalCacheWriteTokens:p$(Z,"cacheWriteTokens"),totalCost:Oj(Z?.totalCost)},teamAgentId:typeof Q?.teamAgentId==="string"?Q.teamAgentId:void 0,teamRole:J}}function TS($){let W=$?.result&&typeof $.result==="object"&&!Array.isArray($.result)?$.result:void 0,Z=$?.reason??W?.finishReason,Q=_S(Z)?Z:Z==="failed"?"error":"completed",J=LS($?.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 t2($,W){return $.error?.message??`hub command failed: ${W}`}function $W($){switch($){case"idle":case"completed":return"completed";case"failed":return"failed";case"aborted":return"cancelled";default:return"running"}}function xA($){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:$W($.status)==="running"?void 0:new Date($.updatedAt).toISOString(),exitCode:$W($.status)==="completed"?0:$W($.status)==="failed"?1:void 0,status:$W($.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 r$($){if(!$||typeof $!=="object"||Array.isArray($))return;let W=$;return W.version===1&&typeof W.sessionId==="string"?JSON.parse(JSON.stringify(W)):void 0}function zS($){let W=r$($?.snapshot);if(W)return BQ(W);let Z=$?.session;return Z?xA(Z):void 0}function hA($,W,Z){let Q=Z?.workspaceRoot?.trim()||W.config.workspaceRoot||W.config.cwd;return I0.parse({version:1,session_id:$,source:W.source??F0.CORE,pid:process.pid,started_at:new Date(Z?.createdAt??Date.now()).toISOString(),status:$W(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 kA($,W){return I0.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 a5;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=w0($.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 _1({...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(!YQ($,"session.create"))return!1;let W=await VQ({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=bA($.localRuntime,W),Q=$.config.sessionId?.trim()||EA(),J=()=>this.client.command("session.create",{workspaceRoot:$.config.workspaceRoot?.trim()||$.config.cwd,cwd:$.config.cwd,sessionConfig:O6(PA($,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:O6($.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=r$(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?kA(X,$):hA(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?bA(Q.localRuntime,J??{}):{manifest:[],handlers:new Map},X,Y;if(Q)X=Q.config.sessionId?.trim()||EA(),Y=PA(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:O6(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:O6(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=r$(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?kA(B,Q??{}):hA(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=r$(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=yA(Q?.usage),j=yA(Q?.aggregateUsage);return J||j?{usage:J,aggregateUsage:j}:void 0}async abort($,W){await this.client.command("run.abort",{sessionId:$,reason:IA(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 zS(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=r$(J);return j?[BQ(j)]:[]}):[];if(Z.length>0)return Z;return(W.payload?.sessions??[]).map(xA)}async listSettings($){let W=await this.client.command("settings.list",CA($));if(!W.ok)throw Error(t2(W,"settings.list"));return W.payload?.snapshot}async toggleSetting($){let W=await this.client.command("settings.toggle",CA($));if(!W.ok)throw Error(t2(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(t2(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)Lj(this.telemetry,{component:"core",operation:"hub.runtime_host.update_session_compaction_state",error:Error(t2(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(t2(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 Lj(this.telemetry,{component:"core",operation:"hub.runtime_host.read_session_messages",error:Error(t2(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(t2(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 w0(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:TS($.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=r$($.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=OS($.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=r$($.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=r$($.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{Lj(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(fS($.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=DS($.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 mA={};w(mA,{RemoteRuntimeHost:()=>T6});class T6 extends j${constructor($){super({url:l$($.endpoint),authToken:$.authToken,clientType:$.clientType??"core-remote-runtime",displayName:$.displayName??"core remote runtime",capabilities:$.capabilities},{workspaceRoot:$.workspaceRoot,cwd:$.cwd})}}var vA={};w(vA,{SqliteSessionStore:()=>S1});import{existsSync as qS,mkdirSync as MS}from"node:fs";import{join as NS}from"node:path";import{asBool as WW,asOptionalString as P1,asString as X$,ensureSessionSchema as RS,loadSqliteDb as ES,nowIso as HQ,toBoolInt as ZW}from"@cline/shared/db";import{resolveDbDataDir as wS}from"@cline/shared/storage";class S1{sessionsDirPath;db;constructor($={}){this.sessionsDirPath=$.sessionsDir??wS()}init(){this.getRawDb()}ensureSessionsDir(){if(!qS(this.sessionsDirPath))MS(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}sessionDbPath(){return NS(this.ensureSessionsDir(),"sessions.db")}getRawDb(){if(this.db)return this.db;let $=ES(this.sessionDbPath());return RS($,{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=HQ();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,ZW($.interactive),$.provider,$.model,$.cwd,$.workspaceRoot,$.teamName??null,ZW($.enableTools),ZW($.enableSpawn),ZW($.enableTeams),$.parentSessionId??null,$.parentAgentId??null,$.agentId??null,$.conversationId??null,ZW($.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(HQ()),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:HQ(),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:WW(W.interactive),provider:X$(W.provider),model:X$(W.model),cwd:X$(W.cwd),workspaceRoot:X$(W.workspace_root),teamName:P1(W.team_name),enableTools:WW(W.enable_tools),enableSpawn:WW(W.enable_spawn),enableTeams:WW(W.enable_teams),parentSessionId:P1(W.parent_session_id),parentAgentId:P1(W.parent_agent_id),agentId:P1(W.agent_id),conversationId:P1(W.conversation_id),isSubagent:WW(W.is_subagent),prompt:P1(W.prompt),metadata:(()=>{let Z=P1(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:P1(W.hook_path),messagesPath:P1(W.messages_path),updatedAt:P1(W.updated_at)??HQ()}}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}}z6();import{existsSync as yj,mkdirSync as Eb,readFileSync as XU,renameSync as wb,writeFileSync as Cb}from"node:fs";import{join as YU}from"node:path";import{resolveSessionDataDir as Pb}from"@cline/shared/storage";import{dirname as Nb}from"node:path";import{nanoid as Rb}from"nanoid";import{appendFileSync as rS,existsSync as iS,mkdirSync as lA,readFileSync as nS,writeFileSync as pA}from"node:fs";import{readFile as rA,rm as aS}from"node:fs/promises";import{dirname as iA,join as oS}from"node:path";import{ensureHookLogDir as sS}from"@cline/shared/storage";import{randomUUID as cS}from"node:crypto";import{mkdir as uS,open as uA,rename as dS,rm as lS}from"node:fs/promises";import{dirname as cA}from"node:path";async function pS($){let W;try{W=await uA($,"r"),await W.sync()}catch{}finally{if(W!==void 0)try{await W.close()}catch{}}}async function dA($,W){await uS(cA($),{recursive:!0});let Z=`${$}.${process.pid}.${cS()}.tmp`,Q;try{Q=await uA(Z,"wx"),await Q.writeFile(W,"utf8"),await Q.sync(),await Q.close(),Q=void 0,await dS(Z,$),await pS(cA($))}catch(J){if(Q!==void 0)try{await Q.close()}catch{}try{await lS(Z,{force:!0})}catch{}throw J}}function tS($){return typeof $==="object"&&$!==null&&"code"in $&&$.code==="ENOENT"}class Tj{adapter;messagesArtifactUploader;logger;artifacts;constructor($,W,Z){this.adapter=$;this.messagesArtifactUploader=W;this.logger=Z;this.artifacts=new UJ(()=>this.ensureSessionsDir())}ensureSessionsDir(){return this.adapter.ensureSessionsDir()}initializeMessagesFile($,W,Z){JG(W,Z,S3($))}writeSessionManifest($,W){lA(iA($),{recursive:!0}),pA($,`${JSON.stringify(I0.parse(W),null,2)}
|
|
518
|
+
`,"utf8")}readSessionManifest($){return this.readManifestFile($).manifest}async readSessionManifestTitle($){let W=this.artifacts.sessionManifestPath($,!1),Z;try{Z=await rA(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(!iS(W))return{path:W};try{return{path:W,manifest:I0.parse(JSON.parse(nS(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=b3({updatedAt:X0(),context:S3($),messages:W,systemPrompt:Z}),j=`${JSON.stringify(J,null,2)}
|
|
519
|
+
`;if(lA(iA(Q),{recursive:!0}),pA(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 rA(W,"utf8")))}catch(Z){if(tS(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=G4.parse(W);await dA(Z,`${JSON.stringify(Q,null,2)}
|
|
520
|
+
`),this.updateCompactionPath($,Z)}async deleteSessionCompactionState($){await aS(this.resolveCompactionPath($),{force:!0}),this.updateCompactionPath($,void 0)}appendStaleSessionHookLog($,W,Z,Q,J){let X=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??oS(sS(),"hooks.jsonl");rS(X,`${JSON.stringify({ts:$,hookName:"session_shutdown",reason:Q,sessionId:W,pid:Z,source:J})}
|
|
521
|
+
`,"utf8")}}import{appendFileSync as eS}from"node:fs";import{join as $b}from"node:path";import{resolveRootSessionId as nA}from"@cline/shared";import{ensureHookLogDir as Wb}from"@cline/shared/storage";import{z as zj}from"zod";var Zb="subagent",Qb=zj.looseObject({task:zj.string().optional(),systemPrompt:zj.string().optional()});class GQ{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:Zb,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:n4({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=nA($.sessionContext);if(!W)return;let Z=Qb.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=g8(W,$.agentId),J=await this.adapter.getSession(Q),j=X0(),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:n4({metadata:J.metadata??void 0,prompt:J.prompt??Y??null}),expectedStatusLock:J.statusLock}),Q}async upsertSubagentSessionFromHook($){if(!$.parent_agent_id)return;let W=nA($.sessionContext);if(!W)return;if($.hookName==="session_shutdown"){let Z=g8(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($,p4(W))}async applySubagentStatusBySessionId($,W){let Z=await this.adapter.getSession($);if(!Z)return;let Q=K0(W)?null:X0(),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=d4($,W),j=X0(),{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)??$b(Wb(),"hooks.jsonl");eS(Z,`${JSON.stringify({ts:X0(),...$})}
|
|
522
|
+
`,"utf8")}}import{formatUserInputBlock as Mb}from"@cline/shared";var jU={};w(jU,{toTeamProgressLifecycleEvent:()=>R6,sanitizeTeamName:()=>nH,reviveTeamStateDates:()=>m9,parseConfiguredAgentConfig:()=>QW,loadConfiguredAgentConfigs:()=>q6,createWorkerReviewerTeam:()=>JU,createSpawnAgentTool:()=>w$,createDelegatedAgentConfigProvider:()=>R$,createDelegatedAgent:()=>E$,createConfiguredAgentTools:()=>M6,createAgentTeamsTools:()=>q2,createAgentTeam:()=>Nj,buildTeamProgressSummary:()=>N6,buildDelegatedAgentConfig:()=>T2,buildConfiguredAgentToolName:()=>JW,buildConfiguredAgentToolDescriptors:()=>jW,bootstrapAgentTeams:()=>x8,AgentTeamsRuntime:()=>e2,AgentTeam:()=>w6});import{existsSync as Jb,readdirSync as jb,readFileSync as Xb}from"node:fs";import{basename as aA,extname as Yb,join as Vb}from"node:path";import{resolveAgentConfigSearchPaths as Bb}from"@cline/shared/storage";import sA from"yaml";import{z as y0}from"zod";var tA=y0.object({name:y0.string().trim().min(1),description:y0.string().trim().min(1),tools:y0.union([y0.string(),y0.array(y0.string())]).optional(),skills:y0.union([y0.string(),y0.array(y0.string())]).optional(),providerId:y0.string().trim().min(1).optional(),modelId:y0.string().trim().min(1).optional(),maxIterations:y0.number().int().positive().optional()});function Hb($){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=sA.parse(V);if(!B||typeof B!=="object"||Array.isArray(B))continue;tA.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 oA($){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 Gb($){return $.trim().toLowerCase()}function Kb($){let W=Yb($).toLowerCase();return W===".yml"||W===".yaml"}function QW($,W={}){let{frontmatter:Z,body:Q}=Hb($),J=sA.parse(Z);if(!J||typeof J!=="object"||Array.isArray(J))throw Error("Agent config frontmatter must be a YAML mapping.");let j=tA.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:oA(j.tools),skills:oA(j.skills),providerId:j.providerId,modelId:j.modelId,maxIterations:j.maxIterations,systemPrompt:X,path:W.path}}function q6($){let W=$.searchPaths??Bb($.workspaceRoot),Z=new Map,Q=[];for(let j of W.filter(Boolean)){if(!Jb(j))continue;let X;try{X=jb(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()||!Kb(Y.name))continue;let V=Vb(j,Y.name);try{let B=Xb(V,"utf8"),H=QW(B,{path:V}),G=Gb(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?aA(j.path):j.name).localeCompare(X.path?aA(X.path):X.name)),errors:Q}}import{createTool as Fb,zodToJsonSchema as Ab}from"@cline/shared";import{z as eA}from"zod";var qj="subagent_",KQ=64,Ub=eA.object({prompt:eA.string().trim().min(1).describe("Task for the subagent to perform")});function fb($){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 Db($){let W=2166136261;for(let Z=0;Z<$.length;Z++)W^=$.charCodeAt(Z),W=Math.imul(W,16777619);return(W>>>0).toString(36)}function JW($){let W=fb($)||"agent",Z=Db($).slice(0,6),Q=`${qj}${W}`;if(Q.length<=KQ)return Q;let J=KQ-qj.length-Z.length-1,j=W.slice(0,Math.max(1,J));return`${qj}${j}_${Z}`.slice(0,KQ)}function jW($){let W=new Set,Z=[];for(let Q of[...$].sort((J,j)=>J.name.localeCompare(j.name))){let J=JW(Q.name),j=J,X=2;while(W.has(j)){let Y=`_${X++}`,V=Math.max(1,KQ-Y.length);j=`${J.slice(0,V)}${Y}`}W.add(j),Z.push({toolName:j,config:Q})}return Z}function _b($,W){return{...$,providerId:W.providerId??$.providerId,modelId:W.modelId??$.modelId,maxIterations:W.maxIterations??$.maxIterations}}function M6($){return jW($.agents).map(({toolName:W,config:Z})=>{return Fb({name:W,description:`Use the "${Z.name}" subagent: ${Z.description}`,inputSchema:Ab(Ub),execute:async(J,j)=>{let X=$.configProvider.getRuntimeConfig(),Y=R$(_b(X,Z)),V=$.createSubAgentTools?await $.createSubAgentTools(Z,J,j):[],B=E$({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),f={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:f,agentResult:A})}catch{}return f}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 b1(){return new Date().toISOString()}function $U($,W){if(W<=0)return 0;return Math.round($/W*100)}function Lb($,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 N6($,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((D)=>{return K.get(D)?.status==="completed"}))H.push(U.id)}let F=[],A,f=0;for(let U of W.runs){if(J[U.status]+=1,U.status==="queued"||U.status==="running")F.push(U.id);let _=U.startedAt.getTime();if(_>=f)f=_,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:b1(),members:{total:W.members.length,byStatus:Z,leadCount:Y,teammateCount:V},tasks:{total:W.tasks.length,byStatus:Q,blockedTaskIds:B,readyTaskIds:H,completionPct:$U(G,W.tasks.length)},runs:{total:W.runs.length,byStatus:J,activeRunIds:F,latestRunId:A},outcomes:{total:W.outcomes.length,byStatus:j,finalizedPct:$U(j.finalized,W.outcomes.length),missingRequiredSections:Lb(W.outcomes,W.outcomeFragments)},fragments:{total:W.outcomeFragments.length,byStatus:X}}}function R6($){let{event:W}=$;switch(W.type){case"team_task_updated":return{teamName:$.teamName,sessionId:$.sessionId,eventType:W.type,ts:b1(),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:b1(),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:b1(),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:b1(),outcomeId:W.outcome.id};case"outcome_fragment_attached":case"outcome_fragment_reviewed":return{teamName:$.teamName,sessionId:$.sessionId,eventType:W.type,ts:b1(),outcomeId:W.fragment.outcomeId,fragmentId:W.fragment.id,agentId:W.fragment.sourceAgentId};case"team_message":return{teamName:$.teamName,sessionId:$.sessionId,eventType:W.type,ts:b1(),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:b1(),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:b1(),agentId:W.agentId}}return{teamName:$.teamName,sessionId:$.sessionId,eventType:W.type,ts:b1()}}import{sanitizeFileName as Ob,TeamMessageType as m}from"@cline/shared";import{nanoid as Tb}from"nanoid";import{TeamMessageType as _o}from"@cline/shared";function Mj($){if(typeof DOMException<"u"&&$ instanceof DOMException&&$.name==="AbortError")return!0;if(!($ instanceof Error))return!1;return $.name==="AbortError"||$.message.toLowerCase().includes("aborted")}function WU($,W){return $?.status==="stopped"&&Mj(W)}var zb=600000,ZU="recovered_queued";function qb($){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 w6{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 N$(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 Nj($,W){return new w6($,W)}function JU($){let W=Nj({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 e2{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_${
|
|
529
|
+
${J.text}`);return{workerResult:J,reviewResult:j}},Z}class e2{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_${Ob(Tb(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,E6($.tasks.map((Z)=>Z.id),"task_")),this.messageCounter=Math.max(this.messageCounter,E6($.mailbox.map((Z)=>Z.id),"msg_")),this.missionCounter=Math.max(this.missionCounter,E6($.missionLog.map((Z)=>Z.id),"log_")),this.runCounter=Math.max(this.runCounter,E6(($.runs??[]).map((Z)=>Z.id),"run_")),this.outcomeCounter=Math.max(this.outcomeCounter,E6(($.outcomes??[]).map((Z)=>Z.id),"out_")),this.outcomeFragmentCounter=Math.max(this.outcomeFragmentCounter,E6(($.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:zb,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 N$(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(!Mj(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()}),!aA(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===oA;$.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?_b($):$.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(aA(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 sA(W);return{...Z}}async awaitAllRuns($=250){while(Array.from(this.runs.values()).some((W)=>["queued","running"].includes(W.status)))await sA($);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=oA,!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(!Tj(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()}),!WU(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===ZU;$.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?qb($):$.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(WU(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 QU(W);return{...Z}}async awaitAllRuns($=250){while(Array.from(this.runs.values()).some((W)=>["queued","running"].includes(W.status)))await QU($);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=ZU,!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(!Mj(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 QU($){return new Promise((W)=>setTimeout(W,$))}function E6($,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 Rj($,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}),FQ($);break}default:break}}async function Ej($,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 wj($,W,Z,Q){if(!$.runtime.teamRuntime)return;let J=$.runtime.teamRuntime.getTeamName();Q({type:"team_progress",payload:{sessionId:W,teamName:J,lifecycle:R6({teamName:J,sessionId:W,event:Z}),summary:N6(J,$.runtime.teamRuntime.exportState())}})}function XW($){return $.activeTeamRunIds.size>0||$.pendingTeamRunUpdates.length>0}function Cj($,W){if($.aborting)return!1;if(!(W==="completed"||W==="max_iterations"))return!1;return $.config.enableAgentTeams===!0&&XW($)}function FQ($){let W=$.teamRunWaiters.splice(0);for(let Z of W)Z()}async function Pj($){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 Sj($,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 YW(`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 YW($,W){return Mb($,W==="plan"?"plan":W==="yolo"?"yolo":"act")}var bj=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 Tj($,W.messagesArtifactUploader,W.logger),this.teamChildren=new GQ($,this.manifestStore,(Z,Q,J)=>this.toPersistedMessages(Z,Q,J),Y$.TEAM_HEARTBEAT_LOG_INTERVAL_MS)}toPersistedMessages($,W,Z){if(!$)return;return W?l9(W.messages,W,Z):d9($)}ensureSessionsDir(){return this.manifestStore.ensureSessionsDir()}writeSessionManifest($,W){this.manifestStore.writeSessionManifest($,W)}readSessionManifest($){return this.manifestStore.readSessionManifest($)}async createRootSessionWithArtifacts($){let W=$.startedAt??X0(),Z=$.sessionId.trim(),Q=Z.length>0?Z:`${Date.now()}_${Rb(5)}`,J=this.manifestStore.artifacts.sessionMessagesPath(Q),j=this.manifestStore.artifacts.sessionCompactionPath(Q),X=this.manifestStore.artifacts.sessionManifestPath(Q),Y=n4({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:C$(V.metadata),hookPath:"",messagesPath:J,updatedAt:X0()}),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 XG(()=>this.adapter.getSession($),async(j)=>{return Q=K0(W)?void 0:X0(),this.adapter.updateSession({sessionId:$,status:W,endedAt:Q??null,exitCode:K0(W)?null:typeof Z==="number"?Z:null,expectedStatusLock:j.statusLock})},bj)).updated){if(W==="cancelled")await this.teamChildren.applyStatusToRunningChildSessions($,"cancelled");return{updated:!0,endedAt:Q}}return{updated:!1}}async updateSession($){for(let W=0;W<bj;W++){let Z=await this.adapter.getSession($.sessionId);if(!Z)return{updated:!1};let Q=Z.metadata??void 0,J=$.metadata!==void 0?C$($.metadata)??{}:C$(Q)??{},j=E2(typeof Q?.title==="string"?Q.title:void 0),X=$.title!==void 0?E2($.title):j??P3($.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?C$($.metadata)??{}:C$(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=d9(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=X0(),Z=Y$.STALE_REASON;for(let Q=0;Q<bj;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=jG(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=C$(j.metadata??void 0),V=E2(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 s3(J.cwd,J.sessionId),U5(J.messagesPath),await this.deleteSessionCompactionStateIfExists(J.sessionId),U5(this.manifestStore.artifacts.sessionManifestPath(J.sessionId,!1)),this.manifestStore.artifacts.removeSessionDirIfEmpty(J.sessionId)}))}if(await s3(Z.cwd,W),U5(Z.messagesPath),await this.deleteSessionCompactionStateIfExists(W),U5(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(Nb(J));for(let J of Q)this.manifestStore.artifacts.removeDir(J)}return{deleted:!0}}async deleteSessionCompactionStateIfExists($){try{await this.manifestStore.deleteSessionCompactionState($)}catch{}}}function hj(){return new Date().toISOString()}function VU($,W){let Z=`${$}.tmp`;Cb(Z,`${JSON.stringify(W,null,2)}
|
|
537
|
+
`,"utf8"),wb(Z,$)}class BU{sessionsDirPath;constructor($=Pb()){this.sessionsDirPath=$}ensureSessionsDir(){if(!yj(this.sessionsDirPath))Eb(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}indexPath(){return YU(this.ensureSessionsDir(),"sessions.index.json")}spawnQueuePath(){return YU(this.ensureSessionsDir(),"subagent-spawn-queue.json")}readIndex(){let $=this.indexPath();if(!yj($))return{version:1,sessions:{}};try{let W=JSON.parse(XU($,"utf8"));if(W?.version===1&&W.sessions)return W}catch{}return{version:1,sessions:{}}}writeIndex($){VU(this.indexPath(),$)}readQueue(){let $=this.spawnQueuePath();if(!yj($))return{version:1,nextId:1,requests:[]};try{let W=JSON.parse(XU($,"utf8"));if(W?.version===1&&typeof W.nextId==="number"&&Array.isArray(W.requests))return W}catch{}return{version:1,nextId:1,requests:[]}}writeQueue($){VU(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:hj()};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:hj()}),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=hj(),this.writeQueue(Z),Q.task}}class kj extends Y${constructor($,W={}){super(new BU($),W)}ensureSessionsDir(){return super.ensureSessionsDir()}}var KU={};w(KU,{CoreSessionService:()=>y1});import{existsSync as Sb,mkdirSync as bb}from"node:fs";import{resolveSessionDataDir as yb}from"@cline/shared/storage";var Ij=`
|
|
538
538
|
session_id AS sessionId,
|
|
539
539
|
source,
|
|
540
540
|
pid,
|
|
@@ -561,52 +561,52 @@ ${J}`,$.config.mode)}function jW($,W){return Lb($,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 xj($){$.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 gj($){if(!$||Object.keys($).length===0)return null;return JSON.stringify($)}function HU($){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 GU{store;sessionsDirPath;constructor($,W=yb()){this.store=$;this.sessionsDirPath=W}ensureSessionsDir(){if(!Sb(this.sessionsDirPath))bb(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,gj($.metadata),"",$.hookPath??"",$.messagesPath??null,$.updatedAt])}async getSession($){let W=this.store.queryOne(`SELECT ${Ij} FROM sessions WHERE session_id = ?`,[$]);return W?xj(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 ${Ij}
|
|
570
570
|
FROM sessions
|
|
571
571
|
${Q}
|
|
572
572
|
ORDER BY started_at DESC
|
|
573
|
-
LIMIT ?`,[...Z,$.limit]).map(
|
|
573
|
+
LIMIT ?`,[...Z,$.limit]).map(xj)}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 = ?`,[X0(),$.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(
|
|
577
|
+
WHERE session_id = ? AND status_lock = ?`,[X0(),$.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(gj($.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(X0());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
578
|
VALUES (?, ?, ?, ?, ?, NULL)`,[$.rootSessionId,$.parentAgentId,$.task??null,$.systemPrompt??null,X0()])}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 = ?",[X0(),Z.id]),Z.task??void 0}}class
|
|
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 = ?",[X0(),Z.id]),Z.task??void 0}}class y1 extends Y${store;constructor($,W={}){super(new GU($,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,X0()])}}function
|
|
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??xj[$]??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}),xj[$]??!1}}getBooleanFlagEnabled($){return this.cache.get($)===!0}getFlagPayload($){return this.cache.get($)??xj[$]}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 W8{async getAllFlagsAndPayloads(){return{}}enabled=!1;getSettings(){return{enabled:!1,timeoutMs:1000}}async dispose(){}}T6();var OU={};E(OU,{createCheckpointComparePlan:()=>FQ,compareCheckpointToWorkspace:()=>VW,buildCheckpointWorkspaceDiff:()=>AQ});import{execFile as cb}from"node:child_process";import*as _U from"node:fs/promises";import*as S6 from"node:path";import{promisify as ub}from"node:util";var fU={};E(fU,{trimMessagesToCheckpoint:()=>UU,trimMessagesBeforeCheckpoint:()=>mj,readSessionCheckpointHistory:()=>Z8,findCheckpointForRun:()=>P6,createRestoredCheckpointMetadata:()=>gj,createCheckpointRestorePlan:()=>vj,applyCheckpointToWorktree:()=>cj});import{execFile as mb}from"node:child_process";import{promisify as vb}from"node:util";var C6=vb(mb);function Z8($){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 gj($,W){let Z=Z8($).filter((J)=>J.runCount<=W),Q=Z.at(-1);return Q?{latest:Q,history:Z}:void 0}function P6($,W){return $.reduce((Z,Q)=>{if(Q.runCount>W)return Z;if(!Z||Q.runCount>Z.runCount)return Q;return Z},void 0)}function AU($,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 UU($,W){let Z=AU($,W);return $.slice(0,Z+1)}function mj($,W){let Z=AU($,W);return $.slice(0,Z)}function vj($){let W=$.checkpointRunCount;if(!Number.isInteger(W)||W<1)throw Error("checkpointRunCount must be a positive integer");let Z=P6(Z8($.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:UU($.messages??[],W)}:{}}}async function cj($,W){if((await C6("git",["-C",$,"rev-parse","--is-inside-work-tree"],{windowsHide:!0})).stdout.trim()!=="true")throw Error(`${$} is not a git repository`);if(await C6("git",["-C",$,"cat-file","-e",`${W.ref}^{commit}`],{windowsHide:!0}),await C6("git",["-C",$,"reset","--hard"],{windowsHide:!0}),await C6("git",["-C",$,"clean","-fd"],{windowsHide:!0}),W.kind==="commit"){await C6("git",["-C",$,"reset","--hard",W.ref],{windowsHide:!0});return}await C6("git",["-C",$,"stash","apply",W.ref],{windowsHide:!0})}var db=ub(cb),lb=52428800;async function KQ($,W){let{stdout:Z}=await db("git",["-C",$,...W],{windowsHide:!0,maxBuffer:lb,encoding:"utf8"});return Z}function DU($){return $.split("\x00").filter(Boolean)}function LU($,W){let Z=S6.resolve($,W),Q=S6.relative($,Z);if(Q.startsWith("..")||S6.isAbsolute(Q))throw Error(`Checkpoint diff path escapes workspace: ${W}`);return Z}async function pb($,W,Z){try{return await KQ($,["show",`${W}:${Z}`])}catch{return""}}async function rb($,W){try{return await _U.readFile(LU($,W),"utf8")}catch{return""}}async function ib($,W){await KQ($,["cat-file","-e",`${W.ref}^{tree}`]);let[Z,Q]=await Promise.all([KQ($,["diff","--name-only","-z",W.ref,"--"]),KQ($,["ls-files","--others","--exclude-standard","-z"])]);return[...new Set([...DU(Z),...DU(Q)])].sort((j,X)=>j.localeCompare(X))}function FQ($){let W=$.checkpointRunCount;if(!Number.isInteger(W)||W<1)throw Error("checkpointRunCount must be a positive integer");let Z=P6(Z8($.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 AQ($,W){let Z=await ib($,W);return(await Promise.all(Z.map(async(J)=>{let[j,X]=await Promise.all([pb($,W.ref,J),rb($,J)]);return{filePath:LU($,J),leftContent:j,rightContent:X}}))).filter((J)=>J.leftContent!==J.rightContent)}async function VW($){let W=FQ($),Z=await AQ(W.cwd,W.checkpoint);return{...W,diffs:Z}}class BW{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=OF($),this.pendingPrompts=TF($),this.automation=new FJ(()=>{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 r5({workspaceRoot:B.workspaceRoot??process.cwd(),specs:{cronSpecsDir:B.cronSpecsDir??B.cronDir,scope:AK(B.cronScope),workspaceRoot:B.workspaceRoot},runtimeHandlers:UK({host:$,getExtensionContext:()=>EZ({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=u0($.distinctId),Z=w0($.capabilities),Q={...$,capabilities:Z,distinctId:W},J=await w6(Q),j=FK($.automation),X=$.featureFlags||new $8({provider:new W8,telemetry:$.telemetry,logger:$.logger,context:{distinctId:W,clientName:$.clientName}}),Y=new BW(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=qF($),Z=await this.prepare?.(W);try{let Q=Z?await Z.applyToStartSessionInput(W):W,J=await this.host.startSession(SJ(Q,{defaultCapabilities:this.capabilities,withExtensionContext:(j)=>EZ({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 MF({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 oZ(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?SJ($.start,{defaultCapabilities:this.capabilities,withExtensionContext:(Z)=>EZ({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 VW({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 zU={};E(zU,{resolvePluginSkillDirectoriesFromPaths:()=>a1,resolvePluginConfigSearchPaths:()=>e4,resolveAndLoadAgentPlugins:()=>i8,resolveAgentPluginPaths:()=>n1,loadAgentPluginsFromPathsWithDiagnostics:()=>C2,loadAgentPluginsFromPaths:()=>p9,loadAgentPluginFromPath:()=>s4,discoverPluginModulePaths:()=>$5});var RU={};E(RU,{toHookConfigFileName:()=>Q5,runSubprocessEvent:()=>b6,runHook:()=>h6,resolveHooksConfigSearchPaths:()=>W5,parseHookEventPayload:()=>y6,mergeAgentHooks:()=>y2,listHookConfigFiles:()=>S$,createSubprocessHooks:()=>DQ,createHookConfigFileHooks:()=>J5,createHookConfigFileExtension:()=>s8,createHookAuditHooks:()=>o8,createAgentHooksExtension:()=>n8,HookEventPayloadSchema:()=>fQ,HookEventNameSchema:()=>UQ,HookConfigFileName:()=>a8,HOOK_CONFIG_FILE_EVENT_MAP:()=>Z5,HOOKS_CONFIG_DIRECTORY_NAME:()=>s9});import{HookEventNameSchema as UQ,HookEventPayloadSchema as fQ,parseHookEventPayload as y6,resolveHookSessionContext as $y}from"@cline/shared";import{z as Q8}from"zod";import{spawn as nb}from"node:child_process";import{augmentNodeCommandForDebug as ab,withResolvedClineBuildEnv as ob}from"@cline/shared";function sb($){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 tb($,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 eb($,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 b6($,W){let Z=ab(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=nb(Z[0],Z.slice(1),{cwd:W.cwd,env:ob(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(tb(A,Z))})});if(await eb(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:f}=sb(Y);K({exitCode:F,stdout:Y,stderr:V,parsedJson:A,parseError:f,timedOut:B})})});return await Promise.race([G,X])}var Wy=Q8.object({contextModification:Q8.string().optional(),cancel:Q8.boolean().optional(),review:Q8.boolean().optional(),errorMessage:Q8.string().optional(),context:Q8.string().optional(),overrideInput:Q8.unknown().optional()}).passthrough();var Zy=["agent","hook"];async function h6($,W={}){let Z=W.command??Zy;return await b6($,{command:Z,cwd:W.cwd,env:W.env,detached:W.detached,timeoutMs:W.timeoutMs,onSpawn:W.onSpawn})}function MU($){return $ instanceof Error?$:Error(String($))}function Qy($){if(!$||typeof $!=="object")return;let W=Wy.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 qU($){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 X$($,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 Jy($){return{name:$.name,message:$.message,stack:$.stack}}function jy($){let W=String($??"").toLowerCase();return W.includes("cancel")||W.includes("abort")||W.includes("interrupt")}function Xy($){return{agentId:$.snapshot.agentId,conversationId:$.snapshot.conversationId??$.snapshot.runId??$.snapshot.agentId,parentAgentId:$.snapshot.parentAgentId??null}}function Yy($){return $.filter((W)=>W.type==="text"&&typeof W.text==="string").map((W)=>W.text).join("")}function Vy($){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 By($){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 h6($,{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?.(MU(Z),$)}}function DQ($={}){return{hooks:{beforeRun:async(Y)=>{let V=Xy(Y);if(($.env??process.env).CLINE_HOOK_AGENT_RESUME==="1"){let H={...X$("agent_resume",V,$),hookName:"agent_resume",taskResume:{taskMetadata:{},previousState:{}}};await J8(H,$)}else{let H={...X$("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={...X$("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:qU(Y.input)}};try{let H=await h6(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 By(Qy(H?.parsedJson))}catch(H){$.onDispatchError?.(MU(H),B);return}},afterTool:async(Y)=>{let V=Vy(Y),B={agentId:Y.snapshot.agentId,conversationId:Y.snapshot.conversationId??Y.snapshot.runId??Y.snapshot.agentId,parentAgentId:Y.snapshot.parentAgentId??null},H={...X$("tool_result",B,$),hookName:"tool_result",iteration:Y.snapshot.iteration,tool_result:V,postToolUse:{toolName:V.name,parameters:qU(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={...X$("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"||jy(V.error?.message)?"agent_abort":"agent_error",G=H==="agent_error"?{...X$(H,B,$),hookName:H,iteration:V.iterations,error:Jy(V.error??Error("Agent run failed")),taskCancel:{taskMetadata:{}}}:{...X$(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={...X$("prompt_submit",V,$),hookName:"prompt_submit",userPromptSubmit:{prompt:Yy(Y.message.content),attachments:[]}};await J8(B,$)}},shutdown:async({agentId:Y,conversationId:V,parentAgentId:B,reason:H})=>{let G={...X$("session_shutdown",{agentId:Y,conversationId:V,parentAgentId:B},$),hookName:"session_shutdown",reason:H};await J8(G,$)}}}var vf={};E(vf,{writeHubDiscovery:()=>eZ,withHubStartupLock:()=>$Q,verifyHubConnection:()=>N1,truncateNotificationBody:()=>AW,toHubStatusUrl:()=>Qj,toHubHealthUrl:()=>WQ,stopLocalHubServerGracefully:()=>Uj,startHubWebSocketServer:()=>Y8,startHubServer:()=>gf,spawnDetachedHubServerWithRetry:()=>D6,spawnDetachedHubServer:()=>Bj,sendHubCommand:()=>SU,restartLocalHubIfIdleAfterStartupTimeout:()=>XQ,resolveWorkspaceHubOwnerContext:()=>jA,resolveSharedHubOwnerContext:()=>c0,resolveProductionHubOwnerContext:()=>J1,resolveHubUrl:()=>rj,resolveHubOwnerContext:()=>W$,resolveHubEndpointOptions:()=>Q1,resolveHubBuildId:()=>tZ,resolveDefaultHubPort:()=>f6,resolveDefaultHubPathname:()=>Vj,resolveDefaultHubHost:()=>Yj,resolveCompatibleLocalHubUrl:()=>s5,resolveClineDir:()=>WA,resolveClineDataDir:()=>i2,requestHubShutdown:()=>o5,rememberRecoverableLocalHubUrl:()=>d$,readHubDiscovery:()=>_0,readBearerToken:()=>NQ,probeHubServer:()=>Z$,probeHubConnection:()=>PU,prewarmDetachedHubServer:()=>QQ,normalizeHubWebSocketUrl:()=>l$,isLocalHubOrigin:()=>UX,isLocalHubHostName:()=>EQ,isHubReconnectableTransportError:()=>Fj,isHubCommandTimeoutError:()=>jQ,isDiscoveryFilePresent:()=>QA,ensureHubWebSocketServer:()=>wQ,ensureHubServer:()=>mf,ensureDetachedHubServer:()=>GA,ensureCompatibleLocalHubUrl:()=>o2,createLocalHubScheduleRuntimeHandlers:()=>CQ,createInMemoryHubOwnerContext:()=>ZA,createHubServerUrl:()=>f1,createHubAuthToken:()=>sZ,createConfiguredTelemetryService:()=>Y$,createConfiguredTelemetryHandle:()=>i$,connectToHub:()=>OQ,clearHubDiscovery:()=>v0,NodeHubClient:()=>D1,NativeHubTransportAdapter:()=>LW,HubUIClient:()=>aj,HubTransportError:()=>h0,HubSessionClient:()=>nj,HubServerTransport:()=>v6,HubScheduleService:()=>I6,HubScheduleCommandService:()=>k6,HubCommandError:()=>_6,DEFAULT_HUB_PORT:()=>jj,DEFAULT_HUB_PATHNAME:()=>Xj,DEFAULT_HUB_HOST:()=>Jj,BrowserWebSocketHubAdapter:()=>_W});import{createSessionId as Hy}from"@cline/shared";function j1($,W){return{version:$.version,requestId:$.requestId,ok:!0,payload:W}}function NU($,W,Z){return{version:$.version,requestId:$.requestId??Hy("hubreq_"),ok:!1,error:{code:W,message:Z}}}class k6{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 NU($,"unsupported_command",`Unsupported hub schedule command: ${$.command}`)}}catch(W){return NU($,"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 LQ($){return $?new Date($).getTime():void 0}function Gy($){let W=$.metadata?{...$.metadata}:void 0;if(W)delete W.__hubScheduleCreatedBy,delete W.__hubScheduleCwd,delete W.__hubRuntimeOptions;return W}function _Q($){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:LQ($.nextRunAt),lastRunAt:LQ($.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:Gy($)}}function Ky($){switch($){case"done":return"success";case"cancelled":return"aborted";case"running":return"running";case"queued":return"pending";default:return"failed"}}function uj($,W){return{executionId:$.runId,scheduleId:W,sessionId:$.sessionId,triggeredAt:new Date($.scheduledFor??$.createdAt).getTime(),startedAt:LQ($.startedAt),endedAt:LQ($.completedAt),status:Ky($.status),errorMessage:$.error}}class I6{store;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new p5({dbPath:$.dbPath}),this.materializer=new v5({store:this.store}),this.runner=new c5({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(vJ($.cronPattern),!$.workspaceRoot?.trim())throw Error("workspaceRoot is required for schedules");return _Q(this.store.createHubSchedule($))}getSchedule($){let W=this.store.getHubSchedule($);return W?_Q(W):void 0}listSchedules($={}){return this.store.listHubSchedules($).map((W)=>_Q(W))}updateSchedule($,W){if(W.cronPattern!==void 0)vJ(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?_Q(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 uj(Z,$)}triggerScheduleNowDetached($){let W=this.store.enqueueHubScheduleRun($,"manual");if(!W)return;return this.runner.tick().catch(()=>{return}),uj(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 uj(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}))}}FW();import{resolveClineBuildEnv as ky}from"@cline/shared";function Iy($,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 xy="cline-hub-auth.";function gy($){return $.host!==void 0||$.port!==void 0||$.pathname!==void 0}function my($,W){let Z=new URL($),Q=new URL(W);return Z.search="",Z.hash="",Q.search="",Q.hash="",Z.toString()===Q.toString()}function CU(){return ky()==="production"?J1():c0()}async function vy($){let W=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),W)return W;let Z=CU(),Q=await _0(Z.discoveryPath);if(Q?.url&&my($.toString(),Q.url))return Q.authToken;return}async function rj($={}){let W=Q1($);if(!gy($)){let Z=CU(),Q=await _0(Z.discoveryPath);if(Q?.url)return Q.url}return f1(W.host,W.port,W.pathname)}async function OQ($){return await new Promise((W,Z)=>{(async()=>{let Q=new URL($),J=await vy(Q);Q.hash="";let j=new WebSocket(Q.toString(),J?[`${xy}${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(Iy(V,$))})})().catch(Z)})}async function PU($){try{return(await OQ($)).close(),!0}catch{return!1}}async function SU($,W){let Z=await rj($),Q=await OQ(Z);try{return await Q.send({version:W.version??"v1",clientId:W.clientId??"hub-client",...W})}finally{Q.close()}}function ij($){return $?JSON.parse(JSON.stringify($)):{}}function TQ($){let W=$?.session&&typeof $.session==="object"?$.session:void 0;if(!W)return;let Z=W.metadata&&typeof W.metadata==="object"?ij(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 bU($,W){return $.error?.message??`hub command failed: ${W}`}function cy($){let W=ij($);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 yU($){let W=$?.sessionId;return typeof W==="string"&&W.trim()?W.trim():void 0}function uy($){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 dy($){let W=ij($.payload);if($.event==="schedule.execution_completed")return{sessionId:$.sessionId?.trim()||yU(W)||"",eventType:"schedule.execution.completed",payload:W};if($.event==="schedule.execution_failed")return{sessionId:$.sessionId?.trim()||yU(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"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:cy($.payload)};case"run.completed":return{sessionId:Z,eventType:"runtime.chat.completed",payload:W};default:return}}class nj{options;client;metadataApplied=!1;constructor($){this.options=$;this.client=new D1({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=TQ(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))return;throw Z}return TQ(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(bU(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(bU(J,"session.restore"));let j=TQ(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=uy(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)=>TQ({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=dy(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 aj{client;constructor($){this.client=new D1({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 If}from"@cline/shared";function ly($){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 hU=120,oj="...";function AW($){let W=$.trim();if(!W)return"";if(Buffer.byteLength(W,"utf8")<=hU)return W;let Z=hU-Buffer.byteLength(oj,"utf8");if(Z<=0)return oj;let Q="";for(let J of W){if(Buffer.byteLength(Q+J,"utf8")>Z)break;Q+=J}return`${Q}${oj}`}async function kU($){let W=$?.sessionId?.trim()||"unknown",Z=typeof $?.metadata?.messagesPath==="string"?$.metadata.messagesPath:void 0,J=[...await u$(Z)].reverse().find((V)=>V.role==="assistant"),j=J?ly(J.content):void 0,X=$?.workspaceRoot?.trim()||"workspace",Y=typeof $?.metadata?.prompt==="string"?$.metadata.prompt.trim():X;return{title:`Task completed (${W})`,body:AW(j&&j.length>0?j:Y.length>0?Y:X),severity:"info"}}import{captureSdkError as RQ,createSessionId as rh}from"@cline/shared";import{createSessionId as ny}from"@cline/shared";import{createSessionId as iy}from"@cline/shared";function py($){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 ry($){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 zQ($,W,Z,Q){return{sessionId:$.sessionId,workspaceRoot:$.workspaceRoot,cwd:$.cwd,createdAt:Date.parse($.startedAt),updatedAt:Date.parse($.updatedAt),createdByClientId:W?.createdByClientId??"hub",status:py($.status),participants:W?[...W.participants.values()]:[],metadata:ry($),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 m6($){return $&&typeof $==="object"&&!Array.isArray($)?$:void 0}function P0($){if(typeof $.payload?.sessionId==="string")return $.payload.sessionId.trim();return $.sessionId?.trim()??""}function j8($,W,Z){return{version:"v1",event:$,eventId:iy("hevt_"),sessionId:Z,timestamp:Date.now(),payload:W}}async function S0($,W){let Z=await $.sessionHost.getSession(W);if(!Z)return;let Q=await $.sessionHost.getAccumulatedUsage?.(W);return zQ(Z,$.sessionState.get(W),Q?.usage,Q?.aggregateUsage)}async function d0($,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 E1({session:Z,messages:Q,usage:J?.usage,aggregateUsage:J?.aggregateUsage})}function sj($,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 IU($,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 tj($,W){let Z=ny("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 ej($,W,Z){let Q=$.pendingApprovals.get(W);if(!Q)return;return $.pendingApprovals.delete(W),Q.resolve(Z),{sessionId:Q.sessionId}}function $X($,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 xU($,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=ej($,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 sy}from"@cline/shared";function ay($){if($ instanceof Error)return{name:$.name,message:$.message,stack:$.stack};if($===void 0)return;return $}var gU={debug:10,info:20,warn:30,error:40,silent:50};function oy(){let $=process.env.CLINE_HUB_LOG_LEVEL?.trim().toLowerCase();if($==="debug"||$==="info"||$==="warn"||$==="error"||$==="silent")return $;return process.env.VITEST?"error":"info"}function p($,W,Z={}){if(gU[$]<gU[oy()])return;let Q=JSON.stringify({ts:new Date().toISOString(),level:$,component:"hub",message:W,...Object.fromEntries(Object.entries(Z).map(([J,j])=>[J,ay(j)]).filter(([,J])=>J!==void 0))});if($==="error"||$==="warn"){console.error(`[hub] ${Q}`);return}console.log(`[hub] ${Q}`)}function WX($,W){let Z=W instanceof Error?W.stack||W.message:String(W);p("error",$,{error:Z})}async function mU($,W,Z,Q,J,j){let X=sy("capreq_"),Y=performance.now();return p("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(p(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)),p("info","capability.request.published",{requestId:X,sessionId:W,capabilityName:Z,targetClientId:J})})}function vU($,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 n$($,W,Z){let Q=0;for(let[J,j]of[...$.pendingCapabilityRequests.entries()]){if(!W({requestId:J,...j}))continue;$.pendingCapabilityRequests.delete(J),p("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 cU($,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 uU($,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 p(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 ty}from"@cline/shared";function dU($,W){let Z=W.payload,Q=Z?.clientId?.trim()||W.clientId?.trim()||ty("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 lU($,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=m6(W.payload?.metadata);if(Q.lastSeenAt=Date.now(),J)Q.metadata=JSON.parse(JSON.stringify(J));return u(W)}function pU($,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 rU($,W){return u(W,{clients:[...$.clients.values()]})}O0();import{existsSync as aU,mkdirSync as ey,readdirSync as $h,readFileSync as Wh,rmSync as Zh,writeFileSync as Qh}from"node:fs";import{dirname as Jh,join as iU}from"node:path";import{CONNECTOR_PLATFORMS as jh,connectorChannelsFromPlatforms as Xh,listConnectorCatalog as oU,shouldIncludeConnectorField as Yh}from"@cline/shared";import{resolveConnectorDataDir as Vh,resolveConnectorSettingsPath as QX}from"@cline/shared/storage";var Bh=1,nU={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},Hh={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 a$($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function UW($){return typeof $==="string"?$.trim():void 0}function sU($){if(!aU($))return;try{let W=JSON.parse(Wh($,"utf8"));return a$(W)?W:void 0}catch{return}}function JX(){let $=sU(QX()),W=a$($?.connectors)?$.connectors:{},Z={};for(let[Q,J]of Object.entries(W)){if(!a$(J))continue;let j=UW(J.type),X=UW(J.configuredAt),Y=UW(J.updatedAt);if(!j||!X||!Y)continue;let V=qQ(J.values),B=a$(J.security)?{enabled:J.security.enabled===!0,values:qQ(J.security.values)}:void 0;Z[Q]={type:j,values:V,security:B,configuredAt:X,updatedAt:Y}}return{version:Bh,connectors:Z}}function tU($){let W=QX();ey(Jh(W),{recursive:!0}),Qh(W,`${JSON.stringify($,null,2)}
|
|
589
|
-
`,"utf8")}function qQ($){if(!a$($))return{};let W={};for(let[Z,Q]of Object.entries($))if(typeof Q==="string")W[Z]=Q.trim();return W}function Gh($){if(!Number.isInteger($)||$<=0)return!1;try{return process.kill($,0),!0}catch{return!1}}function Kh($){let W=iU(Vh(),$);if(!aU(W))return[];return $h(W).filter((Z)=>Z.endsWith(".json")&&!Z.endsWith(".threads.json")).map((Z)=>iU(W,Z))}function Fh($,W,Z){let Q=W.botUsername??W.userName??W.applicationId??W.phoneNumberId??String(Z);return`${$}:${Q}`}function Ah($,W){let Z=sU(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||!Gh(Q))return;let j=Hh[$];if(!j)return;let X={};for(let Y of j.required){let V=nU[Y](Z);if(!V||typeof V==="string"&&!V.trim())return;X[Y]=V}for(let Y of j.optional){let V=nU[Y](Z);if(V!==void 0)X[Y]=V}return{id:Fh($,X,Q),type:$,pid:Q,hubUrl:J,...X}}function Uh(){let $=[];for(let{name:W}of oU())for(let Z of Kh(W)){let Q=Ah(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 fh(){let $=JX();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 jX(){return{available:Xh(),active:Uh(),configured:fh()}}function Dh($,W){if($.required&&!W[$.flag]?.trim())throw Error(`${$.label} is required`)}function _h($,W){let Z={};for(let J of $.fields)Z[J.flag]=W[J.flag]??J.initialValue??"";let Q={};for(let J of $.fields){if(!Yh(J,Z))continue;Dh(J,Z),Q[J.flag]=Z[J.flag]}return Q}function Lh($){if(!a$($))throw Error("connector.configure payload must be an object.");let W=UW($.channel);if(!W)throw Error("channel is required");let Z=jh.find((K)=>K.id===W);if(!Z)throw Error(`unknown connector channel: ${W}`);if(!new Set(oU().map((K)=>K.name)).has(Z.id))throw Error(`connector channel is not available: ${W}`);let J=qQ($.values),j=_h(Z,J),X=a$($.security)?$.security:{},Y=X.enabled===!0,V=qQ(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=JX(),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},tU(B),jX()}function Oh($){if(!a$($))throw Error("connector.delete_config payload must be an object.");let W=UW($.channel);if(!W)throw Error("channel is required");let Z=JX();if(delete Z.connectors[W],Object.keys(Z.connectors).length>0)tU(Z);else Zh(QX(),{force:!0});return jX()}function Th($){return $==="connector.configure"||$==="connector.delete_config"}function ZX($,W,Z){if(!Th(W.command))return;A8($.telemetry,{ulid:W.sessionId??W.requestId??"hub",tool:W.command,success:Z})}async function eU($,W){try{if(W.command==="connector.channels")return u(W,jX());if(W.command==="connector.configure"){let Z=Lh(W.payload);return ZX($,W,!0),u(W,Z)}if(W.command==="connector.delete_config"){let Z=Oh(W.payload);return ZX($,W,!0),u(W,Z)}return h(W,"unsupported_connector_command",`unsupported connector command: ${W.command}`)}catch(Z){return ZX($,W,!1),h(W,"connector_command_failed",Z instanceof Error?Z.message:String(Z))}}var zh=30000;function qh($){if($==="aborted")return"run.aborted";if($==="error"||$==="failed")return"run.failed";return"run.completed"}function Mh($){if($.finishReason!=="error")return;return $.text.trim()||void 0}function Rh($,W,Z){let Q=Z instanceof Error&&Z.message.trim()?Z.message:`Unknown session: ${W}`;return h($,d2,Q)}function Nh($){return $?$:void 0}function Eh($){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 wh($,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);p("warn","run.heartbeat",{...X,elapsedMs:H}),$.publish($.buildEvent("run.heartbeat",{requestId:W.requestId,elapsedMs:H,...Q?{timeoutMs:Q}:{}},Z.sessionId))},zh),V=$.sessionHost.runTurn(Z);V.then((H)=>{if(!j)return;p("warn","run.late_end",{...X,elapsedMs:Math.round(performance.now()-J),finishReason:H?.finishReason})},(H)=>{if(!j)return;p("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)),p("error","run.timeout",{...X,elapsedMs:Math.round(performance.now()-J)}),$X($,(F)=>F.sessionId===Z.sessionId,K),n$($,(F)=>F.sessionId===Z.sessionId,K),$.sessionHost.abort(Z.sessionId,K).catch((F)=>{p("error","run.timeout_abort_failed",{...X,error:F})})},Q)})])}finally{if(j=!0,clearInterval(Y),B)clearTimeout(B)}}async function $f($,W){let Z=P0(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=Eh(Q);$.suppressNextTerminalEventBySession.set(Z,"run.start.reply");let V;try{V=await wh($,W,{sessionId:Z,prompt:J,mode:Nh(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($$(H))return Rh(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 d0($,Z),G=Mh(V);if($.publish($.buildEvent(qh(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 d0($,Z);return u(W,V||B?{...V?{result:V}:{},...B?{snapshot:B}:{}}:void 0)}async function Wf($,W){let Z=P0(W),Q=typeof W.payload?.reason==="string"?W.payload.reason:"Run was aborted before pending approval or capability request was resolved.";$X($,(J)=>J.sessionId===Z,Q);try{await $.sessionHost.abort(Z,W.payload?.reason)}catch(J){p("warn","run.abort_failed",{command:W.command,requestId:W.requestId,clientId:W.clientId,sessionId:Z,error:J})}finally{n$($,(J)=>J.sessionId===Z,Q)}return u(W,{applied:!0})}async function Zf($,W){let Z=y6(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 Qf($,W){switch(W.type){case"chunk":return;case"agent_event":await Ch($,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([S0($,W.payload.sessionId),d0($,W.payload.sessionId)]);if(Z)$.publish($.buildEvent("session.updated",{session:Z,...Q?{snapshot:Q}:{}},W.payload.sessionId));return}case"ended":await Ph($,W);return;default:return}}async function Ch($,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==="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 Ph($,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([S0($,W.payload.sessionId),d0($,W.payload.sessionId)]);if(W.payload.reason==="completed"){let X=await kU(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 Vf,parseRuntimeConfigExtensions as Bf}from"@cline/shared";var Jf={};E(Jf,{SessionVersioningService:()=>o$,SessionVersioningError:()=>l0});class l0 extends Error{code;constructor($,W){super(W);this.code=$;this.name="SessionVersioningError"}}function Sh($){let W=$.sessionId.trim();if(!W)throw new l0("invalid_restore","sessionId is required");if(!$.restoreMessages&&!$.restoreWorkspace)throw new l0("invalid_restore","restore.messages or restore.workspace must be true");if($.restoreMessages&&$.requiresStart)throw new l0("invalid_restore","start is required when restore.messages is true");if(!Number.isInteger($.checkpointRunCount)||$.checkpointRunCount<1)throw new l0("invalid_restore","checkpointRunCount must be a positive integer");return W}class o${async restoreCheckpoint($){let W=$.restore?.messages!==!1,Z=$.restore?.workspace!==!1,Q=Sh({sessionId:$.sessionId,restoreMessages:W,restoreWorkspace:Z,requiresStart:$.start===void 0,checkpointRunCount:$.checkpointRunCount}),J=await $.getSession(Q);if(!J)throw new l0("session_not_found",`Session ${Q} not found`);let j=W?await $.readMessages(Q):void 0;if(W&&j?.length===0)throw new l0("session_messages_not_found",`No messages found for session ${Q}`);let X=vj({session:J,messages:j,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd,restoreMessages:W});if(Z)await($.applyWorkspaceCheckpoint??cj)(X.cwd,X.checkpoint);let Y=E1({session:J,messages:j});if(!W)return{checkpoint:X.checkpoint,sourceSnapshot:Y};let V=gj(J,$.checkpointRunCount),B=$.restore?.omitCheckpointMessageFromSession?mj(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 l0("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??SG)(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:E1({session:A,messages:B})}:{}}}}import{HUB_CHECKPOINT_CAPABILITY as Ke,HUB_COMPACTION_CAPABILITY as Fe,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as Ae,HUB_HOOK_CAPABILITY_PREFIX as Ue,HUB_MISTAKE_LIMIT_CAPABILITY as fe,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as De,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as _e,isHubToolExecutorName as bh}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as qe,HUB_COMPACTION_CAPABILITY as Me,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as Re,HUB_HOOK_CAPABILITY_PREFIX as Ne,HUB_MISTAKE_LIMIT_CAPABILITY as Ee,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as we,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as Ce}from"@cline/shared";var yh=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function X8($){return $&&typeof $==="object"&&!Array.isArray($)?JSON.parse(JSON.stringify($)):void 0}function hh($,W){let Z=typeof $.name==="string"?$.name.trim():"",Q=typeof $.description==="string"?$.description:"",J=typeof $.capabilityName==="string"?$.capabilityName.trim():"",j=X8($.inputSchema);if(!Z||!Q||!j||!J||W.has(J))return;return W.add(J),{kind:"tool",capabilityName:J,name:Z,description:Q,inputSchema:j,...X8($.lifecycle)?{lifecycle:X8($.lifecycle)}:{}}}function YX($){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=hh(J,Z);if(Y)W.push(Y);continue}if(j==="toolExecutor"){let Y=J.executor;if(!bh(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,...X8(J.config)?{config:X8(J.config)}:{}});continue}if(j==="checkpoint"){Z.add(X),W.push({kind:"checkpoint",capabilityName:X,...X8(J.config)?{config:X8(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 Xf($){return{agentId:$.agentId,conversationId:$.conversationId,iteration:$.iteration,metadata:$.metadata}}function kh($){return Object.hasOwn($,"update")?$.update:$}function fW($){return $.trim().replace(/^\/+/,"").toLowerCase()}function Ih($){let W=($??[]).map(fW).filter(Boolean);return W.length>0?new Set(W):void 0}function xh($,W,Z){if(!Z)return!0;let Q=fW($),J=fW(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 XX($,W){let Z=Ih(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)=>xh(Q.id,Q.name,Z))}function jf($,W){let Z=async(Q,J)=>{let j=fW(Q),Y=XX($,W).filter((K)=>K.id===j||fW(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,X0()])}}function hb($){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 VW,BW;function kb($,W){if($!=="auto"&&$!=="hub")return;if(W.hub?.endpoint?.trim())return;jQ(W.hub?.workspaceRoot?.trim()||W.hub?.cwd?.trim()||process.cwd())}async function Ib($){await $.reconcileDeadSessions?.().catch(()=>{})}function UU($){try{let W=new S1;return W.init(),new y1(W,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}catch(W){return $.telemetry?.capture({event:"session_backend_fallback",properties:{requestedBackend:"sqlite",fallbackBackend:"file"}}),AU($.telemetry,{component:"core",operation:"session_backend.sqlite_init",error:W,severity:"warn",handled:!0,context:{requestedBackend:"sqlite",fallbackBackend:"file"}}),new kj(void 0,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}}function FU($,W,Z){return new h1({sessionService:Z??$.sessionService??UU($),capabilities:$.capabilities,telemetry:$.telemetry,toolPolicies:$.toolPolicies,distinctId:W,fetch:$.fetch})}async function mj($){if(VW)return VW;if(BW)return await BW;return BW=(async()=>{return VW=UU($),await Ib(VW),VW})().finally(()=>{BW=void 0}),await BW}async function C6($){let W=v0($.distinctId);$.telemetry?.setDistinctId(W);let Z=hb($);if(kb(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 T6({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 o2({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 e5({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}),AU($.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"}),FU($,W)}return FU($,W)}var LU={};w(LU,{NoOpFeatureFlagsProvider:()=>W8,FeatureFlagsService:()=>$8});import{existsSync as xb,mkdirSync as gb,readFileSync as mb,writeFileSync as vb}from"node:fs";import{dirname as cb}from"node:path";import{FEATURE_FLAGS as DU,FeatureFlagDefaultValue as vj}from"@cline/shared";var ub=3600000,db=604800000,_U=1;class $8{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??ub,this.cacheFilePath=$.cacheFilePath,this.persistentCacheMaxAgeMs=$.persistentCacheMaxAgeMs??db,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:DU.length>0?DU: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||!xb(this.cacheFilePath))return;let $=JSON.parse(mb(this.cacheFilePath,"utf8"));if(!$||typeof $!=="object")return;let W=$;if(W.version!==_U||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;gb(cb(this.cacheFilePath),{recursive:!0,mode:448});let $=this.getCacheSnapshot(),W={version:_U,updatedAt:$.updateTime,userId:$.userId,flagsPayload:$.flagsPayload};vb(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??vj[$]??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}),vj[$]??!1}}getBooleanFlagEnabled($){return this.cache.get($)===!0}getFlagPayload($){return this.cache.get($)??vj[$]}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 W8{async getAllFlagsAndPayloads(){return{}}enabled=!1;getSettings(){return{enabled:!1,timeoutMs:1000}}async dispose(){}}z6();var RU={};w(RU,{createCheckpointComparePlan:()=>UQ,compareCheckpointToWorkspace:()=>HW,buildCheckpointWorkspaceDiff:()=>fQ});import{execFile as rb}from"node:child_process";import*as MU from"node:fs/promises";import*as b6 from"node:path";import{promisify as ib}from"node:util";var zU={};w(zU,{trimMessagesToCheckpoint:()=>TU,trimMessagesBeforeCheckpoint:()=>uj,readSessionCheckpointHistory:()=>Z8,findCheckpointForRun:()=>S6,createRestoredCheckpointMetadata:()=>cj,createCheckpointRestorePlan:()=>dj,applyCheckpointToWorktree:()=>lj});import{execFile as lb}from"node:child_process";import{promisify as pb}from"node:util";var P6=pb(lb);function Z8($){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 cj($,W){let Z=Z8($).filter((J)=>J.runCount<=W),Q=Z.at(-1);return Q?{latest:Q,history:Z}:void 0}function S6($,W){return $.reduce((Z,Q)=>{if(Q.runCount>W)return Z;if(!Z||Q.runCount>Z.runCount)return Q;return Z},void 0)}function OU($,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 TU($,W){let Z=OU($,W);return $.slice(0,Z+1)}function uj($,W){let Z=OU($,W);return $.slice(0,Z)}function dj($){let W=$.checkpointRunCount;if(!Number.isInteger(W)||W<1)throw Error("checkpointRunCount must be a positive integer");let Z=S6(Z8($.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:TU($.messages??[],W)}:{}}}async function lj($,W){if((await P6("git",["-C",$,"rev-parse","--is-inside-work-tree"],{windowsHide:!0})).stdout.trim()!=="true")throw Error(`${$} is not a git repository`);if(await P6("git",["-C",$,"cat-file","-e",`${W.ref}^{commit}`],{windowsHide:!0}),await P6("git",["-C",$,"reset","--hard"],{windowsHide:!0}),await P6("git",["-C",$,"clean","-fd"],{windowsHide:!0}),W.kind==="commit"){await P6("git",["-C",$,"reset","--hard",W.ref],{windowsHide:!0});return}await P6("git",["-C",$,"stash","apply",W.ref],{windowsHide:!0})}var nb=ib(rb),ab=52428800;async function AQ($,W){let{stdout:Z}=await nb("git",["-C",$,...W],{windowsHide:!0,maxBuffer:ab,encoding:"utf8"});return Z}function qU($){return $.split("\x00").filter(Boolean)}function NU($,W){let Z=b6.resolve($,W),Q=b6.relative($,Z);if(Q.startsWith("..")||b6.isAbsolute(Q))throw Error(`Checkpoint diff path escapes workspace: ${W}`);return Z}async function ob($,W,Z){try{return await AQ($,["show",`${W}:${Z}`])}catch{return""}}async function sb($,W){try{return await MU.readFile(NU($,W),"utf8")}catch{return""}}async function tb($,W){await AQ($,["cat-file","-e",`${W.ref}^{tree}`]);let[Z,Q]=await Promise.all([AQ($,["diff","--name-only","-z",W.ref,"--"]),AQ($,["ls-files","--others","--exclude-standard","-z"])]);return[...new Set([...qU(Z),...qU(Q)])].sort((j,X)=>j.localeCompare(X))}function UQ($){let W=$.checkpointRunCount;if(!Number.isInteger(W)||W<1)throw Error("checkpointRunCount must be a positive integer");let Z=S6(Z8($.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 fQ($,W){let Z=await tb($,W);return(await Promise.all(Z.map(async(J)=>{let[j,X]=await Promise.all([ob($,W.ref,J),sb($,J)]);return{filePath:NU($,J),leftContent:j,rightContent:X}}))).filter((J)=>J.leftContent!==J.rightContent)}async function HW($){let W=UQ($),Z=await fQ(W.cwd,W.checkpoint);return{...W,diffs:Z}}class GW{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=RF($),this.pendingPrompts=EF($),this.automation=new fJ(()=>{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 n5({workspaceRoot:B.workspaceRoot??process.cwd(),specs:{cronSpecsDir:B.cronSpecsDir??B.cronDir,scope:OK(B.cronScope),workspaceRoot:B.workspaceRoot},runtimeHandlers:TK({host:$,getExtensionContext:()=>CZ({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=v0($.distinctId),Z=w0($.capabilities),Q={...$,capabilities:Z,distinctId:W},J=await C6(Q),j=LK($.automation),X=$.featureFlags||new $8({provider:new W8,telemetry:$.telemetry,logger:$.logger,context:{distinctId:W,clientName:$.clientName}}),Y=new GW(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(hJ(Q,{defaultCapabilities:this.capabilities,withExtensionContext:(j)=>CZ({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 PF({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 tZ(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?hJ($.start,{defaultCapabilities:this.capabilities,withExtensionContext:(Z)=>CZ({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 HW({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 wU={};w(wU,{resolvePluginSkillDirectoriesFromPaths:()=>t1,resolvePluginConfigSearchPaths:()=>W5,resolveAndLoadAgentPlugins:()=>n8,resolveAgentPluginPaths:()=>s1,loadAgentPluginsFromPathsWithDiagnostics:()=>C2,loadAgentPluginsFromPaths:()=>r9,loadAgentPluginFromPath:()=>e4,discoverPluginModulePaths:()=>Z5});var SU={};w(SU,{toHookConfigFileName:()=>j5,runSubprocessEvent:()=>y6,runHook:()=>k6,resolveHooksConfigSearchPaths:()=>Q5,parseHookEventPayload:()=>h6,mergeAgentHooks:()=>y2,listHookConfigFiles:()=>S$,createSubprocessHooks:()=>LQ,createHookConfigFileHooks:()=>X5,createHookConfigFileExtension:()=>t8,createHookAuditHooks:()=>s8,createAgentHooksExtension:()=>a8,HookEventPayloadSchema:()=>_Q,HookEventNameSchema:()=>DQ,HookConfigFileName:()=>o8,HOOK_CONFIG_FILE_EVENT_MAP:()=>J5,HOOKS_CONFIG_DIRECTORY_NAME:()=>t9});import{HookEventNameSchema as DQ,HookEventPayloadSchema as _Q,parseHookEventPayload as h6,resolveHookSessionContext as jy}from"@cline/shared";import{z as Q8}from"zod";import{spawn as eb}from"node:child_process";import{augmentNodeCommandForDebug as $y,withResolvedClineBuildEnv as Wy}from"@cline/shared";function Zy($){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 Qy($,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 Jy($,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 y6($,W){let Z=$y(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=eb(Z[0],Z.slice(1),{cwd:W.cwd,env:Wy(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(Qy(A,Z))})});if(await Jy(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:f}=Zy(Y);K({exitCode:F,stdout:Y,stderr:V,parsedJson:A,parseError:f,timedOut:B})})});return await Promise.race([G,X])}var Xy=Q8.object({contextModification:Q8.string().optional(),cancel:Q8.boolean().optional(),review:Q8.boolean().optional(),errorMessage:Q8.string().optional(),context:Q8.string().optional(),overrideInput:Q8.unknown().optional()}).passthrough();var Yy=["agent","hook"];async function k6($,W={}){let Z=W.command??Yy;return await y6($,{command:Z,cwd:W.cwd,env:W.env,detached:W.detached,timeoutMs:W.timeoutMs,onSpawn:W.onSpawn})}function PU($){return $ instanceof Error?$:Error(String($))}function Vy($){if(!$||typeof $!=="object")return;let W=Xy.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:jy(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 By($){return{name:$.name,message:$.message,stack:$.stack}}function Hy($){let W=String($??"").toLowerCase();return W.includes("cancel")||W.includes("abort")||W.includes("interrupt")}function Gy($){return{agentId:$.snapshot.agentId,conversationId:$.snapshot.conversationId??$.snapshot.runId??$.snapshot.agentId,parentAgentId:$.snapshot.parentAgentId??null}}function Ky($){return $.filter((W)=>W.type==="text"&&typeof W.text==="string").map((W)=>W.text).join("")}function Fy($){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 Ay($){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 k6($,{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?.(PU(Z),$)}}function LQ($={}){return{hooks:{beforeRun:async(Y)=>{let V=Gy(Y);if(($.env??process.env).CLINE_HOOK_AGENT_RESUME==="1"){let H={...V$("agent_resume",V,$),hookName:"agent_resume",taskResume:{taskMetadata:{},previousState:{}}};await J8(H,$)}else{let H={...V$("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={...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 k6(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 Ay(Vy(H?.parsedJson))}catch(H){$.onDispatchError?.(PU(H),B);return}},afterTool:async(Y)=>{let V=Fy(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 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={...V$("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"||Hy(V.error?.message)?"agent_abort":"agent_error",G=H==="agent_error"?{...V$(H,B,$),hookName:H,iteration:V.iterations,error:By(V.error??Error("Agent run failed")),taskCancel:{taskMetadata:{}}}:{...V$(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={...V$("prompt_submit",V,$),hookName:"prompt_submit",userPromptSubmit:{prompt:Ky(Y.message.content),attachments:[]}};await J8(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 J8(G,$)}}}var rf={};w(rf,{writeHubDiscovery:()=>WQ,withHubStartupLock:()=>ZQ,verifyHubConnection:()=>w1,truncateNotificationBody:()=>fW,toHubStatusUrl:()=>Xj,toHubHealthUrl:()=>QQ,stopLocalHubServerGracefully:()=>_j,startHubWebSocketServer:()=>Y8,startHubServer:()=>lf,spawnDetachedHubServerWithRetry:()=>_6,spawnDetachedHubServer:()=>Kj,sendHubCommand:()=>xU,restartLocalHubIfIdleAfterStartupTimeout:()=>VQ,resolveWorkspaceHubOwnerContext:()=>GA,resolveSharedHubOwnerContext:()=>m0,resolveProductionHubOwnerContext:()=>Q1,resolveHubUrl:()=>aj,resolveHubOwnerContext:()=>Q$,resolveHubEndpointOptions:()=>Z1,resolveHubBuildId:()=>$Q,resolveDefaultHubPort:()=>D6,resolveDefaultHubPathname:()=>Gj,resolveDefaultHubHost:()=>Hj,resolveCompatibleLocalHubUrl:()=>e5,resolveClineDir:()=>YA,resolveClineDataDir:()=>i2,requestHubShutdown:()=>t5,rememberRecoverableLocalHubUrl:()=>d$,readHubDiscovery:()=>_0,readBearerToken:()=>wQ,probeHubServer:()=>J$,probeHubConnection:()=>IU,prewarmDetachedHubServer:()=>jQ,normalizeHubWebSocketUrl:()=>l$,isLocalHubOrigin:()=>_X,isLocalHubHostName:()=>CQ,isHubReconnectableTransportError:()=>fj,isHubCommandTimeoutError:()=>YQ,isDiscoveryFilePresent:()=>BA,ensureHubWebSocketServer:()=>PQ,ensureHubServer:()=>pf,ensureDetachedHubServer:()=>DA,ensureCompatibleLocalHubUrl:()=>o2,createLocalHubScheduleRuntimeHandlers:()=>SQ,createInMemoryHubOwnerContext:()=>VA,createHubServerUrl:()=>D1,createHubAuthToken:()=>eZ,createConfiguredTelemetryService:()=>B$,createConfiguredTelemetryHandle:()=>i$,connectToHub:()=>zQ,clearHubDiscovery:()=>g0,NodeHubClient:()=>_1,NativeHubTransportAdapter:()=>TW,HubUIClient:()=>tj,HubTransportError:()=>b0,HubSessionClient:()=>sj,HubServerTransport:()=>c6,HubScheduleService:()=>x6,HubScheduleCommandService:()=>I6,HubCommandError:()=>L6,DEFAULT_HUB_PORT:()=>Vj,DEFAULT_HUB_PATHNAME:()=>Bj,DEFAULT_HUB_HOST:()=>Yj,BrowserWebSocketHubAdapter:()=>OW});import{createSessionId as Uy}from"@cline/shared";function J1($,W){return{version:$.version,requestId:$.requestId,ok:!0,payload:W}}function bU($,W,Z){return{version:$.version,requestId:$.requestId??Uy("hubreq_"),ok:!1,error:{code:W,message:Z}}}class I6{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 bU($,"unsupported_command",`Unsupported hub schedule command: ${$.command}`)}}catch(W){return bU($,"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 TQ($){return $?new Date($).getTime():void 0}function fy($){let W=$.metadata?{...$.metadata}:void 0;if(W)delete W.__hubScheduleCreatedBy,delete W.__hubScheduleCwd,delete W.__hubRuntimeOptions;return W}function OQ($){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:TQ($.nextRunAt),lastRunAt:TQ($.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:fy($)}}function Dy($){switch($){case"done":return"success";case"cancelled":return"aborted";case"running":return"running";case"queued":return"pending";default:return"failed"}}function pj($,W){return{executionId:$.runId,scheduleId:W,sessionId:$.sessionId,triggeredAt:new Date($.scheduledFor??$.createdAt).getTime(),startedAt:TQ($.startedAt),endedAt:TQ($.completedAt),status:Dy($.status),errorMessage:$.error}}class x6{store;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new i5({dbPath:$.dbPath}),this.materializer=new u5({store:this.store}),this.runner=new d5({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(dJ($.cronPattern),!$.workspaceRoot?.trim())throw Error("workspaceRoot is required for schedules");return OQ(this.store.createHubSchedule($))}getSchedule($){let W=this.store.getHubSchedule($);return W?OQ(W):void 0}listSchedules($={}){return this.store.listHubSchedules($).map((W)=>OQ(W))}updateSchedule($,W){if(W.cronPattern!==void 0)dJ(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?OQ(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 pj(Z,$)}triggerScheduleNowDetached($){let W=this.store.enqueueHubScheduleRun($,"manual");if(!W)return;return this.runner.tick().catch(()=>{return}),pj(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 pj(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}))}}UW();import{resolveClineBuildEnv as vy}from"@cline/shared";function cy($,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 uy="cline-hub-auth.";function dy($){return $.host!==void 0||$.port!==void 0||$.pathname!==void 0}function ly($,W){let Z=new URL($),Q=new URL(W);return Z.search="",Z.hash="",Q.search="",Q.hash="",Z.toString()===Q.toString()}function kU(){return vy()==="production"?Q1():m0()}async function py($){let W=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),W)return W;let Z=kU(),Q=await _0(Z.discoveryPath);if(Q?.url&&ly($.toString(),Q.url))return Q.authToken;return}async function aj($={}){let W=Z1($);if(!dy($)){let Z=kU(),Q=await _0(Z.discoveryPath);if(Q?.url)return Q.url}return D1(W.host,W.port,W.pathname)}async function zQ($){return await new Promise((W,Z)=>{(async()=>{let Q=new URL($),J=await py(Q);Q.hash="";let j=new WebSocket(Q.toString(),J?[`${uy}${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(cy(V,$))})})().catch(Z)})}async function IU($){try{return(await zQ($)).close(),!0}catch{return!1}}async function xU($,W){let Z=await aj($),Q=await zQ(Z);try{return await Q.send({version:W.version??"v1",clientId:W.clientId??"hub-client",...W})}finally{Q.close()}}function oj($){return $?JSON.parse(JSON.stringify($)):{}}function qQ($){let W=$?.session&&typeof $.session==="object"?$.session:void 0;if(!W)return;let Z=W.metadata&&typeof W.metadata==="object"?oj(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 gU($,W){return $.error?.message??`hub command failed: ${W}`}function ry($){let W=oj($);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 mU($){let W=$?.sessionId;return typeof W==="string"&&W.trim()?W.trim():void 0}function iy($){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 ny($){let W=oj($.payload);if($.event==="schedule.execution_completed")return{sessionId:$.sessionId?.trim()||mU(W)||"",eventType:"schedule.execution.completed",payload:W};if($.event==="schedule.execution_failed")return{sessionId:$.sessionId?.trim()||mU(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:ry($.payload)};case"run.completed":return{sessionId:Z,eventType:"runtime.chat.completed",payload:W};default:return}}class sj{options;client;metadataApplied=!1;constructor($){this.options=$;this.client=new _1({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=qQ(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 qQ(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(gU(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(gU(J,"session.restore"));let j=qQ(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=iy(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)=>qQ({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=ny(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 tj{client;constructor($){this.client=new _1({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 uf}from"@cline/shared";function ay($){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 vU=120,ej="...";function fW($){let W=$.trim();if(!W)return"";if(Buffer.byteLength(W,"utf8")<=vU)return W;let Z=vU-Buffer.byteLength(ej,"utf8");if(Z<=0)return ej;let Q="";for(let J of W){if(Buffer.byteLength(Q+J,"utf8")>Z)break;Q+=J}return`${Q}${ej}`}async function cU($){let W=$?.sessionId?.trim()||"unknown",Z=typeof $?.metadata?.messagesPath==="string"?$.metadata.messagesPath:void 0,J=[...await u$(Z)].reverse().find((V)=>V.role==="assistant"),j=J?ay(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 EQ,createSessionId as sh}from"@cline/shared";import{createSessionId as ey}from"@cline/shared";import{createSessionId as ty}from"@cline/shared";function oy($){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 sy($){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 MQ($,W,Z,Q){return{sessionId:$.sessionId,workspaceRoot:$.workspaceRoot,cwd:$.cwd,createdAt:Date.parse($.startedAt),updatedAt:Date.parse($.updatedAt),createdByClientId:W?.createdByClientId??"hub",status:oy($.status),participants:W?[...W.participants.values()]:[],metadata:sy($),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 v6($){return $&&typeof $==="object"&&!Array.isArray($)?$:void 0}function P0($){if(typeof $.payload?.sessionId==="string")return $.payload.sessionId.trim();return $.sessionId?.trim()??""}function j8($,W,Z){return{version:"v1",event:$,eventId:ty("hevt_"),sessionId:Z,timestamp:Date.now(),payload:W}}async function S0($,W){let Z=await $.sessionHost.getSession(W);if(!Z)return;let Q=await $.sessionHost.getAccumulatedUsage?.(W);return MQ(Z,$.sessionState.get(W),Q?.usage,Q?.aggregateUsage)}async function c0($,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 $X($,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 uU($,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 WX($,W){let Z=ey("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 ZX($,W,Z){let Q=$.pendingApprovals.get(W);if(!Q)return;return $.pendingApprovals.delete(W),Q.resolve(Z),{sessionId:Q.sessionId}}function QX($,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 dU($,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=ZX($,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 Zh}from"@cline/shared";function $h($){if($ instanceof Error)return{name:$.name,message:$.message,stack:$.stack};if($===void 0)return;return $}var lU={debug:10,info:20,warn:30,error:40,silent:50};function Wh(){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(lU[$]<lU[Wh()])return;let Q=JSON.stringify({ts:new Date().toISOString(),level:$,component:"hub",message:W,...Object.fromEntries(Object.entries(Z).map(([J,j])=>[J,$h(j)]).filter(([,J])=>J!==void 0))});if($==="error"||$==="warn"){console.error(`[hub] ${Q}`);return}console.log(`[hub] ${Q}`)}function JX($,W){let Z=W instanceof Error?W.stack||W.message:String(W);i("error",$,{error:Z})}async function pU($,W,Z,Q,J,j){let X=Zh("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 rU($,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 n$($,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 iU($,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 nU($,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 Qh}from"@cline/shared";function aU($,W){let Z=W.payload,Q=Z?.clientId?.trim()||W.clientId?.trim()||Qh("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 oU($,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=v6(W.payload?.metadata);if(Q.lastSeenAt=Date.now(),J)Q.metadata=JSON.parse(JSON.stringify(J));return u(W)}function sU($,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 tU($,W){return u(W,{clients:[...$.clients.values()]})}O0();import{existsSync as Wf,mkdirSync as Jh,readdirSync as jh,readFileSync as Xh,rmSync as Yh,writeFileSync as Vh}from"node:fs";import{dirname as Bh,join as eU}from"node:path";import{CONNECTOR_PLATFORMS as Hh,connectorChannelsFromPlatforms as Gh,listConnectorCatalog as Zf,shouldIncludeConnectorField as Kh}from"@cline/shared";import{resolveConnectorDataDir as Fh,resolveConnectorSettingsPath as XX}from"@cline/shared/storage";var Ah=1,$f={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},Uh={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 a$($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function DW($){return typeof $==="string"?$.trim():void 0}function Qf($){if(!Wf($))return;try{let W=JSON.parse(Xh($,"utf8"));return a$(W)?W:void 0}catch{return}}function YX(){let $=Qf(XX()),W=a$($?.connectors)?$.connectors:{},Z={};for(let[Q,J]of Object.entries(W)){if(!a$(J))continue;let j=DW(J.type),X=DW(J.configuredAt),Y=DW(J.updatedAt);if(!j||!X||!Y)continue;let V=NQ(J.values),B=a$(J.security)?{enabled:J.security.enabled===!0,values:NQ(J.security.values)}:void 0;Z[Q]={type:j,values:V,security:B,configuredAt:X,updatedAt:Y}}return{version:Ah,connectors:Z}}function Jf($){let W=XX();Jh(Bh(W),{recursive:!0}),Vh(W,`${JSON.stringify($,null,2)}
|
|
589
|
+
`,"utf8")}function NQ($){if(!a$($))return{};let W={};for(let[Z,Q]of Object.entries($))if(typeof Q==="string")W[Z]=Q.trim();return W}function fh($){if(!Number.isInteger($)||$<=0)return!1;try{return process.kill($,0),!0}catch{return!1}}function Dh($){let W=eU(Fh(),$);if(!Wf(W))return[];return jh(W).filter((Z)=>Z.endsWith(".json")&&!Z.endsWith(".threads.json")).map((Z)=>eU(W,Z))}function _h($,W,Z){let Q=W.botUsername??W.userName??W.applicationId??W.phoneNumberId??String(Z);return`${$}:${Q}`}function Lh($,W){let Z=Qf(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||!fh(Q))return;let j=Uh[$];if(!j)return;let X={};for(let Y of j.required){let V=$f[Y](Z);if(!V||typeof V==="string"&&!V.trim())return;X[Y]=V}for(let Y of j.optional){let V=$f[Y](Z);if(V!==void 0)X[Y]=V}return{id:_h($,X,Q),type:$,pid:Q,hubUrl:J,...X}}function Oh(){let $=[];for(let{name:W}of Zf())for(let Z of Dh(W)){let Q=Lh(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 Th(){let $=YX();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 VX(){return{available:Gh(),active:Oh(),configured:Th()}}function zh($,W){if($.required&&!W[$.flag]?.trim())throw Error(`${$.label} is required`)}function qh($,W){let Z={};for(let J of $.fields)Z[J.flag]=W[J.flag]??J.initialValue??"";let Q={};for(let J of $.fields){if(!Kh(J,Z))continue;zh(J,Z),Q[J.flag]=Z[J.flag]}return Q}function Mh($){if(!a$($))throw Error("connector.configure payload must be an object.");let W=DW($.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(Zf().map((K)=>K.name)).has(Z.id))throw Error(`connector channel is not available: ${W}`);let J=NQ($.values),j=qh(Z,J),X=a$($.security)?$.security:{},Y=X.enabled===!0,V=NQ(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=YX(),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},Jf(B),VX()}function Nh($){if(!a$($))throw Error("connector.delete_config payload must be an object.");let W=DW($.channel);if(!W)throw Error("channel is required");let Z=YX();if(delete Z.connectors[W],Object.keys(Z.connectors).length>0)Jf(Z);else Yh(XX(),{force:!0});return VX()}function Rh($){return $==="connector.configure"||$==="connector.delete_config"}function jX($,W,Z){if(!Rh(W.command))return;U8($.telemetry,{ulid:W.sessionId??W.requestId??"hub",tool:W.command,success:Z})}async function jf($,W){try{if(W.command==="connector.channels")return u(W,VX());if(W.command==="connector.configure"){let Z=Mh(W.payload);return jX($,W,!0),u(W,Z)}if(W.command==="connector.delete_config"){let Z=Nh(W.payload);return jX($,W,!0),u(W,Z)}return h(W,"unsupported_connector_command",`unsupported connector command: ${W.command}`)}catch(Z){return jX($,W,!1),h(W,"connector_command_failed",Z instanceof Error?Z.message:String(Z))}}var Eh=30000;function wh($){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 Ph($,W,Z){let Q=Z instanceof Error&&Z.message.trim()?Z.message:`Unknown session: ${W}`;return h($,d2,Q)}function Sh($){return $?$:void 0}function bh($){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 yh($,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))},Eh),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)}),QX($,(F)=>F.sessionId===Z.sessionId,K),n$($,(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 Xf($,W){let Z=P0(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=bh(Q);$.suppressNextTerminalEventBySession.set(Z,"run.start.reply");let V;try{V=await yh($,W,{sessionId:Z,prompt:J,mode:Sh(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 Ph(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 c0($,Z),G=Ch(V);if($.publish($.buildEvent(wh(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 c0($,Z);return u(W,V||B?{...V?{result:V}:{},...B?{snapshot:B}:{}}:void 0)}async function Yf($,W){let Z=P0(W),Q=typeof W.payload?.reason==="string"?W.payload.reason:"Run was aborted before pending approval or capability request was resolved.";QX($,(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{n$($,(J)=>J.sessionId===Z,Q)}return u(W,{applied:!0})}async function Vf($,W){let Z=h6(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 Bf($,W){switch(W.type){case"chunk":return;case"agent_event":await hh($,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([S0($,W.payload.sessionId),c0($,W.payload.sessionId)]);if(Z)$.publish($.buildEvent("session.updated",{session:Z,...Q?{snapshot:Q}:{}},W.payload.sessionId));return}case"ended":await kh($,W);return;default:return}}async function hh($,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 kh($,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([S0($,W.payload.sessionId),c0($,W.payload.sessionId)]);if(W.payload.reason==="completed"){let X=await cU(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 Af,parseRuntimeConfigExtensions as Uf}from"@cline/shared";var Hf={};w(Hf,{SessionVersioningService:()=>o$,SessionVersioningError:()=>u0});class u0 extends Error{code;constructor($,W){super(W);this.code=$;this.name="SessionVersioningError"}}function Ih($){let W=$.sessionId.trim();if(!W)throw new u0("invalid_restore","sessionId is required");if(!$.restoreMessages&&!$.restoreWorkspace)throw new u0("invalid_restore","restore.messages or restore.workspace must be true");if($.restoreMessages&&$.requiresStart)throw new u0("invalid_restore","start is required when restore.messages is true");if(!Number.isInteger($.checkpointRunCount)||$.checkpointRunCount<1)throw new u0("invalid_restore","checkpointRunCount must be a positive integer");return W}class o${async restoreCheckpoint($){let W=$.restore?.messages!==!1,Z=$.restore?.workspace!==!1,Q=Ih({sessionId:$.sessionId,restoreMessages:W,restoreWorkspace:Z,requiresStart:$.start===void 0,checkpointRunCount:$.checkpointRunCount}),J=await $.getSession(Q);if(!J)throw new u0("session_not_found",`Session ${Q} not found`);let j=W?await $.readMessages(Q):void 0;if(W&&j?.length===0)throw new u0("session_messages_not_found",`No messages found for session ${Q}`);let X=dj({session:J,messages:j,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd,restoreMessages:W});if(Z)await($.applyWorkspaceCheckpoint??lj)(X.cwd,X.checkpoint);let Y=C1({session:J,messages:j});if(!W)return{checkpoint:X.checkpoint,sourceSnapshot:Y};let V=cj(J,$.checkpointRunCount),B=$.restore?.omitCheckpointMessageFromSession?uj(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 u0("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??hG)(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 De,HUB_COMPACTION_CAPABILITY as _e,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as Le,HUB_HOOK_CAPABILITY_PREFIX as Oe,HUB_MISTAKE_LIMIT_CAPABILITY as Te,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as ze,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as qe,isHubToolExecutorName as xh}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as we,HUB_COMPACTION_CAPABILITY as Ce,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as Pe,HUB_HOOK_CAPABILITY_PREFIX as Se,HUB_MISTAKE_LIMIT_CAPABILITY as be,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as ye,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as he}from"@cline/shared";var gh=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function X8($){return $&&typeof $==="object"&&!Array.isArray($)?JSON.parse(JSON.stringify($)):void 0}function mh($,W){let Z=typeof $.name==="string"?$.name.trim():"",Q=typeof $.description==="string"?$.description:"",J=typeof $.capabilityName==="string"?$.capabilityName.trim():"",j=X8($.inputSchema);if(!Z||!Q||!j||!J||W.has(J))return;return W.add(J),{kind:"tool",capabilityName:J,name:Z,description:Q,inputSchema:j,...X8($.lifecycle)?{lifecycle:X8($.lifecycle)}:{}}}function HX($){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=mh(J,Z);if(Y)W.push(Y);continue}if(j==="toolExecutor"){let Y=J.executor;if(!xh(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,...X8(J.config)?{config:X8(J.config)}:{}});continue}if(j==="checkpoint"){Z.add(X),W.push({kind:"checkpoint",capabilityName:X,...X8(J.config)?{config:X8(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 Kf($){return{agentId:$.agentId,conversationId:$.conversationId,iteration:$.iteration,metadata:$.metadata}}function vh($){return Object.hasOwn($,"update")?$.update:$}function _W($){return $.trim().replace(/^\/+/,"").toLowerCase()}function ch($){let W=($??[]).map(_W).filter(Boolean);return W.length>0?new Set(W):void 0}function uh($,W,Z){if(!Z)return!0;let Q=_W($),J=_W(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 BX($,W){let Z=ch(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)=>uh(Q.id,Q.name,Z))}function Gf($,W){let Z=async(Q,J)=>{let j=_W(Q),Y=BX($,W).filter((K)=>K.id===j||_W(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:()=>BX($,W).map(({skill:Q,...J})=>J),enumerable:!0}),Z}function dh($,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)=>BX(J,X).some((Y)=>!Y.disabled),createSkillsExecutor:(X)=>Gf(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:()=>V6(J.records.rule.map((V)=>V.item).filter((V)=>V.disabled!==!0))});if(X.registerSkillsTool)Y.registerTool(K2(Gf(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 mh($,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:Xf(Y)},W))?.result}]);return J.length>0?Object.fromEntries(J):void 0}function vh($,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:Xf(X)},W,X.emitUpdate?(V)=>{X.emitUpdate?.(kh(V))}:void 0))?.result}}))}function ch($,W,Z,Q){let J=new Map(Z.map((X)=>[X.name,X])),j={};for(let X of yh){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 VX($){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:mh($.sessionId,$.targetClientId,W,$.requestCapability),localRuntime:{...Q.length>0?{hooks:ch($.sessionId,$.targetClientId,Q,$.requestCapability)}:{},...Z.length>0?{extraTools:vh($.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:gh($.sessionId,$.targetClientId,Y,$.requestCapability)}:{}}}}var Yf="hubCapabilityOwnerClientId";function MQ($){return typeof $==="string"&&$.trim().length>0?$.trim():void 0}function uh($){if($==="low"||$==="medium"||$==="high"||$==="xhigh"||$===null)return $;return}function dh($){let W=m6($)??{},Z={},Q=MQ(W.providerId);if(Q)Z.providerId=Q;let J=MQ(W.modelId);if(J)Z.modelId=J;let j=MQ(W.apiKey);if(j!==void 0)Z.apiKey=j;let X=MQ(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=uh(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 O2(Z)}function lh($,W){return $.sessionState.get(W)?.createdByClientId}function ph($){if(!$||!(Yf in $))return $;let W={...$};return delete W[Yf],W}function Hf($){let W=lh($.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 Gf($,W,Z){let Q=performance.now(),J={command:W.command,requestId:W.requestId,clientId:W.clientId,sessionId:W.sessionId};p("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=G1(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 p("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=YX(V.clientContributions);p("info","session.create.contributions_parsed",{...J,clientId:K,workspaceRoot:G,cwd:typeof j.cwd==="string"?j.cwd:void 0,contributionCount:F.length});let f=(typeof Y?.sessionId==="string"?Y.sessionId.trim():"")||Vf(),U=Bf(V.configExtensions);p("info","session.create.runtime_build.begin",{...J,sessionId:f,configExtensionCount:U?.length??0});let _=VX({sessionId:f,targetClientId:K,contributions:F,sessionConfig:Y,requestCapability:$.requestCapability});p("info","session.create.start_session.begin",{...J,sessionId:f,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 D=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,..._.localRuntime},capabilities:{toolExecutors:_.toolExecutors,requestToolApproval:Z},config:{...Y??{},sessionId:f,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});p("info","session.create.start_session.end",{...J,sessionId:D.sessionId,elapsedMs:Math.round(performance.now()-Q),hasImmediateResult:!!D.result}),sj($,D.sessionId,K,"creator",{interactive:X.interactive!==!1}),p("info","session.create.read_records.begin",{...J,sessionId:D.sessionId});let[M,T]=await Promise.all([S0($,D.sessionId),d0($,D.sessionId)]);if(p("info","session.create.read_records.end",{...J,sessionId:D.sessionId,hasSession:!!M,hasSnapshot:!!T,elapsedMs:Math.round(performance.now()-Q)}),M)$.publish($.buildEvent("session.created",{session:M,...T?{snapshot:T}:{}},D.sessionId));return p("info","session.create.reply",{...J,sessionId:D.sessionId,elapsedMs:Math.round(performance.now()-Q)}),u(W,{session:M,...T?{snapshot:T}:{}})}async function Kf($,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=G1(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=YX(B.clientContributions),U=(typeof V?.sessionId==="string"?V.sessionId.trim():"")||Vf(),_=Bf(B.configExtensions),D=VX({sessionId:U,targetClientId:F,contributions:A,sessionConfig:V,requestCapability:$.requestCapability}),T=await new o$().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 y=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:_,...D.localRuntime},capabilities:{toolExecutors:D.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??y,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");sj($,O.sessionId,F,"creator",{interactive:G.interactive!==!1});let[L,C]=await Promise.all([S0($,O.sessionId),d0($,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 l0)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 Ff($,W){let Z=P0(W);if(!Z)return h(W,"invalid_session_attach","session.attach requires a session id");let Q=await S0($,Z);if(!Q)return h(W,"session_not_found",`Unknown session: ${Z}`);IU($,Z,W.clientId?.trim()||"hub-client","participant");let J=await S0($,Z);return $.publish($.buildEvent("session.attached",{session:J??Q},Z)),u(W,{session:J??Q})}async function Af($,W){let Z=P0(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)}n$($,(Y)=>Y.sessionId===Z&&Y.targetClientId===Q,`Capability owner client ${Q} detached before request was resolved.`);let[j,X]=await Promise.all([S0($,Z),d0($,Z)]);return $.publish($.buildEvent("session.detached",j?{session:j,...X?{snapshot:X}:{},clientId:Q}:{clientId:Q},Z)),u(W)}async function Uf($,W){let Z=P0(W),Q=W.payload?.includeSnapshot===!0,[J,j]=await Promise.all([S0($,Z),Q?d0($,Z):Promise.resolve(void 0)]);return J?u(W,{session:J,...j?{snapshot:j}:{}}):h(W,"session_not_found",`Unknown session: ${Z}`)}async function ff($,W){let Z=P0(W);if(!Z)return h(W,"invalid_session_id","session.messages requires a session id");if(!await S0($,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 Df($,W){let Z=P0(W);if(!Z)return h(W,"invalid_session_id","session.compaction.get requires a session id");if(!await S0($,Z))return h(W,"session_not_found",`Unknown session: ${Z}`);let J=W.clientId?.trim()||"hub-client",j=Hf({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 _f($,W){let Z=typeof W.payload?.limit==="number"?W.payload.limit:200,J=(await $.sessionHost.listSessions(Z)).map((j)=>zQ(j,$.sessionState.get(j.sessionId)));return u(W,{sessions:J})}async function Lf($,W){let Z=P0(W),Q=ph(m6(W.payload?.metadata)),J=await $.sessionHost.updateSession(Z,{metadata:Q}),[j,X]=await Promise.all([S0($,Z),d0($,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 Of($,W){let Z=P0(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=m6(W.payload),j=dh(J?.updates);return await Q.call($.sessionHost,Z,j),u(W,{sessionId:Z,updated:!0})}async function Tf($,W){let Z=P0(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 S0($,Z);if(!J)return h(W,"session_not_found",`Unknown session: ${Z}`);let j=Hf({sessionId:Z,ctx:$,clientId:Q,envelope:W});if(j)return j;let X=W.payload&&typeof W.payload==="object"?W.payload:{},Y=G1(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([S0($,Z),d0($,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 zf($,W){let Z=P0(W),Q=await $.sessionHost.deleteSession(Z);return $.sessionState.delete(Z),u(W,{deleted:Q})}async function qf($,W){let Z=P0(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 Mf($,W){let Z=P0(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 Rf($,W){let Z=P0(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 Nf($){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 ih=new Set(["skills","workflows","rules","tools","mcp"]);function BX($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function DW($,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 nh($,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 Ef($){if($===void 0)return{};if(!BX($))throw Error("settings.list payload must be an object.");return{cwd:DW($,"cwd"),workspaceRoot:DW($,"workspaceRoot"),availabilityContext:BX($.availabilityContext)?$.availabilityContext:void 0}}function ah($){if(!BX($))throw Error("settings.toggle payload must be an object.");let{type:W}=$;if(typeof W!=="string"||!ih.has(W))throw Error("settings.toggle payload 'type' must be one of: skills, workflows, rules, tools, mcp.");return{...Ef($),type:W,id:DW($,"id"),path:DW($,"path"),name:DW($,"name"),enabled:nh($,"enabled")}}class v6{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=rh("hub_");ctx;constructor($){this.options=$;if(this.sessionHost=$.sessionHost??new b1({sessionService:new S1(new C1),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:j8,requestCapability:(W,Z,Q,J,j)=>mU(this.ctx,W,Z,Q,J,j)},this.schedules=new I6({...$.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(j8(Q,Z&&typeof Z==="object"?Z:void 0))}}),this.scheduleCommands=new k6(this.schedules),this.settings=$.settingsService??new m$,$.cronOptions)this.cronService=new r5({runtimeHandlers:$.runtimeHandlers,...$.cronOptions});this.sessionHost.subscribe((W)=>{Qf(this.ctx,W).catch((Z)=>{WX("session event handling failed",Z),RQ(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())ej(this.ctx,$,{approved:!1,reason:"Hub shutting down before approval was resolved."});if(n$(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 RQ(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 dU(this.ctx,$);case"client.update":return lU(this.ctx,$);case"client.unregister":return pU(this.ctx,$,(W)=>{this.listeners.delete(W),this.detachClientFromSessions(W)});case"client.list":return rU(this.ctx,$);case"session.create":return await Gf(this.ctx,$,(W)=>tj(this.ctx,W));case"session.restore":return await Kf(this.ctx,$,(W)=>tj(this.ctx,W));case"session.attach":return await Ff(this.ctx,$);case"session.detach":return await Af(this.ctx,$);case"session.get":return await Uf(this.ctx,$);case"session.messages":return await ff(this.ctx,$);case"session.compaction.get":return await Df(this.ctx,$);case"session.list":return await _f(this.ctx,$);case"session.update":return await Lf(this.ctx,$);case"session.update_connection":return await Of(this.ctx,$);case"session.compaction.update":return await Tf(this.ctx,$);case"session.pending_prompts":return await qf(this.ctx,$);case"session.update_pending_prompt":return await Mf(this.ctx,$);case"session.remove_pending_prompt":return await Rf(this.ctx,$);case"session.delete":return await zf(this.ctx,$);case"session.hook":return await Zf(this.ctx,$);case"run.start":case"session.send_input":return await $f(this.ctx,$);case"run.abort":return await Wf(this.ctx,$);case"capability.request":return await cU(this.ctx,$);case"approval.respond":return await xU(this.ctx,$);case"capability.respond":return uU(this.ctx,$);case"capability.progress":return vU(this.ctx,$);case"ui.notify":return this.publish(j8("ui.notify",$.payload??{})),u($);case"ui.show_window":return this.publish(j8("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 eU(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=Nf($.command);if(Z)this.publish(j8(Z,W.payload))}return W}}}captureFailedReply($,W){if(W.ok||!W.error||!oh(W.error.code))return;RQ(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(Ef($.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(ah($.payload));return this.publish(j8("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)}n$(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){WX(`listener threw while publishing ${$.event}`,Q),RQ(this.options.telemetry,{component:"core",operation:"hub.publish",error:Q,severity:"warn",handled:!0,context:{event:$.event,sessionId:$.sessionId}})}}}}function oh($){return $==="session_not_found"||$==="session_messages_not_found"||$==="hub_command_timeout"||$.endsWith("_failed")}import{timingSafeEqual as $k}from"node:crypto";import Wk from"node:http";import Zk from"node:net";import{URL as FX}from"node:url";import{CURRENT_HUB_PROTOCOL_VERSION as Pf,HUB_CAPABILITIES as Qk,isHubProtocolCompatible as Jk,MAX_CLIENT_HUB_PROTOCOL_VERSION as Sf,MIN_CLIENT_HUB_PROTOCOL_VERSION as bf}from"@cline/shared";import{WebSocketServer as jk}from"ws";import{captureSdkError as wf,HUB_COMMAND_SLOW_LOG_MS as sh,resolveHubCommandTimeoutMs as th,safeJsonParse as eh}from"@cline/shared";function HX($){return{command:$.envelope.command,requestId:$.envelope.requestId,clientId:$.envelope.clientId,sessionId:$.envelope.sessionId}}function Cf($,W,Z){return{version:$.envelope.version,requestId:$.envelope.requestId,ok:!1,error:{code:W,message:Z}}}class _W{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=HX(B);p("info","command.start",K);let F=setTimeout(()=>{if(G)return;p("warn","command.slow",{...K,elapsedMs:Math.round(performance.now()-H)})},sh),A=this.transport.command(B.envelope);A.then((T)=>{if(!G)return;p(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;p("error","command.late_error",{...K,elapsedMs:Math.round(performance.now()-H),error:T})});let f=!1,U,_,D=th(B.envelope.command,B.envelope.timeoutMs);try{_=D===null?await A:await Promise.race([A,new Promise((T)=>{U=setTimeout(()=>{f=!0,wf(this.telemetry,{component:"core",operation:"hub.command_timeout",error:Error(`Hub command ${B.envelope.command} did not complete within ${D}ms.`),severity:"error",handled:!0,context:{...K,timeoutMs:D}}),T(Cf(B,"hub_command_timeout",`Hub command ${B.envelope.command} did not complete within ${D}ms. Check hub-daemon.log for command.start/command.slow logs with requestId ${B.envelope.requestId}.`))},D)})])}catch(T){if(clearTimeout(F),U)clearTimeout(U);throw T}if(G=f,clearTimeout(F),U)clearTimeout(U);let M=Math.round(performance.now()-H);if(f)p("error","command.timeout",{...K,durationMs:M,timeoutMs:D});else p(_.ok?"info":"warn","command.end",{...K,durationMs:M,ok:_.ok,errorCode:_.error?.code,errorMessage:_.error?.message});if(B.envelope.command==="client.register"&&_.ok){let O=(B.envelope.payload??{}).clientId?.trim()||B.envelope.clientId?.trim();if(O)Z.add(O)}else if(B.envelope.command==="client.unregister"&&_.ok){let T=B.envelope.clientId?.trim();if(T)Z.delete(T)}J({kind:"reply",envelope:_});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"?eh(V.data):void 0;if(!H||H.kind!=="command"){p("error","rejected malformed websocket frame",{error:B});return}p("error","command.error",{...HX(H),error:B}),wf(this.telemetry,{component:"core",operation:"hub.websocket_command",error:B,severity:"error",handled:!0,context:HX(H)}),J({kind:"reply",envelope:Cf(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 LW{transport;constructor($){this.transport=$}command($){return this.transport.handleCommand($)}subscribe($,W,Z){return this.transport.subscribe($,W,Z)}}function Xk($){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 Yk($){return{send(W){$.send(W)},addEventListener(W,Z){if(W==="message"){$.on("message",(Q)=>{Z({data:Xk(Q)})});return}$.on("close",Z)},removeEventListener(){}}}function Vk($){try{$.write(`HTTP/1.1 400 Bad Request\r
|
|
597
|
+
${H}`:V.instructions}})}})}}function lh($,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:Kf(Y)},W))?.result}]);return J.length>0?Object.fromEntries(J):void 0}function ph($,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:Kf(X)},W,X.emitUpdate?(V)=>{X.emitUpdate?.(vh(V))}:void 0))?.result}}))}function rh($,W,Z,Q){let J=new Map(Z.map((X)=>[X.name,X])),j={};for(let X of gh){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 GX($){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:lh($.sessionId,$.targetClientId,W,$.requestCapability),localRuntime:{...Q.length>0?{hooks:rh($.sessionId,$.targetClientId,Q,$.requestCapability)}:{},...Z.length>0?{extraTools:ph($.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:dh($.sessionId,$.targetClientId,Y,$.requestCapability)}:{}}}}var Ff="hubCapabilityOwnerClientId";function RQ($){return typeof $==="string"&&$.trim().length>0?$.trim():void 0}function ih($){if($==="low"||$==="medium"||$==="high"||$==="xhigh"||$===null)return $;return}function nh($){let W=v6($)??{},Z={},Q=RQ(W.providerId);if(Q)Z.providerId=Q;let J=RQ(W.modelId);if(J)Z.modelId=J;let j=RQ(W.apiKey);if(j!==void 0)Z.apiKey=j;let X=RQ(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=ih(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 O2(Z)}function ah($,W){return $.sessionState.get(W)?.createdByClientId}function oh($){if(!$||!(Ff in $))return $;let W={...$};return delete W[Ff],W}function ff($){let W=ah($.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 Df($,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=HX(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 f=(typeof Y?.sessionId==="string"?Y.sessionId.trim():"")||Af(),U=Uf(V.configExtensions);i("info","session.create.runtime_build.begin",{...J,sessionId:f,configExtensionCount:U?.length??0});let _=GX({sessionId:f,targetClientId:K,contributions:F,sessionConfig:Y,requestCapability:$.requestCapability});i("info","session.create.start_session.begin",{...J,sessionId:f,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 D=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,..._.localRuntime},capabilities:{toolExecutors:_.toolExecutors,requestToolApproval:Z},config:{...Y??{},sessionId:f,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:D.sessionId,elapsedMs:Math.round(performance.now()-Q),hasImmediateResult:!!D.result}),$X($,D.sessionId,K,"creator",{interactive:X.interactive!==!1}),i("info","session.create.read_records.begin",{...J,sessionId:D.sessionId});let[M,T]=await Promise.all([S0($,D.sessionId),c0($,D.sessionId)]);if(i("info","session.create.read_records.end",{...J,sessionId:D.sessionId,hasSession:!!M,hasSnapshot:!!T,elapsedMs:Math.round(performance.now()-Q)}),M)$.publish($.buildEvent("session.created",{session:M,...T?{snapshot:T}:{}},D.sessionId));return i("info","session.create.reply",{...J,sessionId:D.sessionId,elapsedMs:Math.round(performance.now()-Q)}),u(W,{session:M,...T?{snapshot:T}:{}})}async function _f($,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=HX(B.clientContributions),U=(typeof V?.sessionId==="string"?V.sessionId.trim():"")||Af(),_=Uf(B.configExtensions),D=GX({sessionId:U,targetClientId:F,contributions:A,sessionConfig:V,requestCapability:$.requestCapability}),T=await new o$().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:(R)=>$.sessionHost.getSession(R),readMessages:(R)=>$.sessionHost.readSessionMessages(R),buildStartInput:(R)=>{if(R.restoredCheckpointMetadata)G.checkpoint=R.restoredCheckpointMetadata;let p=typeof Q.workspaceRoot==="string"&&Q.workspaceRoot.trim()?Q.workspaceRoot.trim():typeof Q.cwd==="string"&&Q.cwd.trim()?Q.cwd.trim():R.sourceSession.workspaceRoot||R.sourceSession.cwd;return{source:typeof G.source==="string"?G.source:void 0,interactive:G.interactive!==!1,sessionMetadata:{...G,restoredFromSessionId:J,restoredCheckpointRunCount:j},initialMessages:R.initialMessages,initialCompactionState:H,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:_,...D.localRuntime},capabilities:{toolExecutors:D.toolExecutors,requestToolApproval:Z},config:{...V??{},sessionId:U,providerId:V?.providerId??(typeof K.provider==="string"?K.provider:R.sourceSession.provider),modelId:V?.modelId??(typeof K.model==="string"?K.model:R.sourceSession.model),apiKey:V?.apiKey??(typeof K.apiKey==="string"?K.apiKey:""),cwd:V?.cwd??R.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:(R)=>$.sessionHost.startSession(R),getStartedSessionId:(R)=>R.sessionId,readRestoredSession:(R)=>$.sessionHost.getSession(R)});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");$X($,O.sessionId,F,"creator",{interactive:G.interactive!==!1});let[L,C]=await Promise.all([S0($,O.sessionId),c0($,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 u0)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 Lf($,W){let Z=P0(W);if(!Z)return h(W,"invalid_session_attach","session.attach requires a session id");let Q=await S0($,Z);if(!Q)return h(W,"session_not_found",`Unknown session: ${Z}`);uU($,Z,W.clientId?.trim()||"hub-client","participant");let J=await S0($,Z);return $.publish($.buildEvent("session.attached",{session:J??Q},Z)),u(W,{session:J??Q})}async function Of($,W){let Z=P0(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)}n$($,(Y)=>Y.sessionId===Z&&Y.targetClientId===Q,`Capability owner client ${Q} detached before request was resolved.`);let[j,X]=await Promise.all([S0($,Z),c0($,Z)]);return $.publish($.buildEvent("session.detached",j?{session:j,...X?{snapshot:X}:{},clientId:Q}:{clientId:Q},Z)),u(W)}async function Tf($,W){let Z=P0(W),Q=W.payload?.includeSnapshot===!0,[J,j]=await Promise.all([S0($,Z),Q?c0($,Z):Promise.resolve(void 0)]);return J?u(W,{session:J,...j?{snapshot:j}:{}}):h(W,"session_not_found",`Unknown session: ${Z}`)}async function zf($,W){let Z=P0(W);if(!Z)return h(W,"invalid_session_id","session.messages requires a session id");if(!await S0($,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 qf($,W){let Z=P0(W);if(!Z)return h(W,"invalid_session_id","session.compaction.get requires a session id");if(!await S0($,Z))return h(W,"session_not_found",`Unknown session: ${Z}`);let J=W.clientId?.trim()||"hub-client",j=ff({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 Mf($,W){let Z=typeof W.payload?.limit==="number"?W.payload.limit:200,J=(await $.sessionHost.listSessions(Z)).map((j)=>MQ(j,$.sessionState.get(j.sessionId)));return u(W,{sessions:J})}async function Nf($,W){let Z=P0(W),Q=oh(v6(W.payload?.metadata)),J=await $.sessionHost.updateSession(Z,{metadata:Q}),[j,X]=await Promise.all([S0($,Z),c0($,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 Rf($,W){let Z=P0(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=v6(W.payload),j=nh(J?.updates);return await Q.call($.sessionHost,Z,j),u(W,{sessionId:Z,updated:!0})}async function Ef($,W){let Z=P0(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 S0($,Z);if(!J)return h(W,"session_not_found",`Unknown session: ${Z}`);let j=ff({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([S0($,Z),c0($,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 wf($,W){let Z=P0(W),Q=await $.sessionHost.deleteSession(Z);return $.sessionState.delete(Z),u(W,{deleted:Q})}async function Cf($,W){let Z=P0(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 Pf($,W){let Z=P0(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 Sf($,W){let Z=P0(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 bf($){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 th=new Set(["skills","workflows","rules","tools","mcp"]);function KX($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function LW($,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 eh($,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 yf($){if($===void 0)return{};if(!KX($))throw Error("settings.list payload must be an object.");return{cwd:LW($,"cwd"),workspaceRoot:LW($,"workspaceRoot"),availabilityContext:KX($.availabilityContext)?$.availabilityContext:void 0}}function $k($){if(!KX($))throw Error("settings.toggle payload must be an object.");let{type:W}=$;if(typeof W!=="string"||!th.has(W))throw Error("settings.toggle payload 'type' must be one of: skills, workflows, rules, tools, mcp.");return{...yf($),type:W,id:LW($,"id"),path:LW($,"path"),name:LW($,"name"),enabled:eh($,"enabled")}}class c6{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=sh("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:j8,requestCapability:(W,Z,Q,J,j)=>pU(this.ctx,W,Z,Q,J,j)},this.schedules=new x6({...$.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(j8(Q,Z&&typeof Z==="object"?Z:void 0))}}),this.scheduleCommands=new I6(this.schedules),this.settings=$.settingsService??new m$,$.cronOptions)this.cronService=new n5({runtimeHandlers:$.runtimeHandlers,...$.cronOptions});this.sessionHost.subscribe((W)=>{Bf(this.ctx,W).catch((Z)=>{JX("session event handling failed",Z),EQ(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())ZX(this.ctx,$,{approved:!1,reason:"Hub shutting down before approval was resolved."});if(n$(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 EQ(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 aU(this.ctx,$);case"client.update":return oU(this.ctx,$);case"client.unregister":return sU(this.ctx,$,(W)=>{this.listeners.delete(W),this.detachClientFromSessions(W)});case"client.list":return tU(this.ctx,$);case"session.create":return await Df(this.ctx,$,(W)=>WX(this.ctx,W));case"session.restore":return await _f(this.ctx,$,(W)=>WX(this.ctx,W));case"session.attach":return await Lf(this.ctx,$);case"session.detach":return await Of(this.ctx,$);case"session.get":return await Tf(this.ctx,$);case"session.messages":return await zf(this.ctx,$);case"session.compaction.get":return await qf(this.ctx,$);case"session.list":return await Mf(this.ctx,$);case"session.update":return await Nf(this.ctx,$);case"session.update_connection":return await Rf(this.ctx,$);case"session.compaction.update":return await Ef(this.ctx,$);case"session.pending_prompts":return await Cf(this.ctx,$);case"session.update_pending_prompt":return await Pf(this.ctx,$);case"session.remove_pending_prompt":return await Sf(this.ctx,$);case"session.delete":return await wf(this.ctx,$);case"session.hook":return await Vf(this.ctx,$);case"run.start":case"session.send_input":return await Xf(this.ctx,$);case"run.abort":return await Yf(this.ctx,$);case"capability.request":return await iU(this.ctx,$);case"approval.respond":return await dU(this.ctx,$);case"capability.respond":return nU(this.ctx,$);case"capability.progress":return rU(this.ctx,$);case"ui.notify":return this.publish(j8("ui.notify",$.payload??{})),u($);case"ui.show_window":return this.publish(j8("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 jf(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=bf($.command);if(Z)this.publish(j8(Z,W.payload))}return W}}}captureFailedReply($,W){if(W.ok||!W.error||!Wk(W.error.code))return;EQ(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(yf($.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($k($.payload));return this.publish(j8("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)}n$(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){JX(`listener threw while publishing ${$.event}`,Q),EQ(this.options.telemetry,{component:"core",operation:"hub.publish",error:Q,severity:"warn",handled:!0,context:{event:$.event,sessionId:$.sessionId}})}}}}function Wk($){return $==="session_not_found"||$==="session_messages_not_found"||$==="hub_command_timeout"||$.endsWith("_failed")}import{timingSafeEqual as jk}from"node:crypto";import Xk from"node:http";import Yk from"node:net";import{URL as fX}from"node:url";import{CURRENT_HUB_PROTOCOL_VERSION as If,HUB_CAPABILITIES as Vk,isHubProtocolCompatible as Bk,MAX_CLIENT_HUB_PROTOCOL_VERSION as xf,MIN_CLIENT_HUB_PROTOCOL_VERSION as gf}from"@cline/shared";import{WebSocketServer as Hk}from"ws";import{captureSdkError as hf,HUB_COMMAND_SLOW_LOG_MS as Zk,resolveHubCommandTimeoutMs as Qk,safeJsonParse as Jk}from"@cline/shared";function FX($){return{command:$.envelope.command,requestId:$.envelope.requestId,clientId:$.envelope.clientId,sessionId:$.envelope.sessionId}}function kf($,W,Z){return{version:$.envelope.version,requestId:$.envelope.requestId,ok:!1,error:{code:W,message:Z}}}class OW{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=FX(B);i("info","command.start",K);let F=setTimeout(()=>{if(G)return;i("warn","command.slow",{...K,elapsedMs:Math.round(performance.now()-H)})},Zk),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 f=!1,U,_,D=Qk(B.envelope.command,B.envelope.timeoutMs);try{_=D===null?await A:await Promise.race([A,new Promise((T)=>{U=setTimeout(()=>{f=!0,hf(this.telemetry,{component:"core",operation:"hub.command_timeout",error:Error(`Hub command ${B.envelope.command} did not complete within ${D}ms.`),severity:"error",handled:!0,context:{...K,timeoutMs:D}}),T(kf(B,"hub_command_timeout",`Hub command ${B.envelope.command} did not complete within ${D}ms. Check hub-daemon.log for command.start/command.slow logs with requestId ${B.envelope.requestId}.`))},D)})])}catch(T){if(clearTimeout(F),U)clearTimeout(U);throw T}if(G=f,clearTimeout(F),U)clearTimeout(U);let M=Math.round(performance.now()-H);if(f)i("error","command.timeout",{...K,durationMs:M,timeoutMs:D});else i(_.ok?"info":"warn","command.end",{...K,durationMs:M,ok:_.ok,errorCode:_.error?.code,errorMessage:_.error?.message});if(B.envelope.command==="client.register"&&_.ok){let O=(B.envelope.payload??{}).clientId?.trim()||B.envelope.clientId?.trim();if(O)Z.add(O)}else if(B.envelope.command==="client.unregister"&&_.ok){let T=B.envelope.clientId?.trim();if(T)Z.delete(T)}J({kind:"reply",envelope:_});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"?Jk(V.data):void 0;if(!H||H.kind!=="command"){i("error","rejected malformed websocket frame",{error:B});return}i("error","command.error",{...FX(H),error:B}),hf(this.telemetry,{component:"core",operation:"hub.websocket_command",error:B,severity:"error",handled:!0,context:FX(H)}),J({kind:"reply",envelope:kf(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 TW{transport;constructor($){this.transport=$}command($){return this.transport.handleCommand($)}subscribe($,W,Z){return this.transport.subscribe($,W,Z)}}function Gk($){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 Kk($){return{send(W){$.send(W)},addEventListener(W,Z){if(W==="message"){$.on("message",(Q)=>{Z({data:Gk(Q)})});return}$.on("close",Z)},removeEventListener(){}}}function Fk($){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 Ak($){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 AX($,W){if(!$||!W)return!1;let Z=Buffer.from($,"utf8"),Q=Buffer.from(W,"utf8");return Z.length===Q.length&&jk(Z,Q)}function mf($,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 Uk($){return await new Promise((W,Z)=>{let Q=Yk.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 fk($){return $ instanceof Error&&"code"in $&&$.code==="EADDRINUSE"}var UX=new Map,vf="cline-hub-auth.",Dk=30000;function DX($){return Array.isArray($)?$.join(","):$??""}function cf($){return $===32||$===9}function wQ($){let W=DX($).trim(),Z="bearer";if(W.length<=6||W.slice(0,6).toLowerCase()!=="bearer"||!cf(W.charCodeAt(6)))return null;let Q=7;while(Q<W.length&&cf(W.charCodeAt(Q)))Q+=1;return W.slice(Q).trim()||null}function _k($){for(let W of DX($).split(",")){let Z=W.trim();if(Z.startsWith(vf))return Z.slice(vf.length).trim()||null}return null}function CQ($){let W=$.trim().toLowerCase();return W==="localhost"||W==="127.0.0.1"||W==="::1"||W==="[::1]"}function _X($){let W=DX($).trim();if(!W)return!1;try{return CQ(new fX(W).hostname)}catch{return!1}}async function Y8($){let W=$.owner??Q$(),Z=$.host??"127.0.0.1",Q=$.pathname??"/hub",J=$.port??D6(),j=J===0?await Uk(Z):J,X=j,Y=D1(Z,j,Q),V=$Q(),B=eZ(),H=new c6($);await H.start();let G=new OW(new TW(H),$.telemetry),K=new Set,F=new Date().toISOString(),A={protocolVersion:If,minClientProtocolVersion:gf,maxClientProtocolVersion:xf,capabilities:Vk,coreVersion:o4.version,buildId:V,pid:process.pid,startedAt:F},f=new Set,U,_,D=async()=>{if(_)return _;return _=(async()=>{if(U)clearInterval(U),U=void 0;for(let L of f)L.terminate?.();f.clear();for(let L of K)L();if(K.clear(),await new Promise((L,C)=>{T.close((R)=>{if(R){C(R);return}L()})}),await new Promise((L,C)=>{M.close((R)=>{if(R){C(R);return}L()})}),await H.stop(),(await _0(W.discoveryPath))?.url===Y)await g0(W.discoveryPath)})(),_},M=Xk.createServer((O,L)=>{if((O.url??"/")==="/health"){let R=JSON.stringify({ok:!0,protocolVersion:A.protocolVersion,minClientProtocolVersion:A.minClientProtocolVersion,maxClientProtocolVersion:A.maxClientProtocolVersion,coreVersion:A.coreVersion,host:Z,port:X,url:Y});L.statusCode=200,L.setHeader("content-type","application/json"),L.end(R);return}if((O.url??"/")==="/status"){if(!AX(wQ(O.headers.authorization),B)){L.statusCode=401,L.end("Unauthorized");return}let R=JSON.stringify({hubId:H.getHubId(),...A,authToken:B,host:Z,port:X,url:Y,updatedAt:new Date().toISOString()});L.statusCode=200,L.setHeader("content-type","application/json"),L.end(R);return}if((O.url??"/")==="/version"){L.statusCode=200,L.setHeader("content-type","application/json"),L.end(JSON.stringify(A));return}if(new fX(O.url??"/",`http://${Z}:${X}`).pathname==="/shutdown"&&O.method==="POST"){if(!AX(wQ(O.headers.authorization),B)){L.statusCode=401,L.end("Unauthorized");return}L.statusCode=202,L.setHeader("content-type","application/json"),L.end(JSON.stringify({ok:!0})),queueMicrotask(()=>{D()});return}L.statusCode=404,L.end("Not found")}),T=new Hk({noServer:!0});U=setInterval(()=>{for(let O of f){if(O.isAlive===!1){try{O.terminate?.()}catch{}f.delete(O);continue}O.isAlive=!1;try{O.ping?.()}catch{try{O.terminate?.()}catch{}f.delete(O)}}},Dk),M.on("upgrade",(O,L,C)=>{if(new fX(O.url??"/",`http://${Z}:${X}`).pathname!==Q){L.destroy();return}if(!(AX(_k(O.headers["sec-websocket-protocol"]),B)||CQ(Z)&&_X(O.headers.origin))){Ak(L);return}try{T.handleUpgrade(O,L,C,(x)=>{let P=x;P.isAlive=!0,P.on("pong",()=>{P.isAlive=!0}),f.add(P);let r=G.attach(Kk(x));K.add(r),x.once("close",()=>{f.delete(P),r(),K.delete(r)})})}catch{Fk(L)}});try{await new Promise((O,L)=>{M.once("error",(C)=>{L(mf(C,{host:Z,port:j,pathname:Q}))}),M.listen(j,Z,()=>{let C=M.address();if(!C||typeof C==="string"){L(mf(Error("Failed to resolve hub port"),{host:Z,port:j,pathname:Q}));return}X=C.port,Y=D1(Z,X,Q),O()})})}catch(O){if(U)clearInterval(U),U=void 0;throw await H.stop().catch(()=>{return}),O}return await WQ(W.discoveryPath,{hubId:H.getHubId(),protocolVersion:If,minClientProtocolVersion:gf,maxClientProtocolVersion:xf,capabilities:[...A.capabilities],coreVersion:o4.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:D}}async function PQ($){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??D6(),j=$.pathname??"/hub",X=D1(Q,J,j),Y=W.discoveryPath,V=(H)=>{if(!Z)d$(H.url,H.authToken);return H},B=UX.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 ZQ(W.discoveryPath,async()=>{let H=await _0(W.discoveryPath);if(H?.url&&(H.url===X||$.allowPortFallback===!0)){let F=await J$(H.url,{authToken:H.authToken});if(F?.url&&Bk(F).compatible&&await w1(F.url,{authToken:H.authToken}))return V({url:F.url,authToken:H.authToken,action:"reuse"})}if(H?.url)await g0(W.discoveryPath);let K=async(F)=>{let A=Y8({...F,owner:W});UX.set(Y,A);try{let f=await A;return V({server:f,url:f.url,authToken:f.authToken,action:"started"})}catch(f){throw UX.delete(Y),f}};try{return await K($)}catch(F){if(!$.allowPortFallback||!fk(F))throw F;return await K({...$,port:0})}})}function df(){return uf()==="production"?Q1():m0()}function Lk($){return uf()!=="production"&&!$}async function lf($){let W=Z1({host:$.host,port:$.port,pathname:$.pathname});return await Y8({...$,...W,owner:df()})}async function pf($){let W=$.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Z=Z1({host:$.host,port:$.port,pathname:$.pathname});return await PQ({...$,...Z,allowPortFallback:$.allowPortFallback??Lk(W),owner:df()})}bQ();var af={};w(af,{registerRemoteConfigSessionBlobUpload:()=>kQ,readRemoteConfigSessionBlobUploadMetadata:()=>LX,prepareRemoteConfigCoreIntegration:()=>TX,createRemoteConfigSessionMessagesArtifactUploader:()=>OX,buildRemoteConfigSessionBlobUploadMetadata:()=>yQ,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY:()=>hQ});import{buildRemoteConfigSessionBlobUploadMetadata as yQ,clearRemoteConfigSessionBlobUpload as Ok,createClineTelemetryServiceConfig as Tk,createSessionId as zk,createRemoteConfigSessionMessagesArtifactUploader as qk,prepareRemoteConfigRuntime as Mk,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY as hQ,readRemoteConfigSessionBlobUploadMetadata as LX,registerRemoteConfigSessionBlobUpload as kQ}from"@cline/shared";function Nk($,W){let Z=$.telemetry||W.telemetryService?{...W.telemetryService??{},...$.telemetry??{}}:void 0;if(!Z)return;return B$(Tk(Z)).telemetry}function OX(){let $=qk();return{async uploadMessagesFile(W){await $.uploadMessagesFile(W)}}}async function TX($){let W=await Mk($),Z=Nk(W,$),Q=[W.pluginDefinition],J=W.claims?.subject,j=yQ(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()||zk():Y.config.sessionId;if(H&&j)X=H;let G=H&&j?kQ(H,W.bundle?.remoteConfig,J):void 0,K=G?{...Y.sessionMetadata??{},[hQ]:G}:Y.sessionMetadata;return{...Y,...K?{sessionMetadata:K}:{},config:{...Y.config,...H?{sessionId:H}:{},extensions:[...V,...Q],telemetry:Z??B}}},async dispose(){if(X)Ok(X)}}}var ZD={};w(ZD,{createTeamName:()=>gQ,DefaultRuntimeBuilder:()=>l6});import{hasRuntimeConfigExtension as mk}from"@cline/shared";import{nanoid as vk}from"nanoid";U1();var WD={};w(WD,{createLocalTeamStore:()=>NX,SqliteTeamStore:()=>V8,FileTeamStore:()=>zW});import{appendFileSync as Rk,existsSync as u6,mkdirSync as of,readdirSync as Ek,readFileSync as sf,renameSync as wk,writeFileSync as Ck}from"node:fs";import{join as zX}from"node:path";import{resolveTeamDataDir as Pk}from"@cline/shared/storage";function tf(){return new Date().toISOString()}function qX($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function ef($){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 zW{teamDirPath;constructor($={}){this.teamDirPath=$.teamDir??Pk()}init(){this.ensureTeamDir()}listTeamNames(){if(!u6(this.teamDirPath))return[];return Ek(this.teamDirPath,{withFileTypes:!0}).filter(($)=>$.isDirectory()).filter(($)=>u6(this.statePath($.name))).map(($)=>$.name).sort()}readState($){let W=this.readEnvelope($);return W?.teamState?ef(W.teamState):void 0}readHistory($,W=200){let Z=this.historyPath($);if(!u6(Z))return[];return sf(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?ef(W.teamState):void 0,teammates:W?.teammates??[],interruptedRunIds:[]}}handleTeamEvent($,W){this.ensureTeamSubdir($),Rk(this.historyPath($),`${JSON.stringify({ts:tf(),eventType:W.type,payload:W})}
|
|
608
|
+
`,"utf8")}persistRuntime($,W,Z){this.ensureTeamSubdir($);let Q={version:1,updatedAt:tf(),teamState:W,teammates:Z},J=this.statePath($),j=`${J}.tmp`;Ck(j,`${JSON.stringify(Q,null,2)}
|
|
609
|
+
`,"utf8"),wk(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(!u6(this.teamDirPath))of(this.teamDirPath,{recursive:!0});return this.teamDirPath}ensureTeamSubdir($){let W=zX(this.ensureTeamDir(),qX($));if(!u6(W))of(W,{recursive:!0});return W}statePath($){return zX(this.ensureTeamDir(),qX($),"state.json")}historyPath($){return zX(this.ensureTeamDir(),qX($),"task-history.jsonl")}readEnvelope($){let W=this.statePath($);if(!u6(W))return;try{let Z=JSON.parse(sf(W,"utf8"));if(Z?.version===1&&Z.teamState)return Z}catch{}return}}import{existsSync as Sk,mkdirSync as bk}from"node:fs";import{join as yk}from"node:path";import{safeJsonParse as $D}from"@cline/shared";import{loadSqliteDb as hk,nowIso as MX}from"@cline/shared/db";import{resolveDbDataDir as kk}from"@cline/shared/storage";function Ik(){return kk()}function d6($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function xk($){let W=$D($);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 gk($){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 V8{teamDirPath;db;constructor($={}){this.teamDirPath=$.teamDir??Ik()}init(){this.getRawDb()}ensureTeamDir(){if(!Sk(this.teamDirPath))bk(this.teamDirPath,{recursive:!0});return this.teamDirPath}dbPath(){return yk(this.ensureTeamDir(),"teams.db")}getRawDb(){if(this.db)return this.db;let $=hk(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 Hk($){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 = ?",[d6($)]);if(!W)return;let Z=$D(W.state_json);if(!Z)return;try{return gk(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 ?",[d6($),W]).flatMap((Z)=>{try{return[{eventType:Z.event_type,payload:JSON.parse(Z.payload_json),ts:Z.ts}]}catch{return[]}})}loadRuntime($){let W=d6($),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?xk(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, ?)`,[d6($),MX(),W,JSON.stringify(Z),Q??null])}persistRuntime($,W,Z){let Q=d6($),J=MX();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 Hk($){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
|
|
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 QD($){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 vQ($){if(!B8($))return;let W=$.metadata;return B8(W)?W:void 0}function mQ($,W){let Z=vQ($);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||gQ(W.pluginPath,J)||gQ(J,W.pluginPath)))return!0;if(Q&&W.pluginNames?.some((j)=>j===Q))return!0;if(J&&W.pluginPaths?.some((j)=>J===j||gQ(j,J)||gQ(J,j)))return!0;return!1}function GI($){let W=B8($.existing?.oauth)?{oauth:$.existing.oauth}:{};return{transport:$.registration.transport.type==="stdio"&&$.registration.transport.cwd===void 0?{...$.registration.transport,cwd:ZD($.pluginPath)}:$.registration.transport,...$.disabled?{disabled:!0}:{},...W,metadata:{...$.registration.metadata??{},source:"plugin",pluginName:$.pluginName,pluginPath:$.pluginPath}}}async function KI($){if($.pluginPaths.length===0)return{plugins:[],servers:[],failures:[]};let W=await r8({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 zW($){let W=$.settingsPath??Q0(),Z={mutations:[],failures:[]},Q;try{Q=await KI($)}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=EX(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=wX(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=uZ(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(!mQ(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]=GI({registration:B.registration,pluginName:H.pluginName,pluginPath:H.pluginPath,existing:B8(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=vQ(H),K=typeof G?.pluginPath==="string"?G.pluginPath:"",F=X.get(K);if(F&&mQ(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{CX(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 PX($){let W=$.settingsPath??Q0(),Z;try{Z=EX(W)}catch{return[]}let Q=wX(Z),J=QD($),j=[];for(let[X,Y]of Object.entries(Q)){if(!B8(Y)||!mQ(Y,J))continue;let V=vQ(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)CX(W,Z,Q);return j}function qW($){let W=$.settingsPath??Q0(),Z;try{Z=EX(W)}catch{return[]}let Q=wX(Z),J=QD($),j=[];for(let[X,Y]of Object.entries(Q)){if(!mQ(Y,J))continue;let V=vQ(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)CX(W,Z,Q);return j}var IX="_installed",qI="package",MI=new Map([["git",2],["local",1],["npm",1],["official",1],["remote",1]]);function bX($){return $.trim().toLowerCase()}function _1($,W){let Z=W?.trim();if(!Z)return;$.add(Z)}function RI($){return $.replace(/-[0-9a-f]{12}$/i,"")}function yX($){let W=_I($);return W?$.slice(0,-W.length):$}function hX($){if(!p6($))return;try{let W=JSON.parse(AI($,"utf8"));return typeof W.name==="string"?W.name.trim():void 0}catch{return}}function xX($,W){let Z=OI(W,$);return Z===""||!Z.startsWith("..")&&!LI(Z)}function jD($){let Z=l6($).split(SX),Q=Z.lastIndexOf(IX);if(Q<0)return;let J=Z[Q+1];if(!J)return;let j=MI.get(J)??1,X=Q+2+j;if(Z.length<X)return;let Y=Z.slice(0,X).join(SX)||SX;return p6(Y)?Y:void 0}function cQ($){try{return FI($,{withFileTypes:!0})}catch{return[]}}function NI($){let W=V$($,IX);if(!p6(W))return[];let Z=[];for(let Q of cQ(W)){if(!Q.isDirectory())continue;let J=V$(W,Q.name);if(Q.name==="git"){for(let j of cQ(J)){if(!j.isDirectory())continue;let X=V$(J,j.name);for(let Y of cQ(X))if(Y.isDirectory())Z.push(V$(X,Y.name))}continue}for(let j of cQ(J))if(j.isDirectory())Z.push(V$(J,j.name))}return Z.sort((Q,J)=>Q.localeCompare(J))}function XD($){try{return TI($)}catch{return[]}}function kX($){let W=XD($),Z=new Set;_1(Z,X1($)),_1(Z,RI(X1($))),_1(Z,hX(V$($,"package.json"))),_1(Z,hX(V$($,qI,"package.json")));for(let Q of W)_1(Z,X1(Q)),_1(Z,yX(X1(Q)));return{installPath:$,entryPaths:W,names:[...Z].sort((Q,J)=>Q.localeCompare(J)),installed:!0}}function EI($,W){let Z=l6($),Q=W.find((X)=>xX(Z,X));if(!Q)return;let J=s$(Z);while(J!==Q&&J!==s$(J)){if(p6(V$(J,"package.json")))return J;J=s$(J)}let j=X1(Z);if((j==="index.ts"||j==="index.js")&&s$(Z)!==Q)return s$(Z);return Z}function YD($,W){let Z=EI($,W);if(!Z)return;let Q=new Set;return _1(Q,X1($)),_1(Q,yX(X1($))),_1(Q,X1(Z)),_1(Q,yX(X1(Z))),_1(Q,hX(V$(Z,"package.json"))),{installPath:Z,entryPaths:[$],names:[...Q].sort((J,j)=>J.localeCompare(j)),installed:!1}}function wI($){let W=$.workspaceRoot?.trim()||$.cwd?.trim()||process.cwd();return zI(W).filter((Z)=>p6(Z))}function CI($){let W=new Map;for(let Z of $){for(let Q of NI(Z))W.set(Q,kX(Q));for(let Q of XD(Z)){let J=jD(Q);if(J){if(!W.has(J))W.set(J,kX(J));continue}let j=YD(Q,$);if(j)W.set(j.installPath,j)}}return[...W.values()].sort((Z,Q)=>Z.installPath.localeCompare(Q.installPath))}function PI($,W){let Z=bX(W);if(!Z)return!1;if(bX($.installPath)===Z)return!0;return $.names.some((Q)=>bX(Q)===Z)}function SI($,W,Z){let Q=l6($);for(let j of W){if(xX(Q,j.installPath))return j;if(j.entryPaths.some((X)=>l6(X)===Q))return j}let J=jD(Q);if(J)return kX(J);if(p6(Q))return YD(Q,Z);return}function bI($){let W=R0(),Z=W.disabledPlugins;if(!Z?.length)return;let Q=Z.filter((J)=>{let j=l6(J);if(xX(j,$.installPath))return!1;return!$.entryPaths.some((X)=>l6(X)===j)});if(Q.length===Z.length)return;q1({...W,disabledPlugins:Q})}function yI($){let W=s$($);while(W!==s$(W)&&X1(W)!==IX){try{UI(W)}catch{return}W=s$(W)}}function hI($){return`${$.names[0]??X1($.installPath)} at ${$.installPath}`}async function MW($){let W=wI($),Z=CI(W),Q=$.path?.trim(),J=$.name?.trim(),j;if(Q){if(j=SI(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)=>PI(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(hI).join(", ")}`);j=Y[0]}let X=DI(j.installPath,{throwIfNoEntry:!1});if(!X)throw Error(`Plugin install path does not exist: ${j.installPath}`);if(qW({pluginPaths:[j.installPath,...j.entryPaths],pluginNames:j.names}),fI(j.installPath,{recursive:X.isDirectory(),force:!0}),bI(j),j.installed)yI(j.installPath);return{name:J||j.names[0]||X1(j.installPath),installPath:j.installPath,removedPaths:[j.installPath],entryPaths:j.entryPaths}}var gX=120000,RW=12000,uI=/(api[_ -]?key|access[_ -]?token|refresh[_ -]?token|auth(?:orization)?[_ -]?token|token|secret|password|authorization|credential)/i,dI=/((?:^|[^\w])(?:[a-z0-9_]*?(?:api[_ -]?key|access[_ -]?token|refresh[_ -]?token|auth(?:orization)?[_ -]?token|token|secret|password|credential)[a-z0-9_]*)\s*[:=]\s*)(.+)$/gi,lI=/((?:^|[^\w])authorization\s*[:=]\s*)bearer\s+([^\s,"'}\]]+)/gi,pI=/((?:^|[^\w])authorization\s*[:=])(?!\s*bearer\b)\s*(.+)$/gi;function mX($){return $.install?.args??[]}function rI(){return process.env.HOME?.trim()||process.env.USERPROFILE?.trim()||xI()}function iI($){let W=0,Z=$.length;while(W<Z&&($[W]==="."||$[W]==="-"))W++;while(Z>W&&($[Z-1]==="."||$[Z-1]==="-"))Z--;return $.slice(W,Z)}function nI($){return iI($.toLowerCase().replace(/[^a-z0-9._]+/g,"-")).slice(0,255)||"skill"}function GD($){return $.split(/\r?\n/).map((W)=>{if(!uI.test(W))return W;return W.replace(dI,"$1[redacted]").replace(lI,"$1Bearer [redacted]").replace(/\b(Bearer)\s+(?!\[redacted\])([^\s,"'}\]]+)/gi,"$1 [redacted]").replace(pI,"$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=d6($),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=MX();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 NX($={}){try{let W=new V8($);return W.init(),W}catch{let W=new zW({teamDir:$.teamDir});return W.init(),W}}function IQ($,W){return mk($,W)}function ck($,W){let Z=W?.["*"]??{},Q=W?.[$]??{};return{...Z,...Q}.enabled!==!1}function uk($,W){return $.filter((Z)=>ck(Z.name,W))}function RX($,W){return i1(uk($,W))}var dk={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 lk($){let W=$.trim().toLowerCase();return dk[W]??W}function pk($,W){if(W.tools===void 0)return $;let Z=new Set(W.tools.map(lk));if(W.skills!==void 0)Z.add("skills");return $.filter((Q)=>Z.has(Q.name))}function gQ(){return`team-${vk(5)}`}function xQ($,W,Z,Q,J,j,X,Y){let V=a0[r1({mode:Z})],B=y8(W,Q,Z,J??b8);return RX(N2({cwd:$,...V,enableSkills:!!X,...B,executors:{...X?{skills:X}:{},...Y??{}}}),j)}function rk($){return xQ($.cwd,$.providerId,$.mode,$.modelId,$.toolRoutingRules,$.toolPolicies,ik,$.toolExecutors).some((W)=>W.name==="skills")}var ik=async()=>"";async function nk($){let W=Q0();if(!$$({filePath:W}))return{tools:[]};let Z=new c2({clientFactory:F6({settingsPath:W})}),Q;try{Q=await v2(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)=>U6({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 ak($,W){if(!$)return;for(let Z of $.getTeammateIds())try{$.shutdownTeammate(Z,W)}catch{}}function ok($){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 sk($){let W=a0[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 l6{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=sk(W),F=W.workspaceRoot??W.cwd,A=$.toolPolicies??W.toolPolicies,f=N1(),U=[],_=W.teamName?.trim()||gQ(),D=W.sessionId?.trim()||_,M=K.enableSpawnAgent?q6({workspaceRoot:F}):{configs:[],errors:[]},T=M.configs.some((l)=>l.skills!==void 0),O=IQ(B,"rules"),L=IQ(B,"skills"),C=L||T,R=IQ(B,"workflows"),p=IQ(B,"plugins"),x=O||L||R,P=!1,r=Boolean(V),d=V,I1;for(let l of M.errors)(J??W.logger)?.log?.(`[agents] Failed to load agent config at ${l.path}: ${l.error.message}`);if(!d&&(x||T))d=I$({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 $2=K.enableTools&&L&&Boolean(d)&&d?.hasConfiguredSkills(W.skills)===!0&&rk({cwd:W.cwd,providerId:W.providerId,mode:K.mode,modelId:W.modelId,toolRoutingRules:W.toolRoutingRules,toolPolicies:A,toolExecutors:H}),F$=d&&x?d.createExtension({includeRules:O,includeSkills:L,includeWorkflows:R,registerSkillsTool:$2,allowedSkillNames:W.skills}):void 0,k0=F$?[...Q??W.extensions??[],F$]:Q??W.extensions;if(K.enableTools){if(U.push(...xQ(W.cwd,W.providerId,K.mode,W.modelId,W.toolRoutingRules,A,void 0,H)),!K.disableMcpSettingsTools){let l=await nk(W.logger);U.push(...l.tools),I1=l.shutdown}}let A0,O1=K.enableAgentTeams?NX():void 0,K8=O1?.loadRuntime(D),V0=K8?.state,l0=K8?.teammates??[],V1=new Map(l0.map((l)=>[l.agentId,l])),y=W.sessionId||_,B1,k=[],$0=!1,L0=R$({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,maxIterations:W.maxIterations,hooks:Z,extensions:k0,logger:J??W.logger,telemetry:$.telemetry??W.telemetry,workspaceMetadata:W.workspaceMetadata});if(K.enableSpawnAgent){if(M.configs.length>0)U.push(...RX(M6({configProvider:L0,agents:M.configs,createSubAgentTools:(l)=>K.enableTools?pk(xQ(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:L0});let q0=()=>{if(!K.enableAgentTeams)return;let l=this.teamRuntimeEntries.get(y)??{delegatedAgentConfigProvider:L0};if(this.teamRuntimeEntries.set(y,l),A0=l.runtime,!A0){if(A0=new e2({teamName:_,leadAgentId:W.sessionId||"lead",missionLogIntervalSteps:K.missionLogIntervalSteps,missionLogIntervalMs:K.missionLogIntervalMs,onTeamEvent:(B0)=>{if(G(B0),A0&&O1){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};V1.set(x1.agentId,x1)}if(B0.type==="teammate_shutdown"&&!ok(B0.reason))V1.delete(B0.agentId);O1.handleTeamEvent(D,B0),O1.persistRuntime(D,A0.exportState(),Array.from(V1.values()))}}}),V0)A0.hydrateState(V0),$0=!0;l.runtime=A0}if(!P){if(!A0)return;P=!0;let B0=x8({runtime:A0,leadAgentId:W.sessionId||"lead",restoredFromPersistence:Boolean(V0),restoredTeammates:l0,includeLeadSpawnTool:!0,includeLeadManagementTools:!0,onLeadToolsUnlocked:(x1)=>{k=x1,B1?.addTools(x1)},createBaseTools:K.enableTools?()=>xQ(W.cwd,W.providerId,K.mode,W.modelId,W.toolRoutingRules,A,void 0,H):void 0,teammateConfigProvider:L0});if($0)A0.recoverActiveRuns("runtime_recovered");if(B0.restoredFromPersistence)Y?.();U.push(...B0.tools)}return A0};if(K.enableSpawnAgent&&X){let l=X();U.push({...l,execute:async(B0,x1)=>{return q0(),l.execute(B0,x1)}})}if(K.enableAgentTeams)q0();let xW=RX(U,A),s6=xW.some((l)=>l.name==="submit_and_exit"&&l.lifecycle?.completesRun===!0),F8=K.enableAgentTeams?()=>{let l=this.teamRuntimeEntries.get(y)?.runtime;if(!l)return;let B0=l.listTasks(),x1=B0.some((A$)=>A$.status==="in_progress"||A$.status==="pending"),xY=l.listRuns({}),C_=xY.some((A$)=>A$.status==="running"||A$.status==="queued");if(x1||C_){let A$=B0.filter((p0)=>p0.status==="in_progress"||p0.status==="pending").map((p0)=>`${p0.id} (${p0.status}): ${p0.title}`).join(", "),gY=xY.filter((p0)=>p0.status==="running"||p0.status==="queued").map((p0)=>`${p0.id} (${p0.status})`).join(", "),M7=[];if(A$)M7.push(`Unfinished tasks: ${A$}`);if(gY)M7.push(`Active runs: ${gY}`);return`[SYSTEM] You still have team obligations. ${M7.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,w_=s6?{requireCompletionTool:!0,...F8?{completionGuard:F8}:{}}:F8?{completionGuard:F8}:void 0;return{tools:xW,logger:J??W.logger,telemetry:j??W.telemetry,teamRuntime:A0,teamRestoredFromPersistence:Boolean(V0),delegatedAgentConfigProvider:this.teamRuntimeEntries.get(y)?.delegatedAgentConfigProvider??L0,extensions:k0,completionPolicy:w_,registerLeadAgent:(l)=>{if(B1=l,k.length>0)l.addTools(i1(k,[...f]))},shutdown:async(l)=>{if(ak(A0,l),this.teamRuntimeEntries.delete(y),await I1?.(),!r)d?.stop()}}}}var JD={};w(JD,{requestDesktopToolApproval:()=>wX});import{mkdir as tk,readFile as ek,unlink as $I,writeFile as WI}from"node:fs/promises";import{join as QD}from"node:path";function ZI($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function QI($){return new Promise((W)=>setTimeout(W,$))}async function EX($){try{await $I($)}catch{}}async function wX($,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 tk(Z,{recursive:!0});let J=ZI(`${$.toolCallId}`),j=QD(Z,`${Q}.request.${J}.json`),X=QD(Z,`${Q}.decision.${J}.json`),Y=W.nowIso??(()=>new Date().toISOString());await WI(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 ek(X,"utf8"),K=JSON.parse(G),F={approved:K.approved===!0,reason:typeof K.reason==="string"?K.reason:void 0};return await Promise.all([EX(X),EX(j)]),F}catch{}await QI(B)}return await EX(j),{approved:!1,reason:"Tool approval request timed out"}}U1();var _D={};w(_D,{uninstallMarketplaceSkill:()=>rQ,uninstallMarketplacePlugin:()=>iQ,uninstallMarketplaceMcpServerFromSettings:()=>lQ,uninstallMarketplaceEntry:()=>lX,resolveMarketplaceMcpServerName:()=>wW,marketplaceEntryKey:()=>dX,isMarketplaceSkillInstalled:()=>pQ,getMarketplaceSkillCandidates:()=>CW,getGlobalMarketplaceSkillPaths:()=>PW,findInstalledGlobalMarketplaceSkillName:()=>SW});import{spawn as vI}from"node:child_process";import{existsSync as fD,rmSync as cI}from"node:fs";import{homedir as uI,platform as dI}from"node:os";import{dirname as lI,join as UD}from"node:path";import{resolveClineDir as pI,resolveMcpSettingsPath as rI}from"@cline/shared/storage";var XD={};w(XD,{parseMcpInstallArgs:()=>qW,installMcpServer:()=>CX,buildMcpInstallTransport:()=>mQ});function JI($){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 jI($){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 XI($){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 YI($){let W=$.indexOf("<");return W>=0&&$.indexOf(">",W+1)>W+1}function jD($){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 VI($){if($.length===0)return{warnings:[]};let W={},Z=[];for(let Q of $){let[J,j]=XI(Q);if(W[J]=j,YI(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 mQ($){let W=$.name.trim();if(!W)throw Error("MCP server name is required");let{headers:Z,targetArgs:Q,transport:J}=jD({headers:$.headers,targetArgs:$.targetArgs,transport:$.transport}),j=JI(J),{headers:X,warnings:Y}=VI(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 jI(V),{name:W,transport:X?{type:j,url:V,headers:X}:{type:j,url:V},warnings:Y}}function qW($){let[W,...Z]=$;if(!W)throw Error("Marketplace MCP install args must start with a server name.");return{name:W,...jD({parseTransport:!0,targetArgs:Z})}}function BI($,W,Z){f1(Z,(Q)=>{let J=Q.mcpServers,j=J&&typeof J==="object"&&!Array.isArray(J)?{...J}:{};j[$]={transport:W},Q.mcpServers=j})}function CX($){let{name:W,transport:Z,warnings:Q}=mQ($);return BI(W,Z,$.settingsPath??Q0()),{name:W,status:"installed",transport:Z,warnings:Q}}U1();var AD={};w(AD,{uninstallPlugin:()=>RW});import{existsSync as r6,readdirSync as _I,readFileSync as LI,rmdirSync as OI,rmSync as TI,statSync as zI}from"node:fs";import{basename as j1,dirname as s$,extname as qI,isAbsolute as MI,join as H$,relative as NI,resolve as p6,sep as hX}from"node:path";import{discoverPluginModulePaths as RI,resolvePluginConfigSearchPaths as EI}from"@cline/shared/storage";var HD={};w(HD,{syncPluginMcpServersToSettings:()=>MW,removePluginMcpServersFromSettings:()=>NW,disablePluginMcpServersInSettings:()=>yX});import{existsSync as HI,mkdirSync as GI,readFileSync as KI,writeFileSync as FI}from"node:fs";import{dirname as VD,isAbsolute as AI,relative as UI,resolve as YD}from"node:path";function B8($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function vQ($,W){let Z=UI(YD($),YD(W));return Z===""||!Z.startsWith("..")&&!AI(Z)}function PX($){if(!HI($))return{mcpServers:{}};try{let W=JSON.parse(KI($,"utf8"));if(B8(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 SX($){if(B8($.mcpServers))return{...$.mcpServers};return{}}function bX($,W,Z){GI(VD($),{recursive:!0}),FI($,`${JSON.stringify({...W,mcpServers:Z},null,2)}
|
|
742
|
+
`,"utf8")}function BD($){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 uQ($){if(!B8($))return;let W=$.metadata;return B8(W)?W:void 0}function cQ($,W){let Z=uQ($);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||vQ(W.pluginPath,J)||vQ(J,W.pluginPath)))return!0;if(Q&&W.pluginNames?.some((j)=>j===Q))return!0;if(J&&W.pluginPaths?.some((j)=>J===j||vQ(j,J)||vQ(J,j)))return!0;return!1}function fI($){let W=B8($.existing?.oauth)?{oauth:$.existing.oauth}:{};return{transport:$.registration.transport.type==="stdio"&&$.registration.transport.cwd===void 0?{...$.registration.transport,cwd:VD($.pluginPath)}:$.registration.transport,...$.disabled?{disabled:!0}:{},...W,metadata:{...$.registration.metadata??{},source:"plugin",pluginName:$.pluginName,pluginPath:$.pluginPath}}}async function DI($){if($.pluginPaths.length===0)return{plugins:[],servers:[],failures:[]};let W=await i8({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 MW($){let W=$.settingsPath??Q0(),Z={mutations:[],failures:[]},Q;try{Q=await DI($)}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=PX(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=SX(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=lZ(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(!cQ(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]=fI({registration:B.registration,pluginName:H.pluginName,pluginPath:H.pluginPath,existing:B8(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=uQ(H),K=typeof G?.pluginPath==="string"?G.pluginPath:"",F=X.get(K);if(F&&cQ(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{bX(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 yX($){let W=$.settingsPath??Q0(),Z;try{Z=PX(W)}catch{return[]}let Q=SX(Z),J=BD($),j=[];for(let[X,Y]of Object.entries(Q)){if(!B8(Y)||!cQ(Y,J))continue;let V=uQ(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)bX(W,Z,Q);return j}function NW($){let W=$.settingsPath??Q0(),Z;try{Z=PX(W)}catch{return[]}let Q=SX(Z),J=BD($),j=[];for(let[X,Y]of Object.entries(Q)){if(!cQ(Y,J))continue;let V=uQ(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)bX(W,Z,Q);return j}var mX="_installed",wI="package",CI=new Map([["git",2],["local",1],["npm",1],["official",1],["remote",1]]);function kX($){return $.trim().toLowerCase()}function L1($,W){let Z=W?.trim();if(!Z)return;$.add(Z)}function PI($){return $.replace(/-[0-9a-f]{12}$/i,"")}function IX($){let W=qI($);return W?$.slice(0,-W.length):$}function xX($){if(!r6($))return;try{let W=JSON.parse(LI($,"utf8"));return typeof W.name==="string"?W.name.trim():void 0}catch{return}}function vX($,W){let Z=NI(W,$);return Z===""||!Z.startsWith("..")&&!MI(Z)}function GD($){let Z=p6($).split(hX),Q=Z.lastIndexOf(mX);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(hX)||hX;return r6(Y)?Y:void 0}function dQ($){try{return _I($,{withFileTypes:!0})}catch{return[]}}function SI($){let W=H$($,mX);if(!r6(W))return[];let Z=[];for(let Q of dQ(W)){if(!Q.isDirectory())continue;let J=H$(W,Q.name);if(Q.name==="git"){for(let j of dQ(J)){if(!j.isDirectory())continue;let X=H$(J,j.name);for(let Y of dQ(X))if(Y.isDirectory())Z.push(H$(X,Y.name))}continue}for(let j of dQ(J))if(j.isDirectory())Z.push(H$(J,j.name))}return Z.sort((Q,J)=>Q.localeCompare(J))}function KD($){try{return RI($)}catch{return[]}}function gX($){let W=KD($),Z=new Set;L1(Z,j1($)),L1(Z,PI(j1($))),L1(Z,xX(H$($,"package.json"))),L1(Z,xX(H$($,wI,"package.json")));for(let Q of W)L1(Z,j1(Q)),L1(Z,IX(j1(Q)));return{installPath:$,entryPaths:W,names:[...Z].sort((Q,J)=>Q.localeCompare(J)),installed:!0}}function bI($,W){let Z=p6($),Q=W.find((X)=>vX(Z,X));if(!Q)return;let J=s$(Z);while(J!==Q&&J!==s$(J)){if(r6(H$(J,"package.json")))return J;J=s$(J)}let j=j1(Z);if((j==="index.ts"||j==="index.js")&&s$(Z)!==Q)return s$(Z);return Z}function FD($,W){let Z=bI($,W);if(!Z)return;let Q=new Set;return L1(Q,j1($)),L1(Q,IX(j1($))),L1(Q,j1(Z)),L1(Q,IX(j1(Z))),L1(Q,xX(H$(Z,"package.json"))),{installPath:Z,entryPaths:[$],names:[...Q].sort((J,j)=>J.localeCompare(j)),installed:!1}}function yI($){let W=$.workspaceRoot?.trim()||$.cwd?.trim()||process.cwd();return EI(W).filter((Z)=>r6(Z))}function hI($){let W=new Map;for(let Z of $){for(let Q of SI(Z))W.set(Q,gX(Q));for(let Q of KD(Z)){let J=GD(Q);if(J){if(!W.has(J))W.set(J,gX(J));continue}let j=FD(Q,$);if(j)W.set(j.installPath,j)}}return[...W.values()].sort((Z,Q)=>Z.installPath.localeCompare(Q.installPath))}function kI($,W){let Z=kX(W);if(!Z)return!1;if(kX($.installPath)===Z)return!0;return $.names.some((Q)=>kX(Q)===Z)}function II($,W,Z){let Q=p6($);for(let j of W){if(vX(Q,j.installPath))return j;if(j.entryPaths.some((X)=>p6(X)===Q))return j}let J=GD(Q);if(J)return gX(J);if(r6(Q))return FD(Q,Z);return}function xI($){let W=N0(),Z=W.disabledPlugins;if(!Z?.length)return;let Q=Z.filter((J)=>{let j=p6(J);if(vX(j,$.installPath))return!1;return!$.entryPaths.some((X)=>p6(X)===j)});if(Q.length===Z.length)return;M1({...W,disabledPlugins:Q})}function gI($){let W=s$($);while(W!==s$(W)&&j1(W)!==mX){try{OI(W)}catch{return}W=s$(W)}}function mI($){return`${$.names[0]??j1($.installPath)} at ${$.installPath}`}async function RW($){let W=yI($),Z=hI(W),Q=$.path?.trim(),J=$.name?.trim(),j;if(Q){if(j=II(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)=>kI(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(mI).join(", ")}`);j=Y[0]}let X=zI(j.installPath,{throwIfNoEntry:!1});if(!X)throw Error(`Plugin install path does not exist: ${j.installPath}`);if(NW({pluginPaths:[j.installPath,...j.entryPaths],pluginNames:j.names}),TI(j.installPath,{recursive:X.isDirectory(),force:!0}),xI(j),j.installed)gI(j.installPath);return{name:J||j.names[0]||j1(j.installPath),installPath:j.installPath,removedPaths:[j.installPath],entryPaths:j.entryPaths}}var cX=120000,EW=12000,iI=/(api[_ -]?key|access[_ -]?token|refresh[_ -]?token|auth(?:orization)?[_ -]?token|token|secret|password|authorization|credential)/i,nI=/((?:^|[^\w])(?:[a-z0-9_]*?(?:api[_ -]?key|access[_ -]?token|refresh[_ -]?token|auth(?:orization)?[_ -]?token|token|secret|password|credential)[a-z0-9_]*)\s*[:=]\s*)(.+)$/gi,aI=/((?:^|[^\w])authorization\s*[:=]\s*)bearer\s+([^\s,"'}\]]+)/gi,oI=/((?:^|[^\w])authorization\s*[:=])(?!\s*bearer\b)\s*(.+)$/gi;function uX($){return $.install?.args??[]}function sI(){return process.env.HOME?.trim()||process.env.USERPROFILE?.trim()||uI()}function tI($){let W=0,Z=$.length;while(W<Z&&($[W]==="."||$[W]==="-"))W++;while(Z>W&&($[Z-1]==="."||$[Z-1]==="-"))Z--;return $.slice(W,Z)}function eI($){return tI($.toLowerCase().replace(/[^a-z0-9._]+/g,"-")).slice(0,255)||"skill"}function DD($){return $.split(/\r?\n/).map((W)=>{if(!iI.test(W))return W;return W.replace(nI,"$1[redacted]").replace(aI,"$1Bearer [redacted]").replace(/\b(Bearer)\s+(?!\[redacted\])([^\s,"'}\]]+)/gi,"$1 [redacted]").replace(oI,"$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(-EW)}function $x($){let W=DD([$.stdout,$.stderr].filter(Boolean).join(`
|
|
744
|
+
`)).trim();return W.length>0?W:void 0}function Wx($){if($==="")return'""';if(/^[a-zA-Z0-9_./:=@%+,-]+$/.test($))return $;return JSON.stringify($)}function Zx($,W){return[$,...W].map((Z)=>Wx(DD(Z).trim())).join(" ")}var Qx=async($,W)=>new Promise((Z,Q)=>{let J=!1,j=!1,X=vI($,W,{env:process.env,shell:dI()==="win32",stdio:["ignore","pipe","pipe"],windowsHide:!0}),Y="",V="",B=setTimeout(()=>{if(!J)X.kill("SIGKILL")},cX+5000),H=setTimeout(()=>{j=!0,V+=`
|
|
745
|
+
Timed out after ${cX/1000}s.`,X.kill("SIGTERM")},cX);B.unref?.(),H.unref?.(),X.stdout?.on("data",(G)=>{if(Y+=String(G),Y.length>EW*2)Y=Y.slice(-EW)}),X.stderr?.on("data",(G)=>{if(V+=String(G),V.length>EW*2)V=V.slice(-EW)}),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 dX($){return`${$.type}:${$.id}`}function wW($){let W=uX($);if(W.length===0)throw Error("Marketplace install args are required.");return qW(W).name}function lQ($,W={}){let Z=wW($),Q=W.mcpSettingsPath??rI(),J=f1(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 CW($){let W=new Set,Z=(J)=>{let j=eI(J??"");if(j&&j!=="skill")W.add(j)};Z($.id),Z($.name);let Q=uX($);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 PW($){return[UD(pI(),"skills",$,"SKILL.md"),UD(sI(),".agents","skills",$,"SKILL.md")].filter((W,Z,Q)=>Q.indexOf(W)===Z)}function SW($){if($.type!=="skill")return;return CW($).find((W)=>PW(W).some((Z)=>fD(Z)))}function pQ($){return SW($)!==void 0}function Jx($){let W=[];if($.type!=="skill")return W;for(let Z of CW($))for(let Q of PW(Z)){if(!fD(Q))continue;let J=lI(Q);cI(J,{recursive:!0,force:!0}),W.push(J)}return W}async function rQ($,W={}){let Z=SW($);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=Zx(Q,J),X=W.spawnCommand??Qx,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=$x(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")}async function
|
|
756
|
-
`,"utf8")}function bD($,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 yD($){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 hD($){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 $g($){return $!=null&&typeof $.name==="string"&&typeof $.baseUrl==="string"}function kD($,W){return $??W??"openai-chat"}function ID($,W,Z){return $??Z??(W==="openai-responses"?"openai":"openai-compatible")}function xD($,W,Z){let Q=new Set(W?.capabilities??Z??[]);if(W?.supportsVision)Q.add("images");if(W?.supportsAttachments)Q.add("files");if(W?.supportsReasoning)Q.add("reasoning");return{id:$,name:W?.name??$,maxTokens:W?.maxTokens,contextWindow:W?.contextWindow,maxInputTokens:W?.maxInputTokens,capabilities:Q.size>0?[...Q]:void 0}}function Wg($,W){for(let[Z,Q]of Object.entries(W??{})){let J=Q.id?.trim()||Z.trim();if(!J)continue;p0.registerModel($,J,xD(J,Q))}}function Zg($,W,Z){return{...W??{},id:$,name:W?.name??$,capabilities:W?.capabilities??Z}}function Qg($){return Object.assign({},...p0.resolveProviderModelCatalogKeys($).map((Z)=>p0.getGeneratedModelsForProvider(Z)))}function Jg($){let W=$.provider.trim();if(!W||p0.isBuiltInProviderId(W))return;let Z=$.baseUrl?.trim();if(!Z)return;let Q=p0.MODEL_COLLECTIONS_BY_PROVIDER_ID[W],J=Qg(W),j=hD($.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=kD($.protocol,Q?.provider.protocol),K=ID($.client,G,Q?.provider.client);p0.registerProvider({provider:{id:W,name:Q?.provider.name??CD(W),description:Q?.provider.description,protocol:G,client:K,baseUrl:Z,modelsSourceUrl:Q?.provider.modelsSourceUrl,defaultModelId:H,capabilities:yD($.capabilities)??Q?.provider.capabilities,source:"file"},models:V})}function j7($){for(let W of Object.values($.providers))Jg(W.settings)}function PW($,W){let Z=W.models??{};if(!$g(W.provider)){Wg($,Z);return}let Q=hD(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=kD(W.provider.protocol,void 0),Y=ID(W.provider.client,X,void 0),V=Object.fromEntries(J.map(({id:B,model:H})=>[B,{...xD(B,H,Q.length>0?Q:void 0),status:"active"}]));p0.registerProvider({provider:{id:$,name:W.provider.name.trim()||CD($),protocol:X,client:Y,baseUrl:W.provider.baseUrl,modelsSourceUrl:W.provider.modelsSourceUrl,defaultModelId:j,capabilities:yD(W.provider.capabilities),source:"file"},models:V})}function gD($){let W=G8($);if(Z7.has(W))return;let Z=aX(W);for(let[Q,J]of Object.entries(Z.providers))PW(Q,J);Z7.add(W)}async function X7($){let W=G8($);if(Z7.has(W))return;let Z=await n6(W);for(let[Q,J]of Object.entries(Z.providers))PW(Q,J);Z7.add(W)}var vD="cline-pass";function jg($){return $.apiKey??$.auth?.apiKey}function Xg($){return($.auth?.accessToken?.trim()??"").length>0}function cD($){return $.split(/[-_]/).filter(Boolean).map((W)=>W.charAt(0).toUpperCase()+W.slice(1)).join(" ")}function Yg($){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 uD($){return Object.entries($).sort(([W],[Z])=>W.localeCompare(Z)).map(([W,Z])=>bD(W,Z))}async function Bg($,W){let Z=await I0.getModelsForProvider($),Q=$===vD;if(!W&&!Q)return Z;let J=await Y5($,{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 oX($){return[...new Set(($??[]).map((W)=>W.trim()).filter(Boolean))]}function Hg($){if(!$?.length)return;return[...new Set($)]}function Gg($,W){return Hg([...$??[],...W??[]])}function Kg($){let W=$?.popularRank;return typeof W==="number"&&Number.isFinite(W)?W:Number.MAX_SAFE_INTEGER}function Fg($){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 Ag($){let W=$?.configFields;if(!Array.isArray(W))return;return W.filter(Fg)}var Y7={path:"apiKey",label:"API Key",type:"password",placeholder:"Enter API key...",description:"API key issued by the provider.",secret:!0},mD={path:"baseUrl",label:"Base URL",type:"url",placeholder:"https://...",description:"Base endpoint used for provider requests."};function Ug($){if(!$)return[Y7];if($.source!=="system")return $.baseUrl?[Y7,mD]:[Y7];let W=[];if($.env?.length)W.push(Y7);if($.baseUrl)W.push(mD);return W}function fg($,W){return W.split(".").reduce((Z,Q)=>{if(!Z||typeof Z!=="object")return;return Z[Q]},$)}function Dg($){if(typeof $==="string"||typeof $==="number"||typeof $==="boolean"||$===null)return $;return}function _g($,W,Z){if(!$?.length)return;let Q={};for(let J of $){let X=Dg(J.path==="baseUrl"&&W?.baseUrl===void 0?Z?.baseUrl:fg(W,J.path))??J.defaultValue;if(X!==void 0)Q[J.path]=X}return Q}function dD($){let W=Object.entries($??{}).filter(([Z])=>Z.trim().length>0);return W.length>0?Object.fromEntries(W):void 0}function sX($,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 lD($){if(!$.shouldRecompute)return $.fallbackModelIds??[];let W=$.modelsSourceUrl?await $Z($.modelsSourceUrl,$.providerId):[];return[...new Set([...$.explicitModels??[],...W])]}function pD($,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);I0.unregisterProvider(W)}async function tX($,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=G8($);if((await n6(A)).providers[Z]){let U=await H7($,{providerId:Z});return{providerId:Z,settingsPath:U.settingsPath,modelsPath:U.modelsPath,modelsCount:0}}return pD($,Z),{providerId:Z,settingsPath:$.getFilePath(),modelsPath:A,modelsCount:0}}if(I0.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=oX(W.models),Y=W.modelsSourceUrl?.trim(),V=await lD({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=dD(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=G8($),F=await n6(K);return F.providers[Z]={provider:{name:j,baseUrl:Q,defaultModelId:B,protocol:W.protocol,client:W.client,capabilities:H,modelsSourceUrl:Y},models:sX(V,H)},await J7(K,F),PW(Z,F.providers[Z]),{providerId:Z,settingsPath:$.getFilePath(),modelsPath:K,modelsCount:V.length}}async function B7($,W){let Z=W.providerId.trim().toLowerCase();if(!Z)throw Error("providerId is required");let Q=G8($),J=await n6(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=oX(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()||cD(Z),baseUrl:W.baseUrl?.trim()??T.baseUrl?.trim()??"",defaultModelId:L,protocol:T.protocol,client:T.client,capabilities:T.capabilities},models:L?sX([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=oX(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),f=await lD({providerId:Z,explicitModels:G,modelsSourceUrl:K,fallbackModelIds:A,shouldRecompute:F});if(f.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(),_=U&&f.includes(U)?U:f[0],M={...$.getProviderSettings(Z)??{},provider:Z,baseUrl:Y,model:_};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=dD(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:_,protocol:B,client:H,capabilities:V,modelsSourceUrl:K},models:sX(f,V)},await J7(Q,J),PW(Z,J.providers[Z]),{providerId:Z,settingsPath:$.getFilePath(),modelsPath:Q,modelsCount:f.length}}async function H7($,W){let Z=W.providerId.trim().toLowerCase();if(!Z)throw Error("providerId is required");let Q=G8($),J=await n6(Q);if(!J.providers[Z])throw Error(`provider "${Z}" does not exist`);return delete J.providers[Z],await J7(Q,J),I0.unregisterProvider(Z),pD($,Z),{providerId:Z,settingsPath:$.getFilePath(),modelsPath:Q}}function eX($,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 $Y($,W={}){let Z=$.read(),Q=I0.getProviderIds(),J=await Promise.all(Q.map(async(X)=>{let[Y,V]=await Promise.all([I0.getProvider(X),I0.getModelsForProvider(X)]),B=uD(V),H=Z.providers[X]?.settings,G=$.getProviderSettings(X),K=Y?.name??cD(X),F=Gg(Y?.capabilities,G?.capabilities),A=Ag(Y?.metadata)??Ug(Y);return{provider:{id:X,name:K,models:B.length,color:Vg(X),letter:Yg(K),enabled:Boolean(H),apiKey:G?jg(G):void 0,oauthAccessTokenPresent:G?Xg(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:_g(A,G,Y),modelList:B},rank:Kg(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!==vD);return{providers:j,settingsPath:$.getFilePath()}}async function WY($,W){let Z=$.trim(),Q=await Bg(Z,W),J=uD(Q);return{providerId:Z,models:J}}function V7($){return $!=null&&typeof $==="object"&&!Array.isArray($)}function rD($,W){if(!V7(W))return V7($)?{...$}:void 0;let Z=V7($)?{...$}:{};for(let[Q,J]of Object.entries(W)){if(J==null||J===""){delete Z[Q];continue}if(V7(J)){let j=rD(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 ZY($,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=rD(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 QY($,W){let Z=W.trim(),Q=$.getProviderSettings(Z),j=I0.MODEL_COLLECTIONS_BY_PROVIDER_ID[Z]?.provider,X=Q?.baseUrl?.trim()||j?.baseUrl?.trim(),Y=WZ(X,j?.baseUrl,j?.modelsSourceUrl);if(!Q||!j||!X||!Y)return{providerId:Z,refreshed:!1};let V=await B7($,{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 JY($){let W=$.trim().toLowerCase(),Z=G0(W);if(Z)return Z.providerId;throw Error(`provider "${$}" does not support OAuth login`)}async function jY($,W,Z,Q){let J=G0($);if(!J)throw Error(`provider "${$}" does not support OAuth login`);let j=J6({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 XY($,W,Z,Q,J){return J2({manager:$,providerId:W,settings:Z,credentials:Q,setLastUsed:J?.setLastUsed})}async function YY($,W,Z,Q){let J=J6({onPrompt:async(j)=>j.defaultValue??"",openUrl:Z,onOpenUrlError:({error:j})=>{throw j instanceof Error?j:Error(String(j))}});return Y4($,W,{callbacks:J,telemetry:Q})}function VY($){let W=$?.auth?.accessToken?.trim()||$?.apiKey?.trim();return W&&W.length>0?W:void 0}var nD={};E(nD,{getProviderConfigFields:()=>BY});import*as G7 from"@cline/llms";var Lg=["apiKey","baseUrl","azureApiVersion","awsRegion","awsProfile","gcpProjectId","gcpRegion","sapClientId","sapClientSecret","sapTokenUrl","sapResourceGroup","sapDeploymentId"],Og={"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 Tg($,W){let Z={};for(let Q of Lg){let J=$[Q],j=W[Q];if(J||j)Z[Q]={...J,...j}}return Z}function zg($){let W=Og[$.providerId];if(!W)return $;return{...$,description:W.description??$.description,fields:W.mode==="replace"?W.fields:Tg($.fields,W.fields)}}var qg=new Set(["ollama","lmstudio","litellm","openai-compatible"]);function Mg($,W){if(!W?.provider.baseUrl)return!1;if(W.provider.source!=="system")return!0;return qg.has($)}function BY($){let W=G7.normalizeProviderId($);if(Q2(W))return{providerId:W,authMethod:"oauth",fields:{}};let Z=G7.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(Mg(W,Z))J.baseUrl={defaultValue:Q};return zg({providerId:W,authMethod:"api-key",fields:J})}var tD={};E(tD,{resolveLegacyClineAuth:()=>KY,migrateLegacyProviderSettings:()=>SW});import{existsSync as Rg,readFileSync as Ng}from"node:fs";import{dirname as Eg,join as HY}from"node:path";import*as a6 from"@cline/llms";import{resolveClineDataDir as wg}from"@cline/shared/storage";var K7="openai",sD=a6.BUILT_IN_PROVIDER.OPENAI_COMPATIBLE,aD=128000;function KY($){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 Cg($){return $==="credentials"?"iam":$}function oD($){if(!Rg($))return;try{let W=Ng($,"utf8"),Z=JSON.parse(W);if(Z&&typeof Z==="object"&&!Array.isArray(Z))return Z}catch{}return}function Pg($){let W=$.dataDir??wg(),Z=$.globalStatePath??HY(W,"globalState.json"),Q=$.secretsPath??HY(W,"secrets.json"),J=oD(Z),j=oD(Q);if(!J&&!j)return;return{globalState:J??{},secrets:j??{}}}function GY($){if($===K7)return sD;return $}function Sg($,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 bg($,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 yg($){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 hg($){let W=a6.getGeneratedModelsForProvider($),Q=a6.getProviderCollectionSync($)?.provider.defaultModelId;if(Q&&W[Q])return Q;return Object.keys(W)[0]??void 0}function kg($,W,Z,Q){let J=GY($),j=b(Q==="plan"?W.planModeApiProvider:W.actModeApiProvider),X=Sg(W,$,Q,j)??hg(J),Y=bg(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,yg(Z));if($==="cline")try{let _=b(Z["cline:clineAccountId"]);if(_)H.auth={...H.auth??{},...KY(_)}}catch{}if($===K7&&W.openAiHeaders)H.headers=W.openAiHeaders;if($==="bedrock"){let _=Cg(W.awsAuthentication),D=_==="profile"||W.awsUseProfile===!0;H.aws={accessKey:b(Z.awsAccessKey),secretKey:b(Z.awsSecretKey),sessionToken:b(Z.awsSessionToken),region:b(W.awsRegion),authentication:_,profile:D?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($===K7&&(W.azureApiVersion||W.azureIdentity!==void 0))H.azure={apiVersion:b(W.azureApiVersion),useIdentity:W.azureIdentity};if($==="sapaicore"){let _=W.sapAiCoreUseOrchestrationMode??!0;H.sap={clientId:b(Z.sapAiCoreClientId),clientSecret:b(Z.sapAiCoreClientSecret),tokenUrl:b(W.sapAiCoreTokenUrl),resourceGroup:b(W.sapAiResourceGroup),deploymentId:_?void 0:b(Q==="plan"?W.planModeSapAiCoreDeploymentId:W.actModeSapAiCoreDeploymentId),useOrchestrationMode:_}}if($==="oca"){H.oca={mode:W.ocaMode};let _=b(Z.ocaRefreshToken);if(_)H.auth={...H.auth??{},refreshToken:_}}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},f=$6.safeParse(A);if(!f.success)return;return Object.keys(A).filter((_)=>_!=="provider").length>0?f.data:void 0}function Ig($,W){if($!==sD)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:aD,maxInputTokens:aD,capabilities:["streaming","tools","images"]}}}}function xg($,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(K7);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=KY(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 SW($){let W=$.providerSettingsManager.read(),Z=Pg($);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=xg(Q,J),Y=k$();Y.providers={...W.providers},Y.lastUsedProvider=W.lastUsedProvider;let V=new Date().toISOString(),B=0,H=HY(Eg($.providerSettingsManager.getFilePath()),"models.json"),G=aX(H),K=0;for(let f of X){let U=GY(f);if(Y.providers[U])continue;let _=kg(f,Q,J,j);if(!_)continue;Y.providers[U]={settings:_,updatedAt:V,tokenSource:"migration"},B+=1;let D=Ig(U,_);if(D&&!G.providers[U])G.providers[U]=D,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?GY(F):void 0;if(Y.lastUsedProvider=W.lastUsedProvider??(A&&Y.providers[A]?A:Object.keys(Y.providers)[0]),$.providerSettingsManager.write(Y),K>0)SD(H,G);return{migrated:B>0||K>0,providerCount:Object.keys(Y.providers).length,lastUsedProvider:Y.lastUsedProvider}}PQ();O0();FW();var eD={};E(eD,{FileTeamPersistenceStore:()=>F7});import{appendFileSync as gg,existsSync as FY,mkdirSync as mg,readFileSync as vg,renameSync as cg,unlinkSync as ug,writeFileSync as dg}from"node:fs";import{join as AY}from"node:path";import{resolveTeamDataDir as lg}from"@cline/shared/storage";function pg($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}class F7{dirPath;statePath;taskHistoryPath;teammateSpecs=new Map;constructor($){let W=pg($.teamName),Z=$.baseDir?.trim()||lg();this.dirPath=AY(Z,W),this.statePath=AY(this.dirPath,"state.json"),this.taskHistoryPath=AY(this.dirPath,"task-history.jsonl")}loadState(){if(!FY(this.statePath))return;try{let $=vg(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 JU(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`;dg(Z,`${JSON.stringify(W,null,2)}
|
|
757
|
-
`,"utf8"),
|
|
758
|
-
`,"utf8")}ensureDir(){if(!FY(this.dirPath))mg(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(FY(this.statePath))ug(this.statePath)}}var $_={};E($_,{ChatViewStateSchema:()=>UY,ChatSummarySchema:()=>_7,ChatSessionStatusSchema:()=>U7,ChatSessionConfigSchema:()=>A7,ChatMessageSchema:()=>D7,ChatMessageRoleSchema:()=>f7});import{z as k}from"zod";var A7=k.object({workspaceRoot:k.string().min(1),cwd:k.string().optional(),provider:k.string().min(1),model:k.string().min(1),mode:k.enum(["act","plan"]).default("act"),apiKey:k.string(),systemPrompt:k.string().optional(),rules:k.string().optional(),maxIterations:k.number().int().positive().optional(),enableTools:k.boolean(),enableSpawn:k.boolean().optional(),enableTeams:k.boolean().optional(),autoApproveTools:k.boolean().optional(),missionStepInterval:k.number().int().positive().optional(),missionTimeIntervalMs:k.number().int().positive().optional()}),U7=k.enum(["idle","starting","running","pending","stopping","completed","cancelled","failed","error"]),f7=k.enum(["user","assistant","tool","system","status","error"]),D7=k.object({id:k.string().min(1),sessionId:k.string().nullable(),role:f7,content:k.string(),createdAt:k.number().int().nonnegative(),meta:k.object({stream:k.enum(["stdout","stderr"]).optional(),toolName:k.string().optional(),iteration:k.number().int().nonnegative().optional(),agentId:k.string().optional(),conversationId:k.string().optional(),hookEventName:k.string().optional(),inputTokens:k.number().int().nonnegative().optional(),outputTokens:k.number().int().nonnegative().optional(),checkpoint:k.object({ref:k.string(),createdAt:k.number().int().nonnegative(),runCount:k.number().int().positive(),kind:k.enum(["stash","commit"]).optional()}).optional()}).optional()}),_7=k.object({toolCalls:k.number().int().nonnegative(),tokensIn:k.number().int().nonnegative(),tokensOut:k.number().int().nonnegative()}),UY=k.object({sessionId:k.string().nullable(),status:U7,config:A7,messages:k.array(D7),rawTranscript:k.string(),error:k.string().nullable(),summary:_7});var W_={};E(W_,{CORE_BUILD_VERSION:()=>bW});var bW=c8;import{Agent as um,createAgentRuntime as dm}from"@cline/agents";var Z_={};E(Z_,{fetchClineRecommendedModels:()=>DY,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>L7});import{getClineEnvironmentConfig as rg}from"@cline/shared";var ig=5000,L7={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 ng($){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 fY($){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 ag($){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(fY).filter((V)=>V!==null),X=Q.map(fY).filter((V)=>V!==null),Y=J.map(fY).filter((V)=>V!==null);if(j.length===0&&X.length===0&&Y.length===0)return null;return{recommended:j,free:X,clinePass:Y}}function og($){let W=$.baseUrl?.trim();if(W)return W;let Z=rg().apiBaseUrl;try{return($.providerSettingsManager??new Y1).getProviderSettings("cline")?.baseUrl?.trim()||Z}catch{return Z}}async function sg($,W,Z){let Q=new AbortController,J=setTimeout(()=>Q.abort(),Z);try{return await $(W,{signal:Q.signal})}finally{clearTimeout(J)}}async function DY($={}){try{let W=og($),Z=$.fetchImpl??fetch,Q=await sg(Z,`${W}/api/v1/ai/cline/recommended-models`,$.timeoutMs??ig);if(!Q.ok)throw Error(`HTTP ${Q.status}`);let J=await Q.json(),j=ag(J);if(j)return j}catch{}return ng(L7)}var Q_={};E(Q_,{loadLlmsConfigFromFile:()=>LY,defineLlmsConfig:()=>_Y});import{readFile as tg}from"node:fs/promises";import eg from"node:path";function _Y($){return $}async function LY($){let W=eg.resolve($),Z=await tg(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 $m(Q,W)}function $m($,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 B_={};E(B_,{createLlmsSdk:()=>TY,DefaultLlmsSdk:()=>yW});import{BUILT_IN_PROVIDER_IDS as X_,createHandler as Qm,createHandlerAsync as Jm,getProviderCollection as jm,hasProvider as Y_,registerAsyncHandler as Xm,registerHandler as Ym,registerModel as Vm,registerProvider as V_}from"@cline/llms";function J_($){return $?{...$}:{}}function Wm($,W){if($)return $;if(!W)return;let Z=globalThis.process;if(!Z?.env)return;return Z.env[W]}function Zm($,W){if(!W.length)throw Error(`Provider "${$}" must include at least one model.`)}function j_($){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 OY{providers=new Map;register($){Zm($.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??{},...J_($.defaults)}})}registerSelectionConfig($){this.register({id:$.id,models:$.models,defaultModel:$.defaultModel,defaults:{apiKey:Wm($.apiKey,$.apiKeyEnv),routingProviderId:$.builtinProviderId,baseUrl:$.baseUrl,headers:$.headers,timeoutMs:$.timeoutMs,capabilities:$.capabilities,...J_($.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 yW{configuredProviders=new OY;constructor($){this.applyConfig($)}createHandler($){return Qm(this.configuredProviders.createHandlerConfig($))}async createHandlerAsync($){return Jm(this.configuredProviders.createHandlerConfig($))}registerProvider($){if(V_($.collection),$.handlerFactory&&$.asyncHandlerFactory)throw Error(`Provider "${$.collection.provider.id}" cannot register both sync and async handlers.`);if($.handlerFactory)Ym($.collection.provider.id,$.handlerFactory);if($.asyncHandlerFactory)Xm($.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.`);V_({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[...X_]}async getBuiltInProviders(){return(await Promise.all(X_.map((W)=>jm(W)))).filter((W)=>W!==void 0).map((W)=>j_({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=Y_(W.id),Q=this.configuredProviders.createHandlerConfig({providerId:W.id,modelId:W.defaultModel}).routingProviderId,J=typeof Q==="string"&&Y_(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 TY($){return new yW($)}dj();async function Bm(){return Promise.resolve().then(() => (PQ(),cf))}function om(){return new Date().toISOString()}var sm="cline",tm="cline-pass";function em($){if(F_($)!=="providers.json")return;let W=qY($);if(F_(W)!=="settings")return;return qY(W)}class Y1{filePath;dataDir;constructor($={}){if(this.filePath=$.filePath??am(),this.dataDir=$.dataDir??em(this.filePath),this.dataDir||!$.filePath)SW({providerSettingsManager:this,dataDir:this.dataDir});if(gD(this),j7(this.read()),zY(this.filePath))try{K_(this.filePath,384)}catch{}}getFilePath(){return this.filePath}read(){if(!zY(this.filePath))return k$();try{let $=pm(this.filePath,"utf8"),W=JSON.parse($),Z=W6.safeParse(W);if(Z.success){j7(Z.data);let Q=Z.data.providers.cline?.settings?.auth;return Z0(`providers.read providers=[${Object.keys(Z.data.providers).join(",")}] lastUsed=${Z.data.lastUsedProvider??"none"} clineAuthPresent=${!!Q?.accessToken} clineAccessTokenHash=${M0(Q?.accessToken)} clineRefreshTokenHash=${M0(Q?.refreshToken)}`),Z.data}}catch{}return k$()}write($){let W=W6.parse($),Z=qY(this.filePath);if(!zY(Z))lm(Z,{recursive:!0,mode:448});let Q=`${this.filePath}.${process.pid}.tmp`;try{nm(Q,`${JSON.stringify(W,null,2)}
|
|
759
|
-
`,{encoding:"utf8",mode:384}),rm(Q,this.filePath)}catch(J){throw im(Q,{force:!0}),J}try{K_(this.filePath,384)}catch{}j7(W)}saveProviderSettings($,W={}){let Z=$6.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:om(),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 Z0(`providers.save providerId=${J} tokenSource=${Y} clineAuthWasPresent=${!!B?.accessToken} clineAuthIsPresent=${!!H?.accessToken} authDropped=${G}`),V}resolveProviderSettings($,W){let Z=$.providers[W]?.settings,J=G0(W)?.storageProviderId;if(!J||J===W)return Z;let j=$.providers[J]?.settings;if(!j)return Z;return $6.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===tm&&W.isClinePassEnabled===!1)return sm;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 t0(Z,W)}getLastUsedProviderConfig($={}){let W=this.getLastUsedProviderSettings($);if(!W)return;return t0(W,$)}async refreshCatalog(){try{await t8({})}catch{}}}O0();T6();function $v($,W){let Z=$?.expiresAt,Q=W?.expiresAt;return $?.accessToken===W?.accessToken&&$?.refreshToken===W?.refreshToken&&$?.accountId===W?.accountId&&Z===Q}class O7 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 MY{providerSettingsManager;telemetry;refreshInFlight=new Map;constructor($){this.providerSettingsManager=$?.providerSettingsManager??new Y1,this.telemetry=$?.telemetry}async resolveProviderApiKey($){let W=G0($.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=G0($);if(!Q)return null;let J=this.providerSettingsManager.getProviderSettings(W);if(!J)return Z0(`oauth.resolve providerId=${$} storageProviderId=${W} outcome=no_settings`),null;let j=V4($,J);if(!j)return Z0(`oauth.resolve providerId=${$} storageProviderId=${W} outcome=no_credentials`),null;Z0(`oauth.resolve.start providerId=${$} storageProviderId=${W} forceRefresh=${Z} accessTokenHash=${M0(j.access)} refreshTokenHash=${M0(j.refresh)}`);let X=await Q.refresh({settings:J,credentials:j,forceRefresh:Z,telemetry:this.telemetry});if(!X)throw Z0(`oauth.resolve providerId=${$} outcome=refresh_returned_null`),new O7($);let Y=J2({manager:this.providerSettingsManager,providerId:$,settings:J,credentials:X,setLastUsed:!1,save:!1}),V=!$v(J.auth,Y.auth);if(V)Z0(`oauth.resolve.refreshed providerId=${$} newAccessTokenHash=${M0(X.access)} newRefreshTokenHash=${M0(X.refresh)} savingToDisk=true`),this.providerSettingsManager.saveProviderSettings(Y,{setLastUsed:!1,tokenSource:"oauth"});else Z0(`oauth.resolve providerId=${$} outcome=not_refreshed`);return{apiKey:Q.getApiKey(Y)??X.access,accountId:X.accountId,refreshed:V}}}import{normalizeUserInput as Wv}from"@cline/shared";import{nanoid as Zv}from"nanoid";class A_{list($){return $?V1($):[]}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:V1($),updated:!1};let J=$.pendingPrompts[Q];if(!J)return{sessionId:W.sessionId,prompts:V1($),updated:!1};let j=W.prompt===void 0?J.prompt:Wv(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:V1($),prompt:T7(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:V1($),removed:!1};let[J]=$.pendingPrompts.splice(Q,1);return{sessionId:W.sessionId,prompts:V1($),prompt:J?T7(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 V1($)}consumeSteer($){let W=$.pendingPrompts.findIndex((Q)=>Q.delivery==="steer");if(W<0)return{prompts:V1($)};let[Z]=$.pendingPrompts.splice(W,1);return{entry:Z,prompts:V1($)}}shiftNext($){return{entry:$.pendingPrompts.shift(),prompts:V1($)}}requeueFront($,W){return $.pendingPrompts.unshift(W),V1($)}clear($){return $.pendingPrompts.length=0,[]}}class RY{deps;service=new A_;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:V1($)}})}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=T7(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 T7($){return{id:$.id,prompt:$.prompt,delivery:$.delivery,attachmentCount:($.userImages?.length??0)+($.userFiles?.length??0),userImages:$.userImages,userFiles:$.userFiles}}function V1($){return $.pendingPrompts.map(T7)}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)}O0();class EY{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=y3(Z),X=!!Q&&(!j.agentId||j.agentId===NY(Q.agent));h3(J,Z,X?{isPrimaryAgentEvent:!0,agentId:NY(Q.agent),conversationId:Q.agent.getConversationId(),...Q?.runtime.teamRuntime?{teamRole:"lead"}:{}}:{isPrimaryAgentEvent:!1})}async handleTeamEvent($,W){let Z=this.deps.getSession($);if(Z){if(qj(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};h3(Q,W.event,{agentId:W.agentId,teamRole:"teammate",teamAgentId:W.agentId,isPrimaryAgentEvent:!1})}if(W.type==="teammate_spawned"){let Q=i1({agentId:W.teammate.runtimeAgentId??W.agentId,conversationId:W.teammate.conversationId,parentAgentId:W.teammate.parentAgentId,createdByAgentId:NY(Z.agent),teamId:Z.runtime.teamRuntime?.getTeamId(),teamName:Z.runtime.teamRuntime?.getTeamName(),teamRole:"teammate",teamAgentId:W.agentId});if(Q)U$(Z.config.telemetry,{ulid:$,modelId:W.teammate.modelId??Z.config.modelId,provider:Z.config.providerId,...Q})}}if(await Mj($,W,this.deps.invokeBackendOptional),Z)Rj(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 NY($){return $.getAgentId()}function wY($){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:C$($.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 CY($,W){let Z=$[W];return typeof Z==="function"?Z:null}async function U_($,W,...Z){let Q=CY($,W);if(!Q)throw Error(`session service method not available: ${W}`);return Promise.resolve(Q.apply($,Z))}async function f_($,W,...Z){let Q=CY($,W);if(!Q)return;await Promise.resolve(Q.apply($,Z))}async function D_($,W,...Z){let Q=CY($,W);if(!Q)return;return await Promise.resolve(Q.apply($,Z))}A1();O0();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=i1({agentId:Q.subAgentId,conversationId:Q.conversationId,parentAgentId:Q.parentAgentId,teamId:J?.getTeamId(),teamName:J?.getTeamName(),createdByAgentId:Q.parentAgentId});if(j)U$(W.telemetry,{ulid:Z,modelId:W.modelId,provider:W.providerId,...j});t6(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;t6(W.telemetry,{event:"ended",ulid:Z,durationMs:X,outputLines:Y,errorMessage:Q.error?String(Q.error):void 0,agentId:Q.subAgentId,parentId:Q.parentAgentId,...i1({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 SY($,W,Z,Q){let J=PY($,W,Z);return E$({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?R2({cwd:W.cwd,...o0[l1({mode:W.mode})],executors:Q}):[];if(W.enableSpawnAgent)X.push(SY($,W,Z,Q));return p1(X)},...J})}import{readFile as Jv,stat as jv}from"node:fs/promises";var Xv=20480000;async function __($){let W=await jv($);if(!W.isFile())throw Error("Path is not a file");if(W.size>Xv)throw Error("File is too large to read into context.");let Z=await Jv($,"utf8");if(Z.includes("\x00"))throw Error("Cannot read binary file into context.");return Z}var L_=5000;function hW($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function Av($){if(!$||typeof $!=="object"||Array.isArray($))return;let W=$,Z=hW(W.inputTokens),Q=hW(W.outputTokens),J=hW(W.cacheReadTokens),j=hW(W.cacheWriteTokens),X=hW(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 Uv($,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 O_($,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 b1{runtimeAddress=void 0;pendingPrompts;sessionService;runtimeBuilder;createAgentInstance;toolExecutors;defaultCapabilities;defaultToolPolicies;providerSettingsManager;oauthTokenManager;defaultTelemetry;defaultFetch;events=new i5;sessions=new Map;manifestMutationQueues=new Map;usageBySession=new Map;aggregateUsageBySession=new Map;subAgentStarts=new Map;pendingPromptsController;eventBridge;sessionVersioning=new o$;constructor($){let W=Vv();if(W)Fv(W);let Z=u0($.distinctId);this.sessionService=$.sessionService,this.runtimeBuilder=$.runtimeBuilder??new d6,this.createAgentInstance=$.createAgent??((Q)=>new M$(Q)),this.defaultCapabilities=w0($.capabilities),this.toolExecutors=this.defaultCapabilities?.toolExecutors,this.defaultToolPolicies=$.toolPolicies,this.providerSettingsManager=$.providerSettingsManager??new Y1,this.oauthTokenManager=$.oauthTokenManager??new MY({providerSettingsManager:this.providerSettingsManager,telemetry:$.telemetry}),this.defaultTelemetry=$.telemetry,this.defaultTelemetry?.setDistinctId(Z),this.defaultFetch=$.fetch,this.pendingPromptsController=new RY({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 EY({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??A0.CLI,Z=X0(),Q=$.config.sessionId?.trim()??"",J=Q||Hv(),j=await this.applyInitialOAuthCredentials($),X=j.initialMessages??[],Y=X.length>0?v8(X):z0(),V=await this.invokeOptionalValue("ensureSessionsDir")??"";if(!V)throw Error("session service method not available: ensureSessionsDir");let B=bY(V,J),H=bY(B,`${J}.messages.json`),G=bY(B,`${J}.json`),K=C$($.config),F=g0.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,f;if(Q.length>0&&X.length>0&&!j.prompt?.trim()){let I=await this.invokeOptionalValue("readSessionManifest",J);if(I)F=I,A={manifestPath:G,messagesPath:I.messages_path||H,compactionPath:I.compaction_path,manifest:I},f=await this.invokeOptionalValue("readSessionCompactionState",J)}let _=await this.seedAggregateUsageFromArtifacts({initialUsage:Y,sessionDir:B,rootMessagesPath:A?.messagesPath??H,manifest:F});this.usageBySession.set(J,Y),this.aggregateUsageBySession.set(J,_);let D=w0(this.defaultCapabilities,$.capabilities),M=D?.toolExecutors??this.toolExecutors,T=$.localRuntime,O=T?.extensionContext?.logger??T?.logger,L=T?.extensionContext?.automation,C,N={getSession:(I)=>this.sessions.get(I),subAgentStarts:this.subAgentStarts,onAgentEvent:(I,e,y0)=>this.eventBridge.dispatchAgentEvent(I,e,y0),invokeBackendOptional:(I,...e)=>this.invokeOptional(I,...e)};C=await XK({input:j,localRuntime:$.localRuntime,sessionId:J,providerSettingsManager:this.providerSettingsManager,defaultTelemetry:this.defaultTelemetry,defaultCapabilities:D,defaultToolPolicies:this.defaultToolPolicies,defaultFetch:this.defaultFetch,onPluginEvent:(I)=>{if(I.name==="plugin_log"){this.eventBridge.handlePluginLog(J,I.payload,O);return}this.eventBridge.handlePluginEvent(J,I,L)},onTeamEvent:(I)=>{this.eventBridge.handleTeamEvent(J,I),C.config.onTeamEvent?.(I)},createSpawnTool:()=>SY(N,C.config,J,M),createSubAgentLifecycleCallbacks:(I)=>PY(N,I,J),readSessionMetadata:async()=>(await this.getSession(J))?.metadata,writeSessionMetadata:async(I)=>{await this.persistSessionMetadata(J,()=>I)}});let y=await this.runtimeBuilder.build(C.runtimeBuilderInput),P=C.config,d=C.providerConfig;if(y.teamRuntime&&!P.teamName?.trim())P.teamName=y.teamRuntime.getTeamName();let n=[...y.tools,...P.extraTools??[]],o=y.extensions??C.extensions,G$=j.initialCompactionState,h1,x0=D4(P),$2=G$??f,V0=x0&&$2?{...$2,conversation_id:$2.conversation_id?.trim()||J}:void 0,K$=x0?_4({compact:x0,getState:()=>h1?.compactionState,saveState:async(I)=>{let e=h1;if(!e)return;let y0={...I,conversation_id:e.sessionId};try{if(!(await this.persistActiveSessionCompactionState(e,y0)).updated)P.logger?.debug?.("Skipped stale session compaction state",{sessionId:e.sessionId,sourceMessageCount:y0.source_message_count})}catch(B0){P.logger?.error?.("Failed to persist session compaction state",{sessionId:e.sessionId,error:B0}),e$(P.telemetry,{component:"core",operation:"session.persist_compaction_state",severity:"warn",handled:!0,error:B0,context:{sessionId:e.sessionId,providerId:P.providerId,modelId:P.modelId}})}}}):void 0,L0={sessionId:J,providerId:d.providerId,modelId:d.modelId,apiKey:d.apiKey,baseUrl:d.baseUrl,headers:d.headers,knownModels:d.knownModels,providerConfig:d,thinking:P.thinking,reasoningEffort:P.reasoningEffort??d.reasoningEffort,thinkingBudgetTokens:P.thinkingBudgetTokens,maxTokensPerTurn:P.maxTokensPerTurn,systemPrompt:P.systemPrompt,maxIterations:P.maxIterations,execution:P.execution,prepareTurn:K$,tools:n,hooks:C.hooks,extensions:o,hookErrorMode:P.hookErrorMode,initialMessages:C.effectiveInput.initialMessages,userFileContentLoader:__,toolPolicies:C.toolPolicies,requestToolApproval:C.requestToolApproval?async(I)=>{let e=C.requestToolApproval,y0=this.sessions.get(J);if(y0)await this.markTurnPending(y0);try{if(!e)return{approved:!1,reason:"Tool approval callback is not configured."};return await e(I)}finally{let B0=this.sessions.get(J);if(B0?.status==="pending")await this.markTurnRunning(B0)}}:void 0,telemetry:P.telemetry,onConsecutiveMistakeLimitReached:P.onConsecutiveMistakeLimitReached,completionPolicy:y.completionPolicy,consumePendingUserMessage:()=>{let I=this.pendingPromptsController.consumeSteer(J);return I?jW(I.prompt,I.mode??P.mode):void 0},logger:y.logger??P.logger,extensionContext:P.extensionContext,onEvent:(I)=>this.eventBridge.dispatchAgentEvent(J,P,I)};L0.hooks={...L0.hooks,onEvent:async(I)=>{if(await C.hooks?.onEvent?.(I),I.type!=="assistant-message")return;let e=this.sessions.get(J);if(!e)return;let y0=e.agent.getMessages();try{await this.invoke("persistSessionMessages",J,y0,P.systemPrompt)}catch(B0){P.logger?.error?.("Failed to persist session messages after assistant response",{sessionId:J,error:B0}),e$(P.telemetry,{component:"core",operation:"session.persist_messages_after_assistant_response",error:B0,severity:"warn",handled:!0,context:{sessionId:J,providerId:P.providerId,modelId:P.modelId}})}}};let b0=this.createAgentInstance(L0);if(L0.onEvent)b0.subscribeEvents(L0.onEvent);y.registerLeadAgent?.(b0);let L1=i1({agentId:b0.getAgentId(),conversationId:b0.getConversationId(),teamId:y.teamRuntime?.getTeamId(),teamName:y.teamRuntime?.getTeamName(),teamRole:y.teamRuntime?"lead":void 0});if(VK(P,J,Q.length>0,K,L1),L1)U$(P.telemetry,{ulid:J,modelId:P.modelId,provider:P.providerId,...L1});if(y.teamRuntime)aW(P.telemetry,{ulid:J,teamId:y.teamRuntime.getTeamId(),teamName:y.teamRuntime.getTeamName(),leadAgentId:b0.getAgentId(),restoredFromPersistence:y.teamRestoredFromPersistence===!0});let g={sessionId:J,config:P,sessionMetadata:j.sessionMetadata,...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:y,agent:b0,started:!1,status:A?.manifest.status??"running",aborting:!1,interactive:$.interactive===!0,persistedMessages:X,compactionState:V0,activeTeamRunIds:new Set,pendingTeamRunUpdates:[],teamRunWaiters:[],pendingPrompts:[],drainingPendingPrompts:!1,pluginSandboxShutdown:C.pluginSandboxShutdown,submitAndExitObserved:!1,lastInteractiveTurnFinishReason:void 0};if(h1=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),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 q0;try{if(j.prompt?.trim())if(q0=await this.executeTurn(g,{prompt:j.prompt,userImages:j.userImages,userFiles:j.userFiles}),!g.interactive)await this.finalizeSingleRun(g,q0.finishReason);else await this.completeInteractiveTurn(g,q0.finishReason)}catch(I){if(g.interactive&&g.aborting)q0=await this.completeAbortedInteractiveTurn(g);else{e$(g.config.telemetry,{component:"core",operation:"session.start",error:I,severity:"error",handled:!1,context:{sessionId:g.sessionId,providerId:g.config.providerId,modelId:g.config.modelId}});try{await this.failSession(g)}catch(e){g.config.logger?.error?.("Session failure cleanup threw",{sessionId:g.sessionId,error:e})}throw I}}return{sessionId:J,manifest:F,manifestPath:G,messagesPath:H,result:q0}}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 e$(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=oJ(this.usageBySession.get($)),Z=oJ(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&&!F0(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&&!F0(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 wY(W);let Z=$.trim();if(!Z)return;let Q=await this.getRow(Z);if(Q)return p4(Q);let J=await this.readManifest(Z);return J?aZ(J):void 0}async listSessions($=200){let Z=(await this.listRows($)).map(p4),Q=new Set(Z.map((J)=>J.sessionId));for(let J of this.sessions.values()){if(Q.has(J.sessionId))continue;Z.unshift(wY(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(O_(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 j2(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(O_(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 u$(Z.messagesPath);let Q=await this.readManifest(W);return u$(Q?.messages_path)}async dispatchHookEvent($){await dF($,{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=O2(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.syncOAuthCredentials($),await this.markTurnRunning($);let X=await this.executeAgentTurn($,Q,Z.userImages,Z.userFiles);while(Nj($,X.finishReason)){let Y=await Ej($);if(Y.length===0)break;let V=wj($,Y);X=await this.executeAgentTurn($,V)}return X}async completeInteractiveTurn($,W){if(JW($))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=z0();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)??z0(),Y=this.aggregateUsageBySession.get($.sessionId)??X;$.turnUsageBaseline=X,$.turnAggregateUsageBaseline=Y,$.turnPrimaryUsage=z0(),$.turnUsageByAgent=new Map,dW($.config.telemetry,$.sessionId,$.config.mode),F8($.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=d9(B.messages,B,j);$.persistedMessages=H;let G=i4($.turnUsageByAgent?.values()??[]),K=D0(X,B.usage),F=D0(D0(z0(),B.usage),G),A=D0(Y,F);return this.usageBySession.set($.sessionId,K),this.aggregateUsageBySession.set($.sessionId,A),await this.persistSessionMetadata($.sessionId,(f)=>({...f??{},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 e$($.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===T0.SUBMIT_AND_EXIT&&Q.error===void 0))return;$.submitAndExitObserved=!0,o6($.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=C$($.config),Q=Kv(W.prompt).trim();if(!Q)return{prompt:"",userImages:W.userImages,userFiles:this.resolveAbsoluteFilePaths($.config.cwd,W.userFiles)};let J=await C8(Q,Z);BK($.config.telemetry,J);let j=jW(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=C$($.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 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(JW($))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)o6($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"shutdown",...this.getSessionAgentTelemetryIdentity($)});GQ($);let Z=[],Q=(J,j)=>{Z.push(j),$.config.logger?.log("Session shutdown cleanup failed",{sessionId:$.sessionId,stage:J,error:j,severity:"warn"}),e$($.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){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"}),e$($.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,F0(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=F0(W)?null:J.ended_at,$.exitCode=J.exit_code,this.emitStatus($.sessionId,W)}async runWithAuthRetry($,W,Z){try{return await W()}catch(Q){if(!Q2($.config.providerId)||!Gv(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 O7)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 e1($);throw e$(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)=>Bv(Q)?Q:yY($,Q));return Array.from(new Set(Z))}getSessionAgentTelemetryIdentity($){return i1({agentId:$.agent.getAgentId(),conversationId:$.agent.getConversationId(),teamId:$.runtime.teamRuntime?.getTeamId(),teamName:$.runtime.teamRuntime?.getTeamName(),teamRole:$.runtime.teamRuntime?"lead":void 0})}async seedAggregateUsageFromArtifacts($){let W=await this.summarizePersistedTeammateUsage($.sessionDir,$.rootMessagesPath,$.manifest.session_id),Z=D0($.initialUsage,W);return this.withPersistedAggregateUsageFloor(Z,$.manifest)}async summarizePersistedTeammateUsage($,W,Z){let Q=yY(W),J=`${Z}.messages.json`,j;try{j=Yv($)}catch{return z0()}let X=z0();for(let Y of j){if(!Y.endsWith(".messages.json"))continue;if(Y===J)continue;let V=yY($,Y);if(V===Q)continue;let B=await u$(V);if(B.length===0)continue;X=D0(X,v8(B))}return X}withPersistedAggregateUsageFloor($,W){let Z=Av(W.metadata?.aggregateUsage);if(Z)return Uv($,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:E1({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($)),L_))}async getRow($){let W=$.trim();if(!W)return;return(await this.listRows(L_)).find((Q)=>Q.sessionId===W)}async readManifest($){let W=$.trim();if(!W)return;return await this.invokeOptionalValue("readSessionManifest",W)}invoke($,...W){return U_(this.sessionService,$,...W)}invokeOptional($,...W){return f_(this.sessionService,$,...W)}invokeOptionalValue($,...W){return D_(this.sessionService,$,...W)}}function Dv($){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 _v($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}function CQ($={}){let W=new b1({sessionService:new S1(new C1),fetch:$.fetch,telemetry:$.telemetry});return{async startSession(Z){let Q=(Z.cwd?.trim()||Z.workspaceRoot).trim(),J=await W.startSession({source:Z.source?.trim()||A0.CLI,interactive:!1,config:{providerId:fv(Z.provider),modelId:Z.model,apiKey:Z.apiKey?.trim()||void 0,cwd:Q,workspaceRoot:Z.workspaceRoot,systemPrompt:Z.systemPrompt??"",mode:_v(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:Dv(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 Lv}from"node:os";import{createClineTelemetryServiceConfig as Ov}from"@cline/shared";O0();FW();var Tv=300000,zv=5000;function T_(){let $=Ov({metadata:{extension_version:bW,cline_type:"hub",platform:"cline-hub-daemon",platform_version:process.version,os_type:process.platform,os_version:Lv()}}),W=i$($),Z,Q=()=>{try{return Z??=new Y1,Z.getProviderSettings("cline")?.auth?.accountId?.trim()||void 0}catch{return}},J,j=()=>{let Y=Q();if(!Y||Y===J)return;J=Y,B1(W.telemetry,{id:Y,provider:"cline"})};j();let X=setInterval(j,Tv);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,zv),Y.unref?.()})]),clearTimeout(Y)}}}Mv(process.env.CLINE_VCR);function Nv($){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 Ev(){let $=Nv(process.argv.slice(2));process.chdir($.cwd);let W=Q1({host:$.host,port:$.port,pathname:$.pathname}),Z=T_(),Q;try{Q=await Y8({host:W.host,port:W.port,pathname:W.pathname,owner:Rv()==="production"?J1():c0(),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=Jx($);if(pQ($))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 iQ($,W={}){let[Z]=uX($),Q=Z?.trim()||$.id;if(!Q)throw Error("Plugin marketplace uninstalls require a plugin name.");let J=await RW({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 lX($,W={}){if($.type==="mcp"){let Z=wW($);if(W.deleteMcpServer)await W.deleteMcpServer(Z);else lQ($,W);return{id:$.id,type:$.type,status:"uninstalled",message:`Uninstalled ${$.name??Z??$.id}.`}}if($.type==="skill")return rQ($,W);if($.type==="plugin")return iQ($,W);throw Error(`Unsupported marketplace entry type: ${$.type}`)}var bD={};w(bD,{parsePluginSource:()=>Z7,isOfficialPluginSlug:()=>W7,installPlugin:()=>oX,collectPluginMcpOAuthCandidates:()=>Q7});import{spawn as jx}from"node:child_process";import{createHash as Xx}from"node:crypto";import{existsSync as k1,mkdirSync as iX,readdirSync as Yx,readFileSync as Vx,renameSync as nQ,rmSync as sQ,statSync as nX}from"node:fs";import{cp as rX,mkdir as RD,writeFile as tQ}from"node:fs/promises";import{homedir as LD}from"node:os";import{basename as K$,dirname as OD,extname as Bx,join as s,relative as ED,resolve as t$,sep as Hx}from"node:path";import{isPluginModulePath as oQ,resolveClineDir as Gx,resolvePluginModuleEntries as Kx}from"@cline/shared/storage";var i6="_installed",eQ="package",Fx="https://github.com/cline/plugins.git",TD=30000,aQ=10485760,zD="@cline/",Ax=["dependencies","devDependencies","optionalDependencies","peerDependencies"],Ux={name:"cline-installed-plugin",private:!0,cline:{plugins:[]}};function $7($){if($==="~")return LD();if($.startsWith("~/"))return s(LD(),$.slice(2));return $}function wD($){return $.split(Hx).join("/")}function H8($){return Xx("sha256").update($).digest("hex").slice(0,12)}function fx($){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 fx(W)||"plugin"}function W7($){return/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test($.trim())}function Dx($){return $?.trim()||Fx}function qD($){let Z=$.trim().match(/^(@?[^@/]+(?:\/[^@/]+)?)(?:@.+)?$/);if(!Z?.[1])throw Error(`Invalid npm plugin source: npm:${$}`);return{name:Z[1]}}function _x($){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 Ox($){try{return decodeURIComponent($)}catch{return $}}function Tx($){return K$(Ox($))||"plugin"}function zx($){let W=$.split("/").filter(Boolean);return W.length>=5&&(W[2]==="blob"||W[2]==="raw")}function MD($){if(!/^https?:\/\//i.test($))return null;let W;try{W=new URL($)}catch{return null}let Z=W.hostname.toLowerCase(),Q=Tx(W.pathname),J=oQ(Q),j=(Z==="github.com"||Z==="www.github.com")&&zx(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 ND($,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 Z7($,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}=qD(X);return{type:"npm",spec:X,name:Y}}if(W==="git"){let X=ND(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=MD(Z);if(!X)throw Error(`Invalid remote plugin source: ${$}`);return X}if(Z.startsWith("npm:")){let X=Z.slice(4).trim(),{name:Y}=qD(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=MD(Z);if(J)return J;let j=ND(Z);if(j)return j;if(W7(Z))return{type:"official",slug:Z};if(_x(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 qx($){return $?s($,".cline","plugins"):s(Gx(),"plugins")}function Mx($,W,Z){if(W.type==="npm")return s($,i6,"npm",`${G$(W.name)}-${H8(Z)}`);if(W.type==="git")return s($,i6,"git",G$(W.host),`${G$(W.path)}-${H8(Z)}`);if(W.type==="remote")return s($,i6,"remote",`${G$(W.filename)}-${H8(Z)}`);if(W.type==="official")return s($,i6,"official",`${G$(W.slug)}-${H8(Z)}`);return s($,i6,"local",`${G$(K$($7(W.path)))}-${H8(Z)}`)}function Nx($,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:${t$(W,$7($.path))}`}function Rx($,W){if($.type==="npm")return $.name;if($.type==="git")return G$(K$($.path));if($.type==="remote")return G$(K$($.filename,Bx($.filename)));if($.type==="official")return $.slug;return G$(K$(t$(W,$7($.path))))}async function n6($,W,Z={}){await new Promise((Q,J)=>{let j=jx($,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 CD($){let W=s($,"package.json");if(!k1(W))return null;try{return JSON.parse(Vx(W,"utf8"))}catch{return null}}function Ex($){let W=$?.cline?.plugins;if(!Array.isArray(W))return[];return W.flatMap((Z)=>{if(typeof Z==="string")return[Z];return Z.paths??[]})}async function wx($){let W=s($,"package.json"),Z=CD($);if(!Z)return;let Q=!1;for(let J of Ax){let j=Z[J];if(!j||typeof j!=="object")continue;for(let X of Object.keys(j)){if(!X.startsWith(zD))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(zD))continue;delete Z.peerDependenciesMeta[J],Q=!0}if(Object.keys(Z.peerDependenciesMeta).length===0)delete Z.peerDependenciesMeta}if(!Q)return;await tQ(W,`${JSON.stringify(Z,null,2)}
|
|
754
|
+
`,"utf8")}function Cx($,W){let Z=s($,"node_modules","@cline");if(!k1(Z))return;for(let Q of SD(Z)){if(`@cline/${Q.name}`===W)continue;sQ(s(Z,Q.name),{recursive:!0,force:!0})}}function PD($){let W=Ex(CD($)).map((j)=>t$($,j)).filter((j)=>k1(j)&&nX(j).isFile()&&oQ(j));if(W.length>0)return W;let Z=Kx($);if(Z?.length)return Z;let Q=[],J=[$];while(J.length>0){let j=J.pop();if(!j)continue;for(let X of SD(j)){let Y=s(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(".")&&oQ(Y))Q.push(Y)}}return Q.sort((j,X)=>j.localeCompare(X))}function SD($){try{return Yx($,{withFileTypes:!0})}catch{return[]}}function Px($,W){let Z=PD(W);if(Z.length===0)throw Error(`No plugin entry files found in ${W}`);return Z.map((Q)=>`./${wD(ED($,Q))}`)}async function Sx($,W,Z){let Q=Px($,W);return await tQ(s($,"package.json"),JSON.stringify({...Ux,name:Z,cline:{plugins:[{paths:Q}]}},null,2),"utf8"),Q}async function bx($,W,Z){let Q=s(W,eQ);return await RD(Q,{recursive:!0}),await tQ(s(Q,"package.json"),JSON.stringify({name:"cline-plugin-install",private:!0},null,2),"utf8"),await n6(Z,["install",$.spec,"--prefix",Q,"--omit=dev","--omit=peer","--legacy-peer-deps","--no-audit","--no-fund","--package-lock=false"]),Cx(Q,$.name),s(Q,"node_modules",$.name)}async function aX($,W){if(!k1(s($,"package.json")))return;await wx($),await n6(W,["install","--omit=dev","--omit=peer","--legacy-peer-deps","--no-audit","--no-fund","--package-lock=false"],{cwd:$})}async function yx($,W,Z){if($.ref?.startsWith("-"))throw Error(`Invalid git ref "${$.ref}".`);let Q=s(W,eQ),J=["clone","--filter=blob:none"];if($.ref)J.push("--branch",$.ref);J.push("--",$.repo,Q);try{await n6("git",J)}catch(j){if(!$.ref)throw j;await n6("git",["clone","--filter=blob:none","--",$.repo,Q]),await n6("git",["checkout","--detach",$.ref],{cwd:Q})}return await aX(Q,Z),Q}async function hx($,W,Z,Q){let J=s(W,"repo");await n6("git",["clone","--filter=blob:none","--depth","1","--",Q,J]);let j=s(J,"plugins",$.slug);if(!k1(j)||!nX(j).isDirectory())throw Error(`Official Cline plugin "${$.slug}" was not found at plugins/${$.slug} in ${Q}`);let X=s(W,eQ);return await rX(j,X,{recursive:!0,filter:(Y)=>{let V=K$(Y);return V!==".git"&&V!=="node_modules"}}),sQ(J,{recursive:!0,force:!0}),await aX(X,Z),X}function pX($){return Error(`Remote plugin file from ${$} exceeds the ${aQ} byte limit`)}function kx($){let W=$.headers.get("content-length");if(!W)return;let Z=Number(W);if(!Number.isFinite(Z)||Z<0)return;return Z}async function Ix($,W){let Z=kx($);if(Z!==void 0&&Z>aQ)throw pX(W);if(!$.body){let X=Buffer.from(await $.text(),"utf8");if(X.byteLength>aQ)throw pX(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>aQ)throw await Q.cancel().catch(()=>{return}),pX(W);J.push(V)}return Buffer.concat(J,j)}finally{Q.releaseLock()}}async function xx($,W){let Z=new AbortController,Q=setTimeout(()=>{Z.abort()},TD);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 Ix(J,$.url);return iX(W,{recursive:!0}),await tQ(s(W,$.filename),j),W}catch(J){if(J instanceof Error&&J.name==="AbortError")throw Error(`Timed out downloading plugin file from ${$.url} after ${TD}ms`);throw J}finally{clearTimeout(Q)}}async function gx($,W,Z,Q){let J=t$(Z,$7($.path));if(!k1(J))throw Error(`Plugin source path does not exist: ${J}`);let j=nX(J);if(j.isFile()){if(!oQ(J))throw Error(`Plugin file must be .js or .ts: ${J}`);iX(W,{recursive:!0});let Y=s(W,K$(J));return await rX(J,Y),W}if(!j.isDirectory())throw Error(`Plugin source must be a file or directory: ${J}`);let X=s(W,eQ);return await rX(J,X,{recursive:!0,filter:(Y)=>{let V=K$(Y);return V!==".git"&&V!=="node_modules"}}),await aX(X,Q),X}function mx($,W){if(k1($)&&!W)throw Error(`Plugin is already installed at ${$}. Use --force to replace it.`)}function vx($,W,Z){if(iX(OD(W),{recursive:!0}),!k1(W)){nQ($,W);return}if(!Z)throw Error(`Plugin is already installed at ${W}. Use --force to replace it.`);let Q=s(OD(W),`.replace-${K$(W)}-${Date.now()}-${process.pid}-${H8(`${W}:${Math.random()}`)}`);nQ(W,Q);try{nQ($,W)}catch(J){if(!k1(W)&&k1(Q))nQ(Q,W);throw J}try{sQ(Q,{recursive:!0,force:!0})}catch{}}function cx($){let W=$.transport;if(W.type==="stdio")return!1;return W.headers!==void 0&&Object.keys(W.headers).length>0}function ux($){let W=$.oauth?.tokens?.access_token;return typeof W==="string"&&W.trim().length>0}function dx($){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 Q7($){let W=new Set($.pluginPaths.map((J)=>t$(J)));if(W.size===0)return[];let Z;try{Z=t0({filePath:$.settingsPath??Q0()})}catch{return[]}let Q=[];for(let J of Z){let j=dx(J);if(!j||!W.has(t$(j.pluginPath)))continue;let X=J.transport.type;if(X==="stdio")continue;if(cx(J)||ux(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 oX($){let W=$.source.trim(),Z=Z7(W,$.sourceType),Q=$.cwd?.trim(),J=Q?t$(Q):process.cwd(),j=qx(Q?J:void 0),X=Dx($.officialPluginsRepo),Y=Nx(Z,J,X),V=Mx(j,Z,Y),B=Rx(Z,J),H=s(j,i6,".tmp"),G=s(H,`${Date.now()}-${process.pid}-${H8(`${W}:${Math.random()}`)}`),K=$.npmCommand??(process.env.CLINE_NPM_COMMAND?.trim()||"npm"),F=$.force===!0;mx(V,F),await RD(H,{recursive:!0});let A;try{if(Z.type==="npm")A=await bx(Z,G,K);else if(Z.type==="git")A=await yx(Z,G,K);else if(Z.type==="official")A=await hx(Z,G,K,X);else if(Z.type==="remote")A=await xx(Z,G);else A=await gx(Z,G,J,K);let f=(Z.type==="local"||Z.type==="remote")&&A===G?PD(G).map((D)=>`./${wD(ED(G,D))}`):await Sx(G,A,B);if(f.length===0)throw Error(`No plugin entry files found for ${W}`);vx(G,V,F);let U={source:W,installPath:V,entryPaths:f.map((D)=>t$(V,D)),mcpSyncFailures:[],mcpOAuthCandidates:[]},_=await MW({pluginPaths:U.entryPaths,cwd:J,workspacePath:J});return U.mcpSyncFailures=_.failures,U.mcpOAuthCandidates=Q7({pluginPaths:U.entryPaths}),U}catch(f){throw sQ(G,{recursive:!0,force:!0}),f}}var eD={};w(eD,{updateLocalProvider:()=>G7,saveLocalProviderSettings:()=>jY,saveLocalProviderOAuthCredentials:()=>BY,resolveLocalClineAuthToken:()=>GY,refreshProviderModelsFromSource:()=>XY,normalizeOAuthProvider:()=>YY,markLocalProviderEnabled:()=>ZY,loginLocalProvider:()=>VY,loginAndSaveLocalProviderOAuthCredentials:()=>HY,listLocalProviders:()=>QY,getLocalProviderModels:()=>JY,ensureCustomProvidersLoaded:()=>V7,deleteLocalProvider:()=>K7,addLocalProvider:()=>WY});import*as h0 from"@cline/llms";import{existsSync as lx,mkdirSync as px,readFileSync as rx,writeFileSync as ix}from"node:fs";import{mkdir as nx,readFile as ax,writeFile as ox}from"node:fs/promises";import{dirname as sX,join as sx}from"node:path";import*as d0 from"@cline/llms";import{ModelCapabilitySchema as tx,ProviderCapabilitySchema as ex,ProviderClientSchema as $g,ProviderProtocolSchema as Wg}from"@cline/shared";import{z as t}from"zod";var Zg=t.object({id:t.string().optional(),name:t.string().optional(),maxTokens:t.number().optional(),contextWindow:t.number().optional(),maxInputTokens:t.number().optional(),capabilities:t.array(tx).optional(),supportsVision:t.boolean().optional(),supportsAttachments:t.boolean().optional(),supportsReasoning:t.boolean().optional()}).passthrough(),Qg=t.object({name:t.string(),baseUrl:t.string(),defaultModelId:t.string().optional(),protocol:Wg.optional(),client:$g.optional(),capabilities:t.array(ex).optional(),modelsSourceUrl:t.string().optional()}).passthrough(),yD=t.object({provider:Qg.optional(),models:t.record(t.string(),Zg).optional()}).passthrough(),hD=t.object({version:t.literal(1),providers:t.record(t.string(),yD)}),Jg=t.object({version:t.literal(1),providers:t.record(t.string(),t.unknown())}),J7=new Set;function kD($){return $.split(/[-_]/).filter(Boolean).map((W)=>W.charAt(0).toUpperCase()+W.slice(1)).join(" ")}function G8($){return sx(sX($.getFilePath()),"models.json")}function j7(){return{version:1,providers:{}}}function ID($){let W=Jg.safeParse($);if(!W.success)return j7();let Z={};for(let[Q,J]of Object.entries(W.data.providers)){let j=yD.safeParse(J);if(j.success)Z[Q]=j.data}return{version:1,providers:Z}}function tX($){if(!lx($))return j7();try{let W=rx($,"utf8");return ID(JSON.parse(W))}catch{}return j7()}async function a6($){try{let W=await ax($,"utf8");return ID(JSON.parse(W))}catch{}return j7()}function xD($,W){px(sX($),{recursive:!0});let Z=hD.parse(W);ix($,`${JSON.stringify(Z,null,2)}
|
|
755
|
+
`,"utf8")}async function X7($,W){await nx(sX($),{recursive:!0});let Z=hD.parse(W);await ox($,`${JSON.stringify(Z,null,2)}
|
|
756
|
+
`,"utf8")}function gD($,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 mD($){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 vD($){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 jg($){return $!=null&&typeof $.name==="string"&&typeof $.baseUrl==="string"}function cD($,W){return $??W??"openai-chat"}function uD($,W,Z){return $??Z??(W==="openai-responses"?"openai":"openai-compatible")}function dD($,W,Z){let Q=new Set(W?.capabilities??Z??[]);if(W?.supportsVision)Q.add("images");if(W?.supportsAttachments)Q.add("files");if(W?.supportsReasoning)Q.add("reasoning");return{id:$,name:W?.name??$,maxTokens:W?.maxTokens,contextWindow:W?.contextWindow,maxInputTokens:W?.maxInputTokens,capabilities:Q.size>0?[...Q]:void 0}}function Xg($,W){for(let[Z,Q]of Object.entries(W??{})){let J=Q.id?.trim()||Z.trim();if(!J)continue;d0.registerModel($,J,dD(J,Q))}}function Yg($,W,Z){return{...W??{},id:$,name:W?.name??$,capabilities:W?.capabilities??Z}}function Vg($){return Object.assign({},...d0.resolveProviderModelCatalogKeys($).map((Z)=>d0.getGeneratedModelsForProvider(Z)))}function Bg($){let W=$.provider.trim();if(!W||d0.isBuiltInProviderId(W))return;let Z=$.baseUrl?.trim();if(!Z)return;let Q=d0.MODEL_COLLECTIONS_BY_PROVIDER_ID[W],J=Vg(W),j=vD($.capabilities),X=j.length>0?j:void 0,Y=$.model?.trim(),V={...J,...Q?.models??{}};if(Y)V[Y]=Yg(Y,V[Y],X);let B=Object.keys(V).filter(Boolean),H=Y||B[0];if(!H)return;let G=cD($.protocol,Q?.provider.protocol),K=uD($.client,G,Q?.provider.client);d0.registerProvider({provider:{id:W,name:Q?.provider.name??kD(W),description:Q?.provider.description,protocol:G,client:K,baseUrl:Z,modelsSourceUrl:Q?.provider.modelsSourceUrl,defaultModelId:H,capabilities:mD($.capabilities)??Q?.provider.capabilities,source:"file"},models:V})}function Y7($){for(let W of Object.values($.providers))Bg(W.settings)}function bW($,W){let Z=W.models??{};if(!jg(W.provider)){Xg($,Z);return}let Q=vD(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=cD(W.provider.protocol,void 0),Y=uD(W.provider.client,X,void 0),V=Object.fromEntries(J.map(({id:B,model:H})=>[B,{...dD(B,H,Q.length>0?Q:void 0),status:"active"}]));d0.registerProvider({provider:{id:$,name:W.provider.name.trim()||kD($),protocol:X,client:Y,baseUrl:W.provider.baseUrl,modelsSourceUrl:W.provider.modelsSourceUrl,defaultModelId:j,capabilities:mD(W.provider.capabilities),source:"file"},models:V})}function lD($){let W=G8($);if(J7.has(W))return;let Z=tX(W);for(let[Q,J]of Object.entries(Z.providers))bW(Q,J);J7.add(W)}async function V7($){let W=G8($);if(J7.has(W))return;let Z=await a6(W);for(let[Q,J]of Object.entries(Z.providers))bW(Q,J);J7.add(W)}var rD="cline-pass";function Hg($){return $.apiKey??$.auth?.apiKey}function Gg($){return($.auth?.accessToken?.trim()??"").length>0}function iD($){return $.split(/[-_]/).filter(Boolean).map((W)=>W.charAt(0).toUpperCase()+W.slice(1)).join(" ")}function Kg($){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 Fg($){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 nD($){return Object.entries($).sort(([W],[Z])=>W.localeCompare(Z)).map(([W,Z])=>gD(W,Z))}async function Ag($,W){let Z=await h0.getModelsForProvider($),Q=$===rD;if(!W&&!Q)return Z;let J=await B5($,{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 eX($){return[...new Set(($??[]).map((W)=>W.trim()).filter(Boolean))]}function Ug($){if(!$?.length)return;return[...new Set($)]}function fg($,W){return Ug([...$??[],...W??[]])}function Dg($){let W=$?.popularRank;return typeof W==="number"&&Number.isFinite(W)?W:Number.MAX_SAFE_INTEGER}function _g($){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 Lg($){let W=$?.configFields;if(!Array.isArray(W))return;return W.filter(_g)}var B7={path:"apiKey",label:"API Key",type:"password",placeholder:"Enter API key...",description:"API key issued by the provider.",secret:!0},pD={path:"baseUrl",label:"Base URL",type:"url",placeholder:"https://...",description:"Base endpoint used for provider requests."};function Og($){if(!$)return[B7];if($.source!=="system")return $.baseUrl?[B7,pD]:[B7];let W=[];if($.env?.length)W.push(B7);if($.baseUrl)W.push(pD);return W}function Tg($,W){return W.split(".").reduce((Z,Q)=>{if(!Z||typeof Z!=="object")return;return Z[Q]},$)}function zg($){if(typeof $==="string"||typeof $==="number"||typeof $==="boolean"||$===null)return $;return}function qg($,W,Z){if(!$?.length)return;let Q={};for(let J of $){let X=zg(J.path==="baseUrl"&&W?.baseUrl===void 0?Z?.baseUrl:Tg(W,J.path))??J.defaultValue;if(X!==void 0)Q[J.path]=X}return Q}function aD($){let W=Object.entries($??{}).filter(([Z])=>Z.trim().length>0);return W.length>0?Object.fromEntries(W):void 0}function $Y($,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 oD($){if(!$.shouldRecompute)return $.fallbackModelIds??[];let W=$.modelsSourceUrl?await WZ($.modelsSourceUrl,$.providerId):[];return[...new Set([...$.explicitModels??[],...W])]}function sD($,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);h0.unregisterProvider(W)}async function WY($,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=G8($);if((await a6(A)).providers[Z]){let U=await K7($,{providerId:Z});return{providerId:Z,settingsPath:U.settingsPath,modelsPath:U.modelsPath,modelsCount:0}}return sD($,Z),{providerId:Z,settingsPath:$.getFilePath(),modelsPath:A,modelsCount:0}}if(h0.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=eX(W.models),Y=W.modelsSourceUrl?.trim(),V=await oD({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=aD(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=G8($),F=await a6(K);return F.providers[Z]={provider:{name:j,baseUrl:Q,defaultModelId:B,protocol:W.protocol,client:W.client,capabilities:H,modelsSourceUrl:Y},models:$Y(V,H)},await X7(K,F),bW(Z,F.providers[Z]),{providerId:Z,settingsPath:$.getFilePath(),modelsPath:K,modelsCount:V.length}}async function G7($,W){let Z=W.providerId.trim().toLowerCase();if(!Z)throw Error("providerId is required");let Q=G8($),J=await a6(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=eX(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()||iD(Z),baseUrl:W.baseUrl?.trim()??T.baseUrl?.trim()??"",defaultModelId:L,protocol:T.protocol,client:T.client,capabilities:T.capabilities},models:L?$Y([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=eX(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),f=await oD({providerId:Z,explicitModels:G,modelsSourceUrl:K,fallbackModelIds:A,shouldRecompute:F});if(f.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(),_=U&&f.includes(U)?U:f[0],M={...$.getProviderSettings(Z)??{},provider:Z,baseUrl:Y,model:_};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=aD(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:_,protocol:B,client:H,capabilities:V,modelsSourceUrl:K},models:$Y(f,V)},await X7(Q,J),bW(Z,J.providers[Z]),{providerId:Z,settingsPath:$.getFilePath(),modelsPath:Q,modelsCount:f.length}}async function K7($,W){let Z=W.providerId.trim().toLowerCase();if(!Z)throw Error("providerId is required");let Q=G8($),J=await a6(Q);if(!J.providers[Z])throw Error(`provider "${Z}" does not exist`);return delete J.providers[Z],await X7(Q,J),h0.unregisterProvider(Z),sD($,Z),{providerId:Z,settingsPath:$.getFilePath(),modelsPath:Q}}function ZY($,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 QY($,W={}){let Z=$.read(),Q=h0.getProviderIds(),J=await Promise.all(Q.map(async(X)=>{let[Y,V]=await Promise.all([h0.getProvider(X),h0.getModelsForProvider(X)]),B=nD(V),H=Z.providers[X]?.settings,G=$.getProviderSettings(X),K=Y?.name??iD(X),F=fg(Y?.capabilities,G?.capabilities),A=Lg(Y?.metadata)??Og(Y);return{provider:{id:X,name:K,models:B.length,color:Fg(X),letter:Kg(K),enabled:Boolean(H),apiKey:G?Hg(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:qg(A,G,Y),modelList:B},rank:Dg(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!==rD);return{providers:j,settingsPath:$.getFilePath()}}async function JY($,W){let Z=$.trim(),Q=await Ag(Z,W),J=nD(Q);return{providerId:Z,models:J}}function H7($){return $!=null&&typeof $==="object"&&!Array.isArray($)}function tD($,W){if(!H7(W))return H7($)?{...$}:void 0;let Z=H7($)?{...$}:{};for(let[Q,J]of Object.entries(W)){if(J==null||J===""){delete Z[Q];continue}if(H7(J)){let j=tD(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 jY($,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=tD(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 XY($,W){let Z=W.trim(),Q=$.getProviderSettings(Z),j=h0.MODEL_COLLECTIONS_BY_PROVIDER_ID[Z]?.provider,X=Q?.baseUrl?.trim()||j?.baseUrl?.trim(),Y=ZZ(X,j?.baseUrl,j?.modelsSourceUrl);if(!Q||!j||!X||!Y)return{providerId:Z,refreshed:!1};let V=await G7($,{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 YY($){let W=$.trim().toLowerCase(),Z=H0(W);if(Z)return Z.providerId;throw Error(`provider "${$}" does not support OAuth login`)}async function VY($,W,Z,Q){let J=H0($);if(!J)throw Error(`provider "${$}" does not support OAuth login`);let j=j6({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 BY($,W,Z,Q,J){return J2({manager:$,providerId:W,settings:Z,credentials:Q,setLastUsed:J?.setLastUsed})}async function HY($,W,Z,Q){let J=j6({onPrompt:async(j)=>j.defaultValue??"",openUrl:Z,onOpenUrlError:({error:j})=>{throw j instanceof Error?j:Error(String(j))}});return B4($,W,{callbacks:J,telemetry:Q})}function GY($){let W=$?.auth?.accessToken?.trim()||$?.apiKey?.trim();return W&&W.length>0?W:void 0}var $_={};w($_,{getProviderConfigFields:()=>KY});import*as F7 from"@cline/llms";var Mg=["apiKey","baseUrl","azureApiVersion","awsRegion","awsProfile","gcpProjectId","gcpRegion","sapClientId","sapClientSecret","sapTokenUrl","sapResourceGroup","sapDeploymentId"],Ng={"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 Rg($,W){let Z={};for(let Q of Mg){let J=$[Q],j=W[Q];if(J||j)Z[Q]={...J,...j}}return Z}function Eg($){let W=Ng[$.providerId];if(!W)return $;return{...$,description:W.description??$.description,fields:W.mode==="replace"?W.fields:Rg($.fields,W.fields)}}var wg=new Set(["ollama","lmstudio","litellm","openai-compatible"]);function Cg($,W){if(!W?.provider.baseUrl)return!1;if(W.provider.source!=="system")return!0;return wg.has($)}function KY($){let W=F7.normalizeProviderId($);if(Q2(W))return{providerId:W,authMethod:"oauth",fields:{}};let Z=F7.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(Cg(W,Z))J.baseUrl={defaultValue:Q};return Eg({providerId:W,authMethod:"api-key",fields:J})}var J_={};w(J_,{resolveLegacyClineAuth:()=>UY,migrateLegacyProviderSettings:()=>yW});import{existsSync as Pg,readFileSync as Sg}from"node:fs";import{dirname as bg,join as FY}from"node:path";import*as o6 from"@cline/llms";import{resolveClineDataDir as yg}from"@cline/shared/storage";var A7="openai",Q_=o6.BUILT_IN_PROVIDER.OPENAI_COMPATIBLE,W_=128000;function UY($){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 hg($){return $==="credentials"?"iam":$}function Z_($){if(!Pg($))return;try{let W=Sg($,"utf8"),Z=JSON.parse(W);if(Z&&typeof Z==="object"&&!Array.isArray(Z))return Z}catch{}return}function kg($){let W=$.dataDir??yg(),Z=$.globalStatePath??FY(W,"globalState.json"),Q=$.secretsPath??FY(W,"secrets.json"),J=Z_(Z),j=Z_(Q);if(!J&&!j)return;return{globalState:J??{},secrets:j??{}}}function AY($){if($===A7)return Q_;return $}function Ig($,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 xg($,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 gg($){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 mg($){let W=o6.getGeneratedModelsForProvider($),Q=o6.getProviderCollectionSync($)?.provider.defaultModelId;if(Q&&W[Q])return Q;return Object.keys(W)[0]??void 0}function vg($,W,Z,Q){let J=AY($),j=b(Q==="plan"?W.planModeApiProvider:W.actModeApiProvider),X=Ig(W,$,Q,j)??mg(J),Y=xg(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,gg(Z));if($==="cline")try{let _=b(Z["cline:clineAccountId"]);if(_)H.auth={...H.auth??{},...UY(_)}}catch{}if($===A7&&W.openAiHeaders)H.headers=W.openAiHeaders;if($==="bedrock"){let _=hg(W.awsAuthentication),D=_==="profile"||W.awsUseProfile===!0;H.aws={accessKey:b(Z.awsAccessKey),secretKey:b(Z.awsSecretKey),sessionToken:b(Z.awsSessionToken),region:b(W.awsRegion),authentication:_,profile:D?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($===A7&&(W.azureApiVersion||W.azureIdentity!==void 0))H.azure={apiVersion:b(W.azureApiVersion),useIdentity:W.azureIdentity};if($==="sapaicore"){let _=W.sapAiCoreUseOrchestrationMode??!0;H.sap={clientId:b(Z.sapAiCoreClientId),clientSecret:b(Z.sapAiCoreClientSecret),tokenUrl:b(W.sapAiCoreTokenUrl),resourceGroup:b(W.sapAiResourceGroup),deploymentId:_?void 0:b(Q==="plan"?W.planModeSapAiCoreDeploymentId:W.actModeSapAiCoreDeploymentId),useOrchestrationMode:_}}if($==="oca"){H.oca={mode:W.ocaMode};let _=b(Z.ocaRefreshToken);if(_)H.auth={...H.auth??{},refreshToken:_}}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},f=W6.safeParse(A);if(!f.success)return;return Object.keys(A).filter((_)=>_!=="provider").length>0?f.data:void 0}function cg($,W){if($!==Q_)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:W_,maxInputTokens:W_,capabilities:["streaming","tools","images"]}}}}function ug($,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(A7);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=UY(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 yW($){let W=$.providerSettingsManager.read(),Z=kg($);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=ug(Q,J),Y=k$();Y.providers={...W.providers},Y.lastUsedProvider=W.lastUsedProvider;let V=new Date().toISOString(),B=0,H=FY(bg($.providerSettingsManager.getFilePath()),"models.json"),G=tX(H),K=0;for(let f of X){let U=AY(f);if(Y.providers[U])continue;let _=vg(f,Q,J,j);if(!_)continue;Y.providers[U]={settings:_,updatedAt:V,tokenSource:"migration"},B+=1;let D=cg(U,_);if(D&&!G.providers[U])G.providers[U]=D,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?AY(F):void 0;if(Y.lastUsedProvider=W.lastUsedProvider??(A&&Y.providers[A]?A:Object.keys(Y.providers)[0]),$.providerSettingsManager.write(Y),K>0)xD(H,G);return{migrated:B>0||K>0,providerCount:Object.keys(Y.providers).length,lastUsedProvider:Y.lastUsedProvider}}bQ();O0();UW();var j_={};w(j_,{FileTeamPersistenceStore:()=>U7});import{appendFileSync as dg,existsSync as fY,mkdirSync as lg,readFileSync as pg,renameSync as rg,unlinkSync as ig,writeFileSync as ng}from"node:fs";import{join as DY}from"node:path";import{resolveTeamDataDir as ag}from"@cline/shared/storage";function og($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}class U7{dirPath;statePath;taskHistoryPath;teammateSpecs=new Map;constructor($){let W=og($.teamName),Z=$.baseDir?.trim()||ag();this.dirPath=DY(Z,W),this.statePath=DY(this.dirPath,"state.json"),this.taskHistoryPath=DY(this.dirPath,"task-history.jsonl")}loadState(){if(!fY(this.statePath))return;try{let $=pg(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 HU(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`;ng(Z,`${JSON.stringify(W,null,2)}
|
|
757
|
+
`,"utf8"),rg(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(),dg(this.taskHistoryPath,`${JSON.stringify({ts:new Date().toISOString(),type:$.type,task:W})}
|
|
758
|
+
`,"utf8")}ensureDir(){if(!fY(this.dirPath))lg(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(fY(this.statePath))ig(this.statePath)}}var X_={};w(X_,{ChatViewStateSchema:()=>_Y,ChatSummarySchema:()=>O7,ChatSessionStatusSchema:()=>D7,ChatSessionConfigSchema:()=>f7,ChatMessageSchema:()=>L7,ChatMessageRoleSchema:()=>_7});import{z as I}from"zod";var f7=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()}),D7=I.enum(["idle","starting","running","pending","stopping","completed","cancelled","failed","error"]),_7=I.enum(["user","assistant","tool","system","status","error"]),L7=I.object({id:I.string().min(1),sessionId:I.string().nullable(),role:_7,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()}),O7=I.object({toolCalls:I.number().int().nonnegative(),tokensIn:I.number().int().nonnegative(),tokensOut:I.number().int().nonnegative()}),_Y=I.object({sessionId:I.string().nullable(),status:D7,config:f7,messages:I.array(L7),rawTranscript:I.string(),error:I.string().nullable(),summary:O7});var Y_={};w(Y_,{CORE_BUILD_VERSION:()=>hW});var hW=u8;import{Agent as im,createAgentRuntime as nm}from"@cline/agents";var V_={};w(V_,{fetchClineRecommendedModels:()=>OY,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>T7});import{getClineEnvironmentConfig as sg}from"@cline/shared";var tg=5000,T7={recommended:[{id:"anthropic/claude-opus-4.6",name:"Claude Opus 4.6",description:"Most intelligent model for agents and coding",tags:["BEST"]},{id:"anthropic/claude-sonnet-4.6",name:"Claude Sonnet 4.6",description:"Strong coding and agent performance",tags:["NEW"]},{id:"google/gemini-3.1-pro-preview",name:"Gemini 3.1 Pro Preview",description:"1M context window, strong coding performance",tags:["NEW"]},{id:"openai/gpt-5.3-codex",name:"GPT-5.3 Codex",description:"OpenAI's latest with strong coding abilities",tags:["NEW"]}],free:[{id:"kwaipilot/kat-coder-pro",name:"KwaiKAT Kat Coder Pro",description:"Advanced agentic coding model",tags:["FREE"]},{id:"arcee-ai/trinity-large-preview:free",name:"Arcee AI Trinity Large Preview",description:"Advanced large preview model",tags:["FREE"]}],clinePass:[]};function eg($){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 LY($){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 $m($){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(LY).filter((V)=>V!==null),X=Q.map(LY).filter((V)=>V!==null),Y=J.map(LY).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=sg().apiBaseUrl;try{return($.providerSettingsManager??new X1).getProviderSettings("cline")?.baseUrl?.trim()||Z}catch{return Z}}async function Zm($,W,Z){let Q=new AbortController,J=setTimeout(()=>Q.abort(),Z);try{return await $(W,{signal:Q.signal})}finally{clearTimeout(J)}}async function OY($={}){try{let W=Wm($),Z=$.fetchImpl??fetch,Q=await Zm(Z,`${W}/api/v1/ai/cline/recommended-models`,$.timeoutMs??tg);if(!Q.ok)throw Error(`HTTP ${Q.status}`);let J=await Q.json(),j=$m(J);if(j)return j}catch{}return eg(T7)}var B_={};w(B_,{loadLlmsConfigFromFile:()=>zY,defineLlmsConfig:()=>TY});import{readFile as Qm}from"node:fs/promises";import Jm from"node:path";function TY($){return $}async function zY($){let W=Jm.resolve($),Z=await Qm(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 jm(Q,W)}function jm($,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 U_={};w(U_,{createLlmsSdk:()=>MY,DefaultLlmsSdk:()=>kW});import{BUILT_IN_PROVIDER_IDS as K_,createHandler as Vm,createHandlerAsync as Bm,getProviderCollection as Hm,hasProvider as F_,registerAsyncHandler as Gm,registerHandler as Km,registerModel as Fm,registerProvider as A_}from"@cline/llms";function H_($){return $?{...$}:{}}function Xm($,W){if($)return $;if(!W)return;let Z=globalThis.process;if(!Z?.env)return;return Z.env[W]}function Ym($,W){if(!W.length)throw Error(`Provider "${$}" must include at least one model.`)}function G_($){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 qY{providers=new Map;register($){Ym($.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??{},...H_($.defaults)}})}registerSelectionConfig($){this.register({id:$.id,models:$.models,defaultModel:$.defaultModel,defaults:{apiKey:Xm($.apiKey,$.apiKeyEnv),routingProviderId:$.builtinProviderId,baseUrl:$.baseUrl,headers:$.headers,timeoutMs:$.timeoutMs,capabilities:$.capabilities,...H_($.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 kW{configuredProviders=new qY;constructor($){this.applyConfig($)}createHandler($){return Vm(this.configuredProviders.createHandlerConfig($))}async createHandlerAsync($){return Bm(this.configuredProviders.createHandlerConfig($))}registerProvider($){if(A_($.collection),$.handlerFactory&&$.asyncHandlerFactory)throw Error(`Provider "${$.collection.provider.id}" cannot register both sync and async handlers.`);if($.handlerFactory)Km($.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.`);A_({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($){Fm($.providerId,$.modelId,$.info),this.configuredProviders.registerModel($.providerId,$.modelId)}getProviders(){return this.configuredProviders.list()}getBuiltInProviderIds(){return[...K_]}async getBuiltInProviders(){return(await Promise.all(K_.map((W)=>Hm(W)))).filter((W)=>W!==void 0).map((W)=>G_({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=F_(W.id),Q=this.configuredProviders.createHandlerConfig({providerId:W.id,modelId:W.defaultModel}).routingProviderId,J=typeof Q==="string"&&F_(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 MY($){return new kW($)}rj();async function Am(){return Promise.resolve().then(() => (bQ(),nf))}function Wv(){return new Date().toISOString()}var Zv="cline",Qv="cline-pass";function Jv($){if(L_($)!=="providers.json")return;let W=RY($);if(L_(W)!=="settings")return;return RY(W)}class X1{filePath;dataDir;constructor($={}){if(this.filePath=$.filePath??$v(),this.dataDir=$.dataDir??Jv(this.filePath),this.dataDir||!$.filePath)yW({providerSettingsManager:this,dataDir:this.dataDir});if(lD(this),Y7(this.read()),NY(this.filePath))try{__(this.filePath,384)}catch{}}getFilePath(){return this.filePath}read(){if(!NY(this.filePath))return k$();try{let $=om(this.filePath,"utf8"),W=JSON.parse($),Z=Z6.safeParse(W);if(Z.success){Y7(Z.data);let Q=Z.data.providers.cline?.settings?.auth;return Z0(`providers.read providers=[${Object.keys(Z.data.providers).join(",")}] lastUsed=${Z.data.lastUsedProvider??"none"} clineAuthPresent=${!!Q?.accessToken} clineAccessTokenHash=${M0(Q?.accessToken)} clineRefreshTokenHash=${M0(Q?.refreshToken)}`),Z.data}}catch{}return k$()}write($){let W=Z6.parse($),Z=RY(this.filePath);if(!NY(Z))am(Z,{recursive:!0,mode:448});let Q=`${this.filePath}.${process.pid}.tmp`;try{em(Q,`${JSON.stringify(W,null,2)}
|
|
759
|
+
`,{encoding:"utf8",mode:384}),sm(Q,this.filePath)}catch(J){throw tm(Q,{force:!0}),J}try{__(this.filePath,384)}catch{}Y7(W)}saveProviderSettings($,W={}){let Z=W6.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:Wv(),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 Z0(`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 W6.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===Qv&&W.isClinePassEnabled===!1)return Zv;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 e8({})}catch{}}}O0();z6();function jv($,W){let Z=$?.expiresAt,Q=W?.expiresAt;return $?.accessToken===W?.accessToken&&$?.refreshToken===W?.refreshToken&&$?.accountId===W?.accountId&&Z===Q}class z7 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 EY{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 Z0(`oauth.resolve providerId=${$} storageProviderId=${W} outcome=no_settings`),null;let j=H4($,J);if(!j)return Z0(`oauth.resolve providerId=${$} storageProviderId=${W} outcome=no_credentials`),null;Z0(`oauth.resolve.start providerId=${$} storageProviderId=${W} forceRefresh=${Z} accessTokenHash=${M0(j.access)} refreshTokenHash=${M0(j.refresh)}`);let X=await Q.refresh({settings:J,credentials:j,forceRefresh:Z,telemetry:this.telemetry});if(!X)throw Z0(`oauth.resolve providerId=${$} outcome=refresh_returned_null`),new z7($);let Y=J2({manager:this.providerSettingsManager,providerId:$,settings:J,credentials:X,setLastUsed:!1,save:!1}),V=!jv(J.auth,Y.auth);if(V)Z0(`oauth.resolve.refreshed providerId=${$} newAccessTokenHash=${M0(X.access)} newRefreshTokenHash=${M0(X.refresh)} savingToDisk=true`),this.providerSettingsManager.saveProviderSettings(Y,{setLastUsed:!1,tokenSource:"oauth"});else Z0(`oauth.resolve providerId=${$} outcome=not_refreshed`);return{apiKey:Q.getApiKey(Y)??X.access,accountId:X.accountId,refreshed:V}}}import{normalizeUserInput as Xv}from"@cline/shared";import{nanoid as Yv}from"nanoid";class O_{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:Xv(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),Vv($,Y,Q,J.delivery),{sessionId:W.sessionId,prompts:Y1($),prompt:q7(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?q7(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()}_${Yv(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 wY{deps;service=new O_;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=q7(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 q7($){return{id:$.id,prompt:$.prompt,delivery:$.delivery,attachmentCount:($.userImages?.length??0)+($.userFiles?.length??0),userImages:$.userImages,userFiles:$.userFiles}}function Y1($){return $.pendingPrompts.map(q7)}function Vv($,W,Z,Q){if(W.delivery==="steer")$.pendingPrompts.unshift(W);else if(Q==="steer")$.pendingPrompts.push(W);else $.pendingPrompts.splice(Z,0,W)}O0();class PY{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=h3(Z),X=!!Q&&(!j.agentId||j.agentId===CY(Q.agent));k3(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(Rj(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};k3(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)f$(Z.config.telemetry,{ulid:$,modelId:W.teammate.modelId??Z.config.modelId,provider:Z.config.providerId,...Q})}}if(await Ej($,W,this.deps.invokeBackendOptional),Z)wj(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 SY($){return{sessionId:$.sessionId,source:$.source,pid:process.pid,startedAt:$.startedAt,endedAt:$.endedAt??null,exitCode:$.exitCode??null,status:$.status,interactive:$.interactive,provider:$.config.providerId,model:$.config.modelId,cwd:$.config.cwd,workspaceRoot: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 bY($,W){let Z=$[W];return typeof Z==="function"?Z:null}async function T_($,W,...Z){let Q=bY($,W);if(!Q)throw Error(`session service method not available: ${W}`);return Promise.resolve(Q.apply($,Z))}async function z_($,W,...Z){let Q=bY($,W);if(!Q)return;await Promise.resolve(Q.apply($,Z))}async function q_($,W,...Z){let Q=bY($,W);if(!Q)return;return await Promise.resolve(Q.apply($,Z))}U1();O0();function yY($,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)f$(W.telemetry,{ulid:Z,modelId:W.modelId,provider:W.providerId,...j});$4(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;$4(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 hY($,W,Z,Q){let J=yY($,W,Z);return w$({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[r1({mode:W.mode})],executors:Q}):[];if(W.enableSpawnAgent)X.push(hY($,W,Z,Q));return i1(X)},...J})}import{readFile as Bv,stat as Hv}from"node:fs/promises";var Gv=20480000;async function M_($){let W=await Hv($);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 Bv($,"utf8");if(Z.includes("\x00"))throw Error("Cannot read binary file into context.");return Z}var N_=5000;function IW($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function Lv($){if(!$||typeof $!=="object"||Array.isArray($))return;let W=$,Z=IW(W.inputTokens),Q=IW(W.outputTokens),J=IW(W.cacheReadTokens),j=IW(W.cacheWriteTokens),X=IW(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 Ov($,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 R_($,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 a5;sessions=new Map;manifestMutationQueues=new Map;usageBySession=new Map;aggregateUsageBySession=new Map;subAgentStarts=new Map;pendingPromptsController;eventBridge;sessionVersioning=new o$;constructor($){let W=Fv();if(W)_v(W);let Z=v0($.distinctId);this.sessionService=$.sessionService,this.runtimeBuilder=$.runtimeBuilder??new l6,this.createAgentInstance=$.createAgent??((Q)=>new N$(Q)),this.defaultCapabilities=w0($.capabilities),this.toolExecutors=this.defaultCapabilities?.toolExecutors,this.defaultToolPolicies=$.toolPolicies,this.providerSettingsManager=$.providerSettingsManager??new X1,this.oauthTokenManager=$.oauthTokenManager??new EY({providerSettingsManager:this.providerSettingsManager,telemetry:$.telemetry}),this.defaultTelemetry=$.telemetry,this.defaultTelemetry?.setDistinctId(Z),this.defaultFetch=$.fetch,this.pendingPromptsController=new wY({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 PY({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||Uv(),j=await this.applyInitialOAuthCredentials($),X=j.initialMessages??[],Y=X.length>0?c8(X):z0(),V=await this.invokeOptionalValue("ensureSessionsDir")??"";if(!V)throw Error("session service method not available: ensureSessionsDir");let B=kY(V,J),H=kY(B,`${J}.messages.json`),G=kY(B,`${J}.json`),K=o1($.config),F=I0.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,f;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},f=await this.invokeOptionalValue("readSessionCompactionState",J)}let _=await this.seedAggregateUsageFromArtifacts({initialUsage:Y,sessionDir:B,rootMessagesPath:A?.messagesPath??H,manifest:F});this.usageBySession.set(J,Y),this.aggregateUsageBySession.set(J,_);let D=w0(this.defaultCapabilities,$.capabilities),M=D?.toolExecutors??this.toolExecutors,T=$.localRuntime,O=T?.extensionContext?.logger??T?.logger,L=T?.extensionContext?.automation,C,R={getSession:(k)=>this.sessions.get(k),subAgentStarts:this.subAgentStarts,onAgentEvent:(k,$0,L0)=>this.eventBridge.dispatchAgentEvent(k,$0,L0),invokeBackendOptional:(k,...$0)=>this.invokeOptional(k,...$0)};C=await KK({input:j,localRuntime:$.localRuntime,sessionId:J,providerSettingsManager:this.providerSettingsManager,defaultTelemetry:this.defaultTelemetry,defaultCapabilities:D,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:()=>hY(R,C.config,J,M),createSubAgentLifecycleCallbacks:(k)=>yY(R,k,J),readSessionMetadata:async()=>(await this.getSession(J))?.metadata,writeSessionMetadata:async(k)=>{await this.persistSessionMetadata(J,()=>k)}});let p=NZ(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??[]],I1=x.extensions??C.extensions,$2=j.initialCompactionState,F$,k0=L4(P),A0=$2??f,O1=k0&&A0?{...A0,conversation_id:A0.conversation_id?.trim()||J}:void 0,K8=k0?O4({compact:k0,getState:()=>F$?.compactionState,saveState:async(k)=>{let $0=F$;if(!$0)return;let L0={...k,conversation_id:$0.sessionId};try{if(!(await this.persistActiveSessionCompactionState($0,L0)).updated)P.logger?.debug?.("Skipped stale session compaction state",{sessionId:$0.sessionId,sourceMessageCount:L0.source_message_count})}catch(q0){P.logger?.error?.("Failed to persist session compaction state",{sessionId:$0.sessionId,error:q0}),e$(P.telemetry,{component:"core",operation:"session.persist_compaction_state",severity:"warn",handled:!0,error:q0,context:{sessionId:$0.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,systemPrompt:P.systemPrompt,maxIterations:P.maxIterations,execution:P.execution,prepareTurn:K8,tools:d,hooks:C.hooks,extensions:I1,hookErrorMode:P.hookErrorMode,initialMessages:C.effectiveInput.initialMessages,userFileContentLoader:M_,toolPolicies:C.toolPolicies,requestToolApproval:C.requestToolApproval?async(k)=>{let $0=C.requestToolApproval,L0=this.sessions.get(J);if(L0)await this.markTurnPending(L0);try{if(!$0)return{approved:!1,reason:"Tool approval callback is not configured."};return await $0(k)}finally{let q0=this.sessions.get(J);if(q0?.status==="pending")await this.markTurnRunning(q0)}}:void 0,telemetry:P.telemetry,onConsecutiveMistakeLimitReached:P.onConsecutiveMistakeLimitReached,completionPolicy:x.completionPolicy,consumePendingUserMessage:()=>{let k=this.pendingPromptsController.consumeSteer(J);return k?YW(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 $0=this.sessions.get(J);if(!$0)return;let L0=$0.agent.getMessages();try{await this.invoke("persistSessionMessages",J,L0,P.systemPrompt)}catch(q0){P.logger?.error?.("Failed to persist session messages after assistant response",{sessionId:J,error:q0}),e$(P.telemetry,{component:"core",operation:"session.persist_messages_after_assistant_response",error:q0,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=a1({agentId:l0.getAgentId(),conversationId:l0.getConversationId(),teamId:x.teamRuntime?.getTeamId(),teamName:x.teamRuntime?.getTeamName(),teamRole:x.teamRuntime?"lead":void 0});if(AK(P,J,Q.length>0,K,V1),V1)f$(P.telemetry,{ulid:J,modelId:P.modelId,provider:P.providerId,...V1});if(x.teamRuntime)oW(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(F$=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{e$(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($0){y.config.logger?.error?.("Session failure cleanup threw",{sessionId:y.sessionId,error:$0})}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 e$(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=eJ(this.usageBySession.get($)),Z=eJ(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 SY(W);let Z=$.trim();if(!Z)return;let Q=await this.getRow(Z);if(Q)return i4(Q);let J=await this.readManifest(Z);return J?sZ(J):void 0}async listSessions($=200){let Z=(await this.listRows($)).map(i4),Q=new Set(Z.map((J)=>J.sessionId));for(let J of this.sessions.values()){if(Q.has(J.sessionId))continue;Z.unshift(SY(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(R_(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 j2(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(R_(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 u$(Z.messagesPath);let Q=await this.readManifest(W);return u$(Q?.messages_path)}async dispatchHookEvent($){await aF($,{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=O2(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(Cj($,X.finishReason)){let Y=await Pj($);if(Y.length===0)break;let V=Sj($,Y);X=await this.executeAgentTurn($,V)}return X}finally{await this.refreshActiveSessionGitMetadata($)}}async completeInteractiveTurn($,W){if(XW($))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=z0();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)??z0(),Y=this.aggregateUsageBySession.get($.sessionId)??X;$.turnUsageBaseline=X,$.turnAggregateUsageBaseline=Y,$.turnPrimaryUsage=z0(),$.turnUsageByAgent=new Map,lW($.config.telemetry,$.sessionId,$.config.mode),A8($.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=l9(B.messages,B,j);$.persistedMessages=H;let G=a4($.turnUsageByAgent?.values()??[]),K=D0(X,B.usage),F=D0(D0(z0(),B.usage),G),A=D0(Y,F);return this.usageBySession.set($.sessionId,K),this.aggregateUsageBySession.set($.sessionId,A),await this.persistSessionMetadata($.sessionId,(f)=>({...f??{},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 e$($.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===T0.SUBMIT_AND_EXIT&&Q.error===void 0))return;$.submitAndExitObserved=!0,t6($.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=Dv(W.prompt).trim();if(!Q)return{prompt:"",userImages:W.userImages,userFiles:this.resolveAbsoluteFilePaths($.config.cwd,W.userFiles)};let J=await P8(Q,Z);UK($.config.telemetry,J);let j=YW(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 KJ(o1($.config));if(!Z||!$.artifacts)return;if(GJ($.artifacts.manifest.metadata,Z))return;await this.persistSessionMetadata($.sessionId,(Q)=>NZ({...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(XW($))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)t6($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"shutdown",...this.getSessionAgentTelemetryIdentity($)});FQ($);let Z=[],Q=(J,j)=>{Z.push(j),$.config.logger?.log("Session shutdown cleanup failed",{sessionId:$.sessionId,stage:J,error:j,severity:"warn"}),e$($.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"}),e$($.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(!Q2($.config.providerId)||!fv(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 z7)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 e$(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)=>Av(Q)?Q:IY($,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=D0($.initialUsage,W);return this.withPersistedAggregateUsageFloor(Z,$.manifest)}async summarizePersistedTeammateUsage($,W,Z){let Q=IY(W),J=`${Z}.messages.json`,j;try{j=Kv($)}catch{return z0()}let X=z0();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 u$(V);if(B.length===0)continue;X=D0(X,c8(B))}return X}withPersistedAggregateUsageFloor($,W){let Z=Lv(W.metadata?.aggregateUsage);if(Z)return Ov($,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($)),N_))}async getRow($){let W=$.trim();if(!W)return;return(await this.listRows(N_)).find((Q)=>Q.sessionId===W)}async readManifest($){let W=$.trim();if(!W)return;return await this.invokeOptionalValue("readSessionManifest",W)}invoke($,...W){return T_(this.sessionService,$,...W)}invokeOptional($,...W){return z_(this.sessionService,$,...W)}invokeOptionalValue($,...W){return q_(this.sessionService,$,...W)}}function zv($){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 qv($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}function SQ($={}){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:Tv(Z.provider),modelId:Z.model,apiKey:Z.apiKey?.trim()||void 0,cwd:Q,workspaceRoot:Z.workspaceRoot,systemPrompt:Z.systemPrompt??"",mode:qv(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:zv(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 Nv}from"@cline/shared";O0();UW();var Rv=300000,Ev=5000;function E_(){let $=Nv({metadata:{extension_version:hW,cline_type:"hub",platform:"cline-hub-daemon",platform_version:process.version,os_type:process.platform,os_version:Mv()}}),W=i$($),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,Rv);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,Ev),Y.unref?.()})]),clearTimeout(Y)}}}Cv(process.env.CLINE_VCR);function Sv($){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 bv(){let $=Sv(process.argv.slice(2));process.chdir($.cwd);let W=Z1({host:$.host,port:$.port,pathname:$.pathname}),Z=E_(),Q;try{Q=await Y8({host:W.host,port:W.port,pathname:W.pathname,owner:Pv()==="production"?Q1():m0(),telemetry:Z.telemetry,runtimeHandlers:SQ({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 wv){process.stderr.write(`[hub-daemon] ignored agent runtime abort rejection: ${Y.message}
|
|
763
|
+
`);return}X("unhandledRejection",Y)}),await new Promise(()=>{})}bv().catch(($)=>{let W=$ instanceof Error?$.stack||$.message:String($);process.stderr.write(`[hub-daemon] fatal: ${W}
|
|
764
764
|
`),process.exit(1)});
|