@cline/core 0.0.64 → 0.0.65
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/extensions/tools/definitions.d.ts +21 -3
- package/dist/extensions/tools/index.d.ts +8 -3
- package/dist/extensions/tools/team/delegated-agent.d.ts +1 -1
- package/dist/extensions/tools/types.d.ts +7 -0
- package/dist/hub/daemon/entry.js +157 -157
- package/dist/hub/index.js +154 -154
- package/dist/index.js +155 -155
- package/dist/runtime/orchestration/session-runtime-orchestrator.d.ts +7 -0
- package/dist/services/telemetry/core-events.d.ts +10 -0
- package/dist/services/telemetry/index.js +1 -1
- package/package.json +4 -4
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import{createRequire as
|
|
2
|
-
`,"utf8"),
|
|
3
|
-
`)}function
|
|
4
|
-
`),J}finally{R5.delete($.lockDir),lz($)}}function q1($,W,Z={}){let Q=pz($,Z);return cV(Q,$,W)}async function E5($,W,Z={}){let Q=await rz($,Z);return cV(Q,$,W)}function iz($){let W=oz($);if(!W.mcpServers||typeof W.mcpServers!=="object"||Array.isArray(W.mcpServers))W.mcpServers={};return W}function nz($,W){let Z=JSON.stringify($),Q=JSON.parse(Z),J=W(Q),j=JSON.stringify(Q),X=W($);if(JSON.stringify($)!==j)throw new c2("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 c2("MCP settings mutator must be deterministic and free of side effects; repeated calls produced different return values.");return X}function az($){let W=PV($,"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 oz($){try{return az($)}catch(W){if(W.code==="ENOENT")return{};throw W}}function uV($,W){if(!Object.hasOwn($,W))return;let Z=$[W];if(!Z||typeof Z!=="object"||Array.isArray(Z))return;return Z}function sz($,W,Z){Object.defineProperty($,W,{value:Z,enumerable:!0,configurable:!0,writable:!0})}function o8($={}){let W=$.filePath??Q0(),Z=PV(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=mz.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 d2($){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 tz($){if($===void 0)return;let W=zQ.safeParse($);if(!W.success)return;return d2(W.data)}function c$($={}){let W=$.filePath??Q0();return CV(W)}function Y1($={}){let W=o8($);return Object.entries(W.mcpServers).map(([Z,Q])=>({name:Z,transport:Q.transport,disabled:Q.disabled,metadata:Q.metadata,oauth:Q.oauth}))}function s8($){let W=$.filePath??Q0(),Z=$.name.trim();if(!Z)throw Error("MCP server settings toggle requires a server name.");q1(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=uV(j,Z);if(!X)throw Error(`Unknown MCP server: ${Z}`);let Y={...X};if($.disabled)Y.disabled=!0;else delete Y.disabled;sz(j,Z,Y),Q.mcpServers=j})}function t8($,W={}){let Z=o8(W);if(!Object.hasOwn(Z.mcpServers,$))return;return d2(Z.mcpServers[$]?.oauth)}function dV($,W){return(Z)=>{let Q=Z.mcpServers,J=uV(Q,$);if(!J)throw Error(`Unknown MCP server: ${$}`);let j=tz(J.oauth)??{},X=d2(W(j));if(X)J.oauth=X;else delete J.oauth;return X??{}}}function e8($,W,Z={}){let Q=Z.filePath??Q0();return q1(Q,dV($,W))}async function MQ($,W,Z={}){let Q=Z.filePath??Q0();return E5(Q,dV($,W))}function RQ($={}){return Y1($).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 $6($,W={}){let Z=Y1(W);for(let Q of Z)await $.registerServer(Q);return Z}var a8,hV,zQ,Pz,Sz,bz,yz,hz,kz,kV,Iz,xz,gz,mz,M5,u2,c2,qQ=1e4,IV=25,cz,R5;var N5=q$(()=>{a8=w.record(w.string(),w.string()),hV=w.record(w.string(),w.unknown()),zQ=w.object({clientInformation:w.record(w.string(),w.unknown()).optional(),tokens:w.record(w.string(),w.unknown()).optional(),codeVerifier:w.string().optional(),discoveryState:w.record(w.string(),w.unknown()).optional(),redirectUrl:w.string().url().optional(),lastError:w.string().optional(),lastAuthenticatedAt:w.number().int().positive().optional()}).strip(),Pz=w.object({type:w.literal("stdio"),command:w.string().min(1),args:w.array(w.string()).optional(),cwd:w.string().min(1).optional(),env:a8.optional()}),Sz=w.object({type:w.literal("sse"),url:w.string().url(),headers:a8.optional()}),bz=w.object({type:w.literal("streamableHttp"),url:w.string().url(),headers:a8.optional()}),yz=w.discriminatedUnion("type",[Pz,Sz,bz]),hz=w.object({transport:yz,disabled:w.boolean().optional(),metadata:hV.optional(),oauth:zQ.optional()}),kz=w.enum(["stdio","sse","http","streamableHttp"]).optional(),kV=w.object({type:w.enum(["stdio","sse","streamableHttp"]).optional(),transportType:kz,disabled:w.boolean().optional(),metadata:hV.optional(),oauth:zQ.optional()});Iz=kV.extend({command:w.string().min(1),args:w.array(w.string()).optional(),cwd:w.string().min(1).optional(),env:a8.optional()}).superRefine(($,W)=>{let Z=$.type??OQ($.transportType);if(Z&&Z!=="stdio")W.addIssue({code:w.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})),xz=kV.extend({url:w.string().url(),headers:a8.optional()}).superRefine(($,W)=>{let Z=$.type??OQ($.transportType)??"sse";if(Z!=="sse"&&Z!=="streamableHttp")W.addIssue({code:w.ZodIssueCode.custom,message:'Expected type "sse" or "streamableHttp" for URL-based MCP server',path:["type"]})}).transform(($)=>{if(($.type??OQ($.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}}),gz=w.union([hz,Iz,xz]),mz=w.object({mcpServers:w.record(w.string(),gz)}).passthrough();M5=class M5 extends Error{constructor($){super($);this.name="McpSettingsUpdateSkippedError"}};u2=class u2 extends Error{constructor($){super($);this.name="McpSettingsLockTimeoutError"}};c2=class c2 extends Error{constructor($){super($);this.name="McpSettingsMutatorPurityError"}};cz=new Int32Array(new SharedArrayBuffer(4)),R5=new Set});import{existsSync as gN,mkdirSync as mN,readFileSync as vN,writeFileSync as cN}from"node:fs";import{resolve as uN}from"node:path";import{resolveSessionDataDir as dN}from"@cline/shared/storage";import{nanoid as lN}from"nanoid";import*as pN from"node-machine-id";function r0($){let W=$?.trim();if(W)return W;let Z=nN();if(Z)return Z;return aN()}function iN(){let $=pN;return $.machineIdSync??$.default?.machineIdSync}function nN(){try{let $=iN();if(!$)return;return $().trim()||void 0}catch{return}}function aN(){let $=dN(),W=uN($,rN);try{if(gN(W)){let Q=vN(W,"utf8").trim();if(Q.length>0)return Q}}catch{}let Z=`cl-${lN()}`;try{mN($,{recursive:!0}),cN(W,Z,"utf8")}catch{}return Z}var rN="machine-id";var s2=()=>{};class s6{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(sb(V)){J[B]=V;continue}try{J[B]=JSON.stringify(V)}catch{J[B]=String(V)}}return J}}function sb($){return typeof $==="string"||typeof $==="number"||typeof $==="boolean"}class dW{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 t6{adapters;metadata;distinctId;commonProperties;constructor($={}){if(this.adapters=[...$.adapters??[]],$.logger)this.adapters.push(new dW({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 u3=()=>{};import{metrics as tb,trace as eb}from"@opentelemetry/api";import{logs as $y}from"@opentelemetry/api-logs";import{OTLPLogExporter as Wy}from"@opentelemetry/exporter-logs-otlp-http";import{OTLPMetricExporter as Zy}from"@opentelemetry/exporter-metrics-otlp-http";import{OTLPTraceExporter as Qy}from"@opentelemetry/exporter-trace-otlp-http";import{resourceFromAttributes as Jy}from"@opentelemetry/resources";import{BatchLogRecordProcessor as jy,ConsoleLogRecordExporter as Xy,LoggerProvider as Yy}from"@opentelemetry/sdk-logs";import{ConsoleMetricExporter as Vy,MeterProvider as By,PeriodicExportingMetricReader as HF}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as Hy,ConsoleSpanExporter as Gy,SimpleSpanProcessor as Ky}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as Fy}from"@opentelemetry/sdk-trace-node";import{ATTR_SERVICE_NAME as Ay,ATTR_SERVICE_VERSION as Uy}from"@opentelemetry/semantic-conventions";class GF{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 e6{meterProvider;loggerProvider;tracerProvider;options;constructor($={}){this.options=$;let W=Jy({[Ay]:$.serviceName??"cline",...$.serviceVersion?{[Uy]:$.serviceVersion}:{}});if(this.meterProvider=this.createMeterProvider(W),this.loggerProvider=this.createLoggerProvider(W),this.tracerProvider=this.createTracerProvider(W),this.meterProvider)tb.setGlobalMeterProvider(this.meterProvider);if(this.loggerProvider)$y.setGlobalLoggerProvider(this.loggerProvider);if(this.tracerProvider)this.tracerProvider.register()}getTracer($="cline",W){return eb.getTracer($,W??this.options.serviceVersion)}createAdapter($){return new s6({...$,meterProvider:this.meterProvider,loggerProvider:this.loggerProvider})}createTelemetryService($){let W=this.createAdapter({name:$.name,enabled:this.options.enabled,metadata:$.metadata});return new t6({...$,adapters:[W],distinctId:r0($.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=d3(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)=>fy(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 By({resource:$,readers:J})}createTracerProvider($){let W=d3(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=_y(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 Fy({resource:$,spanProcessors:J})}createLoggerProvider($){let W=d3(this.options.logsExporter);if(W.length===0)return null;let Z=W.map((Q)=>{let J=Dy(Q,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(!J)return null;return new jy(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 Yy({resource:$,processors:Z})}}function lW($){let W=new e6($),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 Y2($){if(HZ())return{telemetry:new GF($)};if($.enabled!==!0)return{telemetry:new t6({...$,distinctId:r0($.distinctId)})};return lW($)}function pW($){let{telemetry:W,provider:Z}=Y2($);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 d3($){if(!$)return[];return(Array.isArray($)?$:$.split(",")).map((Z)=>Z.trim()).filter((Z)=>Z==="console"||Z==="otlp")}function Dy($,W){if($==="console")return new Xy;if(!W.endpoint)return null;let Z=l3(W.endpoint,"/v1/logs");return new Wy({url:Z,headers:W.headers})}function _y($,W){if($==="console")return new Ky(new Gy);if(!W.endpoint)return null;let Z=l3(W.endpoint,"/v1/traces");return new Hy(new Qy({url:Z,headers:W.headers}))}function fy($,W){if($==="console")return new HF({exporter:new Vy,exportIntervalMillis:W.interval,exportTimeoutMillis:W.timeout});if(!W.endpoint)return null;let Z=l3(W.endpoint,"/v1/metrics");return new HF({exporter:new Zy({url:Z,headers:W.headers}),exportIntervalMillis:W.interval,exportTimeoutMillis:W.timeout})}function l3($,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 rW=q$(()=>{t0();s2();u3()});var zA={};U9(zA,{resolveCoreDistinctId:()=>r0,createOpenTelemetryTelemetryService:()=>lW,createConfiguredTelemetryService:()=>Y2,createConfiguredTelemetryHandle:()=>pW,OpenTelemetryProvider:()=>e6,OpenTelemetryAdapter:()=>s6});var eW=q$(()=>{s2();rW()});import*as P20 from"@cline/llms";import{ClineNotSubscribedError as b20,ClineOrgIndividualInferenceSubscriptionError as y20,ClinePassLimitError as h20,extractClinePassLimitMessage as k20,getClineNotSubscribedMessage as I20,getClineOrgIndividualInferenceSubscriptionMessage as x20,getClinePassSubscriptionUrl as g20,isClineNotSubscribedError as m20,isClineNotSubscribedMessage as v20,isClineOrgIndividualInferenceSubscriptionError as c20,isClineOrgIndividualInferenceSubscriptionMessage as u20,isClinePassLimitError as d20,isClinePassLimitMessage as l20}from"@cline/llms";import{buildClineSystemPrompt as r20,buildSdkErrorProperties as i20,ContributionRegistry as n20,captureSdkError as a20,createClineTelemetryServiceConfig as o20,createClineTelemetryServiceMetadata as s20,createContributionRegistry as t20,createTool as e20,emptyWorkspaceManifest as $80,FEATURE_FLAGS as W80,FeatureFlagDefaultValue as Z80,formatDisplayUserInput as Q80,noopBasicLogger as J80,normalizeSdkError as j80,normalizeUserInput as X80,parseUserCommandEnvelope as Y80,registerDisposable as V80,SDK_ERROR_TELEMETRY_EVENT as B80,stripUtf8Bom as H80}from"@cline/shared";export*from"@cline/shared/storage";function bU($){if(typeof $!=="object"||$===null||!("error"in $))return;let W=$.error;return typeof W==="string"&&W.trim()?W:void 0}function sJ($,W,Z){let Q=bU(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 D9{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(sJ(X.status,Y,void 0));throw Error("Cline account response was not valid JSON")}if(!X.ok)throw Error(sJ(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 tJ($){return $.action==="clineAccount"}async function eJ($,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 _9{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}}function j4($){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}}import{getClineEnvironmentConfig as k9}from"@cline/shared";import{createHash as yU}from"node:crypto";var $j;function hU($){$j=$}function w0($){if(typeof $!=="string"||$.length===0)return"unset";return yU("sha256").update($).digest("hex").slice(0,8)}function o($){try{$j?.debug($)}catch{}}A0();function pU(){let $;return{promise:new Promise((Z)=>{$=Z}),resolve:$}}async function D1($){let W=await import("node:http"),Z=$.host??"127.0.0.1",Q=$.timeoutMs??300000,J=$.successHtml??rU,j=pU(),X=!1,Y=null,V=null,B=null,H=(F)=>{if(X)return;X=!0,j.resolve(F)},G=()=>{if(Y)clearTimeout(Y),Y=null;let F=B;if(B=null,V)V.close(),V.closeAllConnections?.(),V=null;if(F!==null&&$.onClose)Promise.resolve($.onClose({host:Z,port:F})).catch(()=>{})},K=async()=>{return Y=setTimeout(()=>{G(),H(null)},Q),j.promise};for(let F of $.ports){let A=W.createServer((U,f)=>{try{let _=new URL(U.url||"",`http://${Z}:${F}`);if(_.pathname!==$.callbackPath){f.statusCode=404,f.end("Not found");return}let q={url:_,code:_.searchParams.get("code")??void 0,state:_.searchParams.get("state")??void 0,provider:_.searchParams.get("provider")??void 0,error:_.searchParams.get("error")??void 0};if(q.error){f.statusCode=400,f.end(`Authentication failed: ${q.error}`),G(),H(q);return}if(!q.code){f.statusCode=400,f.end("Missing authorization code");return}if($.expectedState&&q.state!==$.expectedState){f.statusCode=400,f.end("State mismatch");return}f.statusCode=200,f.setHeader("Content-Type","text/html; charset=utf-8"),f.end(J),G(),H(q)}catch{f.statusCode=500,f.end("Internal error")}}),D=await new Promise((U)=>{let f=(_)=>{A.off("error",f),U({bound:!1,error:_})};A.once("error",f),A.listen(F,Z,()=>{A.off("error",f),V=A,U({bound:!0})})});if(D.error){if(D.error.code==="EADDRINUSE")continue;throw G(),D.error}if(D.bound){B=F;let U=`http://${Z}:${F}${$.callbackPath}`;if($.onListening)await Promise.resolve($.onListening({host:Z,port:F,callbackUrl:U})).catch(()=>{});return{callbackUrl:U,waitForCallback:K,cancelWait:()=>{G(),H(null)},close:()=>{G(),H(null)}}}}return{callbackUrl:"",waitForCallback:async()=>null,cancelWait:()=>{},close:()=>{}}}var rU=`<!DOCTYPE html>
|
|
1
|
+
import{createRequire as bU}from"node:module";var CU=Object.defineProperty;var PU=($)=>$;function SU($,W){this[$]=PU.bind(null,W)}var U9=($,W)=>{for(var Z in W)CU($,Z,{get:W[Z],enumerable:!0,configurable:!0,set:SU.bind(W,Z)})};var q$=($,W)=>()=>($&&(W=$($=0)),W);var oJ=bU(import.meta.url);import{AGENT_UNEXPECTED_REASONING_TOKENS_EVENT as IU,captureAgentUnexpectedReasoningTokens as xU,SDK_ERROR_TELEMETRY_EVENT as gU}from"@cline/shared";function l($,W,Z){$?.capture({event:W,properties:Z})}function X4($){if(!$)return;return $.substring(0,mU)}function vU($){if(typeof $==="string")return"Error";return $.name?.trim()||$.constructor?.name||"Error"}function cU($){return typeof $==="string"?$:$.message}function Wj($,W){return $.some((Z)=>W.has(Z.trim().toLowerCase()))}function uU($){l($,I.CLIENT.EXTENSION_ACTIVATED)}function f9($,W){let Z=[...W.vcs_types],Q={root_count:W.root_count,vcs_types:Z,is_multi_root:W.root_count>1,has_git:Wj(Z,new Set(["git"])),has_mercurial:Wj(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;l($,I.WORKSPACE.INITIALIZED,Q)}function L9($,W,Z){l($,I.WORKSPACE.INIT_ERROR,{error_type:vU(W),error_message:X4(cU(W)),fallback_to_single_root:Z.fallback_to_single_root,workspace_count:Z.workspace_count??0})}function dU($,W){l($,I.WORKSPACE.PATH_RESOLVED,{...W})}function m1($,W){l($,I.USER.AUTH_STARTED,{provider:W})}function v1($,W){l($,I.USER.AUTH_SUCCEEDED,{provider:W})}function c1($,W,Z){l($,I.USER.AUTH_FAILED,{provider:W,errorMessage:X4(Z)})}function M$($,W,Z,Q){l($,I.USER.AUTH_LOGGED_OUT,{provider:W,reason:Z,status:Q?.status,errorCode:Q?.errorCode})}function T9($,W,Z){l($,I.USER.AUTH_REFRESH_SOFT_FAILURE,{provider:W,status:Z?.status,errorCode:Z?.errorCode,errorName:Z?.errorName,tokenExpired:Z?.tokenExpired})}function Zj($,W,Z){l($,I.USER.AUTH_RUN_RETRY,{provider:W,recovered:Z?.recovered})}function lU($,W){l($,I.USER.PROVIDER_CONFIGURED,{provider:W})}function Qj($,W){$?.captureRequired(I.USER.TELEMETRY_OPT_OUT,W)}function u1($,W){let Z=W.id?.trim();if(Z)$?.setDistinctId(Z);$?.updateCommonProperties({user_id:Z||W.id,account_id:W.id,account_email:W.email,provider:W.provider,organization_id:W.organizationId,organization_name:W.organizationName,member_id:W.memberId})}function O9($,W){l($,I.TASK.CREATED,W)}function z9($,W){l($,I.TASK.RESTARTED,W)}function Y4($,W){l($,I.TASK.COMPLETED,W)}function L8($,W){l($,I.TASK.CONVERSATION_TURN,{...W,timestamp:new Date().toISOString()})}function q9($,W){l($,I.TASK.TOKEN_USAGE,W)}function M9($,W,Z){l($,I.TASK.MODE_SWITCH,{ulid:W,mode:Z})}function T8($,W){l($,I.TASK.TOOL_USED,W)}function R9($,W){l($,I.TASK.SKILL_USED,W)}function N9($,W){l($,I.TASK.DIFF_EDIT_FAILED,W)}function V4($,W){l($,I.TASK.PROVIDER_API_ERROR,{...W,errorMessage:X4(W.errorMessage)??"unknown",timestamp:new Date().toISOString()})}function E9($,W){l($,I.TASK.MISTAKE_LIMIT_REACHED,{...W,timestamp:new Date().toISOString()})}function Jj($,W){l($,I.SDK.TOOL_TIMEOUT,pU(W))}function pU($){let W={};for(let[Z,Q]of Object.entries($))if(Q!==void 0)W[Z]=Q;return W}function w9($,W,Z){l($,I.TASK.MENTION_USED,{mentionType:W,contentLength:Z,timestamp:new Date().toISOString()})}function C9($,W,Z,Q){l($,I.TASK.MENTION_FAILED,{mentionType:W,errorType:Z,errorMessage:X4(Q),timestamp:new Date().toISOString()})}function P9($,W,Z,Q,J){l($,I.TASK.MENTION_SEARCH_RESULTS,{queryLength:W.length,resultCount:Z,searchType:Q,isEmpty:J,timestamp:new Date().toISOString()})}function R$($,W){l($,I.TASK.AGENT_CREATED,{...W,timestamp:new Date().toISOString()})}function S9($,W){l($,I.TASK.AGENT_TEAM_CREATED,{...W,timestamp:new Date().toISOString()})}function B4($,W){l($,W.event==="ended"?I.TASK.SUBAGENT_COMPLETED:I.TASK.SUBAGENT_STARTED,{...W,timestamp:new Date().toISOString()})}function b9($,W,Z,Q){l($,I.HOOKS.DISCOVERY_COMPLETED,{hookName:W,globalCount:Z,workspaceCount:Q,totalCount:Z+Q,timestamp:new Date().toISOString()})}function y9($,W){l($,I.TASK.COMPACTION_EXECUTED,{...W,timestamp:new Date().toISOString()})}function h9($,W){l($,I.TASK.COMPACTION_SKIPPED,{...W,timestamp:new Date().toISOString()})}function jj($,W){l($,I.TASK.COMPACTION_BUDGET_EMERGENCY,{...W,timestamp:new Date().toISOString()})}var mU=500,I;var F0=q$(()=>{I={CLIENT:{EXTENSION_ACTIVATED:"user.extension_activated"},SESSION:{STARTED:"session.started",ENDED:"session.ended"},AGENT:{UNEXPECTED_REASONING_TOKENS:IU},USER:{AUTH_STARTED:"user.auth_started",AUTH_SUCCEEDED:"user.auth_succeeded",AUTH_FAILED:"user.auth_failed",AUTH_LOGGED_OUT:"user.auth_logged_out",AUTH_REFRESH_SOFT_FAILURE:"user.auth_refresh_soft_failure",AUTH_RUN_RETRY:"user.auth_run_retry",PROVIDER_CONFIGURED:"user.provider_configured",TELEMETRY_OPT_OUT:"user.opt_out"},TASK:{CREATED:"task.created",RESTARTED:"task.restarted",COMPLETED:"task.completed",CONVERSATION_TURN:"task.conversation_turn",TOKEN_USAGE:"task.tokens",MODE_SWITCH:"task.mode",TOOL_USED:"task.tool_used",SKILL_USED:"task.skill_used",DIFF_EDIT_FAILED:"task.diff_edit_failed",PROVIDER_API_ERROR:"task.provider_api_error",MISTAKE_LIMIT_REACHED:"task.mistake_limit_reached",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:gU,TOOL_TIMEOUT:"sdk.tool_timeout"},FEATURE_FLAGS:{FLAG_CALLED:"$feature_flag_called"}}});import{mkdirSync as h_,readFileSync as k_,statSync as I_,writeFileSync as x_}from"node:fs";import{dirname as g_}from"node:path";import{resolveGlobalSettingsPath as WX}from"@cline/shared/storage";import{z as w$}from"zod";function E4(){return C4.parse({})}function v_(){w4=void 0}function c_($){if($.disabledTools)Object.freeze($.disabledTools);if($.disabledPlugins)Object.freeze($.disabledPlugins);return Object.freeze($)}function u_($){let W;try{W=k_($,"utf8")}catch{return E4()}try{let Z=C4.safeParse(JSON.parse(W));return Z.success?Z.data:E4()}catch{return E4()}}function d_(){let $=WX(),W=I_($,{throwIfNoEntry:!1}),Z=W?.mtimeMs??0,Q=W?.size??0,J=w4;if(J&&J.path===$&&J.mtimeMs===Z&&J.size===Q)return J;let j=c_(W?u_($):E4());return w4={path:$,mtimeMs:Z,size:Q,value:j},w4}function M0(){return d_().value}function L1($,W={}){let Z=WX(),Q=M0();h_(g_(Z),{recursive:!0});let J=C4.parse($);if(!Q.telemetryOptOut&&J.telemetryOptOut)Qj(W.telemetry);x_(Z,`${JSON.stringify(J,null,2)}
|
|
2
|
+
`,"utf8"),v_()}function HZ(){return M0().telemetryOptOut}function l_($,W={}){L1({...M0(),telemetryOptOut:$},W)}function p_(){return M0().autoUpdateEnabled}function r_($,W={}){L1({...M0(),autoUpdateEnabled:$},W)}function i_(){return M0().compactionStrategy??"basic"}function n_($){L1({...M0(),compactionStrategy:$})}function T1($){return new Set($??M0().disabledTools??[])}function P4($){return new Set($??M0().disabledPlugins??[])}function a_($){return T1().has($)}function GZ($){let W=M0(),Z=new Set(W.disabledTools??[]),Q=Z.has($);if(Q)Z.delete($);else Z.add($);return L1({...W,disabledTools:[...Z]}),!Q}function ZX($,W){let Z=[...new Set($.map((j)=>j.trim()).filter(Boolean))];if(Z.length===0)return;let Q=M0(),J=T1(Q.disabledTools);for(let j of Z)if(W)J.add(j);else J.delete(j);L1({...Q,disabledTools:[...J]})}function QX($,W){return ZX([$],W),W}function o_($){return P4().has($)}function s_($,W){let Z=$.trim();if(!Z)return;let Q=M0(),J=P4(Q.disabledPlugins);if(W)J.add(Z);else J.delete(Z);L1({...Q,disabledPlugins:[...J]})}function KZ($,W){let Z=P4(W);if(Z.size===0)return[...$];return $.filter((Q)=>!Z.has(Q))}function l1($,W){let Z=T1(W);if(Z.size===0)return[...$];return $.filter((Q)=>!Z.has(Q.name))}function FZ($,W){if(!$||$.length===0)return $;let Z=T1(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 $X,m_,C4,w4;var $1=q$(()=>{F0();$X=w$.preprocess(($)=>Array.isArray($)?$.filter((W)=>typeof W==="string").map((W)=>W.trim()).filter(Boolean):void 0,w$.array(w$.string()).optional()).transform(($)=>{if(!$)return;let W=[...new Set($)].sort((Z,Q)=>Z.localeCompare(Q));return W.length>0?W:void 0}),m_=w$.enum(["basic","agentic"]).catch("basic"),C4=w$.object({telemetryOptOut:w$.boolean().default(!1).catch(!1),autoUpdateEnabled:w$.boolean().default(!0).catch(!0),compactionStrategy:m_.optional(),disabledTools:$X.optional(),disabledPlugins:$X.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 lY={};U9(lY,{normalizeUserMessage:()=>kO,buildInitialUserContent:()=>hO});async function hO($,W,Z,Q){let J=IO(W),j=await gO(Z,Q);if(J.length===0&&!j)return $;let X=[{type:"text",text:$},...J];if(j)X.push(...j);return X}function kO($){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 IO($){if(!$||$.length===0)return[];let W=[];for(let Z of $){let Q=xO(Z);if(Q)W.push(Q)}return W}function xO($){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 gO($,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 pV={};U9(pV,{updateMcpSettingsFileSync:()=>M1,updateMcpSettingsFile:()=>N5,updateMcpServerOAuthStateAsync:()=>MQ,updateMcpServerOAuthState:()=>$6,setMcpServerDisabled:()=>t8,resolveMcpServerRegistrations:()=>V1,resolveDefaultMcpSettingsPath:()=>Q0,registerMcpServersFromSettingsFile:()=>W6,normalizeMcpServerOAuthState:()=>p2,loadMcpSettingsFile:()=>s8,listMcpServerOAuthStatuses:()=>RQ,hasMcpSettingsFile:()=>c$,getMcpServerOAuthState:()=>e8,McpSettingsUpdateSkippedError:()=>M5,McpSettingsMutatorPurityError:()=>d2,McpSettingsLockTimeoutError:()=>l2});import{existsSync as PV,mkdirSync as fQ,readFileSync as SV,renameSync as OQ,rmdirSync as Sz,rmSync as LQ,statSync as bz,unlinkSync as bV,writeFileSync as yV}from"node:fs";import{randomUUID as yz}from"node:crypto";import{dirname as hV,join as CV}from"node:path";import{setTimeout as hz}from"node:timers/promises";import{resolveMcpSettingsPath as kz}from"@cline/shared/storage";import{z as w}from"zod";function TQ($){if(!$)return;if($==="http")return"streamableHttp";return $}function Q0(){return kz()}function rz($,W){fQ(hV($),{recursive:!0});let Z=`${$}.tmp.${process.pid}.${Date.now()}.${Math.random().toString(36).slice(2)}`;try{yV(Z,W,{encoding:"utf8",flag:"wx"}),OQ(Z,$)}catch(Q){try{bV(Z)}catch{}throw Q}}function nz($){Atomics.wait(iz,0,0,$)}function az($){return`${$}.lock`}function gV(){return`${process.pid}.${Date.now()}.${yz()}`}function mV($,W){fQ(hV($),{recursive:!0});let Z=`${$}.tmp.${W}`;LQ(Z,{recursive:!0,force:!0}),fQ(Z,{recursive:!0}),yV(CV(Z,`owner.${W}`),W,{encoding:"utf8",flag:"wx"});try{return OQ(Z,$),{lockDir:$,ownerFile:CV($,`owner.${W}`)}}catch(Q){if(LQ(Z,{recursive:!0,force:!0}),PV($))return;throw Q}}function vV($,W){let Z;try{Z=Date.now()-bz($).mtimeMs}catch(J){if(J.code==="ENOENT")return;throw J}if(Z<qQ)return;W.logger?.log(`[mcp-settings] Stale lock directory at ${$} (age ${Z}ms); reclaiming.`,{severity:"warn"});let Q=`${$}.stale.${gV()}`;try{OQ($,Q)}catch(J){if(J.code==="ENOENT")return;throw J}LQ(Q,{recursive:!0,force:!0})}function oz($){try{bV($.ownerFile)}catch(W){if(W.code!=="ENOENT")throw W}try{Sz($.lockDir)}catch(W){let Z=W.code;if(Z!=="ENOENT"&&Z!=="ENOTEMPTY"&&Z!=="EEXIST")throw W}}function cV($){let W=az($);if(R5.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:gV()}}function sz($,W){let{lockDir:Z,token:Q}=cV($),J=W.timeoutMs??qQ,j=Date.now();while(!0){let X=mV(Z,Q);if(X)return R5.add(Z),X;if(Date.now()-j>J)throw new l2(`Timed out waiting for MCP settings lock at ${Z} after ${J}ms.`);vV(Z,W),nz(xV)}}async function tz($,W){let{lockDir:Z,token:Q}=cV($),J=W.timeoutMs??qQ,j=Date.now();while(!0){let X=mV(Z,Q);if(X)return R5.add(Z),X;if(Date.now()-j>J)throw new l2(`Timed out waiting for MCP settings lock at ${Z} after ${J}ms.`);vV(Z,W),await hz(xV)}}function uV($,W,Z){try{let Q=ez(W),J=$q(Q,Z);return rz(W,`${JSON.stringify(Q,null,2)}
|
|
4
|
+
`),J}finally{R5.delete($.lockDir),oz($)}}function M1($,W,Z={}){let Q=sz($,Z);return uV(Q,$,W)}async function N5($,W,Z={}){let Q=await tz($,Z);return uV(Q,$,W)}function ez($){let W=Zq($);if(!W.mcpServers||typeof W.mcpServers!=="object"||Array.isArray(W.mcpServers))W.mcpServers={};return W}function $q($,W){let Z=JSON.stringify($),Q=JSON.parse(Z),J=W(Q),j=JSON.stringify(Q),X=W($);if(JSON.stringify($)!==j)throw new d2("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 d2("MCP settings mutator must be deterministic and free of side effects; repeated calls produced different return values.");return X}function Wq($){let W=SV($,"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 Zq($){try{return Wq($)}catch(W){if(W.code==="ENOENT")return{};throw W}}function dV($,W){if(!Object.hasOwn($,W))return;let Z=$[W];if(!Z||typeof Z!=="object"||Array.isArray(Z))return;return Z}function Qq($,W,Z){Object.defineProperty($,W,{value:Z,enumerable:!0,configurable:!0,writable:!0})}function s8($={}){let W=$.filePath??Q0(),Z=SV(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=pz.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 p2($){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 Jq($){if($===void 0)return;let W=zQ.safeParse($);if(!W.success)return;return p2(W.data)}function c$($={}){let W=$.filePath??Q0();return PV(W)}function V1($={}){let W=s8($);return Object.entries(W.mcpServers).map(([Z,Q])=>({name:Z,transport:Q.transport,disabled:Q.disabled,metadata:Q.metadata,oauth:Q.oauth}))}function t8($){let W=$.filePath??Q0(),Z=$.name.trim();if(!Z)throw Error("MCP server settings toggle requires a server name.");M1(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=dV(j,Z);if(!X)throw Error(`Unknown MCP server: ${Z}`);let Y={...X};if($.disabled)Y.disabled=!0;else delete Y.disabled;Qq(j,Z,Y),Q.mcpServers=j})}function e8($,W={}){let Z=s8(W);if(!Object.hasOwn(Z.mcpServers,$))return;return p2(Z.mcpServers[$]?.oauth)}function lV($,W){return(Z)=>{let Q=Z.mcpServers,J=dV(Q,$);if(!J)throw Error(`Unknown MCP server: ${$}`);let j=Jq(J.oauth)??{},X=p2(W(j));if(X)J.oauth=X;else delete J.oauth;return X??{}}}function $6($,W,Z={}){let Q=Z.filePath??Q0();return M1(Q,lV($,W))}async function MQ($,W,Z={}){let Q=Z.filePath??Q0();return N5(Q,lV($,W))}function RQ($={}){return V1($).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 W6($,W={}){let Z=V1(W);for(let Q of Z)await $.registerServer(Q);return Z}var o8,kV,zQ,Iz,xz,gz,mz,vz,cz,IV,uz,dz,lz,pz,M5,l2,d2,qQ=1e4,xV=25,iz,R5;var E5=q$(()=>{o8=w.record(w.string(),w.string()),kV=w.record(w.string(),w.unknown()),zQ=w.object({clientInformation:w.record(w.string(),w.unknown()).optional(),tokens:w.record(w.string(),w.unknown()).optional(),codeVerifier:w.string().optional(),discoveryState:w.record(w.string(),w.unknown()).optional(),redirectUrl:w.string().url().optional(),lastError:w.string().optional(),lastAuthenticatedAt:w.number().int().positive().optional()}).strip(),Iz=w.object({type:w.literal("stdio"),command:w.string().min(1),args:w.array(w.string()).optional(),cwd:w.string().min(1).optional(),env:o8.optional()}),xz=w.object({type:w.literal("sse"),url:w.string().url(),headers:o8.optional()}),gz=w.object({type:w.literal("streamableHttp"),url:w.string().url(),headers:o8.optional()}),mz=w.discriminatedUnion("type",[Iz,xz,gz]),vz=w.object({transport:mz,disabled:w.boolean().optional(),metadata:kV.optional(),oauth:zQ.optional()}),cz=w.enum(["stdio","sse","http","streamableHttp"]).optional(),IV=w.object({type:w.enum(["stdio","sse","streamableHttp"]).optional(),transportType:cz,disabled:w.boolean().optional(),metadata:kV.optional(),oauth:zQ.optional()});uz=IV.extend({command:w.string().min(1),args:w.array(w.string()).optional(),cwd:w.string().min(1).optional(),env:o8.optional()}).superRefine(($,W)=>{let Z=$.type??TQ($.transportType);if(Z&&Z!=="stdio")W.addIssue({code:w.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})),dz=IV.extend({url:w.string().url(),headers:o8.optional()}).superRefine(($,W)=>{let Z=$.type??TQ($.transportType)??"sse";if(Z!=="sse"&&Z!=="streamableHttp")W.addIssue({code:w.ZodIssueCode.custom,message:'Expected type "sse" or "streamableHttp" for URL-based MCP server',path:["type"]})}).transform(($)=>{if(($.type??TQ($.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}}),lz=w.union([vz,uz,dz]),pz=w.object({mcpServers:w.record(w.string(),lz)}).passthrough();M5=class M5 extends Error{constructor($){super($);this.name="McpSettingsUpdateSkippedError"}};l2=class l2 extends Error{constructor($){super($);this.name="McpSettingsLockTimeoutError"}};d2=class d2 extends Error{constructor($){super($);this.name="McpSettingsMutatorPurityError"}};iz=new Int32Array(new SharedArrayBuffer(4)),R5=new Set});import{existsSync as lE,mkdirSync as pE,readFileSync as rE,writeFileSync as iE}from"node:fs";import{resolve as nE}from"node:path";import{resolveSessionDataDir as aE}from"@cline/shared/storage";import{nanoid as oE}from"nanoid";import*as sE from"node-machine-id";function a0($){let W=$?.trim();if(W)return W;let Z=$w();if(Z)return Z;return Ww()}function eE(){let $=sE;return $.machineIdSync??$.default?.machineIdSync}function $w(){try{let $=eE();if(!$)return;return $().trim()||void 0}catch{return}}function Ww(){let $=aE(),W=nE($,tE);try{if(lE(W)){let Q=rE(W,"utf8").trim();if(Q.length>0)return Q}}catch{}let Z=`cl-${oE()}`;try{pE($,{recursive:!0}),iE(W,Z,"utf8")}catch{}return Z}var tE="machine-id";var e2=()=>{};class t6{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(Qy(V)){J[B]=V;continue}try{J[B]=JSON.stringify(V)}catch{J[B]=String(V)}}return J}}function Qy($){return typeof $==="string"||typeof $==="number"||typeof $==="boolean"}class dW{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 e6{adapters;metadata;distinctId;commonProperties;constructor($={}){if(this.adapters=[...$.adapters??[]],$.logger)this.adapters.push(new dW({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 u3=()=>{};import{metrics as Jy,trace as jy}from"@opentelemetry/api";import{logs as Xy}from"@opentelemetry/api-logs";import{OTLPLogExporter as Yy}from"@opentelemetry/exporter-logs-otlp-http";import{OTLPMetricExporter as Vy}from"@opentelemetry/exporter-metrics-otlp-http";import{OTLPTraceExporter as By}from"@opentelemetry/exporter-trace-otlp-http";import{resourceFromAttributes as Hy}from"@opentelemetry/resources";import{BatchLogRecordProcessor as Gy,ConsoleLogRecordExporter as Ky,LoggerProvider as Fy}from"@opentelemetry/sdk-logs";import{ConsoleMetricExporter as Ay,MeterProvider as Uy,PeriodicExportingMetricReader as GF}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as Dy,ConsoleSpanExporter as _y,SimpleSpanProcessor as fy}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as Ly}from"@opentelemetry/sdk-trace-node";import{ATTR_SERVICE_NAME as Ty,ATTR_SERVICE_VERSION as Oy}from"@opentelemetry/semantic-conventions";class KF{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 $4{meterProvider;loggerProvider;tracerProvider;options;constructor($={}){this.options=$;let W=Hy({[Ty]:$.serviceName??"cline",...$.serviceVersion?{[Oy]:$.serviceVersion}:{}});if(this.meterProvider=this.createMeterProvider(W),this.loggerProvider=this.createLoggerProvider(W),this.tracerProvider=this.createTracerProvider(W),this.meterProvider)Jy.setGlobalMeterProvider(this.meterProvider);if(this.loggerProvider)Xy.setGlobalLoggerProvider(this.loggerProvider);if(this.tracerProvider)this.tracerProvider.register()}getTracer($="cline",W){return jy.getTracer($,W??this.options.serviceVersion)}createAdapter($){return new t6({...$,meterProvider:this.meterProvider,loggerProvider:this.loggerProvider})}createTelemetryService($){let W=this.createAdapter({name:$.name,enabled:this.options.enabled,metadata:$.metadata});return new e6({...$,adapters:[W],distinctId:a0($.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=d3(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 Uy({resource:$,readers:J})}createTracerProvider($){let W=d3(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=qy(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 Ly({resource:$,spanProcessors:J})}createLoggerProvider($){let W=d3(this.options.logsExporter);if(W.length===0)return null;let Z=W.map((Q)=>{let J=zy(Q,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(!J)return null;return new Gy(J,{maxQueueSize:this.options.logMaxQueueSize??2048,maxExportBatchSize:this.options.logBatchSize??512,scheduledDelayMillis:this.options.logBatchTimeoutMs??this.options.logBatchTimeout??5000})}).filter((Q)=>Q!==null);if(Z.length===0)return null;return new Fy({resource:$,processors:Z})}}function lW($){let W=new $4($),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 Y2($){if(HZ())return{telemetry:new KF($)};if($.enabled!==!0)return{telemetry:new e6({...$,distinctId:a0($.distinctId)})};return lW($)}function pW($){let{telemetry:W,provider:Z}=Y2($);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 d3($){if(!$)return[];return(Array.isArray($)?$:$.split(",")).map((Z)=>Z.trim()).filter((Z)=>Z==="console"||Z==="otlp")}function zy($,W){if($==="console")return new Ky;if(!W.endpoint)return null;let Z=l3(W.endpoint,"/v1/logs");return new Yy({url:Z,headers:W.headers})}function qy($,W){if($==="console")return new fy(new _y);if(!W.endpoint)return null;let Z=l3(W.endpoint,"/v1/traces");return new Dy(new By({url:Z,headers:W.headers}))}function My($,W){if($==="console")return new GF({exporter:new Ay,exportIntervalMillis:W.interval,exportTimeoutMillis:W.timeout});if(!W.endpoint)return null;let Z=l3(W.endpoint,"/v1/metrics");return new GF({exporter:new Vy({url:Z,headers:W.headers}),exportIntervalMillis:W.interval,exportTimeoutMillis:W.timeout})}function l3($,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 rW=q$(()=>{$1();e2();u3()});var qA={};U9(qA,{resolveCoreDistinctId:()=>a0,createOpenTelemetryTelemetryService:()=>lW,createConfiguredTelemetryService:()=>Y2,createConfiguredTelemetryHandle:()=>pW,OpenTelemetryProvider:()=>$4,OpenTelemetryAdapter:()=>t6});var eW=q$(()=>{e2();rW()});import*as x20 from"@cline/llms";import{ClineNotSubscribedError as m20,ClineOrgIndividualInferenceSubscriptionError as v20,ClinePassLimitError as c20,extractClinePassLimitMessage as u20,getClineNotSubscribedMessage as d20,getClineOrgIndividualInferenceSubscriptionMessage as l20,getClinePassSubscriptionUrl as p20,isClineNotSubscribedError as r20,isClineNotSubscribedMessage as i20,isClineOrgIndividualInferenceSubscriptionError as n20,isClineOrgIndividualInferenceSubscriptionMessage as a20,isClinePassLimitError as o20,isClinePassLimitMessage as s20}from"@cline/llms";import{buildClineSystemPrompt as e20,buildSdkErrorProperties as $80,ContributionRegistry as W80,captureSdkError as Z80,createClineTelemetryServiceConfig as Q80,createClineTelemetryServiceMetadata as J80,createContributionRegistry as j80,createTool as X80,emptyWorkspaceManifest as Y80,FEATURE_FLAGS as V80,FeatureFlagDefaultValue as B80,formatDisplayUserInput as H80,noopBasicLogger as G80,normalizeSdkError as K80,normalizeUserInput as F80,parseUserCommandEnvelope as A80,registerDisposable as U80,SDK_ERROR_TELEMETRY_EVENT as D80,stripUtf8Bom as _80}from"@cline/shared";export*from"@cline/shared/storage";function yU($){if(typeof $!=="object"||$===null||!("error"in $))return;let W=$.error;return typeof W==="string"&&W.trim()?W:void 0}function sJ($,W,Z){let Q=yU(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 D9{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(sJ(X.status,Y,void 0));throw Error("Cline account response was not valid JSON")}if(!X.ok)throw Error(sJ(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 tJ($){return $.action==="clineAccount"}async function eJ($,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 _9{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}}function j4($){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}}import{getClineEnvironmentConfig as k9}from"@cline/shared";import{createHash as hU}from"node:crypto";var $j;function kU($){$j=$}function P0($){if(typeof $!=="string"||$.length===0)return"unset";return hU("sha256").update($).digest("hex").slice(0,8)}function s($){try{$j?.debug($)}catch{}}F0();function rU(){let $;return{promise:new Promise((Z)=>{$=Z}),resolve:$}}async function _1($){let W=await import("node:http"),Z=$.host??"127.0.0.1",Q=$.timeoutMs??300000,J=$.successHtml??iU,j=rU(),X=!1,Y=null,V=null,B=null,H=(F)=>{if(X)return;X=!0,j.resolve(F)},G=()=>{if(Y)clearTimeout(Y),Y=null;let F=B;if(B=null,V)V.close(),V.closeAllConnections?.(),V=null;if(F!==null&&$.onClose)Promise.resolve($.onClose({host:Z,port:F})).catch(()=>{})},K=async()=>{return Y=setTimeout(()=>{G(),H(null)},Q),j.promise};for(let F of $.ports){let A=W.createServer((U,f)=>{try{let _=new URL(U.url||"",`http://${Z}:${F}`);if(_.pathname!==$.callbackPath){f.statusCode=404,f.end("Not found");return}let q={url:_,code:_.searchParams.get("code")??void 0,state:_.searchParams.get("state")??void 0,provider:_.searchParams.get("provider")??void 0,error:_.searchParams.get("error")??void 0};if(q.error){f.statusCode=400,f.end(`Authentication failed: ${q.error}`),G(),H(q);return}if(!q.code){f.statusCode=400,f.end("Missing authorization code");return}if($.expectedState&&q.state!==$.expectedState){f.statusCode=400,f.end("State mismatch");return}f.statusCode=200,f.setHeader("Content-Type","text/html; charset=utf-8"),f.end(J),G(),H(q)}catch{f.statusCode=500,f.end("Internal error")}}),D=await new Promise((U)=>{let f=(_)=>{A.off("error",f),U({bound:!1,error:_})};A.once("error",f),A.listen(F,Z,()=>{A.off("error",f),V=A,U({bound:!0})})});if(D.error){if(D.error.code==="EADDRINUSE")continue;throw G(),D.error}if(D.bound){B=F;let U=`http://${Z}:${F}${$.callbackPath}`;if($.onListening)await Promise.resolve($.onListening({host:Z,port:F,callbackUrl:U})).catch(()=>{});return{callbackUrl:U,waitForCallback:K,cancelWait:()=>{G(),H(null)},close:()=>{G(),H(null)}}}}return{callbackUrl:"",waitForCallback:async()=>null,cancelWait:()=>{},close:()=>{}}}var iU=`<!DOCTYPE html>
|
|
5
5
|
<html lang="en">
|
|
6
6
|
<head>
|
|
7
7
|
<meta charset="utf-8">
|
|
@@ -42,8 +42,8 @@ import{createRequire as SU}from"node:module";var wU=Object.defineProperty;var CU
|
|
|
42
42
|
</div>
|
|
43
43
|
<script>setTimeout(() => window.close(), 3000);</script>
|
|
44
44
|
</body>
|
|
45
|
-
</html>`;function jj($){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 iU($){let Z=new TextEncoder().encode($),Q=await crypto.subtle.digest("SHA-256",Z);return new Uint8Array(Q)}function nU($=32){let W=new Uint8Array($);return crypto.getRandomValues(W),jj(W)}async function H4(){let $=nU(),W=jj(await iU($));return{verifier:$,challenge:W}}function G4($){return $.endsWith("/")?$.slice(0,-1):$}function E$($,W){return new URL(W,`${G4($)}/`).toString()}function A2($,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 U2($){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 D2($,W){return Date.now()>=$.expires-W}async function _2($){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 A2(W,$.parseOptions);if(await Q,Z)throw Z;if(W)return A2(W,$.parseOptions);return{}}var K4={authorize:"/api/v1/auth/authorize",token:"/api/v1/auth/token",register:"/api/v1/auth/register",refresh:"/api/v1/auth/refresh"},Bj={deviceAuthorization:"/user_management/authorize/device",authenticate:"/user_management/authenticate"},I9="https://api.workos.com",aU="/auth",Xj=Array.from({length:11},($,W)=>48801+W),oU=300000,sU=30000,f2=30000,tU=300,eU=5;class j1 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 $D($){let W=Date.parse($);if(Number.isNaN(W))throw Error(`Invalid expiresAt value: ${$}`);return W}function x9($,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:$D($.expiresAt),accountId:Q??void 0,email:$.userInfo.email||Z.email,metadata:j}}async function g9($){if(!$)return{};return typeof $==="function"?await $():$}function Yj($,W){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return W;return Math.floor($)}async function Vj($){await new Promise((W)=>setTimeout(W,$))}function m9($,W){if(!$.success||!$.data?.accessToken)throw Error(W);return $.data}async function Hj($,W){let Z=await fetch(E$(I9,Bj.deviceAuthorization),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({client_id:$}),signal:AbortSignal.timeout(W?.requestTimeoutMs??f2)}),Q=await Z.json().catch(()=>({}));if(!Z.ok)throw new j1(`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:Yj(Q.expires_in,tU),pollIntervalSeconds:Yj(Q.interval,eU)}}async function Gj($){let W=Date.now()+$.expiresInSeconds*1000,Z=Math.max(1,$.initialPollIntervalSeconds);while(Date.now()<=W){let Q=await fetch(E$($.workosApiBaseUrl,Bj.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 Vj(Z*1000);break}case"slow_down":{Z+=1,await Vj(Z*1000);break}case"access_denied":case"expired_token":case"invalid_grant":throw new j1(J.error_description||"WorkOS authorization failed",{status:Q.status,errorCode:J.error});default:throw new j1(`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 Kj($,W,Z){let Q={accessToken:$.accessToken,refreshToken:$.refreshToken},J=await fetch(E$(W.apiBaseUrl,K4.register),{method:"POST",headers:{"Content-Type":"application/json",...await g9(W.headers)},body:JSON.stringify(Q),signal:AbortSignal.timeout(W.requestTimeoutMs??f2)});if(!J.ok){let X=await J.text().catch(()=>""),Y=U2(X);throw new j1(`Token registration failed: ${J.status}${Y.message?` - ${Y.message}`:""}`,{status:J.status,errorCode:Y.code})}let j=await J.json();return x9(m9(j,"Invalid token exchange response"),Z??W.provider,{metadata:{sessionStartedAtMs:Date.now()}})}async function WD($,W,Z,Q){let J={grant_type:"authorization_code",code:$,client_type:"extension",redirect_uri:W,provider:Q??Z.provider},j=await fetch(E$(Z.apiBaseUrl,K4.token),{method:"POST",headers:{"Content-Type":"application/json",...await g9(Z.headers)},body:JSON.stringify(J),signal:AbortSignal.timeout(Z.requestTimeoutMs??f2)});if(!j.ok){let Y=await j.text().catch(()=>""),V=U2(Y);throw new j1(`Token exchange failed: ${j.status}${V.message?` - ${V.message}`:""}`,{status:j.status,errorCode:V.code})}let X=await j.json();return x9(m9(X,"Invalid token exchange response"),Q??Z.provider,{metadata:{sessionStartedAtMs:Date.now()}})}async function v9($){m1($.telemetry,$.provider??"cline");let W=$.useWorkOSDeviceAuth??!0,Z=$.callbackPorts?.length?$.callbackPorts:Xj,Q=$.callbackPath??aU,J=W?null:await D1({ports:Z,callbackPath:Q,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),j=J?.callbackUrl||`http://127.0.0.1:${Z[0]??Xj[0]}${Q}`;try{let X;if(W){let Y=k9().workOsClientId,V=await Hj(Y,$);$.callbacks.onAuth({url:V.verificationUriComplete??V.verificationUri,instructions:`Enter this code in your browser: ${V.userCode}`});let B=await Gj({clientId:Y,deviceCode:V.deviceCode,expiresInSeconds:V.expiresInSeconds,initialPollIntervalSeconds:V.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??f2,workosApiBaseUrl:I9,onProgress:$.callbacks.onProgress});X=await Kj(B,$,$.provider)}else{let Y=new URL(E$($.apiBaseUrl,K4.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 _2({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=A2(G,{includeProvider:!0});V=K.code,B=K.provider??B}if(!V)throw Error("Missing authorization code");X=await WD(V,j,$,B)}return v1($.telemetry,$.provider??"cline"),u1($.telemetry,{id:X.accountId,email:X.email,provider:$.provider??"cline"}),X}catch(X){throw c1($.telemetry,$.provider??"cline",X instanceof Error?X.message:String(X)),X}finally{J?.close()}}async function ZD($){return await Hj(k9().workOsClientId,$)}async function QD($){let W=$.provider??"cline";m1($.telemetry,W);try{let Z=await Gj({clientId:k9().workOsClientId,deviceCode:$.deviceCode,expiresInSeconds:$.expiresInSeconds,initialPollIntervalSeconds:$.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??f2,workosApiBaseUrl:I9}),Q=await Kj(Z,{apiBaseUrl:$.apiBaseUrl,headers:$.headers,requestTimeoutMs:$.requestTimeoutMs,provider:$.provider},$.provider);return v1($.telemetry,W),u1($.telemetry,{id:Q.accountId,email:Q.email,provider:W}),Q}catch(Z){throw c1($.telemetry,W,Z instanceof Error?Z.message:String(Z)),Z}}async function Fj($,W){let Z=E$(W.apiBaseUrl,K4.refresh);o(`cline.refresh.request url=${Z} refreshTokenHash=${w0($.refresh)}`);let Q=await fetch(Z,{method:"POST",headers:{"Content-Type":"application/json",...await g9(W.headers)},body:JSON.stringify({refreshToken:$.refresh,grantType:"refresh_token"}),signal:AbortSignal.timeout(W.requestTimeoutMs??f2)});if(!Q.ok){let Y=await Q.text().catch(()=>""),V=U2(Y);throw o(`cline.refresh.error status=${Q.status} errorCode=${V.code??"none"} message=${V.message??"none"}`),new j1(`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=x9(m9(J,"Invalid token refresh response"),j,$);return o(`cline.refresh.success newAccessTokenHash=${w0(X.access)} newRefreshTokenHash=${w0(X.refresh)} expires=${X.expires}`),X}async function c9($,W,Z){if(!$)return o("cline.getCredentials outcome=no_current_credentials"),null;let Q=Z?.refreshBufferMs??oU,J=Z?.retryableTokenGraceMs??sU,j=Z?.forceRefresh===!0;if(!j&&!D2($,Q))return o(`cline.getCredentials outcome=still_valid forceRefresh=${j}`),$;o(`cline.getCredentials outcome=needs_refresh forceRefresh=${j} accessTokenHash=${w0($.access)}`);try{return await Fj($,W)}catch(X){let Y={status:X instanceof j1?X.status:void 0,errorCode:X instanceof j1?X.errorCode:void 0,errorName:X instanceof Error?X.name:void 0};if(X instanceof j1&&X.isLikelyInvalidGrant())return o(`cline.getCredentials outcome=invalid_grant status=${X.status} errorCode=${X.errorCode??"none"}`),M$(W.telemetry,W.provider??"cline","invalid_grant",{status:X.status,errorCode:X.errorCode}),null;if($.expires-Date.now()>J)return o(`cline.getCredentials outcome=transient_failure_kept_current error=${X instanceof Error?X.message:String(X)}`),O9(W.telemetry,W.provider??"cline",{...Y,tokenExpired:!1}),$;throw o(`cline.getCredentials outcome=transient_failure_rethrown error=${X instanceof Error?X.message:String(X)}`),O9(W.telemetry,W.provider??"cline",{...Y,tokenExpired:!0}),X}}A0();import{decodeJwtPayload as u9}from"@cline/shared";import{nanoid as JD}from"nanoid";var X0={authorizationEndpoint:"https://auth.openai.com/oauth/authorize",tokenEndpoint:"https://auth.openai.com/oauth/token",clientId:"app_EMoamEEZ73f0CkXaXp7hrann",redirectUri:"http://localhost:1455/auth/callback",scopes:"openid profile email offline_access",callbackPort:1455,jwtClaimPath:"https://api.openai.com/auth",refreshBufferMs:300000,retryableTokenGraceMs:30000,httpTimeoutMs:30000};class F4 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 jD($,W,Z=X0.redirectUri){let Q=await fetch(X0.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"authorization_code",client_id:X0.clientId,code:$,code_verifier:W,redirect_uri:Z}),signal:AbortSignal.timeout(X0.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 XD($){try{let W=await fetch(X0.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:$,client_id:X0.clientId}),signal:AbortSignal.timeout(X0.httpTimeoutMs)});if(!W.ok){let Q=await W.text().catch(()=>""),J=U2(Q);throw new F4(`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 F4)throw W;return{type:"failed"}}}async function YD($="pi"){let{verifier:W,challenge:Z}=await H4(),Q=JD(32),J=new URL(X0.authorizationEndpoint);return J.searchParams.set("response_type","code"),J.searchParams.set("client_id",X0.clientId),J.searchParams.set("redirect_uri",X0.redirectUri),J.searchParams.set("scope",X0.scopes),J.searchParams.set("code_challenge",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 VD(){try{let $=new URL(X0.redirectUri),W=$.port.length>0?Number.parseInt($.port,10):X0.callbackPort;return{host:$.hostname||"localhost",port:Number.isFinite(W)?W:X0.callbackPort,callbackPath:$.pathname||"/auth/callback",redirectUri:$.toString()}}catch{return{host:"localhost",port:X0.callbackPort,callbackPath:"/auth/callback",redirectUri:X0.redirectUri}}}function BD($,W){let Z=W?u9(W):u9($),Q=Z?Z:u9($),j=Q?.[X0.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 Aj($,W){let Z=BD($.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 d9($){m1($.telemetry,"openai-codex");let W=VD(),{verifier:Z,state:Q,url:J}=await YD($.originator),j=await D1({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 _2({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=A2(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 jD(X,Z,W.redirectUri);if(V.type!=="success")throw Error("Token exchange failed");let B=Aj(V);return v1($.telemetry,"openai-codex"),u1($.telemetry,{id:B.accountId,email:B.email,provider:"openai-codex"}),B}catch(Y){throw c1($.telemetry,"openai-codex",Y instanceof Error?Y.message:String(Y)),Y}finally{j.close()}}async function Uj($,W){let Z=await XD($);if(Z.type!=="success")throw Error("Failed to refresh OpenAI Codex token");let Q=Aj(Z,W);if(!Q.refresh)throw Error("Failed to refresh OpenAI Codex token: missing refresh token");return Q}async function l9($,W){if(!$)return null;let Z=W?.refreshBufferMs??X0.refreshBufferMs,Q=W?.retryableTokenGraceMs??X0.retryableTokenGraceMs;if(W?.forceRefresh!==!0&&!D2($,Z))return $;try{return await Uj($.refresh,$)}catch(j){if(j instanceof F4&&j.isLikelyInvalidGrant())return M$(W?.telemetry,"openai-codex","invalid_grant"),null;if($.expires-Date.now()>Q)return $;return null}}A0();import{decodeJwtPayload as L8}from"@cline/shared";import{nanoid as Dj}from"nanoid";class p9{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 HD="a8331954c0cf48ba99b5dd223a14c6ea",GD="https://idcs-9dc693e80d9b469480d7afe00e743931.identity.oraclecloud.com",KD="openid offline_access",i9="https://code-internal.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",FD="c1aba3deed5740659981a752714eba33",AD="https://login-ext.identity.oraclecloud.com",UD="openid offline_access",n9="https://code.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm";var DD="/auth/oca",_D=Array.from({length:11},($,W)=>48801+W),fD=300000,LD=30000,_j=30000,OD=600000;class A4 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 d1={internal:{clientId:HD,idcsUrl:GD,scopes:KD,baseUrl:i9},external:{clientId:FD,idcsUrl:AD,scopes:UD,baseUrl:n9}},O8=new Map,TD=86400000,zD=300000,qD=32,r9=new p9(TD,qD);function fj($){if(typeof $==="function")return $();return $??"internal"}function Lj($){return{internal:{clientId:$?.internal?.clientId??d1.internal.clientId,idcsUrl:$?.internal?.idcsUrl??d1.internal.idcsUrl,scopes:$?.internal?.scopes??d1.internal.scopes,baseUrl:$?.internal?.baseUrl??d1.internal.baseUrl},external:{clientId:$?.external?.clientId??d1.external.clientId,idcsUrl:$?.external?.idcsUrl??d1.external.idcsUrl,scopes:$?.external?.scopes??d1.external.scopes,baseUrl:$?.external?.baseUrl??d1.external.baseUrl}}}function MD($=Date.now()){let W=$-OD;for(let[Z,Q]of O8.entries())if(Q.createdAt<W)O8.delete(Z)}function RD($,W,Z){if(typeof $.expires_in==="number"&&$.expires_in>0)return Date.now()+$.expires_in*1000;let J=L8(W)?.exp;if(typeof J==="number"&&J>0)return J*1000;let X=L8(Z)?.exp;if(typeof X==="number"&&X>0)return X*1000;return Date.now()+3600000}function Oj($,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=L8($.id_token),X=L8(Q),Y=j?.sub??X?.sub,V=j?.email??X?.email;return{access:Q,refresh:J,expires:RD($,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 Tj($,W){let Z=G4($),Q=r9.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 r9.set(Z,V,Date.now(),zD),V}let Y=(await j.json()).token_endpoint||`${Z}/oauth2/v1/token`;return r9.set(Z,Y),Y}function zj($){return{code:$.error,message:$.error_description}}async function ED($){let W=O8.get($.state);if(!W)throw Error("No PKCE verifier found for this state");O8.delete($.state);let Z=$.mode==="external"?$.config.external:$.config.internal,Q=await Tj(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=zj(X);throw new A4(`Token exchange failed: ${j.status}${V.message?` - ${V.message}`:""}`,{status:j.status,errorCode:V.code})}let Y=L8(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 Oj(X,$.mode)}function ND($){let W=$.mode==="external"?$.config.external:$.config.internal,Z=new URL(`${G4(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 a9($){m1($.telemetry,"oca");let W=Lj($.config),Z=fj($.mode),Q=$.callbackPorts?.length?$.callbackPorts:_D,J=$.callbackPath??DD,j=$.requestTimeoutMs??_j,X=await D1({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=Dj(16),B=Dj(16),{verifier:H,challenge:G}=await H4();MD(),O8.set(V,{verifier:H,nonce:B,mode:Z,redirectUri:Y,createdAt:Date.now()});let K=ND({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 _2({waitForCallback:X.waitForCallback,cancelWait:X.cancelWait,onManualCodeInput:$.callbacks.onManualCodeInput}),A=F.code,D=F.state;if(F.error)throw Error(`OAuth error: ${F.error}`);if(!A){if(!$.callbacks.onManualCodeInput)throw Error("Timed out waiting for OCA callback");throw Error("Missing authorization code")}if(!D||D!==V)throw Error("State mismatch");let U=await ED({code:A,state:D,mode:Z,config:W,requestTimeoutMs:j});return v1($.telemetry,"oca"),u1($.telemetry,{id:U.accountId,email:U.email,provider:"oca"}),U}catch(F){throw c1($.telemetry,"oca",F instanceof Error?F.message:String(F)),F}finally{X.close()}}async function qj($,W={}){let Z=Lj(W.config),Q=W.requestTimeoutMs??_j,J=$.metadata?.mode,j=J==="internal"||J==="external"?J:fj(W.mode),X=j==="external"?Z.external:Z.internal,Y=await Tj(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=zj(H);throw new A4(`Token refresh failed: ${B.status}${G.message?` - ${G.message}`:""}`,{status:B.status,errorCode:G.code})}return Oj(H,j,$)}async function o9($,W,Z){if(!$)return null;let Q=W?.refreshBufferMs??Z?.refreshBufferMs??fD,J=W?.retryableTokenGraceMs??Z?.retryableTokenGraceMs??LD;if(W?.forceRefresh!==!0&&!D2($,Q))return $;try{return await qj($,Z)}catch(X){if(X instanceof A4&&X.isLikelyInvalidGrant())return M$(Z?.telemetry,"oca","invalid_grant"),null;if($.expires-Date.now()>J)return $;return null}}import{decodeJwtPayload as wD,getClineEnvironmentConfig as Mj}from"@cline/shared";var U4="workos:";function CD($){let W=$.trim();return W.toLowerCase().startsWith(U4)?W:`${U4}${W}`}function PD($){let W=$.trim();return W.toLowerCase().startsWith(U4)?W.slice(U4.length):W}function SD($){let Z=wD($)?.exp;if(typeof Z==="number"&&Z>0)return Z*1000;return null}function bD($,W){let Z=$.auth?.expiresAt;if(typeof Z==="number"&&Number.isFinite(Z)&&Z>0)return Z;let Q=SD(W);if(Q)return Q;return Date.now()-1}function yD($,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:bD($,J),accountId:$.auth?.accountId,metadata:$.auth?.metadata}}function hD($){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 s9($){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 hD({...Z,storageProviderId:W,formatAccessToken:$.formatAccessToken})},isConfigured(Z){return!!Z?.auth?.accessToken},normalizeStoredAccessToken:$.normalizeStoredAccessToken}}function Rj($){return s9({providerId:$.providerId,storageProviderId:$.storageProviderId,formatAccessToken:CD,normalizeStoredAccessToken:PD,login:({settings:W,callbacks:Z,telemetry:Q})=>v9({apiBaseUrl:W?.baseUrl?.trim()||Mj().apiBaseUrl,useWorkOSDeviceAuth:!0,callbacks:Z,telemetry:Q}),refresh:({settings:W,credentials:Z,forceRefresh:Q,telemetry:J})=>c9(Z,{apiBaseUrl:W.baseUrl?.trim()||Mj().apiBaseUrl,telemetry:J},{forceRefresh:Q})})}var kD=[Rj({providerId:"cline"}),Rj({providerId:"cline-pass",storageProviderId:"cline"}),s9({providerId:"oca",login:({settings:$,callbacks:W,telemetry:Z})=>a9({mode:$?.oca?.mode,callbacks:W,telemetry:Z}),refresh:({settings:$,credentials:W,forceRefresh:Z,telemetry:Q})=>o9(W,{forceRefresh:Z,telemetry:Q},{mode:$.oca?.mode,telemetry:Q})}),s9({providerId:"openai-codex",login:({callbacks:$,telemetry:W})=>d9({onAuth:$.onAuth,onPrompt:$.onPrompt,onProgress:$.onProgress,onManualCodeInput:$.onManualCodeInput,telemetry:W}),refresh:({credentials:$,forceRefresh:W,telemetry:Z})=>l9($,{forceRefresh:W,telemetry:Z})})],ID=new Map(kD.map(($)=>[$.providerId,$]));function U0($){return ID.get($.trim().toLowerCase())}function T8($){return U0($)!==void 0}function xD($){return U0($)?.storageProviderId}function gD($,W){let Z=U0(W),Q=Z?.storageProviderId??W,J=$.getProviderSettings(Q);return Z?.getApiKey(J)??D4(W,J)}async function t9($,W,Z){let Q=U0(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 e9($,W){let Z=U0($);if(!Z)return null;return yD(W,{normalizeAccessToken:Z.normalizeStoredAccessToken})}function z8($){let W=U0($.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 D4($,W){let Z=U0($);if(Z)return Z.getApiKey(W);return W?.auth?.accessToken?.trim()||W?.apiKey?.trim()||W?.auth?.apiKey?.trim()||void 0}function mD($,W){let Z=U0($);if(!Z)return W.access;return Z.getApiKey({provider:Z.storageProviderId,auth:{accessToken:W.access}})??W.access}import*as g0 from"@cline/llms";import{z as R}from"zod";import*as s from"@cline/llms";function $Z($){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 vD($,W){let Z=$Z($);if(Z.length>0)return Z;if(!$||typeof $!=="object")return[];let Q=$,J=$Z(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=$Z(j.models??j);if(Y.length>0)return Y}return[]}async function _4($,W){let Z=await fetch($,{method:"GET"});if(!Z.ok)throw Error(`failed to fetch models from ${$}: HTTP ${Z.status}`);return vD(await Z.json(),W)}function Ej($){return $.replace(/\/+$/,"")}function f4($,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=Ej(X.pathname),B=Ej(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 cD($){return Object.fromEntries(Object.entries($).map(([W,Z])=>[W,{...Z}]))}function uD($){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 dD=Object.values(s.MODEL_COLLECTIONS_BY_PROVIDER_ID).map(($)=>({id:$.provider.id,baseUrl:$.provider.baseUrl??"",modelsSourceUrl:$.provider.modelsSourceUrl,modelId:$.provider.defaultModelId,knownModels:cD($.models),capabilities:$.provider.capabilities?[...$.provider.capabilities]:void 0,env:$.provider.env?[...$.provider.env]:void 0,client:$.provider.client,protocol:$.provider.protocol})),Cj=Object.fromEntries(dD.map(($)=>[$.id,$]));function lD($){return Cj[$]}function pD(){return Object.fromEntries(Object.entries(Cj).filter(([,$])=>uD($)))}function Pj($=[]){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 Sj="https://models.dev/api.json",rD=600000,bj=300000,iD=5000,O4=new Map,q8=new Map,ZZ=new Map,L4=new Map;async function nD(){return s.getGeneratedProviderModels()}async function aD($,W={},Z={},Q={},J={},j={}){if($==="litellm")return s.sortModelsByReleaseDate(Q);let X=await nD(),Y=s.resolveProviderModelCatalogKeys($),V=Object.assign({},...Y.map((G)=>X[G]??{}));if(Boolean(s.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl))return s.sortModelsByReleaseDate({...J,...j});if($==="openai-codex")return s.sortModelsByReleaseDate({...W,...s.filterOpenAICodexModels(Z),...J,...j});if($==="cline-pass"&&Object.keys(Z).length>0)return{...Z,...j};let H=s.sortModelsByReleaseDate({...V,...W,...Z,...Q,...J});if($==="cline")return s.sortModelsByReleaseDate({...s.preferCanonicalModelIds(H,s.VERCEL_OPENROUTER_MODEL_ID_ALIAS_RULES),...j});return s.sortModelsByReleaseDate({...H,...j})}function oD($,W){let Z=s.resolveProviderModelCatalogKeys($);return Object.assign({},...Z.map((Q)=>W[Q]??{}))}function T4($){let W=$?.trim();return W&&W.length>0?W:""}function QZ($){let W=$.apiKey?.trim()||$.accessToken?.trim();return W&&W.length>0?W:void 0}function sD($){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 tD($,W){return`${$}:${T4(W.baseUrl)}:${sD(QZ(W)??"")}`}async function z4($,W,Z=iD){let Q=new AbortController,J=setTimeout(()=>Q.abort(),Z);try{return await fetch($,{...W,signal:Q.signal})}finally{clearTimeout(J)}}function N$($,W,Z){if(Z&&!$.includes(W))$.push(W)}function q4($,W){let Z=["streaming","tools"];return N$(Z,"images",Boolean(W.supportsImages)),N$(Z,"prompt-cache",Boolean(W.supportsPromptCache)),N$(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 eD($,W){let Z=await z4("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]=q4(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 Nj($){if(typeof $==="number")return Number.isFinite($)?$:void 0;if(typeof $==="string"){let W=Number($);return Number.isFinite(W)?W:void 0}return}async function $_($,W){let Z=await z4("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]=q4(Y,{name:Y,maxInputTokens:128000,supportsImages:!0,supportsPromptCache:!0})}return j}async function W_($,W){let Q=`${(T4($.baseUrl)||"https://inference.poolside.ai/v1").replace(/\/+$/,"")}/models`,J=await z4(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"];N$(F,"tools",H.includes("tools")),N$(F,"reasoning",H.includes("reasoning")),N$(F,"temperature",G.includes("temperature")),N$(F,"images",K.includes("image"));let A={input:Nj(V.pricing?.prompt),output:Nj(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 Z_($){let W=T4($).replace(/\/+$/,"");if(!W)return"http://localhost:4000";return W.endsWith("/v1")?W.slice(0,-3):W}function Q_($){return[`${$}/v1/model/info`,`${$}/model/info`]}async function J_($){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 j_($,W){let Z=Z_($.baseUrl),Q=[],J=[["x-litellm-api-key",{"x-litellm-api-key":W}],["Authorization",{Authorization:`Bearer ${W}`}]];for(let j of Q_(Z))for(let[X,Y]of J)try{let V=await z4(j,{method:"GET",headers:{accept:"application/json",...Y}});if(V.ok){let H=(await V.json())?.data??[],G={};for(let K of H){let F=K.model_name?.trim(),D=K.litellm_params?.model?.trim()||F;if(!D)continue;let U=K.model_info,f=q4(D,{name:F??D,maxTokens:U?.max_output_tokens??U?.max_tokens,maxInputTokens:U?.max_input_tokens??U?.max_tokens,supportsImages:U?.supports_vision,supportsPromptCache:U?.supports_prompt_caching,supportsReasoning:U?.supports_reasoning});if(G[D]=f,F)G[F]={...f,id:F,name:F}}return G}Q.push(`${new URL(j).pathname} (${X}): ${await J_(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 yj={baseten:eD,hicap:$_,litellm:j_,poolside:W_},wj=new Map,WZ=new Map;function X_($,W){return`${$}:${T4(W.baseUrl)}`}async function Y_($,W,Z){let Q=s.MODEL_COLLECTIONS_BY_PROVIDER_ID[$],J=f4(Z.baseUrl,Q?.provider.baseUrl,Q?.provider.modelsSourceUrl);if(!J)return{};let j=W?.cacheTtlMs??bj,X=X_($,Z),Y=Date.now(),V=wj.get(X);if(V&&V.expiresAt>Y)return V.data;let B=WZ.get(X);if(B)return B;let H=_4(J,$).then((G)=>{let K=Object.fromEntries(G.map((F)=>[F,q4(F,{name:F})]));return wj.set(X,{data:K,expiresAt:Y+j}),K}).finally(()=>{WZ.delete(X)});return WZ.set(X,H),H}async function V_($,W){let Z=QZ(W);if(!Z)return{};let Q=yj[$];if(!Q)return{};return Q(W,Z)}function B_($,W,Z){if(!Z)return!1;if(!yj[$])return!1;if(W?.loadPrivateOnAuth===!1)return!1;return Boolean(QZ(Z))}async function H_($,W,Z){let Q=W?.cacheTtlMs??bj,J=tD($,Z),j=Date.now(),X=ZZ.get(J);if(X&&X.expiresAt>j)return X.data;let Y=L4.get(J);if(Y)return Y;let V=V_($,Z).then((B)=>{return ZZ.set(J,{data:B,expiresAt:j+Q}),B}).finally(()=>{L4.delete(J)});return L4.set(J,V),V}async function G_($){return s.fetchLiveProviderModels($,globalThis.fetch)}async function M4($={}){let W=$.url??Sj,Z=$.cacheTtlMs??rD,Q=Date.now(),J=O4.get(W);if(J&&J.expiresAt>Q)return J.data;let j=q8.get(W);if(j)return j;let X=G_(W).then((Y)=>{return O4.set(W,{data:Y,expiresAt:Q+Z}),Y}).finally(()=>{q8.delete(W)});return q8.set(W,X),X}function K_($){if($){O4.delete($),q8.delete($);return}O4.clear(),q8.clear()}function F_(){ZZ.clear(),L4.clear()}function A_($){return Object.fromEntries(Object.entries($).map(([W,Z])=>[W,{baseUrl:Z.baseUrl,modelId:Z.modelId,capabilities:Pj(Z.capabilities)}]))}var JZ=A_(pD());function hj($){let W=lD($);if(!W)return;return{baseUrl:W.baseUrl||void 0,modelId:W.modelId,knownModels:W.knownModels,capabilities:Pj(W.capabilities)}}async function jZ($,W,Z){let Q=hj($);if(!Q)return;try{let J=W?.loadLatestOnInit?await M4(W):void 0,j=J?oD($,J):{},X=Z&&B_($,W,Z)?await H_($,W,Z):{},V=Boolean(s.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl)?Z??{providerId:$,modelId:Q.modelId,baseUrl:Q.baseUrl}:Z,B=V?await Y_($,W,V).catch(()=>({})):{},H=await aD($,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 XZ=g0.BUILT_IN_PROVIDER,U_=g0.BUILT_IN_PROVIDER_IDS,D_=g0.isBuiltInProviderId,R4=g0.normalizeProviderId,YZ=R.string().min(1).regex(/^[a-z0-9][a-z0-9-]*$/i),kj=R.enum(["anthropic","gemini","openai-chat","openai-responses","openai-r1","ai-sdk"]),Ij=R.enum(["anthropic","ai-sdk","ai-sdk-community","openai","openai-compatible","openai-r1","gemini","bedrock","custom","fetch","vertex"]),xj=R.object({apiKey:R.string().optional(),accessToken:R.string().optional(),refreshToken:R.string().optional(),expiresAt:R.number().int().positive().optional(),accountId:R.string().optional(),organizationId:R.string().optional(),organizationName:R.string().optional(),memberId:R.string().optional(),metadata:R.record(R.string(),R.unknown()).optional()}),__=R.enum(["none","low","medium","high","xhigh"]),gj=R.object({enabled:R.boolean().optional(),effort:__.optional(),budgetTokens:R.number().int().positive().optional()}),mj=R.object({accessKey:R.string().optional(),secretKey:R.string().optional(),sessionToken:R.string().optional(),region:R.string().optional(),profile:R.string().optional(),authentication:R.enum(["iam","api-key","apikey","profile"]).optional(),usePromptCache:R.boolean().optional(),useCrossRegionInference:R.boolean().optional(),useGlobalInference:R.boolean().optional(),endpoint:R.string().url().optional(),customModelBaseId:R.string().optional()}),vj=R.object({projectId:R.string().optional(),region:R.string().optional()}),cj=R.object({apiVersion:R.string().optional(),useIdentity:R.boolean().optional()}),uj=R.object({clientId:R.string().optional(),clientSecret:R.string().optional(),tokenUrl:R.string().url().optional(),resourceGroup:R.string().optional(),deploymentId:R.string().optional(),useOrchestrationMode:R.boolean().optional(),api:R.enum(["orchestration","foundation-models"]).optional(),defaultSettings:R.record(R.string(),R.unknown()).optional()}),dj=R.object({mode:R.enum(["internal","external"]).optional(),usePromptCache:R.boolean().optional()}),lj=R.object({loadLatestOnInit:R.boolean().optional(),loadPrivateOnAuth:R.boolean().optional(),url:R.string().url().optional(),cacheTtlMs:R.number().int().positive().optional(),failOnError:R.boolean().optional()}),L2=R.object({provider:YZ,apiKey:R.string().optional(),auth:xj.optional(),model:R.string().optional(),protocol:kj.optional(),client:Ij.optional(),routingProviderId:YZ.optional(),maxTokens:R.number().int().positive().optional(),contextWindow:R.number().int().positive().optional(),baseUrl:R.string().url().optional(),headers:R.record(R.string(),R.string()).optional(),timeout:R.number().int().positive().optional(),reasoning:gj.optional(),aws:mj.optional(),gcp:vj.optional(),azure:cj.optional(),sap:uj.optional(),oca:dj.optional(),region:R.string().optional(),apiLine:R.enum(["china","international"]).optional(),capabilities:R.array(R.enum(["reasoning","prompt-cache","streaming","tools","vision","computer-use","oauth","popular"])).optional(),modelCatalog:lj.optional()});function pj($){return L2.parse($)}function rj($){return L2.safeParse($)}function f_($){return $.protocol==="openai-responses"||$.client==="openai"}function _1($,W={}){let Z=$.provider,Q=R4(Z),J=W.includeKnownModels!==!1,j=$.reasoning?.effort||"none",X=j==="none"?void 0:j,Y=JZ[Q],V=Object.assign({},...g0.resolveProviderModelCatalogKeys(Q).map((D)=>g0.getGeneratedModelsForProvider(D))),B=Object.keys(V)[0],H=D4(Q,$),G=$.baseUrl??(Q==="oca"?$.oca?.mode==="internal"?i9:n9:Y?.baseUrl),K=$.routingProviderId??(f_($)&&Q!==XZ.OPENAI_NATIVE?XZ.OPENAI_NATIVE:void 0),F=J?Y?.knownModels??(Object.keys(V).length>0?V:void 0):void 0,A={providerId:Z,clientType:$.client,routingProviderId:K,modelId:$.model??Y?.modelId??B??"default",...J?{knownModels:F}:{},apiKey:H,accessToken:$.auth?.accessToken,refreshToken:$.auth?.refreshToken,accountId:$.auth?.accountId,baseUrl:G,headers:$.headers,timeoutMs:$.timeout,maxOutputTokens:$.maxTokens,maxInputTokens:$.contextWindow,thinking:$.reasoning?.enabled,reasoningEffort:X,thinkingBudgetTokens:$.reasoning?.budgetTokens,region:$.region??$.aws?.region??$.gcp?.region,apiLine:$.apiLine,useCrossRegionInference:$.aws?.useCrossRegionInference,useGlobalInference:$.aws?.useGlobalInference,aws:$.aws?{accessKey:$.aws.accessKey,secretKey:$.aws.secretKey,sessionToken:$.aws.sessionToken,authentication:$.aws.authentication,profile:$.aws.profile,usePromptCache:$.aws.usePromptCache,endpoint:$.aws.endpoint,customModelBaseId:$.aws.customModelBaseId}:void 0,gcp:$.gcp?{projectId:$.gcp.projectId,region:$.gcp.region}:void 0,azure:$.azure,sap:$.sap,oca:$.oca,capabilities:$.capabilities??Y?.capabilities,modelCatalog:$.modelCatalog?{loadLatestOnInit:$.modelCatalog.loadLatestOnInit,loadPrivateOnAuth:$.modelCatalog.loadPrivateOnAuth,url:$.modelCatalog.url,cacheTtlMs:$.modelCatalog.cacheTtlMs,failOnError:$.modelCatalog.failOnError}:void 0};return Object.fromEntries(Object.entries(A).filter(([D,U])=>U!==void 0))}function L_($){let W=pj($);return _1(W)}function O_($){let W=rj($);if(W.success)return{success:!0,config:_1(W.data)};return{success:!1,error:W.error}}import{SESSION_STATUS_VALUES as T_}from"@cline/shared";var VZ=T_,z_=["idle","running","pending"];function q_($){return!z_.includes($)}function H0($){return!q_($)}var D0={CORE:"core",CLI:"cli",SUBAGENT:"subagent",DESKTOP:"desktop",KANBAN:"kanban",API:"api",WEB:"web",VSCODE:"vscode",ENTERPRISE:"enterprise",IDE:"ide",JETBRAINS:"jetbrains",NEOVIM:"neovim",UNKNOWN:"unknown"};function ij($){if($===!0)return{};if(!$)return;return $}function nj($){if($==="user")return"global";return $}class BZ{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 aj($){let{host:W}=$;return{async startSession(Z){let Q=(Z.cwd?.trim()||Z.workspaceRoot).trim(),J=await W.startSession({source:Z.source?.trim()||D0.CLI,interactive:!1,config:{providerId:R4(Z.provider),modelId:Z.model,apiKey:Z.apiKey?.trim()||void 0,cwd:Q,workspaceRoot:Z.workspaceRoot,systemPrompt:Z.systemPrompt??"",mode:E_(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:R_(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 E4($){let W=M_($.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 M_($,W){if(!$)return;return{ingestEvent:(Z)=>{W.ingestEvent(Z)}}}function R_($){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 E_($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}import{existsSync as Q6,readFileSync as kq}from"node:fs";import{basename as SQ,dirname as VB,extname as Iq,isAbsolute as GB,join as xq,relative as KB,resolve as BB}from"node:path";import{createHash as N_}from"node:crypto";import{watch as w_}from"node:fs";import{readdir as C_,readFile as P_}from"node:fs/promises";import{join as S_}from"node:path";function b_($){return N_("sha1").update($).digest("hex")}function tj($){return Boolean($&&typeof $==="object"&&"code"in $)}function oj($){return tj($)&&$.code==="ENOENT"}function sj($){return tj($)&&($.code==="EACCES"||$.code==="EPERM")}class M8{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=w_(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(!oj(Z)&&!sj(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 P_(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:b_(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 C_($,{withFileTypes:!0})).filter((Z)=>Z.isFile()).map((Z)=>({directoryPath:$,fileName:Z.name,filePath:S_($,Z.name)})).sort((Z,Q)=>Z.fileName.localeCompare(Q.fileName))}catch(W){if(oj(W)||sj(W))return[];throw W}}}import{readdir as SZ,readFile as ef,stat as PZ}from"node:fs/promises";import{basename as O1,dirname as $L,extname as v4,join as y0,resolve as C8}from"node:path";import{stripUtf8Bom as WL}from"@cline/shared";import{AGENTS_RULES_FILE_NAME as NX,RULES_CONFIG_DIRECTORY_NAME as wX,resolveGlobalAgentsRulesPath as ZL,resolveRulesConfigSearchPaths as QL,resolveSkillsConfigSearchPaths as JL,resolveWorkflowsConfigSearchPaths as jL,SKILLS_CONFIG_DIRECTORY_NAME as bZ,WORKFLOWS_CONFIG_DIRECTORY_NAME as yZ}from"@cline/shared/storage";import XL from"yaml";t0();import{existsSync as I4,readFileSync as mf,statSync as vf}from"node:fs";import{basename as cf,dirname as h4,join as x4,resolve as k4}from"node:path";import{discoverPluginModulePaths as uf,resolveConfiguredPluginModulePaths as zX,resolvePluginConfigSearchPaths as df,SKILLS_CONFIG_DIRECTORY_NAME as lf}from"@cline/shared/storage";import{resolve as Df}from"node:path";import{normalizePluginManifest as _f}from"@cline/shared";import{existsSync as f0,readFileSync as T2}from"node:fs";import{builtinModules as s_,createRequire as _Z}from"node:module";import{dirname as p1,extname as E8,isAbsolute as t_,resolve as i}from"node:path";import{fileURLToPath as JX}from"node:url";import{PLUGIN_FILE_EXTENSIONS as e_}from"@cline/shared";var jX=p1(JX(import.meta.url)),$f=_Z(import.meta.url),Wf=i(jX,"..","..","..","..",".."),AZ=Jf(Wf),Zf=["@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"],fZ=new Set(s_.flatMap(($)=>[$,$.replace(/^node:/,"")])),R8=new Set(e_),Qf=["development","node","import","require","default"];function Jf($){let W={},Z={"@cline/sdk":i($,"packages/sdk/src/index.ts"),"@cline/agents":i($,"packages/agents/src/index.ts"),"@cline/core":i($,"packages/core/src/index.ts"),"@cline/llms":i($,"packages/llms/src/index.ts"),"@cline/shared":i($,"packages/shared/src/index.ts"),"@cline/shared/storage":i($,"packages/shared/src/storage/index.ts"),"@cline/shared/db":i($,"packages/shared/src/db/index.ts")};for(let[Q,J]of Object.entries(Z))if(f0(J))W[Q]=J;for(let Q of["agents","core","llms","shared"]){let J=i($,"packages",Q),j=i(J,"package.json");if(!f0(j))continue;try{let X=JSON.parse(T2(j,"utf8"));if(typeof X.name!=="string"||!X.exports)continue;if(typeof X.exports==="string"){let Y=i(J,X.exports);if(f0(Y))W[X.name]=Y;continue}if(typeof X.exports!=="object")continue;for(let[Y,V]of Object.entries(X.exports)){let B=jf(J,V);if(!B)continue;let H=Y==="."?X.name:`${X.name}/${Y.replace(/^\.\//,"")}`;W[H]=B}}catch{}}return W}function jf($,W){let Z=LZ(W);if(!Z)return null;let Q=XX($,Z);for(let J of Q)if(f0(J))return J;return null}function LZ($,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 Qf){let J=LZ(Z[Q],W);if(J)return J}return null}function XX($,W){let Z=W.replace(/^\.\//,""),Q=[i($,W)];if(Z.startsWith("dist/")){let J=Z.replace(/^dist\//,"src/").replace(/\.(mjs|cjs|js)$/,"");return[i($,`${J}.ts`),i($,`${J}.tsx`),i($,`${J}.mts`),i($,`${J}.cts`),...Q]}return Q}function Xf($){return Object.fromEntries(Object.entries($).sort(([W],[Z])=>Z.length-W.length))}function S4($){return!($.startsWith(".")||$.startsWith("/")||$.startsWith("file:")||$.startsWith("data:")||$.startsWith("http:")||$.startsWith("https:"))}function O2($){if($.startsWith("@")){let[W,Z]=$.split("/",3);return Z?`${W}/${Z}`:$}return $.split("/",1)[0]??$}function Yf($){let W=O2($);if($===W)return".";return`.${$.slice(W.length)}`}function YX($){return O2($).startsWith("@cline/")}function UZ($,W){let Z=O2(W),Q=p1($);while(!0){let J=i(Q,"node_modules",Z);if(f0(J)||f0(i(J,"package.json")))return!0;let j=i(Q,"..");if(j===Q)return!1;Q=j}}function QX($){return DZ($)!==null}function DZ($){try{return $f.resolve($)}catch{}return Vf($)}function Vf($){let W=O2($),Z=VX(W);if(!Z)return null;let Q=i(Z,"package.json");try{let J=JSON.parse(T2(Q,"utf8")),j=Yf($),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=LZ(X)??(j==="."&&typeof J.main==="string"?J.main:null);if(!Y)return null;let V=i(Z,Y),B=[V,...XX(Z,Y).filter((H)=>H!==V)];for(let H of B)if(f0(H))return H;return null}catch{return null}}function Bf(){let $=[jX],W=process.env.CLINE_WRAPPER_PATH?.trim();if(W)$.push(p1(p1(W)));let Z=process.execPath?.trim();if(Z)$.push(p1(Z));return[...new Set($.map((Q)=>i(Q)))]}function Hf($,W){let Z=$;while(!0){let Q=i(Z,"package.json");if(f0(Q))try{if(JSON.parse(T2(Q,"utf8")).name===W)return Z}catch{}let J=i(Z,"node_modules",W,"package.json");if(f0(J))return p1(J);let j=i(Z,"..");if(j===Z)return null;Z=j}}function VX($){for(let W of Bf()){let Z=Hf(W,$);if(Z)return Z}return null}function Gf($){let Z=p1($);for(let Q=0;Q<4;Q++){let J=i(Z,"package.json");if(f0(J))try{let X=JSON.parse(T2(J,"utf8"));return X!=null&&typeof X==="object"&&"cline"in X}catch{return!1}let j=i(Z,"..");if(j===Z)return!1;Z=j}return!1}function BX($,W){let Z=W.startsWith("file:")?JX(W):t_(W)?W:i(p1($),W);if(f0(Z)&&R8.has(E8(Z)))return Z;for(let Q of R8){let J=`${Z}${Q}`;if(f0(J))return J}for(let Q of R8){let J=i(Z,`index${Q}`);if(f0(J))return J}return null}function HX($){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 Kf($){return E8($)!==".ts"}function GX($,W,Z=new Set){if(Z.has($)||!f0($))return;if(Z.add($),!R8.has(E8($)))return;let Q=T2($,"utf8"),J=Kf($);for(let j of HX(Q)){if(j.startsWith("node:")||fZ.has(j))continue;if(S4(j)){if(!J)continue;if(Object.hasOwn(AZ,j)||Object.hasOwn(AZ,O2(j))||UZ($,j)||YX(j)&&QX(j)||W&&QX(j))continue;throw Error(`Cannot find module '${O2(j)}'`)}let X=BX($,j);if(X)GX(X,W,Z)}}function KX($,W=new Set,Z=new Set){if(W.has($)||!f0($))return Z;if(W.add($),!R8.has(E8($)))return Z;let Q=T2($,"utf8");for(let J of HX(Q)){if(Z.add(J),S4(J))continue;let j=BX($,J);if(j)KX(j,W,Z)}return Z}function Ff($,W){let Z=_Z($),Q={},J=KX($),j=new Set(Zf);for(let[X,Y]of Object.entries(AZ)){try{Z.resolve(X);continue}catch{}Q[X]=Y}for(let X of J)if(S4(X)&&(YX(X)||W))j.add(X);for(let X of j){if(Object.hasOwn(Q,X)||UZ($,X))continue;let Y=DZ(X);if(Y)Q[X]=Y}if(!W)return Q;for(let X of J){if(!S4(X)||Object.hasOwn(Q,X)||UZ($,X)||X.startsWith("node:")||fZ.has(X))continue;let Y=DZ(X);if(Y)Q[X]=Y}return Q}function Af($){let W=E8($);return W===".ts"||W===".tsx"||W===".mts"||W===".cts"}var C$;function Uf(){if(C$!==void 0)return C$;let $=VX("jiti");if(!$)return C$=null,null;let W=i($,"dist","babel.cjs");if(!f0(W))return C$=null,null;try{let Q=_Z(W)(W);C$=typeof Q==="function"?Q:null}catch{C$=null}return C$}async function FX($,W={}){let Z=!Gf($);GX($,Z);let Q=Ff($,Z),J=Xf(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])=>Af(G)).map(([G])=>G),V=Uf(),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:[...fZ],transformModules:Y,tryNative:!1,...B?{transform:B}:{}}).import($,{})}function AX($,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 UX($){return typeof $==="object"&&$!==null}function OZ($){return Array.isArray($)&&$.every((W)=>typeof W==="string")}function ff($,W){if(!UX($.manifest))throw Error(`Invalid plugin module at ${W}: missing required "manifest"`);if(!OZ($.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")&&!OZ($.manifest.providerIds))throw Error(`Invalid plugin module at ${W}: manifest.providerIds must be a string array when provided`);if(Object.hasOwn($.manifest,"modelIds")&&!OZ($.manifest.modelIds))throw Error(`Invalid plugin module at ${W}: manifest.modelIds must be a string array when provided`)}function Lf($,W){if(!UX($))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"`);ff($,W)}async function TZ($,W={}){let Z=Df(W.cwd??process.cwd(),$),Q=await FX(Z,{useCache:W.useCache}),J=W.exportName??"plugin",j=Q.default??Q[J];Lf(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:_f(X.manifest),setup:V}}async function DX($,W={}){return(await N8($,W)).plugins}async function N8($,W={}){let Z=[],Q=[],J=new Map,j=0;for(let Y of $)try{let V=await TZ(Y,W);if(!AX(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 MZ}from"node:fs";import{createRequire as TX}from"node:module";import{dirname as y4,join as z2}from"node:path";import{fileURLToPath as Ef}from"node:url";import{spawn as Of}from"node:child_process";import{basename as Tf}from"node:path";import{augmentNodeCommandForDebug as zf,withResolvedClineBuildEnv as qf}from"@cline/shared";function _X($){if($ instanceof Error)return $;return Error(String($))}var Mf="CLINE_JS_RUNTIME_PATH";function fX($){let W=$?.trim();if(!W)return!1;let Z=Tf(W).toLowerCase();return Z==="node"||Z==="node.exe"||Z==="bun"||Z==="bun.exe"}function LX($={}){let W=$.env??process.env,Z=$.runtimeExecutable?.trim()||W[Mf]?.trim();if(Z)return Z;let Q=$.execPath?.trim()||process.execPath;if(fX(Q))return Q;for(let J of[W.BUN_EXEC_PATH,W.npm_node_execpath,W.NODE]){let j=J?.trim();if(j&&fX(j))return j}return"node"}function Rf($,W={}){let Z=LX({env:W.env,execPath:W.execPath,runtimeExecutable:W.runtimeExecutable});return zf([Z,...$],{env:W.env,execArgv:W.execArgv,debugRole:W.name==="plugin-sandbox"?"plugin-sandbox":"sandbox"})}class b4{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=Rf($,{name:this.options.name,runtimeExecutable:this.options.runtimeExecutable}),Z=Of(W[0]??LX(this.options),W.slice(1),{stdio:["ignore","ignore","pipe","ipc"],env:qf(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: ${_X(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 "${$}": ${_X(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 Nf($){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 w8($){return($ instanceof Error?$.message:String($)).includes("Unknown sandbox plugin id:")}function wf(){return`@cline/cli-${process.platform==="win32"?"windows":process.platform}-${process.arch}`}function Cf(){let $=process.env.CLINE_WRAPPER_PATH?.trim();if(!$)return;try{let Z=TX($).resolve(`${wf()}/package.json`),Q=z2(y4(Z),"extensions","plugin-sandbox-bootstrap.js");return MZ(Q)?Q:void 0}catch{return}}function Pf(){let $=process.execPath?.trim();if(!$)return;let W=z2(y4(y4($)),"extensions","plugin-sandbox-bootstrap.js");return MZ(W)?W:void 0}function Sf(){let $=y4(Ef(import.meta.url)),W=TX(import.meta.url),Z=[z2($,"plugin-sandbox-bootstrap.js"),z2($,"extensions","plugin-sandbox-bootstrap.js"),z2($,"agents","plugin-sandbox-bootstrap.js"),Cf(),Pf()];for(let j of Z.filter((X)=>typeof X==="string"))if(MZ(j))return{file:j};let Q=z2($,"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(`
|
|
46
|
-
`)}}var zZ=Sf();function qZ($,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 q2($){let W=new b4({name:"plugin-sandbox",..."file"in zZ?{bootstrapFile:zZ.file}:{bootstrapScript:zZ.script},onEvent:$.onEvent}),Z=qZ($.importTimeoutMs,4000,"CLINE_PLUGIN_IMPORT_TIMEOUT_MS"),Q=qZ($.hookTimeoutMs,3000),J=qZ($.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(Nf);return{extensions:B.map((G)=>{let K={name:G.name,__clinePluginPath:G.pluginPath,manifest:G.manifest,setup:(F)=>{bf(F,W,G,J,Y),yf(F,W,G,J,Y),hf(F,W,G,J,Y),If(F,W,G,J,Y),kf(F,G)}};return K.hooks=gf(W,G,Q,Y),K}),failures:V.failures,pluginPaths:B.map((G)=>G.pluginPath),shutdown:async()=>{await W.shutdown()},warnings:V.warnings}}function bf($,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(!w8(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 yf($,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(!w8(Y))throw Y;return await J(),await W.call("executeCommand",{pluginId:Z.pluginId,contributionId:j.id,input:X},{timeoutMs:Q})}}})}function hf($,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(!w8(X))throw X;return await J(),await W.call("resolveRuleContent",{pluginId:Z.pluginId,contributionId:j.id},{timeoutMs:Q})}}:j.content??""})}function kf($,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 If($,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 OX(Y)?Y:X}catch(Y){if(!w8(Y))throw Y;await J();let V=await W.call("buildMessages",{pluginId:Z.pluginId,contributionId:j.id,messages:X},{timeoutMs:Q});return OX(V)?V:X}}})}function OX($){return Array.isArray($)&&$.every((W)=>typeof W==="object"&&W!==null&&("role"in W)&&("content"in W))}function xf($,W,Z,Q,J){return async(j)=>{try{return await $.call("invokeHook",{pluginId:W,hookName:Z,payload:j},{timeoutMs:Q})}catch(X){if(!w8(X))throw X;return await J(),await $.call("invokeHook",{pluginId:W,hookName:Z,payload:j},{timeoutMs:Q})}}}function gf($,W,Z,Q){let J={};for(let j of W.hooks??[])J[j]=xf($,W.pluginId,j,Z,Q);return Object.keys(J).length>0?J:void 0}var EZ="package.json",pf="package";function NZ($){return df($)}function wZ($){return uf($)}function rf($){try{return I4($)&&vf($).isDirectory()}catch{return!1}}function CZ($){let W=[],Z=new Set;for(let Q of $){let J=k4(Q);if(Z.has(J))continue;Z.add(J),W.push(J)}return W}function qX($){let W=CZ($);return KZ(W)}function MX($){return NZ($).flatMap((W)=>wZ(W)).filter((W)=>I4(W))}function nf($,W){let Z=[];for(let Q of $)try{Z.push(...zX([Q],W))}catch{}return Z}function RZ($){return typeof $==="object"&&$!==null}function af($){try{let W=JSON.parse(mf(x4($,EZ),"utf8"));if(!RZ(W)||!RZ(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(!RZ(J)||!Array.isArray(J.paths))continue;for(let j of J.paths)if(typeof j==="string")Q.push(j)}return Q}catch{return[]}}function RX($,W){let Z=k4(W);return af($).some((Q)=>k4($,Q)===Z)}function of($,W){return cf($)===pf&&I4(x4(h4($),EZ))&&RX(h4($),W)}function sf($){let W=k4($),Z=[],Q=h4(W);while(!0){if(of(Q,W)){Z.push(Q);break}if(I4(x4(Q,EZ))){if(RX(Q,W))Z.push(Q);break}let J=h4(Q);if(J===Q)break;Q=J}return CZ(Z)}function P$($={}){let W=$.cwd??process.cwd(),Z=MX($.workspacePath),Q=zX($.pluginPaths??[],W);return qX([...Q,...Z])}function tf($={}){let W=$.cwd??process.cwd(),Z=MX($.workspacePath),Q=nf($.pluginPaths??[],W);return qX([...Q,...Z])}function S$($){let W=[];for(let Z of $)for(let Q of sf(Z)){let J=x4(Q,lf);if(rf(J))W.push(J)}return CZ(W)}function EX($={}){return S$(tf($))}async function g4($={}){let W=P$($);if(W.length===0)return{extensions:[],failures:[],warnings:[],pluginPaths:[]};if($.mode==="in_process"){let Q=await N8(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 q2({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}}var m4="SKILL.md",YL="managed.json",VL=new Set([".md",".markdown",".txt"]);function hZ($){return $.trim().toLowerCase()}function M2($){let W=$;return W?.code==="ENOENT"||W?.code==="EACCES"||W?.code==="EPERM"||W?.code==="ELOOP"}function c4($){return VL.has(v4($).toLowerCase())}function CX($){let W=[],Z=new Set;for(let Q of $){let J=C8(Q);if(Z.has(J))continue;Z.add(J),W.push(Q)}return W}function BL($){let W=[...$?.directories??vZ($?.workspacePath)];if($?.pluginSkillDirectories)W.push(...$.pluginSkillDirectories);else if($?.includePluginSkills)W.push(...EX({pluginPaths:$.pluginPaths,workspacePath:$.workspacePath,cwd:$.cwd??$.workspacePath}));return CX(W)}async function kZ($){try{let W=await SZ($,{withFileTypes:!0}),Z=[];for(let Q of W){if(!Q.isDirectory())continue;let J=y0($,Q.name),j=y0(J,YL);try{let X=await ef(j,"utf8"),Y=JSON.parse(X);if(Y&&typeof Y==="object")Z.push(J)}catch(X){if(M2(X))continue;if(X?.name==="SyntaxError")continue;throw X}}return Z.sort((Q,J)=>Q.localeCompare(J))}catch(W){if(M2(W))return[];throw W}}function IZ($){let W=WL($),Z=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,Q=W.match(Z);if(!Q)return{data:{},body:W,hadFrontmatter:!1};let[,J,j]=Q;try{let X=XL.parse(J);return{data:X&&typeof X==="object"&&!Array.isArray(X)?X:{},body:j,hadFrontmatter:!0}}catch(X){let Y=X instanceof Error?X.message:String(X);return{data:{},body:W,hadFrontmatter:!0,parseError:Y}}}function u4($,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 R2($,W){if($===void 0||$===null)return;if(typeof $!=="boolean")throw Error(`Frontmatter field '${W}' must be a boolean.`);return $}function HL($,W){if(O1($.filePath).toLowerCase()!==NX.toLowerCase())return O1($.filePath,v4($.filePath));if(W&&C8($.filePath)===C8(W,NX))return"Workspace AGENTS.md";if(C8($.filePath)===C8(ZL()))return"Global AGENTS.md";return O1($.filePath,v4($.filePath))}function xZ($,W){let{data:Z,body:Q,parseError:J}=IZ($);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=u4(Z.name,"name",!1)??W.trim();if(!Y)throw Error("Missing skill name.");return{name:Y,description:u4(Z.description,"description",!1),disabled:R2(Z.disabled,"disabled")??(R2(Z.enabled,"enabled")===!1?!0:void 0),instructions:j,frontmatter:Z}}function gZ($,W){let{data:Z,body:Q,parseError:J}=IZ($);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=u4(Z.name,"name",!1)??W.trim();if(!X)throw Error("Missing rule name.");return{name:X,disabled:R2(Z.disabled,"disabled")??(R2(Z.enabled,"enabled")===!1?!0:void 0),instructions:j,frontmatter:Z}}function mZ($,W){let{data:Z,body:Q,parseError:J}=IZ($);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=u4(Z.name,"name",!1)??W.trim();if(!X)throw Error("Missing workflow name.");return{name:X,disabled:R2(Z.disabled,"disabled")??(R2(Z.enabled,"enabled")===!1?!0:void 0),instructions:j,frontmatter:Z}}function vZ($){return JL($)}function cZ($){return QL($)}function uZ($){return jL($)}async function PX($){if(O1($)===".cline"){let W=await kZ($);return(await Promise.all(W.map((Q)=>PX(y0(Q,bZ))))).flat()}try{let W=await SZ($,{withFileTypes:!0}),Z=[];for(let Q of W){if(Q.isFile()&&Q.name===m4){Z.push({directoryPath:$,fileName:Q.name,filePath:y0($,Q.name)});continue}let J=y0($,Q.name);if(Q.isDirectory()||Q.isSymbolicLink()&&await PZ(J).then((X)=>X.isDirectory()).catch((X)=>{if(M2(X))return!1;throw X}))Z.push({directoryPath:J,fileName:m4,filePath:y0(J,m4)})}return Z}catch(W){if(M2(W))return[];throw W}}async function d4($){if(O1($)===".cline"){let W=await kZ($);return(await Promise.all(W.map((Q)=>d4(y0(Q,"rules.md"))))).flat()}try{if((await PZ($)).isFile())return[{directoryPath:$L($),fileName:O1($),filePath:$}]}catch(W){if(!M2(W))throw W}try{let Z=(await SZ($,{withFileTypes:!0})).filter((J)=>J.isFile()&&c4(J.name)).map((J)=>({directoryPath:$,fileName:J.name,filePath:y0($,J.name)})),Q=y0($,"AGENTS.md");try{if((await PZ(Q)).isFile()){if(!Z.some((X)=>X.fileName==="AGENTS.md"))Z.push({directoryPath:$,fileName:"AGENTS.md",filePath:Q})}}catch{}return Z}catch(W){if(M2(W))return[];throw W}}async function GL($){if(O1($)===".cline"){let W=await kZ($);return(await Promise.all(W.map((Q)=>d4(y0(Q,yZ))))).flat()}return d4($)}function dZ($){let W=BL($),Z=$?.workspacePath?y0($.workspacePath,".cline"):void 0;return{type:"skill",directories:Z?CX([...W,Z]):W,discoverFiles:PX,includeFile:(Q)=>Q===m4,parseFile:(Q)=>xZ(Q.content,O1(Q.directoryPath)),resolveId:(Q)=>hZ(Q.name)}}function lZ($){let W=$?.directories??cZ($?.workspacePath),Z=$?.workspacePath?y0($.workspacePath,".cline"):void 0;return{type:"rule",directories:Z?[...W,Z]:W,discoverFiles:d4,includeFile:(Q,J)=>Q===".clinerules"||c4(Q)||c4(J),parseFile:(Q)=>gZ(Q.content,HL(Q,$?.workspacePath)),resolveId:(Q)=>hZ(Q.name)}}function pZ($){let W=$?.directories??uZ($?.workspacePath),Z=$?.workspacePath?y0($.workspacePath,".cline"):void 0;return{type:"workflow",directories:Z?[...W,Z]:W,discoverFiles:GL,includeFile:(Q)=>c4(Q),parseFile:(Q)=>mZ(Q.content,O1(Q.filePath,v4(Q.filePath))),resolveId:(Q)=>hZ(Q.name)}}function SX($){let W=[dZ($?.skills),lZ($?.rules),pZ($?.workflows)];return new M8(W,{debounceMs:$?.debounceMs,emitParseErrors:$?.emitParseErrors})}import{truncateSplit as bX}from"@cline/shared";function KL($,W){if($.description?.trim())return bX($.description,".");if(W==="workflow")return;return bX($.instructions,".")}function FL($){return $.disabled!==!0}function yX($,W){return[...$.getSnapshot(W).entries()].map(([Z,Q])=>({id:Z,record:Q})).filter(({record:Z})=>FL(Z.item)).map(({id:Z,record:Q})=>({id:Z,name:Q.item.name,instructions:Q.item.instructions,description:KL(Q.item,W),kind:W})).sort((Z,Q)=>Z.name.localeCompare(Q.name))}function P8($){let W=new Map;for(let Z of[...yX($,"workflow"),...yX($,"skill")])if(!W.has(Z.name))W.set(Z.name,Z);return[...W.values()].sort((Z,Q)=>Z.name.localeCompare(Q.name))}function hX($,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=P8(W).find((Y)=>Y.name===Q);return X?`${X.instructions}${j}`:$}function kX($){return $.disabled!==!0}function l4($){if($.length===0)return"";return`
|
|
45
|
+
</html>`;function Xj($){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 nU($){let Z=new TextEncoder().encode($),Q=await crypto.subtle.digest("SHA-256",Z);return new Uint8Array(Q)}function aU($=32){let W=new Uint8Array($);return crypto.getRandomValues(W),Xj(W)}async function H4(){let $=aU(),W=Xj(await nU($));return{verifier:$,challenge:W}}function G4($){return $.endsWith("/")?$.slice(0,-1):$}function N$($,W){return new URL(W,`${G4($)}/`).toString()}function U2($,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 D2($){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 _2($,W){return Date.now()>=$.expires-W}async function f2($){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 U2(W,$.parseOptions);if(await Q,Z)throw Z;if(W)return U2(W,$.parseOptions);return{}}var K4={authorize:"/api/v1/auth/authorize",token:"/api/v1/auth/token",register:"/api/v1/auth/register",refresh:"/api/v1/auth/refresh"},Hj={deviceAuthorization:"/user_management/authorize/device",authenticate:"/user_management/authenticate"},I9="https://api.workos.com",oU="/auth",Yj=Array.from({length:11},($,W)=>48801+W),sU=300000,tU=30000,L2=30000,eU=300,$D=5;class X1 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 WD($){let W=Date.parse($);if(Number.isNaN(W))throw Error(`Invalid expiresAt value: ${$}`);return W}function x9($,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:WD($.expiresAt),accountId:Q??void 0,email:$.userInfo.email||Z.email,metadata:j}}async function g9($){if(!$)return{};return typeof $==="function"?await $():$}function Vj($,W){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return W;return Math.floor($)}async function Bj($){await new Promise((W)=>setTimeout(W,$))}function m9($,W){if(!$.success||!$.data?.accessToken)throw Error(W);return $.data}async function Gj($,W){let Z=await fetch(N$(I9,Hj.deviceAuthorization),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({client_id:$}),signal:AbortSignal.timeout(W?.requestTimeoutMs??L2)}),Q=await Z.json().catch(()=>({}));if(!Z.ok)throw new X1(`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:Vj(Q.expires_in,eU),pollIntervalSeconds:Vj(Q.interval,$D)}}async function Kj($){let W=Date.now()+$.expiresInSeconds*1000,Z=Math.max(1,$.initialPollIntervalSeconds);while(Date.now()<=W){let Q=await fetch(N$($.workosApiBaseUrl,Hj.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 Bj(Z*1000);break}case"slow_down":{Z+=1,await Bj(Z*1000);break}case"access_denied":case"expired_token":case"invalid_grant":throw new X1(J.error_description||"WorkOS authorization failed",{status:Q.status,errorCode:J.error});default:throw new X1(`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 Fj($,W,Z){let Q={accessToken:$.accessToken,refreshToken:$.refreshToken},J=await fetch(N$(W.apiBaseUrl,K4.register),{method:"POST",headers:{"Content-Type":"application/json",...await g9(W.headers)},body:JSON.stringify(Q),signal:AbortSignal.timeout(W.requestTimeoutMs??L2)});if(!J.ok){let X=await J.text().catch(()=>""),Y=D2(X);throw new X1(`Token registration failed: ${J.status}${Y.message?` - ${Y.message}`:""}`,{status:J.status,errorCode:Y.code})}let j=await J.json();return x9(m9(j,"Invalid token exchange response"),Z??W.provider,{metadata:{sessionStartedAtMs:Date.now()}})}async function ZD($,W,Z,Q){let J={grant_type:"authorization_code",code:$,client_type:"extension",redirect_uri:W,provider:Q??Z.provider},j=await fetch(N$(Z.apiBaseUrl,K4.token),{method:"POST",headers:{"Content-Type":"application/json",...await g9(Z.headers)},body:JSON.stringify(J),signal:AbortSignal.timeout(Z.requestTimeoutMs??L2)});if(!j.ok){let Y=await j.text().catch(()=>""),V=D2(Y);throw new X1(`Token exchange failed: ${j.status}${V.message?` - ${V.message}`:""}`,{status:j.status,errorCode:V.code})}let X=await j.json();return x9(m9(X,"Invalid token exchange response"),Q??Z.provider,{metadata:{sessionStartedAtMs:Date.now()}})}async function v9($){m1($.telemetry,$.provider??"cline");let W=$.useWorkOSDeviceAuth??!0,Z=$.callbackPorts?.length?$.callbackPorts:Yj,Q=$.callbackPath??oU,J=W?null:await _1({ports:Z,callbackPath:Q,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),j=J?.callbackUrl||`http://127.0.0.1:${Z[0]??Yj[0]}${Q}`;try{let X;if(W){let Y=k9().workOsClientId,V=await Gj(Y,$);$.callbacks.onAuth({url:V.verificationUriComplete??V.verificationUri,instructions:`Enter this code in your browser: ${V.userCode}`});let B=await Kj({clientId:Y,deviceCode:V.deviceCode,expiresInSeconds:V.expiresInSeconds,initialPollIntervalSeconds:V.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??L2,workosApiBaseUrl:I9,onProgress:$.callbacks.onProgress});X=await Fj(B,$,$.provider)}else{let Y=new URL(N$($.apiBaseUrl,K4.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 f2({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=U2(G,{includeProvider:!0});V=K.code,B=K.provider??B}if(!V)throw Error("Missing authorization code");X=await ZD(V,j,$,B)}return v1($.telemetry,$.provider??"cline"),u1($.telemetry,{id:X.accountId,email:X.email,provider:$.provider??"cline"}),X}catch(X){throw c1($.telemetry,$.provider??"cline",X instanceof Error?X.message:String(X)),X}finally{J?.close()}}async function QD($){return await Gj(k9().workOsClientId,$)}async function JD($){let W=$.provider??"cline";m1($.telemetry,W);try{let Z=await Kj({clientId:k9().workOsClientId,deviceCode:$.deviceCode,expiresInSeconds:$.expiresInSeconds,initialPollIntervalSeconds:$.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??L2,workosApiBaseUrl:I9}),Q=await Fj(Z,{apiBaseUrl:$.apiBaseUrl,headers:$.headers,requestTimeoutMs:$.requestTimeoutMs,provider:$.provider},$.provider);return v1($.telemetry,W),u1($.telemetry,{id:Q.accountId,email:Q.email,provider:W}),Q}catch(Z){throw c1($.telemetry,W,Z instanceof Error?Z.message:String(Z)),Z}}async function Aj($,W){let Z=N$(W.apiBaseUrl,K4.refresh);s(`cline.refresh.request url=${Z} refreshTokenHash=${P0($.refresh)}`);let Q=await fetch(Z,{method:"POST",headers:{"Content-Type":"application/json",...await g9(W.headers)},body:JSON.stringify({refreshToken:$.refresh,grantType:"refresh_token"}),signal:AbortSignal.timeout(W.requestTimeoutMs??L2)});if(!Q.ok){let Y=await Q.text().catch(()=>""),V=D2(Y);throw s(`cline.refresh.error status=${Q.status} errorCode=${V.code??"none"} message=${V.message??"none"}`),new X1(`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=x9(m9(J,"Invalid token refresh response"),j,$);return s(`cline.refresh.success newAccessTokenHash=${P0(X.access)} newRefreshTokenHash=${P0(X.refresh)} expires=${X.expires}`),X}async function c9($,W,Z){if(!$)return s("cline.getCredentials outcome=no_current_credentials"),null;let Q=Z?.refreshBufferMs??sU,J=Z?.retryableTokenGraceMs??tU,j=Z?.forceRefresh===!0;if(!j&&!_2($,Q))return s(`cline.getCredentials outcome=still_valid forceRefresh=${j}`),$;s(`cline.getCredentials outcome=needs_refresh forceRefresh=${j} accessTokenHash=${P0($.access)}`);try{return await Aj($,W)}catch(X){let Y={status:X instanceof X1?X.status:void 0,errorCode:X instanceof X1?X.errorCode:void 0,errorName:X instanceof Error?X.name:void 0};if(X instanceof X1&&X.isLikelyInvalidGrant())return s(`cline.getCredentials outcome=invalid_grant status=${X.status} errorCode=${X.errorCode??"none"}`),M$(W.telemetry,W.provider??"cline","invalid_grant",{status:X.status,errorCode:X.errorCode}),null;if($.expires-Date.now()>J)return s(`cline.getCredentials outcome=transient_failure_kept_current error=${X instanceof Error?X.message:String(X)}`),T9(W.telemetry,W.provider??"cline",{...Y,tokenExpired:!1}),$;throw s(`cline.getCredentials outcome=transient_failure_rethrown error=${X instanceof Error?X.message:String(X)}`),T9(W.telemetry,W.provider??"cline",{...Y,tokenExpired:!0}),X}}F0();import{decodeJwtPayload as u9}from"@cline/shared";import{nanoid as jD}from"nanoid";var j0={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 F4 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 XD($,W,Z=j0.redirectUri){let Q=await fetch(j0.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"authorization_code",client_id:j0.clientId,code:$,code_verifier:W,redirect_uri:Z}),signal:AbortSignal.timeout(j0.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 YD($){try{let W=await fetch(j0.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:$,client_id:j0.clientId}),signal:AbortSignal.timeout(j0.httpTimeoutMs)});if(!W.ok){let Q=await W.text().catch(()=>""),J=D2(Q);throw new F4(`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 F4)throw W;return{type:"failed"}}}async function VD($="pi"){let{verifier:W,challenge:Z}=await H4(),Q=jD(32),J=new URL(j0.authorizationEndpoint);return J.searchParams.set("response_type","code"),J.searchParams.set("client_id",j0.clientId),J.searchParams.set("redirect_uri",j0.redirectUri),J.searchParams.set("scope",j0.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 BD(){try{let $=new URL(j0.redirectUri),W=$.port.length>0?Number.parseInt($.port,10):j0.callbackPort;return{host:$.hostname||"localhost",port:Number.isFinite(W)?W:j0.callbackPort,callbackPath:$.pathname||"/auth/callback",redirectUri:$.toString()}}catch{return{host:"localhost",port:j0.callbackPort,callbackPath:"/auth/callback",redirectUri:j0.redirectUri}}}function HD($,W){let Z=W?u9(W):u9($),Q=Z?Z:u9($),j=Q?.[j0.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 Uj($,W){let Z=HD($.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 d9($){m1($.telemetry,"openai-codex");let W=BD(),{verifier:Z,state:Q,url:J}=await VD($.originator),j=await _1({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 f2({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=U2(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 XD(X,Z,W.redirectUri);if(V.type!=="success")throw Error("Token exchange failed");let B=Uj(V);return v1($.telemetry,"openai-codex"),u1($.telemetry,{id:B.accountId,email:B.email,provider:"openai-codex"}),B}catch(Y){throw c1($.telemetry,"openai-codex",Y instanceof Error?Y.message:String(Y)),Y}finally{j.close()}}async function Dj($,W){let Z=await YD($);if(Z.type!=="success")throw Error("Failed to refresh OpenAI Codex token");let Q=Uj(Z,W);if(!Q.refresh)throw Error("Failed to refresh OpenAI Codex token: missing refresh token");return Q}async function l9($,W){if(!$)return null;let Z=W?.refreshBufferMs??j0.refreshBufferMs,Q=W?.retryableTokenGraceMs??j0.retryableTokenGraceMs;if(W?.forceRefresh!==!0&&!_2($,Z))return $;try{return await Dj($.refresh,$)}catch(j){if(j instanceof F4&&j.isLikelyInvalidGrant())return M$(W?.telemetry,"openai-codex","invalid_grant"),null;if($.expires-Date.now()>Q)return $;return null}}F0();import{decodeJwtPayload as O8}from"@cline/shared";import{nanoid as _j}from"nanoid";class p9{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 GD="a8331954c0cf48ba99b5dd223a14c6ea",KD="https://idcs-9dc693e80d9b469480d7afe00e743931.identity.oraclecloud.com",FD="openid offline_access",i9="https://code-internal.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",AD="c1aba3deed5740659981a752714eba33",UD="https://login-ext.identity.oraclecloud.com",DD="openid offline_access",n9="https://code.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm";var _D="/auth/oca",fD=Array.from({length:11},($,W)=>48801+W),LD=300000,TD=30000,fj=30000,OD=600000;class A4 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 d1={internal:{clientId:GD,idcsUrl:KD,scopes:FD,baseUrl:i9},external:{clientId:AD,idcsUrl:UD,scopes:DD,baseUrl:n9}},z8=new Map,zD=86400000,qD=300000,MD=32,r9=new p9(zD,MD);function Lj($){if(typeof $==="function")return $();return $??"internal"}function Tj($){return{internal:{clientId:$?.internal?.clientId??d1.internal.clientId,idcsUrl:$?.internal?.idcsUrl??d1.internal.idcsUrl,scopes:$?.internal?.scopes??d1.internal.scopes,baseUrl:$?.internal?.baseUrl??d1.internal.baseUrl},external:{clientId:$?.external?.clientId??d1.external.clientId,idcsUrl:$?.external?.idcsUrl??d1.external.idcsUrl,scopes:$?.external?.scopes??d1.external.scopes,baseUrl:$?.external?.baseUrl??d1.external.baseUrl}}}function RD($=Date.now()){let W=$-OD;for(let[Z,Q]of z8.entries())if(Q.createdAt<W)z8.delete(Z)}function ND($,W,Z){if(typeof $.expires_in==="number"&&$.expires_in>0)return Date.now()+$.expires_in*1000;let J=O8(W)?.exp;if(typeof J==="number"&&J>0)return J*1000;let X=O8(Z)?.exp;if(typeof X==="number"&&X>0)return X*1000;return Date.now()+3600000}function Oj($,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=O8($.id_token),X=O8(Q),Y=j?.sub??X?.sub,V=j?.email??X?.email;return{access:Q,refresh:J,expires:ND($,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 zj($,W){let Z=G4($),Q=r9.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 r9.set(Z,V,Date.now(),qD),V}let Y=(await j.json()).token_endpoint||`${Z}/oauth2/v1/token`;return r9.set(Z,Y),Y}function qj($){return{code:$.error,message:$.error_description}}async function ED($){let W=z8.get($.state);if(!W)throw Error("No PKCE verifier found for this state");z8.delete($.state);let Z=$.mode==="external"?$.config.external:$.config.internal,Q=await zj(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=qj(X);throw new A4(`Token exchange failed: ${j.status}${V.message?` - ${V.message}`:""}`,{status:j.status,errorCode:V.code})}let Y=O8(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 Oj(X,$.mode)}function wD($){let W=$.mode==="external"?$.config.external:$.config.internal,Z=new URL(`${G4(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 a9($){m1($.telemetry,"oca");let W=Tj($.config),Z=Lj($.mode),Q=$.callbackPorts?.length?$.callbackPorts:fD,J=$.callbackPath??_D,j=$.requestTimeoutMs??fj,X=await _1({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=_j(16),B=_j(16),{verifier:H,challenge:G}=await H4();RD(),z8.set(V,{verifier:H,nonce:B,mode:Z,redirectUri:Y,createdAt:Date.now()});let K=wD({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 f2({waitForCallback:X.waitForCallback,cancelWait:X.cancelWait,onManualCodeInput:$.callbacks.onManualCodeInput}),A=F.code,D=F.state;if(F.error)throw Error(`OAuth error: ${F.error}`);if(!A){if(!$.callbacks.onManualCodeInput)throw Error("Timed out waiting for OCA callback");throw Error("Missing authorization code")}if(!D||D!==V)throw Error("State mismatch");let U=await ED({code:A,state:D,mode:Z,config:W,requestTimeoutMs:j});return v1($.telemetry,"oca"),u1($.telemetry,{id:U.accountId,email:U.email,provider:"oca"}),U}catch(F){throw c1($.telemetry,"oca",F instanceof Error?F.message:String(F)),F}finally{X.close()}}async function Mj($,W={}){let Z=Tj(W.config),Q=W.requestTimeoutMs??fj,J=$.metadata?.mode,j=J==="internal"||J==="external"?J:Lj(W.mode),X=j==="external"?Z.external:Z.internal,Y=await zj(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=qj(H);throw new A4(`Token refresh failed: ${B.status}${G.message?` - ${G.message}`:""}`,{status:B.status,errorCode:G.code})}return Oj(H,j,$)}async function o9($,W,Z){if(!$)return null;let Q=W?.refreshBufferMs??Z?.refreshBufferMs??LD,J=W?.retryableTokenGraceMs??Z?.retryableTokenGraceMs??TD;if(W?.forceRefresh!==!0&&!_2($,Q))return $;try{return await Mj($,Z)}catch(X){if(X instanceof A4&&X.isLikelyInvalidGrant())return M$(Z?.telemetry,"oca","invalid_grant"),null;if($.expires-Date.now()>J)return $;return null}}import{decodeJwtPayload as CD,getClineEnvironmentConfig as Rj}from"@cline/shared";var U4="workos:";function PD($){let W=$.trim();return W.toLowerCase().startsWith(U4)?W:`${U4}${W}`}function SD($){let W=$.trim();return W.toLowerCase().startsWith(U4)?W.slice(U4.length):W}function bD($){let Z=CD($)?.exp;if(typeof Z==="number"&&Z>0)return Z*1000;return null}function yD($,W){let Z=$.auth?.expiresAt;if(typeof Z==="number"&&Number.isFinite(Z)&&Z>0)return Z;let Q=bD(W);if(Q)return Q;return Date.now()-1}function hD($,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:yD($,J),accountId:$.auth?.accountId,metadata:$.auth?.metadata}}function kD($){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 s9($){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 kD({...Z,storageProviderId:W,formatAccessToken:$.formatAccessToken})},isConfigured(Z){return!!Z?.auth?.accessToken},normalizeStoredAccessToken:$.normalizeStoredAccessToken}}function Nj($){return s9({providerId:$.providerId,storageProviderId:$.storageProviderId,formatAccessToken:PD,normalizeStoredAccessToken:SD,login:({settings:W,callbacks:Z,telemetry:Q})=>v9({apiBaseUrl:W?.baseUrl?.trim()||Rj().apiBaseUrl,useWorkOSDeviceAuth:!0,callbacks:Z,telemetry:Q}),refresh:({settings:W,credentials:Z,forceRefresh:Q,telemetry:J})=>c9(Z,{apiBaseUrl:W.baseUrl?.trim()||Rj().apiBaseUrl,telemetry:J},{forceRefresh:Q})})}var ID=[Nj({providerId:"cline"}),Nj({providerId:"cline-pass",storageProviderId:"cline"}),s9({providerId:"oca",login:({settings:$,callbacks:W,telemetry:Z})=>a9({mode:$?.oca?.mode,callbacks:W,telemetry:Z}),refresh:({settings:$,credentials:W,forceRefresh:Z,telemetry:Q})=>o9(W,{forceRefresh:Z,telemetry:Q},{mode:$.oca?.mode,telemetry:Q})}),s9({providerId:"openai-codex",login:({callbacks:$,telemetry:W})=>d9({onAuth:$.onAuth,onPrompt:$.onPrompt,onProgress:$.onProgress,onManualCodeInput:$.onManualCodeInput,telemetry:W}),refresh:({credentials:$,forceRefresh:W,telemetry:Z})=>l9($,{forceRefresh:W,telemetry:Z})})],xD=new Map(ID.map(($)=>[$.providerId,$]));function A0($){return xD.get($.trim().toLowerCase())}function T2($){return A0($)!==void 0}function gD($){return A0($)?.storageProviderId}function mD($,W){let Z=A0(W),Q=Z?.storageProviderId??W,J=$.getProviderSettings(Q);return Z?.getApiKey(J)??D4(W,J)}async function t9($,W,Z){let Q=A0(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 e9($,W){let Z=A0($);if(!Z)return null;return hD(W,{normalizeAccessToken:Z.normalizeStoredAccessToken})}function q8($){let W=A0($.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 D4($,W){let Z=A0($);if(Z)return Z.getApiKey(W);return W?.auth?.accessToken?.trim()||W?.apiKey?.trim()||W?.auth?.apiKey?.trim()||void 0}function vD($,W){let Z=A0($);if(!Z)return W.access;return Z.getApiKey({provider:Z.storageProviderId,auth:{accessToken:W.access}})??W.access}import*as c0 from"@cline/llms";import{z as R}from"zod";import*as t from"@cline/llms";function $Z($){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 cD($,W){let Z=$Z($);if(Z.length>0)return Z;if(!$||typeof $!=="object")return[];let Q=$,J=$Z(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=$Z(j.models??j);if(Y.length>0)return Y}return[]}async function _4($,W){let Z=await fetch($,{method:"GET"});if(!Z.ok)throw Error(`failed to fetch models from ${$}: HTTP ${Z.status}`);return cD(await Z.json(),W)}function Ej($){return $.replace(/\/+$/,"")}function f4($,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=Ej(X.pathname),B=Ej(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 uD($){return Object.fromEntries(Object.entries($).map(([W,Z])=>[W,{...Z}]))}function dD($){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 lD=Object.values(t.MODEL_COLLECTIONS_BY_PROVIDER_ID).map(($)=>({id:$.provider.id,baseUrl:$.provider.baseUrl??"",modelsSourceUrl:$.provider.modelsSourceUrl,modelId:$.provider.defaultModelId,knownModels:uD($.models),capabilities:$.provider.capabilities?[...$.provider.capabilities]:void 0,env:$.provider.env?[...$.provider.env]:void 0,client:$.provider.client,protocol:$.provider.protocol})),Pj=Object.fromEntries(lD.map(($)=>[$.id,$]));function pD($){return Pj[$]}function rD(){return Object.fromEntries(Object.entries(Pj).filter(([,$])=>dD($)))}function Sj($=[]){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 bj="https://models.dev/api.json",iD=600000,yj=300000,nD=5000,T4=new Map,M8=new Map,ZZ=new Map,L4=new Map;async function aD(){return t.getGeneratedProviderModels()}async function oD($,W={},Z={},Q={},J={},j={}){if($==="litellm")return t.sortModelsByReleaseDate(Q);let X=await aD(),Y=t.resolveProviderModelCatalogKeys($),V=Object.assign({},...Y.map((G)=>X[G]??{}));if(Boolean(t.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl))return t.sortModelsByReleaseDate({...J,...j});if($==="openai-codex")return t.sortModelsByReleaseDate({...W,...t.filterOpenAICodexModels(Z),...J,...j});if($==="cline-pass"&&Object.keys(Z).length>0)return{...Z,...j};let H=t.sortModelsByReleaseDate({...V,...W,...Z,...Q,...J});if($==="cline")return t.sortModelsByReleaseDate({...t.preferCanonicalModelIds(H,t.VERCEL_OPENROUTER_MODEL_ID_ALIAS_RULES),...j});return t.sortModelsByReleaseDate({...H,...j})}function sD($,W){let Z=t.resolveProviderModelCatalogKeys($);return Object.assign({},...Z.map((Q)=>W[Q]??{}))}function O4($){let W=$?.trim();return W&&W.length>0?W:""}function QZ($){let W=$.apiKey?.trim()||$.accessToken?.trim();return W&&W.length>0?W:void 0}function tD($){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 eD($,W){return`${$}:${O4(W.baseUrl)}:${tD(QZ(W)??"")}`}async function z4($,W,Z=nD){let Q=new AbortController,J=setTimeout(()=>Q.abort(),Z);try{return await fetch($,{...W,signal:Q.signal})}finally{clearTimeout(J)}}function E$($,W,Z){if(Z&&!$.includes(W))$.push(W)}function q4($,W){let Z=["streaming","tools"];return E$(Z,"images",Boolean(W.supportsImages)),E$(Z,"prompt-cache",Boolean(W.supportsPromptCache)),E$(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 $_($,W){let Z=await z4("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]=q4(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 wj($){if(typeof $==="number")return Number.isFinite($)?$:void 0;if(typeof $==="string"){let W=Number($);return Number.isFinite(W)?W:void 0}return}async function W_($,W){let Z=await z4("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]=q4(Y,{name:Y,maxInputTokens:128000,supportsImages:!0,supportsPromptCache:!0})}return j}async function Z_($,W){let Q=`${(O4($.baseUrl)||"https://inference.poolside.ai/v1").replace(/\/+$/,"")}/models`,J=await z4(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"];E$(F,"tools",H.includes("tools")),E$(F,"reasoning",H.includes("reasoning")),E$(F,"temperature",G.includes("temperature")),E$(F,"images",K.includes("image"));let A={input:wj(V.pricing?.prompt),output:wj(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 Q_($){let W=O4($).replace(/\/+$/,"");if(!W)return"http://localhost:4000";return W.endsWith("/v1")?W.slice(0,-3):W}function J_($){return[`${$}/v1/model/info`,`${$}/model/info`]}async function j_($){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 X_($,W){let Z=Q_($.baseUrl),Q=[],J=[["x-litellm-api-key",{"x-litellm-api-key":W}],["Authorization",{Authorization:`Bearer ${W}`}]];for(let j of J_(Z))for(let[X,Y]of J)try{let V=await z4(j,{method:"GET",headers:{accept:"application/json",...Y}});if(V.ok){let H=(await V.json())?.data??[],G={};for(let K of H){let F=K.model_name?.trim(),D=K.litellm_params?.model?.trim()||F;if(!D)continue;let U=K.model_info,f=q4(D,{name:F??D,maxTokens:U?.max_output_tokens??U?.max_tokens,maxInputTokens:U?.max_input_tokens??U?.max_tokens,supportsImages:U?.supports_vision,supportsPromptCache:U?.supports_prompt_caching,supportsReasoning:U?.supports_reasoning});if(G[D]=f,F)G[F]={...f,id:F,name:F}}return G}Q.push(`${new URL(j).pathname} (${X}): ${await j_(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 hj={baseten:$_,hicap:W_,litellm:X_,poolside:Z_},Cj=new Map,WZ=new Map;function Y_($,W){return`${$}:${O4(W.baseUrl)}`}async function V_($,W,Z){let Q=t.MODEL_COLLECTIONS_BY_PROVIDER_ID[$],J=f4(Z.baseUrl,Q?.provider.baseUrl,Q?.provider.modelsSourceUrl);if(!J)return{};let j=W?.cacheTtlMs??yj,X=Y_($,Z),Y=Date.now(),V=Cj.get(X);if(V&&V.expiresAt>Y)return V.data;let B=WZ.get(X);if(B)return B;let H=_4(J,$).then((G)=>{let K=Object.fromEntries(G.map((F)=>[F,q4(F,{name:F})]));return Cj.set(X,{data:K,expiresAt:Y+j}),K}).finally(()=>{WZ.delete(X)});return WZ.set(X,H),H}async function B_($,W){let Z=QZ(W);if(!Z)return{};let Q=hj[$];if(!Q)return{};return Q(W,Z)}function H_($,W,Z){if(!Z)return!1;if(!hj[$])return!1;if(W?.loadPrivateOnAuth===!1)return!1;return Boolean(QZ(Z))}async function G_($,W,Z){let Q=W?.cacheTtlMs??yj,J=eD($,Z),j=Date.now(),X=ZZ.get(J);if(X&&X.expiresAt>j)return X.data;let Y=L4.get(J);if(Y)return Y;let V=B_($,Z).then((B)=>{return ZZ.set(J,{data:B,expiresAt:j+Q}),B}).finally(()=>{L4.delete(J)});return L4.set(J,V),V}async function K_($){return t.fetchLiveProviderModels($,globalThis.fetch)}async function M4($={}){let W=$.url??bj,Z=$.cacheTtlMs??iD,Q=Date.now(),J=T4.get(W);if(J&&J.expiresAt>Q)return J.data;let j=M8.get(W);if(j)return j;let X=K_(W).then((Y)=>{return T4.set(W,{data:Y,expiresAt:Q+Z}),Y}).finally(()=>{M8.delete(W)});return M8.set(W,X),X}function F_($){if($){T4.delete($),M8.delete($);return}T4.clear(),M8.clear()}function A_(){ZZ.clear(),L4.clear()}function U_($){return Object.fromEntries(Object.entries($).map(([W,Z])=>[W,{baseUrl:Z.baseUrl,modelId:Z.modelId,capabilities:Sj(Z.capabilities)}]))}var JZ=U_(rD());function kj($){let W=pD($);if(!W)return;return{baseUrl:W.baseUrl||void 0,modelId:W.modelId,knownModels:W.knownModels,capabilities:Sj(W.capabilities)}}async function jZ($,W,Z){let Q=kj($);if(!Q)return;try{let J=W?.loadLatestOnInit?await M4(W):void 0,j=J?sD($,J):{},X=Z&&H_($,W,Z)?await G_($,W,Z):{},V=Boolean(t.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl)?Z??{providerId:$,modelId:Q.modelId,baseUrl:Q.baseUrl}:Z,B=V?await V_($,W,V).catch(()=>({})):{},H=await oD($,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 XZ=c0.BUILT_IN_PROVIDER,D_=c0.BUILT_IN_PROVIDER_IDS,__=c0.isBuiltInProviderId,R4=c0.normalizeProviderId,YZ=R.string().min(1).regex(/^[a-z0-9][a-z0-9-]*$/i),Ij=R.enum(["anthropic","gemini","openai-chat","openai-responses","openai-r1","ai-sdk"]),xj=R.enum(["anthropic","ai-sdk","ai-sdk-community","openai","openai-compatible","openai-r1","gemini","bedrock","custom","fetch","vertex"]),gj=R.object({apiKey:R.string().optional(),accessToken:R.string().optional(),refreshToken:R.string().optional(),expiresAt:R.number().int().positive().optional(),accountId:R.string().optional(),organizationId:R.string().optional(),organizationName:R.string().optional(),memberId:R.string().optional(),metadata:R.record(R.string(),R.unknown()).optional()}),f_=R.enum(["none","low","medium","high","xhigh"]),mj=R.object({enabled:R.boolean().optional(),effort:f_.optional(),budgetTokens:R.number().int().positive().optional()}),vj=R.object({accessKey:R.string().optional(),secretKey:R.string().optional(),sessionToken:R.string().optional(),region:R.string().optional(),profile:R.string().optional(),authentication:R.enum(["iam","api-key","apikey","profile"]).optional(),usePromptCache:R.boolean().optional(),useCrossRegionInference:R.boolean().optional(),useGlobalInference:R.boolean().optional(),endpoint:R.string().url().optional(),customModelBaseId:R.string().optional()}),cj=R.object({projectId:R.string().optional(),region:R.string().optional()}),uj=R.object({apiVersion:R.string().optional(),useIdentity:R.boolean().optional()}),dj=R.object({clientId:R.string().optional(),clientSecret:R.string().optional(),tokenUrl:R.string().url().optional(),resourceGroup:R.string().optional(),deploymentId:R.string().optional(),useOrchestrationMode:R.boolean().optional(),api:R.enum(["orchestration","foundation-models"]).optional(),defaultSettings:R.record(R.string(),R.unknown()).optional()}),lj=R.object({mode:R.enum(["internal","external"]).optional(),usePromptCache:R.boolean().optional()}),pj=R.object({loadLatestOnInit:R.boolean().optional(),loadPrivateOnAuth:R.boolean().optional(),url:R.string().url().optional(),cacheTtlMs:R.number().int().positive().optional(),failOnError:R.boolean().optional()}),O2=R.object({provider:YZ,apiKey:R.string().optional(),auth:gj.optional(),model:R.string().optional(),protocol:Ij.optional(),client:xj.optional(),routingProviderId:YZ.optional(),maxTokens:R.number().int().positive().optional(),contextWindow:R.number().int().positive().optional(),baseUrl:R.string().url().optional(),headers:R.record(R.string(),R.string()).optional(),timeout:R.number().int().positive().optional(),reasoning:mj.optional(),aws:vj.optional(),gcp:cj.optional(),azure:uj.optional(),sap:dj.optional(),oca:lj.optional(),region:R.string().optional(),apiLine:R.enum(["china","international"]).optional(),capabilities:R.array(R.enum(["reasoning","prompt-cache","streaming","tools","vision","computer-use","oauth","popular"])).optional(),modelCatalog:pj.optional()});function rj($){return O2.parse($)}function ij($){return O2.safeParse($)}function L_($){return $.protocol==="openai-responses"||$.client==="openai"}function f1($,W={}){let Z=$.provider,Q=R4(Z),J=W.includeKnownModels!==!1,j=$.reasoning?.effort||"none",X=j==="none"?void 0:j,Y=JZ[Q],V=Object.assign({},...c0.resolveProviderModelCatalogKeys(Q).map((D)=>c0.getGeneratedModelsForProvider(D))),B=Object.keys(V)[0],H=D4(Q,$),G=$.baseUrl??(Q==="oca"?$.oca?.mode==="internal"?i9:n9:Y?.baseUrl),K=$.routingProviderId??(L_($)&&Q!==XZ.OPENAI_NATIVE?XZ.OPENAI_NATIVE:void 0),F=J?Y?.knownModels??(Object.keys(V).length>0?V:void 0):void 0,A={providerId:Z,clientType:$.client,routingProviderId:K,modelId:$.model??Y?.modelId??B??"default",...J?{knownModels:F}:{},apiKey:H,accessToken:$.auth?.accessToken,refreshToken:$.auth?.refreshToken,accountId:$.auth?.accountId,baseUrl:G,headers:$.headers,timeoutMs:$.timeout,maxOutputTokens:$.maxTokens,maxInputTokens:$.contextWindow,thinking:$.reasoning?.enabled,reasoningEffort:X,thinkingBudgetTokens:$.reasoning?.budgetTokens,region:$.region??$.aws?.region??$.gcp?.region,apiLine:$.apiLine,useCrossRegionInference:$.aws?.useCrossRegionInference,useGlobalInference:$.aws?.useGlobalInference,aws:$.aws?{accessKey:$.aws.accessKey,secretKey:$.aws.secretKey,sessionToken:$.aws.sessionToken,authentication:$.aws.authentication,profile:$.aws.profile,usePromptCache:$.aws.usePromptCache,endpoint:$.aws.endpoint,customModelBaseId:$.aws.customModelBaseId}:void 0,gcp:$.gcp?{projectId:$.gcp.projectId,region:$.gcp.region}:void 0,azure:$.azure,sap:$.sap,oca:$.oca,capabilities:$.capabilities??Y?.capabilities,modelCatalog:$.modelCatalog?{loadLatestOnInit:$.modelCatalog.loadLatestOnInit,loadPrivateOnAuth:$.modelCatalog.loadPrivateOnAuth,url:$.modelCatalog.url,cacheTtlMs:$.modelCatalog.cacheTtlMs,failOnError:$.modelCatalog.failOnError}:void 0};return Object.fromEntries(Object.entries(A).filter(([D,U])=>U!==void 0))}function T_($){let W=rj($);return f1(W)}function O_($){let W=ij($);if(W.success)return{success:!0,config:f1(W.data)};return{success:!1,error:W.error}}import{SESSION_STATUS_VALUES as z_}from"@cline/shared";var VZ=z_,q_=["idle","running","pending"];function M_($){return!q_.includes($)}function B0($){return!M_($)}var U0={CORE:"core",CLI:"cli",SUBAGENT:"subagent",DESKTOP:"desktop",KANBAN:"kanban",API:"api",WEB:"web",VSCODE:"vscode",ENTERPRISE:"enterprise",IDE:"ide",JETBRAINS:"jetbrains",NEOVIM:"neovim",UNKNOWN:"unknown"};function nj($){if($===!0)return{};if(!$)return;return $}function aj($){if($==="user")return"global";return $}class BZ{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 oj($){let{host:W}=$;return{async startSession(Z){let Q=(Z.cwd?.trim()||Z.workspaceRoot).trim(),J=await W.startSession({source:Z.source?.trim()||U0.CLI,interactive:!1,config:{providerId:R4(Z.provider),modelId:Z.model,apiKey:Z.apiKey?.trim()||void 0,cwd:Q,workspaceRoot:Z.workspaceRoot,systemPrompt:Z.systemPrompt??"",mode:E_(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:N_(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 N4($){let W=R_($.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 R_($,W){if(!$)return;return{ingestEvent:(Z)=>{W.ingestEvent(Z)}}}function N_($){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 E_($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}import{existsSync as J6,readFileSync as cq}from"node:fs";import{basename as SQ,dirname as BB,extname as uq,isAbsolute as KB,join as dq,relative as FB,resolve as HB}from"node:path";import{createHash as w_}from"node:crypto";import{watch as C_}from"node:fs";import{readdir as P_,readFile as S_}from"node:fs/promises";import{join as b_}from"node:path";function y_($){return w_("sha1").update($).digest("hex")}function ej($){return Boolean($&&typeof $==="object"&&"code"in $)}function sj($){return ej($)&&$.code==="ENOENT"}function tj($){return ej($)&&($.code==="EACCES"||$.code==="EPERM")}class R8{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=C_(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(!sj(Z)&&!tj(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 S_(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:y_(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 P_($,{withFileTypes:!0})).filter((Z)=>Z.isFile()).map((Z)=>({directoryPath:$,fileName:Z.name,filePath:b_($,Z.name)})).sort((Z,Q)=>Z.fileName.localeCompare(Q.fileName))}catch(W){if(sj(W)||tj(W))return[];throw W}}}import{readdir as SZ,readFile as $L,stat as PZ}from"node:fs/promises";import{basename as O1,dirname as WL,extname as v4,join as k0,resolve as P8}from"node:path";import{stripUtf8Bom as ZL}from"@cline/shared";import{AGENTS_RULES_FILE_NAME as wX,RULES_CONFIG_DIRECTORY_NAME as CX,resolveGlobalAgentsRulesPath as QL,resolveRulesConfigSearchPaths as JL,resolveSkillsConfigSearchPaths as jL,resolveWorkflowsConfigSearchPaths as XL,SKILLS_CONFIG_DIRECTORY_NAME as bZ,WORKFLOWS_CONFIG_DIRECTORY_NAME as yZ}from"@cline/shared/storage";import YL from"yaml";$1();import{existsSync as I4,readFileSync as vf,statSync as cf}from"node:fs";import{basename as uf,dirname as h4,join as x4,resolve as k4}from"node:path";import{discoverPluginModulePaths as df,resolveConfiguredPluginModulePaths as qX,resolvePluginConfigSearchPaths as lf,SKILLS_CONFIG_DIRECTORY_NAME as pf}from"@cline/shared/storage";import{resolve as _f}from"node:path";import{normalizePluginManifest as ff}from"@cline/shared";import{existsSync as _0,readFileSync as q2}from"node:fs";import{builtinModules as t_,createRequire as _Z}from"node:module";import{dirname as p1,extname as E8,isAbsolute as e_,resolve as i}from"node:path";import{fileURLToPath as jX}from"node:url";import{PLUGIN_FILE_EXTENSIONS as $f}from"@cline/shared";var XX=p1(jX(import.meta.url)),Wf=_Z(import.meta.url),Zf=i(XX,"..","..","..","..",".."),AZ=jf(Zf),Qf=["@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"],fZ=new Set(t_.flatMap(($)=>[$,$.replace(/^node:/,"")])),N8=new Set($f),Jf=["development","node","import","require","default"];function jf($){let W={},Z={"@cline/sdk":i($,"packages/sdk/src/index.ts"),"@cline/agents":i($,"packages/agents/src/index.ts"),"@cline/core":i($,"packages/core/src/index.ts"),"@cline/llms":i($,"packages/llms/src/index.ts"),"@cline/shared":i($,"packages/shared/src/index.ts"),"@cline/shared/storage":i($,"packages/shared/src/storage/index.ts"),"@cline/shared/db":i($,"packages/shared/src/db/index.ts")};for(let[Q,J]of Object.entries(Z))if(_0(J))W[Q]=J;for(let Q of["agents","core","llms","shared"]){let J=i($,"packages",Q),j=i(J,"package.json");if(!_0(j))continue;try{let X=JSON.parse(q2(j,"utf8"));if(typeof X.name!=="string"||!X.exports)continue;if(typeof X.exports==="string"){let Y=i(J,X.exports);if(_0(Y))W[X.name]=Y;continue}if(typeof X.exports!=="object")continue;for(let[Y,V]of Object.entries(X.exports)){let B=Xf(J,V);if(!B)continue;let H=Y==="."?X.name:`${X.name}/${Y.replace(/^\.\//,"")}`;W[H]=B}}catch{}}return W}function Xf($,W){let Z=LZ(W);if(!Z)return null;let Q=YX($,Z);for(let J of Q)if(_0(J))return J;return null}function LZ($,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 Jf){let J=LZ(Z[Q],W);if(J)return J}return null}function YX($,W){let Z=W.replace(/^\.\//,""),Q=[i($,W)];if(Z.startsWith("dist/")){let J=Z.replace(/^dist\//,"src/").replace(/\.(mjs|cjs|js)$/,"");return[i($,`${J}.ts`),i($,`${J}.tsx`),i($,`${J}.mts`),i($,`${J}.cts`),...Q]}return Q}function Yf($){return Object.fromEntries(Object.entries($).sort(([W],[Z])=>Z.length-W.length))}function S4($){return!($.startsWith(".")||$.startsWith("/")||$.startsWith("file:")||$.startsWith("data:")||$.startsWith("http:")||$.startsWith("https:"))}function z2($){if($.startsWith("@")){let[W,Z]=$.split("/",3);return Z?`${W}/${Z}`:$}return $.split("/",1)[0]??$}function Vf($){let W=z2($);if($===W)return".";return`.${$.slice(W.length)}`}function VX($){return z2($).startsWith("@cline/")}function UZ($,W){let Z=z2(W),Q=p1($);while(!0){let J=i(Q,"node_modules",Z);if(_0(J)||_0(i(J,"package.json")))return!0;let j=i(Q,"..");if(j===Q)return!1;Q=j}}function JX($){return DZ($)!==null}function DZ($){try{return Wf.resolve($)}catch{}return Bf($)}function Bf($){let W=z2($),Z=BX(W);if(!Z)return null;let Q=i(Z,"package.json");try{let J=JSON.parse(q2(Q,"utf8")),j=Vf($),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=LZ(X)??(j==="."&&typeof J.main==="string"?J.main:null);if(!Y)return null;let V=i(Z,Y),B=[V,...YX(Z,Y).filter((H)=>H!==V)];for(let H of B)if(_0(H))return H;return null}catch{return null}}function Hf(){let $=[XX],W=process.env.CLINE_WRAPPER_PATH?.trim();if(W)$.push(p1(p1(W)));let Z=process.execPath?.trim();if(Z)$.push(p1(Z));return[...new Set($.map((Q)=>i(Q)))]}function Gf($,W){let Z=$;while(!0){let Q=i(Z,"package.json");if(_0(Q))try{if(JSON.parse(q2(Q,"utf8")).name===W)return Z}catch{}let J=i(Z,"node_modules",W,"package.json");if(_0(J))return p1(J);let j=i(Z,"..");if(j===Z)return null;Z=j}}function BX($){for(let W of Hf()){let Z=Gf(W,$);if(Z)return Z}return null}function Kf($){let Z=p1($);for(let Q=0;Q<4;Q++){let J=i(Z,"package.json");if(_0(J))try{let X=JSON.parse(q2(J,"utf8"));return X!=null&&typeof X==="object"&&"cline"in X}catch{return!1}let j=i(Z,"..");if(j===Z)return!1;Z=j}return!1}function HX($,W){let Z=W.startsWith("file:")?jX(W):e_(W)?W:i(p1($),W);if(_0(Z)&&N8.has(E8(Z)))return Z;for(let Q of N8){let J=`${Z}${Q}`;if(_0(J))return J}for(let Q of N8){let J=i(Z,`index${Q}`);if(_0(J))return J}return null}function GX($){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 Ff($){return E8($)!==".ts"}function KX($,W,Z=new Set){if(Z.has($)||!_0($))return;if(Z.add($),!N8.has(E8($)))return;let Q=q2($,"utf8"),J=Ff($);for(let j of GX(Q)){if(j.startsWith("node:")||fZ.has(j))continue;if(S4(j)){if(!J)continue;if(Object.hasOwn(AZ,j)||Object.hasOwn(AZ,z2(j))||UZ($,j)||VX(j)&&JX(j)||W&&JX(j))continue;throw Error(`Cannot find module '${z2(j)}'`)}let X=HX($,j);if(X)KX(X,W,Z)}}function FX($,W=new Set,Z=new Set){if(W.has($)||!_0($))return Z;if(W.add($),!N8.has(E8($)))return Z;let Q=q2($,"utf8");for(let J of GX(Q)){if(Z.add(J),S4(J))continue;let j=HX($,J);if(j)FX(j,W,Z)}return Z}function Af($,W){let Z=_Z($),Q={},J=FX($),j=new Set(Qf);for(let[X,Y]of Object.entries(AZ)){try{Z.resolve(X);continue}catch{}Q[X]=Y}for(let X of J)if(S4(X)&&(VX(X)||W))j.add(X);for(let X of j){if(Object.hasOwn(Q,X)||UZ($,X))continue;let Y=DZ(X);if(Y)Q[X]=Y}if(!W)return Q;for(let X of J){if(!S4(X)||Object.hasOwn(Q,X)||UZ($,X)||X.startsWith("node:")||fZ.has(X))continue;let Y=DZ(X);if(Y)Q[X]=Y}return Q}function Uf($){let W=E8($);return W===".ts"||W===".tsx"||W===".mts"||W===".cts"}var C$;function Df(){if(C$!==void 0)return C$;let $=BX("jiti");if(!$)return C$=null,null;let W=i($,"dist","babel.cjs");if(!_0(W))return C$=null,null;try{let Q=_Z(W)(W);C$=typeof Q==="function"?Q:null}catch{C$=null}return C$}async function AX($,W={}){let Z=!Kf($);KX($,Z);let Q=Af($,Z),J=Yf(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])=>Uf(G)).map(([G])=>G),V=Df(),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:[...fZ],transformModules:Y,tryNative:!1,...B?{transform:B}:{}}).import($,{})}function UX($,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 DX($){return typeof $==="object"&&$!==null}function TZ($){return Array.isArray($)&&$.every((W)=>typeof W==="string")}function Lf($,W){if(!DX($.manifest))throw Error(`Invalid plugin module at ${W}: missing required "manifest"`);if(!TZ($.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")&&!TZ($.manifest.providerIds))throw Error(`Invalid plugin module at ${W}: manifest.providerIds must be a string array when provided`);if(Object.hasOwn($.manifest,"modelIds")&&!TZ($.manifest.modelIds))throw Error(`Invalid plugin module at ${W}: manifest.modelIds must be a string array when provided`)}function Tf($,W){if(!DX($))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"`);Lf($,W)}async function OZ($,W={}){let Z=_f(W.cwd??process.cwd(),$),Q=await AX(Z,{useCache:W.useCache}),J=W.exportName??"plugin",j=Q.default??Q[J];Tf(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:ff(X.manifest),setup:V}}async function _X($,W={}){return(await w8($,W)).plugins}async function w8($,W={}){let Z=[],Q=[],J=new Map,j=0;for(let Y of $)try{let V=await OZ(Y,W);if(!UX(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 MZ}from"node:fs";import{createRequire as zX}from"node:module";import{dirname as y4,join as M2}from"node:path";import{fileURLToPath as Ef}from"node:url";import{spawn as Of}from"node:child_process";import{basename as zf}from"node:path";import{augmentNodeCommandForDebug as qf,withResolvedClineBuildEnv as Mf}from"@cline/shared";function fX($){if($ instanceof Error)return $;return Error(String($))}var Rf="CLINE_JS_RUNTIME_PATH";function LX($){let W=$?.trim();if(!W)return!1;let Z=zf(W).toLowerCase();return Z==="node"||Z==="node.exe"||Z==="bun"||Z==="bun.exe"}function TX($={}){let W=$.env??process.env,Z=$.runtimeExecutable?.trim()||W[Rf]?.trim();if(Z)return Z;let Q=$.execPath?.trim()||process.execPath;if(LX(Q))return Q;for(let J of[W.BUN_EXEC_PATH,W.npm_node_execpath,W.NODE]){let j=J?.trim();if(j&&LX(j))return j}return"node"}function Nf($,W={}){let Z=TX({env:W.env,execPath:W.execPath,runtimeExecutable:W.runtimeExecutable});return qf([Z,...$],{env:W.env,execArgv:W.execArgv,debugRole:W.name==="plugin-sandbox"?"plugin-sandbox":"sandbox"})}class b4{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=Nf($,{name:this.options.name,runtimeExecutable:this.options.runtimeExecutable}),Z=Of(W[0]??TX(this.options),W.slice(1),{stdio:["ignore","ignore","pipe","ipc"],env:Mf(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: ${fX(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 "${$}": ${fX(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 wf($){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 C8($){return($ instanceof Error?$.message:String($)).includes("Unknown sandbox plugin id:")}function Cf(){return`@cline/cli-${process.platform==="win32"?"windows":process.platform}-${process.arch}`}function Pf(){let $=process.env.CLINE_WRAPPER_PATH?.trim();if(!$)return;try{let Z=zX($).resolve(`${Cf()}/package.json`),Q=M2(y4(Z),"extensions","plugin-sandbox-bootstrap.js");return MZ(Q)?Q:void 0}catch{return}}function Sf(){let $=process.execPath?.trim();if(!$)return;let W=M2(y4(y4($)),"extensions","plugin-sandbox-bootstrap.js");return MZ(W)?W:void 0}function bf(){let $=y4(Ef(import.meta.url)),W=zX(import.meta.url),Z=[M2($,"plugin-sandbox-bootstrap.js"),M2($,"extensions","plugin-sandbox-bootstrap.js"),M2($,"agents","plugin-sandbox-bootstrap.js"),Pf(),Sf()];for(let j of Z.filter((X)=>typeof X==="string"))if(MZ(j))return{file:j};let Q=M2($,"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(`
|
|
46
|
+
`)}}var zZ=bf();function qZ($,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 R2($){let W=new b4({name:"plugin-sandbox",..."file"in zZ?{bootstrapFile:zZ.file}:{bootstrapScript:zZ.script},onEvent:$.onEvent}),Z=qZ($.importTimeoutMs,4000,"CLINE_PLUGIN_IMPORT_TIMEOUT_MS"),Q=qZ($.hookTimeoutMs,3000),J=qZ($.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(wf);return{extensions:B.map((G)=>{let K={name:G.name,__clinePluginPath:G.pluginPath,manifest:G.manifest,setup:(F)=>{yf(F,W,G,J,Y),hf(F,W,G,J,Y),kf(F,W,G,J,Y),xf(F,W,G,J,Y),If(F,G)}};return K.hooks=mf(W,G,Q,Y),K}),failures:V.failures,pluginPaths:B.map((G)=>G.pluginPath),shutdown:async()=>{await W.shutdown()},warnings:V.warnings}}function yf($,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(!C8(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 hf($,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(!C8(Y))throw Y;return await J(),await W.call("executeCommand",{pluginId:Z.pluginId,contributionId:j.id,input:X},{timeoutMs:Q})}}})}function kf($,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(!C8(X))throw X;return await J(),await W.call("resolveRuleContent",{pluginId:Z.pluginId,contributionId:j.id},{timeoutMs:Q})}}:j.content??""})}function If($,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 xf($,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 OX(Y)?Y:X}catch(Y){if(!C8(Y))throw Y;await J();let V=await W.call("buildMessages",{pluginId:Z.pluginId,contributionId:j.id,messages:X},{timeoutMs:Q});return OX(V)?V:X}}})}function OX($){return Array.isArray($)&&$.every((W)=>typeof W==="object"&&W!==null&&("role"in W)&&("content"in W))}function gf($,W,Z,Q,J){return async(j)=>{try{return await $.call("invokeHook",{pluginId:W,hookName:Z,payload:j},{timeoutMs:Q})}catch(X){if(!C8(X))throw X;return await J(),await $.call("invokeHook",{pluginId:W,hookName:Z,payload:j},{timeoutMs:Q})}}}function mf($,W,Z,Q){let J={};for(let j of W.hooks??[])J[j]=gf($,W.pluginId,j,Z,Q);return Object.keys(J).length>0?J:void 0}var NZ="package.json",rf="package";function EZ($){return lf($)}function wZ($){return df($)}function nf($){try{return I4($)&&cf($).isDirectory()}catch{return!1}}function CZ($){let W=[],Z=new Set;for(let Q of $){let J=k4(Q);if(Z.has(J))continue;Z.add(J),W.push(J)}return W}function MX($){let W=CZ($);return KZ(W)}function RX($){return EZ($).flatMap((W)=>wZ(W)).filter((W)=>I4(W))}function af($,W){let Z=[];for(let Q of $)try{Z.push(...qX([Q],W))}catch{}return Z}function RZ($){return typeof $==="object"&&$!==null}function of($){try{let W=JSON.parse(vf(x4($,NZ),"utf8"));if(!RZ(W)||!RZ(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(!RZ(J)||!Array.isArray(J.paths))continue;for(let j of J.paths)if(typeof j==="string")Q.push(j)}return Q}catch{return[]}}function NX($,W){let Z=k4(W);return of($).some((Q)=>k4($,Q)===Z)}function sf($,W){return uf($)===rf&&I4(x4(h4($),NZ))&&NX(h4($),W)}function tf($){let W=k4($),Z=[],Q=h4(W);while(!0){if(sf(Q,W)){Z.push(Q);break}if(I4(x4(Q,NZ))){if(NX(Q,W))Z.push(Q);break}let J=h4(Q);if(J===Q)break;Q=J}return CZ(Z)}function P$($={}){let W=$.cwd??process.cwd(),Z=RX($.workspacePath),Q=qX($.pluginPaths??[],W);return MX([...Q,...Z])}function ef($={}){let W=$.cwd??process.cwd(),Z=RX($.workspacePath),Q=af($.pluginPaths??[],W);return MX([...Q,...Z])}function S$($){let W=[];for(let Z of $)for(let Q of tf(Z)){let J=x4(Q,pf);if(nf(J))W.push(J)}return CZ(W)}function EX($={}){return S$(ef($))}async function g4($={}){let W=P$($);if(W.length===0)return{extensions:[],failures:[],warnings:[],pluginPaths:[]};if($.mode==="in_process"){let Q=await w8(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 R2({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}}var m4="SKILL.md",VL="managed.json",BL=new Set([".md",".markdown",".txt"]);function hZ($){return $.trim().toLowerCase()}function N2($){let W=$;return W?.code==="ENOENT"||W?.code==="EACCES"||W?.code==="EPERM"||W?.code==="ELOOP"}function c4($){return BL.has(v4($).toLowerCase())}function PX($){let W=[],Z=new Set;for(let Q of $){let J=P8(Q);if(Z.has(J))continue;Z.add(J),W.push(Q)}return W}function HL($){let W=[...$?.directories??vZ($?.workspacePath)];if($?.pluginSkillDirectories)W.push(...$.pluginSkillDirectories);else if($?.includePluginSkills)W.push(...EX({pluginPaths:$.pluginPaths,workspacePath:$.workspacePath,cwd:$.cwd??$.workspacePath}));return PX(W)}async function kZ($){try{let W=await SZ($,{withFileTypes:!0}),Z=[];for(let Q of W){if(!Q.isDirectory())continue;let J=k0($,Q.name),j=k0(J,VL);try{let X=await $L(j,"utf8"),Y=JSON.parse(X);if(Y&&typeof Y==="object")Z.push(J)}catch(X){if(N2(X))continue;if(X?.name==="SyntaxError")continue;throw X}}return Z.sort((Q,J)=>Q.localeCompare(J))}catch(W){if(N2(W))return[];throw W}}function IZ($){let W=ZL($),Z=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,Q=W.match(Z);if(!Q)return{data:{},body:W,hadFrontmatter:!1};let[,J,j]=Q;try{let X=YL.parse(J);return{data:X&&typeof X==="object"&&!Array.isArray(X)?X:{},body:j,hadFrontmatter:!0}}catch(X){let Y=X instanceof Error?X.message:String(X);return{data:{},body:W,hadFrontmatter:!0,parseError:Y}}}function u4($,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 E2($,W){if($===void 0||$===null)return;if(typeof $!=="boolean")throw Error(`Frontmatter field '${W}' must be a boolean.`);return $}function GL($,W){if(O1($.filePath).toLowerCase()!==wX.toLowerCase())return O1($.filePath,v4($.filePath));if(W&&P8($.filePath)===P8(W,wX))return"Workspace AGENTS.md";if(P8($.filePath)===P8(QL()))return"Global AGENTS.md";return O1($.filePath,v4($.filePath))}function xZ($,W){let{data:Z,body:Q,parseError:J}=IZ($);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=u4(Z.name,"name",!1)??W.trim();if(!Y)throw Error("Missing skill name.");return{name:Y,description:u4(Z.description,"description",!1),disabled:E2(Z.disabled,"disabled")??(E2(Z.enabled,"enabled")===!1?!0:void 0),instructions:j,frontmatter:Z}}function gZ($,W){let{data:Z,body:Q,parseError:J}=IZ($);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=u4(Z.name,"name",!1)??W.trim();if(!X)throw Error("Missing rule name.");return{name:X,disabled:E2(Z.disabled,"disabled")??(E2(Z.enabled,"enabled")===!1?!0:void 0),instructions:j,frontmatter:Z}}function mZ($,W){let{data:Z,body:Q,parseError:J}=IZ($);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=u4(Z.name,"name",!1)??W.trim();if(!X)throw Error("Missing workflow name.");return{name:X,disabled:E2(Z.disabled,"disabled")??(E2(Z.enabled,"enabled")===!1?!0:void 0),instructions:j,frontmatter:Z}}function vZ($){return jL($)}function cZ($){return JL($)}function uZ($){return XL($)}async function SX($){if(O1($)===".cline"){let W=await kZ($);return(await Promise.all(W.map((Q)=>SX(k0(Q,bZ))))).flat()}try{let W=await SZ($,{withFileTypes:!0}),Z=[];for(let Q of W){if(Q.isFile()&&Q.name===m4){Z.push({directoryPath:$,fileName:Q.name,filePath:k0($,Q.name)});continue}let J=k0($,Q.name);if(Q.isDirectory()||Q.isSymbolicLink()&&await PZ(J).then((X)=>X.isDirectory()).catch((X)=>{if(N2(X))return!1;throw X}))Z.push({directoryPath:J,fileName:m4,filePath:k0(J,m4)})}return Z}catch(W){if(N2(W))return[];throw W}}async function d4($){if(O1($)===".cline"){let W=await kZ($);return(await Promise.all(W.map((Q)=>d4(k0(Q,"rules.md"))))).flat()}try{if((await PZ($)).isFile())return[{directoryPath:WL($),fileName:O1($),filePath:$}]}catch(W){if(!N2(W))throw W}try{let Z=(await SZ($,{withFileTypes:!0})).filter((J)=>J.isFile()&&c4(J.name)).map((J)=>({directoryPath:$,fileName:J.name,filePath:k0($,J.name)})),Q=k0($,"AGENTS.md");try{if((await PZ(Q)).isFile()){if(!Z.some((X)=>X.fileName==="AGENTS.md"))Z.push({directoryPath:$,fileName:"AGENTS.md",filePath:Q})}}catch{}return Z}catch(W){if(N2(W))return[];throw W}}async function KL($){if(O1($)===".cline"){let W=await kZ($);return(await Promise.all(W.map((Q)=>d4(k0(Q,yZ))))).flat()}return d4($)}function dZ($){let W=HL($),Z=$?.workspacePath?k0($.workspacePath,".cline"):void 0;return{type:"skill",directories:Z?PX([...W,Z]):W,discoverFiles:SX,includeFile:(Q)=>Q===m4,parseFile:(Q)=>xZ(Q.content,O1(Q.directoryPath)),resolveId:(Q)=>hZ(Q.name)}}function lZ($){let W=$?.directories??cZ($?.workspacePath),Z=$?.workspacePath?k0($.workspacePath,".cline"):void 0;return{type:"rule",directories:Z?[...W,Z]:W,discoverFiles:d4,includeFile:(Q,J)=>Q===".clinerules"||c4(Q)||c4(J),parseFile:(Q)=>gZ(Q.content,GL(Q,$?.workspacePath)),resolveId:(Q)=>hZ(Q.name)}}function pZ($){let W=$?.directories??uZ($?.workspacePath),Z=$?.workspacePath?k0($.workspacePath,".cline"):void 0;return{type:"workflow",directories:Z?[...W,Z]:W,discoverFiles:KL,includeFile:(Q)=>c4(Q),parseFile:(Q)=>mZ(Q.content,O1(Q.filePath,v4(Q.filePath))),resolveId:(Q)=>hZ(Q.name)}}function bX($){let W=[dZ($?.skills),lZ($?.rules),pZ($?.workflows)];return new R8(W,{debounceMs:$?.debounceMs,emitParseErrors:$?.emitParseErrors})}import{truncateSplit as yX}from"@cline/shared";function FL($,W){if($.description?.trim())return yX($.description,".");if(W==="workflow")return;return yX($.instructions,".")}function AL($){return $.disabled!==!0}function hX($,W){return[...$.getSnapshot(W).entries()].map(([Z,Q])=>({id:Z,record:Q})).filter(({record:Z})=>AL(Z.item)).map(({id:Z,record:Q})=>({id:Z,name:Q.item.name,instructions:Q.item.instructions,description:FL(Q.item,W),kind:W})).sort((Z,Q)=>Z.name.localeCompare(Q.name))}function S8($){let W=new Map;for(let Z of[...hX($,"workflow"),...hX($,"skill")])if(!W.has(Z.name))W.set(Z.name,Z);return[...W.values()].sort((Z,Q)=>Z.name.localeCompare(Q.name))}function kX($,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=S8(W).find((Y)=>Y.name===Q);return X?`${X.instructions}${j}`:$}function IX($){return $.disabled!==!0}function l4($){if($.length===0)return"";return`
|
|
47
47
|
|
|
48
48
|
# Rules
|
|
49
49
|
${$.map((Z)=>`## ${Z.name}
|
|
@@ -51,17 +51,17 @@ ${Z.instructions}`).join(`
|
|
|
51
51
|
|
|
52
52
|
`)}`}function p4($,W){let Z=$?.trim(),Q=W?.trim();if(Z&&Q)return`${Z}
|
|
53
53
|
|
|
54
|
-
${Q}`;return Z||Q||void 0}function
|
|
54
|
+
${Q}`;return Z||Q||void 0}function UL($){return[...$.getSnapshot("rule").values()].map((Z)=>Z.item).filter(IX).sort((Z,Q)=>Z.name.localeCompare(Q.name))}function xX($){return l4(UL($))}import{validateWithZod as bu,zodToJsonSchema as yu}from"@cline/shared";var R0={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"},w2=[R0.READ_FILES,R0.SEARCH_CODEBASE,R0.RUN_COMMANDS,R0.FETCH_WEB_CONTENT,R0.APPLY_PATCH,R0.EDITOR,R0.SKILLS,R0.ASK,R0.SUBMIT_AND_EXIT];F0();import{createTool as i1,getDefaultShell as RL,getShellKind as NL,validateWithZod as n1,zodToJsonSchema as q1}from"@cline/shared";var r4="__clineInternalTelemetry";function gX($){let W=$?.__clineInternalTelemetry;return W&&typeof W==="object"&&"capture"in W&&typeof W.capture==="function"?W:void 0}import{spawn as tX}from"node:child_process";import{StringDecoder as OL}from"node:string_decoder";import{getDefaultShell as zL,getShellArgs as qL}from"@cline/shared";import{validateWithZod as _L}from"@cline/shared";import{z}from"zod";var r1=6000,b$=z.string().describe("The absolute path of a text file to read content from"),i4=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"),rZ=z.object({path:b$,start_line:i4.shape.start_line,end_line:i4.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"),a4=z.object({files:z.array(rZ).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.")}),mX={start_line:i4.shape.start_line,end_line:i4.shape.end_line},C2=z.union([rZ,z.object({file_path:b$,...mX}).transform(({file_path:$,...W})=>({path:$,...W})),z.object({filePath:b$,...mX}).transform(({filePath:$,...W})=>({path:$,...W}))]),vX=z.union([a4,C2,z.array(C2),z.array(z.string()),z.string(),z.object({files:z.array(z.union([b$,C2]))}),z.object({files:C2}),z.object({files:b$}),z.object({file_paths:z.array(b$)}),z.object({file_paths:z.string()}),z.object({paths:z.array(z.union([b$,C2]))}),z.object({paths:C2}),z.object({paths:z.string()})]),o4=z.object({queries:z.array(z.string()).describe("Array of regex search queries to execute")}),cX=z.union([o4,z.array(z.string()),z.string(),z.object({queries:z.string()})]),n4=z.string().describe(`The non-interactive shell command to execute - MUST keep input short and concise (within ${r1*2} characters) to avoid timeouts.`),b8=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.")}),uX=z.union([n4,b8]),s4=z.object({commands:z.array(n4).describe("Array of complete shell command strings to execute.")}),DL=z.object({commands:z.array(uX)}),dX=z.union([s4,DL,z.object({commands:uX}),z.array(b8),b8,z.object({command:n4}),z.object({cmd:n4}),z.array(z.string()),z.string()]),lX=z.object({url:z.string().describe("The URL to fetch"),prompt:z.string().min(2).describe("Analysis prompt for the fetched content")}),t4=z.object({requests:z.array(lX).describe("Array of the URLs for the web fetch requests")}),e4=z.object({path:z.string().min(1).describe("The absolute path for the action to be performed on"),old_text:z.string().nullable().optional().describe(`Exact text to replace (must match exactly once). Omit this when creating a missing file or inserting via insert_line. Keep this at or below ${r1} 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 ${r1} 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."),$5=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."),pX=z.union([$5,z.string()]),W5=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")}),Z5=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")}),Q5=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.
|
|
55
55
|
'False' if you have done all you can but cannot resolve the issue or if you are stuck and cannot proceed further. =
|
|
56
|
-
IMPORTANT: You must run the specific failing test(s) mentioned in the issue or test patch and include the test output in your reasoning. If the test still fails after your fix, you must revise. Do NOT submit with 'true' unless the test output shows the test passing.`)});function y$($){if($ instanceof Error)return $.message;return String($)}function
|
|
56
|
+
IMPORTANT: You must run the specific failing test(s) mentioned in the issue or test patch and include the test output in your reasoning. If the test still fails after your fix, you must revise. Do NOT submit with 'true' unless the test output shows the test passing.`)});function y$($){if($ instanceof Error)return $.message;return String($)}function iX($){if(typeof $.old_text==="string"&&$.old_text.length>r1)return`Editor input too large: old_text was ${$.old_text.length} characters, exceeding the recommended limit of ${r1}. Split the edit into smaller tool calls so later tool calls are less likely to be truncated or time out.`;if($.new_text.length>r1)return`Editor input too large: new_text was ${$.new_text.length} characters, exceeding the recommended limit of ${r1}. Split the edit into smaller tool calls so later tool calls are less likely to be truncated or time out.`;return null}class P2 extends Error{timeoutMs;constructor($,W){super($);this.name="TimeoutError",this.timeoutMs=W}}function z1($,W,Z){return Promise.race([$,new Promise((Q,J)=>{setTimeout(()=>J(new P2(Z,W)),W)})])}function J5($){let{path:W,start_line:Z,end_line:Q}=$;if(Z==null&&Q==null)return W;return`${W}:${Z??1}-${Q??"EOF"}`}function nX($){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 fL=new Set(["start_line","end_line"]);function LL($){if($===null||typeof $!=="object"||Array.isArray($))return!1;let W=Object.keys($);return W.length>0&&W.every((Z)=>fL.has(Z))}function rX($){let W=[];for(let Z of $){if(LL(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 aX($){if(Array.isArray($))return rX($);if($!==null&&typeof $==="object")for(let W of["files","paths"]){let Z=$[W];if(Array.isArray(Z))return{...$,[W]:rX(Z)}}return $}function oX($){let W=_L(dX,$);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 TL($){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 iZ=200;function sX($){let W=TL($);if(W.length<=iZ)return W;let Z=W.length-iZ;return`${W.slice(0,iZ)} ... [command truncated: ${Z} more chars; full command is in the tool call input]`}var h$=48000;function y8($,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)}
|
|
57
57
|
[... output truncated: ${Q} chars total. Refine the command (grep, head, tail) to view the elided middle ...]
|
|
58
|
-
`+$.slice(-j)}var
|
|
58
|
+
`+$.slice(-j)}var S2=2000,nZ=2000,j5=48000,b2=48000;class k$ extends Error{exitCode;output;constructor($,W){super(`Command exited with code ${$}`);this.exitCode=$;this.output=W;this.name="CommandExitError"}}function eX($){let W=Math.ceil($/2),Z=Math.max(1,$-W),Q=new OL("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 ML($,W,Z,Q,J){return new Promise((j,X)=>{let Y=process.platform==="win32",V=tX($.executable,$.args,{cwd:$.cwd,env:{...process.env,...$.env},stdio:["pipe","pipe","pipe"],detached:!Y,windowsHide:!0}),B=V.pid,H=eX(Q),G=eX(Q),K=!1,F=!1,A=(O)=>{if(F)return;F=!0,O()},D=()=>{if(!B)return;if(Y){tX("taskkill",["/pid",String(B),"/T","/F"],{stdio:"ignore",shell:!0,windowsHide:!0}).unref();return}try{process.kill(-B,"SIGKILL")}catch{V.kill("SIGKILL")}},U=(O)=>{K=!0,D(),A(()=>X(O))},f=setTimeout(()=>U(new P2(`Command timed out after ${Z}ms`,Z)),Z),_=()=>U(Error("Command was aborted"));if(W.signal)W.signal.addEventListener("abort",_);let q=()=>{clearTimeout(f),W.signal?.removeEventListener("abort",_)};V.stdout?.on("data",(O)=>{H.append(O)}),V.stderr?.on("data",(O)=>{G.append(O)}),V.on("close",(O)=>{if(q(),K)return;let T=H.snapshot(),L=G.snapshot();if(O!==0){let N=O??1,M=J?T.text+(L.text?`
|
|
59
59
|
[stderr]
|
|
60
|
-
${L.text}`:""):
|
|
61
|
-
${M}`:`[Command exited with code ${
|
|
60
|
+
${L.text}`:""):T.text,u=T.dropped||J&&L.dropped,b=J?T.totalChars+L.totalChars:T.totalChars;if(u||M.length>Q)M=y8(M,{maxChars:Q,totalChars:b});let E=M.length>0?`[Command exited with code ${N}]
|
|
61
|
+
${M}`:`[Command exited with code ${N}]`;A(()=>X(new k$(N,E)))}else{let N=J?T.text+(L.text?`
|
|
62
62
|
[stderr]
|
|
63
|
-
${L.text}`:""):
|
|
64
|
-
`))}return W}function
|
|
63
|
+
${L.text}`:""):T.text;if(T.dropped||J&&L.dropped||N.length>Q){let u=J?T.totalChars+L.totalChars:T.totalChars;N=y8(N,{maxChars:Q,totalChars:u})}A(()=>j(N))}}),V.on("error",(O)=>{q(),A(()=>X(Error(`Failed to execute command: ${O.message}`)))})})}function h8($={}){let{shell:W=zL(process.platform),timeoutMs:Z=30000,env:Q={},combineOutput:J=!0}=$,j=$.maxOutputChars??$.maxOutputBytes??h$;return(X,Y,V)=>{let B=typeof X!=="string";return ML({executable:B?X.command:W,args:B?X.args??[]:qL(W,X),cwd:Y,env:Q},V,Z,j,J)}}function $Y($,W){let Z=$.metadata?.[W];return typeof Z==="string"?Z:void 0}function EL($,W){Jj(gX($.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:$Y($,"mode"),source:$Y($,"source"),session_id:$.sessionId,agent_id:$.agentId,conversation_id:$.conversationId,run_id:$.runId,iteration:$.iteration,tool_call_id:$.toolCallId})}function wL($){let W=$.match(/(?<![<])<<-?\s*(?:"([^"]+)"|'([^']+)'|([A-Za-z0-9_./-]+))/);return W?.[1]??W?.[2]??W?.[3]}function CL($){let W=[];for(let Z=0;Z<$.length;Z+=1){let Q=$[Z],J=wL(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(`
|
|
64
|
+
`))}return W}function PL($){let W=[],Z=[],Q=()=>{if(Z.length>0)W.push(...CL(Z)),Z=[]};for(let J of $){if(typeof J==="string"){Z.push(J);continue}Q(),W.push(J)}return Q(),W}async function SL($,W){let{executor:Z,cwd:Q,context:J,timeoutMs:j,timeoutSource:X}=W;return Promise.all($.map(async(Y)=>{let V=Date.now(),B=sX(Y);try{let H=await z1(Z(Y,Q,J),j,`Command timed out after ${j}ms`);return{query:B,result:H,success:!0}}catch(H){if(H instanceof P2)EL(J,{effectiveTimeoutMs:H.timeoutMs,timeoutSource:X,commandCount:$.length,durationMs:Date.now()-V});if(H instanceof k$)return{query:B,result:H.output,error:H.message,success:!1};let G=y$(H);return{query:B,result:"",error:`Command failed: ${G}`,success:!1}}}))}function ZY($,W={}){let Z=W.fileReadTimeoutMs??1e4;return i1({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 ${S2} lines / ~${Math.round(j5/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:q1(a4),timeoutMs:Z*2,retryable:!0,maxRetries:1,execute:async(Q,J)=>{let j=n1(vX,aX(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=nX(Y);if(V)return{query:J5(Y),result:"",error:`Invalid file range: ${V}`,success:!1};try{let B=await z1($(Y,J),Z,`File read timed out after ${Z}ms`);return{query:J5(Y),result:B,success:!0}}catch(B){let H=y$(B);return{query:J5(Y),result:"",error:`Error reading file: ${H}`,success:!1}}}))}})}function QY($,W={}){let Z=W.searchTimeoutMs??30000,Q=W.cwd??process.cwd();return i1({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(b2/1000)}k characters per query is middle-truncated; narrow patterns beat broad ones.`,inputSchema:q1(o4),timeoutMs:Z*2,retryable:!0,maxRetries:1,execute:async(J,j)=>{let X=n1(cX,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 z1($(V,Q,j),Z,`Search timed out after ${Z}ms`);return{query:V,result:B,success:!0}}catch(B){let H=y$(B);return{query:V,result:"",error:`Search failed: ${H}`,success:!1}}}))}})}var WY="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 bL($,W){if($==="powershell"||$==="cmd"){let Q=$==="powershell"?"PowerShell":"cmd.exe",J=$==="powershell"?"';'":"'&&'";return"Run non-interactive shell commands from the root of the workspace in Windows environment. "+WY+`Output beyond ~${Math.round(h$/1000)}k characters is middle-truncated (start and end preserved); filter output when you need specific sections. Commands run through ${Q}; quote paths and arguments for ${Q} and use ${J} to sequence commands. Include multiple commands in the same call when they are independent and safe to run concurrently. When independent reads, searches, or edits are also needed, call those tools in the same response.`}let Z=$==="wsl"?"Commands run through bash in WSL (wsl.exe); the Windows working directory is mounted under /mnt/<drive>. ":W?"Commands run through a POSIX (bash-compatible) shell on Windows. ":"";return"Run non-interactive shell commands from the root of the workspace. "+WY+Z+`Commands should be properly shell-escaped and targeted to avoid error or timeout. Include multiple commands in the same call when they are independent complete shell commands and safe to run concurrently; multiline scripts and heredocs must be a single command string. When independent reads, searches, or edits are also needed, call those tools in the same response. Output beyond ~${Math.round(h$/1000)}k characters is middle-truncated (start and end preserved); pipe through grep/head/tail when you need specific sections of large output. For long-running commands, run them in background and redirect output to a tmp file that you can read from later.`}function aZ($,W={}){let Z=W.bashTimeoutMs??30000,Q=W.bashTimeoutMs===void 0?"default_setting":"configured_setting",J=W.cwd??process.cwd(),j=process.platform==="win32",X=W.shell,Y=typeof X==="function"?X:()=>X??RL(process.platform),V=()=>bL(NL(Y()),j),B=i1({name:"run_commands",description:V(),inputSchema:q1(s4),timeoutMs:Z*2,retryable:!1,maxRetries:0,execute:async(H,G)=>{let K=PL(oX(H));return SL(K,{executor:$,cwd:J,context:G,timeoutMs:Z,timeoutSource:Q})}});if(typeof X==="function")Object.defineProperty(B,"description",{get:V,enumerable:!0});return B}function JY($,W={}){let Z=W.webFetchTimeoutMs??30000;return i1({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:q1(t4),timeoutMs:Z*2,retryable:!0,maxRetries:2,execute:async(Q,J)=>{let j=n1(t4,Q);return Promise.all(j.requests.map(async(X)=>{try{let Y=await z1($(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=y$(Y);return{query:X.url,result:"",error:`Error fetching web content: ${V}`,success:!1}}}))}})}var yL=`Use \`apply_patch\` to edit files with the canonical freeform patch grammar. Pass the patch text directly as the \`input\` string. Prefer the exact format below:
|
|
65
65
|
|
|
66
66
|
*** Begin Patch
|
|
67
67
|
*** Update File: path/to/file.ts
|
|
@@ -97,94 +97,94 @@ Example:
|
|
|
97
97
|
</div>
|
|
98
98
|
);
|
|
99
99
|
}
|
|
100
|
-
*** End Patch`;function
|
|
101
|
-
`),J=0,j=[r.END,r.UPDATE,r.DELETE,r.ADD,r.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
|
|
102
|
-
${this.lines[this.index]}`);if(Y?.trim()){let U=
|
|
103
|
-
`);this.addWarning({path:this.currentPath||W,chunkIndex:Z.chunks.length,message:`Could not find matching context (similarity: ${D.toFixed(2)}). Chunk skipped.`,context:U.length>200?`${U.substring(0,200)}...`:U}),this.index=G}else{this.fuzz+=A;for(let U of H)U.origIndex+=F,Z.chunks.push(U);J=F+B.length,this.index=G}}return Z}parseDelete($){if(this.checkDuplicate($,"delete"),!($ in this.currentFiles))throw new
|
|
104
|
-
`),chunks:[]}}}function
|
|
105
|
-
`));for(let B=X;B<$.length;B++){let H=
|
|
106
|
-
`));if(H===Y)return[B,0,1];let G=
|
|
107
|
-
`)),G=
|
|
108
|
-
`));if(H===G)return[B,1,1]}for(let B=X;B<$.length;B++){let H=
|
|
109
|
-
`)),G=
|
|
110
|
-
`));if(H===G)return[B,100,1]}let V=0.66;for(let B=X;B<$.length;B++){let H=
|
|
111
|
-
`)),G=
|
|
112
|
-
`).map((W)=>W.replace(/\r$/,""))}function
|
|
113
|
-
`),J=[],j=0;for(let X of W){if(X.origIndex>Q.length)throw new
|
|
114
|
-
`)}async function
|
|
115
|
-
`)}return j}function
|
|
100
|
+
*** End Patch`;function jY($,W={}){let Z=W.applyPatchTimeoutMs??30000,Q=W.cwd??process.cwd();return i1({name:"apply_patch",description:yL,inputSchema:q1($5),timeoutMs:Z,retryable:!1,maxRetries:0,execute:async(J,j)=>{let X=n1(pX,J),Y=typeof X==="string"?X:X.input;try{return{query:"apply_patch",result:await z1($({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: ${y$(V)}`,success:!1}}}})}function XY($,W={}){let Z=W.editorTimeoutMs??30000,Q=W.cwd??process.cwd();return i1({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:q1(e4),timeoutMs:Z,retryable:!1,maxRetries:0,execute:async(J,j)=>{let X=n1(e4,J),Y=X.insert_line==null?"edit":"insert",V=iX(X);if(V)return{query:`${Y}:${X.path}`,result:"",error:V,success:!1};try{let B=await z1($(X,Q,j),Z,`Editor operation timed out after ${Z}ms`);return{query:`${Y}:${X.path}`,result:B,success:!0}}catch(B){let H=y$(B);return{query:`${Y}:${X.path}`,result:"",error:`Editor operation failed: ${H}`,success:!1}}}})}function y2($,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=i1({name:"skills",description:Q,inputSchema:q1(W5),timeoutMs:Z,retryable:!1,maxRetries:0,execute:async(j,X)=>{let Y=n1(W5,j);return z1($(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 YY($){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:q1(Z5),retryable:!1,maxRetries:0,execute:async(W,Z)=>{let Q=n1(Z5,W);return $(Q.question,Q.options,Z)}}}function VY($,W={}){let Z=W.submitTimeoutMs??15000;return i1({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:q1(Q5),lifecycle:{completesRun:!0},timeoutMs:Z,retryable:!1,maxRetries:0,execute:async(Q,J)=>{let j=n1(Q5,Q);return z1($(j.summary,j.verified,J),Z,`submit_and_exit timed out after ${Z}ms`)}})}function h2($){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(ZY(W.readFile,G));if(Q&&W.search)K.push(QY(W.search,G));if(J&&W.bash)K.push(aZ(W.bash,G));if(j&&W.webFetch)K.push(JY(W.webFetch,G));if(Y&&W.editor)K.push(XY(W.editor,G));else if(X&&W.applyPatch)K.push(jY(W.applyPatch,G));if(V&&W.skills)K.push(y2(W.skills,G));let F=H?W.submit:void 0;if(B&&W.askQuestion&&!F)K.push(YY(W.askQuestion));if(F)K.push(VY(F,G));return K}import*as d0 from"node:fs/promises";import*as l0 from"node:path";var r={BEGIN:"*** Begin Patch",END:"*** End Patch",ADD:"*** Add File: ",UPDATE:"*** Update File: ",DELETE:"*** Delete File: ",MOVE:"*** Move to: ",SECTION:"@@",END_FILE:"*** End of File"},HY=["%%bash","apply_patch","EOF","```"],k8;((Q)=>{Q.ADD="add";Q.DELETE="delete";Q.UPDATE="update"})(k8||={});class X0 extends Error{constructor($){super($);this.name="DiffError"}}function u0($){let W={"‐":"-","‑":"-","‒":"-","–":"-","—":"-","−":"-","“":'"',"”":'"',"„":'"',"«":'"',"»":'"',"‘":"'","’":"'","‛":"'"," ":" "," ":" "};return $.normalize("NFC").replace(/./gu,(Z)=>W[Z]??Z).replace(/\\`/g,"`").replace(/\\'/g,"'").replace(/\\"/g,'"')}class oZ{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(r.BEGIN))this.index++}hasMoreLines(){return this.index<this.lines.length}isEndMarker(){return this.lines[this.index]?.startsWith(r.END)??!1}parseNextAction(){let $=this.lines[this.index];if($?.startsWith(r.UPDATE)){this.parseUpdate($.substring(r.UPDATE.length).trim());return}if($?.startsWith(r.DELETE)){this.parseDelete($.substring(r.DELETE.length).trim());return}if($?.startsWith(r.ADD)){this.parseAdd($.substring(r.ADD.length).trim());return}throw new X0(`Unknown line while parsing: ${$}`)}checkDuplicate($,W){if($ in this.patch.actions)throw new X0(`Duplicate ${W} for file: ${$}`)}parseUpdate($){this.checkDuplicate($,"update"),this.currentPath=$,this.index++;let W=this.lines[this.index]?.startsWith(r.MOVE)?(this.lines[this.index++]??"").substring(r.MOVE.length).trim():void 0;if(!($ in this.currentFiles))throw new X0(`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(`
|
|
101
|
+
`),J=0,j=[r.END,r.UPDATE,r.DELETE,r.ADD,r.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 X0(`Invalid Line:
|
|
102
|
+
${this.lines[this.index]}`);if(Y?.trim()){let U=u0(Y.trim());for(let f=J;f<Q.length;f++){let _=Q[f];if(_&&(u0(_)===U||u0(_.trim())===U)){if(J=f+1,u0(_.trim())===U&&u0(_)!==U)this.fuzz++;break}}}let[B,H,G,K]=IL(this.lines,this.index),[F,A,D]=kL(Q,B,J,K);if(F===-1){let U=B.join(`
|
|
103
|
+
`);this.addWarning({path:this.currentPath||W,chunkIndex:Z.chunks.length,message:`Could not find matching context (similarity: ${D.toFixed(2)}). Chunk skipped.`,context:U.length>200?`${U.substring(0,200)}...`:U}),this.index=G}else{this.fuzz+=A;for(let U of H)U.origIndex+=F,Z.chunks.push(U);J=F+B.length,this.index=G}}return Z}parseDelete($){if(this.checkDuplicate($,"delete"),!($ in this.currentFiles))throw new X0(`Delete File Error: Missing File: ${$}`);this.patch.actions[$]={type:"delete",chunks:[]},this.index++}parseAdd($){if(this.checkDuplicate($,"add"),$ in this.currentFiles)throw new X0(`Add File Error: File already exists: ${$}`);this.index++;let W=[],Z=[r.END,r.UPDATE,r.DELETE,r.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 X0(`Invalid Add File line (missing '+'): ${Q}`);W.push(Q.substring(1))}this.patch.actions[$]={type:"add",newFile:W.join(`
|
|
104
|
+
`),chunks:[]}}}function BY($,W){let Z=$.length>W.length?$:W,Q=$.length>W.length?W:$;if(Z.length===0)return 1;let J=hL(Q,Z);return(Z.length-J)/Z.length}function hL($,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 kL($,W,Z,Q){if(W.length===0)return[Z,0,1];let J=0,j=(X)=>{let Y=u0(W.join(`
|
|
105
|
+
`));for(let B=X;B<$.length;B++){let H=u0($.slice(B,B+W.length).join(`
|
|
106
|
+
`));if(H===Y)return[B,0,1];let G=BY(H,Y);if(G>J)J=G}for(let B=X;B<$.length;B++){let H=u0($.slice(B,B+W.length).map((K)=>K.trimEnd()).join(`
|
|
107
|
+
`)),G=u0(W.map((K)=>K.trimEnd()).join(`
|
|
108
|
+
`));if(H===G)return[B,1,1]}for(let B=X;B<$.length;B++){let H=u0($.slice(B,B+W.length).map((K)=>K.trim()).join(`
|
|
109
|
+
`)),G=u0(W.map((K)=>K.trim()).join(`
|
|
110
|
+
`));if(H===G)return[B,100,1]}let V=0.66;for(let B=X;B<$.length;B++){let H=u0($.slice(B,B+W.length).join(`
|
|
111
|
+
`)),G=BY(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 IL($,W){let Z=W,Q=[],J=[],j=[],X=[],Y="keep",V=["@@",r.END,r.UPDATE,r.DELETE,r.ADD,r.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 X0(`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]===r.END_FILE)return Z++,[Q,X,Z,!0];return[Q,X,Z,!1]}function sZ($,W,Z){let Q=l0.isAbsolute(W),J=Q?l0.normalize(W):l0.resolve($,W);if(!Z||Q)return J;let j=l0.relative($,J);if(j.startsWith("..")||l0.isAbsolute(j))throw new X0(`Path must stay within cwd: ${W}`);return J}function xL($){return $.split(`
|
|
112
|
+
`).map((W)=>W.replace(/\r$/,""))}function GY($){if($.trim()==="")return!1;return HY.some((W)=>$.startsWith(W))}function gL($){let W=0,Z=$.length;while(W<Z&&GY($[W]??""))W++;while(Z>W&&GY($[Z-1]??""))Z--;return $.slice(W,Z)}function mL($){let W=xL($),Z=W.findIndex((X)=>X.startsWith(r.BEGIN)),Q=-1;for(let X=W.length-1;X>=0;X--)if(W[X]?.startsWith(r.END)){Q=X;break}if(Z!==-1||Q!==-1){if(Z===-1||Q===-1||Q<Z)throw new X0("Invalid patch text - incomplete sentinels. Try breaking it into smaller patches.");return{lines:W.slice(Z,Q+1)}}let J=gL(W);while(J.length>0&&J[0]==="")J.shift();while(J.length>0&&J[J.length-1]==="")J.pop();return{lines:[r.BEGIN,...J,r.END]}}function vL($,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 cL($,W,Z){if(W.length===0)return $;let Q=$.split(`
|
|
113
|
+
`),J=[],j=0;for(let X of W){if(X.origIndex>Q.length)throw new X0(`${Z}: chunk.origIndex ${X.origIndex} > lines.length ${Q.length}`);if(j>X.origIndex)throw new X0(`${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(`
|
|
114
|
+
`)}async function uL($,W,Z,Q){let J=vL($,[r.UPDATE,r.DELETE]),j={};for(let X of J){let Y=sZ(W,X,Q),V;try{V=await d0.readFile(Y,Z)}catch{throw new X0(`File not found: ${X}`)}j[X]=V.replace(/\r\n/g,`
|
|
115
|
+
`)}return j}function dL($,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 X0("ADD action without file content");Z[Q]={type:"add",newContent:J.newFile};break;case"update":Z[Q]={type:"update",oldContent:W[Q],newContent:cL(W[Q]??"",J.chunks,Q),movePath:J.movePath};break}return Z}function lL($){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:
|
|
116
116
|
${Z.context}`)}return W.join(`
|
|
117
|
-
`)}async function
|
|
118
|
-
`)}}import*as
|
|
117
|
+
`)}async function pL($,W,Z,Q){let J=[];for(let[j,X]of Object.entries($)){let Y=sZ(W,j,Q);switch(X.type){case"delete":await d0.rm(Y,{force:!0}),J.push(`${j}: [deleted]`);break;case"add":if(X.newContent===void 0)throw new X0(`Cannot create ${j} with no content`);await d0.mkdir(l0.dirname(Y),{recursive:!0}),await d0.writeFile(Y,X.newContent,{encoding:Z}),J.push(j);break;case"update":{if(X.newContent===void 0)throw new X0(`UPDATE change for ${j} has no new content`);if(X.movePath){let V=sZ(W,X.movePath,Q);await d0.mkdir(l0.dirname(V),{recursive:!0}),await d0.writeFile(V,X.newContent,{encoding:Z}),await d0.rm(Y,{force:!0}),J.push(`${j} -> ${X.movePath}`)}else await d0.writeFile(Y,X.newContent,{encoding:Z}),J.push(j);break}}}return J}async function X5($,W,Z={}){let{encoding:Q="utf-8",restrictToCwd:J=!0}=Z,j=mL($),X=await uL(j.lines,W,Q,J),Y=new oZ(j.lines,X),{patch:V,fuzz:B}=Y.parse();if(V.warnings&&V.warnings.length>0)throw new X0(lL(V.warnings));return{changes:dL(V,X),fuzz:B}}function I8($={}){let{encoding:W="utf-8",restrictToCwd:Z=!0}=$;return async(Q,J,j)=>{let{changes:X,fuzz:Y}=await X5(Q.input,J,{encoding:W,restrictToCwd:Z}),V=await pL(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(`
|
|
118
|
+
`)}}import*as Z1 from"node:fs/promises";import*as W1 from"node:path";function rL($,W,Z){let Q=W1.isAbsolute(W),J=Q?W1.normalize(W):W1.resolve($,W);if(!Z)return J;if(Q)return J;let j=W1.relative($,J);if(j.startsWith("..")||W1.isAbsolute(j))throw Error(`Path must stay within cwd: ${W}`);return J}function iL($,W){if(W.length===0)return 0;return $.split(W).length-1}function nL($,W,Z){let Q=$.split(`
|
|
119
119
|
`),J=W.split(`
|
|
120
120
|
`),j=0;while(j<Q.length&&j<J.length&&Q[j]===J[j])j++;let X=Q.length,Y=J.length;while(X>j&&Y>j&&Q[X-1]===J[Y-1])X--,Y--;let V=X-j,B=Y-j,H=V,G=B;if(V+B>Z)H=Math.min(V,Math.max(Math.ceil(Z/2),Z-B)),G=Math.min(B,Z-H);let K=["```diff"];for(let D=j;D<j+H;D++)K.push(`-${D+1}: ${Q[D]}`);for(let D=j;D<j+G;D++)K.push(`+${D+1}: ${J[D]}`);let F=V-H,A=B-G;if(F>0||A>0)K.push(`... diff truncated (${F} more removed, ${A} more added lines) ...`);return K.push("```"),K.join(`
|
|
121
|
-
`)}async function
|
|
122
|
-
${V}`}async function
|
|
121
|
+
`)}async function aL($,W,Z){return await Z1.mkdir(W1.dirname($),{recursive:!0}),await Z1.writeFile($,W,{encoding:Z}),`File created successfully at: ${$}`}async function oL($){try{return await Z1.access($),!0}catch{return!1}}async function sL($,W,Z,Q,J){let j=await Z1.readFile($,Q),X=iL(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 Z1.writeFile($,Y,{encoding:Q});let V=nL(j,Y,J);return`Edited ${$}
|
|
122
|
+
${V}`}async function tL($,W,Z,Q){let j=(await Z1.readFile($,Q)).split(`
|
|
123
123
|
`),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(`
|
|
124
|
-
`)),await
|
|
125
|
-
`),{encoding:Q}),`Inserted content at line ${W} in ${$}.`}function
|
|
126
|
-
`),L=H[H.length-1]?.lineNumber;if(L===void 0)return
|
|
127
|
-
|
|
128
|
-
[Showing lines ${X}-${L} of ${M}. Use start_line/end_line to read other sections.]`}function V5($={}){let{maxFileSizeBytes:W,encoding:Z,includeLineNumbers:Q}={...
|
|
129
|
-
`).filter((U)=>U.trim());for(let U of D){if(A.length>=Z)break;let f=JSON.parse(U);if(f.type==="match"){let _=f.data,q=[];if(f.data.submatches&&f.data.submatches.length>0){let
|
|
130
|
-
`))}let F;try{F=new RegExp(V,"gim")}catch(_){throw Error(`Invalid regex pattern: ${V}. ${_ instanceof Error?_.message:""}`)}let A=[],D=0,U=await I$(B);for(let _ of U){if(H.signal?.aborted)throw Error("Search operation aborted");if(!
|
|
131
|
-
`);for(let L=0;L<
|
|
132
|
-
Searched ${D} files.`;let f=[`Found ${A.length} result${A.length===1?"":"s"} for pattern: ${V}`,`Searched ${D} files.`,""];for(let _ of A)f.push(`${_.file}:${_.line}:${_.column}`),f.push(..._.context),f.push("");if(A.length>=Q)f.push(`(Showing first ${Q} results. Refine your search for more specific results.)`);return
|
|
133
|
-
`))}}function
|
|
124
|
+
`)),await Z1.writeFile($,j.join(`
|
|
125
|
+
`),{encoding:Q}),`Inserted content at line ${W} in ${$}.`}function x8($={}){let{encoding:W="utf-8",restrictToCwd:Z=!0,maxDiffLines:Q=200}=$;return async(J,j,X)=>{let Y=rL(j,J.path,Z);if(J.insert_line!=null)return tL(Y,J.insert_line,J.new_text,W);if(!await oL(Y))return aL(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 sL(Y,J.old_text,J.new_text,W,Q)}}import{createReadStream as eL}from"node:fs";import*as Y5 from"node:fs/promises";import*as a1 from"node:path";import{createInterface as $T}from"node:readline";import{resolveExistingFilePath as WT}from"@cline/shared/storage";var ZT=new Map([[".gif","image/gif"],[".png","image/png"],[".jpg","image/jpeg"],[".jpeg","image/jpeg"],[".webp","image/webp"]]),QT={maxFileSizeBytes:1e7,encoding:"utf-8",includeLineNumbers:!0},KY=1e8,JT=50000;function FY($){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 jT($,W,Z,Q,J,j){if(j?.aborted)throw FY(j);let X=Math.max(Q??1,1),Y=J??Number.POSITIVE_INFINITY,V=Number.isFinite(Y),B=V?Y:X+JT-1,H=[],G=0,K=0,F=!1,A=!1,D=Number.isFinite(Y)?Math.min(Y,X+S2-1):X+S2-1,U=Z?String(D).length+3:0,f=eL($,{encoding:W}),_=$T({input:f,crlfDelay:Number.POSITIVE_INFINITY}),q=j?()=>f.destroy(FY(j)):void 0;if(j&&q)j.addEventListener("abort",q,{once:!0});try{for await(let u of _){if(K+=1,K>Y){K=Y;break}if(!V&&F&&K>=B){A=!0;break}if(K<X||F)continue;if(H.length>=S2){F=!0;continue}let b=u;if(b.length>nZ)b=`${b.slice(0,nZ)} [line truncated]`;let E=G+b.length+U+1;if(E>j5&&H.length>0){F=!0;continue}H.push({lineNumber:K,text:b}),G=E}}finally{if(j&&q)j.removeEventListener("abort",q);_.close(),f.destroy()}let O=String(H[H.length-1]?.lineNumber??K).length,T=H.map(({lineNumber:u,text:b})=>Z?`${String(u).padStart(O," ")} | ${b}`:b).join(`
|
|
126
|
+
`),L=H[H.length-1]?.lineNumber;if(L===void 0)return T;let N=Math.min(Y,K);if(L>=N)return T;let M=A?`${K}+ lines`:N;return`${T}
|
|
127
|
+
|
|
128
|
+
[Showing lines ${X}-${L} of ${M}. Use start_line/end_line to read other sections.]`}function V5($={}){let{maxFileSizeBytes:W,encoding:Z,includeLineNumbers:Q}={...QT,...$};return async(J,j)=>{let{path:X,start_line:Y,end_line:V}=J,B=a1.isAbsolute(X)?a1.normalize(X):a1.resolve(process.cwd(),X),H=WT(B)??B,G=a1.extname(H).toLowerCase(),K=ZT.get(G),F=await Y5.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 Y5.readFile(H);return[{type:"text",text:"Successfully read image"},{type:"image",data:A.toString("base64"),mediaType:K}]}if(F.size>KY)throw Error(`Text file too large to stream safely: ${F.size} bytes (max: ${KY} bytes). Use a targeted command such as sed, grep, head, or tail to inspect specific sections.`);return jT(H,Z,Q,Y,V,j.signal)}}import{spawn as OY}from"node:child_process";import*as zY from"node:fs/promises";import*as G5 from"node:path";import{spawn as XT}from"node:child_process";import{readdir as YT}from"node:fs/promises";import eZ from"node:path";import{isMainThread as DY,parentPort as AY,Worker as VT}from"node:worker_threads";var BT=15000,HT=600000,GT=1000,KT=new Set([".git","node_modules","dist","build",".next","coverage",".turbo",".cache","target","out"]);function UY($){let W=$&&typeof $==="object"&&"code"in $?String($.code??""):"";return W==="EACCES"||W==="EPERM"||W==="ENOENT"}var k2=new Map;function FT(){if(!DY)return!1;return!0}function AT($){if(k2.size<=1)return;for(let[W,Z]of k2.entries()){if(Z.pending)continue;if($-Z.lastAccessedAt>HT)k2.delete(W)}}function UT($,W){return eZ.relative($,W).split(eZ.sep).join("/")}async function DT($){let Z=(await new Promise((Q,J)=>{let j=XT("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 _Y($,W,Z){let Q;try{Q=await YT(W,{withFileTypes:!0})}catch(J){if(UY(J))return;throw J}for(let J of Q){let j=eZ.join(W,J.name);if(J.isDirectory()){if(KT.has(J.name))continue;try{await _Y($,j,Z)}catch(X){if(UY(X))continue;throw X}continue}if(J.isFile())Z.add(UT($,j))}}async function _T($){let W=new Set;return await _Y($,$,W),W}async function B5($){try{return await DT($)}catch{return _T($)}}function fT(){if(DY||!AY)return;let $=AY;$.on("message",(W)=>{if(W.type!=="index")return;B5(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 fY{worker=new VT(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)},GT);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 tZ;function LT(){if(!FT())return null;if(tZ===void 0)tZ=new fY;return tZ}async function TT($){let W=LT();if(!W)return B5($);try{let Z=await W.requestIndex($);if(Z===null)return B5($);return new Set(Z)}catch{return B5($)}}async function I$($,W={}){let Z=W.ttlMs??BT,Q=Date.now();AT(Q);let J=k2.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=TT($).then((X)=>{return k2.set($,{files:X,lastBuiltAt:Date.now(),lastAccessedAt:Date.now(),pending:null}),X});return k2.set($,{files:J?.files??new Set,lastBuiltAt:J?.lastBuiltAt??0,lastAccessedAt:Q,pending:j}),j}async function LY($,W={}){await I$($,{...W,ttlMs:0})}import{stat as OT}from"node:fs/promises";import x$ from"node:path";var zT=/[),.:;!?`'"]+$/,qT=/^[(`'"]+/;function MT($){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(qT,"").replace(zT,"");if(j.length===0||j.includes("@"))continue;Z.push(j)}return Array.from(new Set(Z))}function RT($,W){let Z=$.replace(/\\/g,"/"),Q=x$.isAbsolute(Z)?x$.resolve(Z):x$.resolve(W,Z),J=x$.relative(W,Q);if(J.startsWith("..")||x$.isAbsolute(J))return;return J.split(x$.sep).join("/")}async function H5($,W,Z={}){let Q=MT($);if(Q.length===0)return{prompt:$,mentions:[],matchedFiles:[],ignoredMentions:[]};let{maxFiles:J,maxFileBytes:j,maxTotalBytes:X}=Z,Y=await I$(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=RT(K,W);if(!F||!Y.has(F)){B.push(K);continue}if(!j||!X){V.push(F);continue}let A=x$.join(W,F);try{if(!(await OT(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 NT=["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"],ET=["node_modules",".git","dist","build",".next","coverage","__pycache__",".venv","venv",".cache",".turbo",".output","out","target","bin","obj"],g$=null;function wT(){if(g$!==null)return Promise.resolve(g$);return new Promise(($)=>{let W=OY("rg",["--version"],{stdio:["ignore","pipe","pipe"],windowsHide:!0});W.on("close",(Z)=>{g$=Z===0,$(g$)}),W.on("error",()=>{g$=!1,$(!1)}),setTimeout(()=>{if(!W.killed)W.kill("SIGTERM");if(g$===null)g$=!1,$(!1)},1000)})}function CT($,W,Z,Q,J=5000,j){return new Promise((X)=>{let Y=OY("rg",["--json",`--context=${Q}`,"--max-count=1","-i",$],{cwd:W,stdio:["ignore","pipe","pipe"],windowsHide:!0}),V="",B=!1,H=()=>{if(!Y.killed)Y.kill("SIGTERM")},G=setTimeout(()=>{if(!B)B=!0,H(),X(null)},J),K=(F)=>{if(!B)B=!0,clearTimeout(G),H(),X(F)};if(j?.aborted){H(),X(null);return}j?.addEventListener("abort",()=>{K(null)}),Y.stdout.on("data",(F)=>{V+=F.toString()}),Y.stderr.on("data",()=>{}),Y.on("close",(F)=>{if(F===0||F===1){try{let A=[],D=V.split(`
|
|
129
|
+
`).filter((U)=>U.trim());for(let U of D){if(A.length>=Z)break;let f=JSON.parse(U);if(f.type==="match"){let _=f.data,q=[];if(f.data.submatches&&f.data.submatches.length>0){let O=f.data.submatches[0];A.push({file:_.path.text,line:_.line_number,column:(O?.start??0)+1,match:O?.match?.text??"",context:q})}}else if(f.type==="context"&&A.length>0){let _=A[A.length-1],q=f.data.line_number===_.line?">":" ";_.context.push(`${q} ${f.data.line_number}: ${f.data.lines?.text??f.data.line?.text??""}`)}}K(A.length>0?A:null)}catch{K(null)}return}K(null)}),Y.on("error",()=>{K(null)})})}function PT($,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=G5.posix.extname(j).slice(1).toLowerCase();return Z.has(Y)||!Y&&!j.startsWith(".")}function K5($={}){let{includeExtensions:W=NT,excludeDirs:Z=ET,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 wT(),K=null;if(G)K=await CT(V,B,Q,J,5000,H.signal);if(K){let _=[`Found ${K.length} result${K.length===1?"":"s"} for pattern: ${V}`,""];for(let q of K)_.push(`${q.file}:${q.line}:${q.column}`),_.push(...q.context),_.push("");if(K.length>=Q)_.push(`(Showing first ${Q} results. Refine your search for more specific results.)`);return TY(_.join(`
|
|
130
|
+
`))}let F;try{F=new RegExp(V,"gim")}catch(_){throw Error(`Invalid regex pattern: ${V}. ${_ instanceof Error?_.message:""}`)}let A=[],D=0,U=await I$(B);for(let _ of U){if(H.signal?.aborted)throw Error("Search operation aborted");if(!PT(_,X,Y,j))continue;if(A.length>=Q)break;D++;let q=G5.join(B,_);try{let T=(await zY.readFile(q,"utf-8")).split(`
|
|
131
|
+
`);for(let L=0;L<T.length;L++){let N=T[L];F.lastIndex=0;let M=F.exec(N);while(M!==null){if(A.length>=Q)break;let u=Math.max(0,L-J),b=Math.min(T.length-1,L+J),E=[];for(let d=u;d<=b;d++){let g=d===L?">":" ";E.push(`${g} ${d+1}: ${T[d]}`)}if(A.push({file:_,line:L+1,column:M.index+1,match:M[0],context:E}),M.index===F.lastIndex)F.lastIndex++;M=F.exec(N)}}}catch{}}if(A.length===0)return`No results found for pattern: ${V}
|
|
132
|
+
Searched ${D} files.`;let f=[`Found ${A.length} result${A.length===1?"":"s"} for pattern: ${V}`,`Searched ${D} files.`,""];for(let _ of A)f.push(`${_.file}:${_.line}:${_.column}`),f.push(..._.context),f.push("");if(A.length>=Q)f.push(`(Showing first ${Q} results. Refine your search for more specific results.)`);return TY(f.join(`
|
|
133
|
+
`))}}function TY($){if($.length<=b2)return $;let W=Math.ceil(b2/2),Z=Math.max(1,b2-W);return`${$.slice(0,W)}
|
|
134
134
|
[... search output truncated: ${$.length} chars total. Narrow the pattern or scope to view the elided matches ...]
|
|
135
|
-
`+$.slice(-Z)}function
|
|
135
|
+
`+$.slice(-Z)}function ST($){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,`
|
|
136
136
|
`).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,`
|
|
137
137
|
`).replace(/\n{3,}/g,`
|
|
138
138
|
|
|
139
|
-
`).trim()}function F5($={}){let{timeoutMs:W=30000,maxResponseBytes:Z=5000000,userAgent:Q="Mozilla/5.0 (compatible; AgentBot/1.0)",headers:J={},followRedirects:j=!0}=$;return async(X,Y,V)=>{let B;try{B=new URL(X)}catch{throw Error(`Invalid URL: ${X}`)}if(!["http:","https:"].includes(B.protocol))throw Error(`Invalid protocol: ${B.protocol}. Only http and https are supported.`);let H=new AbortController,G=setTimeout(()=>H.abort(),W),K;if(V.signal)K=()=>H.abort(),V.signal.addEventListener("abort",K);try{let F=await fetch(X,{method:"GET",headers:{"User-Agent":Q,Accept:"text/html,application/xhtml+xml,application/xml;q=0.9,text/plain;q=0.8,*/*;q=0.7","Accept-Language":"en-US,en;q=0.9",...J},redirect:j?"follow":"manual",signal:H.signal});if(clearTimeout(G),!j&&F.status>=300&&F.status<400)return`Redirect to: ${F.headers.get("location")}`;if(!F.ok)throw Error(`HTTP ${F.status}: ${F.statusText}`);let A=F.headers.get("content-type")||"",D=F.body?.getReader();if(!D)throw Error("Failed to read response body");let U=[],f=0;while(!0){let{done:
|
|
140
|
-
[Content truncated: showing first 50000 of ${
|
|
141
|
-
`)}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 $Q($={}){return y8($)}function A5($={}){return{readFile:V5($.fileRead),search:K5($.search),bash:$Q($.bash),webFetch:F5($.webFetch),applyPatch:k8($.applyPatch),editor:I8($.editor)}}var wO={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"},x8=[{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 zY($,W){if(!W||W.length===0)return!0;let Z=$.toLowerCase();return W.some((Q)=>Z.includes(Q.toLowerCase()))}function CO($,W,Z,Q){if($.mode&&$.mode!=="any"&&$.mode!==Q)return!1;return zY(W,$.providerIdIncludes)&&zY(Z,$.modelIdIncludes)}function g8($,W,Z,Q){if(!Q||Q.length===0)return{};let J=new Map;for(let X of Q){if(!CO(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[wO[X]]=Y;return j}var X1={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 o1($){if($.mode==="plan")return"plan";if($.mode==="yolo")return"yolo";return"act"}function qY($){if($!=="yolo")return{};let W={enabled:!0,autoApprove:!0},Z={"*":W};for(let Q of E2)Z[Q]=W;return Z}function MY($,W){let Z=X1[$],{enableSpawnAgent:Q,enableAgentTeams:J,...j}=Z;return b2({...j,...W})}import{createTool as iT,zodToJsonSchema as nT}from"@cline/shared";import{z as KQ}from"zod";t0();import{createAgentRuntime as kT}from"@cline/agents";import{createContributionRegistry as IT,mergeModelOptions as lY}from"@cline/shared";import{createGateway as mO,createHandlerAsync as vO,hasRegisteredHandler as cO,MODEL_COLLECTIONS_BY_PROVIDER_ID as uO,normalizeProviderId as dO}from"@cline/llms";import{EMPTY_CONTENT_TEXT as PO}from"@cline/shared";function SO($){let W=yO($.content),Z=[],Q=$.id??IO(),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(hO),createdAt:$.ts??Date.now(),metadata:$.metadata,modelInfo:$.modelInfo,metrics:RY($.metrics)}),j=[]};if(W.length===0)return Z.push({id:Q,role:$.role,content:[{type:"text",text:PO}],createdAt:$.ts??Date.now(),metadata:$.metadata,modelInfo:$.modelInfo,metrics:RY($.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:[NY(Y)],createdAt:$.ts??Date.now(),metadata:$.metadata})}return X(),Z}function U5($){return $.flatMap(SO)}function bO($){let W=$.content.map(wY).filter((Z)=>Z!==void 0);return{id:$.id,role:$.role==="tool"?"user":$.role,content:W,ts:$.createdAt,metadata:$.metadata,modelInfo:$.modelInfo,metrics:kO($.metrics)}}function h2($){return $.map(bO)}function D5($){let W=[];for(let Z of $){let Q=Z.content.map(wY).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 yO($){if(typeof $==="string")return $.trim().length>0?[{type:"text",text:$}]:[];return[...$]}function hO($){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 NY($)}}function NY($){return{type:"tool-result",toolCallId:$.tool_use_id,toolName:$.name,output:$.content,isError:$.is_error}}function wY($){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 RY($){if(!$)return;return{inputTokens:$.inputTokens??0,outputTokens:$.outputTokens??0,cacheReadTokens:$.cacheReadTokens??0,cacheWriteTokens:$.cacheWriteTokens??0,cost:$.cost}}function kO($){if(!$)return;return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,cost:$.cost}}var EY=0;function IO(){return EY+=1,`msg_${Date.now().toString(36)}_${EY.toString(36)}`}function xO($){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:gO($),error:$.error}];default:return[]}}function gO($){if($.success===!1)return"error";if($.incompleteReason==="max_output_tokens"||$.incompleteReason==="max-tokens")return"max-tokens";return"stop"}function CY($){return{async*stream(W){let Z=!1,Q=!1;try{let J=typeof $==="function"?await $():$;J.setAbortSignal?.(W.signal);let j=D5(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 xO(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 lO($){let W=Object.fromEntries(Object.entries($).filter(([,Z])=>Z!==void 0));return Object.keys(W).length>0?W:void 0}function pO($){return $.providerId==="openai-compatible"||$.clientType==="openai-compatible"}function rO($){let W={region:$.region,apiLine:$.apiLine,openRouterProviderSorting:$.openRouterProviderSorting,modelCatalog:$.modelCatalog};if(pO($))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 lO(W)}function iO($){return typeof $==="number"&&Number.isFinite($)&&$>0?Math.floor($):void 0}function WQ($){let W=$.providerConfig,Z=W?.knownModels?W.knownModels:$.knownModels??uO[$.providerId]?.models??void 0,Q=iO(W?.maxInputTokens),J=W?.modelInfo&&W.modelInfo.id===$.modelId?W.modelInfo:void 0;if(Q===void 0&&!J)return Z;return{...Z??{},[$.modelId]:{...Z?.[$.modelId],...Q!==void 0?{contextWindow:Q,maxInputTokens:Q}:{},...J,id:$.modelId}}}function nO($){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 aO($,W){return{id:$,name:W.name??$,description:W.description,contextWindow:W.contextWindow,maxInputTokens:W.maxInputTokens,maxOutputTokens:W.maxTokens,capabilities:nO(W.capabilities),metadata:{family:W.family,pricing:W.pricing,status:W.status,releaseDate:W.releaseDate}}}function PY($,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:WQ($),maxOutputTokens:$.maxTokensPerTurn,temperature:$.temperature,reasoningEffort:$.reasoningEffort,thinkingBudgetTokens:$.thinkingBudgetTokens,thinking:$.thinking,logger:W,extensionContext:$.extensionContext};if(cO(dO(j.providerId)))return CY(()=>vO(j));return mO({fetch:j.fetch,providerConfigs:[{providerId:j.providerId,apiKey:j.apiKey,baseUrl:j.baseUrl,headers:j.headers,timeoutMs:j.timeoutMs,fetch:j.fetch,options:rO(j),models:j.knownModels?Object.entries(j.knownModels).map(([X,Y])=>aO(X,Y)):void 0}],logger:W,telemetry:Z??$.telemetry??$.extensionContext?.telemetry}).createAgentModel({providerId:j.providerId,modelId:j.modelId},{maxTokens:j.maxOutputTokens,temperature:j.temperature})}A0();import{createMediaBudgetState as oO,IMAGE_OMITTED_PLACEHOLDER as SY,normalizeUserInput as bY,resolveMediaBudget as sO,validateAndReserveImageMedia as tO}from"@cline/shared";var eO=8000,$T=50000,WT=6000000,ZT=200000,QT=12000,JT=65536,v8=2000,yY=40000,jT=8,ZQ={maxToolResultChars:"CLINE_MESSAGE_BUILDER_MAX_TOOL_RESULT_CHARS",maxTotalTextBytes:"CLINE_MESSAGE_BUILDER_MAX_TOTAL_TEXT_BYTES",minOutdatedRewriteBytes:"CLINE_MESSAGE_BUILDER_MIN_OUTDATED_REWRITE_BYTES"},XT=new Set(["read","read_files"]),m$="[outdated - see the latest file content]",hY="Tool execution was interrupted before a result was produced.",kY=($)=>`
|
|
139
|
+
`).trim()}function F5($={}){let{timeoutMs:W=30000,maxResponseBytes:Z=5000000,userAgent:Q="Mozilla/5.0 (compatible; AgentBot/1.0)",headers:J={},followRedirects:j=!0}=$;return async(X,Y,V)=>{let B;try{B=new URL(X)}catch{throw Error(`Invalid URL: ${X}`)}if(!["http:","https:"].includes(B.protocol))throw Error(`Invalid protocol: ${B.protocol}. Only http and https are supported.`);let H=new AbortController,G=setTimeout(()=>H.abort(),W),K;if(V.signal)K=()=>H.abort(),V.signal.addEventListener("abort",K);try{let F=await fetch(X,{method:"GET",headers:{"User-Agent":Q,Accept:"text/html,application/xhtml+xml,application/xml;q=0.9,text/plain;q=0.8,*/*;q=0.7","Accept-Language":"en-US,en;q=0.9",...J},redirect:j?"follow":"manual",signal:H.signal});if(clearTimeout(G),!j&&F.status>=300&&F.status<400)return`Redirect to: ${F.headers.get("location")}`;if(!F.ok)throw Error(`HTTP ${F.status}: ${F.statusText}`);let A=F.headers.get("content-type")||"",D=F.body?.getReader();if(!D)throw Error("Failed to read response body");let U=[],f=0;while(!0){let{done:N,value:M}=await D.read();if(N)break;if(f+=M.length,f>Z)throw D.cancel(),Error(`Response too large: exceeded ${Z} bytes`);U.push(M)}let _=new Uint8Array(f),q=0;for(let N of U)_.set(N,q),q+=N.length;let O=new TextDecoder("utf-8").decode(_),T;if(A.includes("text/html")||A.includes("application/xhtml"))T=ST(O);else if(A.includes("application/json"))try{let N=JSON.parse(O);T=JSON.stringify(N,null,2)}catch{T=O}else T=O;let L=[`URL: ${X}`,`Content-Type: ${A}`,`Size: ${f} bytes`,"","--- Content ---",T.slice(0,50000)];if(T.length>50000)L.push(`
|
|
140
|
+
[Content truncated: showing first 50000 of ${T.length} characters]`);return L.push("","--- Analysis Request ---",`Prompt: ${Y}`),L.join(`
|
|
141
|
+
`)}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 $Q($={}){return h8($)}function A5($={}){return{readFile:V5($.fileRead),search:K5($.search),bash:$Q($.bash),webFetch:F5($.webFetch),applyPatch:I8($.applyPatch),editor:x8($.editor)}}var bT={read_files:"enableReadFiles",search_codebase:"enableSearch",run_commands:"enableBash",fetch_web_content:"enableWebFetch",apply_patch:"enableApplyPatch",editor:"enableEditor",skills:"enableSkills",ask_question:"enableAskQuestion",submit_and_exit:"enableSubmitAndExit"},g8=[{name:"openai-native-use-apply-patch",mode:"act",providerIdIncludes:["openai-native"],enableTools:["apply_patch"],disableTools:["editor"]},{name:"codex-and-gpt-use-apply-patch",mode:"act",modelIdIncludes:["codex","gpt"],enableTools:["apply_patch"],disableTools:["editor"]}];function qY($,W){if(!W||W.length===0)return!0;let Z=$.toLowerCase();return W.some((Q)=>Z.includes(Q.toLowerCase()))}function yT($,W,Z,Q){if($.mode&&$.mode!=="any"&&$.mode!==Q)return!1;return qY(W,$.providerIdIncludes)&&qY(Z,$.modelIdIncludes)}function m8($,W,Z,Q){if(!Q||Q.length===0)return{};let J=new Map;for(let X of Q){if(!yT(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[bT[X]]=Y;return j}var Y1={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 o1($){if($.mode==="plan")return"plan";if($.mode==="yolo")return"yolo";return"act"}function MY($){if($!=="yolo")return{};let W={enabled:!0,autoApprove:!0},Z={"*":W};for(let Q of w2)Z[Q]=W;return Z}function RY($,W){let Z=Y1[$],{enableSpawnAgent:Q,enableAgentTeams:J,...j}=Z;return h2({...j,...W})}import{createTool as tO,zodToJsonSchema as eO}from"@cline/shared";import{z as KQ}from"zod";$1();import{createAgentRuntime as mO}from"@cline/agents";import{createContributionRegistry as vO,isLikelyAuthError as cO,mergeModelOptions as pY}from"@cline/shared";import{createGateway as dT,createHandlerAsync as lT,hasRegisteredHandler as pT,MODEL_COLLECTIONS_BY_PROVIDER_ID as rT,normalizeProviderId as iT}from"@cline/llms";import{EMPTY_CONTENT_TEXT as hT}from"@cline/shared";function kT($){let W=xT($.content),Z=[],Q=$.id??vT(),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(gT),createdAt:$.ts??Date.now(),metadata:$.metadata,modelInfo:$.modelInfo,metrics:NY($.metrics)}),j=[]};if(W.length===0)return Z.push({id:Q,role:$.role,content:[{type:"text",text:hT}],createdAt:$.ts??Date.now(),metadata:$.metadata,modelInfo:$.modelInfo,metrics:NY($.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:[wY(Y)],createdAt:$.ts??Date.now(),metadata:$.metadata})}return X(),Z}function U5($){return $.flatMap(kT)}function IT($){let W=$.content.map(CY).filter((Z)=>Z!==void 0);return{id:$.id,role:$.role==="tool"?"user":$.role,content:W,ts:$.createdAt,metadata:$.metadata,modelInfo:$.modelInfo,metrics:mT($.metrics)}}function I2($){return $.map(IT)}function D5($){let W=[];for(let Z of $){let Q=Z.content.map(CY).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 xT($){if(typeof $==="string")return $.trim().length>0?[{type:"text",text:$}]:[];return[...$]}function gT($){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 wY($)}}function wY($){return{type:"tool-result",toolCallId:$.tool_use_id,toolName:$.name,output:$.content,isError:$.is_error}}function CY($){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 NY($){if(!$)return;return{inputTokens:$.inputTokens??0,outputTokens:$.outputTokens??0,cacheReadTokens:$.cacheReadTokens??0,cacheWriteTokens:$.cacheWriteTokens??0,cost:$.cost}}function mT($){if(!$)return;return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,cost:$.cost}}var EY=0;function vT(){return EY+=1,`msg_${Date.now().toString(36)}_${EY.toString(36)}`}function cT($){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:uT($),error:$.error}];default:return[]}}function uT($){if($.success===!1)return"error";if($.incompleteReason==="max_output_tokens"||$.incompleteReason==="max-tokens")return"max-tokens";return"stop"}function PY($){return{async*stream(W){let Z=!1,Q=!1;try{let J=typeof $==="function"?await $():$;J.setAbortSignal?.(W.signal);let j=D5(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 cT(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 nT($){let W=Object.fromEntries(Object.entries($).filter(([,Z])=>Z!==void 0));return Object.keys(W).length>0?W:void 0}function aT($){return $.providerId==="openai-compatible"||$.clientType==="openai-compatible"}function oT($){let W={region:$.region,apiLine:$.apiLine,openRouterProviderSorting:$.openRouterProviderSorting,modelCatalog:$.modelCatalog};if(aT($))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 nT(W)}function sT($){return typeof $==="number"&&Number.isFinite($)&&$>0?Math.floor($):void 0}function WQ($){let W=$.providerConfig,Z=W?.knownModels?W.knownModels:$.knownModels??rT[$.providerId]?.models??void 0,Q=sT(W?.maxInputTokens),J=W?.modelInfo&&W.modelInfo.id===$.modelId?W.modelInfo:void 0;if(Q===void 0&&!J)return Z;return{...Z??{},[$.modelId]:{...Z?.[$.modelId],...Q!==void 0?{contextWindow:Q,maxInputTokens:Q}:{},...J,id:$.modelId}}}function tT($){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 eT($,W){return{id:$,name:W.name??$,description:W.description,contextWindow:W.contextWindow,maxInputTokens:W.maxInputTokens,maxOutputTokens:W.maxTokens,capabilities:tT(W.capabilities),metadata:{family:W.family,pricing:W.pricing,status:W.status,releaseDate:W.releaseDate}}}function SY($,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:WQ($),maxOutputTokens:$.maxTokensPerTurn,temperature:$.temperature,reasoningEffort:$.reasoningEffort,thinkingBudgetTokens:$.thinkingBudgetTokens,thinking:$.thinking,logger:W,extensionContext:$.extensionContext};if(pT(iT(j.providerId)))return PY(()=>lT(j));return dT({fetch:j.fetch,providerConfigs:[{providerId:j.providerId,apiKey:j.apiKey,baseUrl:j.baseUrl,headers:j.headers,timeoutMs:j.timeoutMs,fetch:j.fetch,options:oT(j),models:j.knownModels?Object.entries(j.knownModels).map(([X,Y])=>eT(X,Y)):void 0}],logger:W,telemetry:Z??$.telemetry??$.extensionContext?.telemetry}).createAgentModel({providerId:j.providerId,modelId:j.modelId},{maxTokens:j.maxOutputTokens,temperature:j.temperature})}F0();import{createMediaBudgetState as $O,IMAGE_OMITTED_PLACEHOLDER as bY,normalizeUserInput as yY,resolveMediaBudget as WO,validateAndReserveImageMedia as ZO}from"@cline/shared";var QO=8000,JO=50000,jO=6000000,XO=200000,YO=12000,VO=65536,c8=2000,hY=40000,BO=8,ZQ={maxToolResultChars:"CLINE_MESSAGE_BUILDER_MAX_TOOL_RESULT_CHARS",maxTotalTextBytes:"CLINE_MESSAGE_BUILDER_MAX_TOTAL_TEXT_BYTES",minOutdatedRewriteBytes:"CLINE_MESSAGE_BUILDER_MIN_OUTDATED_REWRITE_BYTES"},HO=new Set(["read","read_files"]),m$="[outdated - see the latest file content]",kY="Tool execution was interrupted before a result was produced.",IY=($)=>`
|
|
142
142
|
|
|
143
143
|
...[truncated ${$} chars]...
|
|
144
144
|
|
|
145
|
-
`,
|
|
145
|
+
`,u8=($)=>`
|
|
146
146
|
|
|
147
147
|
...[truncated ${$} chars to fit provider request budget]...
|
|
148
148
|
|
|
149
|
-
`,
|
|
149
|
+
`,GO=($)=>`
|
|
150
150
|
|
|
151
151
|
...[assistant text truncated: omitted ${$} chars]...
|
|
152
152
|
|
|
153
|
-
`,
|
|
153
|
+
`,xY=($)=>`
|
|
154
154
|
|
|
155
155
|
...[assistant text truncated: omitted ${$} chars to fit provider request budget]...
|
|
156
156
|
|
|
157
|
-
`,
|
|
157
|
+
`,KO=($)=>`
|
|
158
158
|
|
|
159
159
|
...[assistant text truncated: omitted ${$} chars due to repeated tool-call markup]...
|
|
160
160
|
|
|
161
|
-
`;function mY($=process.env){return{maxToolResultChars:gY($[ZQ.maxToolResultChars]),maxTotalTextBytes:gY($[ZQ.maxTotalTextBytes]),minOutdatedRewriteBytes:HT($[ZQ.minOutdatedRewriteBytes])}}class JQ{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=m8($.maxToolResultChars,eO),this.maxFileContentChars=m8($.maxFileContentChars,$T),this.maxTotalTextBytes=m8($.maxTotalTextBytes,WT),this.mediaBudget=$.mediaBudget??{},this.maxAssistantTextChars=m8($.maxAssistantTextChars,ZT),this.maxAssistantToolMarkupChars=m8($.maxAssistantToolMarkupChars,QT),this.minOutdatedRewriteBytes=GT($.minOutdatedRewriteBytes,JT)}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=bY(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=bY($.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=k2($.content,this.maxFileContentChars,kY);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?W0(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+=W0(V.data)}else if(s1(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+=W0(this.truncateMiddle(V.content))}return Y}providerBoundEntryBytes($){let W=this.truncateNestedStrings($);return W0(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 $?`${hY} Tool: ${$}.`:hY}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(s1(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)??m$;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:m$}}if(j.type==="image"){if(J===0)return j;return J-=1,{type:"text",text:m$}}if(s1(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:m$};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=m$;else if(typeof Q.content==="string")Q.content=m$;else Q.result=m$;return Q}isReadTool($){return!!$&&XT.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(s1(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(jQ($))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 k2($,this.maxToolResultChars,kY)}truncateAssistantText($){if(this.hasRepeatedToolCallMarkup($))return k2($,this.maxAssistantToolMarkupChars,VT);return k2($,this.maxAssistantTextChars,YT)}hasRepeatedToolCallMarkup($){if($.length<=this.maxAssistantToolMarkupChars)return!1;let W=0;for(let Z of $.matchAll(BT))if(W+=1,W>=jT)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)=>FT(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=KT(J.get(),Y,J.makeMarker);J.set(V),W-=j-W0(V)}return Z}countMessageTextBytes($){let W=0;for(let Z of $){if(typeof Z.content==="string"){W+=W0(Z.content);continue}for(let Q of Z.content)if(Q.type==="text")W+=W0(Q.text);else if(Q.type==="thinking")W+=W0(Q.thinking);else if(Q.type==="file")W+=W0(Q.content);else if(Q.type==="tool_use")W+=_5(Q.input);else if(Q.type==="tool_result"){if(typeof Q.content==="string")W+=W0(Q.content);else for(let J of Q.content)if(J.type==="text")W+=W0(J.text);else if(J.type==="file")W+=W0(J.content);else if(s1(J))W+=_5(J)}}return W}collectTruncationCandidates($){let W=[],Z=[];for(let Q of $){if(Q.role==="assistant"&&typeof Q.content==="string"){W.push({byteLength:W0(Q.content),minBytes:yY,makeMarker:IY,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"){f5(J.input,Z);continue}if(Q.role==="assistant"&&J.type==="text"){W.push({byteLength:W0(J.text),minBytes:yY,makeMarker:IY,get:()=>J.text,set:(j)=>{J.text=j}});continue}if(J.type!=="tool_result")continue;if(typeof J.content==="string"){W.push({byteLength:W0(J.content),minBytes:v8,makeMarker:c8,get:()=>J.content,set:(j)=>{J.content=j}});continue}for(let j of J.content)if(j.type==="text")W.push({byteLength:W0(j.text),minBytes:v8,makeMarker:c8,get:()=>j.text,set:(X)=>{j.text=X}});else if(j.type==="file")W.push({byteLength:W0(j.content),minBytes:v8,makeMarker:c8,get:()=>j.content,set:(X)=>{j.content=X}});else if(s1(j))f5(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=oO(),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 sO(this.mediaBudget)}applyMediaBudgetToBlock($,W,Z){if(QQ($))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(QQ($))return this.limitImageContent($,W,Z);if(s1($))return this.limitNestedMedia($,W,Z);return $}limitNestedMedia($,W,Z){if(QQ($)){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(!vY($))return{type:"text",text:SY};let Q=tO($.mediaType,$.data,{maxImageEncodedBytes:W.maxImageEncodedBytes,maxImageDecodedBytes:W.maxImageDecodedBytes,maxTotalMediaBytes:W.maxTotalMediaBytes},Z);if(!Q.ok)return{type:"text",text:SY};return{...$,data:Q.base64,mediaType:Q.mediaType}}}var xY=String.raw`[\|\uFF5C]`,BT=new RegExp(String.raw`<\s*(?:${xY}\s*)?DSML\s*(?:${xY}\s*)?(?:tool_calls|invoke)\b[^>]*>|<\s*/?\s*(?:tool_calls?|tool_call|function_calls?|function_call|invoke)\b[^>]*>`,"gi");function W0($){return Buffer.byteLength($,"utf8")}function gY($){if($===void 0)return;let W=Number.parseInt($,10);return Number.isFinite(W)&&W>0?W:void 0}function HT($){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 m8($,W){return typeof $==="number"&&Number.isFinite($)&&$>0?Math.floor($):W}function GT($,W){if(typeof $!=="number"||Number.isNaN($)||$<0)return W;return Number.isFinite($)?Math.floor($):$}function k2($,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 KT($,W,Z){if(W0($)<=W)return $;let Q=0,J=$.length,j=k2($,0,Z);while(Q<=J){let X=Q+J>>>1,Y=k2($,X,Z);if(W0(Y)<=W)j=Y,Q=X+1;else J=X-1}return j}function FT($){if($.type==="tool_use")return{...$,input:L5($.input)};if($.type!=="tool_result"||typeof $.content==="string")return{...$};return{...$,content:$.content.map((W)=>s1(W)?L5(W):{...W})}}function s1($){if($===null||typeof $!=="object")return!1;let W=$.type;return W!=="text"&&W!=="image"&&W!=="file"}function QQ($){return $!==null&&typeof $==="object"&&$.type==="image"}function vY($){return $!==null&&typeof $==="object"&&$.type==="image"&&typeof $.data==="string"&&typeof $.mediaType==="string"}function jQ($){return vY($)}function _5($){if(typeof $==="string")return W0($);if(Array.isArray($)){let W=0;for(let Z of $)W+=_5(Z);return W}if($!==null&&typeof $==="object"){if(jQ($))return 0;let W=0;for(let Z of Object.values($))W+=_5(Z);return W}return 0}function f5($,W){if(Array.isArray($)){$.forEach((Z,Q)=>{if(typeof Z==="string")W.push({byteLength:W0(Z),minBytes:v8,makeMarker:c8,get:()=>$[Q],set:(J)=>{$[Q]=J}});else f5(Z,W)});return}if($!==null&&typeof $==="object"){if(jQ($))return;let Z=$;for(let Q of Object.keys(Z)){let J=Z[Q];if(typeof J==="string")W.push({byteLength:W0(J),minBytes:v8,makeMarker:c8,get:()=>Z[Q],set:(j)=>{Z[Q]=j}});else f5(J,W)}}}function L5($){if(Array.isArray($))return $.map(L5);if($!==null&&typeof $==="object"){let W={};for(let[Z,Q]of Object.entries($))W[Z]=L5(Q);return W}return $}function XQ(){return`conv_${Date.now()}_${Math.random().toString(36).slice(2,9)}`}class YQ{messages=[];conversationId=XQ();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=XQ(),this.sessionStarted=!1}clearHistory(){this.messages=[],this.conversationId=XQ(),this.sessionStarted=!1}restore($){this.messages=[...$],this.sessionStarted=!1}isSessionStarted(){return this.sessionStarted}markSessionStarted(){this.sessionStarted=!0}}function cY($){let{agentConfig:W}=$,Z=AT(W),Q=UT(W),J=$.hooks,j=DT(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 AT($){let W={};if($.thinking!==void 0)W.thinking=$.thinking;if($.reasoningEffort!==void 0)W.reasoningEffort=$.reasoningEffort;if($.thinkingBudgetTokens!==void 0)W.thinkingBudgetTokens=$.thinkingBudgetTokens;if($.maxTokensPerTurn!==void 0)W.maxTokensPerTurn=$.maxTokensPerTurn;if($.temperature!==void 0)W.temperature=$.temperature;if($.apiTimeoutMs!==void 0)W.apiTimeoutMs=$.apiTimeoutMs;return Object.keys(W).length>0?W:void 0}function UT($){let W=$.providerConfig?.family;return{id:$.modelId,provider:$.providerId,family:W}}function DT($){if($===void 0)return;return $>=2?"parallel":"sequential"}function _T($){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 I2($){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 fT(){return{lastToolName:"",lastToolSignature:"",consecutiveIdenticalCount:0}}function LT($){$.lastToolName="",$.lastToolSignature="",$.consecutiveIdenticalCount=0}function VQ($){if($==null||typeof $!=="object")return $;if(Array.isArray($))return $.map(VQ);let W={};for(let Z of Object.keys($).sort())W[Z]=VQ($[Z]);return W}function OT($){if($==null)return"null";if(typeof $==="string")return $;if(typeof $!=="object")return String($);try{return JSON.stringify(VQ($))}catch{return String($)}}function TT($,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 uY={softThreshold:3,hardThreshold:5};class BQ{config;state=fT();constructor($){this.config={softThreshold:$?.softThreshold??uY.softThreshold,hardThreshold:$?.hardThreshold??uY.hardThreshold}}inspect($){let W=OT($.input),Z=TT(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(){LT(this.state)}}class HQ{consecutiveMistakes=0;options;constructor($){this.options=$}async record($){let W=this.options.maxConsecutiveMistakes,Z=$.forceAtLimit&&W?W:this.consecutiveMistakes+1;this.consecutiveMistakes=Z;let Q=$.details?.trim()||`consecutive mistake (${$.reason})`;if(this.options.emit({type:"error",error:Error(Q),recoverable:!0,iteration:$.iteration}),this.options.log("warn","Recorded consecutive mistake",{agentId:this.options.agentId,conversationId:this.options.getConversationId(),runId:this.options.getActiveRunId(),iteration:$.iteration,reason:$.reason,details:$.details,consecutiveMistakes:Z,maxConsecutiveMistakes:this.options.maxConsecutiveMistakes}),!W||Z<W)return{action:"continue"};let J={iteration:$.iteration,consecutiveMistakes:Z,maxConsecutiveMistakes:W,reason:$.reason,details:$.details};this.options.onLimitTelemetry?.(J);let j=await qT(J,this.options.onLimitReached);if(j.action==="continue"){let X=j.guidance?.trim();if(X)this.options.appendRecoveryNotice(X,$.reason);return this.consecutiveMistakes=0,{action:"continue",guidance:X}}return{action:"stop",reason:j.reason?.trim()||void 0,message:zT({iteration:$.iteration,consecutiveMistakes:Z,maxConsecutiveMistakes:W,reason:$.reason,details:$.details,stopReason:j.reason})}}reset(){this.consecutiveMistakes=0}get value(){return this.consecutiveMistakes}}function zT($){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 qT($,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 MT($){switch($){case"auto_compaction":case"manual_compaction":case"compaction_budget_emergency":return $;default:return}}function RT($){let W=$.content.filter((Z)=>Z.type==="text");if(W.length===0)return;return W.map((Z)=>Z.text).join("")}function ET($){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 NT($){return $.content.find((W)=>W.type==="tool-result")}function wT($){switch($){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}function CT($){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 GQ{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:MT($.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=RT($);if(Z!==void 0)W.push({type:"content_end",contentType:"text",text:Z});let Q=ET($);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=NT($.message),J=Q?.output,j=CT(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:wT($.status),text:$.outputText,iterations:$.iterations,usage:W}]}}function xT($){if(typeof $==="string")return $;if($ instanceof Error)return $.message;try{return JSON.stringify($)}catch{return String($)}}async function gT($){let Z=(typeof $.content==="function"?await $.content():$.content).trim();return Z.length>0?Z:void 0}function mT($,W){let Z=$.trim(),Q=W.map((J)=>J.trim()).filter(Boolean).join(`
|
|
161
|
+
`;function vY($=process.env){return{maxToolResultChars:mY($[ZQ.maxToolResultChars]),maxTotalTextBytes:mY($[ZQ.maxTotalTextBytes]),minOutdatedRewriteBytes:AO($[ZQ.minOutdatedRewriteBytes])}}class JQ{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=v8($.maxToolResultChars,QO),this.maxFileContentChars=v8($.maxFileContentChars,JO),this.maxTotalTextBytes=v8($.maxTotalTextBytes,jO),this.mediaBudget=$.mediaBudget??{},this.maxAssistantTextChars=v8($.maxAssistantTextChars,XO),this.maxAssistantToolMarkupChars=v8($.maxAssistantToolMarkupChars,YO),this.minOutdatedRewriteBytes=UO($.minOutdatedRewriteBytes,VO)}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=yY(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=yY($.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=x2($.content,this.maxFileContentChars,IY);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?W0(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+=W0(V.data)}else if(s1(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+=W0(this.truncateMiddle(V.content))}return Y}providerBoundEntryBytes($){let W=this.truncateNestedStrings($);return W0(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 $?`${kY} Tool: ${$}.`:kY}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(s1(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)??m$;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:m$}}if(j.type==="image"){if(J===0)return j;return J-=1,{type:"text",text:m$}}if(s1(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:m$};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=m$;else if(typeof Q.content==="string")Q.content=m$;else Q.result=m$;return Q}isReadTool($){return!!$&&HO.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(s1(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(jQ($))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 x2($,this.maxToolResultChars,IY)}truncateAssistantText($){if(this.hasRepeatedToolCallMarkup($))return x2($,this.maxAssistantToolMarkupChars,KO);return x2($,this.maxAssistantTextChars,GO)}hasRepeatedToolCallMarkup($){if($.length<=this.maxAssistantToolMarkupChars)return!1;let W=0;for(let Z of $.matchAll(FO))if(W+=1,W>=BO)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)=>_O(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=DO(J.get(),Y,J.makeMarker);J.set(V),W-=j-W0(V)}return Z}countMessageTextBytes($){let W=0;for(let Z of $){if(typeof Z.content==="string"){W+=W0(Z.content);continue}for(let Q of Z.content)if(Q.type==="text")W+=W0(Q.text);else if(Q.type==="thinking")W+=W0(Q.thinking);else if(Q.type==="file")W+=W0(Q.content);else if(Q.type==="tool_use")W+=_5(Q.input);else if(Q.type==="tool_result"){if(typeof Q.content==="string")W+=W0(Q.content);else for(let J of Q.content)if(J.type==="text")W+=W0(J.text);else if(J.type==="file")W+=W0(J.content);else if(s1(J))W+=_5(J)}}return W}collectTruncationCandidates($){let W=[],Z=[];for(let Q of $){if(Q.role==="assistant"&&typeof Q.content==="string"){W.push({byteLength:W0(Q.content),minBytes:hY,makeMarker:xY,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"){f5(J.input,Z);continue}if(Q.role==="assistant"&&J.type==="text"){W.push({byteLength:W0(J.text),minBytes:hY,makeMarker:xY,get:()=>J.text,set:(j)=>{J.text=j}});continue}if(J.type!=="tool_result")continue;if(typeof J.content==="string"){W.push({byteLength:W0(J.content),minBytes:c8,makeMarker:u8,get:()=>J.content,set:(j)=>{J.content=j}});continue}for(let j of J.content)if(j.type==="text")W.push({byteLength:W0(j.text),minBytes:c8,makeMarker:u8,get:()=>j.text,set:(X)=>{j.text=X}});else if(j.type==="file")W.push({byteLength:W0(j.content),minBytes:c8,makeMarker:u8,get:()=>j.content,set:(X)=>{j.content=X}});else if(s1(j))f5(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=$O(),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 WO(this.mediaBudget)}applyMediaBudgetToBlock($,W,Z){if(QQ($))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(QQ($))return this.limitImageContent($,W,Z);if(s1($))return this.limitNestedMedia($,W,Z);return $}limitNestedMedia($,W,Z){if(QQ($)){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(!cY($))return{type:"text",text:bY};let Q=ZO($.mediaType,$.data,{maxImageEncodedBytes:W.maxImageEncodedBytes,maxImageDecodedBytes:W.maxImageDecodedBytes,maxTotalMediaBytes:W.maxTotalMediaBytes},Z);if(!Q.ok)return{type:"text",text:bY};return{...$,data:Q.base64,mediaType:Q.mediaType}}}var gY=String.raw`[\|\uFF5C]`,FO=new RegExp(String.raw`<\s*(?:${gY}\s*)?DSML\s*(?:${gY}\s*)?(?:tool_calls|invoke)\b[^>]*>|<\s*/?\s*(?:tool_calls?|tool_call|function_calls?|function_call|invoke)\b[^>]*>`,"gi");function W0($){return Buffer.byteLength($,"utf8")}function mY($){if($===void 0)return;let W=Number.parseInt($,10);return Number.isFinite(W)&&W>0?W:void 0}function AO($){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 v8($,W){return typeof $==="number"&&Number.isFinite($)&&$>0?Math.floor($):W}function UO($,W){if(typeof $!=="number"||Number.isNaN($)||$<0)return W;return Number.isFinite($)?Math.floor($):$}function x2($,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 DO($,W,Z){if(W0($)<=W)return $;let Q=0,J=$.length,j=x2($,0,Z);while(Q<=J){let X=Q+J>>>1,Y=x2($,X,Z);if(W0(Y)<=W)j=Y,Q=X+1;else J=X-1}return j}function _O($){if($.type==="tool_use")return{...$,input:L5($.input)};if($.type!=="tool_result"||typeof $.content==="string")return{...$};return{...$,content:$.content.map((W)=>s1(W)?L5(W):{...W})}}function s1($){if($===null||typeof $!=="object")return!1;let W=$.type;return W!=="text"&&W!=="image"&&W!=="file"}function QQ($){return $!==null&&typeof $==="object"&&$.type==="image"}function cY($){return $!==null&&typeof $==="object"&&$.type==="image"&&typeof $.data==="string"&&typeof $.mediaType==="string"}function jQ($){return cY($)}function _5($){if(typeof $==="string")return W0($);if(Array.isArray($)){let W=0;for(let Z of $)W+=_5(Z);return W}if($!==null&&typeof $==="object"){if(jQ($))return 0;let W=0;for(let Z of Object.values($))W+=_5(Z);return W}return 0}function f5($,W){if(Array.isArray($)){$.forEach((Z,Q)=>{if(typeof Z==="string")W.push({byteLength:W0(Z),minBytes:c8,makeMarker:u8,get:()=>$[Q],set:(J)=>{$[Q]=J}});else f5(Z,W)});return}if($!==null&&typeof $==="object"){if(jQ($))return;let Z=$;for(let Q of Object.keys(Z)){let J=Z[Q];if(typeof J==="string")W.push({byteLength:W0(J),minBytes:c8,makeMarker:u8,get:()=>Z[Q],set:(j)=>{Z[Q]=j}});else f5(J,W)}}}function L5($){if(Array.isArray($))return $.map(L5);if($!==null&&typeof $==="object"){let W={};for(let[Z,Q]of Object.entries($))W[Z]=L5(Q);return W}return $}function XQ(){return`conv_${Date.now()}_${Math.random().toString(36).slice(2,9)}`}class YQ{messages=[];conversationId=XQ();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=XQ(),this.sessionStarted=!1}clearHistory(){this.messages=[],this.conversationId=XQ(),this.sessionStarted=!1}restore($){this.messages=[...$],this.sessionStarted=!1}isSessionStarted(){return this.sessionStarted}markSessionStarted(){this.sessionStarted=!0}}function uY($){let{agentConfig:W}=$,Z=fO(W),Q=LO(W),J=$.hooks,j=TO(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 fO($){let W={};if($.thinking!==void 0)W.thinking=$.thinking;if($.reasoningEffort!==void 0)W.reasoningEffort=$.reasoningEffort;if($.thinkingBudgetTokens!==void 0)W.thinkingBudgetTokens=$.thinkingBudgetTokens;if($.maxTokensPerTurn!==void 0)W.maxTokensPerTurn=$.maxTokensPerTurn;if($.temperature!==void 0)W.temperature=$.temperature;if($.apiTimeoutMs!==void 0)W.apiTimeoutMs=$.apiTimeoutMs;return Object.keys(W).length>0?W:void 0}function LO($){let W=$.providerConfig?.family;return{id:$.modelId,provider:$.providerId,family:W}}function TO($){if($===void 0)return;return $>=2?"parallel":"sequential"}function OO($){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 g2($){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 zO(){return{lastToolName:"",lastToolSignature:"",consecutiveIdenticalCount:0}}function qO($){$.lastToolName="",$.lastToolSignature="",$.consecutiveIdenticalCount=0}function VQ($){if($==null||typeof $!=="object")return $;if(Array.isArray($))return $.map(VQ);let W={};for(let Z of Object.keys($).sort())W[Z]=VQ($[Z]);return W}function MO($){if($==null)return"null";if(typeof $==="string")return $;if(typeof $!=="object")return String($);try{return JSON.stringify(VQ($))}catch{return String($)}}function RO($,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 dY={softThreshold:3,hardThreshold:5};class BQ{config;state=zO();constructor($){this.config={softThreshold:$?.softThreshold??dY.softThreshold,hardThreshold:$?.hardThreshold??dY.hardThreshold}}inspect($){let W=MO($.input),Z=RO(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(){qO(this.state)}}class HQ{consecutiveMistakes=0;options;constructor($){this.options=$}async record($){let W=this.options.maxConsecutiveMistakes,Z=$.forceAtLimit&&W?W:this.consecutiveMistakes+1;this.consecutiveMistakes=Z;let Q=$.details?.trim()||`consecutive mistake (${$.reason})`;if(this.options.emit({type:"error",error:Error(Q),recoverable:!0,iteration:$.iteration}),this.options.log("warn","Recorded consecutive mistake",{agentId:this.options.agentId,conversationId:this.options.getConversationId(),runId:this.options.getActiveRunId(),iteration:$.iteration,reason:$.reason,details:$.details,consecutiveMistakes:Z,maxConsecutiveMistakes:this.options.maxConsecutiveMistakes}),!W||Z<W)return{action:"continue"};let J={iteration:$.iteration,consecutiveMistakes:Z,maxConsecutiveMistakes:W,reason:$.reason,details:$.details};this.options.onLimitTelemetry?.(J);let j=await EO(J,this.options.onLimitReached);if(j.action==="continue"){let X=j.guidance?.trim();if(X)this.options.appendRecoveryNotice(X,$.reason);return this.consecutiveMistakes=0,{action:"continue",guidance:X}}return{action:"stop",reason:j.reason?.trim()||void 0,message:NO({iteration:$.iteration,consecutiveMistakes:Z,maxConsecutiveMistakes:W,reason:$.reason,details:$.details,stopReason:j.reason})}}reset(){this.consecutiveMistakes=0}get value(){return this.consecutiveMistakes}}function NO($){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 EO($,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 wO($){switch($){case"auto_compaction":case"manual_compaction":case"compaction_budget_emergency":return $;default:return}}function CO($){let W=$.content.filter((Z)=>Z.type==="text");if(W.length===0)return;return W.map((Z)=>Z.text).join("")}function PO($){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 SO($){return $.content.find((W)=>W.type==="tool-result")}function bO($){switch($){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}function yO($){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 GQ{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:wO($.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=CO($);if(Z!==void 0)W.push({type:"content_end",contentType:"text",text:Z});let Q=PO($);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=SO($.message),J=Q?.output,j=yO(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:bO($.status),text:$.outputText,iterations:$.iterations,usage:W}]}}function uO($){if(typeof $==="string")return $;if($ instanceof Error)return $.message;try{return JSON.stringify($)}catch{return String($)}}async function dO($){let Z=(typeof $.content==="function"?await $.content():$.content).trim();return Z.length>0?Z:void 0}function lO($,W){let Z=$.trim(),Q=W.map((J)=>J.trim()).filter(Boolean).join(`
|
|
162
162
|
|
|
163
163
|
`);if(Z&&Q)return`${Z}
|
|
164
164
|
|
|
165
|
-
${Q}`;return Z||Q}function vT($,W){let Z=W?.["*"]??{},Q=W?.[$]??{};return{...Z,...Q}.enabled!==!1}function cT($,W){return $.filter((Z)=>vT(Z.name,W))}function uT($,W){return l1(cT($,W))}function dT($){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:lY(J?.options,X.options)},Q={...Q,...X.messages?{messages:X.messages}:{},...X.tools?{tools:X.tools}:{},...X.options?{options:lY(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 t1{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 GQ;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??kT,this.conversation=new YQ($.initialMessages),this.messageBuilder=new JQ(mY()),this.contributionRegistry=IT({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 HQ({maxConsecutiveMistakes:Z,onLimitReached:$.onConsecutiveMistakeLimitReached,onLimitTelemetry:(j)=>{N9(this.telemetry,{ulid:this.config.sessionId??this.conversation.getConversationId(),model:this.config.modelId,provider:this.config.providerId,reason:j.reason,consecutiveMistakes:j.consecutiveMistakes,maxConsecutiveMistakes:j.maxConsecutiveMistakes,agentId:this.agentId,conversationId:this.conversation.getConversationId(),parentAgentId:this.parentAgentId,isSubagent:Boolean(this.parentAgentId)})},emit:(j)=>this.emitLegacyEvent(j),log:(j,X,Y)=>lT(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 BQ(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=I2($),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 gT(W);if(Z)$.push(Z)}return mT(this.config.systemPrompt,$)}executeRun($){let W;return W=this.executeRunInternal($).finally(()=>{if(this.activeRunPromise===W)this.activeRunPromise=null}),this.activeRunPromise=W,W}async executeRunInternal($){if(this.shutdownCalled)throw Error(`SessionRuntime.run called after shutdown (agentId=${this.agentId})`);if(this.running)throw Error(`SessionRuntime state is "running"; call canStartRun() first (agentId=${this.agentId})`);this.running=!0,this.abortRequested=!1,this.abortReason=void 0,this.activeRunId=`run_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,await this.ensureExtensionsInitialized(),this.eventAdapter.reset(),this.currentRunToolCalls=[],this.currentRunUsage={inputTokens:0,outputTokens:0},this.toolStartedAt.clear(),this.toolInputs.clear(),this.currentTurnSuccessfulTools=0,this.currentTurnFailedTools=0,this.currentTurnFailureDetails=[],this.activeTrackerWork=Promise.resolve(),this.trackerAbortInFlight=!1;let W=new Date,Z=$.userMessage;if(Z!==void 0){let _=await rT(Z,$.userImages,$.userFiles,this.config.userFileContentLoader);this.conversation.appendMessage({role:"user",content:_})}let Q=await this.composeSystemPrompt(),J=PY(this.config,this.logger,this.telemetry),j=new Map;for(let _ of this.contributionRegistry.getRegisteredTools())j.set(_.name,_);let X=uT([...j.values()],this.config.toolPolicies),Y=new Map;for(let _ of X)Y.set(_.name,_);for(let _ of this.config.tools)Y.set(_.name,_);let V=this.conversation.getConversationId(),B=pY(this.config),H=Array.from(Y.values()),G=U5(this.conversation.getMessages()),K=cY({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,[r4]:this.telemetry},hooks:this.createRuntimeHooks(),prepareTurn:this.createRuntimePrepareTurn(B,H),initialMessages:G,systemPrompt:Q}),F=this.createAgentRuntimeImpl(K);if(this.activeRuntime=F,this.abortRequested)F.abort(this.abortReason);let A=F.subscribe((_)=>{this.handleRuntimeEvent(_)}),D,U;try{if($.isContinue)D=await F.continue(void 0);else D=await F.run("")}catch(_){U=_ instanceof Error?_:Error(String(_))}finally{A();try{await this.activeTrackerWork}catch(_){this.logger?.error?.("SessionRuntime tracker work failed during drain",{agentId:this.agentId,error:_})}this.activeRuntime=null,this.running=!1,this.abortRequested=!1,this.abortReason=void 0}if(D&&D.messages.length>0){let _=h2(D.messages);this.conversation.replaceMessages(_)}let f=new Date;try{return this.buildLegacyResult({runResult:D,thrownError:U,startedAt:W,endedAt:f})}finally{this.activeRunId=null}}async ensureExtensionsInitialized(){if(this.extensionsInitialized)return;try{await this.contributionRegistry.initialize({tolerateSetupErrors:this.config.hookErrorMode!=="throw"})}catch($){if(this.config.hookErrorMode==="throw")throw $;this.emitLegacyEvent({type:"error",error:$ instanceof Error?$:Error(String($)),recoverable:!0,iteration:0})}this.extensionsInitialized=!0}createRuntimeHooks(){let $=dT([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=h2(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:U5(X.messages)}:{},...X.systemPrompt!==void 0?{systemPrompt:X.systemPrompt}:{}}}}async prepareMessagesForModelRequest($){let W=await this.prepareProviderMessagesForApi(D5($));return U5(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?xT(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(h2($));return}if(W.length===0)return;let Z=new Set(this.conversation.getMessages().map((J)=>J.id).filter((J)=>typeof J==="string")),Q=h2(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":pT(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?h2(W.messages):this.conversation.getMessages(),H=pY(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 lT($,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 pT($){if(!$)return"error";switch($.status){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}async function rT($,W,Z,Q){let{buildInitialUserContent:J}=await Promise.resolve().then(() => dY);return J($,W,Z,Q)}function pY($){if($.knownModels?.[$.modelId])return $.knownModels[$.modelId];let W=WQ($);if(W?.[$.modelId])return W[$.modelId];return}import{buildClineSystemPrompt as rY}from"@cline/shared";function iY($,W){let Z=$.trim();if(W.providerId.toLowerCase()!=="cline")return Z;return rY({ide:W.clineIdeName?.trim()||"Terminal",workspaceRoot:W.cwd?.trim()||"/",providerId:W.providerId,rules:`# Team Teammate Role
|
|
166
|
-
${Z}`,platform:W.clinePlatform,metadata:W.workspaceMetadata})}function nY($,W){let Z=$.trim();if(W.providerId.toLowerCase()!=="cline")return Z;return rY({ide:W.clineIdeName||"Terminal",workspaceRoot:W.cwd?.trim()||"/",providerId:W.providerId,overridePrompt:Z,metadata:W.workspaceMetadata,platform:W.clinePlatform})}function x2($){let W={...$};return{getRuntimeConfig:()=>W,getConnectionConfig:()=>({providerId:W.providerId,modelId:W.modelId,apiKey:W.apiKey,baseUrl:W.baseUrl,headers:W.headers,providerConfig:W.providerConfig,knownModels:W.knownModels,thinking:W.thinking,reasoningEffort:W.reasoningEffort,thinkingBudgetTokens:W.thinkingBudgetTokens,maxTokensPerTurn:W.maxTokensPerTurn,temperature:W.temperature}),updateConnectionDefaults:(Z)=>{W={...W,...Z}}}}function d8($){let W=$.configProvider.getRuntimeConfig(),Z=$.kind==="teammate"?iY($.prompt,W):nY($.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 g2($){let W=d8($),Z=new t1(W);if(W.onEvent)Z.subscribeEvents(W.onEvent);return Z}var aT=KQ.object({systemPrompt:KQ.string().describe("System prompt defining the sub-agent's behavior"),task:KQ.string().describe("Task for the sub-agent to complete")});function m2($){return iT({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:nT(aT),execute:async(W,Z)=>{let Q=$.createSubAgentTools?await $.createSubAgentTools(W,Z):$.subAgentTools??[],J=g2({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 G0,TEAM_AWAIT_TIMEOUT_MS as oT,TEAM_RUN_MESSAGE_PREVIEW_LIMIT as sT,TEAM_RUN_TEXT_PREVIEW_LIMIT as tT,TEAM_TASK_IGNORED_FIELDS_BY_ACTION as eT,TeamAttachOutcomeFragmentInputSchema as aY,TeamAwaitRunsInputSchema as oY,TeamBroadcastInputSchema as sY,TeamBroadcastToolResultSchema as $z,TeamCancelRunInputSchema as tY,TeamCancelRunToolResultSchema as Wz,TeamCleanupInputSchema as eY,TeamCleanupToolResultSchema as Zz,TeamCreateOutcomeInputSchema as $V,TeamCreateOutcomeToolResultSchema as Qz,TeamFinalizeOutcomeInputSchema as WV,TeamFinalizeOutcomeToolResultSchema as Jz,TeamListOutcomesInputSchema as ZV,TeamListRunsInputSchema as QV,TeamMailboxMessageToolResultSchema as jz,TeamMissionLogInputSchema as JV,TeamMissionLogToolResultSchema as Xz,TeamOutcomeFragmentToolResultSchema as jV,TeamOutcomeToolResultSchema as Yz,TeamReadMailboxInputSchema as XV,TeamReviewOutcomeFragmentInputSchema as YV,TeamRunTaskInputSchema as VV,TeamRunTaskToolResultSchema as FQ,TeamRunToolSummarySchema as AQ,TeamSendMessageInputSchema as BV,TeamSendMessageToolResultSchema as Vz,TeamShutdownTeammateInputSchema as HV,TeamSimpleAgentStatusToolResultSchema as GV,TeamSpawnTeammateInputSchema as KV,TeamStatusInputSchema as FV,TeamStatusToolResultSchema as Bz,TeamTaskInputSchema as AV,TeamTaskToolResultSchema as l8,validateWithZod as k,zodToJsonSchema as K0}from"@cline/shared";function UV($,W){let Z=$.replace(/\s+/g," ").trim();if(Z.length<=W)return Z;return`${Z.slice(0,Math.max(0,W-3)).trimEnd()}...`}function v$($,W){if($===void 0)throw Error(`Missing required field: ${W}`);return $}function Hz($){let W=$.result;if(!W)return;return{textPreview:UV(W.text,tT),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 O5($){return $?.toISOString()}function UQ($){return{id:$.id,agentId:$.agentId,taskId:$.taskId,status:$.status,messagePreview:UV($.message,sT),priority:$.priority,retryCount:$.retryCount,maxRetries:$.maxRetries,nextAttemptAt:O5($.nextAttemptAt),continueConversation:$.continueConversation,startedAt:$.startedAt.toISOString(),endedAt:O5($.endedAt),leaseOwner:$.leaseOwner,heartbeatAt:O5($.heartbeatAt),lastProgressAt:O5($.lastProgressAt),lastProgressMessage:$.lastProgressMessage,currentActivity:$.currentActivity,error:$.error,resultSummary:Hz($)}}function Gz($){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 T5=["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 DV($){let W=[];if($.createBaseTools)W.push(...$.createBaseTools());W.push(...p8({runtime:$.runtime,requesterId:$.spec.agentId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!1})),$.runtime.spawnTeammate({agentId:$.spec.agentId,config:d8({kind:"teammate",prompt:$.spec.rolePrompt,role:$.spec.rolePrompt,configProvider:$.teammateConfigProvider,tools:W,maxIterations:$.spec.maxIterations,cwd:$.teammateConfigProvider.getRuntimeConfig().cwd})})}function z5($){let W=$.leadAgentId??"lead",Z=$.restoredFromPersistence===!0,Q=p8({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;DV({runtime:$.runtime,requesterId:W,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:j}),J.push(j.agentId)}return{tools:Q,restoredFromPersistence:Z,restoredTeammates:J}}function p8($){let W=$.allowSpawn??!0,Z=$.includeSpawnTool??!0,Q=$.includeManagementTools??!0,J=[];if(Z)J.push(G0({name:"team_spawn_teammate",description:"Spawn a teammate with a required agentId and rolePrompt.",inputSchema:K0(KV),execute:async(X)=>{let Y=k(KV,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(DV({runtime:$.runtime,requesterId:$.requesterId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:V}),!Q)$.onLeadToolsUnlocked?.(p8({...$,includeSpawnTool:!1,includeManagementTools:!0,onLeadToolsUnlocked:void 0}));return k(GV,{agentId:Y.agentId,status:"spawned"})}}));if(!Q)return J;J.push(G0({name:"team_shutdown_teammate",description:"Shutdown a teammate by agentId.",inputSchema:K0(HV),execute:async(X)=>{let Y=k(HV,X);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");return $.runtime.shutdownTeammate(Y.agentId,Y.reason),k(GV,{agentId:Y.agentId,status:"stopped"})}})),J.push(G0({name:"team_status",description:"Return a snapshot of team members, task counts, mailbox, and mission log stats.",inputSchema:K0(FV),execute:async(X)=>{return k(FV,X),k(Bz,$.runtime.getSnapshot())}})),J.push(G0({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:K0(AV),execute:async(X)=>{let Y=k(AV,X);switch(Y.action){case"create":{let V=new Set(eT.create??[]),B=Object.entries(X).filter(([G,K])=>V.has(G)&&K!=null).map(([G])=>G),H=$.runtime.createTask({title:v$(Y.title,"title"),description:v$(Y.description,"description"),dependsOn:Y.dependsOn,assignee:Y.assignee,createdBy:$.requesterId});return k(l8,{action:"create",taskId:H.id,status:H.status,...B.length>0?{ignoredFields:B,note:`Ignored fields for action=create: ${B.join(", ")}`}:{}})}case"list":return k(l8,{action:"list",tasks:$.runtime.listTaskItems({status:Y.status,assignee:Y.assignee})});case"claim":{let V=$.runtime.claimTask(v$(Y.taskId,"taskId"),$.requesterId);return k(l8,{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(v$(Y.taskId,"taskId"),$.requesterId,v$(Y.summary,"summary"));return k(l8,{action:"complete",taskId:V.id,status:V.status})}case"block":{let V=$.runtime.blockTask(v$(Y.taskId,"taskId"),$.requesterId,v$(Y.reason,"reason"));return k(l8,{action:"block",taskId:V.id,status:V.status})}}}}));let j=new Map;return J.push(G0({name:"team_run_task",description:"Route a delegated task to a teammate. Choose sync (wait) or async (run in background).",inputSchema:K0(VV),execute:async(X)=>{let Y=k(VV,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 k(FQ,{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 k(FQ,{...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)=>k(FQ,{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(G0({name:"team_cancel_run",description:"Cancel one async teammate run.",inputSchema:K0(tY),execute:async(X)=>{let Y=k(tY,X),V=$.runtime.cancelRun(Y.runId,Y.reason);return k(Wz,{runId:V.id,status:V.status})}})),J.push(G0({name:"team_list_runs",description:"List teammate runs started with team_run_task in async mode, including live activity/progress fields when available.",inputSchema:K0(QV),execute:async(X)=>k(AQ.array(),$.runtime.listRuns(k(QV,X)).map(UQ))})),J.push(G0({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:K0(oY),timeoutMs:oT,execute:async(X)=>{let Y=k(oY,X);if(Y.runId){let H=await $.runtime.awaitRun(Y.runId);return Gz(H),k(AQ,UQ(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 k(AQ.array(),V.map(UQ))}})),J.push(G0({name:"team_send_message",description:"Send a mailbox message to a specific teammate.",inputSchema:K0(BV),execute:async(X)=>{let Y=k(BV,X),V=$.runtime.sendMessage($.requesterId,Y.toAgentId,Y.subject,Y.body,Y.taskId??void 0);return k(Vz,{id:V.id,toAgentId:V.toAgentId})}})),J.push(G0({name:"team_broadcast",description:"Broadcast a message to all teammates.",inputSchema:K0(sY),execute:async(X)=>{let Y=k(sY,X),V=$.runtime.broadcast($.requesterId,Y.subject,Y.body,{taskId:Y.taskId??void 0});return k($z,{delivered:V.length})}})),J.push(G0({name:"team_read_mailbox",description:"Read the current agent mailbox.",inputSchema:K0(XV),execute:async(X)=>{let Y=k(XV,X);return k(jz.array(),$.runtime.listMailbox($.requesterId,{unreadOnly:Y.unreadOnly,markRead:!0}))}})),J.push(G0({name:"team_mission_log",description:"Append a mission log update for your team.",inputSchema:K0(JV),execute:async(X)=>{let Y=k(JV,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 k(Xz,{id:V.id})}})),J.push(G0({name:"team_cleanup",description:"Clean up the team runtime. Fails if teammates are still running.",inputSchema:K0(eY),execute:async(X)=>{if(k(eY,X),$.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can run cleanup.");return $.runtime.cleanup(),k(Zz,{status:"cleaned"})}})),J.push(G0({name:"team_create_outcome",description:"Create a converged team outcome.",inputSchema:K0($V),execute:async(X)=>{let Y=k($V,X),V=$.runtime.createOutcome({title:Y.title,requiredSections:Y.requiredSections,createdBy:$.requesterId});return k(Qz,{outcomeId:V.id,status:V.status,requiredSections:V.requiredSections})}})),J.push(G0({name:"team_attach_outcome_fragment",description:"Attach a fragment to an outcome section.",inputSchema:K0(aY),execute:async(X)=>{let Y=k(aY,X),V=$.runtime.attachOutcomeFragment({outcomeId:Y.outcomeId,section:Y.section,sourceAgentId:$.requesterId,sourceRunId:Y.sourceRunId||void 0,content:Y.content});return k(jV,{fragmentId:V.id,status:V.status})}})),J.push(G0({name:"team_review_outcome_fragment",description:"Review one outcome fragment.",inputSchema:K0(YV),execute:async(X)=>{let Y=k(YV,X),V=$.runtime.reviewOutcomeFragment({fragmentId:Y.fragmentId,reviewedBy:$.requesterId,approved:Y.approved});return k(jV,{fragmentId:V.id,status:V.status})}})),J.push(G0({name:"team_finalize_outcome",description:"Finalize one outcome.",inputSchema:K0(WV),execute:async(X)=>{let Y=k(WV,X),V=$.runtime.finalizeOutcome(Y.outcomeId);return k(Jz,{outcomeId:V.id,status:V.status})}})),J.push(G0({name:"team_list_outcomes",description:"List team outcomes.",inputSchema:K0(ZV),execute:async(X)=>{return k(ZV,X),k(Yz.array(),$.runtime.listOutcomes())}})),J}function _V($){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}))}}var Kz=[{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:m2({configProvider:{}}).description,headlessToolNames:["spawn_agent"]},{id:"teams",description:"Enable team collaboration tools for teammate management, task coordination, mailbox messaging, mission logs, and outcomes.",headlessToolNames:[...T5]}],Fz={read_files:"enableReadFiles",search_codebase:"enableSearch",run_commands:"enableBash",fetch_web_content:"enableWebFetch",apply_patch:"enableApplyPatch",editor:"enableEditor",skills:"enableSkills",ask_question:"enableAskQuestion"};function Az($){return $==="plan"||$==="yolo"?$:"act"}function LV($){let W=Az($.mode),Z=X1[o1({mode:W})],Q=g8($.providerId??"",$.modelId??"",W,x8);return{mode:W,flags:{...Z,...Q,...typeof $.enableSpawnAgent==="boolean"?{enableSpawnAgent:$.enableSpawnAgent}:{},...typeof $.enableAgentTeams==="boolean"?{enableAgentTeams:$.enableAgentTeams}:{}}}}function fV($,W){if(W.disabledToolIds?.has($))return!1;let{flags:Z}=LV(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=Fz[$];return Q?Z[Q]===!0:!1}function Uz($,W){if($.id==="editor"){let{flags:Z}=LV(W),Q=Z.enableApplyPatch===!0&&Z.enableEditor!==!0;return{...$,defaultEnabled:fV($.id,W),headlessToolNames:[Q?"apply_patch":"editor"]}}return{...$,defaultEnabled:fV($.id,W)}}function r8($={}){return Kz.map((W)=>Uz(W,$))}function OV($={}){return r8($).filter((W)=>W.defaultEnabled).map((W)=>W.id)}function TV($){if(!$.enabled)return new Set;let W=r8($.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 DQ($,W={}){return r8(W).filter((Z)=>$.has(Z.id)).flatMap((Z)=>Z.headlessToolNames)}function zV($,W={}){return DQ($,W)}function i8($={}){let{executorOptions:W={},executors:Z,...Q}=$,J={...A5(W),...Z??{}};return b2({...Q,executors:J})}function q5($){return $.trim().replace(/^\/+/,"").toLowerCase()}function Dz($){if(!$||$.length===0)return;let W=$.map(q5).filter((Z)=>Z.length>0);return W.length>0?new Set(W):void 0}function _z($,W,Z){if(!Z)return!0;let Q=q5($),J=q5(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 n8($,W){let Z=Dz(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)=>_z(J.id,J.name,Z))}function fz($,W){return n8($,W).filter((Z)=>!Z.disabled).map((Z)=>Z.name.trim()).filter((Z)=>Z.length>0).sort((Z,Q)=>Z.localeCompare(Q))}function Lz($,W,Z){let Q=q5(W);if(!Q)return{error:"Missing skill name."};let J=n8($,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=fz($,Z);return{error:B.length>0?`Skill "${W}" not found. Available skills: ${B.join(", ")}`:"No skills are currently available."}}function _Q($,W=Promise.resolve(),Z){let Q=new Set,J=async(j,X)=>{await W;let Y=Lz($,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?`
|
|
165
|
+
${Q}`;return Z||Q}function pO($,W){let Z=W?.["*"]??{},Q=W?.[$]??{};return{...Z,...Q}.enabled!==!1}function rO($,W){return $.filter((Z)=>pO(Z.name,W))}function iO($,W){return l1(rO($,W))}function nO($){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:pY(J?.options,X.options)},Q={...Q,...X.messages?{messages:X.messages}:{},...X.tools?{tools:X.tools}:{},...X.options?{options:pY(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 t1{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 GQ;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??mO,this.conversation=new YQ($.initialMessages),this.messageBuilder=new JQ(vY()),this.contributionRegistry=vO({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 HQ({maxConsecutiveMistakes:Z,onLimitReached:$.onConsecutiveMistakeLimitReached,onLimitTelemetry:(j)=>{E9(this.telemetry,{ulid:this.config.sessionId??this.conversation.getConversationId(),model:this.config.modelId,provider:this.config.providerId,reason:j.reason,consecutiveMistakes:j.consecutiveMistakes,maxConsecutiveMistakes:j.maxConsecutiveMistakes,agentId:this.agentId,conversationId:this.conversation.getConversationId(),parentAgentId:this.parentAgentId,isSubagent:Boolean(this.parentAgentId)})},emit:(j)=>this.emitLegacyEvent(j),log:(j,X,Y)=>aO(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 BQ(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=g2($),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 dO(W);if(Z)$.push(Z)}return lO(this.config.systemPrompt,$)}executeRun($){let W;return W=this.executeRunWithAuthRetry($).finally(()=>{if(this.activeRunPromise===W)this.activeRunPromise=null}),this.activeRunPromise=W,W}async executeRunWithAuthRetry($){let W=await this.executeRunInternal($);if(W.finishReason!=="error"||!this.config.onAuthError||!cO(W.text))return W;if(!await this.config.onAuthError().catch(()=>!1))return W;let Q=await this.executeRunInternal({isContinue:!0});return Zj(this.telemetry,this.config.providerId,{recovered:Q.finishReason!=="error"}),Q}async executeRunInternal($){if(this.shutdownCalled)throw Error(`SessionRuntime.run called after shutdown (agentId=${this.agentId})`);if(this.running)throw Error(`SessionRuntime state is "running"; call canStartRun() first (agentId=${this.agentId})`);this.running=!0,this.abortRequested=!1,this.abortReason=void 0,this.activeRunId=`run_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,await this.ensureExtensionsInitialized(),this.eventAdapter.reset(),this.currentRunToolCalls=[],this.currentRunUsage={inputTokens:0,outputTokens:0},this.toolStartedAt.clear(),this.toolInputs.clear(),this.currentTurnSuccessfulTools=0,this.currentTurnFailedTools=0,this.currentTurnFailureDetails=[],this.activeTrackerWork=Promise.resolve(),this.trackerAbortInFlight=!1;let W=new Date,Z=$.userMessage;if(Z!==void 0){let _=await sO(Z,$.userImages,$.userFiles,this.config.userFileContentLoader);this.conversation.appendMessage({role:"user",content:_})}let Q=await this.composeSystemPrompt(),J=SY(this.config,this.logger,this.telemetry),j=new Map;for(let _ of this.contributionRegistry.getRegisteredTools())j.set(_.name,_);let X=iO([...j.values()],this.config.toolPolicies),Y=new Map;for(let _ of X)Y.set(_.name,_);for(let _ of this.config.tools)Y.set(_.name,_);let V=this.conversation.getConversationId(),B=rY(this.config),H=Array.from(Y.values()),G=U5(this.conversation.getMessages()),K=uY({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,[r4]:this.telemetry},hooks:this.createRuntimeHooks(),prepareTurn:this.createRuntimePrepareTurn(B,H),initialMessages:G,systemPrompt:Q}),F=this.createAgentRuntimeImpl(K);if(this.activeRuntime=F,this.abortRequested)F.abort(this.abortReason);let A=F.subscribe((_)=>{this.handleRuntimeEvent(_)}),D,U;try{if($.isContinue)D=await F.continue(void 0);else D=await F.run("")}catch(_){U=_ instanceof Error?_:Error(String(_))}finally{A();try{await this.activeTrackerWork}catch(_){this.logger?.error?.("SessionRuntime tracker work failed during drain",{agentId:this.agentId,error:_})}this.activeRuntime=null,this.running=!1,this.abortRequested=!1,this.abortReason=void 0}if(D&&D.messages.length>0){let _=I2(D.messages);this.conversation.replaceMessages(_)}let f=new Date;try{return this.buildLegacyResult({runResult:D,thrownError:U,startedAt:W,endedAt:f})}finally{this.activeRunId=null}}async ensureExtensionsInitialized(){if(this.extensionsInitialized)return;try{await this.contributionRegistry.initialize({tolerateSetupErrors:this.config.hookErrorMode!=="throw"})}catch($){if(this.config.hookErrorMode==="throw")throw $;this.emitLegacyEvent({type:"error",error:$ instanceof Error?$:Error(String($)),recoverable:!0,iteration:0})}this.extensionsInitialized=!0}createRuntimeHooks(){let $=nO([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=I2(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:U5(X.messages)}:{},...X.systemPrompt!==void 0?{systemPrompt:X.systemPrompt}:{}}}}async prepareMessagesForModelRequest($){let W=await this.prepareProviderMessagesForApi(D5($));return U5(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?uO(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(I2($));return}if(W.length===0)return;let Z=new Set(this.conversation.getMessages().map((J)=>J.id).filter((J)=>typeof J==="string")),Q=I2(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":oO(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?I2(W.messages):this.conversation.getMessages(),H=rY(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 aO($,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 oO($){if(!$)return"error";switch($.status){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}async function sO($,W,Z,Q){let{buildInitialUserContent:J}=await Promise.resolve().then(() => lY);return J($,W,Z,Q)}function rY($){if($.knownModels?.[$.modelId])return $.knownModels[$.modelId];let W=WQ($);if(W?.[$.modelId])return W[$.modelId];return}import{buildClineSystemPrompt as iY}from"@cline/shared";function nY($,W){let Z=$.trim();if(W.providerId.toLowerCase()!=="cline")return Z;return iY({ide:W.clineIdeName?.trim()||"Terminal",workspaceRoot:W.cwd?.trim()||"/",providerId:W.providerId,rules:`# Team Teammate Role
|
|
166
|
+
${Z}`,platform:W.clinePlatform,metadata:W.workspaceMetadata})}function aY($,W){let Z=$.trim();if(W.providerId.toLowerCase()!=="cline")return Z;return iY({ide:W.clineIdeName||"Terminal",workspaceRoot:W.cwd?.trim()||"/",providerId:W.providerId,overridePrompt:Z,metadata:W.workspaceMetadata,platform:W.clinePlatform})}function m2($){let W={...$};return{getRuntimeConfig:()=>W,getConnectionConfig:()=>({providerId:W.providerId,modelId:W.modelId,apiKey:W.apiKey,baseUrl:W.baseUrl,headers:W.headers,onAuthError:W.onAuthError,providerConfig:W.providerConfig,knownModels:W.knownModels,thinking:W.thinking,reasoningEffort:W.reasoningEffort,thinkingBudgetTokens:W.thinkingBudgetTokens,maxTokensPerTurn:W.maxTokensPerTurn,temperature:W.temperature}),updateConnectionDefaults:(Z)=>{W={...W,...Z}}}}function l8($){let W=$.configProvider.getRuntimeConfig(),Z=$.kind==="teammate"?nY($.prompt,W):aY($.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 v2($){let W=l8($),Z=new t1(W);if(W.onEvent)Z.subscribeEvents(W.onEvent);return Z}var $z=KQ.object({systemPrompt:KQ.string().describe("System prompt defining the sub-agent's behavior"),task:KQ.string().describe("Task for the sub-agent to complete")});function c2($){return tO({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:eO($z),execute:async(W,Z)=>{let Q=$.createSubAgentTools?await $.createSubAgentTools(W,Z):$.subAgentTools??[],J=v2({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 H0,TEAM_AWAIT_TIMEOUT_MS as Wz,TEAM_RUN_MESSAGE_PREVIEW_LIMIT as Zz,TEAM_RUN_TEXT_PREVIEW_LIMIT as Qz,TEAM_TASK_IGNORED_FIELDS_BY_ACTION as Jz,TeamAttachOutcomeFragmentInputSchema as oY,TeamAwaitRunsInputSchema as sY,TeamBroadcastInputSchema as tY,TeamBroadcastToolResultSchema as jz,TeamCancelRunInputSchema as eY,TeamCancelRunToolResultSchema as Xz,TeamCleanupInputSchema as $V,TeamCleanupToolResultSchema as Yz,TeamCreateOutcomeInputSchema as WV,TeamCreateOutcomeToolResultSchema as Vz,TeamFinalizeOutcomeInputSchema as ZV,TeamFinalizeOutcomeToolResultSchema as Bz,TeamListOutcomesInputSchema as QV,TeamListRunsInputSchema as JV,TeamMailboxMessageToolResultSchema as Hz,TeamMissionLogInputSchema as jV,TeamMissionLogToolResultSchema as Gz,TeamOutcomeFragmentToolResultSchema as XV,TeamOutcomeToolResultSchema as Kz,TeamReadMailboxInputSchema as YV,TeamReviewOutcomeFragmentInputSchema as VV,TeamRunTaskInputSchema as BV,TeamRunTaskToolResultSchema as FQ,TeamRunToolSummarySchema as AQ,TeamSendMessageInputSchema as HV,TeamSendMessageToolResultSchema as Fz,TeamShutdownTeammateInputSchema as GV,TeamSimpleAgentStatusToolResultSchema as KV,TeamSpawnTeammateInputSchema as FV,TeamStatusInputSchema as AV,TeamStatusToolResultSchema as Az,TeamTaskInputSchema as UV,TeamTaskToolResultSchema as p8,validateWithZod as h,zodToJsonSchema as G0}from"@cline/shared";function DV($,W){let Z=$.replace(/\s+/g," ").trim();if(Z.length<=W)return Z;return`${Z.slice(0,Math.max(0,W-3)).trimEnd()}...`}function v$($,W){if($===void 0)throw Error(`Missing required field: ${W}`);return $}function Uz($){let W=$.result;if(!W)return;return{textPreview:DV(W.text,Qz),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 T5($){return $?.toISOString()}function UQ($){return{id:$.id,agentId:$.agentId,taskId:$.taskId,status:$.status,messagePreview:DV($.message,Zz),priority:$.priority,retryCount:$.retryCount,maxRetries:$.maxRetries,nextAttemptAt:T5($.nextAttemptAt),continueConversation:$.continueConversation,startedAt:$.startedAt.toISOString(),endedAt:T5($.endedAt),leaseOwner:$.leaseOwner,heartbeatAt:T5($.heartbeatAt),lastProgressAt:T5($.lastProgressAt),lastProgressMessage:$.lastProgressMessage,currentActivity:$.currentActivity,error:$.error,resultSummary:Uz($)}}function Dz($){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 O5=["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 _V($){let W=[];if($.createBaseTools)W.push(...$.createBaseTools());W.push(...r8({runtime:$.runtime,requesterId:$.spec.agentId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!1,includeSpawnTool:!1})),$.runtime.spawnTeammate({agentId:$.spec.agentId,config:l8({kind:"teammate",prompt:$.spec.rolePrompt,role:$.spec.rolePrompt,configProvider:$.teammateConfigProvider,tools:W,maxIterations:$.spec.maxIterations,cwd:$.teammateConfigProvider.getRuntimeConfig().cwd})})}function z5($){let W=$.leadAgentId??"lead",Z=$.restoredFromPersistence===!0,Q=r8({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;_V({runtime:$.runtime,requesterId:W,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:j}),J.push(j.agentId)}return{tools:Q,restoredFromPersistence:Z,restoredTeammates:J}}function r8($){let W=$.allowSpawn??!0,Z=$.includeSpawnTool??!0,Q=$.includeManagementTools??!0,J=[];if(Z)J.push(H0({name:"team_spawn_teammate",description:"Spawn a teammate with a required agentId and rolePrompt.",inputSchema:G0(FV),execute:async(X)=>{let Y=h(FV,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(_V({runtime:$.runtime,requesterId:$.requesterId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:V}),!Q)$.onLeadToolsUnlocked?.(r8({...$,includeSpawnTool:!1,includeManagementTools:!0,onLeadToolsUnlocked:void 0}));return h(KV,{agentId:Y.agentId,status:"spawned"})}}));if(!Q)return J;J.push(H0({name:"team_shutdown_teammate",description:"Shutdown a teammate by agentId.",inputSchema:G0(GV),execute:async(X)=>{let Y=h(GV,X);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");return $.runtime.shutdownTeammate(Y.agentId,Y.reason),h(KV,{agentId:Y.agentId,status:"stopped"})}})),J.push(H0({name:"team_status",description:"Return a snapshot of team members, task counts, mailbox, and mission log stats.",inputSchema:G0(AV),execute:async(X)=>{return h(AV,X),h(Az,$.runtime.getSnapshot())}})),J.push(H0({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:G0(UV),execute:async(X)=>{let Y=h(UV,X);switch(Y.action){case"create":{let V=new Set(Jz.create??[]),B=Object.entries(X).filter(([G,K])=>V.has(G)&&K!=null).map(([G])=>G),H=$.runtime.createTask({title:v$(Y.title,"title"),description:v$(Y.description,"description"),dependsOn:Y.dependsOn,assignee:Y.assignee,createdBy:$.requesterId});return h(p8,{action:"create",taskId:H.id,status:H.status,...B.length>0?{ignoredFields:B,note:`Ignored fields for action=create: ${B.join(", ")}`}:{}})}case"list":return h(p8,{action:"list",tasks:$.runtime.listTaskItems({status:Y.status,assignee:Y.assignee})});case"claim":{let V=$.runtime.claimTask(v$(Y.taskId,"taskId"),$.requesterId);return h(p8,{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(v$(Y.taskId,"taskId"),$.requesterId,v$(Y.summary,"summary"));return h(p8,{action:"complete",taskId:V.id,status:V.status})}case"block":{let V=$.runtime.blockTask(v$(Y.taskId,"taskId"),$.requesterId,v$(Y.reason,"reason"));return h(p8,{action:"block",taskId:V.id,status:V.status})}}}}));let j=new Map;return J.push(H0({name:"team_run_task",description:"Route a delegated task to a teammate. Choose sync (wait) or async (run in background).",inputSchema:G0(BV),execute:async(X)=>{let Y=h(BV,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 h(FQ,{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 h(FQ,{...H,status:"joined",deduped:!0,message:`Task for ${Y.agentId} was already dispatched in this tool batch; joined the existing in-flight run.`})}let B=$.runtime.routeToTeammate(Y.agentId,Y.task,{taskId:Y.taskId||void 0,fromAgentId:$.requesterId,continueConversation:Y.continueConversation||void 0}).then((H)=>h(FQ,{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(H0({name:"team_cancel_run",description:"Cancel one async teammate run.",inputSchema:G0(eY),execute:async(X)=>{let Y=h(eY,X),V=$.runtime.cancelRun(Y.runId,Y.reason);return h(Xz,{runId:V.id,status:V.status})}})),J.push(H0({name:"team_list_runs",description:"List teammate runs started with team_run_task in async mode, including live activity/progress fields when available.",inputSchema:G0(JV),execute:async(X)=>h(AQ.array(),$.runtime.listRuns(h(JV,X)).map(UQ))})),J.push(H0({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:G0(sY),timeoutMs:Wz,execute:async(X)=>{let Y=h(sY,X);if(Y.runId){let H=await $.runtime.awaitRun(Y.runId);return Dz(H),h(AQ,UQ(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 h(AQ.array(),V.map(UQ))}})),J.push(H0({name:"team_send_message",description:"Send a mailbox message to a specific teammate.",inputSchema:G0(HV),execute:async(X)=>{let Y=h(HV,X),V=$.runtime.sendMessage($.requesterId,Y.toAgentId,Y.subject,Y.body,Y.taskId??void 0);return h(Fz,{id:V.id,toAgentId:V.toAgentId})}})),J.push(H0({name:"team_broadcast",description:"Broadcast a message to all teammates.",inputSchema:G0(tY),execute:async(X)=>{let Y=h(tY,X),V=$.runtime.broadcast($.requesterId,Y.subject,Y.body,{taskId:Y.taskId??void 0});return h(jz,{delivered:V.length})}})),J.push(H0({name:"team_read_mailbox",description:"Read the current agent mailbox.",inputSchema:G0(YV),execute:async(X)=>{let Y=h(YV,X);return h(Hz.array(),$.runtime.listMailbox($.requesterId,{unreadOnly:Y.unreadOnly,markRead:!0}))}})),J.push(H0({name:"team_mission_log",description:"Append a mission log update for your team.",inputSchema:G0(jV),execute:async(X)=>{let Y=h(jV,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 h(Gz,{id:V.id})}})),J.push(H0({name:"team_cleanup",description:"Clean up the team runtime. Fails if teammates are still running.",inputSchema:G0($V),execute:async(X)=>{if(h($V,X),$.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can run cleanup.");return $.runtime.cleanup(),h(Yz,{status:"cleaned"})}})),J.push(H0({name:"team_create_outcome",description:"Create a converged team outcome.",inputSchema:G0(WV),execute:async(X)=>{let Y=h(WV,X),V=$.runtime.createOutcome({title:Y.title,requiredSections:Y.requiredSections,createdBy:$.requesterId});return h(Vz,{outcomeId:V.id,status:V.status,requiredSections:V.requiredSections})}})),J.push(H0({name:"team_attach_outcome_fragment",description:"Attach a fragment to an outcome section.",inputSchema:G0(oY),execute:async(X)=>{let Y=h(oY,X),V=$.runtime.attachOutcomeFragment({outcomeId:Y.outcomeId,section:Y.section,sourceAgentId:$.requesterId,sourceRunId:Y.sourceRunId||void 0,content:Y.content});return h(XV,{fragmentId:V.id,status:V.status})}})),J.push(H0({name:"team_review_outcome_fragment",description:"Review one outcome fragment.",inputSchema:G0(VV),execute:async(X)=>{let Y=h(VV,X),V=$.runtime.reviewOutcomeFragment({fragmentId:Y.fragmentId,reviewedBy:$.requesterId,approved:Y.approved});return h(XV,{fragmentId:V.id,status:V.status})}})),J.push(H0({name:"team_finalize_outcome",description:"Finalize one outcome.",inputSchema:G0(ZV),execute:async(X)=>{let Y=h(ZV,X),V=$.runtime.finalizeOutcome(Y.outcomeId);return h(Bz,{outcomeId:V.id,status:V.status})}})),J.push(H0({name:"team_list_outcomes",description:"List team outcomes.",inputSchema:G0(QV),execute:async(X)=>{return h(QV,X),h(Kz.array(),$.runtime.listOutcomes())}})),J}function fV($){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}))}}var _z=[{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:c2({configProvider:{}}).description,headlessToolNames:["spawn_agent"]},{id:"teams",description:"Enable team collaboration tools for teammate management, task coordination, mailbox messaging, mission logs, and outcomes.",headlessToolNames:[...O5]}],fz={read_files:"enableReadFiles",search_codebase:"enableSearch",run_commands:"enableBash",fetch_web_content:"enableWebFetch",apply_patch:"enableApplyPatch",editor:"enableEditor",skills:"enableSkills",ask_question:"enableAskQuestion"};function Lz($){return $==="plan"||$==="yolo"?$:"act"}function TV($){let W=Lz($.mode),Z=Y1[o1({mode:W})],Q=m8($.providerId??"",$.modelId??"",W,g8);return{mode:W,flags:{...Z,...Q,...typeof $.enableSpawnAgent==="boolean"?{enableSpawnAgent:$.enableSpawnAgent}:{},...typeof $.enableAgentTeams==="boolean"?{enableAgentTeams:$.enableAgentTeams}:{}}}}function LV($,W){if(W.disabledToolIds?.has($))return!1;let{flags:Z}=TV(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=fz[$];return Q?Z[Q]===!0:!1}function Tz($,W){if($.id==="editor"){let{flags:Z}=TV(W),Q=Z.enableApplyPatch===!0&&Z.enableEditor!==!0;return{...$,defaultEnabled:LV($.id,W),headlessToolNames:[Q?"apply_patch":"editor"]}}return{...$,defaultEnabled:LV($.id,W)}}function i8($={}){return _z.map((W)=>Tz(W,$))}function OV($={}){return i8($).filter((W)=>W.defaultEnabled).map((W)=>W.id)}function zV($){if(!$.enabled)return new Set;let W=i8($.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 DQ($,W={}){return i8(W).filter((Z)=>$.has(Z.id)).flatMap((Z)=>Z.headlessToolNames)}function qV($,W={}){return DQ($,W)}import{getDefaultShell as Oz}from"@cline/shared";function n8($={}){let{executorOptions:W={},executors:Z,...Q}=$,J=Q.shell??W.bash?.shell??Oz(process.platform),j={...W,bash:{...W.bash,shell:J}},X={...A5(j),...Z??{}};return h2({...Q,shell:J,executors:X})}function q5($){return $.trim().replace(/^\/+/,"").toLowerCase()}function zz($){if(!$||$.length===0)return;let W=$.map(q5).filter((Z)=>Z.length>0);return W.length>0?new Set(W):void 0}function qz($,W,Z){if(!Z)return!0;let Q=q5($),J=q5(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 a8($,W){let Z=zz(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)=>qz(J.id,J.name,Z))}function Mz($,W){return a8($,W).filter((Z)=>!Z.disabled).map((Z)=>Z.name.trim()).filter((Z)=>Z.length>0).sort((Z,Q)=>Z.localeCompare(Q))}function Rz($,W,Z){let Q=q5(W);if(!Q)return{error:"Missing skill name."};let J=a8($,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=Mz($,Z);return{error:B.length>0?`Skill "${W}" not found. Available skills: ${B.join(", ")}`:"No skills are currently available."}}function _Q($,W=Promise.resolve(),Z){let Q=new Set,J=async(j,X)=>{await W;let Y=Rz($,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?`
|
|
167
167
|
<command-args>${H}</command-args>`:"",K=B.description?.trim()?`Description: ${B.description.trim()}
|
|
168
168
|
|
|
169
169
|
`:"";return`<command-name>${B.name}</command-name>${G}
|
|
170
170
|
<command-instructions>
|
|
171
171
|
${K}${B.instructions}
|
|
172
|
-
</command-instructions>`}finally{Q.delete(V)}};return Object.defineProperty(J,"configuredSkills",{get:()=>
|
|
172
|
+
</command-instructions>`}finally{Q.delete(V)}};return Object.defineProperty(J,"configuredSkills",{get:()=>a8($,Z).map(({skill:j,...X})=>X),enumerable:!0,configurable:!1}),J}function MV($){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:()=>xX($.watcher)});if($.registerSkillsTool)Q.registerTool(y2(_Q($.watcher,W,$.allowedSkillNames)));for(let J of S8($.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}
|
|
173
173
|
|
|
174
|
-
${X}`:J.instructions}})}}}class
|
|
174
|
+
${X}`:J.instructions}})}}}class RV{watcher;ready;stopped=!1;constructor($){this.watcher=bX($)}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 S8(this.watcher)}resolveRuntimeSlashCommand($){return kX($,this.watcher)}hasConfiguredSkills($){return a8(this.watcher,$).some((W)=>!W.disabled)}createSkillsExecutor($){return _Q(this.watcher,(this.ready??Promise.resolve()).catch(()=>{}),$)}createExtension($){return MV({...$,watcher:this.watcher,watcherReady:(this.ready??Promise.resolve()).catch(()=>{})})}}function u2($){return new RV($)}import{readFile as Nz,writeFile as Ez}from"node:fs/promises";import{stripUtf8Bom as wz}from"@cline/shared";import EV from"yaml";function Cz($){let W=wz($),Z=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,Q=W.match(Z);if(!Q)return{data:{},body:W,hadFrontmatter:!1};let[,J,j]=Q,X=EV.parse(J);return{data:X&&typeof X==="object"&&!Array.isArray(X)?X:{},body:j,hadFrontmatter:!0}}function NV($,W){return`---
|
|
175
175
|
${EV.stringify($).trimEnd()}
|
|
176
176
|
---
|
|
177
|
-
${W}`}function
|
|
177
|
+
${W}`}function Pz($,W){let{data:Z,body:Q,hadFrontmatter:J}=Cz($);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 NV(Z,Q)}return Z.disabled=!0,NV(Z,Q)}async function wV({filePath:$,enabled:W}){let Z=await Nz($,"utf8"),Q=Pz(Z,W);return await Ez($,Q),{filePath:$,enabled:W,disabled:!W}}import{spawn as Uq}from"node:child_process";import{StringDecoder as tV}from"node:string_decoder";import{UnauthorizedError as nV}from"@modelcontextprotocol/sdk/client/auth.js";import{Client as Dq}from"@modelcontextprotocol/sdk/client/index.js";import{randomUUID as jq}from"node:crypto";import{UnauthorizedError as Xq}from"@modelcontextprotocol/sdk/client/auth.js";import{Client as Yq}from"@modelcontextprotocol/sdk/client/index.js";import{SSEClientTransport as Vq}from"@modelcontextprotocol/sdk/client/sse.js";import{StreamableHTTPClientTransport as Bq}from"@modelcontextprotocol/sdk/client/streamableHttp.js";E5();var Hq="/mcp/oauth/callback",Gq=[1456,1457,1458],Kq=300000;function Fq($){if($ instanceof Error){let W=$.message.trim();if(W.length>0)return W}return String($)}function Aq($){return{client_name:"Cline",redirect_uris:[$],grant_types:["authorization_code","refresh_token"],response_types:["code"],token_endpoint_auth_method:"none"}}function C5($){let W={};try{W=e8($.serverName,{filePath:$.settingsPath})??{}}catch{W={}}let Z,Q,J=async(X)=>{let Y=p2(X(W))??{};try{W=$6($.serverName,()=>Y,{filePath:$.settingsPath})}catch{W=Y}};return{provider:{get redirectUrl(){return W.redirectUrl??$.redirectUrl},get clientMetadata(){return Aq(W.redirectUrl??$.redirectUrl)},state:()=>{return Q=jq(),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 w5($){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 Vq(new URL(W.url),{authProvider:$.oauthProvider,requestInit:Z,fetch:$.fetch});return new Bq(new URL(W.url),{authProvider:$.oauthProvider,requestInit:Z,fetch:$.fetch})}function rV($){return new Yq({name:$.clientName?.trim()||"@cline/core",version:$.clientVersion?.trim()||"0.0.0"})}async function iV($){let W=$.serverName.trim();if(!W)throw Error("MCP server name cannot be empty.");let{resolveMcpServerRegistrations:Z}=await Promise.resolve().then(() => (E5(),pV)),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 _1({host:$.callbackHost,ports:$.callbackPorts?.length?$.callbackPorts:Gq,callbackPath:$.callbackPath??Hq,timeoutMs:$.timeoutMs??Kq,successHtml:$.successHtml,onListening:$.onServerListening,onClose:$.onServerClose});if(!J.callbackUrl)throw Error("Unable to bind local MCP OAuth callback server.");let j=C5({settingsPath:$.filePath,serverName:W,redirectUrl:J.callbackUrl,onAuthorizationUrl:async(V)=>{await $.openUrl?.(V)}});await j.resetInteractiveState();let X=rV($),Y;try{let V=w5({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 Xq))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=rV($);let F=w5({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=Fq(V);throw await j.markError(B),Error(B)}finally{await X.close().catch(()=>{return}),await Y?.close().catch(()=>{return}),J.close()}}var _q="2024-11-05",fq=5000,Lq=1500,aV="http://127.0.0.1:1456/mcp/oauth/callback";function P5($){return $ instanceof Error?$.message:String($)}function oV($){let W=Buffer.from(JSON.stringify($),"utf8"),Z=Buffer.from(`Content-Length: ${W.byteLength}\r
|
|
178
178
|
\r
|
|
179
|
-
`,"utf8");return Buffer.concat([Z,W])}function
|
|
180
|
-
`,"utf8")}class
|
|
179
|
+
`,"utf8");return Buffer.concat([Z,W])}function sV($){return Buffer.from(`${JSON.stringify($)}
|
|
180
|
+
`,"utf8")}class NQ{buffer="";decoder=new tV("utf8");push($){this.buffer+=this.decoder.write($);let W=[];while(!0){let Z=this.buffer.indexOf(`\r
|
|
181
181
|
\r
|
|
182
|
-
`);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
|
|
183
|
-
`);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 tV{registration;process;nextRequestId=1;pending=new Map;framedParser=new EQ;newlineParser=new NQ;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:Gq,capabilities:{},clientInfo:{name:"@cline/core",version:"0.0.0"}},Fq),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 EQ,this.newlineParser=new NQ,this.stderrBuffer="",this.protocolMode=$;let Z=process.platform==="win32"?{windowsHide:!0,shell:!0}:{},Q=Bq(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: ${P5(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}": ${P5($)}.${Z}`)),W.kill()}async request($,W,Z=Kq){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"?aV(j):oV(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"?aV(Q):oV(Q))}failAllPending($){for(let[W,Z]of this.pending)clearTimeout(Z.timeout),this.pending.delete(W),Z.reject($)}}class eV{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 $=C5({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??nV});this.authContext=$;try{let W=new Hq({name:this.options.clientName?.trim()||"@cline/core",version:this.options.clientVersion?.trim()||"0.0.0"}),Z=w5({registration:this.registration,oauthProvider:$.provider,fetch:this.options.fetch});await W.connect(Z),await $.clearError(),this.client=W}catch(W){let Z=W instanceof iV?this.formatUnauthorizedMessage($.getLastAuthorizationUrl()):P5(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??C5({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??nV}),Z=$ instanceof iV?this.formatUnauthorizedMessage(W.getLastAuthorizationUrl()):P5($);throw await W.markError(Z),Error(Z)}}function S5($={}){return(W)=>W.transport.type==="stdio"?new tV(W):new eV(W,$)}N5();function u0(){return Date.now()}function Aq($){return $.map((W)=>({name:W.name,description:W.description,inputSchema:W.inputSchema}))}class W6{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:u0()});return}let Z=JSON.stringify(W.registration.transport)!==JSON.stringify($.transport);if(W.registration={...$},W.updatedAt=u0(),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=u0(),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&&u0()-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=Aq(Q);return W.toolCache=J,W.toolCacheUpdatedAt=u0(),W.updatedAt=u0(),J})}async callTool($){return this.runExclusive($.serverName,async()=>{let W=this.requireServer($.serverName),Z=await this.ensureConnectedClient(W);return W.updatedAt=u0(),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=u0();try{let W=$.client??await this.clientFactory($.registration);await W.connect(),$.client=W,$.status="connected",$.lastError=void 0,$.updatedAt=u0()}catch(W){throw $.status="disconnected",$.lastError=W instanceof Error?W.message:String(W),$.updatedAt=u0(),W}}async disconnectState($){if(!$.client){$.status="disconnected",$.updatedAt=u0();return}try{await $.client.disconnect()}finally{$.status="disconnected",$.updatedAt=u0()}}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 l2($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function $B($){return l2($)&&Object.values($).every((W)=>typeof W==="string")}function Uq($){return Array.isArray($)&&$.every((W)=>typeof W==="string")}function Dq($){if(!l2($))return!1;return($.fromEnv===void 0||typeof $.fromEnv==="string")&&($.value===void 0||typeof $.value==="string")&&($.required===void 0||typeof $.required==="boolean")}function _q($){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 WB($){if(!l2($))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(!l2(Q))return{name:W,loadError:"invalid env"};for(let[V,B]of Object.entries(Q))if(typeof B!=="string"&&!Dq(B))return{name:W,loadError:`invalid env "${V}"`}}let J=$.transport;if(!l2(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=l2($.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&&!Uq(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&&!$B(G))return{name:W,loadError:"stdio MCP transport env must be strings"};let K=_q({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&&!$B(Y))return{name:W,loadError:`${j} MCP transport headers must be strings`};return{name:W,registration:{name:W,transport:j==="sse"?{type:"sse",url:J.url,headers:Y}:{type:"streamableHttp",url:J.url,headers:Y},metadata:X}}}function wQ($){let W=new Map;return $.map(({server:Z,owner:Q,ownerLabel:J})=>{let j=WB(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 fq}from"node:crypto";var ZB=64,Lq=/[^a-zA-Z0-9_-]+/g,QB=8,Oq=1,Tq="mcp_tool";function zq($){return fq("sha1").update($).digest("hex").slice(0,QB)}function qq($){return $.replace(Lq,"_")}var b5=({serverName:$,toolName:W})=>{let Z=`${$}__${W}`,Q=qq(Z);if(Q===Z&&Z.length<=ZB)return Z;let J=zq(Z),j=ZB-Oq-QB;return`${Q.slice(0,j)||Tq}_${J}`};function CQ($){return{[($.nameTransform??b5)({serverName:$.serverName,toolName:$.toolName})]:{enabled:!1}}}function JB($){let W={};for(let Z of $.toolNames)Object.assign(W,CQ({serverName:$.serverName,toolName:Z,nameTransform:$.nameTransform}));return W}import{createTool as Mq}from"@cline/shared";function Rq($,W){let Z=W.description?.trim();if(Z)return Z;return`Execute MCP tool "${W.name}" from server "${$}".`}async function y5($){let W=await $.provider.listTools($.serverName),Z=$.nameTransform??b5;return W.map((Q)=>{let J=Z({serverName:$.serverName,toolName:Q.name});return Mq({name:J,description:Rq($.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})})})}t0();import{stat as Eq}from"node:fs/promises";import{isAbsolute as Nq,relative as wq,resolve as jB}from"node:path";t0();function Cq($,W){let Z=wq(jB($),jB(W));return Z===""||!Z.startsWith("..")&&!Nq(Z)}var Pq=32,p2=new Map;function Sq($,W){if(!p2.has($)&&p2.size>=Pq){let Z=p2.keys().next().value;if(Z)p2.delete(Z)}p2.set($,W)}async function bq($){let W=await Promise.all($.pluginPaths.map(async(Z)=>{try{let Q=await Eq(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 XB($,W){return $.map((Z)=>({...Z,enabled:!W.has(Z.name)}))}function yq($){return $.sort((W,Z)=>{let Q=W.name.localeCompare(Z.name);if(Q!==0)return Q;return W.path.localeCompare(Z.path)})}async function hq($,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 YB($){let W=P$({workspacePath:$.workspacePath,cwd:$.cwd}),Z=L1($.disabledToolNames);if(W.length===0)return{tools:[],failures:[],warnings:[]};let Q=await bq({pluginPaths:W,workspacePath:$.workspacePath,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId}),J=p2.get(Q);if(J)return{tools:XB(J.tools,Z),failures:J.failures,warnings:J.warnings};let j=[],X=[],Y=[],V;try{V=await q2({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=Cq($.workspacePath,G)?"workspace-plugin":"global-plugin",F;try{F=await hq(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=yq(j);return Sq(Q,{tools:B,failures:X,warnings:Y}),{tools:XB(B,Z),failures:X,warnings:Y}}async function PQ($){return(await YB($)).tools}function J6($,W){if(!W)return"global";let Z=KB(W,$);return!Z.startsWith("..")&&!GB(Z)?"workspace":"global"}function gq($,W){return J6($,W)==="workspace"?"workspace-plugin":"global-plugin"}function mq($,W){let Z=KB(BB($),BB(W));return Z===""||!Z.startsWith("..")&&!GB(Z)}function vq($){try{let W=JSON.parse(kq($,"utf8"));return typeof W.name==="string"&&W.name.trim()?W.name.trim():void 0}catch{return}}function cq($){let W=VB($);while(!0){let Z=xq(W,"package.json");if(Q6(Z)){let J=vq(Z);if(J)return J;break}let Q=VB(W);if(Q===W)break;W=Q}return SQ($,Iq($))}function uq($){let W=[];for(let Z of P$({workspacePath:$.workspaceRoot||void 0,cwd:$.cwd}))for(let Q of S$([Z]))W.push({directory:Q,pluginName:cq(Z),pluginPath:Z,source:$.workspaceRoot?gq(Z,$.workspaceRoot):"global-plugin"});return W.sort((Z,Q)=>Q.directory.length-Z.directory.length)}function dq($,W){return W.find((Z)=>mq(Z.directory,$))}function Z6($){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 FB($){return $.workspaceRoot?.trim()||$.cwd?.trim()||""}function AB($,W){return $.cwd?.trim()||W||process.cwd()}async function HB($,W){if($.userInstructionService)return await W($.userInstructionService);let Z=FB($),Q=AB($,Z),J=v2({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 lq($,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 r2{async list($={}){return await HB($,async(W)=>{let Z=FB($),Q=uq({workspaceRoot:Z,cwd:AB($,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:J6(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:J6(H.filePath,Z),description:G.instructions,toggleable:!1})}for(let H of W.listRecords("skill")){let G=H.item,K=dq(H.filePath,Q);X.push({id:H.id,name:G.name,path:H.filePath,enabled:G.disabled!==!0,kind:"skill",source:K?.source??J6(H.filePath,Z),description:G.description,pluginName:K?.pluginName,pluginPath:K?.pluginPath,toggleable:!0})}}if(Z)try{for(let H of await PQ({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(c$({filePath:B}))try{for(let H of Y1({filePath:B}))V.push({id:H.name,name:H.name,path:B,enabled:H.disabled!==!0,kind:"mcp",source:J6(B,Z),description:H.transport.type,toggleable:!0})}catch{}return{workflows:Z6(J.filter((H)=>Q6(H.path))),rules:Z6(j.filter((H)=>Q6(H.path))),skills:Z6(X.filter((H)=>Q6(H.path))),tools:Z6(Y),mcp:Z6(V.filter((H)=>Q6(H.path)))}})}async toggle($){if($.type==="skills")return await HB($,async(W)=>{let Z=lq(W,$),Q=Z?.filePath;if(!Q)throw Error(`Unable to resolve skill setting '${$.id??$.name??SQ($.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??SQ($.path??"")}'; provide an explicit enabled value or a resolvable workspace context.`);return await NV({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)GZ($.name);else ZX($.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=Y1({filePath:Z}).find((j)=>j.name===W);if(!J)throw Error(`Unknown MCP server: ${W}`);Q=J.disabled===!0}return s8({filePath:Z,name:W,disabled:!Q}),{snapshot:await this.list($),changedTypes:["mcp"]}}throw Error(`Settings type '${$.type}' does not support toggles.`)}}function j6(){return new r2}function UB($){return{async list(W){let Z=$;if(Z.listSettings)return await Z.listSettings(W);return await j6().list(W)},async toggle(W){let Z=$;if(Z.toggleSetting)return await Z.toggleSetting(W);return await j6().toggle(W)}}}function DB($){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)}}}function C0(...$){let W,Z;for(let J of $){if(!J)continue;if(J.toolExecutors)W={...W??{},...J.toolExecutors};if(J.requestToolApproval)Z=J.requestToolApproval}let Q=W&&Object.keys(W).length>0;if(!Q&&!Z)return;return{...Q?{toolExecutors:W}:{},...Z?{requestToolApproval:Z}:{}}}var X6="session_not_found";class u$ extends Error{sessionId;code="session_not_found";constructor($,W){super(W??($?`session not found: ${$}`:"session not found"));this.sessionId=$;this.name="SessionNotFoundError"}}function d$($){return $ instanceof u$||typeof $==="object"&&$!==null&&"code"in $&&$.code==="session_not_found"}function bQ($){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 _B($){let W=$.config;return"providerId"in W?{...$,config:{...W,...pq($.localRuntime)},localRuntime:$.localRuntime}:$}function yQ($,W={}){let Z=bQ($.config),Q=C0(W.defaultCapabilities,$.capabilities),J=rq(Z.localRuntime,$.localRuntime),j=W.withExtensionContext?.(J?.extensionContext);if(j)J={...J??{},extensionContext:j};return{...$,...Z,...J?{localRuntime:J}:{},...Q?{capabilities:Q}:{}}}function pq($){if(!$)return{};let{modelCatalogDefaults:W,userInstructionService:Z,configExtensions:Q,onTeamRestored:J,...j}=$;return j}function rq(...$){let W={};for(let Z of $)if(Z)Object.assign(W,Z);return Object.keys(W).length>0?W:void 0}A0();function fB($){let W=$.input.config.telemetry??$.telemetry;if(!W)return;W.capture({event:x.SESSION.STARTED,properties:{sessionId:$.sessionId,source:$.input.source??D0.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 Y6($){return!!$&&typeof $==="object"&&!Array.isArray($)}function hQ($){let W=$?.trim();return W?W:void 0}function iq($,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 LB($,W){return new Date(new Date($).getTime()+Math.max(0,Math.floor(W))*1000).toISOString()}function OB($,W){return new Date(new Date($).getTime()-Math.max(0,Math.floor(W))*1000).toISOString()}function nq($,W){if(!$)return W;return new Date($).getTime()>=new Date(W).getTime()?$:W}function aq($,W){let Z=$.eventId.trim(),Q=$.eventType.trim(),J=$.source.trim(),j=hQ($.subject),X=hQ($.dedupeKey)??`${Q}:${J}:${j??Z}`;return{eventId:Z,eventType:Q,source:J,subject:j,occurredAt:iq($.occurredAt,W),workspaceRoot:hQ($.workspaceRoot),payload:Y6($.payload)?$.payload:void 0,attributes:Y6($.attributes)?$.attributes:void 0,dedupeKey:X}}function kQ($,W){if(!W)return;let Z=W.split("."),Q=$;for(let J of Z){if(!Y6(Q))return;Q=Q[J]}return Q}function oq($,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=kQ(Z,W);if(Q!==void 0)return Q;if($.attributes){let J=kQ($.attributes,W);if(J!==void 0)return J}if($.payload)return kQ($.payload,W);return}function h5($,W){if(Array.isArray(W))return W.some((Z)=>h5($,Z));if(Array.isArray($))return $.some((Z)=>h5(Z,W));if(Y6(W)){if(!Y6($))return!1;return Object.entries(W).every(([Z,Q])=>h5($[Z],Q))}return Object.is($,W)}function sq($,W){if(!W||Object.keys(W).length===0)return!0;return Object.entries(W).every(([Z,Q])=>h5(oq($,Z),Q))}class IQ{store;nowFn;logger;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now()),this.logger=$.logger}ingestEvent($){let W=new Date(this.nowFn()).toISOString(),Z=aq($,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(!sq(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=nq(V.scheduledFor,LB(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:OB(Z,j)}))return{reason:"dedupe_window"};let X=$.cooldownSeconds??0;if(X>0&&this.store.hasRecentEventRunForSpec({specId:$.specId,sinceIso:OB(Z,X)}))return{reason:"cooldown"};return{run:this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"event",triggerEventId:W.eventId,scheduledFor:J>0?LB(Z,J):Z}),reason:"dedupe_window"}}}class V6{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 YM}from"node:path";import{buildClineSystemPrompt as VM}from"@cline/shared";import{nowIso as CB}from"@cline/shared/db";import{basename as tq,resolve as eq}from"node:path";import{performance as TB}from"node:perf_hooks";import{processWorkspaceInfo as qB}from"@cline/shared";import MB from"simple-git";function $M($){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 xQ($,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 RB($,W){let Z=$M($);return Z.url===W.url&&Z.branch===W.branch}function EB($){let W=$.find(({name:Z})=>Z==="origin")??$[0];return(W?.refs.fetch||W?.refs.push)?.trim()||void 0}function e1($){return eq($)}async function I5($){return(await gQ($)).info}function zB($){let W=$ instanceof Error?$.message:String($);return/unknown revision|ambiguous argument|does not have any commits yet/i.test(W)}function k5($){if($ instanceof Error)return{errorType:$.name?.trim()||$.constructor.name||"Error",message:$.message};return{errorType:"Error",message:String($)}}async function gQ($){let W=e1($),Z={rootPath:W,hint:tq(W)},Q={},J;try{let j=MB({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=EB(Y);if(B)Q.url=B}}catch(Y){J??=k5(Y)}try{let Y=(await j.revparse(["HEAD"])).trim();if(Y.length>0)Z.latestGitCommitHash=Y}catch(Y){if(!zB(Y))J??=k5(Y)}try{let Y=(await j.branch()).current.trim();if(Y.length>0)Z.latestGitBranchName=Y,Q.branch=Y}catch(Y){if(!zB(Y))J??=k5(Y)}return{info:Z,vcsType:"git",gitState:Q,error:J}}catch(j){return{info:Z,vcsType:"none",gitState:Q,error:k5(j)}}}async function NB($){try{let W=MB({baseDir:e1($)});if(!await W.checkIsRepo())return{};let[Z,Q]=await Promise.all([W.getRemotes(!0),W.branch()]),J=EB(Z),j=Q.current.trim();return{...J?{url:J}:{},...j?{branch:j}:{}}}catch{return}}async function mQ($){let W=await I5($);return qB(W)}async function wB($){let W=TB.now(),Z=await gQ($),Q=TB.now()-W,J=Z.info;return{workspaceInfo:J,workspaceMetadata:qB(J),durationMs:Q,vcsType:Z.vcsType,gitState:Z.gitState,initError:Z.error}}import{mkdirSync as WM,writeFileSync as ZM}from"node:fs";import{join as QM}from"node:path";import{resolveCronReportsDir as JM}from"@cline/shared/storage";function $$($){if(/[:#\n]/.test($)||$.includes('"'))return JSON.stringify($);return $}function l$($,W){if(W===void 0||W===null)return;return`${$}: ${$$(W)}`}function jM($,W,Z){let Q=[`runId: ${$$($.runId)}`,`specId: ${$$(W.specId)}`,`externalId: ${$$(W.externalId)}`,`title: ${$$(W.title)}`,`triggerKind: ${$$($.triggerKind)}`,`status: ${$$($.status)}`,`sourcePath: ${$$(W.sourcePath)}`],J=[l$("sessionId",$.sessionId),l$("startedAt",$.startedAt),l$("completedAt",$.completedAt),l$("triggerEventId",$.triggerEventId),l$("triggerEventType",Z?.eventType),l$("triggerEventSource",Z?.source),l$("triggerEventSubject",Z?.subject)];for(let j of J)if(j)Q.push(j);return`---
|
|
182
|
+
`);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 EQ{buffer="";decoder=new tV("utf8");push($){this.buffer+=this.decoder.write($);let W=[];while(!0){let Z=this.buffer.indexOf(`
|
|
183
|
+
`);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 eV{registration;process;nextRequestId=1;pending=new Map;framedParser=new NQ;newlineParser=new EQ;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:_q,capabilities:{},clientInfo:{name:"@cline/core",version:"0.0.0"}},Lq),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 NQ,this.newlineParser=new EQ,this.stderrBuffer="",this.protocolMode=$;let Z=process.platform==="win32"?{windowsHide:!0,shell:!0}:{},Q=Uq(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: ${P5(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}": ${P5($)}.${Z}`)),W.kill()}async request($,W,Z=fq){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"?oV(j):sV(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"?oV(Q):sV(Q))}failAllPending($){for(let[W,Z]of this.pending)clearTimeout(Z.timeout),this.pending.delete(W),Z.reject($)}}class $B{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 $=C5({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??aV});this.authContext=$;try{let W=new Dq({name:this.options.clientName?.trim()||"@cline/core",version:this.options.clientVersion?.trim()||"0.0.0"}),Z=w5({registration:this.registration,oauthProvider:$.provider,fetch:this.options.fetch});await W.connect(Z),await $.clearError(),this.client=W}catch(W){let Z=W instanceof nV?this.formatUnauthorizedMessage($.getLastAuthorizationUrl()):P5(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??C5({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??aV}),Z=$ instanceof nV?this.formatUnauthorizedMessage(W.getLastAuthorizationUrl()):P5($);throw await W.markError(Z),Error(Z)}}function S5($={}){return(W)=>W.transport.type==="stdio"?new eV(W):new $B(W,$)}E5();function p0(){return Date.now()}function Tq($){return $.map((W)=>({name:W.name,description:W.description,inputSchema:W.inputSchema}))}class Z6{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:p0()});return}let Z=JSON.stringify(W.registration.transport)!==JSON.stringify($.transport);if(W.registration={...$},W.updatedAt=p0(),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=p0(),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&&p0()-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=Tq(Q);return W.toolCache=J,W.toolCacheUpdatedAt=p0(),W.updatedAt=p0(),J})}async callTool($){return this.runExclusive($.serverName,async()=>{let W=this.requireServer($.serverName),Z=await this.ensureConnectedClient(W);return W.updatedAt=p0(),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=p0();try{let W=$.client??await this.clientFactory($.registration);await W.connect(),$.client=W,$.status="connected",$.lastError=void 0,$.updatedAt=p0()}catch(W){throw $.status="disconnected",$.lastError=W instanceof Error?W.message:String(W),$.updatedAt=p0(),W}}async disconnectState($){if(!$.client){$.status="disconnected",$.updatedAt=p0();return}try{await $.client.disconnect()}finally{$.status="disconnected",$.updatedAt=p0()}}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 r2($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function WB($){return r2($)&&Object.values($).every((W)=>typeof W==="string")}function Oq($){return Array.isArray($)&&$.every((W)=>typeof W==="string")}function zq($){if(!r2($))return!1;return($.fromEnv===void 0||typeof $.fromEnv==="string")&&($.value===void 0||typeof $.value==="string")&&($.required===void 0||typeof $.required==="boolean")}function qq($){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 ZB($){if(!r2($))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(!r2(Q))return{name:W,loadError:"invalid env"};for(let[V,B]of Object.entries(Q))if(typeof B!=="string"&&!zq(B))return{name:W,loadError:`invalid env "${V}"`}}let J=$.transport;if(!r2(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=r2($.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&&!Oq(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&&!WB(G))return{name:W,loadError:"stdio MCP transport env must be strings"};let K=qq({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&&!WB(Y))return{name:W,loadError:`${j} MCP transport headers must be strings`};return{name:W,registration:{name:W,transport:j==="sse"?{type:"sse",url:J.url,headers:Y}:{type:"streamableHttp",url:J.url,headers:Y},metadata:X}}}function wQ($){let W=new Map;return $.map(({server:Z,owner:Q,ownerLabel:J})=>{let j=ZB(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 Mq}from"node:crypto";var QB=64,Rq=/[^a-zA-Z0-9_-]+/g,JB=8,Nq=1,Eq="mcp_tool";function wq($){return Mq("sha1").update($).digest("hex").slice(0,JB)}function Cq($){return $.replace(Rq,"_")}var b5=({serverName:$,toolName:W})=>{let Z=`${$}__${W}`,Q=Cq(Z);if(Q===Z&&Z.length<=QB)return Z;let J=wq(Z),j=QB-Nq-JB;return`${Q.slice(0,j)||Eq}_${J}`};function CQ($){return{[($.nameTransform??b5)({serverName:$.serverName,toolName:$.toolName})]:{enabled:!1}}}function jB($){let W={};for(let Z of $.toolNames)Object.assign(W,CQ({serverName:$.serverName,toolName:Z,nameTransform:$.nameTransform}));return W}import{createTool as Pq}from"@cline/shared";function Sq($,W){let Z=W.description?.trim();if(Z)return Z;return`Execute MCP tool "${W.name}" from server "${$}".`}async function y5($){let W=await $.provider.listTools($.serverName),Z=$.nameTransform??b5;return W.map((Q)=>{let J=Z({serverName:$.serverName,toolName:Q.name});return Pq({name:J,description:Sq($.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})})})}$1();import{stat as bq}from"node:fs/promises";import{isAbsolute as yq,relative as hq,resolve as XB}from"node:path";$1();function kq($,W){let Z=hq(XB($),XB(W));return Z===""||!Z.startsWith("..")&&!yq(Z)}var Iq=32,i2=new Map;function xq($,W){if(!i2.has($)&&i2.size>=Iq){let Z=i2.keys().next().value;if(Z)i2.delete(Z)}i2.set($,W)}async function gq($){let W=await Promise.all($.pluginPaths.map(async(Z)=>{try{let Q=await bq(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 YB($,W){return $.map((Z)=>({...Z,enabled:!W.has(Z.name)}))}function mq($){return $.sort((W,Z)=>{let Q=W.name.localeCompare(Z.name);if(Q!==0)return Q;return W.path.localeCompare(Z.path)})}async function vq($,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 VB($){let W=P$({workspacePath:$.workspacePath,cwd:$.cwd}),Z=T1($.disabledToolNames);if(W.length===0)return{tools:[],failures:[],warnings:[]};let Q=await gq({pluginPaths:W,workspacePath:$.workspacePath,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId}),J=i2.get(Q);if(J)return{tools:YB(J.tools,Z),failures:J.failures,warnings:J.warnings};let j=[],X=[],Y=[],V;try{V=await R2({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=kq($.workspacePath,G)?"workspace-plugin":"global-plugin",F;try{F=await vq(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=mq(j);return xq(Q,{tools:B,failures:X,warnings:Y}),{tools:YB(B,Z),failures:X,warnings:Y}}async function PQ($){return(await VB($)).tools}function j6($,W){if(!W)return"global";let Z=FB(W,$);return!Z.startsWith("..")&&!KB(Z)?"workspace":"global"}function lq($,W){return j6($,W)==="workspace"?"workspace-plugin":"global-plugin"}function pq($,W){let Z=FB(HB($),HB(W));return Z===""||!Z.startsWith("..")&&!KB(Z)}function rq($){try{let W=JSON.parse(cq($,"utf8"));return typeof W.name==="string"&&W.name.trim()?W.name.trim():void 0}catch{return}}function iq($){let W=BB($);while(!0){let Z=dq(W,"package.json");if(J6(Z)){let J=rq(Z);if(J)return J;break}let Q=BB(W);if(Q===W)break;W=Q}return SQ($,uq($))}function nq($){let W=[];for(let Z of P$({workspacePath:$.workspaceRoot||void 0,cwd:$.cwd}))for(let Q of S$([Z]))W.push({directory:Q,pluginName:iq(Z),pluginPath:Z,source:$.workspaceRoot?lq(Z,$.workspaceRoot):"global-plugin"});return W.sort((Z,Q)=>Q.directory.length-Z.directory.length)}function aq($,W){return W.find((Z)=>pq(Z.directory,$))}function Q6($){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 AB($){return $.workspaceRoot?.trim()||$.cwd?.trim()||""}function UB($,W){return $.cwd?.trim()||W||process.cwd()}async function GB($,W){if($.userInstructionService)return await W($.userInstructionService);let Z=AB($),Q=UB($,Z),J=u2({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 oq($,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 n2{async list($={}){return await GB($,async(W)=>{let Z=AB($),Q=nq({workspaceRoot:Z,cwd:UB($,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:j6(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:j6(H.filePath,Z),description:G.instructions,toggleable:!1})}for(let H of W.listRecords("skill")){let G=H.item,K=aq(H.filePath,Q);X.push({id:H.id,name:G.name,path:H.filePath,enabled:G.disabled!==!0,kind:"skill",source:K?.source??j6(H.filePath,Z),description:G.description,pluginName:K?.pluginName,pluginPath:K?.pluginPath,toggleable:!0})}}if(Z)try{for(let H of await PQ({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(c$({filePath:B}))try{for(let H of V1({filePath:B}))V.push({id:H.name,name:H.name,path:B,enabled:H.disabled!==!0,kind:"mcp",source:j6(B,Z),description:H.transport.type,toggleable:!0})}catch{}return{workflows:Q6(J.filter((H)=>J6(H.path))),rules:Q6(j.filter((H)=>J6(H.path))),skills:Q6(X.filter((H)=>J6(H.path))),tools:Q6(Y),mcp:Q6(V.filter((H)=>J6(H.path)))}})}async toggle($){if($.type==="skills")return await GB($,async(W)=>{let Z=oq(W,$),Q=Z?.filePath;if(!Q)throw Error(`Unable to resolve skill setting '${$.id??$.name??SQ($.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??SQ($.path??"")}'; provide an explicit enabled value or a resolvable workspace context.`);return await wV({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)GZ($.name);else QX($.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=V1({filePath:Z}).find((j)=>j.name===W);if(!J)throw Error(`Unknown MCP server: ${W}`);Q=J.disabled===!0}return t8({filePath:Z,name:W,disabled:!Q}),{snapshot:await this.list($),changedTypes:["mcp"]}}throw Error(`Settings type '${$.type}' does not support toggles.`)}}function X6(){return new n2}function DB($){return{async list(W){let Z=$;if(Z.listSettings)return await Z.listSettings(W);return await X6().list(W)},async toggle(W){let Z=$;if(Z.toggleSetting)return await Z.toggleSetting(W);return await X6().toggle(W)}}}function _B($){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)}}}function S0(...$){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 Y6="session_not_found";class u$ extends Error{sessionId;code="session_not_found";constructor($,W){super(W??($?`session not found: ${$}`:"session not found"));this.sessionId=$;this.name="SessionNotFoundError"}}function d$($){return $ instanceof u$||typeof $==="object"&&$!==null&&"code"in $&&$.code==="session_not_found"}function bQ($){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 fB($){let W=$.config;return"providerId"in W?{...$,config:{...W,...sq($.localRuntime)},localRuntime:$.localRuntime}:$}function yQ($,W={}){let Z=bQ($.config),Q=S0(W.defaultCapabilities,$.capabilities),J=tq(Z.localRuntime,$.localRuntime),j=W.withExtensionContext?.(J?.extensionContext);if(j)J={...J??{},extensionContext:j};return{...$,...Z,...J?{localRuntime:J}:{},...Q?{capabilities:Q}:{}}}function sq($){if(!$)return{};let{modelCatalogDefaults:W,userInstructionService:Z,configExtensions:Q,onTeamRestored:J,...j}=$;return j}function tq(...$){let W={};for(let Z of $)if(Z)Object.assign(W,Z);return Object.keys(W).length>0?W:void 0}F0();function LB($){let W=$.input.config.telemetry??$.telemetry;if(!W)return;W.capture({event:I.SESSION.STARTED,properties:{sessionId:$.sessionId,source:$.input.source??U0.CORE,providerId:$.input.config.providerId,modelId:$.input.config.modelId,enableTools:$.input.config.enableTools,enableSpawnAgent:$.input.config.enableSpawnAgent,enableAgentTeams:$.input.config.enableAgentTeams,clientName:$.clientName,runtimeAddress:$.runtimeAddress}})}function V6($){return!!$&&typeof $==="object"&&!Array.isArray($)}function hQ($){let W=$?.trim();return W?W:void 0}function eq($,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 TB($,W){return new Date(new Date($).getTime()+Math.max(0,Math.floor(W))*1000).toISOString()}function OB($,W){return new Date(new Date($).getTime()-Math.max(0,Math.floor(W))*1000).toISOString()}function $M($,W){if(!$)return W;return new Date($).getTime()>=new Date(W).getTime()?$:W}function WM($,W){let Z=$.eventId.trim(),Q=$.eventType.trim(),J=$.source.trim(),j=hQ($.subject),X=hQ($.dedupeKey)??`${Q}:${J}:${j??Z}`;return{eventId:Z,eventType:Q,source:J,subject:j,occurredAt:eq($.occurredAt,W),workspaceRoot:hQ($.workspaceRoot),payload:V6($.payload)?$.payload:void 0,attributes:V6($.attributes)?$.attributes:void 0,dedupeKey:X}}function kQ($,W){if(!W)return;let Z=W.split("."),Q=$;for(let J of Z){if(!V6(Q))return;Q=Q[J]}return Q}function ZM($,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=kQ(Z,W);if(Q!==void 0)return Q;if($.attributes){let J=kQ($.attributes,W);if(J!==void 0)return J}if($.payload)return kQ($.payload,W);return}function h5($,W){if(Array.isArray(W))return W.some((Z)=>h5($,Z));if(Array.isArray($))return $.some((Z)=>h5(Z,W));if(V6(W)){if(!V6($))return!1;return Object.entries(W).every(([Z,Q])=>h5($[Z],Q))}return Object.is($,W)}function QM($,W){if(!W||Object.keys(W).length===0)return!0;return Object.entries(W).every(([Z,Q])=>h5(ZM($,Z),Q))}class IQ{store;nowFn;logger;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now()),this.logger=$.logger}ingestEvent($){let W=new Date(this.nowFn()).toISOString(),Z=WM($,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(!QM(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=$M(V.scheduledFor,TB(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:OB(Z,j)}))return{reason:"dedupe_window"};let X=$.cooldownSeconds??0;if(X>0&&this.store.hasRecentEventRunForSpec({specId:$.specId,sinceIso:OB(Z,X)}))return{reason:"cooldown"};return{run:this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"event",triggerEventId:W.eventId,scheduledFor:J>0?TB(Z,J):Z}),reason:"dedupe_window"}}}class B6{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 FM}from"node:path";import{buildClineSystemPrompt as AM}from"@cline/shared";import{nowIso as PB}from"@cline/shared/db";import{basename as JM,resolve as jM}from"node:path";import{performance as zB}from"node:perf_hooks";import{processWorkspaceInfo as MB}from"@cline/shared";import RB from"simple-git";function XM($){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 xQ($,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 NB($,W){let Z=XM($);return Z.url===W.url&&Z.branch===W.branch}function EB($){let W=$.find(({name:Z})=>Z==="origin")??$[0];return(W?.refs.fetch||W?.refs.push)?.trim()||void 0}function e1($){return jM($)}async function I5($){return(await gQ($)).info}function qB($){let W=$ instanceof Error?$.message:String($);return/unknown revision|ambiguous argument|does not have any commits yet/i.test(W)}function k5($){if($ instanceof Error)return{errorType:$.name?.trim()||$.constructor.name||"Error",message:$.message};return{errorType:"Error",message:String($)}}async function gQ($){let W=e1($),Z={rootPath:W,hint:JM(W)},Q={},J;try{let j=RB({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=EB(Y);if(B)Q.url=B}}catch(Y){J??=k5(Y)}try{let Y=(await j.revparse(["HEAD"])).trim();if(Y.length>0)Z.latestGitCommitHash=Y}catch(Y){if(!qB(Y))J??=k5(Y)}try{let Y=(await j.branch()).current.trim();if(Y.length>0)Z.latestGitBranchName=Y,Q.branch=Y}catch(Y){if(!qB(Y))J??=k5(Y)}return{info:Z,vcsType:"git",gitState:Q,error:J}}catch(j){return{info:Z,vcsType:"none",gitState:Q,error:k5(j)}}}async function wB($){try{let W=RB({baseDir:e1($)});if(!await W.checkIsRepo())return{};let[Z,Q]=await Promise.all([W.getRemotes(!0),W.branch()]),J=EB(Z),j=Q.current.trim();return{...J?{url:J}:{},...j?{branch:j}:{}}}catch{return}}async function mQ($){let W=await I5($);return MB(W)}async function CB($){let W=zB.now(),Z=await gQ($),Q=zB.now()-W,J=Z.info;return{workspaceInfo:J,workspaceMetadata:MB(J),durationMs:Q,vcsType:Z.vcsType,gitState:Z.gitState,initError:Z.error}}import{mkdirSync as YM,writeFileSync as VM}from"node:fs";import{join as BM}from"node:path";import{resolveCronReportsDir as HM}from"@cline/shared/storage";function $$($){if(/[:#\n]/.test($)||$.includes('"'))return JSON.stringify($);return $}function l$($,W){if(W===void 0||W===null)return;return`${$}: ${$$(W)}`}function GM($,W,Z){let Q=[`runId: ${$$($.runId)}`,`specId: ${$$(W.specId)}`,`externalId: ${$$(W.externalId)}`,`title: ${$$(W.title)}`,`triggerKind: ${$$($.triggerKind)}`,`status: ${$$($.status)}`,`sourcePath: ${$$(W.sourcePath)}`],J=[l$("sessionId",$.sessionId),l$("startedAt",$.startedAt),l$("completedAt",$.completedAt),l$("triggerEventId",$.triggerEventId),l$("triggerEventType",Z?.eventType),l$("triggerEventSource",Z?.source),l$("triggerEventSubject",Z?.subject)];for(let j of J)if(j)Q.push(j);return`---
|
|
184
184
|
${Q.join(`
|
|
185
185
|
`)}
|
|
186
186
|
---
|
|
187
|
-
`}function
|
|
187
|
+
`}function KM($){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
|
|
188
188
|
|
|
189
189
|
${Q.join(`
|
|
190
190
|
`)}
|
|
@@ -203,17 +203,17 @@ ${Q.join(`
|
|
|
203
203
|
${Z.join(`
|
|
204
204
|
`)}
|
|
205
205
|
`)}return W.join(`
|
|
206
|
-
`)}function vQ($){let W=
|
|
207
|
-
${
|
|
208
|
-
`)}class uQ extends Error{constructor($){super($);this.name="TimeoutError"}}async function
|
|
206
|
+
`)}function vQ($){let W=HM($.specs);YM(W,{recursive:!0});let Z=BM(W,`${$.run.runId}.md`),Q=`${GM($.run,$.spec,$.data.triggerEvent)}
|
|
207
|
+
${KM($.data)}`;return VM(Z,Q,"utf8"),Z}class cQ{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 UM=15000,DM=90,SB=["rules","skills","plugins"];function _M($,W){return new Set($.extensions??SB).has(W)}function fM($,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[R0.SUBMIT_AND_EXIT]={enabled:!0,autoApprove:!0};return Z}function LM($){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(`
|
|
208
|
+
`)}class uQ extends Error{constructor($){super($);this.name="TimeoutError"}}async function TM($,W){if(W<=0)return $;let Z,Q=new Promise((J,j)=>{Z=setTimeout(()=>{j(new uQ("cron run timed out"))},W)});try{return await Promise.race([$,Q])}finally{if(Z)clearTimeout(Z)}}class H6{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 cQ($.globalMaxConcurrency??10),this.claimLeaseMs=Math.max(5000,($.claimLeaseSeconds??DM)*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??UM);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:PB(),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 TM(F,A)).result,f=Date.now(),_=vQ({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:f-V,triggerEvent:j}});this.store.completeRun(W.runId,{status:"done",sessionId:X,reportPath:_,claimToken:$.claimToken}),this.publishScheduleExecutionEvent("schedule.execution.completed",Z,W.runId),this.store.updateSpecLastRunAt(Z.specId,PB())}catch(H){let G=H instanceof uQ;if(X&&G)try{await this.options.runtimeHandlers.abortSession(X)}catch{}let K=H instanceof Error?H.message:String(H),F=Date.now(),A=vQ({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}
|
|
209
209
|
|
|
210
210
|
Trigger event:
|
|
211
|
-
${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=
|
|
211
|
+
${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=LM($.notesDirectory),j=p4(void 0,J),X=await mQ(W),Y=AM({ide:"Cline Cron",workspaceRoot:W,workspaceName:FM(W),metadata:X,rules:$.systemPrompt?void 0:j,mode:Z,providerId:Q,overridePrompt:$.systemPrompt,platform:typeof process<"u"&&process?.platform||"unknown"});return $.systemPrompt?p4(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:fM($,X),configExtensions:SB.filter((Y)=>_M($,Y))}}}import{existsSync as dM,readdirSync as lM,readFileSync as pM,statSync as rM}from"node:fs";import{relative as iM}from"node:path";import{resolveCronSpecsDir as nM}from"@cline/shared/storage";function G6($,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 OM=["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"],yB=["sun","mon","tue","wed","thu","fri","sat"];function K6($,W,Z){let Q=$[W];if(typeof Q!=="string")throw Error(`Invalid cron pattern "${Z}": missing field ${W+1}`);return Q}function dQ($,W){let Z=$[0];if(typeof Z!=="number")throw Error(`Invalid cron pattern: no values parsed for ${W}`);return Z}function lQ($){let W=$.trim().split(/\s+/);if(W.length!==5)throw Error(`Invalid cron pattern "${$}": expected 5 fields, got ${W.length}`);return{minutes:G6(K6(W,0,$),0,59),hours:G6(K6(W,1,$),0,23),daysOfMonth:G6(K6(W,2,$),1,31),months:G6(K6(W,3,$),1,12,OM),daysOfWeek:G6(K6(W,4,$),0,6,yB)}}function pQ($){lQ($)}function hB($,W,Z=Date.now()){p$($,Z,W)}var bB=new Map,zM=new Map(yB.map(($,W)=>[$,W]));function kB($){let W=$?.trim();return W?W:void 0}function IB($){let W=bB.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 bB.set($,Z),Z}function qM($){let W=kB($);if(!W)return;IB(W).format(new Date)}function MM($,W){let Z=IB(W).formatToParts(new Date($)),Q=new Map(Z.map((X)=>[X.type,X.value])),J=Q.get("weekday")?.toLowerCase().slice(0,3)??"",j=zM.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 RM($){let W=new Date($);return{month:W.getMonth()+1,dayOfMonth:W.getDate(),dayOfWeek:W.getDay(),hour:W.getHours(),minute:W.getMinutes()}}function NM($,W){return $.months.includes(W.month)&&$.daysOfMonth.includes(W.dayOfMonth)&&$.daysOfWeek.includes(W.dayOfWeek)&&$.hours.includes(W.hour)&&$.minutes.includes(W.minute)}function EM($,W,Z){let Q=lQ($),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(NM(Q,MM(j,Z)))return j;j+=60000}throw Error(`No cron occurrence found within 4 years for pattern "${$}" in timezone "${Z}"`)}function p$($,W,Z){let Q=kB(Z);if(Q)return qM(Q),EM($,W,Q);let J=lQ($),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}=RM(j.getTime());if(!J.months.includes(Y)){let K=J.months.find((A)=>A>Y)??dQ(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)??dQ(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)??dQ(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 wM}from"node:crypto";import CM from"yaml";function PM($){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 SM($){let W=$.replace(/\r\n/g,`
|
|
212
212
|
`);if(!W.startsWith(`---
|
|
213
213
|
`))return{frontmatter:void 0,body:$};let Z=W.slice(4),Q=Z.indexOf(`
|
|
214
214
|
---`);if(Q===-1)return{frontmatter:void 0,body:$};let J=Z.slice(0,Q),j=Z.slice(Q+4);if(j.startsWith(`
|
|
215
|
-
`))j=j.slice(1);return{frontmatter:J,body:j}}function
|
|
216
|
-
`),Z.update(W),Z.digest("hex")}function
|
|
215
|
+
`))j=j.slice(1);return{frontmatter:J,body:j}}function r0($){if(typeof $!=="string")return;let W=$.trim();return W.length>0?W:void 0}function bM($){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 nQ($){if(!$||typeof $!=="object"||Array.isArray($))return;return $}function yM($){let W=nQ($);if(!W)return;let Z=r0(W.providerId),Q=r0(W.modelId);if(Z===void 0&&Q===void 0)return;return{providerId:Z,modelId:Q}}function hM($){if(typeof $!=="string")return;let W=$.trim().toLowerCase();if(W==="act"||W==="plan"||W==="yolo")return W;return}function gB($,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 kM=new Set(w2);function IM($){let W=gB($,{preserveEmptyArray:!0});if(!W)return;let Z=W.filter((Q)=>!kM.has(Q));if(Z.length>0)throw Error(`unknown tool(s): ${Z.join(", ")}`);return W}var xM=new Set(["rules","skills","plugins"]);function gM($){let W=gB($,{preserveEmptyArray:!0});if(!W)return;let Z=W.filter((Q)=>!xM.has(Q));if(Z.length>0)throw Error(`unknown extension(s): ${Z.join(", ")}`);return W}function rQ($){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return;return Math.floor($)}function iQ($){if(typeof $!=="number"||!Number.isFinite($)||$<0)return;return Math.floor($)}function aQ($){if($===null||typeof $!=="object")return JSON.stringify($??null);if(Array.isArray($))return`[${$.map((Z)=>aQ(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)}:${aQ(Q)}`).join(",")}}`}function mB($,W){let Z=wM("sha256");return Z.update(aQ($)),Z.update(`
|
|
216
|
+
`),Z.update(W),Z.digest("hex")}function mM($){return($.split("/").pop()??$).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}var vM=["schedule","timezone"],cM=["event","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds","maxParallel"],uM=["cwd"];function xB($,W,Z,Q,J){return{externalId:$,relativePath:$,triggerKind:W,body:Z,contentHash:mB(Q,Z),error:J}}function B1($,W,Z,Q,J,j){return{externalId:$,relativePath:W,triggerKind:Z,body:Q,contentHash:J,error:j}}function vB($){let W=$.relativePath.replace(/\\/g,"/"),Z=PM(W),{frontmatter:Q,body:J}=SM($.raw),j={};if(Q!==void 0&&Q.trim().length>0)try{let _=CM.parse(Q);if(_&&typeof _==="object"&&!Array.isArray(_))j=_;else if(_!==null&&_!==void 0)return xB(W,Z,J,{},"frontmatter must be a YAML mapping")}catch(_){return xB(W,Z,J,{},_ instanceof Error?`failed to parse frontmatter: ${_.message}`:"failed to parse frontmatter")}let X=mB(j,J),Y=r0(j.id),V=Y??W;if(Z!=="schedule"){for(let _ of vM)if(j[_]!==void 0)return B1(V,W,Z,J,X,`field "${_}" is only allowed on *.cron.md specs`)}for(let _ of uM)if(j[_]!==void 0)return B1(V,W,Z,J,X,`field "${_}" is no longer supported; cron specs use workspaceRoot as cwd`);if(Z!=="event"){for(let _ of cM)if(j[_]!==void 0)return B1(V,W,Z,J,X,`field "${_}" is only allowed on .event.md specs`)}let B=r0(j.prompt),H=J.trim(),G=B??(H.length>0?H:void 0);if(!G)return B1(V,W,Z,J,X,"prompt is required (frontmatter `prompt` or markdown body)");let K=r0(j.workspaceRoot);if(!K)return B1(V,W,Z,J,X,"workspaceRoot is required");let F,A;try{F=IM(j.tools),A=gM(j.extensions)}catch(_){return B1(V,W,Z,J,X,_ instanceof Error?_.message:String(_))}let D=hM(j.mode);if(j.mode!==void 0&&D===void 0)return B1(V,W,Z,J,X,"mode must be one of: act, plan, yolo");let U={id:Y,title:r0(j.title)??Y??mM(W),prompt:G,workspaceRoot:K,mode:D??"yolo",systemPrompt:r0(j.systemPrompt),modelSelection:yM(j.modelSelection),maxIterations:rQ(j.maxIterations),timeoutSeconds:rQ(j.timeoutSeconds),tools:F,notesDirectory:r0(j.notesDirectory),extensions:A,source:r0(j.source)??"user",tags:bM(j.tags),enabled:typeof j.enabled==="boolean"?j.enabled:!0,metadata:nQ(j.metadata)},f;if(Z==="schedule"){let _=r0(j.schedule);if(!_)return B1(V,W,Z,J,X,"schedule is required for *.cron.md specs");let q=r0(j.timezone);try{hB(_,q)}catch(T){return B1(V,W,Z,J,X,T instanceof Error?T.message:String(T))}f={...U,triggerKind:"schedule",schedule:_,timezone:q}}else if(Z==="event"){let _=r0(j.event);if(!_)return B1(V,W,Z,J,X,"event is required for .event.md specs");f={...U,triggerKind:"event",event:_,filters:nQ(j.filters),debounceSeconds:iQ(j.debounceSeconds),dedupeWindowSeconds:iQ(j.dedupeWindowSeconds),cooldownSeconds:iQ(j.cooldownSeconds),maxParallel:rQ(j.maxParallel)}}else f={...U,triggerKind:"one_off"};return{externalId:V,relativePath:W,triggerKind:Z,body:J,contentHash:X,spec:f}}function aM($,W){return iM($,W).replace(/\\/g,"/")}function oM($){if(!dM($))return[];let W=[],Z=[$];while(Z.length>0){let Q=Z.pop();if(!Q)continue;let J;try{J=lM(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 oQ{store;cronDir;constructor($){this.store=$.store,this.cronDir=nM($.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=oM(this.cronDir),Z=new Set;for(let J of W){let j=aM(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=pM(W,"utf8"),J=rM(W).mtimeMs}catch{return}let X=vB({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=p$($.scheduleExpr,Q,$.timezone),j=new Date(J).toISOString();if($.nextRunAt!==j)this.store.updateSpecNextRunAt($.specId,j)}catch{}}}import{existsSync as sM,mkdirSync as tM,watch as eM}from"node:fs";import{relative as $R,resolve as WR}from"node:path";var ZR=250;class sQ{reconciler;debounceMs;onError;onReconciled;watcher;pending=new Map;disposed=!1;constructor($){this.reconciler=$.reconciler,this.debounceMs=Math.max(0,$.debounceMs??ZR),this.onError=$.onError??(()=>{}),this.onReconciled=$.onReconciled??(()=>{})}start(){if(this.disposed)throw Error("CronWatcher disposed");if(this.watcher)return;let $=this.reconciler.getCronDir();try{tM($,{recursive:!0}),this.watcher=eM($,{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=WR(this.reconciler.getCronDir(),$);if(!sM(W)){await this.reconciler.reconcileAll(),await this.onReconciled();return}let Z=$R(this.reconciler.getCronDir(),W).replace(/\\/g,"/");await this.reconciler.reconcileFile(Z,W),await this.onReconciled()}catch(W){this.onError(W)}}}import{randomUUID as F6}from"node:crypto";import{asOptionalString as m,asString as $0,loadSqliteDb as JR,nowIso as f0}from"@cline/shared/db";import{resolveCronDbPath as jR}from"@cline/shared/storage";var QR=[`CREATE TABLE IF NOT EXISTS cron_specs (
|
|
217
217
|
spec_id TEXT PRIMARY KEY,
|
|
218
218
|
external_id TEXT NOT NULL,
|
|
219
219
|
source_path TEXT NOT NULL UNIQUE,
|
|
@@ -304,17 +304,17 @@ ${JSON.stringify(Q,null,2)}`}startClaimLeaseHeartbeat($){let W=Math.max(1000,Mat
|
|
|
304
304
|
ON cron_specs(trigger_kind, enabled, next_run_at);`,`CREATE INDEX IF NOT EXISTS cron_specs_event_match_idx
|
|
305
305
|
ON cron_specs(trigger_kind, event_type, enabled);`,`CREATE INDEX IF NOT EXISTS cron_specs_parse_status_idx
|
|
306
306
|
ON cron_specs(parse_status, updated_at DESC);`,`CREATE INDEX IF NOT EXISTS cron_specs_source_path_idx
|
|
307
|
-
ON cron_specs(source_path);`];function
|
|
307
|
+
ON cron_specs(source_path);`];function cB($){$.exec("PRAGMA journal_mode = WAL;"),$.exec("PRAGMA busy_timeout = 5000;"),$.exec("PRAGMA foreign_keys = ON;");for(let W of QR)$.exec(W)}function x5($){if(!$)return;try{let W=JSON.parse($);if(W&&typeof W==="object"&&!Array.isArray(W))return W}catch{}return}function tQ($,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 r$($){if(typeof $==="number"&&Number.isFinite($))return $;if(typeof $==="bigint")return Number($);return}function W$($){return{specId:$0($.spec_id),externalId:$0($.external_id),sourcePath:$0($.source_path),triggerKind:$0($.trigger_kind),sourceMtimeMs:r$($.source_mtime_ms),sourceHash:m($.source_hash),parseStatus:$0($.parse_status)==="invalid"?"invalid":"valid",parseError:m($.parse_error),enabled:Number($.enabled??0)===1,removed:Number($.removed??0)===1,title:$0($.title),prompt:m($.prompt),workspaceRoot:m($.workspace_root),scheduleExpr:m($.schedule_expr),timezone:m($.timezone),eventType:m($.event_type),filters:x5(m($.filters_json)),debounceSeconds:r$($.debounce_seconds),dedupeWindowSeconds:r$($.dedupe_window_seconds),cooldownSeconds:r$($.cooldown_seconds),mode:m($.mode),systemPrompt:m($.system_prompt),providerId:m($.provider_id),modelId:m($.model_id),maxIterations:r$($.max_iterations),timeoutSeconds:r$($.timeout_seconds),maxParallel:r$($.max_parallel),tools:tQ(m($.tools_json),{preserveEmpty:!0}),notesDirectory:m($.notes_directory),extensions:tQ(m($.extensions_json),{preserveEmpty:!0}),source:m($.source),tags:tQ(m($.tags_json)),metadata:x5(m($.metadata_json)),revision:Number($.revision??1),lastMaterializedRunId:m($.last_materialized_run_id),lastRunAt:m($.last_run_at),nextRunAt:m($.next_run_at),createdAt:$0($.created_at),updatedAt:$0($.updated_at)}}function eQ($){return{runId:$0($.run_id),specId:$0($.spec_id),specRevision:Number($.spec_revision??1),triggerKind:$0($.trigger_kind),status:$0($.status),claimToken:m($.claim_token),claimStartedAt:m($.claim_started_at),claimUntilAt:m($.claim_until_at),scheduledFor:m($.scheduled_for),triggerEventId:m($.trigger_event_id),startedAt:m($.started_at),completedAt:m($.completed_at),sessionId:m($.session_id),reportPath:m($.report_path),error:m($.error),attemptCount:Number($.attempt_count??0),createdAt:$0($.created_at),updatedAt:$0($.updated_at)}}function uB($){return{eventId:$0($.event_id),eventType:$0($.event_type),source:$0($.source),subject:m($.subject),occurredAt:$0($.occurred_at),receivedAt:$0($.received_at),workspaceRoot:m($.workspace_root),dedupeKey:m($.dedupe_key),payload:x5(m($.payload_json)),attributes:x5(m($.attributes_json)),processingStatus:$0($.processing_status),matchedSpecCount:Number($.matched_spec_count??0),queuedRunCount:Number($.queued_run_count??0),suppressedCount:Number($.suppressed_count??0),error:m($.error),createdAt:$0($.created_at),updatedAt:$0($.updated_at)}}function dB($){return $?JSON.stringify($):null}var XR=["prompt","workspaceRoot","mode","systemPrompt","providerId","modelId","maxIterations","timeoutSeconds","maxParallel","tools","notesDirectory","extensions","source","scheduleExpr","timezone","eventType","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds"];function lB($){if($===void 0)return null;if($&&typeof $==="object")return JSON.stringify($);return $}function YR($,W,Z,Q){for(let J of XR){let j=$[J],X=W[J];if(lB(j)!==lB(X))return!0}if(Z===!1&&Q===!0)return!0;return!1}function VR($){return($.split("/").pop()??$).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}function BR($){return`hub/schedules/${$}.cron.md`}function HR($){let W={...$.metadata??{},...$.createdBy?{__hubScheduleCreatedBy:$.createdBy}:{},...$.cwd?{__hubScheduleCwd:$.cwd}:{},...$.runtimeOptions?{__hubRuntimeOptions:$.runtimeOptions}:{}};return Object.keys(W).length>0?W:void 0}function $7($){return{triggerKind:"schedule",title:$.name.trim(),prompt:$.prompt,workspaceRoot:$.workspaceRoot.trim(),schedule:$.cronPattern.trim(),mode:$.mode??"act",systemPrompt:$.systemPrompt,modelSelection:$.modelSelection?JSON.parse(JSON.stringify($.modelSelection)):void 0,maxIterations:typeof $.maxIterations==="number"?Math.floor($.maxIterations):void 0,timeoutSeconds:typeof $.timeoutSeconds==="number"?Math.floor($.timeoutSeconds):void 0,maxParallel:typeof $.maxParallel==="number"?Math.max(1,Math.floor($.maxParallel)):1,source:"hub-schedule",tags:$.tags?.filter((W)=>W.trim().length>0),enabled:$.enabled!==!1,metadata:HR($)}}function pB($){return JSON.stringify($7($))}function GR($,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 A6{db;constructor($={}){let W=$.dbPath??jR();this.db=JR(W),cB(this.db)}close(){this.db.close?.()}getSpecBySourcePath($){let W=this.db.prepare("SELECT * FROM cron_specs WHERE source_path = ?").get($);return W?W$(W):void 0}getSpec($){let W=this.db.prepare("SELECT * FROM cron_specs WHERE spec_id = ?").get($);return W?W$(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?W$(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)=>W$(X))}createHubSchedule($){let W=`sched_${F6()}`,Z=this.upsertSpec({externalId:W,sourcePath:BR(W),triggerKind:"schedule",sourceHash:pB($),parseStatus:"valid",spec:$7($)});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
|
|
308
308
|
WHERE external_id = ? AND source = 'hub-schedule' AND removed = 0
|
|
309
309
|
ORDER BY created_at ASC LIMIT 1`).get($);return W?W$(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
|
|
310
310
|
WHERE ${W.join(" AND ")}
|
|
311
|
-
ORDER BY created_at DESC LIMIT ?`).all(...Z,Q).map((j)=>W$(j))}updateHubSchedule($,W){let Z=this.getHubSchedule($);if(!Z)return;let Q=
|
|
311
|
+
ORDER BY created_at DESC LIMIT ?`).all(...Z,Q).map((j)=>W$(j))}updateHubSchedule($,W){let Z=this.getHubSchedule($);if(!Z)return;let Q=GR(Z,W),J=this.upsertSpec({externalId:$,sourcePath:Z.sourcePath,triggerKind:"schedule",sourceHash:pB(Q),parseStatus:"valid",spec:$7(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:f0()})}listEventSpecsForType($){return this.db.prepare(`SELECT * FROM cron_specs
|
|
312
312
|
WHERE trigger_kind = 'event'
|
|
313
313
|
AND event_type = ?
|
|
314
314
|
AND enabled = 1
|
|
315
315
|
AND removed = 0
|
|
316
316
|
AND parse_status = 'valid'
|
|
317
|
-
ORDER BY created_at ASC`).all($).map((Z)=>W$(Z))}upsertSpec($){let W=
|
|
317
|
+
ORDER BY created_at ASC`).all($).map((Z)=>W$(Z))}upsertSpec($){let W=f0(),Z=this.getSpecBySourcePath($.sourcePath),Q=$.spec,J={title:Q?.title??Z?.title??VR($.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_${F6()}`;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&&YR(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 (
|
|
318
318
|
spec_id, external_id, source_path, trigger_kind,
|
|
319
319
|
source_mtime_ms, source_hash, parse_status, parse_error,
|
|
320
320
|
enabled, removed, title, prompt, workspace_root,
|
|
@@ -337,7 +337,7 @@ ${JSON.stringify(Q,null,2)}`}startClaimLeaseHeartbeat($){let W=Math.max(1000,Mat
|
|
|
337
337
|
tools_json = ?, notes_directory = ?, extensions_json = ?, source = ?,
|
|
338
338
|
tags_json = ?, metadata_json = ?,
|
|
339
339
|
revision = ?, updated_at = ?
|
|
340
|
-
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(
|
|
340
|
+
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(f0(),$)}updateSpecNextRunAt($,W){this.db.prepare("UPDATE cron_specs SET next_run_at = ?, updated_at = ? WHERE spec_id = ?").run(W??null,f0(),$)}updateSpecLastRunAt($,W){this.db.prepare("UPDATE cron_specs SET last_run_at = ?, updated_at = ? WHERE spec_id = ?").run(W,f0(),$)}updateLastMaterializedRunId($,W){this.db.prepare("UPDATE cron_specs SET last_materialized_run_id = ?, updated_at = ? WHERE spec_id = ?").run(W,f0(),$)}initializeScheduleNextRun($){let W=this.getSpec($);if(!W||W.triggerKind!=="schedule"||!W.enabled||!W.scheduleExpr){this.updateSpecNextRunAt($,void 0);return}let Z=new Date(p$(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=W$(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(p$(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_${F6()}`,Y;try{Y=new Date(p$(J.scheduleExpr,W,J.timezone)).toISOString()}catch{Y=void 0}return this.db.prepare(`INSERT INTO cron_runs (
|
|
341
341
|
run_id, spec_id, spec_revision, trigger_kind, status,
|
|
342
342
|
scheduled_for, trigger_event_id, attempt_count,
|
|
343
343
|
created_at, updated_at
|
|
@@ -346,22 +346,22 @@ ${JSON.stringify(Q,null,2)}`}startClaimLeaseHeartbeat($){let W=Math.max(1000,Mat
|
|
|
346
346
|
last_run_at = ?,
|
|
347
347
|
next_run_at = ?,
|
|
348
348
|
updated_at = ?
|
|
349
|
-
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?eQ(W):void 0}insertEventLog($,W={}){let Z=
|
|
349
|
+
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?eQ(W):void 0}insertEventLog($,W={}){let Z=f0(),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 (
|
|
350
350
|
event_id, event_type, source, subject,
|
|
351
351
|
occurred_at, received_at, workspace_root, dedupe_key,
|
|
352
352
|
payload_json, attributes_json, processing_status,
|
|
353
353
|
matched_spec_count, queued_run_count, suppressed_count,
|
|
354
354
|
error, created_at, updated_at
|
|
355
|
-
) VALUES (?,?,?,?, ?,?,?,?, ?,?,?, ?,?,?, ?,?,?)`).run(J,j,X,$.subject?.trim()||null,Y,Q,$.workspaceRoot?.trim()||null,$.dedupeKey?.trim()||null,
|
|
355
|
+
) VALUES (?,?,?,?, ?,?,?,?, ?,?,?, ?,?,?, ?,?,?)`).run(J,j,X,$.subject?.trim()||null,Y,Q,$.workspaceRoot?.trim()||null,$.dedupeKey?.trim()||null,dB($.payload),dB($.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?uB(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}
|
|
356
356
|
ORDER BY received_at DESC, created_at DESC
|
|
357
|
-
LIMIT ?`).all(...Z,J).map((X)=>
|
|
357
|
+
LIMIT ?`).all(...Z,J).map((X)=>uB(X))}updateEventLogProcessing($,W){return(this.db.prepare(`UPDATE cron_event_log SET
|
|
358
358
|
processing_status = ?,
|
|
359
359
|
matched_spec_count = COALESCE(?, matched_spec_count),
|
|
360
360
|
queued_run_count = COALESCE(?, queued_run_count),
|
|
361
361
|
suppressed_count = COALESCE(?, suppressed_count),
|
|
362
362
|
error = ?,
|
|
363
363
|
updated_at = ?
|
|
364
|
-
WHERE event_id = ?`).run(W.status,W.matchedSpecCount??null,W.queuedRunCount??null,W.suppressedCount??null,W.error??null,
|
|
364
|
+
WHERE event_id = ?`).run(W.status,W.matchedSpecCount??null,W.queuedRunCount??null,W.suppressedCount??null,W.error??null,f0(),$).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)=>eQ(X))}hasRecentEventRunForDedupe($){return!!this.db.prepare(`SELECT r.run_id FROM cron_runs r
|
|
365
365
|
INNER JOIN cron_event_log e ON e.event_id = r.trigger_event_id
|
|
366
366
|
WHERE r.spec_id = ?
|
|
367
367
|
AND r.trigger_kind = 'event'
|
|
@@ -379,7 +379,7 @@ ${JSON.stringify(Q,null,2)}`}startClaimLeaseHeartbeat($){let W=Math.max(1000,Mat
|
|
|
379
379
|
AND r.status = 'queued'
|
|
380
380
|
AND e.dedupe_key = ?
|
|
381
381
|
ORDER BY COALESCE(r.scheduled_for, r.created_at) DESC
|
|
382
|
-
LIMIT 1`).get($.specId,$.dedupeKey);return W?eQ(W):void 0}updateQueuedEventRunForDebounce($){let W=
|
|
382
|
+
LIMIT 1`).get($.specId,$.dedupeKey);return W?eQ(W):void 0}updateQueuedEventRunForDebounce($){let W=f0();if((this.db.prepare(`UPDATE cron_runs SET
|
|
383
383
|
trigger_event_id = ?,
|
|
384
384
|
scheduled_for = ?,
|
|
385
385
|
updated_at = ?
|
|
@@ -388,12 +388,12 @@ ${JSON.stringify(Q,null,2)}`}startClaimLeaseHeartbeat($){let W=Math.max(1000,Mat
|
|
|
388
388
|
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
|
|
389
389
|
WHERE spec_id = ? AND spec_revision = ?
|
|
390
390
|
AND trigger_kind = 'one_off'
|
|
391
|
-
LIMIT 1`).get($,W)}enqueueRun($){let W=`crun_${
|
|
391
|
+
LIMIT 1`).get($,W)}enqueueRun($){let W=`crun_${F6()}`,Z=f0();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
|
|
395
395
|
) VALUES (?,?,?,?,?, ?,?,?, ?,?)`).run(W,$.specId,$.specRevision,$.triggerKind,"queued",$.scheduledFor??null,$.triggerEventId??null,0,Z,Z),this.updateLastMaterializedRunId($.specId,W);let Q=this.getRun(W);if(!Q)throw Error("failed to insert cron_run row");return Q}cancelQueuedRunsForSpec($){return this.db.prepare(`UPDATE cron_runs SET status = 'cancelled', updated_at = ?
|
|
396
|
-
WHERE spec_id = ? AND status = 'queued'`).run(
|
|
396
|
+
WHERE spec_id = ? AND status = 'queued'`).run(f0(),$).changes??0}claimDueRuns($){let W=$.nowIso,Z=Math.max(1000,Math.floor($.leaseMs)),Q=new Date(new Date(W).getTime()+Z).toISOString(),J=Math.max(1,Math.floor($.limit??25)),j=[];this.db.exec("BEGIN IMMEDIATE;");try{let X=this.db.prepare(`SELECT * FROM cron_runs
|
|
397
397
|
WHERE (
|
|
398
398
|
status = 'queued'
|
|
399
399
|
OR (
|
|
@@ -405,7 +405,7 @@ ${JSON.stringify(Q,null,2)}`}startClaimLeaseHeartbeat($){let W=Math.max(1000,Mat
|
|
|
405
405
|
)
|
|
406
406
|
AND (scheduled_for IS NULL OR scheduled_for <= ?)
|
|
407
407
|
ORDER BY COALESCE(scheduled_for, created_at) ASC
|
|
408
|
-
LIMIT ?`).all(W,W,J);for(let Y of X){let V=$0(Y.run_id);if(!V)continue;let B=`cclaim_${
|
|
408
|
+
LIMIT ?`).all(W,W,J);for(let Y of X){let V=$0(Y.run_id);if(!V)continue;let B=`cclaim_${F6()}`;if((this.db.prepare(`UPDATE cron_runs SET
|
|
409
409
|
status = 'running',
|
|
410
410
|
claim_token = ?,
|
|
411
411
|
claim_started_at = ?,
|
|
@@ -427,7 +427,7 @@ ${JSON.stringify(Q,null,2)}`}startClaimLeaseHeartbeat($){let W=Math.max(1000,Mat
|
|
|
427
427
|
AND completed_at IS NULL
|
|
428
428
|
)
|
|
429
429
|
)`).run(B,W,Q,W,W,V,W).changes??0)!==1)continue;let G=this.getRun(V);if(!G)continue;j.push({run:G,claimToken:B,claimUntilAt:Q})}this.db.exec("COMMIT;")}catch(X){throw this.db.exec("ROLLBACK;"),X}return j}renewClaim($,W,Z){return(this.db.prepare(`UPDATE cron_runs SET claim_until_at = ?, updated_at = ?
|
|
430
|
-
WHERE run_id = ? AND claim_token = ?`).run(Z,
|
|
430
|
+
WHERE run_id = ? AND claim_token = ?`).run(Z,f0(),$,W).changes??0)===1}completeRun($,W){let Z=W.completedAtIso??f0(),Q=W.claimToken?"WHERE run_id = ? AND claim_token = ?":"WHERE run_id = ?";return(this.db.prepare(`UPDATE cron_runs SET
|
|
431
431
|
status = ?,
|
|
432
432
|
session_id = COALESCE(?, session_id),
|
|
433
433
|
report_path = COALESCE(?, report_path),
|
|
@@ -437,7 +437,7 @@ ${JSON.stringify(Q,null,2)}`}startClaimLeaseHeartbeat($){let W=Math.max(1000,Mat
|
|
|
437
437
|
claim_token = NULL,
|
|
438
438
|
claim_until_at = NULL,
|
|
439
439
|
updated_at = ?
|
|
440
|
-
${Q}`).run(W.status,W.sessionId??null,W.reportPath??null,W.error??null,Z,Z,$,...W.claimToken?[W.claimToken]:[]).changes??0)>0}requeueRun($){let W=
|
|
440
|
+
${Q}`).run(W.status,W.sessionId??null,W.reportPath??null,W.error??null,Z,Z,$,...W.claimToken?[W.claimToken]:[]).changes??0)>0}requeueRun($){let W=f0();return(this.db.prepare(`UPDATE cron_runs SET
|
|
441
441
|
status = 'queued',
|
|
442
442
|
claim_started_at = NULL,
|
|
443
443
|
claim_token = NULL,
|
|
@@ -449,45 +449,45 @@ ${JSON.stringify(Q,null,2)}`}startClaimLeaseHeartbeat($){let W=Math.max(1000,Mat
|
|
|
449
449
|
error = ?,
|
|
450
450
|
scheduled_for = COALESCE(?, scheduled_for),
|
|
451
451
|
updated_at = ?
|
|
452
|
-
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,
|
|
453
|
-
`)[0]?.trim())}function Z$($){if(!$)return;let W={...$},Z=i$(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
|
|
454
|
-
`,"utf8")}function
|
|
455
|
-
`).trim()}function
|
|
456
|
-
`)[0]??J);return
|
|
457
|
-
`,{encoding:"utf8",mode:384}),await
|
|
458
|
-
`,"utf8");try{return await W()}finally{await QH(Z)}}catch(J){if((J instanceof Error&&"code"in J?String(J.code):"")!=="EEXIST")throw J;let X=await tR(Z),Y=X?Date.now()-Date.parse(X.acquiredAt):ZH+1;if(!X||!aR(X.pid)||Y>ZH){await QH(Z);continue}if(Date.now()>=Q)throw Error(`Timed out waiting for hub startup lock ${Z}`);await oR(rR)}}async function a$($,W){try{let Z=await fetch(W?.authToken?eR($):GH($),{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 R1($,W,Z="/hub"){return new URL(`ws://${$}:${W}${Z}`).toString()}function GH($){let W=new URL($);return W.protocol=W.protocol==="wss:"?"https:":"http:",W.pathname="/health",W.search="",W.toString()}function eR($){let W=new URL(GH($));return W.pathname="/status",W.toString()}function gp($){return cR($)}import{CLINE_HUB_DEV_PORT as $E,CLINE_HUB_PORT as WE,resolveClineBuildEnv as ZE}from"@cline/shared";var QE="CLINE_HUB_HOST",JE="CLINE_HUB_PORT",jE="CLINE_HUB_PATHNAME",XE="127.0.0.1",YE=WE,VE="/hub";function KH($){return ZE($)==="development"?$E:YE}function BE($={}){return($.env??process.env)[QE]?.trim()||XE}function d5($={}){let Z=($.env??process.env)[JE]?.trim();if(!Z)return KH($);let Q=Number.parseInt(Z,10);if(!Number.isInteger(Q)||Q<1||Q>65535)return KH($);return Q}function HE($={}){return($.env??process.env)[jE]?.trim()||VE}function J$($={},W={}){return{host:$.host??BE(W),port:$.port??d5(W),pathname:$.pathname??HE(W)}}import{join as GE}from"node:path";var KE="shared:cline",FE="CLINE_HUB_DISCOVERY_PATH",AE="hub-production";function pp($){let W=e1($.trim());return n$(`workspace:${W||$.trim()}`)}function E1($=KE){return n$($)}function j$(){return{ownerId:AE,discoveryPath:process.env[FE]?.trim()||GE(z6(),"locks","hub","production.json")}}var EE=8000,NE=200,wE=3000,CE=100,PE=[100,250,500,1000,2000],SE="--cline-hub-daemon";function bE($){return[...$.host?["--host",$.host]:[],...typeof $.port==="number"?["--port",String($.port)]:[],...$.pathname?["--pathname",$.pathname]:[]]}function yE(){try{let $=TE(z6(),"logs","hub-daemon.log");return _E(OE($),{recursive:!0}),{fd:fE($,"a"),logPath:$}}catch{return}}function DH(){return UH()==="production"?j$():E1()}function o$($){return ME($).compatible}function FH($,W,Z){if(!W||W.url!==Z)return $;return{...$,authToken:$.authToken??W.authToken,pid:$.pid??W.pid}}async function s$($,W){try{return await a$($,{authToken:W})}catch{return}}async function hE($,W){let Z=Date.now()+W;while(Date.now()<Z){if(!(await s$($))?.url)return!0;await new Promise((J)=>setTimeout(J,CE))}return!1}async function l5($,W){if(await D7($.url,$.authToken).catch(()=>!1),$.pid)try{process.kill($.pid,"SIGTERM")}catch{}let Z=await hE($.url,wE);return await W1(W).catch(()=>{return}),Z}async function q6($,W){if(o$($))return!0;return l5($,W)}async function _H($){if(UH()!=="production")return;let W=E1();if(W.discoveryPath===$.discoveryPath)return;let Z=await O0(W.discoveryPath);if(Z?.url)await l5(Z,W.discoveryPath);else await W1(W.discoveryPath).catch(()=>{return})}function kE(){let $=import.meta.url.endsWith(".ts")?"ts":"js";return zE(new URL(`./entry.${$}`,import.meta.url))}function IE($,W){let Z=kE(),Q=process.execPath?.trim();if(!Q)throw Error("unable to resolve runtime executable for hub daemon");let J=LE(Q).toLowerCase().includes("bun"),j=Z.startsWith("/$bunfs/"),X=J&&Z.toLowerCase().endsWith(".ts"),Y=j?[SE]:[...X?["--conditions=development"]:[],Z];return{launcher:Q,args:[...Y,"--cwd",$,...bE(W)],cwd:$,env:{...RE(process.env),CLINE_NO_INTERACTIVE:"1",[qE]:"1"}}}function xE($){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 gE($,W={}){if(AH())return;let Z=IE($,W),Q=yE();try{UE(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)DE(Q.fd)}}async function p5($,W={}){for(let Z=0;;Z++)try{gE($,W);return}catch(Q){let J=PE[Z];if(!xE(Q)||J===void 0)throw Q;await new Promise((j)=>setTimeout(j,J))}}function fH($,W={}){if(AH())return;let Z=DH(),Q=J$(W),J=R1(Q.host,Q.port,Q.pathname),j=W.allowPortFallback===!0&&Q.port!==0;_H(Z).catch(()=>{return}).then(()=>O0(Z.discoveryPath)).then(async(X)=>{let Y=!1;if(X?.url)if(!X.authToken){if(Y=!0,!await l5(X,Z.discoveryPath)&&!j)return}else{let H=await s$(X.url,X.authToken);if(H?.url&&o$(H)&&await X$(H.url,{authToken:X.authToken}))return;if(H?.url)await q6({...H,authToken:X.authToken},Z.discoveryPath);else await W1(Z.discoveryPath).catch(()=>{return})}let V=await s$(J);if(V?.url){if(o$(V)){if(!j||!Y)return}else if(!await q6({...V,authToken:void 0},Z.discoveryPath)&&!j)return}let B=j?{...Q,port:0}:Q;await p5($,B)}).catch(()=>{})}async function Zr($,W={}){let Z=DH(),Q=W.host!==void 0||W.port!==void 0||W.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),J=J$(W),j=R1(J.host,J.port,J.pathname),X=(F)=>{if(!Q)n2(F.url,F.authToken);return F};await _H(Z).catch(()=>{return});let Y=await O0(Z.discoveryPath),V=!1;if(Y?.url){let F=Y.authToken;if(!F)V=!0,await l5(Y,Z.discoveryPath);else{let A=await s$(Y.url,F);if(A?.url&&o$(A)&&await X$(A.url,{authToken:F}))return X({url:A.url,authToken:F});if(A?.url)await q6({...A,authToken:F},Z.discoveryPath);else await W1(Z.discoveryPath).catch(()=>{return})}}let B=await s$(j);if(B?.url){let F=FH(B,Y,j);if(o$(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 q6(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 p5($,G);let K=Date.now()+EE;while(Date.now()<K){let F=await O0(Z.discoveryPath);if(F?.url&&F.authToken){let D=await s$(F.url,F.authToken);if(D?.url&&o$(D)&&await X$(D.url,{authToken:F.authToken}))return X({url:D.url,authToken:F.authToken})}let A=await s$(j);if(A?.url&&!o$(A)){let D=FH(A,F,j);if(!await q6(D,Z.discoveryPath)&&W.allowPortFallback!==!0&&J.port!==0)throw Error(`An incompatible Cline Hub is still running at ${j} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}await new Promise((D)=>setTimeout(D,NE))}throw Error("Timed out waiting for detached hub startup.")}function i5(){return cE()==="production"?j$():E1()}function dE(){let $=globalThis.WebSocket;if(!$)throw Error("Global WebSocket is not available in this runtime. Node 22+ is required for hub mode.");return $}function qH($){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 qH($.data);return String($)}function lE($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString("utf8");if($ instanceof ArrayBuffer)return Buffer.from($).toString("utf8");return""}function LH($){let W=$,Z=lE(W.reason);return new p0("hub_connection_closed",W.code||Z?`Hub connection closed (code=${W.code??0}${Z?`, reason=${Z}`:""})`:_7,{closeCode:W.code,closeReason:Z||void 0})}function pE($,W){if($ instanceof p0)return $;if($ instanceof Error)return new p0("hub_connect_failed",$.message);if($&&typeof $==="object"&&"error"in $&&$.error instanceof Error)return new p0("hub_connect_failed",$.error.message);let Z=$&&typeof $==="object"&&"message"in $&&typeof $.message==="string"?$.message.trim():"";if(Z)return new p0("hub_connect_failed",Z);let Q=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return new p0("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 rE=8000,iE=200,OH="*",TH=8000,nE="cline-hub-auth.",MH=new Map,RH=new Set,aE=3000,oE=3000,sE=100,_7="Hub connection closed",tE=250,eE=5000,zH=0.5;class p0 extends Error{code;details;constructor($,W,Z){super(W);this.code=$;this.details=Z;this.name="HubTransportError"}}function $N($){return $ instanceof p0}class r5 extends Error{command;code;constructor($,W,Z){super(Z);this.command=$;this.code=W;this.name="HubCommandError"}}function EH($,W){return $ instanceof r5&&$.code==="hub_command_timeout"&&(W===void 0||$.command===W)}function NH($){let W=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),W)return W;let Z=O7($.toString());return Z?MH.get(Z):void 0}function WN($){try{let Z=new URL($).hostname.toLowerCase().replace(/^\[|\]$/g,"");return Z==="localhost"||Z==="127.0.0.1"||Z==="::1"}catch{return!1}}function O7($){if(!WN($))return;let W=new URL(a2($));return W.search="",W.hash="",W.toString()}function f7($){let W=O7($);return!!W&&RH.has(W)}function n2($,W){let Z=O7($);if(Z){if(RH.add(Z),W?.trim())MH.set(Z,W)}return $}class N1{options;socket;connectPromise;clientId;currentUrl;recoveryPromise;pendingReplies=new Map;listeners=new Set;subscriptionCounts=new Map;reconnectTimer;reconnectAttempt=0;closedByClient=!1;lastCloseError=new p0("hub_connection_closed",_7);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()||NH($);$.hash="";let Q=new(dE())($.toString(),W?[`${nE}${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 p0("hub_connect_timeout",`Timed out connecting to hub after ${TH}ms`),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0;try{Q.close()}catch{}X(this.lastCloseError)},TH);Q.addEventListener("open",()=>{if(Y)return;Y=!0,clearTimeout(V),j()}),Q.addEventListener("error",(B)=>{if(Y)return;Y=!0,clearTimeout(V),this.lastCloseError=pE(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=LH(B),this.sawSocketClose=!0;this.connectPromise=void 0,this.socket=void 0,X(this.lastCloseError)})}),Q.addEventListener("message",(j)=>{this.handleFrame(JSON.parse(qH(j)))}),Q.addEventListener("close",(j)=>{if(this.socket!==Q)return;if(!J)this.lastCloseError=LH(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=mE("hubreq_"),j=uE($,Q?.timeoutMs),X=new Promise((V,B)=>{let H=j===null?void 0:setTimeout(()=>{if(!this.pendingReplies.delete(J))return;B(new r5($,"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===X6){let V=Z??(typeof W?.sessionId==="string"?W.sessionId:void 0);throw new u$(V,Y.error.message)}throw new r5($,Y.error?.code,Y.error?.message??`Hub command ${$} failed`)}return Y}async recoverLocalHubTransport($){if(!f7(this.currentUrl)||!$N($))return!1;if(this.recoveryPromise)return await this.recoveryPromise;return this.recoveryPromise=(async()=>{let W=await M6({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(tE*2**this.reconnectAttempt,eE),W=Math.round($*(1-zH)+Math.random()*$*zH);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(!f7(this.currentUrl)){this.reconnectAttempt+=1,this.scheduleReconnect();return}try{let $=await M6({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 p0("hub_connection_closed",_7),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 p0("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 $??OH}subscriptionSessionIdFromKey($){return $===OH?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 a2($){let W=new URL($);if(W.protocol==="http:")W.protocol="ws:";else if(W.protocol==="https:")W.protocol="wss:";return W.toString()}async function X$($,W){let Z=new N1({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 L7($,W){let Z=a2($),Q=await a$(Z,{authToken:W?.authToken});if(!Q)return{status:"unreachable",url:Z};if(!vE(Q).compatible)return{status:"protocol_mismatch",url:Z};if(W?.verifyConnection===!0&&!await X$(Z,{workspaceRoot:W.workspaceRoot,cwd:W.cwd,authToken:W.authToken}))return{status:"unreachable",url:Z};return{status:"compatible",url:Z}}async function ZN($){let W=Date.now()+rE;while(Date.now()<W){let Z=await O0($.discoveryPath);if(Z?.url){let Q=await L7(Z.url,{verifyConnection:!0,authToken:Z.authToken});if(Q.status==="compatible")return n2(Q.url,Z.authToken)}await new Promise((Q)=>setTimeout(Q,iE))}return}async function QN($){let W=Date.now()+oE;while(Date.now()<W){if(!(await a$($).catch(()=>{return}))?.url)return!0;await new Promise((Q)=>setTimeout(Q,sE))}return!1}function JN($,W){try{return a2($)===a2(W)}catch{return!1}}function jN($){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 XN($,W,Z){let Q=new N1({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:aE});return!jN(J.payload)}catch{return!1}finally{await Q.dispose().catch(()=>{return})}}async function T7($={}){if($.endpoint?.trim()){let J=await L7($.endpoint);return J.status==="compatible"?J.url:void 0}let W=i5(),Z=await O0(W.discoveryPath);if(!Z?.url)return;let Q=await L7(Z.url,{authToken:Z.authToken});if(Q.status==="compatible")return n2(Q.url,Z.authToken);if(Q.status==="protocol_mismatch")await W1(W.discoveryPath).catch(()=>{return});return}async function M6($={}){let W=await T7($);if(W&&await X$(W,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return W;if($.endpoint?.trim())return;let Z=i5();return await p5($.workspaceRoot??process.cwd()),await ZN(Z)}async function D7($,W){let Z=new URL($),Q=W?.trim()||NH(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 YN($=i5()){let W=await O0($.discoveryPath);if(!W?.url)return!1;try{if(await D7(W.url,W.authToken))return!0}catch{}return!1}async function wH($){if(!f7($.url))return;let W=i5(),Z=await O0(W.discoveryPath);if(!Z?.url||!JN(Z.url,$.url))return;if(!await XN(Z.url,Z.authToken,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return;if(!await YN())return;if(!await QN(Z.url))return;return await W1(W.discoveryPath).catch(()=>{return}),await M6({workspaceRoot:$.workspaceRoot,cwd:$.cwd})}import{resolveProviderRequestHeaders as UN}from"@cline/llms";import{captureSdkError as M7,createSessionId as hH,HUB_CHECKPOINT_CAPABILITY as DN,HUB_COMPACTION_CAPABILITY as _N,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as fN,HUB_HOOK_CAPABILITY_PREFIX as LN,HUB_MISTAKE_LIMIT_CAPABILITY as ON,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as TN,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as zN,isHubToolExecutorName as qN}from"@cline/shared";import{createHash as VN}from"node:crypto";import{formatDisplayUserInput as CH}from"@cline/shared";import{z as B1}from"zod";function BN($){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 HN=B1.custom(BN),n5=B1.object({version:B1.literal(1),updated_at:B1.string().datetime(),conversation_id:B1.string().min(1).optional(),source_message_count:B1.number().int().nonnegative(),source_prefix_hash:B1.string().min(1).optional(),source_last_message_key:B1.string().min(1).optional(),messages:B1.array(HN),system_prompt:B1.string().optional()});function z7($){return JSON.parse(JSON.stringify($))}function PH($){if($.role!=="user")return $;if(typeof $.content==="string")return{...$,content:CH($.content)};return{...$,content:$.content.map((W)=>W.type==="text"?{...W,text:CH(W.text)}:W)}}function SH($){if($.includes(":"))throw TypeError("Message role cannot contain ':' in compaction boundary keys")}function GN($){let W=PH($);return SH(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 bH($){if(!$)return"";let W=PH($);if(typeof W.id==="string"&&W.id.trim())return`id:${W.id.trim()}`;if(SH(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 yH($,W=$.length){let Z=VN("sha256");Z.update(`cline-session-compaction-source-v1
|
|
452
|
+
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,f0(),$)}attachReportPathToRun($,W){this.db.prepare("UPDATE cron_runs SET report_path = ?, updated_at = ? WHERE run_id = ?").run(W,f0(),$)}}class U6{store;reconciler;watcher;eventIngress;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new A6({dbPath:$.dbPath});let W=$.specs;this.reconciler=new oQ({store:this.store,specs:W}),this.materializer=new B6({store:this.store}),this.eventIngress=new IQ({store:this.store,logger:$.logger}),this.runner=new H6({store:this.store,materializer:this.materializer,runtimeHandlers:$.runtimeHandlers,workspaceRoot:$.workspaceRoot,specs:W,logger:$.logger,pollIntervalMs:$.pollIntervalMs,claimLeaseSeconds:$.claimLeaseSeconds,globalMaxConcurrency:$.globalMaxConcurrency}),this.watcher=new sQ({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($)}}import{readdir as qR,readFile as eB}from"node:fs/promises";import{join as $H}from"node:path";import{formatDisplayUserInput as MR,normalizeUserInput as RR}from"@cline/shared";import{resolveSessionDataDir as WH}from"@cline/shared/storage";import{mkdirSync as AR,writeFileSync as UR}from"node:fs";import{dirname as DR}from"node:path";import{normalizeUserInput as _R,stripModeNotices as fR}from"@cline/shared";import{nanoid as LR}from"nanoid";import{nanoid as KR}from"nanoid";function D6($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function g5($,W){let Z=D6($),Q=D6(W),J=`${Z}__${Q}`;return J.length>180?J.slice(0,180):J}function W7($,W){let Z=D6($),Q=D6(W);return`${Z}__teamtask__${Q}__${KR(6)}`}function _6($){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 m5($){if(_6($))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 Z7($){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 e}from"zod";var FR=e.enum(VZ),I0=e.object({version:e.literal(1),session_id:e.string().min(1),source:e.string().min(1),pid:e.number().int(),started_at:e.string().min(1),ended_at:e.string().min(1).optional(),exit_code:e.number().int().nullable().optional(),status:FR,interactive:e.boolean(),provider:e.string().min(1),model:e.string().min(1),cwd:e.string().min(1),workspace_root:e.string().min(1),team_name:e.string().min(1).optional(),enable_tools:e.boolean(),enable_spawn:e.boolean(),enable_teams:e.boolean(),prompt:e.string().optional(),metadata:e.record(e.string(),e.unknown()).optional(),messages_path:e.string().min(1).optional(),compaction_path:e.string().min(1).optional()});function rB($){if(!$)return!1;return Object.values($).some((W)=>typeof W==="function")}function J7($,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 iB($){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 Q7($,W){let Z={...$};Z.id=R1(Z.id)??LR();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 v5($){return $.map((W)=>Q7(W))}function c5($,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 Q7(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]={...Q7(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 f6($){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 TR=120;function i$($){let W=$?.trim();return W?W.slice(0,TR):void 0}function j7($){let W=fR(_R($??"")).trim();if(!W)return;return i$(W.split(`
|
|
453
|
+
`)[0]?.trim())}function Z$($){if(!$)return;let W={...$},Z=i$(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 L6($){let W=Z$($.metadata)??{},Z=$.title!==void 0?i$($.title):j7($.prompt);if(Z)W.title=Z;return Object.keys(W).length>0?W:void 0}function X7($){let W=_6($);if(W)return{agent:"teammate",sessionId:W.rootSessionId,taskType:"team"};let Z=m5($);if(Z)return{agent:"subagent",sessionId:Z.rootSessionId,taskType:"subagent_task"};return{agent:"lead",sessionId:$}}function Y7($){return{version:1,updated_at:$.updatedAt,agent:$.context.agent,sessionId:$.context.sessionId,...$.context.taskType?{taskType:$.context.taskType}:{},messages:v5($.messages),...$.systemPrompt?{system_prompt:$.systemPrompt}:{}}}function nB($,W,Z){AR(DR($),{recursive:!0}),UR($,`${JSON.stringify(Y7({updatedAt:W,context:Z,messages:[]}),null,2)}
|
|
454
|
+
`,"utf8")}function aB($,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 oB($,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}}import{existsSync as OR}from"node:fs";import{readFile as zR}from"node:fs/promises";class T6{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 Q$($){let W=$?.trim();if(!W||!OR(W))return[];try{let Z=(await zR(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 V7($){return $?{...$}:void 0}async function sB($,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 O6($){if(typeof $!=="string")return;let W=$.trim();return W.length>0?W:void 0}function i0($){let W=O6($);if(!W)return;return W.toLowerCase()==="unknown"?void 0:W}function u5($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function NR($){if(!$||typeof $!=="object"||Array.isArray($))return;return{...$}}function H7($){let W=$??200;return Number.isFinite(W)?Math.max(0,Math.floor(W)):200}function ER($){if($===0)return 0;return Math.min(Math.max($*2,20),2000)}function wR($){return $.isSubagent!==!0&&!O6($.parentSessionId)}function CR($){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 G7($){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 PR($){let W=H7($);if(W===0)return[];let Z=WH(),J=(await qR(Z,{withFileTypes:!0}).catch(()=>[])).filter((X)=>X.isDirectory()).map((X)=>({entry:X,recency:CR(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=$H(Z,Y,`${Y}.json`),B=await eB(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 G7(G.data)}))).filter((X)=>Boolean(X)).sort((X,Y)=>Y.startedAt.localeCompare(X.startedAt)).slice(0,W)}async function SR($,W,Z){let Q=H7(W);if(Q===0)return await $.listSessions(0),[];let J=Z.includeSubagents?Q:ER(Q),j=await $.listSessions(J);return(Z.includeSubagents?j:j.filter(wR)).slice(0,Q)}function bR($){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(`
|
|
455
|
+
`).trim()}function tB($){return $.replace(/\s+/g," ").trim()}function yR($,W){if($.length<=W)return $;return`${$.slice(0,Math.max(0,W-3)).trimEnd()}...`}function hR($){for(let W of["user","assistant"])for(let Z of $){if(Z.role!==W)continue;let Q=tB(bR(Z.content));if(!Q)continue;let J=W==="user"?tB(MR(Q)):Q,j=RR(J.split(`
|
|
456
|
+
`)[0]??J);return yR(j,50)}return}function kR($){let W=0;for(let Z of $)W+=u5(Z.metrics?.cost)??0;return W}function IR($){let W,Z;for(let Q=$.length-1;Q>=0;Q-=1){let J=$[Q];if(!W)W=i0(J.modelInfo?.provider);if(!Z)Z=i0(J.modelInfo?.id);if(W&&Z)break}return{provider:W,model:Z}}function xR($){return i0($?.provider)??i0($?.provider&&typeof $.provider==="object"&&!Array.isArray($.provider)?$.provider.id:void 0)}function gR($){return i0($?.model)??i0($?.model&&typeof $.model==="object"&&!Array.isArray($.model)?$.model.id:void 0)}function B7($,W){let Z=NR($.metadata),Q=O6(W?.title)??O6(Z?.title),J=u5(W?.totalCost)??u5(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:i0(W?.provider)??i0($.provider)??xR(Z)??"",model:i0(W?.model)??i0($.model)??gR(Z)??"",metadata:j}}function mR($){let W=$.content;if(!Array.isArray(W))return!1;return W.some((Z)=>!!Z&&typeof Z==="object"&&Z.type==="tool-call")}function vR($,W){if($.status!=="running"||$.interactive!==!0)return!1;let Z=W.at(-1);return Z?.role==="assistant"&&!mR(Z)}async function cR($,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 vR(Z,Q)?{...Z,status:"idle"}:Z}))}async function uR($,W){return await Promise.all(W.map(async(Z)=>{let Q=B7(Z),J=Boolean(O6(Q.metadata?.title)),j=Boolean(i0(Q.provider)),X=Boolean(i0(Q.model)),Y=u5(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=IR(B),G=kR(B);return B7(Z,{title:J?void 0:hR(B),provider:j?void 0:H.provider,model:X?void 0:H.model,totalCost:V||G<=0?void 0:G})}))}async function K7($,W={}){let Z=H7(W.limit),Q=W.includeSubagents===!0,J=await SR($,Z,{includeSubagents:Q}),j=W.includeManifestFallback===!0&&J.length<Z?await PR(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 cR($,Y);if(W.hydrate===!1)return V.map((B)=>B7(B));return await uR($,V)}async function dR($){let W=$.trim();if(!W)return;let Z=$H(WH(),W,`${W}.json`),Q=await eB(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 lR($,W={}){let Z=new Map;return await K7({listSessions:async(J)=>{let j=await $.listSessions(J);Z.clear();for(let X of j)Z.set(X.sessionId,X);return j.map(f6)},readSessionMessages:async(J)=>{let j=Z.get(J)?.messagesPath??await dR(J);return await Q$(j)}},W)}import{captureSdkError as oK}from"@cline/shared";import{createSessionId as pN,isHubProtocolCompatible as rN,resolveClineBuildEnv as iN,resolveHubCommandTimeoutMs as nN}from"@cline/shared";import{spawn as ON}from"node:child_process";import{closeSync as zN,mkdirSync as qN,openSync as MN}from"node:fs";import{basename as RN,dirname as NN,join as EN}from"node:path";import{fileURLToPath as wN}from"node:url";import{CLINE_RUN_AS_HUB_DAEMON_ENV as CN,isHubDaemonProcess as UH,isHubProtocolCompatible as PN,resolveClineBuildEnv as DH,withResolvedClineBuildEnv as SN}from"@cline/shared";import{createHash as pR,randomBytes as rR}from"node:crypto";import{existsSync as iR}from"node:fs";import{chmod as nR,mkdir as F7,readFile as jH,rm as A7,writeFile as XH}from"node:fs/promises";import{dirname as YH,join as U7}from"node:path";import{resolveClineDataDir as q6,resolveClineDir as up}from"@cline/shared/storage";var a2="0.0.65";var z6={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:a2,repository:{type:"git",url:"https://github.com/cline/cline",directory:"sdk/packages/core"},type:"module",types:"./dist/index.d.ts",main:"./dist/index.js",private:!1,publishConfig:{access:"public"},exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.js"},"./hub":{types:"./dist/hub/index.d.ts",import:"./dist/hub/index.js"},"./hub/daemon-entry":{types:"./dist/hub/daemon/entry.d.ts",import:"./dist/hub/daemon/entry.js"},"./telemetry":{types:"./dist/services/telemetry/index.d.ts",import:"./dist/services/telemetry/index.js"},"./services/feature-flags/posthog":{types:"./dist/services/feature-flags/posthog.d.ts",import:"./dist/services/feature-flags/posthog.js"}},scripts:{build:"bun run ./bun.mts && bun tsc -p tsconfig.build.json",typecheck:"bun tsc -p tsconfig.dev.json --noEmit && bun run typecheck:smoke","typecheck:smoke":"bun tsc -p tsconfig.smoke.json --noEmit",test:"bun run test:unit && bun run test:e2e","test:live":"vitest run --config vitest.config.ts src/extensions/context/compaction.live.test.ts","test:unit":"vitest run --config vitest.config.ts","test:e2e":"vitest run --config vitest.e2e.config.ts","verify:routines":"zsh -lc 'bunx vitest run src/cron/schedule-service.test.ts --config vitest.config.ts'","test:watch":"vitest --config vitest.config.ts"},dependencies:{"@cline/agents":"workspace:*","@cline/shared":"workspace:*","@cline/llms":"workspace:*","@modelcontextprotocol/sdk":"^1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.214.0","@opentelemetry/exporter-logs-otlp-http":"^0.214.0","@opentelemetry/exporter-metrics-otlp-http":"^0.214.0","@opentelemetry/exporter-trace-otlp-http":"^0.214.0","@opentelemetry/resources":"^2.6.1","@opentelemetry/sdk-logs":"^0.214.0","@opentelemetry/sdk-metrics":"^2.6.1","@opentelemetry/sdk-trace-base":"^2.6.1","@opentelemetry/sdk-trace-node":"^2.6.1","@opentelemetry/semantic-conventions":"^1.40.0",jiti:"^2.7.0","node-machine-id":"^1.1.12",nanoid:"^5.1.7","simple-git":"3.36.0",ws:"^8.20.0",yaml:"^2.8.2",zod:"^4.3.6"},peerDependencies:{"posthog-node":"^5.8.0"},peerDependenciesMeta:{"posthog-node":{optional:!0}},devDependencies:{"@types/ws":"^8.18.1","posthog-node":"^5.8.0"},engines:{node:">=22"},files:["dist","!dist/**/*.d.ts.map"]};var aR="CLINE_HUB_DISCOVERY_PATH",oR="CLINE_HUB_BUILD_ID",QH=30000,sR=15000,tR=100;function eR($){return $.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function $N($){return pR("sha256").update($).digest("hex").slice(0,12)}function WN($){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 VH(){return rR(32).toString("hex")}function ZN($){return new Promise((W)=>setTimeout(W,$))}function QN($){return`${$}.lock`}async function JN($){try{let W=JSON.parse(await jH(U7($,"owner.json"),"utf8"));if(typeof W.pid!=="number"||typeof W.acquiredAt!=="string")return;return{pid:W.pid,acquiredAt:W.acquiredAt}}catch{return}}async function JH($){await A7($,{recursive:!0,force:!0}).catch(()=>{return})}function BH(){return process.env[oR]?.trim()||String(z6.version)}function n$($=process.argv[1]?.trim()||process.cwd()){let W=`hub-${$N($)}`,Z=process.env[aR]?.trim()||U7(q6(),"locks","hub","owners",`${eR(W)}.json`);return{ownerId:W,discoveryPath:Z}}function lp($=`hub-${Date.now().toString(36)}`){return n$($)}async function L0($){try{let W=JSON.parse(await jH($,"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 HH($,W){await F7(YH($),{recursive:!0}),await A7($,{force:!0}).catch(()=>{return}),await XH($,`${JSON.stringify(W,null,2)}
|
|
457
|
+
`,{encoding:"utf8",mode:384}),await nR($,384)}async function Q1($){await A7($,{force:!0}).catch(()=>{return})}async function GH($,W){let Z=QN($);await F7(YH(Z),{recursive:!0});let Q=Date.now()+sR;while(!0)try{await F7(Z,{recursive:!1}),await XH(U7(Z,"owner.json"),`${JSON.stringify({pid:process.pid,acquiredAt:new Date().toISOString()},null,2)}
|
|
458
|
+
`,"utf8");try{return await W()}finally{await JH(Z)}}catch(J){if((J instanceof Error&&"code"in J?String(J.code):"")!=="EEXIST")throw J;let X=await JN(Z),Y=X?Date.now()-Date.parse(X.acquiredAt):QH+1;if(!X||!WN(X.pid)||Y>QH){await JH(Z);continue}if(Date.now()>=Q)throw Error(`Timed out waiting for hub startup lock ${Z}`);await ZN(tR)}}async function a$($,W){try{let Z=await fetch(W?.authToken?jN($):KH($),{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 N1($,W,Z="/hub"){return new URL(`ws://${$}:${W}${Z}`).toString()}function KH($){let W=new URL($);return W.protocol=W.protocol==="wss:"?"https:":"http:",W.pathname="/health",W.search="",W.toString()}function jN($){let W=new URL(KH($));return W.pathname="/status",W.toString()}function pp($){return iR($)}import{CLINE_HUB_DEV_PORT as XN,CLINE_HUB_PORT as YN,resolveClineBuildEnv as VN}from"@cline/shared";var BN="CLINE_HUB_HOST",HN="CLINE_HUB_PORT",GN="CLINE_HUB_PATHNAME",KN="127.0.0.1",FN=YN,AN="/hub";function FH($){return VN($)==="development"?XN:FN}function UN($={}){return($.env??process.env)[BN]?.trim()||KN}function d5($={}){let Z=($.env??process.env)[HN]?.trim();if(!Z)return FH($);let Q=Number.parseInt(Z,10);if(!Number.isInteger(Q)||Q<1||Q>65535)return FH($);return Q}function DN($={}){return($.env??process.env)[GN]?.trim()||AN}function J$($={},W={}){return{host:$.host??UN(W),port:$.port??d5(W),pathname:$.pathname??DN(W)}}import{join as _N}from"node:path";var fN="shared:cline",LN="CLINE_HUB_DISCOVERY_PATH",TN="hub-production";function tp($){let W=e1($.trim());return n$(`workspace:${W||$.trim()}`)}function E1($=fN){return n$($)}function j$(){return{ownerId:TN,discoveryPath:process.env[LN]?.trim()||_N(q6(),"locks","hub","production.json")}}var bN=8000,yN=200,hN=3000,kN=100,IN=[100,250,500,1000,2000],xN="--cline-hub-daemon";function gN($){return[...$.host?["--host",$.host]:[],...typeof $.port==="number"?["--port",String($.port)]:[],...$.pathname?["--pathname",$.pathname]:[]]}function mN(){try{let $=EN(q6(),"logs","hub-daemon.log");return qN(NN($),{recursive:!0}),{fd:MN($,"a"),logPath:$}}catch{return}}function _H(){return DH()==="production"?j$():E1()}function o$($){return PN($).compatible}function AH($,W,Z){if(!W||W.url!==Z)return $;return{...$,authToken:$.authToken??W.authToken,pid:$.pid??W.pid}}async function s$($,W){try{return await a$($,{authToken:W})}catch{return}}async function vN($,W){let Z=Date.now()+W;while(Date.now()<Z){if(!(await s$($))?.url)return!0;await new Promise((J)=>setTimeout(J,kN))}return!1}async function l5($,W){if(await D7($.url,$.authToken).catch(()=>!1),$.pid)try{process.kill($.pid,"SIGTERM")}catch{}let Z=await vN($.url,hN);return await Q1(W).catch(()=>{return}),Z}async function M6($,W){if(o$($))return!0;return l5($,W)}async function fH($){if(DH()!=="production")return;let W=E1();if(W.discoveryPath===$.discoveryPath)return;let Z=await L0(W.discoveryPath);if(Z?.url)await l5(Z,W.discoveryPath);else await Q1(W.discoveryPath).catch(()=>{return})}function cN(){let $=import.meta.url.endsWith(".ts")?"ts":"js";return wN(new URL(`./entry.${$}`,import.meta.url))}function uN($,W){let Z=cN(),Q=process.execPath?.trim();if(!Q)throw Error("unable to resolve runtime executable for hub daemon");let J=RN(Q).toLowerCase().includes("bun"),j=Z.startsWith("/$bunfs/"),X=J&&Z.toLowerCase().endsWith(".ts"),Y=j?[xN]:[...X?["--conditions=development"]:[],Z];return{launcher:Q,args:[...Y,"--cwd",$,...gN(W)],cwd:$,env:{...SN(process.env),CLINE_NO_INTERACTIVE:"1",[CN]:"1"}}}function dN($){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 lN($,W={}){if(UH())return;let Z=uN($,W),Q=mN();try{ON(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)zN(Q.fd)}}async function p5($,W={}){for(let Z=0;;Z++)try{lN($,W);return}catch(Q){let J=IN[Z];if(!dN(Q)||J===void 0)throw Q;await new Promise((j)=>setTimeout(j,J))}}function LH($,W={}){if(UH())return;let Z=_H(),Q=J$(W),J=N1(Q.host,Q.port,Q.pathname),j=W.allowPortFallback===!0&&Q.port!==0;fH(Z).catch(()=>{return}).then(()=>L0(Z.discoveryPath)).then(async(X)=>{let Y=!1;if(X?.url)if(!X.authToken){if(Y=!0,!await l5(X,Z.discoveryPath)&&!j)return}else{let H=await s$(X.url,X.authToken);if(H?.url&&o$(H)&&await X$(H.url,{authToken:X.authToken}))return;if(H?.url)await M6({...H,authToken:X.authToken},Z.discoveryPath);else await Q1(Z.discoveryPath).catch(()=>{return})}let V=await s$(J);if(V?.url){if(o$(V)){if(!j||!Y)return}else if(!await M6({...V,authToken:void 0},Z.discoveryPath)&&!j)return}let B=j?{...Q,port:0}:Q;await p5($,B)}).catch(()=>{})}async function Br($,W={}){let Z=_H(),Q=W.host!==void 0||W.port!==void 0||W.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),J=J$(W),j=N1(J.host,J.port,J.pathname),X=(F)=>{if(!Q)o2(F.url,F.authToken);return F};await fH(Z).catch(()=>{return});let Y=await L0(Z.discoveryPath),V=!1;if(Y?.url){let F=Y.authToken;if(!F)V=!0,await l5(Y,Z.discoveryPath);else{let A=await s$(Y.url,F);if(A?.url&&o$(A)&&await X$(A.url,{authToken:F}))return X({url:A.url,authToken:F});if(A?.url)await M6({...A,authToken:F},Z.discoveryPath);else await Q1(Z.discoveryPath).catch(()=>{return})}}let B=await s$(j);if(B?.url){let F=AH(B,Y,j);if(o$(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 M6(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 p5($,G);let K=Date.now()+bN;while(Date.now()<K){let F=await L0(Z.discoveryPath);if(F?.url&&F.authToken){let D=await s$(F.url,F.authToken);if(D?.url&&o$(D)&&await X$(D.url,{authToken:F.authToken}))return X({url:D.url,authToken:F.authToken})}let A=await s$(j);if(A?.url&&!o$(A)){let D=AH(A,F,j);if(!await M6(D,Z.discoveryPath)&&W.allowPortFallback!==!0&&J.port!==0)throw Error(`An incompatible Cline Hub is still running at ${j} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}await new Promise((D)=>setTimeout(D,yN))}throw Error("Timed out waiting for detached hub startup.")}function i5(){return iN()==="production"?j$():E1()}function aN(){let $=globalThis.WebSocket;if(!$)throw Error("Global WebSocket is not available in this runtime. Node 22+ is required for hub mode.");return $}function MH($){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 MH($.data);return String($)}function oN($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString("utf8");if($ instanceof ArrayBuffer)return Buffer.from($).toString("utf8");return""}function TH($){let W=$,Z=oN(W.reason);return new n0("hub_connection_closed",W.code||Z?`Hub connection closed (code=${W.code??0}${Z?`, reason=${Z}`:""})`:_7,{closeCode:W.code,closeReason:Z||void 0})}function sN($,W){if($ instanceof n0)return $;if($ instanceof Error)return new n0("hub_connect_failed",$.message);if($&&typeof $==="object"&&"error"in $&&$.error instanceof Error)return new n0("hub_connect_failed",$.error.message);let Z=$&&typeof $==="object"&&"message"in $&&typeof $.message==="string"?$.message.trim():"";if(Z)return new n0("hub_connect_failed",Z);let Q=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return new n0("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 tN=8000,eN=200,OH="*",zH=8000,$E="cline-hub-auth.",RH=new Map,NH=new Set,WE=3000,ZE=3000,QE=100,_7="Hub connection closed",JE=250,jE=5000,qH=0.5;class n0 extends Error{code;details;constructor($,W,Z){super(W);this.code=$;this.details=Z;this.name="HubTransportError"}}function XE($){return $ instanceof n0}class r5 extends Error{command;code;constructor($,W,Z){super(Z);this.command=$;this.code=W;this.name="HubCommandError"}}function EH($,W){return $ instanceof r5&&$.code==="hub_command_timeout"&&(W===void 0||$.command===W)}function wH($){let W=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),W)return W;let Z=T7($.toString());return Z?RH.get(Z):void 0}function YE($){try{let Z=new URL($).hostname.toLowerCase().replace(/^\[|\]$/g,"");return Z==="localhost"||Z==="127.0.0.1"||Z==="::1"}catch{return!1}}function T7($){if(!YE($))return;let W=new URL(s2($));return W.search="",W.hash="",W.toString()}function f7($){let W=T7($);return!!W&&NH.has(W)}function o2($,W){let Z=T7($);if(Z){if(NH.add(Z),W?.trim())RH.set(Z,W)}return $}class w1{options;socket;connectPromise;clientId;currentUrl;recoveryPromise;pendingReplies=new Map;listeners=new Set;subscriptionCounts=new Map;reconnectTimer;reconnectAttempt=0;closedByClient=!1;lastCloseError=new n0("hub_connection_closed",_7);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()||wH($);$.hash="";let Q=new(aN())($.toString(),W?[`${$E}${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 n0("hub_connect_timeout",`Timed out connecting to hub after ${zH}ms`),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0;try{Q.close()}catch{}X(this.lastCloseError)},zH);Q.addEventListener("open",()=>{if(Y)return;Y=!0,clearTimeout(V),j()}),Q.addEventListener("error",(B)=>{if(Y)return;Y=!0,clearTimeout(V),this.lastCloseError=sN(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=TH(B),this.sawSocketClose=!0;this.connectPromise=void 0,this.socket=void 0,X(this.lastCloseError)})}),Q.addEventListener("message",(j)=>{this.handleFrame(JSON.parse(MH(j)))}),Q.addEventListener("close",(j)=>{if(this.socket!==Q)return;if(!J)this.lastCloseError=TH(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=pN("hubreq_"),j=nN($,Q?.timeoutMs),X=new Promise((V,B)=>{let H=j===null?void 0:setTimeout(()=>{if(!this.pendingReplies.delete(J))return;B(new r5($,"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===Y6){let V=Z??(typeof W?.sessionId==="string"?W.sessionId:void 0);throw new u$(V,Y.error.message)}throw new r5($,Y.error?.code,Y.error?.message??`Hub command ${$} failed`)}return Y}async recoverLocalHubTransport($){if(!f7(this.currentUrl)||!XE($))return!1;if(this.recoveryPromise)return await this.recoveryPromise;return this.recoveryPromise=(async()=>{let W=await R6({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(JE*2**this.reconnectAttempt,jE),W=Math.round($*(1-qH)+Math.random()*$*qH);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(!f7(this.currentUrl)){this.reconnectAttempt+=1,this.scheduleReconnect();return}try{let $=await R6({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 n0("hub_connection_closed",_7),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 n0("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 $??OH}subscriptionSessionIdFromKey($){return $===OH?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 s2($){let W=new URL($);if(W.protocol==="http:")W.protocol="ws:";else if(W.protocol==="https:")W.protocol="wss:";return W.toString()}async function X$($,W){let Z=new w1({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 L7($,W){let Z=s2($),Q=await a$(Z,{authToken:W?.authToken});if(!Q)return{status:"unreachable",url:Z};if(!rN(Q).compatible)return{status:"protocol_mismatch",url:Z};if(W?.verifyConnection===!0&&!await X$(Z,{workspaceRoot:W.workspaceRoot,cwd:W.cwd,authToken:W.authToken}))return{status:"unreachable",url:Z};return{status:"compatible",url:Z}}async function VE($){let W=Date.now()+tN;while(Date.now()<W){let Z=await L0($.discoveryPath);if(Z?.url){let Q=await L7(Z.url,{verifyConnection:!0,authToken:Z.authToken});if(Q.status==="compatible")return o2(Q.url,Z.authToken)}await new Promise((Q)=>setTimeout(Q,eN))}return}async function BE($){let W=Date.now()+ZE;while(Date.now()<W){if(!(await a$($).catch(()=>{return}))?.url)return!0;await new Promise((Q)=>setTimeout(Q,QE))}return!1}function HE($,W){try{return s2($)===s2(W)}catch{return!1}}function GE($){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 KE($,W,Z){let Q=new w1({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:WE});return!GE(J.payload)}catch{return!1}finally{await Q.dispose().catch(()=>{return})}}async function O7($={}){if($.endpoint?.trim()){let J=await L7($.endpoint);return J.status==="compatible"?J.url:void 0}let W=i5(),Z=await L0(W.discoveryPath);if(!Z?.url)return;let Q=await L7(Z.url,{authToken:Z.authToken});if(Q.status==="compatible")return o2(Q.url,Z.authToken);if(Q.status==="protocol_mismatch")await Q1(W.discoveryPath).catch(()=>{return});return}async function R6($={}){let W=await O7($);if(W&&await X$(W,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return W;if($.endpoint?.trim())return;let Z=i5();return await p5($.workspaceRoot??process.cwd()),await VE(Z)}async function D7($,W){let Z=new URL($),Q=W?.trim()||wH(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 FE($=i5()){let W=await L0($.discoveryPath);if(!W?.url)return!1;try{if(await D7(W.url,W.authToken))return!0}catch{}return!1}async function CH($){if(!f7($.url))return;let W=i5(),Z=await L0(W.discoveryPath);if(!Z?.url||!HE(Z.url,$.url))return;if(!await KE(Z.url,Z.authToken,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return;if(!await FE())return;if(!await BE(Z.url))return;return await Q1(W.discoveryPath).catch(()=>{return}),await R6({workspaceRoot:$.workspaceRoot,cwd:$.cwd})}import{resolveProviderRequestHeaders as OE}from"@cline/llms";import{captureSdkError as M7,createSessionId as kH,HUB_CHECKPOINT_CAPABILITY as zE,HUB_COMPACTION_CAPABILITY as qE,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as ME,HUB_HOOK_CAPABILITY_PREFIX as RE,HUB_MISTAKE_LIMIT_CAPABILITY as NE,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as EE,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as wE,isHubToolExecutorName as CE}from"@cline/shared";import{createHash as AE}from"node:crypto";import{formatDisplayUserInput as PH}from"@cline/shared";import{z as H1}from"zod";function UE($){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 DE=H1.custom(UE),n5=H1.object({version:H1.literal(1),updated_at:H1.string().datetime(),conversation_id:H1.string().min(1).optional(),source_message_count:H1.number().int().nonnegative(),source_prefix_hash:H1.string().min(1).optional(),source_last_message_key:H1.string().min(1).optional(),messages:H1.array(DE),system_prompt:H1.string().optional()});function z7($){return JSON.parse(JSON.stringify($))}function SH($){if($.role!=="user")return $;if(typeof $.content==="string")return{...$,content:PH($.content)};return{...$,content:$.content.map((W)=>W.type==="text"?{...W,text:PH(W.text)}:W)}}function bH($){if($.includes(":"))throw TypeError("Message role cannot contain ':' in compaction boundary keys")}function _E($){let W=SH($);return bH(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 yH($){if(!$)return"";let W=SH($);if(typeof W.id==="string"&&W.id.trim())return`id:${W.id.trim()}`;if(bH(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 hH($,W=$.length){let Z=AE("sha256");Z.update(`cline-session-compaction-source-v1
|
|
459
459
|
`),Z.update(`${W}
|
|
460
|
-
`);for(let Q of $.slice(0,W))Z.update(JSON.stringify(
|
|
461
|
-
`);return`sha256:${Z.digest("hex")}`}function a5($){let W=$.sourceMessages.at(-1),Z=bH(W);return n5.parse({version:1,updated_at:$.updatedAt??new Date().toISOString(),...$.conversationId?.trim()?{conversation_id:$.conversationId.trim()}:{},source_message_count:$.sourceMessages.length,source_prefix_hash:yH($.sourceMessages),...Z?{source_last_message_key:Z}:{},messages:z7($.compactedMessages),...$.systemPrompt!==void 0?{system_prompt:$.systemPrompt}:{}})}function R6($,W){if(!($.source_message_count<=W.length))return;let Q=!!$.source_prefix_hash&&yH(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&&bH(J)===$.source_last_message_key;if(!(Q||j))return;return[...z7($.messages),...z7(W.slice($.source_message_count))]}function w1($){let W=n5.safeParse($);return W.success?W.data:void 0}function KN($){return $?JSON.parse(JSON.stringify($)):void 0}function FN($){return $?JSON.parse(JSON.stringify($)):void 0}function AN($){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 Y$($){let{session:W}=$,Z=KN(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:FN($.messages)}:{},...$.usage?{usage:{...$.usage}}:{},...$.aggregateUsage?{aggregateUsage:{...$.aggregateUsage}}:{},...(()=>{let Q=AN(Z);return Q?{checkpoint:Q}:{}})()}}function q7($){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 o2($){if(!$)return;return JSON.parse(JSON.stringify($))}var MN=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function kH($){if(!$||typeof $!=="object"||Array.isArray($))return;return JSON.parse(JSON.stringify($))}function IH($){if(!$)return;let{userInstructionService:W,...Z}=$;return JSON.parse(JSON.stringify(Z))}function xH($,W){let Z={...$.config,sessionId:W},Q=UN({providerId:$.config.providerId,sessionId:W,source:$.source,defaultSource:D0.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:i2,openAiCodex:{accessToken:$.config.apiKey,userAgentVersion:process.env.npm_package_version},headers:{config:$.config.headers}});if(Q)Z.headers=Q;return Z}function gH($){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 t$($,W,Z){$.manifest.push(W),$.handlers.set(W.capabilityName,Z)}function mH($,W){let Z={manifest:[],handlers:new Map};for(let J of Object.keys(W.toolExecutors??{}).filter(qN)){let j=W.toolExecutors?.[J];if(typeof j!=="function")continue;t$(Z,{kind:"toolExecutor",executor:J,capabilityName:`${TN}${J}`},async({payload:X,abortSignal:Y})=>{let V=Array.isArray(X.args)?[...X.args]:[],B={...gH(X.context),signal:Y};return{result:await j(...V,B)}})}for(let J of $?.extraTools??[])t$(Z,{kind:"tool",name:J.name,description:J.description,inputSchema:o2(J.inputSchema)??{},...J.lifecycle?{lifecycle:o2(J.lifecycle)}:{},capabilityName:`${fN}${J.name}`},async({payload:j,abortSignal:X,progress:Y})=>{let V={...gH(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 MN){let j=Q[J];if(typeof j!=="function")continue;t$(Z,{kind:"hook",name:J,capabilityName:`${LN}${J}`},async({payload:X})=>({control:await j(X.context)}))}if($?.compaction?.compact){let J=$.compaction.compact;t$(Z,{kind:"compaction",capabilityName:_N,config:kH($.compaction)},async({payload:j})=>({result:await J(j.context)}))}if($?.checkpoint?.createCheckpoint){let J=$.checkpoint.createCheckpoint;t$(Z,{kind:"checkpoint",capabilityName:DN,config:kH($.checkpoint)},async({payload:j})=>({result:await J(j.context)}))}if($?.onConsecutiveMistakeLimitReached){let J=$.onConsecutiveMistakeLimitReached;t$(Z,{kind:"mistakeLimit",capabilityName:ON},async({payload:j})=>({result:await J(j.context)}))}if($?.userInstructionService){let J=$.userInstructionService;t$(Z,{kind:"userInstructionService",capabilityName:zN},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 dH($){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 RN($){return dH($)??"Capability request was cancelled."}function EN($){if(typeof $!=="string")return $;try{return JSON.parse($)}catch{return $}}function NN($){return $==="completed"||$==="max_iterations"||$==="aborted"||$==="mistake_limit"||$==="error"}function wN($){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 vH($){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 R7($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function V$($,W){return R7($?.[W])??0}function CN($){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:V$(W,"inputTokens"),outputTokens:V$(W,"outputTokens"),cacheReadTokens:V$(W,"cacheReadTokens"),cacheWriteTokens:V$(W,"cacheWriteTokens"),cost:R7(W?.totalCost),totalInputTokens:V$(Z,"inputTokens"),totalOutputTokens:V$(Z,"outputTokens"),totalCacheReadTokens:V$(Z,"cacheReadTokens"),totalCacheWriteTokens:V$(Z,"cacheWriteTokens"),totalCost:R7(Z?.totalCost)},teamAgentId:typeof Q?.teamAgentId==="string"?Q.teamAgentId:void 0,teamRole:J}}function PN($){let W=$?.result&&typeof $.result==="object"&&!Array.isArray($.result)?$.result:void 0,Z=$?.reason??W?.finishReason,Q=NN(Z)?Z:Z==="failed"?"error":"completed",J=wN($?.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 e$($,W){return $.error?.message??`hub command failed: ${W}`}function E6($){switch($){case"idle":case"completed":return"completed";case"failed":return"failed";case"aborted":return"cancelled";default:return"running"}}function lH($){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:D0.CORE,pid:typeof W?.pid==="number"?W.pid:void 0,startedAt:new Date($.createdAt).toISOString(),endedAt:E6($.status)==="running"?void 0:new Date($.updatedAt).toISOString(),exitCode:E6($.status)==="completed"?0:E6($.status)==="failed"?1:void 0,status:E6($.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 B$($){if(!$||typeof $!=="object"||Array.isArray($))return;let W=$;return W.version===1&&typeof W.sessionId==="string"?JSON.parse(JSON.stringify(W)):void 0}function SN($){let W=B$($?.snapshot);if(W)return q7(W);let Z=$?.session;return Z?lH(Z):void 0}function cH($,W,Z){let Q=Z?.workspaceRoot?.trim()||W.config.workspaceRoot||W.config.cwd;return h0.parse({version:1,session_id:$,source:W.source??D0.CORE,pid:process.pid,started_at:new Date(Z?.createdAt??Date.now()).toISOString(),status:E6(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 uH($,W){return h0.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 $2{runtimeAddress;pendingPrompts;client;clientOptions;clientContext;events=new L6;sessionCapabilities=new Map;sessionClientContributionHandlers=new Map;sessionSubscriptions=new Map;pendingApprovalToolCallIds=new Set;agentDoneEmittedForCurrentRunBySession=new Set;activeCapabilityAbortControllers=new Map;defaultCapabilities;telemetry;constructor($,W){this.clientContext=W,this.clientOptions={authToken:$.authToken,clientType:$.clientType??"core-hub-runtime",displayName:$.displayName??"core hub runtime",workspaceRoot:W?.workspaceRoot,cwd:W?.cwd},this.defaultCapabilities=C0($.capabilities)??{},this.telemetry=$.telemetry,this.runtimeAddress=$.url,this.pendingPrompts={list:(Z)=>this.requestPendingPromptsList(Z),update:(Z)=>this.requestPendingPromptUpdate(Z),delete:(Z)=>this.requestPendingPromptDelete(Z)},this.client=this.createClient($.url)}createClient($){return new N1({...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(!EH($,"session.create"))return!1;let W=await wH({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=mH($.localRuntime,W),Q=$.config.sessionId?.trim()||hH(),J=()=>this.client.command("session.create",{workspaceRoot:$.config.workspaceRoot?.trim()||$.config.cwd,cwd:$.config.cwd,sessionConfig:o2(xH($,Q)),metadata:{...$.sessionMetadata??{},source:$.source??D0.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:o2($.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=B$(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?uH(X,$):cH(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?mH(Q.localRuntime,J??{}):{manifest:[],handlers:new Map},X,Y;if(Q)X=Q.config.sessionId?.trim()||hH(),Y=xH(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:o2(Y),metadata:{...Q.sessionMetadata??{},source:Q.source??D0.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:o2(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=B$(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?uH(B,Q??{}):cH(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=B$(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=vH(Q?.usage),j=vH(Q?.aggregateUsage);return J||j?{usage:J,aggregateUsage:j}:void 0}async abort($,W){await this.client.command("run.abort",{sessionId:$,reason:dH(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(d$(Z))return;throw Z}return SN(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=B$(J);return j?[q7(j)]:[]}):[];if(Z.length>0)return Z;return(W.payload?.sessions??[]).map(lH)}async listSettings($){let W=await this.client.command("settings.list",IH($));if(!W.ok)throw Error(e$(W,"settings.list"));return W.payload?.snapshot}async toggleSetting($){let W=await this.client.command("settings.toggle",IH($));if(!W.ok)throw Error(e$(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(e$(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)M7(this.telemetry,{component:"core",operation:"hub.runtime_host.update_session_compaction_state",error:Error(e$(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(e$(Z,"session.compaction.get"));return w1(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 M7(this.telemetry,{component:"core",operation:"hub.runtime_host.read_session_messages",error:Error(e$(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(e$(Z,"session.messages"));let Q=Z.payload?.messages;return Array.isArray(Q)?Q:[]}async dispatchHookEvent($){await this.client.command("session.hook",{payload:$})}subscribe($,W){return this.events.subscribe($,W)}ensureSessionSubscription($){let W=$.trim();if(!W||this.sessionSubscriptions.has(W))return;let Z=this.client.subscribe((Q)=>{this.handleHubEvent(Q)},{sessionId:W});this.sessionSubscriptions.set(W,typeof Z==="function"?Z:()=>{})}disposeSessionSubscription($){let W=$.trim();if(!W)return;this.sessionSubscriptions.get(W)?.(),this.sessionSubscriptions.delete(W),this.agentDoneEmittedForCurrentRunBySession.delete(W)}resolveCapabilities($){return C0(this.defaultCapabilities,$.capabilities)??{}}emitToolCallContentStart($){this.events.emit({type:"agent_event",payload:{sessionId:$.sessionId,event:{type:"content_start",contentType:"tool",toolCallId:$.toolCallId,toolName:$.toolName,input:$.toolInput}}})}emitAgentDoneIfNeeded($){if(this.agentDoneEmittedForCurrentRunBySession.has($.sessionId))return;this.agentDoneEmittedForCurrentRunBySession.add($.sessionId),this.events.emit({type:"agent_event",payload:{sessionId:$.sessionId,event:PN($.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=B$($.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=CN($.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=B$($.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=B$($.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&&H0(Z.status))return;this.events.emit({type:"ended",payload:{sessionId:W,reason:Q,ts:$.timestamp??Date.now()}});return}default:return}}captureDetachedHubEventError($,W,Z){try{M7(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(RN($.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=EN($.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(()=>{})}}class o5 extends $2{constructor($){super({url:a2($.endpoint),authToken:$.authToken,clientType:$.clientType??"core-remote-runtime",displayName:$.displayName??"core remote runtime",capabilities:$.capabilities},{workspaceRoot:$.workspaceRoot,cwd:$.cwd})}}import{existsSync as bN,mkdirSync as yN}from"node:fs";import{join as hN}from"node:path";import{asBool as N6,asOptionalString as H1,asString as C1,ensureSessionSchema as kN,loadSqliteDb as IN,nowIso as s5,toBoolInt as w6}from"@cline/shared/db";import{resolveDbDataDir as xN}from"@cline/shared/storage";class H${sessionsDirPath;db;constructor($={}){this.sessionsDirPath=$.sessionsDir??xN()}init(){this.getRawDb()}ensureSessionsDir(){if(!bN(this.sessionsDirPath))yN(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}sessionDbPath(){return hN(this.ensureSessionsDir(),"sessions.db")}getRawDb(){if(this.db)return this.db;let $=IN(this.sessionDbPath());return kN($,{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=s5();this.run(`INSERT OR REPLACE INTO sessions (
|
|
460
|
+
`);for(let Q of $.slice(0,W))Z.update(JSON.stringify(_E(Q))),Z.update(`
|
|
461
|
+
`);return`sha256:${Z.digest("hex")}`}function a5($){let W=$.sourceMessages.at(-1),Z=yH(W);return n5.parse({version:1,updated_at:$.updatedAt??new Date().toISOString(),...$.conversationId?.trim()?{conversation_id:$.conversationId.trim()}:{},source_message_count:$.sourceMessages.length,source_prefix_hash:hH($.sourceMessages),...Z?{source_last_message_key:Z}:{},messages:z7($.compactedMessages),...$.systemPrompt!==void 0?{system_prompt:$.systemPrompt}:{}})}function N6($,W){if(!($.source_message_count<=W.length))return;let Q=!!$.source_prefix_hash&&hH(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&&yH(J)===$.source_last_message_key;if(!(Q||j))return;return[...z7($.messages),...z7(W.slice($.source_message_count))]}function C1($){let W=n5.safeParse($);return W.success?W.data:void 0}function fE($){return $?JSON.parse(JSON.stringify($)):void 0}function LE($){return $?JSON.parse(JSON.stringify($)):void 0}function TE($){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 Y$($){let{session:W}=$,Z=fE(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:LE($.messages)}:{},...$.usage?{usage:{...$.usage}}:{},...$.aggregateUsage?{aggregateUsage:{...$.aggregateUsage}}:{},...(()=>{let Q=TE(Z);return Q?{checkpoint:Q}:{}})()}}function q7($){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 t2($){if(!$)return;return JSON.parse(JSON.stringify($))}var PE=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function IH($){if(!$||typeof $!=="object"||Array.isArray($))return;return JSON.parse(JSON.stringify($))}function xH($){if(!$)return;let{userInstructionService:W,...Z}=$;return JSON.parse(JSON.stringify(Z))}function gH($,W){let Z={...$.config,sessionId:W},Q=OE({providerId:$.config.providerId,sessionId:W,source:$.source,defaultSource:U0.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:a2,openAiCodex:{accessToken:$.config.apiKey,userAgentVersion:process.env.npm_package_version},headers:{config:$.config.headers}});if(Q)Z.headers=Q;return Z}function mH($){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 t$($,W,Z){$.manifest.push(W),$.handlers.set(W.capabilityName,Z)}function vH($,W){let Z={manifest:[],handlers:new Map};for(let J of Object.keys(W.toolExecutors??{}).filter(CE)){let j=W.toolExecutors?.[J];if(typeof j!=="function")continue;t$(Z,{kind:"toolExecutor",executor:J,capabilityName:`${EE}${J}`},async({payload:X,abortSignal:Y})=>{let V=Array.isArray(X.args)?[...X.args]:[],B={...mH(X.context),signal:Y};return{result:await j(...V,B)}})}for(let J of $?.extraTools??[])t$(Z,{kind:"tool",name:J.name,description:J.description,inputSchema:t2(J.inputSchema)??{},...J.lifecycle?{lifecycle:t2(J.lifecycle)}:{},capabilityName:`${ME}${J.name}`},async({payload:j,abortSignal:X,progress:Y})=>{let V={...mH(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 PE){let j=Q[J];if(typeof j!=="function")continue;t$(Z,{kind:"hook",name:J,capabilityName:`${RE}${J}`},async({payload:X})=>({control:await j(X.context)}))}if($?.compaction?.compact){let J=$.compaction.compact;t$(Z,{kind:"compaction",capabilityName:qE,config:IH($.compaction)},async({payload:j})=>({result:await J(j.context)}))}if($?.checkpoint?.createCheckpoint){let J=$.checkpoint.createCheckpoint;t$(Z,{kind:"checkpoint",capabilityName:zE,config:IH($.checkpoint)},async({payload:j})=>({result:await J(j.context)}))}if($?.onConsecutiveMistakeLimitReached){let J=$.onConsecutiveMistakeLimitReached;t$(Z,{kind:"mistakeLimit",capabilityName:NE},async({payload:j})=>({result:await J(j.context)}))}if($?.userInstructionService){let J=$.userInstructionService;t$(Z,{kind:"userInstructionService",capabilityName:wE},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 lH($){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 SE($){return lH($)??"Capability request was cancelled."}function bE($){if(typeof $!=="string")return $;try{return JSON.parse($)}catch{return $}}function yE($){return $==="completed"||$==="max_iterations"||$==="aborted"||$==="mistake_limit"||$==="error"}function hE($){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 cH($){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 R7($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function V$($,W){return R7($?.[W])??0}function kE($){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:V$(W,"inputTokens"),outputTokens:V$(W,"outputTokens"),cacheReadTokens:V$(W,"cacheReadTokens"),cacheWriteTokens:V$(W,"cacheWriteTokens"),cost:R7(W?.totalCost),totalInputTokens:V$(Z,"inputTokens"),totalOutputTokens:V$(Z,"outputTokens"),totalCacheReadTokens:V$(Z,"cacheReadTokens"),totalCacheWriteTokens:V$(Z,"cacheWriteTokens"),totalCost:R7(Z?.totalCost)},teamAgentId:typeof Q?.teamAgentId==="string"?Q.teamAgentId:void 0,teamRole:J}}function IE($){let W=$?.result&&typeof $.result==="object"&&!Array.isArray($.result)?$.result:void 0,Z=$?.reason??W?.finishReason,Q=yE(Z)?Z:Z==="failed"?"error":"completed",J=hE($?.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 e$($,W){return $.error?.message??`hub command failed: ${W}`}function E6($){switch($){case"idle":case"completed":return"completed";case"failed":return"failed";case"aborted":return"cancelled";default:return"running"}}function pH($){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:U0.CORE,pid:typeof W?.pid==="number"?W.pid:void 0,startedAt:new Date($.createdAt).toISOString(),endedAt:E6($.status)==="running"?void 0:new Date($.updatedAt).toISOString(),exitCode:E6($.status)==="completed"?0:E6($.status)==="failed"?1:void 0,status:E6($.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 B$($){if(!$||typeof $!=="object"||Array.isArray($))return;let W=$;return W.version===1&&typeof W.sessionId==="string"?JSON.parse(JSON.stringify(W)):void 0}function xE($){let W=B$($?.snapshot);if(W)return q7(W);let Z=$?.session;return Z?pH(Z):void 0}function uH($,W,Z){let Q=Z?.workspaceRoot?.trim()||W.config.workspaceRoot||W.config.cwd;return I0.parse({version:1,session_id:$,source:W.source??U0.CORE,pid:process.pid,started_at:new Date(Z?.createdAt??Date.now()).toISOString(),status:E6(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 dH($,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 $2{runtimeAddress;pendingPrompts;client;clientOptions;clientContext;events=new T6;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=S0($.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 w1({...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(!EH($,"session.create"))return!1;let W=await CH({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=vH($.localRuntime,W),Q=$.config.sessionId?.trim()||kH(),J=()=>this.client.command("session.create",{workspaceRoot:$.config.workspaceRoot?.trim()||$.config.cwd,cwd:$.config.cwd,sessionConfig:t2(gH($,Q)),metadata:{...$.sessionMetadata??{},source:$.source??U0.CORE,provider:$.config.providerId,model:$.config.modelId,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,teamName:$.config.teamName,prompt:$.prompt,interactive:$.interactive===!0},runtimeOptions:{...Z.manifest.length>0?{clientContributions:Z.manifest}:{},...$.localRuntime?.configExtensions?{configExtensions:$.localRuntime.configExtensions}:{}},toolPolicies:t2($.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=B$(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?dH(X,$):uH(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?vH(Q.localRuntime,J??{}):{manifest:[],handlers:new Map},X,Y;if(Q)X=Q.config.sessionId?.trim()||kH(),Y=gH(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:t2(Y),metadata:{...Q.sessionMetadata??{},source:Q.source??U0.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:t2(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=B$(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?dH(B,Q??{}):uH(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=B$(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=cH(Q?.usage),j=cH(Q?.aggregateUsage);return J||j?{usage:J,aggregateUsage:j}:void 0}async abort($,W){await this.client.command("run.abort",{sessionId:$,reason:lH(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(d$(Z))return;throw Z}return xE(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=B$(J);return j?[q7(j)]:[]}):[];if(Z.length>0)return Z;return(W.payload?.sessions??[]).map(pH)}async listSettings($){let W=await this.client.command("settings.list",xH($));if(!W.ok)throw Error(e$(W,"settings.list"));return W.payload?.snapshot}async toggleSetting($){let W=await this.client.command("settings.toggle",xH($));if(!W.ok)throw Error(e$(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(e$(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)M7(this.telemetry,{component:"core",operation:"hub.runtime_host.update_session_compaction_state",error:Error(e$(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(e$(Z,"session.compaction.get"));return C1(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 M7(this.telemetry,{component:"core",operation:"hub.runtime_host.read_session_messages",error:Error(e$(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(e$(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 S0(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:IE($.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=B$($.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=kE($.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=B$($.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=B$($.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&&B0(Z.status))return;this.events.emit({type:"ended",payload:{sessionId:W,reason:Q,ts:$.timestamp??Date.now()}});return}default:return}}captureDetachedHubEventError($,W,Z){try{M7(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(SE($.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=bE($.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(()=>{})}}class o5 extends $2{constructor($){super({url:s2($.endpoint),authToken:$.authToken,clientType:$.clientType??"core-remote-runtime",displayName:$.displayName??"core remote runtime",capabilities:$.capabilities},{workspaceRoot:$.workspaceRoot,cwd:$.cwd})}}import{existsSync as gE,mkdirSync as mE}from"node:fs";import{join as vE}from"node:path";import{asBool as w6,asOptionalString as G1,asString as P1,ensureSessionSchema as cE,loadSqliteDb as uE,nowIso as s5,toBoolInt as C6}from"@cline/shared/db";import{resolveDbDataDir as dE}from"@cline/shared/storage";class H${sessionsDirPath;db;constructor($={}){this.sessionsDirPath=$.sessionsDir??dE()}init(){this.getRawDb()}ensureSessionsDir(){if(!gE(this.sessionsDirPath))mE(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}sessionDbPath(){return vE(this.ensureSessionsDir(),"sessions.db")}getRawDb(){if(this.db)return this.db;let $=uE(this.sessionDbPath());return cE($,{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=s5();this.run(`INSERT OR REPLACE INTO sessions (
|
|
462
462
|
session_id, source, pid, started_at, ended_at, exit_code, status, status_lock, interactive,
|
|
463
463
|
provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
|
|
464
464
|
parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
|
|
465
465
|
metadata_json, transcript_path, hook_path, messages_path, updated_at
|
|
466
|
-
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.sessionId,$.source,$.pid,$.startedAt,$.endedAt??null,$.exitCode??null,$.status,0,
|
|
466
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.sessionId,$.source,$.pid,$.startedAt,$.endedAt??null,$.exitCode??null,$.status,0,C6($.interactive),$.provider,$.model,$.cwd,$.workspaceRoot,$.teamName??null,C6($.enableTools),C6($.enableSpawn),C6($.enableTeams),$.parentSessionId??null,$.parentAgentId??null,$.agentId??null,$.conversationId??null,C6($.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(s5()),Z.push($.sessionId),this.run(`UPDATE sessions SET ${W.join(", ")} WHERE session_id = ?`,Z)}updateStatus($,W,Z){this.update({sessionId:$,status:W,endedAt:B0(W)?null:s5(),exitCode:B0(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,
|
|
467
467
|
provider, model, cwd, workspace_root, team_name,
|
|
468
468
|
enable_tools, enable_spawn, enable_teams,
|
|
469
469
|
parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent,
|
|
470
470
|
prompt, metadata_json, hook_path, messages_path, updated_at
|
|
471
|
-
FROM sessions WHERE session_id = ?`,[$]);if(!W)return;return{sessionId:
|
|
472
|
-
`).filter(Boolean);await Promise.allSettled(J.map((j)=>W2($,["update-ref","-d",j])))}catch{}}async function
|
|
473
|
-
`,"utf8")}readSessionManifest($){return this.readManifestFile($).manifest}async readSessionManifestTitle($){let W=this.artifacts.sessionManifestPath($,!1),Z;try{Z=await
|
|
474
|
-
`;if(
|
|
475
|
-
`),this.updateCompactionPath($,Z)}async deleteSessionCompactionState($){await
|
|
476
|
-
`,"utf8")}}import{appendFileSync as
|
|
477
|
-
`,"utf8")}}import{formatUserInputBlock as
|
|
478
|
-
|
|
479
|
-
${$.message}`}class I7{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:
|
|
471
|
+
FROM sessions WHERE session_id = ?`,[$]);if(!W)return;return{sessionId:P1(W.session_id),source:P1(W.source),pid:Number(W.pid??0),startedAt:P1(W.started_at),endedAt:W.ended_at??null,exitCode:W.exit_code??null,status:P1(W.status),interactive:w6(W.interactive),provider:P1(W.provider),model:P1(W.model),cwd:P1(W.cwd),workspaceRoot:P1(W.workspace_root),teamName:G1(W.team_name),enableTools:w6(W.enable_tools),enableSpawn:w6(W.enable_spawn),enableTeams:w6(W.enable_teams),parentSessionId:G1(W.parent_session_id),parentAgentId:G1(W.parent_agent_id),agentId:G1(W.agent_id),conversationId:G1(W.conversation_id),isSubagent:w6(W.is_subagent),prompt:G1(W.prompt),metadata:(()=>{let Z=G1(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:G1(W.hook_path),messagesPath:G1(W.messages_path),updatedAt:G1(W.updated_at)??s5()}}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(P1(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}}e2();import{existsSync as l7,mkdirSync as $C,readFileSync as KG,renameSync as WC,writeFileSync as ZC}from"node:fs";import{join as FG}from"node:path";import{resolveSessionDataDir as QC}from"@cline/shared/storage";import{dirname as tw}from"node:path";import{nanoid as ew}from"nanoid";import{execFile as Zw}from"node:child_process";import{promisify as Qw}from"node:util";var Jw=Qw(Zw);function N7($,W){$?.log(W,{severity:"warn"})}function jw($){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 W2($,W){let Z=await Jw("git",["-C",$,...W],{windowsHide:!0});return{stdout:Z.stdout.trim(),stderr:Z.stderr.trim()}}async function E7($,W){if(!$)return;let Z=`refs/cline/checkpoints/${W}/`;try{let{stdout:Q}=await W2($,["for-each-ref","--format=%(refname)",Z]),J=Q.trim().split(`
|
|
472
|
+
`).filter(Boolean);await Promise.allSettled(J.map((j)=>W2($,["update-ref","-d",j])))}catch{}}async function rH($,W,Z){if(!$||Z.length===0)return;await Promise.allSettled(Z.map((Q)=>W2($,["update-ref",`refs/cline/checkpoints/${W}/${Q.runCount}`,Q.ref])))}function Xw($,W){let Z=$.findIndex((Q)=>Q.runCount===W.runCount);if(Z<0)return[...$,W];return $.map((Q,J)=>J===Z?W:Q)}function iH($){let W=$.initialRunCount??0,Z,Q=async()=>{if(Z!==void 0)return Z;try{Z=(await W2($.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 W2($.cwd,["rev-parse","HEAD"])).stdout.trim();if(!G)return;return{ref:G,createdAt:Date.now(),runCount:W,kind:"commit"}}catch(H){N7($.logger,`${B}: ${H instanceof Error?H.message:String(H)}`);return}},X=`cline checkpoint session=${$.sessionId} run=${W}`,Y="";try{Y=(await W2($.cwd,["stash","create",X])).stdout.trim()}catch(B){return N7($.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 W2($.cwd,["update-ref",V,Y])}catch(B){N7($.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=jw(Y);if(V?.latest.ref===X.ref)return;let B=Xw(V?.history??[],X);await $.writeSessionMetadata({...Y??{},checkpoint:{latest:X,history:B}});return}}}import{existsSync as t5,mkdirSync as Yw,readdirSync as Vw,rmdirSync as Bw,rmSync as Hw,unlinkSync as Gw}from"node:fs";import{dirname as nH,join as P6}from"node:path";function Z0(){return new Date().toISOString()}function S6($){if(!$||!t5($))return;try{Gw($)}catch{}}function Kw($){let W=_6($);if(W)return{rootSessionId:W.rootSessionId,fileStem:`${W.agentId}__${W.teamTaskId}`};let Z=m5($);if(Z)return{rootSessionId:Z.rootSessionId,fileStem:Z.agentId};return{rootSessionId:$,fileStem:$}}class w7{ensureSessionsDir;constructor($){this.ensureSessionsDir=$}sessionArtifactsDir($){return P6(this.ensureSessionsDir(),$)}ensureSessionArtifactsDir($){let W=this.sessionArtifactsDir($);if(!t5(W))Yw(W,{recursive:!0});return W}sessionMessagesPath($){return P6(this.sessionArtifactsDir($),`${$}.messages.json`)}sessionCompactionPath($){return P6(this.sessionArtifactsDir($),`${$}.compaction.json`)}sessionManifestPath($,W=!1){let Z=W?this.ensureSessionArtifactsDir($):this.sessionArtifactsDir($);return P6(Z,`${$}.json`)}removeSessionDirIfEmpty($){let W=this.sessionArtifactsDir($),Z=this.ensureSessionsDir();while(W.startsWith(Z)&&W!==Z){if(!t5(W)){W=nH(W);continue}try{if(Vw(W).length>0)break;Bw(W)}catch{break}W=nH(W)}}removeSessionDir($){this.removeDir(this.sessionArtifactsDir($))}removeDir($){if(!t5($))return;try{Hw($,{recursive:!0,force:!0})}catch{}}subagentArtifactPaths($,W,Z){let{rootSessionId:Q,fileStem:J}=Kw($),j=this.sessionArtifactsDir(Q);return{messagesPath:P6(j,`${J}.messages.json`)}}}import{appendFileSync as fw,existsSync as Lw,mkdirSync as tH,readFileSync as Tw,writeFileSync as eH}from"node:fs";import{readFile as $G,rm as Ow}from"node:fs/promises";import{dirname as WG,join as zw}from"node:path";import{ensureHookLogDir as qw}from"@cline/shared/storage";import{randomUUID as Fw}from"node:crypto";import{mkdir as Aw,open as oH,rename as Uw,rm as Dw}from"node:fs/promises";import{dirname as aH}from"node:path";async function _w($){let W;try{W=await oH($,"r"),await W.sync()}catch{}finally{if(W!==void 0)try{await W.close()}catch{}}}async function sH($,W){await Aw(aH($),{recursive:!0});let Z=`${$}.${process.pid}.${Fw()}.tmp`,Q;try{Q=await oH(Z,"wx"),await Q.writeFile(W,"utf8"),await Q.sync(),await Q.close(),Q=void 0,await Uw(Z,$),await _w(aH($))}catch(J){if(Q!==void 0)try{await Q.close()}catch{}try{await Dw(Z,{force:!0})}catch{}throw J}}function Mw($){return typeof $==="object"&&$!==null&&"code"in $&&$.code==="ENOENT"}class C7{adapter;messagesArtifactUploader;logger;artifacts;constructor($,W,Z){this.adapter=$;this.messagesArtifactUploader=W;this.logger=Z;this.artifacts=new w7(()=>this.ensureSessionsDir())}ensureSessionsDir(){return this.adapter.ensureSessionsDir()}initializeMessagesFile($,W,Z){nB(W,Z,X7($))}writeSessionManifest($,W){tH(WG($),{recursive:!0}),eH($,`${JSON.stringify(I0.parse(W),null,2)}
|
|
473
|
+
`,"utf8")}readSessionManifest($){return this.readManifestFile($).manifest}async readSessionManifestTitle($){let W=this.artifacts.sessionManifestPath($,!1),Z;try{Z=await $G(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(!Lw(W))return{path:W};try{return{path:W,manifest:I0.parse(JSON.parse(Tw(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=Y7({updatedAt:Z0(),context:X7($),messages:W,systemPrompt:Z}),j=`${JSON.stringify(J,null,2)}
|
|
474
|
+
`;if(tH(WG(Q),{recursive:!0}),eH(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 C1(JSON.parse(await $G(W,"utf8")))}catch(Z){if(Mw(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=n5.parse(W);await sH(Z,`${JSON.stringify(Q,null,2)}
|
|
475
|
+
`),this.updateCompactionPath($,Z)}async deleteSessionCompactionState($){await Ow(this.resolveCompactionPath($),{force:!0}),this.updateCompactionPath($,void 0)}appendStaleSessionHookLog($,W,Z,Q,J){let X=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??zw(qw(),"hooks.jsonl");fw(X,`${JSON.stringify({ts:$,hookName:"session_shutdown",reason:Q,sessionId:W,pid:Z,source:J})}
|
|
476
|
+
`,"utf8")}}import{appendFileSync as Rw}from"node:fs";import{join as Nw}from"node:path";import{resolveRootSessionId as ZG}from"@cline/shared";import{ensureHookLogDir as Ew}from"@cline/shared/storage";import{z as P7}from"zod";var ww="subagent",Cw=P7.looseObject({task:P7.string().optional(),systemPrompt:P7.string().optional()});class e5{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:ww,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:L6({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=ZG($.sessionContext);if(!W)return;let Z=Cw.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=g5(W,$.agentId),J=await this.adapter.getSession(Q),j=Z0(),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:L6({metadata:J.metadata??void 0,prompt:J.prompt??Y??null}),expectedStatusLock:J.statusLock}),Q}async upsertSubagentSessionFromHook($){if(!$.parent_agent_id)return;let W=ZG($.sessionContext);if(!W)return;if($.hookName==="session_shutdown"){let Z=g5(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($,Z7(W))}async applySubagentStatusBySessionId($,W){let Z=await this.adapter.getSession($);if(!Z)return;let Q=B0(W)?null:Z0(),J=B0(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=W7($,W),j=Z0(),{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)??Nw(Ew(),"hooks.jsonl");Rw(Z,`${JSON.stringify({ts:Z0(),...$})}
|
|
477
|
+
`,"utf8")}}import{formatUserInputBlock as sw}from"@cline/shared";import{existsSync as Pw,readdirSync as Sw,readFileSync as bw}from"node:fs";import{basename as QG,extname as yw,join as hw}from"node:path";import{stripUtf8Bom as kw}from"@cline/shared";import{resolveAgentConfigSearchPaths as Iw}from"@cline/shared/storage";import jG from"yaml";import{z as b0}from"zod";var XG=b0.object({name:b0.string().trim().min(1),description:b0.string().trim().min(1),tools:b0.union([b0.string(),b0.array(b0.string())]).optional(),skills:b0.union([b0.string(),b0.array(b0.string())]).optional(),providerId:b0.string().trim().min(1).optional(),modelId:b0.string().trim().min(1).optional(),maxIterations:b0.number().int().positive().optional()});function xw($){$=kw($);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=jG.parse(V);if(!B||typeof B!=="object"||Array.isArray(B))continue;XG.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 JG($){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 gw($){return $.trim().toLowerCase()}function mw($){let W=yw($).toLowerCase();return W===".yml"||W===".yaml"}function S7($,W={}){let{frontmatter:Z,body:Q}=xw($),J=jG.parse(Z);if(!J||typeof J!=="object"||Array.isArray(J))throw Error("Agent config frontmatter must be a YAML mapping.");let j=XG.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:JG(j.tools),skills:JG(j.skills),providerId:j.providerId,modelId:j.modelId,maxIterations:j.maxIterations,systemPrompt:X,path:W.path}}function $W($){let W=$.searchPaths??Iw($.workspaceRoot),Z=new Map,Q=[];for(let j of W.filter(Boolean)){if(!Pw(j))continue;let X;try{X=Sw(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()||!mw(Y.name))continue;let V=hw(j,Y.name);try{let B=bw(V,"utf8"),H=S7(B,{path:V}),G=gw(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?QG(j.path):j.name).localeCompare(X.path?QG(X.path):X.name)),errors:Q}}import{createTool as vw,zodToJsonSchema as cw}from"@cline/shared";import{z as YG}from"zod";var b7="subagent_",WW=64,uw=YG.object({prompt:YG.string().trim().min(1).describe("Task for the subagent to perform")});function dw($){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 lw($){let W=2166136261;for(let Z=0;Z<$.length;Z++)W^=$.charCodeAt(Z),W=Math.imul(W,16777619);return(W>>>0).toString(36)}function y7($){let W=dw($)||"agent",Z=lw($).slice(0,6),Q=`${b7}${W}`;if(Q.length<=WW)return Q;let J=WW-b7.length-Z.length-1,j=W.slice(0,Math.max(1,J));return`${b7}${j}_${Z}`.slice(0,WW)}function h7($){let W=new Set,Z=[];for(let Q of[...$].sort((J,j)=>J.name.localeCompare(j.name))){let J=y7(Q.name),j=J,X=2;while(W.has(j)){let Y=`_${X++}`,V=Math.max(1,WW-Y.length);j=`${J.slice(0,V)}${Y}`}W.add(j),Z.push({toolName:j,config:Q})}return Z}function pw($,W){return{...$,providerId:W.providerId??$.providerId,modelId:W.modelId??$.modelId,maxIterations:W.maxIterations??$.maxIterations}}function ZW($){return h7($.agents).map(({toolName:W,config:Z})=>{return vw({name:W,description:`Use the "${Z.name}" subagent: ${Z.description}`,inputSchema:cw(uw),execute:async(J,j)=>{let X=$.configProvider.getRuntimeConfig(),Y=m2(pw(X,Z)),V=$.createSubAgentTools?await $.createSubAgentTools(Z,J,j):[],B=v2({kind:"subagent",prompt:Z.systemPrompt,configProvider:Y,tools:V,maxIterations:Z.maxIterations,parentAgentId:j.agentId,abortSignal:j.signal,onEvent:$.onSubAgentEvent,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval}),H=B.getAgentId(),G=B.getConversationId(),K=j.agentId,F={systemPrompt:Z.systemPrompt,task:J.prompt};if($.onSubAgentStart)try{await $.onSubAgentStart({subAgentId:H,conversationId:G,parentAgentId:K,input:F})}catch{}try{let A=await B.run(J.prompt),D={text:A.text,iterations:A.iterations,finishReason:A.finishReason,usage:{inputTokens:A.usage.inputTokens,outputTokens:A.usage.outputTokens}};if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:H,conversationId:G,parentAgentId:K,input:F,result:D,agentResult:A})}catch{}return D}catch(A){if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:H,conversationId:G,parentAgentId:K,input:F,error:A instanceof Error?A:Error(String(A))})}catch{}throw A}},timeoutMs:300000,retryable:!1})})}function K1(){return new Date().toISOString()}function VG($,W){if(W<=0)return 0;return Math.round($/W*100)}function rw($,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 QW($,W){let Z={idle:0,running:0,stopped:0},Q={pending:0,in_progress:0,blocked:0,completed:0},J={queued:0,running:0,completed:0,failed:0,cancelled:0,interrupted:0},j={draft:0,in_review:0,finalized:0},X={draft:0,reviewed:0,rejected:0},Y=0,V=0;for(let U of W.members)if(Z[U.status]+=1,U.role==="lead")Y+=1;else V+=1;let B=[],H=[],G=W.tasks.filter((U)=>U.status==="completed").length,K=new Map(W.tasks.map((U)=>[U.id,U]));for(let U of W.tasks){if(Q[U.status]+=1,U.status==="blocked"){B.push(U.id);continue}if(U.status!=="pending")continue;if(U.dependsOn.every((_)=>{return K.get(_)?.status==="completed"}))H.push(U.id)}let F=[],A,D=0;for(let U of W.runs){if(J[U.status]+=1,U.status==="queued"||U.status==="running")F.push(U.id);let f=U.startedAt.getTime();if(f>=D)D=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:K1(),members:{total:W.members.length,byStatus:Z,leadCount:Y,teammateCount:V},tasks:{total:W.tasks.length,byStatus:Q,blockedTaskIds:B,readyTaskIds:H,completionPct:VG(G,W.tasks.length)},runs:{total:W.runs.length,byStatus:J,activeRunIds:F,latestRunId:A},outcomes:{total:W.outcomes.length,byStatus:j,finalizedPct:VG(j.finalized,W.outcomes.length),missingRequiredSections:rw(W.outcomes,W.outcomeFragments)},fragments:{total:W.outcomeFragments.length,byStatus:X}}}function JW($){let{event:W}=$;switch(W.type){case"team_task_updated":return{teamName:$.teamName,sessionId:$.sessionId,eventType:W.type,ts:K1(),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:K1(),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:K1(),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:K1(),outcomeId:W.outcome.id};case"outcome_fragment_attached":case"outcome_fragment_reviewed":return{teamName:$.teamName,sessionId:$.sessionId,eventType:W.type,ts:K1(),outcomeId:W.fragment.outcomeId,fragmentId:W.fragment.id,agentId:W.fragment.sourceAgentId};case"team_message":return{teamName:$.teamName,sessionId:$.sessionId,eventType:W.type,ts:K1(),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:K1(),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:K1(),agentId:W.agentId}}return{teamName:$.teamName,sessionId:$.sessionId,eventType:W.type,ts:K1()}}import{sanitizeFileName as iw,TeamMessageType as k}from"@cline/shared";import{nanoid as nw}from"nanoid";import{TeamMessageType as ui}from"@cline/shared";function k7($){if(typeof DOMException<"u"&&$ instanceof DOMException&&$.name==="AbortError")return!0;if(!($ instanceof Error))return!1;return $.name==="AbortError"||$.message.toLowerCase().includes("aborted")}function BG($,W){return $?.status==="stopped"&&k7(W)}var aw=600000,HG="recovered_queued";function ow($){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.
|
|
478
|
+
|
|
479
|
+
${$.message}`}class I7{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:k.AgentEvent,agentId:$,event:J})}},Q=new t1(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:k.TaskStart,agentId:$,message:W});try{let Q=await Z.run(W);return this.emitEvent({type:k.TaskEnd,agentId:$,result:Q}),Q}catch(Q){let J=Q instanceof Error?Q:Error(String(Q));throw this.emitEvent({type:k.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:k.TaskStart,agentId:$,message:W});try{let Q=await Z.continue(W);return this.emitEvent({type:k.TaskEnd,agentId:$,result:Q}),Q}catch(Q){let J=Q instanceof Error?Q:Error(String(Q));throw this.emitEvent({type:k.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:k.TaskStart,agentId:Z.agentId,message:Z.message});try{let J=await Q.run(Z.message);return this.emitEvent({type:k.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:k.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:k.TaskStart,agentId:Z.agentId,message:Z.message});try{let J=await Q.run(Z.message);this.emitEvent({type:k.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:k.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:k.TaskStart,agentId:j,message:J});try{let Y=await X.run(J);this.emitEvent({type:k.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:
|
|
480
480
|
${Y.text}
|
|
481
481
|
|
|
482
|
-
Please continue from here.`}}catch(Y){let V=Y instanceof Error?Y:Error(String(Y));this.emitEvent({type:
|
|
482
|
+
Please continue from here.`}}catch(Y){let V=Y instanceof Error?Y:Error(String(Y));this.emitEvent({type:k.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{}}}class b6{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_${iw(nw(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,$8($.tasks.map((Z)=>Z.id),"task_")),this.messageCounter=Math.max(this.messageCounter,$8($.mailbox.map((Z)=>Z.id),"msg_")),this.missionCounter=Math.max(this.missionCounter,$8($.missionLog.map((Z)=>Z.id),"log_")),this.runCounter=Math.max(this.runCounter,$8(($.runs??[]).map((Z)=>Z.id),"run_")),this.outcomeCounter=Math.max(this.outcomeCounter,$8(($.outcomes??[]).map((Z)=>Z.id),"out_")),this.outcomeFragmentCounter=Math.max(this.outcomeFragmentCounter,$8(($.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:aw,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:k.AgentEvent,agentId:$,event:X}),this.trackMeaningfulEvent($,X)}},J=new t1(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:k.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(!k7(Q))throw Q}Z.status="stopped",this.emitEvent({type:k.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:k.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:k.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:k.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:k.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:k.TaskStart,agentId:$,message:W});try{let J=this.listMailbox($,{unreadOnly:!0,markRead:!0}),j=J.length>0?`${this.buildMailboxNotification(J)}
|
|
483
483
|
|
|
484
|
-
${W}`:W,X=Z?.continueConversation?await Q.agent.continue(j):await Q.agent.run(j);return this.emitEvent({type:I.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:I.TaskEnd,agentId:$,error:j,messages:Q.agent.getMessages()}),!VG(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:I.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===BG;$.nextAttemptAt=void 0,$.status="running",$.startedAt=new Date,$.heartbeatAt=new Date,$.currentActivity="run_started",this.emitEvent({type:I.RunStarted,run:{...$}});let Z=setInterval(()=>{if($.status!=="running")return;this.recordRunProgress($,"heartbeat")},2000);try{let Q=W?lw($):$.message,J=await this.routeToTeammate($.agentId,Q,{taskId:$.taskId,continueConversation:$.continueConversation});$.status="completed",$.result=J,$.endedAt=new Date,$.currentActivity="completed",this.emitEvent({type:I.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(VG(j,Q))$.status="cancelled",$.currentActivity="cancelled",this.emitEvent({type:I.RunCancelled,run:{...$},reason:J});else if($.retryCount<$.maxRetries)$.retryCount++,$.status="queued",$.nextAttemptAt=new Date(Date.now()+Math.min(30000,1000*2**$.retryCount)),this.runQueue.push($.id),this.recordRunProgress($,`retry_scheduled_${$.retryCount}`);else $.status="failed",$.currentActivity="failed",this.emitEvent({type:I.RunFailed,run:{...$}})}finally{clearInterval(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 HG(W);return{...Z}}async awaitAllRuns($=250){while(Array.from(this.runs.values()).some((W)=>["queued","running"].includes(W.status)))await HG($);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:I.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:I.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=BG,!this.runQueue.includes(Z.id))this.runQueue.push(Z.id);W.push({...Z}),this.emitEvent({type:I.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:I.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:I.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:I.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:I.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:I.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:I.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:I.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(!k7(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:I.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(`
|
|
485
|
-
`)}emitEvent($){try{this.onTeamEvent?.($)}catch{}}}function
|
|
484
|
+
${W}`:W,X=Z?.continueConversation?await Q.agent.continue(j):await Q.agent.run(j);return this.emitEvent({type:k.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:k.TaskEnd,agentId:$,error:j,messages:Q.agent.getMessages()}),!BG(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:k.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===HG;$.nextAttemptAt=void 0,$.status="running",$.startedAt=new Date,$.heartbeatAt=new Date,$.currentActivity="run_started",this.emitEvent({type:k.RunStarted,run:{...$}});let Z=setInterval(()=>{if($.status!=="running")return;this.recordRunProgress($,"heartbeat")},2000);try{let Q=W?ow($):$.message,J=await this.routeToTeammate($.agentId,Q,{taskId:$.taskId,continueConversation:$.continueConversation});if(J.finishReason==="error")throw Error(J.text||"Teammate run failed");$.status="completed",$.result=J,$.endedAt=new Date,$.currentActivity="completed",this.emitEvent({type:k.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(BG(j,Q))$.status="cancelled",$.currentActivity="cancelled",this.emitEvent({type:k.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:k.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 GG(W);return{...Z}}async awaitAllRuns($=250){while(Array.from(this.runs.values()).some((W)=>["queued","running"].includes(W.status)))await GG($);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:k.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:k.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=HG,!this.runQueue.includes(Z.id))this.runQueue.push(Z.id);W.push({...Z}),this.emitEvent({type:k.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:k.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:k.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:k.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:k.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:k.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:k.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:k.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(!k7(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:k.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(`
|
|
485
|
+
`)}emitEvent($){try{this.onTeamEvent?.($)}catch{}}}function GG($){return new Promise((W)=>setTimeout(W,$))}function $8($,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 x7($,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}),jW($);break}default:break}}async function g7($,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 m7($,W,Z,Q){if(!$.runtime.teamRuntime)return;let J=$.runtime.teamRuntime.getTeamName();Q({type:"team_progress",payload:{sessionId:W,teamName:J,lifecycle:JW({teamName:J,sessionId:W,event:Z}),summary:QW(J,$.runtime.teamRuntime.exportState())}})}function y6($){return $.activeTeamRunIds.size>0||$.pendingTeamRunUpdates.length>0}function v7($,W){if($.aborting)return!1;if(!(W==="completed"||W==="max_iterations"))return!1;return $.config.enableAgentTeams===!0&&y6($)}function jW($){let W=$.teamRunWaiters.splice(0);for(let Z of W)Z()}async function c7($){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 u7($,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 h6(`System-delivered teammate async run updates:
|
|
486
486
|
${Z.join(`
|
|
487
487
|
`)}
|
|
488
488
|
|
|
489
|
-
${J}`,$.config.mode)}function
|
|
490
|
-
`,"utf8"),
|
|
489
|
+
${J}`,$.config.mode)}function h6($,W){return sw($,W==="plan"?"plan":W==="yolo"?"yolo":"act")}var d7=4;class S1{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 C7($,W.messagesArtifactUploader,W.logger),this.teamChildren=new e5($,this.manifestStore,(Z,Q,J)=>this.toPersistedMessages(Z,Q,J),S1.TEAM_HEARTBEAT_LOG_INTERVAL_MS)}toPersistedMessages($,W,Z){if(!$)return;return W?c5(W.messages,W,Z):v5($)}ensureSessionsDir(){return this.manifestStore.ensureSessionsDir()}writeSessionManifest($,W){this.manifestStore.writeSessionManifest($,W)}readSessionManifest($){return this.manifestStore.readSessionManifest($)}async createRootSessionWithArtifacts($){let W=$.startedAt??Z0(),Z=$.sessionId.trim(),Q=Z.length>0?Z:`${Date.now()}_${ew(5)}`,J=this.manifestStore.artifacts.sessionMessagesPath(Q),j=this.manifestStore.artifacts.sessionCompactionPath(Q),X=this.manifestStore.artifacts.sessionManifestPath(Q),Y=L6({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:Z$(V.metadata),hookPath:"",messagesPath:J,updatedAt:Z0()}),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 oB(()=>this.adapter.getSession($),async(j)=>{return Q=B0(W)?void 0:Z0(),this.adapter.updateSession({sessionId:$,status:W,endedAt:Q??null,exitCode:B0(W)?null:typeof Z==="number"?Z:null,expectedStatusLock:j.statusLock})},d7)).updated){if(W==="cancelled")await this.teamChildren.applyStatusToRunningChildSessions($,"cancelled");return{updated:!0,endedAt:Q}}return{updated:!1}}async updateSession($){for(let W=0;W<d7;W++){let Z=await this.adapter.getSession($.sessionId);if(!Z)return{updated:!1};let Q=Z.metadata??void 0,J=$.metadata!==void 0?Z$($.metadata)??{}:Z$(Q)??{},j=i$(typeof Q?.title==="string"?Q.title:void 0),X=$.title!==void 0?i$($.title):j??j7($.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?Z$($.metadata)??{}:Z$(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=v5(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(B0($.status)===!1||this.isPidAlive($.pid))return $;let W=Z0(),Z=S1.STALE_REASON;for(let Q=0;Q<d7;Q++){let J=await this.adapter.getSession($.sessionId);if(!J)return;if(B0(J.status)===!1)return J;let j={...J.metadata??{},terminal_marker:Z,terminal_marker_at:W,terminal_marker_pid:J.pid,terminal_marker_source:S1.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=aB(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,S1.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=Z$(j.metadata??void 0),V=i$(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 E7(J.cwd,J.sessionId),S6(J.messagesPath),await this.deleteSessionCompactionStateIfExists(J.sessionId),S6(this.manifestStore.artifacts.sessionManifestPath(J.sessionId,!1)),this.manifestStore.artifacts.removeSessionDirIfEmpty(J.sessionId)}))}if(await E7(Z.cwd,W),S6(Z.messagesPath),await this.deleteSessionCompactionStateIfExists(W),S6(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(tw(J));for(let J of Q)this.manifestStore.artifacts.removeDir(J)}return{deleted:!0}}async deleteSessionCompactionStateIfExists($){try{await this.manifestStore.deleteSessionCompactionState($)}catch{}}}function p7(){return new Date().toISOString()}function AG($,W){let Z=`${$}.tmp`;ZC(Z,`${JSON.stringify(W,null,2)}
|
|
490
|
+
`,"utf8"),WC(Z,$)}class UG{sessionsDirPath;constructor($=QC()){this.sessionsDirPath=$}ensureSessionsDir(){if(!l7(this.sessionsDirPath))$C(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}indexPath(){return FG(this.ensureSessionsDir(),"sessions.index.json")}spawnQueuePath(){return FG(this.ensureSessionsDir(),"subagent-spawn-queue.json")}readIndex(){let $=this.indexPath();if(!l7($))return{version:1,sessions:{}};try{let W=JSON.parse(KG($,"utf8"));if(W?.version===1&&W.sessions)return W}catch{}return{version:1,sessions:{}}}writeIndex($){AG(this.indexPath(),$)}readQueue(){let $=this.spawnQueuePath();if(!l7($))return{version:1,nextId:1,requests:[]};try{let W=JSON.parse(KG($,"utf8"));if(W?.version===1&&typeof W.nextId==="number"&&Array.isArray(W.requests))return W}catch{}return{version:1,nextId:1,requests:[]}}writeQueue($){AG(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:p7()};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:p7()}),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=p7(),this.writeQueue(Z),Q.task}}class r7 extends S1{constructor($,W={}){super(new UG($),W)}ensureSessionsDir(){return super.ensureSessionsDir()}}import{existsSync as JC,mkdirSync as jC}from"node:fs";import{resolveSessionDataDir as XC}from"@cline/shared/storage";var i7=`
|
|
491
491
|
session_id AS sessionId,
|
|
492
492
|
source,
|
|
493
493
|
pid,
|
|
@@ -514,7 +514,7 @@ ${J}`,$.config.mode)}function y6($,W){return pw($,W==="plan"?"plan":W==="yolo"?"
|
|
|
514
514
|
metadata_json AS metadata,
|
|
515
515
|
hook_path AS hookPath,
|
|
516
516
|
messages_path AS messagesPath,
|
|
517
|
-
updated_at AS updatedAt`;function n7($){$.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 a7($){if(!$||Object.keys($).length===0)return null;return JSON.stringify($)}function
|
|
517
|
+
updated_at AS updatedAt`;function n7($){$.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 a7($){if(!$||Object.keys($).length===0)return null;return JSON.stringify($)}function DG($){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 _G{store;sessionsDirPath;constructor($,W=XC()){this.store=$;this.sessionsDirPath=W}ensureSessionsDir(){if(!JC(this.sessionsDirPath))jC(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}async upsertSession($){this.store.run(`INSERT OR REPLACE INTO sessions (
|
|
518
518
|
session_id, source, pid, started_at, ended_at, exit_code, status, status_lock, interactive,
|
|
519
519
|
provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
|
|
520
520
|
parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
|
|
@@ -530,29 +530,29 @@ ${J}`,$.config.mode)}function y6($,W){return pw($,W==="plan"?"plan":W==="yolo"?"
|
|
|
530
530
|
WHERE session_id = ? AND status_lock = ?`,[Z0(),$.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(a7($.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(Z0());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)
|
|
531
531
|
VALUES (?, ?, ?, ?, ?, NULL)`,[$.rootSessionId,$.parentAgentId,$.task??null,$.systemPrompt??null,Z0()])}async claimSpawnRequest($,W){let Z=this.store.queryOne(`SELECT id, task FROM subagent_spawn_queue
|
|
532
532
|
WHERE root_session_id = ? AND parent_agent_id = ? AND consumed_at IS NULL
|
|
533
|
-
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 = ?",[Z0(),Z.id]),Z.task??void 0}}class G$ extends
|
|
533
|
+
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 = ?",[Z0(),Z.id]),Z.task??void 0}}class G$ extends S1{store;constructor($,W={}){super(new _G($,W.sessionArtifactsDir),W);this.store=$}createRootSession($){this.store.run(`INSERT OR REPLACE INTO sessions (
|
|
534
534
|
session_id, source, pid, started_at, ended_at, exit_code, status, status_lock, interactive,
|
|
535
535
|
provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
|
|
536
536
|
parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
|
|
537
537
|
metadata_json, transcript_path, hook_path, messages_path, updated_at
|
|
538
|
-
) 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,Z0()])}}import{readdirSync as
|
|
538
|
+
) 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,Z0()])}}import{readdirSync as Gb}from"node:fs";import{homedir as Kb}from"node:os";import{isAbsolute as Fb,join as I3,resolve as x3}from"node:path";import{captureSdkError as D$,createSessionId as Ab,isLikelyAuthError as Ub,normalizeUserInput as Db}from"@cline/shared";import{setHomeDirIfUnset as _b}from"@cline/shared/storage";F0();import{estimateRequestInputTokens as vC}from"@cline/shared";import{createHandlerAsync as NC}from"@cline/llms";function YC($){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 fG($){return $.map((W)=>({...W,content:Array.isArray(W.content)?W.content.map((Z)=>({...Z})):W.content,...W.metadata?{metadata:{...W.metadata}}:{}}))}function F1($){try{return JSON.stringify($).length}catch{return String($).length}}function XW($,W){return $.reduce((Z,Q)=>Z+W(Q),0)}function zG($){return $.role==="user"&&Array.isArray($.content)&&$.content.length>0&&$.content.every((W)=>W.type==="tool_result")}function YW($){for(let W=$.length-1;W>=0;W-=1){let Z=$[W];if(Z.role==="user"&&!zG(Z))return W}return-1}function VC($){for(let W=0;W<$.length;W+=1){let Z=$[W];if(Z.role==="user"&&!zG(Z))return W}return-1}function s7($){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 BC($){let W=new Map;for(let Z=0;Z<$.length;Z+=1)for(let Q of s7($[Z])){let J=W.get(Q);if(J)J.add(Z);else W.set(Q,new Set([Z]))}return W}function o7($){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 HC($,W){let Z=BC($),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 s7($[j]))for(let Y of Z.get(X)??[])if(!Q.has(Y))J.push(Y)}return Q}function GC($){return $.type==="image"||$.type==="redacted_thinking"}function KC($){return $.type==="image"}function FC($,W,Z){if(W.dropThinkingBlocks&&$.type==="thinking")return!0;return W.dropUnsafeOutsideLiveTail&&!Z&&GC($)}function LG($,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:F1(Y),finalSize:0});continue}J.push(Y),j.push(W[X])}return{messages:J,originalIndexes:j}}function AC($,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(FC(G,j,B))return V=!0,Z.push({kind:"dropped_block",path:{messageIndex:W[Y],blockIndex:K},reason:"unsafe_to_truncate",originalSize:F1(G),finalSize:0}),[];if(G.type==="tool_result"&&Array.isArray(G.content)){let F=G.content.filter((A)=>{if(j.dropUnsafeOutsideLiveTail&&!B&&KC(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:F1(G),finalSize:F1(A)}),[A]}}return[G]});return V?{...X,content:H}:X})}function UC($,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:F1(Y),finalSize:0}),!1});return j?{...Q,content:X}:Q})}function W8($,W){if(W<=0)return"";if($.length<=W)return $;if(W<=16)return $.slice(0,Math.max(1,W));let Z=`
|
|
539
539
|
...[truncated ${$.length-W} chars]`,Q=Math.max(1,W-Z.length),J=`
|
|
540
|
-
...[truncated ${$.length-Q} chars]`;return`${$.slice(0,Q)}${J}`}function
|
|
541
|
-
...[truncated ${$.length-W} chars]`}function
|
|
540
|
+
...[truncated ${$.length-Q} chars]`;return`${$.slice(0,Q)}${J}`}function TG($,W){if(typeof $==="string")return W8($,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=W8(Q.text,Z);return Z-=J.length,{...Q,text:J}}if(Q.type==="file"){let J=W8(Q.content,Z);return Z-=J.length,{...Q,content:J}}return Q})}function DC($){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 _C($,W){if(typeof $.content==="string")return{...$,content:W8($.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:TG(Q.content,0)};return Q}if(Q.type==="text"){let J=W8(Q.text,Z);return Z-=J.length,{...Q,text:J}}if(Q.type==="file"){let J=W8(Q.content,Z);return Z-=J.length,{...Q,content:J}}if(Q.type==="tool_result"){let J=TG(Q.content,Z);return Z-=DC(J),{...Q,content:J}}return Q})}}function fC($){if(typeof $.content==="string")return $.content.length>0;return $.content.some((W)=>W.type==="text"||W.type==="file"||W.type==="tool_result")}function LC($,W,Z){return{messages:$.filter((Q,J)=>!Z.has(J)),originalIndexes:W.filter((Q,J)=>!Z.has(J))}}function TC($,W){if(W<0)return!1;for(let Z of $)if(Z>=W)return!0;return!1}function OG($,W){return W>=0&&$.has(W)}function k6($){let W=[],Z=[],Q=YC($.policyIntent);if($.targetTokens<=0)return{status:"failed",messages:fG($.messages),actions:W,liveTailHandling:"preserved_out_of_band",estimatedTokens:XW($.messages,$.estimateMessageTokens),warnings:[{code:"budget_impossible",message:"Target budget must be greater than zero."}]};let J=fG($.messages),j=J.map((B,H)=>H);if(Q.dropThinkingBlocks){let B=LG(UC(J,j,W),j,W,"unsafe_to_truncate");J=B.messages,j=B.originalIndexes}let X=Q.protectLatestTypedUser?YW(J):-1,Y=Q.protectLiveTailFromDrop?o7(J):J.length;if(Q.dropUnsafeOutsideLiveTail){let B=LG(AC(J,j,W,X,Y,Q),j,W);J=B.messages,j=B.originalIndexes}let V=XW(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=YW(J);if(B===H)continue;if(Q.protectLiveTailFromDrop&&B>=o7(J))continue;if(!fC(J[B]))continue;let G=F1(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]=_C(J[B],F),W.push({kind:"truncated_text",path:{messageIndex:j[B]},reason:"over_budget",originalSize:G,finalSize:F1(J[B])}),V=XW(J,$.estimateMessageTokens)}for(let B=0;B<J.length&&V>$.targetTokens;){let H=VC(J),G=YW(J),K=Q.protectLiveTailFromDrop?o7(J):J.length;if(B===H||B===G){W.push({kind:"preserved",path:{messageIndex:j[B]},reason:"protected_live_tail",originalSize:F1(J[B]),finalSize:F1(J[B])}),B+=1;continue}let F=HC(J,B);if(OG(F,H)){B+=1;continue}if(OG(F,G)){B+=1;continue}if(TC(F,K)){B+=1;continue}for(let D of F)W.push({kind:"dropped_message",path:{messageIndex:j[D]},reason:F.size>1||s7(J[D]).size>0?"tool_pair_boundary":"over_budget",originalSize:F1(J[D]),finalSize:0});let A=LC(J,j,F);J=A.messages,j=A.originalIndexes,V=XW(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 yn,estimateTokens as VW}from"@cline/shared";var NG=128000,OC=0.9,Z2=0.9,EG=0.7,wG=20000,qG=1024,MG=2000,CG=2000,PG=8;function RG($){return typeof $==="number"&&Number.isFinite($)&&$>0}function m6($){let W=RG($.contextWindow)?$.contextWindow:void 0,Z=RG($.maxInputTokens)?$.maxInputTokens:void 0;if(Z!==void 0)return W===void 0?Z:Math.min(Z,W);return W===void 0?void 0:W*OC}function g6($,W){if($.length<=W)return $;return`${$.slice(0,W)}
|
|
541
|
+
...[truncated ${$.length-W} chars]`}function zC($){let W=t7($);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}">
|
|
542
542
|
${Z.content}
|
|
543
543
|
</file>`;case"image":return`[image:${Z.mediaType}]`;default:return""}}).join(`
|
|
544
|
-
`)}function t7($){if(typeof $==="string")return
|
|
545
|
-
`)}function
|
|
544
|
+
`)}function t7($){if(typeof $==="string")return g6($,MG);return $.map((W)=>{switch(W.type){case"text":return{...W,text:g6(W.text,MG)};case"file":return{...W,content:g6(W.content,CG)};case"image":return W;default:return W}})}function qC($){return Object.entries($).map(([W,Z])=>`${W}=${JSON.stringify(Z)}`).join(", ")}function SG($){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]: ${g6(Z.thinking,2000)}`);break;case"redacted_thinking":W.push("[Bot thinking]: [redacted]");break;case"tool_use":W.push(`[Bot tool calls]: ${Z.name}(${qC(Z.input)})`);break;case"tool_result":W.push(`[Tool result]: ${zC(Z.content)}`);break;case"file":W.push(`[${$.role==="user"?"User":"Bot"} file ${Z.path}]: ${g6(Z.content,CG)}`);break;case"image":W.push(`[${$.role==="user"?"User":"Bot"} image]: ${Z.mediaType}`);break}return W.join(`
|
|
545
|
+
`)}function bG($){return $.map(SG).join(`
|
|
546
546
|
|
|
547
|
-
`).trim()}function
|
|
547
|
+
`).trim()}function yG(){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=SG(W)}let j=VW(J.length);return $.set(Z,j),j}}function v6($){return $.metadata?.kind==="compaction_summary"}function e7($){if(!v6($))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 MC($){if($.role!=="user"||!Array.isArray($.content))return!1;return $.content.length>0&&$.content.every((W)=>W.type==="tool_result")}function c6($){return $.role==="user"&&!MC($)&&!v6($)}function hG($){for(let W=0;W<$.length;W+=1)if(c6($[W]))return W;return-1}function BW($){for(let W=$.length-1;W>=0;W-=1)if(c6($[W]))return W;return 0}function kG($){for(let W=$.length-1;W>=0;W-=1)if($[W].role==="assistant")return W;return-1}function IG($){for(let W=$.length-1;W>=0;W-=1)if(v6($[W]))return W;return-1}function xG($,W,Z){let Q=BW($);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&&!c6($[X]))X-=1;return X}function x6($){if(typeof $==="string"&&$.trim().length>0)return[$];if(Array.isArray($))return $.flatMap((W)=>x6(W));if($&&typeof $==="object"){let W=$,Z=[];for(let Q of["path","file_path","target_file","new_file_path","old_file_path"])Z.push(...x6(W[Q]));if(Array.isArray(W.files)){for(let Q of W.files)if(Q&&typeof Q==="object")Z.push(...x6(Q.path))}if(Array.isArray(W.file_paths))Z.push(...x6(W.file_paths));return Z}return[]}function I6($,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 $3($){let W=[],Z=[];for(let Q of $){let J=e7(Q);if(J){W=I6(W,J.details.readFiles),Z=I6(Z,J.details.modifiedFiles);continue}if(!Array.isArray(Q.content))continue;for(let j of Q.content){if(j.type==="file"){W=I6(W,[j.path]);continue}if(j.type!=="tool_use")continue;let X=x6(j.input);if(j.name==="read_files"){W=I6(W,X);continue}if(j.name==="editor"||j.name==="apply_patch")Z=I6(Z,X)}}return{readFiles:W,modifiedFiles:Z}}function RC($){let W=$.readFiles.length>0?$.readFiles.map((Q)=>`- ${Q}`).join(`
|
|
548
548
|
`):"- none",Z=$.modifiedFiles.length>0?$.modifiedFiles.map((Q)=>`- ${Q}`).join(`
|
|
549
549
|
`):"- none";return`## Files
|
|
550
550
|
Read:
|
|
551
551
|
${W}
|
|
552
552
|
Modified:
|
|
553
|
-
${Z}`}function
|
|
553
|
+
${Z}`}function gG($,W){if(/^## Files$/im.test($))return $.trim();return`${$.trim()}
|
|
554
554
|
|
|
555
|
-
${
|
|
555
|
+
${RC(W)}`.trim()}function W3($){let W=[`Summarize this session for continuation. Be concise and factual.
|
|
556
556
|
|
|
557
557
|
## Goal
|
|
558
558
|
One sentence: what is being built or fixed.
|
|
@@ -574,19 +574,19 @@ Edited: ${$.fileOps.modifiedFiles.join(", ")||"none"}`];if($.previousSummary?.tr
|
|
|
574
574
|
${$.previousSummary.trim()}`);return W.push(`Conversation:
|
|
575
575
|
${$.conversationText||"(empty)"}`),W.join(`
|
|
576
576
|
|
|
577
|
-
`)}function
|
|
578
|
-
|
|
579
|
-
${$.summary}`,metadata:{kind:"compaction_summary",summary:$.summary,details:$.fileOps,tokensBefore:$.tokensBefore,generatedAt:Date.now()}}}var Z3=1024;function
|
|
580
|
-
...`,Q=Math.max(1,W-Z.length);return`${$.slice(0,Q)}${Z}`}function dG($,W){let Z=Number.isFinite(W)?Math.max(1,W):1,Q=Math.max(16,Z*RC);if(typeof $.content==="string"){let X=uG($.content,Q).trim();return{...$,content:X||"..."}}let J=Q,j=$.content.map((X)=>{if(X.type!=="text"||J<=0)return X;let Y=uG(X.text,J).trim();return J-=Y.length,{...X,text:Y||"..."}});return{...$,content:j}}function NC($,W){let Z=yG($),Q=BW($),J=hG($),j=[],X=0;for(let Y=0;Y<$.length;Y+=1){let V=EC($[Y]);if(!V)continue;let B=W(V);X+=B,j.push({index:Y,message:V,estimatedTokens:B,toolPairIds:pG(V),isFirstUser:Y===Z,isLastUser:Y===Q,isLastAssistant:Y===J})}return{candidates:j,totalTokens:X}}function lG($,W,Z,Q){let J=$[W],j=J.estimatedTokens;return J.message=Z,J.estimatedTokens=Q(Z),J.toolPairIds=pG(Z),J.estimatedTokens-j}function pG($){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 wC($){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 CC($,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 PC($,W){let Z=0;for(let Q of $){if(W.has(Q))continue;$[Z]=Q,Z+=1}$.length=Z}function HW($,W,Z,Q){let J=new Set($),j=wC($);for(let X=0;X<$.length&&Q>Z;){if(!W($[X])){X+=1;continue}let Y=CC(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,PC($,Y)}return Q}function SC($,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(CG,Y.estimatedTokens-(Z-W));if(V>=Y.estimatedTokens)continue;Z+=lG($,X,dG(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+=lG($,j,dG(Y.message,V),J),Y.estimatedTokens>=B)break}}return Z}function bC($,W){return JSON.stringify($)!==JSON.stringify(W)}function yC($){let W=BW($);if(W<0||W===0&&!v6($[0]))return{compactable:$,protectedTail:[]};return{compactable:$.slice(0,W),protectedTail:$.slice(W)}}function rG($){let W=Math.max(1,Math.min($.context.budget.messages.targetTokens,$.context.budget.messages.triggerTokens)),{compactable:Z,protectedTail:Q}=yC($.context.messages);if(Z.length===0)return;let J=cG(Q,$.estimateMessageTokens),j=Math.max(1,W-J),X=NC(Z,$.estimateMessageTokens),{candidates:Y}=X;if(Y.length===0)return;let V=X.totalTokens,B=V;B=HW(Y,(U)=>U.message.role==="assistant"&&!U.isLastAssistant,j,B),B=HW(Y,(U)=>U.message.role==="user"&&!U.isFirstUser&&!U.isLastUser,j,B),B=HW(Y,(U)=>U.message.role==="assistant"&&U.isLastAssistant,j,B),B=HW(Y,(U)=>U.message.role==="user"&&U.isLastUser&&!U.isFirstUser,j,B),B=SC(Y,j,B,$.context.budget.messages.triggerTokens,$.estimateMessageTokens);let H=[...Y.map((U)=>U.message),...Q],G=h6({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(!bC($.context.messages,K))return;let F=V+J,A=cG(K,$.estimateMessageTokens),D=G.actions.filter((U)=>U.reason==="over_budget"||U.reason==="tool_pair_boundary").length;return $.logger?.debug("Performed basic compaction",{messagesBefore:$.context.messages.length,messagesAfter:K.length,messagesRemoved:$.context.messages.length-K.length,tokensBefore:F,tokensAfter:A,budgetStatus:G.status,budgetActions:D,budgetWarnings:G.warnings.map((U)=>U.code),targetTokens:W,maxInputTokens:$.context.budget.request.maxInputTokens}),{messages:K,budget:{policyIntent:"basic_compaction_projection",actionCount:D,warningCount:G.warnings.length,liveTailHandling:G.liveTailHandling}}}var kC=0.5;function nG($){try{return JSON.stringify($).length}catch{return String($).length}}function IC($){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=nG(j.content);W+=1,Z+=X,Q=Math.max(Q,X)}}return{toolResultCount:W,toolResultSerializedChars:Z,maxToolResultSerializedChars:Q}}var xC={basic:({context:$,estimateMessageTokens:W,logger:Z})=>rG({context:$,estimateMessageTokens:W,logger:Z}),agentic:({context:$,providerConfig:W,compaction:Z,estimateMessageTokens:Q,logger:J})=>vG({context:$,providerConfig:W,summarizer:Z?.summarizer,preserveRecentTokens:Math.min(Z?.preserveRecentTokens??NG,$.budget.messages.targetTokens),estimateMessageTokens:Q,logger:J})};function gC($){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 mC($){let W=$.messagePairCount>=5&&typeof $.modelMaxTokens==="number"&&Number.isFinite($.modelMaxTokens)&&$.modelMaxTokens<$.maxInputTokens?Math.floor($.maxInputTokens*kC):Math.floor($.triggerTokens*EG),Z=Math.max(1,$.triggerTokens-1);return Math.max(1,Math.min(W,$.maxInputTokens,Z))}function iG($,W){return Math.max(1,Math.floor($-W))}function vC($){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 Q3($,W={}){let Z=$.compaction;if(Z?.enabled!==!0)return;let Q=$.providerConfig??{providerId:$.providerId,modelId:$.modelId},J=bG(),j=Z?.strategy??"basic",X=xC[j],Y=W.mode??"auto",V=Z?.compact?"custom":j;return async(B)=>{let H=B.apiMessages.reduce((d,v)=>d+J(v),0),G=hC({systemPrompt:B.systemPrompt,messages:B.apiMessages,tools:B.tools}),K=B.messages.reduce((d,v)=>d+J(v),0),F=Math.max(0,G-H),A=g6({maxInputTokens:B.model.info?.maxInputTokens,contextWindow:B.model.info?.contextWindow})??RG,D=A*Z2,U=iG(D,F),f=G>=D;if($.logger?.debug("Context compaction diagnostics",{mode:Y,strategy:j,iteration:B.iteration,providerId:$.providerId,modelId:$.modelId,requestInputTokens:G,apiMessageTokens:H,messageInputTokens:K,requestOverheadTokens:F,maxInputTokens:A,requestTriggerTokens:D,messageTriggerTokens:U,thresholdRatio:Z2,shouldCompact:f,messageCount:B.messages.length,apiMessageCount:B.apiMessages.length,apiMessagesJsonChars:nG(B.apiMessages),...IC(B.apiMessages)}),Y==="auto"&&!f)return;let _,q;if(Y==="auto")_=mC({maxInputTokens:A,modelMaxTokens:B.model.info?.maxTokens,triggerTokens:D,messagePairCount:vC(B.messages)}),q=iG(_,F);else q=gC({messageInputTokens:K,messageTriggerTokens:U,manualTargetRatio:W.manualTargetRatio}),_=F+q;let T={agentId:B.agentId,conversationId:B.conversationId,parentAgentId:B.parentAgentId,iteration:B.iteration,messages:B.messages,model:B.model,mode:Y,budget:{request:{inputTokens:G,maxInputTokens:A,triggerTokens:D,targetTokens:_,overheadTokens:F,thresholdRatio:Z2,utilizationRatio:A>0?G/A:0},messages:{inputTokens:K,triggerTokens:U,targetTokens:q}}},O=Y==="manual"?"manual_compaction":"auto_compaction";B.emitStatusNotice?.(Y==="manual"?"compacting":"auto-compacting",{kind:O,reason:O,phase:"started",iteration:B.iteration,triggerTokens:D,targetTokens:_,maxInputTokens:A,messageTargetTokens:q});let L=B.messages.length,E=Date.now(),M=Z?.compact?await Z.compact(T):await X({context:T,providerConfig:{...Q,abortSignal:B.abortSignal},compaction:Z,estimateMessageTokens:J,logger:$.logger}),u=Date.now()-E,h=$.sessionId??B.conversationId,N={agentId:B.agentId,conversationId:B.conversationId,parentAgentId:B.parentAgentId??void 0};if(M?.messages){let d=M.messages.reduce((A1,z$)=>A1+J(z$),0),v=F+d;if($.logger?.log("Context compaction completed",{severity:"info",strategy:j,maxInputTokens:A,messageInputTokens:K,apiInputTokens:H,requestInputTokens:G,requestOverheadTokens:F,afterMessageTokens:d,afterRequestTokens:v,tokensSaved:G-v,utilizationBefore:`${(G/A*100).toFixed(1)}%`,utilizationAfter:`${(v/A*100).toFixed(1)}%`,thresholdTrigger:`${(Z2*100).toFixed(1)}%`,messagesBefore:L,messagesAfter:M.messages.length,messagesRemoved:L-M.messages.length}),B.emitStatusNotice?.(Y==="manual"?"compacted":"auto-compacted",{kind:O,reason:O,phase:"completed",iteration:B.iteration,tokensBefore:G,tokensAfter:v,messagesBefore:L,messagesAfter:M.messages.length,maxInputTokens:A}),y9($.telemetry,{ulid:h,strategy:V,mode:Y,messagesBefore:L,messagesAfter:M.messages.length,messagesRemoved:L-M.messages.length,tokensBefore:G,tokensAfter:v,tokensSaved:G-v,triggerTokens:D,maxInputTokens:A,thresholdRatio:Z2,durationMs:u,provider:$.providerId,modelId:$.modelId,...N}),M.budget&&(M.budget.actionCount>0||M.budget.warningCount>0))Jj($.telemetry,{ulid:h,strategy:V,mode:Y,policyIntent:M.budget.policyIntent,actionCount:M.budget.actionCount,warningCount:M.budget.warningCount,liveTailHandling:M.budget.liveTailHandling,provider:$.providerId,modelId:$.modelId,...N}),B.emitStatusNotice?.("compaction-budget-adjusted",{kind:"compaction_budget_emergency",reason:"compaction_budget_emergency",iteration:B.iteration,policyIntent:M.budget.policyIntent,actionCount:M.budget.actionCount,warningCount:M.budget.warningCount})}else B.emitStatusNotice?.(Y==="manual"?"compaction-skipped":"auto-compaction-skipped",{kind:O,reason:O,phase:"skipped",iteration:B.iteration,maxInputTokens:A}),h9($.telemetry,{ulid:h,strategy:V,mode:Y,reason:"no_result",tokensBefore:G,triggerTokens:D,maxInputTokens:A,thresholdRatio:Z2,durationMs:u,provider:$.providerId,modelId:$.modelId,...N});return M}}function J3($){return async(W)=>{let Z=$.getState?.(),Q=Z?R6(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=a5({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=a5({sourceMessages:W.messages,compactedMessages:J.messages,conversationId:W.conversationId,systemPrompt:J.systemPrompt});await $.saveState?.(j)}return J}}A0();function E0(){return{inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0}}function T0($,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 GW($){let W=E0();for(let Z of $)W=T0(W,Z);return W}function $8($){return typeof $==="number"&&Number.isFinite($)?$:0}function KW($){let W=E0();for(let Z of $){let Q=Z.metrics;if(!Q)continue;W=T0(W,{inputTokens:$8(Q.inputTokens),outputTokens:$8(Q.outputTokens),cacheReadTokens:$8(Q.cacheReadTokens),cacheWriteTokens:$8(Q.cacheWriteTokens),totalCost:$8(Q.cost)})}return W}function cC($){for(let W=$.length-1;W>=0;W-=1){let Z=$[W];if(Z?.role!=="assistant")continue;let Q=$8(Z.metrics?.inputTokens);return Q>0?Q:void 0}return}function uC($){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 j3($){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 S1($){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 dC($){return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheWriteTokens:$.cacheWriteTokens,cacheReadTokens:$.cacheReadTokens,totalCost:$.cost}}function lC($){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 X3($,W,Z){let{sessionId:Q,config:J,liveSession:j,emit:X}=$,Y=J.telemetry,V=j?.runtime.teamRuntime,B=Z?.isPrimaryAgentEvent??!0,H=j3(W),G=S1({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=uC(W.input);if(K)R9(Y,{ulid:Q,skillName:K,skillSource:"project",skillsAvailableGlobal:0,skillsAvailableProject:0,provider:J.providerId,modelId:J.modelId,...G})}if(W.type==="content_end"&&W.contentType==="tool"){let K=W.toolName??"unknown",F=!W.error;if(f8(Y,{ulid:Q,tool:K,autoApproved:void 0,success:F,modelId:J.modelId,provider:J.providerId,...G}),!F&&(K==="editor"||K==="apply_patch"))E9(Y,{ulid:Q,modelId:J.modelId,provider:J.providerId,errorType:W.error,...G})}if(W.type==="notice"&&W.reason==="api_error")V4(Y,{ulid:Q,model:J.modelId,provider:J.providerId,errorMessage:W.message,...G});if(W.type==="error")V4(Y,{ulid:Q,model:J.modelId,provider:J.providerId,errorMessage:W.error?.message??"unknown error",...G});if(W.type==="usage"&&j?.turnUsageBaseline){let K=dC(W);if(B){j.turnPrimaryUsage=T0(j.turnPrimaryUsage??E0(),K);let A=T0(j.turnUsageBaseline,j.turnPrimaryUsage);$.usageBySession.set(Q,A),_8(Y,{ulid:Q,provider:J.providerId,model:J.modelId,source:"assistant",mode:J.mode,...G}),q9(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=lC({isPrimaryAgentEvent:B,overrides:Z,eventMetadata:H}),D=j.turnUsageByAgent??new Map;j.turnUsageByAgent=D,D.set(A,T0(D.get(A)??E0(),K))}let F=T0(j.turnPrimaryUsage??E0(),GW(j.turnUsageByAgent?.values()??[]));$.aggregateUsageBySession.set(Q,T0(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:rB(W),ts:Date.now()}})}function b1($){return $.workspaceRoot??$.cwd}import{resolveProviderRequestHeaders as fP}from"@cline/llms";import{hasRuntimeConfigExtension as LP}from"@cline/shared";import{spawn as eC}from"node:child_process";import{appendFileSync as $P,readFileSync as WP}from"node:fs";import{join as ZP}from"node:path";import{augmentNodeCommandForDebug as tG,withResolvedClineBuildEnv as K3}from"@cline/shared";import{ensureHookLogDir as oG}from"@cline/shared/storage";function FW($,W){if(!W)return;return{name:$,manifest:{capabilities:["hooks"]},hooks:W}}import{existsSync as pC,readdirSync as rC}from"node:fs";import{basename as iC,extname as nC,join as aC}from"node:path";import{HOOKS_CONFIG_DIRECTORY_NAME as aG,resolveHooksConfigSearchPaths as oC}from"@cline/shared/storage";function Y3($){return oC($)}var AW;((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"})(AW||={});var V3={["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"},sC=new Map(Object.values(AW).map(($)=>[$.toLowerCase(),$])),tC=new Set(["",".sh",".bash",".zsh",".js",".mjs",".cjs",".ts",".mts",".cts",".py",".ps1"]);function B3($){let W=nC($).toLowerCase();if(!tC.has(W))return;let Z=iC($,W).trim().toLowerCase();return sC.get(Z)}function W8($){let W=[],Z=new Set,Q=Y3($).filter((J)=>pC(J));for(let J of Q)try{for(let j of rC(J,{withFileTypes:!0})){if(!j.isFile())continue;let X=B3(j.name);if(!X)continue;let Y=aC(J,j.name);if(Z.has(Y))continue;Z.add(Y),W.push({fileName:X,hookEventName:V3[X],path:Y})}}catch{}return W.sort((J,j)=>J.path.localeCompare(j.path))}function DW($){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 UW($,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 QP($,W){if(!W)return $;if(!$)return{...W};let Z=[$.context,W.context].filter((J)=>typeof J==="string"&&J.length>0).join(`
|
|
581
|
-
`),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
|
|
582
|
-
`).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
|
|
583
|
-
`,X=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??ZP(oG(),"hooks.jsonl");oG(X),$P(X,J,"utf8")};return{beforeRun:async(Q)=>{let J=G3(Q,"");Z({...z0(J,W),hookName:"agent_start",taskStart:{taskMetadata:{}}});return},beforeTool:async(Q)=>{let J=WK(Q);Z({...z0(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:DW(J.call.input)}});return},afterTool:async(Q)=>{let J=ZK(Q);Z({...z0(J,W),hookName:"tool_result",iteration:J.iteration,tool_result:J.record,postToolUse:{toolName:J.record.name,parameters:DW(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=K$(Q);if(J.status==="completed"){Z({...z0(j,W),hookName:"agent_end",iteration:J.iterations,turn:{outputText:J.outputText,status:J.status},taskComplete:{taskMetadata:{}}});return}if(J.status==="aborted"||H3(J.error?.message)){Z({...z0(j,W),hookName:"agent_abort",reason:J.error?.message,taskCancel:{taskMetadata:{}}});return}if(J.error)Z({...z0(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=G3({snapshot:Q.snapshot},QK(Q.message.content));Z({...z0(J,W),hookName:"prompt_submit",userPromptSubmit:{prompt:J.userMessage,attachments:[]}})}}}function F3($){let W=GP($.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;Q2({commands:F,cwd:$.cwd,logger:$.logger,payload:K==="agent_resume"?{...z0(G,$),hookName:K,taskResume:{taskMetadata:{},previousState:{}}}:{...z0(G,$),hookName:K,taskStart:{taskMetadata:{}}}})},J=async(G)=>{let K=W.prompt_submit??[];if(K.length>0)Q2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...z0(G,$),hookName:"prompt_submit",userPromptSubmit:{prompt:G.userMessage,attachments:[]}}})},j=async(G)=>{let K=W.tool_call??[];if(K.length===0)return;return KP({commands:K,cwd:$.cwd,logger:$.logger,timeoutMs:$.toolCallTimeoutMs??120000,payload:{...z0(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:DW(G.call.input)}}})},X=async(G)=>{let K=W.tool_result??[];if(K.length===0)return;Q2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...z0(G,$),hookName:"tool_result",iteration:G.iteration,tool_result:G.record,postToolUse:{toolName:G.record.name,parameters:DW(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;Q2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...z0(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;Q2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...z0(G,$),hookName:"agent_error",iteration:G.iteration,error:{name:G.error.name,message:G.error.message,stack:G.error.stack}}})},B=async(G)=>{if(H3(G.reason)){let F=W.agent_abort??[];if(F.length>0)Q2({commands:F,cwd:$.cwd,logger:$.logger,payload:{...z0(G,$),hookName:"agent_abort",reason:G.reason,taskCancel:{taskMetadata:{}}}})}let K=W.session_shutdown??[];if(K.length===0)return;Q2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...z0(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(K$(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(G3({snapshot:G.snapshot},QK(G.message.content)))}}if((W.tool_call?.length??0)>0)H.beforeTool=async(G)=>{let K=await j(WK(G));return FP(K)};if((W.tool_result?.length??0)>0)H.afterTool=async(G)=>{await X(ZK(G));return};if((W.agent_end?.length??0)>0)H.afterRun=async({snapshot:G,result:K})=>{if(K.status!=="completed")return;await Y({...K$(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"||H3(A.error?.message)){await B({...K$(F),reason:A.error?.message});return}if(A.error)await V({...K$(F),iteration:A.iterations,error:A.error})}}return H}function fW($){return FW("core.hook_config_files",F3($))}function J2($,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 c6($){let W=$.filter((Z)=>Z!==void 0);if(W.length===0)return;return{beforeRun:J2(W,"beforeRun"),afterRun:J2(W,"afterRun"),beforeModel:J2(W,"beforeModel"),afterModel:J2(W,"afterModel"),beforeTool:J2(W,"beforeTool"),afterTool:J2(W,"afterTool"),onEvent:J2(W,"onEvent")}}import{z as F$}from"zod";var u6=L2;var JK=F$.object({settings:L2,updatedAt:F$.string().datetime(),tokenSource:F$.enum(["manual","oauth","migration"]).default("manual")}),LW=F$.object({version:F$.literal(1),lastUsedProvider:F$.string().min(1).optional(),providers:F$.record(F$.string(),JK)});function Z8(){return{version:1,providers:{}}}t0();import{upsertWorkspaceInfo as AP,WorkspaceManifestSchema as A3}from"@cline/shared";class OW{manifest;listeners=new Set;constructor($){this.manifest=A3.parse($??{workspaces:{}})}async addWorkspacePath($){let W=await I5($);return this.manifest=AP(this.manifest,W),this.emit({type:"workspace_added",workspace:W}),W}async switchWorkspace($){let W=e1($),Z=this.manifest.workspaces[W];if(Z)return this.manifest=A3.parse({...this.manifest,currentWorkspacePath:W}),this.emit({type:"workspace_switched",workspace:Z}),Z;let Q=await this.addWorkspacePath(W);return this.manifest=A3.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=e1($);return this.manifest.workspaces[W]}listWorkspaces(){return Object.values(this.manifest.workspaces)}getManifest(){return this.manifest}emit($){for(let W of this.listeners)W($)}}A0();import{createHash as UP}from"node:crypto";var jK=new Set,XK=new Set;function DP($){return UP("sha256").update($).digest("hex")}function _P($){if($.vcsTypes&&$.vcsTypes.length>0)return $.vcsTypes;return[$.vcsType==="git"?"git":"none"]}function YK($){if(!$.telemetry)return;let W=DP($.rootPath),Z=$.rootCount??1;if(!jK.has(W))jK.add(W),f9($.telemetry,{root_count:Z,vcs_types:_P($),init_duration_ms:$.durationMs,feature_flag_enabled:$.featureFlagEnabled??!0,is_remote_workspace:$.isRemoteWorkspace});if($.initError&&!XK.has(W)){XK.add(W);let Q=Error($.initError.message);Q.name=$.initError.errorType||"Error",L9($.telemetry,Q,{fallback_to_single_root:!0,workspace_count:Z})}}function OP($){return`${$.pluginName??$.pluginPath}: ${$.message}`}function TP($,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(OP).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 zP($,W){let Z=typeof $.thinking==="boolean",Q=typeof $.reasoningEffort==="string";if(!Z&&!Q)return W;return{...W??{},...Z?{enabled:$.thinking}:{},...Q?{effort:$.reasoningEffort}:{}}}function VK($,W){return LP($,W)}function qP($){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 MP($,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=fP({providerId:$.providerId,sessionId:W,source:Z,defaultSource:D0.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:i2,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:zP($,X?.reasoning),modelCatalog:Y},G={..._1(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 BK($){let{input:W,sessionId:Z,providerSettingsManager:Q,defaultTelemetry:J,defaultCapabilities:j,defaultToolPolicies:X,defaultFetch:Y,onPluginEvent:V,onTeamEvent:B,createSubAgentLifecycleCallbacks:H,createSpawnTool:G,localRuntime:K,readSessionMetadata:F,writeSessionMetadata:A}=$,D=b1(W.config),{modelCatalogDefaults:U,userInstructionService:f,configExtensions:_,onTeamRestored:q,...T}=K??{},O=Object.keys(T).length>0?T:void 0,{workspaceInfo:L,workspaceMetadata:E,gitState:M,durationMs:u,vcsType:h,initError:N}=await wB(D),d=O?.extensionContext,v={...d??{},workspace:{...L,...d?.workspace??{}},session:{...d?.session??{},sessionId:Z},logger:d?.logger??O?.logger,telemetry:d?.telemetry??O?.telemetry??J};YK({telemetry:v.telemetry,rootPath:L.rootPath,workspaceInfo:L,rootCount:1,vcsType:h,durationMs:u,initError:N,featureFlagEnabled:!0});let A1=fW({cwd:W.config.cwd,workspacePath:D,rootSessionId:Z,logger:O?.logger,workspaceInfo:L}),z$=pB(O?.hooks)?void 0:_W({rootSessionId:Z,workspacePath:D,workspaceInfo:L}),x1=c6([O?.hooks,z$]),b0;if(VK(_,"plugins"))try{b0=await g4({pluginPaths:O?.pluginPaths,workspacePath:D,cwd:W.config.cwd,onEvent:V,providerId:W.config.providerId,modelId:W.config.modelId,workspaceInfo:L,session:v.session,client:v.client,user:v.user,logger:v.logger,telemetry:v.telemetry,automation:v.automation}),TP(b0.failures,b0.warnings,O?.logger)}catch(D8){let F2=D8 instanceof Error?D8.message:String(D8);O?.logger?.log?.(`plugin loading failed; continuing without plugins (${F2})`)}let J1=J7(A1?[A1]:void 0,J7(O?.extensions,FZ(b0?.extensions))),K2=VK(_,"plugins")?S$(b0?.pluginPaths??[]):void 0,J0={...W.config,...O??{},sessionId:Z,hooks:x1,extensions:J1,extensionContext:v,telemetry:v.telemetry},I0=MP(J0,Z,W.source,Q,U,Y),o0=c6([J0.hooks,J0.checkpoint?.enabled===!0?rH({cwd:J0.cwd,sessionId:Z,logger:J0.logger,createCheckpoint:J0.checkpoint?.createCheckpoint,initialRunCount:qP(W.initialMessages),readSessionMetadata:F,writeSessionMetadata:A}):void 0]),P={...J0,providerConfig:I0,workspaceMetadata:E,hooks:o0},s0=W.toolPolicies??J0.toolPolicies??X,b=C0(j,W.capabilities),t=b?.requestToolApproval,F0=b?.toolExecutors,_0=H?.(P),J4=new OW({currentWorkspacePath:L.rootPath,workspaces:{[L.rootPath]:L}});return{effectiveInput:W,config:P,providerConfig:I0,workspaceMetadata:E,workspaceInfo:L,gitState:M,extensions:J1,hooks:o0,toolPolicies:s0,requestToolApproval:t,pluginSandboxShutdown:b0?.shutdown,runtimeBuilderInput:{config:P,hooks:o0,extensions:J1,onTeamEvent:B,createSpawnTool:G,onTeamRestored:q,onSubAgentEvent:_0?.onSubAgentEvent,onSubAgentStart:_0?.onSubAgentStart,onSubAgentEnd:_0?.onSubAgentEnd,userInstructionService:f,pluginSkillDirectories:K2,configExtensions:_,toolExecutors:F0,toolPolicies:s0,workspaceManager:J4,logger:P.logger,telemetry:P.telemetry,requestToolApproval:t}}}import{resolveDocumentsExtensionPath as RP}from"@cline/shared/storage";A0();function HK($,W,Z,Q,J){if(Z)z9($.telemetry,{ulid:W,apiProvider:$.providerId,...J});else T9($.telemetry,{ulid:W,apiProvider:$.providerId,...J});EP($.telemetry,{workspacePath:Q})}function EP($,W){let Z=RP("Hooks"),Q=W8(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())b9($,j,X.global,X.workspace)}function GK($,W){for(let Z of W.mentions)P9($,Z,W.matchedFiles.includes(Z)?1:0,"file",!W.matchedFiles.includes(Z));for(let Z of W.matchedFiles)w9($,"file",Z.length);for(let Z of W.ignoredMentions)C9($,"file","not_found",Z)}import{chmodSync as NK,existsSync as z3,mkdirSync as KS,readFileSync as FS,renameSync as AS,rmSync as US,writeFileSync as DS}from"node:fs";import{basename as wK,dirname as q3}from"node:path";import{resolveProviderSettingsPath as _S}from"@cline/shared/storage";import{existsSync as NP,mkdirSync as wP,readFileSync as CP,renameSync as PP,rmSync as SP,writeFileSync as bP}from"node:fs";import{mkdir as yP,readFile as hP,rename as kP,rm as IP,writeFile as xP}from"node:fs/promises";import{dirname as D3,join as gP}from"node:path";import*as V0 from"@cline/llms";import{ApiFormatSchema as mP,ModelCapabilitySchema as vP,ProviderCapabilitySchema as cP,ProviderClientSchema as uP,ProviderProtocolSchema as dP}from"@cline/shared";import{z as n}from"zod";var U3=n.number().finite().positive().optional().catch(void 0),d6=n.number().finite().nonnegative().optional().catch(void 0),lP=n.object({id:n.string().optional(),name:n.string().optional(),maxTokens:U3,contextWindow:U3,maxInputTokens:U3,capabilities:n.array(vP).optional(),supportsVision:n.boolean().optional(),supportsAttachments:n.boolean().optional(),supportsReasoning:n.boolean().optional(),inputPrice:d6,outputPrice:d6,cacheReadsPrice:d6,cacheWritesPrice:d6,temperature:d6,apiFormat:mP.optional(),isR1FormatRequired:n.boolean().optional()}).passthrough(),pP=n.object({name:n.string(),baseUrl:n.string(),defaultModelId:n.string().optional(),protocol:dP.optional(),client:uP.optional(),capabilities:n.array(cP).optional(),modelsSourceUrl:n.string().optional()}).passthrough(),KK=n.object({provider:pP.optional(),models:n.record(n.string(),lP).optional()}).passthrough(),FK=n.object({version:n.literal(1),providers:n.record(n.string(),KK)}),rP=n.object({version:n.literal(1),providers:n.record(n.string(),n.unknown())}),TW=new Set;function AK($){return $.split(/[-_]/).filter(Boolean).map((W)=>W.charAt(0).toUpperCase()+W.slice(1)).join(" ")}function A$($){return gP(D3($.getFilePath()),"models.json")}function zW(){return{version:1,providers:{}}}function UK($){let W=rP.safeParse($);if(!W.success)return o("models.json content is not a valid models file envelope; starting from an empty registry"),zW();let Z={};for(let[Q,J]of Object.entries(W.data.providers)){let j=KK.safeParse(J);if(j.success)Z[Q]=j.data;else o(`models.json: dropping invalid entry for provider=${Q}`)}return{version:1,providers:Z}}function qW($){if(!NP($))return zW();try{let W=CP($,"utf8");return UK(JSON.parse(W))}catch{o(`models.json at ${$} exists but is unreadable or invalid JSON; treating as an empty registry`)}return zW()}async function Q8($){try{let W=await hP($,"utf8");return UK(JSON.parse(W))}catch(W){if(W?.code!=="ENOENT")o(`models.json at ${$} exists but is unreadable or invalid JSON; treating as an empty registry`)}return zW()}function _3($,W){wP(D3($),{recursive:!0});let Z=FK.parse(W),Q=`${$}.${process.pid}.tmp`;try{bP(Q,`${JSON.stringify(Z,null,2)}
|
|
584
|
-
`,"utf8"),
|
|
585
|
-
`,"utf8"),await kP(Q,$)}catch(J){throw await IP(Q,{force:!0}).catch(()=>{}),J}}function DK($,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 _K($){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 fK($){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 iP($){return $!=null&&typeof $.name==="string"&&typeof $.baseUrl==="string"}function LK($,W){return $??W??"openai-chat"}function OK($,W,Z){return $??Z??(W==="openai-responses"?"openai":"openai-compatible")}function TK($,W,Z){let Q=new Set(W?.capabilities??Z??[]);if(W?.supportsVision!==void 0)if(W.supportsVision)Q.add("images");else Q.delete("images");if(W?.supportsAttachments!==void 0)if(W.supportsAttachments)Q.add("files");else Q.delete("files");if(W?.supportsReasoning!==void 0)if(W.supportsReasoning)Q.add("reasoning");else Q.delete("reasoning");let J=W?.isR1FormatRequired?"r1":W?.apiFormat,j=W?.inputPrice!==void 0||W?.outputPrice!==void 0||W?.cacheReadsPrice!==void 0||W?.cacheWritesPrice!==void 0;return{id:$,name:W?.name??$,...W?.maxTokens!==void 0?{maxTokens:W.maxTokens}:{},...W?.contextWindow!==void 0?{contextWindow:W.contextWindow}:{},...W?.maxInputTokens!==void 0?{maxInputTokens:W.maxInputTokens}:{},...Q.size>0?{capabilities:[...Q]}:{},...W?.temperature!==void 0?{temperature:W.temperature}:{},...J!==void 0?{apiFormat:J}:{},...j?{pricing:{...W?.inputPrice!==void 0?{input:W.inputPrice}:{},...W?.outputPrice!==void 0?{output:W.outputPrice}:{},...W?.cacheReadsPrice!==void 0?{cacheRead:W.cacheReadsPrice}:{},...W?.cacheWritesPrice!==void 0?{cacheWrite:W.cacheWritesPrice}:{}}}:{}}}function nP($,W){for(let[Z,Q]of Object.entries(W??{})){let J=Q.id?.trim()||Z.trim();if(!J)continue;V0.registerModel($,J,TK(J,Q))}}function aP($,W,Z){return{...W??{},id:$,name:W?.name??$,capabilities:W?.capabilities??Z}}function oP($){return Object.assign({},...V0.resolveProviderModelCatalogKeys($).map((Z)=>V0.getGeneratedModelsForProvider(Z)))}function sP($){let W=$.provider.trim();if(!W||V0.isBuiltInProviderId(W))return;let Z=$.baseUrl?.trim();if(!Z)return;let Q=V0.MODEL_COLLECTIONS_BY_PROVIDER_ID[W],J=oP(W),j=fK($.capabilities),X=j.length>0?j:void 0,Y=$.model?.trim(),V={...J,...Q?.models??{}};if(Y)V[Y]=aP(Y,V[Y],X);let B=Object.keys(V).filter(Boolean),H=Y||B[0];if(!H)return;let G=LK($.protocol,Q?.provider.protocol),K=OK($.client,G,Q?.provider.client);V0.registerProvider({provider:{id:W,name:Q?.provider.name??AK(W),description:Q?.provider.description,protocol:G,client:K,baseUrl:Z,modelsSourceUrl:Q?.provider.modelsSourceUrl,defaultModelId:H,capabilities:_K($.capabilities)??Q?.provider.capabilities,source:"file"},models:V})}function RW($){for(let W of Object.values($.providers))sP(W.settings)}function J8($,W){let Z=W.models??{};if(!iP(W.provider)){nP($,Z);return}let Q=fK(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=LK(W.provider.protocol,void 0),Y=OK(W.provider.client,X,void 0),V=Object.fromEntries(J.map(({id:B,model:H})=>[B,{...TK(B,H,Q.length>0?Q:void 0),status:"active"}]));V0.registerProvider({provider:{id:$,name:W.provider.name.trim()||AK($),protocol:X,client:Y,baseUrl:W.provider.baseUrl,modelsSourceUrl:W.provider.modelsSourceUrl,defaultModelId:j,capabilities:_K(W.provider.capabilities),source:"file"},models:V})}function tP($,W,Z){let Q=Z?.models??{},J=new Set;for(let[Y,V]of Object.entries(W?.models??{})){if(Object.hasOwn(Q,Y))continue;let B=V.id?.trim()||Y.trim();if(B)J.add(B),V0.unregisterModel($,B)}if(!Z)return;let j=V0.getProviderCollectionSync($);J8($,Z);let X=V0.getProviderCollectionSync($);if(j&&X&&X!==j){let Y=Object.fromEntries(Object.entries(j.models).filter(([V])=>!J.has(V)));V0.registerProvider({...X,models:{...Y,...X.models}})}}function f3($){let W=A$($);if(TW.has(W))return;let Z=qW(W);for(let[Q,J]of Object.entries(Z.providers))J8(Q,J);TW.add(W)}async function zK($){let W=A$($);if(TW.has(W))return;let Z=await Q8(W);for(let[Q,J]of Object.entries(Z.providers))J8(Q,J);TW.add(W)}import{existsSync as eP,readFileSync as $S}from"node:fs";import{dirname as WS,join as L3}from"node:path";import*as j8 from"@cline/llms";import{resolveClineDataDir as ZS}from"@cline/shared/storage";var EW="openai",RK=j8.BUILT_IN_PROVIDER.OPENAI_COMPATIBLE,qK=128000;function EK($){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 C($){let W=$?.trim();return W?W:void 0}function QS($){return $==="credentials"?"iam":$}function MK($){if(!eP($))return;try{let W=$S($,"utf8"),Z=JSON.parse(W);if(Z&&typeof Z==="object"&&!Array.isArray(Z))return Z}catch{}return}function JS($){let W=$.dataDir??ZS(),Z=$.globalStatePath??L3(W,"globalState.json"),Q=$.secretsPath??L3(W,"secrets.json"),J=MK(Z),j=MK(Q);if(!J&&!j)return;return{globalState:J??{},secrets:j??{}}}function O3($){if($===EW)return RK;return $}function jS($,W,Z,Q){let J=Z==="plan"?"planMode":"actMode",j=W===Q?C(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?C(typeof $[Y]==="string"?$[Y]:void 0):void 0)??j}function XS($,W,Z){let Q=Z==="plan"?$.planModeThinkingBudgetTokens:$.actModeThinkingBudgetTokens,J=[...W==="oca"?[$.actModeOcaReasoningEffort,$.planModeOcaReasoningEffort]:[],...W==="gemini"?[$.geminiActModeThinkingLevel,$.geminiPlanModeThinkingLevel]:[],$.actModeReasoningEffort,$.planModeReasoningEffort].map(C).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 YS($){let W=$["openai-codex-oauth-credentials"];if(!W)return;try{let Z=JSON.parse(W),Q=C(Z.access_token),J=C(Z.refresh_token),j=C(Z.accountId);if(!Q&&!J&&!j)return;return{...Q?{apiKey:Q}:{},auth:{...Q?{accessToken:Q}:{},...J?{refreshToken:J}:{},...j?{accountId:j}:{}}}}catch{return}}function VS($){let W=j8.getGeneratedModelsForProvider($),Q=j8.getProviderCollectionSync($)?.provider.defaultModelId;if(Q&&W[Q])return Q;return Object.keys(W)[0]??void 0}function BS($,W,Z,Q){let J=O3($),j=C(Q==="plan"?W.planModeApiProvider:W.actModeApiProvider),X=jS(W,$,Q,j)??VS(J),Y=XS(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,YS(Z));if($==="cline")try{let f=C(Z["cline:clineAccountId"]);if(f)H.auth={...H.auth??{},...EK(f)}}catch{}if($===EW&&W.openAiHeaders)H.headers=W.openAiHeaders;if($==="bedrock"){let f=QS(W.awsAuthentication),_=f==="profile"||W.awsUseProfile===!0;H.aws={accessKey:C(Z.awsAccessKey),secretKey:C(Z.awsSecretKey),sessionToken:C(Z.awsSessionToken),region:C(W.awsRegion),authentication:f,profile:_?C(W.awsProfile):void 0,usePromptCache:W.awsBedrockUsePromptCache,useCrossRegionInference:W.awsUseCrossRegionInference,useGlobalInference:W.awsUseGlobalInference,endpoint:C(W.awsBedrockEndpoint),customModelBaseId:C(Q==="plan"?W.planModeAwsBedrockCustomModelBaseId:W.actModeAwsBedrockCustomModelBaseId)}}if($==="vertex")H.gcp={projectId:C(W.vertexProjectId),region:C(W.vertexRegion)};if($===EW&&(W.azureApiVersion||W.azureIdentity!==void 0))H.azure={apiVersion:C(W.azureApiVersion),useIdentity:W.azureIdentity};if($==="sapaicore"){let f=W.sapAiCoreUseOrchestrationMode??!0;H.sap={clientId:C(Z.sapAiCoreClientId),clientSecret:C(Z.sapAiCoreClientSecret),tokenUrl:C(W.sapAiCoreTokenUrl),resourceGroup:C(W.sapAiResourceGroup),deploymentId:f?void 0:C(Q==="plan"?W.planModeSapAiCoreDeploymentId:W.actModeSapAiCoreDeploymentId),useOrchestrationMode:f}}if($==="oca"){H.oca={mode:W.ocaMode};let f=C(Z.ocaRefreshToken);if(f)H.auth={...H.auth??{},refreshToken:f}}if($==="qwen")H.apiLine=W.qwenApiLine;if($==="moonshot")H.apiLine=W.moonshotApiLine;if($==="zai")H.apiLine=W.zaiApiLine;if($==="minimax")H.apiLine=W.minimaxApiLine;let G={anthropic:W.anthropicBaseUrl,openai:W.openAiBaseUrl,ollama:W.ollamaBaseUrl,lmstudio:W.lmStudioBaseUrl,litellm:W.liteLlmBaseUrl,gemini:W.geminiBaseUrl,requesty:W.requestyBaseUrl,asksage:W.asksageApiUrl,dify:W.difyBaseUrl,oca:W.ocaBaseUrl,aihubmix:W.aihubmixBaseUrl,sapaicore:W.sapAiCoreBaseUrl},K=C(B[$]),F=C(G[$]),A={provider:J,...K?{apiKey:K}:{},...X?{model:X}:{},...F?{baseUrl:F}:{},...Y?{reasoning:Y}:{},...V?{timeout:V}:{},...H},D=u6.safeParse(A);if(!D.success)return;return Object.keys(A).filter((f)=>f!=="provider").length>0?D.data:void 0}function HS($,W){if($!==RK)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:qK,maxInputTokens:qK,capabilities:["streaming","tools","images"]}}}}function GS($,W){let Z=new Set;for(let J of[$.actModeApiProvider,$.planModeApiProvider]){let j=C(J);if(j)Z.add(j)}if(C(W.apiKey))Z.add("anthropic");if(C(W.openRouterApiKey))Z.add("openrouter");if(C(W.openAiApiKey))Z.add(EW);if(C(W.openAiNativeApiKey))Z.add("openai-native");if(C(W["openai-codex-oauth-credentials"]))Z.add("openai-codex");if(C(W.geminiApiKey))Z.add("gemini");if(C(W.ollamaApiKey))Z.add("ollama");if(C(W.awsAccessKey)||C(W.awsBedrockApiKey)||$.awsAuthentication!==void 0||$.awsUseProfile===!0||C($.awsProfile))Z.add("bedrock");if(C($.vertexProjectId)||C($.vertexRegion))Z.add("vertex");if(C(W.clineApiKey))Z.add("cline");let Q=EK(C(W["cline:clineAccountId"]));if(Q?.accessToken||Q?.refreshToken||Q?.accountId)Z.add("cline");if(C(W.ocaApiKey))Z.add("oca");if(C(W.sapAiCoreClientId)||C(W.sapAiCoreClientSecret)||C($.sapAiCoreTokenUrl)||C($.sapAiCoreBaseUrl)||C($.sapAiResourceGroup)||$.sapAiCoreUseOrchestrationMode!==void 0)Z.add("sapaicore");return Z}function T3($){let W=$.providerSettingsManager.read(),Z=JS($);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=GS(Q,J),Y=Z8();Y.providers={...W.providers},Y.lastUsedProvider=W.lastUsedProvider;let V=new Date().toISOString(),B=0,H=L3(WS($.providerSettingsManager.getFilePath()),"models.json"),G=qW(H),K=0;for(let D of X){let U=O3(D);if(Y.providers[U])continue;let f=BS(D,Q,J,j);if(!f)continue;Y.providers[U]={settings:f,updatedAt:V,tokenSource:"migration"},B+=1;let _=HS(U,f);if(_&&!G.providers[U])G.providers[U]=_,K+=1}if(B===0&&K===0)return{migrated:!1,providerCount:Object.keys(W.providers).length,lastUsedProvider:W.lastUsedProvider};let F=C(j==="plan"?Q.planModeApiProvider:Q.actModeApiProvider),A=F?O3(F):void 0;if(Y.lastUsedProvider=W.lastUsedProvider??(A&&Y.providers[A]?A:Object.keys(Y.providers)[0]),$.providerSettingsManager.write(Y),K>0)_3(H,G);return{migrated:B>0||K>0,providerCount:Object.keys(Y.providers).length,lastUsedProvider:Y.lastUsedProvider}}function fS(){return new Date().toISOString()}var LS="cline",OS="cline-pass";function TS($){if(wK($)!=="providers.json")return;let W=q3($);if(wK(W)!=="settings")return;return q3(W)}class U${filePath;dataDir;constructor($={}){if(this.filePath=$.filePath??_S(),this.dataDir=$.dataDir??TS(this.filePath),this.dataDir||!$.filePath)T3({providerSettingsManager:this,dataDir:this.dataDir});if(f3(this),RW(this.read()),z3(this.filePath))try{NK(this.filePath,384)}catch{}}getFilePath(){return this.filePath}read(){if(!z3(this.filePath))return Z8();try{let $=FS(this.filePath,"utf8"),W=JSON.parse($),Z=LW.safeParse(W);if(Z.success){RW(Z.data);let Q=Z.data.providers.cline?.settings?.auth;return o(`providers.read providers=[${Object.keys(Z.data.providers).join(",")}] lastUsed=${Z.data.lastUsedProvider??"none"} clineAuthPresent=${!!Q?.accessToken} clineAccessTokenHash=${w0(Q?.accessToken)} clineRefreshTokenHash=${w0(Q?.refreshToken)}`),Z.data}}catch{}return Z8()}write($){let W=LW.parse($),Z=q3(this.filePath);if(!z3(Z))KS(Z,{recursive:!0,mode:448});let Q=`${this.filePath}.${process.pid}.tmp`;try{DS(Q,`${JSON.stringify(W,null,2)}
|
|
586
|
-
`,{encoding:"utf8",mode:384}),
|
|
587
|
-
`).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?
|
|
588
|
-
`,"utf8")}persistRuntime($,W,Z){this.ensureTeamSubdir($);let Q={version:1,updatedAt:
|
|
589
|
-
`,"utf8"),
|
|
577
|
+
`)}function mG($){let W=$.summarizer,Z=(J)=>{if(J.providerId==="openai-codex"){let{maxOutputTokens:j,...X}=J;return{...X,thinking:!1}}return{...J,maxOutputTokens:J.maxOutputTokens??qG,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??qG})}function vG($){return{role:"user",content:`Context summary:
|
|
578
|
+
|
|
579
|
+
${$.summary}`,metadata:{kind:"compaction_summary",summary:$.summary,details:$.fileOps,tokensBefore:$.tokensBefore,generatedAt:Date.now()}}}var Z3=1024;function EC($){let W=m6({maxInputTokens:$.maxInputTokens??$.modelInfo?.maxInputTokens,contextWindow:$.modelInfo?.contextWindow});if(W!==void 0)return W;let Z=$.knownModels?.[$.modelId];return m6({maxInputTokens:Z?.maxInputTokens,contextWindow:Z?.contextWindow})}function wC($){return k6({messages:$.messages,targetTokens:Math.max(1,$.targetTokens),policyIntent:"agentic_summary",estimateMessageTokens:$.estimateMessageTokens})}async function CC($){let W=await NC($.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 PC($){try{return JSON.stringify($).length}catch{return String($).length}}async function cG($){let W=$.context.messages;if(W.length<2)return;let Z=xG(W,$.preserveRecentTokens,$.estimateMessageTokens);if(Z<=0||Z>=W.length)return;let Q=W.slice(0,Z),J=IG(Q),j=J>=0?e7(Q[J])?.summary:void 0,X=J>=0?Q.slice(J+1):Q;if(X.length===0)return;let Y=$3(Q),V=mG({activeProviderConfig:$.providerConfig,summarizer:$.summarizer}),B=EC(V),H=$.summarizer===void 0,G=Math.max($.context.budget.request.maxInputTokens,$.context.budget.request.triggerTokens,Z3);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:Z3});let K=B??(H?G:Z3),F=VW(W3({previousSummary:j,conversationText:"",fileOps:Y}).length),A=K-F;if(A<=0){$.logger?.debug("Skipped agentic compaction: summarizer budget exhausted",{summarizerProviderId:V.providerId,summarizerModelId:V.modelId,summarizerInputLimit:K,summaryRequestOverheadTokens:F});return}let D=wC({messages:X,targetTokens:A,estimateMessageTokens:$.estimateMessageTokens});if(D.status==="failed"){$.logger?.log("Skipped agentic compaction: summary input budget failed",{severity:"warn",budgetWarnings:D.warnings.map((u)=>u.code),summaryInputEstimatedTokens:D.estimatedTokens,targetTokens:A,summarizerProviderId:V.providerId,summarizerModelId:V.modelId});return}let U=$3(D.messages),f=bG(D.messages),_=W3({previousSummary:j,conversationText:f,fileOps:U});$.logger?.debug("Agentic compaction summarizer diagnostics",{messagesToSummarize:Q.length,newMessagesToFold:X.length,preservedMessages:W.length-Z,previousSummaryChars:j?.length??0,conversationTextChars:f.length,summaryRequestChars:_.length,summaryRequestEstimatedTokens:VW(_.length),newMessagesJsonChars:PC(X),summaryInputEstimatedTokens:D.estimatedTokens,summaryInputActions:D.actions.length,summaryInputWarnings:D.warnings.map((u)=>u.code),summaryRequestOverheadTokens:F,summarizerProviderId:V.providerId,summarizerModelId:V.modelId,summarizerInputLimit:K,maxInputTokens:$.context.budget.request.maxInputTokens,triggerTokens:$.context.budget.request.triggerTokens});let q=await CC({providerConfig:V,request:_,logger:$.logger});if(!q.trim())return;let O=gG(q,U),T=W.reduce((u,b)=>u+$.estimateMessageTokens(b),0),L=[vG({summary:O,fileOps:U,tokensBefore:T}),...W.slice(Z)],N=L.reduce((u,b)=>u+$.estimateMessageTokens(b),0);$.logger?.debug("Performed agentic compaction",{messagesBefore:W.length,messagesAfter:L.length,messagesSummarized:Z,messagesPreserved:W.length-Z,tokensBefore:T,tokensAfter:N,maxInputTokens:$.context.budget.request.maxInputTokens});let M=D.actions.filter((u)=>u.reason==="over_budget"||u.reason==="tool_pair_boundary").length;return{messages:L,budget:{policyIntent:"agentic_summary",actionCount:M,warningCount:D.warnings.length,liveTailHandling:D.liveTailHandling}}}import{CHARS_PER_TOKEN as SC}from"@cline/shared";function bC($){if(v6($))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:t7(Z.content)}:Z)}}function uG($,W){return $.reduce((Z,Q)=>Z+W(Q),0)}function dG($,W){if($.length<=W)return $;let Z=`
|
|
580
|
+
...`,Q=Math.max(1,W-Z.length);return`${$.slice(0,Q)}${Z}`}function lG($,W){let Z=Number.isFinite(W)?Math.max(1,W):1,Q=Math.max(16,Z*SC);if(typeof $.content==="string"){let X=dG($.content,Q).trim();return{...$,content:X||"..."}}let J=Q,j=$.content.map((X)=>{if(X.type!=="text"||J<=0)return X;let Y=dG(X.text,J).trim();return J-=Y.length,{...X,text:Y||"..."}});return{...$,content:j}}function yC($,W){let Z=hG($),Q=BW($),J=kG($),j=[],X=0;for(let Y=0;Y<$.length;Y+=1){let V=bC($[Y]);if(!V)continue;let B=W(V);X+=B,j.push({index:Y,message:V,estimatedTokens:B,toolPairIds:rG(V),isFirstUser:Y===Z,isLastUser:Y===Q,isLastAssistant:Y===J})}return{candidates:j,totalTokens:X}}function pG($,W,Z,Q){let J=$[W],j=J.estimatedTokens;return J.message=Z,J.estimatedTokens=Q(Z),J.toolPairIds=rG(Z),J.estimatedTokens-j}function rG($){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 hC($){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 kC($,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 IC($,W){let Z=0;for(let Q of $){if(W.has(Q))continue;$[Z]=Q,Z+=1}$.length=Z}function HW($,W,Z,Q){let J=new Set($),j=hC($);for(let X=0;X<$.length&&Q>Z;){if(!W($[X])){X+=1;continue}let Y=kC(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,IC($,Y)}return Q}function xC($,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(PG,Y.estimatedTokens-(Z-W));if(V>=Y.estimatedTokens)continue;Z+=pG($,X,lG(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+=pG($,j,lG(Y.message,V),J),Y.estimatedTokens>=B)break}}return Z}function gC($,W){return JSON.stringify($)!==JSON.stringify(W)}function mC($){let W=BW($);if(W<0||W===0&&!c6($[0]))return{compactable:$,protectedTail:[]};return{compactable:$.slice(0,W),protectedTail:$.slice(W)}}function iG($){let W=Math.max(1,Math.min($.context.budget.messages.targetTokens,$.context.budget.messages.triggerTokens)),{compactable:Z,protectedTail:Q}=mC($.context.messages);if(Z.length===0)return;let J=uG(Q,$.estimateMessageTokens),j=Math.max(1,W-J),X=yC(Z,$.estimateMessageTokens),{candidates:Y}=X;if(Y.length===0)return;let V=X.totalTokens,B=V;B=HW(Y,(U)=>U.message.role==="assistant"&&!U.isLastAssistant,j,B),B=HW(Y,(U)=>U.message.role==="user"&&!U.isFirstUser&&!U.isLastUser,j,B),B=HW(Y,(U)=>U.message.role==="assistant"&&U.isLastAssistant,j,B),B=HW(Y,(U)=>U.message.role==="user"&&U.isLastUser&&!U.isFirstUser,j,B),B=xC(Y,j,B,$.context.budget.messages.triggerTokens,$.estimateMessageTokens);let H=[...Y.map((U)=>U.message),...Q],G=k6({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(!gC($.context.messages,K))return;let F=V+J,A=uG(K,$.estimateMessageTokens),D=G.actions.filter((U)=>U.reason==="over_budget"||U.reason==="tool_pair_boundary").length;return $.logger?.debug("Performed basic compaction",{messagesBefore:$.context.messages.length,messagesAfter:K.length,messagesRemoved:$.context.messages.length-K.length,tokensBefore:F,tokensAfter:A,budgetStatus:G.status,budgetActions:D,budgetWarnings:G.warnings.map((U)=>U.code),targetTokens:W,maxInputTokens:$.context.budget.request.maxInputTokens}),{messages:K,budget:{policyIntent:"basic_compaction_projection",actionCount:D,warningCount:G.warnings.length,liveTailHandling:G.liveTailHandling}}}var cC=0.5;function aG($){try{return JSON.stringify($).length}catch{return String($).length}}function uC($){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=aG(j.content);W+=1,Z+=X,Q=Math.max(Q,X)}}return{toolResultCount:W,toolResultSerializedChars:Z,maxToolResultSerializedChars:Q}}var dC={basic:({context:$,estimateMessageTokens:W,logger:Z})=>iG({context:$,estimateMessageTokens:W,logger:Z}),agentic:({context:$,providerConfig:W,compaction:Z,estimateMessageTokens:Q,logger:J})=>cG({context:$,providerConfig:W,summarizer:Z?.summarizer,preserveRecentTokens:Math.min(Z?.preserveRecentTokens??wG,$.budget.messages.targetTokens),estimateMessageTokens:Q,logger:J})};function lC($){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 pC($){let W=$.messagePairCount>=5&&typeof $.modelMaxTokens==="number"&&Number.isFinite($.modelMaxTokens)&&$.modelMaxTokens<$.maxInputTokens?Math.floor($.maxInputTokens*cC):Math.floor($.triggerTokens*EG),Z=Math.max(1,$.triggerTokens-1);return Math.max(1,Math.min(W,$.maxInputTokens,Z))}function nG($,W){return Math.max(1,Math.floor($-W))}function rC($){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 Q3($,W={}){let Z=$.compaction;if(Z?.enabled!==!0)return;let Q=$.providerConfig??{providerId:$.providerId,modelId:$.modelId},J=yG(),j=Z?.strategy??"basic",X=dC[j],Y=W.mode??"auto",V=Z?.compact?"custom":j;return async(B)=>{let H=B.apiMessages.reduce((d,g)=>d+J(g),0),G=vC({systemPrompt:B.systemPrompt,messages:B.apiMessages,tools:B.tools}),K=B.messages.reduce((d,g)=>d+J(g),0),F=Math.max(0,G-H),A=m6({maxInputTokens:B.model.info?.maxInputTokens,contextWindow:B.model.info?.contextWindow})??NG,D=A*Z2,U=nG(D,F),f=G>=D;if($.logger?.debug("Context compaction diagnostics",{mode:Y,strategy:j,iteration:B.iteration,providerId:$.providerId,modelId:$.modelId,requestInputTokens:G,apiMessageTokens:H,messageInputTokens:K,requestOverheadTokens:F,maxInputTokens:A,requestTriggerTokens:D,messageTriggerTokens:U,thresholdRatio:Z2,shouldCompact:f,messageCount:B.messages.length,apiMessageCount:B.apiMessages.length,apiMessagesJsonChars:aG(B.apiMessages),...uC(B.apiMessages)}),Y==="auto"&&!f)return;let _,q;if(Y==="auto")_=pC({maxInputTokens:A,modelMaxTokens:B.model.info?.maxTokens,triggerTokens:D,messagePairCount:rC(B.messages)}),q=nG(_,F);else q=lC({messageInputTokens:K,messageTriggerTokens:U,manualTargetRatio:W.manualTargetRatio}),_=F+q;let O={agentId:B.agentId,conversationId:B.conversationId,parentAgentId:B.parentAgentId,iteration:B.iteration,messages:B.messages,model:B.model,mode:Y,budget:{request:{inputTokens:G,maxInputTokens:A,triggerTokens:D,targetTokens:_,overheadTokens:F,thresholdRatio:Z2,utilizationRatio:A>0?G/A:0},messages:{inputTokens:K,triggerTokens:U,targetTokens:q}}},T=Y==="manual"?"manual_compaction":"auto_compaction";B.emitStatusNotice?.(Y==="manual"?"compacting":"auto-compacting",{kind:T,reason:T,phase:"started",iteration:B.iteration,triggerTokens:D,targetTokens:_,maxInputTokens:A,messageTargetTokens:q});let L=B.messages.length,N=Date.now(),M=Z?.compact?await Z.compact(O):await X({context:O,providerConfig:{...Q,abortSignal:B.abortSignal},compaction:Z,estimateMessageTokens:J,logger:$.logger}),u=Date.now()-N,b=$.sessionId??B.conversationId,E={agentId:B.agentId,conversationId:B.conversationId,parentAgentId:B.parentAgentId??void 0};if(M?.messages){let d=M.messages.reduce((U1,z$)=>U1+J(z$),0),g=F+d;if($.logger?.log("Context compaction completed",{severity:"info",strategy:j,maxInputTokens:A,messageInputTokens:K,apiInputTokens:H,requestInputTokens:G,requestOverheadTokens:F,afterMessageTokens:d,afterRequestTokens:g,tokensSaved:G-g,utilizationBefore:`${(G/A*100).toFixed(1)}%`,utilizationAfter:`${(g/A*100).toFixed(1)}%`,thresholdTrigger:`${(Z2*100).toFixed(1)}%`,messagesBefore:L,messagesAfter:M.messages.length,messagesRemoved:L-M.messages.length}),B.emitStatusNotice?.(Y==="manual"?"compacted":"auto-compacted",{kind:T,reason:T,phase:"completed",iteration:B.iteration,tokensBefore:G,tokensAfter:g,messagesBefore:L,messagesAfter:M.messages.length,maxInputTokens:A}),y9($.telemetry,{ulid:b,strategy:V,mode:Y,messagesBefore:L,messagesAfter:M.messages.length,messagesRemoved:L-M.messages.length,tokensBefore:G,tokensAfter:g,tokensSaved:G-g,triggerTokens:D,maxInputTokens:A,thresholdRatio:Z2,durationMs:u,provider:$.providerId,modelId:$.modelId,...E}),M.budget&&(M.budget.actionCount>0||M.budget.warningCount>0))jj($.telemetry,{ulid:b,strategy:V,mode:Y,policyIntent:M.budget.policyIntent,actionCount:M.budget.actionCount,warningCount:M.budget.warningCount,liveTailHandling:M.budget.liveTailHandling,provider:$.providerId,modelId:$.modelId,...E}),B.emitStatusNotice?.("compaction-budget-adjusted",{kind:"compaction_budget_emergency",reason:"compaction_budget_emergency",iteration:B.iteration,policyIntent:M.budget.policyIntent,actionCount:M.budget.actionCount,warningCount:M.budget.warningCount})}else B.emitStatusNotice?.(Y==="manual"?"compaction-skipped":"auto-compaction-skipped",{kind:T,reason:T,phase:"skipped",iteration:B.iteration,maxInputTokens:A}),h9($.telemetry,{ulid:b,strategy:V,mode:Y,reason:"no_result",tokensBefore:G,triggerTokens:D,maxInputTokens:A,thresholdRatio:Z2,durationMs:u,provider:$.providerId,modelId:$.modelId,...E});return M}}function J3($){return async(W)=>{let Z=$.getState?.(),Q=Z?N6(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=a5({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=a5({sourceMessages:W.messages,compactedMessages:J.messages,conversationId:W.conversationId,systemPrompt:J.systemPrompt});await $.saveState?.(j)}return J}}F0();function N0(){return{inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0}}function T0($,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 GW($){let W=N0();for(let Z of $)W=T0(W,Z);return W}function Z8($){return typeof $==="number"&&Number.isFinite($)?$:0}function KW($){let W=N0();for(let Z of $){let Q=Z.metrics;if(!Q)continue;W=T0(W,{inputTokens:Z8(Q.inputTokens),outputTokens:Z8(Q.outputTokens),cacheReadTokens:Z8(Q.cacheReadTokens),cacheWriteTokens:Z8(Q.cacheWriteTokens),totalCost:Z8(Q.cost)})}return W}function iC($){for(let W=$.length-1;W>=0;W-=1){let Z=$[W];if(Z?.role!=="assistant")continue;let Q=Z8(Z.metrics?.inputTokens);return Q>0?Q:void 0}return}function nC($){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 j3($){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 b1($){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 aC($){return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheWriteTokens:$.cacheWriteTokens,cacheReadTokens:$.cacheReadTokens,totalCost:$.cost}}function oC($){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 X3($,W,Z){let{sessionId:Q,config:J,liveSession:j,emit:X}=$,Y=J.telemetry,V=j?.runtime.teamRuntime,B=Z?.isPrimaryAgentEvent??!0,H=j3(W),G=b1({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=nC(W.input);if(K)R9(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(T8(Y,{ulid:Q,tool:K,autoApproved:void 0,success:F,modelId:J.modelId,provider:J.providerId,...G}),!F&&(K==="editor"||K==="apply_patch"))N9(Y,{ulid:Q,modelId:J.modelId,provider:J.providerId,errorType:W.error,...G})}if(W.type==="notice"&&W.reason==="api_error")V4(Y,{ulid:Q,model:J.modelId,provider:J.providerId,errorMessage:W.message,...G});if(W.type==="error")V4(Y,{ulid:Q,model:J.modelId,provider:J.providerId,errorMessage:W.error?.message??"unknown error",...G});if(W.type==="usage"&&j?.turnUsageBaseline){let K=aC(W);if(B){j.turnPrimaryUsage=T0(j.turnPrimaryUsage??N0(),K);let A=T0(j.turnUsageBaseline,j.turnPrimaryUsage);$.usageBySession.set(Q,A),L8(Y,{ulid:Q,provider:J.providerId,model:J.modelId,source:"assistant",mode:J.mode,...G}),q9(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=oC({isPrimaryAgentEvent:B,overrides:Z,eventMetadata:H}),D=j.turnUsageByAgent??new Map;j.turnUsageByAgent=D,D.set(A,T0(D.get(A)??N0(),K))}let F=T0(j.turnPrimaryUsage??N0(),GW(j.turnUsageByAgent?.values()??[]));$.aggregateUsageBySession.set(Q,T0(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:iB(W),ts:Date.now()}})}function y1($){return $.workspaceRoot??$.cwd}import{resolveProviderRequestHeaders as MP}from"@cline/llms";import{hasRuntimeConfigExtension as RP}from"@cline/shared";import{spawn as jP}from"node:child_process";import{appendFileSync as XP,readFileSync as YP}from"node:fs";import{join as VP}from"node:path";import{augmentNodeCommandForDebug as eG,withResolvedClineBuildEnv as K3}from"@cline/shared";import{ensureHookLogDir as sG}from"@cline/shared/storage";function FW($,W){if(!W)return;return{name:$,manifest:{capabilities:["hooks"]},hooks:W}}import{existsSync as sC,readdirSync as tC}from"node:fs";import{basename as eC,extname as $P,join as WP}from"node:path";import{HOOKS_CONFIG_DIRECTORY_NAME as oG,resolveHooksConfigSearchPaths as ZP}from"@cline/shared/storage";function Y3($){return ZP($)}var AW;((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"})(AW||={});var V3={["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"},QP=new Map(Object.values(AW).map(($)=>[$.toLowerCase(),$])),JP=new Set(["",".sh",".bash",".zsh",".js",".mjs",".cjs",".ts",".mts",".cts",".py",".ps1"]);function B3($){let W=$P($).toLowerCase();if(!JP.has(W))return;let Z=eC($,W).trim().toLowerCase();return QP.get(Z)}function Q8($){let W=[],Z=new Set,Q=Y3($).filter((J)=>sC(J));for(let J of Q)try{for(let j of tC(J,{withFileTypes:!0})){if(!j.isFile())continue;let X=B3(j.name);if(!X)continue;let Y=WP(J,j.name);if(Z.has(Y))continue;Z.add(Y),W.push({fileName:X,hookEventName:V3[X],path:Y})}}catch{}return W.sort((J,j)=>J.path.localeCompare(j.path))}function DW($){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 UW($,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 BP($,W){if(!W)return $;if(!$)return{...W};let Z=[$.context,W.context].filter((J)=>typeof J==="string"&&J.length>0).join(`
|
|
581
|
+
`),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 HP($){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 H3($){let W=String($??"").toLowerCase();return W.includes("cancel")||W.includes("abort")||W.includes("interrupt")}function O0($,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 GP($){let W=$.trim();if(!W)return{};let Q=W.split(`
|
|
582
|
+
`).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 KP($,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 $K($,W){if(W.command.length===0)throw Error("runHookCommand requires non-empty command");try{return await tG($,W)}catch(Z){let Q=UP(W.command,process.platform,Z);if(!Q)throw Z;return await tG($,{...W,command:Q})}}async function tG($,W){let Z=eG(W.command,{env:W.env,debugRole:"hook"}),Q=jP(Z[0],Z.slice(1),{cwd:W.cwd,env:K3(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 KP(Q,X),W.detached){Q.unref();return}if(!Q.stdout||!Q.stderr)throw Error("hook command failed to create stdout/stderr");let Y="",V="",B=!1,H;Q.stdout.on("data",(K)=>{Y+=K.toString()}),Q.stderr.on("data",(K)=>{V+=K.toString()});let G=new Promise((K)=>{if((W.timeoutMs??0)>0)H=setTimeout(()=>{B=!0,Q.kill("SIGKILL")},W.timeoutMs);Q.once("close",(F)=>{if(H)clearTimeout(H);let{parsedJson:A,parseError:D}=GP(Y);K({exitCode:F,stdout:Y,stderr:V,parsedJson:A,parseError:D,timedOut:B})})});return await Promise.race([G,j])}function FP($){try{let Z=YP($,"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 AP($){return!!($&&typeof $==="object"&&("code"in $)&&$.code==="ENOENT")}function UP($,W=process.platform,Z){if(W!=="win32"||!AP(Z))return;if($[0]!=="py"||$[1]!=="-3")return;return["python",...$.slice(2)]}function WK($){if($.length===0)return;let[W,...Z]=$,Q=W.replace(/\\/g,"/").toLowerCase(),J=Q.split("/").at(-1)??Q;if(J==="env")return WK(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 DP($){let W=FP($);if(W&&W.length>0)return[...WK(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 eG(["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 _P($){let W={};for(let Z of Q8($)){if(!Z.hookEventName)continue;let Q=Z.hookEventName,J=W[Q]??[];J.push(DP(Z.path)),W[Q]=J}return W}async function fP($){let W;for(let Z of $.commands){let Q=Z.join(" ");try{let J=await $K($.payload,{command:Z,cwd:$.cwd,env:K3(process.env),detached:!1,timeoutMs:$.timeoutMs});if(J?.timedOut){UW($.logger,`hook command timed out: ${Q}`);continue}if(J?.parseError){UW($.logger,`hook command returned invalid JSON control output: ${Q} (${J.parseError})`);continue}W=BP(W,HP(J?.parsedJson))}catch(J){UW($.logger,`hook command failed: ${Q}`,J)}}return W}function Q2($){for(let W of $.commands){let Z=W.join(" ");$K($.payload,{command:W,cwd:$.cwd,env:K3(process.env),detached:!0}).catch((Q)=>{UW($.logger,`hook command failed: ${Z}`,Q)})}}function K$($){return{agentId:$.agentId,conversationId:$.conversationId??$.runId??$.agentId,parentAgentId:$.parentAgentId??null}}function G3($,W){return{...K$($.snapshot),userMessage:W}}function ZK($){return{...K$($.snapshot),iteration:$.snapshot.iteration,call:{id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:$.input}}}function QK($){return{...K$($.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 JK($){return $.filter((W)=>W.type==="text"&&typeof W.text==="string").map((W)=>W.text).join("")}function LP($){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 _W($){let W={cwd:$.workspacePath,workspacePath:$.workspacePath,rootSessionId:$.rootSessionId,workspaceInfo:$.workspaceInfo},Z=(Q)=>{let J=`${JSON.stringify({ts:new Date().toISOString(),...Q})}
|
|
583
|
+
`,X=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??VP(sG(),"hooks.jsonl");sG(X),XP(X,J,"utf8")};return{beforeRun:async(Q)=>{let J=G3(Q,"");Z({...O0(J,W),hookName:"agent_start",taskStart:{taskMetadata:{}}});return},beforeTool:async(Q)=>{let J=ZK(Q);Z({...O0(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:DW(J.call.input)}});return},afterTool:async(Q)=>{let J=QK(Q);Z({...O0(J,W),hookName:"tool_result",iteration:J.iteration,tool_result:J.record,postToolUse:{toolName:J.record.name,parameters:DW(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=K$(Q);if(J.status==="completed"){Z({...O0(j,W),hookName:"agent_end",iteration:J.iterations,turn:{outputText:J.outputText,status:J.status},taskComplete:{taskMetadata:{}}});return}if(J.status==="aborted"||H3(J.error?.message)){Z({...O0(j,W),hookName:"agent_abort",reason:J.error?.message,taskCancel:{taskMetadata:{}}});return}if(J.error)Z({...O0(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=G3({snapshot:Q.snapshot},JK(Q.message.content));Z({...O0(J,W),hookName:"prompt_submit",userPromptSubmit:{prompt:J.userMessage,attachments:[]}})}}}function F3($){let W=_P($.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;Q2({commands:F,cwd:$.cwd,logger:$.logger,payload:K==="agent_resume"?{...O0(G,$),hookName:K,taskResume:{taskMetadata:{},previousState:{}}}:{...O0(G,$),hookName:K,taskStart:{taskMetadata:{}}}})},J=async(G)=>{let K=W.prompt_submit??[];if(K.length>0)Q2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...O0(G,$),hookName:"prompt_submit",userPromptSubmit:{prompt:G.userMessage,attachments:[]}}})},j=async(G)=>{let K=W.tool_call??[];if(K.length===0)return;return fP({commands:K,cwd:$.cwd,logger:$.logger,timeoutMs:$.toolCallTimeoutMs??120000,payload:{...O0(G,$),hookName:"tool_call",iteration:G.iteration,tool_call:{id:G.call.id,name:G.call.name,input:G.call.input},preToolUse:{toolName:G.call.name,parameters:DW(G.call.input)}}})},X=async(G)=>{let K=W.tool_result??[];if(K.length===0)return;Q2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...O0(G,$),hookName:"tool_result",iteration:G.iteration,tool_result:G.record,postToolUse:{toolName:G.record.name,parameters:DW(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;Q2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...O0(G,$),hookName:"agent_end",iteration:G.iteration,turn:G.turn,taskComplete:{taskMetadata:{}}}})},V=async(G)=>{let K=W.agent_error??[];if(K.length===0)return;Q2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...O0(G,$),hookName:"agent_error",iteration:G.iteration,error:{name:G.error.name,message:G.error.message,stack:G.error.stack}}})},B=async(G)=>{if(H3(G.reason)){let F=W.agent_abort??[];if(F.length>0)Q2({commands:F,cwd:$.cwd,logger:$.logger,payload:{...O0(G,$),hookName:"agent_abort",reason:G.reason,taskCancel:{taskMetadata:{}}}})}let K=W.session_shutdown??[];if(K.length===0)return;Q2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...O0(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(K$(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(G3({snapshot:G.snapshot},JK(G.message.content)))}}if((W.tool_call?.length??0)>0)H.beforeTool=async(G)=>{let K=await j(ZK(G));return LP(K)};if((W.tool_result?.length??0)>0)H.afterTool=async(G)=>{await X(QK(G));return};if((W.agent_end?.length??0)>0)H.afterRun=async({snapshot:G,result:K})=>{if(K.status!=="completed")return;await Y({...K$(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"||H3(A.error?.message)){await B({...K$(F),reason:A.error?.message});return}if(A.error)await V({...K$(F),iteration:A.iterations,error:A.error})}}return H}function fW($){return FW("core.hook_config_files",F3($))}function J2($,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 u6($){let W=$.filter((Z)=>Z!==void 0);if(W.length===0)return;return{beforeRun:J2(W,"beforeRun"),afterRun:J2(W,"afterRun"),beforeModel:J2(W,"beforeModel"),afterModel:J2(W,"afterModel"),beforeTool:J2(W,"beforeTool"),afterTool:J2(W,"afterTool"),onEvent:J2(W,"onEvent")}}import{z as F$}from"zod";var d6=O2;var jK=F$.object({settings:O2,updatedAt:F$.string().datetime(),tokenSource:F$.enum(["manual","oauth","migration"]).default("manual")}),LW=F$.object({version:F$.literal(1),lastUsedProvider:F$.string().min(1).optional(),providers:F$.record(F$.string(),jK)});function J8(){return{version:1,providers:{}}}$1();import{upsertWorkspaceInfo as TP,WorkspaceManifestSchema as A3}from"@cline/shared";class TW{manifest;listeners=new Set;constructor($){this.manifest=A3.parse($??{workspaces:{}})}async addWorkspacePath($){let W=await I5($);return this.manifest=TP(this.manifest,W),this.emit({type:"workspace_added",workspace:W}),W}async switchWorkspace($){let W=e1($),Z=this.manifest.workspaces[W];if(Z)return this.manifest=A3.parse({...this.manifest,currentWorkspacePath:W}),this.emit({type:"workspace_switched",workspace:Z}),Z;let Q=await this.addWorkspacePath(W);return this.manifest=A3.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=e1($);return this.manifest.workspaces[W]}listWorkspaces(){return Object.values(this.manifest.workspaces)}getManifest(){return this.manifest}emit($){for(let W of this.listeners)W($)}}F0();import{createHash as OP}from"node:crypto";var XK=new Set,YK=new Set;function zP($){return OP("sha256").update($).digest("hex")}function qP($){if($.vcsTypes&&$.vcsTypes.length>0)return $.vcsTypes;return[$.vcsType==="git"?"git":"none"]}function VK($){if(!$.telemetry)return;let W=zP($.rootPath),Z=$.rootCount??1;if(!XK.has(W))XK.add(W),f9($.telemetry,{root_count:Z,vcs_types:qP($),init_duration_ms:$.durationMs,feature_flag_enabled:$.featureFlagEnabled??!0,is_remote_workspace:$.isRemoteWorkspace});if($.initError&&!YK.has(W)){YK.add(W);let Q=Error($.initError.message);Q.name=$.initError.errorType||"Error",L9($.telemetry,Q,{fallback_to_single_root:!0,workspace_count:Z})}}function NP($){return`${$.pluginName??$.pluginPath}: ${$.message}`}function EP($,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(NP).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 wP($,W){let Z=typeof $.thinking==="boolean",Q=typeof $.reasoningEffort==="string";if(!Z&&!Q)return W;return{...W??{},...Z?{enabled:$.thinking}:{},...Q?{effort:$.reasoningEffort}:{}}}function BK($,W){return RP($,W)}function CP($){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 PP($,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=MP({providerId:$.providerId,sessionId:W,source:Z,defaultSource:U0.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:a2,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:wP($,X?.reasoning),modelCatalog:Y},G={...f1(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 HK($){let{input:W,sessionId:Z,providerSettingsManager:Q,defaultTelemetry:J,defaultCapabilities:j,defaultToolPolicies:X,defaultFetch:Y,onPluginEvent:V,onTeamEvent:B,createSubAgentLifecycleCallbacks:H,createSpawnTool:G,localRuntime:K,readSessionMetadata:F,writeSessionMetadata:A}=$,D=y1(W.config),{modelCatalogDefaults:U,userInstructionService:f,configExtensions:_,onTeamRestored:q,...O}=K??{},T=Object.keys(O).length>0?O:void 0,{workspaceInfo:L,workspaceMetadata:N,gitState:M,durationMs:u,vcsType:b,initError:E}=await CB(D),d=T?.extensionContext,g={...d??{},workspace:{...L,...d?.workspace??{}},session:{...d?.session??{},sessionId:Z},logger:d?.logger??T?.logger,telemetry:d?.telemetry??T?.telemetry??J};VK({telemetry:g.telemetry,rootPath:L.rootPath,workspaceInfo:L,rootCount:1,vcsType:b,durationMs:u,initError:E,featureFlagEnabled:!0});let U1=fW({cwd:W.config.cwd,workspacePath:D,rootSessionId:Z,logger:T?.logger,workspaceInfo:L}),z$=rB(T?.hooks)?void 0:_W({rootSessionId:Z,workspacePath:D,workspaceInfo:L}),K2=u6([T?.hooks,z$]),h0;if(BK(_,"plugins"))try{h0=await g4({pluginPaths:T?.pluginPaths,workspacePath:D,cwd:W.config.cwd,onEvent:V,providerId:W.config.providerId,modelId:W.config.modelId,workspaceInfo:L,session:g.session,client:g.client,user:g.user,logger:g.logger,telemetry:g.telemetry,automation:g.automation}),EP(h0.failures,h0.warnings,T?.logger)}catch(f8){let A2=f8 instanceof Error?f8.message:String(f8);T?.logger?.log?.(`plugin loading failed; continuing without plugins (${A2})`)}let g0=J7(U1?[U1]:void 0,J7(T?.extensions,FZ(h0?.extensions))),F2=BK(_,"plugins")?S$(h0?.pluginPaths??[]):void 0,q0={...W.config,...T??{},sessionId:Z,hooks:K2,extensions:g0,extensionContext:g,telemetry:g.telemetry},e0=PP(q0,Z,W.source,Q,U,Y),w0=u6([q0.hooks,q0.checkpoint?.enabled===!0?iH({cwd:q0.cwd,sessionId:Z,logger:q0.logger,createCheckpoint:q0.checkpoint?.createCheckpoint,initialRunCount:CP(W.initialMessages),readSessionMetadata:F,writeSessionMetadata:A}):void 0]),K0={...q0,providerConfig:e0,workspaceMetadata:N,hooks:w0},x=W.toolPolicies??q0.toolPolicies??X,m0=S0(j,W.capabilities),C=m0?.requestToolApproval,o=m0?.toolExecutors,D0=H?.(K0),C0=new TW({currentWorkspacePath:L.rootPath,workspaces:{[L.rootPath]:L}});return{effectiveInput:W,config:K0,providerConfig:e0,workspaceMetadata:N,workspaceInfo:L,gitState:M,extensions:g0,hooks:w0,toolPolicies:x,requestToolApproval:C,pluginSandboxShutdown:h0?.shutdown,runtimeBuilderInput:{config:K0,hooks:w0,extensions:g0,onTeamEvent:B,createSpawnTool:G,onTeamRestored:q,onSubAgentEvent:D0?.onSubAgentEvent,onSubAgentStart:D0?.onSubAgentStart,onSubAgentEnd:D0?.onSubAgentEnd,userInstructionService:f,pluginSkillDirectories:F2,configExtensions:_,toolExecutors:o,toolPolicies:x,workspaceManager:C0,logger:K0.logger,telemetry:K0.telemetry,requestToolApproval:C}}}import{resolveDocumentsExtensionPath as SP}from"@cline/shared/storage";F0();function GK($,W,Z,Q,J){if(Z)z9($.telemetry,{ulid:W,apiProvider:$.providerId,...J});else O9($.telemetry,{ulid:W,apiProvider:$.providerId,...J});bP($.telemetry,{workspacePath:Q})}function bP($,W){let Z=SP("Hooks"),Q=Q8(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())b9($,j,X.global,X.workspace)}function KK($,W){for(let Z of W.mentions)P9($,Z,W.matchedFiles.includes(Z)?1:0,"file",!W.matchedFiles.includes(Z));for(let Z of W.matchedFiles)w9($,"file",Z.length);for(let Z of W.ignoredMentions)C9($,"file","not_found",Z)}import{chmodSync as wK,existsSync as z3,mkdirSync as fS,readFileSync as LS,renameSync as TS,rmSync as OS,writeFileSync as zS}from"node:fs";import{basename as CK,dirname as q3}from"node:path";import{resolveProviderSettingsPath as qS}from"@cline/shared/storage";import{existsSync as yP,mkdirSync as hP,readFileSync as kP,renameSync as IP,rmSync as xP,writeFileSync as gP}from"node:fs";import{mkdir as mP,readFile as vP,rename as cP,rm as uP,writeFile as dP}from"node:fs/promises";import{dirname as D3,join as lP}from"node:path";import*as Y0 from"@cline/llms";import{ApiFormatSchema as pP,ModelCapabilitySchema as rP,ProviderCapabilitySchema as iP,ProviderClientSchema as nP,ProviderProtocolSchema as aP}from"@cline/shared";import{z as n}from"zod";var U3=n.number().finite().positive().optional().catch(void 0),l6=n.number().finite().nonnegative().optional().catch(void 0),oP=n.object({id:n.string().optional(),name:n.string().optional(),maxTokens:U3,contextWindow:U3,maxInputTokens:U3,capabilities:n.array(rP).optional(),supportsVision:n.boolean().optional(),supportsAttachments:n.boolean().optional(),supportsReasoning:n.boolean().optional(),inputPrice:l6,outputPrice:l6,cacheReadsPrice:l6,cacheWritesPrice:l6,temperature:l6,apiFormat:pP.optional(),isR1FormatRequired:n.boolean().optional()}).passthrough(),sP=n.object({name:n.string(),baseUrl:n.string(),defaultModelId:n.string().optional(),protocol:aP.optional(),client:nP.optional(),capabilities:n.array(iP).optional(),modelsSourceUrl:n.string().optional()}).passthrough(),FK=n.object({provider:sP.optional(),models:n.record(n.string(),oP).optional()}).passthrough(),AK=n.object({version:n.literal(1),providers:n.record(n.string(),FK)}),tP=n.object({version:n.literal(1),providers:n.record(n.string(),n.unknown())}),OW=new Set;function UK($){return $.split(/[-_]/).filter(Boolean).map((W)=>W.charAt(0).toUpperCase()+W.slice(1)).join(" ")}function A$($){return lP(D3($.getFilePath()),"models.json")}function zW(){return{version:1,providers:{}}}function DK($){let W=tP.safeParse($);if(!W.success)return s("models.json content is not a valid models file envelope; starting from an empty registry"),zW();let Z={};for(let[Q,J]of Object.entries(W.data.providers)){let j=FK.safeParse(J);if(j.success)Z[Q]=j.data;else s(`models.json: dropping invalid entry for provider=${Q}`)}return{version:1,providers:Z}}function qW($){if(!yP($))return zW();try{let W=kP($,"utf8");return DK(JSON.parse(W))}catch{s(`models.json at ${$} exists but is unreadable or invalid JSON; treating as an empty registry`)}return zW()}async function j8($){try{let W=await vP($,"utf8");return DK(JSON.parse(W))}catch(W){if(W?.code!=="ENOENT")s(`models.json at ${$} exists but is unreadable or invalid JSON; treating as an empty registry`)}return zW()}function _3($,W){hP(D3($),{recursive:!0});let Z=AK.parse(W),Q=`${$}.${process.pid}.tmp`;try{gP(Q,`${JSON.stringify(Z,null,2)}
|
|
584
|
+
`,"utf8"),IP(Q,$)}catch(J){throw xP(Q,{force:!0}),J}}async function MW($,W){await mP(D3($),{recursive:!0});let Z=AK.parse(W),Q=`${$}.${process.pid}.tmp`;try{await dP(Q,`${JSON.stringify(Z,null,2)}
|
|
585
|
+
`,"utf8"),await cP(Q,$)}catch(J){throw await uP(Q,{force:!0}).catch(()=>{}),J}}function _K($,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 fK($){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 LK($){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 eP($){return $!=null&&typeof $.name==="string"&&typeof $.baseUrl==="string"}function TK($,W){return $??W??"openai-chat"}function OK($,W,Z){return $??Z??(W==="openai-responses"?"openai":"openai-compatible")}function zK($,W,Z){let Q=new Set(W?.capabilities??Z??[]);if(W?.supportsVision!==void 0)if(W.supportsVision)Q.add("images");else Q.delete("images");if(W?.supportsAttachments!==void 0)if(W.supportsAttachments)Q.add("files");else Q.delete("files");if(W?.supportsReasoning!==void 0)if(W.supportsReasoning)Q.add("reasoning");else Q.delete("reasoning");let J=W?.isR1FormatRequired?"r1":W?.apiFormat,j=W?.inputPrice!==void 0||W?.outputPrice!==void 0||W?.cacheReadsPrice!==void 0||W?.cacheWritesPrice!==void 0;return{id:$,name:W?.name??$,...W?.maxTokens!==void 0?{maxTokens:W.maxTokens}:{},...W?.contextWindow!==void 0?{contextWindow:W.contextWindow}:{},...W?.maxInputTokens!==void 0?{maxInputTokens:W.maxInputTokens}:{},...Q.size>0?{capabilities:[...Q]}:{},...W?.temperature!==void 0?{temperature:W.temperature}:{},...J!==void 0?{apiFormat:J}:{},...j?{pricing:{...W?.inputPrice!==void 0?{input:W.inputPrice}:{},...W?.outputPrice!==void 0?{output:W.outputPrice}:{},...W?.cacheReadsPrice!==void 0?{cacheRead:W.cacheReadsPrice}:{},...W?.cacheWritesPrice!==void 0?{cacheWrite:W.cacheWritesPrice}:{}}}:{}}}function $S($,W){for(let[Z,Q]of Object.entries(W??{})){let J=Q.id?.trim()||Z.trim();if(!J)continue;Y0.registerModel($,J,zK(J,Q))}}function WS($,W,Z){return{...W??{},id:$,name:W?.name??$,capabilities:W?.capabilities??Z}}function ZS($){return Object.assign({},...Y0.resolveProviderModelCatalogKeys($).map((Z)=>Y0.getGeneratedModelsForProvider(Z)))}function QS($){let W=$.provider.trim();if(!W||Y0.isBuiltInProviderId(W))return;let Z=$.baseUrl?.trim();if(!Z)return;let Q=Y0.MODEL_COLLECTIONS_BY_PROVIDER_ID[W],J=ZS(W),j=LK($.capabilities),X=j.length>0?j:void 0,Y=$.model?.trim(),V={...J,...Q?.models??{}};if(Y)V[Y]=WS(Y,V[Y],X);let B=Object.keys(V).filter(Boolean),H=Y||B[0];if(!H)return;let G=TK($.protocol,Q?.provider.protocol),K=OK($.client,G,Q?.provider.client);Y0.registerProvider({provider:{id:W,name:Q?.provider.name??UK(W),description:Q?.provider.description,protocol:G,client:K,baseUrl:Z,modelsSourceUrl:Q?.provider.modelsSourceUrl,defaultModelId:H,capabilities:fK($.capabilities)??Q?.provider.capabilities,source:"file"},models:V})}function RW($){for(let W of Object.values($.providers))QS(W.settings)}function X8($,W){let Z=W.models??{};if(!eP(W.provider)){$S($,Z);return}let Q=LK(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=TK(W.provider.protocol,void 0),Y=OK(W.provider.client,X,void 0),V=Object.fromEntries(J.map(({id:B,model:H})=>[B,{...zK(B,H,Q.length>0?Q:void 0),status:"active"}]));Y0.registerProvider({provider:{id:$,name:W.provider.name.trim()||UK($),protocol:X,client:Y,baseUrl:W.provider.baseUrl,modelsSourceUrl:W.provider.modelsSourceUrl,defaultModelId:j,capabilities:fK(W.provider.capabilities),source:"file"},models:V})}function JS($,W,Z){let Q=Z?.models??{},J=new Set;for(let[Y,V]of Object.entries(W?.models??{})){if(Object.hasOwn(Q,Y))continue;let B=V.id?.trim()||Y.trim();if(B)J.add(B),Y0.unregisterModel($,B)}if(!Z)return;let j=Y0.getProviderCollectionSync($);X8($,Z);let X=Y0.getProviderCollectionSync($);if(j&&X&&X!==j){let Y=Object.fromEntries(Object.entries(j.models).filter(([V])=>!J.has(V)));Y0.registerProvider({...X,models:{...Y,...X.models}})}}function f3($){let W=A$($);if(OW.has(W))return;let Z=qW(W);for(let[Q,J]of Object.entries(Z.providers))X8(Q,J);OW.add(W)}async function qK($){let W=A$($);if(OW.has(W))return;let Z=await j8(W);for(let[Q,J]of Object.entries(Z.providers))X8(Q,J);OW.add(W)}import{existsSync as jS,readFileSync as XS}from"node:fs";import{dirname as YS,join as L3}from"node:path";import*as Y8 from"@cline/llms";import{resolveClineDataDir as VS}from"@cline/shared/storage";var NW="openai",NK=Y8.BUILT_IN_PROVIDER.OPENAI_COMPATIBLE,MK=128000;function EK($){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 P($){let W=$?.trim();return W?W:void 0}function BS($){return $==="credentials"?"iam":$}function RK($){if(!jS($))return;try{let W=XS($,"utf8"),Z=JSON.parse(W);if(Z&&typeof Z==="object"&&!Array.isArray(Z))return Z}catch{}return}function HS($){let W=$.dataDir??VS(),Z=$.globalStatePath??L3(W,"globalState.json"),Q=$.secretsPath??L3(W,"secrets.json"),J=RK(Z),j=RK(Q);if(!J&&!j)return;return{globalState:J??{},secrets:j??{}}}function T3($){if($===NW)return NK;return $}function GS($,W,Z,Q){let J=Z==="plan"?"planMode":"actMode",j=W===Q?P(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?P(typeof $[Y]==="string"?$[Y]:void 0):void 0)??j}function KS($,W,Z){let Q=Z==="plan"?$.planModeThinkingBudgetTokens:$.actModeThinkingBudgetTokens,J=[...W==="oca"?[$.actModeOcaReasoningEffort,$.planModeOcaReasoningEffort]:[],...W==="gemini"?[$.geminiActModeThinkingLevel,$.geminiPlanModeThinkingLevel]:[],$.actModeReasoningEffort,$.planModeReasoningEffort].map(P).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 FS($){let W=$["openai-codex-oauth-credentials"];if(!W)return;try{let Z=JSON.parse(W),Q=P(Z.access_token),J=P(Z.refresh_token),j=P(Z.accountId);if(!Q&&!J&&!j)return;return{...Q?{apiKey:Q}:{},auth:{...Q?{accessToken:Q}:{},...J?{refreshToken:J}:{},...j?{accountId:j}:{}}}}catch{return}}function AS($){let W=Y8.getGeneratedModelsForProvider($),Q=Y8.getProviderCollectionSync($)?.provider.defaultModelId;if(Q&&W[Q])return Q;return Object.keys(W)[0]??void 0}function US($,W,Z,Q){let J=T3($),j=P(Q==="plan"?W.planModeApiProvider:W.actModeApiProvider),X=GS(W,$,Q,j)??AS(J),Y=KS(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,FS(Z));if($==="cline")try{let f=P(Z["cline:clineAccountId"]);if(f)H.auth={...H.auth??{},...EK(f)}}catch{}if($===NW&&W.openAiHeaders)H.headers=W.openAiHeaders;if($==="bedrock"){let f=BS(W.awsAuthentication),_=f==="profile"||W.awsUseProfile===!0;H.aws={accessKey:P(Z.awsAccessKey),secretKey:P(Z.awsSecretKey),sessionToken:P(Z.awsSessionToken),region:P(W.awsRegion),authentication:f,profile:_?P(W.awsProfile):void 0,usePromptCache:W.awsBedrockUsePromptCache,useCrossRegionInference:W.awsUseCrossRegionInference,useGlobalInference:W.awsUseGlobalInference,endpoint:P(W.awsBedrockEndpoint),customModelBaseId:P(Q==="plan"?W.planModeAwsBedrockCustomModelBaseId:W.actModeAwsBedrockCustomModelBaseId)}}if($==="vertex")H.gcp={projectId:P(W.vertexProjectId),region:P(W.vertexRegion)};if($===NW&&(W.azureApiVersion||W.azureIdentity!==void 0))H.azure={apiVersion:P(W.azureApiVersion),useIdentity:W.azureIdentity};if($==="sapaicore"){let f=W.sapAiCoreUseOrchestrationMode??!0;H.sap={clientId:P(Z.sapAiCoreClientId),clientSecret:P(Z.sapAiCoreClientSecret),tokenUrl:P(W.sapAiCoreTokenUrl),resourceGroup:P(W.sapAiResourceGroup),deploymentId:f?void 0:P(Q==="plan"?W.planModeSapAiCoreDeploymentId:W.actModeSapAiCoreDeploymentId),useOrchestrationMode:f}}if($==="oca"){H.oca={mode:W.ocaMode};let f=P(Z.ocaRefreshToken);if(f)H.auth={...H.auth??{},refreshToken:f}}if($==="qwen")H.apiLine=W.qwenApiLine;if($==="moonshot")H.apiLine=W.moonshotApiLine;if($==="zai")H.apiLine=W.zaiApiLine;if($==="minimax")H.apiLine=W.minimaxApiLine;let G={anthropic:W.anthropicBaseUrl,openai:W.openAiBaseUrl,ollama:W.ollamaBaseUrl,lmstudio:W.lmStudioBaseUrl,litellm:W.liteLlmBaseUrl,gemini:W.geminiBaseUrl,requesty:W.requestyBaseUrl,asksage:W.asksageApiUrl,dify:W.difyBaseUrl,oca:W.ocaBaseUrl,aihubmix:W.aihubmixBaseUrl,sapaicore:W.sapAiCoreBaseUrl},K=P(B[$]),F=P(G[$]),A={provider:J,...K?{apiKey:K}:{},...X?{model:X}:{},...F?{baseUrl:F}:{},...Y?{reasoning:Y}:{},...V?{timeout:V}:{},...H},D=d6.safeParse(A);if(!D.success)return;return Object.keys(A).filter((f)=>f!=="provider").length>0?D.data:void 0}function DS($,W){if($!==NK)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:MK,maxInputTokens:MK,capabilities:["streaming","tools","images"]}}}}function _S($,W){let Z=new Set;for(let J of[$.actModeApiProvider,$.planModeApiProvider]){let j=P(J);if(j)Z.add(j)}if(P(W.apiKey))Z.add("anthropic");if(P(W.openRouterApiKey))Z.add("openrouter");if(P(W.openAiApiKey))Z.add(NW);if(P(W.openAiNativeApiKey))Z.add("openai-native");if(P(W["openai-codex-oauth-credentials"]))Z.add("openai-codex");if(P(W.geminiApiKey))Z.add("gemini");if(P(W.ollamaApiKey))Z.add("ollama");if(P(W.awsAccessKey)||P(W.awsBedrockApiKey)||$.awsAuthentication!==void 0||$.awsUseProfile===!0||P($.awsProfile))Z.add("bedrock");if(P($.vertexProjectId)||P($.vertexRegion))Z.add("vertex");if(P(W.clineApiKey))Z.add("cline");let Q=EK(P(W["cline:clineAccountId"]));if(Q?.accessToken||Q?.refreshToken||Q?.accountId)Z.add("cline");if(P(W.ocaApiKey))Z.add("oca");if(P(W.sapAiCoreClientId)||P(W.sapAiCoreClientSecret)||P($.sapAiCoreTokenUrl)||P($.sapAiCoreBaseUrl)||P($.sapAiResourceGroup)||$.sapAiCoreUseOrchestrationMode!==void 0)Z.add("sapaicore");return Z}function O3($){let W=$.providerSettingsManager.read(),Z=HS($);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=_S(Q,J),Y=J8();Y.providers={...W.providers},Y.lastUsedProvider=W.lastUsedProvider;let V=new Date().toISOString(),B=0,H=L3(YS($.providerSettingsManager.getFilePath()),"models.json"),G=qW(H),K=0;for(let D of X){let U=T3(D);if(Y.providers[U])continue;let f=US(D,Q,J,j);if(!f)continue;Y.providers[U]={settings:f,updatedAt:V,tokenSource:"migration"},B+=1;let _=DS(U,f);if(_&&!G.providers[U])G.providers[U]=_,K+=1}if(B===0&&K===0)return{migrated:!1,providerCount:Object.keys(W.providers).length,lastUsedProvider:W.lastUsedProvider};let F=P(j==="plan"?Q.planModeApiProvider:Q.actModeApiProvider),A=F?T3(F):void 0;if(Y.lastUsedProvider=W.lastUsedProvider??(A&&Y.providers[A]?A:Object.keys(Y.providers)[0]),$.providerSettingsManager.write(Y),K>0)_3(H,G);return{migrated:B>0||K>0,providerCount:Object.keys(Y.providers).length,lastUsedProvider:Y.lastUsedProvider}}function MS(){return new Date().toISOString()}var RS="cline",NS="cline-pass";function ES($){if(CK($)!=="providers.json")return;let W=q3($);if(CK(W)!=="settings")return;return q3(W)}class U${filePath;dataDir;constructor($={}){if(this.filePath=$.filePath??qS(),this.dataDir=$.dataDir??ES(this.filePath),this.dataDir||!$.filePath)O3({providerSettingsManager:this,dataDir:this.dataDir});if(f3(this),RW(this.read()),z3(this.filePath))try{wK(this.filePath,384)}catch{}}getFilePath(){return this.filePath}read(){if(!z3(this.filePath))return J8();try{let $=LS(this.filePath,"utf8"),W=JSON.parse($),Z=LW.safeParse(W);if(Z.success){RW(Z.data);let Q=Z.data.providers.cline?.settings?.auth;return s(`providers.read providers=[${Object.keys(Z.data.providers).join(",")}] lastUsed=${Z.data.lastUsedProvider??"none"} clineAuthPresent=${!!Q?.accessToken} clineAccessTokenHash=${P0(Q?.accessToken)} clineRefreshTokenHash=${P0(Q?.refreshToken)}`),Z.data}}catch{}return J8()}write($){let W=LW.parse($),Z=q3(this.filePath);if(!z3(Z))fS(Z,{recursive:!0,mode:448});let Q=`${this.filePath}.${process.pid}.tmp`;try{zS(Q,`${JSON.stringify(W,null,2)}
|
|
586
|
+
`,{encoding:"utf8",mode:384}),TS(Q,this.filePath)}catch(J){throw OS(Q,{force:!0}),J}try{wK(this.filePath,384)}catch{}RW(W)}saveProviderSettings($,W={}){let Z=d6.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:MS(),tokenSource:Y}},lastUsedProvider:j?J:Q.lastUsedProvider};this.write(V);let B=Q.providers.cline?.settings?.auth,H=Z.provider==="cline"?Z.auth:V.providers.cline?.settings?.auth,G=!!B?.accessToken&&!H?.accessToken;return s(`providers.save providerId=${J} tokenSource=${Y} clineAuthWasPresent=${!!B?.accessToken} clineAuthIsPresent=${!!H?.accessToken} authDropped=${G}`),V}resolveProviderSettings($,W){let Z=$.providers[W]?.settings,J=A0(W)?.storageProviderId;if(!J||J===W)return Z;let j=$.providers[J]?.settings;if(!j)return Z;return d6.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===NS&&W.isClinePassEnabled===!1)return RS;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 f1(Z,W)}getLastUsedProviderConfig($={}){let W=this.getLastUsedProviderSettings($);if(!W)return;return f1(W,$)}async refreshCatalog(){try{await M4({})}catch{}}}F0();e2();import{execFile as wS}from"node:child_process";import{promisify as CS}from"node:util";var V8=CS(wS);function p6($){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 PK($,W){let Z=p6($).filter((J)=>J.runCount<=W),Q=Z.at(-1);return Q?{latest:Q,history:Z}:void 0}function EW($,W){return $.reduce((Z,Q)=>{if(Q.runCount>W)return Z;if(!Z||Q.runCount>Z.runCount)return Q;return Z},void 0)}function SK($,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 PS($,W){let Z=SK($,W);return $.slice(0,Z+1)}function bK($,W){let Z=SK($,W);return $.slice(0,Z)}function yK($){let W=$.checkpointRunCount;if(!Number.isInteger(W)||W<1)throw Error("checkpointRunCount must be a positive integer");let Z=EW(p6($.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:PS($.messages??[],W)}:{}}}async function hK($,W){if((await V8("git",["-C",$,"rev-parse","--is-inside-work-tree"],{windowsHide:!0})).stdout.trim()!=="true")throw Error(`${$} is not a git repository`);if(await V8("git",["-C",$,"cat-file","-e",`${W.ref}^{commit}`],{windowsHide:!0}),await V8("git",["-C",$,"reset","--hard"],{windowsHide:!0}),await V8("git",["-C",$,"clean","-fd"],{windowsHide:!0}),W.kind==="commit"){await V8("git",["-C",$,"reset","--hard",W.ref],{windowsHide:!0});return}await V8("git",["-C",$,"stash","apply",W.ref],{windowsHide:!0})}class J1 extends Error{code;constructor($,W){super(W);this.code=$;this.name="SessionVersioningError"}}function SS($){let W=$.sessionId.trim();if(!W)throw new J1("invalid_restore","sessionId is required");if(!$.restoreMessages&&!$.restoreWorkspace)throw new J1("invalid_restore","restore.messages or restore.workspace must be true");if($.restoreMessages&&$.requiresStart)throw new J1("invalid_restore","start is required when restore.messages is true");if(!Number.isInteger($.checkpointRunCount)||$.checkpointRunCount<1)throw new J1("invalid_restore","checkpointRunCount must be a positive integer");return W}class B8{async restoreCheckpoint($){let W=$.restore?.messages!==!1,Z=$.restore?.workspace!==!1,Q=SS({sessionId:$.sessionId,restoreMessages:W,restoreWorkspace:Z,requiresStart:$.start===void 0,checkpointRunCount:$.checkpointRunCount}),J=await $.getSession(Q);if(!J)throw new J1("session_not_found",`Session ${Q} not found`);let j=W?await $.readMessages(Q):void 0;if(W&&j?.length===0)throw new J1("session_messages_not_found",`No messages found for session ${Q}`);let X=yK({session:J,messages:j,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd,restoreMessages:W});if(Z)await($.applyWorkspaceCheckpoint??hK)(X.cwd,X.checkpoint);let Y=Y$({session:J,messages:j});if(!W)return{checkpoint:X.checkpoint,sourceSnapshot:Y};let V=PK(J,$.checkpointRunCount),B=$.restore?.omitCheckpointMessageFromSession?bK(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 J1("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??rH)(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:Y$({session:A,messages:B})}:{}}}}import{hasRuntimeConfigExtension as pS}from"@cline/shared";import{nanoid as rS}from"nanoid";$1();import{appendFileSync as bS,existsSync as H8,mkdirSync as kK,readdirSync as yS,readFileSync as IK,renameSync as hS,writeFileSync as kS}from"node:fs";import{join as M3}from"node:path";import{resolveTeamDataDir as IS}from"@cline/shared/storage";function xK(){return new Date().toISOString()}function R3($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}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 wW{teamDirPath;constructor($={}){this.teamDirPath=$.teamDir??IS()}init(){this.ensureTeamDir()}listTeamNames(){if(!H8(this.teamDirPath))return[];return yS(this.teamDirPath,{withFileTypes:!0}).filter(($)=>$.isDirectory()).filter(($)=>H8(this.statePath($.name))).map(($)=>$.name).sort()}readState($){let W=this.readEnvelope($);return W?.teamState?gK(W.teamState):void 0}readHistory($,W=200){let Z=this.historyPath($);if(!H8(Z))return[];return IK(Z,"utf8").split(`
|
|
587
|
+
`).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?gK(W.teamState):void 0,teammates:W?.teammates??[],interruptedRunIds:[]}}handleTeamEvent($,W){this.ensureTeamSubdir($),bS(this.historyPath($),`${JSON.stringify({ts:xK(),eventType:W.type,payload:W})}
|
|
588
|
+
`,"utf8")}persistRuntime($,W,Z){this.ensureTeamSubdir($);let Q={version:1,updatedAt:xK(),teamState:W,teammates:Z},J=this.statePath($),j=`${J}.tmp`;kS(j,`${JSON.stringify(Q,null,2)}
|
|
589
|
+
`,"utf8"),hS(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(!H8(this.teamDirPath))kK(this.teamDirPath,{recursive:!0});return this.teamDirPath}ensureTeamSubdir($){let W=M3(this.ensureTeamDir(),R3($));if(!H8(W))kK(W,{recursive:!0});return W}statePath($){return M3(this.ensureTeamDir(),R3($),"state.json")}historyPath($){return M3(this.ensureTeamDir(),R3($),"task-history.jsonl")}readEnvelope($){let W=this.statePath($);if(!H8(W))return;try{let Z=JSON.parse(IK(W,"utf8"));if(Z?.version===1&&Z.teamState)return Z}catch{}return}}import{existsSync as xS,mkdirSync as gS}from"node:fs";import{join as mS}from"node:path";import{safeJsonParse as mK}from"@cline/shared";import{loadSqliteDb as vS,nowIso as N3}from"@cline/shared/db";import{resolveDbDataDir as cS}from"@cline/shared/storage";function uS(){return cS()}function G8($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function dS($){let W=mK($);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 lS($){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 r6{teamDirPath;db;constructor($={}){this.teamDirPath=$.teamDir??uS()}init(){this.getRawDb()}ensureTeamDir(){if(!xS(this.teamDirPath))gS(this.teamDirPath,{recursive:!0});return this.teamDirPath}dbPath(){return mS(this.ensureTeamDir(),"teams.db")}getRawDb(){if(this.db)return this.db;let $=vS(this.dbPath());return this.ensureSchema($),this.db=$,$}ensureSchema($){if($.exec("PRAGMA journal_mode = WAL;"),$.exec("PRAGMA busy_timeout = 5000;"),$.exec(`
|
|
590
590
|
CREATE TABLE IF NOT EXISTS team_store_schema_version (
|
|
591
591
|
lock INTEGER PRIMARY KEY CHECK (lock = 1),
|
|
592
592
|
version INTEGER NOT NULL
|
|
@@ -670,8 +670,8 @@ ${$.summary}`,metadata:{kind:"compaction_summary",summary:$.summary,details:$.fi
|
|
|
670
670
|
version INTEGER NOT NULL DEFAULT 1,
|
|
671
671
|
PRIMARY KEY(team_name, fragment_id)
|
|
672
672
|
);
|
|
673
|
-
`)}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 = ?",[
|
|
674
|
-
VALUES (?, ?, ?, ?, NULL, ?)`,[
|
|
673
|
+
`)}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 = ?",[G8($)]);if(!W)return;let Z=mK(W.state_json);if(!Z)return;try{return lS(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 ?",[G8($),W]).flatMap((Z)=>{try{return[{eventType:Z.event_type,payload:JSON.parse(Z.payload_json),ts:Z.ts}]}catch{return[]}})}loadRuntime($){let W=G8($),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?dS(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)
|
|
674
|
+
VALUES (?, ?, ?, ?, NULL, ?)`,[G8($),N3(),W,JSON.stringify(Z),Q??null])}persistRuntime($,W,Z){let Q=G8($),J=N3();this.withTransaction(()=>{this.run(`INSERT INTO team_runtime_snapshot (team_name, state_json, teammates_json, updated_at)
|
|
675
675
|
VALUES (?, ?, ?, ?)
|
|
676
676
|
ON CONFLICT(team_name) DO UPDATE SET
|
|
677
677
|
state_json = excluded.state_json,
|
|
@@ -716,43 +716,43 @@ ${$.summary}`,metadata:{kind:"compaction_summary",summary:$.summary,details:$.fi
|
|
|
716
716
|
status = excluded.status,
|
|
717
717
|
reviewed_by = excluded.reviewed_by,
|
|
718
718
|
reviewed_at = excluded.reviewed_at,
|
|
719
|
-
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=
|
|
720
|
-
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 mK($={}){try{let W=new p6($);return W.init(),W}catch{let W=new wW({teamDir:$.teamDir});return W.init(),W}}function CW($,W){return mS($,W)}function cS($,W){let Z=W?.["*"]??{},Q=W?.[$]??{};return{...Z,...Q}.enabled!==!1}function uS($,W){return $.filter((Z)=>cS(Z.name,W))}function N3($,W){return l1(uS($,W))}var dS={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 lS($){let W=$.trim().toLowerCase();return dS[W]??W}function pS($,W){if(W.tools===void 0)return $;let Z=new Set(W.tools.map(lS));if(W.skills!==void 0)Z.add("skills");return $.filter((Q)=>Z.has(Q.name))}function vK(){return`team-${vS(5)}`}function PW($,W,Z,Q,J,j,X,Y){let V=X1[o1({mode:Z})],B=g8(W,Q,Z,J??x8);return N3(i8({cwd:$,...V,enableSkills:!!X,...B,executors:{...X?{skills:X}:{},...Y??{}}}),j)}function rS($){return PW($.cwd,$.providerId,$.mode,$.modelId,$.toolRoutingRules,$.toolPolicies,iS,$.toolExecutors).some((W)=>W.name==="skills")}var iS=async()=>"";async function nS($){let W=Q0();if(!c$({filePath:W}))return{tools:[]};let Z=new W6({clientFactory:S5({settingsPath:W})}),Q;try{Q=await $6(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)=>y5({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 aS($,W){if(!$)return;for(let Z of $.getTeammateIds())try{$.shutdownTeammate(Z,W)}catch{}}function oS($){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 sS($){let W=X1[o1({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 SW{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=sS(W),F=W.workspaceRoot??W.cwd,A=$.toolPolicies??W.toolPolicies,D=L1(),U=[],f=W.teamName?.trim()||vK(),_=W.sessionId?.trim()||f,q=K.enableSpawnAgent?$W({workspaceRoot:F}):{configs:[],errors:[]},T=q.configs.some((c)=>c.skills!==void 0),O=CW(B,"rules"),L=CW(B,"skills"),E=L||T,M=CW(B,"workflows"),u=CW(B,"plugins"),h=O||L||M,N=!1,d=Boolean(V),v=V,A1;for(let c of q.errors)(J??W.logger)?.log?.(`[agents] Failed to load agent config at ${c.path}: ${c.error.message}`);if(!v&&(h||T))v=v2({skills:E?{workspacePath:F,includePluginSkills:u,pluginSkillDirectories:u?$.pluginSkillDirectories:void 0,pluginPaths:W.pluginPaths,cwd:W.cwd}:{workspacePath:F},rules:{workspacePath:W.cwd},workflows:{workspacePath:W.cwd}});if(v)await v.start().catch(()=>{});let z$=K.enableTools&&L&&Boolean(v)&&v?.hasConfiguredSkills(W.skills)===!0&&rS({cwd:W.cwd,providerId:W.providerId,mode:K.mode,modelId:W.modelId,toolRoutingRules:W.toolRoutingRules,toolPolicies:A,toolExecutors:H}),x1=v&&h?v.createExtension({includeRules:O,includeSkills:L,includeWorkflows:M,registerSkillsTool:z$,allowedSkillNames:W.skills}):void 0,b0=x1?[...Q??W.extensions??[],x1]:Q??W.extensions;if(K.enableTools){if(U.push(...PW(W.cwd,W.providerId,K.mode,W.modelId,W.toolRoutingRules,A,void 0,H)),!K.disableMcpSettingsTools){let c=await nS(W.logger);U.push(...c.tools),A1=c.shutdown}}let B0,J1=K.enableAgentTeams?mK():void 0,K2=J1?.loadRuntime(_),J0=K2?.state,I0=K2?.teammates??[],o0=new Map(I0.map((c)=>[c.agentId,c])),P=W.sessionId||f,s0,b=[],t=!1,F0=x2({providerId:W.providerId,modelId:W.modelId,cwd:W.cwd,apiKey:W.apiKey??"",baseUrl:W.baseUrl,headers:W.headers,providerConfig:W.providerConfig,knownModels:W.knownModels,thinking:W.thinking,reasoningEffort:W.reasoningEffort,thinkingBudgetTokens:W.thinkingBudgetTokens,maxTokensPerTurn:W.maxTokensPerTurn,temperature:W.temperature,maxIterations:W.maxIterations,hooks:Z,extensions:b0,logger:J??W.logger,telemetry:$.telemetry??W.telemetry,workspaceMetadata:W.workspaceMetadata});if(K.enableSpawnAgent){if(q.configs.length>0)U.push(...N3(ZW({configProvider:F0,agents:q.configs,createSubAgentTools:(c)=>K.enableTools?pS(PW(W.cwd,c.providerId??W.providerId,K.mode,c.modelId??W.modelId,W.toolRoutingRules,A,c.skills!==void 0&&v?.createSkillsExecutor?v.createSkillsExecutor(c.skills):void 0,H),c):[],hookErrorMode:W.hookErrorMode,toolPolicies:A,requestToolApproval:$.requestToolApproval,onSubAgentEvent:$.onSubAgentEvent,onSubAgentStart:$.onSubAgentStart,onSubAgentEnd:$.onSubAgentEnd}),A))}if(!this.teamRuntimeEntries.has(P))this.teamRuntimeEntries.set(P,{delegatedAgentConfigProvider:F0});let _0=()=>{if(!K.enableAgentTeams)return;let c=this.teamRuntimeEntries.get(P)??{delegatedAgentConfigProvider:F0};if(this.teamRuntimeEntries.set(P,c),B0=c.runtime,!B0){if(B0=new S6({teamName:f,leadAgentId:W.sessionId||"lead",missionLogIntervalSteps:K.missionLogIntervalSteps,missionLogIntervalMs:K.missionLogIntervalMs,onTeamEvent:(j0)=>{if(G(j0),B0&&J1){if(j0.type==="teammate_spawned"&&j0.teammate?.rolePrompt){let U1={agentId:j0.agentId,rolePrompt:j0.teammate.rolePrompt,modelId:j0.teammate.modelId,maxIterations:j0.teammate.maxIterations};o0.set(U1.agentId,U1)}if(j0.type==="teammate_shutdown"&&!oS(j0.reason))o0.delete(j0.agentId);J1.handleTeamEvent(_,j0),J1.persistRuntime(_,B0.exportState(),Array.from(o0.values()))}}}),J0)B0.hydrateState(J0),t=!0;c.runtime=B0}if(!N){if(!B0)return;N=!0;let j0=z5({runtime:B0,leadAgentId:W.sessionId||"lead",restoredFromPersistence:Boolean(J0),restoredTeammates:I0,includeLeadSpawnTool:!0,includeLeadManagementTools:!0,onLeadToolsUnlocked:(U1)=>{b=U1,s0?.addTools(U1)},createBaseTools:K.enableTools?()=>PW(W.cwd,W.providerId,K.mode,W.modelId,W.toolRoutingRules,A,void 0,H):void 0,teammateConfigProvider:F0});if(t)B0.recoverActiveRuns("runtime_recovered");if(j0.restoredFromPersistence)Y?.();U.push(...j0.tools)}return B0};if(K.enableSpawnAgent&&X){let c=X();U.push({...c,execute:async(j0,U1)=>{return _0(),c.execute(j0,U1)}})}if(K.enableAgentTeams)_0();let J4=N3(U,A),D8=J4.some((c)=>c.name==="submit_and_exit"&&c.lifecycle?.completesRun===!0),F2=K.enableAgentTeams?()=>{let c=this.teamRuntimeEntries.get(P)?.runtime;if(!c)return;let j0=c.listTasks(),U1=j0.some((g1)=>g1.status==="in_progress"||g1.status==="pending"),nJ=c.listRuns({}),NU=nJ.some((g1)=>g1.status==="running"||g1.status==="queued");if(U1||NU){let g1=j0.filter((x0)=>x0.status==="in_progress"||x0.status==="pending").map((x0)=>`${x0.id} (${x0.status}): ${x0.title}`).join(", "),aJ=nJ.filter((x0)=>x0.status==="running"||x0.status==="queued").map((x0)=>`${x0.id} (${x0.status})`).join(", "),A9=[];if(g1)A9.push(`Unfinished tasks: ${g1}`);if(aJ)A9.push(`Active runs: ${aJ}`);return`[SYSTEM] You still have team obligations. ${A9.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,EU=D8?{requireCompletionTool:!0,...F2?{completionGuard:F2}:{}}:F2?{completionGuard:F2}:void 0;return{tools:J4,logger:J??W.logger,telemetry:j??W.telemetry,teamRuntime:B0,teamRestoredFromPersistence:Boolean(J0),delegatedAgentConfigProvider:this.teamRuntimeEntries.get(P)?.delegatedAgentConfigProvider??F0,extensions:b0,completionPolicy:EU,registerLeadAgent:(c)=>{if(s0=c,b.length>0)c.addTools(l1(b,[...D]))},shutdown:async(c)=>{if(aS(B0,c),this.teamRuntimeEntries.delete(P),await A1?.(),!d)v?.stop()}}}}function tS($,W){let Z=$?.expiresAt,Q=W?.expiresAt;return $?.accessToken===W?.accessToken&&$?.refreshToken===W?.refreshToken&&$?.accountId===W?.accountId&&Z===Q}class bW 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 w3{providerSettingsManager;telemetry;refreshInFlight=new Map;constructor($){this.providerSettingsManager=$?.providerSettingsManager??new U$,this.telemetry=$?.telemetry}async resolveProviderApiKey($){let W=U0($.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=U0($);if(!Q)return null;let J=this.providerSettingsManager.getProviderSettings(W);if(!J)return o(`oauth.resolve providerId=${$} storageProviderId=${W} outcome=no_settings`),null;let j=e9($,J);if(!j)return o(`oauth.resolve providerId=${$} storageProviderId=${W} outcome=no_credentials`),null;o(`oauth.resolve.start providerId=${$} storageProviderId=${W} forceRefresh=${Z} accessTokenHash=${w0(j.access)} refreshTokenHash=${w0(j.refresh)}`);let X=await Q.refresh({settings:J,credentials:j,forceRefresh:Z,telemetry:this.telemetry});if(!X)throw o(`oauth.resolve providerId=${$} outcome=refresh_returned_null`),new bW($);let Y=z8({manager:this.providerSettingsManager,providerId:$,settings:J,credentials:X,setLastUsed:!1,save:!1}),V=!tS(J.auth,Y.auth);if(V)o(`oauth.resolve.refreshed providerId=${$} newAccessTokenHash=${w0(X.access)} newRefreshTokenHash=${w0(X.refresh)} savingToDisk=true`),this.providerSettingsManager.saveProviderSettings(Y,{setLastUsed:!1,tokenSource:"oauth"});else o(`oauth.resolve providerId=${$} outcome=not_refreshed`);return{apiKey:Q.getApiKey(Y)??X.access,accountId:X.accountId,refreshed:V}}}import{normalizeUserInput as eS}from"@cline/shared";import{nanoid as $b}from"nanoid";class cK{list($){return $?i0($):[]}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:i0($),updated:!1};let J=$.pendingPrompts[Q];if(!J)return{sessionId:W.sessionId,prompts:i0($),updated:!1};let j=W.prompt===void 0?J.prompt:eS(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),Wb($,Y,Q,J.delivery),{sessionId:W.sessionId,prompts:i0($),prompt:yW(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:i0($),removed:!1};let[J]=$.pendingPrompts.splice(Q,1);return{sessionId:W.sessionId,prompts:i0($),prompt:J?yW(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()}_${$b(5)}`,prompt:Z,mode:Q,delivery:J,userImages:j,userFiles:X};if(J==="steer")$.pendingPrompts.unshift(V);else $.pendingPrompts.push(V)}return i0($)}consumeSteer($){let W=$.pendingPrompts.findIndex((Q)=>Q.delivery==="steer");if(W<0)return{prompts:i0($)};let[Z]=$.pendingPrompts.splice(W,1);return{entry:Z,prompts:i0($)}}shiftNext($){return{entry:$.pendingPrompts.shift(),prompts:i0($)}}requeueFront($,W){return $.pendingPrompts.unshift(W),i0($)}clear($){return $.pendingPrompts.length=0,[]}}class C3{deps;service=new cK;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:i0($)}})}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=yW(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 yW($){return{id:$.id,prompt:$.prompt,delivery:$.delivery,attachmentCount:($.userImages?.length??0)+($.userFiles?.length??0),userImages:$.userImages,userFiles:$.userFiles}}function i0($){return $.pendingPrompts.map(yW)}function Wb($,W,Z,Q){if(W.delivery==="steer")$.pendingPrompts.unshift(W);else if(Q==="steer")$.pendingPrompts.push(W);else $.pendingPrompts.splice(Z,0,W)}A0();class S3{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=j3(Z),X=!!Q&&(!j.agentId||j.agentId===P3(Q.agent));X3(J,Z,X?{isPrimaryAgentEvent:!0,agentId:P3(Q.agent),conversationId:Q.agent.getConversationId(),...Q?.runtime.teamRuntime?{teamRole:"lead"}:{}}:{isPrimaryAgentEvent:!1})}async handleTeamEvent($,W){let Z=this.deps.getSession($);if(Z){if(x7(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};X3(Q,W.event,{agentId:W.agentId,teamRole:"teammate",teamAgentId:W.agentId,isPrimaryAgentEvent:!1})}if(W.type==="teammate_spawned"){let Q=S1({agentId:W.teammate.runtimeAgentId??W.agentId,conversationId:W.teammate.conversationId,parentAgentId:W.teammate.parentAgentId,createdByAgentId:P3(Z.agent),teamId:Z.runtime.teamRuntime?.getTeamId(),teamName:Z.runtime.teamRuntime?.getTeamName(),teamRole:"teammate",teamAgentId:W.agentId});if(Q)R$(Z.config.telemetry,{ulid:$,modelId:W.teammate.modelId??Z.config.modelId,provider:Z.config.providerId,...Q})}}if(await g7($,W,this.deps.invokeBackendOptional),Z)m7(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 P3($){return $.getAgentId()}function b3($){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:b1($.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 y3($,W){let Z=$[W];return typeof Z==="function"?Z:null}async function uK($,W,...Z){let Q=y3($,W);if(!Q)throw Error(`session service method not available: ${W}`);return Promise.resolve(Q.apply($,Z))}async function dK($,W,...Z){let Q=y3($,W);if(!Q)return;await Promise.resolve(Q.apply($,Z))}async function lK($,W,...Z){let Q=y3($,W);if(!Q)return;return await Promise.resolve(Q.apply($,Z))}t0();A0();function h3($,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=S1({agentId:Q.subAgentId,conversationId:Q.conversationId,parentAgentId:Q.parentAgentId,teamId:J?.getTeamId(),teamName:J?.getTeamName(),createdByAgentId:Q.parentAgentId});if(j)R$(W.telemetry,{ulid:Z,modelId:W.modelId,provider:W.providerId,...j});B4(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(`
|
|
721
|
-
`).length:0;B4(W.telemetry,{event:"ended",ulid:Z,durationMs:X,outputLines:Y,errorMessage:Q.error?String(Q.error):void 0,agentId:Q.subAgentId,parentId:Q.parentAgentId,...S1({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 k3($,W,Z,Q){let J=h3($,W,Z);return m2({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?i8({cwd:W.cwd,...X1[o1({mode:W.mode})],executors:Q}):[];if(W.enableSpawnAgent)X.push(k3($,W,Z,Q));return l1(X)},...J})}import{readFile as Zb,stat as Qb}from"node:fs/promises";var Jb=20480000;async function pK($){let W=await Qb($);if(!W.isFile())throw Error("Path is not a file");if(W.size>Jb)throw Error("File is too large to read into context.");let Z=await Zb($,"utf8");if(Z.includes("\x00"))throw Error("Cannot read binary file into context.");return Z}var rK=5000;function r6($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function Kb($){if(!$||typeof $!=="object"||Array.isArray($))return;let W=$,Z=r6(W.inputTokens),Q=r6(W.outputTokens),J=r6(W.cacheReadTokens),j=r6(W.cacheWriteTokens),X=r6(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 Fb($,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 iK($,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 _${runtimeAddress=void 0;pendingPrompts;sessionService;runtimeBuilder;createAgentInstance;toolExecutors;defaultCapabilities;defaultToolPolicies;providerSettingsManager;oauthTokenManager;defaultTelemetry;defaultFetch;events=new L6;sessions=new Map;manifestMutationQueues=new Map;usageBySession=new Map;aggregateUsageBySession=new Map;subAgentStarts=new Map;pendingPromptsController;eventBridge;sessionVersioning=new Y8;constructor($){let W=Xb();if(W)Gb(W);let Z=r0($.distinctId);this.sessionService=$.sessionService,this.runtimeBuilder=$.runtimeBuilder??new SW,this.createAgentInstance=$.createAgent??((Q)=>new t1(Q)),this.defaultCapabilities=C0($.capabilities),this.toolExecutors=this.defaultCapabilities?.toolExecutors,this.defaultToolPolicies=$.toolPolicies,this.providerSettingsManager=$.providerSettingsManager??new U$,this.oauthTokenManager=$.oauthTokenManager??new w3({providerSettingsManager:this.providerSettingsManager,telemetry:$.telemetry}),this.defaultTelemetry=$.telemetry,this.defaultTelemetry?.setDistinctId(Z),this.defaultFetch=$.fetch,this.pendingPromptsController=new C3({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 S3({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??D0.CLI,Z=Z0(),Q=$.config.sessionId?.trim()??"",J=Q||Vb(),j=await this.applyInitialOAuthCredentials($),X=j.initialMessages??[],Y=X.length>0?KW(X):E0(),V=await this.invokeOptionalValue("ensureSessionsDir")??"";if(!V)throw Error("session service method not available: ensureSessionsDir");let B=I3(V,J),H=I3(B,`${J}.messages.json`),G=I3(B,`${J}.json`),K=b1($.config),F=h0.parse({version:1,session_id:J,source:W,pid:process.pid,started_at:Z,status:"running",interactive:$.interactive===!0,provider:j.config.providerId,model:j.config.modelId,cwd:j.config.cwd,workspace_root:K,team_name:j.config.teamName,enable_tools:j.config.enableTools,enable_spawn:j.config.enableSpawnAgent,enable_teams:j.config.enableAgentTeams,prompt:j.prompt?.trim()||void 0,messages_path:H}),A,D;if(Q.length>0&&X.length>0&&!j.prompt?.trim()){let b=await this.invokeOptionalValue("readSessionManifest",J);if(b)F=b,A={manifestPath:G,messagesPath:b.messages_path||H,compactionPath:b.compaction_path,manifest:b},D=await this.invokeOptionalValue("readSessionCompactionState",J)}let f=await this.seedAggregateUsageFromArtifacts({initialUsage:Y,sessionDir:B,rootMessagesPath:A?.messagesPath??H,manifest:F});this.usageBySession.set(J,Y),this.aggregateUsageBySession.set(J,f);let _=C0(this.defaultCapabilities,$.capabilities),q=_?.toolExecutors??this.toolExecutors,T=$.localRuntime,O=T?.extensionContext?.logger??T?.logger,L=T?.extensionContext?.automation,E,M={getSession:(b)=>this.sessions.get(b),subAgentStarts:this.subAgentStarts,onAgentEvent:(b,t,F0)=>this.eventBridge.dispatchAgentEvent(b,t,F0),invokeBackendOptional:(b,...t)=>this.invokeOptional(b,...t)};E=await BK({input:j,localRuntime:$.localRuntime,sessionId:J,providerSettingsManager:this.providerSettingsManager,defaultTelemetry:this.defaultTelemetry,defaultCapabilities:_,defaultToolPolicies:this.defaultToolPolicies,defaultFetch:this.defaultFetch,onPluginEvent:(b)=>{if(b.name==="plugin_log"){this.eventBridge.handlePluginLog(J,b.payload,O);return}this.eventBridge.handlePluginEvent(J,b,L)},onTeamEvent:(b)=>{this.eventBridge.handleTeamEvent(J,b),E.config.onTeamEvent?.(b)},createSpawnTool:()=>k3(M,E.config,J,q),createSubAgentLifecycleCallbacks:(b)=>h3(M,b,J),readSessionMetadata:async()=>(await this.getSession(J))?.metadata,writeSessionMetadata:async(b)=>{await this.persistSessionMetadata(J,()=>b)}});let u=xQ(j.sessionMetadata??A?.manifest.metadata,E.gitState);if(!A)F.metadata=u;let h=await this.runtimeBuilder.build(E.runtimeBuilderInput),N=E.config,d=E.providerConfig;if(h.teamRuntime&&!N.teamName?.trim())N.teamName=h.teamRuntime.getTeamName();let v=[...h.tools,...N.extraTools??[]],A1=h.extensions??E.extensions,z$=j.initialCompactionState,x1,b0=Q3(N),B0=z$??D,J1=b0&&B0?{...B0,conversation_id:B0.conversation_id?.trim()||J}:void 0,K2=b0?J3({compact:b0,getState:()=>x1?.compactionState,saveState:async(b)=>{let t=x1;if(!t)return;let F0={...b,conversation_id:t.sessionId};try{if(!(await this.persistActiveSessionCompactionState(t,F0)).updated)N.logger?.debug?.("Skipped stale session compaction state",{sessionId:t.sessionId,sourceMessageCount:F0.source_message_count})}catch(_0){N.logger?.error?.("Failed to persist session compaction state",{sessionId:t.sessionId,error:_0}),D$(N.telemetry,{component:"core",operation:"session.persist_compaction_state",severity:"warn",handled:!0,error:_0,context:{sessionId:t.sessionId,providerId:N.providerId,modelId:N.modelId}})}}}):void 0,J0={sessionId:J,providerId:d.providerId,modelId:d.modelId,apiKey:d.apiKey,baseUrl:d.baseUrl,headers:d.headers,knownModels:d.knownModels,providerConfig:d,thinking:N.thinking,reasoningEffort:N.reasoningEffort??d.reasoningEffort,thinkingBudgetTokens:N.thinkingBudgetTokens,maxTokensPerTurn:N.maxTokensPerTurn,temperature:N.temperature,systemPrompt:N.systemPrompt,maxIterations:N.maxIterations,execution:N.execution,prepareTurn:K2,tools:v,hooks:E.hooks,extensions:A1,hookErrorMode:N.hookErrorMode,initialMessages:E.effectiveInput.initialMessages,userFileContentLoader:pK,toolPolicies:E.toolPolicies,requestToolApproval:E.requestToolApproval?async(b)=>{let t=E.requestToolApproval,F0=this.sessions.get(J);if(F0)await this.markTurnPending(F0);try{if(!t)return{approved:!1,reason:"Tool approval callback is not configured."};return await t(b)}finally{let _0=this.sessions.get(J);if(_0?.status==="pending")await this.markTurnRunning(_0)}}:void 0,telemetry:N.telemetry,onConsecutiveMistakeLimitReached:N.onConsecutiveMistakeLimitReached,completionPolicy:h.completionPolicy,consumePendingUserMessage:()=>{let b=this.pendingPromptsController.consumeSteer(J);return b?y6(b.prompt,b.mode??N.mode):void 0},logger:h.logger??N.logger,extensionContext:N.extensionContext,onEvent:(b)=>this.eventBridge.dispatchAgentEvent(J,N,b)};J0.hooks={...J0.hooks,onEvent:async(b)=>{if(await E.hooks?.onEvent?.(b),b.type!=="assistant-message")return;let t=this.sessions.get(J);if(!t)return;let F0=t.agent.getMessages();try{await this.invoke("persistSessionMessages",J,F0,N.systemPrompt)}catch(_0){N.logger?.error?.("Failed to persist session messages after assistant response",{sessionId:J,error:_0}),D$(N.telemetry,{component:"core",operation:"session.persist_messages_after_assistant_response",error:_0,severity:"warn",handled:!0,context:{sessionId:J,providerId:N.providerId,modelId:N.modelId}})}}};let I0=this.createAgentInstance(J0);if(J0.onEvent)I0.subscribeEvents(J0.onEvent);h.registerLeadAgent?.(I0);let o0=S1({agentId:I0.getAgentId(),conversationId:I0.getConversationId(),teamId:h.teamRuntime?.getTeamId(),teamName:h.teamRuntime?.getTeamName(),teamRole:h.teamRuntime?"lead":void 0});if(HK(N,J,Q.length>0,K,o0),o0)R$(N.telemetry,{ulid:J,modelId:N.modelId,provider:N.providerId,...o0});if(h.teamRuntime)S9(N.telemetry,{ulid:J,teamId:h.teamRuntime.getTeamId(),teamName:h.teamRuntime.getTeamName(),leadAgentId:I0.getAgentId(),restoredFromPersistence:h.teamRestoredFromPersistence===!0});let P={sessionId:J,config:N,sessionMetadata:u,...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:h,agent:I0,started:!1,status:A?.manifest.status??"running",aborting:!1,interactive:$.interactive===!0,persistedMessages:X,compactionState:J1,activeTeamRunIds:new Set,pendingTeamRunUpdates:[],teamRunWaiters:[],pendingPrompts:[],drainingPendingPrompts:!1,pluginSandboxShutdown:E.pluginSandboxShutdown,submitAndExitObserved:!1,lastInteractiveTurnFinishReason:void 0};if(x1=P,P.compactionState&&!this.isCompactionStateForSession(P.sessionId,P.compactionState,P))P.config.logger?.log?.("Ignoring session compaction state for a different conversation",{severity:"warn",sessionId:P.sessionId,conversationId:P.compactionState.conversation_id}),P.compactionState=void 0;if(this.sessions.set(J,P),A)await this.refreshActiveSessionGitMetadata(P,E.gitState);if(this.emitStatus(J,"running"),X.length>0&&!A){if(await this.ensureSessionPersisted(P),await this.invoke("persistSessionMessages",P.sessionId,X,P.config.systemPrompt),P.compactionState){if(!(await this.persistActiveSessionCompactionState(P,P.compactionState)).updated)P.compactionState=void 0}if(!j.prompt?.trim())await this.updateStatus(P,"completed",0)}let s0;try{if(j.prompt?.trim())if(s0=await this.executeTurn(P,{prompt:j.prompt,userImages:j.userImages,userFiles:j.userFiles}),!P.interactive)await this.finalizeSingleRun(P,s0.finishReason);else await this.completeInteractiveTurn(P,s0.finishReason)}catch(b){if(P.interactive&&P.aborting)s0=await this.completeAbortedInteractiveTurn(P);else{D$(P.config.telemetry,{component:"core",operation:"session.start",error:b,severity:"error",handled:!1,context:{sessionId:P.sessionId,providerId:P.config.providerId,modelId:P.config.modelId}});try{await this.failSession(P)}catch(t){P.config.logger?.error?.("Session failure cleanup threw",{sessionId:P.sessionId,error:t})}throw b}}return{sessionId:J,manifest:F,manifestPath:G,messagesPath:H,result:s0}}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 D$(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=V7(this.usageBySession.get($)),Z=V7(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&&!H0(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&&!H0(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 b3(W);let Z=$.trim();if(!Z)return;let Q=await this.getRow(Z);if(Q)return _6(Q);let J=await this.readManifest(Z);return J?G7(J):void 0}async listSessions($=200){let Z=(await this.listRows($)).map(_6),Q=new Set(Z.map((J)=>J.sessionId));for(let J of this.sessions.values()){if(Q.has(J.sessionId))continue;Z.unshift(b3(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(iK(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 R6(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(iK(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 Q$(Z.messagesPath);let Q=await this.readManifest(W);return Q$(Q?.messages_path)}async dispatchHookEvent($){await oB($,{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=I2(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(v7($,X.finishReason)){let Y=await c7($);if(Y.length===0)break;let V=u7($,Y);X=await this.executeAgentTurn($,V)}return X}finally{await this.refreshActiveSessionGitMetadata($)}}async completeInteractiveTurn($,W){if(b6($))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=E0();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)??E0(),Y=this.aggregateUsageBySession.get($.sessionId)??X;$.turnUsageBaseline=X,$.turnAggregateUsageBaseline=Y,$.turnPrimaryUsage=E0(),$.turnUsageByAgent=new Map,M9($.config.telemetry,$.sessionId,$.config.mode),_8($.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=c5(B.messages,B,j);$.persistedMessages=H;let G=GW($.turnUsageByAgent?.values()??[]),K=T0(X,B.usage),F=T0(T0(E0(),B.usage),G),A=T0(Y,F);return this.usageBySession.set($.sessionId,K),this.aggregateUsageBySession.set($.sessionId,A),await this.persistSessionMetadata($.sessionId,(D)=>({...D??{},totalCost:K.totalCost,aggregatedAgentsCost:A.totalCost,usage:K,aggregateUsage:A})),await this.invoke("persistSessionMessages",$.sessionId,H,$.config.systemPrompt),this.observeTaskCompletionTool($,B),B}catch(V){throw D$($.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===R0.SUBMIT_AND_EXIT&&Q.error===void 0))return;$.submitAndExitObserved=!0,Y4($.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=b1($.config),Q=Hb(W.prompt).trim();if(!Q)return{prompt:"",userImages:W.userImages,userFiles:this.resolveAbsoluteFilePaths($.config.cwd,W.userFiles)};let J=await H5(Q,Z);GK($.config.telemetry,J);let j=y6(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=b1($.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 NB(b1($.config));if(!Z||!$.artifacts)return;if(RB($.artifacts.manifest.metadata,Z))return;await this.persistSessionMetadata($.sessionId,(Q)=>xQ({...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(b6($))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)Y4($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"shutdown",...this.getSessionAgentTelemetryIdentity($)});jW($);let Z=[],Q=(J,j)=>{Z.push(j),$.config.logger?.log("Session shutdown cleanup failed",{sessionId:$.sessionId,stage:J,error:j,severity:"warn"}),D$($.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"}),D$($.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,H0(W))delete j.ended_at,j.exit_code=null;else j.ended_at=Q.endedAt??Z0(),j.exit_code=typeof Z==="number"?Z:null});if(!J)return;$.status=W,$.updatedAt=Q.endedAt??Z0(),$.endedAt=H0(W)?null:J.ended_at,$.exitCode=J.exit_code,this.emitStatus($.sessionId,W)}async runWithAuthRetry($,W,Z){try{return await W()}catch(Q){if(!T8($.config.providerId)||!Bb(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 bW)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 u$($);throw D$(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)=>Yb(Q)?Q:x3($,Q));return Array.from(new Set(Z))}getSessionAgentTelemetryIdentity($){return S1({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=T0($.initialUsage,W);return this.withPersistedAggregateUsageFloor(Z,$.manifest)}async summarizePersistedTeammateUsage($,W,Z){let Q=x3(W),J=`${Z}.messages.json`,j;try{j=jb($)}catch{return E0()}let X=E0();for(let Y of j){if(!Y.endsWith(".messages.json"))continue;if(Y===J)continue;let V=x3($,Y);if(V===Q)continue;let B=await Q$(V);if(B.length===0)continue;X=T0(X,KW(B))}return X}withPersistedAggregateUsageFloor($,W){let Z=Kb(W.metadata?.aggregateUsage);if(Z)return Fb($,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:Y$({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($)),rK))}async getRow($){let W=$.trim();if(!W)return;return(await this.listRows(rK)).find((Q)=>Q.sessionId===W)}async readManifest($){let W=$.trim();if(!W)return;return await this.invokeOptionalValue("readSessionManifest",W)}invoke($,...W){return uK(this.sessionService,$,...W)}invokeOptional($,...W){return dK(this.sessionService,$,...W)}invokeOptionalValue($,...W){return lK(this.sessionService,$,...W)}}function Ab($){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 i6,n6;function Ub($,W){if($!=="auto"&&$!=="hub")return;if(W.hub?.endpoint?.trim())return;fH(W.hub?.workspaceRoot?.trim()||W.hub?.cwd?.trim()||process.cwd())}async function Db($){await $.reconcileDeadSessions?.().catch(()=>{})}function oK($){try{let W=new H$;return W.init(),new G$(W,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}catch(W){return $.telemetry?.capture({event:"session_backend_fallback",properties:{requestedBackend:"sqlite",fallbackBackend:"file"}}),aK($.telemetry,{component:"core",operation:"session_backend.sqlite_init",error:W,severity:"warn",handled:!0,context:{requestedBackend:"sqlite",fallbackBackend:"file"}}),new r7(void 0,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}}function nK($,W,Z){return new _$({sessionService:Z??$.sessionService??oK($),capabilities:$.capabilities,telemetry:$.telemetry,toolPolicies:$.toolPolicies,distinctId:W,fetch:$.fetch})}async function _b($){if(i6)return i6;if(n6)return await n6;return n6=(async()=>{return i6=oK($),await Db(i6),i6})().finally(()=>{n6=void 0}),await n6}async function hW($){let W=r0($.distinctId);$.telemetry?.setDistinctId(W);let Z=Ab($);if(Ub(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 o5({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 M6({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 $2({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 T7({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 $2({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}),aK($.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"}),nK($,W)}return nK($,W)}import{existsSync as fb,mkdirSync as Lb,readFileSync as Ob,writeFileSync as Tb}from"node:fs";import{dirname as zb}from"node:path";import{FEATURE_FLAGS as sK,FeatureFlagDefaultValue as g3}from"@cline/shared";var qb=3600000,Mb=604800000,tK=1;class a6{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??qb,this.cacheFilePath=$.cacheFilePath,this.persistentCacheMaxAgeMs=$.persistentCacheMaxAgeMs??Mb,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:sK.length>0?sK: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||!fb(this.cacheFilePath))return;let $=JSON.parse(Ob(this.cacheFilePath,"utf8"));if(!$||typeof $!=="object")return;let W=$;if(W.version!==tK||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;Lb(zb(this.cacheFilePath),{recursive:!0,mode:448});let $=this.getCacheSnapshot(),W={version:tK,updatedAt:$.updateTime,userId:$.userId,flagsPayload:$.flagsPayload};Tb(this.cacheFilePath,`${JSON.stringify(W,null,2)}
|
|
722
|
-
`,"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??g3[$]??void 0;if(!this.cache.has($)||this.cache.get($)!==Q)this.telemetry?.capture({event:
|
|
723
|
-
`).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 Ib($,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 xb($,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 IW($,W){let Z=yb(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=bb(Z[0],Z.slice(1),{cwd:W.cwd,env:hb(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(Ib(A,Z))})});if(await xb(J,JSON.stringify($)),Q){await Promise.race([j,X]),J.unref();return}if(!J.stdout||!J.stderr)throw Error("runSubprocessEvent failed to create stdout/stderr pipes");let Y="",V="",B=!1,H;J.stdout.on("data",(K)=>{Y+=K.toString()}),J.stderr.on("data",(K)=>{V+=K.toString()});let G=new Promise((K)=>{if((W.timeoutMs??0)>0)H=setTimeout(()=>{B=!0,J.kill("SIGKILL")},W.timeoutMs);J.once("close",(F)=>{if(H)clearTimeout(H);let{parsedJson:A,parseError:D}=kb(Y);K({exitCode:F,stdout:Y,stderr:V,parsedJson:A,parseError:D,timedOut:B})})});return await Promise.race([G,X])}var mb=j2.object({contextModification:j2.string().optional(),cancel:j2.boolean().optional(),review:j2.boolean().optional(),errorMessage:j2.string().optional(),context:j2.string().optional(),overrideInput:j2.unknown().optional()}).passthrough();var vb=["agent","hook"];async function gW($,W={}){let Z=W.command??vb;return await IW($,{command:Z,cwd:W.cwd,env:W.env,detached:W.detached,timeoutMs:W.timeoutMs,onSpawn:W.onSpawn})}function YF($){return $ instanceof Error?$:Error(String($))}function cb($){if(!$||typeof $!=="object")return;let W=mb.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 JF($){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 y1($,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:gb(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 ub($){return{name:$.name,message:$.message,stack:$.stack}}function db($){let W=String($??"").toLowerCase();return W.includes("cancel")||W.includes("abort")||W.includes("interrupt")}function lb($){return{agentId:$.snapshot.agentId,conversationId:$.snapshot.conversationId??$.snapshot.runId??$.snapshot.agentId,parentAgentId:$.snapshot.parentAgentId??null}}function pb($){return $.filter((W)=>W.type==="text"&&typeof W.text==="string").map((W)=>W.text).join("")}function rb($){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 ib($){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 X2($,W){try{let Z=await gW($,{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?.(YF(Z),$)}}function VF($={}){return{hooks:{beforeRun:async(Y)=>{let V=lb(Y);if(($.env??process.env).CLINE_HOOK_AGENT_RESUME==="1"){let H={...y1("agent_resume",V,$),hookName:"agent_resume",taskResume:{taskMetadata:{},previousState:{}}};await X2(H,$)}else{let H={...y1("agent_start",V,$),hookName:"agent_start",taskStart:{taskMetadata:{}}};await X2(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={...y1("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:JF(Y.input)}};try{let H=await gW(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 ib(cb(H?.parsedJson))}catch(H){$.onDispatchError?.(YF(H),B);return}},afterTool:async(Y)=>{let V=rb(Y),B={agentId:Y.snapshot.agentId,conversationId:Y.snapshot.conversationId??Y.snapshot.runId??Y.snapshot.agentId,parentAgentId:Y.snapshot.parentAgentId??null},H={...y1("tool_result",B,$),hookName:"tool_result",iteration:Y.snapshot.iteration,tool_result:V,postToolUse:{toolName:V.name,parameters:JF(V.input),result:typeof V.output==="string"?V.output:JSON.stringify(V.output),success:!V.error,executionTimeMs:V.durationMs}};await X2(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={...y1("agent_end",B,$),hookName:"agent_end",iteration:V.iterations,turn:{outputText:V.outputText,status:V.status},taskComplete:{taskMetadata:{}}};await X2(K,$);return}let H=V.status==="aborted"||db(V.error?.message)?"agent_abort":"agent_error",G=H==="agent_error"?{...y1(H,B,$),hookName:H,iteration:V.iterations,error:ub(V.error??Error("Agent run failed")),taskCancel:{taskMetadata:{}}}:{...y1(H,B,$),hookName:H,reason:V.error?.message,taskCancel:{taskMetadata:{}}};await X2(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={...y1("prompt_submit",V,$),hookName:"prompt_submit",userPromptSubmit:{prompt:pb(Y.message.content),attachments:[]}};await X2(B,$)}},shutdown:async({agentId:Y,conversationId:V,parentAgentId:B,reason:H})=>{let G={...y1("session_shutdown",{agentId:Y,conversationId:V,parentAgentId:B},$),hookName:"session_shutdown",reason:H};await X2(G,$)}}}import{createSessionId as nb}from"@cline/shared";function n0($,W){return{version:$.version,requestId:$.requestId,ok:!0,payload:W}}function BF($,W,Z){return{version:$.version,requestId:$.requestId??nb("hubreq_"),ok:!1,error:{code:W,message:Z}}}class mW{schedules;constructor($){this.schedules=$}async handleCommand($){try{switch($.command){case"schedule.create":return n0($,{schedule:this.schedules.createSchedule(this.toCreateInput($.payload??{}))});case"schedule.list":return n0($,{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 n0($,{schedule:this.schedules.getSchedule(String($.payload?.scheduleId??""))});case"schedule.update":return n0($,{schedule:this.schedules.updateSchedule(String($.payload?.scheduleId??""),this.toUpdateInput($.payload??{}))});case"schedule.delete":return n0($,{deleted:this.schedules.deleteSchedule(String($.payload?.scheduleId??""))});case"schedule.enable":return n0($,{schedule:this.schedules.resumeSchedule(String($.payload?.scheduleId??""))});case"schedule.disable":return n0($,{schedule:this.schedules.pauseSchedule(String($.payload?.scheduleId??""))});case"schedule.trigger":return n0($,{execution:$.payload?.wait===!1?this.schedules.triggerScheduleNowDetached(String($.payload?.scheduleId??"")):await this.schedules.triggerScheduleNow(String($.payload?.scheduleId??""))});case"schedule.list_executions":return n0($,{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 n0($,{stats:this.schedules.getScheduleStats(String($.payload?.scheduleId??""))});case"schedule.active":return n0($,{executions:this.schedules.getActiveExecutions()});case"schedule.upcoming":return n0($,{runs:this.schedules.getUpcomingRuns(typeof $.payload?.limit==="number"?$.payload.limit:void 0)});default:return BF($,"unsupported_command",`Unsupported hub schedule command: ${$.command}`)}}catch(W){return BF($,"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 cW($){return $?new Date($).getTime():void 0}function ab($){let W=$.metadata?{...$.metadata}:void 0;if(W)delete W.__hubScheduleCreatedBy,delete W.__hubScheduleCwd,delete W.__hubRuntimeOptions;return W}function vW($){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:cW($.nextRunAt),lastRunAt:cW($.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:ab($)}}function ob($){switch($){case"done":return"success";case"cancelled":return"aborted";case"running":return"running";case"queued":return"pending";default:return"failed"}}function c3($,W){return{executionId:$.runId,scheduleId:W,sessionId:$.sessionId,triggeredAt:new Date($.scheduledFor??$.createdAt).getTime(),startedAt:cW($.startedAt),endedAt:cW($.completedAt),status:ob($.status),errorMessage:$.error}}class uW{store;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new F6({dbPath:$.dbPath}),this.materializer=new V6({store:this.store}),this.runner=new B6({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(pQ($.cronPattern),!$.workspaceRoot?.trim())throw Error("workspaceRoot is required for schedules");return vW(this.store.createHubSchedule($))}getSchedule($){let W=this.store.getHubSchedule($);return W?vW(W):void 0}listSchedules($={}){return this.store.listHubSchedules($).map((W)=>vW(W))}updateSchedule($,W){if(W.cronPattern!==void 0)pQ(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?vW(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 c3(Z,$)}triggerScheduleNowDetached($){let W=this.store.enqueueHubScheduleRun($,"manual");if(!W)return;return this.runner.tick().catch(()=>{return}),c3(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 c3(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}))}}rW();import{resolveClineBuildEnv as Ly}from"@cline/shared";function Oy($,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 Ty="cline-hub-auth.";function zy($){return $.host!==void 0||$.port!==void 0||$.pathname!==void 0}function qy($,W){let Z=new URL($),Q=new URL(W);return Z.search="",Z.hash="",Q.search="",Q.hash="",Z.toString()===Q.toString()}function KF(){return Ly()==="production"?j$():E1()}async function My($){let W=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),W)return W;let Z=KF(),Q=await O0(Z.discoveryPath);if(Q?.url&&qy($.toString(),Q.url))return Q.authToken;return}async function Ry($={}){let W=J$($);if(!zy($)){let Z=KF(),Q=await O0(Z.discoveryPath);if(Q?.url)return Q.url}return R1(W.host,W.port,W.pathname)}async function FF($){return await new Promise((W,Z)=>{(async()=>{let Q=new URL($),J=await My(Q);Q.hash="";let j=new WebSocket(Q.toString(),J?[`${Ty}${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(Oy(V,$))})})().catch(Z)})}async function Re($){try{return(await FF($)).close(),!0}catch{return!1}}async function Ee($,W){let Z=await Ry($),Q=await FF(Z);try{return await Q.send({version:W.version??"v1",clientId:W.clientId??"hub-client",...W})}finally{Q.close()}}function p3($){return $?JSON.parse(JSON.stringify($)):{}}function iW($){let W=$?.session&&typeof $.session==="object"?$.session:void 0;if(!W)return;let Z=W.metadata&&typeof W.metadata==="object"?p3(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 AF($,W){return $.error?.message??`hub command failed: ${W}`}function Ey($){let W=p3($);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 UF($){let W=$?.sessionId;return typeof W==="string"&&W.trim()?W.trim():void 0}function Ny($){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 wy($){let W=p3($.payload);if($.event==="schedule.execution_completed")return{sessionId:$.sessionId?.trim()||UF(W)||"",eventType:"schedule.execution.completed",payload:W};if($.event==="schedule.execution_failed")return{sessionId:$.sessionId?.trim()||UF(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:Ey($.payload)};case"run.completed":return{sessionId:Z,eventType:"runtime.chat.completed",payload:W};default:return}}class Cy{options;client;metadataApplied=!1;constructor($){this.options=$;this.client=new N1({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=iW(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(d$(Z))return;throw Z}return iW(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(AF(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(AF(J,"session.restore"));let j=iW(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=Ny(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)=>iW({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=wy(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 Py{client;constructor($){this.client=new N1({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{normalizeProviderId as Sy}from"@cline/llms";function by($){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 yy($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}function ge($={}){let W=new _$({sessionService:new G$(new H$),fetch:$.fetch,telemetry:$.telemetry});return{async startSession(Z){let Q=(Z.cwd?.trim()||Z.workspaceRoot).trim(),J=await W.startSession({source:Z.source?.trim()||D0.CLI,interactive:!1,config:{providerId:Sy(Z.provider),modelId:Z.model,apiKey:Z.apiKey?.trim()||void 0,cwd:Q,workspaceRoot:Z.workspaceRoot,systemPrompt:Z.systemPrompt??"",mode:yy(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:by(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{resolveClineBuildEnv as OA}from"@cline/shared";function hy($){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(`
|
|
724
|
-
`).trim()||void 0}var DF=120,r3="...";function i3($){let W=$.trim();if(!W)return"";if(Buffer.byteLength(W,"utf8")<=DF)return W;let Z=DF-Buffer.byteLength(r3,"utf8");if(Z<=0)return r3;let Q="";for(let J of W){if(Buffer.byteLength(Q+J,"utf8")>Z)break;Q+=J}return`${Q}${r3}`}async function _F($){let W=$?.sessionId?.trim()||"unknown",Z=typeof $?.metadata?.messagesPath==="string"?$.metadata.messagesPath:void 0,J=[...await Q$(Z)].reverse().find((V)=>V.role==="assistant"),j=J?hy(J.content):void 0,X=$?.workspaceRoot?.trim()||"workspace",Y=typeof $?.metadata?.prompt==="string"?$.metadata.prompt.trim():X;return{title:`Task completed (${W})`,body:i3(j&&j.length>0?j:Y.length>0?Y:X),severity:"info"}}import{captureSdkError as sW,createSessionId as kh}from"@cline/shared";import{createSessionId as gy}from"@cline/shared";import{createSessionId as xy}from"@cline/shared";function ky($){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 Iy($){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 nW($,W,Z,Q){return{sessionId:$.sessionId,workspaceRoot:$.workspaceRoot,cwd:$.cwd,createdAt:Date.parse($.startedAt),updatedAt:Date.parse($.updatedAt),createdByClientId:W?.createdByClientId??"hub",status:ky($.status),participants:W?[...W.participants.values()]:[],metadata:Iy($),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 m($,W){return{version:$.version,requestId:$.requestId,ok:!0,...W!==void 0?{payload:W}:{}}}function S($,W,Z){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:W,message:Z}}}function G8($){return $&&typeof $==="object"&&!Array.isArray($)?$:void 0}function q0($){if(typeof $.payload?.sessionId==="string")return $.payload.sessionId.trim();return $.sessionId?.trim()??""}function V2($,W,Z){return{version:"v1",event:$,eventId:xy("hevt_"),sessionId:Z,timestamp:Date.now(),payload:W}}async function N0($,W){let Z=await $.sessionHost.getSession(W);if(!Z)return;let Q=await $.sessionHost.getAccumulatedUsage?.(W);return nW(Z,$.sessionState.get(W),Q?.usage,Q?.aggregateUsage)}async function k0($,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 Y$({session:Z,messages:Q,usage:J?.usage,aggregateUsage:J?.aggregateUsage})}function n3($,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 fF($,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 a3($,W){let Z=gy("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 o3($,W,Z){let Q=$.pendingApprovals.get(W);if(!Q)return;return $.pendingApprovals.delete(W),Q.resolve(Z),{sessionId:Q.sessionId}}function s3($,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 LF($,W){let Z=typeof W.payload?.approvalId==="string"?W.payload.approvalId.trim():"";if(!$.pendingApprovals.get(Z))return S(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=o3($,Z,{approved:j,reason:J});if(!X)return S(W,"approval_not_found",`Unknown approval: ${Z}`);return $.publish($.buildEvent("approval.resolved",{approvalId:Z,approved:j,reason:J},X.sessionId)),m(W,{approvalId:Z,approved:j})}import{createSessionId as cy}from"@cline/shared";function my($){if($ instanceof Error)return{name:$.name,message:$.message,stack:$.stack};if($===void 0)return;return $}var OF={debug:10,info:20,warn:30,error:40,silent:50};function vy(){let $=process.env.CLINE_HUB_LOG_LEVEL?.trim().toLowerCase();if($==="debug"||$==="info"||$==="warn"||$==="error"||$==="silent")return $;return process.env.VITEST?"error":"info"}function l($,W,Z={}){if(OF[$]<OF[vy()])return;let Q=JSON.stringify({ts:new Date().toISOString(),level:$,component:"hub",message:W,...Object.fromEntries(Object.entries(Z).map(([J,j])=>[J,my(j)]).filter(([,J])=>J!==void 0))});if($==="error"||$==="warn"){console.error(`[hub] ${Q}`);return}console.log(`[hub] ${Q}`)}function t3($,W){let Z=W instanceof Error?W.stack||W.message:String(W);l("error",$,{error:Z})}async function TF($,W,Z,Q,J,j){let X=cy("capreq_"),Y=performance.now();return l("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(l(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)),l("info","capability.request.published",{requestId:X,sessionId:W,capabilityName:Z,targetClientId:J})})}function zF($,W){let Z=typeof W.payload?.requestId==="string"?W.payload.requestId.trim():"",Q=$.pendingCapabilityRequests.get(Z);if(!Q)return S(W,"capability_not_found",`Unknown capability request: ${Z}`);if((W.clientId?.trim()||"")!==Q.targetClientId)return S(W,"capability_wrong_client",`Capability request ${Z} is owned by ${Q.targetClientId}`);if(W.sessionId?.trim()&&W.sessionId.trim()!==Q.sessionId)return S(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),m(W,{requestId:Z})}function f$($,W,Z){let Q=0;for(let[J,j]of[...$.pendingCapabilityRequests.entries()]){if(!W({requestId:J,...j}))continue;$.pendingCapabilityRequests.delete(J),l("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 qF($,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 S(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 m(W,X)}catch(j){return S(W,"capability_request_failed",j instanceof Error?j.message:String(j))}}function MF($,W){let Z=typeof W.payload?.requestId==="string"?W.payload.requestId.trim():"",Q=$.pendingCapabilityRequests.get(Z);if(!Q)return S(W,"capability_not_found",`Unknown capability request: ${Z}`);let J=W.clientId?.trim()||"";if(J!==Q.targetClientId)return S(W,"capability_wrong_client",`Capability request ${Z} is owned by ${Q.targetClientId}`);if(W.sessionId?.trim()&&W.sessionId.trim()!==Q.sessionId)return S(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 l(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)),m(W,{requestId:Z,ok:Y})}import{createSessionId as uy}from"@cline/shared";function RF($,W){let Z=W.payload,Q=Z?.clientId?.trim()||W.clientId?.trim()||uy("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()})),m(W,{clientId:Q})}function EF($,W){let Z=W.clientId?.trim(),Q=Z?$.clients.get(Z):void 0;if(!Z||!Q)return S(W,"client_not_found","Client is not registered with this hub.");let J=G8(W.payload?.metadata);if(Q.lastSeenAt=Date.now(),J)Q.metadata=JSON.parse(JSON.stringify(J));return m(W)}function NF($,W,Z){let Q=W.clientId?.trim();if(Q)$.clients.delete(Q),Z(Q),$.publish($.buildEvent("hub.client.disconnected",{clientId:Q}));return m(W)}function wF($,W){return m(W,{clients:[...$.clients.values()]})}A0();import{existsSync as SF,mkdirSync as dy,readdirSync as ly,readFileSync as py,rmSync as ry,writeFileSync as iy}from"node:fs";import{dirname as ny,join as CF}from"node:path";import{CONNECTOR_PLATFORMS as ay,connectorChannelsFromPlatforms as oy,listConnectorCatalog as bF,shouldIncludeConnectorField as sy}from"@cline/shared";import{resolveConnectorDataDir as ty,resolveConnectorSettingsPath as $J}from"@cline/shared/storage";var ey=1,PF={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},$h={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 L$($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function $4($){return typeof $==="string"?$.trim():void 0}function yF($){if(!SF($))return;try{let W=JSON.parse(py($,"utf8"));return L$(W)?W:void 0}catch{return}}function WJ(){let $=yF($J()),W=L$($?.connectors)?$.connectors:{},Z={};for(let[Q,J]of Object.entries(W)){if(!L$(J))continue;let j=$4(J.type),X=$4(J.configuredAt),Y=$4(J.updatedAt);if(!j||!X||!Y)continue;let V=aW(J.values),B=L$(J.security)?{enabled:J.security.enabled===!0,values:aW(J.security.values)}:void 0;Z[Q]={type:j,values:V,security:B,configuredAt:X,updatedAt:Y}}return{version:ey,connectors:Z}}function hF($){let W=$J();dy(ny(W),{recursive:!0}),iy(W,`${JSON.stringify($,null,2)}
|
|
725
|
-
`,"utf8")}function aW($){if(!L$($))return{};let W={};for(let[Z,Q]of Object.entries($))if(typeof Q==="string")W[Z]=Q.trim();return W}function Wh($){if(!Number.isInteger($)||$<=0)return!1;try{return process.kill($,0),!0}catch{return!1}}function Zh($){let W=CF(ty(),$);if(!SF(W))return[];return ly(W).filter((Z)=>Z.endsWith(".json")&&!Z.endsWith(".threads.json")).map((Z)=>CF(W,Z))}function Qh($,W,Z){let Q=W.botUsername??W.userName??W.applicationId??W.phoneNumberId??String(Z);return`${$}:${Q}`}function Jh($,W){let Z=yF(W);if(!Z)return;let Q=typeof Z.pid==="number"?Z.pid:void 0,J=typeof Z.hubUrl==="string"?Z.hubUrl:typeof Z.rpcAddress==="string"?Z.rpcAddress:void 0;if(!Q||!J||!Wh(Q))return;let j=$h[$];if(!j)return;let X={};for(let Y of j.required){let V=PF[Y](Z);if(!V||typeof V==="string"&&!V.trim())return;X[Y]=V}for(let Y of j.optional){let V=PF[Y](Z);if(V!==void 0)X[Y]=V}return{id:Qh($,X,Q),type:$,pid:Q,hubUrl:J,...X}}function jh(){let $=[];for(let{name:W}of bF())for(let Z of Zh(W)){let Q=Jh(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 Xh(){let $=WJ();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 ZJ(){return{available:oy(),active:jh(),configured:Xh()}}function Yh($,W){if($.required&&!W[$.flag]?.trim())throw Error(`${$.label} is required`)}function Vh($,W){let Z={};for(let J of $.fields)Z[J.flag]=W[J.flag]??J.initialValue??"";let Q={};for(let J of $.fields){if(!sy(J,Z))continue;Yh(J,Z),Q[J.flag]=Z[J.flag]}return Q}function Bh($){if(!L$($))throw Error("connector.configure payload must be an object.");let W=$4($.channel);if(!W)throw Error("channel is required");let Z=ay.find((K)=>K.id===W);if(!Z)throw Error(`unknown connector channel: ${W}`);if(!new Set(bF().map((K)=>K.name)).has(Z.id))throw Error(`connector channel is not available: ${W}`);let J=aW($.values),j=Vh(Z,J),X=L$($.security)?$.security:{},Y=X.enabled===!0,V=aW(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=WJ(),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},hF(B),ZJ()}function Hh($){if(!L$($))throw Error("connector.delete_config payload must be an object.");let W=$4($.channel);if(!W)throw Error("channel is required");let Z=WJ();if(delete Z.connectors[W],Object.keys(Z.connectors).length>0)hF(Z);else ry($J(),{force:!0});return ZJ()}function Gh($){return $==="connector.configure"||$==="connector.delete_config"}function e3($,W,Z){if(!Gh(W.command))return;f8($.telemetry,{ulid:W.sessionId??W.requestId??"hub",tool:W.command,success:Z})}async function kF($,W){try{if(W.command==="connector.channels")return m(W,ZJ());if(W.command==="connector.configure"){let Z=Bh(W.payload);return e3($,W,!0),m(W,Z)}if(W.command==="connector.delete_config"){let Z=Hh(W.payload);return e3($,W,!0),m(W,Z)}return S(W,"unsupported_connector_command",`unsupported connector command: ${W.command}`)}catch(Z){return e3($,W,!1),S(W,"connector_command_failed",Z instanceof Error?Z.message:String(Z))}}var Kh=30000;function Fh($){if($==="aborted")return"run.aborted";if($==="error"||$==="failed")return"run.failed";return"run.completed"}function Ah($){if($.finishReason!=="error")return;return $.text.trim()||void 0}function Uh($,W,Z){let Q=Z instanceof Error&&Z.message.trim()?Z.message:`Unknown session: ${W}`;return S($,X6,Q)}function Dh($){return $?$:void 0}function _h($){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 fh($,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);l("warn","run.heartbeat",{...X,elapsedMs:H}),$.publish($.buildEvent("run.heartbeat",{requestId:W.requestId,elapsedMs:H,...Q?{timeoutMs:Q}:{}},Z.sessionId))},Kh),V=$.sessionHost.runTurn(Z);V.then((H)=>{if(!j)return;l("warn","run.late_end",{...X,elapsedMs:Math.round(performance.now()-J),finishReason:H?.finishReason})},(H)=>{if(!j)return;l("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)),l("error","run.timeout",{...X,elapsedMs:Math.round(performance.now()-J)}),s3($,(F)=>F.sessionId===Z.sessionId,K),f$($,(F)=>F.sessionId===Z.sessionId,K),$.sessionHost.abort(Z.sessionId,K).catch((F)=>{l("error","run.timeout_abort_failed",{...X,error:F})})},Q)})])}finally{if(j=!0,clearInterval(Y),B)clearTimeout(B)}}async function IF($,W){let Z=q0(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 S(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=_h(Q);$.suppressNextTerminalEventBySession.set(Z,"run.start.reply");let V;try{V=await fh($,W,{sessionId:Z,prompt:J,mode:Dh(Q.mode),delivery:Q.delivery==="queue"||Q.delivery==="steer"?Q.delivery:void 0,userImages:Array.isArray(j?.userImages)?j.userImages:void 0,userFiles:X,timeoutMs:Y},Y)}catch(H){if($.suppressNextTerminalEventBySession.get(Z)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Z);if(d$(H))return Uh(W,Z,H);throw $.publish($.buildEvent("run.failed",{reason:"error",error:H instanceof Error?H.message:String(H)},Z)),H}if(V){let H=await k0($,Z),G=Ah(V);if($.publish($.buildEvent(Fh(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 k0($,Z);return m(W,V||B?{...V?{result:V}:{},...B?{snapshot:B}:{}}:void 0)}async function xF($,W){let Z=q0(W),Q=typeof W.payload?.reason==="string"?W.payload.reason:"Run was aborted before pending approval or capability request was resolved.";s3($,(J)=>J.sessionId===Z,Q);try{await $.sessionHost.abort(Z,W.payload?.reason)}catch(J){l("warn","run.abort_failed",{command:W.command,requestId:W.requestId,clientId:W.clientId,sessionId:Z,error:J})}finally{f$($,(J)=>J.sessionId===Z,Q)}return m(W,{applied:!0})}async function gF($,W){let Z=xW(W.payload?.payload);if(!Z)return S(W,"invalid_hook_payload","session.hook requires a valid hook event payload");return await $.sessionHost.dispatchHookEvent(Z),m(W,{applied:!0})}async function mF($,W){switch(W.type){case"chunk":return;case"agent_event":await Lh($,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([N0($,W.payload.sessionId),k0($,W.payload.sessionId)]);if(Z)$.publish($.buildEvent("session.updated",{session:Z,...Q?{snapshot:Q}:{}},W.payload.sessionId));return}case"ended":await Oh($,W);return;default:return}}async function Lh($,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 Oh($,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([N0($,W.payload.sessionId),k0($,W.payload.sessionId)]);if(W.payload.reason==="completed"){let X=await _F(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 dF,parseRuntimeConfigExtensions as lF}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as z00,HUB_COMPACTION_CAPABILITY as q00,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as M00,HUB_HOOK_CAPABILITY_PREFIX as R00,HUB_MISTAKE_LIMIT_CAPABILITY as E00,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as N00,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as w00,isHubToolExecutorName as Th}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as h00,HUB_COMPACTION_CAPABILITY as k00,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as I00,HUB_HOOK_CAPABILITY_PREFIX as x00,HUB_MISTAKE_LIMIT_CAPABILITY as g00,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as m00,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as v00}from"@cline/shared";var zh=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function B2($){return $&&typeof $==="object"&&!Array.isArray($)?JSON.parse(JSON.stringify($)):void 0}function qh($,W){let Z=typeof $.name==="string"?$.name.trim():"",Q=typeof $.description==="string"?$.description:"",J=typeof $.capabilityName==="string"?$.capabilityName.trim():"",j=B2($.inputSchema);if(!Z||!Q||!j||!J||W.has(J))return;return W.add(J),{kind:"tool",capabilityName:J,name:Z,description:Q,inputSchema:j,...B2($.lifecycle)?{lifecycle:B2($.lifecycle)}:{}}}function JJ($){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=qh(J,Z);if(Y)W.push(Y);continue}if(j==="toolExecutor"){let Y=J.executor;if(!Th(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,...B2(J.config)?{config:B2(J.config)}:{}});continue}if(j==="checkpoint"){Z.add(X),W.push({kind:"checkpoint",capabilityName:X,...B2(J.config)?{config:B2(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 cF($){let W=$.metadata?{...$.metadata}:void 0;if(W)delete W[r4];return{agentId:$.agentId,conversationId:$.conversationId,iteration:$.iteration,metadata:W&&Object.keys(W).length>0?W:void 0}}function Mh($){return Object.hasOwn($,"update")?$.update:$}function W4($){return $.trim().replace(/^\/+/,"").toLowerCase()}function Rh($){let W=($??[]).map(W4).filter(Boolean);return W.length>0?new Set(W):void 0}function Eh($,W,Z){if(!Z)return!0;let Q=W4($),J=W4(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 QJ($,W){let Z=Rh(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)=>Eh(Q.id,Q.name,Z))}function vF($,W){let Z=async(Q,J)=>{let j=W4(Q),Y=QJ($,W).filter((K)=>K.id===j||W4(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?`
|
|
719
|
+
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=G8($),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=N3();return this.run(`UPDATE team_runs SET status = 'interrupted', error = ?, ended_at = ?, version = version + 1
|
|
720
|
+
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 vK($={}){try{let W=new r6($);return W.init(),W}catch{let W=new wW({teamDir:$.teamDir});return W.init(),W}}function CW($,W){return pS($,W)}function iS($,W){let Z=W?.["*"]??{},Q=W?.[$]??{};return{...Z,...Q}.enabled!==!1}function nS($,W){return $.filter((Z)=>iS(Z.name,W))}function E3($,W){return l1(nS($,W))}var aS={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 oS($){let W=$.trim().toLowerCase();return aS[W]??W}function sS($,W){if(W.tools===void 0)return $;let Z=new Set(W.tools.map(oS));if(W.skills!==void 0)Z.add("skills");return $.filter((Q)=>Z.has(Q.name))}function cK(){return`team-${rS(5)}`}function PW($,W,Z,Q,J,j,X,Y){let V=Y1[o1({mode:Z})],B=m8(W,Q,Z,J??g8);return E3(n8({cwd:$,...V,enableSkills:!!X,...B,executors:{...X?{skills:X}:{},...Y??{}}}),j)}function tS($){return PW($.cwd,$.providerId,$.mode,$.modelId,$.toolRoutingRules,$.toolPolicies,eS,$.toolExecutors).some((W)=>W.name==="skills")}var eS=async()=>"";async function $b($){let W=Q0();if(!c$({filePath:W}))return{tools:[]};let Z=new Z6({clientFactory:S5({settingsPath:W})}),Q;try{Q=await W6(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)=>y5({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 Wb($,W){if(!$)return;for(let Z of $.getTeammateIds())try{$.shutdownTeammate(Z,W)}catch{}}function Zb($){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 Qb($){let W=Y1[o1({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 SW{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=Qb(W),F=W.workspaceRoot??W.cwd,A=$.toolPolicies??W.toolPolicies,D=T1(),U=[],f=W.teamName?.trim()||cK(),_=W.sessionId?.trim()||f,q=K.enableSpawnAgent?$W({workspaceRoot:F}):{configs:[],errors:[]},O=q.configs.some((c)=>c.skills!==void 0),T=CW(B,"rules"),L=CW(B,"skills"),N=L||O,M=CW(B,"workflows"),u=CW(B,"plugins"),b=T||L||M,E=!1,d=Boolean(V),g=V,U1;for(let c of q.errors)(J??W.logger)?.log?.(`[agents] Failed to load agent config at ${c.path}: ${c.error.message}`);if(!g&&(b||O))g=u2({skills:N?{workspacePath:F,includePluginSkills:u,pluginSkillDirectories:u?$.pluginSkillDirectories:void 0,pluginPaths:W.pluginPaths,cwd:W.cwd}:{workspacePath:F},rules:{workspacePath:W.cwd},workflows:{workspacePath:W.cwd}});if(g)await g.start().catch(()=>{});let z$=K.enableTools&&L&&Boolean(g)&&g?.hasConfiguredSkills(W.skills)===!0&&tS({cwd:W.cwd,providerId:W.providerId,mode:K.mode,modelId:W.modelId,toolRoutingRules:W.toolRoutingRules,toolPolicies:A,toolExecutors:H}),K2=g&&b?g.createExtension({includeRules:T,includeSkills:L,includeWorkflows:M,registerSkillsTool:z$,allowedSkillNames:W.skills}):void 0,h0=K2?[...Q??W.extensions??[],K2]:Q??W.extensions;if(K.enableTools){if(U.push(...PW(W.cwd,W.providerId,K.mode,W.modelId,W.toolRoutingRules,A,void 0,H)),!K.disableMcpSettingsTools){let c=await $b(W.logger);U.push(...c.tools),U1=c.shutdown}}let V0,g0=K.enableAgentTeams?vK():void 0,F2=g0?.loadRuntime(_),q0=F2?.state,e0=F2?.teammates??[],w0=new Map(e0.map((c)=>[c.agentId,c])),K0=W.sessionId||f,x,m0=[],C=!1,o=m2({providerId:W.providerId,modelId:W.modelId,cwd:W.cwd,apiKey:W.apiKey??"",baseUrl:W.baseUrl,headers:W.headers,providerConfig:W.providerConfig,knownModels:W.knownModels,thinking:W.thinking,reasoningEffort:W.reasoningEffort,thinkingBudgetTokens:W.thinkingBudgetTokens,maxTokensPerTurn:W.maxTokensPerTurn,temperature:W.temperature,maxIterations:W.maxIterations,hooks:Z,extensions:h0,logger:J??W.logger,telemetry:$.telemetry??W.telemetry,workspaceMetadata:W.workspaceMetadata});if(K.enableSpawnAgent){if(q.configs.length>0)U.push(...E3(ZW({configProvider:o,agents:q.configs,createSubAgentTools:(c)=>K.enableTools?sS(PW(W.cwd,c.providerId??W.providerId,K.mode,c.modelId??W.modelId,W.toolRoutingRules,A,c.skills!==void 0&&g?.createSkillsExecutor?g.createSkillsExecutor(c.skills):void 0,H),c):[],hookErrorMode:W.hookErrorMode,toolPolicies:A,requestToolApproval:$.requestToolApproval,onSubAgentEvent:$.onSubAgentEvent,onSubAgentStart:$.onSubAgentStart,onSubAgentEnd:$.onSubAgentEnd}),A))}if(!this.teamRuntimeEntries.has(K0))this.teamRuntimeEntries.set(K0,{delegatedAgentConfigProvider:o});let D0=()=>{if(!K.enableAgentTeams)return;let c=this.teamRuntimeEntries.get(K0)??{delegatedAgentConfigProvider:o};if(this.teamRuntimeEntries.set(K0,c),V0=c.runtime,!V0){if(V0=new b6({teamName:f,leadAgentId:W.sessionId||"lead",missionLogIntervalSteps:K.missionLogIntervalSteps,missionLogIntervalMs:K.missionLogIntervalMs,onTeamEvent:(J0)=>{if(G(J0),V0&&g0){if(J0.type==="teammate_spawned"&&J0.teammate?.rolePrompt){let D1={agentId:J0.agentId,rolePrompt:J0.teammate.rolePrompt,modelId:J0.teammate.modelId,maxIterations:J0.teammate.maxIterations};w0.set(D1.agentId,D1)}if(J0.type==="teammate_shutdown"&&!Zb(J0.reason))w0.delete(J0.agentId);g0.handleTeamEvent(_,J0),g0.persistRuntime(_,V0.exportState(),Array.from(w0.values()))}}}),q0)V0.hydrateState(q0),C=!0;c.runtime=V0}if(!E){if(!V0)return;E=!0;let J0=z5({runtime:V0,leadAgentId:W.sessionId||"lead",restoredFromPersistence:Boolean(q0),restoredTeammates:e0,includeLeadSpawnTool:!0,includeLeadManagementTools:!0,onLeadToolsUnlocked:(D1)=>{m0=D1,x?.addTools(D1)},createBaseTools:K.enableTools?()=>PW(W.cwd,W.providerId,K.mode,W.modelId,W.toolRoutingRules,A,void 0,H):void 0,teammateConfigProvider:o});if(C)V0.recoverActiveRuns("runtime_recovered");if(J0.restoredFromPersistence)Y?.();U.push(...J0.tools)}return V0};if(K.enableSpawnAgent&&X){let c=X();U.push({...c,execute:async(J0,D1)=>{return D0(),c.execute(J0,D1)}})}if(K.enableAgentTeams)D0();let C0=E3(U,A),f8=C0.some((c)=>c.name==="submit_and_exit"&&c.lifecycle?.completesRun===!0),A2=K.enableAgentTeams?()=>{let c=this.teamRuntimeEntries.get(K0)?.runtime;if(!c)return;let J0=c.listTasks(),D1=J0.some((g1)=>g1.status==="in_progress"||g1.status==="pending"),nJ=c.listRuns({}),wU=nJ.some((g1)=>g1.status==="running"||g1.status==="queued");if(D1||wU){let g1=J0.filter((v0)=>v0.status==="in_progress"||v0.status==="pending").map((v0)=>`${v0.id} (${v0.status}): ${v0.title}`).join(", "),aJ=nJ.filter((v0)=>v0.status==="running"||v0.status==="queued").map((v0)=>`${v0.id} (${v0.status})`).join(", "),A9=[];if(g1)A9.push(`Unfinished tasks: ${g1}`);if(aJ)A9.push(`Active runs: ${aJ}`);return`[SYSTEM] You still have team obligations. ${A9.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,EU=f8?{requireCompletionTool:!0,...A2?{completionGuard:A2}:{}}:A2?{completionGuard:A2}:void 0;return{tools:C0,logger:J??W.logger,telemetry:j??W.telemetry,teamRuntime:V0,teamRestoredFromPersistence:Boolean(q0),delegatedAgentConfigProvider:this.teamRuntimeEntries.get(K0)?.delegatedAgentConfigProvider??o,extensions:h0,completionPolicy:EU,registerLeadAgent:(c)=>{if(x=c,m0.length>0)c.addTools(l1(m0,[...D]))},shutdown:async(c)=>{if(Wb(V0,c),this.teamRuntimeEntries.delete(K0),await U1?.(),!d)g?.stop()}}}}function Jb($,W){let Z=$?.expiresAt,Q=W?.expiresAt;return $?.accessToken===W?.accessToken&&$?.refreshToken===W?.refreshToken&&$?.accountId===W?.accountId&&Z===Q}class bW 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 w3{providerSettingsManager;telemetry;refreshInFlight=new Map;constructor($){this.providerSettingsManager=$?.providerSettingsManager??new U$,this.telemetry=$?.telemetry}async resolveProviderApiKey($){let W=A0($.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=A0($);if(!Q)return null;let J=this.providerSettingsManager.getProviderSettings(W);if(!J)return s(`oauth.resolve providerId=${$} storageProviderId=${W} outcome=no_settings`),null;let j=e9($,J);if(!j)return s(`oauth.resolve providerId=${$} storageProviderId=${W} outcome=no_credentials`),null;s(`oauth.resolve.start providerId=${$} storageProviderId=${W} forceRefresh=${Z} accessTokenHash=${P0(j.access)} refreshTokenHash=${P0(j.refresh)}`);let X=await Q.refresh({settings:J,credentials:j,forceRefresh:Z,telemetry:this.telemetry});if(!X)throw s(`oauth.resolve providerId=${$} outcome=refresh_returned_null`),new bW($);let Y=q8({manager:this.providerSettingsManager,providerId:$,settings:J,credentials:X,setLastUsed:!1,save:!1}),V=!Jb(J.auth,Y.auth);if(V)s(`oauth.resolve.refreshed providerId=${$} newAccessTokenHash=${P0(X.access)} newRefreshTokenHash=${P0(X.refresh)} savingToDisk=true`),this.providerSettingsManager.saveProviderSettings(Y,{setLastUsed:!1,tokenSource:"oauth"});else s(`oauth.resolve providerId=${$} outcome=not_refreshed`);return{apiKey:Q.getApiKey(Y)??X.access,accountId:X.accountId,refreshed:V}}}import{normalizeUserInput as jb}from"@cline/shared";import{nanoid as Xb}from"nanoid";class uK{list($){return $?o0($):[]}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:o0($),updated:!1};let J=$.pendingPrompts[Q];if(!J)return{sessionId:W.sessionId,prompts:o0($),updated:!1};let j=W.prompt===void 0?J.prompt:jb(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),Yb($,Y,Q,J.delivery),{sessionId:W.sessionId,prompts:o0($),prompt:yW(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:o0($),removed:!1};let[J]=$.pendingPrompts.splice(Q,1);return{sessionId:W.sessionId,prompts:o0($),prompt:J?yW(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()}_${Xb(5)}`,prompt:Z,mode:Q,delivery:J,userImages:j,userFiles:X};if(J==="steer")$.pendingPrompts.unshift(V);else $.pendingPrompts.push(V)}return o0($)}consumeSteer($){let W=$.pendingPrompts.findIndex((Q)=>Q.delivery==="steer");if(W<0)return{prompts:o0($)};let[Z]=$.pendingPrompts.splice(W,1);return{entry:Z,prompts:o0($)}}shiftNext($){return{entry:$.pendingPrompts.shift(),prompts:o0($)}}requeueFront($,W){return $.pendingPrompts.unshift(W),o0($)}clear($){return $.pendingPrompts.length=0,[]}}class C3{deps;service=new uK;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:o0($)}})}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=yW(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 yW($){return{id:$.id,prompt:$.prompt,delivery:$.delivery,attachmentCount:($.userImages?.length??0)+($.userFiles?.length??0),userImages:$.userImages,userFiles:$.userFiles}}function o0($){return $.pendingPrompts.map(yW)}function Yb($,W,Z,Q){if(W.delivery==="steer")$.pendingPrompts.unshift(W);else if(Q==="steer")$.pendingPrompts.push(W);else $.pendingPrompts.splice(Z,0,W)}F0();class S3{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=j3(Z),X=!!Q&&(!j.agentId||j.agentId===P3(Q.agent));X3(J,Z,X?{isPrimaryAgentEvent:!0,agentId:P3(Q.agent),conversationId:Q.agent.getConversationId(),...Q?.runtime.teamRuntime?{teamRole:"lead"}:{}}:{isPrimaryAgentEvent:!1})}async handleTeamEvent($,W){let Z=this.deps.getSession($);if(Z){if(x7(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};X3(Q,W.event,{agentId:W.agentId,teamRole:"teammate",teamAgentId:W.agentId,isPrimaryAgentEvent:!1})}if(W.type==="teammate_spawned"){let Q=b1({agentId:W.teammate.runtimeAgentId??W.agentId,conversationId:W.teammate.conversationId,parentAgentId:W.teammate.parentAgentId,createdByAgentId:P3(Z.agent),teamId:Z.runtime.teamRuntime?.getTeamId(),teamName:Z.runtime.teamRuntime?.getTeamName(),teamRole:"teammate",teamAgentId:W.agentId});if(Q)R$(Z.config.telemetry,{ulid:$,modelId:W.teammate.modelId??Z.config.modelId,provider:Z.config.providerId,...Q})}}if(await g7($,W,this.deps.invokeBackendOptional),Z)m7(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 P3($){return $.getAgentId()}function b3($){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:y1($.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 y3($,W){let Z=$[W];return typeof Z==="function"?Z:null}async function dK($,W,...Z){let Q=y3($,W);if(!Q)throw Error(`session service method not available: ${W}`);return Promise.resolve(Q.apply($,Z))}async function lK($,W,...Z){let Q=y3($,W);if(!Q)return;await Promise.resolve(Q.apply($,Z))}async function pK($,W,...Z){let Q=y3($,W);if(!Q)return;return await Promise.resolve(Q.apply($,Z))}$1();F0();function h3($,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=b1({agentId:Q.subAgentId,conversationId:Q.conversationId,parentAgentId:Q.parentAgentId,teamId:J?.getTeamId(),teamName:J?.getTeamName(),createdByAgentId:Q.parentAgentId});if(j)R$(W.telemetry,{ulid:Z,modelId:W.modelId,provider:W.providerId,...j});B4(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(`
|
|
721
|
+
`).length:0;B4(W.telemetry,{event:"ended",ulid:Z,durationMs:X,outputLines:Y,errorMessage:Q.error?String(Q.error):void 0,agentId:Q.subAgentId,parentId:Q.parentAgentId,...b1({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 k3($,W,Z,Q){let J=h3($,W,Z);return c2({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?n8({cwd:W.cwd,...Y1[o1({mode:W.mode})],executors:Q}):[];if(W.enableSpawnAgent)X.push(k3($,W,Z,Q));return l1(X)},...J})}import{readFile as Vb,stat as Bb}from"node:fs/promises";var Hb=20480000;async function rK($){let W=await Bb($);if(!W.isFile())throw Error("Path is not a file");if(W.size>Hb)throw Error("File is too large to read into context.");let Z=await Vb($,"utf8");if(Z.includes("\x00"))throw Error("Cannot read binary file into context.");return Z}var iK=5000;function i6($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function fb($){if(!$||typeof $!=="object"||Array.isArray($))return;let W=$,Z=i6(W.inputTokens),Q=i6(W.outputTokens),J=i6(W.cacheReadTokens),j=i6(W.cacheWriteTokens),X=i6(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 Lb($,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 nK($,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 _${runtimeAddress=void 0;pendingPrompts;sessionService;runtimeBuilder;createAgentInstance;toolExecutors;defaultCapabilities;defaultToolPolicies;providerSettingsManager;oauthTokenManager;defaultTelemetry;defaultFetch;events=new T6;sessions=new Map;manifestMutationQueues=new Map;usageBySession=new Map;aggregateUsageBySession=new Map;subAgentStarts=new Map;pendingPromptsController;eventBridge;sessionVersioning=new B8;constructor($){let W=Kb();if(W)_b(W);let Z=a0($.distinctId);this.sessionService=$.sessionService,this.runtimeBuilder=$.runtimeBuilder??new SW,this.createAgentInstance=$.createAgent??((Q)=>new t1(Q)),this.defaultCapabilities=S0($.capabilities),this.toolExecutors=this.defaultCapabilities?.toolExecutors,this.defaultToolPolicies=$.toolPolicies,this.providerSettingsManager=$.providerSettingsManager??new U$,this.oauthTokenManager=$.oauthTokenManager??new w3({providerSettingsManager:this.providerSettingsManager,telemetry:$.telemetry}),this.defaultTelemetry=$.telemetry,this.defaultTelemetry?.setDistinctId(Z),this.defaultFetch=$.fetch,this.pendingPromptsController=new C3({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 S3({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??U0.CLI,Z=Z0(),Q=$.config.sessionId?.trim()??"",J=Q||Ab(),j=await this.applyInitialOAuthCredentials($),X=j.initialMessages??[],Y=X.length>0?KW(X):N0(),V=await this.invokeOptionalValue("ensureSessionsDir")??"";if(!V)throw Error("session service method not available: ensureSessionsDir");let B=I3(V,J),H=I3(B,`${J}.messages.json`),G=I3(B,`${J}.json`),K=y1($.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,D;if(Q.length>0&&X.length>0&&!j.prompt?.trim()){let C=await this.invokeOptionalValue("readSessionManifest",J);if(C)F=C,A={manifestPath:G,messagesPath:C.messages_path||H,compactionPath:C.compaction_path,manifest:C},D=await this.invokeOptionalValue("readSessionCompactionState",J)}let f=await this.seedAggregateUsageFromArtifacts({initialUsage:Y,sessionDir:B,rootMessagesPath:A?.messagesPath??H,manifest:F});this.usageBySession.set(J,Y),this.aggregateUsageBySession.set(J,f);let _=S0(this.defaultCapabilities,$.capabilities),q=_?.toolExecutors??this.toolExecutors,O=$.localRuntime,T=O?.extensionContext?.logger??O?.logger,L=O?.extensionContext?.automation,N,M={getSession:(C)=>this.sessions.get(C),subAgentStarts:this.subAgentStarts,onAgentEvent:(C,o,D0)=>this.eventBridge.dispatchAgentEvent(C,o,D0),invokeBackendOptional:(C,...o)=>this.invokeOptional(C,...o)};N=await HK({input:j,localRuntime:$.localRuntime,sessionId:J,providerSettingsManager:this.providerSettingsManager,defaultTelemetry:this.defaultTelemetry,defaultCapabilities:_,defaultToolPolicies:this.defaultToolPolicies,defaultFetch:this.defaultFetch,onPluginEvent:(C)=>{if(C.name==="plugin_log"){this.eventBridge.handlePluginLog(J,C.payload,T);return}this.eventBridge.handlePluginEvent(J,C,L)},onTeamEvent:(C)=>{this.eventBridge.handleTeamEvent(J,C),N.config.onTeamEvent?.(C)},createSpawnTool:()=>k3(M,N.config,J,q),createSubAgentLifecycleCallbacks:(C)=>h3(M,C,J),readSessionMetadata:async()=>(await this.getSession(J))?.metadata,writeSessionMetadata:async(C)=>{await this.persistSessionMetadata(J,()=>C)}});let u=xQ(j.sessionMetadata??A?.manifest.metadata,N.gitState);if(!A)F.metadata=u;let b=await this.runtimeBuilder.build(N.runtimeBuilderInput),E=N.config,d=N.providerConfig;if(b.teamRuntime&&!E.teamName?.trim())E.teamName=b.teamRuntime.getTeamName();let g=async()=>{let C=this.sessions.get(J);if(!C||!T2(C.config.providerId))return!1;try{return await this.syncOAuthCredentials(C,{forceRefresh:!0}),!0}catch{return!1}};b.delegatedAgentConfigProvider?.updateConnectionDefaults({onAuthError:g});let U1=[...b.tools,...E.extraTools??[]],z$=b.extensions??N.extensions,K2=j.initialCompactionState,h0,V0=Q3(E),g0=K2??D,F2=V0&&g0?{...g0,conversation_id:g0.conversation_id?.trim()||J}:void 0,q0=V0?J3({compact:V0,getState:()=>h0?.compactionState,saveState:async(C)=>{let o=h0;if(!o)return;let D0={...C,conversation_id:o.sessionId};try{if(!(await this.persistActiveSessionCompactionState(o,D0)).updated)E.logger?.debug?.("Skipped stale session compaction state",{sessionId:o.sessionId,sourceMessageCount:D0.source_message_count})}catch(C0){E.logger?.error?.("Failed to persist session compaction state",{sessionId:o.sessionId,error:C0}),D$(E.telemetry,{component:"core",operation:"session.persist_compaction_state",severity:"warn",handled:!0,error:C0,context:{sessionId:o.sessionId,providerId:E.providerId,modelId:E.modelId}})}}}):void 0,e0={sessionId:J,providerId:d.providerId,modelId:d.modelId,apiKey:d.apiKey,baseUrl:d.baseUrl,headers:d.headers,onAuthError:g,knownModels:d.knownModels,providerConfig:d,thinking:E.thinking,reasoningEffort:E.reasoningEffort??d.reasoningEffort,thinkingBudgetTokens:E.thinkingBudgetTokens,maxTokensPerTurn:E.maxTokensPerTurn,temperature:E.temperature,systemPrompt:E.systemPrompt,maxIterations:E.maxIterations,execution:E.execution,prepareTurn:q0,tools:U1,hooks:N.hooks,extensions:z$,hookErrorMode:E.hookErrorMode,initialMessages:N.effectiveInput.initialMessages,userFileContentLoader:rK,toolPolicies:N.toolPolicies,requestToolApproval:N.requestToolApproval?async(C)=>{let o=N.requestToolApproval,D0=this.sessions.get(J);if(D0)await this.markTurnPending(D0);try{if(!o)return{approved:!1,reason:"Tool approval callback is not configured."};return await o(C)}finally{let C0=this.sessions.get(J);if(C0?.status==="pending")await this.markTurnRunning(C0)}}:void 0,telemetry:E.telemetry,onConsecutiveMistakeLimitReached:E.onConsecutiveMistakeLimitReached,completionPolicy:b.completionPolicy,consumePendingUserMessage:()=>{let C=this.pendingPromptsController.consumeSteer(J);return C?h6(C.prompt,C.mode??E.mode):void 0},logger:b.logger??E.logger,extensionContext:E.extensionContext,onEvent:(C)=>this.eventBridge.dispatchAgentEvent(J,E,C)};e0.hooks={...e0.hooks,onEvent:async(C)=>{if(await N.hooks?.onEvent?.(C),C.type!=="assistant-message")return;let o=this.sessions.get(J);if(!o)return;let D0=o.agent.getMessages();try{await this.invoke("persistSessionMessages",J,D0,E.systemPrompt)}catch(C0){E.logger?.error?.("Failed to persist session messages after assistant response",{sessionId:J,error:C0}),D$(E.telemetry,{component:"core",operation:"session.persist_messages_after_assistant_response",error:C0,severity:"warn",handled:!0,context:{sessionId:J,providerId:E.providerId,modelId:E.modelId}})}}};let w0=this.createAgentInstance(e0);if(e0.onEvent)w0.subscribeEvents(e0.onEvent);b.registerLeadAgent?.(w0);let K0=b1({agentId:w0.getAgentId(),conversationId:w0.getConversationId(),teamId:b.teamRuntime?.getTeamId(),teamName:b.teamRuntime?.getTeamName(),teamRole:b.teamRuntime?"lead":void 0});if(GK(E,J,Q.length>0,K,K0),K0)R$(E.telemetry,{ulid:J,modelId:E.modelId,provider:E.providerId,...K0});if(b.teamRuntime)S9(E.telemetry,{ulid:J,teamId:b.teamRuntime.getTeamId(),teamName:b.teamRuntime.getTeamName(),leadAgentId:w0.getAgentId(),restoredFromPersistence:b.teamRestoredFromPersistence===!0});let x={sessionId:J,config:E,sessionMetadata:u,...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:b,agent:w0,started:!1,status:A?.manifest.status??"running",aborting:!1,interactive:$.interactive===!0,persistedMessages:X,compactionState:F2,activeTeamRunIds:new Set,pendingTeamRunUpdates:[],teamRunWaiters:[],pendingPrompts:[],drainingPendingPrompts:!1,pluginSandboxShutdown:N.pluginSandboxShutdown,submitAndExitObserved:!1,lastInteractiveTurnFinishReason:void 0};if(h0=x,x.compactionState&&!this.isCompactionStateForSession(x.sessionId,x.compactionState,x))x.config.logger?.log?.("Ignoring session compaction state for a different conversation",{severity:"warn",sessionId:x.sessionId,conversationId:x.compactionState.conversation_id}),x.compactionState=void 0;if(this.sessions.set(J,x),A)await this.refreshActiveSessionGitMetadata(x,N.gitState);if(this.emitStatus(J,"running"),X.length>0&&!A){if(await this.ensureSessionPersisted(x),await this.invoke("persistSessionMessages",x.sessionId,X,x.config.systemPrompt),x.compactionState){if(!(await this.persistActiveSessionCompactionState(x,x.compactionState)).updated)x.compactionState=void 0}if(!j.prompt?.trim())await this.updateStatus(x,"completed",0)}let m0;try{if(j.prompt?.trim())if(m0=await this.executeTurn(x,{prompt:j.prompt,userImages:j.userImages,userFiles:j.userFiles}),!x.interactive)await this.finalizeSingleRun(x,m0.finishReason);else await this.completeInteractiveTurn(x,m0.finishReason)}catch(C){if(x.interactive&&x.aborting)m0=await this.completeAbortedInteractiveTurn(x);else{D$(x.config.telemetry,{component:"core",operation:"session.start",error:C,severity:"error",handled:!1,context:{sessionId:x.sessionId,providerId:x.config.providerId,modelId:x.config.modelId}});try{await this.failSession(x)}catch(o){x.config.logger?.error?.("Session failure cleanup threw",{sessionId:x.sessionId,error:o})}throw C}}return{sessionId:J,manifest:F,manifestPath:G,messagesPath:H,result:m0}}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 D$(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=V7(this.usageBySession.get($)),Z=V7(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&&!B0(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&&!B0(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 b3(W);let Z=$.trim();if(!Z)return;let Q=await this.getRow(Z);if(Q)return f6(Q);let J=await this.readManifest(Z);return J?G7(J):void 0}async listSessions($=200){let Z=(await this.listRows($)).map(f6),Q=new Set(Z.map((J)=>J.sessionId));for(let J of this.sessions.values()){if(Q.has(J.sessionId))continue;Z.unshift(b3(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(nK(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 N6(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(nK(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 Q$(Z.messagesPath);let Q=await this.readManifest(W);return Q$(Q?.messages_path)}async dispatchHookEvent($){await sB($,{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=g2(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(v7($,X.finishReason)){let Y=await c7($);if(Y.length===0)break;let V=u7($,Y);X=await this.executeAgentTurn($,V)}return X}finally{await this.refreshActiveSessionGitMetadata($)}}async completeInteractiveTurn($,W){if(y6($))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=N0();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)??N0(),Y=this.aggregateUsageBySession.get($.sessionId)??X;$.turnUsageBaseline=X,$.turnAggregateUsageBaseline=Y,$.turnPrimaryUsage=N0(),$.turnUsageByAgent=new Map,M9($.config.telemetry,$.sessionId,$.config.mode),L8($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,model:$.config.modelId,source:"user",mode:$.config.mode,...this.getSessionAgentTelemetryIdentity($)});try{let V=J?()=>$.agent.continue(W,Z,Q):()=>$.agent.run(W,Z,Q),B=await this.runWithAuthRetry($,V,j);$.started=!0;let H=c5(B.messages,B,j);$.persistedMessages=H;let G=GW($.turnUsageByAgent?.values()??[]),K=T0(X,B.usage),F=T0(T0(N0(),B.usage),G),A=T0(Y,F);return this.usageBySession.set($.sessionId,K),this.aggregateUsageBySession.set($.sessionId,A),await this.persistSessionMetadata($.sessionId,(D)=>({...D??{},totalCost:K.totalCost,aggregatedAgentsCost:A.totalCost,usage:K,aggregateUsage:A})),await this.invoke("persistSessionMessages",$.sessionId,H,$.config.systemPrompt),this.observeTaskCompletionTool($,B),B}catch(V){throw D$($.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===R0.SUBMIT_AND_EXIT&&Q.error===void 0))return;$.submitAndExitObserved=!0,Y4($.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=y1($.config),Q=Db(W.prompt).trim();if(!Q)return{prompt:"",userImages:W.userImages,userFiles:this.resolveAbsoluteFilePaths($.config.cwd,W.userFiles)};let J=await H5(Q,Z);KK($.config.telemetry,J);let j=h6(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=y1($.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 wB(y1($.config));if(!Z||!$.artifacts)return;if(NB($.artifacts.manifest.metadata,Z))return;await this.persistSessionMetadata($.sessionId,(Q)=>xQ({...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(y6($))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)Y4($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"shutdown",...this.getSessionAgentTelemetryIdentity($)});jW($);let Z=[],Q=(J,j)=>{Z.push(j),$.config.logger?.log("Session shutdown cleanup failed",{sessionId:$.sessionId,stage:J,error:j,severity:"warn"}),D$($.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"}),D$($.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,B0(W))delete j.ended_at,j.exit_code=null;else j.ended_at=Q.endedAt??Z0(),j.exit_code=typeof Z==="number"?Z:null});if(!J)return;$.status=W,$.updatedAt=Q.endedAt??Z0(),$.endedAt=B0(W)?null:J.ended_at,$.exitCode=J.exit_code,this.emitStatus($.sessionId,W)}async runWithAuthRetry($,W,Z){try{return await W()}catch(Q){if(!T2($.config.providerId)||!Ub(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 bW)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 u$($);throw D$(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)=>Fb(Q)?Q:x3($,Q));return Array.from(new Set(Z))}getSessionAgentTelemetryIdentity($){return b1({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=T0($.initialUsage,W);return this.withPersistedAggregateUsageFloor(Z,$.manifest)}async summarizePersistedTeammateUsage($,W,Z){let Q=x3(W),J=`${Z}.messages.json`,j;try{j=Gb($)}catch{return N0()}let X=N0();for(let Y of j){if(!Y.endsWith(".messages.json"))continue;if(Y===J)continue;let V=x3($,Y);if(V===Q)continue;let B=await Q$(V);if(B.length===0)continue;X=T0(X,KW(B))}return X}withPersistedAggregateUsageFloor($,W){let Z=fb(W.metadata?.aggregateUsage);if(Z)return Lb($,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:Y$({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($)),iK))}async getRow($){let W=$.trim();if(!W)return;return(await this.listRows(iK)).find((Q)=>Q.sessionId===W)}async readManifest($){let W=$.trim();if(!W)return;return await this.invokeOptionalValue("readSessionManifest",W)}invoke($,...W){return dK(this.sessionService,$,...W)}invokeOptional($,...W){return lK(this.sessionService,$,...W)}invokeOptionalValue($,...W){return pK(this.sessionService,$,...W)}}function Tb($){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 n6,a6;function Ob($,W){if($!=="auto"&&$!=="hub")return;if(W.hub?.endpoint?.trim())return;LH(W.hub?.workspaceRoot?.trim()||W.hub?.cwd?.trim()||process.cwd())}async function zb($){await $.reconcileDeadSessions?.().catch(()=>{})}function sK($){try{let W=new H$;return W.init(),new G$(W,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}catch(W){return $.telemetry?.capture({event:"session_backend_fallback",properties:{requestedBackend:"sqlite",fallbackBackend:"file"}}),oK($.telemetry,{component:"core",operation:"session_backend.sqlite_init",error:W,severity:"warn",handled:!0,context:{requestedBackend:"sqlite",fallbackBackend:"file"}}),new r7(void 0,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}}function aK($,W,Z){return new _$({sessionService:Z??$.sessionService??sK($),capabilities:$.capabilities,telemetry:$.telemetry,toolPolicies:$.toolPolicies,distinctId:W,fetch:$.fetch})}async function qb($){if(n6)return n6;if(a6)return await a6;return a6=(async()=>{return n6=sK($),await zb(n6),n6})().finally(()=>{a6=void 0}),await a6}async function hW($){let W=a0($.distinctId);$.telemetry?.setDistinctId(W);let Z=Tb($);if(Ob(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 o5({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 R6({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 $2({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 O7({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 $2({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}),oK($.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"}),aK($,W)}return aK($,W)}import{existsSync as Mb,mkdirSync as Rb,readFileSync as Nb,writeFileSync as Eb}from"node:fs";import{dirname as wb}from"node:path";import{FEATURE_FLAGS as tK,FeatureFlagDefaultValue as g3}from"@cline/shared";var Cb=3600000,Pb=604800000,eK=1;class o6{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??Cb,this.cacheFilePath=$.cacheFilePath,this.persistentCacheMaxAgeMs=$.persistentCacheMaxAgeMs??Pb,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:tK.length>0?tK: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||!Mb(this.cacheFilePath))return;let $=JSON.parse(Nb(this.cacheFilePath,"utf8"));if(!$||typeof $!=="object")return;let W=$;if(W.version!==eK||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;Rb(wb(this.cacheFilePath),{recursive:!0,mode:448});let $=this.getCacheSnapshot(),W={version:eK,updatedAt:$.updateTime,userId:$.userId,flagsPayload:$.flagsPayload};Eb(this.cacheFilePath,`${JSON.stringify(W,null,2)}
|
|
722
|
+
`,"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??g3[$]??void 0;if(!this.cache.has($)||this.cache.get($)!==Q)this.telemetry?.capture({event:I.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}),g3[$]??!1}}getBooleanFlagEnabled($){return this.cache.get($)===!0}getFlagPayload($){return this.cache.get($)??g3[$]}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 s6{async getAllFlagsAndPayloads(){return{}}enabled=!1;getSettings(){return{enabled:!1,timeoutMs:1000}}async dispose(){}}e2();import{execFile as Sb}from"node:child_process";import*as WF from"node:fs/promises";import*as K8 from"node:path";import{promisify as bb}from"node:util";var yb=bb(Sb),hb=52428800;async function kW($,W){let{stdout:Z}=await yb("git",["-C",$,...W],{windowsHide:!0,maxBuffer:hb,encoding:"utf8"});return Z}function $F($){return $.split("\x00").filter(Boolean)}function ZF($,W){let Z=K8.resolve($,W),Q=K8.relative($,Z);if(Q.startsWith("..")||K8.isAbsolute(Q))throw Error(`Checkpoint diff path escapes workspace: ${W}`);return Z}async function kb($,W,Z){try{return await kW($,["show",`${W}:${Z}`])}catch{return""}}async function Ib($,W){try{return await WF.readFile(ZF($,W),"utf8")}catch{return""}}async function xb($,W){await kW($,["cat-file","-e",`${W.ref}^{tree}`]);let[Z,Q]=await Promise.all([kW($,["diff","--name-only","-z",W.ref,"--"]),kW($,["ls-files","--others","--exclude-standard","-z"])]);return[...new Set([...$F(Z),...$F(Q)])].sort((j,X)=>j.localeCompare(X))}function QF($){let W=$.checkpointRunCount;if(!Number.isInteger(W)||W<1)throw Error("checkpointRunCount must be a positive integer");let Z=EW(p6($.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 JF($,W){let Z=await xb($,W);return(await Promise.all(Z.map(async(J)=>{let[j,X]=await Promise.all([kb($,W.ref,J),Ib($,J)]);return{filePath:ZF($,J),leftContent:j,rightContent:X}}))).filter((J)=>J.leftContent!==J.rightContent)}async function m3($){let W=QF($),Z=await JF(W.cwd,W.checkpoint);return{...W,diffs:Z}}class v3{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=DB($),this.pendingPrompts=_B($),this.automation=new BZ(()=>{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 U6({workspaceRoot:B.workspaceRoot??process.cwd(),specs:{cronSpecsDir:B.cronSpecsDir??B.cronDir,scope:aj(B.cronScope),workspaceRoot:B.workspaceRoot},runtimeHandlers:oj({host:$,getExtensionContext:()=>N4({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=a0($.distinctId),Z=S0($.capabilities),Q={...$,capabilities:Z,distinctId:W},J=await hW(Q),j=nj($.automation),X=$.featureFlags||new o6({provider:new s6,telemetry:$.telemetry,logger:$.logger,context:{distinctId:W,clientName:$.clientName}}),Y=new v3(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=fB($),Z=await this.prepare?.(W);try{let Q=Z?await Z.applyToStartSessionInput(W):W,J=await this.host.startSession(yQ(Q,{defaultCapabilities:this.capabilities,withExtensionContext:(j)=>N4({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 LB({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 K7(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?yQ($.start,{defaultCapabilities:this.capabilities,withExtensionContext:(Z)=>N4({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 m3({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()}}import{HookEventNameSchema as XF,HookEventPayloadSchema as YF,parseHookEventPayload as xW,resolveHookSessionContext as lb}from"@cline/shared";import{z as j2}from"zod";import{spawn as gb}from"node:child_process";import{augmentNodeCommandForDebug as mb,withResolvedClineBuildEnv as vb}from"@cline/shared";function cb($){let W=$.trim();if(!W)return{};let Q=W.split(`
|
|
723
|
+
`).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 ub($,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 db($,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 IW($,W){let Z=mb(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=gb(Z[0],Z.slice(1),{cwd:W.cwd,env:vb(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(ub(A,Z))})});if(await db(J,JSON.stringify($)),Q){await Promise.race([j,X]),J.unref();return}if(!J.stdout||!J.stderr)throw Error("runSubprocessEvent failed to create stdout/stderr pipes");let Y="",V="",B=!1,H;J.stdout.on("data",(K)=>{Y+=K.toString()}),J.stderr.on("data",(K)=>{V+=K.toString()});let G=new Promise((K)=>{if((W.timeoutMs??0)>0)H=setTimeout(()=>{B=!0,J.kill("SIGKILL")},W.timeoutMs);J.once("close",(F)=>{if(H)clearTimeout(H);let{parsedJson:A,parseError:D}=cb(Y);K({exitCode:F,stdout:Y,stderr:V,parsedJson:A,parseError:D,timedOut:B})})});return await Promise.race([G,X])}var pb=j2.object({contextModification:j2.string().optional(),cancel:j2.boolean().optional(),review:j2.boolean().optional(),errorMessage:j2.string().optional(),context:j2.string().optional(),overrideInput:j2.unknown().optional()}).passthrough();var rb=["agent","hook"];async function gW($,W={}){let Z=W.command??rb;return await IW($,{command:Z,cwd:W.cwd,env:W.env,detached:W.detached,timeoutMs:W.timeoutMs,onSpawn:W.onSpawn})}function VF($){return $ instanceof Error?$:Error(String($))}function ib($){if(!$||typeof $!=="object")return;let W=pb.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 jF($){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 h1($,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:lb(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 nb($){return{name:$.name,message:$.message,stack:$.stack}}function ab($){let W=String($??"").toLowerCase();return W.includes("cancel")||W.includes("abort")||W.includes("interrupt")}function ob($){return{agentId:$.snapshot.agentId,conversationId:$.snapshot.conversationId??$.snapshot.runId??$.snapshot.agentId,parentAgentId:$.snapshot.parentAgentId??null}}function sb($){return $.filter((W)=>W.type==="text"&&typeof W.text==="string").map((W)=>W.text).join("")}function tb($){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 eb($){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 X2($,W){try{let Z=await gW($,{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?.(VF(Z),$)}}function BF($={}){return{hooks:{beforeRun:async(Y)=>{let V=ob(Y);if(($.env??process.env).CLINE_HOOK_AGENT_RESUME==="1"){let H={...h1("agent_resume",V,$),hookName:"agent_resume",taskResume:{taskMetadata:{},previousState:{}}};await X2(H,$)}else{let H={...h1("agent_start",V,$),hookName:"agent_start",taskStart:{taskMetadata:{}}};await X2(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={...h1("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:jF(Y.input)}};try{let H=await gW(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 eb(ib(H?.parsedJson))}catch(H){$.onDispatchError?.(VF(H),B);return}},afterTool:async(Y)=>{let V=tb(Y),B={agentId:Y.snapshot.agentId,conversationId:Y.snapshot.conversationId??Y.snapshot.runId??Y.snapshot.agentId,parentAgentId:Y.snapshot.parentAgentId??null},H={...h1("tool_result",B,$),hookName:"tool_result",iteration:Y.snapshot.iteration,tool_result:V,postToolUse:{toolName:V.name,parameters:jF(V.input),result:typeof V.output==="string"?V.output:JSON.stringify(V.output),success:!V.error,executionTimeMs:V.durationMs}};await X2(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={...h1("agent_end",B,$),hookName:"agent_end",iteration:V.iterations,turn:{outputText:V.outputText,status:V.status},taskComplete:{taskMetadata:{}}};await X2(K,$);return}let H=V.status==="aborted"||ab(V.error?.message)?"agent_abort":"agent_error",G=H==="agent_error"?{...h1(H,B,$),hookName:H,iteration:V.iterations,error:nb(V.error??Error("Agent run failed")),taskCancel:{taskMetadata:{}}}:{...h1(H,B,$),hookName:H,reason:V.error?.message,taskCancel:{taskMetadata:{}}};await X2(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={...h1("prompt_submit",V,$),hookName:"prompt_submit",userPromptSubmit:{prompt:sb(Y.message.content),attachments:[]}};await X2(B,$)}},shutdown:async({agentId:Y,conversationId:V,parentAgentId:B,reason:H})=>{let G={...h1("session_shutdown",{agentId:Y,conversationId:V,parentAgentId:B},$),hookName:"session_shutdown",reason:H};await X2(G,$)}}}import{createSessionId as $y}from"@cline/shared";function s0($,W){return{version:$.version,requestId:$.requestId,ok:!0,payload:W}}function HF($,W,Z){return{version:$.version,requestId:$.requestId??$y("hubreq_"),ok:!1,error:{code:W,message:Z}}}class mW{schedules;constructor($){this.schedules=$}async handleCommand($){try{switch($.command){case"schedule.create":return s0($,{schedule:this.schedules.createSchedule(this.toCreateInput($.payload??{}))});case"schedule.list":return s0($,{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 s0($,{schedule:this.schedules.getSchedule(String($.payload?.scheduleId??""))});case"schedule.update":return s0($,{schedule:this.schedules.updateSchedule(String($.payload?.scheduleId??""),this.toUpdateInput($.payload??{}))});case"schedule.delete":return s0($,{deleted:this.schedules.deleteSchedule(String($.payload?.scheduleId??""))});case"schedule.enable":return s0($,{schedule:this.schedules.resumeSchedule(String($.payload?.scheduleId??""))});case"schedule.disable":return s0($,{schedule:this.schedules.pauseSchedule(String($.payload?.scheduleId??""))});case"schedule.trigger":return s0($,{execution:$.payload?.wait===!1?this.schedules.triggerScheduleNowDetached(String($.payload?.scheduleId??"")):await this.schedules.triggerScheduleNow(String($.payload?.scheduleId??""))});case"schedule.list_executions":return s0($,{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 s0($,{stats:this.schedules.getScheduleStats(String($.payload?.scheduleId??""))});case"schedule.active":return s0($,{executions:this.schedules.getActiveExecutions()});case"schedule.upcoming":return s0($,{runs:this.schedules.getUpcomingRuns(typeof $.payload?.limit==="number"?$.payload.limit:void 0)});default:return HF($,"unsupported_command",`Unsupported hub schedule command: ${$.command}`)}}catch(W){return HF($,"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 cW($){return $?new Date($).getTime():void 0}function Wy($){let W=$.metadata?{...$.metadata}:void 0;if(W)delete W.__hubScheduleCreatedBy,delete W.__hubScheduleCwd,delete W.__hubRuntimeOptions;return W}function vW($){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:cW($.nextRunAt),lastRunAt:cW($.lastRunAt),createdBy:typeof W?.__hubScheduleCreatedBy==="string"?W.__hubScheduleCreatedBy:void 0,tags:$.tags,runtimeOptions:W?.__hubRuntimeOptions&&typeof W.__hubRuntimeOptions==="object"&&!Array.isArray(W.__hubRuntimeOptions)?W.__hubRuntimeOptions:void 0,metadata:Wy($)}}function Zy($){switch($){case"done":return"success";case"cancelled":return"aborted";case"running":return"running";case"queued":return"pending";default:return"failed"}}function c3($,W){return{executionId:$.runId,scheduleId:W,sessionId:$.sessionId,triggeredAt:new Date($.scheduledFor??$.createdAt).getTime(),startedAt:cW($.startedAt),endedAt:cW($.completedAt),status:Zy($.status),errorMessage:$.error}}class uW{store;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new A6({dbPath:$.dbPath}),this.materializer=new B6({store:this.store}),this.runner=new H6({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(pQ($.cronPattern),!$.workspaceRoot?.trim())throw Error("workspaceRoot is required for schedules");return vW(this.store.createHubSchedule($))}getSchedule($){let W=this.store.getHubSchedule($);return W?vW(W):void 0}listSchedules($={}){return this.store.listHubSchedules($).map((W)=>vW(W))}updateSchedule($,W){if(W.cronPattern!==void 0)pQ(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?vW(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 c3(Z,$)}triggerScheduleNowDetached($){let W=this.store.enqueueHubScheduleRun($,"manual");if(!W)return;return this.runner.tick().catch(()=>{return}),c3(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 c3(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}))}}rW();import{resolveClineBuildEnv as Ry}from"@cline/shared";function Ny($,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 Ey="cline-hub-auth.";function wy($){return $.host!==void 0||$.port!==void 0||$.pathname!==void 0}function Cy($,W){let Z=new URL($),Q=new URL(W);return Z.search="",Z.hash="",Q.search="",Q.hash="",Z.toString()===Q.toString()}function FF(){return Ry()==="production"?j$():E1()}async function Py($){let W=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),W)return W;let Z=FF(),Q=await L0(Z.discoveryPath);if(Q?.url&&Cy($.toString(),Q.url))return Q.authToken;return}async function Sy($={}){let W=J$($);if(!wy($)){let Z=FF(),Q=await L0(Z.discoveryPath);if(Q?.url)return Q.url}return N1(W.host,W.port,W.pathname)}async function AF($){return await new Promise((W,Z)=>{(async()=>{let Q=new URL($),J=await Py(Q);Q.hash="";let j=new WebSocket(Q.toString(),J?[`${Ey}${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(Ny(V,$))})})().catch(Z)})}async function be($){try{return(await AF($)).close(),!0}catch{return!1}}async function ye($,W){let Z=await Sy($),Q=await AF(Z);try{return await Q.send({version:W.version??"v1",clientId:W.clientId??"hub-client",...W})}finally{Q.close()}}function p3($){return $?JSON.parse(JSON.stringify($)):{}}function iW($){let W=$?.session&&typeof $.session==="object"?$.session:void 0;if(!W)return;let Z=W.metadata&&typeof W.metadata==="object"?p3(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 UF($,W){return $.error?.message??`hub command failed: ${W}`}function by($){let W=p3($);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 DF($){let W=$?.sessionId;return typeof W==="string"&&W.trim()?W.trim():void 0}function yy($){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 hy($){let W=p3($.payload);if($.event==="schedule.execution_completed")return{sessionId:$.sessionId?.trim()||DF(W)||"",eventType:"schedule.execution.completed",payload:W};if($.event==="schedule.execution_failed")return{sessionId:$.sessionId?.trim()||DF(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:by($.payload)};case"run.completed":return{sessionId:Z,eventType:"runtime.chat.completed",payload:W};default:return}}class ky{options;client;metadataApplied=!1;constructor($){this.options=$;this.client=new w1({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=iW(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(d$(Z))return;throw Z}return iW(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(UF(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(UF(J,"session.restore"));let j=iW(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=yy(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)=>iW({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=hy(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 Iy{client;constructor($){this.client=new w1({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{normalizeProviderId as xy}from"@cline/llms";function gy($){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 my($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}function pe($={}){let W=new _$({sessionService:new G$(new H$),fetch:$.fetch,telemetry:$.telemetry});return{async startSession(Z){let Q=(Z.cwd?.trim()||Z.workspaceRoot).trim(),J=await W.startSession({source:Z.source?.trim()||U0.CLI,interactive:!1,config:{providerId:xy(Z.provider),modelId:Z.model,apiKey:Z.apiKey?.trim()||void 0,cwd:Q,workspaceRoot:Z.workspaceRoot,systemPrompt:Z.systemPrompt??"",mode:my(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:gy(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{resolveClineBuildEnv as OA}from"@cline/shared";function vy($){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(`
|
|
724
|
+
`).trim()||void 0}var _F=120,r3="...";function i3($){let W=$.trim();if(!W)return"";if(Buffer.byteLength(W,"utf8")<=_F)return W;let Z=_F-Buffer.byteLength(r3,"utf8");if(Z<=0)return r3;let Q="";for(let J of W){if(Buffer.byteLength(Q+J,"utf8")>Z)break;Q+=J}return`${Q}${r3}`}async function fF($){let W=$?.sessionId?.trim()||"unknown",Z=typeof $?.metadata?.messagesPath==="string"?$.metadata.messagesPath:void 0,J=[...await Q$(Z)].reverse().find((V)=>V.role==="assistant"),j=J?vy(J.content):void 0,X=$?.workspaceRoot?.trim()||"workspace",Y=typeof $?.metadata?.prompt==="string"?$.metadata.prompt.trim():X;return{title:`Task completed (${W})`,body:i3(j&&j.length>0?j:Y.length>0?Y:X),severity:"info"}}import{captureSdkError as sW,createSessionId as ch}from"@cline/shared";import{createSessionId as ly}from"@cline/shared";import{createSessionId as dy}from"@cline/shared";function cy($){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 uy($){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 nW($,W,Z,Q){return{sessionId:$.sessionId,workspaceRoot:$.workspaceRoot,cwd:$.cwd,createdAt:Date.parse($.startedAt),updatedAt:Date.parse($.updatedAt),createdByClientId:W?.createdByClientId??"hub",status:cy($.status),participants:W?[...W.participants.values()]:[],metadata:uy($),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 v($,W){return{version:$.version,requestId:$.requestId,ok:!0,...W!==void 0?{payload:W}:{}}}function S($,W,Z){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:W,message:Z}}}function F8($){return $&&typeof $==="object"&&!Array.isArray($)?$:void 0}function z0($){if(typeof $.payload?.sessionId==="string")return $.payload.sessionId.trim();return $.sessionId?.trim()??""}function V2($,W,Z){return{version:"v1",event:$,eventId:dy("hevt_"),sessionId:Z,timestamp:Date.now(),payload:W}}async function E0($,W){let Z=await $.sessionHost.getSession(W);if(!Z)return;let Q=await $.sessionHost.getAccumulatedUsage?.(W);return nW(Z,$.sessionState.get(W),Q?.usage,Q?.aggregateUsage)}async function x0($,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 Y$({session:Z,messages:Q,usage:J?.usage,aggregateUsage:J?.aggregateUsage})}function n3($,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 LF($,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 a3($,W){let Z=ly("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 o3($,W,Z){let Q=$.pendingApprovals.get(W);if(!Q)return;return $.pendingApprovals.delete(W),Q.resolve(Z),{sessionId:Q.sessionId}}function s3($,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 TF($,W){let Z=typeof W.payload?.approvalId==="string"?W.payload.approvalId.trim():"";if(!$.pendingApprovals.get(Z))return S(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=o3($,Z,{approved:j,reason:J});if(!X)return S(W,"approval_not_found",`Unknown approval: ${Z}`);return $.publish($.buildEvent("approval.resolved",{approvalId:Z,approved:j,reason:J},X.sessionId)),v(W,{approvalId:Z,approved:j})}import{createSessionId as iy}from"@cline/shared";function py($){if($ instanceof Error)return{name:$.name,message:$.message,stack:$.stack};if($===void 0)return;return $}var OF={debug:10,info:20,warn:30,error:40,silent:50};function ry(){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(OF[$]<OF[ry()])return;let Q=JSON.stringify({ts:new Date().toISOString(),level:$,component:"hub",message:W,...Object.fromEntries(Object.entries(Z).map(([J,j])=>[J,py(j)]).filter(([,J])=>J!==void 0))});if($==="error"||$==="warn"){console.error(`[hub] ${Q}`);return}console.log(`[hub] ${Q}`)}function t3($,W){let Z=W instanceof Error?W.stack||W.message:String(W);p("error",$,{error:Z})}async function zF($,W,Z,Q,J,j){let X=iy("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 qF($,W){let Z=typeof W.payload?.requestId==="string"?W.payload.requestId.trim():"",Q=$.pendingCapabilityRequests.get(Z);if(!Q)return S(W,"capability_not_found",`Unknown capability request: ${Z}`);if((W.clientId?.trim()||"")!==Q.targetClientId)return S(W,"capability_wrong_client",`Capability request ${Z} is owned by ${Q.targetClientId}`);if(W.sessionId?.trim()&&W.sessionId.trim()!==Q.sessionId)return S(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),v(W,{requestId:Z})}function f$($,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 MF($,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 S(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 v(W,X)}catch(j){return S(W,"capability_request_failed",j instanceof Error?j.message:String(j))}}function RF($,W){let Z=typeof W.payload?.requestId==="string"?W.payload.requestId.trim():"",Q=$.pendingCapabilityRequests.get(Z);if(!Q)return S(W,"capability_not_found",`Unknown capability request: ${Z}`);let J=W.clientId?.trim()||"";if(J!==Q.targetClientId)return S(W,"capability_wrong_client",`Capability request ${Z} is owned by ${Q.targetClientId}`);if(W.sessionId?.trim()&&W.sessionId.trim()!==Q.sessionId)return S(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)),v(W,{requestId:Z,ok:Y})}import{createSessionId as ny}from"@cline/shared";function NF($,W){let Z=W.payload,Q=Z?.clientId?.trim()||W.clientId?.trim()||ny("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()})),v(W,{clientId:Q})}function EF($,W){let Z=W.clientId?.trim(),Q=Z?$.clients.get(Z):void 0;if(!Z||!Q)return S(W,"client_not_found","Client is not registered with this hub.");let J=F8(W.payload?.metadata);if(Q.lastSeenAt=Date.now(),J)Q.metadata=JSON.parse(JSON.stringify(J));return v(W)}function wF($,W,Z){let Q=W.clientId?.trim();if(Q)$.clients.delete(Q),Z(Q),$.publish($.buildEvent("hub.client.disconnected",{clientId:Q}));return v(W)}function CF($,W){return v(W,{clients:[...$.clients.values()]})}F0();import{existsSync as bF,mkdirSync as ay,readdirSync as oy,readFileSync as sy,rmSync as ty,writeFileSync as ey}from"node:fs";import{dirname as $h,join as PF}from"node:path";import{CONNECTOR_PLATFORMS as Wh,connectorChannelsFromPlatforms as Zh,listConnectorCatalog as yF,shouldIncludeConnectorField as Qh}from"@cline/shared";import{resolveConnectorDataDir as Jh,resolveConnectorSettingsPath as $J}from"@cline/shared/storage";var jh=1,SF={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},Xh={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 L$($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function W4($){return typeof $==="string"?$.trim():void 0}function hF($){if(!bF($))return;try{let W=JSON.parse(sy($,"utf8"));return L$(W)?W:void 0}catch{return}}function WJ(){let $=hF($J()),W=L$($?.connectors)?$.connectors:{},Z={};for(let[Q,J]of Object.entries(W)){if(!L$(J))continue;let j=W4(J.type),X=W4(J.configuredAt),Y=W4(J.updatedAt);if(!j||!X||!Y)continue;let V=aW(J.values),B=L$(J.security)?{enabled:J.security.enabled===!0,values:aW(J.security.values)}:void 0;Z[Q]={type:j,values:V,security:B,configuredAt:X,updatedAt:Y}}return{version:jh,connectors:Z}}function kF($){let W=$J();ay($h(W),{recursive:!0}),ey(W,`${JSON.stringify($,null,2)}
|
|
725
|
+
`,"utf8")}function aW($){if(!L$($))return{};let W={};for(let[Z,Q]of Object.entries($))if(typeof Q==="string")W[Z]=Q.trim();return W}function Yh($){if(!Number.isInteger($)||$<=0)return!1;try{return process.kill($,0),!0}catch{return!1}}function Vh($){let W=PF(Jh(),$);if(!bF(W))return[];return oy(W).filter((Z)=>Z.endsWith(".json")&&!Z.endsWith(".threads.json")).map((Z)=>PF(W,Z))}function Bh($,W,Z){let Q=W.botUsername??W.userName??W.applicationId??W.phoneNumberId??String(Z);return`${$}:${Q}`}function Hh($,W){let Z=hF(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||!Yh(Q))return;let j=Xh[$];if(!j)return;let X={};for(let Y of j.required){let V=SF[Y](Z);if(!V||typeof V==="string"&&!V.trim())return;X[Y]=V}for(let Y of j.optional){let V=SF[Y](Z);if(V!==void 0)X[Y]=V}return{id:Bh($,X,Q),type:$,pid:Q,hubUrl:J,...X}}function Gh(){let $=[];for(let{name:W}of yF())for(let Z of Vh(W)){let Q=Hh(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 Kh(){let $=WJ();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 ZJ(){return{available:Zh(),active:Gh(),configured:Kh()}}function Fh($,W){if($.required&&!W[$.flag]?.trim())throw Error(`${$.label} is required`)}function Ah($,W){let Z={};for(let J of $.fields)Z[J.flag]=W[J.flag]??J.initialValue??"";let Q={};for(let J of $.fields){if(!Qh(J,Z))continue;Fh(J,Z),Q[J.flag]=Z[J.flag]}return Q}function Uh($){if(!L$($))throw Error("connector.configure payload must be an object.");let W=W4($.channel);if(!W)throw Error("channel is required");let Z=Wh.find((K)=>K.id===W);if(!Z)throw Error(`unknown connector channel: ${W}`);if(!new Set(yF().map((K)=>K.name)).has(Z.id))throw Error(`connector channel is not available: ${W}`);let J=aW($.values),j=Ah(Z,J),X=L$($.security)?$.security:{},Y=X.enabled===!0,V=aW(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=WJ(),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},kF(B),ZJ()}function Dh($){if(!L$($))throw Error("connector.delete_config payload must be an object.");let W=W4($.channel);if(!W)throw Error("channel is required");let Z=WJ();if(delete Z.connectors[W],Object.keys(Z.connectors).length>0)kF(Z);else ty($J(),{force:!0});return ZJ()}function _h($){return $==="connector.configure"||$==="connector.delete_config"}function e3($,W,Z){if(!_h(W.command))return;T8($.telemetry,{ulid:W.sessionId??W.requestId??"hub",tool:W.command,success:Z})}async function IF($,W){try{if(W.command==="connector.channels")return v(W,ZJ());if(W.command==="connector.configure"){let Z=Uh(W.payload);return e3($,W,!0),v(W,Z)}if(W.command==="connector.delete_config"){let Z=Dh(W.payload);return e3($,W,!0),v(W,Z)}return S(W,"unsupported_connector_command",`unsupported connector command: ${W.command}`)}catch(Z){return e3($,W,!1),S(W,"connector_command_failed",Z instanceof Error?Z.message:String(Z))}}var fh=30000;function Lh($){if($==="aborted")return"run.aborted";if($==="error"||$==="failed")return"run.failed";return"run.completed"}function Th($){if($.finishReason!=="error")return;return $.text.trim()||void 0}function Oh($,W,Z){let Q=Z instanceof Error&&Z.message.trim()?Z.message:`Unknown session: ${W}`;return S($,Y6,Q)}function zh($){return $?$:void 0}function qh($){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 Mh($,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))},fh),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)}),s3($,(F)=>F.sessionId===Z.sessionId,K),f$($,(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 xF($,W){let Z=z0(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 S(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=qh(Q);$.suppressNextTerminalEventBySession.set(Z,"run.start.reply");let V;try{V=await Mh($,W,{sessionId:Z,prompt:J,mode:zh(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(d$(H))return Oh(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 x0($,Z),G=Th(V);if($.publish($.buildEvent(Lh(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 x0($,Z);return v(W,V||B?{...V?{result:V}:{},...B?{snapshot:B}:{}}:void 0)}async function gF($,W){let Z=z0(W),Q=typeof W.payload?.reason==="string"?W.payload.reason:"Run was aborted before pending approval or capability request was resolved.";s3($,(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{f$($,(J)=>J.sessionId===Z,Q)}return v(W,{applied:!0})}async function mF($,W){let Z=xW(W.payload?.payload);if(!Z)return S(W,"invalid_hook_payload","session.hook requires a valid hook event payload");return await $.sessionHost.dispatchHookEvent(Z),v(W,{applied:!0})}async function vF($,W){switch(W.type){case"chunk":return;case"agent_event":await Rh($,W);return;case"hook":if(W.payload.hookEventName==="tool_call")$.publish($.buildEvent("tool.started",{toolName:W.payload.toolName},W.payload.sessionId));else if(W.payload.hookEventName==="tool_result")$.publish($.buildEvent("tool.finished",{toolName:W.payload.toolName},W.payload.sessionId));return;case"team_progress":{let Z={type:"team_progress_projection",version:1,sessionId:W.payload.sessionId,summary:W.payload.summary,lastEvent:W.payload.lifecycle};$.publish($.buildEvent("team.progress",Z,W.payload.sessionId));return}case"pending_prompts":$.publish($.buildEvent("session.pending_prompts",{sessionId:W.payload.sessionId,prompts:W.payload.prompts},W.payload.sessionId));return;case"pending_prompt_submitted":{let Z={id:W.payload.id,prompt:W.payload.prompt,delivery:W.payload.delivery,attachmentCount:W.payload.attachmentCount,userImages:W.payload.userImages,userFiles:W.payload.userFiles};$.publish($.buildEvent("session.pending_prompt_submitted",{sessionId:W.payload.sessionId,prompt:Z},W.payload.sessionId));return}case"session_snapshot":$.publish($.buildEvent("session.updated",{sessionId:W.payload.sessionId,snapshot:W.payload.snapshot},W.payload.sessionId));return;case"status":{let[Z,Q]=await Promise.all([E0($,W.payload.sessionId),x0($,W.payload.sessionId)]);if(Z)$.publish($.buildEvent("session.updated",{session:Z,...Q?{snapshot:Q}:{}},W.payload.sessionId));return}case"ended":await Nh($,W);return;default:return}}async function Rh($,W){let{sessionId:Z,event:Q}=W.payload;if(Q.type==="iteration_start"){$.publish($.buildEvent("iteration.started",{iteration:Q.iteration},Z));return}if(Q.type==="iteration_end"){$.publish($.buildEvent("iteration.finished",{iteration:Q.iteration,hadToolCalls:Q.hadToolCalls,toolCallCount:Q.toolCallCount},Z));return}if(Q.type==="content_start"){if(Q.contentType==="text"&&typeof Q.text==="string"&&Q.text.length>0){$.publish($.buildEvent("assistant.delta",{text:Q.text},Z));return}if(Q.contentType==="reasoning"){if(Q.redacted&&!Q.reasoning){$.publish($.buildEvent("reasoning.delta",{text:"",redacted:!0},Z));return}if(typeof Q.reasoning==="string"&&Q.reasoning.length>0)$.publish($.buildEvent("reasoning.delta",{text:Q.reasoning,redacted:Q.redacted===!0},Z));return}if(Q.contentType==="tool"){$.publish($.buildEvent("tool.started",{toolCallId:Q.toolCallId,toolName:Q.toolName,input:Q.input},Z));return}}if(Q.type==="content_end"){switch(Q.contentType){case"text":$.publish($.buildEvent("assistant.finished",{text:Q.text},Z));break;case"reasoning":$.publish($.buildEvent("reasoning.finished",{reasoning:Q.reasoning},Z));break;case"tool":$.publish($.buildEvent("tool.finished",{toolCallId:Q.toolCallId,toolName:Q.toolName,output:Q.output,error:Q.error},Z));break}return}if(Q.type==="notice"){$.publish($.buildEvent("session.notice",{sessionId:Z,message:Q.message,noticeType:Q.noticeType,...Q.displayRole?{displayRole:Q.displayRole}:{},...Q.reason?{reason:Q.reason}:{},...Q.metadata?{metadata:Q.metadata}:{},agent:{kind:W.payload.teamRole==="teammate"?"teammate":Q.parentAgentId?"subagent":"lead",agentId:Q.agentId,conversationId:Q.conversationId,parentAgentId:Q.parentAgentId,teamAgentId:W.payload.teamAgentId,teamRole:W.payload.teamRole}},Z));return}if(Q.type==="usage"){let J;try{J=await $.sessionHost.getAccumulatedUsage?.(Z)}catch{J=void 0}$.publish($.buildEvent("usage.updated",{sessionId:Z,delta:{inputTokens:Q.inputTokens,outputTokens:Q.outputTokens,cacheReadTokens:Q.cacheReadTokens??0,cacheWriteTokens:Q.cacheWriteTokens??0,totalCost:Q.cost??0},totals:{inputTokens:Q.totalInputTokens,outputTokens:Q.totalOutputTokens,cacheReadTokens:Q.totalCacheReadTokens??0,cacheWriteTokens:Q.totalCacheWriteTokens??0,totalCost:Q.totalCost??0},usage:J?.usage,aggregateUsage:J?.aggregateUsage,agent:{kind:W.payload.teamRole==="teammate"?"teammate":Q.parentAgentId?"subagent":"lead",agentId:Q.agentId,conversationId:Q.conversationId,parentAgentId:Q.parentAgentId,teamAgentId:W.payload.teamAgentId,teamRole:W.payload.teamRole}},Z));return}if(Q.type==="done")$.publish($.buildEvent("agent.done",{reason:Q.reason,text:Q.text,iterations:Q.iterations,usage:Q.usage},Z))}async function Nh($,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([E0($,W.payload.sessionId),x0($,W.payload.sessionId)]);if(W.payload.reason==="completed"){let X=await fF(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 lF,parseRuntimeConfigExtensions as pF}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as C00,HUB_COMPACTION_CAPABILITY as P00,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as S00,HUB_HOOK_CAPABILITY_PREFIX as b00,HUB_MISTAKE_LIMIT_CAPABILITY as y00,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as h00,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as k00,isHubToolExecutorName as Eh}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as c00,HUB_COMPACTION_CAPABILITY as u00,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as d00,HUB_HOOK_CAPABILITY_PREFIX as l00,HUB_MISTAKE_LIMIT_CAPABILITY as p00,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as r00,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as i00}from"@cline/shared";var wh=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function B2($){return $&&typeof $==="object"&&!Array.isArray($)?JSON.parse(JSON.stringify($)):void 0}function Ch($,W){let Z=typeof $.name==="string"?$.name.trim():"",Q=typeof $.description==="string"?$.description:"",J=typeof $.capabilityName==="string"?$.capabilityName.trim():"",j=B2($.inputSchema);if(!Z||!Q||!j||!J||W.has(J))return;return W.add(J),{kind:"tool",capabilityName:J,name:Z,description:Q,inputSchema:j,...B2($.lifecycle)?{lifecycle:B2($.lifecycle)}:{}}}function JJ($){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=Ch(J,Z);if(Y)W.push(Y);continue}if(j==="toolExecutor"){let Y=J.executor;if(!Eh(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,...B2(J.config)?{config:B2(J.config)}:{}});continue}if(j==="checkpoint"){Z.add(X),W.push({kind:"checkpoint",capabilityName:X,...B2(J.config)?{config:B2(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 uF($){let W=$.metadata?{...$.metadata}:void 0;if(W)delete W[r4];return{agentId:$.agentId,conversationId:$.conversationId,iteration:$.iteration,metadata:W&&Object.keys(W).length>0?W:void 0}}function Ph($){return Object.hasOwn($,"update")?$.update:$}function Z4($){return $.trim().replace(/^\/+/,"").toLowerCase()}function Sh($){let W=($??[]).map(Z4).filter(Boolean);return W.length>0?new Set(W):void 0}function bh($,W,Z){if(!Z)return!0;let Q=Z4($),J=Z4(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 QJ($,W){let Z=Sh(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)=>bh(Q.id,Q.name,Z))}function cF($,W){let Z=async(Q,J)=>{let j=Z4(Q),Y=QJ($,W).filter((K)=>K.id===j||Z4(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?`
|
|
726
726
|
<command-args>${B}</command-args>`:"",G=V.description?.trim()?`Description: ${V.description.trim()}
|
|
727
727
|
|
|
728
728
|
`:"";return`<command-name>${V.name}</command-name>${H}
|
|
729
729
|
<command-instructions>
|
|
730
730
|
${G}${V.instructions}
|
|
731
|
-
</command-instructions>`};return Object.defineProperty(Z,"configuredSkills",{get:()=>QJ($,W).map(({skill:Q,...J})=>J),enumerable:!0}),Z}function
|
|
731
|
+
</command-instructions>`};return Object.defineProperty(Z,"configuredSkills",{get:()=>QJ($,W).map(({skill:Q,...J})=>J),enumerable:!0}),Z}function yh($,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)=>QJ(J,X).some((Y)=>!Y.disabled),createSkillsExecutor:(X)=>cF(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:()=>l4(J.records.rule.map((V)=>V.item).filter((V)=>V.disabled!==!0))});if(X.registerSkillsTool)Y.registerTool(y2(cF(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}
|
|
732
732
|
|
|
733
|
-
${H}`:V.instructions}})}})}}function wh($,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:cF(Y)},W))?.result}]);return J.length>0?Object.fromEntries(J):void 0}function Ch($,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:cF(X)},W,X.emitUpdate?(V)=>{X.emitUpdate?.(Mh(V))}:void 0))?.result}}))}function Ph($,W,Z,Q){let J=new Map(Z.map((X)=>[X.name,X])),j={};for(let X of zh){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 jJ($){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:wh($.sessionId,$.targetClientId,W,$.requestCapability),localRuntime:{...Q.length>0?{hooks:Ph($.sessionId,$.targetClientId,Q,$.requestCapability)}:{},...Z.length>0?{extraTools:Ch($.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:Nh($.sessionId,$.targetClientId,Y,$.requestCapability)}:{}}}}var uF="hubCapabilityOwnerClientId";function oW($){return typeof $==="string"&&$.trim().length>0?$.trim():void 0}function Sh($){if($==="low"||$==="medium"||$==="high"||$==="xhigh"||$===null)return $;return}function bh($){let W=G8($)??{},Z={},Q=oW(W.providerId);if(Q)Z.providerId=Q;let J=oW(W.modelId);if(J)Z.modelId=J;let j=oW(W.apiKey);if(j!==void 0)Z.apiKey=j;let X=oW(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=Sh(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 I2(Z)}function yh($,W){return $.sessionState.get(W)?.createdByClientId}function hh($){if(!$||!(uF in $))return $;let W={...$};return delete W[uF],W}function pF($){let W=yh($.ctx,$.sessionId);if(!W)return S($.envelope,"session_wrong_client",`Session ${$.sessionId} has no owner`);if(W!==$.clientId)return S($.envelope,"session_wrong_client",`Session ${$.sessionId} is owned by ${W}`);return}async function rF($,W,Z){let Q=performance.now(),J={command:W.command,requestId:W.requestId,clientId:W.clientId,sessionId:W.sessionId};l("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=w1(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 l("warn","session.create.invalid",{...J,reason:"missing_workspace_root"}),S(W,"invalid_session_create","session.create requires workspaceRoot or cwd");let K=W.clientId?.trim()||"hub-client",F=JJ(V.clientContributions);l("info","session.create.contributions_parsed",{...J,clientId:K,workspaceRoot:G,cwd:typeof j.cwd==="string"?j.cwd:void 0,contributionCount:F.length});let D=(typeof Y?.sessionId==="string"?Y.sessionId.trim():"")||dF(),U=lF(V.configExtensions);l("info","session.create.runtime_build.begin",{...J,sessionId:D,configExtensionCount:U?.length??0});let f=jJ({sessionId:D,targetClientId:K,contributions:F,sessionConfig:Y,requestCapability:$.requestCapability});l("info","session.create.start_session.begin",{...J,sessionId:D,provider:Y?.providerId??(typeof H.provider==="string"?H.provider:typeof X.provider==="string"?X.provider:"hub"),model:Y?.modelId??(typeof H.model==="string"?H.model:typeof X.model==="string"?X.model:"hub")});let _=await $.sessionHost.startSession({source:typeof X.source==="string"?X.source:void 0,interactive:X.interactive!==!1,sessionMetadata:Object.keys(X).length>0?X:void 0,initialMessages:Array.isArray(j.initialMessages)?j.initialMessages:void 0,initialCompactionState:B,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:U,...f.localRuntime},capabilities:{toolExecutors:f.toolExecutors,requestToolApproval:Z},config:{...Y??{},sessionId:D,providerId:Y?.providerId??(typeof H.provider==="string"?H.provider:typeof X.provider==="string"?X.provider:"hub"),modelId:Y?.modelId??(typeof H.model==="string"?H.model:typeof X.model==="string"?X.model:"hub"),apiKey:Y?.apiKey??(typeof H.apiKey==="string"?H.apiKey:void 0),cwd:Y?.cwd??(typeof j.cwd==="string"&&j.cwd.trim()?j.cwd.trim():G),workspaceRoot:Y?.workspaceRoot??G,systemPrompt:Y?.systemPrompt??(typeof V.systemPrompt==="string"?V.systemPrompt:""),mode:Y?.mode??(V.mode==="plan"||V.mode==="yolo"?V.mode:"act"),maxIterations:Y?.maxIterations??(typeof V.maxIterations==="number"?V.maxIterations:void 0),enableTools:Y?.enableTools??V.enableTools!==!1,enableSpawnAgent:Y?.enableSpawnAgent??V.enableSpawn!==!1,enableAgentTeams:Y?.enableAgentTeams??V.enableTeams!==!1,checkpoint:Y?.checkpoint??(V.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:Y?.teamName??(typeof X.teamName==="string"?X.teamName:void 0)},toolPolicies:j.toolPolicies&&typeof j.toolPolicies==="object"&&!Array.isArray(j.toolPolicies)?JSON.parse(JSON.stringify(j.toolPolicies)):V.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0});l("info","session.create.start_session.end",{...J,sessionId:_.sessionId,elapsedMs:Math.round(performance.now()-Q),hasImmediateResult:!!_.result}),n3($,_.sessionId,K,"creator",{interactive:X.interactive!==!1}),l("info","session.create.read_records.begin",{...J,sessionId:_.sessionId});let[q,T]=await Promise.all([N0($,_.sessionId),k0($,_.sessionId)]);if(l("info","session.create.read_records.end",{...J,sessionId:_.sessionId,hasSession:!!q,hasSnapshot:!!T,elapsedMs:Math.round(performance.now()-Q)}),q)$.publish($.buildEvent("session.created",{session:q,...T?{snapshot:T}:{}},_.sessionId));return l("info","session.create.reply",{...J,sessionId:_.sessionId,elapsedMs:Math.round(performance.now()-Q)}),m(W,{session:q,...T?{snapshot:T}:{}})}async function iF($,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 S(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 S(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 S(W,"invalid_restore","sessionConfig is required when restore.messages is true");let B=Q.runtimeOptions&&typeof Q.runtimeOptions==="object"?Q.runtimeOptions:{},H=w1(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=JJ(B.clientContributions),U=(typeof V?.sessionId==="string"?V.sessionId.trim():"")||dF(),f=lF(B.configExtensions),_=jJ({sessionId:U,targetClientId:F,contributions:A,sessionConfig:V,requestCapability:$.requestCapability}),T=await new Y8().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:(M)=>$.sessionHost.getSession(M),readMessages:(M)=>$.sessionHost.readSessionMessages(M),buildStartInput:(M)=>{if(M.restoredCheckpointMetadata)G.checkpoint=M.restoredCheckpointMetadata;let u=typeof Q.workspaceRoot==="string"&&Q.workspaceRoot.trim()?Q.workspaceRoot.trim():typeof Q.cwd==="string"&&Q.cwd.trim()?Q.cwd.trim():M.sourceSession.workspaceRoot||M.sourceSession.cwd;return{source:typeof G.source==="string"?G.source:void 0,interactive:G.interactive!==!1,sessionMetadata:{...G,restoredFromSessionId:J,restoredCheckpointRunCount:j},initialMessages:M.initialMessages,initialCompactionState:H,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:f,..._.localRuntime},capabilities:{toolExecutors:_.toolExecutors,requestToolApproval:Z},config:{...V??{},sessionId:U,providerId:V?.providerId??(typeof K.provider==="string"?K.provider:M.sourceSession.provider),modelId:V?.modelId??(typeof K.model==="string"?K.model:M.sourceSession.model),apiKey:V?.apiKey??(typeof K.apiKey==="string"?K.apiKey:""),cwd:V?.cwd??M.plan.cwd,workspaceRoot:V?.workspaceRoot??u,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:(M)=>$.sessionHost.startSession(M),getStartedSessionId:(M)=>M.sessionId,readRestoredSession:(M)=>$.sessionHost.getSession(M)});if(!Y)return m(W,{checkpoint:T.checkpoint});let O=T.startResult;if(!O)return S(W,"restore_failed","Checkpoint restore did not start a session");n3($,O.sessionId,F,"creator",{interactive:G.interactive!==!1});let[L,E]=await Promise.all([N0($,O.sessionId),k0($,O.sessionId)]);if(L)$.publish($.buildEvent("session.created",{session:L,...E?{snapshot:E}:{}},O.sessionId));return m(W,{session:L,...E?{snapshot:E}:{},messages:T.messages??[],checkpoint:T.checkpoint})}catch(V){if(V instanceof Z1)return S(W,V.code,V.code==="session_not_found"?`Unknown session: ${J}`:V.message);return S(W,"restore_failed",V instanceof Error?V.message:String(V))}}async function nF($,W){let Z=q0(W);if(!Z)return S(W,"invalid_session_attach","session.attach requires a session id");let Q=await N0($,Z);if(!Q)return S(W,"session_not_found",`Unknown session: ${Z}`);fF($,Z,W.clientId?.trim()||"hub-client","participant");let J=await N0($,Z);return $.publish($.buildEvent("session.attached",{session:J??Q},Z)),m(W,{session:J??Q})}async function aF($,W){let Z=q0(W);if(!Z)return S(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)}f$($,(Y)=>Y.sessionId===Z&&Y.targetClientId===Q,`Capability owner client ${Q} detached before request was resolved.`);let[j,X]=await Promise.all([N0($,Z),k0($,Z)]);return $.publish($.buildEvent("session.detached",j?{session:j,...X?{snapshot:X}:{},clientId:Q}:{clientId:Q},Z)),m(W)}async function oF($,W){let Z=q0(W),Q=W.payload?.includeSnapshot===!0,[J,j]=await Promise.all([N0($,Z),Q?k0($,Z):Promise.resolve(void 0)]);return J?m(W,{session:J,...j?{snapshot:j}:{}}):S(W,"session_not_found",`Unknown session: ${Z}`)}async function sF($,W){let Z=q0(W);if(!Z)return S(W,"invalid_session_id","session.messages requires a session id");if(!await N0($,Z))return S(W,"session_not_found",`Unknown session: ${Z}`);let J=await $.sessionHost.readSessionMessages(Z);return m(W,{sessionId:Z,messages:J})}async function tF($,W){let Z=q0(W);if(!Z)return S(W,"invalid_session_id","session.compaction.get requires a session id");if(!await N0($,Z))return S(W,"session_not_found",`Unknown session: ${Z}`);let J=W.clientId?.trim()||"hub-client",j=pF({sessionId:Z,ctx:$,clientId:J,envelope:W});if(j)return j;let X=await $.sessionHost.readSessionCompactionState(Z);return m(W,{sessionId:Z,state:X})}async function eF($,W){let Z=typeof W.payload?.limit==="number"?W.payload.limit:200,J=(await $.sessionHost.listSessions(Z)).map((j)=>nW(j,$.sessionState.get(j.sessionId)));return m(W,{sessions:J})}async function $A($,W){let Z=q0(W),Q=hh(G8(W.payload?.metadata)),J=await $.sessionHost.updateSession(Z,{metadata:Q}),[j,X]=await Promise.all([N0($,Z),k0($,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 WA($,W){let Z=q0(W);if(!Z)return S(W,"invalid_session_update_connection","session.update_connection requires a session id");let Q=$.sessionHost.updateSessionConnection;if(!Q)return S(W,"unsupported_session_update_connection","runtime host does not support session connection updates");let J=G8(W.payload),j=bh(J?.updates);return await Q.call($.sessionHost,Z,j),m(W,{sessionId:Z,updated:!0})}async function ZA($,W){let Z=q0(W);if(!Z)return S(W,"invalid_session_id","session.compaction.update requires a session id");let Q=W.clientId?.trim()||"hub-client",J=await N0($,Z);if(!J)return S(W,"session_not_found",`Unknown session: ${Z}`);let j=pF({sessionId:Z,ctx:$,clientId:Q,envelope:W});if(j)return j;let X=W.payload&&typeof W.payload==="object"?W.payload:{},Y=w1(X.state);if(!Y)return S(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([N0($,Z),k0($,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 QA($,W){let Z=q0(W),Q=await $.sessionHost.deleteSession(Z);return $.sessionState.delete(Z),m(W,{deleted:Q})}async function JA($,W){let Z=q0(W),Q=$.sessionHost.pendingPrompts;if(!Q)return S(W,"pending_prompts_unavailable","Pending prompt service is not available.");let J=await Q.list({sessionId:Z});return m(W,{sessionId:Z,prompts:J})}async function jA($,W){let Z=q0(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 S(W,"pending_prompts_unavailable","Pending prompt service is not available.");let Y=await X.update({sessionId:Z,promptId:Q,prompt:J,delivery:j});return m(W,Y)}async function XA($,W){let Z=q0(W),Q=typeof W.payload?.promptId==="string"?W.payload.promptId.trim():"",J=$.sessionHost.pendingPrompts;if(!J)return S(W,"pending_prompts_unavailable","Pending prompt service is not available.");let j=await J.delete({sessionId:Z,promptId:Q});return m(W,j)}function YA($){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 XJ($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function Z4($,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 xh($,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 VA($){if($===void 0)return{};if(!XJ($))throw Error("settings.list payload must be an object.");return{cwd:Z4($,"cwd"),workspaceRoot:Z4($,"workspaceRoot"),availabilityContext:XJ($.availabilityContext)?$.availabilityContext:void 0}}function gh($){if(!XJ($))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{...VA($),type:W,id:Z4($,"id"),path:Z4($,"path"),name:Z4($,"name"),enabled:xh($,"enabled")}}class tW{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=kh("hub_");ctx;constructor($){this.options=$;if(this.sessionHost=$.sessionHost??new _$({sessionService:new G$(new H$),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:V2,requestCapability:(W,Z,Q,J,j)=>TF(this.ctx,W,Z,Q,J,j)},this.schedules=new uW({...$.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(V2(Q,Z&&typeof Z==="object"?Z:void 0))}}),this.scheduleCommands=new mW(this.schedules),this.settings=$.settingsService??new r2,$.cronOptions)this.cronService=new A6({runtimeHandlers:$.runtimeHandlers,...$.cronOptions});this.sessionHost.subscribe((W)=>{mF(this.ctx,W).catch((Z)=>{t3("session event handling failed",Z),sW(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())o3(this.ctx,$,{approved:!1,reason:"Hub shutting down before approval was resolved."});if(f$(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 sW(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 RF(this.ctx,$);case"client.update":return EF(this.ctx,$);case"client.unregister":return NF(this.ctx,$,(W)=>{this.listeners.delete(W),this.detachClientFromSessions(W)});case"client.list":return wF(this.ctx,$);case"session.create":return await rF(this.ctx,$,(W)=>a3(this.ctx,W));case"session.restore":return await iF(this.ctx,$,(W)=>a3(this.ctx,W));case"session.attach":return await nF(this.ctx,$);case"session.detach":return await aF(this.ctx,$);case"session.get":return await oF(this.ctx,$);case"session.messages":return await sF(this.ctx,$);case"session.compaction.get":return await tF(this.ctx,$);case"session.list":return await eF(this.ctx,$);case"session.update":return await $A(this.ctx,$);case"session.update_connection":return await WA(this.ctx,$);case"session.compaction.update":return await ZA(this.ctx,$);case"session.pending_prompts":return await JA(this.ctx,$);case"session.update_pending_prompt":return await jA(this.ctx,$);case"session.remove_pending_prompt":return await XA(this.ctx,$);case"session.delete":return await QA(this.ctx,$);case"session.hook":return await gF(this.ctx,$);case"run.start":case"session.send_input":return await IF(this.ctx,$);case"run.abort":return await xF(this.ctx,$);case"capability.request":return await qF(this.ctx,$);case"approval.respond":return await LF(this.ctx,$);case"capability.respond":return MF(this.ctx,$);case"capability.progress":return zF(this.ctx,$);case"ui.notify":return this.publish(V2("ui.notify",$.payload??{})),m($);case"ui.show_window":return this.publish(V2("ui.show_window",$.payload??{})),m($);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 kF(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=YA($.command);if(Z)this.publish(V2(Z,W.payload))}return W}}}captureFailedReply($,W){if(W.ok||!W.error||!mh(W.error.code))return;sW(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(VA($.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(gh($.payload));return this.publish(V2("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)}f$(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){t3(`listener threw while publishing ${$.event}`,Q),sW(this.options.telemetry,{component:"core",operation:"hub.publish",error:Q,severity:"warn",handled:!0,context:{event:$.event,sessionId:$.sessionId}})}}}}function mh($){return $==="session_not_found"||$==="session_messages_not_found"||$==="hub_command_timeout"||$.endsWith("_failed")}import{timingSafeEqual as dh}from"node:crypto";import lh from"node:http";import ph from"node:net";import{URL as KJ}from"node:url";import{CURRENT_HUB_PROTOCOL_VERSION as GA,HUB_CAPABILITIES as rh,isHubProtocolCompatible as ih,MAX_CLIENT_HUB_PROTOCOL_VERSION as KA,MIN_CLIENT_HUB_PROTOCOL_VERSION as FA}from"@cline/shared";import{WebSocketServer as nh}from"ws";import{captureSdkError as BA,HUB_COMMAND_SLOW_LOG_MS as vh,resolveHubCommandTimeoutMs as ch,safeJsonParse as uh}from"@cline/shared";function YJ($){return{command:$.envelope.command,requestId:$.envelope.requestId,clientId:$.envelope.clientId,sessionId:$.envelope.sessionId}}function HA($,W,Z){return{version:$.envelope.version,requestId:$.envelope.requestId,ok:!1,error:{code:W,message:Z}}}class VJ{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=YJ(B);l("info","command.start",K);let F=setTimeout(()=>{if(G)return;l("warn","command.slow",{...K,elapsedMs:Math.round(performance.now()-H)})},vh),A=this.transport.command(B.envelope);A.then((T)=>{if(!G)return;l(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;l("error","command.late_error",{...K,elapsedMs:Math.round(performance.now()-H),error:T})});let D=!1,U,f,_=ch(B.envelope.command,B.envelope.timeoutMs);try{f=_===null?await A:await Promise.race([A,new Promise((T)=>{U=setTimeout(()=>{D=!0,BA(this.telemetry,{component:"core",operation:"hub.command_timeout",error:Error(`Hub command ${B.envelope.command} did not complete within ${_}ms.`),severity:"error",handled:!0,context:{...K,timeoutMs:_}}),T(HA(B,"hub_command_timeout",`Hub command ${B.envelope.command} did not complete within ${_}ms. Check hub-daemon.log for command.start/command.slow logs with requestId ${B.envelope.requestId}.`))},_)})])}catch(T){if(clearTimeout(F),U)clearTimeout(U);throw T}if(G=D,clearTimeout(F),U)clearTimeout(U);let q=Math.round(performance.now()-H);if(D)l("error","command.timeout",{...K,durationMs:q,timeoutMs:_});else l(f.ok?"info":"warn","command.end",{...K,durationMs:q,ok:f.ok,errorCode:f.error?.code,errorMessage:f.error?.message});if(B.envelope.command==="client.register"&&f.ok){let O=(B.envelope.payload??{}).clientId?.trim()||B.envelope.clientId?.trim();if(O)Z.add(O)}else if(B.envelope.command==="client.unregister"&&f.ok){let T=B.envelope.clientId?.trim();if(T)Z.delete(T)}J({kind:"reply",envelope:f});break}case"stream.subscribe":{let H=`${B.clientId}:${B.sessionId??"*"}`;if(W.has(H))break;let G=await this.transport.subscribe(B.clientId,j,{sessionId:B.sessionId});W.set(H,G);break}case"stream.unsubscribe":{let H=`${B.clientId}:${B.sessionId??"*"}`;W.get(H)?.(),W.delete(H);break}case"reply":case"event":break}}catch(B){let H=typeof V.data==="string"?uh(V.data):void 0;if(!H||H.kind!=="command"){l("error","rejected malformed websocket frame",{error:B});return}l("error","command.error",{...YJ(H),error:B}),BA(this.telemetry,{component:"core",operation:"hub.websocket_command",error:B,severity:"error",handled:!0,context:YJ(H)}),J({kind:"reply",envelope:HA(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 BJ{transport;constructor($){this.transport=$}command($){return this.transport.handleCommand($)}subscribe($,W,Z){return this.transport.subscribe($,W,Z)}}function ah($){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 oh($){return{send(W){$.send(W)},addEventListener(W,Z){if(W==="message"){$.on("message",(Q)=>{Z({data:ah(Q)})});return}$.on("close",Z)},removeEventListener(){}}}function sh($){try{$.write(`HTTP/1.1 400 Bad Request\r
|
|
733
|
+
${H}`:V.instructions}})}})}}function hh($,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:uF(Y)},W))?.result}]);return J.length>0?Object.fromEntries(J):void 0}function kh($,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:uF(X)},W,X.emitUpdate?(V)=>{X.emitUpdate?.(Ph(V))}:void 0))?.result}}))}function Ih($,W,Z,Q){let J=new Map(Z.map((X)=>[X.name,X])),j={};for(let X of wh){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 jJ($){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:hh($.sessionId,$.targetClientId,W,$.requestCapability),localRuntime:{...Q.length>0?{hooks:Ih($.sessionId,$.targetClientId,Q,$.requestCapability)}:{},...Z.length>0?{extraTools:kh($.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:yh($.sessionId,$.targetClientId,Y,$.requestCapability)}:{}}}}var dF="hubCapabilityOwnerClientId";function oW($){return typeof $==="string"&&$.trim().length>0?$.trim():void 0}function xh($){if($==="low"||$==="medium"||$==="high"||$==="xhigh"||$===null)return $;return}function gh($){let W=F8($)??{},Z={},Q=oW(W.providerId);if(Q)Z.providerId=Q;let J=oW(W.modelId);if(J)Z.modelId=J;let j=oW(W.apiKey);if(j!==void 0)Z.apiKey=j;let X=oW(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=xh(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 g2(Z)}function mh($,W){return $.sessionState.get(W)?.createdByClientId}function vh($){if(!$||!(dF in $))return $;let W={...$};return delete W[dF],W}function rF($){let W=mh($.ctx,$.sessionId);if(!W)return S($.envelope,"session_wrong_client",`Session ${$.sessionId} has no owner`);if(W!==$.clientId)return S($.envelope,"session_wrong_client",`Session ${$.sessionId} is owned by ${W}`);return}async function iF($,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=C1(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"}),S(W,"invalid_session_create","session.create requires workspaceRoot or cwd");let K=W.clientId?.trim()||"hub-client",F=JJ(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 D=(typeof Y?.sessionId==="string"?Y.sessionId.trim():"")||lF(),U=pF(V.configExtensions);p("info","session.create.runtime_build.begin",{...J,sessionId:D,configExtensionCount:U?.length??0});let f=jJ({sessionId:D,targetClientId:K,contributions:F,sessionConfig:Y,requestCapability:$.requestCapability});p("info","session.create.start_session.begin",{...J,sessionId:D,provider:Y?.providerId??(typeof H.provider==="string"?H.provider:typeof X.provider==="string"?X.provider:"hub"),model:Y?.modelId??(typeof H.model==="string"?H.model:typeof X.model==="string"?X.model:"hub")});let _=await $.sessionHost.startSession({source:typeof X.source==="string"?X.source:void 0,interactive:X.interactive!==!1,sessionMetadata:Object.keys(X).length>0?X:void 0,initialMessages:Array.isArray(j.initialMessages)?j.initialMessages:void 0,initialCompactionState:B,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:U,...f.localRuntime},capabilities:{toolExecutors:f.toolExecutors,requestToolApproval:Z},config:{...Y??{},sessionId:D,providerId:Y?.providerId??(typeof H.provider==="string"?H.provider:typeof X.provider==="string"?X.provider:"hub"),modelId:Y?.modelId??(typeof H.model==="string"?H.model:typeof X.model==="string"?X.model:"hub"),apiKey:Y?.apiKey??(typeof H.apiKey==="string"?H.apiKey:void 0),cwd:Y?.cwd??(typeof j.cwd==="string"&&j.cwd.trim()?j.cwd.trim():G),workspaceRoot:Y?.workspaceRoot??G,systemPrompt:Y?.systemPrompt??(typeof V.systemPrompt==="string"?V.systemPrompt:""),mode:Y?.mode??(V.mode==="plan"||V.mode==="yolo"?V.mode:"act"),maxIterations:Y?.maxIterations??(typeof V.maxIterations==="number"?V.maxIterations:void 0),enableTools:Y?.enableTools??V.enableTools!==!1,enableSpawnAgent:Y?.enableSpawnAgent??V.enableSpawn!==!1,enableAgentTeams:Y?.enableAgentTeams??V.enableTeams!==!1,checkpoint:Y?.checkpoint??(V.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:Y?.teamName??(typeof X.teamName==="string"?X.teamName:void 0)},toolPolicies:j.toolPolicies&&typeof j.toolPolicies==="object"&&!Array.isArray(j.toolPolicies)?JSON.parse(JSON.stringify(j.toolPolicies)):V.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0});p("info","session.create.start_session.end",{...J,sessionId:_.sessionId,elapsedMs:Math.round(performance.now()-Q),hasImmediateResult:!!_.result}),n3($,_.sessionId,K,"creator",{interactive:X.interactive!==!1}),p("info","session.create.read_records.begin",{...J,sessionId:_.sessionId});let[q,O]=await Promise.all([E0($,_.sessionId),x0($,_.sessionId)]);if(p("info","session.create.read_records.end",{...J,sessionId:_.sessionId,hasSession:!!q,hasSnapshot:!!O,elapsedMs:Math.round(performance.now()-Q)}),q)$.publish($.buildEvent("session.created",{session:q,...O?{snapshot:O}:{}},_.sessionId));return p("info","session.create.reply",{...J,sessionId:_.sessionId,elapsedMs:Math.round(performance.now()-Q)}),v(W,{session:q,...O?{snapshot:O}:{}})}async function nF($,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 S(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 S(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 S(W,"invalid_restore","sessionConfig is required when restore.messages is true");let B=Q.runtimeOptions&&typeof Q.runtimeOptions==="object"?Q.runtimeOptions:{},H=C1(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=JJ(B.clientContributions),U=(typeof V?.sessionId==="string"?V.sessionId.trim():"")||lF(),f=pF(B.configExtensions),_=jJ({sessionId:U,targetClientId:F,contributions:A,sessionConfig:V,requestCapability:$.requestCapability}),O=await new B8().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:(M)=>$.sessionHost.getSession(M),readMessages:(M)=>$.sessionHost.readSessionMessages(M),buildStartInput:(M)=>{if(M.restoredCheckpointMetadata)G.checkpoint=M.restoredCheckpointMetadata;let u=typeof Q.workspaceRoot==="string"&&Q.workspaceRoot.trim()?Q.workspaceRoot.trim():typeof Q.cwd==="string"&&Q.cwd.trim()?Q.cwd.trim():M.sourceSession.workspaceRoot||M.sourceSession.cwd;return{source:typeof G.source==="string"?G.source:void 0,interactive:G.interactive!==!1,sessionMetadata:{...G,restoredFromSessionId:J,restoredCheckpointRunCount:j},initialMessages:M.initialMessages,initialCompactionState:H,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:f,..._.localRuntime},capabilities:{toolExecutors:_.toolExecutors,requestToolApproval:Z},config:{...V??{},sessionId:U,providerId:V?.providerId??(typeof K.provider==="string"?K.provider:M.sourceSession.provider),modelId:V?.modelId??(typeof K.model==="string"?K.model:M.sourceSession.model),apiKey:V?.apiKey??(typeof K.apiKey==="string"?K.apiKey:""),cwd:V?.cwd??M.plan.cwd,workspaceRoot:V?.workspaceRoot??u,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:(M)=>$.sessionHost.startSession(M),getStartedSessionId:(M)=>M.sessionId,readRestoredSession:(M)=>$.sessionHost.getSession(M)});if(!Y)return v(W,{checkpoint:O.checkpoint});let T=O.startResult;if(!T)return S(W,"restore_failed","Checkpoint restore did not start a session");n3($,T.sessionId,F,"creator",{interactive:G.interactive!==!1});let[L,N]=await Promise.all([E0($,T.sessionId),x0($,T.sessionId)]);if(L)$.publish($.buildEvent("session.created",{session:L,...N?{snapshot:N}:{}},T.sessionId));return v(W,{session:L,...N?{snapshot:N}:{},messages:O.messages??[],checkpoint:O.checkpoint})}catch(V){if(V instanceof J1)return S(W,V.code,V.code==="session_not_found"?`Unknown session: ${J}`:V.message);return S(W,"restore_failed",V instanceof Error?V.message:String(V))}}async function aF($,W){let Z=z0(W);if(!Z)return S(W,"invalid_session_attach","session.attach requires a session id");let Q=await E0($,Z);if(!Q)return S(W,"session_not_found",`Unknown session: ${Z}`);LF($,Z,W.clientId?.trim()||"hub-client","participant");let J=await E0($,Z);return $.publish($.buildEvent("session.attached",{session:J??Q},Z)),v(W,{session:J??Q})}async function oF($,W){let Z=z0(W);if(!Z)return S(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)}f$($,(Y)=>Y.sessionId===Z&&Y.targetClientId===Q,`Capability owner client ${Q} detached before request was resolved.`);let[j,X]=await Promise.all([E0($,Z),x0($,Z)]);return $.publish($.buildEvent("session.detached",j?{session:j,...X?{snapshot:X}:{},clientId:Q}:{clientId:Q},Z)),v(W)}async function sF($,W){let Z=z0(W),Q=W.payload?.includeSnapshot===!0,[J,j]=await Promise.all([E0($,Z),Q?x0($,Z):Promise.resolve(void 0)]);return J?v(W,{session:J,...j?{snapshot:j}:{}}):S(W,"session_not_found",`Unknown session: ${Z}`)}async function tF($,W){let Z=z0(W);if(!Z)return S(W,"invalid_session_id","session.messages requires a session id");if(!await E0($,Z))return S(W,"session_not_found",`Unknown session: ${Z}`);let J=await $.sessionHost.readSessionMessages(Z);return v(W,{sessionId:Z,messages:J})}async function eF($,W){let Z=z0(W);if(!Z)return S(W,"invalid_session_id","session.compaction.get requires a session id");if(!await E0($,Z))return S(W,"session_not_found",`Unknown session: ${Z}`);let J=W.clientId?.trim()||"hub-client",j=rF({sessionId:Z,ctx:$,clientId:J,envelope:W});if(j)return j;let X=await $.sessionHost.readSessionCompactionState(Z);return v(W,{sessionId:Z,state:X})}async function $A($,W){let Z=typeof W.payload?.limit==="number"?W.payload.limit:200,J=(await $.sessionHost.listSessions(Z)).map((j)=>nW(j,$.sessionState.get(j.sessionId)));return v(W,{sessions:J})}async function WA($,W){let Z=z0(W),Q=vh(F8(W.payload?.metadata)),J=await $.sessionHost.updateSession(Z,{metadata:Q}),[j,X]=await Promise.all([E0($,Z),x0($,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 ZA($,W){let Z=z0(W);if(!Z)return S(W,"invalid_session_update_connection","session.update_connection requires a session id");let Q=$.sessionHost.updateSessionConnection;if(!Q)return S(W,"unsupported_session_update_connection","runtime host does not support session connection updates");let J=F8(W.payload),j=gh(J?.updates);return await Q.call($.sessionHost,Z,j),v(W,{sessionId:Z,updated:!0})}async function QA($,W){let Z=z0(W);if(!Z)return S(W,"invalid_session_id","session.compaction.update requires a session id");let Q=W.clientId?.trim()||"hub-client",J=await E0($,Z);if(!J)return S(W,"session_not_found",`Unknown session: ${Z}`);let j=rF({sessionId:Z,ctx:$,clientId:Q,envelope:W});if(j)return j;let X=W.payload&&typeof W.payload==="object"?W.payload:{},Y=C1(X.state);if(!Y)return S(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([E0($,Z),x0($,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 JA($,W){let Z=z0(W),Q=await $.sessionHost.deleteSession(Z);return $.sessionState.delete(Z),v(W,{deleted:Q})}async function jA($,W){let Z=z0(W),Q=$.sessionHost.pendingPrompts;if(!Q)return S(W,"pending_prompts_unavailable","Pending prompt service is not available.");let J=await Q.list({sessionId:Z});return v(W,{sessionId:Z,prompts:J})}async function XA($,W){let Z=z0(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 S(W,"pending_prompts_unavailable","Pending prompt service is not available.");let Y=await X.update({sessionId:Z,promptId:Q,prompt:J,delivery:j});return v(W,Y)}async function YA($,W){let Z=z0(W),Q=typeof W.payload?.promptId==="string"?W.payload.promptId.trim():"",J=$.sessionHost.pendingPrompts;if(!J)return S(W,"pending_prompts_unavailable","Pending prompt service is not available.");let j=await J.delete({sessionId:Z,promptId:Q});return v(W,j)}function VA($){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 uh=new Set(["skills","workflows","rules","tools","mcp"]);function XJ($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function Q4($,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 dh($,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 BA($){if($===void 0)return{};if(!XJ($))throw Error("settings.list payload must be an object.");return{cwd:Q4($,"cwd"),workspaceRoot:Q4($,"workspaceRoot"),availabilityContext:XJ($.availabilityContext)?$.availabilityContext:void 0}}function lh($){if(!XJ($))throw Error("settings.toggle payload must be an object.");let{type:W}=$;if(typeof W!=="string"||!uh.has(W))throw Error("settings.toggle payload 'type' must be one of: skills, workflows, rules, tools, mcp.");return{...BA($),type:W,id:Q4($,"id"),path:Q4($,"path"),name:Q4($,"name"),enabled:dh($,"enabled")}}class tW{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=ch("hub_");ctx;constructor($){this.options=$;if(this.sessionHost=$.sessionHost??new _$({sessionService:new G$(new H$),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:V2,requestCapability:(W,Z,Q,J,j)=>zF(this.ctx,W,Z,Q,J,j)},this.schedules=new uW({...$.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(V2(Q,Z&&typeof Z==="object"?Z:void 0))}}),this.scheduleCommands=new mW(this.schedules),this.settings=$.settingsService??new n2,$.cronOptions)this.cronService=new U6({runtimeHandlers:$.runtimeHandlers,...$.cronOptions});this.sessionHost.subscribe((W)=>{vF(this.ctx,W).catch((Z)=>{t3("session event handling failed",Z),sW(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())o3(this.ctx,$,{approved:!1,reason:"Hub shutting down before approval was resolved."});if(f$(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 sW(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 NF(this.ctx,$);case"client.update":return EF(this.ctx,$);case"client.unregister":return wF(this.ctx,$,(W)=>{this.listeners.delete(W),this.detachClientFromSessions(W)});case"client.list":return CF(this.ctx,$);case"session.create":return await iF(this.ctx,$,(W)=>a3(this.ctx,W));case"session.restore":return await nF(this.ctx,$,(W)=>a3(this.ctx,W));case"session.attach":return await aF(this.ctx,$);case"session.detach":return await oF(this.ctx,$);case"session.get":return await sF(this.ctx,$);case"session.messages":return await tF(this.ctx,$);case"session.compaction.get":return await eF(this.ctx,$);case"session.list":return await $A(this.ctx,$);case"session.update":return await WA(this.ctx,$);case"session.update_connection":return await ZA(this.ctx,$);case"session.compaction.update":return await QA(this.ctx,$);case"session.pending_prompts":return await jA(this.ctx,$);case"session.update_pending_prompt":return await XA(this.ctx,$);case"session.remove_pending_prompt":return await YA(this.ctx,$);case"session.delete":return await JA(this.ctx,$);case"session.hook":return await mF(this.ctx,$);case"run.start":case"session.send_input":return await xF(this.ctx,$);case"run.abort":return await gF(this.ctx,$);case"capability.request":return await MF(this.ctx,$);case"approval.respond":return await TF(this.ctx,$);case"capability.respond":return RF(this.ctx,$);case"capability.progress":return qF(this.ctx,$);case"ui.notify":return this.publish(V2("ui.notify",$.payload??{})),v($);case"ui.show_window":return this.publish(V2("ui.show_window",$.payload??{})),v($);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 IF(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=VA($.command);if(Z)this.publish(V2(Z,W.payload))}return W}}}captureFailedReply($,W){if(W.ok||!W.error||!ph(W.error.code))return;sW(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(BA($.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(lh($.payload));return this.publish(V2("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)}f$(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){t3(`listener threw while publishing ${$.event}`,Q),sW(this.options.telemetry,{component:"core",operation:"hub.publish",error:Q,severity:"warn",handled:!0,context:{event:$.event,sessionId:$.sessionId}})}}}}function ph($){return $==="session_not_found"||$==="session_messages_not_found"||$==="hub_command_timeout"||$.endsWith("_failed")}import{timingSafeEqual as ah}from"node:crypto";import oh from"node:http";import sh from"node:net";import{URL as KJ}from"node:url";import{CURRENT_HUB_PROTOCOL_VERSION as KA,HUB_CAPABILITIES as th,isHubProtocolCompatible as eh,MAX_CLIENT_HUB_PROTOCOL_VERSION as FA,MIN_CLIENT_HUB_PROTOCOL_VERSION as AA}from"@cline/shared";import{WebSocketServer as $k}from"ws";import{captureSdkError as HA,HUB_COMMAND_SLOW_LOG_MS as rh,resolveHubCommandTimeoutMs as ih,safeJsonParse as nh}from"@cline/shared";function YJ($){return{command:$.envelope.command,requestId:$.envelope.requestId,clientId:$.envelope.clientId,sessionId:$.envelope.sessionId}}function GA($,W,Z){return{version:$.envelope.version,requestId:$.envelope.requestId,ok:!1,error:{code:W,message:Z}}}class VJ{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=YJ(B);p("info","command.start",K);let F=setTimeout(()=>{if(G)return;p("warn","command.slow",{...K,elapsedMs:Math.round(performance.now()-H)})},rh),A=this.transport.command(B.envelope);A.then((O)=>{if(!G)return;p(O.ok?"warn":"error","command.late_end",{...K,elapsedMs:Math.round(performance.now()-H),ok:O.ok,errorCode:O.error?.code,errorMessage:O.error?.message})},(O)=>{if(!G)return;p("error","command.late_error",{...K,elapsedMs:Math.round(performance.now()-H),error:O})});let D=!1,U,f,_=ih(B.envelope.command,B.envelope.timeoutMs);try{f=_===null?await A:await Promise.race([A,new Promise((O)=>{U=setTimeout(()=>{D=!0,HA(this.telemetry,{component:"core",operation:"hub.command_timeout",error:Error(`Hub command ${B.envelope.command} did not complete within ${_}ms.`),severity:"error",handled:!0,context:{...K,timeoutMs:_}}),O(GA(B,"hub_command_timeout",`Hub command ${B.envelope.command} did not complete within ${_}ms. Check hub-daemon.log for command.start/command.slow logs with requestId ${B.envelope.requestId}.`))},_)})])}catch(O){if(clearTimeout(F),U)clearTimeout(U);throw O}if(G=D,clearTimeout(F),U)clearTimeout(U);let q=Math.round(performance.now()-H);if(D)p("error","command.timeout",{...K,durationMs:q,timeoutMs:_});else p(f.ok?"info":"warn","command.end",{...K,durationMs:q,ok:f.ok,errorCode:f.error?.code,errorMessage:f.error?.message});if(B.envelope.command==="client.register"&&f.ok){let T=(B.envelope.payload??{}).clientId?.trim()||B.envelope.clientId?.trim();if(T)Z.add(T)}else if(B.envelope.command==="client.unregister"&&f.ok){let O=B.envelope.clientId?.trim();if(O)Z.delete(O)}J({kind:"reply",envelope:f});break}case"stream.subscribe":{let H=`${B.clientId}:${B.sessionId??"*"}`;if(W.has(H))break;let G=await this.transport.subscribe(B.clientId,j,{sessionId:B.sessionId});W.set(H,G);break}case"stream.unsubscribe":{let H=`${B.clientId}:${B.sessionId??"*"}`;W.get(H)?.(),W.delete(H);break}case"reply":case"event":break}}catch(B){let H=typeof V.data==="string"?nh(V.data):void 0;if(!H||H.kind!=="command"){p("error","rejected malformed websocket frame",{error:B});return}p("error","command.error",{...YJ(H),error:B}),HA(this.telemetry,{component:"core",operation:"hub.websocket_command",error:B,severity:"error",handled:!0,context:YJ(H)}),J({kind:"reply",envelope:GA(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 BJ{transport;constructor($){this.transport=$}command($){return this.transport.handleCommand($)}subscribe($,W,Z){return this.transport.subscribe($,W,Z)}}function Wk($){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 Zk($){return{send(W){$.send(W)},addEventListener(W,Z){if(W==="message"){$.on("message",(Q)=>{Z({data:Wk(Q)})});return}$.on("close",Z)},removeEventListener(){}}}function Qk($){try{$.write(`HTTP/1.1 400 Bad Request\r
|
|
734
734
|
Connection: close\r
|
|
735
735
|
Content-Length: 0\r
|
|
736
736
|
\r
|
|
737
|
-
`),$.end()}catch{$.destroy()}}function
|
|
737
|
+
`),$.end()}catch{$.destroy()}}function Jk($){try{$.write(`HTTP/1.1 401 Unauthorized\r
|
|
738
738
|
Connection: close\r
|
|
739
739
|
Content-Length: 0\r
|
|
740
740
|
\r
|
|
741
|
-
`),$.end()}catch{$.destroy()}}function HJ($,W){if(!$||!W)return!1;let Z=Buffer.from($,"utf8"),Q=Buffer.from(W,"utf8");return Z.length===Q.length&&
|
|
742
|
-
Caused by: ${$.stack}`;return j}async function
|
|
743
|
-
`,"utf8");let V=W.timeoutMs??300000,B=W.pollIntervalMs??200,H=Date.now();while(Date.now()-H<V){try{let G=await
|
|
744
|
-
`,"utf8")}function SA($){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 Z9($){if(!H2($))return;let W=$.metadata;return H2(W)?W:void 0}function W9($,W){let Z=Z9($);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||$9(W.pluginPath,J)||$9(J,W.pluginPath)))return!0;if(Q&&W.pluginNames?.some((j)=>j===Q))return!0;if(J&&W.pluginPaths?.some((j)=>J===j||$9(j,J)||$9(J,j)))return!0;return!1}function hk($){let W=H2($.existing?.oauth)?{oauth:$.existing.oauth}:{};return{transport:$.registration.transport.type==="stdio"&&$.registration.transport.cwd===void 0?{...$.registration.transport,cwd:PA($.pluginPath)}:$.registration.transport,...$.disabled?{disabled:!0}:{},...W,metadata:{...$.registration.metadata??{},source:"plugin",pluginName:$.pluginName,pluginPath:$.pluginPath}}}async function kk($){if($.pluginPaths.length===0)return{plugins:[],servers:[],failures:[]};let W=await q2({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 OJ($){let W=$.settingsPath??Q0(),Z={mutations:[],failures:[]},Q;try{Q=await kk($)}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=_J(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=fJ(J),X=new Map,Y=new Map;for(let B of Q.plugins)X.set(B.pluginPath,new Set),Y.set(B.pluginPath,B.pluginName);let V=wQ(Q.servers.map((B)=>({server:B.server,owner:B,ownerLabel:B.pluginName})));for(let B of V){let H=B.owner;if(!X.has(H.pluginPath))X.set(H.pluginPath,new Set);if(B.name)X.get(H.pluginPath)?.add(B.name);if(!B.registration){Z.mutations.push({name:B.name,pluginName:H.pluginName,pluginPath:H.pluginPath,action:"skipped",reason:B.loadError??"invalid MCP server registration"});continue}let G=j[B.registration.name];if(G!==void 0){if(!W9(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]=hk({registration:B.registration,pluginName:H.pluginName,pluginPath:H.pluginPath,existing:H2(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=Z9(H),K=typeof G?.pluginPath==="string"?G.pluginPath:"",F=X.get(K);if(F&&W9(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{LJ(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 Ik($){let W=$.settingsPath??Q0(),Z;try{Z=_J(W)}catch{return[]}let Q=fJ(Z),J=SA($),j=[];for(let[X,Y]of Object.entries(Q)){if(!H2(Y)||!W9(Y,J))continue;let V=Z9(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)LJ(W,Z,Q);return j}function TJ($){let W=$.settingsPath??Q0(),Z;try{Z=_J(W)}catch{return[]}let Q=fJ(Z),J=SA($),j=[];for(let[X,Y]of Object.entries(Q)){if(!W9(Y,J))continue;let V=Z9(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)LJ(W,Z,Q);return j}var NJ="_installed",ik="package",nk=new Map([["git",2],["local",1],["npm",1],["official",1],["remote",1]]);function qJ($){return $.trim().toLowerCase()}function Q1($,W){let Z=W?.trim();if(!Z)return;$.add(Z)}function ak($){return $.replace(/-[0-9a-f]{12}$/i,"")}function MJ($){let W=uk($);return W?$.slice(0,-W.length):$}function RJ($){if(!F8($))return;try{let W=JSON.parse(gk($,"utf8"));return typeof W.name==="string"?W.name.trim():void 0}catch{return}}function wJ($,W){let Z=lk(W,$);return Z===""||!Z.startsWith("..")&&!dk(Z)}function bA($){let Z=K8($).split(zJ),Q=Z.lastIndexOf(NJ);if(Q<0)return;let J=Z[Q+1];if(!J)return;let j=nk.get(J)??1,X=Q+2+j;if(Z.length<X)return;let Y=Z.slice(0,X).join(zJ)||zJ;return F8(Y)?Y:void 0}function Q9($){try{return xk($,{withFileTypes:!0})}catch{return[]}}function ok($){let W=h1($,NJ);if(!F8(W))return[];let Z=[];for(let Q of Q9(W)){if(!Q.isDirectory())continue;let J=h1(W,Q.name);if(Q.name==="git"){for(let j of Q9(J)){if(!j.isDirectory())continue;let X=h1(J,j.name);for(let Y of Q9(X))if(Y.isDirectory())Z.push(h1(X,Y.name))}continue}for(let j of Q9(J))if(j.isDirectory())Z.push(h1(J,j.name))}return Z.sort((Q,J)=>Q.localeCompare(J))}function yA($){try{return pk($)}catch{return[]}}function EJ($){let W=yA($),Z=new Set;Q1(Z,a0($)),Q1(Z,ak(a0($))),Q1(Z,RJ(h1($,"package.json"))),Q1(Z,RJ(h1($,ik,"package.json")));for(let Q of W)Q1(Z,a0(Q)),Q1(Z,MJ(a0(Q)));return{installPath:$,entryPaths:W,names:[...Z].sort((Q,J)=>Q.localeCompare(J)),installed:!0}}function sk($,W){let Z=K8($),Q=W.find((X)=>wJ(Z,X));if(!Q)return;let J=O$(Z);while(J!==Q&&J!==O$(J)){if(F8(h1(J,"package.json")))return J;J=O$(J)}let j=a0(Z);if((j==="index.ts"||j==="index.js")&&O$(Z)!==Q)return O$(Z);return Z}function hA($,W){let Z=sk($,W);if(!Z)return;let Q=new Set;return Q1(Q,a0($)),Q1(Q,MJ(a0($))),Q1(Q,a0(Z)),Q1(Q,MJ(a0(Z))),Q1(Q,RJ(h1(Z,"package.json"))),{installPath:Z,entryPaths:[$],names:[...Q].sort((J,j)=>J.localeCompare(j)),installed:!1}}function tk($){let W=$.workspaceRoot?.trim()||$.cwd?.trim()||process.cwd();return rk(W).filter((Z)=>F8(Z))}function ek($){let W=new Map;for(let Z of $){for(let Q of ok(Z))W.set(Q,EJ(Q));for(let Q of yA(Z)){let J=bA(Q);if(J){if(!W.has(J))W.set(J,EJ(J));continue}let j=hA(Q,$);if(j)W.set(j.installPath,j)}}return[...W.values()].sort((Z,Q)=>Z.installPath.localeCompare(Q.installPath))}function $I($,W){let Z=qJ(W);if(!Z)return!1;if(qJ($.installPath)===Z)return!0;return $.names.some((Q)=>qJ(Q)===Z)}function WI($,W,Z){let Q=K8($);for(let j of W){if(wJ(Q,j.installPath))return j;if(j.entryPaths.some((X)=>K8(X)===Q))return j}let J=bA(Q);if(J)return EJ(J);if(F8(Q))return hA(Q,Z);return}function ZI($){let W=M0(),Z=W.disabledPlugins;if(!Z?.length)return;let Q=Z.filter((J)=>{let j=K8(J);if(wJ(j,$.installPath))return!1;return!$.entryPaths.some((X)=>K8(X)===j)});if(Q.length===Z.length)return;f1({...W,disabledPlugins:Q})}function QI($){let W=O$($);while(W!==O$(W)&&a0(W)!==NJ){try{mk(W)}catch{return}W=O$(W)}}function JI($){return`${$.names[0]??a0($.installPath)} at ${$.installPath}`}async function CJ($){let W=tk($),Z=ek(W),Q=$.path?.trim(),J=$.name?.trim(),j;if(Q){if(j=WI(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)=>$I(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(JI).join(", ")}`);j=Y[0]}let X=ck(j.installPath,{throwIfNoEntry:!1});if(!X)throw Error(`Plugin install path does not exist: ${j.installPath}`);if(TJ({pluginPaths:[j.installPath,...j.entryPaths],pluginNames:j.names}),vk(j.installPath,{recursive:X.isDirectory(),force:!0}),ZI(j),j.installed)QI(j.installPath);return{name:J||j.names[0]||a0(j.installPath),installPath:j.installPath,removedPaths:[j.installPath],entryPaths:j.entryPaths}}var PJ=120000,Q4=12000,KI=/(api[_ -]?key|access[_ -]?token|refresh[_ -]?token|auth(?:orization)?[_ -]?token|token|secret|password|authorization|credential)/i,FI=/((?:^|[^\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,UI=/((?:^|[^\w])authorization\s*[:=])(?!\s*bearer\b)\s*(.+)$/gi;function SJ($){return $.install?.args??[]}function DI(){return process.env.HOME?.trim()||process.env.USERPROFILE?.trim()||YI()}function _I($){let W=0,Z=$.length;while(W<Z&&($[W]==="."||$[W]==="-"))W++;while(Z>W&&($[Z-1]==="."||$[Z-1]==="-"))Z--;return $.slice(W,Z)}function fI($){return _I($.toLowerCase().replace(/[^a-z0-9._]+/g,"-")).slice(0,255)||"skill"}function xA($){return $.split(/\r?\n/).map((W)=>{if(!KI.test(W))return W;return W.replace(FI,"$1[redacted]").replace(AI,"$1Bearer [redacted]").replace(/\b(Bearer)\s+(?!\[redacted\])([^\s,"'}\]]+)/gi,"$1 [redacted]").replace(UI,"$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(`
|
|
745
|
-
`).slice(-
|
|
746
|
-
`)).trim();return W.length>0?W:void 0}function
|
|
747
|
-
Timed out after ${PJ/1000}s.`,X.kill("SIGTERM")},PJ);B.unref?.(),H.unref?.(),X.stdout?.on("data",(G)=>{if(Y+=String(G),Y.length>
|
|
741
|
+
`),$.end()}catch{$.destroy()}}function HJ($,W){if(!$||!W)return!1;let Z=Buffer.from($,"utf8"),Q=Buffer.from(W,"utf8");return Z.length===Q.length&&ah(Z,Q)}function UA($,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}
|
|
742
|
+
Caused by: ${$.stack}`;return j}async function jk($){return await new Promise((W,Z)=>{let Q=sh.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 Xk($){return $ instanceof Error&&"code"in $&&$.code==="EADDRINUSE"}var GJ=new Map,DA="cline-hub-auth.",Yk=30000;function FJ($){return Array.isArray($)?$.join(","):$??""}function _A($){return $===32||$===9}function fA($){let W=FJ($).trim(),Z="bearer";if(W.length<=6||W.slice(0,6).toLowerCase()!=="bearer"||!_A(W.charCodeAt(6)))return null;let Q=7;while(Q<W.length&&_A(W.charCodeAt(Q)))Q+=1;return W.slice(Q).trim()||null}function Vk($){for(let W of FJ($).split(",")){let Z=W.trim();if(Z.startsWith(DA))return Z.slice(DA.length).trim()||null}return null}function LA($){let W=$.trim().toLowerCase();return W==="localhost"||W==="127.0.0.1"||W==="::1"||W==="[::1]"}function Bk($){let W=FJ($).trim();if(!W)return!1;try{return LA(new KJ(W).hostname)}catch{return!1}}async function AJ($){let W=$.owner??n$(),Z=$.host??"127.0.0.1",Q=$.pathname??"/hub",J=$.port??d5(),j=J===0?await jk(Z):J,X=j,Y=N1(Z,j,Q),V=BH(),B=VH(),H=new tW($);await H.start();let G=new VJ(new BJ(H),$.telemetry),K=new Set,F=new Date().toISOString(),A={protocolVersion:KA,minClientProtocolVersion:AA,maxClientProtocolVersion:FA,capabilities:th,coreVersion:z6.version,buildId:V,pid:process.pid,startedAt:F},D=new Set,U,f,_=async()=>{if(f)return f;return f=(async()=>{if(U)clearInterval(U),U=void 0;for(let L of D)L.terminate?.();D.clear();for(let L of K)L();if(K.clear(),await new Promise((L,N)=>{O.close((M)=>{if(M){N(M);return}L()})}),await new Promise((L,N)=>{q.close((M)=>{if(M){N(M);return}L()})}),await H.stop(),(await L0(W.discoveryPath))?.url===Y)await Q1(W.discoveryPath)})(),f},q=oh.createServer((T,L)=>{if((T.url??"/")==="/health"){let M=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(M);return}if((T.url??"/")==="/status"){if(!HJ(fA(T.headers.authorization),B)){L.statusCode=401,L.end("Unauthorized");return}let M=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(M);return}if((T.url??"/")==="/version"){L.statusCode=200,L.setHeader("content-type","application/json"),L.end(JSON.stringify(A));return}if(new KJ(T.url??"/",`http://${Z}:${X}`).pathname==="/shutdown"&&T.method==="POST"){if(!HJ(fA(T.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(()=>{_()});return}L.statusCode=404,L.end("Not found")}),O=new $k({noServer:!0});U=setInterval(()=>{for(let T of D){if(T.isAlive===!1){try{T.terminate?.()}catch{}D.delete(T);continue}T.isAlive=!1;try{T.ping?.()}catch{try{T.terminate?.()}catch{}D.delete(T)}}},Yk),q.on("upgrade",(T,L,N)=>{if(new KJ(T.url??"/",`http://${Z}:${X}`).pathname!==Q){L.destroy();return}if(!(HJ(Vk(T.headers["sec-websocket-protocol"]),B)||LA(Z)&&Bk(T.headers.origin))){Jk(L);return}try{O.handleUpgrade(T,L,N,(b)=>{let E=b;E.isAlive=!0,E.on("pong",()=>{E.isAlive=!0}),D.add(E);let d=G.attach(Zk(b));K.add(d),b.once("close",()=>{D.delete(E),d(),K.delete(d)})})}catch{Qk(L)}});try{await new Promise((T,L)=>{q.once("error",(N)=>{L(UA(N,{host:Z,port:j,pathname:Q}))}),q.listen(j,Z,()=>{let N=q.address();if(!N||typeof N==="string"){L(UA(Error("Failed to resolve hub port"),{host:Z,port:j,pathname:Q}));return}X=N.port,Y=N1(Z,X,Q),T()})})}catch(T){if(U)clearInterval(U),U=void 0;throw await H.stop().catch(()=>{return}),T}return await HH(W.discoveryPath,{hubId:H.getHubId(),protocolVersion:KA,minClientProtocolVersion:AA,maxClientProtocolVersion:FA,capabilities:[...A.capabilities],coreVersion:z6.version,buildId:V,authToken:B,host:Z,port:X,url:Y,pid:process.pid,startedAt:F,updatedAt:F}),{host:Z,port:X,url:Y,authToken:B,close:_}}async function TA($){let W=$.owner??n$(),Z=$.host!==void 0||$.port!==void 0||$.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Q=$.host??"127.0.0.1",J=$.port??d5(),j=$.pathname??"/hub",X=N1(Q,J,j),Y=W.discoveryPath,V=(H)=>{if(!Z)o2(H.url,H.authToken);return H},B=GJ.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 GH(W.discoveryPath,async()=>{let H=await L0(W.discoveryPath);if(H?.url&&(H.url===X||$.allowPortFallback===!0)){let F=await a$(H.url,{authToken:H.authToken});if(F?.url&&eh(F).compatible&&await X$(F.url,{authToken:H.authToken}))return V({url:F.url,authToken:H.authToken,action:"reuse"})}if(H?.url)await Q1(W.discoveryPath);let K=async(F)=>{let A=AJ({...F,owner:W});GJ.set(Y,A);try{let D=await A;return V({server:D,url:D.url,authToken:D.authToken,action:"started"})}catch(D){throw GJ.delete(Y),D}};try{return await K($)}catch(F){if(!$.allowPortFallback||!Xk(F))throw F;return await K({...$,port:0})}})}function zA(){return OA()==="production"?j$():E1()}function Hk($){return OA()!=="production"&&!$}async function e10($){let W=J$({host:$.host,port:$.port,pathname:$.pathname});return await AJ({...$,...W,owner:zA()})}async function $$0($){let W=$.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Z=J$({host:$.host,port:$.port,pathname:$.pathname});return await TA({...$,...Z,allowPortFallback:$.allowPortFallback??Hk(W),owner:zA()})}eW();import{buildRemoteConfigSessionBlobUploadMetadata as MA,clearRemoteConfigSessionBlobUpload as Gk,createClineTelemetryServiceConfig as Kk,createSessionId as Fk,createRemoteConfigSessionMessagesArtifactUploader as Ak,prepareRemoteConfigRuntime as Uk,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY as RA,readRemoteConfigSessionBlobUploadMetadata as Dk,registerRemoteConfigSessionBlobUpload as NA}from"@cline/shared";function _k($,W){let Z=$.telemetry||W.telemetryService?{...W.telemetryService??{},...$.telemetry??{}}:void 0;if(!Z)return;return Y2(Kk(Z)).telemetry}function fk(){let $=Ak();return{async uploadMessagesFile(W){await $.uploadMessagesFile(W)}}}async function Lk($){let W=await Uk($),Z=_k(W,$),Q=[W.pluginDefinition],J=W.claims?.subject,j=MA(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()||Fk():Y.config.sessionId;if(H&&j)X=H;let G=H&&j?NA(H,W.bundle?.remoteConfig,J):void 0,K=G?{...Y.sessionMetadata??{},[RA]:G}:Y.sessionMetadata;return{...Y,...K?{sessionMetadata:K}:{},config:{...Y.config,...H?{sessionId:H}:{},extensions:[...V,...Q],telemetry:Z??B}}},async dispose(){if(X)Gk(X)}}}import{mkdir as Tk,readFile as Ok,unlink as zk,writeFile as qk}from"node:fs/promises";import{join as EA}from"node:path";function Mk($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function Rk($){return new Promise((W)=>setTimeout(W,$))}async function UJ($){try{await zk($)}catch{}}async function Nk($,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=Mk(`${$.toolCallId}`),j=EA(Z,`${Q}.request.${J}.json`),X=EA(Z,`${Q}.decision.${J}.json`),Y=W.nowIso??(()=>new Date().toISOString());await qk(j,`${JSON.stringify({requestId:J,sessionId:Q,createdAt:Y(),toolCallId:$.toolCallId,toolName:$.toolName,input:$.input,iteration:$.iteration,agentId:$.agentId,conversationId:$.conversationId},null,2)}
|
|
743
|
+
`,"utf8");let V=W.timeoutMs??300000,B=W.pollIntervalMs??200,H=Date.now();while(Date.now()-H<V){try{let G=await Ok(X,"utf8"),K=JSON.parse(G),F={approved:K.approved===!0,reason:typeof K.reason==="string"?K.reason:void 0};return await Promise.all([UJ(X),UJ(j)]),F}catch{}await Rk(B)}return await UJ(j),{approved:!1,reason:"Tool approval request timed out"}}$1();import{spawn as GI}from"node:child_process";import{existsSync as xA,rmSync as KI}from"node:fs";import{homedir as FI,platform as AI}from"node:os";import{dirname as UI,join as IA}from"node:path";import{resolveClineDir as DI,resolveMcpSettingsPath as _I}from"@cline/shared/storage";function Ek($){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 wk($){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 Ck($){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 Pk($){let W=$.indexOf("<");return W>=0&&$.indexOf(">",W+1)>W+1}function wA($){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 Sk($){if($.length===0)return{warnings:[]};let W={},Z=[];for(let Q of $){let[J,j]=Ck(Q);if(W[J]=j,Pk(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 CA($){let W=$.name.trim();if(!W)throw Error("MCP server name is required");let{headers:Z,targetArgs:Q,transport:J}=wA({headers:$.headers,targetArgs:$.targetArgs,transport:$.transport}),j=Ek(J),{headers:X,warnings:Y}=Sk(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 wk(V),{name:W,transport:X?{type:j,url:V,headers:X}:{type:j,url:V},warnings:Y}}function DJ($){let[W,...Z]=$;if(!W)throw Error("Marketplace MCP install args must start with a server name.");return{name:W,...wA({parseTransport:!0,targetArgs:Z})}}function bk($,W,Z){M1(Z,(Q)=>{let J=Q.mcpServers,j=J&&typeof J==="object"&&!Array.isArray(J)?{...J}:{};j[$]={transport:W},Q.mcpServers=j})}function yk($){let{name:W,transport:Z,warnings:Q}=CA($);return bk(W,Z,$.settingsPath??Q0()),{name:W,status:"installed",transport:Z,warnings:Q}}$1();import{existsSync as U8,readdirSync as dk,readFileSync as lk,rmdirSync as pk,rmSync as rk,statSync as ik}from"node:fs";import{basename as t0,dirname as T$,extname as nk,isAbsolute as ak,join as k1,relative as ok,resolve as A8,sep as zJ}from"node:path";import{discoverPluginModulePaths as sk,resolvePluginConfigSearchPaths as tk}from"@cline/shared/storage";import{existsSync as hk,mkdirSync as kk,readFileSync as Ik,writeFileSync as xk}from"node:fs";import{dirname as SA,isAbsolute as gk,relative as mk,resolve as PA}from"node:path";function H2($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function $9($,W){let Z=mk(PA($),PA(W));return Z===""||!Z.startsWith("..")&&!gk(Z)}function _J($){if(!hk($))return{mcpServers:{}};try{let W=JSON.parse(Ik($,"utf8"));if(H2(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 fJ($){if(H2($.mcpServers))return{...$.mcpServers};return{}}function LJ($,W,Z){kk(SA($),{recursive:!0}),xk($,`${JSON.stringify({...W,mcpServers:Z},null,2)}
|
|
744
|
+
`,"utf8")}function bA($){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 Z9($){if(!H2($))return;let W=$.metadata;return H2(W)?W:void 0}function W9($,W){let Z=Z9($);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||$9(W.pluginPath,J)||$9(J,W.pluginPath)))return!0;if(Q&&W.pluginNames?.some((j)=>j===Q))return!0;if(J&&W.pluginPaths?.some((j)=>J===j||$9(j,J)||$9(J,j)))return!0;return!1}function vk($){let W=H2($.existing?.oauth)?{oauth:$.existing.oauth}:{};return{transport:$.registration.transport.type==="stdio"&&$.registration.transport.cwd===void 0?{...$.registration.transport,cwd:SA($.pluginPath)}:$.registration.transport,...$.disabled?{disabled:!0}:{},...W,metadata:{...$.registration.metadata??{},source:"plugin",pluginName:$.pluginName,pluginPath:$.pluginPath}}}async function ck($){if($.pluginPaths.length===0)return{plugins:[],servers:[],failures:[]};let W=await R2({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 TJ($){let W=$.settingsPath??Q0(),Z={mutations:[],failures:[]},Q;try{Q=await ck($)}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=_J(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=fJ(J),X=new Map,Y=new Map;for(let B of Q.plugins)X.set(B.pluginPath,new Set),Y.set(B.pluginPath,B.pluginName);let V=wQ(Q.servers.map((B)=>({server:B.server,owner:B,ownerLabel:B.pluginName})));for(let B of V){let H=B.owner;if(!X.has(H.pluginPath))X.set(H.pluginPath,new Set);if(B.name)X.get(H.pluginPath)?.add(B.name);if(!B.registration){Z.mutations.push({name:B.name,pluginName:H.pluginName,pluginPath:H.pluginPath,action:"skipped",reason:B.loadError??"invalid MCP server registration"});continue}let G=j[B.registration.name];if(G!==void 0){if(!W9(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]=vk({registration:B.registration,pluginName:H.pluginName,pluginPath:H.pluginPath,existing:H2(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=Z9(H),K=typeof G?.pluginPath==="string"?G.pluginPath:"",F=X.get(K);if(F&&W9(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{LJ(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 uk($){let W=$.settingsPath??Q0(),Z;try{Z=_J(W)}catch{return[]}let Q=fJ(Z),J=bA($),j=[];for(let[X,Y]of Object.entries(Q)){if(!H2(Y)||!W9(Y,J))continue;let V=Z9(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)LJ(W,Z,Q);return j}function OJ($){let W=$.settingsPath??Q0(),Z;try{Z=_J(W)}catch{return[]}let Q=fJ(Z),J=bA($),j=[];for(let[X,Y]of Object.entries(Q)){if(!W9(Y,J))continue;let V=Z9(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)LJ(W,Z,Q);return j}var EJ="_installed",ek="package",$I=new Map([["git",2],["local",1],["npm",1],["official",1],["remote",1]]);function qJ($){return $.trim().toLowerCase()}function j1($,W){let Z=W?.trim();if(!Z)return;$.add(Z)}function WI($){return $.replace(/-[0-9a-f]{12}$/i,"")}function MJ($){let W=nk($);return W?$.slice(0,-W.length):$}function RJ($){if(!U8($))return;try{let W=JSON.parse(lk($,"utf8"));return typeof W.name==="string"?W.name.trim():void 0}catch{return}}function wJ($,W){let Z=ok(W,$);return Z===""||!Z.startsWith("..")&&!ak(Z)}function yA($){let Z=A8($).split(zJ),Q=Z.lastIndexOf(EJ);if(Q<0)return;let J=Z[Q+1];if(!J)return;let j=$I.get(J)??1,X=Q+2+j;if(Z.length<X)return;let Y=Z.slice(0,X).join(zJ)||zJ;return U8(Y)?Y:void 0}function Q9($){try{return dk($,{withFileTypes:!0})}catch{return[]}}function ZI($){let W=k1($,EJ);if(!U8(W))return[];let Z=[];for(let Q of Q9(W)){if(!Q.isDirectory())continue;let J=k1(W,Q.name);if(Q.name==="git"){for(let j of Q9(J)){if(!j.isDirectory())continue;let X=k1(J,j.name);for(let Y of Q9(X))if(Y.isDirectory())Z.push(k1(X,Y.name))}continue}for(let j of Q9(J))if(j.isDirectory())Z.push(k1(J,j.name))}return Z.sort((Q,J)=>Q.localeCompare(J))}function hA($){try{return sk($)}catch{return[]}}function NJ($){let W=hA($),Z=new Set;j1(Z,t0($)),j1(Z,WI(t0($))),j1(Z,RJ(k1($,"package.json"))),j1(Z,RJ(k1($,ek,"package.json")));for(let Q of W)j1(Z,t0(Q)),j1(Z,MJ(t0(Q)));return{installPath:$,entryPaths:W,names:[...Z].sort((Q,J)=>Q.localeCompare(J)),installed:!0}}function QI($,W){let Z=A8($),Q=W.find((X)=>wJ(Z,X));if(!Q)return;let J=T$(Z);while(J!==Q&&J!==T$(J)){if(U8(k1(J,"package.json")))return J;J=T$(J)}let j=t0(Z);if((j==="index.ts"||j==="index.js")&&T$(Z)!==Q)return T$(Z);return Z}function kA($,W){let Z=QI($,W);if(!Z)return;let Q=new Set;return j1(Q,t0($)),j1(Q,MJ(t0($))),j1(Q,t0(Z)),j1(Q,MJ(t0(Z))),j1(Q,RJ(k1(Z,"package.json"))),{installPath:Z,entryPaths:[$],names:[...Q].sort((J,j)=>J.localeCompare(j)),installed:!1}}function JI($){let W=$.workspaceRoot?.trim()||$.cwd?.trim()||process.cwd();return tk(W).filter((Z)=>U8(Z))}function jI($){let W=new Map;for(let Z of $){for(let Q of ZI(Z))W.set(Q,NJ(Q));for(let Q of hA(Z)){let J=yA(Q);if(J){if(!W.has(J))W.set(J,NJ(J));continue}let j=kA(Q,$);if(j)W.set(j.installPath,j)}}return[...W.values()].sort((Z,Q)=>Z.installPath.localeCompare(Q.installPath))}function XI($,W){let Z=qJ(W);if(!Z)return!1;if(qJ($.installPath)===Z)return!0;return $.names.some((Q)=>qJ(Q)===Z)}function YI($,W,Z){let Q=A8($);for(let j of W){if(wJ(Q,j.installPath))return j;if(j.entryPaths.some((X)=>A8(X)===Q))return j}let J=yA(Q);if(J)return NJ(J);if(U8(Q))return kA(Q,Z);return}function VI($){let W=M0(),Z=W.disabledPlugins;if(!Z?.length)return;let Q=Z.filter((J)=>{let j=A8(J);if(wJ(j,$.installPath))return!1;return!$.entryPaths.some((X)=>A8(X)===j)});if(Q.length===Z.length)return;L1({...W,disabledPlugins:Q})}function BI($){let W=T$($);while(W!==T$(W)&&t0(W)!==EJ){try{pk(W)}catch{return}W=T$(W)}}function HI($){return`${$.names[0]??t0($.installPath)} at ${$.installPath}`}async function CJ($){let W=JI($),Z=jI(W),Q=$.path?.trim(),J=$.name?.trim(),j;if(Q){if(j=YI(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)=>XI(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=ik(j.installPath,{throwIfNoEntry:!1});if(!X)throw Error(`Plugin install path does not exist: ${j.installPath}`);if(OJ({pluginPaths:[j.installPath,...j.entryPaths],pluginNames:j.names}),rk(j.installPath,{recursive:X.isDirectory(),force:!0}),VI(j),j.installed)BI(j.installPath);return{name:J||j.names[0]||t0(j.installPath),installPath:j.installPath,removedPaths:[j.installPath],entryPaths:j.entryPaths}}var PJ=120000,J4=12000,fI=/(api[_ -]?key|access[_ -]?token|refresh[_ -]?token|auth(?:orization)?[_ -]?token|token|secret|password|authorization|credential)/i,LI=/((?:^|[^\w])(?:[a-z0-9_]*?(?:api[_ -]?key|access[_ -]?token|refresh[_ -]?token|auth(?:orization)?[_ -]?token|token|secret|password|credential)[a-z0-9_]*)\s*[:=]\s*)(.+)$/gi,TI=/((?:^|[^\w])authorization\s*[:=]\s*)bearer\s+([^\s,"'}\]]+)/gi,OI=/((?:^|[^\w])authorization\s*[:=])(?!\s*bearer\b)\s*(.+)$/gi;function SJ($){return $.install?.args??[]}function zI(){return process.env.HOME?.trim()||process.env.USERPROFILE?.trim()||FI()}function qI($){let W=0,Z=$.length;while(W<Z&&($[W]==="."||$[W]==="-"))W++;while(Z>W&&($[Z-1]==="."||$[Z-1]==="-"))Z--;return $.slice(W,Z)}function MI($){return qI($.toLowerCase().replace(/[^a-z0-9._]+/g,"-")).slice(0,255)||"skill"}function gA($){return $.split(/\r?\n/).map((W)=>{if(!fI.test(W))return W;return W.replace(LI,"$1[redacted]").replace(TI,"$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(`
|
|
745
|
+
`).slice(-J4)}function RI($){let W=gA([$.stdout,$.stderr].filter(Boolean).join(`
|
|
746
|
+
`)).trim();return W.length>0?W:void 0}function NI($){if($==="")return'""';if(/^[a-zA-Z0-9_./:=@%+,-]+$/.test($))return $;return JSON.stringify($)}function EI($,W){return[$,...W].map((Z)=>NI(gA(Z).trim())).join(" ")}var wI=async($,W)=>new Promise((Z,Q)=>{let J=!1,j=!1,X=GI($,W,{env:process.env,shell:AI()==="win32",stdio:["ignore","pipe","pipe"],windowsHide:!0}),Y="",V="",B=setTimeout(()=>{if(!J)X.kill("SIGKILL")},PJ+5000),H=setTimeout(()=>{j=!0,V+=`
|
|
747
|
+
Timed out after ${PJ/1000}s.`,X.kill("SIGTERM")},PJ);B.unref?.(),H.unref?.(),X.stdout?.on("data",(G)=>{if(Y+=String(G),Y.length>J4*2)Y=Y.slice(-J4)}),X.stderr?.on("data",(G)=>{if(V+=String(G),V.length>J4*2)V=V.slice(-J4)}),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 CI($){return`${$.type}:${$.id}`}function bJ($){let W=SJ($);if(W.length===0)throw Error("Marketplace install args are required.");return DJ(W).name}function mA($,W={}){let Z=bJ($),Q=W.mcpSettingsPath??_I(),J=M1(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 yJ($){let W=new Set,Z=(J)=>{let j=MI(J??"");if(j&&j!=="skill")W.add(j)};Z($.id),Z($.name);let Q=SJ($);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 hJ($){return[IA(DI(),"skills",$,"SKILL.md"),IA(zI(),".agents","skills",$,"SKILL.md")].filter((W,Z,Q)=>Q.indexOf(W)===Z)}function kJ($){if($.type!=="skill")return;return yJ($).find((W)=>hJ(W).some((Z)=>xA(Z)))}function vA($){return kJ($)!==void 0}function PI($){let W=[];if($.type!=="skill")return W;for(let Z of yJ($))for(let Q of hJ(Z)){if(!xA(Q))continue;let J=UI(Q);KI(J,{recursive:!0,force:!0}),W.push(J)}return W}async function cA($,W={}){let Z=kJ($);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=EI(Q,J),X=W.spawnCommand??wI,Y;try{Y=await X(Q,J)}catch(H){throw Error(`Failed to start ${$.name??$.id} uninstall command:
|
|
748
748
|
${j}
|
|
749
|
-
${H instanceof Error?H.message:String(H)}`)}let V=
|
|
749
|
+
${H instanceof Error?H.message:String(H)}`)}let V=RI(Y);if(Y.exitCode!==0)throw Error(`${$.name??$.id} uninstall failed with exit code ${Y.exitCode}.
|
|
750
750
|
Command:
|
|
751
751
|
${j}${V?`
|
|
752
752
|
|
|
753
|
-
${V}`:""}`);let B=
|
|
754
|
-
`)||void 0}}async function
|
|
755
|
-
`)}}async function
|
|
756
|
-
`,"utf8")}function oI($,W){let Z=a($,"node_modules","@cline");if(!F1(Z))return;for(let Q of ZU(Z)){if(`@cline/${Q.name}`===W)continue;Y9(a(Z,Q.name),{recursive:!0,force:!0})}}function WU($){let W=nI($U($)).map((j)=>T$($,j)).filter((j)=>F1(j)&&mJ(j).isFile()&&X9(j));if(W.length>0)return W;let Z=yI($);if(Z?.length)return Z;let Q=[],J=[$];while(J.length>0){let j=J.pop();if(!j)continue;for(let X of ZU(j)){let Y=a(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(".")&&X9(Y))Q.push(Y)}}return Q.sort((j,X)=>j.localeCompare(X))}function ZU($){try{return wI($,{withFileTypes:!0})}catch{return[]}}function sI($,W){let Z=WU(W);if(Z.length===0)throw Error(`No plugin entry files found in ${W}`);return Z.map((Q)=>`./${sA(oA($,Q))}`)}async function tI($,W,Z){let Q=sI($,W);return await V9(a($,"package.json"),JSON.stringify({...II,name:Z,cline:{plugins:[{paths:Q}]}},null,2),"utf8"),Q}async function eI($,W,Z){let Q=a(W,B9);return await aA(Q,{recursive:!0}),await V9(a(Q,"package.json"),JSON.stringify({name:"cline-plugin-install",private:!0},null,2),"utf8"),await U8(Z,["install",$.spec,"--prefix",Q,"--omit=dev","--omit=peer","--legacy-peer-deps","--no-audit","--no-fund","--package-lock=false"]),oI(Q,$.name),a(Q,"node_modules",$.name)}async function vJ($,W){if(!F1(a($,"package.json")))return;await aI($),await U8(W,["install","--omit=dev","--omit=peer","--legacy-peer-deps","--no-audit","--no-fund","--package-lock=false"],{cwd:$})}async function $x($,W,Z){if($.ref?.startsWith("-"))throw Error(`Invalid git ref "${$.ref}".`);let Q=a(W,B9),J=["clone","--filter=blob:none"];if($.ref)J.push("--branch",$.ref);J.push("--",$.repo,Q);try{await U8("git",J)}catch(j){if(!$.ref)throw j;await U8("git",["clone","--filter=blob:none","--",$.repo,Q]),await U8("git",["checkout","--detach",$.ref],{cwd:Q})}return await vJ(Q,Z),Q}async function Wx($,W,Z,Q){let J=a(W,"repo");await U8("git",["clone","--filter=blob:none","--depth","1","--",Q,J]);let j=a(J,"plugins",$.slug);if(!F1(j)||!mJ(j).isDirectory())throw Error(`Official Cline plugin "${$.slug}" was not found at plugins/${$.slug} in ${Q}`);let X=a(W,B9);return await xJ(j,X,{recursive:!0,filter:(Y)=>{let V=I1(Y);return V!==".git"&&V!=="node_modules"}}),Y9(J,{recursive:!0,force:!0}),await vJ(X,Z),X}function IJ($){return Error(`Remote plugin file from ${$} exceeds the ${j9} byte limit`)}function Zx($){let W=$.headers.get("content-length");if(!W)return;let Z=Number(W);if(!Number.isFinite(Z)||Z<0)return;return Z}async function Qx($,W){let Z=Zx($);if(Z!==void 0&&Z>j9)throw IJ(W);if(!$.body){let X=Buffer.from(await $.text(),"utf8");if(X.byteLength>j9)throw IJ(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>j9)throw await Q.cancel().catch(()=>{return}),IJ(W);J.push(V)}return Buffer.concat(J,j)}finally{Q.releaseLock()}}async function Jx($,W){let Z=new AbortController,Q=setTimeout(()=>{Z.abort()},lA);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 Qx(J,$.url);return gJ(W,{recursive:!0}),await V9(a(W,$.filename),j),W}catch(J){if(J instanceof Error&&J.name==="AbortError")throw Error(`Timed out downloading plugin file from ${$.url} after ${lA}ms`);throw J}finally{clearTimeout(Q)}}async function jx($,W,Z,Q){let J=T$(Z,H9($.path));if(!F1(J))throw Error(`Plugin source path does not exist: ${J}`);let j=mJ(J);if(j.isFile()){if(!X9(J))throw Error(`Plugin file must be .js or .ts: ${J}`);gJ(W,{recursive:!0});let Y=a(W,I1(J));return await xJ(J,Y),W}if(!j.isDirectory())throw Error(`Plugin source must be a file or directory: ${J}`);let X=a(W,B9);return await xJ(J,X,{recursive:!0,filter:(Y)=>{let V=I1(Y);return V!==".git"&&V!=="node_modules"}}),await vJ(X,Q),X}function Xx($,W){if(F1($)&&!W)throw Error(`Plugin is already installed at ${$}. Use --force to replace it.`)}function Yx($,W,Z){if(gJ(dA(W),{recursive:!0}),!F1(W)){J9($,W);return}if(!Z)throw Error(`Plugin is already installed at ${W}. Use --force to replace it.`);let Q=a(dA(W),`.replace-${I1(W)}-${Date.now()}-${process.pid}-${G2(`${W}:${Math.random()}`)}`);J9(W,Q);try{J9($,W)}catch(J){if(!F1(W)&&F1(Q))J9(Q,W);throw J}try{Y9(Q,{recursive:!0,force:!0})}catch{}}function Vx($){let W=$.transport;if(W.type==="stdio")return!1;return W.headers!==void 0&&Object.keys(W.headers).length>0}function Bx($){let W=$.oauth?.tokens?.access_token;return typeof W==="string"&&W.trim().length>0}function Hx($){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 QU($){let W=new Set($.pluginPaths.map((J)=>T$(J)));if(W.size===0)return[];let Z;try{Z=Y1({filePath:$.settingsPath??Q0()})}catch{return[]}let Q=[];for(let J of Z){let j=Hx(J);if(!j||!W.has(T$(j.pluginPath)))continue;let X=J.transport.type;if(X==="stdio")continue;if(Vx(J)||Bx(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 Gx($){let W=$.source.trim(),Z=eA(W,$.sourceType),Q=$.cwd?.trim(),J=Q?T$(Q):process.cwd(),j=lI(Q?J:void 0),X=gI($.officialPluginsRepo),Y=rI(Z,J,X),V=pI(j,Z,Y),B=iI(Z,J),H=a(j,A8,".tmp"),G=a(H,`${Date.now()}-${process.pid}-${G2(`${W}:${Math.random()}`)}`),K=$.npmCommand??(process.env.CLINE_NPM_COMMAND?.trim()||"npm"),F=$.force===!0;Xx(V,F),await aA(H,{recursive:!0});let A;try{if(Z.type==="npm")A=await eI(Z,G,K);else if(Z.type==="git")A=await $x(Z,G,K);else if(Z.type==="official")A=await Wx(Z,G,K,X);else if(Z.type==="remote")A=await Jx(Z,G);else A=await jx(Z,G,J,K);let D=(Z.type==="local"||Z.type==="remote")&&A===G?WU(G).map((_)=>`./${sA(oA(G,_))}`):await tI(G,A,B);if(D.length===0)throw Error(`No plugin entry files found for ${W}`);Yx(G,V,F);let U={source:W,installPath:V,entryPaths:D.map((_)=>T$(V,_)),mcpSyncFailures:[],mcpOAuthCandidates:[]},f=await OJ({pluginPaths:U.entryPaths,cwd:J,workspacePath:J});return U.mcpSyncFailures=f.failures,U.mcpOAuthCandidates=QU({pluginPaths:U.entryPaths}),U}catch(D){throw Y9(G,{recursive:!0,force:!0}),D}}import*as S0 from"@cline/llms";var jU="cline-pass";function Kx($){return $.apiKey??$.auth?.apiKey}function Fx($){return($.auth?.accessToken?.trim()??"").length>0}function XU($){return $.split(/[-_]/).filter(Boolean).map((W)=>W.charAt(0).toUpperCase()+W.slice(1)).join(" ")}function Ax($){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 Ux($){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 YU($){return Object.entries($).sort(([W],[Z])=>W.localeCompare(Z)).map(([W,Z])=>DK(W,Z))}async function Dx($,W){let Z=await S0.getModelsForProvider($),Q=$===jU;if(!W&&!Q)return Z;let J=await jZ($,{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 cJ($){return[...new Set(($??[]).map((W)=>W.trim()).filter(Boolean))]}function _x($){if(!$?.length)return;return[...new Set($)]}function fx($,W){return _x([...$??[],...W??[]])}function Lx($){let W=$?.popularRank;return typeof W==="number"&&Number.isFinite(W)?W:Number.MAX_SAFE_INTEGER}function Ox($){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 Tx($){let W=$?.configFields;if(!Array.isArray(W))return;return W.filter(Ox)}var G9={path:"apiKey",label:"API Key",type:"password",placeholder:"Enter API key...",description:"API key issued by the provider.",secret:!0},JU={path:"baseUrl",label:"Base URL",type:"url",placeholder:"https://...",description:"Base endpoint used for provider requests."};function zx($){if(!$)return[G9];if($.source!=="system")return $.baseUrl?[G9,JU]:[G9];let W=[];if($.env?.length)W.push(G9);if($.baseUrl)W.push(JU);return W}function qx($,W){return W.split(".").reduce((Z,Q)=>{if(!Z||typeof Z!=="object")return;return Z[Q]},$)}function Mx($){if(typeof $==="string"||typeof $==="number"||typeof $==="boolean"||$===null)return $;return}function Rx($,W,Z){if(!$?.length)return;let Q={};for(let J of $){let X=Mx(J.path==="baseUrl"&&W?.baseUrl===void 0?Z?.baseUrl:qx(W,J.path))??J.defaultValue;if(X!==void 0)Q[J.path]=X}return Q}function VU($){let W=Object.entries($??{}).filter(([Z])=>Z.trim().length>0);return W.length>0?Object.fromEntries(W):void 0}function uJ($,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 BU($){if(!$.shouldRecompute)return $.fallbackModelIds??[];let W=$.modelsSourceUrl?await _4($.modelsSourceUrl,$.providerId):[];return[...new Set([...$.explicitModels??[],...W])]}function HU($,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);S0.unregisterProvider(W)}async function Ex($,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=A$($);if((await Q8(A)).providers[Z]){let U=await KU($,{providerId:Z});return{providerId:Z,settingsPath:U.settingsPath,modelsPath:U.modelsPath,modelsCount:0}}return HU($,Z),{providerId:Z,settingsPath:$.getFilePath(),modelsPath:A,modelsCount:0}}if(S0.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=cJ(W.models),Y=W.modelsSourceUrl?.trim(),V=await BU({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=VU(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=A$($),F=await Q8(K);return F.providers[Z]={provider:{name:j,baseUrl:Q,defaultModelId:B,protocol:W.protocol,client:W.client,capabilities:H,modelsSourceUrl:Y},models:uJ(V,H)},await MW(K,F),J8(Z,F.providers[Z]),{providerId:Z,settingsPath:$.getFilePath(),modelsPath:K,modelsCount:V.length}}async function GU($,W){let Z=W.providerId.trim().toLowerCase();if(!Z)throw Error("providerId is required");let Q=A$($),J=await Q8(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=cJ(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()||XU(Z),baseUrl:W.baseUrl?.trim()??T.baseUrl?.trim()??"",defaultModelId:L,protocol:T.protocol,client:T.client,capabilities:T.capabilities},models:L?uJ([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=cJ(W.models),K=W.modelsSourceUrl===void 0?j.provider.modelsSourceUrl:W.modelsSourceUrl?.trim()||void 0,F=W.models!==void 0||W.modelsSourceUrl!==void 0&&!!K,A=Object.keys(j.models??{}).map((T)=>T.trim()).filter(Boolean),D=await BU({providerId:Z,explicitModels:G,modelsSourceUrl:K,fallbackModelIds:A,shouldRecompute:F});if(D.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let U=W.defaultModelId===void 0?j.provider.defaultModelId?.trim():W.defaultModelId?.trim(),f=U&&D.includes(U)?U:D[0],q={...$.getProviderSettings(Z)??{},provider:Z,baseUrl:Y,model:f};if(B)q.protocol=B;else delete q.protocol;if(H)q.client=H;else delete q.client;if(W.apiKey!==void 0){let T=W.apiKey?.trim()??"";if(T)q.apiKey=T;else delete q.apiKey}if(W.headers!==void 0){let T=VU(W.headers);if(T)q.headers=T;else delete q.headers}if(W.timeoutMs!==void 0)if(typeof W.timeoutMs==="number")q.timeout=W.timeoutMs;else delete q.timeout;return $.saveProviderSettings(q,{setLastUsed:!1}),J.providers[Z]={provider:{name:X,baseUrl:Y,defaultModelId:f,protocol:B,client:H,capabilities:V,modelsSourceUrl:K},models:uJ(D,V)},await MW(Q,J),J8(Z,J.providers[Z]),{providerId:Z,settingsPath:$.getFilePath(),modelsPath:Q,modelsCount:D.length}}async function KU($,W){let Z=W.providerId.trim().toLowerCase();if(!Z)throw Error("providerId is required");let Q=A$($),J=await Q8(Q);if(!J.providers[Z])throw Error(`provider "${Z}" does not exist`);return delete J.providers[Z],await MW(Q,J),S0.unregisterProvider(Z),HU($,Z),{providerId:Z,settingsPath:$.getFilePath(),modelsPath:Q}}function Nx($,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 wx($,W={}){let Z=$.read(),Q=S0.getProviderIds(),J=await Promise.all(Q.map(async(X)=>{let[Y,V]=await Promise.all([S0.getProvider(X),S0.getModelsForProvider(X)]),B=YU(V),H=Z.providers[X]?.settings,G=$.getProviderSettings(X),K=Y?.name??XU(X),F=fx(Y?.capabilities,G?.capabilities),A=Tx(Y?.metadata)??zx(Y);return{provider:{id:X,name:K,models:B.length,color:Ux(X),letter:Ax(K),enabled:Boolean(H),apiKey:G?Kx(G):void 0,oauthAccessTokenPresent:G?Fx(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:Rx(A,G,Y),modelList:B},rank:Lx(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!==jU);return{providers:j,settingsPath:$.getFilePath()}}async function Cx($,W){let Z=$.trim(),Q=await Dx(Z,W),J=YU(Q);return{providerId:Z,models:J}}function K9($){return $!=null&&typeof $==="object"&&!Array.isArray($)}function FU($,W){if(!K9(W))return K9($)?{...$}:void 0;let Z=K9($)?{...$}:{};for(let[Q,J]of Object.entries(W)){if(J==null||J===""){delete Z[Q];continue}if(K9(J)){let j=FU(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 Px($,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=FU(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 Sx($,W){let Z=W.trim(),Q=$.getProviderSettings(Z),j=S0.MODEL_COLLECTIONS_BY_PROVIDER_ID[Z]?.provider,X=Q?.baseUrl?.trim()||j?.baseUrl?.trim(),Y=f4(X,j?.baseUrl,j?.modelsSourceUrl);if(!Q||!j||!X||!Y)return{providerId:Z,refreshed:!1};let V=await GU($,{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 bx($){let W=$.trim().toLowerCase(),Z=U0(W);if(Z)return Z.providerId;throw Error(`provider "${$}" does not support OAuth login`)}async function yx($,W,Z,Q){let J=U0($);if(!J)throw Error(`provider "${$}" does not support OAuth login`);let j=j4({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 hx($,W,Z,Q,J){return z8({manager:$,providerId:W,settings:Z,credentials:Q,setLastUsed:J?.setLastUsed})}async function kx($,W,Z,Q){let J=j4({onPrompt:async(j)=>j.defaultValue??"",openUrl:Z,onOpenUrlError:({error:j})=>{throw j instanceof Error?j:Error(String(j))}});return t9($,W,{callbacks:J,telemetry:Q})}function Ix($){let W=$?.auth?.accessToken?.trim()||$?.apiKey?.trim();return W&&W.length>0?W:void 0}import*as F9 from"@cline/llms";var xx=["apiKey","baseUrl","azureApiVersion","awsRegion","awsProfile","gcpProjectId","gcpRegion","sapClientId","sapClientSecret","sapTokenUrl","sapResourceGroup","sapDeploymentId"],gx={"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 mx($,W){let Z={};for(let Q of xx){let J=$[Q],j=W[Q];if(J||j)Z[Q]={...J,...j}}return Z}function vx($){let W=gx[$.providerId];if(!W)return $;return{...$,description:W.description??$.description,fields:W.mode==="replace"?W.fields:mx($.fields,W.fields)}}var cx=new Set(["ollama","lmstudio","litellm","openai-compatible"]);function ux($,W){if(!W?.provider.baseUrl)return!1;if(W.provider.source!=="system")return!0;return cx.has($)}function dx($){let W=F9.normalizeProviderId($);if(T8(W))return{providerId:W,authMethod:"oauth",fields:{}};let Z=F9.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(ux(W,Z))J.baseUrl={defaultValue:Q};return vx({providerId:W,authMethod:"api-key",fields:J})}eW();A0();rW();import{appendFileSync as lx,existsSync as dJ,mkdirSync as px,readFileSync as rx,renameSync as ix,unlinkSync as nx,writeFileSync as ax}from"node:fs";import{join as lJ}from"node:path";import{resolveTeamDataDir as ox}from"@cline/shared/storage";function sx($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}class AU{dirPath;statePath;taskHistoryPath;teammateSpecs=new Map;constructor($){let W=sx($.teamName),Z=$.baseDir?.trim()||ox();this.dirPath=lJ(Z,W),this.statePath=lJ(this.dirPath,"state.json"),this.taskHistoryPath=lJ(this.dirPath,"task-history.jsonl")}loadState(){if(!dJ(this.statePath))return;try{let $=rx(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 UG(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`;ax(Z,`${JSON.stringify(W,null,2)}
|
|
757
|
-
`,"utf8"),
|
|
758
|
-
`,"utf8")}ensureDir(){if(!dJ(this.dirPath))px(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(dJ(this.statePath))nx(this.statePath)}}import{z as y}from"zod";var UU=y.object({workspaceRoot:y.string().min(1),cwd:y.string().optional(),provider:y.string().min(1),model:y.string().min(1),mode:y.enum(["act","plan"]).default("act"),apiKey:y.string(),systemPrompt:y.string().optional(),rules:y.string().optional(),maxIterations:y.number().int().positive().optional(),enableTools:y.boolean(),enableSpawn:y.boolean().optional(),enableTeams:y.boolean().optional(),autoApproveTools:y.boolean().optional(),missionStepInterval:y.number().int().positive().optional(),missionTimeIntervalMs:y.number().int().positive().optional()}),DU=y.enum(["idle","starting","running","pending","stopping","completed","cancelled","failed","error"]),_U=y.enum(["user","assistant","tool","system","status","error"]),fU=y.object({id:y.string().min(1),sessionId:y.string().nullable(),role:_U,content:y.string(),createdAt:y.number().int().nonnegative(),meta:y.object({stream:y.enum(["stdout","stderr"]).optional(),toolName:y.string().optional(),iteration:y.number().int().nonnegative().optional(),agentId:y.string().optional(),conversationId:y.string().optional(),hookEventName:y.string().optional(),inputTokens:y.number().int().nonnegative().optional(),outputTokens:y.number().int().nonnegative().optional(),checkpoint:y.object({ref:y.string(),createdAt:y.number().int().nonnegative(),runCount:y.number().int().positive(),kind:y.enum(["stash","commit"]).optional()}).optional()}).optional()}),LU=y.object({toolCalls:y.number().int().nonnegative(),tokensIn:y.number().int().nonnegative(),tokensOut:y.number().int().nonnegative()}),tx=y.object({sessionId:y.string().nullable(),status:DU,config:UU,messages:y.array(fU),rawTranscript:y.string(),error:y.string().nullable(),summary:LU});var ex=i2;import{Agent as O60,createAgentRuntime as T60}from"@cline/agents";import{getClineEnvironmentConfig as $g}from"@cline/shared";var Wg=5000,OU={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 Zg($){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 pJ($){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 Qg($){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(pJ).filter((V)=>V!==null),X=Q.map(pJ).filter((V)=>V!==null),Y=J.map(pJ).filter((V)=>V!==null);if(j.length===0&&X.length===0&&Y.length===0)return null;return{recommended:j,free:X,clinePass:Y}}function Jg($){let W=$.baseUrl?.trim();if(W)return W;let Z=$g().apiBaseUrl;try{return($.providerSettingsManager??new U$).getProviderSettings("cline")?.baseUrl?.trim()||Z}catch{return Z}}async function jg($,W,Z){let Q=new AbortController,J=setTimeout(()=>Q.abort(),Z);try{return await $(W,{signal:Q.signal})}finally{clearTimeout(J)}}async function Xg($={}){try{let W=Jg($),Z=$.fetchImpl??fetch,Q=await jg(Z,`${W}/api/v1/ai/cline/recommended-models`,$.timeoutMs??Wg);if(!Q.ok)throw Error(`HTTP ${Q.status}`);let J=await Q.json(),j=Qg(J);if(j)return j}catch{}return Zg(OU)}import{readFile as Yg}from"node:fs/promises";import Vg from"node:path";function Bg($){return $}async function Hg($){let W=Vg.resolve($),Z=await Yg(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 Gg(Q,W)}function Gg($,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 $}import{BUILT_IN_PROVIDER_IDS as qU,createHandler as Ag,createHandlerAsync as Ug,getProviderCollection as Dg,hasProvider as MU,registerAsyncHandler as _g,registerHandler as fg,registerModel as Lg,registerProvider as RU}from"@cline/llms";function TU($){return $?{...$}:{}}function Kg($,W){if($)return $;if(!W)return;let Z=globalThis.process;if(!Z?.env)return;return Z.env[W]}function Fg($,W){if(!W.length)throw Error(`Provider "${$}" must include at least one model.`)}function zU($){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 rJ{providers=new Map;register($){Fg($.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??{},...TU($.defaults)}})}registerSelectionConfig($){this.register({id:$.id,models:$.models,defaultModel:$.defaultModel,defaults:{apiKey:Kg($.apiKey,$.apiKeyEnv),routingProviderId:$.builtinProviderId,baseUrl:$.baseUrl,headers:$.headers,timeoutMs:$.timeoutMs,capabilities:$.capabilities,...TU($.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 iJ{configuredProviders=new rJ;constructor($){this.applyConfig($)}createHandler($){return Ag(this.configuredProviders.createHandlerConfig($))}async createHandlerAsync($){return Ug(this.configuredProviders.createHandlerConfig($))}registerProvider($){if(RU($.collection),$.handlerFactory&&$.asyncHandlerFactory)throw Error(`Provider "${$.collection.provider.id}" cannot register both sync and async handlers.`);if($.handlerFactory)fg($.collection.provider.id,$.handlerFactory);if($.asyncHandlerFactory)_g($.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.`);RU({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($){Lg($.providerId,$.modelId,$.info),this.configuredProviders.registerModel($.providerId,$.modelId)}getProviders(){return this.configuredProviders.list()}getBuiltInProviderIds(){return[...qU]}async getBuiltInProviders(){return(await Promise.all(qU.map((W)=>Dg(W)))).filter((W)=>W!==void 0).map((W)=>zU({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=MU(W.id),Q=this.configuredProviders.createHandlerConfig({providerId:W.id,modelId:W.defaultModel}).routingProviderId,J=typeof Q==="string"&&MU(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 Og($){return new iJ($)}u3();async function w20(){return Promise.resolve().then(() => (eW(),zA))}export{_3 as writeModelsFileSync,BH as writeHubDiscovery,f1 as writeGlobalSettings,HH as withHubStartupLock,X$ as verifyHubConnection,q1 as updateMcpSettingsFileSync,E5 as updateMcpSettingsFile,MQ as updateMcpServerOAuthStateAsync,e8 as updateMcpServerOAuthState,GU as updateLocalProvider,CJ as uninstallPlugin,vA as uninstallMarketplaceSkill,cA as uninstallMarketplacePlugin,gA as uninstallMarketplaceMcpServerFromSettings,RI as uninstallMarketplaceEntry,i3 as truncateNotificationBody,b8 as truncateCommandOutput,GZ as toggleDisabledTool,JW as toTeamProgressLifecycleEvent,_1 as toProviderConfig,eR as toHubStatusUrl,GH as toHubHealthUrl,B3 as toHookConfigFileName,tP as syncStoredProviderRegistration,OJ as syncPluginMcpServersToSettings,KW as summarizeUsageFromMessages,H80 as stripUtf8Bom,YN as stopLocalHubServerGracefully,D1 as startLocalOAuthServer,AJ as startHubWebSocketServer,r10 as startHubServer,ZD as startClineDeviceAuth,bQ as splitCoreSessionConfig,p5 as spawnDetachedHubServerWithRetry,gE as spawnDetachedHubServer,d_ as setTelemetryOptOutGlobally,hU as setSdkLogger,s8 as setMcpServerDisabled,WX as setDisabledTools,o_ as setDisabledPlugin,i_ as setCompactionStrategyGlobally,p_ as setAutoUpdateEnabledGlobally,Ee as sendHubCommand,o as sdkDebug,z8 as saveProviderOAuthCredentials,Px as saveLocalProviderSettings,hx as saveLocalProviderOAuthCredentials,U6 as sanitizeSessionToken,rj as safeParseSettings,O_ as safeCreateProviderConfig,IW as runSubprocessEvent,gW as runHook,_V as reviveTeamStateDates,wH as restartLocalHubIfIdleAfterStartupTimeout,pp as resolveWorkspaceHubOwnerContext,uZ as resolveWorkflowsConfigSearchPaths,vZ as resolveSkillsConfigSearchPaths,E1 as resolveSharedHubOwnerContext,_b as resolveSessionBackend,cZ as resolveRulesConfigSearchPaths,jZ as resolveProviderConfig,gD as resolveProviderApiKeyFromSettings,j$ as resolveProductionHubOwnerContext,S$ as resolvePluginSkillDirectoriesFromPaths,NZ as resolvePluginConfigSearchPaths,A$ as resolveModelsRegistryPath,Y1 as resolveMcpServerRegistrations,bJ as resolveMarketplaceMcpServerName,Ix as resolveLocalClineAuthToken,Ry as resolveHubUrl,n$ as resolveHubOwnerContext,J$ as resolveHubEndpointOptions,VH as resolveHubBuildId,Y3 as resolveHooksConfigSearchPaths,L1 as resolveDisabledToolNames,P4 as resolveDisabledPluginPaths,Q0 as resolveDefaultMcpSettingsPath,d5 as resolveDefaultHubPort,HE as resolveDefaultHubPathname,BE as resolveDefaultHubHost,TV as resolveCoreSelectedToolIds,r0 as resolveCoreDistinctId,T7 as resolveCompatibleLocalHubUrl,kp as resolveClineDir,z6 as resolveClineDataDir,g4 as resolveAndLoadAgentPlugins,P$ as resolveAgentPluginPaths,D7 as requestHubShutdown,Ok as requestDesktopToolApproval,TJ as removePluginMcpServersFromSettings,n2 as rememberRecoverableLocalHubUrl,RA as registerRemoteConfigSessionBlobUpload,$6 as registerMcpServersFromSettingsFile,V80 as registerDisposable,Sx as refreshProviderModelsFromSource,Uj as refreshOpenAICodexToken,qj as refreshOcaToken,Fj as refreshClineToken,l6 as readSessionCheckpointHistory,Hk as readRemoteConfigSessionBlobUploadMetadata,qW as readModelsFileSync,O0 as readHubDiscovery,M0 as readGlobalSettings,r_ as readCompactionStrategyGlobally,_A as readBearerToken,R6 as projectSessionCompactionState,a$ as probeHubServer,Re as probeHubConnection,fY as prewarmFileIndex,fH as prewarmDetachedHubServer,Fk as prepareRemoteConfigCoreIntegration,mZ as parseWorkflowConfigFromMarkdown,Y80 as parseUserCommandEnvelope,xZ as parseSkillConfigFromMarkdown,pj as parseSettings,w1 as parseSessionCompactionState,gZ as parseRuleConfigFromMarkdown,eA as parsePluginSource,DJ as parseMcpInstallArgs,xW as parseHookEventPayload,S7 as parseConfiguredAgentConfig,e1 as normalizeWorkspacePath,X80 as normalizeUserInput,j80 as normalizeSdkError,C0 as normalizeRuntimeCapabilities,R4 as normalizeProviderId,bx as normalizeOAuthProvider,a2 as normalizeHubWebSocketUrl,J80 as noopBasicLogger,T3 as migrateLegacyProviderSettings,p4 as mergeRulesForSystemPrompt,c6 as mergeAgentHooks,qI as marketplaceEntryKey,Nx as markLocalProviderEnabled,W7 as makeTeamTaskSubSessionId,g5 as makeSubSessionId,d9 as loginOpenAICodex,a9 as loginOcaOAuth,yx as loginLocalProvider,v9 as loginClineOAuth,t9 as loginAndSaveProviderOAuthCredentials,kx as loginAndSaveLocalProviderOAuthCredentials,w20 as loadOpenTelemetryAdapter,o8 as loadMcpSettingsFile,Hg as loadLlmsConfigFromFile,$W as loadConfiguredAgentConfigs,N8 as loadAgentPluginsFromPathsWithDiagnostics,DX as loadAgentPluginsFromPaths,TZ as loadAgentPluginFromPath,gR as listSessionHistoryFromBackend,YB as listPluginToolsWithDiagnostics,PQ as listPluginTools,RQ as listMcpServerOAuthStatuses,wx as listLocalProviders,W8 as listHookConfigFiles,n_ as isToolDisabledGlobally,HZ as isTelemetryOptedOutGlobally,d$ as isSessionNotFoundError,kX as isRuleEnabled,a_ as isPluginDisabledGlobally,tA as isOfficialPluginSlug,T8 as isOAuthProvider,mA as isMarketplaceSkillInstalled,Qk as isLocalHubOrigin,fA as isLocalHubHostName,$N as isHubReconnectableTransportError,EH as isHubCommandTimeoutError,gp as isDiscoveryFilePresent,l20 as isClinePassLimitMessage,d20 as isClinePassLimitError,u20 as isClineOrgIndividualInferenceSubscriptionMessage,c20 as isClineOrgIndividualInferenceSubscriptionError,v20 as isClineNotSubscribedMessage,m20 as isClineNotSubscribedError,tJ as isClineAccountActionRequest,D_ as isBuiltInProviderId,l_ as isAutoUpdateEnabledGlobally,Gx as installPlugin,Nk as installMcpServer,u1 as identifyAccount,w0 as hashSecret,c$ as hasMcpSettingsFile,l9 as getValidOpenAICodexCredentials,o9 as getValidOcaCredentials,c9 as getValidClineCredentials,e9 as getProviderOAuthCredentialsFromSettings,dx as getProviderConfigFields,hj as getProviderConfig,xD as getProviderAuthStorageId,U0 as getProviderAuthHandler,D4 as getPersistedProviderApiKey,t8 as getMcpServerOAuthState,yJ as getMarketplaceSkillCandidates,Cx as getLocalProviderModels,M4 as getLiveModelsCatalog,hJ as getGlobalMarketplaceSkillPaths,I$ as getFileIndex,cC as getCurrentContextSize,DQ as getCoreHeadlessToolNames,OV as getCoreDefaultEnabledToolIds,r8 as getCoreBuiltinToolCatalog,zV as getCoreAcpToolNames,g20 as getClinePassSubscriptionUrl,x20 as getClineOrgIndividualInferenceSubscriptionMessage,I20 as getClineNotSubscribedMessage,r20 as getClineDefaultSystemPrompt,gQ as generateWorkspaceInfoWithDiagnostics,I5 as generateWorkspaceInfo,l4 as formatRulesForSystemPrompt,mD as formatProviderOAuthApiKey,Q80 as formatDisplayUserInput,kJ as findInstalledGlobalMarketplaceSkillName,NW as findCheckpointForRun,FZ as filterExtensionToolRegistrations,l1 as filterDisabledTools,KZ as filterDisabledPluginPaths,Xg as fetchClineRecommendedModels,k20 as extractClinePassLimitMessage,eJ as executeClineAccountAction,LA as ensureHubWebSocketServer,i10 as ensureHubServer,Zr as ensureDetachedHubServer,f3 as ensureCustomProvidersLoadedSync,zK as ensureCustomProvidersLoaded,M6 as ensureCompatibleLocalHubUrl,H5 as enrichPromptWithMentions,$80 as emptyWorkspaceManifest,Z8 as emptyStoredProviderSettings,wZ as discoverPluginModulePaths,Ik as disablePluginMcpServersInSettings,Z7 as deriveSubsessionStatus,KU as deleteLocalProvider,Bg as defineLlmsConfig,pZ as createWorkflowsConfigDefinition,v2 as createUserInstructionConfigService,qY as createToolPoliciesWithPreset,e20 as createTool,vK as createTeamName,VF as createSubprocessHooks,m2 as createSpawnAgentTool,dZ as createSkillsConfigDefinition,aZ as createShellTool,y8 as createShellExecutor,hW as createSessionHost,a5 as createSessionCompactionState,hW as createRuntimeHost,lZ as createRulesConfigDefinition,Kk as createRemoteConfigSessionMessagesArtifactUploader,L_ as createProviderConfig,lW as createOpenTelemetryTelemetryService,j4 as createOAuthClientCallbacks,y5 as createMcpTools,ge as createLocalHubScheduleRuntimeHandlers,Og as createLlmsSdk,E0 as createInitialAccumulatedUsage,xp as createInMemoryHubOwnerContext,R1 as createHubServerUrl,YH as createHubAuthToken,F3 as createHookConfigFileHooks,fW as createHookConfigFileExtension,_W as createHookAuditHooks,I8 as createEditorExecutor,CQ as createDisabledMcpToolPolicy,JB as createDisabledMcpToolPolicies,x2 as createDelegatedAgentConfigProvider,g2 as createDelegatedAgent,MY as createDefaultToolsWithPreset,b2 as createDefaultTools,$Q as createDefaultShellExecutor,S5 as createDefaultMcpServerClientFactory,A5 as createDefaultExecutors,j6 as createCoreSettingsService,Y$ as createCoreSessionSnapshot,t20 as createContributionRegistry,Q3 as createContextCompactionPrepareTurn,Y2 as createConfiguredTelemetryService,pW as createConfiguredTelemetryHandle,ZW as createConfiguredAgentTools,J3 as createCompactionStateAwarePrepareTurn,s20 as createClineTelemetryServiceMetadata,o20 as createClineTelemetryServiceConfig,ZF as createCheckpointComparePlan,i8 as createBuiltinTools,k8 as createApplyPatchExecutor,p8 as createAgentTeamsTools,T60 as createAgentRuntime,FW as createAgentHooksExtension,FF as connectToHub,X5 as computePatchChanges,QD as completeClineDeviceAuth,m3 as compareCheckpointToWorkspace,QU as collectPluginMcpOAuthCandidates,F_ as clearPrivateModelsCatalogCache,K_ as clearLiveModelsCatalogCache,W1 as clearHubDiscovery,uU as captureWorkspacePathResolved,f9 as captureWorkspaceInitialized,L9 as captureWorkspaceInitError,f8 as captureToolUsage,q9 as captureTokenUsage,z9 as captureTaskRestarted,T9 as captureTaskCreated,Y4 as captureTaskCompleted,B4 as captureSubagentExecution,R9 as captureSkillUsed,a20 as captureSdkError,dU as captureProviderConfigured,V4 as captureProviderApiError,M9 as captureModeSwitch,N9 as captureMistakeLimitReached,w9 as captureMentionUsed,P9 as captureMentionSearchResults,C9 as captureMentionFailed,b9 as captureHookDiscovery,cU as captureExtensionActivated,E9 as captureDiffEditFailure,_8 as captureConversationTurnEvent,h9 as captureCompactionSkipped,y9 as captureCompactionExecuted,v1 as captureAuthSucceeded,m1 as captureAuthStarted,M$ as captureAuthLoggedOut,c1 as captureAuthFailed,IU as captureAgentUnexpectedReasoningTokens,S9 as captureAgentTeamCreated,R$ as captureAgentCreated,mQ as buildWorkspaceMetadata,QW as buildTeamProgressSummary,i20 as buildSdkErrorProperties,qA as buildRemoteConfigSessionBlobUploadMetadata,wA as buildMcpInstallTransport,d8 as buildDelegatedAgentConfig,_T as buildConnectionUpdate,y7 as buildConfiguredAgentToolName,h7 as buildConfiguredAgentToolDescriptors,QF as buildCheckpointWorkspaceDiff,z5 as bootstrapAgentTeams,rV as authorizeMcpServerOAuth,Ex as addLocalProvider,T0 as accumulateUsageTotals,yZ as WORKFLOWS_CONFIG_DIRECTORY_NAME,M8 as UnifiedConfigFileWatcher,X1 as ToolPresets,t6 as TelemetryService,dW as TelemetryLoggerSink,T5 as TEAM_TOOL_NAMES,b4 as SubprocessSandbox,S8 as StructuredCommandInputSchema,LW as StoredProviderSettingsSchema,JK as StoredProviderSettingsEntrySchema,p6 as SqliteTeamStore,H$ as SqliteSessionStore,Y8 as SessionVersioningService,Z1 as SessionVersioningError,D0 as SessionSource,u$ as SessionNotFoundError,uj as SapSettingsSchema,bZ as SKILLS_CONFIG_DIRECTORY_NAME,VZ as SESSION_STATUSES,X6 as SESSION_NOT_FOUND_ERROR_CODE,B80 as SDK_ERROR_TELEMETRY_EVENT,_9 as RpcClineAccountService,o5 as RemoteRuntimeHost,gj as ReasoningSettingsSchema,wX as RULES_CONFIG_DIRECTORY_NAME,MA as REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY,L2 as ProviderSettingsSchema,U$ as ProviderSettingsManager,kj as ProviderProtocolSchema,YZ as ProviderIdSchema,Ij as ProviderClientSchema,h8 as PatchActionType,e6 as OpenTelemetryProvider,dj as OcaSettingsSchema,JZ as OPENAI_COMPATIBLE_PROVIDERS,N1 as NodeHubClient,o6 as NoOpFeatureFlagsProvider,BJ as NativeHubTransportAdapter,lj as ModelCatalogSettingsSchema,M5 as McpSettingsUpdateSkippedError,c2 as McpSettingsMutatorPurityError,u2 as McpSettingsLockTimeoutError,h$ as MAX_COMMAND_OUTPUT_CHARS,_$ as LocalRuntimeHost,P20 as Llms,OW as InMemoryWorkspaceManager,W6 as InMemoryMcpManager,Py as HubUIClient,p0 as HubTransportError,Cy as HubSessionClient,tW as HubServerTransport,uW as HubScheduleService,mW as HubScheduleCommandService,$2 as HubRuntimeHost,r5 as HubCommandError,XF as HookEventPayloadSchema,jF as HookEventNameSchema,AW as HookConfigFileName,V3 as HOOK_CONFIG_FILE_EVENT_MAP,aG as HOOKS_CONFIG_DIRECTORY_NAME,C4 as GlobalSettingsSchema,vj as GcpSettingsSchema,AU as FileTeamPersistenceStore,a6 as FeatureFlagsService,Z80 as FeatureFlagDefaultValue,W80 as FEATURE_FLAGS,OU as FALLBACK_CLINE_RECOMMENDED_MODELS,R0 as DefaultToolNames,SW as DefaultRuntimeBuilder,iJ as DefaultLlmsSdk,Sj as DEFAULT_MODELS_CATALOG_URL,YE as DEFAULT_HUB_PORT,VE as DEFAULT_HUB_PATHNAME,XE as DEFAULT_HUB_HOST,r2 as CoreSettingsService,G$ as CoreSessionService,n20 as ContributionRegistry,k$ as CommandExitError,h20 as ClinePassLimitError,y20 as ClineOrgIndividualInferenceSubscriptionError,b20 as ClineNotSubscribedError,v3 as ClineCore,D9 as ClineAccountService,tx as ChatViewStateSchema,LU as ChatSummarySchema,DU as ChatSessionStatusSchema,UU as ChatSessionConfigSchema,fU as ChatMessageSchema,_U as ChatMessageRoleSchema,x as CORE_TELEMETRY_EVENTS,ex as CORE_BUILD_VERSION,VJ as BrowserWebSocketHubAdapter,U_ as BUILT_IN_PROVIDER_IDS,XZ as BUILT_IN_PROVIDER,cj as AzureSettingsSchema,mj as AwsSettingsSchema,xj as AuthSettingsSchema,S6 as AgentTeamsRuntime,I7 as AgentTeam,O60 as Agent,E2 as ALL_DEFAULT_TOOL_NAMES};
|
|
753
|
+
${V}`:""}`);let B=PI($);if(vA($))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(`
|
|
754
|
+
`)||void 0}}async function uA($,W={}){let[Z]=SJ($),Q=Z?.trim()||$.id;if(!Q)throw Error("Plugin marketplace uninstalls require a plugin name.");let J=await CJ({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(`
|
|
755
|
+
`)}}async function SI($,W={}){if($.type==="mcp"){let Z=bJ($);if(W.deleteMcpServer)await W.deleteMcpServer(Z);else mA($,W);return{id:$.id,type:$.type,status:"uninstalled",message:`Uninstalled ${$.name??Z??$.id}.`}}if($.type==="skill")return cA($,W);if($.type==="plugin")return uA($,W);throw Error(`Unsupported marketplace entry type: ${$.type}`)}import{spawn as bI}from"node:child_process";import{createHash as yI}from"node:crypto";import{existsSync as A1,mkdirSync as gJ,readdirSync as hI,readFileSync as kI,renameSync as J9,rmSync as Y9,statSync as mJ}from"node:fs";import{cp as xJ,mkdir as oA,writeFile as V9}from"node:fs/promises";import{homedir as dA}from"node:os";import{basename as x1,dirname as lA,extname as II,join as a,relative as sA,resolve as O$,sep as xI}from"node:path";import{isPluginModulePath as X9,resolveClineDir as gI,resolvePluginModuleEntries as mI}from"@cline/shared/storage";var D8="_installed",B9="package",vI="https://github.com/cline/plugins.git",pA=30000,j9=10485760,rA="@cline/",cI=["dependencies","devDependencies","optionalDependencies","peerDependencies"],uI={name:"cline-installed-plugin",private:!0,cline:{plugins:[]}};function H9($){if($==="~")return dA();if($.startsWith("~/"))return a(dA(),$.slice(2));return $}function tA($){return $.split(xI).join("/")}function G2($){return yI("sha256").update($).digest("hex").slice(0,12)}function dI($){let W=0;while(W<$.length&&$[W]==="-")W++;let Z=$.length;while(Z>W&&$[Z-1]==="-")Z--;return $.slice(W,Z)}function I1($){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 dI(W)||"plugin"}function eA($){return/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test($.trim())}function lI($){return $?.trim()||vI}function iA($){let Z=$.trim().match(/^(@?[^@/]+(?:\/[^@/]+)?)(?:@.+)?$/);if(!Z?.[1])throw Error(`Invalid npm plugin source: npm:${$}`);return{name:Z[1]}}function pI($){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 rI($){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 iI($){try{return decodeURIComponent($)}catch{return $}}function nI($){return x1(iI($))||"plugin"}function aI($){let W=$.split("/").filter(Boolean);return W.length>=5&&(W[2]==="blob"||W[2]==="raw")}function nA($){if(!/^https?:\/\//i.test($))return null;let W;try{W=new URL($)}catch{return null}let Z=W.hostname.toLowerCase(),Q=nI(W.pathname),J=X9(Q),j=(Z==="github.com"||Z==="www.github.com")&&aI(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 aA($,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}=rI(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 $U($,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}=iA(X);return{type:"npm",spec:X,name:Y}}if(W==="git"){let X=aA(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=nA(Z);if(!X)throw Error(`Invalid remote plugin source: ${$}`);return X}if(Z.startsWith("npm:")){let X=Z.slice(4).trim(),{name:Y}=iA(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=nA(Z);if(J)return J;let j=aA(Z);if(j)return j;if(eA(Z))return{type:"official",slug:Z};if(pI(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 oI($){return $?a($,".cline","plugins"):a(gI(),"plugins")}function sI($,W,Z){if(W.type==="npm")return a($,D8,"npm",`${I1(W.name)}-${G2(Z)}`);if(W.type==="git")return a($,D8,"git",I1(W.host),`${I1(W.path)}-${G2(Z)}`);if(W.type==="remote")return a($,D8,"remote",`${I1(W.filename)}-${G2(Z)}`);if(W.type==="official")return a($,D8,"official",`${I1(W.slug)}-${G2(Z)}`);return a($,D8,"local",`${I1(x1(H9(W.path)))}-${G2(Z)}`)}function tI($,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:${O$(W,H9($.path))}`}function eI($,W){if($.type==="npm")return $.name;if($.type==="git")return I1(x1($.path));if($.type==="remote")return I1(x1($.filename,II($.filename)));if($.type==="official")return $.slug;return I1(x1(O$(W,H9($.path))))}async function _8($,W,Z={}){await new Promise((Q,J)=>{let j=bI($,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 WU($){let W=a($,"package.json");if(!A1(W))return null;try{return JSON.parse(kI(W,"utf8"))}catch{return null}}function $x($){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=a($,"package.json"),Z=WU($);if(!Z)return;let Q=!1;for(let J of cI){let j=Z[J];if(!j||typeof j!=="object")continue;for(let X of Object.keys(j)){if(!X.startsWith(rA))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(rA))continue;delete Z.peerDependenciesMeta[J],Q=!0}if(Object.keys(Z.peerDependenciesMeta).length===0)delete Z.peerDependenciesMeta}if(!Q)return;await V9(W,`${JSON.stringify(Z,null,2)}
|
|
756
|
+
`,"utf8")}function Zx($,W){let Z=a($,"node_modules","@cline");if(!A1(Z))return;for(let Q of QU(Z)){if(`@cline/${Q.name}`===W)continue;Y9(a(Z,Q.name),{recursive:!0,force:!0})}}function ZU($){let W=$x(WU($)).map((j)=>O$($,j)).filter((j)=>A1(j)&&mJ(j).isFile()&&X9(j));if(W.length>0)return W;let Z=mI($);if(Z?.length)return Z;let Q=[],J=[$];while(J.length>0){let j=J.pop();if(!j)continue;for(let X of QU(j)){let Y=a(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(".")&&X9(Y))Q.push(Y)}}return Q.sort((j,X)=>j.localeCompare(X))}function QU($){try{return hI($,{withFileTypes:!0})}catch{return[]}}function Qx($,W){let Z=ZU(W);if(Z.length===0)throw Error(`No plugin entry files found in ${W}`);return Z.map((Q)=>`./${tA(sA($,Q))}`)}async function Jx($,W,Z){let Q=Qx($,W);return await V9(a($,"package.json"),JSON.stringify({...uI,name:Z,cline:{plugins:[{paths:Q}]}},null,2),"utf8"),Q}async function jx($,W,Z){let Q=a(W,B9);return await oA(Q,{recursive:!0}),await V9(a(Q,"package.json"),JSON.stringify({name:"cline-plugin-install",private:!0},null,2),"utf8"),await _8(Z,["install",$.spec,"--prefix",Q,"--omit=dev","--omit=peer","--legacy-peer-deps","--no-audit","--no-fund","--package-lock=false"]),Zx(Q,$.name),a(Q,"node_modules",$.name)}async function vJ($,W){if(!A1(a($,"package.json")))return;await Wx($),await _8(W,["install","--omit=dev","--omit=peer","--legacy-peer-deps","--no-audit","--no-fund","--package-lock=false"],{cwd:$})}async function Xx($,W,Z){if($.ref?.startsWith("-"))throw Error(`Invalid git ref "${$.ref}".`);let Q=a(W,B9),J=["clone","--filter=blob:none"];if($.ref)J.push("--branch",$.ref);J.push("--",$.repo,Q);try{await _8("git",J)}catch(j){if(!$.ref)throw j;await _8("git",["clone","--filter=blob:none","--",$.repo,Q]),await _8("git",["checkout","--detach",$.ref],{cwd:Q})}return await vJ(Q,Z),Q}async function Yx($,W,Z,Q){let J=a(W,"repo");await _8("git",["clone","--filter=blob:none","--depth","1","--",Q,J]);let j=a(J,"plugins",$.slug);if(!A1(j)||!mJ(j).isDirectory())throw Error(`Official Cline plugin "${$.slug}" was not found at plugins/${$.slug} in ${Q}`);let X=a(W,B9);return await xJ(j,X,{recursive:!0,filter:(Y)=>{let V=x1(Y);return V!==".git"&&V!=="node_modules"}}),Y9(J,{recursive:!0,force:!0}),await vJ(X,Z),X}function IJ($){return Error(`Remote plugin file from ${$} exceeds the ${j9} byte limit`)}function Vx($){let W=$.headers.get("content-length");if(!W)return;let Z=Number(W);if(!Number.isFinite(Z)||Z<0)return;return Z}async function Bx($,W){let Z=Vx($);if(Z!==void 0&&Z>j9)throw IJ(W);if(!$.body){let X=Buffer.from(await $.text(),"utf8");if(X.byteLength>j9)throw IJ(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>j9)throw await Q.cancel().catch(()=>{return}),IJ(W);J.push(V)}return Buffer.concat(J,j)}finally{Q.releaseLock()}}async function Hx($,W){let Z=new AbortController,Q=setTimeout(()=>{Z.abort()},pA);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 Bx(J,$.url);return gJ(W,{recursive:!0}),await V9(a(W,$.filename),j),W}catch(J){if(J instanceof Error&&J.name==="AbortError")throw Error(`Timed out downloading plugin file from ${$.url} after ${pA}ms`);throw J}finally{clearTimeout(Q)}}async function Gx($,W,Z,Q){let J=O$(Z,H9($.path));if(!A1(J))throw Error(`Plugin source path does not exist: ${J}`);let j=mJ(J);if(j.isFile()){if(!X9(J))throw Error(`Plugin file must be .js or .ts: ${J}`);gJ(W,{recursive:!0});let Y=a(W,x1(J));return await xJ(J,Y),W}if(!j.isDirectory())throw Error(`Plugin source must be a file or directory: ${J}`);let X=a(W,B9);return await xJ(J,X,{recursive:!0,filter:(Y)=>{let V=x1(Y);return V!==".git"&&V!=="node_modules"}}),await vJ(X,Q),X}function Kx($,W){if(A1($)&&!W)throw Error(`Plugin is already installed at ${$}. Use --force to replace it.`)}function Fx($,W,Z){if(gJ(lA(W),{recursive:!0}),!A1(W)){J9($,W);return}if(!Z)throw Error(`Plugin is already installed at ${W}. Use --force to replace it.`);let Q=a(lA(W),`.replace-${x1(W)}-${Date.now()}-${process.pid}-${G2(`${W}:${Math.random()}`)}`);J9(W,Q);try{J9($,W)}catch(J){if(!A1(W)&&A1(Q))J9(Q,W);throw J}try{Y9(Q,{recursive:!0,force:!0})}catch{}}function Ax($){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 JU($){let W=new Set($.pluginPaths.map((J)=>O$(J)));if(W.size===0)return[];let Z;try{Z=V1({filePath:$.settingsPath??Q0()})}catch{return[]}let Q=[];for(let J of Z){let j=Dx(J);if(!j||!W.has(O$(j.pluginPath)))continue;let X=J.transport.type;if(X==="stdio")continue;if(Ax(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 _x($){let W=$.source.trim(),Z=$U(W,$.sourceType),Q=$.cwd?.trim(),J=Q?O$(Q):process.cwd(),j=oI(Q?J:void 0),X=lI($.officialPluginsRepo),Y=tI(Z,J,X),V=sI(j,Z,Y),B=eI(Z,J),H=a(j,D8,".tmp"),G=a(H,`${Date.now()}-${process.pid}-${G2(`${W}:${Math.random()}`)}`),K=$.npmCommand??(process.env.CLINE_NPM_COMMAND?.trim()||"npm"),F=$.force===!0;Kx(V,F),await oA(H,{recursive:!0});let A;try{if(Z.type==="npm")A=await jx(Z,G,K);else if(Z.type==="git")A=await Xx(Z,G,K);else if(Z.type==="official")A=await Yx(Z,G,K,X);else if(Z.type==="remote")A=await Hx(Z,G);else A=await Gx(Z,G,J,K);let D=(Z.type==="local"||Z.type==="remote")&&A===G?ZU(G).map((_)=>`./${tA(sA(G,_))}`):await Jx(G,A,B);if(D.length===0)throw Error(`No plugin entry files found for ${W}`);Fx(G,V,F);let U={source:W,installPath:V,entryPaths:D.map((_)=>O$(V,_)),mcpSyncFailures:[],mcpOAuthCandidates:[]},f=await TJ({pluginPaths:U.entryPaths,cwd:J,workspacePath:J});return U.mcpSyncFailures=f.failures,U.mcpOAuthCandidates=JU({pluginPaths:U.entryPaths}),U}catch(D){throw Y9(G,{recursive:!0,force:!0}),D}}import*as y0 from"@cline/llms";var XU="cline-pass";function fx($){return $.apiKey??$.auth?.apiKey}function Lx($){return($.auth?.accessToken?.trim()??"").length>0}function YU($){return $.split(/[-_]/).filter(Boolean).map((W)=>W.charAt(0).toUpperCase()+W.slice(1)).join(" ")}function Tx($){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 Ox($){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 VU($){return Object.entries($).sort(([W],[Z])=>W.localeCompare(Z)).map(([W,Z])=>_K(W,Z))}async function zx($,W){let Z=await y0.getModelsForProvider($),Q=$===XU;if(!W&&!Q)return Z;let J=await jZ($,{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 cJ($){return[...new Set(($??[]).map((W)=>W.trim()).filter(Boolean))]}function qx($){if(!$?.length)return;return[...new Set($)]}function Mx($,W){return qx([...$??[],...W??[]])}function Rx($){let W=$?.popularRank;return typeof W==="number"&&Number.isFinite(W)?W:Number.MAX_SAFE_INTEGER}function Nx($){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 Ex($){let W=$?.configFields;if(!Array.isArray(W))return;return W.filter(Nx)}var G9={path:"apiKey",label:"API Key",type:"password",placeholder:"Enter API key...",description:"API key issued by the provider.",secret:!0},jU={path:"baseUrl",label:"Base URL",type:"url",placeholder:"https://...",description:"Base endpoint used for provider requests."};function wx($){if(!$)return[G9];if($.source!=="system")return $.baseUrl?[G9,jU]:[G9];let W=[];if($.env?.length)W.push(G9);if($.baseUrl)W.push(jU);return W}function Cx($,W){return W.split(".").reduce((Z,Q)=>{if(!Z||typeof Z!=="object")return;return Z[Q]},$)}function Px($){if(typeof $==="string"||typeof $==="number"||typeof $==="boolean"||$===null)return $;return}function Sx($,W,Z){if(!$?.length)return;let Q={};for(let J of $){let X=Px(J.path==="baseUrl"&&W?.baseUrl===void 0?Z?.baseUrl:Cx(W,J.path))??J.defaultValue;if(X!==void 0)Q[J.path]=X}return Q}function BU($){let W=Object.entries($??{}).filter(([Z])=>Z.trim().length>0);return W.length>0?Object.fromEntries(W):void 0}function uJ($,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 HU($){if(!$.shouldRecompute)return $.fallbackModelIds??[];let W=$.modelsSourceUrl?await _4($.modelsSourceUrl,$.providerId):[];return[...new Set([...$.explicitModels??[],...W])]}function GU($,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);y0.unregisterProvider(W)}async function bx($,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=A$($);if((await j8(A)).providers[Z]){let U=await FU($,{providerId:Z});return{providerId:Z,settingsPath:U.settingsPath,modelsPath:U.modelsPath,modelsCount:0}}return GU($,Z),{providerId:Z,settingsPath:$.getFilePath(),modelsPath:A,modelsCount:0}}if(y0.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=cJ(W.models),Y=W.modelsSourceUrl?.trim(),V=await HU({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=BU(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=A$($),F=await j8(K);return F.providers[Z]={provider:{name:j,baseUrl:Q,defaultModelId:B,protocol:W.protocol,client:W.client,capabilities:H,modelsSourceUrl:Y},models:uJ(V,H)},await MW(K,F),X8(Z,F.providers[Z]),{providerId:Z,settingsPath:$.getFilePath(),modelsPath:K,modelsCount:V.length}}async function KU($,W){let Z=W.providerId.trim().toLowerCase();if(!Z)throw Error("providerId is required");let Q=A$($),J=await j8(Q),j=J.providers[Z];if(!j){let O=$.getProviderSettings(Z);if(!O)throw Error(`provider "${Z}" does not exist`);let T=W.modelsSourceUrl?.trim(),L=cJ(W.models)[0]??O.model?.trim();if(!L&&!T)throw Error(`provider "${Z}" cannot be updated because no model is configured`);j={provider:{name:W.name?.trim()||YU(Z),baseUrl:W.baseUrl?.trim()??O.baseUrl?.trim()??"",defaultModelId:L,protocol:O.protocol,client:O.client,capabilities:O.capabilities},models:L?uJ([L],O.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=cJ(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((O)=>O.trim()).filter(Boolean),D=await HU({providerId:Z,explicitModels:G,modelsSourceUrl:K,fallbackModelIds:A,shouldRecompute:F});if(D.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let U=W.defaultModelId===void 0?j.provider.defaultModelId?.trim():W.defaultModelId?.trim(),f=U&&D.includes(U)?U:D[0],q={...$.getProviderSettings(Z)??{},provider:Z,baseUrl:Y,model:f};if(B)q.protocol=B;else delete q.protocol;if(H)q.client=H;else delete q.client;if(W.apiKey!==void 0){let O=W.apiKey?.trim()??"";if(O)q.apiKey=O;else delete q.apiKey}if(W.headers!==void 0){let O=BU(W.headers);if(O)q.headers=O;else delete q.headers}if(W.timeoutMs!==void 0)if(typeof W.timeoutMs==="number")q.timeout=W.timeoutMs;else delete q.timeout;return $.saveProviderSettings(q,{setLastUsed:!1}),J.providers[Z]={provider:{name:X,baseUrl:Y,defaultModelId:f,protocol:B,client:H,capabilities:V,modelsSourceUrl:K},models:uJ(D,V)},await MW(Q,J),X8(Z,J.providers[Z]),{providerId:Z,settingsPath:$.getFilePath(),modelsPath:Q,modelsCount:D.length}}async function FU($,W){let Z=W.providerId.trim().toLowerCase();if(!Z)throw Error("providerId is required");let Q=A$($),J=await j8(Q);if(!J.providers[Z])throw Error(`provider "${Z}" does not exist`);return delete J.providers[Z],await MW(Q,J),y0.unregisterProvider(Z),GU($,Z),{providerId:Z,settingsPath:$.getFilePath(),modelsPath:Q}}function yx($,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 hx($,W={}){let Z=$.read(),Q=y0.getProviderIds(),J=await Promise.all(Q.map(async(X)=>{let[Y,V]=await Promise.all([y0.getProvider(X),y0.getModelsForProvider(X)]),B=VU(V),H=Z.providers[X]?.settings,G=$.getProviderSettings(X),K=Y?.name??YU(X),F=Mx(Y?.capabilities,G?.capabilities),A=Ex(Y?.metadata)??wx(Y);return{provider:{id:X,name:K,models:B.length,color:Ox(X),letter:Tx(K),enabled:Boolean(H),apiKey:G?fx(G):void 0,oauthAccessTokenPresent:G?Lx(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:Sx(A,G,Y),modelList:B},rank:Rx(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!==XU);return{providers:j,settingsPath:$.getFilePath()}}async function kx($,W){let Z=$.trim(),Q=await zx(Z,W),J=VU(Q);return{providerId:Z,models:J}}function K9($){return $!=null&&typeof $==="object"&&!Array.isArray($)}function AU($,W){if(!K9(W))return K9($)?{...$}:void 0;let Z=K9($)?{...$}:{};for(let[Q,J]of Object.entries(W)){if(J==null||J===""){delete Z[Q];continue}if(K9(J)){let j=AU(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 Ix($,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=AU(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 xx($,W){let Z=W.trim(),Q=$.getProviderSettings(Z),j=y0.MODEL_COLLECTIONS_BY_PROVIDER_ID[Z]?.provider,X=Q?.baseUrl?.trim()||j?.baseUrl?.trim(),Y=f4(X,j?.baseUrl,j?.modelsSourceUrl);if(!Q||!j||!X||!Y)return{providerId:Z,refreshed:!1};let V=await KU($,{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 gx($){let W=$.trim().toLowerCase(),Z=A0(W);if(Z)return Z.providerId;throw Error(`provider "${$}" does not support OAuth login`)}async function mx($,W,Z,Q){let J=A0($);if(!J)throw Error(`provider "${$}" does not support OAuth login`);let j=j4({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 vx($,W,Z,Q,J){return q8({manager:$,providerId:W,settings:Z,credentials:Q,setLastUsed:J?.setLastUsed})}async function cx($,W,Z,Q){let J=j4({onPrompt:async(j)=>j.defaultValue??"",openUrl:Z,onOpenUrlError:({error:j})=>{throw j instanceof Error?j:Error(String(j))}});return t9($,W,{callbacks:J,telemetry:Q})}function ux($){let W=$?.auth?.accessToken?.trim()||$?.apiKey?.trim();return W&&W.length>0?W:void 0}import*as F9 from"@cline/llms";var dx=["apiKey","baseUrl","azureApiVersion","awsRegion","awsProfile","gcpProjectId","gcpRegion","sapClientId","sapClientSecret","sapTokenUrl","sapResourceGroup","sapDeploymentId"],lx={"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 px($,W){let Z={};for(let Q of dx){let J=$[Q],j=W[Q];if(J||j)Z[Q]={...J,...j}}return Z}function rx($){let W=lx[$.providerId];if(!W)return $;return{...$,description:W.description??$.description,fields:W.mode==="replace"?W.fields:px($.fields,W.fields)}}var ix=new Set(["ollama","lmstudio","litellm","openai-compatible"]);function nx($,W){if(!W?.provider.baseUrl)return!1;if(W.provider.source!=="system")return!0;return ix.has($)}function ax($){let W=F9.normalizeProviderId($);if(T2(W))return{providerId:W,authMethod:"oauth",fields:{}};let Z=F9.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(nx(W,Z))J.baseUrl={defaultValue:Q};return rx({providerId:W,authMethod:"api-key",fields:J})}eW();F0();rW();import{appendFileSync as ox,existsSync as dJ,mkdirSync as sx,readFileSync as tx,renameSync as ex,unlinkSync as $g,writeFileSync as Wg}from"node:fs";import{join as lJ}from"node:path";import{resolveTeamDataDir as Zg}from"@cline/shared/storage";function Qg($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}class UU{dirPath;statePath;taskHistoryPath;teammateSpecs=new Map;constructor($){let W=Qg($.teamName),Z=$.baseDir?.trim()||Zg();this.dirPath=lJ(Z,W),this.statePath=lJ(this.dirPath,"state.json"),this.taskHistoryPath=lJ(this.dirPath,"task-history.jsonl")}loadState(){if(!dJ(this.statePath))return;try{let $=tx(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 DG(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`;Wg(Z,`${JSON.stringify(W,null,2)}
|
|
757
|
+
`,"utf8"),ex(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(),ox(this.taskHistoryPath,`${JSON.stringify({ts:new Date().toISOString(),type:$.type,task:W})}
|
|
758
|
+
`,"utf8")}ensureDir(){if(!dJ(this.dirPath))sx(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(dJ(this.statePath))$g(this.statePath)}}import{z as y}from"zod";var DU=y.object({workspaceRoot:y.string().min(1),cwd:y.string().optional(),provider:y.string().min(1),model:y.string().min(1),mode:y.enum(["act","plan"]).default("act"),apiKey:y.string(),systemPrompt:y.string().optional(),rules:y.string().optional(),maxIterations:y.number().int().positive().optional(),enableTools:y.boolean(),enableSpawn:y.boolean().optional(),enableTeams:y.boolean().optional(),autoApproveTools:y.boolean().optional(),missionStepInterval:y.number().int().positive().optional(),missionTimeIntervalMs:y.number().int().positive().optional()}),_U=y.enum(["idle","starting","running","pending","stopping","completed","cancelled","failed","error"]),fU=y.enum(["user","assistant","tool","system","status","error"]),LU=y.object({id:y.string().min(1),sessionId:y.string().nullable(),role:fU,content:y.string(),createdAt:y.number().int().nonnegative(),meta:y.object({stream:y.enum(["stdout","stderr"]).optional(),toolName:y.string().optional(),iteration:y.number().int().nonnegative().optional(),agentId:y.string().optional(),conversationId:y.string().optional(),hookEventName:y.string().optional(),inputTokens:y.number().int().nonnegative().optional(),outputTokens:y.number().int().nonnegative().optional(),checkpoint:y.object({ref:y.string(),createdAt:y.number().int().nonnegative(),runCount:y.number().int().positive(),kind:y.enum(["stash","commit"]).optional()}).optional()}).optional()}),TU=y.object({toolCalls:y.number().int().nonnegative(),tokensIn:y.number().int().nonnegative(),tokensOut:y.number().int().nonnegative()}),Jg=y.object({sessionId:y.string().nullable(),status:_U,config:DU,messages:y.array(LU),rawTranscript:y.string(),error:y.string().nullable(),summary:TU});var jg=a2;import{Agent as E60,createAgentRuntime as w60}from"@cline/agents";import{getClineEnvironmentConfig as Xg}from"@cline/shared";var Yg=5000,OU={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 Vg($){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 pJ($){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 Bg($){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(pJ).filter((V)=>V!==null),X=Q.map(pJ).filter((V)=>V!==null),Y=J.map(pJ).filter((V)=>V!==null);if(j.length===0&&X.length===0&&Y.length===0)return null;return{recommended:j,free:X,clinePass:Y}}function Hg($){let W=$.baseUrl?.trim();if(W)return W;let Z=Xg().apiBaseUrl;try{return($.providerSettingsManager??new U$).getProviderSettings("cline")?.baseUrl?.trim()||Z}catch{return Z}}async function Gg($,W,Z){let Q=new AbortController,J=setTimeout(()=>Q.abort(),Z);try{return await $(W,{signal:Q.signal})}finally{clearTimeout(J)}}async function Kg($={}){try{let W=Hg($),Z=$.fetchImpl??fetch,Q=await Gg(Z,`${W}/api/v1/ai/cline/recommended-models`,$.timeoutMs??Yg);if(!Q.ok)throw Error(`HTTP ${Q.status}`);let J=await Q.json(),j=Bg(J);if(j)return j}catch{}return Vg(OU)}import{readFile as Fg}from"node:fs/promises";import Ag from"node:path";function Ug($){return $}async function Dg($){let W=Ag.resolve($),Z=await Fg(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 _g(Q,W)}function _g($,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 $}import{BUILT_IN_PROVIDER_IDS as MU,createHandler as Tg,createHandlerAsync as Og,getProviderCollection as zg,hasProvider as RU,registerAsyncHandler as qg,registerHandler as Mg,registerModel as Rg,registerProvider as NU}from"@cline/llms";function zU($){return $?{...$}:{}}function fg($,W){if($)return $;if(!W)return;let Z=globalThis.process;if(!Z?.env)return;return Z.env[W]}function Lg($,W){if(!W.length)throw Error(`Provider "${$}" must include at least one model.`)}function qU($){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 rJ{providers=new Map;register($){Lg($.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??{},...zU($.defaults)}})}registerSelectionConfig($){this.register({id:$.id,models:$.models,defaultModel:$.defaultModel,defaults:{apiKey:fg($.apiKey,$.apiKeyEnv),routingProviderId:$.builtinProviderId,baseUrl:$.baseUrl,headers:$.headers,timeoutMs:$.timeoutMs,capabilities:$.capabilities,...zU($.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 iJ{configuredProviders=new rJ;constructor($){this.applyConfig($)}createHandler($){return Tg(this.configuredProviders.createHandlerConfig($))}async createHandlerAsync($){return Og(this.configuredProviders.createHandlerConfig($))}registerProvider($){if(NU($.collection),$.handlerFactory&&$.asyncHandlerFactory)throw Error(`Provider "${$.collection.provider.id}" cannot register both sync and async handlers.`);if($.handlerFactory)Mg($.collection.provider.id,$.handlerFactory);if($.asyncHandlerFactory)qg($.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.`);NU({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($){Rg($.providerId,$.modelId,$.info),this.configuredProviders.registerModel($.providerId,$.modelId)}getProviders(){return this.configuredProviders.list()}getBuiltInProviderIds(){return[...MU]}async getBuiltInProviders(){return(await Promise.all(MU.map((W)=>zg(W)))).filter((W)=>W!==void 0).map((W)=>qU({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=RU(W.id),Q=this.configuredProviders.createHandlerConfig({providerId:W.id,modelId:W.defaultModel}).routingProviderId,J=typeof Q==="string"&&RU(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 Ng($){return new iJ($)}u3();async function k20(){return Promise.resolve().then(() => (eW(),qA))}export{_3 as writeModelsFileSync,HH as writeHubDiscovery,L1 as writeGlobalSettings,GH as withHubStartupLock,X$ as verifyHubConnection,M1 as updateMcpSettingsFileSync,N5 as updateMcpSettingsFile,MQ as updateMcpServerOAuthStateAsync,$6 as updateMcpServerOAuthState,KU as updateLocalProvider,CJ as uninstallPlugin,cA as uninstallMarketplaceSkill,uA as uninstallMarketplacePlugin,mA as uninstallMarketplaceMcpServerFromSettings,SI as uninstallMarketplaceEntry,i3 as truncateNotificationBody,y8 as truncateCommandOutput,GZ as toggleDisabledTool,JW as toTeamProgressLifecycleEvent,f1 as toProviderConfig,jN as toHubStatusUrl,KH as toHubHealthUrl,B3 as toHookConfigFileName,JS as syncStoredProviderRegistration,TJ as syncPluginMcpServersToSettings,KW as summarizeUsageFromMessages,_80 as stripUtf8Bom,FE as stopLocalHubServerGracefully,_1 as startLocalOAuthServer,AJ as startHubWebSocketServer,e10 as startHubServer,QD as startClineDeviceAuth,bQ as splitCoreSessionConfig,p5 as spawnDetachedHubServerWithRetry,lN as spawnDetachedHubServer,l_ as setTelemetryOptOutGlobally,kU as setSdkLogger,t8 as setMcpServerDisabled,ZX as setDisabledTools,s_ as setDisabledPlugin,n_ as setCompactionStrategyGlobally,r_ as setAutoUpdateEnabledGlobally,ye as sendHubCommand,s as sdkDebug,q8 as saveProviderOAuthCredentials,Ix as saveLocalProviderSettings,vx as saveLocalProviderOAuthCredentials,D6 as sanitizeSessionToken,ij as safeParseSettings,O_ as safeCreateProviderConfig,IW as runSubprocessEvent,gW as runHook,fV as reviveTeamStateDates,CH as restartLocalHubIfIdleAfterStartupTimeout,tp as resolveWorkspaceHubOwnerContext,uZ as resolveWorkflowsConfigSearchPaths,vZ as resolveSkillsConfigSearchPaths,E1 as resolveSharedHubOwnerContext,qb as resolveSessionBackend,cZ as resolveRulesConfigSearchPaths,jZ as resolveProviderConfig,mD as resolveProviderApiKeyFromSettings,j$ as resolveProductionHubOwnerContext,S$ as resolvePluginSkillDirectoriesFromPaths,EZ as resolvePluginConfigSearchPaths,A$ as resolveModelsRegistryPath,V1 as resolveMcpServerRegistrations,bJ as resolveMarketplaceMcpServerName,ux as resolveLocalClineAuthToken,Sy as resolveHubUrl,n$ as resolveHubOwnerContext,J$ as resolveHubEndpointOptions,BH as resolveHubBuildId,Y3 as resolveHooksConfigSearchPaths,T1 as resolveDisabledToolNames,P4 as resolveDisabledPluginPaths,Q0 as resolveDefaultMcpSettingsPath,d5 as resolveDefaultHubPort,DN as resolveDefaultHubPathname,UN as resolveDefaultHubHost,zV as resolveCoreSelectedToolIds,a0 as resolveCoreDistinctId,O7 as resolveCompatibleLocalHubUrl,up as resolveClineDir,q6 as resolveClineDataDir,g4 as resolveAndLoadAgentPlugins,P$ as resolveAgentPluginPaths,D7 as requestHubShutdown,Nk as requestDesktopToolApproval,OJ as removePluginMcpServersFromSettings,o2 as rememberRecoverableLocalHubUrl,NA as registerRemoteConfigSessionBlobUpload,W6 as registerMcpServersFromSettingsFile,U80 as registerDisposable,xx as refreshProviderModelsFromSource,Dj as refreshOpenAICodexToken,Mj as refreshOcaToken,Aj as refreshClineToken,p6 as readSessionCheckpointHistory,Dk as readRemoteConfigSessionBlobUploadMetadata,qW as readModelsFileSync,L0 as readHubDiscovery,M0 as readGlobalSettings,i_ as readCompactionStrategyGlobally,fA as readBearerToken,N6 as projectSessionCompactionState,a$ as probeHubServer,be as probeHubConnection,LY as prewarmFileIndex,LH as prewarmDetachedHubServer,Lk as prepareRemoteConfigCoreIntegration,mZ as parseWorkflowConfigFromMarkdown,A80 as parseUserCommandEnvelope,xZ as parseSkillConfigFromMarkdown,rj as parseSettings,C1 as parseSessionCompactionState,gZ as parseRuleConfigFromMarkdown,$U as parsePluginSource,DJ as parseMcpInstallArgs,xW as parseHookEventPayload,S7 as parseConfiguredAgentConfig,e1 as normalizeWorkspacePath,F80 as normalizeUserInput,K80 as normalizeSdkError,S0 as normalizeRuntimeCapabilities,R4 as normalizeProviderId,gx as normalizeOAuthProvider,s2 as normalizeHubWebSocketUrl,G80 as noopBasicLogger,O3 as migrateLegacyProviderSettings,p4 as mergeRulesForSystemPrompt,u6 as mergeAgentHooks,CI as marketplaceEntryKey,yx as markLocalProviderEnabled,W7 as makeTeamTaskSubSessionId,g5 as makeSubSessionId,d9 as loginOpenAICodex,a9 as loginOcaOAuth,mx as loginLocalProvider,v9 as loginClineOAuth,t9 as loginAndSaveProviderOAuthCredentials,cx as loginAndSaveLocalProviderOAuthCredentials,k20 as loadOpenTelemetryAdapter,s8 as loadMcpSettingsFile,Dg as loadLlmsConfigFromFile,$W as loadConfiguredAgentConfigs,w8 as loadAgentPluginsFromPathsWithDiagnostics,_X as loadAgentPluginsFromPaths,OZ as loadAgentPluginFromPath,lR as listSessionHistoryFromBackend,VB as listPluginToolsWithDiagnostics,PQ as listPluginTools,RQ as listMcpServerOAuthStatuses,hx as listLocalProviders,Q8 as listHookConfigFiles,a_ as isToolDisabledGlobally,HZ as isTelemetryOptedOutGlobally,d$ as isSessionNotFoundError,IX as isRuleEnabled,o_ as isPluginDisabledGlobally,eA as isOfficialPluginSlug,T2 as isOAuthProvider,vA as isMarketplaceSkillInstalled,Bk as isLocalHubOrigin,LA as isLocalHubHostName,XE as isHubReconnectableTransportError,EH as isHubCommandTimeoutError,pp as isDiscoveryFilePresent,s20 as isClinePassLimitMessage,o20 as isClinePassLimitError,a20 as isClineOrgIndividualInferenceSubscriptionMessage,n20 as isClineOrgIndividualInferenceSubscriptionError,i20 as isClineNotSubscribedMessage,r20 as isClineNotSubscribedError,tJ as isClineAccountActionRequest,__ as isBuiltInProviderId,p_ as isAutoUpdateEnabledGlobally,_x as installPlugin,yk as installMcpServer,u1 as identifyAccount,P0 as hashSecret,c$ as hasMcpSettingsFile,l9 as getValidOpenAICodexCredentials,o9 as getValidOcaCredentials,c9 as getValidClineCredentials,e9 as getProviderOAuthCredentialsFromSettings,ax as getProviderConfigFields,kj as getProviderConfig,gD as getProviderAuthStorageId,A0 as getProviderAuthHandler,D4 as getPersistedProviderApiKey,e8 as getMcpServerOAuthState,yJ as getMarketplaceSkillCandidates,kx as getLocalProviderModels,M4 as getLiveModelsCatalog,hJ as getGlobalMarketplaceSkillPaths,I$ as getFileIndex,iC as getCurrentContextSize,DQ as getCoreHeadlessToolNames,OV as getCoreDefaultEnabledToolIds,i8 as getCoreBuiltinToolCatalog,qV as getCoreAcpToolNames,p20 as getClinePassSubscriptionUrl,l20 as getClineOrgIndividualInferenceSubscriptionMessage,d20 as getClineNotSubscribedMessage,e20 as getClineDefaultSystemPrompt,gQ as generateWorkspaceInfoWithDiagnostics,I5 as generateWorkspaceInfo,l4 as formatRulesForSystemPrompt,vD as formatProviderOAuthApiKey,H80 as formatDisplayUserInput,kJ as findInstalledGlobalMarketplaceSkillName,EW as findCheckpointForRun,FZ as filterExtensionToolRegistrations,l1 as filterDisabledTools,KZ as filterDisabledPluginPaths,Kg as fetchClineRecommendedModels,u20 as extractClinePassLimitMessage,eJ as executeClineAccountAction,TA as ensureHubWebSocketServer,$$0 as ensureHubServer,Br as ensureDetachedHubServer,f3 as ensureCustomProvidersLoadedSync,qK as ensureCustomProvidersLoaded,R6 as ensureCompatibleLocalHubUrl,H5 as enrichPromptWithMentions,Y80 as emptyWorkspaceManifest,J8 as emptyStoredProviderSettings,wZ as discoverPluginModulePaths,uk as disablePluginMcpServersInSettings,Z7 as deriveSubsessionStatus,FU as deleteLocalProvider,Ug as defineLlmsConfig,pZ as createWorkflowsConfigDefinition,u2 as createUserInstructionConfigService,MY as createToolPoliciesWithPreset,X80 as createTool,cK as createTeamName,BF as createSubprocessHooks,c2 as createSpawnAgentTool,dZ as createSkillsConfigDefinition,aZ as createShellTool,h8 as createShellExecutor,hW as createSessionHost,a5 as createSessionCompactionState,hW as createRuntimeHost,lZ as createRulesConfigDefinition,fk as createRemoteConfigSessionMessagesArtifactUploader,T_ as createProviderConfig,lW as createOpenTelemetryTelemetryService,j4 as createOAuthClientCallbacks,y5 as createMcpTools,pe as createLocalHubScheduleRuntimeHandlers,Ng as createLlmsSdk,N0 as createInitialAccumulatedUsage,lp as createInMemoryHubOwnerContext,N1 as createHubServerUrl,VH as createHubAuthToken,F3 as createHookConfigFileHooks,fW as createHookConfigFileExtension,_W as createHookAuditHooks,x8 as createEditorExecutor,CQ as createDisabledMcpToolPolicy,jB as createDisabledMcpToolPolicies,m2 as createDelegatedAgentConfigProvider,v2 as createDelegatedAgent,RY as createDefaultToolsWithPreset,h2 as createDefaultTools,$Q as createDefaultShellExecutor,S5 as createDefaultMcpServerClientFactory,A5 as createDefaultExecutors,X6 as createCoreSettingsService,Y$ as createCoreSessionSnapshot,j80 as createContributionRegistry,Q3 as createContextCompactionPrepareTurn,Y2 as createConfiguredTelemetryService,pW as createConfiguredTelemetryHandle,ZW as createConfiguredAgentTools,J3 as createCompactionStateAwarePrepareTurn,J80 as createClineTelemetryServiceMetadata,Q80 as createClineTelemetryServiceConfig,QF as createCheckpointComparePlan,n8 as createBuiltinTools,I8 as createApplyPatchExecutor,r8 as createAgentTeamsTools,w60 as createAgentRuntime,FW as createAgentHooksExtension,AF as connectToHub,X5 as computePatchChanges,JD as completeClineDeviceAuth,m3 as compareCheckpointToWorkspace,JU as collectPluginMcpOAuthCandidates,A_ as clearPrivateModelsCatalogCache,F_ as clearLiveModelsCatalogCache,Q1 as clearHubDiscovery,dU as captureWorkspacePathResolved,f9 as captureWorkspaceInitialized,L9 as captureWorkspaceInitError,T8 as captureToolUsage,q9 as captureTokenUsage,z9 as captureTaskRestarted,O9 as captureTaskCreated,Y4 as captureTaskCompleted,B4 as captureSubagentExecution,R9 as captureSkillUsed,Z80 as captureSdkError,lU as captureProviderConfigured,V4 as captureProviderApiError,M9 as captureModeSwitch,E9 as captureMistakeLimitReached,w9 as captureMentionUsed,P9 as captureMentionSearchResults,C9 as captureMentionFailed,b9 as captureHookDiscovery,uU as captureExtensionActivated,N9 as captureDiffEditFailure,L8 as captureConversationTurnEvent,h9 as captureCompactionSkipped,y9 as captureCompactionExecuted,v1 as captureAuthSucceeded,m1 as captureAuthStarted,M$ as captureAuthLoggedOut,c1 as captureAuthFailed,xU as captureAgentUnexpectedReasoningTokens,S9 as captureAgentTeamCreated,R$ as captureAgentCreated,mQ as buildWorkspaceMetadata,QW as buildTeamProgressSummary,$80 as buildSdkErrorProperties,MA as buildRemoteConfigSessionBlobUploadMetadata,CA as buildMcpInstallTransport,l8 as buildDelegatedAgentConfig,OO as buildConnectionUpdate,y7 as buildConfiguredAgentToolName,h7 as buildConfiguredAgentToolDescriptors,JF as buildCheckpointWorkspaceDiff,z5 as bootstrapAgentTeams,iV as authorizeMcpServerOAuth,bx as addLocalProvider,T0 as accumulateUsageTotals,yZ as WORKFLOWS_CONFIG_DIRECTORY_NAME,R8 as UnifiedConfigFileWatcher,Y1 as ToolPresets,e6 as TelemetryService,dW as TelemetryLoggerSink,O5 as TEAM_TOOL_NAMES,b4 as SubprocessSandbox,b8 as StructuredCommandInputSchema,LW as StoredProviderSettingsSchema,jK as StoredProviderSettingsEntrySchema,r6 as SqliteTeamStore,H$ as SqliteSessionStore,B8 as SessionVersioningService,J1 as SessionVersioningError,U0 as SessionSource,u$ as SessionNotFoundError,dj as SapSettingsSchema,bZ as SKILLS_CONFIG_DIRECTORY_NAME,VZ as SESSION_STATUSES,Y6 as SESSION_NOT_FOUND_ERROR_CODE,D80 as SDK_ERROR_TELEMETRY_EVENT,_9 as RpcClineAccountService,o5 as RemoteRuntimeHost,mj as ReasoningSettingsSchema,CX as RULES_CONFIG_DIRECTORY_NAME,RA as REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY,O2 as ProviderSettingsSchema,U$ as ProviderSettingsManager,Ij as ProviderProtocolSchema,YZ as ProviderIdSchema,xj as ProviderClientSchema,k8 as PatchActionType,$4 as OpenTelemetryProvider,lj as OcaSettingsSchema,JZ as OPENAI_COMPATIBLE_PROVIDERS,w1 as NodeHubClient,s6 as NoOpFeatureFlagsProvider,BJ as NativeHubTransportAdapter,pj as ModelCatalogSettingsSchema,M5 as McpSettingsUpdateSkippedError,d2 as McpSettingsMutatorPurityError,l2 as McpSettingsLockTimeoutError,h$ as MAX_COMMAND_OUTPUT_CHARS,_$ as LocalRuntimeHost,x20 as Llms,TW as InMemoryWorkspaceManager,Z6 as InMemoryMcpManager,Iy as HubUIClient,n0 as HubTransportError,ky as HubSessionClient,tW as HubServerTransport,uW as HubScheduleService,mW as HubScheduleCommandService,$2 as HubRuntimeHost,r5 as HubCommandError,YF as HookEventPayloadSchema,XF as HookEventNameSchema,AW as HookConfigFileName,V3 as HOOK_CONFIG_FILE_EVENT_MAP,oG as HOOKS_CONFIG_DIRECTORY_NAME,C4 as GlobalSettingsSchema,cj as GcpSettingsSchema,UU as FileTeamPersistenceStore,o6 as FeatureFlagsService,B80 as FeatureFlagDefaultValue,V80 as FEATURE_FLAGS,OU as FALLBACK_CLINE_RECOMMENDED_MODELS,R0 as DefaultToolNames,SW as DefaultRuntimeBuilder,iJ as DefaultLlmsSdk,bj as DEFAULT_MODELS_CATALOG_URL,FN as DEFAULT_HUB_PORT,AN as DEFAULT_HUB_PATHNAME,KN as DEFAULT_HUB_HOST,n2 as CoreSettingsService,G$ as CoreSessionService,W80 as ContributionRegistry,k$ as CommandExitError,c20 as ClinePassLimitError,v20 as ClineOrgIndividualInferenceSubscriptionError,m20 as ClineNotSubscribedError,v3 as ClineCore,D9 as ClineAccountService,Jg as ChatViewStateSchema,TU as ChatSummarySchema,_U as ChatSessionStatusSchema,DU as ChatSessionConfigSchema,LU as ChatMessageSchema,fU as ChatMessageRoleSchema,I as CORE_TELEMETRY_EVENTS,jg as CORE_BUILD_VERSION,VJ as BrowserWebSocketHubAdapter,D_ as BUILT_IN_PROVIDER_IDS,XZ as BUILT_IN_PROVIDER,uj as AzureSettingsSchema,vj as AwsSettingsSchema,gj as AuthSettingsSchema,b6 as AgentTeamsRuntime,I7 as AgentTeam,E60 as Agent,w2 as ALL_DEFAULT_TOOL_NAMES};
|