@cline/core 0.0.53 → 0.0.54
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/account/cline-account-service.d.ts +2 -1
- package/dist/account/index.d.ts +1 -1
- package/dist/account/types.d.ts +11 -0
- package/dist/extensions/context/basic-compaction.d.ts +1 -1
- package/dist/extensions/context/compaction-shared.d.ts +3 -2
- package/dist/hub/daemon/entry.js +142 -141
- package/dist/hub/index.js +142 -141
- package/dist/index.d.ts +1 -1
- package/dist/index.js +138 -137
- package/dist/types/config.d.ts +1 -0
- package/package.json +4 -4
package/dist/hub/index.js
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
import{createRequire as
|
|
2
|
-
`,"utf8"),fT()}function x9(){return M0().telemetryOptOut}function yj($,Z={}){b1({...M0(),telemetryOptOut:$},Z)}function hj(){return M0().autoUpdateEnabled}function kj($,Z={}){b1({...M0(),autoUpdateEnabled:$},Z)}function B1($){return new Set($??M0().disabledTools??[])}function u4($){return new Set($??M0().disabledPlugins??[])}function Ij($){return B1().has($)}function g9($){let Z=M0(),Q=new Set(Z.disabledTools??[]),W=Q.has($);if(W)Q.delete($);else Q.add($);return b1({...Z,disabledTools:[...Q]}),!W}function FW($,Z){let Q=[...new Set($.map((X)=>X.trim()).filter(Boolean))];if(Q.length===0)return;let W=M0(),J=B1(W.disabledTools);for(let X of Q)if(Z)J.add(X);else J.delete(X);b1({...W,disabledTools:[...J]})}function xj($,Z){return FW([$],Z),Z}function gj($){return u4().has($)}function mj($,Z){let Q=$.trim();if(!Q)return;let W=M0(),J=u4(W.disabledPlugins);if(Z)J.add(Q);else J.delete(Q);b1({...W,disabledPlugins:[...J]})}function m9($,Z){let Q=u4(Z);if(Q.size===0)return[...$];return $.filter((W)=>!Q.has(W))}function y1($,Z){let Q=B1(Z);if(Q.size===0)return[...$];return $.filter((W)=>!Q.has(W.name))}function v9($,Z){if(!$||$.length===0)return $;let Q=B1(Z);if(Q.size===0)return $;return $.map((W)=>{if(!W.setup)return W;return{...W,setup:(J,X)=>W.setup?.({...J,registerTool:(Y)=>{if(!Q.has(Y.name))J.registerTool(Y)}},X)}})}var Sj,c4,I9;var $1=r$(()=>{L0();Sj=J8.preprocess(($)=>Array.isArray($)?$.filter((Z)=>typeof Z==="string").map((Z)=>Z.trim()).filter(Boolean):void 0,J8.array(J8.string()).optional()).transform(($)=>{if(!$)return;let Z=[...new Set($)].sort((Q,W)=>Q.localeCompare(W));return Z.length>0?Z:void 0}),c4=J8.object({telemetryOptOut:J8.boolean().default(!1).catch(!1),autoUpdateEnabled:J8.boolean().default(!0).catch(!0),disabledTools:Sj.optional(),disabledPlugins:Sj.optional()}).strip().transform(($)=>{let Z={autoUpdateEnabled:$.autoUpdateEnabled,telemetryOptOut:$.telemetryOptOut};if($.disabledTools?.length)Z.disabledTools=$.disabledTools;if($.disabledPlugins?.length)Z.disabledPlugins=$.disabledPlugins;return Z})});import{existsSync as LT,mkdirSync as _T,readFileSync as zT,writeFileSync as OT}from"node:fs";import{resolve as qT}from"node:path";import{resolveSessionDataDir as MT}from"@cline/shared/storage";import{nanoid as RT}from"nanoid";import*as ET from"node-machine-id";function P0($){let Z=$?.trim();if(Z)return Z;let Q=wT();if(Q)return Q;return PT()}function CT(){let $=ET;return $.machineIdSync??$.default?.machineIdSync}function wT(){try{let $=CT();if(!$)return;return $().trim()||void 0}catch{return}}function PT(){let $=MT(),Z=qT($,NT);try{if(LT(Z)){let W=zT(Z,"utf8").trim();if(W.length>0)return W}}catch{}let Q=`cl-${RT()}`;try{_T($,{recursive:!0}),OT(Z,Q,"utf8")}catch{}return Q}var NT="machine-id";var X8=()=>{};class l4{name;metadata;meter;logger;enabled;distinctId;commonProperties;counters=new Map;histograms=new Map;gauges=new Map;gaugeValues=new Map;meterProvider;loggerProvider;constructor($){this.name=$.name??"OpenTelemetryAdapter",this.metadata={...$.metadata},this.meterProvider=$.meterProvider,this.loggerProvider=$.loggerProvider,this.meter=$.meterProvider?.getMeter("cline")??null,this.logger=$.loggerProvider?.getLogger("cline")??null,this.enabled=$.enabled??!0,this.distinctId=$.distinctId,this.commonProperties=$.commonProperties?{...$.commonProperties}:{}}emit($,Z){if(!this.isEnabled())return;this.emitLog($,Z,!1)}emitRequired($,Z){this.emitLog($,Z,!0)}recordCounter($,Z,Q,W,J=!1){if(!this.meter||!J&&!this.isEnabled())return;let X=this.counters.get($);if(!X)X=this.meter.createCounter($,W?{description:W}:void 0),this.counters.set($,X);X.add(Z,this.flattenProperties(this.buildAttributes(Q)))}recordHistogram($,Z,Q,W,J=!1){if(!this.meter||!J&&!this.isEnabled())return;let X=this.histograms.get($);if(!X)X=this.meter.createHistogram($,W?{description:W}:void 0),this.histograms.set($,X);X.record(Z,this.flattenProperties(this.buildAttributes(Q)))}recordGauge($,Z,Q,W,J=!1){if(!this.meter||!J&&!this.isEnabled())return;let X=this.buildAttributes(Q),Y=JSON.stringify(X),j=this.gaugeValues.get($);if(Z===null){if(j){if(j.delete(Y),j.size===0)this.gaugeValues.delete($),this.gauges.delete($)}return}let V=j;if(!V)V=new Map,this.gaugeValues.set($,V);if(!this.gauges.has($)){let H=this.meter.createObservableGauge($,W?{description:W}:void 0);H.addCallback((B)=>{for(let G of this.snapshotGaugeSeries($))B.observe(G.value,this.flattenProperties(G.attributes))}),this.gauges.set($,H)}V.set(Y,{value:Z,attributes:X})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}setDistinctId($){this.distinctId=$}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}async flush(){await Promise.all([this.meterProvider?.forceFlush?.(),this.loggerProvider?.forceFlush?.()])}async dispose(){await Promise.all([this.meterProvider?.shutdown?.(),this.loggerProvider?.shutdown?.()])}emitLog($,Z,Q){if(!this.logger)return;let W=this.flattenProperties(this.buildAttributes(Z,Q));this.logger.emit({severityText:"INFO",body:$,attributes:W})}buildAttributes($,Z=!1){return{...this.commonProperties,...this.metadata,...$,...this.distinctId?{distinct_id:this.distinctId}:{},...Z?{_required:!0}:{}}}snapshotGaugeSeries($){let Z=this.gaugeValues.get($);if(!Z)return[];return Array.from(Z.values(),(Q)=>({value:Q.value,attributes:Q.attributes?{...Q.attributes}:void 0}))}flattenProperties($,Z="",Q=new WeakSet,W=0){if(!$)return{};let J={},X=100,Y=10;for(let[j,V]of Object.entries($)){if(j==="__proto__"||j==="constructor"||j==="prototype")continue;let H=Z?`${Z}.${j}`:j;if(V===null||V===void 0){J[H]=String(V);continue}if(Array.isArray(V)){let B=V.length>X?V.slice(0,X):V;try{J[H]=JSON.stringify(B)}catch{J[H]="[UnserializableArray]"}if(V.length>X)J[`${H}_truncated`]=!0,J[`${H}_original_length`]=V.length;continue}if(typeof V==="object"){if(V instanceof Date){J[H]=V.toISOString();continue}if(V instanceof Error){J[H]=V.message;continue}if(Q.has(V)){J[H]="[Circular]";continue}if(W>=Y){J[H]="[MaxDepthExceeded]";continue}Q.add(V),Object.assign(J,this.flattenProperties(V,H,Q,W+1));continue}if(ST(V)){J[H]=V;continue}try{J[H]=JSON.stringify(V)}catch{J[H]=String(V)}}return J}}function ST($){return typeof $==="string"||typeof $==="number"||typeof $==="boolean"}class p4{name;logger;enabled;constructor($={}){this.name=$.name??"TelemetryLoggerSink",this.logger=$.logger,this.enabled=$.enabled??!0}emit($,Z){if(!this.isEnabled())return;this.logger?.log("telemetry.event",{telemetrySink:this.name,event:$,properties:Z})}emitRequired($,Z){this.logger?.log("telemetry.required_event",{telemetrySink:this.name,severity:"warn",event:$,properties:Z})}recordCounter($,Z,Q,W,J){if(!J&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"counter",name:$,value:Z,attributes:Q,description:W,required:J===!0})}recordHistogram($,Z,Q,W,J){if(!J&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"histogram",name:$,value:Z,attributes:Q,description:W,required:J===!0})}recordGauge($,Z,Q,W,J){if(!J&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"gauge",name:$,value:Z,attributes:Q,description:W,required:J===!0})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}async flush(){}async dispose(){}}class Y8{adapters;metadata;distinctId;commonProperties;constructor($={}){if(this.adapters=[...$.adapters??[]],$.logger)this.adapters.push(new p4({logger:$.logger}));this.metadata={...$.metadata??{}},this.distinctId=$.distinctId,this.commonProperties={...$.commonProperties??{}}}addAdapter($){this.adapters.push($)}setDistinctId($){this.distinctId=$}setMetadata($){this.metadata={...$}}updateMetadata($){this.metadata={...this.metadata,...$}}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}isEnabled(){return this.adapters.some(($)=>$.isEnabled())}capture($){let Z=this.buildAttributes($.properties);for(let Q of this.adapters)Q.emit($.event,Z)}captureRequired($,Z){let Q=this.buildAttributes(Z);for(let W of this.adapters)W.emitRequired($,Q)}recordCounter($,Z,Q,W,J=!1){let X=this.buildAttributes(Q);for(let Y of this.adapters)Y.recordCounter($,Z,X,W,J)}recordHistogram($,Z,Q,W,J=!1){let X=this.buildAttributes(Q);for(let Y of this.adapters)Y.recordHistogram($,Z,X,W,J)}recordGauge($,Z,Q,W,J=!1){let X=this.buildAttributes(Q);for(let Y of this.adapters)Y.recordGauge($,Z,X,W,J)}async flush(){await Promise.all(this.adapters.map(($)=>$.flush()))}async dispose(){await Promise.all(this.adapters.map(($)=>$.dispose()))}buildAttributes($){return{...this.commonProperties,...$,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{}}}}var AW=()=>{};import{metrics as bT,trace as yT}from"@opentelemetry/api";import{logs as hT}from"@opentelemetry/api-logs";import{OTLPLogExporter as kT}from"@opentelemetry/exporter-logs-otlp-http";import{OTLPMetricExporter as IT}from"@opentelemetry/exporter-metrics-otlp-http";import{OTLPTraceExporter as xT}from"@opentelemetry/exporter-trace-otlp-http";import{resourceFromAttributes as gT}from"@opentelemetry/resources";import{BatchLogRecordProcessor as mT,ConsoleLogRecordExporter as vT,LoggerProvider as cT}from"@opentelemetry/sdk-logs";import{ConsoleMetricExporter as uT,MeterProvider as dT,PeriodicExportingMetricReader as vj}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as lT,ConsoleSpanExporter as pT,SimpleSpanProcessor as rT}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as iT}from"@opentelemetry/sdk-trace-node";import{ATTR_SERVICE_NAME as nT,ATTR_SERVICE_VERSION as aT}from"@opentelemetry/semantic-conventions";class cj{distinctId;metadata;commonProperties;constructor($={}){this.distinctId=$.distinctId,this.metadata={...$.metadata??{}},this.commonProperties={...$.commonProperties??{}}}setDistinctId($){this.distinctId=$}setMetadata($){this.metadata={...$}}updateMetadata($){this.metadata={...this.metadata,...$}}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}isEnabled(){return!1}capture($){this.resolveProperties($.properties)}captureRequired($,Z){this.resolveProperties(Z)}recordCounter(){}recordHistogram(){}recordGauge(){}async flush(){}async dispose(){}resolveProperties($){return{...this.commonProperties,...$,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{}}}}class j8{meterProvider;loggerProvider;tracerProvider;options;constructor($={}){this.options=$;let Z=gT({[nT]:$.serviceName??"cline",...$.serviceVersion?{[aT]:$.serviceVersion}:{}});if(this.meterProvider=this.createMeterProvider(Z),this.loggerProvider=this.createLoggerProvider(Z),this.tracerProvider=this.createTracerProvider(Z),this.meterProvider)bT.setGlobalMeterProvider(this.meterProvider);if(this.loggerProvider)hT.setGlobalLoggerProvider(this.loggerProvider);if(this.tracerProvider)this.tracerProvider.register()}getTracer($="cline",Z){return yT.getTracer($,Z??this.options.serviceVersion)}createAdapter($){return new l4({...$,meterProvider:this.meterProvider,loggerProvider:this.loggerProvider})}createTelemetryService($){let Z=this.createAdapter({name:$.name,enabled:this.options.enabled,metadata:$.metadata});return new Y8({...$,adapters:[Z],distinctId:P0($.distinctId)})}async forceFlush(){await Promise.all([this.meterProvider?.forceFlush?.(),this.loggerProvider?.forceFlush?.(),this.tracerProvider?.forceFlush?.()])}async dispose(){await Promise.all([this.meterProvider?.shutdown?.(),this.loggerProvider?.shutdown?.(),this.tracerProvider?.shutdown?.()])}createMeterProvider($){let Z=fW(this.options.metricsExporter);if(Z.length===0)return null;let Q=Math.max(1000,this.options.metricExportIntervalMs??this.options.metricExportInterval??60000),W=Math.min(30000,Math.floor(Q*0.8)),J=Z.map((X)=>tT(X,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json",interval:Q,timeout:W})).filter((X)=>X!==null);if(J.length===0)return null;return new dT({resource:$,readers:J})}createTracerProvider($){let Z=fW(this.options.tracesExporter);if(Z.length===0)return null;let Q=this.options.otlpTracesEndpoint??this.options.otlpEndpoint,W=this.options.otlpTracesHeaders??this.options.otlpHeaders,J=[];for(let X of Z){let Y=oT(X,{endpoint:Q,headers:W,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(Y)J.push(Y)}if(J.length===0)return null;return new iT({resource:$,spanProcessors:J})}createLoggerProvider($){let Z=fW(this.options.logsExporter);if(Z.length===0)return null;let Q=Z.map((W)=>{let J=sT(W,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(!J)return null;return new mT(J,{maxQueueSize:this.options.logMaxQueueSize??2048,maxExportBatchSize:this.options.logBatchSize??512,scheduledDelayMillis:this.options.logBatchTimeoutMs??this.options.logBatchTimeout??5000})}).filter((W)=>W!==null);if(Q.length===0)return null;return new cT({resource:$,processors:Q})}}function r4($){let Z=new j8($),Q=Z.createTelemetryService($);return Q.captureRequired("telemetry.provider_created",{provider:"opentelemetry",enabled:$.enabled??!0,logsExporter:Array.isArray($.logsExporter)?$.logsExporter.join(","):$.logsExporter,metricsExporter:Array.isArray($.metricsExporter)?$.metricsExporter.join(","):$.metricsExporter,tracesExporter:Array.isArray($.tracesExporter)?$.tracesExporter.join(","):$.tracesExporter,otlpProtocol:$.otlpProtocol,hasOtlpEndpoint:Boolean($.otlpEndpoint),serviceName:$.serviceName,serviceVersion:$.serviceVersion}),{provider:Z,telemetry:Q}}function h1($){if(x9())return{telemetry:new cj($)};if($.enabled!==!0)return{telemetry:new Y8({...$,distinctId:P0($.distinctId)})};return r4($)}function V8($){let{telemetry:Z,provider:Q}=h1($);return{telemetry:Z,provider:Q,flush:async()=>{let X=Q;if(X&&typeof X.forceFlush==="function")try{await X.forceFlush()}catch{}},dispose:async()=>{await Promise.allSettled([Z.dispose(),Q?.dispose()])}}}function fW($){if(!$)return[];return(Array.isArray($)?$:$.split(",")).map((Q)=>Q.trim()).filter((Q)=>Q==="console"||Q==="otlp")}function sT($,Z){if($==="console")return new vT;if(!Z.endpoint)return null;let Q=UW(Z.endpoint,"/v1/logs");return new kT({url:Q,headers:Z.headers})}function oT($,Z){if($==="console")return new rT(new pT);if(!Z.endpoint)return null;let Q=UW(Z.endpoint,"/v1/traces");return new lT(new xT({url:Q,headers:Z.headers}))}function tT($,Z){if($==="console")return new vj({exporter:new uT,exportIntervalMillis:Z.interval,exportTimeoutMillis:Z.timeout});if(!Z.endpoint)return null;let Q=UW(Z.endpoint,"/v1/metrics");return new vj({exporter:new IT({url:Q,headers:Z.headers}),exportIntervalMillis:Z.interval,exportTimeoutMillis:Z.timeout})}function UW($,Z){let Q=new URL($),W=Q.pathname.endsWith("/")?Q.pathname.slice(0,-1):Q.pathname;return Q.pathname=W.endsWith(Z)?W:`${W}${Z}`,Q.toString()}var c9=r$(()=>{$1();X8();AW()});var UB={};N(UB,{normalizeUserMessage:()=>Iq,buildInitialUserContent:()=>kq});async function kq($,Z,Q,W){let J=xq(Z),X=await mq(Q,W);if(J.length===0&&!X)return $;let Y=[{type:"text",text:$},...J];if(X)Y.push(...X);return Y}function Iq($){if($==null)return"";if(typeof $==="string")return $;let Z=$.content;if(typeof Z==="string")return Z;if(!Array.isArray(Z))return"";let Q=[];for(let W of Z)if(W&&typeof W==="object"&&W.type==="text"){let J=W.text;if(typeof J==="string")Q.push(J)}return Q.join(`
|
|
3
|
-
`)}function
|
|
4
|
-
`),J}finally{RQ.delete($.lockDir),ZC($)}}function j1($,Z,Q={}){let W=QC($,Q);return mK(W,$,Z)}async function e8($,Z,Q={}){let W=await WC($,Q);return mK(W,$,Z)}function JC($){let Z=jC($);if(!Z.mcpServers||typeof Z.mcpServers!=="object"||Array.isArray(Z.mcpServers))Z.mcpServers={};return Z}function XC($,Z){let Q=JSON.stringify($),W=JSON.parse(Q),J=Z(W),X=JSON.stringify(W),Y=Z($);if(JSON.stringify($)!==X)throw new h$("MCP settings mutator must be deterministic and free of side effects; repeated calls produced different settings.");if(JSON.stringify(Y)!==JSON.stringify(J))throw new h$("MCP settings mutator must be deterministic and free of side effects; repeated calls produced different return values.");return Y}function YC($){let Z=CK($,"utf8"),Q;try{Q=JSON.parse(Z)}catch(W){let J=W instanceof Error?W.message:String(W);throw Error(`Failed to parse MCP settings JSON at "${$}": ${J}`)}if(!Q||typeof Q!=="object"||Array.isArray(Q))throw Error(`Invalid MCP settings at "${$}": expected object.`);return Q}function jC($){try{return YC($)}catch(Z){if(Z.code==="ENOENT")return{};throw Z}}function vK($,Z){if(!Object.hasOwn($,Z))return;let Q=$[Z];if(!Q||typeof Q!=="object"||Array.isArray(Q))return;return Q}function VC($,Z,Q){Object.defineProperty($,Z,{value:Q,enumerable:!0,configurable:!0,writable:!0})}function N2($={}){let Z=$.filePath??Z0(),Q=CK(Z,"utf8"),W;try{W=JSON.parse(Q)}catch(X){let Y=X instanceof Error?X.message:String(X);throw Error(`Failed to parse MCP settings JSON at "${Z}": ${Y}`)}let J=sN.safeParse(W);if(!J.success){let X=J.error.issues.map((Y)=>{let j=Y.path.join(".");return j?`${j}: ${Y.message}`:Y.message}).join("; ");throw Error(`Invalid MCP settings at "${Z}": ${X}`)}return J.data}function $4($){if(!$)return;let Z={...$.clientInformation?{clientInformation:$.clientInformation}:{},...$.tokens?{tokens:$.tokens}:{},...$.codeVerifier?{codeVerifier:$.codeVerifier}:{},...$.discoveryState?{discoveryState:$.discoveryState}:{},...$.redirectUrl?{redirectUrl:$.redirectUrl}:{},...$.lastError?{lastError:$.lastError}:{},...$.lastAuthenticatedAt?{lastAuthenticatedAt:$.lastAuthenticatedAt}:{}};return Object.keys(Z).length>0?Z:void 0}function HC($){if($===void 0)return;let Z=NJ.safeParse($);if(!Z.success)return;return $4(Z.data)}function s1($={}){let Z=$.filePath??Z0();return NK(Z)}function p0($={}){let Z=N2($);return Object.entries(Z.mcpServers).map(([Q,W])=>({name:Q,transport:W.transport,disabled:W.disabled,metadata:W.metadata,oauth:W.oauth}))}function C2($){let Z=$.filePath??Z0(),Q=$.name.trim();if(!Q)throw Error("MCP server settings toggle requires a server name.");j1(Z,(W)=>{let J=W.mcpServers;if(!J||typeof J!=="object"||Array.isArray(J))throw Error(`Invalid MCP settings at "${Z}": mcpServers must be an object.`);let X={...J},Y=vK(X,Q);if(!Y)throw Error(`Unknown MCP server: ${Q}`);let j={...Y};if($.disabled)j.disabled=!0;else delete j.disabled;VC(X,Q,j),W.mcpServers=X})}function w2($,Z={}){let Q=N2(Z);if(!Object.hasOwn(Q.mcpServers,$))return;return $4(Q.mcpServers[$]?.oauth)}function cK($,Z){return(Q)=>{let W=Q.mcpServers,J=vK(W,$);if(!J)throw Error(`Unknown MCP server: ${$}`);let X=HC(J.oauth)??{},Y=$4(Z(X));if(Y)J.oauth=Y;else delete J.oauth;return Y??{}}}function P2($,Z,Q={}){let W=Q.filePath??Z0();return j1(W,cK($,Z))}async function z5($,Z,Q={}){let W=Q.filePath??Z0();return e8(W,cK($,Z))}function O5($={}){return p0($).map((Q)=>{let W=Q.transport.type!=="stdio",J=Q.oauth?.tokens?.access_token;return{serverName:Q.name,oauthSupported:W,oauthConfigured:W&&typeof J==="string"&&J.trim().length>0,lastError:Q.oauth?.lastError,lastAuthenticatedAt:Q.oauth?.lastAuthenticatedAt}}).sort((Q,W)=>Q.serverName.localeCompare(W.serverName))}async function S2($,Z={}){let Q=p0(Z);for(let W of Q)await $.registerServer(W);return Q}var _5,bK,NJ,cN,uN,dN,lN,pN,rN,yK,iN,nN,aN,sN,t8,k$,h$,CJ=1e4,hK=25,tN,RQ;var EQ=r$(()=>{_5=S.record(S.string(),S.string()),bK=S.record(S.string(),S.unknown()),NJ=S.object({clientInformation:S.record(S.string(),S.unknown()).optional(),tokens:S.record(S.string(),S.unknown()).optional(),codeVerifier:S.string().optional(),discoveryState:S.record(S.string(),S.unknown()).optional(),redirectUrl:S.string().url().optional(),lastError:S.string().optional(),lastAuthenticatedAt:S.number().int().positive().optional()}).strip(),cN=S.object({type:S.literal("stdio"),command:S.string().min(1),args:S.array(S.string()).optional(),cwd:S.string().min(1).optional(),env:_5.optional()}),uN=S.object({type:S.literal("sse"),url:S.string().url(),headers:_5.optional()}),dN=S.object({type:S.literal("streamableHttp"),url:S.string().url(),headers:_5.optional()}),lN=S.discriminatedUnion("type",[cN,uN,dN]),pN=S.object({transport:lN,disabled:S.boolean().optional(),metadata:bK.optional(),oauth:NJ.optional()}),rN=S.enum(["stdio","sse","http","streamableHttp"]).optional(),yK=S.object({type:S.enum(["stdio","sse","streamableHttp"]).optional(),transportType:rN,disabled:S.boolean().optional(),metadata:bK.optional(),oauth:NJ.optional()});iN=yK.extend({command:S.string().min(1),args:S.array(S.string()).optional(),cwd:S.string().min(1).optional(),env:_5.optional()}).superRefine(($,Z)=>{let Q=$.type??RJ($.transportType);if(Q&&Q!=="stdio")Z.addIssue({code:S.ZodIssueCode.custom,message:'Expected type "stdio" for command-based MCP server',path:["type"]})}).transform(($)=>({transport:{type:"stdio",command:$.command,args:$.args,cwd:$.cwd,env:$.env},disabled:$.disabled,metadata:$.metadata,oauth:$.oauth})),nN=yK.extend({url:S.string().url(),headers:_5.optional()}).superRefine(($,Z)=>{let Q=$.type??RJ($.transportType)??"sse";if(Q!=="sse"&&Q!=="streamableHttp")Z.addIssue({code:S.ZodIssueCode.custom,message:'Expected type "sse" or "streamableHttp" for URL-based MCP server',path:["type"]})}).transform(($)=>{if(($.type??RJ($.transportType)??"sse")==="streamableHttp")return{transport:{type:"streamableHttp",url:$.url,headers:$.headers},disabled:$.disabled,metadata:$.metadata,oauth:$.oauth};return{transport:{type:"sse",url:$.url,headers:$.headers},disabled:$.disabled,metadata:$.metadata,oauth:$.oauth}}),aN=S.union([pN,iN,nN]),sN=S.object({mcpServers:S.record(S.string(),aN)}).passthrough();t8=class t8 extends Error{constructor($){super($);this.name="McpSettingsUpdateSkippedError"}};k$=class k$ extends Error{constructor($){super($);this.name="McpSettingsLockTimeoutError"}};h$=class h$ extends Error{constructor($){super($);this.name="McpSettingsMutatorPurityError"}};tN=new Int32Array(new SharedArrayBuffer(4)),RQ=new Set});var yA={};N(yA,{resolveCoreDistinctId:()=>P0,createOpenTelemetryTelemetryService:()=>r4,createConfiguredTelemetryService:()=>h1,createConfiguredTelemetryHandle:()=>V8,OpenTelemetryProvider:()=>j8,OpenTelemetryAdapter:()=>l4});var oQ=r$(()=>{X8();c9()});var VU={};N(VU,{writeHubDiscovery:()=>l9,withHubStartupLock:()=>p9,verifyHubConnection:()=>F1,truncateNotificationBody:()=>W9,toHubStatusUrl:()=>_W,toHubHealthUrl:()=>r9,stopLocalHubServerGracefully:()=>bW,startHubWebSocketServer:()=>Y9,startHubServer:()=>YU,spawnDetachedHubServerWithRetry:()=>B8,spawnDetachedHubServer:()=>EW,sendHubCommand:()=>DV,restartLocalHubIfIdleAfterStartupTimeout:()=>o9,resolveWorkspaceHubOwnerContext:()=>$V,resolveSharedHubOwnerContext:()=>Q1,resolveProductionHubOwnerContext:()=>K1,resolveHubUrl:()=>yW,resolveHubOwnerContext:()=>x1,resolveHubEndpointOptions:()=>G1,resolveHubBuildId:()=>d9,resolveDefaultHubPort:()=>H8,resolveDefaultHubPathname:()=>RW,resolveDefaultHubHost:()=>MW,resolveCompatibleLocalHubUrl:()=>o4,resolveClineDir:()=>sj,resolveClineDataDir:()=>o$,requestHubShutdown:()=>s4,rememberRecoverableLocalHubUrl:()=>B$,readHubDiscovery:()=>K0,readBearerToken:()=>u7,probeHubServer:()=>g1,probeHubConnection:()=>UV,prewarmDetachedHubServer:()=>n9,normalizeHubWebSocketUrl:()=>G$,isLocalHubOrigin:()=>MY,isLocalHubHostName:()=>d7,isHubReconnectableTransportError:()=>PW,isHubCommandTimeoutError:()=>s9,isDiscoveryFilePresent:()=>tj,ensureHubWebSocketServer:()=>l7,ensureHubServer:()=>jU,ensureDetachedHubServer:()=>YV,ensureCompatibleLocalHubUrl:()=>$2,createLocalHubScheduleRuntimeHandlers:()=>XU,createInMemoryHubOwnerContext:()=>oj,createHubServerUrl:()=>Z1,createHubAuthToken:()=>u9,createConfiguredTelemetryService:()=>h1,createConfiguredTelemetryHandle:()=>V8,connectToHub:()=>t9,clearHubDiscovery:()=>S0,NodeHubClient:()=>W1,NativeHubTransportAdapter:()=>X9,HubUIClient:()=>IW,HubTransportError:()=>R0,HubSessionClient:()=>kW,HubServerTransport:()=>C4,HubScheduleService:()=>Z8,HubScheduleCommandService:()=>o2,HubCommandError:()=>G8,DEFAULT_HUB_PORT:()=>OW,DEFAULT_HUB_PATHNAME:()=>qW,DEFAULT_HUB_HOST:()=>zW,BrowserWebSocketHubAdapter:()=>J9});import{createSessionId as OD}from"@cline/shared";function g0($,Z){return{version:$.version,requestId:$.requestId,ok:!0,payload:Z}}function Yj($,Z,Q){return{version:$.version,requestId:$.requestId??OD("hubreq_"),ok:!1,error:{code:Z,message:Q}}}class o2{schedules;constructor($){this.schedules=$}async handleCommand($){try{switch($.command){case"schedule.create":return g0($,{schedule:this.schedules.createSchedule(this.toCreateInput($.payload??{}))});case"schedule.list":return g0($,{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 g0($,{schedule:this.schedules.getSchedule(String($.payload?.scheduleId??""))});case"schedule.update":return g0($,{schedule:this.schedules.updateSchedule(String($.payload?.scheduleId??""),this.toUpdateInput($.payload??{}))});case"schedule.delete":return g0($,{deleted:this.schedules.deleteSchedule(String($.payload?.scheduleId??""))});case"schedule.enable":return g0($,{schedule:this.schedules.resumeSchedule(String($.payload?.scheduleId??""))});case"schedule.disable":return g0($,{schedule:this.schedules.pauseSchedule(String($.payload?.scheduleId??""))});case"schedule.trigger":return g0($,{execution:$.payload?.wait===!1?this.schedules.triggerScheduleNowDetached(String($.payload?.scheduleId??"")):await this.schedules.triggerScheduleNow(String($.payload?.scheduleId??""))});case"schedule.list_executions":return g0($,{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 g0($,{stats:this.schedules.getScheduleStats(String($.payload?.scheduleId??""))});case"schedule.active":return g0($,{executions:this.schedules.getActiveExecutions()});case"schedule.upcoming":return g0($,{runs:this.schedules.getUpcomingRuns(typeof $.payload?.limit==="number"?$.payload.limit:void 0)});default:return Yj($,"unsupported_command",`Unsupported hub schedule command: ${$.command}`)}}catch(Z){return Yj($,"schedule_command_failed",Z instanceof Error?Z.message:String(Z))}}toCreateInput($){let Z=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider&&$.model?{providerId:String($.provider),modelId:String($.model)}:void 0;return{...$,modelSelection:Z}}toUpdateInput($){let Z=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider||$.model?{providerId:typeof $.provider==="string"?$.provider:"",modelId:typeof $.model==="string"?$.model:""}:void 0;return{...$,modelSelection:Z}}}class P4{store;nowFn;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now())}materializeAll(){let $={oneOffQueued:0,scheduleQueued:0},Z=this.store.listSpecs({triggerKind:"one_off",enabled:!0,parseStatus:"valid"});for(let W of Z)if(this.materializeOneOff(W))$.oneOffQueued+=1;let Q=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let W of Q)try{if(this.materializeSchedule(W))$.scheduleQueued+=1}catch{}return $}materializeOneOff($){if($.triggerKind!=="one_off")return!1;if(!$.enabled||$.removed)return!1;if(this.store.hasOneOffRunForRevision($.specId,$.revision))return!1;return this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"one_off",scheduledFor:new Date(this.nowFn()).toISOString()}),!0}materializeSchedule($){if($.triggerKind!=="schedule")return!1;if(!$.enabled||$.removed)return!1;if(!$.scheduleExpr)return!1;return this.store.materializeDueScheduleRun({specId:$.specId,nowMs:this.nowFn()}).queued}}import{basename as bD}from"node:path";import{buildClineSystemPrompt as yD}from"@cline/shared";import{nowIso as Kj}from"@cline/shared/db";var U0={READ_FILES:"read_files",SEARCH_CODEBASE:"search_codebase",RUN_COMMANDS:"run_commands",FETCH_WEB_CONTENT:"fetch_web_content",APPLY_PATCH:"apply_patch",EDITOR:"editor",SKILLS:"skills",ASK:"ask_question",SUBMIT_AND_EXIT:"submit_and_exit"},X$=[U0.READ_FILES,U0.SEARCH_CODEBASE,U0.RUN_COMMANDS,U0.FETCH_WEB_CONTENT,U0.APPLY_PATCH,U0.EDITOR,U0.SKILLS,U0.ASK,U0.SUBMIT_AND_EXIT];var Vj={};N(Vj,{mergeRulesForSystemPrompt:()=>e2,loadRulesForSystemPromptFromWatcher:()=>ZW,listEnabledRulesFromWatcher:()=>jj,isRuleEnabled:()=>A9,formatRulesForSystemPrompt:()=>t2});function A9($){return $.disabled!==!0}function t2($){if($.length===0)return"";return`
|
|
1
|
+
import{createRequire as OD}from"node:module";var{defineProperty:ZW,getOwnPropertyNames:_D}=Object;var Wj=Object.prototype.hasOwnProperty;function Jj($){return this[$]}var R=($,Z,Q)=>{var W=_D(Z);for(let J of W)if(!Wj.call($,J)&&J!=="default")ZW($,J,{get:Jj.bind(Z,J),enumerable:!0});if(Q){for(let J of W)if(!Wj.call(Q,J)&&J!=="default")ZW(Q,J,{get:Jj.bind(Z,J),enumerable:!0});return Q}};var zD=($)=>$;function TD($,Z){this[$]=zD.bind(null,Z)}var N=($,Z)=>{for(var Q in Z)ZW($,Q,{get:Z[Q],enumerable:!0,configurable:!0,set:TD.bind(Z,Q)})};var p$=($,Z)=>()=>($&&(Z=$($=0)),Z);var Xj=OD(import.meta.url);import{AGENT_UNEXPECTED_REASONING_TOKENS_EVENT as XL,captureAgentUnexpectedReasoningTokens as Rj,SDK_ERROR_TELEMETRY_EVENT as YL}from"@cline/shared";function i($,Z,Q){$?.capture({event:Z,properties:Q})}function L9($){if(!$)return;return $.substring(0,jL)}function VL($){if(typeof $==="string")return"Error";return $.name?.trim()||$.constructor?.name||"Error"}function HL($){return typeof $==="string"?$:$.message}function Mj($,Z){return $.some((Q)=>Z.has(Q.trim().toLowerCase()))}function Ej($){i($,m.CLIENT.EXTENSION_ACTIVATED)}function _9($,Z){let Q=[...Z.vcs_types],W={root_count:Z.root_count,vcs_types:Q,is_multi_root:Z.root_count>1,has_git:Mj(Q,new Set(["git"])),has_mercurial:Mj(Q,new Set(["mercurial","hg"]))};if(Z.init_duration_ms!==void 0)W.init_duration_ms=Z.init_duration_ms;if(Z.feature_flag_enabled!==void 0)W.feature_flag_enabled=Z.feature_flag_enabled;if(Z.is_remote_workspace!==void 0)W.is_remote_workspace=Z.is_remote_workspace;i($,m.WORKSPACE.INITIALIZED,W)}function z9($,Z,Q){i($,m.WORKSPACE.INIT_ERROR,{error_type:VL(Z),error_message:L9(HL(Z)),fallback_to_single_root:Q.fallback_to_single_root,workspace_count:Q.workspace_count??0})}function Nj($,Z){i($,m.WORKSPACE.PATH_RESOLVED,{...Z})}function w1($,Z){i($,m.USER.AUTH_STARTED,{provider:Z})}function C1($,Z){i($,m.USER.AUTH_SUCCEEDED,{provider:Z})}function P1($,Z,Q){i($,m.USER.AUTH_FAILED,{provider:Z,errorMessage:L9(Q)})}function V$($,Z,Q){i($,m.USER.AUTH_LOGGED_OUT,{provider:Z,reason:Q})}function wj($,Z){i($,m.USER.PROVIDER_CONFIGURED,{provider:Z})}function Cj($,Z){$?.captureRequired(m.USER.TELEMETRY_OPT_OUT,Z)}function S1($,Z){let Q=Z.id?.trim();if(Q)$?.setDistinctId(Q);$?.updateCommonProperties({account_id:Z.id,account_email:Z.email,provider:Z.provider,organization_id:Z.organizationId,organization_name:Z.organizationName,member_id:Z.memberId})}function T9($,Z){i($,m.TASK.CREATED,Z)}function O9($,Z){i($,m.TASK.RESTARTED,Z)}function x4($,Z){i($,m.TASK.COMPLETED,Z)}function Z8($,Z){i($,m.TASK.CONVERSATION_TURN,{...Z,timestamp:new Date().toISOString()})}function q9($,Z){i($,m.TASK.TOKEN_USAGE,Z)}function M9($,Z,Q){i($,m.TASK.MODE_SWITCH,{ulid:Z,mode:Q})}function Q8($,Z){i($,m.TASK.TOOL_USED,Z)}function R9($,Z){i($,m.TASK.SKILL_USED,Z)}function E9($,Z){i($,m.TASK.DIFF_EDIT_FAILED,Z)}function g4($,Z){i($,m.TASK.PROVIDER_API_ERROR,{...Z,errorMessage:L9(Z.errorMessage)??"unknown",timestamp:new Date().toISOString()})}function Pj($,Z){i($,m.SDK.TOOL_TIMEOUT,BL(Z))}function BL($){let Z={};for(let[Q,W]of Object.entries($))if(W!==void 0)Z[Q]=W;return Z}function N9($,Z,Q){i($,m.TASK.MENTION_USED,{mentionType:Z,contentLength:Q,timestamp:new Date().toISOString()})}function w9($,Z,Q,W){i($,m.TASK.MENTION_FAILED,{mentionType:Z,errorType:Q,errorMessage:L9(W),timestamp:new Date().toISOString()})}function C9($,Z,Q,W,J){i($,m.TASK.MENTION_SEARCH_RESULTS,{queryLength:Z.length,resultCount:Q,searchType:W,isEmpty:J,timestamp:new Date().toISOString()})}function H$($,Z){i($,m.TASK.AGENT_CREATED,{...Z,timestamp:new Date().toISOString()})}function P9($,Z){i($,m.TASK.AGENT_TEAM_CREATED,{...Z,timestamp:new Date().toISOString()})}function m4($,Z){i($,Z.event==="ended"?m.TASK.SUBAGENT_COMPLETED:m.TASK.SUBAGENT_STARTED,{...Z,timestamp:new Date().toISOString()})}function S9($,Z,Q,W){i($,m.HOOKS.DISCOVERY_COMPLETED,{hookName:Z,globalCount:Q,workspaceCount:W,totalCount:Q+W,timestamp:new Date().toISOString()})}function b9($,Z){i($,m.TASK.COMPACTION_EXECUTED,{...Z,timestamp:new Date().toISOString()})}function y9($,Z){i($,m.TASK.COMPACTION_SKIPPED,{...Z,timestamp:new Date().toISOString()})}var jL=500,m;var _0=p$(()=>{m={CLIENT:{EXTENSION_ACTIVATED:"user.extension_activated"},SESSION:{STARTED:"session.started",ENDED:"session.ended"},AGENT:{UNEXPECTED_REASONING_TOKENS:XL},USER:{AUTH_STARTED:"user.auth_started",AUTH_SUCCEEDED:"user.auth_succeeded",AUTH_FAILED:"user.auth_failed",AUTH_LOGGED_OUT:"user.auth_logged_out",PROVIDER_CONFIGURED:"user.provider_configured",TELEMETRY_OPT_OUT:"user.opt_out"},TASK:{CREATED:"task.created",RESTARTED:"task.restarted",COMPLETED:"task.completed",CONVERSATION_TURN:"task.conversation_turn",TOKEN_USAGE:"task.tokens",MODE_SWITCH:"task.mode",TOOL_USED:"task.tool_used",SKILL_USED:"task.skill_used",DIFF_EDIT_FAILED:"task.diff_edit_failed",PROVIDER_API_ERROR:"task.provider_api_error",MENTION_USED:"task.mention_used",MENTION_FAILED:"task.mention_failed",MENTION_SEARCH_RESULTS:"task.mention_search_results",AGENT_CREATED:"task.agent_created",AGENT_TEAM_CREATED:"task.agent_team_created",SUBAGENT_STARTED:"task.subagent_started",SUBAGENT_COMPLETED:"task.subagent_completed",COMPACTION_EXECUTED:"task.compaction_executed",COMPACTION_SKIPPED:"task.compaction_skipped"},HOOKS:{DISCOVERY_COMPLETED:"hooks.discovery_completed"},WORKSPACE:{INITIALIZED:"workspace.initialized",INIT_ERROR:"workspace.init_error",PATH_RESOLVED:"workspace.path_resolved"},SDK:{ERROR:YL,TOOL_TIMEOUT:"sdk.tool_timeout"},FEATURE_FLAGS:{FLAG_CALLED:"$feature_flag_called"}}});import{mkdirSync as GL,readFileSync as KL,statSync as FL,writeFileSync as AL}from"node:fs";import{dirname as fL}from"node:path";import{resolveGlobalSettingsPath as bj}from"@cline/shared/storage";import{z as W8}from"zod";function h9(){return v4.parse({})}function UL(){k9=void 0}function DL($){if($.disabledTools)Object.freeze($.disabledTools);if($.disabledPlugins)Object.freeze($.disabledPlugins);return Object.freeze($)}function LL($){let Z;try{Z=KL($,"utf8")}catch{return h9()}try{let Q=v4.safeParse(JSON.parse(Z));return Q.success?Q.data:h9()}catch{return h9()}}function _L(){let $=bj(),Z=FL($,{throwIfNoEntry:!1}),Q=Z?.mtimeMs??0,W=Z?.size??0,J=k9;if(J&&J.path===$&&J.mtimeMs===Q&&J.size===W)return J;let X=DL(Z?LL($):h9());return k9={path:$,mtimeMs:Q,size:W,value:X},k9}function M0(){return _L().value}function b1($,Z={}){let Q=bj(),W=M0();GL(fL(Q),{recursive:!0});let J=v4.parse($);if(!W.telemetryOptOut&&J.telemetryOptOut)Cj(Z.telemetry);AL(Q,`${JSON.stringify(J,null,2)}
|
|
2
|
+
`,"utf8"),UL()}function I9(){return M0().telemetryOptOut}function yj($,Z={}){b1({...M0(),telemetryOptOut:$},Z)}function hj(){return M0().autoUpdateEnabled}function kj($,Z={}){b1({...M0(),autoUpdateEnabled:$},Z)}function B1($){return new Set($??M0().disabledTools??[])}function c4($){return new Set($??M0().disabledPlugins??[])}function Ij($){return B1().has($)}function x9($){let Z=M0(),Q=new Set(Z.disabledTools??[]),W=Q.has($);if(W)Q.delete($);else Q.add($);return b1({...Z,disabledTools:[...Q]}),!W}function AW($,Z){let Q=[...new Set($.map((X)=>X.trim()).filter(Boolean))];if(Q.length===0)return;let W=M0(),J=B1(W.disabledTools);for(let X of Q)if(Z)J.add(X);else J.delete(X);b1({...W,disabledTools:[...J]})}function xj($,Z){return AW([$],Z),Z}function gj($){return c4().has($)}function mj($,Z){let Q=$.trim();if(!Q)return;let W=M0(),J=c4(W.disabledPlugins);if(Z)J.add(Q);else J.delete(Q);b1({...W,disabledPlugins:[...J]})}function g9($,Z){let Q=c4(Z);if(Q.size===0)return[...$];return $.filter((W)=>!Q.has(W))}function y1($,Z){let Q=B1(Z);if(Q.size===0)return[...$];return $.filter((W)=>!Q.has(W.name))}function m9($,Z){if(!$||$.length===0)return $;let Q=B1(Z);if(Q.size===0)return $;return $.map((W)=>{if(!W.setup)return W;return{...W,setup:(J,X)=>W.setup?.({...J,registerTool:(Y)=>{if(!Q.has(Y.name))J.registerTool(Y)}},X)}})}var Sj,v4,k9;var $1=p$(()=>{_0();Sj=W8.preprocess(($)=>Array.isArray($)?$.filter((Z)=>typeof Z==="string").map((Z)=>Z.trim()).filter(Boolean):void 0,W8.array(W8.string()).optional()).transform(($)=>{if(!$)return;let Z=[...new Set($)].sort((Q,W)=>Q.localeCompare(W));return Z.length>0?Z:void 0}),v4=W8.object({telemetryOptOut:W8.boolean().default(!1).catch(!1),autoUpdateEnabled:W8.boolean().default(!0).catch(!0),disabledTools:Sj.optional(),disabledPlugins:Sj.optional()}).strip().transform(($)=>{let Z={autoUpdateEnabled:$.autoUpdateEnabled,telemetryOptOut:$.telemetryOptOut};if($.disabledTools?.length)Z.disabledTools=$.disabledTools;if($.disabledPlugins?.length)Z.disabledPlugins=$.disabledPlugins;return Z})});import{existsSync as zL,mkdirSync as TL,readFileSync as OL,writeFileSync as qL}from"node:fs";import{resolve as ML}from"node:path";import{resolveSessionDataDir as RL}from"@cline/shared/storage";import{nanoid as EL}from"nanoid";import*as NL from"node-machine-id";function P0($){let Z=$?.trim();if(Z)return Z;let Q=PL();if(Q)return Q;return SL()}function CL(){let $=NL;return $.machineIdSync??$.default?.machineIdSync}function PL(){try{let $=CL();if(!$)return;return $().trim()||void 0}catch{return}}function SL(){let $=RL(),Z=ML($,wL);try{if(zL(Z)){let W=OL(Z,"utf8").trim();if(W.length>0)return W}}catch{}let Q=`cl-${EL()}`;try{TL($,{recursive:!0}),qL(Z,Q,"utf8")}catch{}return Q}var wL="machine-id";var J8=()=>{};class d4{name;metadata;meter;logger;enabled;distinctId;commonProperties;counters=new Map;histograms=new Map;gauges=new Map;gaugeValues=new Map;meterProvider;loggerProvider;constructor($){this.name=$.name??"OpenTelemetryAdapter",this.metadata={...$.metadata},this.meterProvider=$.meterProvider,this.loggerProvider=$.loggerProvider,this.meter=$.meterProvider?.getMeter("cline")??null,this.logger=$.loggerProvider?.getLogger("cline")??null,this.enabled=$.enabled??!0,this.distinctId=$.distinctId,this.commonProperties=$.commonProperties?{...$.commonProperties}:{}}emit($,Z){if(!this.isEnabled())return;this.emitLog($,Z,!1)}emitRequired($,Z){this.emitLog($,Z,!0)}recordCounter($,Z,Q,W,J=!1){if(!this.meter||!J&&!this.isEnabled())return;let X=this.counters.get($);if(!X)X=this.meter.createCounter($,W?{description:W}:void 0),this.counters.set($,X);X.add(Z,this.flattenProperties(this.buildAttributes(Q)))}recordHistogram($,Z,Q,W,J=!1){if(!this.meter||!J&&!this.isEnabled())return;let X=this.histograms.get($);if(!X)X=this.meter.createHistogram($,W?{description:W}:void 0),this.histograms.set($,X);X.record(Z,this.flattenProperties(this.buildAttributes(Q)))}recordGauge($,Z,Q,W,J=!1){if(!this.meter||!J&&!this.isEnabled())return;let X=this.buildAttributes(Q),Y=JSON.stringify(X),j=this.gaugeValues.get($);if(Z===null){if(j){if(j.delete(Y),j.size===0)this.gaugeValues.delete($),this.gauges.delete($)}return}let V=j;if(!V)V=new Map,this.gaugeValues.set($,V);if(!this.gauges.has($)){let H=this.meter.createObservableGauge($,W?{description:W}:void 0);H.addCallback((B)=>{for(let G of this.snapshotGaugeSeries($))B.observe(G.value,this.flattenProperties(G.attributes))}),this.gauges.set($,H)}V.set(Y,{value:Z,attributes:X})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}setDistinctId($){this.distinctId=$}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}async flush(){await Promise.all([this.meterProvider?.forceFlush?.(),this.loggerProvider?.forceFlush?.()])}async dispose(){await Promise.all([this.meterProvider?.shutdown?.(),this.loggerProvider?.shutdown?.()])}emitLog($,Z,Q){if(!this.logger)return;let W=this.flattenProperties(this.buildAttributes(Z,Q));this.logger.emit({severityText:"INFO",body:$,attributes:W})}buildAttributes($,Z=!1){return{...this.commonProperties,...this.metadata,...$,...this.distinctId?{distinct_id:this.distinctId}:{},...Z?{_required:!0}:{}}}snapshotGaugeSeries($){let Z=this.gaugeValues.get($);if(!Z)return[];return Array.from(Z.values(),(Q)=>({value:Q.value,attributes:Q.attributes?{...Q.attributes}:void 0}))}flattenProperties($,Z="",Q=new WeakSet,W=0){if(!$)return{};let J={},X=100,Y=10;for(let[j,V]of Object.entries($)){if(j==="__proto__"||j==="constructor"||j==="prototype")continue;let H=Z?`${Z}.${j}`:j;if(V===null||V===void 0){J[H]=String(V);continue}if(Array.isArray(V)){let B=V.length>X?V.slice(0,X):V;try{J[H]=JSON.stringify(B)}catch{J[H]="[UnserializableArray]"}if(V.length>X)J[`${H}_truncated`]=!0,J[`${H}_original_length`]=V.length;continue}if(typeof V==="object"){if(V instanceof Date){J[H]=V.toISOString();continue}if(V instanceof Error){J[H]=V.message;continue}if(Q.has(V)){J[H]="[Circular]";continue}if(W>=Y){J[H]="[MaxDepthExceeded]";continue}Q.add(V),Object.assign(J,this.flattenProperties(V,H,Q,W+1));continue}if(bL(V)){J[H]=V;continue}try{J[H]=JSON.stringify(V)}catch{J[H]=String(V)}}return J}}function bL($){return typeof $==="string"||typeof $==="number"||typeof $==="boolean"}class l4{name;logger;enabled;constructor($={}){this.name=$.name??"TelemetryLoggerSink",this.logger=$.logger,this.enabled=$.enabled??!0}emit($,Z){if(!this.isEnabled())return;this.logger?.log("telemetry.event",{telemetrySink:this.name,event:$,properties:Z})}emitRequired($,Z){this.logger?.log("telemetry.required_event",{telemetrySink:this.name,severity:"warn",event:$,properties:Z})}recordCounter($,Z,Q,W,J){if(!J&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"counter",name:$,value:Z,attributes:Q,description:W,required:J===!0})}recordHistogram($,Z,Q,W,J){if(!J&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"histogram",name:$,value:Z,attributes:Q,description:W,required:J===!0})}recordGauge($,Z,Q,W,J){if(!J&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"gauge",name:$,value:Z,attributes:Q,description:W,required:J===!0})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}async flush(){}async dispose(){}}class X8{adapters;metadata;distinctId;commonProperties;constructor($={}){if(this.adapters=[...$.adapters??[]],$.logger)this.adapters.push(new l4({logger:$.logger}));this.metadata={...$.metadata??{}},this.distinctId=$.distinctId,this.commonProperties={...$.commonProperties??{}}}addAdapter($){this.adapters.push($)}setDistinctId($){this.distinctId=$}setMetadata($){this.metadata={...$}}updateMetadata($){this.metadata={...this.metadata,...$}}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}isEnabled(){return this.adapters.some(($)=>$.isEnabled())}capture($){let Z=this.buildAttributes($.properties);for(let Q of this.adapters)Q.emit($.event,Z)}captureRequired($,Z){let Q=this.buildAttributes(Z);for(let W of this.adapters)W.emitRequired($,Q)}recordCounter($,Z,Q,W,J=!1){let X=this.buildAttributes(Q);for(let Y of this.adapters)Y.recordCounter($,Z,X,W,J)}recordHistogram($,Z,Q,W,J=!1){let X=this.buildAttributes(Q);for(let Y of this.adapters)Y.recordHistogram($,Z,X,W,J)}recordGauge($,Z,Q,W,J=!1){let X=this.buildAttributes(Q);for(let Y of this.adapters)Y.recordGauge($,Z,X,W,J)}async flush(){await Promise.all(this.adapters.map(($)=>$.flush()))}async dispose(){await Promise.all(this.adapters.map(($)=>$.dispose()))}buildAttributes($){return{...this.commonProperties,...$,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{}}}}var fW=()=>{};import{metrics as yL,trace as hL}from"@opentelemetry/api";import{logs as kL}from"@opentelemetry/api-logs";import{OTLPLogExporter as IL}from"@opentelemetry/exporter-logs-otlp-http";import{OTLPMetricExporter as xL}from"@opentelemetry/exporter-metrics-otlp-http";import{OTLPTraceExporter as gL}from"@opentelemetry/exporter-trace-otlp-http";import{resourceFromAttributes as mL}from"@opentelemetry/resources";import{BatchLogRecordProcessor as vL,ConsoleLogRecordExporter as cL,LoggerProvider as uL}from"@opentelemetry/sdk-logs";import{ConsoleMetricExporter as dL,MeterProvider as lL,PeriodicExportingMetricReader as vj}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as pL,ConsoleSpanExporter as rL,SimpleSpanProcessor as iL}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as nL}from"@opentelemetry/sdk-trace-node";import{ATTR_SERVICE_NAME as aL,ATTR_SERVICE_VERSION as sL}from"@opentelemetry/semantic-conventions";class cj{distinctId;metadata;commonProperties;constructor($={}){this.distinctId=$.distinctId,this.metadata={...$.metadata??{}},this.commonProperties={...$.commonProperties??{}}}setDistinctId($){this.distinctId=$}setMetadata($){this.metadata={...$}}updateMetadata($){this.metadata={...this.metadata,...$}}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}isEnabled(){return!1}capture($){this.resolveProperties($.properties)}captureRequired($,Z){this.resolveProperties(Z)}recordCounter(){}recordHistogram(){}recordGauge(){}async flush(){}async dispose(){}resolveProperties($){return{...this.commonProperties,...$,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{}}}}class Y8{meterProvider;loggerProvider;tracerProvider;options;constructor($={}){this.options=$;let Z=mL({[aL]:$.serviceName??"cline",...$.serviceVersion?{[sL]:$.serviceVersion}:{}});if(this.meterProvider=this.createMeterProvider(Z),this.loggerProvider=this.createLoggerProvider(Z),this.tracerProvider=this.createTracerProvider(Z),this.meterProvider)yL.setGlobalMeterProvider(this.meterProvider);if(this.loggerProvider)kL.setGlobalLoggerProvider(this.loggerProvider);if(this.tracerProvider)this.tracerProvider.register()}getTracer($="cline",Z){return hL.getTracer($,Z??this.options.serviceVersion)}createAdapter($){return new d4({...$,meterProvider:this.meterProvider,loggerProvider:this.loggerProvider})}createTelemetryService($){let Z=this.createAdapter({name:$.name,enabled:this.options.enabled,metadata:$.metadata});return new X8({...$,adapters:[Z],distinctId:P0($.distinctId)})}async forceFlush(){await Promise.all([this.meterProvider?.forceFlush?.(),this.loggerProvider?.forceFlush?.(),this.tracerProvider?.forceFlush?.()])}async dispose(){await Promise.all([this.meterProvider?.shutdown?.(),this.loggerProvider?.shutdown?.(),this.tracerProvider?.shutdown?.()])}createMeterProvider($){let Z=UW(this.options.metricsExporter);if(Z.length===0)return null;let Q=Math.max(1000,this.options.metricExportIntervalMs??this.options.metricExportInterval??60000),W=Math.min(30000,Math.floor(Q*0.8)),J=Z.map((X)=>eL(X,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json",interval:Q,timeout:W})).filter((X)=>X!==null);if(J.length===0)return null;return new lL({resource:$,readers:J})}createTracerProvider($){let Z=UW(this.options.tracesExporter);if(Z.length===0)return null;let Q=this.options.otlpTracesEndpoint??this.options.otlpEndpoint,W=this.options.otlpTracesHeaders??this.options.otlpHeaders,J=[];for(let X of Z){let Y=tL(X,{endpoint:Q,headers:W,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(Y)J.push(Y)}if(J.length===0)return null;return new nL({resource:$,spanProcessors:J})}createLoggerProvider($){let Z=UW(this.options.logsExporter);if(Z.length===0)return null;let Q=Z.map((W)=>{let J=oL(W,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(!J)return null;return new vL(J,{maxQueueSize:this.options.logMaxQueueSize??2048,maxExportBatchSize:this.options.logBatchSize??512,scheduledDelayMillis:this.options.logBatchTimeoutMs??this.options.logBatchTimeout??5000})}).filter((W)=>W!==null);if(Q.length===0)return null;return new uL({resource:$,processors:Q})}}function p4($){let Z=new Y8($),Q=Z.createTelemetryService($);return Q.captureRequired("telemetry.provider_created",{provider:"opentelemetry",enabled:$.enabled??!0,logsExporter:Array.isArray($.logsExporter)?$.logsExporter.join(","):$.logsExporter,metricsExporter:Array.isArray($.metricsExporter)?$.metricsExporter.join(","):$.metricsExporter,tracesExporter:Array.isArray($.tracesExporter)?$.tracesExporter.join(","):$.tracesExporter,otlpProtocol:$.otlpProtocol,hasOtlpEndpoint:Boolean($.otlpEndpoint),serviceName:$.serviceName,serviceVersion:$.serviceVersion}),{provider:Z,telemetry:Q}}function h1($){if(I9())return{telemetry:new cj($)};if($.enabled!==!0)return{telemetry:new X8({...$,distinctId:P0($.distinctId)})};return p4($)}function j8($){let{telemetry:Z,provider:Q}=h1($);return{telemetry:Z,provider:Q,flush:async()=>{let X=Q;if(X&&typeof X.forceFlush==="function")try{await X.forceFlush()}catch{}},dispose:async()=>{await Promise.allSettled([Z.dispose(),Q?.dispose()])}}}function UW($){if(!$)return[];return(Array.isArray($)?$:$.split(",")).map((Q)=>Q.trim()).filter((Q)=>Q==="console"||Q==="otlp")}function oL($,Z){if($==="console")return new cL;if(!Z.endpoint)return null;let Q=DW(Z.endpoint,"/v1/logs");return new IL({url:Q,headers:Z.headers})}function tL($,Z){if($==="console")return new iL(new rL);if(!Z.endpoint)return null;let Q=DW(Z.endpoint,"/v1/traces");return new pL(new gL({url:Q,headers:Z.headers}))}function eL($,Z){if($==="console")return new vj({exporter:new dL,exportIntervalMillis:Z.interval,exportTimeoutMillis:Z.timeout});if(!Z.endpoint)return null;let Q=DW(Z.endpoint,"/v1/metrics");return new vj({exporter:new xL({url:Q,headers:Z.headers}),exportIntervalMillis:Z.interval,exportTimeoutMillis:Z.timeout})}function DW($,Z){let Q=new URL($),W=Q.pathname.endsWith("/")?Q.pathname.slice(0,-1):Q.pathname;return Q.pathname=W.endsWith(Z)?W:`${W}${Z}`,Q.toString()}var v9=p$(()=>{$1();J8();fW()});var DB={};N(DB,{normalizeUserMessage:()=>cq,buildInitialUserContent:()=>vq});async function vq($,Z,Q,W){let J=uq(Z),X=await lq(Q,W);if(J.length===0&&!X)return $;let Y=[{type:"text",text:$},...J];if(X)Y.push(...X);return Y}function cq($){if($==null)return"";if(typeof $==="string")return $;let Z=$.content;if(typeof Z==="string")return Z;if(!Array.isArray(Z))return"";let Q=[];for(let W of Z)if(W&&typeof W==="object"&&W.type==="text"){let J=W.text;if(typeof J==="string")Q.push(J)}return Q.join(`
|
|
3
|
+
`)}function uq($){if(!$||$.length===0)return[];let Z=[];for(let Q of $){let W=dq(Q);if(W)Z.push(W)}return Z}function dq($){let Z=$.trim();if(!Z)return;let Q=Z.match(/^data:([^;,]+);base64,(.+)$/);if(Q){let W=Q[1],J=Q[2];if(!W||!J)return;return{type:"image",mediaType:W,data:J}}return{type:"image",mediaType:"image/png",data:Z}}async function lq($,Z){if(!$||$.length===0)return;let Q=Z??(async()=>{throw Error("File loading is not configured in this runtime. Provide userFileContentLoader to enable userFiles support.")}),W=await Promise.all($.map(async(J)=>{let X=J.replace(/\\/g,"/");try{let Y=await Q(J);return{type:"file",path:X,content:Y}}catch(Y){let j=Y instanceof Error?Y.message:String(Y);return{type:"file",path:X,content:`Error fetching content: ${j}`}}}));if(W.length===0)return;return W}var dK={};N(dK,{updateMcpSettingsFileSync:()=>j1,updateMcpSettingsFile:()=>t8,updateMcpServerOAuthStateAsync:()=>z5,updateMcpServerOAuthState:()=>C2,setMcpServerDisabled:()=>N2,resolveMcpServerRegistrations:()=>p0,resolveDefaultMcpSettingsPath:()=>Z0,registerMcpServersFromSettingsFile:()=>P2,normalizeMcpServerOAuthState:()=>e8,loadMcpSettingsFile:()=>E2,listMcpServerOAuthStatuses:()=>T5,hasMcpSettingsFile:()=>s1,getMcpServerOAuthState:()=>w2,McpSettingsUpdateSkippedError:()=>o8,McpSettingsMutatorPurityError:()=>y$,McpSettingsLockTimeoutError:()=>h$});import{existsSync as wK,mkdirSync as qJ,readFileSync as CK,renameSync as EJ,rmdirSync as cN,rmSync as MJ,statSync as uN,unlinkSync as PK,writeFileSync as SK}from"node:fs";import{randomUUID as dN}from"node:crypto";import{dirname as bK,join as NK}from"node:path";import{setTimeout as lN}from"node:timers/promises";import{resolveMcpSettingsPath as pN}from"@cline/shared/storage";import{z as S}from"zod";function RJ($){if(!$)return;if($==="http")return"streamableHttp";return $}function Z0(){return pN()}function Qw($,Z){qJ(bK($),{recursive:!0});let Q=`${$}.tmp.${process.pid}.${Date.now()}.${Math.random().toString(36).slice(2)}`;try{SK(Q,Z,{encoding:"utf8",flag:"wx"}),EJ(Q,$)}catch(W){try{PK(Q)}catch{}throw W}}function Jw($){Atomics.wait(Ww,0,0,$)}function Xw($){return`${$}.lock`}function IK(){return`${process.pid}.${Date.now()}.${dN()}`}function xK($,Z){qJ(bK($),{recursive:!0});let Q=`${$}.tmp.${Z}`;MJ(Q,{recursive:!0,force:!0}),qJ(Q,{recursive:!0}),SK(NK(Q,`owner.${Z}`),Z,{encoding:"utf8",flag:"wx"});try{return EJ(Q,$),{lockDir:$,ownerFile:NK($,`owner.${Z}`)}}catch(W){if(MJ(Q,{recursive:!0,force:!0}),wK($))return;throw W}}function gK($,Z){let Q;try{Q=Date.now()-uN($).mtimeMs}catch(J){if(J.code==="ENOENT")return;throw J}if(Q<wJ)return;Z.logger?.log(`[mcp-settings] Stale lock directory at ${$} (age ${Q}ms); reclaiming.`,{severity:"warn"});let W=`${$}.stale.${IK()}`;try{EJ($,W)}catch(J){if(J.code==="ENOENT")return;throw J}MJ(W,{recursive:!0,force:!0})}function Yw($){try{PK($.ownerFile)}catch(Z){if(Z.code!=="ENOENT")throw Z}try{cN($.lockDir)}catch(Z){let Q=Z.code;if(Q!=="ENOENT"&&Q!=="ENOTEMPTY"&&Q!=="EEXIST")throw Z}}function mK($){let Z=Xw($);if(EQ.has(Z))throw Error(`Reentrant MCP settings update for ${$}. Keep mutators pure: compute values up front and do not call back into the settings API.`);return{lockDir:Z,token:IK()}}function jw($,Z){let{lockDir:Q,token:W}=mK($),J=Z.timeoutMs??wJ,X=Date.now();while(!0){let Y=xK(Q,W);if(Y)return EQ.add(Q),Y;if(Date.now()-X>J)throw new h$(`Timed out waiting for MCP settings lock at ${Q} after ${J}ms.`);gK(Q,Z),Jw(kK)}}async function Vw($,Z){let{lockDir:Q,token:W}=mK($),J=Z.timeoutMs??wJ,X=Date.now();while(!0){let Y=xK(Q,W);if(Y)return EQ.add(Q),Y;if(Date.now()-X>J)throw new h$(`Timed out waiting for MCP settings lock at ${Q} after ${J}ms.`);gK(Q,Z),await lN(kK)}}function vK($,Z,Q){try{let W=Hw(Z),J=Bw(W,Q);return Qw(Z,`${JSON.stringify(W,null,2)}
|
|
4
|
+
`),J}finally{EQ.delete($.lockDir),Yw($)}}function j1($,Z,Q={}){let W=jw($,Q);return vK(W,$,Z)}async function t8($,Z,Q={}){let W=await Vw($,Q);return vK(W,$,Z)}function Hw($){let Z=Kw($);if(!Z.mcpServers||typeof Z.mcpServers!=="object"||Array.isArray(Z.mcpServers))Z.mcpServers={};return Z}function Bw($,Z){let Q=JSON.stringify($),W=JSON.parse(Q),J=Z(W),X=JSON.stringify(W),Y=Z($);if(JSON.stringify($)!==X)throw new y$("MCP settings mutator must be deterministic and free of side effects; repeated calls produced different settings.");if(JSON.stringify(Y)!==JSON.stringify(J))throw new y$("MCP settings mutator must be deterministic and free of side effects; repeated calls produced different return values.");return Y}function Gw($){let Z=CK($,"utf8"),Q;try{Q=JSON.parse(Z)}catch(W){let J=W instanceof Error?W.message:String(W);throw Error(`Failed to parse MCP settings JSON at "${$}": ${J}`)}if(!Q||typeof Q!=="object"||Array.isArray(Q))throw Error(`Invalid MCP settings at "${$}": expected object.`);return Q}function Kw($){try{return Gw($)}catch(Z){if(Z.code==="ENOENT")return{};throw Z}}function cK($,Z){if(!Object.hasOwn($,Z))return;let Q=$[Z];if(!Q||typeof Q!=="object"||Array.isArray(Q))return;return Q}function Fw($,Z,Q){Object.defineProperty($,Z,{value:Q,enumerable:!0,configurable:!0,writable:!0})}function E2($={}){let Z=$.filePath??Z0(),Q=CK(Z,"utf8"),W;try{W=JSON.parse(Q)}catch(X){let Y=X instanceof Error?X.message:String(X);throw Error(`Failed to parse MCP settings JSON at "${Z}": ${Y}`)}let J=Zw.safeParse(W);if(!J.success){let X=J.error.issues.map((Y)=>{let j=Y.path.join(".");return j?`${j}: ${Y.message}`:Y.message}).join("; ");throw Error(`Invalid MCP settings at "${Z}": ${X}`)}return J.data}function e8($){if(!$)return;let Z={...$.clientInformation?{clientInformation:$.clientInformation}:{},...$.tokens?{tokens:$.tokens}:{},...$.codeVerifier?{codeVerifier:$.codeVerifier}:{},...$.discoveryState?{discoveryState:$.discoveryState}:{},...$.redirectUrl?{redirectUrl:$.redirectUrl}:{},...$.lastError?{lastError:$.lastError}:{},...$.lastAuthenticatedAt?{lastAuthenticatedAt:$.lastAuthenticatedAt}:{}};return Object.keys(Z).length>0?Z:void 0}function Aw($){if($===void 0)return;let Z=NJ.safeParse($);if(!Z.success)return;return e8(Z.data)}function s1($={}){let Z=$.filePath??Z0();return wK(Z)}function p0($={}){let Z=E2($);return Object.entries(Z.mcpServers).map(([Q,W])=>({name:Q,transport:W.transport,disabled:W.disabled,metadata:W.metadata,oauth:W.oauth}))}function N2($){let Z=$.filePath??Z0(),Q=$.name.trim();if(!Q)throw Error("MCP server settings toggle requires a server name.");j1(Z,(W)=>{let J=W.mcpServers;if(!J||typeof J!=="object"||Array.isArray(J))throw Error(`Invalid MCP settings at "${Z}": mcpServers must be an object.`);let X={...J},Y=cK(X,Q);if(!Y)throw Error(`Unknown MCP server: ${Q}`);let j={...Y};if($.disabled)j.disabled=!0;else delete j.disabled;Fw(X,Q,j),W.mcpServers=X})}function w2($,Z={}){let Q=E2(Z);if(!Object.hasOwn(Q.mcpServers,$))return;return e8(Q.mcpServers[$]?.oauth)}function uK($,Z){return(Q)=>{let W=Q.mcpServers,J=cK(W,$);if(!J)throw Error(`Unknown MCP server: ${$}`);let X=Aw(J.oauth)??{},Y=e8(Z(X));if(Y)J.oauth=Y;else delete J.oauth;return Y??{}}}function C2($,Z,Q={}){let W=Q.filePath??Z0();return j1(W,uK($,Z))}async function z5($,Z,Q={}){let W=Q.filePath??Z0();return t8(W,uK($,Z))}function T5($={}){return p0($).map((Q)=>{let W=Q.transport.type!=="stdio",J=Q.oauth?.tokens?.access_token;return{serverName:Q.name,oauthSupported:W,oauthConfigured:W&&typeof J==="string"&&J.trim().length>0,lastError:Q.oauth?.lastError,lastAuthenticatedAt:Q.oauth?.lastAuthenticatedAt}}).sort((Q,W)=>Q.serverName.localeCompare(W.serverName))}async function P2($,Z={}){let Q=p0(Z);for(let W of Q)await $.registerServer(W);return Q}var _5,yK,NJ,rN,iN,nN,aN,sN,oN,hK,tN,eN,$w,Zw,o8,h$,y$,wJ=1e4,kK=25,Ww,EQ;var NQ=p$(()=>{_5=S.record(S.string(),S.string()),yK=S.record(S.string(),S.unknown()),NJ=S.object({clientInformation:S.record(S.string(),S.unknown()).optional(),tokens:S.record(S.string(),S.unknown()).optional(),codeVerifier:S.string().optional(),discoveryState:S.record(S.string(),S.unknown()).optional(),redirectUrl:S.string().url().optional(),lastError:S.string().optional(),lastAuthenticatedAt:S.number().int().positive().optional()}).strip(),rN=S.object({type:S.literal("stdio"),command:S.string().min(1),args:S.array(S.string()).optional(),cwd:S.string().min(1).optional(),env:_5.optional()}),iN=S.object({type:S.literal("sse"),url:S.string().url(),headers:_5.optional()}),nN=S.object({type:S.literal("streamableHttp"),url:S.string().url(),headers:_5.optional()}),aN=S.discriminatedUnion("type",[rN,iN,nN]),sN=S.object({transport:aN,disabled:S.boolean().optional(),metadata:yK.optional(),oauth:NJ.optional()}),oN=S.enum(["stdio","sse","http","streamableHttp"]).optional(),hK=S.object({type:S.enum(["stdio","sse","streamableHttp"]).optional(),transportType:oN,disabled:S.boolean().optional(),metadata:yK.optional(),oauth:NJ.optional()});tN=hK.extend({command:S.string().min(1),args:S.array(S.string()).optional(),cwd:S.string().min(1).optional(),env:_5.optional()}).superRefine(($,Z)=>{let Q=$.type??RJ($.transportType);if(Q&&Q!=="stdio")Z.addIssue({code:S.ZodIssueCode.custom,message:'Expected type "stdio" for command-based MCP server',path:["type"]})}).transform(($)=>({transport:{type:"stdio",command:$.command,args:$.args,cwd:$.cwd,env:$.env},disabled:$.disabled,metadata:$.metadata,oauth:$.oauth})),eN=hK.extend({url:S.string().url(),headers:_5.optional()}).superRefine(($,Z)=>{let Q=$.type??RJ($.transportType)??"sse";if(Q!=="sse"&&Q!=="streamableHttp")Z.addIssue({code:S.ZodIssueCode.custom,message:'Expected type "sse" or "streamableHttp" for URL-based MCP server',path:["type"]})}).transform(($)=>{if(($.type??RJ($.transportType)??"sse")==="streamableHttp")return{transport:{type:"streamableHttp",url:$.url,headers:$.headers},disabled:$.disabled,metadata:$.metadata,oauth:$.oauth};return{transport:{type:"sse",url:$.url,headers:$.headers},disabled:$.disabled,metadata:$.metadata,oauth:$.oauth}}),$w=S.union([sN,tN,eN]),Zw=S.object({mcpServers:S.record(S.string(),$w)}).passthrough();o8=class o8 extends Error{constructor($){super($);this.name="McpSettingsUpdateSkippedError"}};h$=class h$ extends Error{constructor($){super($);this.name="McpSettingsLockTimeoutError"}};y$=class y$ extends Error{constructor($){super($);this.name="McpSettingsMutatorPurityError"}};Ww=new Int32Array(new SharedArrayBuffer(4)),EQ=new Set});var hA={};N(hA,{resolveCoreDistinctId:()=>P0,createOpenTelemetryTelemetryService:()=>p4,createConfiguredTelemetryService:()=>h1,createConfiguredTelemetryHandle:()=>j8,OpenTelemetryProvider:()=>Y8,OpenTelemetryAdapter:()=>d4});var tQ=p$(()=>{J8();v9()});var HU={};N(HU,{writeHubDiscovery:()=>d9,withHubStartupLock:()=>l9,verifyHubConnection:()=>F1,truncateNotificationBody:()=>Q9,toHubStatusUrl:()=>TW,toHubHealthUrl:()=>p9,stopLocalHubServerGracefully:()=>yW,startHubWebSocketServer:()=>X9,startHubServer:()=>jU,spawnDetachedHubServerWithRetry:()=>H8,spawnDetachedHubServer:()=>NW,sendHubCommand:()=>DV,restartLocalHubIfIdleAfterStartupTimeout:()=>s9,resolveWorkspaceHubOwnerContext:()=>$V,resolveSharedHubOwnerContext:()=>Q1,resolveProductionHubOwnerContext:()=>K1,resolveHubUrl:()=>hW,resolveHubOwnerContext:()=>x1,resolveHubEndpointOptions:()=>G1,resolveHubBuildId:()=>u9,resolveDefaultHubPort:()=>V8,resolveDefaultHubPathname:()=>EW,resolveDefaultHubHost:()=>RW,resolveCompatibleLocalHubUrl:()=>s4,resolveClineDir:()=>sj,resolveClineDataDir:()=>s$,requestHubShutdown:()=>a4,rememberRecoverableLocalHubUrl:()=>B$,readHubDiscovery:()=>K0,readBearerToken:()=>d7,probeHubServer:()=>g1,probeHubConnection:()=>UV,prewarmDetachedHubServer:()=>i9,normalizeHubWebSocketUrl:()=>G$,isLocalHubOrigin:()=>MY,isLocalHubHostName:()=>l7,isHubReconnectableTransportError:()=>SW,isHubCommandTimeoutError:()=>a9,isDiscoveryFilePresent:()=>tj,ensureHubWebSocketServer:()=>p7,ensureHubServer:()=>VU,ensureDetachedHubServer:()=>YV,ensureCompatibleLocalHubUrl:()=>e$,createLocalHubScheduleRuntimeHandlers:()=>YU,createInMemoryHubOwnerContext:()=>oj,createHubServerUrl:()=>Z1,createHubAuthToken:()=>c9,createConfiguredTelemetryService:()=>h1,createConfiguredTelemetryHandle:()=>j8,connectToHub:()=>o9,clearHubDiscovery:()=>S0,NodeHubClient:()=>W1,NativeHubTransportAdapter:()=>J9,HubUIClient:()=>xW,HubTransportError:()=>R0,HubSessionClient:()=>IW,HubServerTransport:()=>N4,HubScheduleService:()=>$8,HubScheduleCommandService:()=>s2,HubCommandError:()=>B8,DEFAULT_HUB_PORT:()=>qW,DEFAULT_HUB_PATHNAME:()=>MW,DEFAULT_HUB_HOST:()=>OW,BrowserWebSocketHubAdapter:()=>W9});import{createSessionId as qD}from"@cline/shared";function g0($,Z){return{version:$.version,requestId:$.requestId,ok:!0,payload:Z}}function Yj($,Z,Q){return{version:$.version,requestId:$.requestId??qD("hubreq_"),ok:!1,error:{code:Z,message:Q}}}class s2{schedules;constructor($){this.schedules=$}async handleCommand($){try{switch($.command){case"schedule.create":return g0($,{schedule:this.schedules.createSchedule(this.toCreateInput($.payload??{}))});case"schedule.list":return g0($,{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 g0($,{schedule:this.schedules.getSchedule(String($.payload?.scheduleId??""))});case"schedule.update":return g0($,{schedule:this.schedules.updateSchedule(String($.payload?.scheduleId??""),this.toUpdateInput($.payload??{}))});case"schedule.delete":return g0($,{deleted:this.schedules.deleteSchedule(String($.payload?.scheduleId??""))});case"schedule.enable":return g0($,{schedule:this.schedules.resumeSchedule(String($.payload?.scheduleId??""))});case"schedule.disable":return g0($,{schedule:this.schedules.pauseSchedule(String($.payload?.scheduleId??""))});case"schedule.trigger":return g0($,{execution:$.payload?.wait===!1?this.schedules.triggerScheduleNowDetached(String($.payload?.scheduleId??"")):await this.schedules.triggerScheduleNow(String($.payload?.scheduleId??""))});case"schedule.list_executions":return g0($,{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 g0($,{stats:this.schedules.getScheduleStats(String($.payload?.scheduleId??""))});case"schedule.active":return g0($,{executions:this.schedules.getActiveExecutions()});case"schedule.upcoming":return g0($,{runs:this.schedules.getUpcomingRuns(typeof $.payload?.limit==="number"?$.payload.limit:void 0)});default:return Yj($,"unsupported_command",`Unsupported hub schedule command: ${$.command}`)}}catch(Z){return Yj($,"schedule_command_failed",Z instanceof Error?Z.message:String(Z))}}toCreateInput($){let Z=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider&&$.model?{providerId:String($.provider),modelId:String($.model)}:void 0;return{...$,modelSelection:Z}}toUpdateInput($){let Z=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider||$.model?{providerId:typeof $.provider==="string"?$.provider:"",modelId:typeof $.model==="string"?$.model:""}:void 0;return{...$,modelSelection:Z}}}class C4{store;nowFn;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now())}materializeAll(){let $={oneOffQueued:0,scheduleQueued:0},Z=this.store.listSpecs({triggerKind:"one_off",enabled:!0,parseStatus:"valid"});for(let W of Z)if(this.materializeOneOff(W))$.oneOffQueued+=1;let Q=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let W of Q)try{if(this.materializeSchedule(W))$.scheduleQueued+=1}catch{}return $}materializeOneOff($){if($.triggerKind!=="one_off")return!1;if(!$.enabled||$.removed)return!1;if(this.store.hasOneOffRunForRevision($.specId,$.revision))return!1;return this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"one_off",scheduledFor:new Date(this.nowFn()).toISOString()}),!0}materializeSchedule($){if($.triggerKind!=="schedule")return!1;if(!$.enabled||$.removed)return!1;if(!$.scheduleExpr)return!1;return this.store.materializeDueScheduleRun({specId:$.specId,nowMs:this.nowFn()}).queued}}import{basename as yD}from"node:path";import{buildClineSystemPrompt as hD}from"@cline/shared";import{nowIso as Kj}from"@cline/shared/db";var U0={READ_FILES:"read_files",SEARCH_CODEBASE:"search_codebase",RUN_COMMANDS:"run_commands",FETCH_WEB_CONTENT:"fetch_web_content",APPLY_PATCH:"apply_patch",EDITOR:"editor",SKILLS:"skills",ASK:"ask_question",SUBMIT_AND_EXIT:"submit_and_exit"},X$=[U0.READ_FILES,U0.SEARCH_CODEBASE,U0.RUN_COMMANDS,U0.FETCH_WEB_CONTENT,U0.APPLY_PATCH,U0.EDITOR,U0.SKILLS,U0.ASK,U0.SUBMIT_AND_EXIT];var Vj={};N(Vj,{mergeRulesForSystemPrompt:()=>t2,loadRulesForSystemPromptFromWatcher:()=>QW,listEnabledRulesFromWatcher:()=>jj,isRuleEnabled:()=>F9,formatRulesForSystemPrompt:()=>o2});function F9($){return $.disabled!==!0}function o2($){if($.length===0)return"";return`
|
|
5
5
|
|
|
6
6
|
# Rules
|
|
7
7
|
${$.map((Q)=>`## ${Q.name}
|
|
8
8
|
${Q.instructions}`).join(`
|
|
9
9
|
|
|
10
|
-
`)}`}function
|
|
10
|
+
`)}`}function t2($,Z){let Q=$?.trim(),W=Z?.trim();if(Q&&W)return`${Q}
|
|
11
11
|
|
|
12
|
-
${W}`;return Q||W||void 0}function jj($){return[...$.getSnapshot("rule").values()].map((Q)=>Q.item).filter(
|
|
12
|
+
${W}`;return Q||W||void 0}function jj($){return[...$.getSnapshot("rule").values()].map((Q)=>Q.item).filter(F9).sort((Q,W)=>Q.name.localeCompare(W.name))}function QW($){return o2(jj($))}var Gj={};N(Gj,{normalizeWorkspacePath:()=>N1,generateWorkspaceInfoWithDiagnostics:()=>P4,generateWorkspaceInfo:()=>e2,buildWorkspaceMetadataWithInfo:()=>WW,buildWorkspaceMetadata:()=>S4});import{basename as MD,resolve as RD}from"node:path";import{performance as Hj}from"node:perf_hooks";import{processWorkspaceInfo as Bj}from"@cline/shared";import ED from"simple-git";function N1($){return RD($)}async function e2($){return(await P4($)).info}function A9($){if($ instanceof Error)return{errorType:$.name?.trim()||$.constructor.name||"Error",message:$.message};return{errorType:"Error",message:String($)}}async function P4($){let Z=N1($),Q={rootPath:Z,hint:MD(Z)},W;try{let J=ED({baseDir:Z});if(!await J.checkIsRepo())return{info:Q,vcsType:"none"};try{let Y=await J.getRemotes(!0);if(Y.length>0){let j=Y.map((V)=>{let H=V.refs.fetch||V.refs.push;return`${V.name}: ${H}`});Q.associatedRemoteUrls=j}}catch(Y){W??=A9(Y)}try{let Y=(await J.revparse(["HEAD"])).trim();if(Y.length>0)Q.latestGitCommitHash=Y}catch(Y){W??=A9(Y)}try{let Y=(await J.branch()).current.trim();if(Y.length>0)Q.latestGitBranchName=Y}catch(Y){W??=A9(Y)}return{info:Q,vcsType:"git",error:W}}catch(J){return{info:Q,vcsType:"none",error:A9(J)}}}async function S4($){let Z=await e2($);return Bj(Z)}async function WW($){let Z=Hj.now(),Q=await P4($),W=Hj.now()-Z,J=Q.info;return{workspaceInfo:J,workspaceMetadata:Bj(J),durationMs:W,vcsType:Q.vcsType,initError:Q.error}}import{mkdirSync as ND,writeFileSync as wD}from"node:fs";import{join as CD}from"node:path";import{resolveCronReportsDir as PD}from"@cline/shared/storage";function Y$($){if(/[:#\n]/.test($)||$.includes('"'))return JSON.stringify($);return $}function r$($,Z){if(Z===void 0||Z===null)return;return`${$}: ${Y$(Z)}`}function SD($,Z,Q){let W=[`runId: ${Y$($.runId)}`,`specId: ${Y$(Z.specId)}`,`externalId: ${Y$(Z.externalId)}`,`title: ${Y$(Z.title)}`,`triggerKind: ${Y$($.triggerKind)}`,`status: ${Y$($.status)}`,`sourcePath: ${Y$(Z.sourcePath)}`],J=[r$("sessionId",$.sessionId),r$("startedAt",$.startedAt),r$("completedAt",$.completedAt),r$("triggerEventId",$.triggerEventId),r$("triggerEventType",Q?.eventType),r$("triggerEventSource",Q?.source),r$("triggerEventSubject",Q?.subject)];for(let X of J)if(X)W.push(X);return`---
|
|
13
13
|
${W.join(`
|
|
14
14
|
`)}
|
|
15
15
|
---
|
|
16
|
-
`}function
|
|
16
|
+
`}function bD($){let Z=[];if($.triggerEvent){let Q=$.triggerEvent,W=[`- eventId: ${Q.eventId}`,`- eventType: ${Q.eventType}`,`- source: ${Q.source}`,Q.subject?`- subject: ${Q.subject}`:"",`- occurredAt: ${Q.occurredAt}`,Q.dedupeKey?`- dedupeKey: ${Q.dedupeKey}`:"",Q.attributes?`- attributes: ${JSON.stringify(Q.attributes)}`:""].filter((J)=>J.length>0);Z.push(`## Trigger Event
|
|
17
17
|
|
|
18
18
|
${W.join(`
|
|
19
19
|
`)}
|
|
@@ -32,12 +32,12 @@ ${W.join(`
|
|
|
32
32
|
${Q.join(`
|
|
33
33
|
`)}
|
|
34
34
|
`)}return Z.join(`
|
|
35
|
-
`)}function
|
|
36
|
-
${
|
|
37
|
-
`)}class
|
|
35
|
+
`)}function JW($){let Z=PD($.specs);ND(Z,{recursive:!0});let Q=CD(Z,`${$.run.runId}.md`),W=`${SD($.run,$.spec,$.data.triggerEvent)}
|
|
36
|
+
${bD($.data)}`;return wD(Q,W,"utf8"),Q}class XW{globalMaxConcurrency;activeExecutions=new Map;constructor($){this.globalMaxConcurrency=Math.max(1,Math.floor($))}acquire($,Z,Q){if(this.getGlobalActiveCount()>=this.globalMaxConcurrency)return!1;let W=Math.max(1,Math.floor(Q)),J=this.activeExecutions.get($)??new Set;if(J.size>=W)return!1;return J.add(Z),this.activeExecutions.set($,J),!0}release($,Z){let Q=this.activeExecutions.get($);if(!Q)return;if(Q.delete(Z),Q.size===0)this.activeExecutions.delete($)}getGlobalActiveCount(){let $=0;for(let Z of this.activeExecutions.values())$+=Z.size;return $}}var kD=15000,ID=90,Fj=["rules","skills","plugins"];function xD($,Z){return new Set($.extensions??Fj).has(Z)}function gD($,Z){if($.tools===void 0)return{"*":{autoApprove:!0}};let Q={"*":{enabled:!1,autoApprove:!0}};for(let W of $.tools)Q[W]={enabled:!0,autoApprove:!0};if(Z==="yolo")Q[U0.SUBMIT_AND_EXIT]={enabled:!0,autoApprove:!0};return Q}function mD($){let Z=$?.trim();if(!Z)return;return["# Notes Directory",`Use ${Z} for durable notes related to this automation.`,"Before starting, inspect relevant existing notes there when useful. During or after the run, write concise notes there when they would help future runs continue with context."].join(`
|
|
37
|
+
`)}class YW extends Error{constructor($){super($);this.name="TimeoutError"}}async function vD($,Z){if(Z<=0)return $;let Q,W=new Promise((J,X)=>{Q=setTimeout(()=>{X(new YW("cron run timed out"))},Z)});try{return await Promise.race([$,W])}finally{if(Q)clearTimeout(Q)}}class b4{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 XW($.globalMaxConcurrency??10),this.claimLeaseMs=Math.max(5000,($.claimLeaseSeconds??ID)*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??kD);await this.tick(),this.timer=setInterval(()=>void this.tick(),$)}async stop(){let $=this.started;if(this.started=!1,this.stopping=!0,this.timer)clearInterval(this.timer),this.timer=void 0;if(!$)return;let Z=[...this.activeRuns.entries()];await Promise.all(Z.map(async([Q,W])=>{if(W.sessionId)try{await this.options.runtimeHandlers.abortSession(W.sessionId)}catch{}try{this.store.requeueRun({runId:Q,claimToken:W.claimToken,error:"runner stopped before completion"})}catch{}}))}async dispose(){if(this.disposed)return;this.disposed=!0,await this.stop()}async tick(){if(this.ticking)return;this.ticking=!0;try{this.materializer.materializeAll();let $=this.store.claimDueRuns({nowIso:Kj(),leaseMs:this.claimLeaseMs});await Promise.allSettled($.map((Z)=>this.executeClaim(Z)))}catch($){let Z=this.options.logger;if(Z)if(Z.error)Z.error("cron.runner.tick.failed",{error:$});else Z.log("cron.runner.tick.failed",{error:$})}finally{this.ticking=!1}}getActiveRuns(){return[...this.activeRuns.entries()].flatMap(([$,Z])=>{let Q=this.store.getRun($);return Q?[{...Q,...Z}]:[]})}async executeClaim($){let Z=$.run,Q=this.store.getSpec(Z.specId);if(!Q){this.store.completeRun(Z.runId,{status:"failed",error:"spec not found",claimToken:$.claimToken});return}if(!Q.enabled||Q.removed){this.store.completeRun(Z.runId,{status:"cancelled",error:"spec disabled or removed",claimToken:$.claimToken});return}let W=Q.maxParallel&&Q.maxParallel>0?Q.maxParallel:1;if(!this.limiter.acquire(Q.specId,Z.runId,W)){this.store.requeueRun({runId:Z.runId,claimToken:$.claimToken,error:"concurrency limit reached"});return}if(this.stopping){this.limiter.release(Q.specId,Z.runId),this.store.requeueRun({runId:Z.runId,claimToken:$.claimToken,error:"runner stopped before execution"});return}this.activeRuns.set(Z.runId,{claimToken:$.claimToken});let X=Z.triggerEventId?this.store.getEventLog(Z.triggerEventId):void 0,Y,j,V=Date.now(),H;if(Q.timeoutSeconds&&Q.timeoutSeconds>0)H=V+Q.timeoutSeconds*1000;try{j=this.startClaimLeaseHeartbeat($);let B=await this.buildStartRequest(Q);if(Y=(await this.options.runtimeHandlers.startSession(B)).sessionId.trim(),!Y)throw Error("runtime returned empty sessionId");this.activeRuns.set(Z.runId,{claimToken:$.claimToken,sessionId:Y}),this.store.attachSessionIdToRun(Z.runId,Y);let K={config:B,prompt:this.buildPrompt(Q,X)},F=this.options.runtimeHandlers.sendSession(Y,K),A=H?Math.max(1,H-Date.now()):0,f=(await vD(F,A)).result,D=Date.now(),U=JW({specs:this.options.specs,workspaceRoot:this.options.workspaceRoot,run:{...Z,sessionId:Y,status:"done"},spec:Q,data:{finalText:f.text,usage:f.usage,toolCalls:f.toolCalls,durationMs:D-V,triggerEvent:X}});this.store.completeRun(Z.runId,{status:"done",sessionId:Y,reportPath:U,claimToken:$.claimToken}),this.publishScheduleExecutionEvent("schedule.execution.completed",Q,Z.runId),this.store.updateSpecLastRunAt(Q.specId,Kj())}catch(B){let G=B instanceof YW;if(Y&&G)try{await this.options.runtimeHandlers.abortSession(Y)}catch{}let K=B instanceof Error?B.message:String(B),F=Date.now(),A=JW({specs:this.options.specs,workspaceRoot:this.options.workspaceRoot,run:{...Z,sessionId:Y,status:"failed"},spec:Q,data:{error:K,durationMs:F-V,triggerEvent:X}});this.store.completeRun(Z.runId,{status:"failed",sessionId:Y,reportPath:A,error:K,claimToken:$.claimToken}),this.publishScheduleExecutionEvent("schedule.execution.failed",Q,Z.runId)}finally{if(j?.(),Y)try{await this.options.runtimeHandlers.stopSession(Y)}catch{}this.activeRuns.delete(Z.runId),this.limiter.release(Q.specId,Z.runId)}}publishScheduleExecutionEvent($,Z,Q){if(Z.source!=="hub-schedule"||!this.options.eventPublisher)return;let W=this.store.getRun(Q);if(!W)return;let J=W.status==="done"?"success":W.status==="cancelled"?"aborted":W.status==="running"?"running":W.status==="queued"?"pending":"failed";this.options.eventPublisher($,{scheduleId:Z.externalId,executionId:W.runId,sessionId:W.sessionId,triggeredAt:new Date(W.scheduledFor??W.createdAt).getTime(),startedAt:W.startedAt?new Date(W.startedAt).getTime():void 0,endedAt:W.completedAt?new Date(W.completedAt).getTime():void 0,status:J,errorMessage:W.error})}buildPrompt($,Z){let Q=$.prompt??"";if(!Z)return Q;let W={eventId:Z.eventId,eventType:Z.eventType,source:Z.source,subject:Z.subject,occurredAt:Z.occurredAt,workspaceRoot:Z.workspaceRoot,dedupeKey:Z.dedupeKey,attributes:Z.attributes,payload:Z.payload};return`${Q}
|
|
38
38
|
|
|
39
39
|
Trigger event:
|
|
40
|
-
${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Math.floor(this.claimLeaseMs/2)),Q=setInterval(()=>{let W=new Date(Date.now()+this.claimLeaseMs).toISOString();if(!this.store.renewClaim($.run.runId,$.claimToken,W))clearInterval(Q)},Z);return()=>clearInterval(Q)}async buildSystemPrompt($,Z,Q,W){let J=
|
|
40
|
+
${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Math.floor(this.claimLeaseMs/2)),Q=setInterval(()=>{let W=new Date(Date.now()+this.claimLeaseMs).toISOString();if(!this.store.renewClaim($.run.runId,$.claimToken,W))clearInterval(Q)},Z);return()=>clearInterval(Q)}async buildSystemPrompt($,Z,Q,W){let J=mD($.notesDirectory),X=t2(void 0,J),Y=await S4(Z),j=hD({ide:"Cline Cron",workspaceRoot:Z,workspaceName:yD(Z),metadata:Y,rules:$.systemPrompt?void 0:X,mode:Q,providerId:W,overridePrompt:$.systemPrompt,platform:typeof process<"u"&&process?.platform||"unknown"});return $.systemPrompt?t2(j,X)??j:j}async buildStartRequest($){let Z=($.workspaceRoot??"").trim(),Q=($.providerId??"").trim(),W=($.modelId??"").trim(),J=$.metadata?.__hubRuntimeOptions&&typeof $.metadata.__hubRuntimeOptions==="object"&&!Array.isArray($.metadata.__hubRuntimeOptions)?$.metadata.__hubRuntimeOptions:void 0,X=typeof $.metadata?.__hubScheduleCwd==="string"&&$.metadata.__hubScheduleCwd.trim()?$.metadata.__hubScheduleCwd.trim():Z;if(!Z)throw Error("cron spec requires workspaceRoot");let Y=$.mode==="plan"?"plan":$.mode==="act"?"act":"yolo";return{workspaceRoot:Z,cwd:X,provider:Q,model:W,mode:Y,source:$.source?.trim()||"user",systemPrompt:await this.buildSystemPrompt($,Z,Y,Q),maxIterations:$.maxIterations,enableTools:J?.enableTools??!0,enableSpawn:J?.enableSpawn??!0,enableTeams:J?.enableTeams??!0,autoApproveTools:J?.autoApproveTools??!0,toolPolicies:gD($,Y),configExtensions:Fj.filter((j)=>xD($,j))}}}function y4($,Z,Q,W){let J=new Set;function X(Y){let j=Y.toLowerCase();if(W){let H=W.indexOf(j);if(H!==-1)return H+Z}let V=Number(Y);if(!Number.isInteger(V)||V<Z||V>Q)throw Error(`Invalid cron value "${Y}" for range [${Z}-${Q}]`);return V}for(let Y of $.split(",")){if(Y==="*"){for(let H=Z;H<=Q;H+=1)J.add(H);continue}let j=Y.indexOf("/");if(j!==-1){let H=Y.slice(0,j),B=Number(Y.slice(j+1));if(!Number.isInteger(B)||B<1)throw Error(`Invalid step "${Y.slice(j+1)}"`);let G=Z,K=Q;if(H!=="*"){let F=H.indexOf("-");if(F!==-1)G=X(H.slice(0,F)),K=X(H.slice(F+1));else G=X(H)}if(G>K)throw Error(`Invalid cron range "${H}"`);for(let F=G;F<=K;F+=B)J.add(F);continue}let V=Y.indexOf("-");if(V!==-1){let H=X(Y.slice(0,V)),B=X(Y.slice(V+1));if(H>B)throw Error(`Invalid cron range "${Y}"`);for(let G=H;G<=B;G+=1)J.add(G);continue}J.add(X(Y))}return[...J].sort((Y,j)=>Y-j)}var cD=["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"],fj=["sun","mon","tue","wed","thu","fri","sat"];function h4($,Z,Q){let W=$[Z];if(typeof W!=="string")throw Error(`Invalid cron pattern "${Q}": missing field ${Z+1}`);return W}function jW($,Z){let Q=$[0];if(typeof Q!=="number")throw Error(`Invalid cron pattern: no values parsed for ${Z}`);return Q}function VW($){let Z=$.trim().split(/\s+/);if(Z.length!==5)throw Error(`Invalid cron pattern "${$}": expected 5 fields, got ${Z.length}`);return{minutes:y4(h4(Z,0,$),0,59),hours:y4(h4(Z,1,$),0,23),daysOfMonth:y4(h4(Z,2,$),1,31),months:y4(h4(Z,3,$),1,12,cD),daysOfWeek:y4(h4(Z,4,$),0,6,fj)}}function HW($){VW($)}function Uj($,Z,Q=Date.now()){i$($,Q,Z)}var Aj=new Map,uD=new Map(fj.map(($,Z)=>[$,Z]));function Dj($){let Z=$?.trim();return Z?Z:void 0}function Lj($){let Z=Aj.get($);if(Z)return Z;let Q=new Intl.DateTimeFormat("en-US",{timeZone:$,calendar:"gregory",numberingSystem:"latn",year:"numeric",month:"2-digit",day:"2-digit",weekday:"short",hour:"2-digit",minute:"2-digit",hourCycle:"h23"});return Aj.set($,Q),Q}function dD($){let Z=Dj($);if(!Z)return;Lj(Z).format(new Date)}function lD($,Z){let Q=Lj(Z).formatToParts(new Date($)),W=new Map(Q.map((Y)=>[Y.type,Y.value])),J=W.get("weekday")?.toLowerCase().slice(0,3)??"",X=uD.get(J);if(X===void 0)throw Error(`Unable to resolve weekday for timezone "${Z}"`);return{month:Number(W.get("month")),dayOfMonth:Number(W.get("day")),dayOfWeek:X,hour:Number(W.get("hour")),minute:Number(W.get("minute"))}}function pD($){let Z=new Date($);return{month:Z.getMonth()+1,dayOfMonth:Z.getDate(),dayOfWeek:Z.getDay(),hour:Z.getHours(),minute:Z.getMinutes()}}function rD($,Z){return $.months.includes(Z.month)&&$.daysOfMonth.includes(Z.dayOfMonth)&&$.daysOfWeek.includes(Z.dayOfWeek)&&$.hours.includes(Z.hour)&&$.minutes.includes(Z.minute)}function iD($,Z,Q){let W=VW($),J=new Date(Z);J.setSeconds(0,0);let X=J.getTime()+60000,Y=new Date(Z);Y.setFullYear(Y.getFullYear()+4);let j=Y.getTime();while(X<=j){if(rD(W,lD(X,Q)))return X;X+=60000}throw Error(`No cron occurrence found within 4 years for pattern "${$}" in timezone "${Q}"`)}function i$($,Z,Q){let W=Dj(Q);if(W)return dD(W),iD($,Z,W);let J=VW($),X=new Date(Z);X.setSeconds(0,0),X=new Date(X.getTime()+60000);let Y=new Date(Z);Y.setFullYear(Y.getFullYear()+4);while(X<=Y){let{month:j,dayOfMonth:V,dayOfWeek:H,hour:B,minute:G}=pD(X.getTime());if(!J.months.includes(j)){let K=J.months.find((A)=>A>j)??jW(J.months,"months"),F=K<=j?1:0;X=new Date(X.getFullYear()+F,K-1,1,0,0,0,0);continue}if(!J.daysOfMonth.includes(V)||!J.daysOfWeek.includes(H)){X=new Date(X.getFullYear(),X.getMonth(),V+1,0,0,0,0);continue}if(!J.hours.includes(B)){let K=J.hours.find((A)=>A>B)??jW(J.hours,"hours"),F=K<=B?1:0;X=new Date(X.getFullYear(),X.getMonth(),X.getDate()+F,K,0,0,0);continue}if(!J.minutes.includes(G)){let K=J.minutes.find((A)=>A>G)??jW(J.minutes,"minutes"),F=K<=G?1:0;X=new Date(X.getFullYear(),X.getMonth(),X.getDate(),X.getHours()+F,K,0,0);continue}return X.getTime()}throw Error(`No cron occurrence found within 4 years for pattern "${$}"`)}import{randomUUID as k4}from"node:crypto";import{asOptionalString as g,asString as e,loadSqliteDb as aD,nowIso as L0}from"@cline/shared/db";import{resolveCronDbPath as sD}from"@cline/shared/storage";var nD=[`CREATE TABLE IF NOT EXISTS cron_specs (
|
|
41
41
|
spec_id TEXT PRIMARY KEY,
|
|
42
42
|
external_id TEXT NOT NULL,
|
|
43
43
|
source_path TEXT NOT NULL UNIQUE,
|
|
@@ -128,17 +128,17 @@ ${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
|
|
|
128
128
|
ON cron_specs(trigger_kind, enabled, next_run_at);`,`CREATE INDEX IF NOT EXISTS cron_specs_event_match_idx
|
|
129
129
|
ON cron_specs(trigger_kind, event_type, enabled);`,`CREATE INDEX IF NOT EXISTS cron_specs_parse_status_idx
|
|
130
130
|
ON cron_specs(parse_status, updated_at DESC);`,`CREATE INDEX IF NOT EXISTS cron_specs_source_path_idx
|
|
131
|
-
ON cron_specs(source_path);`];function
|
|
131
|
+
ON cron_specs(source_path);`];function _j($){$.exec("PRAGMA journal_mode = WAL;"),$.exec("PRAGMA busy_timeout = 5000;"),$.exec("PRAGMA foreign_keys = ON;");for(let Z of nD)$.exec(Z)}function f9($){if(!$)return;try{let Z=JSON.parse($);if(Z&&typeof Z==="object"&&!Array.isArray(Z))return Z}catch{}return}function BW($,Z={}){if(!$)return;try{let Q=JSON.parse($);if(!Array.isArray(Q))return;let W=Q.map((J)=>typeof J==="string"?J.trim():"").filter((J)=>J.length>0);if(Z.preserveEmpty)return W;return W.length>0?W:void 0}catch{return}}function n$($){if(typeof $==="number"&&Number.isFinite($))return $;if(typeof $==="bigint")return Number($);return}function j$($){return{specId:e($.spec_id),externalId:e($.external_id),sourcePath:e($.source_path),triggerKind:e($.trigger_kind),sourceMtimeMs:n$($.source_mtime_ms),sourceHash:g($.source_hash),parseStatus:e($.parse_status)==="invalid"?"invalid":"valid",parseError:g($.parse_error),enabled:Number($.enabled??0)===1,removed:Number($.removed??0)===1,title:e($.title),prompt:g($.prompt),workspaceRoot:g($.workspace_root),scheduleExpr:g($.schedule_expr),timezone:g($.timezone),eventType:g($.event_type),filters:f9(g($.filters_json)),debounceSeconds:n$($.debounce_seconds),dedupeWindowSeconds:n$($.dedupe_window_seconds),cooldownSeconds:n$($.cooldown_seconds),mode:g($.mode),systemPrompt:g($.system_prompt),providerId:g($.provider_id),modelId:g($.model_id),maxIterations:n$($.max_iterations),timeoutSeconds:n$($.timeout_seconds),maxParallel:n$($.max_parallel),tools:BW(g($.tools_json),{preserveEmpty:!0}),notesDirectory:g($.notes_directory),extensions:BW(g($.extensions_json),{preserveEmpty:!0}),source:g($.source),tags:BW(g($.tags_json)),metadata:f9(g($.metadata_json)),revision:Number($.revision??1),lastMaterializedRunId:g($.last_materialized_run_id),lastRunAt:g($.last_run_at),nextRunAt:g($.next_run_at),createdAt:e($.created_at),updatedAt:e($.updated_at)}}function GW($){return{runId:e($.run_id),specId:e($.spec_id),specRevision:Number($.spec_revision??1),triggerKind:e($.trigger_kind),status:e($.status),claimToken:g($.claim_token),claimStartedAt:g($.claim_started_at),claimUntilAt:g($.claim_until_at),scheduledFor:g($.scheduled_for),triggerEventId:g($.trigger_event_id),startedAt:g($.started_at),completedAt:g($.completed_at),sessionId:g($.session_id),reportPath:g($.report_path),error:g($.error),attemptCount:Number($.attempt_count??0),createdAt:e($.created_at),updatedAt:e($.updated_at)}}function zj($){return{eventId:e($.event_id),eventType:e($.event_type),source:e($.source),subject:g($.subject),occurredAt:e($.occurred_at),receivedAt:e($.received_at),workspaceRoot:g($.workspace_root),dedupeKey:g($.dedupe_key),payload:f9(g($.payload_json)),attributes:f9(g($.attributes_json)),processingStatus:e($.processing_status),matchedSpecCount:Number($.matched_spec_count??0),queuedRunCount:Number($.queued_run_count??0),suppressedCount:Number($.suppressed_count??0),error:g($.error),createdAt:e($.created_at),updatedAt:e($.updated_at)}}function Tj($){return $?JSON.stringify($):null}var oD=["prompt","workspaceRoot","mode","systemPrompt","providerId","modelId","maxIterations","timeoutSeconds","maxParallel","tools","notesDirectory","extensions","source","scheduleExpr","timezone","eventType","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds"];function Oj($){if($===void 0)return null;if($&&typeof $==="object")return JSON.stringify($);return $}function tD($,Z,Q,W){for(let J of oD){let X=$[J],Y=Z[J];if(Oj(X)!==Oj(Y))return!0}if(Q===!1&&W===!0)return!0;return!1}function eD($){return($.split("/").pop()??$).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}function $L($){return`hub/schedules/${$}.cron.md`}function ZL($){let Z={...$.metadata??{},...$.createdBy?{__hubScheduleCreatedBy:$.createdBy}:{},...$.cwd?{__hubScheduleCwd:$.cwd}:{},...$.runtimeOptions?{__hubRuntimeOptions:$.runtimeOptions}:{}};return Object.keys(Z).length>0?Z:void 0}function KW($){return{triggerKind:"schedule",title:$.name.trim(),prompt:$.prompt,workspaceRoot:$.workspaceRoot.trim(),schedule:$.cronPattern.trim(),mode:$.mode??"act",systemPrompt:$.systemPrompt,modelSelection:$.modelSelection?JSON.parse(JSON.stringify($.modelSelection)):void 0,maxIterations:typeof $.maxIterations==="number"?Math.floor($.maxIterations):void 0,timeoutSeconds:typeof $.timeoutSeconds==="number"?Math.floor($.timeoutSeconds):void 0,maxParallel:typeof $.maxParallel==="number"?Math.max(1,Math.floor($.maxParallel)):1,source:"hub-schedule",tags:$.tags?.filter((Z)=>Z.trim().length>0),enabled:$.enabled!==!1,metadata:ZL($)}}function qj($){return JSON.stringify(KW($))}function QL($,Z){let Q=$.metadata?{...$.metadata}:{},W=Z.createdBy===null?void 0:Z.createdBy!==void 0?Z.createdBy:typeof Q.__hubScheduleCreatedBy==="string"?Q.__hubScheduleCreatedBy:void 0,J=Z.cwd!==void 0?Z.cwd:typeof Q.__hubScheduleCwd==="string"?Q.__hubScheduleCwd:void 0,X=Z.runtimeOptions!==void 0?Z.runtimeOptions:Q.__hubRuntimeOptions&&typeof Q.__hubRuntimeOptions==="object"&&!Array.isArray(Q.__hubRuntimeOptions)?Q.__hubRuntimeOptions:void 0;return delete Q.__hubScheduleCreatedBy,delete Q.__hubScheduleCwd,delete Q.__hubRuntimeOptions,{name:Z.name??$.title,cronPattern:Z.cronPattern??$.scheduleExpr??"",prompt:Z.prompt??$.prompt??"",workspaceRoot:Z.workspaceRoot??$.workspaceRoot??"",cwd:J,modelSelection:Z.modelSelection!==void 0?Z.modelSelection:$.providerId||$.modelId?{providerId:$.providerId??"",modelId:$.modelId??""}:void 0,enabled:Z.enabled??$.enabled,mode:Z.mode??($.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"),systemPrompt:Z.systemPrompt===null?void 0:Z.systemPrompt!==void 0?Z.systemPrompt:$.systemPrompt,maxIterations:Z.maxIterations===null?void 0:Z.maxIterations!==void 0?Z.maxIterations:$.maxIterations,timeoutSeconds:Z.timeoutSeconds===null?void 0:Z.timeoutSeconds!==void 0?Z.timeoutSeconds:$.timeoutSeconds,maxParallel:Z.maxParallel??$.maxParallel??1,createdBy:W,tags:Z.tags??$.tags,runtimeOptions:X,metadata:Z.metadata!==void 0?Z.metadata:Object.keys(Q).length>0?Q:void 0}}class I4{db;constructor($={}){let Z=$.dbPath??sD();this.db=aD(Z),_j(this.db)}close(){this.db.close?.()}getSpecBySourcePath($){let Z=this.db.prepare("SELECT * FROM cron_specs WHERE source_path = ?").get($);return Z?j$(Z):void 0}getSpec($){let Z=this.db.prepare("SELECT * FROM cron_specs WHERE spec_id = ?").get($);return Z?j$(Z):void 0}getSpecByExternalId($){let Z=this.db.prepare("SELECT * FROM cron_specs WHERE external_id = ? ORDER BY created_at ASC LIMIT 1").get($);return Z?j$(Z):void 0}listSpecs($={}){let Z=[],Q=[];if($.triggerKind)Z.push("trigger_kind = ?"),Q.push($.triggerKind);if(typeof $.enabled==="boolean")Z.push("enabled = ?"),Q.push($.enabled?1:0);if($.parseStatus)Z.push("parse_status = ?"),Q.push($.parseStatus);if(!$.includeRemoved)Z.push("removed = 0");let W=Z.length>0?`WHERE ${Z.join(" AND ")}`:"",J=Math.max(1,Math.floor($.limit??500));return this.db.prepare(`SELECT * FROM cron_specs ${W} ORDER BY created_at DESC LIMIT ?`).all(...Q,J).map((Y)=>j$(Y))}createHubSchedule($){let Z=`sched_${k4()}`,Q=this.upsertSpec({externalId:Z,sourcePath:$L(Z),triggerKind:"schedule",sourceHash:qj($),parseStatus:"valid",spec:KW($)});this.initializeScheduleNextRun(Q.record.specId);let W=this.getSpec(Q.record.specId);if(!W)throw Error("failed to create hub schedule");return W}getHubSchedule($){let Z=this.db.prepare(`SELECT * FROM cron_specs
|
|
132
132
|
WHERE external_id = ? AND source = 'hub-schedule' AND removed = 0
|
|
133
133
|
ORDER BY created_at ASC LIMIT 1`).get($);return Z?j$(Z):void 0}listHubSchedules($={}){let Z=["source = 'hub-schedule'","trigger_kind = 'schedule'","removed = 0"],Q=[];if(typeof $.enabled==="boolean")Z.push("enabled = ?"),Q.push($.enabled?1:0);if($.tags&&$.tags.length>0)for(let X of $.tags)Z.push("tags_json LIKE ?"),Q.push(`%"${X.trim()}"%`);let W=Math.max(1,Math.floor($.limit??200));return this.db.prepare(`SELECT * FROM cron_specs
|
|
134
134
|
WHERE ${Z.join(" AND ")}
|
|
135
|
-
ORDER BY created_at DESC LIMIT ?`).all(...Q,W).map((X)=>j$(X))}updateHubSchedule($,Z){let Q=this.getHubSchedule($);if(!Q)return;let W=
|
|
135
|
+
ORDER BY created_at DESC LIMIT ?`).all(...Q,W).map((X)=>j$(X))}updateHubSchedule($,Z){let Q=this.getHubSchedule($);if(!Q)return;let W=QL(Q,Z),J=this.upsertSpec({externalId:$,sourcePath:Q.sourcePath,triggerKind:"schedule",sourceHash:qj(W),parseStatus:"valid",spec:KW(W)});if(Z.cronPattern!==void 0||Z.enabled!==void 0)this.initializeScheduleNextRun(J.record.specId);return this.getSpec(J.record.specId)}deleteHubSchedule($){let Z=this.getHubSchedule($);if(!Z)return!1;return this.markSpecRemoved(Z.specId),this.cancelQueuedRunsForSpec(Z.specId),!0}enqueueHubScheduleRun($,Z="manual"){let Q=this.getHubSchedule($);if(!Q||!Q.enabled||Q.removed||Q.parseStatus!=="valid")return;return this.enqueueRun({specId:Q.specId,specRevision:Q.revision,triggerKind:Z,scheduledFor:L0()})}listEventSpecsForType($){return this.db.prepare(`SELECT * FROM cron_specs
|
|
136
136
|
WHERE trigger_kind = 'event'
|
|
137
137
|
AND event_type = ?
|
|
138
138
|
AND enabled = 1
|
|
139
139
|
AND removed = 0
|
|
140
140
|
AND parse_status = 'valid'
|
|
141
|
-
ORDER BY created_at ASC`).all($).map((Q)=>j$(Q))}upsertSpec($){let Z=
|
|
141
|
+
ORDER BY created_at ASC`).all($).map((Q)=>j$(Q))}upsertSpec($){let Z=L0(),Q=this.getSpecBySourcePath($.sourcePath),W=$.spec,J={title:W?.title??Q?.title??eD($.sourcePath),prompt:W?.prompt,workspaceRoot:W?.workspaceRoot,scheduleExpr:W?.triggerKind==="schedule"?W.schedule:void 0,timezone:W?.triggerKind==="schedule"?W.timezone:void 0,eventType:W?.triggerKind==="event"?W.event:void 0,filters:W?.triggerKind==="event"?W.filters:void 0,debounceSeconds:W?.triggerKind==="event"?W.debounceSeconds:void 0,dedupeWindowSeconds:W?.triggerKind==="event"?W.dedupeWindowSeconds:void 0,cooldownSeconds:W?.triggerKind==="event"?W.cooldownSeconds:void 0,mode:W?.mode,systemPrompt:W?.systemPrompt,providerId:W?.modelSelection?.providerId,modelId:W?.modelSelection?.modelId,maxIterations:W?.maxIterations,timeoutSeconds:W?.timeoutSeconds,maxParallel:W&&"maxParallel"in W?W.maxParallel:void 0,tools:W?.tools,notesDirectory:W?.notesDirectory,extensions:W?.extensions,source:W?.source},X=$.parseStatus==="valid"&&(W?.enabled??!0);if(!Q){let B=`cspec_${k4()}`;this.insertSpecRow(B,$,J,X,Z);let G=this.getSpec(B);if(!G)throw Error("failed to insert cron_spec row");return{record:G,created:!0,revisionChanged:!0}}let j=Q.sourceHash!==$.sourceHash&&tD(Q,J,Q.enabled,X),V=j?Q.revision+1:Q.revision;this.updateSpecRow(Q.specId,$,J,X,V,Z);let H=this.getSpec(Q.specId);if(!H)throw Error("failed to reload cron_spec after update");return{record:H,created:!1,revisionChanged:j}}insertSpecRow($,Z,Q,W,J){let X=Z.spec;this.db.prepare(`INSERT INTO cron_specs (
|
|
142
142
|
spec_id, external_id, source_path, trigger_kind,
|
|
143
143
|
source_mtime_ms, source_hash, parse_status, parse_error,
|
|
144
144
|
enabled, removed, title, prompt, workspace_root,
|
|
@@ -161,7 +161,7 @@ ${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
|
|
|
161
161
|
tools_json = ?, notes_directory = ?, extensions_json = ?, source = ?,
|
|
162
162
|
tags_json = ?, metadata_json = ?,
|
|
163
163
|
revision = ?, updated_at = ?
|
|
164
|
-
WHERE spec_id = ?`).run(Z.externalId,Z.triggerKind,Z.sourceMtimeMs??null,Z.sourceHash,Z.parseStatus,Z.parseError??null,W?1:0,Q.title??"",Q.prompt??null,Q.workspaceRoot??null,Q.scheduleExpr??null,Q.timezone??null,Q.eventType??null,Q.filters?JSON.stringify(Q.filters):null,Q.debounceSeconds??null,Q.dedupeWindowSeconds??null,Q.cooldownSeconds??null,Q.mode??null,Q.systemPrompt??null,Q.providerId??null,Q.modelId??null,Q.maxIterations??null,Q.timeoutSeconds??null,Q.maxParallel??null,Q.tools?JSON.stringify(Q.tools):null,Q.notesDirectory??null,Q.extensions?JSON.stringify(Q.extensions):null,Q.source??null,Y?.tags?JSON.stringify(Y.tags):null,Y?.metadata?JSON.stringify(Y.metadata):null,J,X,$)}markSpecRemoved($){this.db.prepare("UPDATE cron_specs SET removed = 1, enabled = 0, updated_at = ? WHERE spec_id = ?").run(
|
|
164
|
+
WHERE spec_id = ?`).run(Z.externalId,Z.triggerKind,Z.sourceMtimeMs??null,Z.sourceHash,Z.parseStatus,Z.parseError??null,W?1:0,Q.title??"",Q.prompt??null,Q.workspaceRoot??null,Q.scheduleExpr??null,Q.timezone??null,Q.eventType??null,Q.filters?JSON.stringify(Q.filters):null,Q.debounceSeconds??null,Q.dedupeWindowSeconds??null,Q.cooldownSeconds??null,Q.mode??null,Q.systemPrompt??null,Q.providerId??null,Q.modelId??null,Q.maxIterations??null,Q.timeoutSeconds??null,Q.maxParallel??null,Q.tools?JSON.stringify(Q.tools):null,Q.notesDirectory??null,Q.extensions?JSON.stringify(Q.extensions):null,Q.source??null,Y?.tags?JSON.stringify(Y.tags):null,Y?.metadata?JSON.stringify(Y.metadata):null,J,X,$)}markSpecRemoved($){this.db.prepare("UPDATE cron_specs SET removed = 1, enabled = 0, updated_at = ? WHERE spec_id = ?").run(L0(),$)}updateSpecNextRunAt($,Z){this.db.prepare("UPDATE cron_specs SET next_run_at = ?, updated_at = ? WHERE spec_id = ?").run(Z??null,L0(),$)}updateSpecLastRunAt($,Z){this.db.prepare("UPDATE cron_specs SET last_run_at = ?, updated_at = ? WHERE spec_id = ?").run(Z,L0(),$)}updateLastMaterializedRunId($,Z){this.db.prepare("UPDATE cron_specs SET last_materialized_run_id = ?, updated_at = ? WHERE spec_id = ?").run(Z,L0(),$)}initializeScheduleNextRun($){let Z=this.getSpec($);if(!Z||Z.triggerKind!=="schedule"||!Z.enabled||!Z.scheduleExpr){this.updateSpecNextRunAt($,void 0);return}let Q=new Date(i$(Z.scheduleExpr,Date.now(),Z.timezone)).toISOString();this.updateSpecNextRunAt($,Q)}materializeDueScheduleRun($){let Z=$.nowMs,Q=new Date(Z).toISOString();this.db.exec("BEGIN IMMEDIATE;");try{let W=this.db.prepare("SELECT * FROM cron_specs WHERE spec_id = ?").get($.specId);if(!W)return this.db.exec("COMMIT;"),{queued:!1};let J=j$(W);if(J.triggerKind!=="schedule"||!J.enabled||J.removed||J.parseStatus!=="valid"||!J.scheduleExpr)return this.db.exec("COMMIT;"),{queued:!1};let X=J.nextRunAt;if(!X){let V=new Date(i$(J.scheduleExpr,Z,J.timezone)).toISOString();return this.db.prepare("UPDATE cron_specs SET next_run_at = ?, updated_at = ? WHERE spec_id = ?").run(V,Q,J.specId),this.db.exec("COMMIT;"),{queued:!1,nextRunAt:V}}if(new Date(X).getTime()>Z)return this.db.exec("COMMIT;"),{queued:!1,nextRunAt:X};let Y=`crun_${k4()}`,j;try{j=new Date(i$(J.scheduleExpr,Z,J.timezone)).toISOString()}catch{j=void 0}return this.db.prepare(`INSERT INTO cron_runs (
|
|
165
165
|
run_id, spec_id, spec_revision, trigger_kind, status,
|
|
166
166
|
scheduled_for, trigger_event_id, attempt_count,
|
|
167
167
|
created_at, updated_at
|
|
@@ -170,22 +170,22 @@ ${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
|
|
|
170
170
|
last_run_at = ?,
|
|
171
171
|
next_run_at = ?,
|
|
172
172
|
updated_at = ?
|
|
173
|
-
WHERE spec_id = ?`).run(Y,Q,j??null,Q,J.specId),this.db.exec("COMMIT;"),{queued:!0,run:this.getRun(Y),nextRunAt:j}}catch(W){throw this.db.exec("ROLLBACK;"),W}}getRun($){let Z=this.db.prepare("SELECT * FROM cron_runs WHERE run_id = ?").get($);return Z?
|
|
173
|
+
WHERE spec_id = ?`).run(Y,Q,j??null,Q,J.specId),this.db.exec("COMMIT;"),{queued:!0,run:this.getRun(Y),nextRunAt:j}}catch(W){throw this.db.exec("ROLLBACK;"),W}}getRun($){let Z=this.db.prepare("SELECT * FROM cron_runs WHERE run_id = ?").get($);return Z?GW(Z):void 0}insertEventLog($,Z={}){let Q=L0(),W=Z.receivedAtIso??Q,J=$.eventId.trim();if(!J)throw Error("automation event requires eventId");let X=$.eventType.trim();if(!X)throw Error("automation event requires eventType");let Y=$.source.trim();if(!Y)throw Error("automation event requires source");let j=$.occurredAt.trim()||W,V=this.db.prepare(`INSERT OR IGNORE INTO cron_event_log (
|
|
174
174
|
event_id, event_type, source, subject,
|
|
175
175
|
occurred_at, received_at, workspace_root, dedupe_key,
|
|
176
176
|
payload_json, attributes_json, processing_status,
|
|
177
177
|
matched_spec_count, queued_run_count, suppressed_count,
|
|
178
178
|
error, created_at, updated_at
|
|
179
|
-
) VALUES (?,?,?,?, ?,?,?,?, ?,?,?, ?,?,?, ?,?,?)`).run(J,X,Y,$.subject?.trim()||null,j,W,$.workspaceRoot?.trim()||null,$.dedupeKey?.trim()||null,
|
|
179
|
+
) VALUES (?,?,?,?, ?,?,?,?, ?,?,?, ?,?,?, ?,?,?)`).run(J,X,Y,$.subject?.trim()||null,j,W,$.workspaceRoot?.trim()||null,$.dedupeKey?.trim()||null,Tj($.payload),Tj($.attributes),"received",0,0,0,null,Q,Q).changes??0,H=this.getEventLog(J);if(!H)throw Error("failed to insert cron_event_log row");return{record:H,created:V===1}}getEventLog($){let Z=this.db.prepare("SELECT * FROM cron_event_log WHERE event_id = ?").get($);return Z?zj(Z):void 0}listEventLogs($={}){let Z=[],Q=[];if($.eventType)Z.push("event_type = ?"),Q.push($.eventType);if($.source)Z.push("source = ?"),Q.push($.source);if($.processingStatus)Z.push("processing_status = ?"),Q.push($.processingStatus);let W=Z.length>0?`WHERE ${Z.join(" AND ")}`:"",J=Math.max(1,Math.floor($.limit??200));return this.db.prepare(`SELECT * FROM cron_event_log ${W}
|
|
180
180
|
ORDER BY received_at DESC, created_at DESC
|
|
181
|
-
LIMIT ?`).all(...Q,J).map((Y)=>
|
|
181
|
+
LIMIT ?`).all(...Q,J).map((Y)=>zj(Y))}updateEventLogProcessing($,Z){return(this.db.prepare(`UPDATE cron_event_log SET
|
|
182
182
|
processing_status = ?,
|
|
183
183
|
matched_spec_count = COALESCE(?, matched_spec_count),
|
|
184
184
|
queued_run_count = COALESCE(?, queued_run_count),
|
|
185
185
|
suppressed_count = COALESCE(?, suppressed_count),
|
|
186
186
|
error = ?,
|
|
187
187
|
updated_at = ?
|
|
188
|
-
WHERE event_id = ?`).run(Z.status,Z.matchedSpecCount??null,Z.queuedRunCount??null,Z.suppressedCount??null,Z.error??null,
|
|
188
|
+
WHERE event_id = ?`).run(Z.status,Z.matchedSpecCount??null,Z.queuedRunCount??null,Z.suppressedCount??null,Z.error??null,L0(),$).changes??0)===1}listRuns($={}){let Z=[],Q=[];if($.specId)Z.push("spec_id = ?"),Q.push($.specId);if($.status){let Y=Array.isArray($.status)?$.status:[$.status];if(Y.length>0){let j=Y.map(()=>"?").join(",");Z.push(`status IN (${j})`);for(let V of Y)Q.push(V)}}let W=Z.length>0?`WHERE ${Z.join(" AND ")}`:"",J=Math.max(1,Math.floor($.limit??200));return this.db.prepare(`SELECT * FROM cron_runs ${W} ORDER BY created_at DESC LIMIT ?`).all(...Q,J).map((Y)=>GW(Y))}hasRecentEventRunForDedupe($){return!!this.db.prepare(`SELECT r.run_id FROM cron_runs r
|
|
189
189
|
INNER JOIN cron_event_log e ON e.event_id = r.trigger_event_id
|
|
190
190
|
WHERE r.spec_id = ?
|
|
191
191
|
AND r.trigger_kind = 'event'
|
|
@@ -203,7 +203,7 @@ ${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
|
|
|
203
203
|
AND r.status = 'queued'
|
|
204
204
|
AND e.dedupe_key = ?
|
|
205
205
|
ORDER BY COALESCE(r.scheduled_for, r.created_at) DESC
|
|
206
|
-
LIMIT 1`).get($.specId,$.dedupeKey);return Z?
|
|
206
|
+
LIMIT 1`).get($.specId,$.dedupeKey);return Z?GW(Z):void 0}updateQueuedEventRunForDebounce($){let Z=L0();if((this.db.prepare(`UPDATE cron_runs SET
|
|
207
207
|
trigger_event_id = ?,
|
|
208
208
|
scheduled_for = ?,
|
|
209
209
|
updated_at = ?
|
|
@@ -212,12 +212,12 @@ ${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
|
|
|
212
212
|
AND status = 'queued'`).run($.triggerEventId,$.scheduledFor,Z,$.runId).changes??0)!==1)return;return this.getRun($.runId)}hasOneOffRunForRevision($,Z){return!!this.db.prepare(`SELECT run_id FROM cron_runs
|
|
213
213
|
WHERE spec_id = ? AND spec_revision = ?
|
|
214
214
|
AND trigger_kind = 'one_off'
|
|
215
|
-
LIMIT 1`).get($,Z)}enqueueRun($){let Z=`crun_${
|
|
215
|
+
LIMIT 1`).get($,Z)}enqueueRun($){let Z=`crun_${k4()}`,Q=L0();this.db.prepare(`INSERT INTO cron_runs (
|
|
216
216
|
run_id, spec_id, spec_revision, trigger_kind, status,
|
|
217
217
|
scheduled_for, trigger_event_id, attempt_count,
|
|
218
218
|
created_at, updated_at
|
|
219
219
|
) VALUES (?,?,?,?,?, ?,?,?, ?,?)`).run(Z,$.specId,$.specRevision,$.triggerKind,"queued",$.scheduledFor??null,$.triggerEventId??null,0,Q,Q),this.updateLastMaterializedRunId($.specId,Z);let W=this.getRun(Z);if(!W)throw Error("failed to insert cron_run row");return W}cancelQueuedRunsForSpec($){return this.db.prepare(`UPDATE cron_runs SET status = 'cancelled', updated_at = ?
|
|
220
|
-
WHERE spec_id = ? AND status = 'queued'`).run(
|
|
220
|
+
WHERE spec_id = ? AND status = 'queued'`).run(L0(),$).changes??0}claimDueRuns($){let Z=$.nowIso,Q=Math.max(1000,Math.floor($.leaseMs)),W=new Date(new Date(Z).getTime()+Q).toISOString(),J=Math.max(1,Math.floor($.limit??25)),X=[];this.db.exec("BEGIN IMMEDIATE;");try{let Y=this.db.prepare(`SELECT * FROM cron_runs
|
|
221
221
|
WHERE (
|
|
222
222
|
status = 'queued'
|
|
223
223
|
OR (
|
|
@@ -229,7 +229,7 @@ ${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
|
|
|
229
229
|
)
|
|
230
230
|
AND (scheduled_for IS NULL OR scheduled_for <= ?)
|
|
231
231
|
ORDER BY COALESCE(scheduled_for, created_at) ASC
|
|
232
|
-
LIMIT ?`).all(Z,Z,J);for(let j of Y){let V=e(j.run_id);if(!V)continue;let H=`cclaim_${
|
|
232
|
+
LIMIT ?`).all(Z,Z,J);for(let j of Y){let V=e(j.run_id);if(!V)continue;let H=`cclaim_${k4()}`;if((this.db.prepare(`UPDATE cron_runs SET
|
|
233
233
|
status = 'running',
|
|
234
234
|
claim_token = ?,
|
|
235
235
|
claim_started_at = ?,
|
|
@@ -251,7 +251,7 @@ ${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
|
|
|
251
251
|
AND completed_at IS NULL
|
|
252
252
|
)
|
|
253
253
|
)`).run(H,Z,W,Z,Z,V,Z).changes??0)!==1)continue;let G=this.getRun(V);if(!G)continue;X.push({run:G,claimToken:H,claimUntilAt:W})}this.db.exec("COMMIT;")}catch(Y){throw this.db.exec("ROLLBACK;"),Y}return X}renewClaim($,Z,Q){return(this.db.prepare(`UPDATE cron_runs SET claim_until_at = ?, updated_at = ?
|
|
254
|
-
WHERE run_id = ? AND claim_token = ?`).run(Q,
|
|
254
|
+
WHERE run_id = ? AND claim_token = ?`).run(Q,L0(),$,Z).changes??0)===1}completeRun($,Z){let Q=Z.completedAtIso??L0(),W=Z.claimToken?"WHERE run_id = ? AND claim_token = ?":"WHERE run_id = ?";return(this.db.prepare(`UPDATE cron_runs SET
|
|
255
255
|
status = ?,
|
|
256
256
|
session_id = COALESCE(?, session_id),
|
|
257
257
|
report_path = COALESCE(?, report_path),
|
|
@@ -261,7 +261,7 @@ ${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
|
|
|
261
261
|
claim_token = NULL,
|
|
262
262
|
claim_until_at = NULL,
|
|
263
263
|
updated_at = ?
|
|
264
|
-
${W}`).run(Z.status,Z.sessionId??null,Z.reportPath??null,Z.error??null,Q,Q,$,...Z.claimToken?[Z.claimToken]:[]).changes??0)>0}requeueRun($){let Z=
|
|
264
|
+
${W}`).run(Z.status,Z.sessionId??null,Z.reportPath??null,Z.error??null,Q,Q,$,...Z.claimToken?[Z.claimToken]:[]).changes??0)>0}requeueRun($){let Z=L0();return(this.db.prepare(`UPDATE cron_runs SET
|
|
265
265
|
status = 'queued',
|
|
266
266
|
claim_started_at = NULL,
|
|
267
267
|
claim_token = NULL,
|
|
@@ -273,9 +273,9 @@ ${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
|
|
|
273
273
|
error = ?,
|
|
274
274
|
scheduled_for = COALESCE(?, scheduled_for),
|
|
275
275
|
updated_at = ?
|
|
276
|
-
WHERE run_id = ? AND claim_token = ?`).run($.error??null,$.scheduledFor??null,Z,$.runId,$.claimToken).changes??0)>0}attachSessionIdToRun($,Z){this.db.prepare("UPDATE cron_runs SET session_id = ?, updated_at = ? WHERE run_id = ?").run(Z,T0(),$)}attachReportPathToRun($,Z){this.db.prepare("UPDATE cron_runs SET report_path = ?, updated_at = ? WHERE run_id = ?").run(Z,T0(),$)}}function T9($){return $?new Date($).getTime():void 0}function QT($){let Z=$.metadata?{...$.metadata}:void 0;if(Z)delete Z.__hubScheduleCreatedBy,delete Z.__hubScheduleCwd,delete Z.__hubRuntimeOptions;return Z}function D9($){let Z=$.metadata;return{scheduleId:$.externalId,name:$.title,cronPattern:$.scheduleExpr??"",prompt:$.prompt??"",workspaceRoot:$.workspaceRoot??"",cwd:typeof Z?.__hubScheduleCwd==="string"?Z.__hubScheduleCwd:void 0,modelSelection:$.providerId||$.modelId?{providerId:$.providerId??"",modelId:$.modelId??""}:void 0,enabled:$.enabled&&!$.removed&&$.parseStatus==="valid",mode:$.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act",systemPrompt:$.systemPrompt,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,maxParallel:$.maxParallel??1,createdAt:new Date($.createdAt).getTime(),updatedAt:new Date($.updatedAt).getTime(),nextRunAt:T9($.nextRunAt),lastRunAt:T9($.lastRunAt),createdBy:typeof Z?.__hubScheduleCreatedBy==="string"?Z.__hubScheduleCreatedBy:void 0,tags:$.tags,runtimeOptions:Z?.__hubRuntimeOptions&&typeof Z.__hubRuntimeOptions==="object"&&!Array.isArray(Z.__hubRuntimeOptions)?Z.__hubRuntimeOptions:void 0,metadata:QT($)}}function WT($){switch($){case"done":return"success";case"cancelled":return"aborted";case"running":return"running";case"queued":return"pending";default:return"failed"}}function KW($,Z){return{executionId:$.runId,scheduleId:Z,sessionId:$.sessionId,triggeredAt:new Date($.scheduledFor??$.createdAt).getTime(),startedAt:T9($.startedAt),endedAt:T9($.completedAt),status:WT($.status),errorMessage:$.error}}class Z8{store;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new x4({dbPath:$.dbPath}),this.materializer=new P4({store:this.store}),this.runner=new y4({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(VW($.cronPattern),!$.workspaceRoot?.trim())throw Error("workspaceRoot is required for schedules");return D9(this.store.createHubSchedule($))}getSchedule($){let Z=this.store.getHubSchedule($);return Z?D9(Z):void 0}listSchedules($={}){return this.store.listHubSchedules($).map((Z)=>D9(Z))}updateSchedule($,Z){if(Z.cronPattern!==void 0)VW(Z.cronPattern);let Q=this.store.getHubSchedule($);if(!Q)return;let W=Z.workspaceRoot!==void 0?Z.workspaceRoot.trim():Q.workspaceRoot;if((Z.enabled??Q.enabled)&&!W)throw Error("workspaceRoot is required for enabled schedules");let X=this.store.updateHubSchedule($,{...Z,scheduleId:$});return X?D9(X):void 0}deleteSchedule($){return this.store.deleteHubSchedule($)}pauseSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!1})}resumeSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!0})}async triggerScheduleNow($){let Z=this.store.enqueueHubScheduleRun($,"manual");if(!Z)return;await this.runner.tick();let Q=this.store.getRun(Z.runId)??Z;return KW(Q,$)}triggerScheduleNowDetached($){let Z=this.store.enqueueHubScheduleRun($,"manual");if(!Z)return;return this.runner.tick().catch(()=>{return}),KW(Z,$)}listScheduleExecutions($){let Z=$.scheduleId?this.store.getHubSchedule($.scheduleId):void 0,Q={specId:Z?.specId,limit:$.limit};return this.store.listRuns(Q).map((J)=>{let X=Z??this.store.getSpec(J.specId);if(!X||X.source!=="hub-schedule")return;return KW(J,X.externalId)}).filter((J)=>{if(!J)return!1;return!$.status||J.status===$.status})}getScheduleStats($){let Z=this.listScheduleExecutions({scheduleId:$,limit:1e4});if(Z.length===0)return{totalRuns:0,successRate:0,avgDurationSeconds:0};let Q=0,W=0,J=0,X;for(let Y of Z){if(Y.status==="success"||Y.status==="completed")Q+=1;if(!X&&Y.status!=="success"&&Y.status!=="completed")X=Y;if(Y.startedAt&&Y.endedAt)J+=Y.endedAt-Y.startedAt,W+=1}return{totalRuns:Z.length,successRate:Q/Z.length,avgDurationSeconds:W>0?J/W/1000:0,lastFailure:X}}getActiveExecutions(){return this.runner.getActiveRuns().flatMap(($)=>{let Z=this.store.getSpec($.specId);if(!Z||Z.source!=="hub-schedule"||!$.sessionId)return[];return[{executionId:$.runId,scheduleId:Z.externalId,sessionId:$.sessionId,startedAt:$.startedAt??new Date().toISOString(),timeoutAt:Z.timeoutSeconds&&$.startedAt?new Date(new Date($.startedAt).getTime()+Z.timeoutSeconds*1000).toISOString():void 0}]})}getUpcomingRuns($=20){let Z={triggerKind:"schedule",enabled:!0,limit:$};return this.store.listSpecs(Z).flatMap((Q)=>Q.source==="hub-schedule"&&Q.nextRunAt?[{spec:Q,nextRunAt:Q.nextRunAt}]:[]).sort((Q,W)=>String(Q.nextRunAt).localeCompare(String(W.nextRunAt))).slice(0,$).map(({spec:Q,nextRunAt:W})=>({scheduleId:Q.externalId,name:Q.title,nextRunAt:W}))}}c9();import{createSessionId as rL,isHubProtocolCompatible as iL,resolveClineBuildEnv as nL,resolveHubCommandTimeoutMs as aL}from"@cline/shared";var uj={};N(uj,{splitCoreSessionConfig:()=>i4,isSessionNotFoundError:()=>I1,SessionNotFoundError:()=>k1,SESSION_NOT_FOUND_ERROR_CODE:()=>s$});var s$="session_not_found";class k1 extends Error{sessionId;code="session_not_found";constructor($,Z){super(Z??($?`session not found: ${$}`:"session not found"));this.sessionId=$;this.name="SessionNotFoundError"}}function I1($){return $ instanceof k1||typeof $==="object"&&$!==null&&"code"in $&&$.code==="session_not_found"}function i4($){let{hooks:Z,logger:Q,telemetry:W,extensionContext:J,extraTools:X,extensions:Y,onTeamEvent:j,onConsecutiveMistakeLimitReached:V,checkpoint:H,compaction:B,...G}=$,K={};if(Z)K.hooks=Z;if(Q)K.logger=Q;if(W)K.telemetry=W;if(J)K.extensionContext=J;if(X)K.extraTools=X;if(Y)K.extensions=Y;if(j)K.onTeamEvent=j;if(V)K.onConsecutiveMistakeLimitReached=V;if(H?.createCheckpoint)K.checkpoint=H;if(B?.compact)K.compaction=B;let F=Object.keys(K).length>0?K:void 0;return{config:{...G,...H?{checkpoint:{enabled:H.enabled}}:{},...B?{compaction:{enabled:B.enabled,strategy:B.strategy,thresholdRatio:B.thresholdRatio,reserveTokens:B.reserveTokens,preserveRecentTokens:B.preserveRecentTokens,maxInputTokens:B.maxInputTokens,summarizer:B.summarizer}}:{}},...F?{localRuntime:F}:{}}}import{spawn as qL}from"node:child_process";import{closeSync as ML,mkdirSync as RL,openSync as EL}from"node:fs";import{basename as NL,dirname as CL,join as wL}from"node:path";import{fileURLToPath as PL}from"node:url";import{CLINE_RUN_AS_HUB_DAEMON_ENV as SL,isHubDaemonProcess as QV,isHubProtocolCompatible as bL,resolveClineBuildEnv as WV,withResolvedClineBuildEnv as yL}from"@cline/shared";import{createHash as eT,randomBytes as $L}from"node:crypto";import{existsSync as ZL}from"node:fs";import{chmod as QL,mkdir as DW,readFile as ij,rm as TW,writeFile as nj}from"node:fs/promises";import{dirname as aj,join as LW}from"node:path";import{resolveClineDataDir as o$,resolveClineDir as sj}from"@cline/shared/storage";var lj="0.0.53";var n4={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:lj,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 WL="CLINE_HUB_DISCOVERY_PATH",JL="CLINE_HUB_BUILD_ID",pj=30000,XL=15000,YL=100;function jL($){return $.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function VL($){return eT("sha256").update($).digest("hex").slice(0,12)}function HL($){if(!Number.isInteger($)||!$||$<=0)return!1;try{return process.kill($,0),!0}catch(Z){return Z instanceof Error&&"code"in Z?String(Z.code)==="EPERM":!1}}function u9(){return $L(32).toString("hex")}function BL($){return new Promise((Z)=>setTimeout(Z,$))}function GL($){return`${$}.lock`}async function KL($){try{let Z=JSON.parse(await ij(LW($,"owner.json"),"utf8"));if(typeof Z.pid!=="number"||typeof Z.acquiredAt!=="string")return;return{pid:Z.pid,acquiredAt:Z.acquiredAt}}catch{return}}async function rj($){await TW($,{recursive:!0,force:!0}).catch(()=>{return})}function d9(){return process.env[JL]?.trim()||String(n4.version)}function x1($=process.argv[1]?.trim()||process.cwd()){let Z=`hub-${VL($)}`,Q=process.env[WL]?.trim()||LW(o$(),"locks","hub","owners",`${jL(Z)}.json`);return{ownerId:Z,discoveryPath:Q}}function oj($=`hub-${Date.now().toString(36)}`){return x1($)}async function K0($){try{let Z=JSON.parse(await ij($,"utf8"));if(typeof Z.hubId!=="string"||typeof Z.protocolVersion!=="string"||typeof Z.authToken!=="string"||typeof Z.host!=="string"||typeof Z.port!=="number"||typeof Z.url!=="string"||typeof Z.startedAt!=="string"||typeof Z.updatedAt!=="string")return;return{hubId:Z.hubId,protocolVersion:Z.protocolVersion,minClientProtocolVersion:typeof Z.minClientProtocolVersion==="string"?Z.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof Z.maxClientProtocolVersion==="string"?Z.maxClientProtocolVersion:void 0,capabilities:Array.isArray(Z.capabilities)?Z.capabilities.filter((Q)=>typeof Q==="string"):void 0,coreVersion:typeof Z.coreVersion==="string"?Z.coreVersion:void 0,buildId:typeof Z.buildId==="string"?Z.buildId:void 0,authToken:Z.authToken,host:Z.host,port:Z.port,url:Z.url,pid:typeof Z.pid==="number"?Z.pid:void 0,startedAt:Z.startedAt,updatedAt:Z.updatedAt}}catch{return}}async function l9($,Z){await DW(aj($),{recursive:!0}),await TW($,{force:!0}).catch(()=>{return}),await nj($,`${JSON.stringify(Z,null,2)}
|
|
277
|
-
`,{encoding:"utf8",mode:384}),await
|
|
278
|
-
`,"utf8");try{return await Z()}finally{await rj(Q)}}catch(J){if((J instanceof Error&&"code"in J?String(J.code):"")!=="EEXIST")throw J;let Y=await KL(Q),j=Y?Date.now()-Date.parse(Y.acquiredAt):pj+1;if(!Y||!HL(Y.pid)||j>pj){await rj(Q);continue}if(Date.now()>=W)throw Error(`Timed out waiting for hub startup lock ${Q}`);await BL(YL)}}async function g1($,Z){try{let Q=await fetch(Z?.authToken?_W($):r9($),{headers:Z?.authToken?{authorization:`Bearer ${Z.authToken}`}:void 0});if(!Q.ok)return;let W=await Q.json();if(typeof W.protocolVersion!=="string"||typeof W.host!=="string"||typeof W.port!=="number"||typeof W.url!=="string")return;return{protocolVersion:W.protocolVersion,minClientProtocolVersion:typeof W.minClientProtocolVersion==="string"?W.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof W.maxClientProtocolVersion==="string"?W.maxClientProtocolVersion:void 0,capabilities:Array.isArray(W.capabilities)?W.capabilities.filter((J)=>typeof J==="string"):void 0,coreVersion:typeof W.coreVersion==="string"?W.coreVersion:void 0,buildId:typeof W.buildId==="string"?W.buildId:void 0,host:W.host,port:W.port,url:W.url,hubId:typeof W.hubId==="string"?W.hubId:void 0,authToken:typeof W.authToken==="string"?W.authToken:void 0,pid:typeof W.pid==="number"?W.pid:void 0,startedAt:typeof W.startedAt==="string"?W.startedAt:void 0,updatedAt:typeof W.updatedAt==="string"?W.updatedAt:void 0}}catch{return}}function Z1($,Z,Q="/hub"){return new URL(`ws://${$}:${Z}${Q}`).toString()}function r9($){let Z=new URL($);return Z.protocol=Z.protocol==="wss:"?"https:":"http:",Z.pathname="/health",Z.search="",Z.toString()}function _W($){let Z=new URL(r9($));return Z.pathname="/status",Z.toString()}function tj($){return ZL($)}import{CLINE_HUB_DEV_PORT as FL,CLINE_HUB_PORT as AL,resolveClineBuildEnv as fL}from"@cline/shared";var UL="CLINE_HUB_HOST",DL="CLINE_HUB_PORT",TL="CLINE_HUB_PATHNAME",zW="127.0.0.1",OW=AL,qW="/hub";function ej($){return fL($)==="development"?FL:OW}function MW($={}){return($.env??process.env)[UL]?.trim()||zW}function H8($={}){let Q=($.env??process.env)[DL]?.trim();if(!Q)return ej($);let W=Number.parseInt(Q,10);if(!Number.isInteger(W)||W<1||W>65535)return ej($);return W}function RW($={}){return($.env??process.env)[TL]?.trim()||qW}function G1($={},Z={}){return{host:$.host??MW(Z),port:$.port??H8(Z),pathname:$.pathname??RW(Z)}}import{join as LL}from"node:path";var _L="shared:cline",zL="CLINE_HUB_DISCOVERY_PATH",OL="hub-production";function $V($){let Z=N1($.trim());return x1(`workspace:${Z||$.trim()}`)}function Q1($=_L){return x1($)}function K1(){return{ownerId:OL,discoveryPath:process.env[zL]?.trim()||LL(o$(),"locks","hub","production.json")}}var hL=8000,kL=200,IL=3000,xL=100,gL=[100,250,500,1000,2000],mL="--cline-hub-daemon";function vL($){return[...$.host?["--host",$.host]:[],...typeof $.port==="number"?["--port",String($.port)]:[],...$.pathname?["--pathname",$.pathname]:[]]}function cL(){try{let $=wL(o$(),"logs","hub-daemon.log");return RL(CL($),{recursive:!0}),{fd:EL($,"a"),logPath:$}}catch{return}}function JV(){return WV()==="production"?K1():Q1()}function t$($){return bL($).compatible}function ZV($,Z,Q){if(!Z||Z.url!==Q)return $;return{...$,authToken:$.authToken??Z.authToken,pid:$.pid??Z.pid}}async function e$($,Z){try{return await g1($,{authToken:Z})}catch{return}}async function uL($,Z){let Q=Date.now()+Z;while(Date.now()<Q){if(!(await e$($))?.url)return!0;await new Promise((J)=>setTimeout(J,xL))}return!1}async function i9($,Z){if(await s4($.url,$.authToken).catch(()=>!1),$.pid)try{process.kill($.pid,"SIGTERM")}catch{}let Q=await uL($.url,IL);return await S0(Z).catch(()=>{return}),Q}async function a4($,Z){if(t$($))return!0;return i9($,Z)}async function XV($){if(WV()!=="production")return;let Z=Q1();if(Z.discoveryPath===$.discoveryPath)return;let Q=await K0(Z.discoveryPath);if(Q?.url)await i9(Q,Z.discoveryPath);else await S0(Z.discoveryPath).catch(()=>{return})}function dL(){let $=import.meta.url.endsWith(".ts")?"ts":"js";return PL(new URL(`./entry.${$}`,import.meta.url))}function lL($,Z){let Q=dL(),W=process.execPath?.trim();if(!W)throw Error("unable to resolve runtime executable for hub daemon");let J=NL(W).toLowerCase().includes("bun"),X=Q.startsWith("/$bunfs/"),Y=J&&Q.toLowerCase().endsWith(".ts"),j=X?[mL]:[...Y?["--conditions=development"]:[],Q];return{launcher:W,args:[...j,"--cwd",$,...vL(Z)],cwd:$,env:{...yL(process.env),CLINE_NO_INTERACTIVE:"1",[SL]:"1"}}}function pL($){if(!$||typeof $!=="object")return!1;if(("code"in $?$.code:void 0)==="ETXTBSY")return!0;let Q="message"in $?$.message:void 0;return typeof Q==="string"&&Q.includes("ETXTBSY")}function EW($,Z={}){if(QV())return;let Q=lL($,Z),W=cL();try{qL(Q.launcher,Q.args,{detached:!0,stdio:W?["ignore",W.fd,W.fd]:"ignore",env:Q.env,cwd:Q.cwd,windowsHide:!0}).unref()}finally{if(W)ML(W.fd)}}async function B8($,Z={}){for(let Q=0;;Q++)try{EW($,Z);return}catch(W){let J=gL[Q];if(!pL(W)||J===void 0)throw W;await new Promise((X)=>setTimeout(X,J))}}function n9($,Z={}){if(QV())return;let Q=JV(),W=G1(Z),J=Z1(W.host,W.port,W.pathname),X=Z.allowPortFallback===!0&&W.port!==0;XV(Q).catch(()=>{return}).then(()=>K0(Q.discoveryPath)).then(async(Y)=>{let j=!1;if(Y?.url)if(!Y.authToken){if(j=!0,!await i9(Y,Q.discoveryPath)&&!X)return}else{let B=await e$(Y.url,Y.authToken);if(B?.url&&t$(B)&&await F1(B.url,{authToken:Y.authToken}))return;if(B?.url)await a4({...B,authToken:Y.authToken},Q.discoveryPath);else await S0(Q.discoveryPath).catch(()=>{return})}let V=await e$(J);if(V?.url){if(t$(V)){if(!X||!j)return}else if(!await a4({...V,authToken:void 0},Q.discoveryPath)&&!X)return}let H=X?{...W,port:0}:W;await B8($,H)}).catch(()=>{})}async function YV($,Z={}){let Q=JV(),W=Z.host!==void 0||Z.port!==void 0||Z.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),J=G1(Z),X=Z1(J.host,J.port,J.pathname),Y=(F)=>{if(!W)B$(F.url,F.authToken);return F};await XV(Q).catch(()=>{return});let j=await K0(Q.discoveryPath),V=!1;if(j?.url){let F=j.authToken;if(!F)V=!0,await i9(j,Q.discoveryPath);else{let A=await e$(j.url,F);if(A?.url&&t$(A)&&await F1(A.url,{authToken:F}))return Y({url:A.url,authToken:F});if(A?.url)await a4({...A,authToken:F},Q.discoveryPath);else await S0(Q.discoveryPath).catch(()=>{return})}}let H=await e$(X);if(H?.url){let F=ZV(H,j,X);if(t$(H))throw Error(`A compatible Cline Hub is already running at ${X}, but its discovery record is missing or unreadable. Run 'cline doctor fix' to repair local hub discovery.${V?" This can happen immediately after upgrading from a build that wrote an empty hub auth token; run 'cline doctor fix' to stop the old daemon and repair local hub discovery.":""}`);if(!await a4(F,Q.discoveryPath)&&Z.allowPortFallback!==!0&&J.port!==0)throw Error(`An incompatible Cline Hub is already running at ${X} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}let G=Z.allowPortFallback===!0&&J.port!==0?{...J,port:0}:J;await B8($,G);let K=Date.now()+hL;while(Date.now()<K){let F=await K0(Q.discoveryPath);if(F?.url&&F.authToken){let D=await e$(F.url,F.authToken);if(D?.url&&t$(D)&&await F1(D.url,{authToken:F.authToken}))return Y({url:D.url,authToken:F.authToken})}let A=await e$(X);if(A?.url&&!t$(A)){let D=ZV(A,F,X);if(!await a4(D,Q.discoveryPath)&&Z.allowPortFallback!==!0&&J.port!==0)throw Error(`An incompatible Cline Hub is still running at ${X} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}await new Promise((D)=>setTimeout(D,kL))}throw Error("Timed out waiting for detached hub startup.")}function a9(){return nL()==="production"?K1():Q1()}function sL(){let $=globalThis.WebSocket;if(!$)throw Error("Global WebSocket is not available in this runtime. Node 22+ is required for hub mode.");return $}function GV($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString();if($ instanceof ArrayBuffer)return Buffer.from($).toString();if(Array.isArray($))return Buffer.concat($.map((Z)=>Buffer.from(Z))).toString();if($&&typeof $==="object"&&"data"in $&&typeof $.data<"u")return GV($.data);return String($)}function oL($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString("utf8");if($ instanceof ArrayBuffer)return Buffer.from($).toString("utf8");return""}function jV($){let Z=$,Q=oL(Z.reason);return new R0("hub_connection_closed",Z.code||Q?`Hub connection closed (code=${Z.code??0}${Q?`, reason=${Q}`:""})`:NW,{closeCode:Z.code,closeReason:Q||void 0})}function tL($,Z){if($ instanceof R0)return $;if($ instanceof Error)return new R0("hub_connect_failed",$.message);if($&&typeof $==="object"&&"error"in $&&$.error instanceof Error)return new R0("hub_connect_failed",$.error.message);let Q=$&&typeof $==="object"&&"message"in $&&typeof $.message==="string"?$.message.trim():"";if(Q)return new R0("hub_connect_failed",Q);let W=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return new R0("hub_connect_failed",W?`Failed to connect to hub at ${Z.toString()} (${W} event before socket open).`:`Failed to connect to hub at ${Z.toString()}.`)}var eL=8000,$_=200,VV="*",HV=8000,Z_="cline-hub-auth.",KV=new Map,FV=new Set,Q_=3000,W_=3000,J_=100,NW="Hub connection closed",X_=250,Y_=5000,BV=0.5;class R0 extends Error{code;details;constructor($,Z,Q){super(Z);this.code=$;this.details=Q;this.name="HubTransportError"}}function PW($){return $ instanceof R0}class G8 extends Error{command;code;constructor($,Z,Q){super(Q);this.command=$;this.code=Z;this.name="HubCommandError"}}function s9($,Z){return $ instanceof G8&&$.code==="hub_command_timeout"&&(Z===void 0||$.command===Z)}function AV($){let Z=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),Z)return Z;let Q=SW($.toString());return Q?KV.get(Q):void 0}function j_($){try{let Q=new URL($).hostname.toLowerCase().replace(/^\[|\]$/g,"");return Q==="localhost"||Q==="127.0.0.1"||Q==="::1"}catch{return!1}}function SW($){if(!j_($))return;let Z=new URL(G$($));return Z.search="",Z.hash="",Z.toString()}function CW($){let Z=SW($);return!!Z&&FV.has(Z)}function B$($,Z){let Q=SW($);if(Q){if(FV.add(Q),Z?.trim())KV.set(Q,Z)}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 R0("hub_connection_closed",NW);sawSocketClose=!1;registered=!1;constructor($){this.options=$;this.clientId=$.clientId??`core-${Math.random().toString(36).slice(2,10)}-${Date.now().toString(36)}`,this.currentUrl=$.url}getClientId(){return this.clientId}getUrl(){return this.currentUrl}async connect(){if(this.socket&&(this.socket.readyState===1||this.socket.readyState===0))return this.connectPromise??Promise.resolve();this.closedByClient=!1,this.clearReconnectTimer();let $=new URL(this.currentUrl),Z=this.options.authToken?.trim()||AV($);$.hash="";let W=new(sL())($.toString(),Z?[`${Z_}${Z}`]:void 0);this.socket=W;let J=!1;this.connectPromise=new Promise((X,Y)=>{let j=!1,V=setTimeout(()=>{if(j)return;j=!0,J=!0,this.lastCloseError=new R0("hub_connect_timeout",`Timed out connecting to hub after ${HV}ms`),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0;try{W.close()}catch{}Y(this.lastCloseError)},HV);W.addEventListener("open",()=>{if(j)return;j=!0,clearTimeout(V),X()}),W.addEventListener("error",(H)=>{if(j)return;j=!0,clearTimeout(V),this.lastCloseError=tL(H,$),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0,Y(this.lastCloseError)}),W.addEventListener("close",(H)=>{if(j)return;if(j=!0,clearTimeout(V),!J)this.lastCloseError=jV(H),this.sawSocketClose=!0;this.connectPromise=void 0,this.socket=void 0,Y(this.lastCloseError)})}),W.addEventListener("message",(X)=>{this.handleFrame(JSON.parse(GV(X)))}),W.addEventListener("close",(X)=>{if(this.socket!==W)return;if(!J)this.lastCloseError=jV(X),this.sawSocketClose=!0;this.registered=!1;for(let Y of this.pendingReplies.values())Y.reject(this.lastCloseError);if(this.pendingReplies.clear(),this.connectPromise=void 0,this.socket=void 0,!this.closedByClient&&this.hasActiveSubscriptions())this.scheduleReconnect()}),await this.connectPromise,await this.command("client.register",{clientId:this.clientId,clientType:this.options.clientType??"core",displayName:this.options.displayName??"core",transport:"native",actorKind:"client",workspaceContext:{workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}}),this.registered=!0;for(let X of this.subscriptionCounts.keys())this.sendSubscriptionFrame("stream.subscribe",this.subscriptionSessionIdFromKey(X));this.reconnectAttempt=0}subscribe($,Z){let Q=Z?.sessionId?.trim()||void 0,W={listener:$,sessionId:Q};return this.listeners.add(W),this.adjustSubscriptionCount(Q,1),()=>{if(!this.listeners.delete(W))return;this.adjustSubscriptionCount(Q,-1)}}async command($,Z,Q,W){let J=0,X=$!=="client.register"&&$!=="client.unregister";while(!0)try{return await this.commandOnce($,Z,Q,W)}catch(Y){if(!X||J>=1||!await this.recoverLocalHubTransport(Y))throw Y;J+=1}}async commandOnce($,Z,Q,W){await this.connect();let J=rL("hubreq_"),X=aL($,W?.timeoutMs),Y=new Promise((V,H)=>{let B=X===null?void 0:setTimeout(()=>{if(!this.pendingReplies.delete(J))return;H(new G8($,"hub_command_timeout",`Hub command ${$} timed out after ${X}ms (hub=${this.currentUrl}, requestId=${J}, clientId=${this.clientId}). Check hub-daemon.log for matching command.start/command.slow entries, or run 'cline doctor fix' to restart the hub.`))},X);this.pendingReplies.set(J,{resolve:(G)=>{if(B)clearTimeout(B);V(G)},reject:(G)=>{if(B)clearTimeout(B);H(G)}})});try{this.sendFrame({kind:"command",envelope:{version:"v1",command:$,requestId:J,clientId:this.clientId,sessionId:Q,timeoutMs:X,payload:Z}})}catch(V){throw this.pendingReplies.delete(J),V}let j=await Y;if(!j.ok){if(j.error?.code===s$){let V=Q??(typeof Z?.sessionId==="string"?Z.sessionId:void 0);throw new k1(V,j.error.message)}throw new G8($,j.error?.code,j.error?.message??`Hub command ${$} failed`)}return j}async recoverLocalHubTransport($){if(!CW(this.currentUrl)||!PW($))return!1;if(this.recoveryPromise)return await this.recoveryPromise;return this.recoveryPromise=(async()=>{let Z=await $2({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}).catch(()=>{return});if(!Z)return!1;return this.currentUrl=Z,this.close(),!0})().finally(()=>{this.recoveryPromise=void 0}),await this.recoveryPromise}hasActiveSubscriptions(){return this.subscriptionCounts.size>0}clearReconnectTimer(){if(!this.reconnectTimer)return;clearTimeout(this.reconnectTimer),this.reconnectTimer=void 0}scheduleReconnect(){if(this.reconnectTimer||this.closedByClient||!this.hasActiveSubscriptions())return;let $=Math.min(X_*2**this.reconnectAttempt,Y_),Z=Math.round($*(1-BV)+Math.random()*$*BV);this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=void 0,this.reconnectSubscribedTransport()},Z)}async reconnectSubscribedTransport(){if(this.closedByClient||!this.hasActiveSubscriptions())return;try{await this.connect(),this.reconnectAttempt=0}catch{if(!CW(this.currentUrl)){this.reconnectAttempt+=1,this.scheduleReconnect();return}try{let $=await $2({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 R0("hub_connection_closed",NW),this.sawSocketClose=!1;for(let Z of this.pendingReplies.values())Z.reject(this.lastCloseError);this.pendingReplies.clear(),this.connectPromise=void 0,this.socket=void 0;try{$.close()}catch{}}async dispose(){if(this.socket?.readyState===1&&this.registered)try{await this.command("client.unregister",void 0,void 0,{timeoutMs:2000})}catch{}this.close()}sendFrame($){if(!this.socket||this.socket.readyState!==1){if(this.lastCloseError.code==="hub_connection_closed"&&!this.sawSocketClose)throw new R0("hub_connection_not_open","Hub connection is not open.");throw this.lastCloseError}this.socket.send(JSON.stringify($))}sendSubscriptionFrame($,Z){this.sendFrame({kind:$,clientId:this.clientId,...Z?{sessionId:Z}:{}})}adjustSubscriptionCount($,Z){let Q=this.subscriptionKeyForSessionId($),W=(this.subscriptionCounts.get(Q)??0)+Z;if(W<=0){if(this.subscriptionCounts.delete(Q),!this.hasActiveSubscriptions())this.clearReconnectTimer();if(Z<0&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.unsubscribe",$);return}if(this.subscriptionCounts.set(Q,W),Z>0&&W===1&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.subscribe",$)}subscriptionKeyForSessionId($){return $??VV}subscriptionSessionIdFromKey($){return $===VV?void 0:$}handleFrame($){switch($.kind){case"reply":{let Z=$.envelope.requestId;if(!Z)return;let Q=this.pendingReplies.get(Z);if(!Q)return;this.pendingReplies.delete(Z),Q.resolve($.envelope);return}case"event":for(let Z of this.listeners){if(Z.sessionId&&Z.sessionId!==$.envelope.sessionId?.trim())continue;Z.listener($.envelope)}return;case"command":case"stream.subscribe":case"stream.unsubscribe":return}}}function G$($){let Z=new URL($);if(Z.protocol==="http:")Z.protocol="ws:";else if(Z.protocol==="https:")Z.protocol="wss:";return Z.toString()}async function F1($,Z){let Q=new W1({url:$,authToken:Z?.authToken,clientType:"hub-healthcheck",displayName:"hub healthcheck",workspaceRoot:Z?.workspaceRoot,cwd:Z?.cwd});try{return await Q.connect(),!0}catch{return!1}finally{Q.close()}}async function wW($,Z){let Q=G$($),W=await g1(Q,{authToken:Z?.authToken});if(!W)return{status:"unreachable",url:Q};if(!iL(W).compatible)return{status:"protocol_mismatch",url:Q};if(Z?.verifyConnection===!0&&!await F1(Q,{workspaceRoot:Z.workspaceRoot,cwd:Z.cwd,authToken:Z.authToken}))return{status:"unreachable",url:Q};return{status:"compatible",url:Q}}async function V_($){let Z=Date.now()+eL;while(Date.now()<Z){let Q=await K0($.discoveryPath);if(Q?.url){let W=await wW(Q.url,{verifyConnection:!0,authToken:Q.authToken});if(W.status==="compatible")return B$(W.url,Q.authToken)}await new Promise((W)=>setTimeout(W,$_))}return}async function H_($){let Z=Date.now()+W_;while(Date.now()<Z){if(!(await g1($).catch(()=>{return}))?.url)return!0;await new Promise((W)=>setTimeout(W,J_))}return!1}function B_($,Z){try{return G$($)===G$(Z)}catch{return!1}}function G_($){return($&&typeof $==="object"&&Array.isArray($.sessions)?$.sessions:[]).some((Q)=>{if(!Q||typeof Q!=="object")return!1;let W=Q;if(W.status==="running"||W.status==="idle"||W.status==="pending")return!0;return Array.isArray(W.participants)&&W.participants.length>0})}async function K_($,Z,Q){let W=new W1({url:$,authToken:Z,clientType:"hub-recovery-check",displayName:"hub recovery check",workspaceRoot:Q?.workspaceRoot,cwd:Q?.cwd});try{let J=await W.command("session.list",{limit:500},void 0,{timeoutMs:Q_});return!G_(J.payload)}catch{return!1}finally{await W.dispose().catch(()=>{return})}}async function o4($={}){if($.endpoint?.trim()){let J=await wW($.endpoint);return J.status==="compatible"?J.url:void 0}let Z=a9(),Q=await K0(Z.discoveryPath);if(!Q?.url)return;let W=await wW(Q.url,{authToken:Q.authToken});if(W.status==="compatible")return B$(W.url,Q.authToken);if(W.status==="protocol_mismatch")await S0(Z.discoveryPath).catch(()=>{return});return}async function $2($={}){let Z=await o4($);if(Z&&await F1(Z,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return Z;if($.endpoint?.trim())return;let Q=a9();return await B8($.workspaceRoot??process.cwd()),await V_(Q)}async function s4($,Z){let Q=new URL($),W=Z?.trim()||AV(Q);if(Q.protocol==="ws:")Q.protocol="http:";else if(Q.protocol==="wss:")Q.protocol="https:";return Q.pathname="/shutdown",Q.hash="",(await fetch(Q,{method:"POST",headers:W?{authorization:`Bearer ${W}`}:void 0})).ok}async function bW($=a9()){let Z=await K0($.discoveryPath);if(!Z?.url)return!1;try{if(await s4(Z.url,Z.authToken))return!0}catch{}return!1}async function o9($){if(!CW($.url))return;let Z=a9(),Q=await K0(Z.discoveryPath);if(!Q?.url||!B_(Q.url,$.url))return;if(!await K_(Q.url,Q.authToken,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return;if(!await bW())return;if(!await H_(Q.url))return;return await S0(Z.discoveryPath).catch(()=>{return}),await $2({workspaceRoot:$.workspaceRoot,cwd:$.cwd})}import{resolveClineBuildEnv as F_}from"@cline/shared";function A_($,Z){if($ instanceof Error)return $;if($&&typeof $==="object"&&"message"in $&&typeof $.message==="string"&&$.message.trim())return Error($.message.trim());let Q=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return Error(Q?`Failed to connect to hub at ${Z} (${Q} event before socket open).`:`Failed to connect to hub at ${Z}.`)}var f_="cline-hub-auth.";function U_($){return $.host!==void 0||$.port!==void 0||$.pathname!==void 0}function D_($,Z){let Q=new URL($),W=new URL(Z);return Q.search="",Q.hash="",W.search="",W.hash="",Q.toString()===W.toString()}function fV(){return F_()==="production"?K1():Q1()}async function T_($){let Z=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),Z)return Z;let Q=fV(),W=await K0(Q.discoveryPath);if(W?.url&&D_($.toString(),W.url))return W.authToken;return}async function yW($={}){let Z=G1($);if(!U_($)){let Q=fV(),W=await K0(Q.discoveryPath);if(W?.url)return W.url}return Z1(Z.host,Z.port,Z.pathname)}async function t9($){return await new Promise((Z,Q)=>{(async()=>{let W=new URL($),J=await T_(W);W.hash="";let X=new WebSocket(W.toString(),J?[`${f_}${J}`]:void 0),Y=new Map,j=0;X.addEventListener("open",()=>{Z({send(V){let H=V.requestId??`hub-client-${++j}`;return new Promise((B,G)=>{Y.set(H,{resolve:B,reject:G});let K={kind:"command",envelope:{...V,requestId:H}};X.send(JSON.stringify(K))})},close(){X.close()}})}),X.addEventListener("message",(V)=>{let H=JSON.parse(String(V.data));if(H.kind==="reply"&&H.envelope.requestId){let B=Y.get(H.envelope.requestId);if(B)Y.delete(H.envelope.requestId),B.resolve(H.envelope)}}),X.addEventListener("close",()=>{for(let V of Y.values())V.reject(Error("Hub connection closed"));Y.clear()}),X.addEventListener("error",(V)=>{Q(A_(V,$))})})().catch(Q)})}async function UV($){try{return(await t9($)).close(),!0}catch{return!1}}async function DV($,Z){let Q=await yW($),W=await t9(Q);try{return await W.send({version:Z.version??"v1",clientId:Z.clientId??"hub-client",...Z})}finally{W.close()}}function hW($){return $?JSON.parse(JSON.stringify($)):{}}function e9($){let Z=$?.session&&typeof $.session==="object"?$.session:void 0;if(!Z)return;let Q=Z.metadata&&typeof Z.metadata==="object"?hW(Z.metadata):void 0;return{sessionId:typeof Z.sessionId==="string"?Z.sessionId:"",parentSessionId:typeof Q?.parentSessionId==="string"?Q.parentSessionId:void 0,messagesPath:typeof Q?.messagesPath==="string"?Q.messagesPath:void 0,metadata:Q}}function TV($,Z){return $.error?.message??`hub command failed: ${Z}`}function L_($){let Z=hW($);if(typeof Z.error==="string"&&Z.error.trim())return{...Z,error:Z.error.trim()};let Q=Z.result&&typeof Z.result==="object"?Z.result:void 0;if(typeof Q?.text==="string"&&Q.text.trim())return{...Z,error:Q.text.trim()};let W=Q?.error&&typeof Q.error==="object"?Q.error:void 0;if(typeof W?.message==="string"&&W.message.trim())return{...Z,error:W.message.trim()};return Z}function LV($){let Z=$?.sessionId;return typeof Z==="string"&&Z.trim()?Z.trim():void 0}function __($){let Z=$?.checkpoint;if(!Z||typeof Z!=="object"||Array.isArray(Z))throw Error("hub checkpoint restore returned no checkpoint");let Q=Z;if(typeof Q.ref!=="string"||typeof Q.createdAt!=="number"||typeof Q.runCount!=="number")throw Error("hub checkpoint restore returned an invalid checkpoint");return Q}function z_($){let Z=hW($.payload);if($.event==="schedule.execution_completed")return{sessionId:$.sessionId?.trim()||LV(Z)||"",eventType:"schedule.execution.completed",payload:Z};if($.event==="schedule.execution_failed")return{sessionId:$.sessionId?.trim()||LV(Z)||"",eventType:"schedule.execution.failed",payload:Z};let Q=$.sessionId?.trim();if(!Q)return;switch($.event){case"iteration.started":return{sessionId:Q,eventType:"runtime.chat.iteration_start",payload:Z};case"iteration.finished":return{sessionId:Q,eventType:"runtime.chat.iteration_end",payload:Z};case"assistant.delta":return{sessionId:Q,eventType:"runtime.chat.text_delta",payload:Z};case"usage.updated":return{sessionId:Q,eventType:"runtime.chat.usage",payload:Z};case"tool.started":return{sessionId:Q,eventType:"runtime.chat.tool_call_start",payload:Z};case"tool.finished":return{sessionId:Q,eventType:"runtime.chat.tool_call_end",payload:Z};case"approval.requested":return{sessionId:Q,eventType:"approval.requested",payload:Z};case"run.aborted":return{sessionId:Q,eventType:"runtime.chat.aborted",payload:Z};case"run.failed":return{sessionId:Q,eventType:"runtime.chat.failed",payload:L_($.payload)};case"run.completed":return{sessionId:Q,eventType:"runtime.chat.completed",payload:Z};default:return}}class kW{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 Z=await this.client.command("session.create",{workspaceRoot:$.workspaceRoot,cwd:$.cwd,sessionConfig:{providerId:$.provider,modelId:$.model,apiKey:$.apiKey,cwd:$.cwd??$.workspaceRoot,workspaceRoot:$.workspaceRoot,systemPrompt:$.systemPrompt??"",mode:$.mode??"act",rules:$.rules,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,enableTools:$.enableTools,enableSpawnAgent:$.enableSpawn!==!1,enableAgentTeams:$.enableTeams!==!1,disableMcpSettingsTools:$.disableMcpSettingsTools,missionLogIntervalSteps:$.missionStepInterval,missionLogIntervalMs:$.missionTimeIntervalMs},metadata:{source:$.source??"cli",provider:$.provider,model:$.model,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,prompt:void 0,interactive:$.interactive!==!1},runtimeOptions:{mode:$.mode,systemPrompt:$.systemPrompt,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,autoApproveTools:$.autoApproveTools,toolExecutors:$.toolExecutors,configExtensions:$.configExtensions},modelSelection:{provider:$.provider,model:$.model,apiKey:$.apiKey},toolPolicies:$.toolPolicies}),Q=e9(Z.payload);if(!Q?.sessionId)throw Error("hub session create returned no session id");return{sessionId:Q.sessionId,startResult:{sessionId:Q.sessionId,manifestPath:"",messagesPath:Q.messagesPath??""}}}async sendRuntimeSession($,Z,Q){return await this.ensureMetadataApplied(),{result:(await this.client.command("session.send_input",{prompt:Z.prompt,mode:Z.config.mode,attachments:Z.attachments,delivery:Z.delivery,timeoutSeconds:Z.config.timeoutSeconds},$,Q)).payload?.result}}async stopRuntimeSession($){return await this.ensureMetadataApplied(),await this.client.command("session.detach",{sessionId:$},$),{applied:!0}}async abortRuntimeSession($){return await this.ensureMetadataApplied(),await this.client.command("run.abort",{sessionId:$},$),{applied:!0}}async updateSession($){return await this.ensureMetadataApplied(),await this.client.command("session.update",{sessionId:$.sessionId,metadata:$.metadata},$.sessionId),{updated:!0}}async getSession($){await this.ensureMetadataApplied();let Z;try{Z=await this.client.command("session.get",void 0,$)}catch(Q){if(I1(Q))return;throw Q}return e9(Z.payload)}async readMessages($){let Z=$.trim();if(!Z)return[];await this.ensureMetadataApplied();let Q=await this.client.command("session.messages",{sessionId:Z},Z);if(!Q.ok)throw Error(TV(Q,"session.messages"));let W=Q.payload?.messages;return Array.isArray(W)?W:[]}async restore($){let Z=$.sessionId.trim();if(!Z)throw Error("sessionId is required");let Q=$.restore?.messages!==!1;if(Q&&!$.config)throw Error("config is required when restore.messages is true");await this.ensureMetadataApplied();let W=$.config,J=await this.client.command("session.restore",{sessionId:Z,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...W?{workspaceRoot:W.workspaceRoot,cwd:W.cwd,sessionConfig:{providerId:W.provider,modelId:W.model,apiKey:W.apiKey,cwd:W.cwd??W.workspaceRoot,workspaceRoot:W.workspaceRoot,systemPrompt:W.systemPrompt??"",mode:W.mode??"act",rules:W.rules,maxIterations:W.maxIterations,enableTools:W.enableTools,enableSpawnAgent:W.enableSpawn!==!1,enableAgentTeams:W.enableTeams!==!1,disableMcpSettingsTools:W.disableMcpSettingsTools,missionLogIntervalSteps:W.missionStepInterval,missionLogIntervalMs:W.missionTimeIntervalMs},metadata:{source:W.source??"cli",provider:W.provider,model:W.model,enableTools:W.enableTools,enableSpawn:W.enableSpawn,enableTeams:W.enableTeams,prompt:void 0,interactive:W.interactive!==!1},runtimeOptions:{mode:W.mode,systemPrompt:W.systemPrompt,maxIterations:W.maxIterations,enableTools:W.enableTools,enableSpawn:W.enableSpawn,enableTeams:W.enableTeams,autoApproveTools:W.autoApproveTools,configExtensions:W.configExtensions},modelSelection:{provider:W.provider,model:W.model,apiKey:W.apiKey},toolPolicies:W.toolPolicies}:{}},Z);if(!J.ok)throw Error(TV(J,"session.restore"));let X=e9(J.payload);if(Q&&!X?.sessionId)throw Error("hub checkpoint restore returned no session id");let Y=Array.isArray(J.payload?.messages)?J.payload.messages:void 0,j=__(J.payload);return{sessionId:X?.sessionId,startResult:X?.sessionId?{sessionId:X.sessionId,manifestPath:"",messagesPath:X.messagesPath??""}:void 0,...Y?{messages:Y}:{},checkpoint:j}}async listSessions($){await this.ensureMetadataApplied();let Z=await this.client.command("session.list",{limit:$?.limit??200});return(Array.isArray(Z.payload?.sessions)?Z.payload?.sessions:[]).map((W)=>e9({session:W})).filter((W)=>Boolean(W?.sessionId))}async deleteSession($,Z=!0){return await this.ensureMetadataApplied(),(await this.client.command("session.delete",{sessionId:$,deleteCheckpointRefs:Z})).payload?.deleted===!0}async respondToolApproval($){await this.ensureMetadataApplied(),await this.client.command("approval.respond",{approvalId:$.approvalId,approved:$.approved,payload:$.reason?{reason:$.reason}:void 0,responderClientId:$.responderClientId})}streamEvents($,Z){let Q=new Set(($.sessionIds??[]).map((J)=>J.trim()).filter(Boolean)),W=this.client.subscribe((J)=>{let X=z_(J);if(!X)return;if(Q.size>0&&!Q.has(X.sessionId))return;Z.onEvent?.(X)});return this.ensureMetadataApplied().catch((J)=>{Z.onError?.(J instanceof Error?J:Error(String(J)))}),W}streamTeamProgress($,Z){let Q=this.client.subscribe((W)=>{if(W.event!=="team.progress"||!W.payload)return;Z.onProjection?.(W.payload)});return this.ensureMetadataApplied().catch((W)=>{Z.onError?.(W instanceof Error?W:Error(String(W)))}),Q}async createSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.create",$)).payload?.schedule}async listSchedules($){await this.ensureMetadataApplied();let Z=await this.client.command("schedule.list");return Array.isArray(Z.payload?.schedules)?Z.payload?.schedules:[]}async getSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.get",{scheduleId:$})).payload?.schedule}async updateSchedule($,Z){return await this.ensureMetadataApplied(),(await this.client.command("schedule.update",{scheduleId:$,...Z})).payload?.schedule}async pauseSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.disable",{scheduleId:$})).payload?.schedule}async resumeSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.enable",{scheduleId:$})).payload?.schedule}async deleteSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.delete",{scheduleId:$})).payload?.deleted===!0}async triggerScheduleNow($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.trigger",{scheduleId:$})).payload?.execution}async listScheduleExecutions($,Z){await this.ensureMetadataApplied();let Q=await this.client.command("schedule.list_executions",{scheduleId:$,limit:Z});return Array.isArray(Q.payload?.executions)?Q.payload?.executions:[]}async getScheduleStats(){return await this.ensureMetadataApplied(),(await this.client.command("schedule.stats")).payload?.stats}async getActiveScheduledExecutions(){await this.ensureMetadataApplied();let $=await this.client.command("schedule.active");return Array.isArray($.payload?.executions)?$.payload?.executions:[]}async getUpcomingScheduledRuns($){await this.ensureMetadataApplied();let Z=await this.client.command("schedule.upcoming",{limit:$});return Array.isArray(Z.payload?.upcoming)?Z.payload?.upcoming:[]}}class IW{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 Z=await this.client.command("session.list",{limit:$});return Array.isArray(Z.payload?.sessions)?Z.payload.sessions:[]}subscribeUI($){return this.client.subscribe((Z)=>{switch(Z.event){case"ui.notify":$.onNotify?.(Z.payload);break;case"ui.show_window":$.onShowWindow?.(Z.payload);break;case"hub.client.registered":$.onClientRegistered?.(Z.payload??{});break;case"hub.client.disconnected":$.onClientDisconnected?.(Z.payload??{});break;case"session.created":$.onSessionCreated?.(Z.payload??{});break;case"session.updated":$.onSessionUpdated?.(Z.payload??{});break;case"session.detached":$.onSessionDetached?.(Z.payload??{});break}})}}import{normalizeProviderId as aI}from"@cline/llms";var JU={};N(JU,{LocalRuntimeHost:()=>_1});import{readdirSync as vI}from"node:fs";import{homedir as cI}from"node:os";import{isAbsolute as uI,join as kY,resolve as IY}from"node:path";import{captureSdkError as p2,createSessionId as dI,isLikelyAuthError as lI,normalizeUserInput as pI}from"@cline/shared";import{setHomeDirIfUnset as rI}from"@cline/shared/storage";var nV={};N(nV,{saveProviderOAuthCredentials:()=>W2,resolveProviderApiKeyFromSettings:()=>nW,loginAndSaveProviderOAuthCredentials:()=>X6,isOAuthProvider:()=>Q2,getProviderOAuthCredentialsFromSettings:()=>Y6,getProviderAuthStorageId:()=>iW,getProviderAuthHandler:()=>j0,getPersistedProviderApiKey:()=>D8,formatProviderOAuthApiKey:()=>aW});import{getClineEnvironmentConfig as rV}from"@cline/shared";L0();var wV={};N(wV,{startClineDeviceAuth:()=>uW,refreshClineToken:()=>WZ,loginClineOAuth:()=>t4,getValidClineCredentials:()=>e4,completeClineDeviceAuth:()=>dW});import{getClineEnvironmentConfig as xW}from"@cline/shared";var _V={};N(_V,{startLocalOAuthServer:()=>J1});function O_(){let $;return{promise:new Promise((Q)=>{$=Q}),resolve:$}}async function J1($){let Z=await import("node:http"),Q=$.host??"127.0.0.1",W=$.timeoutMs??300000,J=$.successHtml??q_,X=O_(),Y=!1,j=null,V=null,H=null,B=(F)=>{if(Y)return;Y=!0,X.resolve(F)},G=()=>{if(j)clearTimeout(j),j=null;let F=H;if(H=null,V)V.close(),V.closeAllConnections?.(),V=null;if(F!==null&&$.onClose)Promise.resolve($.onClose({host:Q,port:F})).catch(()=>{})},K=async()=>{return j=setTimeout(()=>{G(),B(null)},W),X.promise};for(let F of $.ports){let A=Z.createServer((f,T)=>{try{let U=new URL(f.url||"",`http://${Q}:${F}`);if(U.pathname!==$.callbackPath){T.statusCode=404,T.end("Not found");return}let z={url:U,code:U.searchParams.get("code")??void 0,state:U.searchParams.get("state")??void 0,provider:U.searchParams.get("provider")??void 0,error:U.searchParams.get("error")??void 0};if(z.error){T.statusCode=400,T.end(`Authentication failed: ${z.error}`),G(),B(z);return}if(!z.code){T.statusCode=400,T.end("Missing authorization code");return}if($.expectedState&&z.state!==$.expectedState){T.statusCode=400,T.end("State mismatch");return}T.statusCode=200,T.setHeader("Content-Type","text/html; charset=utf-8"),T.end(J),G(),B(z)}catch{T.statusCode=500,T.end("Internal error")}}),D=await new Promise((f)=>{let T=(U)=>{A.off("error",T),f({bound:!1,error:U})};A.once("error",T),A.listen(F,Q,()=>{A.off("error",T),V=A,f({bound:!0})})});if(D.error){if(D.error.code==="EADDRINUSE")continue;throw G(),D.error}if(D.bound){H=F;let f=`http://${Q}:${F}${$.callbackPath}`;if($.onListening)await Promise.resolve($.onListening({host:Q,port:F,callbackUrl:f})).catch(()=>{});return{callbackUrl:f,waitForCallback:K,cancelWait:()=>{G(),B(null)},close:()=>{G(),B(null)}}}}return{callbackUrl:"",waitForCallback:async()=>null,cancelWait:()=>{},close:()=>{}}}var q_=`<!DOCTYPE html>
|
|
276
|
+
WHERE run_id = ? AND claim_token = ?`).run($.error??null,$.scheduledFor??null,Z,$.runId,$.claimToken).changes??0)>0}attachSessionIdToRun($,Z){this.db.prepare("UPDATE cron_runs SET session_id = ?, updated_at = ? WHERE run_id = ?").run(Z,L0(),$)}attachReportPathToRun($,Z){this.db.prepare("UPDATE cron_runs SET report_path = ?, updated_at = ? WHERE run_id = ?").run(Z,L0(),$)}}function D9($){return $?new Date($).getTime():void 0}function WL($){let Z=$.metadata?{...$.metadata}:void 0;if(Z)delete Z.__hubScheduleCreatedBy,delete Z.__hubScheduleCwd,delete Z.__hubRuntimeOptions;return Z}function U9($){let Z=$.metadata;return{scheduleId:$.externalId,name:$.title,cronPattern:$.scheduleExpr??"",prompt:$.prompt??"",workspaceRoot:$.workspaceRoot??"",cwd:typeof Z?.__hubScheduleCwd==="string"?Z.__hubScheduleCwd:void 0,modelSelection:$.providerId||$.modelId?{providerId:$.providerId??"",modelId:$.modelId??""}:void 0,enabled:$.enabled&&!$.removed&&$.parseStatus==="valid",mode:$.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act",systemPrompt:$.systemPrompt,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,maxParallel:$.maxParallel??1,createdAt:new Date($.createdAt).getTime(),updatedAt:new Date($.updatedAt).getTime(),nextRunAt:D9($.nextRunAt),lastRunAt:D9($.lastRunAt),createdBy:typeof Z?.__hubScheduleCreatedBy==="string"?Z.__hubScheduleCreatedBy:void 0,tags:$.tags,runtimeOptions:Z?.__hubRuntimeOptions&&typeof Z.__hubRuntimeOptions==="object"&&!Array.isArray(Z.__hubRuntimeOptions)?Z.__hubRuntimeOptions:void 0,metadata:WL($)}}function JL($){switch($){case"done":return"success";case"cancelled":return"aborted";case"running":return"running";case"queued":return"pending";default:return"failed"}}function FW($,Z){return{executionId:$.runId,scheduleId:Z,sessionId:$.sessionId,triggeredAt:new Date($.scheduledFor??$.createdAt).getTime(),startedAt:D9($.startedAt),endedAt:D9($.completedAt),status:JL($.status),errorMessage:$.error}}class $8{store;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new I4({dbPath:$.dbPath}),this.materializer=new C4({store:this.store}),this.runner=new b4({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(HW($.cronPattern),!$.workspaceRoot?.trim())throw Error("workspaceRoot is required for schedules");return U9(this.store.createHubSchedule($))}getSchedule($){let Z=this.store.getHubSchedule($);return Z?U9(Z):void 0}listSchedules($={}){return this.store.listHubSchedules($).map((Z)=>U9(Z))}updateSchedule($,Z){if(Z.cronPattern!==void 0)HW(Z.cronPattern);let Q=this.store.getHubSchedule($);if(!Q)return;let W=Z.workspaceRoot!==void 0?Z.workspaceRoot.trim():Q.workspaceRoot;if((Z.enabled??Q.enabled)&&!W)throw Error("workspaceRoot is required for enabled schedules");let X=this.store.updateHubSchedule($,{...Z,scheduleId:$});return X?U9(X):void 0}deleteSchedule($){return this.store.deleteHubSchedule($)}pauseSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!1})}resumeSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!0})}async triggerScheduleNow($){let Z=this.store.enqueueHubScheduleRun($,"manual");if(!Z)return;await this.runner.tick();let Q=this.store.getRun(Z.runId)??Z;return FW(Q,$)}triggerScheduleNowDetached($){let Z=this.store.enqueueHubScheduleRun($,"manual");if(!Z)return;return this.runner.tick().catch(()=>{return}),FW(Z,$)}listScheduleExecutions($){let Z=$.scheduleId?this.store.getHubSchedule($.scheduleId):void 0,Q={specId:Z?.specId,limit:$.limit};return this.store.listRuns(Q).map((J)=>{let X=Z??this.store.getSpec(J.specId);if(!X||X.source!=="hub-schedule")return;return FW(J,X.externalId)}).filter((J)=>{if(!J)return!1;return!$.status||J.status===$.status})}getScheduleStats($){let Z=this.listScheduleExecutions({scheduleId:$,limit:1e4});if(Z.length===0)return{totalRuns:0,successRate:0,avgDurationSeconds:0};let Q=0,W=0,J=0,X;for(let Y of Z){if(Y.status==="success"||Y.status==="completed")Q+=1;if(!X&&Y.status!=="success"&&Y.status!=="completed")X=Y;if(Y.startedAt&&Y.endedAt)J+=Y.endedAt-Y.startedAt,W+=1}return{totalRuns:Z.length,successRate:Q/Z.length,avgDurationSeconds:W>0?J/W/1000:0,lastFailure:X}}getActiveExecutions(){return this.runner.getActiveRuns().flatMap(($)=>{let Z=this.store.getSpec($.specId);if(!Z||Z.source!=="hub-schedule"||!$.sessionId)return[];return[{executionId:$.runId,scheduleId:Z.externalId,sessionId:$.sessionId,startedAt:$.startedAt??new Date().toISOString(),timeoutAt:Z.timeoutSeconds&&$.startedAt?new Date(new Date($.startedAt).getTime()+Z.timeoutSeconds*1000).toISOString():void 0}]})}getUpcomingRuns($=20){let Z={triggerKind:"schedule",enabled:!0,limit:$};return this.store.listSpecs(Z).flatMap((Q)=>Q.source==="hub-schedule"&&Q.nextRunAt?[{spec:Q,nextRunAt:Q.nextRunAt}]:[]).sort((Q,W)=>String(Q.nextRunAt).localeCompare(String(W.nextRunAt))).slice(0,$).map(({spec:Q,nextRunAt:W})=>({scheduleId:Q.externalId,name:Q.title,nextRunAt:W}))}}v9();import{createSessionId as i_,isHubProtocolCompatible as n_,resolveClineBuildEnv as a_,resolveHubCommandTimeoutMs as s_}from"@cline/shared";var uj={};N(uj,{splitCoreSessionConfig:()=>r4,isSessionNotFoundError:()=>I1,SessionNotFoundError:()=>k1,SESSION_NOT_FOUND_ERROR_CODE:()=>a$});var a$="session_not_found";class k1 extends Error{sessionId;code="session_not_found";constructor($,Z){super(Z??($?`session not found: ${$}`:"session not found"));this.sessionId=$;this.name="SessionNotFoundError"}}function I1($){return $ instanceof k1||typeof $==="object"&&$!==null&&"code"in $&&$.code==="session_not_found"}function r4($){let{hooks:Z,logger:Q,telemetry:W,extensionContext:J,extraTools:X,extensions:Y,onTeamEvent:j,onConsecutiveMistakeLimitReached:V,checkpoint:H,compaction:B,...G}=$,K={};if(Z)K.hooks=Z;if(Q)K.logger=Q;if(W)K.telemetry=W;if(J)K.extensionContext=J;if(X)K.extraTools=X;if(Y)K.extensions=Y;if(j)K.onTeamEvent=j;if(V)K.onConsecutiveMistakeLimitReached=V;if(H?.createCheckpoint)K.checkpoint=H;if(B?.compact)K.compaction=B;let F=Object.keys(K).length>0?K:void 0;return{config:{...G,...H?{checkpoint:{enabled:H.enabled}}:{},...B?{compaction:{enabled:B.enabled,strategy:B.strategy,thresholdRatio:B.thresholdRatio,reserveTokens:B.reserveTokens,preserveRecentTokens:B.preserveRecentTokens,maxInputTokens:B.maxInputTokens,summarizer:B.summarizer}}:{}},...F?{localRuntime:F}:{}}}import{spawn as M_}from"node:child_process";import{closeSync as R_,mkdirSync as E_,openSync as N_}from"node:fs";import{basename as w_,dirname as C_,join as P_}from"node:path";import{fileURLToPath as S_}from"node:url";import{CLINE_RUN_AS_HUB_DAEMON_ENV as b_,isHubDaemonProcess as QV,isHubProtocolCompatible as y_,resolveClineBuildEnv as WV,withResolvedClineBuildEnv as h_}from"@cline/shared";import{createHash as $_,randomBytes as Z_}from"node:crypto";import{existsSync as Q_}from"node:fs";import{chmod as W_,mkdir as LW,readFile as ij,rm as _W,writeFile as nj}from"node:fs/promises";import{dirname as aj,join as zW}from"node:path";import{resolveClineDataDir as s$,resolveClineDir as sj}from"@cline/shared/storage";var lj="0.0.54";var i4={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:lj,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 J_="CLINE_HUB_DISCOVERY_PATH",X_="CLINE_HUB_BUILD_ID",pj=30000,Y_=15000,j_=100;function V_($){return $.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function H_($){return $_("sha256").update($).digest("hex").slice(0,12)}function B_($){if(!Number.isInteger($)||!$||$<=0)return!1;try{return process.kill($,0),!0}catch(Z){return Z instanceof Error&&"code"in Z?String(Z.code)==="EPERM":!1}}function c9(){return Z_(32).toString("hex")}function G_($){return new Promise((Z)=>setTimeout(Z,$))}function K_($){return`${$}.lock`}async function F_($){try{let Z=JSON.parse(await ij(zW($,"owner.json"),"utf8"));if(typeof Z.pid!=="number"||typeof Z.acquiredAt!=="string")return;return{pid:Z.pid,acquiredAt:Z.acquiredAt}}catch{return}}async function rj($){await _W($,{recursive:!0,force:!0}).catch(()=>{return})}function u9(){return process.env[X_]?.trim()||String(i4.version)}function x1($=process.argv[1]?.trim()||process.cwd()){let Z=`hub-${H_($)}`,Q=process.env[J_]?.trim()||zW(s$(),"locks","hub","owners",`${V_(Z)}.json`);return{ownerId:Z,discoveryPath:Q}}function oj($=`hub-${Date.now().toString(36)}`){return x1($)}async function K0($){try{let Z=JSON.parse(await ij($,"utf8"));if(typeof Z.hubId!=="string"||typeof Z.protocolVersion!=="string"||typeof Z.authToken!=="string"||typeof Z.host!=="string"||typeof Z.port!=="number"||typeof Z.url!=="string"||typeof Z.startedAt!=="string"||typeof Z.updatedAt!=="string")return;return{hubId:Z.hubId,protocolVersion:Z.protocolVersion,minClientProtocolVersion:typeof Z.minClientProtocolVersion==="string"?Z.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof Z.maxClientProtocolVersion==="string"?Z.maxClientProtocolVersion:void 0,capabilities:Array.isArray(Z.capabilities)?Z.capabilities.filter((Q)=>typeof Q==="string"):void 0,coreVersion:typeof Z.coreVersion==="string"?Z.coreVersion:void 0,buildId:typeof Z.buildId==="string"?Z.buildId:void 0,authToken:Z.authToken,host:Z.host,port:Z.port,url:Z.url,pid:typeof Z.pid==="number"?Z.pid:void 0,startedAt:Z.startedAt,updatedAt:Z.updatedAt}}catch{return}}async function d9($,Z){await LW(aj($),{recursive:!0}),await _W($,{force:!0}).catch(()=>{return}),await nj($,`${JSON.stringify(Z,null,2)}
|
|
277
|
+
`,{encoding:"utf8",mode:384}),await W_($,384)}async function S0($){await _W($,{force:!0}).catch(()=>{return})}async function l9($,Z){let Q=K_($);await LW(aj(Q),{recursive:!0});let W=Date.now()+Y_;while(!0)try{await LW(Q,{recursive:!1}),await nj(zW(Q,"owner.json"),`${JSON.stringify({pid:process.pid,acquiredAt:new Date().toISOString()},null,2)}
|
|
278
|
+
`,"utf8");try{return await Z()}finally{await rj(Q)}}catch(J){if((J instanceof Error&&"code"in J?String(J.code):"")!=="EEXIST")throw J;let Y=await F_(Q),j=Y?Date.now()-Date.parse(Y.acquiredAt):pj+1;if(!Y||!B_(Y.pid)||j>pj){await rj(Q);continue}if(Date.now()>=W)throw Error(`Timed out waiting for hub startup lock ${Q}`);await G_(j_)}}async function g1($,Z){try{let Q=await fetch(Z?.authToken?TW($):p9($),{headers:Z?.authToken?{authorization:`Bearer ${Z.authToken}`}:void 0});if(!Q.ok)return;let W=await Q.json();if(typeof W.protocolVersion!=="string"||typeof W.host!=="string"||typeof W.port!=="number"||typeof W.url!=="string")return;return{protocolVersion:W.protocolVersion,minClientProtocolVersion:typeof W.minClientProtocolVersion==="string"?W.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof W.maxClientProtocolVersion==="string"?W.maxClientProtocolVersion:void 0,capabilities:Array.isArray(W.capabilities)?W.capabilities.filter((J)=>typeof J==="string"):void 0,coreVersion:typeof W.coreVersion==="string"?W.coreVersion:void 0,buildId:typeof W.buildId==="string"?W.buildId:void 0,host:W.host,port:W.port,url:W.url,hubId:typeof W.hubId==="string"?W.hubId:void 0,authToken:typeof W.authToken==="string"?W.authToken:void 0,pid:typeof W.pid==="number"?W.pid:void 0,startedAt:typeof W.startedAt==="string"?W.startedAt:void 0,updatedAt:typeof W.updatedAt==="string"?W.updatedAt:void 0}}catch{return}}function Z1($,Z,Q="/hub"){return new URL(`ws://${$}:${Z}${Q}`).toString()}function p9($){let Z=new URL($);return Z.protocol=Z.protocol==="wss:"?"https:":"http:",Z.pathname="/health",Z.search="",Z.toString()}function TW($){let Z=new URL(p9($));return Z.pathname="/status",Z.toString()}function tj($){return Q_($)}import{CLINE_HUB_DEV_PORT as A_,CLINE_HUB_PORT as f_,resolveClineBuildEnv as U_}from"@cline/shared";var D_="CLINE_HUB_HOST",L_="CLINE_HUB_PORT",__="CLINE_HUB_PATHNAME",OW="127.0.0.1",qW=f_,MW="/hub";function ej($){return U_($)==="development"?A_:qW}function RW($={}){return($.env??process.env)[D_]?.trim()||OW}function V8($={}){let Q=($.env??process.env)[L_]?.trim();if(!Q)return ej($);let W=Number.parseInt(Q,10);if(!Number.isInteger(W)||W<1||W>65535)return ej($);return W}function EW($={}){return($.env??process.env)[__]?.trim()||MW}function G1($={},Z={}){return{host:$.host??RW(Z),port:$.port??V8(Z),pathname:$.pathname??EW(Z)}}import{join as z_}from"node:path";var T_="shared:cline",O_="CLINE_HUB_DISCOVERY_PATH",q_="hub-production";function $V($){let Z=N1($.trim());return x1(`workspace:${Z||$.trim()}`)}function Q1($=T_){return x1($)}function K1(){return{ownerId:q_,discoveryPath:process.env[O_]?.trim()||z_(s$(),"locks","hub","production.json")}}var k_=8000,I_=200,x_=3000,g_=100,m_=[100,250,500,1000,2000],v_="--cline-hub-daemon";function c_($){return[...$.host?["--host",$.host]:[],...typeof $.port==="number"?["--port",String($.port)]:[],...$.pathname?["--pathname",$.pathname]:[]]}function u_(){try{let $=P_(s$(),"logs","hub-daemon.log");return E_(C_($),{recursive:!0}),{fd:N_($,"a"),logPath:$}}catch{return}}function JV(){return WV()==="production"?K1():Q1()}function o$($){return y_($).compatible}function ZV($,Z,Q){if(!Z||Z.url!==Q)return $;return{...$,authToken:$.authToken??Z.authToken,pid:$.pid??Z.pid}}async function t$($,Z){try{return await g1($,{authToken:Z})}catch{return}}async function d_($,Z){let Q=Date.now()+Z;while(Date.now()<Q){if(!(await t$($))?.url)return!0;await new Promise((J)=>setTimeout(J,g_))}return!1}async function r9($,Z){if(await a4($.url,$.authToken).catch(()=>!1),$.pid)try{process.kill($.pid,"SIGTERM")}catch{}let Q=await d_($.url,x_);return await S0(Z).catch(()=>{return}),Q}async function n4($,Z){if(o$($))return!0;return r9($,Z)}async function XV($){if(WV()!=="production")return;let Z=Q1();if(Z.discoveryPath===$.discoveryPath)return;let Q=await K0(Z.discoveryPath);if(Q?.url)await r9(Q,Z.discoveryPath);else await S0(Z.discoveryPath).catch(()=>{return})}function l_(){let $=import.meta.url.endsWith(".ts")?"ts":"js";return S_(new URL(`./entry.${$}`,import.meta.url))}function p_($,Z){let Q=l_(),W=process.execPath?.trim();if(!W)throw Error("unable to resolve runtime executable for hub daemon");let J=w_(W).toLowerCase().includes("bun"),X=Q.startsWith("/$bunfs/"),Y=J&&Q.toLowerCase().endsWith(".ts"),j=X?[v_]:[...Y?["--conditions=development"]:[],Q];return{launcher:W,args:[...j,"--cwd",$,...c_(Z)],cwd:$,env:{...h_(process.env),CLINE_NO_INTERACTIVE:"1",[b_]:"1"}}}function r_($){if(!$||typeof $!=="object")return!1;if(("code"in $?$.code:void 0)==="ETXTBSY")return!0;let Q="message"in $?$.message:void 0;return typeof Q==="string"&&Q.includes("ETXTBSY")}function NW($,Z={}){if(QV())return;let Q=p_($,Z),W=u_();try{M_(Q.launcher,Q.args,{detached:!0,stdio:W?["ignore",W.fd,W.fd]:"ignore",env:Q.env,cwd:Q.cwd,windowsHide:!0}).unref()}finally{if(W)R_(W.fd)}}async function H8($,Z={}){for(let Q=0;;Q++)try{NW($,Z);return}catch(W){let J=m_[Q];if(!r_(W)||J===void 0)throw W;await new Promise((X)=>setTimeout(X,J))}}function i9($,Z={}){if(QV())return;let Q=JV(),W=G1(Z),J=Z1(W.host,W.port,W.pathname),X=Z.allowPortFallback===!0&&W.port!==0;XV(Q).catch(()=>{return}).then(()=>K0(Q.discoveryPath)).then(async(Y)=>{let j=!1;if(Y?.url)if(!Y.authToken){if(j=!0,!await r9(Y,Q.discoveryPath)&&!X)return}else{let B=await t$(Y.url,Y.authToken);if(B?.url&&o$(B)&&await F1(B.url,{authToken:Y.authToken}))return;if(B?.url)await n4({...B,authToken:Y.authToken},Q.discoveryPath);else await S0(Q.discoveryPath).catch(()=>{return})}let V=await t$(J);if(V?.url){if(o$(V)){if(!X||!j)return}else if(!await n4({...V,authToken:void 0},Q.discoveryPath)&&!X)return}let H=X?{...W,port:0}:W;await H8($,H)}).catch(()=>{})}async function YV($,Z={}){let Q=JV(),W=Z.host!==void 0||Z.port!==void 0||Z.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),J=G1(Z),X=Z1(J.host,J.port,J.pathname),Y=(F)=>{if(!W)B$(F.url,F.authToken);return F};await XV(Q).catch(()=>{return});let j=await K0(Q.discoveryPath),V=!1;if(j?.url){let F=j.authToken;if(!F)V=!0,await r9(j,Q.discoveryPath);else{let A=await t$(j.url,F);if(A?.url&&o$(A)&&await F1(A.url,{authToken:F}))return Y({url:A.url,authToken:F});if(A?.url)await n4({...A,authToken:F},Q.discoveryPath);else await S0(Q.discoveryPath).catch(()=>{return})}}let H=await t$(X);if(H?.url){let F=ZV(H,j,X);if(o$(H))throw Error(`A compatible Cline Hub is already running at ${X}, but its discovery record is missing or unreadable. Run 'cline doctor fix' to repair local hub discovery.${V?" This can happen immediately after upgrading from a build that wrote an empty hub auth token; run 'cline doctor fix' to stop the old daemon and repair local hub discovery.":""}`);if(!await n4(F,Q.discoveryPath)&&Z.allowPortFallback!==!0&&J.port!==0)throw Error(`An incompatible Cline Hub is already running at ${X} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}let G=Z.allowPortFallback===!0&&J.port!==0?{...J,port:0}:J;await H8($,G);let K=Date.now()+k_;while(Date.now()<K){let F=await K0(Q.discoveryPath);if(F?.url&&F.authToken){let L=await t$(F.url,F.authToken);if(L?.url&&o$(L)&&await F1(L.url,{authToken:F.authToken}))return Y({url:L.url,authToken:F.authToken})}let A=await t$(X);if(A?.url&&!o$(A)){let L=ZV(A,F,X);if(!await n4(L,Q.discoveryPath)&&Z.allowPortFallback!==!0&&J.port!==0)throw Error(`An incompatible Cline Hub is still running at ${X} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}await new Promise((L)=>setTimeout(L,I_))}throw Error("Timed out waiting for detached hub startup.")}function n9(){return a_()==="production"?K1():Q1()}function o_(){let $=globalThis.WebSocket;if(!$)throw Error("Global WebSocket is not available in this runtime. Node 22+ is required for hub mode.");return $}function GV($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString();if($ instanceof ArrayBuffer)return Buffer.from($).toString();if(Array.isArray($))return Buffer.concat($.map((Z)=>Buffer.from(Z))).toString();if($&&typeof $==="object"&&"data"in $&&typeof $.data<"u")return GV($.data);return String($)}function t_($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString("utf8");if($ instanceof ArrayBuffer)return Buffer.from($).toString("utf8");return""}function jV($){let Z=$,Q=t_(Z.reason);return new R0("hub_connection_closed",Z.code||Q?`Hub connection closed (code=${Z.code??0}${Q?`, reason=${Q}`:""})`:wW,{closeCode:Z.code,closeReason:Q||void 0})}function e_($,Z){if($ instanceof R0)return $;if($ instanceof Error)return new R0("hub_connect_failed",$.message);if($&&typeof $==="object"&&"error"in $&&$.error instanceof Error)return new R0("hub_connect_failed",$.error.message);let Q=$&&typeof $==="object"&&"message"in $&&typeof $.message==="string"?$.message.trim():"";if(Q)return new R0("hub_connect_failed",Q);let W=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return new R0("hub_connect_failed",W?`Failed to connect to hub at ${Z.toString()} (${W} event before socket open).`:`Failed to connect to hub at ${Z.toString()}.`)}var $z=8000,Zz=200,VV="*",HV=8000,Qz="cline-hub-auth.",KV=new Map,FV=new Set,Wz=3000,Jz=3000,Xz=100,wW="Hub connection closed",Yz=250,jz=5000,BV=0.5;class R0 extends Error{code;details;constructor($,Z,Q){super(Z);this.code=$;this.details=Q;this.name="HubTransportError"}}function SW($){return $ instanceof R0}class B8 extends Error{command;code;constructor($,Z,Q){super(Q);this.command=$;this.code=Z;this.name="HubCommandError"}}function a9($,Z){return $ instanceof B8&&$.code==="hub_command_timeout"&&(Z===void 0||$.command===Z)}function AV($){let Z=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),Z)return Z;let Q=bW($.toString());return Q?KV.get(Q):void 0}function Vz($){try{let Q=new URL($).hostname.toLowerCase().replace(/^\[|\]$/g,"");return Q==="localhost"||Q==="127.0.0.1"||Q==="::1"}catch{return!1}}function bW($){if(!Vz($))return;let Z=new URL(G$($));return Z.search="",Z.hash="",Z.toString()}function CW($){let Z=bW($);return!!Z&&FV.has(Z)}function B$($,Z){let Q=bW($);if(Q){if(FV.add(Q),Z?.trim())KV.set(Q,Z)}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 R0("hub_connection_closed",wW);sawSocketClose=!1;registered=!1;constructor($){this.options=$;this.clientId=$.clientId??`core-${Math.random().toString(36).slice(2,10)}-${Date.now().toString(36)}`,this.currentUrl=$.url}getClientId(){return this.clientId}getUrl(){return this.currentUrl}async connect(){if(this.socket&&(this.socket.readyState===1||this.socket.readyState===0))return this.connectPromise??Promise.resolve();this.closedByClient=!1,this.clearReconnectTimer();let $=new URL(this.currentUrl),Z=this.options.authToken?.trim()||AV($);$.hash="";let W=new(o_())($.toString(),Z?[`${Qz}${Z}`]:void 0);this.socket=W;let J=!1;this.connectPromise=new Promise((X,Y)=>{let j=!1,V=setTimeout(()=>{if(j)return;j=!0,J=!0,this.lastCloseError=new R0("hub_connect_timeout",`Timed out connecting to hub after ${HV}ms`),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0;try{W.close()}catch{}Y(this.lastCloseError)},HV);W.addEventListener("open",()=>{if(j)return;j=!0,clearTimeout(V),X()}),W.addEventListener("error",(H)=>{if(j)return;j=!0,clearTimeout(V),this.lastCloseError=e_(H,$),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0,Y(this.lastCloseError)}),W.addEventListener("close",(H)=>{if(j)return;if(j=!0,clearTimeout(V),!J)this.lastCloseError=jV(H),this.sawSocketClose=!0;this.connectPromise=void 0,this.socket=void 0,Y(this.lastCloseError)})}),W.addEventListener("message",(X)=>{this.handleFrame(JSON.parse(GV(X)))}),W.addEventListener("close",(X)=>{if(this.socket!==W)return;if(!J)this.lastCloseError=jV(X),this.sawSocketClose=!0;this.registered=!1;for(let Y of this.pendingReplies.values())Y.reject(this.lastCloseError);if(this.pendingReplies.clear(),this.connectPromise=void 0,this.socket=void 0,!this.closedByClient&&this.hasActiveSubscriptions())this.scheduleReconnect()}),await this.connectPromise,await this.command("client.register",{clientId:this.clientId,clientType:this.options.clientType??"core",displayName:this.options.displayName??"core",transport:"native",actorKind:"client",workspaceContext:{workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}}),this.registered=!0;for(let X of this.subscriptionCounts.keys())this.sendSubscriptionFrame("stream.subscribe",this.subscriptionSessionIdFromKey(X));this.reconnectAttempt=0}subscribe($,Z){let Q=Z?.sessionId?.trim()||void 0,W={listener:$,sessionId:Q};return this.listeners.add(W),this.adjustSubscriptionCount(Q,1),()=>{if(!this.listeners.delete(W))return;this.adjustSubscriptionCount(Q,-1)}}async command($,Z,Q,W){let J=0,X=$!=="client.register"&&$!=="client.unregister";while(!0)try{return await this.commandOnce($,Z,Q,W)}catch(Y){if(!X||J>=1||!await this.recoverLocalHubTransport(Y))throw Y;J+=1}}async commandOnce($,Z,Q,W){await this.connect();let J=i_("hubreq_"),X=s_($,W?.timeoutMs),Y=new Promise((V,H)=>{let B=X===null?void 0:setTimeout(()=>{if(!this.pendingReplies.delete(J))return;H(new B8($,"hub_command_timeout",`Hub command ${$} timed out after ${X}ms (hub=${this.currentUrl}, requestId=${J}, clientId=${this.clientId}). Check hub-daemon.log for matching command.start/command.slow entries, or run 'cline doctor fix' to restart the hub.`))},X);this.pendingReplies.set(J,{resolve:(G)=>{if(B)clearTimeout(B);V(G)},reject:(G)=>{if(B)clearTimeout(B);H(G)}})});try{this.sendFrame({kind:"command",envelope:{version:"v1",command:$,requestId:J,clientId:this.clientId,sessionId:Q,timeoutMs:X,payload:Z}})}catch(V){throw this.pendingReplies.delete(J),V}let j=await Y;if(!j.ok){if(j.error?.code===a$){let V=Q??(typeof Z?.sessionId==="string"?Z.sessionId:void 0);throw new k1(V,j.error.message)}throw new B8($,j.error?.code,j.error?.message??`Hub command ${$} failed`)}return j}async recoverLocalHubTransport($){if(!CW(this.currentUrl)||!SW($))return!1;if(this.recoveryPromise)return await this.recoveryPromise;return this.recoveryPromise=(async()=>{let Z=await e$({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}).catch(()=>{return});if(!Z)return!1;return this.currentUrl=Z,this.close(),!0})().finally(()=>{this.recoveryPromise=void 0}),await this.recoveryPromise}hasActiveSubscriptions(){return this.subscriptionCounts.size>0}clearReconnectTimer(){if(!this.reconnectTimer)return;clearTimeout(this.reconnectTimer),this.reconnectTimer=void 0}scheduleReconnect(){if(this.reconnectTimer||this.closedByClient||!this.hasActiveSubscriptions())return;let $=Math.min(Yz*2**this.reconnectAttempt,jz),Z=Math.round($*(1-BV)+Math.random()*$*BV);this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=void 0,this.reconnectSubscribedTransport()},Z)}async reconnectSubscribedTransport(){if(this.closedByClient||!this.hasActiveSubscriptions())return;try{await this.connect(),this.reconnectAttempt=0}catch{if(!CW(this.currentUrl)){this.reconnectAttempt+=1,this.scheduleReconnect();return}try{let $=await e$({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 R0("hub_connection_closed",wW),this.sawSocketClose=!1;for(let Z of this.pendingReplies.values())Z.reject(this.lastCloseError);this.pendingReplies.clear(),this.connectPromise=void 0,this.socket=void 0;try{$.close()}catch{}}async dispose(){if(this.socket?.readyState===1&&this.registered)try{await this.command("client.unregister",void 0,void 0,{timeoutMs:2000})}catch{}this.close()}sendFrame($){if(!this.socket||this.socket.readyState!==1){if(this.lastCloseError.code==="hub_connection_closed"&&!this.sawSocketClose)throw new R0("hub_connection_not_open","Hub connection is not open.");throw this.lastCloseError}this.socket.send(JSON.stringify($))}sendSubscriptionFrame($,Z){this.sendFrame({kind:$,clientId:this.clientId,...Z?{sessionId:Z}:{}})}adjustSubscriptionCount($,Z){let Q=this.subscriptionKeyForSessionId($),W=(this.subscriptionCounts.get(Q)??0)+Z;if(W<=0){if(this.subscriptionCounts.delete(Q),!this.hasActiveSubscriptions())this.clearReconnectTimer();if(Z<0&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.unsubscribe",$);return}if(this.subscriptionCounts.set(Q,W),Z>0&&W===1&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.subscribe",$)}subscriptionKeyForSessionId($){return $??VV}subscriptionSessionIdFromKey($){return $===VV?void 0:$}handleFrame($){switch($.kind){case"reply":{let Z=$.envelope.requestId;if(!Z)return;let Q=this.pendingReplies.get(Z);if(!Q)return;this.pendingReplies.delete(Z),Q.resolve($.envelope);return}case"event":for(let Z of this.listeners){if(Z.sessionId&&Z.sessionId!==$.envelope.sessionId?.trim())continue;Z.listener($.envelope)}return;case"command":case"stream.subscribe":case"stream.unsubscribe":return}}}function G$($){let Z=new URL($);if(Z.protocol==="http:")Z.protocol="ws:";else if(Z.protocol==="https:")Z.protocol="wss:";return Z.toString()}async function F1($,Z){let Q=new W1({url:$,authToken:Z?.authToken,clientType:"hub-healthcheck",displayName:"hub healthcheck",workspaceRoot:Z?.workspaceRoot,cwd:Z?.cwd});try{return await Q.connect(),!0}catch{return!1}finally{Q.close()}}async function PW($,Z){let Q=G$($),W=await g1(Q,{authToken:Z?.authToken});if(!W)return{status:"unreachable",url:Q};if(!n_(W).compatible)return{status:"protocol_mismatch",url:Q};if(Z?.verifyConnection===!0&&!await F1(Q,{workspaceRoot:Z.workspaceRoot,cwd:Z.cwd,authToken:Z.authToken}))return{status:"unreachable",url:Q};return{status:"compatible",url:Q}}async function Hz($){let Z=Date.now()+$z;while(Date.now()<Z){let Q=await K0($.discoveryPath);if(Q?.url){let W=await PW(Q.url,{verifyConnection:!0,authToken:Q.authToken});if(W.status==="compatible")return B$(W.url,Q.authToken)}await new Promise((W)=>setTimeout(W,Zz))}return}async function Bz($){let Z=Date.now()+Jz;while(Date.now()<Z){if(!(await g1($).catch(()=>{return}))?.url)return!0;await new Promise((W)=>setTimeout(W,Xz))}return!1}function Gz($,Z){try{return G$($)===G$(Z)}catch{return!1}}function Kz($){return($&&typeof $==="object"&&Array.isArray($.sessions)?$.sessions:[]).some((Q)=>{if(!Q||typeof Q!=="object")return!1;let W=Q;if(W.status==="running"||W.status==="idle"||W.status==="pending")return!0;return Array.isArray(W.participants)&&W.participants.length>0})}async function Fz($,Z,Q){let W=new W1({url:$,authToken:Z,clientType:"hub-recovery-check",displayName:"hub recovery check",workspaceRoot:Q?.workspaceRoot,cwd:Q?.cwd});try{let J=await W.command("session.list",{limit:500},void 0,{timeoutMs:Wz});return!Kz(J.payload)}catch{return!1}finally{await W.dispose().catch(()=>{return})}}async function s4($={}){if($.endpoint?.trim()){let J=await PW($.endpoint);return J.status==="compatible"?J.url:void 0}let Z=n9(),Q=await K0(Z.discoveryPath);if(!Q?.url)return;let W=await PW(Q.url,{authToken:Q.authToken});if(W.status==="compatible")return B$(W.url,Q.authToken);if(W.status==="protocol_mismatch")await S0(Z.discoveryPath).catch(()=>{return});return}async function e$($={}){let Z=await s4($);if(Z&&await F1(Z,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return Z;if($.endpoint?.trim())return;let Q=n9();return await H8($.workspaceRoot??process.cwd()),await Hz(Q)}async function a4($,Z){let Q=new URL($),W=Z?.trim()||AV(Q);if(Q.protocol==="ws:")Q.protocol="http:";else if(Q.protocol==="wss:")Q.protocol="https:";return Q.pathname="/shutdown",Q.hash="",(await fetch(Q,{method:"POST",headers:W?{authorization:`Bearer ${W}`}:void 0})).ok}async function yW($=n9()){let Z=await K0($.discoveryPath);if(!Z?.url)return!1;try{if(await a4(Z.url,Z.authToken))return!0}catch{}return!1}async function s9($){if(!CW($.url))return;let Z=n9(),Q=await K0(Z.discoveryPath);if(!Q?.url||!Gz(Q.url,$.url))return;if(!await Fz(Q.url,Q.authToken,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return;if(!await yW())return;if(!await Bz(Q.url))return;return await S0(Z.discoveryPath).catch(()=>{return}),await e$({workspaceRoot:$.workspaceRoot,cwd:$.cwd})}import{resolveClineBuildEnv as Az}from"@cline/shared";function fz($,Z){if($ instanceof Error)return $;if($&&typeof $==="object"&&"message"in $&&typeof $.message==="string"&&$.message.trim())return Error($.message.trim());let Q=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return Error(Q?`Failed to connect to hub at ${Z} (${Q} event before socket open).`:`Failed to connect to hub at ${Z}.`)}var Uz="cline-hub-auth.";function Dz($){return $.host!==void 0||$.port!==void 0||$.pathname!==void 0}function Lz($,Z){let Q=new URL($),W=new URL(Z);return Q.search="",Q.hash="",W.search="",W.hash="",Q.toString()===W.toString()}function fV(){return Az()==="production"?K1():Q1()}async function _z($){let Z=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),Z)return Z;let Q=fV(),W=await K0(Q.discoveryPath);if(W?.url&&Lz($.toString(),W.url))return W.authToken;return}async function hW($={}){let Z=G1($);if(!Dz($)){let Q=fV(),W=await K0(Q.discoveryPath);if(W?.url)return W.url}return Z1(Z.host,Z.port,Z.pathname)}async function o9($){return await new Promise((Z,Q)=>{(async()=>{let W=new URL($),J=await _z(W);W.hash="";let X=new WebSocket(W.toString(),J?[`${Uz}${J}`]:void 0),Y=new Map,j=0;X.addEventListener("open",()=>{Z({send(V){let H=V.requestId??`hub-client-${++j}`;return new Promise((B,G)=>{Y.set(H,{resolve:B,reject:G});let K={kind:"command",envelope:{...V,requestId:H}};X.send(JSON.stringify(K))})},close(){X.close()}})}),X.addEventListener("message",(V)=>{let H=JSON.parse(String(V.data));if(H.kind==="reply"&&H.envelope.requestId){let B=Y.get(H.envelope.requestId);if(B)Y.delete(H.envelope.requestId),B.resolve(H.envelope)}}),X.addEventListener("close",()=>{for(let V of Y.values())V.reject(Error("Hub connection closed"));Y.clear()}),X.addEventListener("error",(V)=>{Q(fz(V,$))})})().catch(Q)})}async function UV($){try{return(await o9($)).close(),!0}catch{return!1}}async function DV($,Z){let Q=await hW($),W=await o9(Q);try{return await W.send({version:Z.version??"v1",clientId:Z.clientId??"hub-client",...Z})}finally{W.close()}}function kW($){return $?JSON.parse(JSON.stringify($)):{}}function t9($){let Z=$?.session&&typeof $.session==="object"?$.session:void 0;if(!Z)return;let Q=Z.metadata&&typeof Z.metadata==="object"?kW(Z.metadata):void 0;return{sessionId:typeof Z.sessionId==="string"?Z.sessionId:"",parentSessionId:typeof Q?.parentSessionId==="string"?Q.parentSessionId:void 0,messagesPath:typeof Q?.messagesPath==="string"?Q.messagesPath:void 0,metadata:Q}}function LV($,Z){return $.error?.message??`hub command failed: ${Z}`}function zz($){let Z=kW($);if(typeof Z.error==="string"&&Z.error.trim())return{...Z,error:Z.error.trim()};let Q=Z.result&&typeof Z.result==="object"?Z.result:void 0;if(typeof Q?.text==="string"&&Q.text.trim())return{...Z,error:Q.text.trim()};let W=Q?.error&&typeof Q.error==="object"?Q.error:void 0;if(typeof W?.message==="string"&&W.message.trim())return{...Z,error:W.message.trim()};return Z}function _V($){let Z=$?.sessionId;return typeof Z==="string"&&Z.trim()?Z.trim():void 0}function Tz($){let Z=$?.checkpoint;if(!Z||typeof Z!=="object"||Array.isArray(Z))throw Error("hub checkpoint restore returned no checkpoint");let Q=Z;if(typeof Q.ref!=="string"||typeof Q.createdAt!=="number"||typeof Q.runCount!=="number")throw Error("hub checkpoint restore returned an invalid checkpoint");return Q}function Oz($){let Z=kW($.payload);if($.event==="schedule.execution_completed")return{sessionId:$.sessionId?.trim()||_V(Z)||"",eventType:"schedule.execution.completed",payload:Z};if($.event==="schedule.execution_failed")return{sessionId:$.sessionId?.trim()||_V(Z)||"",eventType:"schedule.execution.failed",payload:Z};let Q=$.sessionId?.trim();if(!Q)return;switch($.event){case"iteration.started":return{sessionId:Q,eventType:"runtime.chat.iteration_start",payload:Z};case"iteration.finished":return{sessionId:Q,eventType:"runtime.chat.iteration_end",payload:Z};case"assistant.delta":return{sessionId:Q,eventType:"runtime.chat.text_delta",payload:Z};case"usage.updated":return{sessionId:Q,eventType:"runtime.chat.usage",payload:Z};case"tool.started":return{sessionId:Q,eventType:"runtime.chat.tool_call_start",payload:Z};case"tool.finished":return{sessionId:Q,eventType:"runtime.chat.tool_call_end",payload:Z};case"approval.requested":return{sessionId:Q,eventType:"approval.requested",payload:Z};case"run.aborted":return{sessionId:Q,eventType:"runtime.chat.aborted",payload:Z};case"run.failed":return{sessionId:Q,eventType:"runtime.chat.failed",payload:zz($.payload)};case"run.completed":return{sessionId:Q,eventType:"runtime.chat.completed",payload:Z};default:return}}class IW{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 Z=await this.client.command("session.create",{workspaceRoot:$.workspaceRoot,cwd:$.cwd,sessionConfig:{providerId:$.provider,modelId:$.model,apiKey:$.apiKey,cwd:$.cwd??$.workspaceRoot,workspaceRoot:$.workspaceRoot,systemPrompt:$.systemPrompt??"",mode:$.mode??"act",rules:$.rules,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,enableTools:$.enableTools,enableSpawnAgent:$.enableSpawn!==!1,enableAgentTeams:$.enableTeams!==!1,disableMcpSettingsTools:$.disableMcpSettingsTools,missionLogIntervalSteps:$.missionStepInterval,missionLogIntervalMs:$.missionTimeIntervalMs},metadata:{source:$.source??"cli",provider:$.provider,model:$.model,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,prompt:void 0,interactive:$.interactive!==!1},runtimeOptions:{mode:$.mode,systemPrompt:$.systemPrompt,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,autoApproveTools:$.autoApproveTools,toolExecutors:$.toolExecutors,configExtensions:$.configExtensions},modelSelection:{provider:$.provider,model:$.model,apiKey:$.apiKey},toolPolicies:$.toolPolicies}),Q=t9(Z.payload);if(!Q?.sessionId)throw Error("hub session create returned no session id");return{sessionId:Q.sessionId,startResult:{sessionId:Q.sessionId,manifestPath:"",messagesPath:Q.messagesPath??""}}}async sendRuntimeSession($,Z,Q){return await this.ensureMetadataApplied(),{result:(await this.client.command("session.send_input",{prompt:Z.prompt,mode:Z.config.mode,attachments:Z.attachments,delivery:Z.delivery,timeoutSeconds:Z.config.timeoutSeconds},$,Q)).payload?.result}}async stopRuntimeSession($){return await this.ensureMetadataApplied(),await this.client.command("session.detach",{sessionId:$},$),{applied:!0}}async abortRuntimeSession($){return await this.ensureMetadataApplied(),await this.client.command("run.abort",{sessionId:$},$),{applied:!0}}async updateSession($){return await this.ensureMetadataApplied(),await this.client.command("session.update",{sessionId:$.sessionId,metadata:$.metadata},$.sessionId),{updated:!0}}async getSession($){await this.ensureMetadataApplied();let Z;try{Z=await this.client.command("session.get",void 0,$)}catch(Q){if(I1(Q))return;throw Q}return t9(Z.payload)}async readMessages($){let Z=$.trim();if(!Z)return[];await this.ensureMetadataApplied();let Q=await this.client.command("session.messages",{sessionId:Z},Z);if(!Q.ok)throw Error(LV(Q,"session.messages"));let W=Q.payload?.messages;return Array.isArray(W)?W:[]}async restore($){let Z=$.sessionId.trim();if(!Z)throw Error("sessionId is required");let Q=$.restore?.messages!==!1;if(Q&&!$.config)throw Error("config is required when restore.messages is true");await this.ensureMetadataApplied();let W=$.config,J=await this.client.command("session.restore",{sessionId:Z,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...W?{workspaceRoot:W.workspaceRoot,cwd:W.cwd,sessionConfig:{providerId:W.provider,modelId:W.model,apiKey:W.apiKey,cwd:W.cwd??W.workspaceRoot,workspaceRoot:W.workspaceRoot,systemPrompt:W.systemPrompt??"",mode:W.mode??"act",rules:W.rules,maxIterations:W.maxIterations,enableTools:W.enableTools,enableSpawnAgent:W.enableSpawn!==!1,enableAgentTeams:W.enableTeams!==!1,disableMcpSettingsTools:W.disableMcpSettingsTools,missionLogIntervalSteps:W.missionStepInterval,missionLogIntervalMs:W.missionTimeIntervalMs},metadata:{source:W.source??"cli",provider:W.provider,model:W.model,enableTools:W.enableTools,enableSpawn:W.enableSpawn,enableTeams:W.enableTeams,prompt:void 0,interactive:W.interactive!==!1},runtimeOptions:{mode:W.mode,systemPrompt:W.systemPrompt,maxIterations:W.maxIterations,enableTools:W.enableTools,enableSpawn:W.enableSpawn,enableTeams:W.enableTeams,autoApproveTools:W.autoApproveTools,configExtensions:W.configExtensions},modelSelection:{provider:W.provider,model:W.model,apiKey:W.apiKey},toolPolicies:W.toolPolicies}:{}},Z);if(!J.ok)throw Error(LV(J,"session.restore"));let X=t9(J.payload);if(Q&&!X?.sessionId)throw Error("hub checkpoint restore returned no session id");let Y=Array.isArray(J.payload?.messages)?J.payload.messages:void 0,j=Tz(J.payload);return{sessionId:X?.sessionId,startResult:X?.sessionId?{sessionId:X.sessionId,manifestPath:"",messagesPath:X.messagesPath??""}:void 0,...Y?{messages:Y}:{},checkpoint:j}}async listSessions($){await this.ensureMetadataApplied();let Z=await this.client.command("session.list",{limit:$?.limit??200});return(Array.isArray(Z.payload?.sessions)?Z.payload?.sessions:[]).map((W)=>t9({session:W})).filter((W)=>Boolean(W?.sessionId))}async deleteSession($,Z=!0){return await this.ensureMetadataApplied(),(await this.client.command("session.delete",{sessionId:$,deleteCheckpointRefs:Z})).payload?.deleted===!0}async respondToolApproval($){await this.ensureMetadataApplied(),await this.client.command("approval.respond",{approvalId:$.approvalId,approved:$.approved,payload:$.reason?{reason:$.reason}:void 0,responderClientId:$.responderClientId})}streamEvents($,Z){let Q=new Set(($.sessionIds??[]).map((J)=>J.trim()).filter(Boolean)),W=this.client.subscribe((J)=>{let X=Oz(J);if(!X)return;if(Q.size>0&&!Q.has(X.sessionId))return;Z.onEvent?.(X)});return this.ensureMetadataApplied().catch((J)=>{Z.onError?.(J instanceof Error?J:Error(String(J)))}),W}streamTeamProgress($,Z){let Q=this.client.subscribe((W)=>{if(W.event!=="team.progress"||!W.payload)return;Z.onProjection?.(W.payload)});return this.ensureMetadataApplied().catch((W)=>{Z.onError?.(W instanceof Error?W:Error(String(W)))}),Q}async createSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.create",$)).payload?.schedule}async listSchedules($){await this.ensureMetadataApplied();let Z=await this.client.command("schedule.list");return Array.isArray(Z.payload?.schedules)?Z.payload?.schedules:[]}async getSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.get",{scheduleId:$})).payload?.schedule}async updateSchedule($,Z){return await this.ensureMetadataApplied(),(await this.client.command("schedule.update",{scheduleId:$,...Z})).payload?.schedule}async pauseSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.disable",{scheduleId:$})).payload?.schedule}async resumeSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.enable",{scheduleId:$})).payload?.schedule}async deleteSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.delete",{scheduleId:$})).payload?.deleted===!0}async triggerScheduleNow($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.trigger",{scheduleId:$})).payload?.execution}async listScheduleExecutions($,Z){await this.ensureMetadataApplied();let Q=await this.client.command("schedule.list_executions",{scheduleId:$,limit:Z});return Array.isArray(Q.payload?.executions)?Q.payload?.executions:[]}async getScheduleStats(){return await this.ensureMetadataApplied(),(await this.client.command("schedule.stats")).payload?.stats}async getActiveScheduledExecutions(){await this.ensureMetadataApplied();let $=await this.client.command("schedule.active");return Array.isArray($.payload?.executions)?$.payload?.executions:[]}async getUpcomingScheduledRuns($){await this.ensureMetadataApplied();let Z=await this.client.command("schedule.upcoming",{limit:$});return Array.isArray(Z.payload?.upcoming)?Z.payload?.upcoming:[]}}class xW{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 Z=await this.client.command("session.list",{limit:$});return Array.isArray(Z.payload?.sessions)?Z.payload.sessions:[]}subscribeUI($){return this.client.subscribe((Z)=>{switch(Z.event){case"ui.notify":$.onNotify?.(Z.payload);break;case"ui.show_window":$.onShowWindow?.(Z.payload);break;case"hub.client.registered":$.onClientRegistered?.(Z.payload??{});break;case"hub.client.disconnected":$.onClientDisconnected?.(Z.payload??{});break;case"session.created":$.onSessionCreated?.(Z.payload??{});break;case"session.updated":$.onSessionUpdated?.(Z.payload??{});break;case"session.detached":$.onSessionDetached?.(Z.payload??{});break}})}}import{normalizeProviderId as $x}from"@cline/llms";var XU={};N(XU,{LocalRuntimeHost:()=>z1});import{readdirSync as pI}from"node:fs";import{homedir as rI}from"node:os";import{isAbsolute as iI,join as kY,resolve as IY}from"node:path";import{captureSdkError as l2,createSessionId as nI,isLikelyAuthError as aI,normalizeUserInput as sI}from"@cline/shared";import{setHomeDirIfUnset as oI}from"@cline/shared/storage";var nV={};N(nV,{saveProviderOAuthCredentials:()=>Q2,resolveProviderApiKeyFromSettings:()=>aW,loginAndSaveProviderOAuthCredentials:()=>J6,isOAuthProvider:()=>Z2,getProviderOAuthCredentialsFromSettings:()=>X6,getProviderAuthStorageId:()=>nW,getProviderAuthHandler:()=>j0,getPersistedProviderApiKey:()=>U8,formatProviderOAuthApiKey:()=>sW});import{getClineEnvironmentConfig as rV}from"@cline/shared";_0();var CV={};N(CV,{startClineDeviceAuth:()=>dW,refreshClineToken:()=>QZ,loginClineOAuth:()=>o4,getValidClineCredentials:()=>t4,completeClineDeviceAuth:()=>lW});import{getClineEnvironmentConfig as gW}from"@cline/shared";var zV={};N(zV,{startLocalOAuthServer:()=>J1});function qz(){let $;return{promise:new Promise((Q)=>{$=Q}),resolve:$}}async function J1($){let Z=await import("node:http"),Q=$.host??"127.0.0.1",W=$.timeoutMs??300000,J=$.successHtml??Mz,X=qz(),Y=!1,j=null,V=null,H=null,B=(F)=>{if(Y)return;Y=!0,X.resolve(F)},G=()=>{if(j)clearTimeout(j),j=null;let F=H;if(H=null,V)V.close(),V.closeAllConnections?.(),V=null;if(F!==null&&$.onClose)Promise.resolve($.onClose({host:Q,port:F})).catch(()=>{})},K=async()=>{return j=setTimeout(()=>{G(),B(null)},W),X.promise};for(let F of $.ports){let A=Z.createServer((f,D)=>{try{let U=new URL(f.url||"",`http://${Q}:${F}`);if(U.pathname!==$.callbackPath){D.statusCode=404,D.end("Not found");return}let T={url:U,code:U.searchParams.get("code")??void 0,state:U.searchParams.get("state")??void 0,provider:U.searchParams.get("provider")??void 0,error:U.searchParams.get("error")??void 0};if(T.error){D.statusCode=400,D.end(`Authentication failed: ${T.error}`),G(),B(T);return}if(!T.code){D.statusCode=400,D.end("Missing authorization code");return}if($.expectedState&&T.state!==$.expectedState){D.statusCode=400,D.end("State mismatch");return}D.statusCode=200,D.setHeader("Content-Type","text/html; charset=utf-8"),D.end(J),G(),B(T)}catch{D.statusCode=500,D.end("Internal error")}}),L=await new Promise((f)=>{let D=(U)=>{A.off("error",D),f({bound:!1,error:U})};A.once("error",D),A.listen(F,Q,()=>{A.off("error",D),V=A,f({bound:!0})})});if(L.error){if(L.error.code==="EADDRINUSE")continue;throw G(),L.error}if(L.bound){H=F;let f=`http://${Q}:${F}${$.callbackPath}`;if($.onListening)await Promise.resolve($.onListening({host:Q,port:F,callbackUrl:f})).catch(()=>{});return{callbackUrl:f,waitForCallback:K,cancelWait:()=>{G(),B(null)},close:()=>{G(),B(null)}}}}return{callbackUrl:"",waitForCallback:async()=>null,cancelWait:()=>{},close:()=>{}}}var Mz=`<!DOCTYPE html>
|
|
279
279
|
<html lang="en">
|
|
280
280
|
<head>
|
|
281
281
|
<meta charset="utf-8">
|
|
@@ -316,22 +316,22 @@ ${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
|
|
|
316
316
|
</div>
|
|
317
317
|
<script>setTimeout(() => window.close(), 3000);</script>
|
|
318
318
|
</body>
|
|
319
|
-
</html>`;function zV($){let Z="";for(let Q=0;Q<$.length;Q+=1)Z+=String.fromCharCode($[Q]??0);return btoa(Z).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}async function M_($){let Q=new TextEncoder().encode($),W=await crypto.subtle.digest("SHA-256",Q);return new Uint8Array(W)}function R_($=32){let Z=new Uint8Array($);return crypto.getRandomValues(Z),zV(Z)}async function $Z(){let $=R_(),Z=zV(await M_($));return{verifier:$,challenge:Z}}function ZZ($){return $.endsWith("/")?$.slice(0,-1):$}function Z2($,Z){return new URL(Z,`${ZZ($)}/`).toString()}function K8($,Z={}){let Q=$.trim();if(!Q)return{};try{let W=new URL(Q);return{code:W.searchParams.get("code")??void 0,state:W.searchParams.get("state")??void 0,provider:Z.includeProvider?W.searchParams.get("provider")??void 0:void 0}}catch{}if(Z.allowHashCodeState&&Q.includes("#")){let[W,J]=Q.split("#",2);return{code:W||void 0,state:J||void 0}}if(Q.includes("code=")){let W=new URLSearchParams(Q);return{code:W.get("code")??void 0,state:W.get("state")??void 0,provider:Z.includeProvider?W.get("provider")??void 0:void 0}}return{code:Q}}function E_($){if(typeof atob==="function")try{return atob($)}catch{return null}if(typeof Buffer<"u")try{return Buffer.from($,"base64").toString("utf8")}catch{return null}return null}function E0($){if(!$)return null;try{let Z=$.split(".");if(Z.length!==3)return null;let Q=Z[1];if(!Q)return null;let W=Q.replace(/-/g,"+").replace(/_/g,"/"),J=W.padEnd(W.length+(4-W.length%4)%4,"="),X=E_(J);if(!X)return null;return JSON.parse(X)}catch{return null}}function F8($){try{let Z=JSON.parse($),Q=Z.error,W=typeof Q==="string"?Q:Q&&typeof Q==="object"&&typeof Q.type==="string"?Q.type:void 0,J=typeof Z.error_description==="string"?Z.error_description:typeof Z.message==="string"?Z.message:Q&&typeof Q==="object"&&typeof Q.message==="string"?Q.message:void 0;return{code:W,message:J}}catch{return{}}}function A8($,Z){return Date.now()>=$.expires-Z}async function f8($){if(!$.onManualCodeInput){let X=await $.waitForCallback();return{code:X?.code,state:X?.state,provider:X?.provider,error:X?.error}}let Z,Q,W=$.onManualCodeInput().then((X)=>{Z=X,$.cancelWait()}).catch((X)=>{Q=X instanceof Error?X:Error(String(X)),$.cancelWait()}),J=await $.waitForCallback();if(Q)throw Q;if(J?.code||J?.error)return{code:J.code,state:J.state,provider:J.provider,error:J.error};if(Z)return K8(Z,$.parseOptions);if(await W,Q)throw Q;if(Z)return K8(Z,$.parseOptions);return{}}var QZ={authorize:"/api/v1/auth/authorize",token:"/api/v1/auth/token",register:"/api/v1/auth/register",refresh:"/api/v1/auth/refresh"},RV={deviceAuthorization:"/user_management/authorize/device",authenticate:"/user_management/authenticate"},gW="https://api.workos.com",N_="/auth",OV=Array.from({length:11},($,Z)=>48801+Z),C_=300000,w_=30000,U8=30000,P_=300,S_=5;class K$ extends Error{status;errorCode;constructor($,Z){super($);this.name="ClineOAuthTokenError",this.status=Z?.status,this.errorCode=Z?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant|invalid_token|unauthorized/i.test(this.errorCode))return!0;if(this.status===400||this.status===401||this.status===403)return/invalid|expired|revoked|unauthorized/i.test(this.message);return!1}}function b_($){let Z=Date.parse($);if(Number.isNaN(Z))throw Error(`Invalid expiresAt value: ${$}`);return Z}function mW($,Z,Q={}){let W=$.userInfo.clineUserId??Q.accountId,J=$.refreshToken??Q.refresh;if(!J)throw Error("Token response did not include a refresh token");return{access:$.accessToken,refresh:J,expires:b_($.expiresAt),accountId:W??void 0,email:$.userInfo.email||Q.email,metadata:{provider:Z,tokenType:$.tokenType,userInfo:$.userInfo}}}async function vW($){if(!$)return{};return typeof $==="function"?await $():$}function qV($,Z){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return Z;return Math.floor($)}async function MV($){await new Promise((Z)=>setTimeout(Z,$))}function cW($,Z){if(!$.success||!$.data?.accessToken)throw Error(Z);return $.data}async function EV($,Z){let Q=await fetch(Z2(gW,RV.deviceAuthorization),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({client_id:$}),signal:AbortSignal.timeout(Z?.requestTimeoutMs??U8)}),W=await Q.json().catch(()=>({}));if(!Q.ok)throw new K$(`Device authorization failed: ${Q.status}${W.error_description?` - ${W.error_description}`:""}`,{status:Q.status,errorCode:W.error});if(!W.device_code||!W.user_code||!W.verification_uri)throw Error("Invalid WorkOS device authorization response");return{deviceCode:W.device_code,userCode:W.user_code,verificationUri:W.verification_uri,verificationUriComplete:W.verification_uri_complete,expiresInSeconds:qV(W.expires_in,P_),pollIntervalSeconds:qV(W.interval,S_)}}async function NV($){let Z=Date.now()+$.expiresInSeconds*1000,Q=Math.max(1,$.initialPollIntervalSeconds);while(Date.now()<=Z){let W=await fetch(Z2($.workosApiBaseUrl,RV.authenticate),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"urn:ietf:params:oauth:grant-type:device_code",device_code:$.deviceCode,client_id:$.clientId}),signal:AbortSignal.timeout($.requestTimeoutMs)}),J=await W.json().catch(()=>({}));if(W.ok){if(!J.access_token||!J.refresh_token)throw Error("Invalid WorkOS token response");return{accessToken:J.access_token,refreshToken:J.refresh_token,tokenType:J.token_type??"Bearer"}}switch(J.error){case"authorization_pending":{await MV(Q*1000);break}case"slow_down":{Q+=1,await MV(Q*1000);break}case"access_denied":case"expired_token":case"invalid_grant":throw new K$(J.error_description||"WorkOS authorization failed",{status:W.status,errorCode:J.error});default:throw new K$(`WorkOS token polling failed: ${W.status}${J.error_description?` - ${J.error_description}`:""}`,{status:W.status,errorCode:J.error})}$.onProgress?.("Waiting for browser authentication confirmation...")}throw Error("WorkOS device authorization timed out")}async function CV($,Z,Q){let W={accessToken:$.accessToken,refreshToken:$.refreshToken},J=await fetch(Z2(Z.apiBaseUrl,QZ.register),{method:"POST",headers:{"Content-Type":"application/json",...await vW(Z.headers)},body:JSON.stringify(W),signal:AbortSignal.timeout(Z.requestTimeoutMs??U8)});if(!J.ok){let Y=await J.text().catch(()=>""),j=F8(Y);throw new K$(`Token registration failed: ${J.status}${j.message?` - ${j.message}`:""}`,{status:J.status,errorCode:j.code})}let X=await J.json();return mW(cW(X,"Invalid token exchange response"),Q??Z.provider)}async function y_($,Z,Q,W){let J={grant_type:"authorization_code",code:$,client_type:"extension",redirect_uri:Z,provider:W??Q.provider},X=await fetch(Z2(Q.apiBaseUrl,QZ.token),{method:"POST",headers:{"Content-Type":"application/json",...await vW(Q.headers)},body:JSON.stringify(J),signal:AbortSignal.timeout(Q.requestTimeoutMs??U8)});if(!X.ok){let j=await X.text().catch(()=>""),V=F8(j);throw new K$(`Token exchange failed: ${X.status}${V.message?` - ${V.message}`:""}`,{status:X.status,errorCode:V.code})}let Y=await X.json();return mW(cW(Y,"Invalid token exchange response"),W??Q.provider)}async function t4($){C1($.telemetry,$.provider??"cline");let Z=$.useWorkOSDeviceAuth??!0,Q=$.callbackPorts?.length?$.callbackPorts:OV,W=$.callbackPath??N_,J=Z?null:await J1({ports:Q,callbackPath:W,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),X=J?.callbackUrl||`http://127.0.0.1:${Q[0]??OV[0]}${W}`;try{let Y;if(Z){let j=xW().workOsClientId,V=await EV(j,$);$.callbacks.onAuth({url:V.verificationUriComplete??V.verificationUri,instructions:`Enter this code in your browser: ${V.userCode}`});let H=await NV({clientId:j,deviceCode:V.deviceCode,expiresInSeconds:V.expiresInSeconds,initialPollIntervalSeconds:V.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??U8,workosApiBaseUrl:gW,onProgress:$.callbacks.onProgress});Y=await CV(H,$,$.provider)}else{let j=new URL(Z2($.apiBaseUrl,QZ.authorize));j.searchParams.set("client_type","extension"),j.searchParams.set("callback_url",X),j.searchParams.set("redirect_uri",X),$.callbacks.onAuth({url:j.toString(),instructions:"Continue the authentication process in your browser."});let V,H=$.provider,B=await f8({waitForCallback:J?.waitForCallback??(async()=>null),cancelWait:J?.cancelWait??(()=>{}),onManualCodeInput:$.callbacks.onManualCodeInput,parseOptions:{includeProvider:!0}});if(B.error)throw Error(`OAuth error: ${B.error}`);if(V=B.code,H=B.provider??H,!V){let G=await $.callbacks.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),K=K8(G,{includeProvider:!0});V=K.code,H=K.provider??H}if(!V)throw Error("Missing authorization code");Y=await y_(V,X,$,H)}return w1($.telemetry,$.provider??"cline"),S1($.telemetry,{id:Y.accountId,email:Y.email,provider:$.provider??"cline"}),Y}catch(Y){throw P1($.telemetry,$.provider??"cline",Y instanceof Error?Y.message:String(Y)),Y}finally{J?.close()}}async function uW($){return await EV(xW().workOsClientId,$)}async function dW($){let Z=$.provider??"cline";C1($.telemetry,Z);try{let Q=await NV({clientId:xW().workOsClientId,deviceCode:$.deviceCode,expiresInSeconds:$.expiresInSeconds,initialPollIntervalSeconds:$.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??U8,workosApiBaseUrl:gW}),W=await CV(Q,{apiBaseUrl:$.apiBaseUrl,headers:$.headers,requestTimeoutMs:$.requestTimeoutMs,provider:$.provider},$.provider);return w1($.telemetry,Z),S1($.telemetry,{id:W.accountId,email:W.email,provider:Z}),W}catch(Q){throw P1($.telemetry,Z,Q instanceof Error?Q.message:String(Q)),Q}}async function WZ($,Z){let Q=await fetch(Z2(Z.apiBaseUrl,QZ.refresh),{method:"POST",headers:{"Content-Type":"application/json",...await vW(Z.headers)},body:JSON.stringify({refreshToken:$.refresh,grantType:"refresh_token"}),signal:AbortSignal.timeout(Z.requestTimeoutMs??U8)});if(!Q.ok){let X=await Q.text().catch(()=>""),Y=F8(X);throw new K$(`Token refresh failed: ${Q.status}${Y.message?` - ${Y.message}`:""}`,{status:Q.status,errorCode:Y.code})}let W=await Q.json(),J=$.metadata?.provider??Z.provider;return mW(cW(W,"Invalid token refresh response"),J,$)}async function e4($,Z,Q){if(!$)return null;let W=Q?.refreshBufferMs??C_,J=Q?.retryableTokenGraceMs??w_;if(Q?.forceRefresh!==!0&&!A8($,W))return $;try{return await WZ($,Z)}catch(Y){if(Y instanceof K$&&Y.isLikelyInvalidGrant())return V$(Z.telemetry,Z.provider??"cline","invalid_grant"),null;if($.expires-Date.now()>J)return $;return null}}L0();var SV={};N(SV,{refreshOpenAICodexToken:()=>XZ,loginOpenAICodex:()=>$6,getValidOpenAICodexCredentials:()=>Z6,OPENAI_CODEX_OAUTH_CONFIG:()=>X0});import{nanoid as h_}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 JZ extends Error{status;errorCode;constructor($,Z){super($);this.name="OpenAICodexOAuthTokenError",this.status=Z?.status,this.errorCode=Z?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant/i.test(this.errorCode))return!0;if(this.status===400||this.status===401||this.status===403)return/invalid_grant|revoked|expired|invalid refresh/i.test(this.message);return!1}}async function k_($,Z,Q=X0.redirectUri){let W=await fetch(X0.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"authorization_code",client_id:X0.clientId,code:$,code_verifier:Z,redirect_uri:Q}),signal:AbortSignal.timeout(X0.httpTimeoutMs)});if(!W.ok)return{type:"failed"};let J=await W.json();if(!J.access_token||!J.refresh_token||typeof J.expires_in!=="number")return{type:"failed"};return{type:"success",access:J.access_token,refresh:J.refresh_token,expires:Date.now()+J.expires_in*1000,email:J.email,idToken:J.id_token}}async function I_($){try{let Z=await fetch(X0.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:$,client_id:X0.clientId}),signal:AbortSignal.timeout(X0.httpTimeoutMs)});if(!Z.ok){let W=await Z.text().catch(()=>""),J=F8(W);throw new JZ(`Token refresh failed: ${Z.status}${J.message?` - ${J.message}`:""}`,{status:Z.status,errorCode:J.code})}let Q=await Z.json();if(!Q.access_token||!Q.refresh_token||typeof Q.expires_in!=="number")return{type:"failed"};return{type:"success",access:Q.access_token,refresh:Q.refresh_token,expires:Date.now()+Q.expires_in*1000,email:Q.email,idToken:Q.id_token}}catch(Z){if(Z instanceof JZ)throw Z;return{type:"failed"}}}async function x_($="pi"){let{verifier:Z,challenge:Q}=await $Z(),W=h_(32),J=new URL(X0.authorizationEndpoint);return J.searchParams.set("response_type","code"),J.searchParams.set("client_id",X0.clientId),J.searchParams.set("redirect_uri",X0.redirectUri),J.searchParams.set("scope",X0.scopes),J.searchParams.set("code_challenge",Q),J.searchParams.set("code_challenge_method","S256"),J.searchParams.set("state",W),J.searchParams.set("id_token_add_organizations","true"),J.searchParams.set("codex_cli_simplified_flow","true"),J.searchParams.set("originator",$),{verifier:Z,state:W,url:J.toString()}}function g_(){try{let $=new URL(X0.redirectUri),Z=$.port.length>0?Number.parseInt($.port,10):X0.callbackPort;return{host:$.hostname||"localhost",port:Number.isFinite(Z)?Z:X0.callbackPort,callbackPath:$.pathname||"/auth/callback",redirectUri:$.toString()}}catch{return{host:"localhost",port:X0.callbackPort,callbackPath:"/auth/callback",redirectUri:X0.redirectUri}}}function m_($,Z){let Q=Z?E0(Z):E0($),W=Q?Q:E0($),X=W?.[X0.jwtClaimPath]?.chatgpt_account_id;if(typeof X==="string"&&X.length>0)return X;let Y=W?.organizations;if(Array.isArray(Y)&&Y.length>0){let V=Y[0];if(typeof V?.id==="string"&&V.id.length>0)return V.id}let j=W?.chatgpt_account_id;if(typeof j==="string"&&j.length>0)return j;return null}function PV($,Z){let Q=m_($.access,$.idToken)??Z?.accountId;if(!Q)throw Error("Failed to extract accountId from token");return{access:$.access,refresh:$.refresh||Z?.refresh||"",expires:$.expires,accountId:Q,email:$.email??Z?.email,metadata:{...Z?.metadata??{},provider:"openai-codex"}}}async function $6($){C1($.telemetry,"openai-codex");let Z=g_(),{verifier:Q,state:W,url:J}=await x_($.originator),X=await J1({host:Z.host,ports:[Z.port],callbackPath:Z.callbackPath,expectedState:W});$.onAuth({url:J,instructions:"Continue the authentication process in your browser."});let Y;try{let j=await f8({waitForCallback:X.waitForCallback,cancelWait:X.cancelWait,onManualCodeInput:$.onManualCodeInput,parseOptions:{allowHashCodeState:!0}});if(j.state&&j.state!==W)throw Error("State mismatch");if(Y=j.code,!Y){let B=await $.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),G=K8(B,{allowHashCodeState:!0});if(G.state&&G.state!==W)throw Error("State mismatch");Y=G.code}if(!Y)throw Error("Missing authorization code");let V=await k_(Y,Q,Z.redirectUri);if(V.type!=="success")throw Error("Token exchange failed");let H=PV(V);return w1($.telemetry,"openai-codex"),S1($.telemetry,{id:H.accountId,email:H.email,provider:"openai-codex"}),H}catch(j){throw P1($.telemetry,"openai-codex",j instanceof Error?j.message:String(j)),j}finally{X.close()}}async function XZ($,Z){let Q=await I_($);if(Q.type!=="success")throw Error("Failed to refresh OpenAI Codex token");let W=PV(Q,Z);if(!W.refresh)throw Error("Failed to refresh OpenAI Codex token: missing refresh token");return W}async function Z6($,Z){if(!$)return null;let Q=Z?.refreshBufferMs??X0.refreshBufferMs,W=Z?.retryableTokenGraceMs??X0.retryableTokenGraceMs;if(Z?.forceRefresh!==!0&&!A8($,Q))return $;try{return await XZ($.refresh,$)}catch(X){if(X instanceof JZ&&X.isLikelyInvalidGrant())return V$(Z?.telemetry,"openai-codex","invalid_grant"),null;if($.expires-Date.now()>W)return $;return null}}L0();var pV={};N(pV,{refreshOcaToken:()=>HZ,loginOcaOAuth:()=>W6,getValidOcaCredentials:()=>J6,OCI_HEADER_OPC_REQUEST_ID:()=>v_,DEFAULT_INTERNAL_OCA_BASE_URL:()=>YZ,DEFAULT_INTERNAL_IDCS_URL:()=>hV,DEFAULT_INTERNAL_IDCS_SCOPES:()=>kV,DEFAULT_INTERNAL_IDCS_CLIENT_ID:()=>yV,DEFAULT_EXTERNAL_OCA_BASE_URL:()=>jZ,DEFAULT_EXTERNAL_IDCS_URL:()=>xV,DEFAULT_EXTERNAL_IDCS_SCOPES:()=>gV,DEFAULT_EXTERNAL_IDCS_CLIENT_ID:()=>IV});import{nanoid as bV}from"nanoid";class lW{ttlMs;maxEntries;entries=new Map;constructor($,Z){this.ttlMs=$;this.maxEntries=Z}get($,Z=Date.now()){this.pruneExpired(Z);let Q=this.entries.get($);if(!Q)return;return this.entries.delete($),this.entries.set($,Q),Q.value}set($,Z,Q=Date.now(),W=this.ttlMs){this.pruneExpired(Q),this.entries.delete($);while(this.entries.size>=this.maxEntries){let J=this.entries.keys().next().value;if(J===void 0)break;this.entries.delete(J)}this.entries.set($,{value:Z,expiresAt:Q+W})}pruneExpired($){for(let[Z,Q]of this.entries)if(Q.expiresAt<=$)this.entries.delete(Z)}}var yV="a8331954c0cf48ba99b5dd223a14c6ea",hV="https://idcs-9dc693e80d9b469480d7afe00e743931.identity.oraclecloud.com",kV="openid offline_access",YZ="https://code-internal.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",IV="c1aba3deed5740659981a752714eba33",xV="https://login-ext.identity.oraclecloud.com",gV="openid offline_access",jZ="https://code.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",v_="opc-request-id",c_="/auth/oca",u_=Array.from({length:11},($,Z)=>48801+Z),d_=300000,l_=30000,mV=30000,p_=600000;class VZ extends Error{status;errorCode;constructor($,Z){super($);this.name="OcaOAuthTokenError",this.status=Z?.status,this.errorCode=Z?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant|invalid_token|unauthorized/i.test(this.errorCode))return!0;return this.status===400||this.status===401||this.status===403}}var F$={internal:{clientId:yV,idcsUrl:hV,scopes:kV,baseUrl:YZ},external:{clientId:IV,idcsUrl:xV,scopes:gV,baseUrl:jZ}},Q6=new Map,r_=86400000,i_=300000,n_=32,pW=new lW(r_,n_);function vV($){if(typeof $==="function")return $();return $??"internal"}function cV($){return{internal:{clientId:$?.internal?.clientId??F$.internal.clientId,idcsUrl:$?.internal?.idcsUrl??F$.internal.idcsUrl,scopes:$?.internal?.scopes??F$.internal.scopes,baseUrl:$?.internal?.baseUrl??F$.internal.baseUrl},external:{clientId:$?.external?.clientId??F$.external.clientId,idcsUrl:$?.external?.idcsUrl??F$.external.idcsUrl,scopes:$?.external?.scopes??F$.external.scopes,baseUrl:$?.external?.baseUrl??F$.external.baseUrl}}}function a_($=Date.now()){let Z=$-p_;for(let[Q,W]of Q6.entries())if(W.createdAt<Z)Q6.delete(Q)}function s_($,Z,Q){if(typeof $.expires_in==="number"&&$.expires_in>0)return Date.now()+$.expires_in*1000;let J=E0(Z)?.exp;if(typeof J==="number"&&J>0)return J*1000;let Y=E0(Q)?.exp;if(typeof Y==="number"&&Y>0)return Y*1000;return Date.now()+3600000}function uV($,Z,Q){let W=$.access_token;if(!W)throw Error("Token response did not include an access token");let J=$.refresh_token??Q?.refresh;if(!J)throw Error("Token response did not include a refresh token");let X=E0($.id_token),Y=E0(W),j=X?.sub??Y?.sub,V=X?.email??Y?.email;return{access:W,refresh:J,expires:s_($,W,$.id_token),accountId:j??Q?.accountId,email:V??Q?.email,metadata:{...Q?.metadata??{},provider:"oca",mode:Z,subject:j,idToken:$.id_token}}}async function dV($,Z){let Q=ZZ($),W=pW.get(Q);if(W)return W;let J=`${Q}/.well-known/openid-configuration`,X=await fetch(J,{method:"GET",signal:AbortSignal.timeout(Z)});if(!X.ok){let V=`${Q}/oauth2/v1/token`;return pW.set(Q,V,Date.now(),i_),V}let j=(await X.json()).token_endpoint||`${Q}/oauth2/v1/token`;return pW.set(Q,j),j}function lV($){return{code:$.error,message:$.error_description}}async function o_($){let Z=Q6.get($.state);if(!Z)throw Error("No PKCE verifier found for this state");Q6.delete($.state);let Q=$.mode==="external"?$.config.external:$.config.internal,W=await dV(Q.idcsUrl,$.requestTimeoutMs),J=new URLSearchParams({grant_type:"authorization_code",code:$.code,redirect_uri:Z.redirectUri,client_id:Q.clientId,code_verifier:Z.verifier}),X=await fetch(W,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:J,signal:AbortSignal.timeout($.requestTimeoutMs)}),Y=await X.json();if(!X.ok){let V=lV(Y);throw new VZ(`Token exchange failed: ${X.status}${V.message?` - ${V.message}`:""}`,{status:X.status,errorCode:V.code})}let j=E0(Y.id_token);if(!Y.id_token||!j)throw Error("No ID token received from OCA");if(j.nonce!==Z.nonce)throw Error("OIDC nonce verification failed");return uV(Y,$.mode)}function t_($){let Z=$.mode==="external"?$.config.external:$.config.internal,Q=new URL(`${ZZ(Z.idcsUrl)}/oauth2/v1/authorize`);return Q.searchParams.set("client_id",Z.clientId),Q.searchParams.set("response_type","code"),Q.searchParams.set("scope",Z.scopes),Q.searchParams.set("code_challenge",$.challenge),Q.searchParams.set("code_challenge_method","S256"),Q.searchParams.set("redirect_uri",$.callbackUrl),Q.searchParams.set("state",$.state),Q.searchParams.set("nonce",$.nonce),Q.toString()}async function W6($){C1($.telemetry,"oca");let Z=cV($.config),Q=vV($.mode),W=$.callbackPorts?.length?$.callbackPorts:u_,J=$.callbackPath??c_,X=$.requestTimeoutMs??mV,Y=await J1({ports:W,callbackPath:J,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),j=Y.callbackUrl;if(!j)throw Error("Unable to bind local OAuth callback server");let V=bV(16),H=bV(16),{verifier:B,challenge:G}=await $Z();a_(),Q6.set(V,{verifier:B,nonce:H,mode:Q,redirectUri:j,createdAt:Date.now()});let K=t_({callbackUrl:j,mode:Q,state:V,nonce:H,challenge:G,config:Z});$.callbacks.onAuth({url:K,instructions:"Continue the authentication process in your browser."});try{let F=await f8({waitForCallback:Y.waitForCallback,cancelWait:Y.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 f=await o_({code:A,state:D,mode:Q,config:Z,requestTimeoutMs:X});return w1($.telemetry,"oca"),S1($.telemetry,{id:f.accountId,email:f.email,provider:"oca"}),f}catch(F){throw P1($.telemetry,"oca",F instanceof Error?F.message:String(F)),F}finally{Y.close()}}async function HZ($,Z={}){let Q=cV(Z.config),W=Z.requestTimeoutMs??mV,J=$.metadata?.mode,X=J==="internal"||J==="external"?J:vV(Z.mode),Y=X==="external"?Q.external:Q.internal,j=await dV(Y.idcsUrl,W),V=new URLSearchParams({grant_type:"refresh_token",refresh_token:$.refresh,client_id:Y.clientId}),H=await fetch(j,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:V,signal:AbortSignal.timeout(W)}),B=await H.json();if(!H.ok){let G=lV(B);throw new VZ(`Token refresh failed: ${H.status}${G.message?` - ${G.message}`:""}`,{status:H.status,errorCode:G.code})}return uV(B,X,$)}async function J6($,Z,Q){if(!$)return null;let W=Z?.refreshBufferMs??Q?.refreshBufferMs??d_,J=Z?.retryableTokenGraceMs??Q?.retryableTokenGraceMs??l_;if(Z?.forceRefresh!==!0&&!A8($,W))return $;try{return await HZ($,Q)}catch(Y){if(Y instanceof VZ&&Y.isLikelyInvalidGrant())return V$(Q?.telemetry,"oca","invalid_grant"),null;if($.expires-Date.now()>J)return $;return null}}var BZ="workos:";function e_($){let Z=$.trim();return Z.toLowerCase().startsWith(BZ)?Z:`${BZ}${Z}`}function $z($){let Z=$.trim();return Z.toLowerCase().startsWith(BZ)?Z.slice(BZ.length):Z}function Zz($){let Q=E0($)?.exp;if(typeof Q==="number"&&Q>0)return Q*1000;return null}function Qz($,Z){let Q=$.auth?.expiresAt;if(typeof Q==="number"&&Number.isFinite(Q)&&Q>0)return Q;let W=Zz(Z);if(W)return W;return Date.now()-1}function Wz($,Z){let Q=$.auth?.accessToken?.trim(),W=$.auth?.refreshToken?.trim();if(!Q||!W)return null;let J=Z?.normalizeAccessToken?.(Q)??Q;if(!J)return null;return{access:J,refresh:W,expires:Qz($,J),accountId:$.auth?.accountId}}function Jz($){let Z=$.formatAccessToken?.($.credentials.access)??$.credentials.access,Q={...$.settings?.auth??{},accessToken:Z,refreshToken:$.credentials.refresh,accountId:$.credentials.accountId,expiresAt:$.credentials.expires},W={...$.settings??{provider:$.storageProviderId},provider:$.storageProviderId,auth:Q};if($.save!==!1)$.manager.saveProviderSettings(W,{...$.setLastUsed===void 0?{}:{setLastUsed:$.setLastUsed},tokenSource:"oauth"});return W}function rW($){let Z=$.storageProviderId??$.providerId;return{providerId:$.providerId,storageProviderId:Z,getApiKey(Q){let W=Q?.auth?.accessToken?.trim();if(W)return $.formatAccessToken?.(W)??W;return Q?.apiKey?.trim()||Q?.auth?.apiKey?.trim()||void 0},login:$.login,refresh:$.refresh,saveCredentials(Q){return Jz({...Q,storageProviderId:Z,formatAccessToken:$.formatAccessToken})},isConfigured(Q){return!!Q?.auth?.accessToken},normalizeStoredAccessToken:$.normalizeStoredAccessToken}}function iV($){return rW({providerId:$.providerId,storageProviderId:$.storageProviderId,formatAccessToken:e_,normalizeStoredAccessToken:$z,login:({settings:Z,callbacks:Q,telemetry:W})=>t4({apiBaseUrl:Z?.baseUrl?.trim()||rV().apiBaseUrl,useWorkOSDeviceAuth:!0,callbacks:Q,telemetry:W}),refresh:({settings:Z,credentials:Q,forceRefresh:W,telemetry:J})=>e4(Q,{apiBaseUrl:Z.baseUrl?.trim()||rV().apiBaseUrl,telemetry:J},{forceRefresh:W})})}var Xz=[iV({providerId:"cline"}),iV({providerId:"cline-pass",storageProviderId:"cline"}),rW({providerId:"oca",login:({settings:$,callbacks:Z,telemetry:Q})=>W6({mode:$?.oca?.mode,callbacks:Z,telemetry:Q}),refresh:({settings:$,credentials:Z,forceRefresh:Q,telemetry:W})=>J6(Z,{forceRefresh:Q,telemetry:W},{mode:$.oca?.mode,telemetry:W})}),rW({providerId:"openai-codex",login:({callbacks:$,telemetry:Z})=>$6({onAuth:$.onAuth,onPrompt:$.onPrompt,onProgress:$.onProgress,onManualCodeInput:$.onManualCodeInput,telemetry:Z}),refresh:({credentials:$,forceRefresh:Z,telemetry:Q})=>Z6($,{forceRefresh:Z,telemetry:Q})})],Yz=new Map(Xz.map(($)=>[$.providerId,$]));function j0($){return Yz.get($.trim().toLowerCase())}function Q2($){return j0($)!==void 0}function iW($){return j0($)?.storageProviderId}function nW($,Z){let Q=j0(Z),W=Q?.storageProviderId??Z,J=$.getProviderSettings(W);return Q?.getApiKey(J)??D8(Z,J)}async function X6($,Z,Q){let W=j0(Z);if(!W)throw Error(`Provider "${Z}" does not support OAuth login`);let J=$.getProviderSettings(W.storageProviderId),X=await W.login({settings:J,callbacks:Q.callbacks,telemetry:Q.telemetry});return W.saveCredentials({manager:$,settings:J,credentials:X})}function Y6($,Z){let Q=j0($);if(!Q)return null;return Wz(Z,{normalizeAccessToken:Q.normalizeStoredAccessToken})}function W2($){let Z=j0($.providerId);if(!Z)throw Error(`Provider "${$.providerId}" does not support OAuth credentials`);return Z.saveCredentials({manager:$.manager,settings:$.settings,credentials:$.credentials,setLastUsed:$.setLastUsed,save:$.save})}function D8($,Z){let Q=j0($);if(Q)return Q.getApiKey(Z);return Z?.auth?.accessToken?.trim()||Z?.apiKey?.trim()||Z?.auth?.apiKey?.trim()||void 0}function aW($,Z){let Q=j0($);if(!Q)return Z.access;return Q.getApiKey({provider:Q.storageProviderId,auth:{accessToken:Z.access}})??Z.access}L0();var _H={};N(_H,{createContextCompactionPrepareTurn:()=>K6});import{createHandlerAsync as Gz}from"@cline/llms";import{estimateTokens as sW}from"@cline/shared";var oV=200000,oW=0.9,tV=16384,tW=20000,aV=1024,sV=2000,eV=2000,$H=8;function A$($,Z){if($.length<=Z)return $;return`${$.slice(0,Z)}
|
|
320
|
-
...[truncated ${$.length-Z} chars]`}function
|
|
319
|
+
</html>`;function TV($){let Z="";for(let Q=0;Q<$.length;Q+=1)Z+=String.fromCharCode($[Q]??0);return btoa(Z).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}async function Rz($){let Q=new TextEncoder().encode($),W=await crypto.subtle.digest("SHA-256",Q);return new Uint8Array(W)}function Ez($=32){let Z=new Uint8Array($);return crypto.getRandomValues(Z),TV(Z)}async function e9(){let $=Ez(),Z=TV(await Rz($));return{verifier:$,challenge:Z}}function $Z($){return $.endsWith("/")?$.slice(0,-1):$}function $2($,Z){return new URL(Z,`${$Z($)}/`).toString()}function G8($,Z={}){let Q=$.trim();if(!Q)return{};try{let W=new URL(Q);return{code:W.searchParams.get("code")??void 0,state:W.searchParams.get("state")??void 0,provider:Z.includeProvider?W.searchParams.get("provider")??void 0:void 0}}catch{}if(Z.allowHashCodeState&&Q.includes("#")){let[W,J]=Q.split("#",2);return{code:W||void 0,state:J||void 0}}if(Q.includes("code=")){let W=new URLSearchParams(Q);return{code:W.get("code")??void 0,state:W.get("state")??void 0,provider:Z.includeProvider?W.get("provider")??void 0:void 0}}return{code:Q}}function Nz($){if(typeof atob==="function")try{return atob($)}catch{return null}if(typeof Buffer<"u")try{return Buffer.from($,"base64").toString("utf8")}catch{return null}return null}function E0($){if(!$)return null;try{let Z=$.split(".");if(Z.length!==3)return null;let Q=Z[1];if(!Q)return null;let W=Q.replace(/-/g,"+").replace(/_/g,"/"),J=W.padEnd(W.length+(4-W.length%4)%4,"="),X=Nz(J);if(!X)return null;return JSON.parse(X)}catch{return null}}function K8($){try{let Z=JSON.parse($),Q=Z.error,W=typeof Q==="string"?Q:Q&&typeof Q==="object"&&typeof Q.type==="string"?Q.type:void 0,J=typeof Z.error_description==="string"?Z.error_description:typeof Z.message==="string"?Z.message:Q&&typeof Q==="object"&&typeof Q.message==="string"?Q.message:void 0;return{code:W,message:J}}catch{return{}}}function F8($,Z){return Date.now()>=$.expires-Z}async function A8($){if(!$.onManualCodeInput){let X=await $.waitForCallback();return{code:X?.code,state:X?.state,provider:X?.provider,error:X?.error}}let Z,Q,W=$.onManualCodeInput().then((X)=>{Z=X,$.cancelWait()}).catch((X)=>{Q=X instanceof Error?X:Error(String(X)),$.cancelWait()}),J=await $.waitForCallback();if(Q)throw Q;if(J?.code||J?.error)return{code:J.code,state:J.state,provider:J.provider,error:J.error};if(Z)return G8(Z,$.parseOptions);if(await W,Q)throw Q;if(Z)return G8(Z,$.parseOptions);return{}}var ZZ={authorize:"/api/v1/auth/authorize",token:"/api/v1/auth/token",register:"/api/v1/auth/register",refresh:"/api/v1/auth/refresh"},RV={deviceAuthorization:"/user_management/authorize/device",authenticate:"/user_management/authenticate"},mW="https://api.workos.com",wz="/auth",OV=Array.from({length:11},($,Z)=>48801+Z),Cz=300000,Pz=30000,f8=30000,Sz=300,bz=5;class K$ extends Error{status;errorCode;constructor($,Z){super($);this.name="ClineOAuthTokenError",this.status=Z?.status,this.errorCode=Z?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant|invalid_token|unauthorized/i.test(this.errorCode))return!0;if(this.status===400||this.status===401||this.status===403)return/invalid|expired|revoked|unauthorized/i.test(this.message);return!1}}function yz($){let Z=Date.parse($);if(Number.isNaN(Z))throw Error(`Invalid expiresAt value: ${$}`);return Z}function vW($,Z,Q={}){let W=$.userInfo.clineUserId??Q.accountId,J=$.refreshToken??Q.refresh;if(!J)throw Error("Token response did not include a refresh token");return{access:$.accessToken,refresh:J,expires:yz($.expiresAt),accountId:W??void 0,email:$.userInfo.email||Q.email,metadata:{provider:Z,tokenType:$.tokenType,userInfo:$.userInfo}}}async function cW($){if(!$)return{};return typeof $==="function"?await $():$}function qV($,Z){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return Z;return Math.floor($)}async function MV($){await new Promise((Z)=>setTimeout(Z,$))}function uW($,Z){if(!$.success||!$.data?.accessToken)throw Error(Z);return $.data}async function EV($,Z){let Q=await fetch($2(mW,RV.deviceAuthorization),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({client_id:$}),signal:AbortSignal.timeout(Z?.requestTimeoutMs??f8)}),W=await Q.json().catch(()=>({}));if(!Q.ok)throw new K$(`Device authorization failed: ${Q.status}${W.error_description?` - ${W.error_description}`:""}`,{status:Q.status,errorCode:W.error});if(!W.device_code||!W.user_code||!W.verification_uri)throw Error("Invalid WorkOS device authorization response");return{deviceCode:W.device_code,userCode:W.user_code,verificationUri:W.verification_uri,verificationUriComplete:W.verification_uri_complete,expiresInSeconds:qV(W.expires_in,Sz),pollIntervalSeconds:qV(W.interval,bz)}}async function NV($){let Z=Date.now()+$.expiresInSeconds*1000,Q=Math.max(1,$.initialPollIntervalSeconds);while(Date.now()<=Z){let W=await fetch($2($.workosApiBaseUrl,RV.authenticate),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"urn:ietf:params:oauth:grant-type:device_code",device_code:$.deviceCode,client_id:$.clientId}),signal:AbortSignal.timeout($.requestTimeoutMs)}),J=await W.json().catch(()=>({}));if(W.ok){if(!J.access_token||!J.refresh_token)throw Error("Invalid WorkOS token response");return{accessToken:J.access_token,refreshToken:J.refresh_token,tokenType:J.token_type??"Bearer"}}switch(J.error){case"authorization_pending":{await MV(Q*1000);break}case"slow_down":{Q+=1,await MV(Q*1000);break}case"access_denied":case"expired_token":case"invalid_grant":throw new K$(J.error_description||"WorkOS authorization failed",{status:W.status,errorCode:J.error});default:throw new K$(`WorkOS token polling failed: ${W.status}${J.error_description?` - ${J.error_description}`:""}`,{status:W.status,errorCode:J.error})}$.onProgress?.("Waiting for browser authentication confirmation...")}throw Error("WorkOS device authorization timed out")}async function wV($,Z,Q){let W={accessToken:$.accessToken,refreshToken:$.refreshToken},J=await fetch($2(Z.apiBaseUrl,ZZ.register),{method:"POST",headers:{"Content-Type":"application/json",...await cW(Z.headers)},body:JSON.stringify(W),signal:AbortSignal.timeout(Z.requestTimeoutMs??f8)});if(!J.ok){let Y=await J.text().catch(()=>""),j=K8(Y);throw new K$(`Token registration failed: ${J.status}${j.message?` - ${j.message}`:""}`,{status:J.status,errorCode:j.code})}let X=await J.json();return vW(uW(X,"Invalid token exchange response"),Q??Z.provider)}async function hz($,Z,Q,W){let J={grant_type:"authorization_code",code:$,client_type:"extension",redirect_uri:Z,provider:W??Q.provider},X=await fetch($2(Q.apiBaseUrl,ZZ.token),{method:"POST",headers:{"Content-Type":"application/json",...await cW(Q.headers)},body:JSON.stringify(J),signal:AbortSignal.timeout(Q.requestTimeoutMs??f8)});if(!X.ok){let j=await X.text().catch(()=>""),V=K8(j);throw new K$(`Token exchange failed: ${X.status}${V.message?` - ${V.message}`:""}`,{status:X.status,errorCode:V.code})}let Y=await X.json();return vW(uW(Y,"Invalid token exchange response"),W??Q.provider)}async function o4($){w1($.telemetry,$.provider??"cline");let Z=$.useWorkOSDeviceAuth??!0,Q=$.callbackPorts?.length?$.callbackPorts:OV,W=$.callbackPath??wz,J=Z?null:await J1({ports:Q,callbackPath:W,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),X=J?.callbackUrl||`http://127.0.0.1:${Q[0]??OV[0]}${W}`;try{let Y;if(Z){let j=gW().workOsClientId,V=await EV(j,$);$.callbacks.onAuth({url:V.verificationUriComplete??V.verificationUri,instructions:`Enter this code in your browser: ${V.userCode}`});let H=await NV({clientId:j,deviceCode:V.deviceCode,expiresInSeconds:V.expiresInSeconds,initialPollIntervalSeconds:V.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??f8,workosApiBaseUrl:mW,onProgress:$.callbacks.onProgress});Y=await wV(H,$,$.provider)}else{let j=new URL($2($.apiBaseUrl,ZZ.authorize));j.searchParams.set("client_type","extension"),j.searchParams.set("callback_url",X),j.searchParams.set("redirect_uri",X),$.callbacks.onAuth({url:j.toString(),instructions:"Continue the authentication process in your browser."});let V,H=$.provider,B=await A8({waitForCallback:J?.waitForCallback??(async()=>null),cancelWait:J?.cancelWait??(()=>{}),onManualCodeInput:$.callbacks.onManualCodeInput,parseOptions:{includeProvider:!0}});if(B.error)throw Error(`OAuth error: ${B.error}`);if(V=B.code,H=B.provider??H,!V){let G=await $.callbacks.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),K=G8(G,{includeProvider:!0});V=K.code,H=K.provider??H}if(!V)throw Error("Missing authorization code");Y=await hz(V,X,$,H)}return C1($.telemetry,$.provider??"cline"),S1($.telemetry,{id:Y.accountId,email:Y.email,provider:$.provider??"cline"}),Y}catch(Y){throw P1($.telemetry,$.provider??"cline",Y instanceof Error?Y.message:String(Y)),Y}finally{J?.close()}}async function dW($){return await EV(gW().workOsClientId,$)}async function lW($){let Z=$.provider??"cline";w1($.telemetry,Z);try{let Q=await NV({clientId:gW().workOsClientId,deviceCode:$.deviceCode,expiresInSeconds:$.expiresInSeconds,initialPollIntervalSeconds:$.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??f8,workosApiBaseUrl:mW}),W=await wV(Q,{apiBaseUrl:$.apiBaseUrl,headers:$.headers,requestTimeoutMs:$.requestTimeoutMs,provider:$.provider},$.provider);return C1($.telemetry,Z),S1($.telemetry,{id:W.accountId,email:W.email,provider:Z}),W}catch(Q){throw P1($.telemetry,Z,Q instanceof Error?Q.message:String(Q)),Q}}async function QZ($,Z){let Q=await fetch($2(Z.apiBaseUrl,ZZ.refresh),{method:"POST",headers:{"Content-Type":"application/json",...await cW(Z.headers)},body:JSON.stringify({refreshToken:$.refresh,grantType:"refresh_token"}),signal:AbortSignal.timeout(Z.requestTimeoutMs??f8)});if(!Q.ok){let X=await Q.text().catch(()=>""),Y=K8(X);throw new K$(`Token refresh failed: ${Q.status}${Y.message?` - ${Y.message}`:""}`,{status:Q.status,errorCode:Y.code})}let W=await Q.json(),J=$.metadata?.provider??Z.provider;return vW(uW(W,"Invalid token refresh response"),J,$)}async function t4($,Z,Q){if(!$)return null;let W=Q?.refreshBufferMs??Cz,J=Q?.retryableTokenGraceMs??Pz;if(Q?.forceRefresh!==!0&&!F8($,W))return $;try{return await QZ($,Z)}catch(Y){if(Y instanceof K$&&Y.isLikelyInvalidGrant())return V$(Z.telemetry,Z.provider??"cline","invalid_grant"),null;if($.expires-Date.now()>J)return $;return null}}_0();var SV={};N(SV,{refreshOpenAICodexToken:()=>JZ,loginOpenAICodex:()=>e4,getValidOpenAICodexCredentials:()=>$6,OPENAI_CODEX_OAUTH_CONFIG:()=>X0});import{nanoid as kz}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 WZ extends Error{status;errorCode;constructor($,Z){super($);this.name="OpenAICodexOAuthTokenError",this.status=Z?.status,this.errorCode=Z?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant/i.test(this.errorCode))return!0;if(this.status===400||this.status===401||this.status===403)return/invalid_grant|revoked|expired|invalid refresh/i.test(this.message);return!1}}async function Iz($,Z,Q=X0.redirectUri){let W=await fetch(X0.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"authorization_code",client_id:X0.clientId,code:$,code_verifier:Z,redirect_uri:Q}),signal:AbortSignal.timeout(X0.httpTimeoutMs)});if(!W.ok)return{type:"failed"};let J=await W.json();if(!J.access_token||!J.refresh_token||typeof J.expires_in!=="number")return{type:"failed"};return{type:"success",access:J.access_token,refresh:J.refresh_token,expires:Date.now()+J.expires_in*1000,email:J.email,idToken:J.id_token}}async function xz($){try{let Z=await fetch(X0.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:$,client_id:X0.clientId}),signal:AbortSignal.timeout(X0.httpTimeoutMs)});if(!Z.ok){let W=await Z.text().catch(()=>""),J=K8(W);throw new WZ(`Token refresh failed: ${Z.status}${J.message?` - ${J.message}`:""}`,{status:Z.status,errorCode:J.code})}let Q=await Z.json();if(!Q.access_token||!Q.refresh_token||typeof Q.expires_in!=="number")return{type:"failed"};return{type:"success",access:Q.access_token,refresh:Q.refresh_token,expires:Date.now()+Q.expires_in*1000,email:Q.email,idToken:Q.id_token}}catch(Z){if(Z instanceof WZ)throw Z;return{type:"failed"}}}async function gz($="pi"){let{verifier:Z,challenge:Q}=await e9(),W=kz(32),J=new URL(X0.authorizationEndpoint);return J.searchParams.set("response_type","code"),J.searchParams.set("client_id",X0.clientId),J.searchParams.set("redirect_uri",X0.redirectUri),J.searchParams.set("scope",X0.scopes),J.searchParams.set("code_challenge",Q),J.searchParams.set("code_challenge_method","S256"),J.searchParams.set("state",W),J.searchParams.set("id_token_add_organizations","true"),J.searchParams.set("codex_cli_simplified_flow","true"),J.searchParams.set("originator",$),{verifier:Z,state:W,url:J.toString()}}function mz(){try{let $=new URL(X0.redirectUri),Z=$.port.length>0?Number.parseInt($.port,10):X0.callbackPort;return{host:$.hostname||"localhost",port:Number.isFinite(Z)?Z:X0.callbackPort,callbackPath:$.pathname||"/auth/callback",redirectUri:$.toString()}}catch{return{host:"localhost",port:X0.callbackPort,callbackPath:"/auth/callback",redirectUri:X0.redirectUri}}}function vz($,Z){let Q=Z?E0(Z):E0($),W=Q?Q:E0($),X=W?.[X0.jwtClaimPath]?.chatgpt_account_id;if(typeof X==="string"&&X.length>0)return X;let Y=W?.organizations;if(Array.isArray(Y)&&Y.length>0){let V=Y[0];if(typeof V?.id==="string"&&V.id.length>0)return V.id}let j=W?.chatgpt_account_id;if(typeof j==="string"&&j.length>0)return j;return null}function PV($,Z){let Q=vz($.access,$.idToken)??Z?.accountId;if(!Q)throw Error("Failed to extract accountId from token");return{access:$.access,refresh:$.refresh||Z?.refresh||"",expires:$.expires,accountId:Q,email:$.email??Z?.email,metadata:{...Z?.metadata??{},provider:"openai-codex"}}}async function e4($){w1($.telemetry,"openai-codex");let Z=mz(),{verifier:Q,state:W,url:J}=await gz($.originator),X=await J1({host:Z.host,ports:[Z.port],callbackPath:Z.callbackPath,expectedState:W});$.onAuth({url:J,instructions:"Continue the authentication process in your browser."});let Y;try{let j=await A8({waitForCallback:X.waitForCallback,cancelWait:X.cancelWait,onManualCodeInput:$.onManualCodeInput,parseOptions:{allowHashCodeState:!0}});if(j.state&&j.state!==W)throw Error("State mismatch");if(Y=j.code,!Y){let B=await $.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),G=G8(B,{allowHashCodeState:!0});if(G.state&&G.state!==W)throw Error("State mismatch");Y=G.code}if(!Y)throw Error("Missing authorization code");let V=await Iz(Y,Q,Z.redirectUri);if(V.type!=="success")throw Error("Token exchange failed");let H=PV(V);return C1($.telemetry,"openai-codex"),S1($.telemetry,{id:H.accountId,email:H.email,provider:"openai-codex"}),H}catch(j){throw P1($.telemetry,"openai-codex",j instanceof Error?j.message:String(j)),j}finally{X.close()}}async function JZ($,Z){let Q=await xz($);if(Q.type!=="success")throw Error("Failed to refresh OpenAI Codex token");let W=PV(Q,Z);if(!W.refresh)throw Error("Failed to refresh OpenAI Codex token: missing refresh token");return W}async function $6($,Z){if(!$)return null;let Q=Z?.refreshBufferMs??X0.refreshBufferMs,W=Z?.retryableTokenGraceMs??X0.retryableTokenGraceMs;if(Z?.forceRefresh!==!0&&!F8($,Q))return $;try{return await JZ($.refresh,$)}catch(X){if(X instanceof WZ&&X.isLikelyInvalidGrant())return V$(Z?.telemetry,"openai-codex","invalid_grant"),null;if($.expires-Date.now()>W)return $;return null}}_0();var pV={};N(pV,{refreshOcaToken:()=>VZ,loginOcaOAuth:()=>Q6,getValidOcaCredentials:()=>W6,OCI_HEADER_OPC_REQUEST_ID:()=>cz,DEFAULT_INTERNAL_OCA_BASE_URL:()=>XZ,DEFAULT_INTERNAL_IDCS_URL:()=>hV,DEFAULT_INTERNAL_IDCS_SCOPES:()=>kV,DEFAULT_INTERNAL_IDCS_CLIENT_ID:()=>yV,DEFAULT_EXTERNAL_OCA_BASE_URL:()=>YZ,DEFAULT_EXTERNAL_IDCS_URL:()=>xV,DEFAULT_EXTERNAL_IDCS_SCOPES:()=>gV,DEFAULT_EXTERNAL_IDCS_CLIENT_ID:()=>IV});import{nanoid as bV}from"nanoid";class pW{ttlMs;maxEntries;entries=new Map;constructor($,Z){this.ttlMs=$;this.maxEntries=Z}get($,Z=Date.now()){this.pruneExpired(Z);let Q=this.entries.get($);if(!Q)return;return this.entries.delete($),this.entries.set($,Q),Q.value}set($,Z,Q=Date.now(),W=this.ttlMs){this.pruneExpired(Q),this.entries.delete($);while(this.entries.size>=this.maxEntries){let J=this.entries.keys().next().value;if(J===void 0)break;this.entries.delete(J)}this.entries.set($,{value:Z,expiresAt:Q+W})}pruneExpired($){for(let[Z,Q]of this.entries)if(Q.expiresAt<=$)this.entries.delete(Z)}}var yV="a8331954c0cf48ba99b5dd223a14c6ea",hV="https://idcs-9dc693e80d9b469480d7afe00e743931.identity.oraclecloud.com",kV="openid offline_access",XZ="https://code-internal.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",IV="c1aba3deed5740659981a752714eba33",xV="https://login-ext.identity.oraclecloud.com",gV="openid offline_access",YZ="https://code.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",cz="opc-request-id",uz="/auth/oca",dz=Array.from({length:11},($,Z)=>48801+Z),lz=300000,pz=30000,mV=30000,rz=600000;class jZ extends Error{status;errorCode;constructor($,Z){super($);this.name="OcaOAuthTokenError",this.status=Z?.status,this.errorCode=Z?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant|invalid_token|unauthorized/i.test(this.errorCode))return!0;return this.status===400||this.status===401||this.status===403}}var F$={internal:{clientId:yV,idcsUrl:hV,scopes:kV,baseUrl:XZ},external:{clientId:IV,idcsUrl:xV,scopes:gV,baseUrl:YZ}},Z6=new Map,iz=86400000,nz=300000,az=32,rW=new pW(iz,az);function vV($){if(typeof $==="function")return $();return $??"internal"}function cV($){return{internal:{clientId:$?.internal?.clientId??F$.internal.clientId,idcsUrl:$?.internal?.idcsUrl??F$.internal.idcsUrl,scopes:$?.internal?.scopes??F$.internal.scopes,baseUrl:$?.internal?.baseUrl??F$.internal.baseUrl},external:{clientId:$?.external?.clientId??F$.external.clientId,idcsUrl:$?.external?.idcsUrl??F$.external.idcsUrl,scopes:$?.external?.scopes??F$.external.scopes,baseUrl:$?.external?.baseUrl??F$.external.baseUrl}}}function sz($=Date.now()){let Z=$-rz;for(let[Q,W]of Z6.entries())if(W.createdAt<Z)Z6.delete(Q)}function oz($,Z,Q){if(typeof $.expires_in==="number"&&$.expires_in>0)return Date.now()+$.expires_in*1000;let J=E0(Z)?.exp;if(typeof J==="number"&&J>0)return J*1000;let Y=E0(Q)?.exp;if(typeof Y==="number"&&Y>0)return Y*1000;return Date.now()+3600000}function uV($,Z,Q){let W=$.access_token;if(!W)throw Error("Token response did not include an access token");let J=$.refresh_token??Q?.refresh;if(!J)throw Error("Token response did not include a refresh token");let X=E0($.id_token),Y=E0(W),j=X?.sub??Y?.sub,V=X?.email??Y?.email;return{access:W,refresh:J,expires:oz($,W,$.id_token),accountId:j??Q?.accountId,email:V??Q?.email,metadata:{...Q?.metadata??{},provider:"oca",mode:Z,subject:j,idToken:$.id_token}}}async function dV($,Z){let Q=$Z($),W=rW.get(Q);if(W)return W;let J=`${Q}/.well-known/openid-configuration`,X=await fetch(J,{method:"GET",signal:AbortSignal.timeout(Z)});if(!X.ok){let V=`${Q}/oauth2/v1/token`;return rW.set(Q,V,Date.now(),nz),V}let j=(await X.json()).token_endpoint||`${Q}/oauth2/v1/token`;return rW.set(Q,j),j}function lV($){return{code:$.error,message:$.error_description}}async function tz($){let Z=Z6.get($.state);if(!Z)throw Error("No PKCE verifier found for this state");Z6.delete($.state);let Q=$.mode==="external"?$.config.external:$.config.internal,W=await dV(Q.idcsUrl,$.requestTimeoutMs),J=new URLSearchParams({grant_type:"authorization_code",code:$.code,redirect_uri:Z.redirectUri,client_id:Q.clientId,code_verifier:Z.verifier}),X=await fetch(W,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:J,signal:AbortSignal.timeout($.requestTimeoutMs)}),Y=await X.json();if(!X.ok){let V=lV(Y);throw new jZ(`Token exchange failed: ${X.status}${V.message?` - ${V.message}`:""}`,{status:X.status,errorCode:V.code})}let j=E0(Y.id_token);if(!Y.id_token||!j)throw Error("No ID token received from OCA");if(j.nonce!==Z.nonce)throw Error("OIDC nonce verification failed");return uV(Y,$.mode)}function ez($){let Z=$.mode==="external"?$.config.external:$.config.internal,Q=new URL(`${$Z(Z.idcsUrl)}/oauth2/v1/authorize`);return Q.searchParams.set("client_id",Z.clientId),Q.searchParams.set("response_type","code"),Q.searchParams.set("scope",Z.scopes),Q.searchParams.set("code_challenge",$.challenge),Q.searchParams.set("code_challenge_method","S256"),Q.searchParams.set("redirect_uri",$.callbackUrl),Q.searchParams.set("state",$.state),Q.searchParams.set("nonce",$.nonce),Q.toString()}async function Q6($){w1($.telemetry,"oca");let Z=cV($.config),Q=vV($.mode),W=$.callbackPorts?.length?$.callbackPorts:dz,J=$.callbackPath??uz,X=$.requestTimeoutMs??mV,Y=await J1({ports:W,callbackPath:J,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),j=Y.callbackUrl;if(!j)throw Error("Unable to bind local OAuth callback server");let V=bV(16),H=bV(16),{verifier:B,challenge:G}=await e9();sz(),Z6.set(V,{verifier:B,nonce:H,mode:Q,redirectUri:j,createdAt:Date.now()});let K=ez({callbackUrl:j,mode:Q,state:V,nonce:H,challenge:G,config:Z});$.callbacks.onAuth({url:K,instructions:"Continue the authentication process in your browser."});try{let F=await A8({waitForCallback:Y.waitForCallback,cancelWait:Y.cancelWait,onManualCodeInput:$.callbacks.onManualCodeInput}),A=F.code,L=F.state;if(F.error)throw Error(`OAuth error: ${F.error}`);if(!A){if(!$.callbacks.onManualCodeInput)throw Error("Timed out waiting for OCA callback");throw Error("Missing authorization code")}if(!L||L!==V)throw Error("State mismatch");let f=await tz({code:A,state:L,mode:Q,config:Z,requestTimeoutMs:X});return C1($.telemetry,"oca"),S1($.telemetry,{id:f.accountId,email:f.email,provider:"oca"}),f}catch(F){throw P1($.telemetry,"oca",F instanceof Error?F.message:String(F)),F}finally{Y.close()}}async function VZ($,Z={}){let Q=cV(Z.config),W=Z.requestTimeoutMs??mV,J=$.metadata?.mode,X=J==="internal"||J==="external"?J:vV(Z.mode),Y=X==="external"?Q.external:Q.internal,j=await dV(Y.idcsUrl,W),V=new URLSearchParams({grant_type:"refresh_token",refresh_token:$.refresh,client_id:Y.clientId}),H=await fetch(j,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:V,signal:AbortSignal.timeout(W)}),B=await H.json();if(!H.ok){let G=lV(B);throw new jZ(`Token refresh failed: ${H.status}${G.message?` - ${G.message}`:""}`,{status:H.status,errorCode:G.code})}return uV(B,X,$)}async function W6($,Z,Q){if(!$)return null;let W=Z?.refreshBufferMs??Q?.refreshBufferMs??lz,J=Z?.retryableTokenGraceMs??Q?.retryableTokenGraceMs??pz;if(Z?.forceRefresh!==!0&&!F8($,W))return $;try{return await VZ($,Q)}catch(Y){if(Y instanceof jZ&&Y.isLikelyInvalidGrant())return V$(Q?.telemetry,"oca","invalid_grant"),null;if($.expires-Date.now()>J)return $;return null}}var HZ="workos:";function $T($){let Z=$.trim();return Z.toLowerCase().startsWith(HZ)?Z:`${HZ}${Z}`}function ZT($){let Z=$.trim();return Z.toLowerCase().startsWith(HZ)?Z.slice(HZ.length):Z}function QT($){let Q=E0($)?.exp;if(typeof Q==="number"&&Q>0)return Q*1000;return null}function WT($,Z){let Q=$.auth?.expiresAt;if(typeof Q==="number"&&Number.isFinite(Q)&&Q>0)return Q;let W=QT(Z);if(W)return W;return Date.now()-1}function JT($,Z){let Q=$.auth?.accessToken?.trim(),W=$.auth?.refreshToken?.trim();if(!Q||!W)return null;let J=Z?.normalizeAccessToken?.(Q)??Q;if(!J)return null;return{access:J,refresh:W,expires:WT($,J),accountId:$.auth?.accountId}}function XT($){let Z=$.formatAccessToken?.($.credentials.access)??$.credentials.access,Q={...$.settings?.auth??{},accessToken:Z,refreshToken:$.credentials.refresh,accountId:$.credentials.accountId,expiresAt:$.credentials.expires},W={...$.settings??{provider:$.storageProviderId},provider:$.storageProviderId,auth:Q};if($.save!==!1)$.manager.saveProviderSettings(W,{...$.setLastUsed===void 0?{}:{setLastUsed:$.setLastUsed},tokenSource:"oauth"});return W}function iW($){let Z=$.storageProviderId??$.providerId;return{providerId:$.providerId,storageProviderId:Z,getApiKey(Q){let W=Q?.auth?.accessToken?.trim();if(W)return $.formatAccessToken?.(W)??W;return Q?.apiKey?.trim()||Q?.auth?.apiKey?.trim()||void 0},login:$.login,refresh:$.refresh,saveCredentials(Q){return XT({...Q,storageProviderId:Z,formatAccessToken:$.formatAccessToken})},isConfigured(Q){return!!Q?.auth?.accessToken},normalizeStoredAccessToken:$.normalizeStoredAccessToken}}function iV($){return iW({providerId:$.providerId,storageProviderId:$.storageProviderId,formatAccessToken:$T,normalizeStoredAccessToken:ZT,login:({settings:Z,callbacks:Q,telemetry:W})=>o4({apiBaseUrl:Z?.baseUrl?.trim()||rV().apiBaseUrl,useWorkOSDeviceAuth:!0,callbacks:Q,telemetry:W}),refresh:({settings:Z,credentials:Q,forceRefresh:W,telemetry:J})=>t4(Q,{apiBaseUrl:Z.baseUrl?.trim()||rV().apiBaseUrl,telemetry:J},{forceRefresh:W})})}var YT=[iV({providerId:"cline"}),iV({providerId:"cline-pass",storageProviderId:"cline"}),iW({providerId:"oca",login:({settings:$,callbacks:Z,telemetry:Q})=>Q6({mode:$?.oca?.mode,callbacks:Z,telemetry:Q}),refresh:({settings:$,credentials:Z,forceRefresh:Q,telemetry:W})=>W6(Z,{forceRefresh:Q,telemetry:W},{mode:$.oca?.mode,telemetry:W})}),iW({providerId:"openai-codex",login:({callbacks:$,telemetry:Z})=>e4({onAuth:$.onAuth,onPrompt:$.onPrompt,onProgress:$.onProgress,onManualCodeInput:$.onManualCodeInput,telemetry:Z}),refresh:({credentials:$,forceRefresh:Z,telemetry:Q})=>$6($,{forceRefresh:Z,telemetry:Q})})],jT=new Map(YT.map(($)=>[$.providerId,$]));function j0($){return jT.get($.trim().toLowerCase())}function Z2($){return j0($)!==void 0}function nW($){return j0($)?.storageProviderId}function aW($,Z){let Q=j0(Z),W=Q?.storageProviderId??Z,J=$.getProviderSettings(W);return Q?.getApiKey(J)??U8(Z,J)}async function J6($,Z,Q){let W=j0(Z);if(!W)throw Error(`Provider "${Z}" does not support OAuth login`);let J=$.getProviderSettings(W.storageProviderId),X=await W.login({settings:J,callbacks:Q.callbacks,telemetry:Q.telemetry});return W.saveCredentials({manager:$,settings:J,credentials:X})}function X6($,Z){let Q=j0($);if(!Q)return null;return JT(Z,{normalizeAccessToken:Q.normalizeStoredAccessToken})}function Q2($){let Z=j0($.providerId);if(!Z)throw Error(`Provider "${$.providerId}" does not support OAuth credentials`);return Z.saveCredentials({manager:$.manager,settings:$.settings,credentials:$.credentials,setLastUsed:$.setLastUsed,save:$.save})}function U8($,Z){let Q=j0($);if(Q)return Q.getApiKey(Z);return Z?.auth?.accessToken?.trim()||Z?.apiKey?.trim()||Z?.auth?.apiKey?.trim()||void 0}function sW($,Z){let Q=j0($);if(!Q)return Z.access;return Q.getApiKey({provider:Q.storageProviderId,auth:{accessToken:Z.access}})??Z.access}_0();var TH={};N(TH,{createContextCompactionPrepareTurn:()=>G6});import{createHandlerAsync as KT}from"@cline/llms";import{CHARS_PER_TOKEN as iv,estimateTokens as oW}from"@cline/shared";var oV=200000,tV=0.9,BZ=0.7,eV=16384,tW=20000,aV=1024,sV=2000,$H=2000,ZH=8;function V6($,Z){if($.length<=Z)return $;return`${$.slice(0,Z)}
|
|
320
|
+
...[truncated ${$.length-Z} chars]`}function VT($){let Z=eW($);if(typeof Z==="string")return Z;return Z.map((Q)=>{switch(Q.type){case"text":return Q.text;case"file":return`<file path="${Q.path}">
|
|
321
321
|
${Q.content}
|
|
322
322
|
</file>`;case"image":return`[image:${Q.mediaType}]`;default:return""}}).join(`
|
|
323
|
-
`)}function eW($){if(typeof $==="string")return
|
|
324
|
-
`)}function
|
|
323
|
+
`)}function eW($){if(typeof $==="string")return V6($,sV);return $.map((Z)=>{switch(Z.type){case"text":return{...Z,text:V6(Z.text,sV)};case"file":return{...Z,content:V6(Z.content,$H)};case"image":return Z;default:return Z}})}function HT($){return Object.entries($).map(([Z,Q])=>`${Z}=${JSON.stringify(Q)}`).join(", ")}function QH($){if(typeof $.content==="string")return`[${$.role==="user"?"User":"Bot"}]: ${$.content}`;let Z=[];for(let Q of $.content)switch(Q.type){case"text":Z.push(`[${$.role==="user"?"User":"Bot"}]: ${Q.text}`);break;case"thinking":Z.push(`[Bot thinking]: ${V6(Q.thinking,2000)}`);break;case"redacted_thinking":Z.push("[Bot thinking]: [redacted]");break;case"tool_use":Z.push(`[Bot tool calls]: ${Q.name}(${HT(Q.input)})`);break;case"tool_result":Z.push(`[Tool result]: ${VT(Q.content)}`);break;case"file":Z.push(`[${$.role==="user"?"User":"Bot"} file ${Q.path}]: ${V6(Q.content,$H)}`);break;case"image":Z.push(`[${$.role==="user"?"User":"Bot"} image]: ${Q.mediaType}`);break}return Z.join(`
|
|
324
|
+
`)}function WH($){return $.map(QH).join(`
|
|
325
325
|
|
|
326
|
-
`).trim()}function
|
|
326
|
+
`).trim()}function JH(){let $=new WeakMap;return(Z)=>{let Q=Z,W=$.get(Q);if(typeof W==="number")return W;let J;try{J=JSON.stringify(Z)}catch{J=QH(Z)}let X=oW(J.length);return $.set(Q,X),X}}function H6($){return $.metadata?.kind==="compaction_summary"}function $3($){if(!H6($))return;let Z=$.metadata;if(!Z)return;let Q=Z.details;return{kind:"compaction_summary",summary:String(Z.summary??""),details:{readFiles:Array.isArray(Q?.readFiles)?Q.readFiles.filter((W)=>typeof W==="string").map((W)=>W.trim()).filter((W)=>W.length>0):[],modifiedFiles:Array.isArray(Q?.modifiedFiles)?Q.modifiedFiles.filter((W)=>typeof W==="string").map((W)=>W.trim()).filter((W)=>W.length>0):[]},tokensBefore:Number(Z.tokensBefore??0),generatedAt:Number(Z.generatedAt??0)}}function BT($){if($.role!=="user"||!Array.isArray($.content))return!1;return $.content.length>0&&$.content.every((Z)=>Z.type==="tool_result")}function B6($){return $.role==="user"&&!BT($)&&!H6($)}function XH($){for(let Z=0;Z<$.length;Z+=1)if(B6($[Z]))return Z;return-1}function GZ($){for(let Z=$.length-1;Z>=0;Z-=1)if(B6($[Z]))return Z;return 0}function YH($){for(let Z=$.length-1;Z>=0;Z-=1)if($[Z].role==="assistant")return Z;return-1}function jH($){for(let Z=$.length-1;Z>=0;Z-=1)if(H6($[Z]))return Z;return-1}function VH($,Z,Q){let W=GZ($);if(W<=0)return 0;let J=0,X=$.length;for(let j=$.length-1;j>=0;j-=1)if(J+=Q($[j]),X=j,J>=Z)break;if(X<=0)return 0;let Y=Math.min(X,W);while(Y>0&&!B6($[Y]))Y-=1;return Y}function j6($){if(typeof $==="string"&&$.trim().length>0)return[$];if(Array.isArray($))return $.flatMap((Z)=>j6(Z));if($&&typeof $==="object"){let Z=$,Q=[];for(let W of["path","file_path","target_file","new_file_path","old_file_path"])Q.push(...j6(Z[W]));if(Array.isArray(Z.files)){for(let W of Z.files)if(W&&typeof W==="object")Q.push(...j6(W.path))}if(Array.isArray(Z.file_paths))Q.push(...j6(Z.file_paths));return Q}return[]}function Y6($,Z){let Q=new Set($);for(let W of Z){let J=W.trim();if(!J)continue;Q.add(J)}return[...Q].sort((W,J)=>W.localeCompare(J))}function HH($){let Z=[],Q=[];for(let W of $){let J=$3(W);if(J){Z=Y6(Z,J.details.readFiles),Q=Y6(Q,J.details.modifiedFiles);continue}if(!Array.isArray(W.content))continue;for(let X of W.content){if(X.type==="file"){Z=Y6(Z,[X.path]);continue}if(X.type!=="tool_use")continue;let Y=j6(X.input);if(X.name==="read_files"){Z=Y6(Z,Y);continue}if(X.name==="editor"||X.name==="apply_patch")Q=Y6(Q,Y)}}return{readFiles:Z,modifiedFiles:Q}}function GT($){let Z=$.readFiles.length>0?$.readFiles.map((W)=>`- ${W}`).join(`
|
|
327
327
|
`):"- none",Q=$.modifiedFiles.length>0?$.modifiedFiles.map((W)=>`- ${W}`).join(`
|
|
328
328
|
`):"- none";return`## Files
|
|
329
329
|
Read:
|
|
330
330
|
${Z}
|
|
331
331
|
Modified:
|
|
332
|
-
${Q}`}function
|
|
332
|
+
${Q}`}function BH($,Z){if(/^## Files$/im.test($))return $.trim();return`${$.trim()}
|
|
333
333
|
|
|
334
|
-
${
|
|
334
|
+
${GT(Z)}`.trim()}function GH($){let Z=[`Summarize this session for continuation. Be concise and factual.
|
|
335
335
|
|
|
336
336
|
## Goal
|
|
337
337
|
One sentence: what is being built or fixed.
|
|
@@ -353,19 +353,20 @@ Edited: ${$.fileOps.modifiedFiles.join(", ")||"none"}`];if($.previousSummary?.tr
|
|
|
353
353
|
${$.previousSummary.trim()}`);return Z.push(`Conversation:
|
|
354
354
|
${$.conversationText||"(empty)"}`),Z.join(`
|
|
355
355
|
|
|
356
|
-
`)}function
|
|
356
|
+
`)}function KH($){let Z=$.summarizer,Q=(J)=>{if(J.providerId==="openai-codex"){let{maxOutputTokens:X,...Y}=J;return{...Y,thinking:!1}}return{...J,maxOutputTokens:J.maxOutputTokens??aV,thinking:!1}};if(!Z)return Q($.activeProviderConfig);let W=Z.providerConfig?.providerId===Z.providerId?Z.providerConfig:void 0;return Q({...W??{},providerId:Z.providerId,modelId:Z.modelId,apiKey:Z.apiKey??W?.apiKey,baseUrl:Z.baseUrl??W?.baseUrl,headers:Z.headers??W?.headers,knownModels:Z.knownModels??W?.knownModels,maxOutputTokens:Z.maxOutputTokens??aV})}function FH($){return{role:"user",content:`Context summary:
|
|
357
357
|
|
|
358
|
-
${$.summary}`,metadata:{kind:"compaction_summary",summary:$.summary,details:$.fileOps,tokensBefore:$.tokensBefore,generatedAt:Date.now()}}}async function Kz($){let Z=await Gz($.providerConfig),Q="";for await(let W of Z.createMessage("Summarize the provided coding session into a concise continuation note with detailed next steps.",[{role:"user",content:$.request}])){if(W.type==="text"){Q+=W.text;continue}if(W.type==="done"&&!W.success&&W.error)throw Error(W.error)}return $.logger?.debug("Generated compaction summary",{outputChars:Q.length,modelId:$.providerConfig.modelId,providerId:$.providerConfig.providerId}),Q.trim()}function Fz($){try{return JSON.stringify($).length}catch{return String($).length}}async function FH($){let Z=$.context.messages;if(Z.length<2)return;let Q=jH(Z,$.preserveRecentTokens,$.estimateMessageTokens);if(Q<=0||Q>=Z.length)return;let W=Z.slice(0,Q),J=YH(W),X=J>=0?$3(W[J])?.summary:void 0,Y=J>=0?W.slice(J+1):W;if(Y.length===0)return;let j=VH(W),V=QH(Y),H=BH({previousSummary:X,conversationText:V,fileOps:j});$.logger?.debug("Agentic compaction summarizer diagnostics",{messagesToSummarize:W.length,newMessagesToFold:Y.length,preservedMessages:Z.length-Q,previousSummaryChars:X?.length??0,conversationTextChars:V.length,summaryRequestChars:H.length,summaryRequestEstimatedTokens:sW(H.length),newMessagesJsonChars:Fz(Y),maxInputTokens:$.context.maxInputTokens,triggerTokens:$.context.triggerTokens});let B=await Kz({providerConfig:GH({activeProviderConfig:$.providerConfig,summarizer:$.summarizer}),request:H,logger:$.logger});if(!B.trim())return;let G=HH(B,j),K=Z.reduce((D,f)=>D+$.estimateMessageTokens(f),0),F=[KH({summary:G,fileOps:j,tokensBefore:K}),...Z.slice(Q)],A=F.reduce((D,f)=>D+$.estimateMessageTokens(f),0);return $.logger?.debug("Performed agentic compaction",{messagesBefore:Z.length,messagesAfter:F.length,messagesSummarized:Q,messagesPreserved:Z.length-Q,tokensBefore:K,tokensAfter:A,maxInputTokens:$.context.maxInputTokens}),{messages:F}}function UH($){if(H6($))return;if(typeof $.content==="string"){let Q=$.content.trim();return Q?{...$,content:Q}:void 0}let Z=$.content.filter((Q)=>Q.type!=="text"||Q.text.trim());if(Z.length===0)return;return{...$,content:Z.map((Q)=>Q.type==="text"?{...Q,text:Q.text.trim()}:Q.type==="tool_result"?{...Q,content:eW(Q.content)}:Q)}}function G6($,Z){return $.reduce((Q,W)=>Q+Z(W),0)}function AH($,Z){let Q=Math.max(1,Z),W=Math.max(16,Q*4);if(typeof $.content==="string"){let Y=A$($.content,W).trim();return{...$,content:Y||"..."}}let J=W,X=$.content.map((Y)=>{if(Y.type!=="text"||J<=0)return Y;let j=A$(Y.text,J).trim();return J-=j.length,{...Y,text:j||"..."}});return{...$,content:X}}function Az($,Z){let Q=JH($),W=GZ($),J=XH($),X=[];for(let Y=0;Y<$.length;Y+=1){let j=UH($[Y]);if(!j)continue;X.push({index:Y,message:j,estimatedTokens:Z(j),isFirstUser:Y===Q,isLastUser:Y===W,isLastAssistant:Y===J})}return X}function fH($,Z,Q,W){let J=$[Z];J.message=Q,J.estimatedTokens=W(Q)}function fz($){let Z=new Set;if(!Array.isArray($.content))return Z;for(let Q of $.content)if(Q.type==="tool_use")Z.add(Q.id);return Z}function Uz($){let Z=new Set;if(!Array.isArray($.content))return Z;for(let Q of $.content)if(Q.type==="tool_result")Z.add(Q.tool_use_id);return Z}function DH($){return new Set([...fz($.message),...Uz($.message)])}function Dz($){let Z=new Map;for(let Q=0;Q<$.length;Q+=1)for(let W of DH($[Q])){let J=Z.get(W);if(J)J.add(Q);else Z.set(W,new Set([Q]))}return Z}function Tz($,Z){let Q=Dz($),W=new Set,J=[Z];while(J.length>0){let X=J.shift();if(X===void 0||W.has(X))continue;W.add(X);for(let Y of DH($[X]))for(let j of Q.get(Y)??[])if(!W.has(j))J.push(j)}return W}function KZ($,Z,Q,W){let J=G6($.map((X)=>X.message),W);for(let X=0;X<$.length&&J>Q;){if(!Z($[X])){X+=1;continue}let Y=Tz($,X);J-=Array.from(Y).reduce((j,V)=>j+$[V].estimatedTokens,0);for(let j of Array.from(Y).sort((V,H)=>H-V))$.splice(j,1)}}function Lz($,Z,Q){let W=G6($.map((X)=>X.message),Q);if(W<=Z)return;for(let X=$.length-1;X>=0&&W>Z;X-=1){let Y=$[X];if(Y.isFirstUser)continue;let j=Math.max($H,Y.estimatedTokens-(W-Z));if(j>=Y.estimatedTokens)continue;fH($,X,AH(Y.message,j),Q),W=G6($.map((V)=>V.message),Q)}if(W<=Z)return;let J=$.findIndex((X)=>X.isFirstUser);if(J>=0){let X=Math.max(1,$[J].estimatedTokens-(W-Z));fH($,J,AH($[J].message,X),Q)}}function _z($,Z){return JSON.stringify($)!==JSON.stringify(Z)}function zz($){let Z=GZ($);if(Z<0||Z===0&&!B6($[0]))return{compactable:$,protectedTail:[]};return{compactable:$.slice(0,Z),protectedTail:$.slice(Z)}}function TH($){let Z=Math.max(1,Math.min($.context.triggerTokens,$.context.maxInputTokens)),{compactable:Q,protectedTail:W}=zz($.context.messages);if(Q.length===0)return;let J=Az(Q,$.estimateMessageTokens);if(J.length===0)return;KZ(J,(V)=>V.message.role==="assistant"&&!V.isLastAssistant,Z,$.estimateMessageTokens),KZ(J,(V)=>V.message.role==="user"&&!V.isFirstUser&&!V.isLastUser,Z,$.estimateMessageTokens),KZ(J,(V)=>V.message.role==="assistant"&&V.isLastAssistant,Z,$.estimateMessageTokens),KZ(J,(V)=>V.message.role==="user"&&V.isLastUser&&!V.isFirstUser,Z,$.estimateMessageTokens),Lz(J,Z,$.estimateMessageTokens);let X=[...J.map((V)=>V.message),...W];if(!_z($.context.messages,X))return;let Y=G6([...Q.map((V)=>UH(V)??V),...W],$.estimateMessageTokens),j=G6(X,$.estimateMessageTokens);return $.logger?.debug("Performed basic compaction",{messagesBefore:$.context.messages.length,messagesAfter:X.length,messagesRemoved:$.context.messages.length-X.length,tokensBefore:Y,tokensAfter:j,targetTokens:Z,maxInputTokens:$.context.maxInputTokens}),{messages:X}}function LH($){try{return JSON.stringify($).length}catch{return String($).length}}function Oz($){let Z=0,Q=0,W=0;for(let J of $){if(!Array.isArray(J.content))continue;for(let X of J.content){if(X.type!=="tool_result")continue;let Y=LH(X.content);Z+=1,Q+=Y,W=Math.max(W,Y)}}return{toolResultCount:Z,toolResultSerializedChars:Q,maxToolResultSerializedChars:W}}var qz={basic:({context:$,estimateMessageTokens:Z,logger:Q})=>TH({context:$,estimateMessageTokens:Z,logger:Q}),agentic:({context:$,providerConfig:Z,compaction:Q,mode:W,estimateMessageTokens:J,logger:X})=>FH({context:$,providerConfig:Z,summarizer:Q?.summarizer,preserveRecentTokens:W==="manual"?Math.min(Q?.preserveRecentTokens??tW,$.triggerTokens):Q?.preserveRecentTokens??tW,estimateMessageTokens:J,logger:X})};function Mz($){if(typeof $.config.reserveTokens==="number"){let W=Math.max(0,$.config.reserveTokens),J=Math.max(0,$.maxInputTokens-W);return{shouldCompact:$.inputTokens>J,triggerTokens:J,thresholdRatio:$.maxInputTokens>0?J/$.maxInputTokens:0}}if(typeof $.config.thresholdRatio!=="number"){let W=Math.max(0,Math.min($.maxInputTokens-tV,$.maxInputTokens*oW));return{shouldCompact:$.inputTokens>W,triggerTokens:W,thresholdRatio:$.maxInputTokens>0?W/$.maxInputTokens:0}}let Z=$.config.thresholdRatio??oW,Q=$.maxInputTokens*Z;return{shouldCompact:$.inputTokens>Q,triggerTokens:Q,thresholdRatio:Z}}function Rz($){let Z=typeof $.manualTargetRatio==="number"&&Number.isFinite($.manualTargetRatio)?$.manualTargetRatio:0.5,Q=Math.min(0.95,Math.max(0.05,Z)),W=Math.max(1,Math.floor(Math.min($.autoTriggerTokens,$.inputTokens*Q)));return{triggerTokens:W,thresholdRatio:$.maxInputTokens>0?W/$.maxInputTokens:0}}function K6($,Z={}){let Q=$.compaction;if(Q?.enabled!==!0)return;let W=$.providerConfig??{providerId:$.providerId,modelId:$.modelId},J=WH(),X=Q?.strategy??"basic",Y=qz[X],j=Z.mode??"auto",V=Q?.compact?"custom":X;return async(H)=>{let B=H.apiMessages.reduce((L,E)=>L+J(E),0),G=Q?.maxInputTokens??H.model.info?.maxInputTokens??H.model.info?.contextWindow??oV;if(typeof G!=="number"||!Number.isFinite(G)||G<=0)return;let K=Mz({inputTokens:B,maxInputTokens:G,config:{reserveTokens:Q?.reserveTokens,thresholdRatio:Q?.thresholdRatio}});if($.logger?.debug("Context compaction diagnostics",{mode:j,strategy:X,iteration:H.iteration,providerId:$.providerId,modelId:$.modelId,inputTokens:B,maxInputTokens:G,triggerTokens:K.triggerTokens,thresholdRatio:K.thresholdRatio,shouldCompact:K.shouldCompact,messageCount:H.messages.length,apiMessageCount:H.apiMessages.length,apiMessagesJsonChars:LH(H.apiMessages),...Oz(H.apiMessages)}),j==="auto"&&!K.shouldCompact)return;let F=j==="manual"?Rz({inputTokens:B,maxInputTokens:G,autoTriggerTokens:K.triggerTokens,manualTargetRatio:Z.manualTargetRatio}):K,A={agentId:H.agentId,conversationId:H.conversationId,parentAgentId:H.parentAgentId,iteration:H.iteration,messages:H.messages,model:H.model,maxInputTokens:G,triggerTokens:F.triggerTokens,thresholdRatio:F.thresholdRatio,utilizationRatio:G>0?B/G:0},D=j==="manual"?"manual_compaction":"auto_compaction";H.emitStatusNotice?.(j==="manual"?"compacting":"auto-compacting",{kind:D,reason:D,iteration:H.iteration,triggerTokens:F.triggerTokens,maxInputTokens:G});let f=H.messages.length,T=Date.now(),U=Q?.compact?await Q.compact(A):await Y({context:A,providerConfig:{...W,abortSignal:H.abortSignal},compaction:Q,mode:j,estimateMessageTokens:J,logger:$.logger}),z=Date.now()-T,O=$.sessionId??H.conversationId,_={agentId:H.agentId,conversationId:H.conversationId,parentAgentId:H.parentAgentId??void 0};if(U?.messages){let L=U.messages.reduce((E,w)=>E+J(w),0);$.logger?.log("Context compaction completed",{severity:"info",strategy:X,maxInputTokens:G,inputTokens:B,afterTokens:L,tokensSaved:B-L,utilizationBefore:`${(B/G*100).toFixed(1)}%`,utilizationAfter:`${(L/G*100).toFixed(1)}%`,thresholdTrigger:`${(F.thresholdRatio*100).toFixed(1)}%`,messagesBefore:f,messagesAfter:U.messages.length,messagesRemoved:f-U.messages.length}),y9($.telemetry,{ulid:O,strategy:V,mode:j,messagesBefore:f,messagesAfter:U.messages.length,messagesRemoved:f-U.messages.length,tokensBefore:B,tokensAfter:L,tokensSaved:B-L,triggerTokens:F.triggerTokens,maxInputTokens:G,thresholdRatio:F.thresholdRatio,durationMs:z,provider:$.providerId,modelId:$.modelId,..._})}else h9($.telemetry,{ulid:O,strategy:V,mode:j,reason:"no_result",tokensBefore:B,triggerTokens:F.triggerTokens,maxInputTokens:G,thresholdRatio:F.thresholdRatio,durationMs:z,provider:$.providerId,modelId:$.modelId,..._});return U}}var iB={};N(iB,{zodToJsonSchema:()=>OM,validateWithZod:()=>zM,truncateCommandOutput:()=>Y2,resolveToolRoutingConfig:()=>R8,resolveToolPresetName:()=>l1,resolveCoreSelectedToolIds:()=>PZ,getCoreHeadlessToolNames:()=>h6,getCoreDefaultEnabledToolIds:()=>wZ,getCoreBuiltinToolCatalog:()=>f2,getCoreAcpToolNames:()=>SZ,createWebFetchTool:()=>j3,createWebFetchExecutor:()=>C6,createToolPoliciesWithPreset:()=>_Z,createSubmitAndExitTool:()=>G3,createSkillsTool:()=>V2,createShellTool:()=>q6,createShellExecutor:()=>j2,createSearchTool:()=>Y3,createSearchExecutor:()=>N6,createReadFilesTool:()=>X3,createFileReadExecutor:()=>E6,createEditorTool:()=>H3,createEditorExecutor:()=>R6,createDefaultToolsWithPreset:()=>zZ,createDefaultTools:()=>T$,createDefaultShellExecutor:()=>w6,createDefaultExecutors:()=>q8,createBuiltinTools:()=>U2,createAskQuestionTool:()=>B3,createApplyPatchTool:()=>V3,createApplyPatchExecutor:()=>M6,WebFetchRequestSchema:()=>Q3,ToolPresets:()=>u0,TEAM_TOOL_NAMES:()=>C8,SubmitInputSchema:()=>O6,StructuredCommandInputSchema:()=>J2,SkillsInputSchema:()=>_6,SearchCodebaseInputSchema:()=>f6,RunCommandsInputSchema:()=>U6,ReadFilesInputSchema:()=>A6,ReadFileRequestSchema:()=>m1,MAX_COMMAND_OUTPUT_CHARS:()=>c1,FetchWebContentInputSchema:()=>D6,EditFileInputSchema:()=>T6,DefaultToolNames:()=>U0,DEFAULT_MODEL_TOOL_ROUTING_RULES:()=>M8,AskQuestionInputSchema:()=>z6,ApplyPatchInputSchema:()=>L6,ALL_DEFAULT_TOOL_NAMES:()=>X$});import{validateWithZod as zM,zodToJsonSchema as OM}from"@cline/shared";L0();import{createTool as U$,validateWithZod as D$,zodToJsonSchema as u1}from"@cline/shared";var zH="__clineInternalTelemetry";function OH($){let Z=$?.__clineInternalTelemetry;return Z&&typeof Z==="object"&&"capture"in Z&&typeof Z.capture==="function"?Z:void 0}import{spawn as yH}from"node:child_process";import{StringDecoder as Cz}from"node:string_decoder";import{getDefaultShell as wz,getShellArgs as Pz}from"@cline/shared";import{validateWithZod as Ez}from"@cline/shared";import{z as q}from"zod";var f$=6000,F6=q.string().describe("The absolute file path of a text file to read content from"),qH=q.object({start_line:q.number().int().positive().nullable().optional().describe("Optional one-based starting line number to read from; use null or omit for the start of the file"),end_line:q.number().int().positive().nullable().optional().describe("Optional one-based ending line number to read through; use null or omit to read to the end of the file or the read cap, whichever comes first")}).describe("Optional inclusive one-based file line range"),m1=q.object({path:F6,start_line:qH.shape.start_line,end_line:qH.shape.end_line}).describe("A file read request with optional inclusive one-based line bounds"),A6=q.object({files:q.array(m1).describe("Array of file read requests. Omit start_line/end_line or set them to null to read from the start; provide integers to return only that inclusive one-based line range. Reads are capped, so page through long files with start_line/end_line. Prefer this tool over running terminal command to get file content for better performance and reliability.")}),MH=q.union([A6,m1,q.array(m1),q.array(q.string()),q.string(),q.object({files:q.array(q.union([F6,m1]))}),q.object({files:m1}),q.object({files:F6}),q.object({file_paths:q.array(F6)}),q.object({file_paths:q.string()}),q.object({paths:q.array(q.union([F6,m1]))}),q.object({paths:m1}),q.object({paths:q.string()})]),f6=q.object({queries:q.array(q.string()).describe("Array of regex search queries to execute")}),RH=q.union([f6,q.array(q.string()),q.string(),q.object({queries:q.string()})]),Z3=q.string().describe(`The non-interactive shell command to execute - MUST keep input short and concise (within ${f$*2} characters) to avoid timeouts.`),J2=q.object({command:q.string().min(1).describe("The executable to run directly without shell parsing."),args:q.array(q.string()).optional().describe("Optional argv list passed directly to the executable.")}),EH=q.union([Z3,J2]),U6=q.object({commands:q.array(EH).describe("Array of commands to execute. Prefer structured { command, args } entries for portability; plain strings are still supported and are interpreted by the active shell.")}),NH=q.union([U6,q.object({commands:EH}),q.array(J2),J2,q.object({command:Z3}),q.object({cmd:Z3}),q.array(q.string()),q.string()]),Q3=q.object({url:q.string().describe("The URL to fetch"),prompt:q.string().min(2).describe("Analysis prompt for the fetched content")}),D6=q.object({requests:q.array(Q3).describe("Array of the URLs for the web fetch requests")}),T6=q.object({path:q.string().min(1).describe("The absolute file path for the action to be performed on"),old_text:q.string().nullable().optional().describe(`Exact text to replace (must match exactly once). Omit this when creating a missing file or inserting via insert_line. Keep this at or below ${f$} characters when possible; larger payloads should be split across multiple tool calls to avoid timeouts.`),new_text:q.string().describe(`The new content to write when creating a missing file, the replacement text for edits, or the inserted text when insert_line is provided. Keep this at or below ${f$} characters when possible; for large edits, use multiple calls with small chunks of old_text and new_text to iteratively edit the file.`),insert_line:q.number().int().nullable().optional().describe("Optional positive one-based boundary line. When provided, the tool inserts new_text before that line instead of performing a replacement edit; use line_count + 1 to append at EOF.")}).describe("Edit a text file by replacing old_text with new_text, create the file with new_text if it does not exist, or insert new_text at insert_line when insert_line is provided. Prefer using this tool for file edits over shell commands. IMPORTANT: large edits can time out, so use small chunks and multiple calls when possible."),L6=q.object({input:q.string().min(1).describe("The freeform apply_patch payload in the canonical patch grammar (e.g *** Begin Patch, *** Update File:, @@, and *** End Patch).")}).describe("Modify or create a text file by applying patches using the canonical apply_patch diff grammar. Prefer sending the patch body directly rather than wrapping it in shell syntax. IMPORTANT: large patches can time out, so use small chunks and multiple calls when possible."),CH=q.union([L6,q.string()]),_6=q.object({skill:q.string().min(1).describe("Name of the skill to execute."),args:q.string().nullable().optional().describe("Arguments for the skill; use null when omitted")}),z6=q.object({question:q.string().min(1).describe('The single question to ask the user. E.g. "How can I help you?"'),options:q.array(q.string().min(1)).min(2).max(5).describe("Array of 2-5 user-selectable answer options for the single question")}),O6=q.object({summary:q.string().min(10).describe("Summarization of the investigation, steps taken, and resolution status to submit at the end of the session. Before submitting, read the problem again along with any provided test's assertions carefully and confirm your fix produces the expected output."),verified:q.boolean().describe(`Have you verified that the issue is resolved to the best of your knowledge, including updating and creating all the requested files and items? 'True' if you have completed the investigation and taken all necessary steps to resolve the issue.
|
|
358
|
+
${$.summary}`,metadata:{kind:"compaction_summary",summary:$.summary,details:$.fileOps,tokensBefore:$.tokensBefore,generatedAt:Date.now()}}}async function FT($){let Z=await KT($.providerConfig),Q="";for await(let W of Z.createMessage("Summarize the provided coding session into a concise continuation note with detailed next steps.",[{role:"user",content:$.request}])){if(W.type==="text"){Q+=W.text;continue}if(W.type==="done"&&!W.success&&W.error)throw Error(W.error)}return $.logger?.debug("Generated compaction summary",{outputChars:Q.length,modelId:$.providerConfig.modelId,providerId:$.providerConfig.providerId}),Q.trim()}function AT($){try{return JSON.stringify($).length}catch{return String($).length}}async function AH($){let Z=$.context.messages;if(Z.length<2)return;let Q=VH(Z,$.preserveRecentTokens,$.estimateMessageTokens);if(Q<=0||Q>=Z.length)return;let W=Z.slice(0,Q),J=jH(W),X=J>=0?$3(W[J])?.summary:void 0,Y=J>=0?W.slice(J+1):W;if(Y.length===0)return;let j=HH(W),V=WH(Y),H=GH({previousSummary:X,conversationText:V,fileOps:j});$.logger?.debug("Agentic compaction summarizer diagnostics",{messagesToSummarize:W.length,newMessagesToFold:Y.length,preservedMessages:Z.length-Q,previousSummaryChars:X?.length??0,conversationTextChars:V.length,summaryRequestChars:H.length,summaryRequestEstimatedTokens:oW(H.length),newMessagesJsonChars:AT(Y),maxInputTokens:$.context.maxInputTokens,triggerTokens:$.context.triggerTokens});let B=await FT({providerConfig:KH({activeProviderConfig:$.providerConfig,summarizer:$.summarizer}),request:H,logger:$.logger});if(!B.trim())return;let G=BH(B,j),K=Z.reduce((L,f)=>L+$.estimateMessageTokens(f),0),F=[FH({summary:G,fileOps:j,tokensBefore:K}),...Z.slice(Q)],A=F.reduce((L,f)=>L+$.estimateMessageTokens(f),0);return $.logger?.debug("Performed agentic compaction",{messagesBefore:Z.length,messagesAfter:F.length,messagesSummarized:Q,messagesPreserved:Z.length-Q,tokensBefore:K,tokensAfter:A,maxInputTokens:$.context.maxInputTokens}),{messages:F}}import{CHARS_PER_TOKEN as fT}from"@cline/shared";function UT($){if(H6($))return;if(typeof $.content==="string"){let Q=$.content.trim();return Q?{...$,content:Q}:void 0}let Z=$.content.filter((Q)=>Q.type!=="text"||Q.text.trim());if(Z.length===0)return;return{...$,content:Z.map((Q)=>Q.type==="text"?{...Q,text:Q.text.trim()}:Q.type==="tool_result"?{...Q,content:eW(Q.content)}:Q)}}function DT($,Z){return $.reduce((Q,W)=>Q+Z(W),0)}function fH($,Z){if($.length<=Z)return $;let Q=`
|
|
359
|
+
...`,W=Math.max(1,Z-Q.length);return`${$.slice(0,W)}${Q}`}function UH($,Z){let Q=Number.isFinite(Z)?Math.max(1,Z):1,W=Math.max(16,Q*fT);if(typeof $.content==="string"){let Y=fH($.content,W).trim();return{...$,content:Y||"..."}}let J=W,X=$.content.map((Y)=>{if(Y.type!=="text"||J<=0)return Y;let j=fH(Y.text,J).trim();return J-=j.length,{...Y,text:j||"..."}});return{...$,content:X}}function LT($,Z){let Q=XH($),W=GZ($),J=YH($),X=[],Y=0;for(let j=0;j<$.length;j+=1){let V=UT($[j]);if(!V)continue;let H=Z(V);Y+=H,X.push({index:j,message:V,estimatedTokens:H,toolPairIds:LH(V),isFirstUser:j===Q,isLastUser:j===W,isLastAssistant:j===J})}return{candidates:X,totalTokens:Y}}function DH($,Z,Q,W){let J=$[Z],X=J.estimatedTokens;return J.message=Q,J.estimatedTokens=W(Q),J.toolPairIds=LH(Q),J.estimatedTokens-X}function LH($){if(!Array.isArray($.content))return[];let Z=[];for(let Q of $.content)if(Q.type==="tool_use")Z.push(Q.id);else if(Q.type==="tool_result")Z.push(Q.tool_use_id);return Z}function _T($){let Z=new Map;for(let Q of $)for(let W of Q.toolPairIds){let J=Z.get(W);if(J)J.add(Q);else Z.set(W,new Set([Q]))}return Z}function zT($,Z,Q){let W=new Set,J=[Q],X=0;while(X<J.length){let Y=J[X];if(X+=1,Y===void 0||!$.has(Y)||W.has(Y))continue;W.add(Y);for(let j of Y.toolPairIds)for(let V of Z.get(j)??[])if(!W.has(V))J.push(V)}return W}function TT($,Z){let Q=0;for(let W of $){if(Z.has(W))continue;$[Q]=W,Q+=1}$.length=Q}function KZ($,Z,Q,W){let J=new Set($),X=_T($);for(let Y=0;Y<$.length&&W>Q;){if(!Z($[Y])){Y+=1;continue}let j=zT(J,X,$[Y]);if(j.size===0){Y+=1;continue}let V=0;for(let H of j)V+=H.estimatedTokens,J.delete(H);W-=V,TT($,j)}return W}function OT($,Z,Q,W){if(Q<=Z)return Q;for(let X=$.length-1;X>=0&&Q>Z;X-=1){let Y=$[X];if(Y.isFirstUser)continue;let j=Math.max(ZH,Y.estimatedTokens-(Q-Z));if(j>=Y.estimatedTokens)continue;Q+=DH($,X,UH(Y.message,j),W)}if(Q<=Z)return Q;let J=$.findIndex((X)=>X.isFirstUser);if(J>=0)while(Q>Z){let X=$[J],Y=Math.max(1,X.estimatedTokens-(Q-Z));if(Y>=X.estimatedTokens)break;let j=X.estimatedTokens;if(Q+=DH($,J,UH(X.message,Y),W),X.estimatedTokens>=j)break}return Q}function qT($,Z){return JSON.stringify($)!==JSON.stringify(Z)}function MT($){let Z=GZ($);if(Z<0||Z===0&&!B6($[0]))return{compactable:$,protectedTail:[]};return{compactable:$.slice(0,Z),protectedTail:$.slice(Z)}}function _H($){let Z=Math.max(1,Math.min($.context.targetTokens??Math.floor($.context.triggerTokens*BZ),$.context.maxInputTokens)),{compactable:Q,protectedTail:W}=MT($.context.messages);if(Q.length===0)return;let J=DT(W,$.estimateMessageTokens),X=Math.max(1,Z-J),Y=LT(Q,$.estimateMessageTokens),{candidates:j}=Y;if(j.length===0)return;let V=Y.totalTokens,H=V;H=KZ(j,(F)=>F.message.role==="assistant"&&!F.isLastAssistant,X,H),H=KZ(j,(F)=>F.message.role==="user"&&!F.isFirstUser&&!F.isLastUser,X,H),H=KZ(j,(F)=>F.message.role==="assistant"&&F.isLastAssistant,X,H),H=KZ(j,(F)=>F.message.role==="user"&&F.isLastUser&&!F.isFirstUser,X,H),H=OT(j,X,H,$.estimateMessageTokens);let B=[...j.map((F)=>F.message),...W];if(!qT($.context.messages,B))return;let G=V+J,K=H+J;return $.logger?.debug("Performed basic compaction",{messagesBefore:$.context.messages.length,messagesAfter:B.length,messagesRemoved:$.context.messages.length-B.length,tokensBefore:G,tokensAfter:K,targetTokens:Z,maxInputTokens:$.context.maxInputTokens}),{messages:B}}function zH($){try{return JSON.stringify($).length}catch{return String($).length}}function FZ($){return typeof $==="number"&&Number.isFinite($)&&$>0}function RT($){let Z=[];if(FZ($.configMaxInputTokens))Z.push($.configMaxInputTokens);if(FZ($.modelMaxInputTokens))Z.push($.modelMaxInputTokens);if(FZ($.contextWindow)){if(Z.push($.contextWindow),FZ($.modelMaxTokens)&&$.modelMaxTokens<$.contextWindow)Z.push($.contextWindow-$.modelMaxTokens)}return Z.length>0?Math.min(...Z):oV}function ET($){let Z=0,Q=0,W=0;for(let J of $){if(!Array.isArray(J.content))continue;for(let X of J.content){if(X.type!=="tool_result")continue;let Y=zH(X.content);Z+=1,Q+=Y,W=Math.max(W,Y)}}return{toolResultCount:Z,toolResultSerializedChars:Q,maxToolResultSerializedChars:W}}var NT={basic:({context:$,estimateMessageTokens:Z,logger:Q})=>_H({context:$,estimateMessageTokens:Z,logger:Q}),agentic:({context:$,providerConfig:Z,compaction:Q,mode:W,estimateMessageTokens:J,logger:X})=>AH({context:$,providerConfig:Z,summarizer:Q?.summarizer,preserveRecentTokens:W==="manual"?Math.min(Q?.preserveRecentTokens??tW,$.triggerTokens):Q?.preserveRecentTokens??tW,estimateMessageTokens:J,logger:X})};function wT($){if(typeof $.config.reserveTokens==="number"){let Q=Math.max(0,$.config.reserveTokens),W=Math.max(0,$.maxInputTokens-Q);return{shouldCompact:$.inputTokens>W,triggerTokens:W,thresholdRatio:$.maxInputTokens>0?W/$.maxInputTokens:0}}if(typeof $.config.thresholdRatio==="number"){let Q=$.config.thresholdRatio,W=$.maxInputTokens*Q;return{shouldCompact:$.inputTokens>W,triggerTokens:W,thresholdRatio:Q}}let Z=Math.max(0,Math.min($.maxInputTokens-eV,$.maxInputTokens*tV));return{shouldCompact:$.inputTokens>Z,triggerTokens:Z,thresholdRatio:$.maxInputTokens>0?Z/$.maxInputTokens:0}}function CT($){let Z=typeof $.manualTargetRatio==="number"&&Number.isFinite($.manualTargetRatio)?$.manualTargetRatio:0.5,Q=Math.min(0.95,Math.max(0.05,Z)),W=Math.max(1,Math.floor(Math.min($.autoTriggerTokens,$.inputTokens*Q)));return{triggerTokens:W,thresholdRatio:$.maxInputTokens>0?W/$.maxInputTokens:0}}function PT($){let Z=typeof $.modelMaxTokens==="number"&&Number.isFinite($.modelMaxTokens)&&$.modelMaxTokens<$.maxInputTokens?$.maxInputTokens-$.modelMaxTokens:$.triggerTokens;return Math.max(1,Math.min(Math.floor(Z*BZ),$.maxInputTokens))}function G6($,Z={}){let Q=$.compaction;if(Q?.enabled!==!0)return;let W=$.providerConfig??{providerId:$.providerId,modelId:$.modelId},J=JH(),X=Q?.strategy??"basic",Y=NT[X],j=Z.mode??"auto",V=Q?.compact?"custom":X;return async(H)=>{let B=H.apiMessages.reduce((E,C)=>E+J(C),0),G=RT({configMaxInputTokens:Q?.maxInputTokens,modelMaxInputTokens:H.model.info?.maxInputTokens,contextWindow:H.model.info?.contextWindow,modelMaxTokens:H.model.info?.maxTokens}),K=wT({inputTokens:B,maxInputTokens:G,config:{maxInputTokens:Q?.maxInputTokens,reserveTokens:Q?.reserveTokens,thresholdRatio:Q?.thresholdRatio}});if($.logger?.debug("Context compaction diagnostics",{mode:j,strategy:X,iteration:H.iteration,providerId:$.providerId,modelId:$.modelId,inputTokens:B,maxInputTokens:G,triggerTokens:K.triggerTokens,thresholdRatio:K.thresholdRatio,shouldCompact:K.shouldCompact,messageCount:H.messages.length,apiMessageCount:H.apiMessages.length,apiMessagesJsonChars:zH(H.apiMessages),...ET(H.apiMessages)}),j==="auto"&&!K.shouldCompact)return;let F=j==="manual"?CT({inputTokens:B,maxInputTokens:G,autoTriggerTokens:K.triggerTokens,manualTargetRatio:Z.manualTargetRatio}):K,A=j==="auto"?PT({maxInputTokens:G,modelMaxTokens:H.model.info?.maxTokens,triggerTokens:F.triggerTokens}):void 0,L={agentId:H.agentId,conversationId:H.conversationId,parentAgentId:H.parentAgentId,iteration:H.iteration,messages:H.messages,model:H.model,maxInputTokens:G,triggerTokens:F.triggerTokens,targetTokens:A,thresholdRatio:F.thresholdRatio,utilizationRatio:G>0?B/G:0},f=j==="manual"?"manual_compaction":"auto_compaction";H.emitStatusNotice?.(j==="manual"?"compacting":"auto-compacting",{kind:f,reason:f,iteration:H.iteration,triggerTokens:F.triggerTokens,maxInputTokens:G});let D=H.messages.length,U=Date.now(),T=Q?.compact?await Q.compact(L):await Y({context:L,providerConfig:{...W,abortSignal:H.abortSignal},compaction:Q,mode:j,estimateMessageTokens:J,logger:$.logger}),O=Date.now()-U,z=$.sessionId??H.conversationId,_={agentId:H.agentId,conversationId:H.conversationId,parentAgentId:H.parentAgentId??void 0};if(T?.messages){let E=T.messages.reduce((C,y)=>C+J(y),0);$.logger?.log("Context compaction completed",{severity:"info",strategy:X,maxInputTokens:G,inputTokens:B,afterTokens:E,tokensSaved:B-E,utilizationBefore:`${(B/G*100).toFixed(1)}%`,utilizationAfter:`${(E/G*100).toFixed(1)}%`,thresholdTrigger:`${(F.thresholdRatio*100).toFixed(1)}%`,messagesBefore:D,messagesAfter:T.messages.length,messagesRemoved:D-T.messages.length}),b9($.telemetry,{ulid:z,strategy:V,mode:j,messagesBefore:D,messagesAfter:T.messages.length,messagesRemoved:D-T.messages.length,tokensBefore:B,tokensAfter:E,tokensSaved:B-E,triggerTokens:F.triggerTokens,maxInputTokens:G,thresholdRatio:F.thresholdRatio,durationMs:O,provider:$.providerId,modelId:$.modelId,..._})}else y9($.telemetry,{ulid:z,strategy:V,mode:j,reason:"no_result",tokensBefore:B,triggerTokens:F.triggerTokens,maxInputTokens:G,thresholdRatio:F.thresholdRatio,durationMs:O,provider:$.providerId,modelId:$.modelId,..._});return T}}var nB={};N(nB,{zodToJsonSchema:()=>NM,validateWithZod:()=>EM,truncateCommandOutput:()=>X2,resolveToolRoutingConfig:()=>M8,resolveToolPresetName:()=>l1,resolveCoreSelectedToolIds:()=>SZ,getCoreHeadlessToolNames:()=>y6,getCoreDefaultEnabledToolIds:()=>PZ,getCoreBuiltinToolCatalog:()=>A2,getCoreAcpToolNames:()=>bZ,createWebFetchTool:()=>j3,createWebFetchExecutor:()=>N6,createToolPoliciesWithPreset:()=>TZ,createSubmitAndExitTool:()=>G3,createSkillsTool:()=>j2,createShellTool:()=>O6,createShellExecutor:()=>Y2,createSearchTool:()=>Y3,createSearchExecutor:()=>E6,createReadFilesTool:()=>X3,createFileReadExecutor:()=>R6,createEditorTool:()=>H3,createEditorExecutor:()=>M6,createDefaultToolsWithPreset:()=>OZ,createDefaultTools:()=>D$,createDefaultShellExecutor:()=>w6,createDefaultExecutors:()=>O8,createBuiltinTools:()=>f2,createAskQuestionTool:()=>B3,createApplyPatchTool:()=>V3,createApplyPatchExecutor:()=>q6,WebFetchRequestSchema:()=>Q3,ToolPresets:()=>u0,TEAM_TOOL_NAMES:()=>N8,SubmitInputSchema:()=>T6,StructuredCommandInputSchema:()=>W2,SkillsInputSchema:()=>_6,SearchCodebaseInputSchema:()=>A6,RunCommandsInputSchema:()=>f6,ReadFilesInputSchema:()=>F6,ReadFileRequestSchema:()=>m1,MAX_COMMAND_OUTPUT_CHARS:()=>c1,FetchWebContentInputSchema:()=>U6,EditFileInputSchema:()=>D6,DefaultToolNames:()=>U0,DEFAULT_MODEL_TOOL_ROUTING_RULES:()=>q8,AskQuestionInputSchema:()=>z6,ApplyPatchInputSchema:()=>L6,ALL_DEFAULT_TOOL_NAMES:()=>X$});import{validateWithZod as EM,zodToJsonSchema as NM}from"@cline/shared";_0();import{createTool as f$,validateWithZod as U$,zodToJsonSchema as u1}from"@cline/shared";var OH="__clineInternalTelemetry";function qH($){let Z=$?.__clineInternalTelemetry;return Z&&typeof Z==="object"&&"capture"in Z&&typeof Z.capture==="function"?Z:void 0}import{spawn as hH}from"node:child_process";import{StringDecoder as yT}from"node:string_decoder";import{getDefaultShell as hT,getShellArgs as kT}from"@cline/shared";import{validateWithZod as ST}from"@cline/shared";import{z as q}from"zod";var A$=6000,K6=q.string().describe("The absolute file path of a text file to read content from"),MH=q.object({start_line:q.number().int().positive().nullable().optional().describe("Optional one-based starting line number to read from; use null or omit for the start of the file"),end_line:q.number().int().positive().nullable().optional().describe("Optional one-based ending line number to read through; use null or omit to read to the end of the file or the read cap, whichever comes first")}).describe("Optional inclusive one-based file line range"),m1=q.object({path:K6,start_line:MH.shape.start_line,end_line:MH.shape.end_line}).describe("A file read request with optional inclusive one-based line bounds"),F6=q.object({files:q.array(m1).describe("Array of file read requests. Omit start_line/end_line or set them to null to read from the start; provide integers to return only that inclusive one-based line range. Reads are capped, so page through long files with start_line/end_line. Prefer this tool over running terminal command to get file content for better performance and reliability.")}),RH=q.union([F6,m1,q.array(m1),q.array(q.string()),q.string(),q.object({files:q.array(q.union([K6,m1]))}),q.object({files:m1}),q.object({files:K6}),q.object({file_paths:q.array(K6)}),q.object({file_paths:q.string()}),q.object({paths:q.array(q.union([K6,m1]))}),q.object({paths:m1}),q.object({paths:q.string()})]),A6=q.object({queries:q.array(q.string()).describe("Array of regex search queries to execute")}),EH=q.union([A6,q.array(q.string()),q.string(),q.object({queries:q.string()})]),Z3=q.string().describe(`The non-interactive shell command to execute - MUST keep input short and concise (within ${A$*2} characters) to avoid timeouts.`),W2=q.object({command:q.string().min(1).describe("The executable to run directly without shell parsing."),args:q.array(q.string()).optional().describe("Optional argv list passed directly to the executable.")}),NH=q.union([Z3,W2]),f6=q.object({commands:q.array(NH).describe("Array of commands to execute. Prefer structured { command, args } entries for portability; plain strings are still supported and are interpreted by the active shell.")}),wH=q.union([f6,q.object({commands:NH}),q.array(W2),W2,q.object({command:Z3}),q.object({cmd:Z3}),q.array(q.string()),q.string()]),Q3=q.object({url:q.string().describe("The URL to fetch"),prompt:q.string().min(2).describe("Analysis prompt for the fetched content")}),U6=q.object({requests:q.array(Q3).describe("Array of the URLs for the web fetch requests")}),D6=q.object({path:q.string().min(1).describe("The absolute file path for the action to be performed on"),old_text:q.string().nullable().optional().describe(`Exact text to replace (must match exactly once). Omit this when creating a missing file or inserting via insert_line. Keep this at or below ${A$} characters when possible; larger payloads should be split across multiple tool calls to avoid timeouts.`),new_text:q.string().describe(`The new content to write when creating a missing file, the replacement text for edits, or the inserted text when insert_line is provided. Keep this at or below ${A$} characters when possible; for large edits, use multiple calls with small chunks of old_text and new_text to iteratively edit the file.`),insert_line:q.number().int().nullable().optional().describe("Optional positive one-based boundary line. When provided, the tool inserts new_text before that line instead of performing a replacement edit; use line_count + 1 to append at EOF.")}).describe("Edit a text file by replacing old_text with new_text, create the file with new_text if it does not exist, or insert new_text at insert_line when insert_line is provided. Prefer using this tool for file edits over shell commands. IMPORTANT: large edits can time out, so use small chunks and multiple calls when possible."),L6=q.object({input:q.string().min(1).describe("The freeform apply_patch payload in the canonical patch grammar (e.g *** Begin Patch, *** Update File:, @@, and *** End Patch).")}).describe("Modify or create a text file by applying patches using the canonical apply_patch diff grammar. Prefer sending the patch body directly rather than wrapping it in shell syntax. IMPORTANT: large patches can time out, so use small chunks and multiple calls when possible."),CH=q.union([L6,q.string()]),_6=q.object({skill:q.string().min(1).describe("Name of the skill to execute."),args:q.string().nullable().optional().describe("Arguments for the skill; use null when omitted")}),z6=q.object({question:q.string().min(1).describe('The single question to ask the user. E.g. "How can I help you?"'),options:q.array(q.string().min(1)).min(2).max(5).describe("Array of 2-5 user-selectable answer options for the single question")}),T6=q.object({summary:q.string().min(10).describe("Summarization of the investigation, steps taken, and resolution status to submit at the end of the session. Before submitting, read the problem again along with any provided test's assertions carefully and confirm your fix produces the expected output."),verified:q.boolean().describe(`Have you verified that the issue is resolved to the best of your knowledge, including updating and creating all the requested files and items? 'True' if you have completed the investigation and taken all necessary steps to resolve the issue.
|
|
359
360
|
'False' if you have done all you can but cannot resolve the issue or if you are stuck and cannot proceed further. =
|
|
360
|
-
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
|
|
361
|
+
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 J2($){if($ instanceof Error)return $.message;return String($)}function PH($){if(typeof $.old_text==="string"&&$.old_text.length>A$)return`Editor input too large: old_text was ${$.old_text.length} characters, exceeding the recommended limit of ${A$}. Split the edit into smaller tool calls so later tool calls are less likely to be truncated or time out.`;if($.new_text.length>A$)return`Editor input too large: new_text was ${$.new_text.length} characters, exceeding the recommended limit of ${A$}. Split the edit into smaller tool calls so later tool calls are less likely to be truncated or time out.`;return null}class D8 extends Error{timeoutMs;constructor($,Z){super($);this.name="TimeoutError",this.timeoutMs=Z}}function v1($,Z,Q){return Promise.race([$,new Promise((W,J)=>{setTimeout(()=>J(new D8(Q,Z)),Z)})])}function AZ($){let{path:Z,start_line:Q,end_line:W}=$;if(Q==null&&W==null)return Z;return`${Z}:${Q??1}-${W??"EOF"}`}function SH($){let{start_line:Z,end_line:Q}=$;if(Z==null||Q==null||Z<=Q)return null;return`start_line must be less than or equal to end_line (received start_line: ${Z}, end_line: ${Q})`}function bH($){let Z=ST(wH,$);if(typeof Z==="string")return[Z];if(Array.isArray(Z))return Z;if("commands"in Z)return Array.isArray(Z.commands)?Z.commands:[Z.commands];if("command"in Z)return"args"in Z?[Z]:[Z.command];if("cmd"in Z)return[Z.cmd];return[Z]}function bT($){if(typeof $==="string")return $;let Z=$.args??[];if(Z.length===0)return $.command;let Q=Z.map((W)=>/[\s"]/u.test(W)?JSON.stringify(W):W);return`${$.command} ${Q.join(" ")}`}var W3=200;function yH($){let Z=bT($);if(Z.length<=W3)return Z;let Q=Z.length-W3;return`${Z.slice(0,W3)} ... [command truncated: ${Q} more chars; full command is in the tool call input]`}var c1=48000;function X2($,Z={}){let Q=Z.maxChars??48000,W=Z.totalChars??$.length;if($.length<=Q&&W<=Q)return $;let J=Math.ceil(Q/2),X=Math.max(1,Q-J);return`${$.slice(0,J)}
|
|
361
362
|
[... output truncated: ${W} chars total. Refine the command (grep, head, tail) to view the elided middle ...]
|
|
362
|
-
`+$.slice(-X)}var L8=2000,J3=2000,
|
|
363
|
+
`+$.slice(-X)}var L8=2000,J3=2000,fZ=48000,_8=48000;class UZ extends Error{exitCode;output;constructor($,Z){super(`Command exited with code ${$}`);this.exitCode=$;this.output=Z;this.name="CommandExitError"}}function kH($){let Z=Math.ceil($/2),Q=Math.max(1,$-Z),W=new yT("utf8"),J="",X="",Y=0,j=(V)=>{if(!V)return;Y+=V.length;let H=Z-J.length;if(H>0){J+=V.slice(0,H),X=(X+V.slice(H)).slice(-Q);return}X=(X+V).slice(-Q)};return{append(V){j(W.write(V))},snapshot(){return j(W.end()),{text:J+X,totalChars:Y,dropped:Y>J.length+X.length}}}}function IT($,Z,Q,W,J){return new Promise((X,Y)=>{let j=process.platform==="win32",V=hH($.executable,$.args,{cwd:$.cwd,env:{...process.env,...$.env},stdio:["pipe","pipe","pipe"],detached:!j,windowsHide:!0}),H=V.pid,B=kH(W),G=kH(W),K=!1,F=!1,A=(O)=>{if(F)return;F=!0,O()},L=()=>{if(!H)return;if(j){hH("taskkill",["/pid",String(H),"/T","/F"],{stdio:"ignore",shell:!0,windowsHide:!0}).unref();return}try{process.kill(-H,"SIGKILL")}catch{V.kill("SIGKILL")}},f=(O)=>{K=!0,L(),A(()=>Y(O))},D=setTimeout(()=>f(new D8(`Command timed out after ${Q}ms`,Q)),Q),U=()=>f(Error("Command was aborted"));if(Z.signal)Z.signal.addEventListener("abort",U);let T=()=>{clearTimeout(D),Z.signal?.removeEventListener("abort",U)};V.stdout?.on("data",(O)=>{B.append(O)}),V.stderr?.on("data",(O)=>{G.append(O)}),V.on("close",(O)=>{if(T(),K)return;let z=B.snapshot(),_=G.snapshot();if(O!==0){let E=O??1,C=J?z.text+(_.text?`
|
|
363
364
|
[stderr]
|
|
364
|
-
${
|
|
365
|
-
${
|
|
365
|
+
${_.text}`:""):z.text,y=z.dropped||J&&_.dropped,l=J?z.totalChars+_.totalChars:z.totalChars;if(y||C.length>W)C=X2(C,{maxChars:W,totalChars:l});let o=C.length>0?`[Command exited with code ${E}]
|
|
366
|
+
${C}`:`[Command exited with code ${E}]`;A(()=>Y(new UZ(E,o)))}else{let E=J?z.text+(_.text?`
|
|
366
367
|
[stderr]
|
|
367
|
-
${
|
|
368
|
-
`))}return Z}function
|
|
368
|
+
${_.text}`:""):z.text;if(z.dropped||J&&_.dropped||E.length>W){let y=J?z.totalChars+_.totalChars:z.totalChars;E=X2(E,{maxChars:W,totalChars:y})}A(()=>X(E))}}),V.on("error",(O)=>{T(),A(()=>Y(Error(`Failed to execute command: ${O.message}`)))})})}function Y2($={}){let{shell:Z=hT(process.platform),timeoutMs:Q=30000,env:W={},combineOutput:J=!0}=$,X=$.maxOutputChars??$.maxOutputBytes??c1;return(Y,j,V)=>{let H=typeof Y!=="string";return IT({executable:H?Y.command:Z,args:H?Y.args??[]:kT(Z,Y),cwd:j,env:W},V,Q,X,J)}}function IH($,Z){let Q=$.metadata?.[Z];return typeof Q==="string"?Q:void 0}function xT($,Z){Pj(qH($.metadata),{tool_name:"run_commands",effective_timeout_ms:Z.effectiveTimeoutMs,timeout_source:Z.timeoutSource,command_count:Z.commandCount,duration_ms:Z.durationMs,ulid:$.sessionId,mode:IH($,"mode"),source:IH($,"source"),session_id:$.sessionId,agent_id:$.agentId,conversation_id:$.conversationId,run_id:$.runId,iteration:$.iteration,tool_call_id:$.toolCallId})}function gT($){let Z=$.match(/(?<![<])<<-?\s*(?:"([^"]+)"|'([^']+)'|([A-Za-z0-9_./-]+))/);return Z?.[1]??Z?.[2]??Z?.[3]}function mT($){let Z=[];for(let Q=0;Q<$.length;Q+=1){let W=$[Q],J=gT(W);if(!J){Z.push(W);continue}let X=$.findIndex((j,V)=>V>Q&&j.trim()===J);if(X===-1){Z.push(W);continue}let Y=[W];while(Q<X){Q+=1;let j=$[Q];Y.push(j)}Z.push(Y.join(`
|
|
369
|
+
`))}return Z}function vT($){let Z=[],Q=[],W=()=>{if(Q.length>0)Z.push(...mT(Q)),Q=[]};for(let J of $){if(typeof J==="string"){Q.push(J);continue}W(),Z.push(J)}return W(),Z}async function cT($,Z){let{executor:Q,cwd:W,context:J,timeoutMs:X,timeoutSource:Y}=Z;return Promise.all($.map(async(j)=>{let V=Date.now(),H=yH(j);try{let B=await v1(Q(j,W,J),X,`Command timed out after ${X}ms`);return{query:H,result:B,success:!0}}catch(B){if(B instanceof D8)xT(J,{effectiveTimeoutMs:B.timeoutMs,timeoutSource:Y,commandCount:$.length,durationMs:Date.now()-V});if(B instanceof UZ)return{query:H,result:B.output,error:B.message,success:!1};let G=J2(B);return{query:H,result:"",error:`Command failed: ${G}`,success:!1}}}))}function X3($,Z={}){let Q=Z.fileReadTimeoutMs??1e4;return f$({name:"read_files",description:`Read the content of text or image files at the provided absolute paths, or return only an inclusive one-based line range when start_line/end_line are provided. When you already know multiple files you need, read them together in one call, and call this tool in the same response as other independent tool calls. Each read returns at most ${L8} lines / ~${Math.round(fZ/1024)}k characters; longer files report their total line count, page through them with start_line/end_line. Binary files that are not image and large files are not supported. Returns file contents or error messages for each path. `,inputSchema:u1(F6),timeoutMs:Q*2,retryable:!0,maxRetries:1,execute:async(W,J)=>{let X=U$(RH,W),Y;if(typeof X==="string")Y=[{path:X}];else if(Array.isArray(X))Y=X.map((j)=>typeof j==="string"?{path:j}:j);else if("files"in X)Y=(Array.isArray(X.files)?X.files:[X.files]).map((V)=>typeof V==="string"?{path:V}:V);else if("file_paths"in X)Y=(Array.isArray(X.file_paths)?X.file_paths:[X.file_paths]).map((V)=>({path:V}));else if("paths"in X)Y=(Array.isArray(X.paths)?X.paths:[X.paths]).map((V)=>typeof V==="string"?{path:V}:V);else Y=[X];return Promise.all(Y.map(async(j)=>{let V=SH(j);if(V)return{query:AZ(j),result:"",error:`Invalid file range: ${V}`,success:!1};try{let H=await v1($(j,J),Q,`File read timed out after ${Q}ms`);return{query:AZ(j),result:H,success:!0}}catch(H){let B=J2(H);return{query:AZ(j),result:"",error:`Error reading file: ${B}`,success:!1}}}))}})}function Y3($,Z={}){let Q=Z.searchTimeoutMs??30000,W=Z.cwd??process.cwd();return f$({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(_8/1000)}k characters per query is middle-truncated; narrow patterns beat broad ones.`,inputSchema:u1(A6),timeoutMs:Q*2,retryable:!0,maxRetries:1,execute:async(J,X)=>{let Y=U$(EH,J),j=Array.isArray(Y)?Y:typeof Y==="object"?Array.isArray(Y.queries)?Y.queries:[Y.queries]:[Y];return Promise.all(j.map(async(V)=>{try{let H=await v1($(V,W,X),Q,`Search timed out after ${Q}ms`);return{query:V,result:H,success:!0}}catch(H){let B=J2(H);return{query:V,result:"",error:`Search failed: ${B}`,success:!1}}}))}})}var xH="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 O6($,Z={}){let Q=Z.bashTimeoutMs??30000,W=Z.bashTimeoutMs===void 0?"default_setting":"configured_setting",J=Z.cwd??process.cwd(),X=process.platform==="win32";return f$({name:"run_commands",description:X?"Run non-interactive shell commands from the root of the workspace in Windows environment. "+xH+`Output beyond ~${Math.round(c1/1000)}k characters is middle-truncated (start and end preserved); filter output when you need specific sections. Prefer structured { command, args } entries for portability; plain string commands should be properly shell-escaped. Include multiple commands in the same call when they are independent and safe to run concurrently. When independent reads, searches, or edits are also needed, call those tools in the same response.`:"Run non-interactive shell commands from the root of the workspace. "+xH+`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(c1/1000)}k characters is middle-truncated (start and end preserved); pipe through grep/head/tail when you need specific sections of large output. For long-running commands, run them in background and redirect output to a tmp file that you can read from later.`,inputSchema:u1(f6),timeoutMs:Q*2,retryable:!1,maxRetries:0,execute:async(Y,j)=>{let V=vT(bH(Y));return cT(V,{executor:$,cwd:J,context:j,timeoutMs:Q,timeoutSource:W})}})}function j3($,Z={}){let Q=Z.webFetchTimeoutMs??30000;return f$({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:u1(U6),timeoutMs:Q*2,retryable:!0,maxRetries:2,execute:async(W,J)=>{let X=U$(U6,W);return Promise.all(X.requests.map(async(Y)=>{try{let j=await v1($(Y.url,Y.prompt,J),Q,`Web fetch timed out after ${Q}ms`);return{query:Y.url,result:j,success:!0}}catch(j){let V=J2(j);return{query:Y.url,result:"",error:`Error fetching web content: ${V}`,success:!1}}}))}})}var uT=`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:
|
|
369
370
|
|
|
370
371
|
*** Begin Patch
|
|
371
372
|
*** Update File: path/to/file.ts
|
|
@@ -401,133 +402,133 @@ Example:
|
|
|
401
402
|
</div>
|
|
402
403
|
);
|
|
403
404
|
}
|
|
404
|
-
*** End Patch`;function V3($,Z={}){let Q=Z.applyPatchTimeoutMs??30000,W=Z.cwd??process.cwd();return
|
|
405
|
+
*** End Patch`;function V3($,Z={}){let Q=Z.applyPatchTimeoutMs??30000,W=Z.cwd??process.cwd();return f$({name:"apply_patch",description:uT,inputSchema:u1(L6),timeoutMs:Q,retryable:!1,maxRetries:0,execute:async(J,X)=>{let Y=U$(CH,J),j=typeof Y==="string"?Y:Y.input;try{return{query:"apply_patch",result:await v1($({input:j},W,X),Q,`apply_patch timed out after ${Q}ms`),success:!0}}catch(V){return{query:"apply_patch",result:"",error:`apply_patch failed: ${J2(V)}`,success:!1}}}})}function H3($,Z={}){let Q=Z.editorTimeoutMs??30000,W=Z.cwd??process.cwd();return f$({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:u1(D6),timeoutMs:Q,retryable:!1,maxRetries:0,execute:async(J,X)=>{let Y=U$(D6,J),j=Y.insert_line==null?"edit":"insert",V=PH(Y);if(V)return{query:`${j}:${Y.path}`,result:"",error:V,success:!1};try{let H=await v1($(Y,W,X),Q,`Editor operation timed out after ${Q}ms`);return{query:`${j}:${Y.path}`,result:H,success:!0}}catch(H){let B=J2(H);return{query:`${j}:${Y.path}`,result:"",error:`Editor operation failed: ${B}`,success:!1}}}})}function j2($,Z={}){let Q=Z.skillsTimeoutMs??15000,W='Execute a skill within the main conversation. When users ask you to perform tasks, check if any available skills match. When users reference a slash command, invoke it with this tool. Input: `skill` (required) and optional `args`. Example: `skill: "pdf"`, `skill: "commit", args: "-m \\"Fix bug\\""`, `skill: "review-pr", args: "123"`, `skill: "ms-office-suite:pdf"`. When a skill matches the user\'s request, invoking this tool is a blocking requirement before any other response. Never mention a skill without invoking this tool.',J=f$({name:"skills",description:W,inputSchema:u1(_6),timeoutMs:Q,retryable:!1,maxRetries:0,execute:async(X,Y)=>{let j=U$(_6,X);return v1($(j.skill,j.args||void 0,Y),Q,`Skills operation timed out after ${Q}ms`)}});return Object.defineProperty(J,"description",{get(){let X=$.configuredSkills?.filter((Y)=>!Y.disabled).map((Y)=>Y.name);if(X&&X.length>0)return`${W} Available skills: ${X.join(", ")}.`;return W},enumerable:!0,configurable:!0}),J}function B3($){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:u1(z6),retryable:!1,maxRetries:0,execute:async(Z,Q)=>{let W=U$(z6,Z);return $(W.question,W.options,Q)}}}function G3($,Z={}){let Q=Z.submitTimeoutMs??15000;return f$({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:u1(T6),lifecycle:{completesRun:!0},timeoutMs:Q,retryable:!1,maxRetries:0,execute:async(W,J)=>{let X=U$(T6,W);return v1($(X.summary,X.verified,J),Q,`submit_and_exit timed out after ${Q}ms`)}})}function D$($){let{executors:Z,enableReadFiles:Q=!0,enableSearch:W=!0,enableBash:J=!0,enableWebFetch:X=!0,enableApplyPatch:Y=!1,enableEditor:j=!0,enableSkills:V=!0,enableAskQuestion:H=!0,enableSubmitAndExit:B=!1,...G}=$,K=[];if(Q&&Z.readFile)K.push(X3(Z.readFile,G));if(W&&Z.search)K.push(Y3(Z.search,G));if(J&&Z.bash)K.push(O6(Z.bash,G));if(X&&Z.webFetch)K.push(j3(Z.webFetch,G));if(j&&Z.editor)K.push(H3(Z.editor,G));else if(Y&&Z.applyPatch)K.push(V3(Z.applyPatch,G));if(V&&Z.skills)K.push(j2(Z.skills,G));let F=B?Z.submit:void 0;if(H&&Z.askQuestion&&!F)K.push(B3(Z.askQuestion));if(F)K.push(G3(F,G));return K}import*as v0 from"node:fs/promises";import*as c0 from"node:path";var d={BEGIN:"*** Begin Patch",END:"*** End Patch",ADD:"*** Add File: ",UPDATE:"*** Update File: ",DELETE:"*** Delete File: ",MOVE:"*** Move to: ",SECTION:"@@",END_FILE:"*** End of File"},mH=["%%bash","apply_patch","EOF","```"];class V0 extends Error{constructor($){super($);this.name="DiffError"}}function m0($){let Z={"‐":"-","‑":"-","‒":"-","–":"-","—":"-","−":"-","“":'"',"”":'"',"„":'"',"«":'"',"»":'"',"‘":"'","’":"'","‛":"'"," ":" "," ":" "};return $.normalize("NFC").replace(/./gu,(Q)=>Z[Q]??Q).replace(/\\`/g,"`").replace(/\\'/g,"'").replace(/\\"/g,'"')}class K3{lines;currentFiles;patch={actions:{},warnings:[]};index=0;fuzz=0;currentPath;constructor($,Z){this.lines=$;this.currentFiles=Z}parse(){this.skipBeginSentinel();while(this.hasMoreLines()&&!this.isEndMarker())this.parseNextAction();if(this.patch.warnings?.length===0)delete this.patch.warnings;return{patch:this.patch,fuzz:this.fuzz}}addWarning($){if(!this.patch.warnings)this.patch.warnings=[];this.patch.warnings.push($)}skipBeginSentinel(){if(this.lines[this.index]?.startsWith(d.BEGIN))this.index++}hasMoreLines(){return this.index<this.lines.length}isEndMarker(){return this.lines[this.index]?.startsWith(d.END)??!1}parseNextAction(){let $=this.lines[this.index];if($?.startsWith(d.UPDATE)){this.parseUpdate($.substring(d.UPDATE.length).trim());return}if($?.startsWith(d.DELETE)){this.parseDelete($.substring(d.DELETE.length).trim());return}if($?.startsWith(d.ADD)){this.parseAdd($.substring(d.ADD.length).trim());return}throw new V0(`Unknown line while parsing: ${$}`)}checkDuplicate($,Z){if($ in this.patch.actions)throw new V0(`Duplicate ${Z} for file: ${$}`)}parseUpdate($){this.checkDuplicate($,"update"),this.currentPath=$,this.index++;let Z=this.lines[this.index]?.startsWith(d.MOVE)?(this.lines[this.index++]??"").substring(d.MOVE.length).trim():void 0;if(!($ in this.currentFiles))throw new V0(`Update File Error: Missing File: ${$}`);let Q=this.currentFiles[$]??"",W=this.parseUpdateFile(Q,$);W.movePath=Z,this.patch.actions[$]=W,this.currentPath=void 0}parseUpdateFile($,Z){let Q={type:"update",chunks:[]},W=$.split(`
|
|
405
406
|
`),J=0,X=[d.END,d.UPDATE,d.DELETE,d.ADD,d.END_FILE];while(!X.some((Y)=>this.lines[this.index]?.startsWith(Y.trim()))){let Y=this.lines[this.index],j=Y?.startsWith("@@ ")?Y.substring(3):void 0;if(j!==void 0||(Y==="@@"?Y:void 0)!==void 0)this.index++;else if(J!==0)throw new V0(`Invalid Line:
|
|
406
|
-
${this.lines[this.index]}`);if(j?.trim()){let f=m0(j.trim());for(let
|
|
407
|
-
`);this.addWarning({path:this.currentPath||Z,chunkIndex:Q.chunks.length,message:`Could not find matching context (similarity: ${
|
|
408
|
-
`),chunks:[]}}}function
|
|
407
|
+
${this.lines[this.index]}`);if(j?.trim()){let f=m0(j.trim());for(let D=J;D<W.length;D++){let U=W[D];if(U&&(m0(U)===f||m0(U.trim())===f)){if(J=D+1,m0(U.trim())===f&&m0(U)!==f)this.fuzz++;break}}}let[H,B,G,K]=pT(this.lines,this.index),[F,A,L]=lT(W,H,J,K);if(F===-1){let f=H.join(`
|
|
408
|
+
`);this.addWarning({path:this.currentPath||Z,chunkIndex:Q.chunks.length,message:`Could not find matching context (similarity: ${L.toFixed(2)}). Chunk skipped.`,context:f.length>200?`${f.substring(0,200)}...`:f}),this.index=G}else{this.fuzz+=A;for(let f of B)f.origIndex+=F,Q.chunks.push(f);J=F+H.length,this.index=G}}return Q}parseDelete($){if(this.checkDuplicate($,"delete"),!($ in this.currentFiles))throw new V0(`Delete File Error: Missing File: ${$}`);this.patch.actions[$]={type:"delete",chunks:[]},this.index++}parseAdd($){if(this.checkDuplicate($,"add"),$ in this.currentFiles)throw new V0(`Add File Error: File already exists: ${$}`);this.index++;let Z=[],Q=[d.END,d.UPDATE,d.DELETE,d.ADD];while(this.hasMoreLines()&&!Q.some((W)=>this.lines[this.index]?.startsWith(W.trim()))){let W=this.lines[this.index++];if(W===void 0)break;if(!W.startsWith("+"))throw new V0(`Invalid Add File line (missing '+'): ${W}`);Z.push(W.substring(1))}this.patch.actions[$]={type:"add",newFile:Z.join(`
|
|
409
|
+
`),chunks:[]}}}function gH($,Z){let Q=$.length>Z.length?$:Z,W=$.length>Z.length?Z:$;if(Q.length===0)return 1;let J=dT(W,Q);return(Q.length-J)/Q.length}function dT($,Z){let Q=Z.length+1,W=$.length+1,J=Array(Q*W).fill(0),X=(j,V)=>J[j*W+V]??0,Y=(j,V,H)=>{J[j*W+V]=H};for(let j=0;j<=Z.length;j++)Y(j,0,j);for(let j=0;j<=$.length;j++)Y(0,j,j);for(let j=1;j<=Z.length;j++)for(let V=1;V<=$.length;V++)if(Z[j-1]===$[V-1])Y(j,V,X(j-1,V-1));else Y(j,V,1+Math.min(X(j-1,V-1),X(j,V-1),X(j-1,V)));return X(Z.length,$.length)}function lT($,Z,Q,W){if(Z.length===0)return[Q,0,1];let J=0,X=(Y)=>{let j=m0(Z.join(`
|
|
409
410
|
`));for(let H=Y;H<$.length;H++){let B=m0($.slice(H,H+Z.length).join(`
|
|
410
|
-
`));if(B===j)return[H,0,1];let G=
|
|
411
|
+
`));if(B===j)return[H,0,1];let G=gH(B,j);if(G>J)J=G}for(let H=Y;H<$.length;H++){let B=m0($.slice(H,H+Z.length).map((K)=>K.trimEnd()).join(`
|
|
411
412
|
`)),G=m0(Z.map((K)=>K.trimEnd()).join(`
|
|
412
413
|
`));if(B===G)return[H,1,1]}for(let H=Y;H<$.length;H++){let B=m0($.slice(H,H+Z.length).map((K)=>K.trim()).join(`
|
|
413
414
|
`)),G=m0(Z.map((K)=>K.trim()).join(`
|
|
414
415
|
`));if(B===G)return[H,100,1]}let V=0.66;for(let H=Y;H<$.length;H++){let B=m0($.slice(H,H+Z.length).join(`
|
|
415
|
-
`)),G=
|
|
416
|
-
`).map((Z)=>Z.replace(/\r$/,""))}function
|
|
416
|
+
`)),G=gH(B,j);if(G>=V)return[H,1000,G];if(G>J)J=G}return[-1,0,J]};if(W){let[Y,j,V]=X($.length-Z.length);if(Y!==-1)return[Y,j,V];return[Y,j,V]=X(Q),[Y,j+1e4,V]}return X(Q)}function pT($,Z){let Q=Z,W=[],J=[],X=[],Y=[],j="keep",V=["@@",d.END,d.UPDATE,d.DELETE,d.ADD,d.END_FILE];while(Q<$.length){let H=$[Q];if(!H||V.some((K)=>H.startsWith(K.trim())))break;if(H==="***")break;if(H.startsWith("***"))throw new V0(`Invalid line: ${H}`);Q++;let B=j,G=H;if(G[0]==="+")j="add";else if(G[0]==="-")j="delete";else if(G[0]===" ")j="keep";else j="keep",G=` ${G}`;if(G=G.slice(1),j==="keep"&&B!==j){if(X.length||J.length)Y.push({origIndex:W.length-J.length,delLines:J,insLines:X});J=[],X=[]}if(j==="delete")J.push(G),W.push(G);else if(j==="add")X.push(G);else W.push(G)}if(X.length||J.length)Y.push({origIndex:W.length-J.length,delLines:J,insLines:X});if(Q<$.length&&$[Q]===d.END_FILE)return Q++,[W,Y,Q,!0];return[W,Y,Q,!1]}function F3($,Z,Q){let W=c0.isAbsolute(Z),J=W?c0.normalize(Z):c0.resolve($,Z);if(!Q||W)return J;let X=c0.relative($,J);if(X.startsWith("..")||c0.isAbsolute(X))throw new V0(`Path must stay within cwd: ${Z}`);return J}function rT($){return $.split(`
|
|
417
|
+
`).map((Z)=>Z.replace(/\r$/,""))}function vH($){if($.trim()==="")return!1;return mH.some((Z)=>$.startsWith(Z))}function iT($){let Z=0,Q=$.length;while(Z<Q&&vH($[Z]??""))Z++;while(Q>Z&&vH($[Q-1]??""))Q--;return $.slice(Z,Q)}function nT($){let Z=rT($),Q=Z.findIndex((Y)=>Y.startsWith(d.BEGIN)),W=-1;for(let Y=Z.length-1;Y>=0;Y--)if(Z[Y]?.startsWith(d.END)){W=Y;break}if(Q!==-1||W!==-1){if(Q===-1||W===-1||W<Q)throw new V0("Invalid patch text - incomplete sentinels. Try breaking it into smaller patches.");return{lines:Z.slice(Q,W+1)}}let J=iT(Z);while(J.length>0&&J[0]==="")J.shift();while(J.length>0&&J[J.length-1]==="")J.pop();return{lines:[d.BEGIN,...J,d.END]}}function aT($,Z){let Q=new Set;for(let W of $)for(let J of Z)if(W.startsWith(J)){Q.add(W.substring(J.length).trim());break}return[...Q]}function sT($,Z,Q){if(Z.length===0)return $;let W=$.split(`
|
|
417
418
|
`),J=[],X=0;for(let Y of Z){if(Y.origIndex>W.length)throw new V0(`${Q}: chunk.origIndex ${Y.origIndex} > lines.length ${W.length}`);if(X>Y.origIndex)throw new V0(`${Q}: currentIndex ${X} > chunk.origIndex ${Y.origIndex}`);J.push(...W.slice(X,Y.origIndex)),J.push(...Y.insLines),X=Y.origIndex+Y.delLines.length}return J.push(...W.slice(X)),J.join(`
|
|
418
|
-
`)}async function
|
|
419
|
-
`)}return X}function
|
|
419
|
+
`)}async function oT($,Z,Q,W){let J=aT($,[d.UPDATE,d.DELETE]),X={};for(let Y of J){let j=F3(Z,Y,W),V;try{V=await v0.readFile(j,Q)}catch{throw new V0(`File not found: ${Y}`)}X[Y]=V.replace(/\r\n/g,`
|
|
420
|
+
`)}return X}function tT($,Z){let Q={};for(let[W,J]of Object.entries($.actions))switch(J.type){case"delete":Q[W]={type:"delete",oldContent:Z[W]};break;case"add":if(J.newFile===void 0)throw new V0("ADD action without file content");Q[W]={type:"add",newContent:J.newFile};break;case"update":Q[W]={type:"update",oldContent:Z[W],newContent:sT(Z[W]??"",J.chunks,W),movePath:J.movePath};break}return Q}function eT($){let Z=[`Patch could not be applied because ${$.length} hunk${$.length===1?"":"s"} did not match the current file content.`];for(let Q of $){let W=Q.chunkIndex===void 0?"unknown":String(Q.chunkIndex+1);if(Z.push(`${Q.path}: hunk ${W}: ${Q.message}`),Q.context)Z.push(`Context:
|
|
420
421
|
${Q.context}`)}return Z.join(`
|
|
421
|
-
`)}async function
|
|
422
|
-
`)}}import*as Y1 from"node:fs/promises";import*as X1 from"node:path";function
|
|
422
|
+
`)}async function $O($,Z,Q,W){let J=[];for(let[X,Y]of Object.entries($)){let j=F3(Z,X,W);switch(Y.type){case"delete":await v0.rm(j,{force:!0}),J.push(`${X}: [deleted]`);break;case"add":if(Y.newContent===void 0)throw new V0(`Cannot create ${X} with no content`);await v0.mkdir(c0.dirname(j),{recursive:!0}),await v0.writeFile(j,Y.newContent,{encoding:Q}),J.push(X);break;case"update":{if(Y.newContent===void 0)throw new V0(`UPDATE change for ${X} has no new content`);if(Y.movePath){let V=F3(Z,Y.movePath,W);await v0.mkdir(c0.dirname(V),{recursive:!0}),await v0.writeFile(V,Y.newContent,{encoding:Q}),await v0.rm(j,{force:!0}),J.push(`${X} -> ${Y.movePath}`)}else await v0.writeFile(j,Y.newContent,{encoding:Q}),J.push(X);break}}}return J}function q6($={}){let{encoding:Z="utf-8",restrictToCwd:Q=!0}=$;return async(W,J,X)=>{let Y=nT(W.input),j=await oT(Y.lines,J,Z,Q),V=new K3(Y.lines,j),{patch:H,fuzz:B}=V.parse();if(H.warnings&&H.warnings.length>0)throw new V0(eT(H.warnings));let G=tT(H,j),K=await $O(G,J,Z,Q),F=["Successfully applied patch to the following files:"];for(let A of K)F.push(A);if(B>0)F.push(`Note: Patch applied with fuzz factor ${B}`);return F.join(`
|
|
423
|
+
`)}}import*as Y1 from"node:fs/promises";import*as X1 from"node:path";function ZO($,Z,Q){let W=X1.isAbsolute(Z),J=W?X1.normalize(Z):X1.resolve($,Z);if(!Q)return J;if(W)return J;let X=X1.relative($,J);if(X.startsWith("..")||X1.isAbsolute(X))throw Error(`Path must stay within cwd: ${Z}`);return J}function QO($,Z){if(Z.length===0)return 0;return $.split(Z).length-1}function WO($,Z,Q){let W=$.split(`
|
|
423
424
|
`),J=Z.split(`
|
|
424
425
|
`),X=Math.max(W.length,J.length),Y=["```diff"],j=0;for(let V=0;V<X;V++){if(j>=Q){Y.push("... diff truncated ...");break}let H=W[V],B=J[V];if(H===B)continue;let G=V+1;if(H!==void 0)Y.push(`-${G}: ${H}`),j++;if(B!==void 0&&j<Q)Y.push(`+${G}: ${B}`),j++}return Y.push("```"),Y.join(`
|
|
425
|
-
`)}async function
|
|
426
|
-
${V}`}async function
|
|
426
|
+
`)}async function JO($,Z,Q){return await Y1.mkdir(X1.dirname($),{recursive:!0}),await Y1.writeFile($,Z,{encoding:Q}),`File created successfully at: ${$}`}async function XO($){try{return await Y1.access($),!0}catch{return!1}}async function YO($,Z,Q,W,J){let X=await Y1.readFile($,W),Y=QO(X,Z);if(Y===0)throw Error(`No replacement performed: text not found in ${$}.`);if(Y>1)throw Error(`No replacement performed: multiple occurrences of text found in ${$}.`);let j=X.replace(Z,Q??"");await Y1.writeFile($,j,{encoding:W});let V=WO(X,j,J);return`Edited ${$}
|
|
427
|
+
${V}`}async function jO($,Z,Q,W){let X=(await Y1.readFile($,W)).split(`
|
|
427
428
|
`),Y=X.length+1;if(Z<1||Z>Y)throw Error(`Invalid insert_line: ${Z}. insert_line must be a positive one-based boundary line in the range 1-${Y}. Use ${Y} to append at EOF.`);let j=Z-1;return X.splice(j,0,...Q.split(`
|
|
428
429
|
`)),await Y1.writeFile($,X.join(`
|
|
429
|
-
`),{encoding:W}),`Inserted content at line ${Z} in ${$}.`}function
|
|
430
|
-
`),
|
|
431
|
-
|
|
432
|
-
[Showing lines ${Y}-${
|
|
433
|
-
`).filter((f)=>f.trim());for(let f of
|
|
434
|
-
`))}let F;try{F=new RegExp(V,"gim")}catch(U){throw Error(`Invalid regex pattern: ${V}. ${U instanceof Error?U.message:""}`)}let A=[],
|
|
435
|
-
`);for(let
|
|
436
|
-
Searched ${
|
|
437
|
-
`))}}function
|
|
430
|
+
`),{encoding:W}),`Inserted content at line ${Z} in ${$}.`}function M6($={}){let{encoding:Z="utf-8",restrictToCwd:Q=!0,maxDiffLines:W=200}=$;return async(J,X,Y)=>{let j=ZO(X,J.path,Q);if(J.insert_line!=null)return jO(j,J.insert_line,J.new_text,Z);if(!await XO(j))return JO(j,J.new_text,Z);if(J.old_text==null)throw Error("Parameter `old_text` is required when editing an existing file without `insert_line`");return YO(j,J.old_text,J.new_text,Z,W)}}import{createReadStream as VO}from"node:fs";import*as DZ from"node:fs/promises";import*as L$ from"node:path";import{createInterface as HO}from"node:readline";import{resolveExistingFilePath as BO}from"@cline/shared/storage";var GO=new Map([[".gif","image/gif"],[".png","image/png"],[".jpg","image/jpeg"],[".jpeg","image/jpeg"],[".webp","image/webp"]]),KO={maxFileSizeBytes:1e7,encoding:"utf-8",includeLineNumbers:!0},cH=1e8,FO=50000;function uH($){let{reason:Z}=$;if(Z instanceof Error)return Z;if(Z!==void 0)return Error(String(Z));return Error("File read was aborted")}async function AO($,Z,Q,W,J,X){if(X?.aborted)throw uH(X);let Y=Math.max(W??1,1),j=J??Number.POSITIVE_INFINITY,V=Number.isFinite(j),H=V?j:Y+FO-1,B=[],G=0,K=0,F=!1,A=!1,L=Number.isFinite(j)?Math.min(j,Y+L8-1):Y+L8-1,f=Q?String(L).length+3:0,D=VO($,{encoding:Z}),U=HO({input:D,crlfDelay:Number.POSITIVE_INFINITY}),T=X?()=>D.destroy(uH(X)):void 0;if(X&&T)X.addEventListener("abort",T,{once:!0});try{for await(let y of U){if(K+=1,K>j){K=j;break}if(!V&&F&&K>=H){A=!0;break}if(K<Y||F)continue;if(B.length>=L8){F=!0;continue}let l=y;if(l.length>J3)l=`${l.slice(0,J3)} [line truncated]`;let o=G+l.length+f+1;if(o>fZ&&B.length>0){F=!0;continue}B.push({lineNumber:K,text:l}),G=o}}finally{if(X&&T)X.removeEventListener("abort",T);U.close(),D.destroy()}let O=String(B[B.length-1]?.lineNumber??K).length,z=B.map(({lineNumber:y,text:l})=>Q?`${String(y).padStart(O," ")} | ${l}`:l).join(`
|
|
431
|
+
`),_=B[B.length-1]?.lineNumber;if(_===void 0)return z;let E=Math.min(j,K);if(_>=E)return z;let C=A?`${K}+ lines`:E;return`${z}
|
|
432
|
+
|
|
433
|
+
[Showing lines ${Y}-${_} of ${C}. Use start_line/end_line to read other sections.]`}function R6($={}){let{maxFileSizeBytes:Z,encoding:Q,includeLineNumbers:W}={...KO,...$};return async(J,X)=>{let{path:Y,start_line:j,end_line:V}=J,H=L$.isAbsolute(Y)?L$.normalize(Y):L$.resolve(process.cwd(),Y),B=BO(H)??H,G=L$.extname(B).toLowerCase(),K=GO.get(G),F=await DZ.stat(B);if(!F.isFile())throw Error(`Path is not a file: ${B}`);if(K){if(F.size>Z)throw Error(`Image file too large: ${F.size} bytes (max: ${Z} bytes).`);if(X.metadata?.modelSupportsImages!==!0)throw Error("Current model does not support image input");let A=await DZ.readFile(B);return[{type:"text",text:"Successfully read image"},{type:"image",data:A.toString("base64"),mediaType:K}]}if(F.size>cH)throw Error(`Text file too large to stream safely: ${F.size} bytes (max: ${cH} bytes). Use a targeted command such as sed, grep, head, or tail to inspect specific sections.`);return AO(B,Q,W,j,V,X.signal)}}import{spawn as sH}from"node:child_process";import*as oH from"node:fs/promises";import*as zZ from"node:path";var nH={};N(nH,{prewarmFileIndex:()=>_Z,getFileIndex:()=>d1,enrichPromptWithMentions:()=>T8});import{spawn as fO}from"node:child_process";import{readdir as UO}from"node:fs/promises";import f3 from"node:path";import{isMainThread as pH,parentPort as dH,Worker as DO}from"node:worker_threads";var LO=15000,_O=600000,zO=1000,TO=new Set([".git","node_modules","dist","build",".next","coverage",".turbo",".cache","target","out"]);function lH($){let Z=$&&typeof $==="object"&&"code"in $?String($.code??""):"";return Z==="EACCES"||Z==="EPERM"||Z==="ENOENT"}var z8=new Map;function OO(){if(!pH)return!1;return!0}function qO($){if(z8.size<=1)return;for(let[Z,Q]of z8.entries()){if(Q.pending)continue;if($-Q.lastAccessedAt>_O)z8.delete(Z)}}function MO($,Z){return f3.relative($,Z).split(f3.sep).join("/")}async function RO($){let Q=(await new Promise((W,J)=>{let X=fO("rg",["--files","--hidden","-g","!.git"],{cwd:$,stdio:["ignore","pipe","pipe"],windowsHide:!0}),Y="",j="";X.stdout.on("data",(V)=>{Y+=V.toString()}),X.stderr.on("data",(V)=>{j+=V.toString()}),X.on("error",J),X.on("close",(V)=>{if(V===0){W(Y);return}J(Error(j||`rg exited with code ${V}`))})})).split(/\r?\n/).map((W)=>W.trim()).filter((W)=>W.length>0).map((W)=>W.replace(/\\/g,"/"));return new Set(Q)}async function rH($,Z,Q){let W;try{W=await UO(Z,{withFileTypes:!0})}catch(J){if(lH(J))return;throw J}for(let J of W){let X=f3.join(Z,J.name);if(J.isDirectory()){if(TO.has(J.name))continue;try{await rH($,X,Q)}catch(Y){if(lH(Y))continue;throw Y}continue}if(J.isFile())Q.add(MO($,X))}}async function EO($){let Z=new Set;return await rH($,$,Z),Z}async function LZ($){try{return await RO($)}catch{return EO($)}}function NO(){if(pH||!dH)return;let $=dH;$.on("message",(Z)=>{if(Z.type!=="index")return;LZ(Z.cwd).then((Q)=>{let W={type:"indexResult",requestId:Z.requestId,files:Array.from(Q)};$.postMessage(W)}).catch((Q)=>{let W={type:"indexResult",requestId:Z.requestId,error:Q instanceof Error?Q.message:"Failed to build file index"};$.postMessage(W)})})}class iH{worker=new DO(new URL(import.meta.url));nextRequestId=0;pending=new Map;constructor(){this.worker.unref(),this.worker.on("message",($)=>{if($.type!=="indexResult")return;let Z=this.pending.get($.requestId);if(!Z)return;if(this.pending.delete($.requestId),$.error){Z.reject(Error($.error));return}Z.resolve($.files??[])}),this.worker.on("error",($)=>{this.flushPending($)}),this.worker.on("exit",($)=>{if($!==0)this.flushPending(Error(`File index worker exited with code ${$}`))})}requestIndex($){let Z=++this.nextRequestId,Q=new Promise((J,X)=>{let Y=setTimeout(()=>{this.pending.delete(Z),J(null)},zO);Y.unref(),this.pending.set(Z,{resolve:(j)=>{clearTimeout(Y),J(j)},reject:(j)=>{clearTimeout(Y),X(j)}})}),W={type:"index",requestId:Z,cwd:$};return this.worker.postMessage(W),Q}flushPending($){for(let[Z,Q]of this.pending.entries())Q.reject($),this.pending.delete(Z)}}NO();var A3;function wO(){if(!OO())return null;if(A3===void 0)A3=new iH;return A3}async function CO($){let Z=wO();if(!Z)return LZ($);try{let Q=await Z.requestIndex($);if(Q===null)return LZ($);return new Set(Q)}catch{return LZ($)}}async function d1($,Z={}){let Q=Z.ttlMs??LO,W=Date.now();qO(W);let J=z8.get($);if(J&&Q>0&&W-J.lastBuiltAt<=Q&&J.files.size>0)return J.lastAccessedAt=W,J.files;if(J?.pending)return J.lastAccessedAt=W,J.pending;let X=CO($).then((Y)=>{return z8.set($,{files:Y,lastBuiltAt:Date.now(),lastAccessedAt:Date.now(),pending:null}),Y});return z8.set($,{files:J?.files??new Set,lastBuiltAt:J?.lastBuiltAt??0,lastAccessedAt:W,pending:X}),X}async function _Z($,Z={}){await d1($,{...Z,ttlMs:0})}import{stat as PO}from"node:fs/promises";import V2 from"node:path";var SO=/[),.:;!?`'"]+$/,bO=/^[(`'"]+/;function yO($){let Z=$.matchAll(/(^|[\s])@([^\s]+)/g),Q=[];for(let W of Z){let J=(W[2]??"").trim();if(J.length===0)continue;let X=J.replace(bO,"").replace(SO,"");if(X.length===0||X.includes("@"))continue;Q.push(X)}return Array.from(new Set(Q))}function hO($,Z){let Q=$.replace(/\\/g,"/"),W=V2.isAbsolute(Q)?V2.resolve(Q):V2.resolve(Z,Q),J=V2.relative(Z,W);if(J.startsWith("..")||V2.isAbsolute(J))return;return J.split(V2.sep).join("/")}async function T8($,Z,Q={}){let W=yO($);if(W.length===0)return{prompt:$,mentions:[],matchedFiles:[],ignoredMentions:[]};let{maxFiles:J,maxFileBytes:X,maxTotalBytes:Y}=Q,j=await d1(Z,{ttlMs:Q.ttlMs}),V=[],H=[],B=[],G=0;for(let K of W){if(J&&B.length>=J){H.push(K);continue}let F=hO(K,Z);if(!F||!j.has(F)){H.push(K);continue}if(!X||!Y){V.push(F);continue}let A=V2.join(Z,F);try{if(!(await PO(A)).isFile()){H.push(K);continue}let f=G+X;if(f>Y){H.push(K);continue}G=f,V.push(F)}catch{H.push(K)}}return{prompt:$,mentions:W,matchedFiles:V,ignoredMentions:H}}var kO=["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"],IO=["node_modules",".git","dist","build",".next","coverage","__pycache__",".venv","venv",".cache",".turbo",".output","out","target","bin","obj"],H2=null;function xO(){if(H2!==null)return Promise.resolve(H2);return new Promise(($)=>{let Z=sH("rg",["--version"],{stdio:["ignore","pipe","pipe"],windowsHide:!0});Z.on("close",(Q)=>{H2=Q===0,$(H2)}),Z.on("error",()=>{H2=!1,$(!1)}),setTimeout(()=>{if(!Z.killed)Z.kill("SIGTERM");if(H2===null)H2=!1,$(!1)},1000)})}function gO($,Z,Q,W,J=5000,X){return new Promise((Y)=>{let j=sH("rg",["--json",`--context=${W}`,"--max-count=1","-i",$],{cwd:Z,stdio:["ignore","pipe","pipe"],windowsHide:!0}),V="",H=!1,B=()=>{if(!j.killed)j.kill("SIGTERM")},G=setTimeout(()=>{if(!H)H=!0,B(),Y(null)},J),K=(F)=>{if(!H)H=!0,clearTimeout(G),B(),Y(F)};if(X?.aborted){B(),Y(null);return}X?.addEventListener("abort",()=>{K(null)}),j.stdout.on("data",(F)=>{V+=F.toString()}),j.stderr.on("data",()=>{}),j.on("close",(F)=>{if(F===0||F===1){try{let A=[],L=V.split(`
|
|
434
|
+
`).filter((f)=>f.trim());for(let f of L){if(A.length>=Q)break;let D=JSON.parse(f);if(D.type==="match"){let U=D.data,T=[];if(D.data.submatches&&D.data.submatches.length>0){let O=D.data.submatches[0];A.push({file:U.path.text,line:U.line_number,column:(O?.start??0)+1,match:O?.match?.text??"",context:T})}}else if(D.type==="context"&&A.length>0){let U=A[A.length-1],T=D.data.line_number===U.line?">":" ";U.context.push(`${T} ${D.data.line_number}: ${D.data.lines?.text??D.data.line?.text??""}`)}}K(A.length>0?A:null)}catch{K(null)}return}K(null)}),j.on("error",()=>{K(null)})})}function mO($,Z,Q,W){let J=$.split("/"),X=J[J.length-1]??"";if(J.length-1>W)return!1;for(let V=0;V<J.length-1;V++)if(Z.has(J[V]??""))return!1;let j=zZ.posix.extname(X).slice(1).toLowerCase();return Q.has(j)||!j&&!X.startsWith(".")}function E6($={}){let{includeExtensions:Z=kO,excludeDirs:Q=IO,maxResults:W=100,contextLines:J=2,maxDepth:X=20}=$,Y=new Set(Q),j=new Set(Z.map((V)=>V.toLowerCase()));return async(V,H,B)=>{if(B.signal?.aborted)throw Error("Search operation aborted");let G=await xO(),K=null;if(G)K=await gO(V,H,W,J,5000,B.signal);if(K){let U=[`Found ${K.length} result${K.length===1?"":"s"} for pattern: ${V}`,""];for(let T of K)U.push(`${T.file}:${T.line}:${T.column}`),U.push(...T.context),U.push("");if(K.length>=W)U.push(`(Showing first ${W} results. Refine your search for more specific results.)`);return aH(U.join(`
|
|
435
|
+
`))}let F;try{F=new RegExp(V,"gim")}catch(U){throw Error(`Invalid regex pattern: ${V}. ${U instanceof Error?U.message:""}`)}let A=[],L=0,f=await d1(H);for(let U of f){if(B.signal?.aborted)throw Error("Search operation aborted");if(!mO(U,Y,j,X))continue;if(A.length>=W)break;L++;let T=zZ.join(H,U);try{let z=(await oH.readFile(T,"utf-8")).split(`
|
|
436
|
+
`);for(let _=0;_<z.length;_++){let E=z[_];F.lastIndex=0;let C=F.exec(E);while(C!==null){if(A.length>=W)break;let y=Math.max(0,_-J),l=Math.min(z.length-1,_+J),o=[];for(let t=y;t<=l;t++){let Q0=t===_?">":" ";o.push(`${Q0} ${t+1}: ${z[t]}`)}if(A.push({file:U,line:_+1,column:C.index+1,match:C[0],context:o}),C.index===F.lastIndex)F.lastIndex++;C=F.exec(E)}}}catch{}}if(A.length===0)return`No results found for pattern: ${V}
|
|
437
|
+
Searched ${L} files.`;let D=[`Found ${A.length} result${A.length===1?"":"s"} for pattern: ${V}`,`Searched ${L} files.`,""];for(let U of A)D.push(`${U.file}:${U.line}:${U.column}`),D.push(...U.context),D.push("");if(A.length>=W)D.push(`(Showing first ${W} results. Refine your search for more specific results.)`);return aH(D.join(`
|
|
438
|
+
`))}}function aH($){if($.length<=_8)return $;let Z=Math.ceil(_8/2),Q=Math.max(1,_8-Z);return`${$.slice(0,Z)}
|
|
438
439
|
[... search output truncated: ${$.length} chars total. Narrow the pattern or scope to view the elided matches ...]
|
|
439
|
-
`+$.slice(-Q)}function
|
|
440
|
+
`+$.slice(-Q)}function vO($){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,`
|
|
440
441
|
`).replace(/<[^>]+>/g," ").replace(/ /g," ").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,'"').replace(/&#(\d+);/g,(Z,Q)=>String.fromCharCode(parseInt(Q,10))).replace(/\s+/g," ").replace(/\n\s+/g,`
|
|
441
442
|
`).replace(/\n{3,}/g,`
|
|
442
443
|
|
|
443
|
-
`).trim()}function
|
|
444
|
-
[Content truncated: showing first 50000 of ${
|
|
445
|
-
`)}catch(F){if(clearTimeout(G),F instanceof Error){if(F.name==="AbortError")throw Error(`Request timed out after ${Z}ms`);throw F}throw Error(`Fetch failed: ${String(F)}`)}finally{if(V.signal&&K)V.signal.removeEventListener("abort",K)}}}function w6($={}){return j2($)}function q8($={}){return{readFile:E6($.fileRead),search:N6($.search),bash:w6($.bash),webFetch:C6($.webFetch),applyPatch:M6($.applyPatch),editor:R6($.editor)}}var IO={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"},M8=[{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 oH($,Z){if(!Z||Z.length===0)return!0;let Q=$.toLowerCase();return Z.some((W)=>Q.includes(W.toLowerCase()))}function xO($,Z,Q,W){if($.mode&&$.mode!=="any"&&$.mode!==W)return!1;return oH(Z,$.providerIdIncludes)&&oH(Q,$.modelIdIncludes)}function R8($,Z,Q,W){if(!W||W.length===0)return{};let J=new Map;for(let Y of W){if(!xO(Y,$,Z,Q))continue;for(let j of Y.disableTools??[])J.set(j,!1);for(let j of Y.enableTools??[])J.set(j,!0)}let X={};for(let[Y,j]of J.entries())X[IO[Y]]=j;return X}var u0={act:{enableReadFiles:!0,enableSearch:!0,enableBash:!0,enableWebFetch:!0,enableApplyPatch:!1,enableEditor:!0,enableSkills:!0,enableAskQuestion:!0,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!0},plan:{enableReadFiles:!0,enableSearch:!0,enableBash:!0,enableWebFetch:!0,enableApplyPatch:!1,enableEditor:!1,enableSkills:!0,enableAskQuestion:!0,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!0},search:{enableReadFiles:!0,enableSearch:!0,enableBash:!1,enableWebFetch:!1,enableApplyPatch:!1,enableEditor:!1,enableSkills:!1,enableAskQuestion:!1,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!0},minimal:{enableReadFiles:!1,enableSearch:!1,enableBash:!0,enableWebFetch:!1,enableApplyPatch:!1,enableEditor:!1,enableSkills:!1,enableAskQuestion:!1,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!1},yolo:{enableReadFiles:!0,enableSearch:!1,enableBash:!0,enableWebFetch:!1,enableApplyPatch:!1,enableEditor:!0,enableSkills:!1,enableAskQuestion:!1,enableSubmitAndExit:!0,enableSpawnAgent:!1,enableAgentTeams:!1}};function l1($){if($.mode==="plan")return"plan";if($.mode==="yolo")return"yolo";return"act"}function _Z($){if($!=="yolo")return{};let Z={enabled:!0,autoApprove:!0},Q={"*":Z};for(let W of X$)Q[W]=Z;return Q}function zZ($,Z){let Q=u0[$],{enableSpawnAgent:W,enableAgentTeams:J,...X}=Q;return T$({...X,...Z})}import{createTool as tq,zodToJsonSchema as eq}from"@cline/shared";import{z as N3}from"zod";$1();import{createAgentRuntime as vq}from"@cline/agents";import{createContributionRegistry as cq,mergeModelOptions as DB}from"@cline/shared";import{createGateway as iO,createHandlerAsync as nO,hasRegisteredHandler as aO,MODEL_COLLECTIONS_BY_PROVIDER_ID as sO,normalizeProviderId as oO}from"@cline/llms";import{EMPTY_CONTENT_TEXT as gO}from"@cline/shared";function mO($){let Z=cO($.content),Q=[],W=$.id??lO(),J=0,X=[],Y=()=>{if(X.length===0)return;let j=J===0?W:`${W}_part_${J}`;J+=1,Q.push({id:j,role:$.role,content:X.map(uO),createdAt:$.ts??Date.now(),metadata:$.metadata,modelInfo:$.modelInfo,metrics:tH($.metrics)}),X=[]};if(Z.length===0)return Q.push({id:W,role:$.role,content:[{type:"text",text:gO}],createdAt:$.ts??Date.now(),metadata:$.metadata,modelInfo:$.modelInfo,metrics:tH($.metrics)}),Q;for(let j of Z){if(j.type!=="tool_result"){X.push(j);continue}Y(),Q.push({id:`${W}_tool_${j.tool_use_id}`,role:"tool",content:[$B(j)],createdAt:$.ts??Date.now(),metadata:$.metadata})}return Y(),Q}function OZ($){return $.flatMap(mO)}function vO($){let Z=$.content.map(ZB).filter((Q)=>Q!==void 0);return{id:$.id,role:$.role==="tool"?"user":$.role,content:Z,ts:$.createdAt,metadata:$.metadata,modelInfo:$.modelInfo,metrics:dO($.metrics)}}function E8($){return $.map(vO)}function qZ($){let Z=[];for(let Q of $){let W=Q.content.map(ZB).filter((Y)=>Y!==void 0),J=Q.role==="tool"?"user":Q.role,X=Z[Z.length-1];if(J==="user"&&W.length>0&&W.every((Y)=>Y.type==="tool_result")&&X?.role==="user"&&Array.isArray(X.content)&&X.content.every((Y)=>Y.type==="tool_result")){X.content.push(...W);continue}Z.push({role:J,content:W})}return Z}function cO($){if(typeof $==="string")return $.trim().length>0?[{type:"text",text:$}]:[];return[...$]}function uO($){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 $B($)}}function $B($){return{type:"tool-result",toolCallId:$.tool_use_id,toolName:$.name,output:$.content,isError:$.is_error}}function ZB($){switch($.type){case"text":return{type:"text",text:$.text};case"reasoning":{if($.redacted===!0)return{type:"redacted_thinking",data:$.metadata?.data??""};let Z=$.metadata;return{type:"thinking",thinking:$.text,signature:Z?.signature,details:Z?.details}}case"image":return typeof $.image==="string"?{type:"image",data:$.image,mediaType:$.mediaType??"image/png"}:void 0;case"file":return{type:"file",path:$.path,content:$.content};case"tool-call":{let Z=$.metadata;return{type:"tool_use",id:$.toolCallId,name:$.toolName,input:$.input??{},signature:Z?.thoughtSignature??Z?.signature}}case"tool-result":{let Z=$.output,Q=typeof Z==="string"?Z:Array.isArray(Z)?Z:JSON.stringify(Z);return{type:"tool_result",tool_use_id:$.toolCallId,name:$.toolName,content:Q,is_error:$.isError}}}}function tH($){if(!$)return;return{inputTokens:$.inputTokens??0,outputTokens:$.outputTokens??0,cacheReadTokens:$.cacheReadTokens??0,cacheWriteTokens:$.cacheWriteTokens??0,cost:$.cost}}function dO($){if(!$)return;return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,cost:$.cost}}var eH=0;function lO(){return eH+=1,`msg_${Date.now().toString(36)}_${eH.toString(36)}`}function pO($){switch($.type){case"text":return[{type:"text-delta",text:$.text}];case"reasoning":return[{type:"reasoning-delta",text:$.reasoning,metadata:$.signature?{thoughtSignature:$.signature,details:$.details}:{details:$.details}}];case"tool_calls":{let Z=$.tool_call.function,Q=Z.arguments;return[{type:"tool-call-delta",toolCallId:$.tool_call.call_id??Z.id,toolName:Z.name,inputText:typeof Q==="string"?Q:void 0,input:typeof Q==="string"?void 0:Q,...$.signature?{metadata:{thoughtSignature:$.signature}}:{}}]}case"usage":return[{type:"usage",usage:{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,reasoningTokenCount:$.thoughtsTokenCount,totalCost:$.totalCost}}];case"done":return[{type:"finish",reason:rO($),error:$.error}];default:return[]}}function rO($){if($.success===!1)return"error";if($.incompleteReason==="max_output_tokens"||$.incompleteReason==="max-tokens")return"max-tokens";return"stop"}function QB($){return{async*stream(Z){let Q=!1,W=!1;try{let J=typeof $==="function"?await $():$;J.setAbortSignal?.(Z.signal);let X=qZ(Z.messages),Y=Z.tools.map((j)=>({name:j.name,description:j.description,inputSchema:j.inputSchema}));for await(let j of J.createMessage(Z.systemPrompt??"",X,Y))for(let V of pO(j)){if(V.type==="finish")Q=!0;else if(V.type==="tool-call-delta")W=!0;yield V}if(!Q)yield{type:"finish",reason:W?"tool-calls":"stop"}}catch(J){if(!Q)yield{type:"finish",reason:Z.signal?.aborted?"aborted":"error",error:J instanceof Error?J.message:String(J)}}}}}function tO($){let Z=Object.fromEntries(Object.entries($).filter(([,Q])=>Q!==void 0));return Object.keys(Z).length>0?Z:void 0}function eO($){return $.providerId==="openai-compatible"||$.clientType==="openai-compatible"}function $q($){let Z={region:$.region,apiLine:$.apiLine,openRouterProviderSorting:$.openRouterProviderSorting,modelCatalog:$.modelCatalog};if(eO($))Object.assign(Z,{apiVersion:$.azure?.apiVersion,useIdentity:$.azure?.useIdentity});if($.providerId==="bedrock")Object.assign(Z,{authentication:$.aws?.authentication,profile:$.aws?.profile,accessKeyId:$.aws?.accessKey,secretAccessKey:$.aws?.secretKey,sessionToken:$.aws?.sessionToken,usePromptCache:$.aws?.usePromptCache,useCrossRegionInference:$.useCrossRegionInference,useGlobalInference:$.useGlobalInference,endpoint:$.aws?.endpoint,customModelBaseId:$.aws?.customModelBaseId});if($.providerId==="vertex"){let Q=$.gcp?.region??$.region;Object.assign(Z,{project:$.gcp?.projectId,projectId:$.gcp?.projectId,location:Q,region:Q})}if($.providerId==="sapaicore")Object.assign(Z,$.sap);return tO(Z)}function U3($){let Z=$.providerConfig;if(Z?.knownModels)return Z.knownModels;if($.knownModels)return $.knownModels;return sO[$.providerId]?.models??void 0}function Zq($){if(!$?.length)return;let Z=new Set;for(let Q of $)switch(Q){case"tools":case"reasoning":case"prompt-cache":case"images":Z.add(Q);break;case"structured_output":Z.add("structured-output");break;default:Z.add("text")}return Z.add("text"),[...Z]}function Qq($,Z){return{id:$,name:Z.name??$,description:Z.description,contextWindow:Z.contextWindow,maxInputTokens:Z.maxInputTokens,maxOutputTokens:Z.maxTokens,capabilities:Zq(Z.capabilities),metadata:{family:Z.family,pricing:Z.pricing,status:Z.status,releaseDate:Z.releaseDate}}}function WB($,Z,Q){let W=$.providerConfig,J=W?.providerId===$.providerId?W:void 0,X={...J??{},providerId:$.providerId,modelId:$.modelId,apiKey:$.apiKey??J?.apiKey,baseUrl:$.baseUrl??J?.baseUrl,headers:$.headers??J?.headers,knownModels:U3($),maxOutputTokens:$.maxTokensPerTurn,reasoningEffort:$.reasoningEffort,thinkingBudgetTokens:$.thinkingBudgetTokens,thinking:$.thinking,logger:Z,extensionContext:$.extensionContext};if(aO(oO(X.providerId)))return QB(()=>nO(X));return iO({fetch:X.fetch,providerConfigs:[{providerId:X.providerId,apiKey:X.apiKey,baseUrl:X.baseUrl,headers:X.headers,fetch:X.fetch,options:$q(X),models:X.knownModels?Object.entries(X.knownModels).map(([Y,j])=>Qq(Y,j)):void 0}],logger:Z,telemetry:Q??$.telemetry??$.extensionContext?.telemetry}).createAgentModel({providerId:X.providerId,modelId:X.modelId},{maxTokens:X.maxOutputTokens})}import{createMediaBudgetState as Wq,IMAGE_OMITTED_PLACEHOLDER as JB,normalizeUserInput as XB,resolveMediaBudget as Jq,validateAndReserveImageMedia as Xq}from"@cline/shared";var Yq=8000,jq=50000,Vq=6000000,Hq=200000,Bq=12000,Gq=65536,S6=2000,YB=40000,Kq=8,D3={maxToolResultChars:"CLINE_MESSAGE_BUILDER_MAX_TOOL_RESULT_CHARS",maxTotalTextBytes:"CLINE_MESSAGE_BUILDER_MAX_TOTAL_TEXT_BYTES",minOutdatedRewriteBytes:"CLINE_MESSAGE_BUILDER_MIN_OUTDATED_REWRITE_BYTES"},Fq=new Set(["read","read_files"]),G2="[outdated - see the latest file content]",jB="Tool execution was interrupted before a result was produced.",VB=($)=>`
|
|
444
|
+
`).trim()}function N6($={}){let{timeoutMs:Z=30000,maxResponseBytes:Q=5000000,userAgent:W="Mozilla/5.0 (compatible; AgentBot/1.0)",headers:J={},followRedirects:X=!0}=$;return async(Y,j,V)=>{let H;try{H=new URL(Y)}catch{throw Error(`Invalid URL: ${Y}`)}if(!["http:","https:"].includes(H.protocol))throw Error(`Invalid protocol: ${H.protocol}. Only http and https are supported.`);let B=new AbortController,G=setTimeout(()=>B.abort(),Z),K;if(V.signal)K=()=>B.abort(),V.signal.addEventListener("abort",K);try{let F=await fetch(Y,{method:"GET",headers:{"User-Agent":W,Accept:"text/html,application/xhtml+xml,application/xml;q=0.9,text/plain;q=0.8,*/*;q=0.7","Accept-Language":"en-US,en;q=0.9",...J},redirect:X?"follow":"manual",signal:B.signal});if(clearTimeout(G),!X&&F.status>=300&&F.status<400)return`Redirect to: ${F.headers.get("location")}`;if(!F.ok)throw Error(`HTTP ${F.status}: ${F.statusText}`);let A=F.headers.get("content-type")||"",L=F.body?.getReader();if(!L)throw Error("Failed to read response body");let f=[],D=0;while(!0){let{done:E,value:C}=await L.read();if(E)break;if(D+=C.length,D>Q)throw L.cancel(),Error(`Response too large: exceeded ${Q} bytes`);f.push(C)}let U=new Uint8Array(D),T=0;for(let E of f)U.set(E,T),T+=E.length;let O=new TextDecoder("utf-8").decode(U),z;if(A.includes("text/html")||A.includes("application/xhtml"))z=vO(O);else if(A.includes("application/json"))try{let E=JSON.parse(O);z=JSON.stringify(E,null,2)}catch{z=O}else z=O;let _=[`URL: ${Y}`,`Content-Type: ${A}`,`Size: ${D} bytes`,"","--- Content ---",z.slice(0,50000)];if(z.length>50000)_.push(`
|
|
445
|
+
[Content truncated: showing first 50000 of ${z.length} characters]`);return _.push("","--- Analysis Request ---",`Prompt: ${j}`),_.join(`
|
|
446
|
+
`)}catch(F){if(clearTimeout(G),F instanceof Error){if(F.name==="AbortError")throw Error(`Request timed out after ${Z}ms`);throw F}throw Error(`Fetch failed: ${String(F)}`)}finally{if(V.signal&&K)V.signal.removeEventListener("abort",K)}}}function w6($={}){return Y2($)}function O8($={}){return{readFile:R6($.fileRead),search:E6($.search),bash:w6($.bash),webFetch:N6($.webFetch),applyPatch:q6($.applyPatch),editor:M6($.editor)}}var cO={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"},q8=[{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 tH($,Z){if(!Z||Z.length===0)return!0;let Q=$.toLowerCase();return Z.some((W)=>Q.includes(W.toLowerCase()))}function uO($,Z,Q,W){if($.mode&&$.mode!=="any"&&$.mode!==W)return!1;return tH(Z,$.providerIdIncludes)&&tH(Q,$.modelIdIncludes)}function M8($,Z,Q,W){if(!W||W.length===0)return{};let J=new Map;for(let Y of W){if(!uO(Y,$,Z,Q))continue;for(let j of Y.disableTools??[])J.set(j,!1);for(let j of Y.enableTools??[])J.set(j,!0)}let X={};for(let[Y,j]of J.entries())X[cO[Y]]=j;return X}var u0={act:{enableReadFiles:!0,enableSearch:!0,enableBash:!0,enableWebFetch:!0,enableApplyPatch:!1,enableEditor:!0,enableSkills:!0,enableAskQuestion:!0,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!0},plan:{enableReadFiles:!0,enableSearch:!0,enableBash:!0,enableWebFetch:!0,enableApplyPatch:!1,enableEditor:!1,enableSkills:!0,enableAskQuestion:!0,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!0},search:{enableReadFiles:!0,enableSearch:!0,enableBash:!1,enableWebFetch:!1,enableApplyPatch:!1,enableEditor:!1,enableSkills:!1,enableAskQuestion:!1,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!0},minimal:{enableReadFiles:!1,enableSearch:!1,enableBash:!0,enableWebFetch:!1,enableApplyPatch:!1,enableEditor:!1,enableSkills:!1,enableAskQuestion:!1,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!1},yolo:{enableReadFiles:!0,enableSearch:!1,enableBash:!0,enableWebFetch:!1,enableApplyPatch:!1,enableEditor:!0,enableSkills:!1,enableAskQuestion:!1,enableSubmitAndExit:!0,enableSpawnAgent:!1,enableAgentTeams:!1}};function l1($){if($.mode==="plan")return"plan";if($.mode==="yolo")return"yolo";return"act"}function TZ($){if($!=="yolo")return{};let Z={enabled:!0,autoApprove:!0},Q={"*":Z};for(let W of X$)Q[W]=Z;return Q}function OZ($,Z){let Q=u0[$],{enableSpawnAgent:W,enableAgentTeams:J,...X}=Q;return D$({...X,...Z})}import{createTool as WM,zodToJsonSchema as JM}from"@cline/shared";import{z as N3}from"zod";$1();import{createAgentRuntime as pq}from"@cline/agents";import{createContributionRegistry as rq,mergeModelOptions as LB}from"@cline/shared";import{createGateway as tO,createHandlerAsync as eO,hasRegisteredHandler as $q,MODEL_COLLECTIONS_BY_PROVIDER_ID as Zq,normalizeProviderId as Qq}from"@cline/llms";import{EMPTY_CONTENT_TEXT as dO}from"@cline/shared";function lO($){let Z=rO($.content),Q=[],W=$.id??aO(),J=0,X=[],Y=()=>{if(X.length===0)return;let j=J===0?W:`${W}_part_${J}`;J+=1,Q.push({id:j,role:$.role,content:X.map(iO),createdAt:$.ts??Date.now(),metadata:$.metadata,modelInfo:$.modelInfo,metrics:eH($.metrics)}),X=[]};if(Z.length===0)return Q.push({id:W,role:$.role,content:[{type:"text",text:dO}],createdAt:$.ts??Date.now(),metadata:$.metadata,modelInfo:$.modelInfo,metrics:eH($.metrics)}),Q;for(let j of Z){if(j.type!=="tool_result"){X.push(j);continue}Y(),Q.push({id:`${W}_tool_${j.tool_use_id}`,role:"tool",content:[ZB(j)],createdAt:$.ts??Date.now(),metadata:$.metadata})}return Y(),Q}function qZ($){return $.flatMap(lO)}function pO($){let Z=$.content.map(QB).filter((Q)=>Q!==void 0);return{id:$.id,role:$.role==="tool"?"user":$.role,content:Z,ts:$.createdAt,metadata:$.metadata,modelInfo:$.modelInfo,metrics:nO($.metrics)}}function R8($){return $.map(pO)}function MZ($){let Z=[];for(let Q of $){let W=Q.content.map(QB).filter((Y)=>Y!==void 0),J=Q.role==="tool"?"user":Q.role,X=Z[Z.length-1];if(J==="user"&&W.length>0&&W.every((Y)=>Y.type==="tool_result")&&X?.role==="user"&&Array.isArray(X.content)&&X.content.every((Y)=>Y.type==="tool_result")){X.content.push(...W);continue}Z.push({role:J,content:W})}return Z}function rO($){if(typeof $==="string")return $.trim().length>0?[{type:"text",text:$}]:[];return[...$]}function iO($){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 ZB($)}}function ZB($){return{type:"tool-result",toolCallId:$.tool_use_id,toolName:$.name,output:$.content,isError:$.is_error}}function QB($){switch($.type){case"text":return{type:"text",text:$.text};case"reasoning":{if($.redacted===!0)return{type:"redacted_thinking",data:$.metadata?.data??""};let Z=$.metadata;return{type:"thinking",thinking:$.text,signature:Z?.signature,details:Z?.details}}case"image":return typeof $.image==="string"?{type:"image",data:$.image,mediaType:$.mediaType??"image/png"}:void 0;case"file":return{type:"file",path:$.path,content:$.content};case"tool-call":{let Z=$.metadata;return{type:"tool_use",id:$.toolCallId,name:$.toolName,input:$.input??{},signature:Z?.thoughtSignature??Z?.signature}}case"tool-result":{let Z=$.output,Q=typeof Z==="string"?Z:Array.isArray(Z)?Z:JSON.stringify(Z);return{type:"tool_result",tool_use_id:$.toolCallId,name:$.toolName,content:Q,is_error:$.isError}}}}function eH($){if(!$)return;return{inputTokens:$.inputTokens??0,outputTokens:$.outputTokens??0,cacheReadTokens:$.cacheReadTokens??0,cacheWriteTokens:$.cacheWriteTokens??0,cost:$.cost}}function nO($){if(!$)return;return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,cost:$.cost}}var $B=0;function aO(){return $B+=1,`msg_${Date.now().toString(36)}_${$B.toString(36)}`}function sO($){switch($.type){case"text":return[{type:"text-delta",text:$.text}];case"reasoning":return[{type:"reasoning-delta",text:$.reasoning,metadata:$.signature?{thoughtSignature:$.signature,details:$.details}:{details:$.details}}];case"tool_calls":{let Z=$.tool_call.function,Q=Z.arguments;return[{type:"tool-call-delta",toolCallId:$.tool_call.call_id??Z.id,toolName:Z.name,inputText:typeof Q==="string"?Q:void 0,input:typeof Q==="string"?void 0:Q,...$.signature?{metadata:{thoughtSignature:$.signature}}:{}}]}case"usage":return[{type:"usage",usage:{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,reasoningTokenCount:$.thoughtsTokenCount,totalCost:$.totalCost}}];case"done":return[{type:"finish",reason:oO($),error:$.error}];default:return[]}}function oO($){if($.success===!1)return"error";if($.incompleteReason==="max_output_tokens"||$.incompleteReason==="max-tokens")return"max-tokens";return"stop"}function WB($){return{async*stream(Z){let Q=!1,W=!1;try{let J=typeof $==="function"?await $():$;J.setAbortSignal?.(Z.signal);let X=MZ(Z.messages),Y=Z.tools.map((j)=>({name:j.name,description:j.description,inputSchema:j.inputSchema}));for await(let j of J.createMessage(Z.systemPrompt??"",X,Y))for(let V of sO(j)){if(V.type==="finish")Q=!0;else if(V.type==="tool-call-delta")W=!0;yield V}if(!Q)yield{type:"finish",reason:W?"tool-calls":"stop"}}catch(J){if(!Q)yield{type:"finish",reason:Z.signal?.aborted?"aborted":"error",error:J instanceof Error?J.message:String(J)}}}}}function Wq($){let Z=Object.fromEntries(Object.entries($).filter(([,Q])=>Q!==void 0));return Object.keys(Z).length>0?Z:void 0}function Jq($){return $.providerId==="openai-compatible"||$.clientType==="openai-compatible"}function Xq($){let Z={region:$.region,apiLine:$.apiLine,openRouterProviderSorting:$.openRouterProviderSorting,modelCatalog:$.modelCatalog};if(Jq($))Object.assign(Z,{apiVersion:$.azure?.apiVersion,useIdentity:$.azure?.useIdentity});if($.providerId==="bedrock")Object.assign(Z,{authentication:$.aws?.authentication,profile:$.aws?.profile,accessKeyId:$.aws?.accessKey,secretAccessKey:$.aws?.secretKey,sessionToken:$.aws?.sessionToken,usePromptCache:$.aws?.usePromptCache,useCrossRegionInference:$.useCrossRegionInference,useGlobalInference:$.useGlobalInference,endpoint:$.aws?.endpoint,customModelBaseId:$.aws?.customModelBaseId});if($.providerId==="vertex"){let Q=$.gcp?.region??$.region;Object.assign(Z,{project:$.gcp?.projectId,projectId:$.gcp?.projectId,location:Q,region:Q})}if($.providerId==="sapaicore")Object.assign(Z,$.sap);return Wq(Z)}function U3($){let Z=$.providerConfig;if(Z?.knownModels)return Z.knownModels;if($.knownModels)return $.knownModels;return Zq[$.providerId]?.models??void 0}function Yq($){if(!$?.length)return;let Z=new Set;for(let Q of $)switch(Q){case"tools":case"reasoning":case"prompt-cache":case"images":Z.add(Q);break;case"structured_output":Z.add("structured-output");break;default:Z.add("text")}return Z.add("text"),[...Z]}function jq($,Z){return{id:$,name:Z.name??$,description:Z.description,contextWindow:Z.contextWindow,maxInputTokens:Z.maxInputTokens,maxOutputTokens:Z.maxTokens,capabilities:Yq(Z.capabilities),metadata:{family:Z.family,pricing:Z.pricing,status:Z.status,releaseDate:Z.releaseDate}}}function JB($,Z,Q){let W=$.providerConfig,J=W?.providerId===$.providerId?W:void 0,X={...J??{},providerId:$.providerId,modelId:$.modelId,apiKey:$.apiKey??J?.apiKey,baseUrl:$.baseUrl??J?.baseUrl,headers:$.headers??J?.headers,knownModels:U3($),maxOutputTokens:$.maxTokensPerTurn,reasoningEffort:$.reasoningEffort,thinkingBudgetTokens:$.thinkingBudgetTokens,thinking:$.thinking,logger:Z,extensionContext:$.extensionContext};if($q(Qq(X.providerId)))return WB(()=>eO(X));return tO({fetch:X.fetch,providerConfigs:[{providerId:X.providerId,apiKey:X.apiKey,baseUrl:X.baseUrl,headers:X.headers,fetch:X.fetch,options:Xq(X),models:X.knownModels?Object.entries(X.knownModels).map(([Y,j])=>jq(Y,j)):void 0}],logger:Z,telemetry:Q??$.telemetry??$.extensionContext?.telemetry}).createAgentModel({providerId:X.providerId,modelId:X.modelId},{maxTokens:X.maxOutputTokens})}import{createMediaBudgetState as Vq,IMAGE_OMITTED_PLACEHOLDER as XB,normalizeUserInput as YB,resolveMediaBudget as Hq,validateAndReserveImageMedia as Bq}from"@cline/shared";var Gq=8000,Kq=50000,Fq=6000000,Aq=200000,fq=12000,Uq=65536,P6=2000,jB=40000,Dq=8,D3={maxToolResultChars:"CLINE_MESSAGE_BUILDER_MAX_TOOL_RESULT_CHARS",maxTotalTextBytes:"CLINE_MESSAGE_BUILDER_MAX_TOTAL_TEXT_BYTES",minOutdatedRewriteBytes:"CLINE_MESSAGE_BUILDER_MIN_OUTDATED_REWRITE_BYTES"},Lq=new Set(["read","read_files"]),B2="[outdated - see the latest file content]",VB="Tool execution was interrupted before a result was produced.",HB=($)=>`
|
|
446
447
|
|
|
447
448
|
...[truncated ${$} chars]...
|
|
448
449
|
|
|
449
|
-
`,
|
|
450
|
+
`,S6=($)=>`
|
|
450
451
|
|
|
451
452
|
...[truncated ${$} chars to fit provider request budget]...
|
|
452
453
|
|
|
453
|
-
`,
|
|
454
|
+
`,_q=($)=>`
|
|
454
455
|
|
|
455
456
|
...[assistant text truncated: omitted ${$} chars]...
|
|
456
457
|
|
|
457
|
-
`,
|
|
458
|
+
`,BB=($)=>`
|
|
458
459
|
|
|
459
460
|
...[assistant text truncated: omitted ${$} chars to fit provider request budget]...
|
|
460
461
|
|
|
461
|
-
`,
|
|
462
|
+
`,zq=($)=>`
|
|
462
463
|
|
|
463
464
|
...[assistant text truncated: omitted ${$} chars due to repeated tool-call markup]...
|
|
464
465
|
|
|
465
|
-
`;function KB($=process.env){return{maxToolResultChars:GB($[D3.maxToolResultChars]),maxTotalTextBytes:GB($[D3.maxTotalTextBytes]),minOutdatedRewriteBytes:Dq($[D3.minOutdatedRewriteBytes])}}class L3{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=P6($.maxToolResultChars,Yq),this.maxFileContentChars=P6($.maxFileContentChars,jq),this.maxTotalTextBytes=P6($.maxTotalTextBytes,Vq),this.mediaBudget=$.mediaBudget??{},this.maxAssistantTextChars=P6($.maxAssistantTextChars,Hq),this.maxAssistantToolMarkupChars=P6($.maxAssistantToolMarkupChars,Bq),this.minOutdatedRewriteBytes=Tq($.minOutdatedRewriteBytes,Gq)}resetConversationState(){this.resetIndexes(),this.committedOutdatedRewrites.clear()}buildForApi($){this.reindex($),this.commitOutdatedRewrites($);let Q=this.addMissingToolResults($).map((J)=>{if(!Array.isArray(J.content)){if(J.role==="user"&&typeof J.content==="string"){let j=XB(J.content);if(j!==J.content)return{...J,content:j}}if(J.role==="assistant"&&typeof J.content==="string"){let j=this.truncateAssistantText(J.content);if(j!==J.content)return{...J,content:j}}return J}let X=!1,Y=J.content.map((j)=>{let V=this.transformBlock(j,J.role);if(V!==j)X=!0;return V});return X?{...J,content:Y}:J}),W=this.applyMediaBudget(Q);return this.truncateToTotalTextBudget(W)}transformBlock($,Z){if(Z==="user"&&$.type==="text"&&typeof $.text==="string"){let J=XB($.text);if(J!==$.text)return{...$,text:J};return $}if(Z==="assistant"&&$.type==="text"&&typeof $.text==="string"){let J=this.truncateAssistantText($.text);return J===$.text?$:{...$,text:J}}if($.type==="file"){let J=N8($.content,this.maxFileContentChars,VB);return J===$.content?$:{...$,content:J}}if($.type!=="tool_result")return $;let Q=this.resolveToolName($),W=$.content;if(this.isReadTool(Q)&&$.is_error!==!0){let J=this.committedOutdatedRewrites.get($.tool_use_id);if(J&&J.size>0){let Y=this.getReadLocators($).filter((j)=>J.has(this.toReadLocatorKey(j))&&this.isOutdatedReadLocator(j,$.tool_use_id));if(Y.length>0)W=this.replaceOutdatedReadContent(W,Y)}}return W=this.truncateToolResultContent(W),W===$.content?$:{...$,content:W}}reindex($){let Z=this.indexedMessageCount===0||$.length>=this.indexedMessageCount&&$[this.indexedMessageCount-1]===this.indexedTailRef;if($.length<this.indexedMessageCount||!Z)this.resetIndexes();for(let Q=this.indexedMessageCount;Q<$.length;Q++){let W=$[Q];if(!Array.isArray(W.content))continue;for(let J=0;J<W.content.length;J++){let X=W.content[J];if(X.type==="file")this.latestFullContentOwnerByPathCache.set(X.path,`file:${Q}:${J}`);else if(X.type==="tool_use"){let Y=X.name.toLowerCase();if(this.toolNameByIdCache.set(X.id,Y),this.isReadTool(Y)){let j=this.extractLocatorsFromReadToolInput(X.input);if(j.length>0)this.readLocatorsByToolUseIdCache.set(X.id,j)}}else if(X.type==="tool_result"){let Y=this.resolveToolName(X);if(!this.isReadTool(Y)||X.is_error===!0)continue;let j=this.getReadLocators(X);for(let V of j)if(this.latestReadToolUseByLocatorCache.set(this.toReadLocatorKey(V),X.tool_use_id),this.isFullFileRead(V))this.latestFullContentOwnerByPathCache.set(V.path,X.tool_use_id)}}}this.indexedMessageCount=$.length,this.indexedTailRef=$.length>0?$[$.length-1]:void 0}commitOutdatedRewrites($){let Z=new Map,Q=new Set,W=0;for(let J of $){if(!Array.isArray(J.content))continue;for(let X of J.content){if(X.type!=="tool_result"||X.is_error===!0)continue;let Y=this.resolveToolName(X);if(!this.isReadTool(Y))continue;Q.add(X.tool_use_id);let j=this.committedOutdatedRewrites.get(X.tool_use_id),V=new Set,H=new Set;for(let G of this.getReadLocators(X)){let K=this.toReadLocatorKey(G);if(!this.isOutdatedReadLocator(G,X.tool_use_id))continue;if(H.add(K),!j?.has(K))V.add(K)}if(j){for(let G of j)if(!H.has(G))j.delete(G);if(j.size===0)this.committedOutdatedRewrites.delete(X.tool_use_id)}if(V.size===0)continue;let B=Z.get(X.tool_use_id);if(!B)B=new Set,Z.set(X.tool_use_id,B);for(let G of V)B.add(G);W+=this.estimateOutdatedReclaimBytes(X.content,V)}}for(let J of this.committedOutdatedRewrites.keys())if(!Q.has(J))this.committedOutdatedRewrites.delete(J);if(Z.size===0||W<this.minOutdatedRewriteBytes)return;for(let[J,X]of Z){let Y=this.committedOutdatedRewrites.get(J);if(!Y)Y=new Set,this.committedOutdatedRewrites.set(J,Y);for(let j of X)Y.add(j)}}estimateOutdatedReclaimBytes($,Z){let Q=this.extractReadLocatorsFromToolResultContent($),W=Q.length>0&&Q.every((V)=>Z.has(this.toReadLocatorKey(V))),J=(V)=>{let H;try{H=JSON.parse(V)}catch{return W||Q.length===0?W0(this.truncateMiddle(V)):0}let B=Array.isArray(H)?H:[H],G=0;for(let K of B){let F=this.extractLocatorFromResultEntry(K);if(F&&Z.has(this.toReadLocatorKey(F)))G+=this.providerBoundEntryBytes(K)}return G};if(typeof $==="string")return J($);let X=new Set(Z),Y=0;for(let V of $)if(V.type==="text")Y+=this.countOutdatedImageEntries(V.text,X);let j=0;for(let V of $)if(V.type==="text")j+=J(V.text);else if(V.type==="image"){if(Y>0)Y-=1,j+=W0(V.data)}else if(_$(V)){let H=this.extractLocatorFromResultEntry(V);if(H&&Z.has(this.toReadLocatorKey(H)))j+=this.providerBoundEntryBytes(V)}else if(V.type==="file"){if(Z.has(this.toReadLocatorKey({path:V.path,startLine:null,endLine:null})))j+=W0(this.truncateMiddle(V.content))}return j}providerBoundEntryBytes($){let Z=this.truncateNestedStrings($);return W0(JSON.stringify(Z))}addMissingToolResults($){let Z=this.collectToolResultIds($),Q=[],W=new Map,J=!1,X=()=>{if(W.size===0)return;Y(this.createMissingToolResultMessage(W)),W.clear(),J=!0},Y=(j)=>{let V=Q.at(-1);if(this.shouldMergeUserAfterToolResults(V,j)){Q[Q.length-1]={...V,content:[...V.content,...this.contentBlocksForUserMerge(j.content)]},J=!0;return}Q.push(j)};for(let j of $){if(this.isToolResultOnlyMessage(j)){if(Y(this.appendMissingToolResults(j,W)),W.size>0)W.clear(),J=!0;continue}if(Array.isArray(j.content)){let V=j.content.filter((B)=>B.type==="tool_result"),H=j.content.filter((B)=>B.type!=="tool_result");if(V.length>0){let B=this.appendMissingToolResults({...j,role:"user",content:V},W);if(Y(B),W.size>0)W.clear();J=!0}if(H.length>0||V.length===0){if(V.length===0)X();let B=V.length>0?{...j,content:H}:j;if(Y(B),B.role==="assistant")this.trackMissingToolCalls(B,Z,W)}continue}X(),Y(j)}return X(),J?Q:$}appendMissingToolResults($,Z){if(Z.size===0||!Array.isArray($.content))return $;return{...$,role:"user",content:[...$.content,...this.createMissingToolResultBlocks(Z)]}}shouldMergeUserAfterToolResults($,Z){return $?.role==="user"&&Z.role==="user"&&this.isToolResultOnlyMessage($)&&this.contentBlocksForUserMerge(Z.content).length>0}contentBlocksForUserMerge($){return typeof $==="string"?$.length>0?[{type:"text",text:$}]:[]:$}collectToolResultIds($){let Z=new Set;for(let Q of $){if(!Array.isArray(Q.content))continue;for(let W of Q.content)if(W.type==="tool_result")Z.add(W.tool_use_id)}return Z}isToolResultOnlyMessage($){return $.role==="user"&&Array.isArray($.content)&&$.content.length>0&&$.content.every((Z)=>Z.type==="tool_result")}trackMissingToolCalls($,Z,Q){if(!Array.isArray($.content))return;for(let W of $.content){if(W.type!=="tool_use"||Z.has(W.id))continue;Q.set(W.id,W.name)}}createMissingToolResultMessage($){return{role:"user",content:this.createMissingToolResultBlocks($)}}createMissingToolResultBlocks($){return Array.from($,([Z,Q])=>({type:"tool_result",tool_use_id:Z,name:Q,content:[{type:"text",text:this.formatMissingToolResultText(Q)}],is_error:!0}))}formatMissingToolResultText($){return $?`${jB} Tool: ${$}.`:jB}resetIndexes(){this.indexedMessageCount=0,this.indexedTailRef=void 0,this.toolNameByIdCache.clear(),this.readLocatorsByToolUseIdCache.clear(),this.latestReadToolUseByLocatorCache.clear(),this.latestFullContentOwnerByPathCache.clear(),this.readResultLocatorCache=new WeakMap}getReadLocators($){let Z=$,Q=this.readResultLocatorCache.get(Z);if(Q===void 0)Q=this.extractReadLocatorsFromToolResultContent($.content),this.readResultLocatorCache.set(Z,Q);if(Q.length>0)return Q;return this.readLocatorsByToolUseIdCache.get($.tool_use_id)??[]}extractLocatorsFromReadToolInput($){if(!$||typeof $!=="object")return[];let Z=$,Q=[],W=this.extractLocatorFromReadRequest(Z);if(W)Q.push(W);if(Array.isArray(Z.files))for(let J of Z.files){let X=this.extractLocatorFromReadRequest(J);if(X)Q.push(X)}if(Array.isArray(Z.file_paths)){for(let J of Z.file_paths)if(typeof J==="string"&&J.length>0)Q.push({path:J,startLine:null,endLine:null})}return this.dedupeReadLocators(Q)}extractReadLocatorsFromToolResultContent($){if(typeof $==="string")return this.tryParseReadLocators($);let Z=[];for(let Q of $){if(Q.type==="text"){Z.push(...this.tryParseReadLocators(Q.text));continue}if(_$(Q)){let W=this.extractLocatorFromResultEntry(Q);if(W)Z.push(W)}}return this.dedupeReadLocators(Z)}tryParseReadLocators($){try{return this.extractLocatorsFromParsedReadResult(JSON.parse($))}catch{return[]}}extractLocatorsFromParsedReadResult($){if(Array.isArray($)){let Q=[];for(let W of $){let J=this.extractLocatorFromResultEntry(W);if(J)Q.push(J)}return this.dedupeReadLocators(Q)}let Z=this.extractLocatorFromResultEntry($);return Z?[Z]:[]}extractLocatorFromReadRequest($){if(!$||typeof $!=="object")return;let Z=$,Q=this.extractPath(Z);if(!Q)return;return{path:Q,startLine:this.extractLineNumber(Z.start_line),endLine:this.extractLineNumber(Z.end_line)}}extractLocatorFromResultEntry($){if(!$||typeof $!=="object")return;let Z=$,Q=this.extractPath(Z);if(Q)return{path:Q,startLine:this.extractLineNumber(Z.start_line),endLine:this.extractLineNumber(Z.end_line)};if(typeof Z.query==="string"&&Z.query.length>0)return this.parseReadQuery(Z.query);return}extractPath($){let Z=[$.path,$.file_path,$.filePath];for(let Q of Z)if(typeof Q==="string"&&Q.length>0)return Q;return}extractLineNumber($){return typeof $==="number"&&Number.isInteger($)?$:null}parseReadQuery($){let Z=/^(.*):(\d+)-(EOF|\d+)$/.exec($);if(!Z)return{path:$,startLine:null,endLine:null};return{path:Z[1],startLine:Number(Z[2]),endLine:Z[3]==="EOF"?null:Number(Z[3])}}dedupeReadLocators($){let Z=new Map;for(let Q of $)Z.set(this.toReadLocatorKey(Q),Q);return Array.from(Z.values())}toReadLocatorKey($){if(this.isFullFileRead($))return $.path;return`${$.path}:${$.startLine??1}-${$.endLine??"EOF"}`}isFullFileRead($){return $.startLine==null&&$.endLine==null}isOutdatedReadLocator($,Z){let Q=this.latestFullContentOwnerByPathCache.get($.path);if(Q&&Q!==Z)return!0;return this.latestReadToolUseByLocatorCache.get(this.toReadLocatorKey($))!==Z}replaceOutdatedReadContent($,Z){let Q=new Set(Z.map((X)=>this.toReadLocatorKey(X))),W=new Set(Z.map((X)=>X.path));if(typeof $==="string")return this.replaceOutdatedInString($,Q)??G2;let J=0;for(let X of $)if(X.type==="text")J+=this.countOutdatedImageEntries(X.text,Q);return $.map((X)=>{if(X.type==="file"){if(!W.has(X.path))return X;return{...X,content:G2}}if(X.type==="image"){if(J===0)return X;return J-=1,{type:"text",text:G2}}if(_$(X))return this.replaceOutdatedReadEntry(X,Q);if(X.type!=="text")return X;let Y=this.replaceOutdatedInString(X.text,Q);if(Y===null)return{...X,text:G2};return Y===X.text?X:{...X,text:Y}})}countOutdatedImageEntries($,Z){let Q;try{Q=JSON.parse($)}catch{return 0}let W=Array.isArray(Q)?Q:[Q],J=0;for(let X of W){if(!X||typeof X!=="object")continue;let Y=X,j=this.extractLocatorFromResultEntry(Y);if(!j)continue;if(!Z.has(this.toReadLocatorKey(j)))continue;if(Y.result==="Successfully read image"||Y.content==="Successfully read image")J+=1}return J}replaceOutdatedInString($,Z){let Q;try{Q=JSON.parse($)}catch{return null}let W=Array.isArray(Q)?Q.map((J)=>this.replaceOutdatedReadEntry(J,Z)):this.replaceOutdatedReadEntry(Q,Z);return JSON.stringify(W)}replaceOutdatedReadEntry($,Z){if(!$||typeof $!=="object")return $;let Q=this.extractLocatorFromResultEntry($);if(!Q||!Z.has(this.toReadLocatorKey(Q)))return $;let W={...$};if(typeof W.result==="string")W.result=G2;else if(typeof W.content==="string")W.content=G2;else W.result=G2;return W}isReadTool($){return!!$&&Fq.has($)}resolveToolName($){let Z=this.toolNameByIdCache.get($.tool_use_id);if(Z!==void 0)return Z;return typeof $.name==="string"&&$.name.length>0?$.name.toLowerCase():void 0}truncateToolResultContent($){if(typeof $==="string")return this.truncateMiddle($);return $.map((Z)=>{if(Z.type==="file"){let Q=this.truncateMiddle(Z.content);return Q===Z.content?Z:{...Z,content:Q}}if(Z.type==="text"){let Q=this.truncateMiddle(Z.text);return Q===Z.text?Z:{...Z,text:Q}}if(_$(Z))return this.truncateNestedStrings(Z);return Z})}truncateNestedStrings($){if(typeof $==="string")return this.truncateMiddle($);if(Array.isArray($)){let Z=!1,Q=$.map((W)=>{let J=this.truncateNestedStrings(W);if(J!==W)Z=!0;return J});return Z?Q:$}if($!==null&&typeof $==="object"){if(_3($))return $;let Z=!1,Q={};for(let[W,J]of Object.entries($)){let X=this.truncateNestedStrings(J);if(X!==J)Z=!0;Q[W]=X}return Z?Q:$}return $}truncateMiddle($){return N8($,this.maxToolResultChars,VB)}truncateAssistantText($){if(this.hasRepeatedToolCallMarkup($))return N8($,this.maxAssistantToolMarkupChars,fq);return N8($,this.maxAssistantTextChars,Aq)}hasRepeatedToolCallMarkup($){if($.length<=this.maxAssistantToolMarkupChars)return!1;let Z=0;for(let Q of $.matchAll(Uq))if(Z+=1,Z>=Kq)return!0;return!1}truncateToTotalTextBudget($){let Z=this.countMessageTextBytes($);if(Z<=this.maxTotalTextBytes)return $;let Q=$.map((J)=>{if(!Array.isArray(J.content))return{...J};return{...J,content:J.content.map((X)=>_q(X))}}),W=this.collectTruncationCandidates(Q);for(let J of W){if(Z<=this.maxTotalTextBytes)break;let X=J.byteLength;if(X<=J.minBytes)continue;let Y=Z-this.maxTotalTextBytes,j=Math.max(J.minBytes,X-Y),V=Lq(J.get(),j,J.makeMarker);J.set(V),Z-=X-W0(V)}return Q}countMessageTextBytes($){let Z=0;for(let Q of $){if(typeof Q.content==="string"){Z+=W0(Q.content);continue}for(let W of Q.content)if(W.type==="text")Z+=W0(W.text);else if(W.type==="thinking")Z+=W0(W.thinking);else if(W.type==="file")Z+=W0(W.content);else if(W.type==="tool_use")Z+=MZ(W.input);else if(W.type==="tool_result"){if(typeof W.content==="string")Z+=W0(W.content);else for(let J of W.content)if(J.type==="text")Z+=W0(J.text);else if(J.type==="file")Z+=W0(J.content);else if(_$(J))Z+=MZ(J)}}return Z}collectTruncationCandidates($){let Z=[],Q=[];for(let W of $){if(W.role==="assistant"&&typeof W.content==="string"){Z.push({byteLength:W0(W.content),minBytes:YB,makeMarker:HB,get:()=>W.content,set:(J)=>{W.content=J}});continue}if(!Array.isArray(W.content))continue;for(let J of W.content){if(J.type==="tool_use"){RZ(J.input,Q);continue}if(W.role==="assistant"&&J.type==="text"){Z.push({byteLength:W0(J.text),minBytes:YB,makeMarker:HB,get:()=>J.text,set:(X)=>{J.text=X}});continue}if(J.type!=="tool_result")continue;if(typeof J.content==="string"){Z.push({byteLength:W0(J.content),minBytes:S6,makeMarker:b6,get:()=>J.content,set:(X)=>{J.content=X}});continue}for(let X of J.content)if(X.type==="text")Z.push({byteLength:W0(X.text),minBytes:S6,makeMarker:b6,get:()=>X.text,set:(Y)=>{X.text=Y}});else if(X.type==="file")Z.push({byteLength:W0(X.content),minBytes:S6,makeMarker:b6,get:()=>X.content,set:(Y)=>{X.content=Y}});else if(_$(X))RZ(X,Z)}}return Z.sort((W,J)=>J.byteLength-W.byteLength),Q.sort((W,J)=>J.byteLength-W.byteLength),[...Z,...Q]}applyMediaBudget($){let Z=this.resolveMediaBudget();if(Z.maxImageEncodedBytes===Number.POSITIVE_INFINITY&&Z.maxImageDecodedBytes===Number.POSITIVE_INFINITY&&Z.maxTotalMediaBytes===Number.POSITIVE_INFINITY)return $;let Q=Wq(),W=!1,J=$.map((X)=>{if(!Array.isArray(X.content))return X;let Y=!1,j=X.content.map((V)=>{let H=this.applyMediaBudgetToBlock(V,Z,Q);if(H!==V)Y=!0;return H});if(!Y)return X;return W=!0,{...X,content:j}});return W?J:$}resolveMediaBudget(){return Jq(this.mediaBudget)}applyMediaBudgetToBlock($,Z,Q){if(T3($))return this.limitImageContent($,Z,Q);if($.type!=="tool_result"||typeof $.content==="string")return $;let W=!1,J=$.content.map((X)=>{let Y=this.applyMediaBudgetToToolResultEntry(X,Z,Q);if(Y!==X)W=!0;return Y});return W?{...$,content:J}:$}applyMediaBudgetToToolResultEntry($,Z,Q){if(T3($))return this.limitImageContent($,Z,Q);if(_$($))return this.limitNestedMedia($,Z,Q);return $}limitNestedMedia($,Z,Q){if(T3($)){let W=this.limitImageContent($,Z,Q);return W.type==="text"?W.text:W}if(Array.isArray($)){let W=!1,J=$.map((X)=>{let Y=this.limitNestedMedia(X,Z,Q);if(Y!==X)W=!0;return Y});return W?J:$}if($!==null&&typeof $==="object"){let W=!1,J={};for(let[X,Y]of Object.entries($)){let j=this.limitNestedMedia(Y,Z,Q);if(j!==Y)W=!0;J[X]=j}return W?J:$}return $}limitImageContent($,Z,Q){if(!FB($))return{type:"text",text:JB};let W=Xq($.mediaType,$.data,{maxImageEncodedBytes:Z.maxImageEncodedBytes,maxImageDecodedBytes:Z.maxImageDecodedBytes,maxTotalMediaBytes:Z.maxTotalMediaBytes},Q);if(!W.ok)return{type:"text",text:JB};return{...$,data:W.base64,mediaType:W.mediaType}}}var BB=String.raw`[\|\uFF5C]`,Uq=new RegExp(String.raw`<\s*(?:${BB}\s*)?DSML\s*(?:${BB}\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 GB($){if($===void 0)return;let Z=Number.parseInt($,10);return Number.isFinite(Z)&&Z>0?Z:void 0}function Dq($){if($===void 0)return;let Z=$.trim().toLowerCase();if(Z==="infinity"||Z==="disable")return Number.POSITIVE_INFINITY;let Q=Number.parseInt($,10);return Number.isFinite(Q)&&Q>=0?Q:void 0}function P6($,Z){return typeof $==="number"&&Number.isFinite($)&&$>0?Math.floor($):Z}function Tq($,Z){if(typeof $!=="number"||Number.isNaN($)||$<0)return Z;return Number.isFinite($)?Math.floor($):$}function N8($,Z,Q){if($.length<=Z)return $;let W=Q($.length-Z),J=Math.max(0,Math.floor((Z-W.length)/2)),X=Math.max(0,$.length-J*2),Y=Q(X),j=Math.max(0,Math.floor((Z-Y.length)/2)),V=$.slice(0,j),H=j>0?$.slice(-j):"";return`${V}${Y}${H}`}function Lq($,Z,Q){if(W0($)<=Z)return $;let W=0,J=$.length,X=N8($,0,Q);while(W<=J){let Y=W+J>>>1,j=N8($,Y,Q);if(W0(j)<=Z)X=j,W=Y+1;else J=Y-1}return X}function _q($){if($.type==="tool_use")return{...$,input:EZ($.input)};if($.type!=="tool_result"||typeof $.content==="string")return{...$};return{...$,content:$.content.map((Z)=>_$(Z)?EZ(Z):{...Z})}}function _$($){if($===null||typeof $!=="object")return!1;let Z=$.type;return Z!=="text"&&Z!=="image"&&Z!=="file"}function T3($){return $!==null&&typeof $==="object"&&$.type==="image"}function FB($){return $!==null&&typeof $==="object"&&$.type==="image"&&typeof $.data==="string"&&typeof $.mediaType==="string"}function _3($){return FB($)}function MZ($){if(typeof $==="string")return W0($);if(Array.isArray($)){let Z=0;for(let Q of $)Z+=MZ(Q);return Z}if($!==null&&typeof $==="object"){if(_3($))return 0;let Z=0;for(let Q of Object.values($))Z+=MZ(Q);return Z}return 0}function RZ($,Z){if(Array.isArray($)){$.forEach((Q,W)=>{if(typeof Q==="string")Z.push({byteLength:W0(Q),minBytes:S6,makeMarker:b6,get:()=>$[W],set:(J)=>{$[W]=J}});else RZ(Q,Z)});return}if($!==null&&typeof $==="object"){if(_3($))return;let Q=$;for(let W of Object.keys(Q)){let J=Q[W];if(typeof J==="string")Z.push({byteLength:W0(J),minBytes:S6,makeMarker:b6,get:()=>Q[W],set:(X)=>{Q[W]=X}});else RZ(J,Z)}}}function EZ($){if(Array.isArray($))return $.map(EZ);if($!==null&&typeof $==="object"){let Z={};for(let[Q,W]of Object.entries($))Z[Q]=EZ(W);return Z}return $}function z3(){return`conv_${Date.now()}_${Math.random().toString(36).slice(2,9)}`}class O3{messages=[];conversationId=z3();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=z3(),this.sessionStarted=!1}clearHistory(){this.messages=[],this.conversationId=z3(),this.sessionStarted=!1}restore($){this.messages=[...$],this.sessionStarted=!1}isSessionStarted(){return this.sessionStarted}markSessionStarted(){this.sessionStarted=!0}}function AB($){let{agentConfig:Z}=$,Q=zq(Z),W=Oq(Z),J=$.hooks,X=qq(Z.maxParallelToolCalls);return{sessionId:$.sessionId??Z.sessionId,agentId:$.agentId,conversationId:$.conversationId,parentAgentId:$.parentAgentId,agentRole:$.agentRole,systemPrompt:$.systemPrompt??Z.systemPrompt,messageModelInfo:W,model:$.model,modelOptions:Q,tools:$.tools,hooks:J,prepareTurn:$.prepareTurn,consumePendingUserMessage:Z.consumePendingUserMessage,plugins:$.plugins,logger:$.logger??Z.logger,telemetry:$.telemetry??Z.telemetry,initialMessages:$.initialMessages,completionPolicy:Z.completionPolicy,maxIterations:Z.maxIterations,toolExecution:X,toolPolicies:Z.toolPolicies,toolContextMetadata:$.toolContextMetadata,requestToolApproval:Z.requestToolApproval}}function zq($){let Z={};if($.thinking!==void 0)Z.thinking=$.thinking;if($.reasoningEffort!==void 0)Z.reasoningEffort=$.reasoningEffort;if($.thinkingBudgetTokens!==void 0)Z.thinkingBudgetTokens=$.thinkingBudgetTokens;if($.maxTokensPerTurn!==void 0)Z.maxTokensPerTurn=$.maxTokensPerTurn;if($.apiTimeoutMs!==void 0)Z.apiTimeoutMs=$.apiTimeoutMs;return Object.keys(Z).length>0?Z:void 0}function Oq($){let Z=$.providerConfig?.family;return{id:$.modelId,provider:$.providerId,family:Z}}function qq($){if($===void 0)return;return $>=2?"parallel":"sequential"}function Mq(){return{lastToolName:"",lastToolSignature:"",consecutiveIdenticalCount:0}}function Rq($){$.lastToolName="",$.lastToolSignature="",$.consecutiveIdenticalCount=0}function q3($){if($==null||typeof $!=="object")return $;if(Array.isArray($))return $.map(q3);let Z={};for(let Q of Object.keys($).sort())Z[Q]=q3($[Q]);return Z}function Eq($){if($==null)return"null";if(typeof $==="string")return $;if(typeof $!=="object")return String($);try{return JSON.stringify(q3($))}catch{return String($)}}function Nq($,Z,Q,W){if(Z===$.lastToolName&&Q===$.lastToolSignature)$.consecutiveIdenticalCount++;else $.consecutiveIdenticalCount=1;return $.lastToolName=Z,$.lastToolSignature=Q,{softWarning:$.consecutiveIdenticalCount===W.softThreshold,hardEscalation:$.consecutiveIdenticalCount>=W.hardThreshold}}var fB={softThreshold:3,hardThreshold:5};class M3{config;state=Mq();constructor($){this.config={softThreshold:$?.softThreshold??fB.softThreshold,hardThreshold:$?.hardThreshold??fB.hardThreshold}}inspect($){let Z=Eq($.input),Q=Nq(this.state,$.name,Z,this.config);if(Q.hardEscalation)return{kind:"hard",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${$.name}\`; stopping to avoid a loop.`};if(Q.softWarning)return{kind:"soft",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${$.name}\`; consider trying a different approach.`};return{kind:"ok"}}reset(){Rq(this.state)}}class R3{consecutiveMistakes=0;options;constructor($){this.options=$}async record($){let Z=this.options.maxConsecutiveMistakes,Q=$.forceAtLimit&&Z?Z:this.consecutiveMistakes+1;this.consecutiveMistakes=Q;let W=$.details?.trim()||`consecutive mistake (${$.reason})`;if(this.options.emit({type:"error",error:Error(W),recoverable:!0,iteration:$.iteration}),this.options.log("warn","Recorded consecutive mistake",{agentId:this.options.agentId,conversationId:this.options.getConversationId(),runId:this.options.getActiveRunId(),iteration:$.iteration,reason:$.reason,details:$.details,consecutiveMistakes:Q,maxConsecutiveMistakes:this.options.maxConsecutiveMistakes}),!Z||Q<Z)return{action:"continue"};let J=await wq({iteration:$.iteration,consecutiveMistakes:Q,maxConsecutiveMistakes:Z,reason:$.reason,details:$.details},this.options.onLimitReached);if(J.action==="continue"){let X=J.guidance?.trim();if(X)this.options.appendRecoveryNotice(X,$.reason);return this.consecutiveMistakes=0,{action:"continue",guidance:X}}return{action:"stop",reason:J.reason?.trim()||void 0,message:Cq({iteration:$.iteration,consecutiveMistakes:Q,maxConsecutiveMistakes:Z,reason:$.reason,details:$.details,stopReason:J.reason})}}reset(){this.consecutiveMistakes=0}get value(){return this.consecutiveMistakes}}function Cq($){let Z=[`Stopped after ${$.consecutiveMistakes}/${$.maxConsecutiveMistakes} consecutive mistakes (${$.reason}) at iteration ${$.iteration}.`],Q=$.details?.trim();if(Q)Z.push(`Error: ${Q}`);let W=$.stopReason?.trim();if(W)Z.push(`Decision: ${W}`);return Z.push("Session state was preserved. Send a new prompt to resume from the latest state."),Z.join(" ")}async function wq($,Z){if(!Z)return{action:"stop",reason:`maximum consecutive mistakes reached (${$.maxConsecutiveMistakes})`};try{return await Z($)}catch(Q){return{action:"stop",reason:Q instanceof Error?Q.message:`maximum consecutive mistakes reached (${$.maxConsecutiveMistakes})`}}}function Pq($){let Z=$.content.filter((Q)=>Q.type==="text");if(Z.length===0)return;return Z.map((Q)=>Q.text).join("")}function Sq($){let Z=$.content.filter((Q)=>Q.type==="reasoning");if(Z.length===0)return;return{reasoning:Z.map((Q)=>Q.text).join(""),redacted:Z.some((Q)=>Q.redacted===!0)}}function bq($){return $.content.find((Z)=>Z.type==="tool-result")}function yq($){switch($){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}function hq($){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 E3{lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0};toolStartedAt=new Map;translate($){switch($.type){case"run-started":return[];case"message-added":return[];case"turn-started":return[{type:"iteration_start",iteration:$.iteration}];case"turn-finished":return[{type:"iteration_end",iteration:$.iteration,hadToolCalls:$.toolCallCount>0,toolCallCount:$.toolCallCount}];case"assistant-text-delta":return[{type:"content_start",contentType:"text",text:$.text,accumulated:$.accumulatedText}];case"assistant-reasoning-delta":return[{type:"content_start",contentType:"reasoning",reasoning:$.text,redacted:$.redacted===!0}];case"assistant-message":return this.translateAssistantMessage($.message);case"tool-started":return this.translateToolStarted($);case"tool-updated":return[{type:"content_update",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,update:$.update}];case"tool-finished":return this.translateToolFinished($);case"usage-updated":return this.translateUsage($.usage);case"status-notice":return[{type:"notice",noticeType:"status",displayRole:"status",message:$.message,reason:$.metadata?.reason==="auto_compaction"?"auto_compaction":void 0,metadata:$.metadata}];case"run-finished":return this.translateRunFinished($.result);case"run-failed":return[{type:"error",error:$.error,recoverable:!1,iteration:$.snapshot.iteration}];default:return $}}reset(){this.lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0},this.toolStartedAt.clear()}translateAssistantMessage($){let Z=[],Q=Pq($);if(Q!==void 0)Z.push({type:"content_end",contentType:"text",text:Q});let W=Sq($);if(W!==void 0)Z.push({type:"content_end",contentType:"reasoning",reasoning:W.reasoning});return Z}translateToolStarted($){return this.toolStartedAt.set($.toolCall.toolCallId,Date.now()),[{type:"content_start",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,input:$.toolCall.input}]}translateToolFinished($){let Z=this.toolStartedAt.get($.toolCall.toolCallId),Q=Z===void 0?void 0:Date.now()-Z;this.toolStartedAt.delete($.toolCall.toolCallId);let W=bq($.message),J=W?.output,X=hq(W);return[{type:"content_end",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,output:J,error:X,durationMs:Q}]}translateUsage($){let Z=$.inputTokens-this.lastUsage.inputTokens,Q=$.outputTokens-this.lastUsage.outputTokens,W=$.cacheReadTokens-this.lastUsage.cacheReadTokens,J=$.cacheWriteTokens-this.lastUsage.cacheWriteTokens,X=this.lastUsage.totalCost??0,j=($.totalCost??0)-X;return this.lastUsage={inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,totalCost:$.totalCost},[{type:"usage",inputTokens:Math.max(0,Z),outputTokens:Math.max(0,Q),cacheReadTokens:W===0?void 0:Math.max(0,W),cacheWriteTokens:J===0?void 0:Math.max(0,J),cost:j===0?void 0:j,totalInputTokens:$.inputTokens,totalOutputTokens:$.outputTokens,totalCacheReadTokens:$.cacheReadTokens===0?void 0:$.cacheReadTokens,totalCacheWriteTokens:$.cacheWriteTokens===0?void 0:$.cacheWriteTokens,totalCost:$.totalCost}]}translateRunFinished($){let Z={inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens===0?void 0:$.usage.cacheReadTokens,cacheWriteTokens:$.usage.cacheWriteTokens===0?void 0:$.usage.cacheWriteTokens,totalCost:$.usage.totalCost};return[{type:"done",reason:yq($.status),text:$.outputText,iterations:$.iterations,usage:Z}]}}function uq($){if(typeof $==="string")return $;if($ instanceof Error)return $.message;try{return JSON.stringify($)}catch{return String($)}}async function dq($){let Q=(typeof $.content==="function"?await $.content():$.content).trim();return Q.length>0?Q:void 0}function lq($,Z){let Q=$.trim(),W=Z.map((J)=>J.trim()).filter(Boolean).join(`
|
|
466
|
+
`;function FB($=process.env){return{maxToolResultChars:KB($[D3.maxToolResultChars]),maxTotalTextBytes:KB($[D3.maxTotalTextBytes]),minOutdatedRewriteBytes:Oq($[D3.minOutdatedRewriteBytes])}}class _3{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=C6($.maxToolResultChars,Gq),this.maxFileContentChars=C6($.maxFileContentChars,Kq),this.maxTotalTextBytes=C6($.maxTotalTextBytes,Fq),this.mediaBudget=$.mediaBudget??{},this.maxAssistantTextChars=C6($.maxAssistantTextChars,Aq),this.maxAssistantToolMarkupChars=C6($.maxAssistantToolMarkupChars,fq),this.minOutdatedRewriteBytes=qq($.minOutdatedRewriteBytes,Uq)}resetConversationState(){this.resetIndexes(),this.committedOutdatedRewrites.clear()}buildForApi($){this.reindex($),this.commitOutdatedRewrites($);let Q=this.addMissingToolResults($).map((J)=>{if(!Array.isArray(J.content)){if(J.role==="user"&&typeof J.content==="string"){let j=YB(J.content);if(j!==J.content)return{...J,content:j}}if(J.role==="assistant"&&typeof J.content==="string"){let j=this.truncateAssistantText(J.content);if(j!==J.content)return{...J,content:j}}return J}let X=!1,Y=J.content.map((j)=>{let V=this.transformBlock(j,J.role);if(V!==j)X=!0;return V});return X?{...J,content:Y}:J}),W=this.applyMediaBudget(Q);return this.truncateToTotalTextBudget(W)}transformBlock($,Z){if(Z==="user"&&$.type==="text"&&typeof $.text==="string"){let J=YB($.text);if(J!==$.text)return{...$,text:J};return $}if(Z==="assistant"&&$.type==="text"&&typeof $.text==="string"){let J=this.truncateAssistantText($.text);return J===$.text?$:{...$,text:J}}if($.type==="file"){let J=E8($.content,this.maxFileContentChars,HB);return J===$.content?$:{...$,content:J}}if($.type!=="tool_result")return $;let Q=this.resolveToolName($),W=$.content;if(this.isReadTool(Q)&&$.is_error!==!0){let J=this.committedOutdatedRewrites.get($.tool_use_id);if(J&&J.size>0){let Y=this.getReadLocators($).filter((j)=>J.has(this.toReadLocatorKey(j))&&this.isOutdatedReadLocator(j,$.tool_use_id));if(Y.length>0)W=this.replaceOutdatedReadContent(W,Y)}}return W=this.truncateToolResultContent(W),W===$.content?$:{...$,content:W}}reindex($){let Z=this.indexedMessageCount===0||$.length>=this.indexedMessageCount&&$[this.indexedMessageCount-1]===this.indexedTailRef;if($.length<this.indexedMessageCount||!Z)this.resetIndexes();for(let Q=this.indexedMessageCount;Q<$.length;Q++){let W=$[Q];if(!Array.isArray(W.content))continue;for(let J=0;J<W.content.length;J++){let X=W.content[J];if(X.type==="file")this.latestFullContentOwnerByPathCache.set(X.path,`file:${Q}:${J}`);else if(X.type==="tool_use"){let Y=X.name.toLowerCase();if(this.toolNameByIdCache.set(X.id,Y),this.isReadTool(Y)){let j=this.extractLocatorsFromReadToolInput(X.input);if(j.length>0)this.readLocatorsByToolUseIdCache.set(X.id,j)}}else if(X.type==="tool_result"){let Y=this.resolveToolName(X);if(!this.isReadTool(Y)||X.is_error===!0)continue;let j=this.getReadLocators(X);for(let V of j)if(this.latestReadToolUseByLocatorCache.set(this.toReadLocatorKey(V),X.tool_use_id),this.isFullFileRead(V))this.latestFullContentOwnerByPathCache.set(V.path,X.tool_use_id)}}}this.indexedMessageCount=$.length,this.indexedTailRef=$.length>0?$[$.length-1]:void 0}commitOutdatedRewrites($){let Z=new Map,Q=new Set,W=0;for(let J of $){if(!Array.isArray(J.content))continue;for(let X of J.content){if(X.type!=="tool_result"||X.is_error===!0)continue;let Y=this.resolveToolName(X);if(!this.isReadTool(Y))continue;Q.add(X.tool_use_id);let j=this.committedOutdatedRewrites.get(X.tool_use_id),V=new Set,H=new Set;for(let G of this.getReadLocators(X)){let K=this.toReadLocatorKey(G);if(!this.isOutdatedReadLocator(G,X.tool_use_id))continue;if(H.add(K),!j?.has(K))V.add(K)}if(j){for(let G of j)if(!H.has(G))j.delete(G);if(j.size===0)this.committedOutdatedRewrites.delete(X.tool_use_id)}if(V.size===0)continue;let B=Z.get(X.tool_use_id);if(!B)B=new Set,Z.set(X.tool_use_id,B);for(let G of V)B.add(G);W+=this.estimateOutdatedReclaimBytes(X.content,V)}}for(let J of this.committedOutdatedRewrites.keys())if(!Q.has(J))this.committedOutdatedRewrites.delete(J);if(Z.size===0||W<this.minOutdatedRewriteBytes)return;for(let[J,X]of Z){let Y=this.committedOutdatedRewrites.get(J);if(!Y)Y=new Set,this.committedOutdatedRewrites.set(J,Y);for(let j of X)Y.add(j)}}estimateOutdatedReclaimBytes($,Z){let Q=this.extractReadLocatorsFromToolResultContent($),W=Q.length>0&&Q.every((V)=>Z.has(this.toReadLocatorKey(V))),J=(V)=>{let H;try{H=JSON.parse(V)}catch{return W||Q.length===0?W0(this.truncateMiddle(V)):0}let B=Array.isArray(H)?H:[H],G=0;for(let K of B){let F=this.extractLocatorFromResultEntry(K);if(F&&Z.has(this.toReadLocatorKey(F)))G+=this.providerBoundEntryBytes(K)}return G};if(typeof $==="string")return J($);let X=new Set(Z),Y=0;for(let V of $)if(V.type==="text")Y+=this.countOutdatedImageEntries(V.text,X);let j=0;for(let V of $)if(V.type==="text")j+=J(V.text);else if(V.type==="image"){if(Y>0)Y-=1,j+=W0(V.data)}else if(_$(V)){let H=this.extractLocatorFromResultEntry(V);if(H&&Z.has(this.toReadLocatorKey(H)))j+=this.providerBoundEntryBytes(V)}else if(V.type==="file"){if(Z.has(this.toReadLocatorKey({path:V.path,startLine:null,endLine:null})))j+=W0(this.truncateMiddle(V.content))}return j}providerBoundEntryBytes($){let Z=this.truncateNestedStrings($);return W0(JSON.stringify(Z))}addMissingToolResults($){let Z=this.collectToolResultIds($),Q=[],W=new Map,J=!1,X=()=>{if(W.size===0)return;Y(this.createMissingToolResultMessage(W)),W.clear(),J=!0},Y=(j)=>{let V=Q.at(-1);if(this.shouldMergeUserAfterToolResults(V,j)){Q[Q.length-1]={...V,content:[...V.content,...this.contentBlocksForUserMerge(j.content)]},J=!0;return}Q.push(j)};for(let j of $){if(this.isToolResultOnlyMessage(j)){if(Y(this.appendMissingToolResults(j,W)),W.size>0)W.clear(),J=!0;continue}if(Array.isArray(j.content)){let V=j.content.filter((B)=>B.type==="tool_result"),H=j.content.filter((B)=>B.type!=="tool_result");if(V.length>0){let B=this.appendMissingToolResults({...j,role:"user",content:V},W);if(Y(B),W.size>0)W.clear();J=!0}if(H.length>0||V.length===0){if(V.length===0)X();let B=V.length>0?{...j,content:H}:j;if(Y(B),B.role==="assistant")this.trackMissingToolCalls(B,Z,W)}continue}X(),Y(j)}return X(),J?Q:$}appendMissingToolResults($,Z){if(Z.size===0||!Array.isArray($.content))return $;return{...$,role:"user",content:[...$.content,...this.createMissingToolResultBlocks(Z)]}}shouldMergeUserAfterToolResults($,Z){return $?.role==="user"&&Z.role==="user"&&this.isToolResultOnlyMessage($)&&this.contentBlocksForUserMerge(Z.content).length>0}contentBlocksForUserMerge($){return typeof $==="string"?$.length>0?[{type:"text",text:$}]:[]:$}collectToolResultIds($){let Z=new Set;for(let Q of $){if(!Array.isArray(Q.content))continue;for(let W of Q.content)if(W.type==="tool_result")Z.add(W.tool_use_id)}return Z}isToolResultOnlyMessage($){return $.role==="user"&&Array.isArray($.content)&&$.content.length>0&&$.content.every((Z)=>Z.type==="tool_result")}trackMissingToolCalls($,Z,Q){if(!Array.isArray($.content))return;for(let W of $.content){if(W.type!=="tool_use"||Z.has(W.id))continue;Q.set(W.id,W.name)}}createMissingToolResultMessage($){return{role:"user",content:this.createMissingToolResultBlocks($)}}createMissingToolResultBlocks($){return Array.from($,([Z,Q])=>({type:"tool_result",tool_use_id:Z,name:Q,content:[{type:"text",text:this.formatMissingToolResultText(Q)}],is_error:!0}))}formatMissingToolResultText($){return $?`${VB} Tool: ${$}.`:VB}resetIndexes(){this.indexedMessageCount=0,this.indexedTailRef=void 0,this.toolNameByIdCache.clear(),this.readLocatorsByToolUseIdCache.clear(),this.latestReadToolUseByLocatorCache.clear(),this.latestFullContentOwnerByPathCache.clear(),this.readResultLocatorCache=new WeakMap}getReadLocators($){let Z=$,Q=this.readResultLocatorCache.get(Z);if(Q===void 0)Q=this.extractReadLocatorsFromToolResultContent($.content),this.readResultLocatorCache.set(Z,Q);if(Q.length>0)return Q;return this.readLocatorsByToolUseIdCache.get($.tool_use_id)??[]}extractLocatorsFromReadToolInput($){if(!$||typeof $!=="object")return[];let Z=$,Q=[],W=this.extractLocatorFromReadRequest(Z);if(W)Q.push(W);if(Array.isArray(Z.files))for(let J of Z.files){let X=this.extractLocatorFromReadRequest(J);if(X)Q.push(X)}if(Array.isArray(Z.file_paths)){for(let J of Z.file_paths)if(typeof J==="string"&&J.length>0)Q.push({path:J,startLine:null,endLine:null})}return this.dedupeReadLocators(Q)}extractReadLocatorsFromToolResultContent($){if(typeof $==="string")return this.tryParseReadLocators($);let Z=[];for(let Q of $){if(Q.type==="text"){Z.push(...this.tryParseReadLocators(Q.text));continue}if(_$(Q)){let W=this.extractLocatorFromResultEntry(Q);if(W)Z.push(W)}}return this.dedupeReadLocators(Z)}tryParseReadLocators($){try{return this.extractLocatorsFromParsedReadResult(JSON.parse($))}catch{return[]}}extractLocatorsFromParsedReadResult($){if(Array.isArray($)){let Q=[];for(let W of $){let J=this.extractLocatorFromResultEntry(W);if(J)Q.push(J)}return this.dedupeReadLocators(Q)}let Z=this.extractLocatorFromResultEntry($);return Z?[Z]:[]}extractLocatorFromReadRequest($){if(!$||typeof $!=="object")return;let Z=$,Q=this.extractPath(Z);if(!Q)return;return{path:Q,startLine:this.extractLineNumber(Z.start_line),endLine:this.extractLineNumber(Z.end_line)}}extractLocatorFromResultEntry($){if(!$||typeof $!=="object")return;let Z=$,Q=this.extractPath(Z);if(Q)return{path:Q,startLine:this.extractLineNumber(Z.start_line),endLine:this.extractLineNumber(Z.end_line)};if(typeof Z.query==="string"&&Z.query.length>0)return this.parseReadQuery(Z.query);return}extractPath($){let Z=[$.path,$.file_path,$.filePath];for(let Q of Z)if(typeof Q==="string"&&Q.length>0)return Q;return}extractLineNumber($){return typeof $==="number"&&Number.isInteger($)?$:null}parseReadQuery($){let Z=/^(.*):(\d+)-(EOF|\d+)$/.exec($);if(!Z)return{path:$,startLine:null,endLine:null};return{path:Z[1],startLine:Number(Z[2]),endLine:Z[3]==="EOF"?null:Number(Z[3])}}dedupeReadLocators($){let Z=new Map;for(let Q of $)Z.set(this.toReadLocatorKey(Q),Q);return Array.from(Z.values())}toReadLocatorKey($){if(this.isFullFileRead($))return $.path;return`${$.path}:${$.startLine??1}-${$.endLine??"EOF"}`}isFullFileRead($){return $.startLine==null&&$.endLine==null}isOutdatedReadLocator($,Z){let Q=this.latestFullContentOwnerByPathCache.get($.path);if(Q&&Q!==Z)return!0;return this.latestReadToolUseByLocatorCache.get(this.toReadLocatorKey($))!==Z}replaceOutdatedReadContent($,Z){let Q=new Set(Z.map((X)=>this.toReadLocatorKey(X))),W=new Set(Z.map((X)=>X.path));if(typeof $==="string")return this.replaceOutdatedInString($,Q)??B2;let J=0;for(let X of $)if(X.type==="text")J+=this.countOutdatedImageEntries(X.text,Q);return $.map((X)=>{if(X.type==="file"){if(!W.has(X.path))return X;return{...X,content:B2}}if(X.type==="image"){if(J===0)return X;return J-=1,{type:"text",text:B2}}if(_$(X))return this.replaceOutdatedReadEntry(X,Q);if(X.type!=="text")return X;let Y=this.replaceOutdatedInString(X.text,Q);if(Y===null)return{...X,text:B2};return Y===X.text?X:{...X,text:Y}})}countOutdatedImageEntries($,Z){let Q;try{Q=JSON.parse($)}catch{return 0}let W=Array.isArray(Q)?Q:[Q],J=0;for(let X of W){if(!X||typeof X!=="object")continue;let Y=X,j=this.extractLocatorFromResultEntry(Y);if(!j)continue;if(!Z.has(this.toReadLocatorKey(j)))continue;if(Y.result==="Successfully read image"||Y.content==="Successfully read image")J+=1}return J}replaceOutdatedInString($,Z){let Q;try{Q=JSON.parse($)}catch{return null}let W=Array.isArray(Q)?Q.map((J)=>this.replaceOutdatedReadEntry(J,Z)):this.replaceOutdatedReadEntry(Q,Z);return JSON.stringify(W)}replaceOutdatedReadEntry($,Z){if(!$||typeof $!=="object")return $;let Q=this.extractLocatorFromResultEntry($);if(!Q||!Z.has(this.toReadLocatorKey(Q)))return $;let W={...$};if(typeof W.result==="string")W.result=B2;else if(typeof W.content==="string")W.content=B2;else W.result=B2;return W}isReadTool($){return!!$&&Lq.has($)}resolveToolName($){let Z=this.toolNameByIdCache.get($.tool_use_id);if(Z!==void 0)return Z;return typeof $.name==="string"&&$.name.length>0?$.name.toLowerCase():void 0}truncateToolResultContent($){if(typeof $==="string")return this.truncateMiddle($);return $.map((Z)=>{if(Z.type==="file"){let Q=this.truncateMiddle(Z.content);return Q===Z.content?Z:{...Z,content:Q}}if(Z.type==="text"){let Q=this.truncateMiddle(Z.text);return Q===Z.text?Z:{...Z,text:Q}}if(_$(Z))return this.truncateNestedStrings(Z);return Z})}truncateNestedStrings($){if(typeof $==="string")return this.truncateMiddle($);if(Array.isArray($)){let Z=!1,Q=$.map((W)=>{let J=this.truncateNestedStrings(W);if(J!==W)Z=!0;return J});return Z?Q:$}if($!==null&&typeof $==="object"){if(z3($))return $;let Z=!1,Q={};for(let[W,J]of Object.entries($)){let X=this.truncateNestedStrings(J);if(X!==J)Z=!0;Q[W]=X}return Z?Q:$}return $}truncateMiddle($){return E8($,this.maxToolResultChars,HB)}truncateAssistantText($){if(this.hasRepeatedToolCallMarkup($))return E8($,this.maxAssistantToolMarkupChars,zq);return E8($,this.maxAssistantTextChars,_q)}hasRepeatedToolCallMarkup($){if($.length<=this.maxAssistantToolMarkupChars)return!1;let Z=0;for(let Q of $.matchAll(Tq))if(Z+=1,Z>=Dq)return!0;return!1}truncateToTotalTextBudget($){let Z=this.countMessageTextBytes($);if(Z<=this.maxTotalTextBytes)return $;let Q=$.map((J)=>{if(!Array.isArray(J.content))return{...J};return{...J,content:J.content.map((X)=>Rq(X))}}),W=this.collectTruncationCandidates(Q);for(let J of W){if(Z<=this.maxTotalTextBytes)break;let X=J.byteLength;if(X<=J.minBytes)continue;let Y=Z-this.maxTotalTextBytes,j=Math.max(J.minBytes,X-Y),V=Mq(J.get(),j,J.makeMarker);J.set(V),Z-=X-W0(V)}return Q}countMessageTextBytes($){let Z=0;for(let Q of $){if(typeof Q.content==="string"){Z+=W0(Q.content);continue}for(let W of Q.content)if(W.type==="text")Z+=W0(W.text);else if(W.type==="thinking")Z+=W0(W.thinking);else if(W.type==="file")Z+=W0(W.content);else if(W.type==="tool_use")Z+=RZ(W.input);else if(W.type==="tool_result"){if(typeof W.content==="string")Z+=W0(W.content);else for(let J of W.content)if(J.type==="text")Z+=W0(J.text);else if(J.type==="file")Z+=W0(J.content);else if(_$(J))Z+=RZ(J)}}return Z}collectTruncationCandidates($){let Z=[],Q=[];for(let W of $){if(W.role==="assistant"&&typeof W.content==="string"){Z.push({byteLength:W0(W.content),minBytes:jB,makeMarker:BB,get:()=>W.content,set:(J)=>{W.content=J}});continue}if(!Array.isArray(W.content))continue;for(let J of W.content){if(J.type==="tool_use"){EZ(J.input,Q);continue}if(W.role==="assistant"&&J.type==="text"){Z.push({byteLength:W0(J.text),minBytes:jB,makeMarker:BB,get:()=>J.text,set:(X)=>{J.text=X}});continue}if(J.type!=="tool_result")continue;if(typeof J.content==="string"){Z.push({byteLength:W0(J.content),minBytes:P6,makeMarker:S6,get:()=>J.content,set:(X)=>{J.content=X}});continue}for(let X of J.content)if(X.type==="text")Z.push({byteLength:W0(X.text),minBytes:P6,makeMarker:S6,get:()=>X.text,set:(Y)=>{X.text=Y}});else if(X.type==="file")Z.push({byteLength:W0(X.content),minBytes:P6,makeMarker:S6,get:()=>X.content,set:(Y)=>{X.content=Y}});else if(_$(X))EZ(X,Z)}}return Z.sort((W,J)=>J.byteLength-W.byteLength),Q.sort((W,J)=>J.byteLength-W.byteLength),[...Z,...Q]}applyMediaBudget($){let Z=this.resolveMediaBudget();if(Z.maxImageEncodedBytes===Number.POSITIVE_INFINITY&&Z.maxImageDecodedBytes===Number.POSITIVE_INFINITY&&Z.maxTotalMediaBytes===Number.POSITIVE_INFINITY)return $;let Q=Vq(),W=!1,J=$.map((X)=>{if(!Array.isArray(X.content))return X;let Y=!1,j=X.content.map((V)=>{let H=this.applyMediaBudgetToBlock(V,Z,Q);if(H!==V)Y=!0;return H});if(!Y)return X;return W=!0,{...X,content:j}});return W?J:$}resolveMediaBudget(){return Hq(this.mediaBudget)}applyMediaBudgetToBlock($,Z,Q){if(L3($))return this.limitImageContent($,Z,Q);if($.type!=="tool_result"||typeof $.content==="string")return $;let W=!1,J=$.content.map((X)=>{let Y=this.applyMediaBudgetToToolResultEntry(X,Z,Q);if(Y!==X)W=!0;return Y});return W?{...$,content:J}:$}applyMediaBudgetToToolResultEntry($,Z,Q){if(L3($))return this.limitImageContent($,Z,Q);if(_$($))return this.limitNestedMedia($,Z,Q);return $}limitNestedMedia($,Z,Q){if(L3($)){let W=this.limitImageContent($,Z,Q);return W.type==="text"?W.text:W}if(Array.isArray($)){let W=!1,J=$.map((X)=>{let Y=this.limitNestedMedia(X,Z,Q);if(Y!==X)W=!0;return Y});return W?J:$}if($!==null&&typeof $==="object"){let W=!1,J={};for(let[X,Y]of Object.entries($)){let j=this.limitNestedMedia(Y,Z,Q);if(j!==Y)W=!0;J[X]=j}return W?J:$}return $}limitImageContent($,Z,Q){if(!AB($))return{type:"text",text:XB};let W=Bq($.mediaType,$.data,{maxImageEncodedBytes:Z.maxImageEncodedBytes,maxImageDecodedBytes:Z.maxImageDecodedBytes,maxTotalMediaBytes:Z.maxTotalMediaBytes},Q);if(!W.ok)return{type:"text",text:XB};return{...$,data:W.base64,mediaType:W.mediaType}}}var GB=String.raw`[\|\uFF5C]`,Tq=new RegExp(String.raw`<\s*(?:${GB}\s*)?DSML\s*(?:${GB}\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 KB($){if($===void 0)return;let Z=Number.parseInt($,10);return Number.isFinite(Z)&&Z>0?Z:void 0}function Oq($){if($===void 0)return;let Z=$.trim().toLowerCase();if(Z==="infinity"||Z==="disable")return Number.POSITIVE_INFINITY;let Q=Number.parseInt($,10);return Number.isFinite(Q)&&Q>=0?Q:void 0}function C6($,Z){return typeof $==="number"&&Number.isFinite($)&&$>0?Math.floor($):Z}function qq($,Z){if(typeof $!=="number"||Number.isNaN($)||$<0)return Z;return Number.isFinite($)?Math.floor($):$}function E8($,Z,Q){if($.length<=Z)return $;let W=Q($.length-Z),J=Math.max(0,Math.floor((Z-W.length)/2)),X=Math.max(0,$.length-J*2),Y=Q(X),j=Math.max(0,Math.floor((Z-Y.length)/2)),V=$.slice(0,j),H=j>0?$.slice(-j):"";return`${V}${Y}${H}`}function Mq($,Z,Q){if(W0($)<=Z)return $;let W=0,J=$.length,X=E8($,0,Q);while(W<=J){let Y=W+J>>>1,j=E8($,Y,Q);if(W0(j)<=Z)X=j,W=Y+1;else J=Y-1}return X}function Rq($){if($.type==="tool_use")return{...$,input:NZ($.input)};if($.type!=="tool_result"||typeof $.content==="string")return{...$};return{...$,content:$.content.map((Z)=>_$(Z)?NZ(Z):{...Z})}}function _$($){if($===null||typeof $!=="object")return!1;let Z=$.type;return Z!=="text"&&Z!=="image"&&Z!=="file"}function L3($){return $!==null&&typeof $==="object"&&$.type==="image"}function AB($){return $!==null&&typeof $==="object"&&$.type==="image"&&typeof $.data==="string"&&typeof $.mediaType==="string"}function z3($){return AB($)}function RZ($){if(typeof $==="string")return W0($);if(Array.isArray($)){let Z=0;for(let Q of $)Z+=RZ(Q);return Z}if($!==null&&typeof $==="object"){if(z3($))return 0;let Z=0;for(let Q of Object.values($))Z+=RZ(Q);return Z}return 0}function EZ($,Z){if(Array.isArray($)){$.forEach((Q,W)=>{if(typeof Q==="string")Z.push({byteLength:W0(Q),minBytes:P6,makeMarker:S6,get:()=>$[W],set:(J)=>{$[W]=J}});else EZ(Q,Z)});return}if($!==null&&typeof $==="object"){if(z3($))return;let Q=$;for(let W of Object.keys(Q)){let J=Q[W];if(typeof J==="string")Z.push({byteLength:W0(J),minBytes:P6,makeMarker:S6,get:()=>Q[W],set:(X)=>{Q[W]=X}});else EZ(J,Z)}}}function NZ($){if(Array.isArray($))return $.map(NZ);if($!==null&&typeof $==="object"){let Z={};for(let[Q,W]of Object.entries($))Z[Q]=NZ(W);return Z}return $}function T3(){return`conv_${Date.now()}_${Math.random().toString(36).slice(2,9)}`}class O3{messages=[];conversationId=T3();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=T3(),this.sessionStarted=!1}clearHistory(){this.messages=[],this.conversationId=T3(),this.sessionStarted=!1}restore($){this.messages=[...$],this.sessionStarted=!1}isSessionStarted(){return this.sessionStarted}markSessionStarted(){this.sessionStarted=!0}}function fB($){let{agentConfig:Z}=$,Q=Eq(Z),W=Nq(Z),J=$.hooks,X=wq(Z.maxParallelToolCalls);return{sessionId:$.sessionId??Z.sessionId,agentId:$.agentId,conversationId:$.conversationId,parentAgentId:$.parentAgentId,agentRole:$.agentRole,systemPrompt:$.systemPrompt??Z.systemPrompt,messageModelInfo:W,model:$.model,modelOptions:Q,tools:$.tools,hooks:J,prepareTurn:$.prepareTurn,consumePendingUserMessage:Z.consumePendingUserMessage,plugins:$.plugins,logger:$.logger??Z.logger,telemetry:$.telemetry??Z.telemetry,initialMessages:$.initialMessages,completionPolicy:Z.completionPolicy,maxIterations:Z.maxIterations,toolExecution:X,toolPolicies:Z.toolPolicies,toolContextMetadata:$.toolContextMetadata,requestToolApproval:Z.requestToolApproval}}function Eq($){let Z={};if($.thinking!==void 0)Z.thinking=$.thinking;if($.reasoningEffort!==void 0)Z.reasoningEffort=$.reasoningEffort;if($.thinkingBudgetTokens!==void 0)Z.thinkingBudgetTokens=$.thinkingBudgetTokens;if($.maxTokensPerTurn!==void 0)Z.maxTokensPerTurn=$.maxTokensPerTurn;if($.apiTimeoutMs!==void 0)Z.apiTimeoutMs=$.apiTimeoutMs;return Object.keys(Z).length>0?Z:void 0}function Nq($){let Z=$.providerConfig?.family;return{id:$.modelId,provider:$.providerId,family:Z}}function wq($){if($===void 0)return;return $>=2?"parallel":"sequential"}function Cq(){return{lastToolName:"",lastToolSignature:"",consecutiveIdenticalCount:0}}function Pq($){$.lastToolName="",$.lastToolSignature="",$.consecutiveIdenticalCount=0}function q3($){if($==null||typeof $!=="object")return $;if(Array.isArray($))return $.map(q3);let Z={};for(let Q of Object.keys($).sort())Z[Q]=q3($[Q]);return Z}function Sq($){if($==null)return"null";if(typeof $==="string")return $;if(typeof $!=="object")return String($);try{return JSON.stringify(q3($))}catch{return String($)}}function bq($,Z,Q,W){if(Z===$.lastToolName&&Q===$.lastToolSignature)$.consecutiveIdenticalCount++;else $.consecutiveIdenticalCount=1;return $.lastToolName=Z,$.lastToolSignature=Q,{softWarning:$.consecutiveIdenticalCount===W.softThreshold,hardEscalation:$.consecutiveIdenticalCount>=W.hardThreshold}}var UB={softThreshold:3,hardThreshold:5};class M3{config;state=Cq();constructor($){this.config={softThreshold:$?.softThreshold??UB.softThreshold,hardThreshold:$?.hardThreshold??UB.hardThreshold}}inspect($){let Z=Sq($.input),Q=bq(this.state,$.name,Z,this.config);if(Q.hardEscalation)return{kind:"hard",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${$.name}\`; stopping to avoid a loop.`};if(Q.softWarning)return{kind:"soft",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${$.name}\`; consider trying a different approach.`};return{kind:"ok"}}reset(){Pq(this.state)}}class R3{consecutiveMistakes=0;options;constructor($){this.options=$}async record($){let Z=this.options.maxConsecutiveMistakes,Q=$.forceAtLimit&&Z?Z:this.consecutiveMistakes+1;this.consecutiveMistakes=Q;let W=$.details?.trim()||`consecutive mistake (${$.reason})`;if(this.options.emit({type:"error",error:Error(W),recoverable:!0,iteration:$.iteration}),this.options.log("warn","Recorded consecutive mistake",{agentId:this.options.agentId,conversationId:this.options.getConversationId(),runId:this.options.getActiveRunId(),iteration:$.iteration,reason:$.reason,details:$.details,consecutiveMistakes:Q,maxConsecutiveMistakes:this.options.maxConsecutiveMistakes}),!Z||Q<Z)return{action:"continue"};let J=await hq({iteration:$.iteration,consecutiveMistakes:Q,maxConsecutiveMistakes:Z,reason:$.reason,details:$.details},this.options.onLimitReached);if(J.action==="continue"){let X=J.guidance?.trim();if(X)this.options.appendRecoveryNotice(X,$.reason);return this.consecutiveMistakes=0,{action:"continue",guidance:X}}return{action:"stop",reason:J.reason?.trim()||void 0,message:yq({iteration:$.iteration,consecutiveMistakes:Q,maxConsecutiveMistakes:Z,reason:$.reason,details:$.details,stopReason:J.reason})}}reset(){this.consecutiveMistakes=0}get value(){return this.consecutiveMistakes}}function yq($){let Z=[`Stopped after ${$.consecutiveMistakes}/${$.maxConsecutiveMistakes} consecutive mistakes (${$.reason}) at iteration ${$.iteration}.`],Q=$.details?.trim();if(Q)Z.push(`Error: ${Q}`);let W=$.stopReason?.trim();if(W)Z.push(`Decision: ${W}`);return Z.push("Session state was preserved. Send a new prompt to resume from the latest state."),Z.join(" ")}async function hq($,Z){if(!Z)return{action:"stop",reason:`maximum consecutive mistakes reached (${$.maxConsecutiveMistakes})`};try{return await Z($)}catch(Q){return{action:"stop",reason:Q instanceof Error?Q.message:`maximum consecutive mistakes reached (${$.maxConsecutiveMistakes})`}}}function kq($){let Z=$.content.filter((Q)=>Q.type==="text");if(Z.length===0)return;return Z.map((Q)=>Q.text).join("")}function Iq($){let Z=$.content.filter((Q)=>Q.type==="reasoning");if(Z.length===0)return;return{reasoning:Z.map((Q)=>Q.text).join(""),redacted:Z.some((Q)=>Q.redacted===!0)}}function xq($){return $.content.find((Z)=>Z.type==="tool-result")}function gq($){switch($){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}function mq($){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 E3{lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0};toolStartedAt=new Map;translate($){switch($.type){case"run-started":return[];case"message-added":return[];case"turn-started":return[{type:"iteration_start",iteration:$.iteration}];case"turn-finished":return[{type:"iteration_end",iteration:$.iteration,hadToolCalls:$.toolCallCount>0,toolCallCount:$.toolCallCount}];case"assistant-text-delta":return[{type:"content_start",contentType:"text",text:$.text,accumulated:$.accumulatedText}];case"assistant-reasoning-delta":return[{type:"content_start",contentType:"reasoning",reasoning:$.text,redacted:$.redacted===!0}];case"assistant-message":return this.translateAssistantMessage($.message);case"tool-started":return this.translateToolStarted($);case"tool-updated":return[{type:"content_update",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,update:$.update}];case"tool-finished":return this.translateToolFinished($);case"usage-updated":return this.translateUsage($.usage);case"status-notice":return[{type:"notice",noticeType:"status",displayRole:"status",message:$.message,reason:$.metadata?.reason==="auto_compaction"?"auto_compaction":void 0,metadata:$.metadata}];case"run-finished":return this.translateRunFinished($.result);case"run-failed":return[{type:"error",error:$.error,recoverable:!1,iteration:$.snapshot.iteration}];default:return $}}reset(){this.lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0},this.toolStartedAt.clear()}translateAssistantMessage($){let Z=[],Q=kq($);if(Q!==void 0)Z.push({type:"content_end",contentType:"text",text:Q});let W=Iq($);if(W!==void 0)Z.push({type:"content_end",contentType:"reasoning",reasoning:W.reasoning});return Z}translateToolStarted($){return this.toolStartedAt.set($.toolCall.toolCallId,Date.now()),[{type:"content_start",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,input:$.toolCall.input}]}translateToolFinished($){let Z=this.toolStartedAt.get($.toolCall.toolCallId),Q=Z===void 0?void 0:Date.now()-Z;this.toolStartedAt.delete($.toolCall.toolCallId);let W=xq($.message),J=W?.output,X=mq(W);return[{type:"content_end",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,output:J,error:X,durationMs:Q}]}translateUsage($){let Z=$.inputTokens-this.lastUsage.inputTokens,Q=$.outputTokens-this.lastUsage.outputTokens,W=$.cacheReadTokens-this.lastUsage.cacheReadTokens,J=$.cacheWriteTokens-this.lastUsage.cacheWriteTokens,X=this.lastUsage.totalCost??0,j=($.totalCost??0)-X;return this.lastUsage={inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,totalCost:$.totalCost},[{type:"usage",inputTokens:Math.max(0,Z),outputTokens:Math.max(0,Q),cacheReadTokens:W===0?void 0:Math.max(0,W),cacheWriteTokens:J===0?void 0:Math.max(0,J),cost:j===0?void 0:j,totalInputTokens:$.inputTokens,totalOutputTokens:$.outputTokens,totalCacheReadTokens:$.cacheReadTokens===0?void 0:$.cacheReadTokens,totalCacheWriteTokens:$.cacheWriteTokens===0?void 0:$.cacheWriteTokens,totalCost:$.totalCost}]}translateRunFinished($){let Z={inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens===0?void 0:$.usage.cacheReadTokens,cacheWriteTokens:$.usage.cacheWriteTokens===0?void 0:$.usage.cacheWriteTokens,totalCost:$.usage.totalCost};return[{type:"done",reason:gq($.status),text:$.outputText,iterations:$.iterations,usage:Z}]}}function iq($){if(typeof $==="string")return $;if($ instanceof Error)return $.message;try{return JSON.stringify($)}catch{return String($)}}async function nq($){let Q=(typeof $.content==="function"?await $.content():$.content).trim();return Q.length>0?Q:void 0}function aq($,Z){let Q=$.trim(),W=Z.map((J)=>J.trim()).filter(Boolean).join(`
|
|
466
467
|
|
|
467
468
|
`);if(Q&&W)return`${Q}
|
|
468
469
|
|
|
469
|
-
${W}`;return Q||W}function pq($,Z){let Q=Z?.["*"]??{},W=Z?.[$]??{};return{...Q,...W}.enabled!==!1}function rq($,Z){return $.filter((Q)=>pq(Q.name,Z))}function iq($,Z){return y1(rq($,Z))}function nq($){let Z=$.filter((Q)=>Q!==void 0);if(Z.length===0)return{};return{beforeRun:async(Q)=>{for(let W of Z){let J=await W.beforeRun?.(Q);if(J?.stop)return J}return},afterRun:async(Q)=>{for(let W of Z)await W.afterRun?.(Q)},beforeModel:async(Q)=>{let W=Q.request,J;for(let X of Z){let Y=await X.beforeModel?.({...Q,request:W});if(!Y)continue;if(Y.stop)return Y;J={...J,...Y,options:DB(J?.options,Y.options)},W={...W,...Y.messages?{messages:Y.messages}:{},...Y.tools?{tools:Y.tools}:{},...Y.options?{options:DB(W.options,Y.options)}:{}}}return J},afterModel:async(Q)=>{for(let W of Z){let J=await W.afterModel?.(Q);if(J?.stop)return J}return},beforeTool:async(Q)=>{let W=Q.input,J;for(let X of Z){let Y=await X.beforeTool?.({...Q,input:W});if(!Y)continue;if(Y.stop||Y.skip)return Y;if(J={...J,...Y},Object.hasOwn(Y,"input"))W=Y.input}return J},afterTool:async(Q)=>{let W=Q.result,J;for(let X of Z){let Y=await X.afterTool?.({...Q,result:W});if(!Y)continue;if(Y.stop)return Y;if(J={...J,...Y},Y.result)W=Y.result}return J},onEvent:async(Q)=>{for(let W of Z)await W.onEvent?.(Q)}}}class z${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 E3;shutdownCalled=!1;currentRunToolCalls=[];currentRunUsage={inputTokens:0,outputTokens:0};toolStartedAt=new Map;toolInputs=new Map;currentTurnSuccessfulTools=0;currentTurnFailedTools=0;currentTurnFailureDetails=[];activeTrackerWork=Promise.resolve();trackerAbortInFlight=!1;constructor($,Z={}){this.config=$,this.agentId=`agent_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,this.parentAgentId=$.parentAgentId,this.logger=Z.logger??$.logger,this.telemetry=Z.telemetry??$.telemetry,this.createAgentRuntimeImpl=Z.createAgentRuntimeImpl??vq,this.conversation=new O3($.initialMessages),this.messageBuilder=new L3(KB()),this.contributionRegistry=cq({extensions:$.extensions?[...$.extensions]:[],setupContext:{session:$.extensionContext?.session,client:$.extensionContext?.client,user:$.extensionContext?.user,workspaceInfo:$.extensionContext?.workspace,automation:$.extensionContext?.automation,logger:$.extensionContext?.logger??this.logger,telemetry:$.extensionContext?.telemetry??this.telemetry}}),this.contributionRegistry.resolve(),this.contributionRegistry.validate();let Q=$.execution?.maxConsecutiveMistakes??6;this.mistakeTracker=new R3({maxConsecutiveMistakes:Q,onLimitReached:$.onConsecutiveMistakeLimitReached,emit:(X)=>this.emitLegacyEvent(X),log:(X,Y,j)=>aq(this.logger,X,Y,j),agentId:this.agentId,getConversationId:()=>this.conversation.getConversationId(),getActiveRunId:()=>this.activeRunId??"",appendRecoveryNotice:(X,Y)=>{this.conversation.appendMessage({role:"user",content:[{type:"text",text:X}]})}});let W=$.execution?.loopDetection;this.loopDetectionDisabled=W===!1;let J=W===!1||W===void 0?void 0:W;this.loopTracker=new M3(J)}getAgentId(){return this.agentId}getConversationId(){return this.conversation.getConversationId()}getMessages(){return this.conversation.getMessages()}canStartRun(){return!this.running&&!this.shutdownCalled}getExtensionRegistry(){return this.contributionRegistry.getRegistrySnapshot()}addTools($){if($.length===0)return;let Z=new Set(this.config.tools.map((W)=>W.name)),Q=[...this.config.tools];for(let W of $)if(!Z.has(W.name))Q.push(W),Z.add(W.name);this.config={...this.config,tools:Q}}updateConnection($){let Z={...this.config};if($.providerId!==void 0)Z.providerId=$.providerId;if($.modelId!==void 0)Z.modelId=$.modelId;if($.apiKey!==void 0)Z.apiKey=$.apiKey;if($.baseUrl!==void 0)Z.baseUrl=$.baseUrl;if($.headers!==void 0)Z.headers=$.headers;if($.providerConfig!==void 0)Z.providerConfig=$.providerConfig;if($.reasoningEffort!==void 0)Z.reasoningEffort=$.reasoningEffort;if($.thinking!==void 0)Z.thinking=$.thinking;if($.thinkingBudgetTokens!==void 0)Z.thinkingBudgetTokens=$.thinkingBudgetTokens;this.config=Z}clearHistory(){this.conversation.clearHistory(),this.resetConversationBoundaryTrackers()}restore($){this.conversation.restore($),this.resetConversationBoundaryTrackers()}resetConversationBoundaryTrackers(){this.messageBuilder.resetConversationState(),this.mistakeTracker.reset(),this.loopTracker.reset()}subscribeEvents($){return this.listeners.add($),()=>{this.listeners.delete($)}}abort($){let Z=typeof $==="string"?$:$ instanceof Error?$.message:$===void 0?void 0:String($);if(this.abortRequested=!0,this.abortReason=Z,this.activeRunPromise)this.activeRunPromise.catch(()=>{});this.activeRuntime?.abort(Z)}async shutdown($,Z){if(this.running){if(!this.abortRequested||!this.activeRunPromise)throw Error(`SessionRuntime.shutdown called while a run is in progress (agentId=${this.agentId})`);await this.activeRunPromise}if(this.shutdownCalled)return;this.shutdownCalled=!0}run($,Z,Q){return this.conversation.resetForRun(),this.resetConversationBoundaryTrackers(),this.executeRun({userMessage:$,userImages:Z,userFiles:Q,isContinue:!1})}continue($,Z,Q){return this.executeRun({userMessage:$,userImages:Z,userFiles:Q,isContinue:!0})}async composeSystemPrompt(){let $=[];for(let Z of this.contributionRegistry.getRegisteredRules()){let Q=await dq(Z);if(Q)$.push(Q)}return lq(this.config.systemPrompt,$)}executeRun($){let Z;return Z=this.executeRunInternal($).finally(()=>{if(this.activeRunPromise===Z)this.activeRunPromise=null}),this.activeRunPromise=Z,Z}async executeRunInternal($){if(this.shutdownCalled)throw Error(`SessionRuntime.run called after shutdown (agentId=${this.agentId})`);if(this.running)throw Error(`SessionRuntime state is "running"; call canStartRun() first (agentId=${this.agentId})`);this.running=!0,this.abortRequested=!1,this.abortReason=void 0,this.activeRunId=`run_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,await this.ensureExtensionsInitialized(),this.eventAdapter.reset(),this.currentRunToolCalls=[],this.currentRunUsage={inputTokens:0,outputTokens:0},this.toolStartedAt.clear(),this.toolInputs.clear(),this.currentTurnSuccessfulTools=0,this.currentTurnFailedTools=0,this.currentTurnFailureDetails=[],this.activeTrackerWork=Promise.resolve(),this.trackerAbortInFlight=!1;let Z=new Date,Q=$.userMessage;if(Q!==void 0){let U=await oq(Q,$.userImages,$.userFiles,this.config.userFileContentLoader);this.conversation.appendMessage({role:"user",content:U})}let W=await this.composeSystemPrompt(),J=WB(this.config,this.logger,this.telemetry),X=new Map;for(let U of this.contributionRegistry.getRegisteredTools())X.set(U.name,U);let Y=iq([...X.values()],this.config.toolPolicies),j=new Map;for(let U of Y)j.set(U.name,U);for(let U of this.config.tools)j.set(U.name,U);let V=this.conversation.getConversationId(),H=TB(this.config),B=Array.from(j.values()),G=OZ(this.conversation.getMessages()),K=AB({agentConfig:this.config,sessionId:this.config.sessionId,agentId:this.agentId,conversationId:V,parentAgentId:this.parentAgentId,model:J,logger:this.logger,telemetry:this.telemetry,tools:B,toolContextMetadata:{modelSupportsImages:H?.capabilities?.includes("images")??!0,...this.config.toolContextMetadata,[zH]:this.telemetry},hooks:this.createRuntimeHooks(),prepareTurn:this.createRuntimePrepareTurn(H,B),initialMessages:G,systemPrompt:W}),F=this.createAgentRuntimeImpl(K);if(this.activeRuntime=F,this.abortRequested)F.abort(this.abortReason);let A=F.subscribe((U)=>{this.handleRuntimeEvent(U)}),D,f;try{if($.isContinue)D=await F.continue(void 0);else D=await F.run("")}catch(U){f=U instanceof Error?U:Error(String(U))}finally{A();try{await this.activeTrackerWork}catch(U){this.logger?.error?.("SessionRuntime tracker work failed during drain",{agentId:this.agentId,error:U})}this.activeRuntime=null,this.running=!1,this.abortRequested=!1,this.abortReason=void 0}if(D&&D.messages.length>0){let U=E8(D.messages);this.conversation.replaceMessages(U)}let T=new Date;try{return this.buildLegacyResult({runResult:D,thrownError:f,startedAt:Z,endedAt:T})}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 $=nq([this.config.hooks,...this.contributionRegistry.getValidatedExtensions().map((Z)=>Z.hooks)]);return{...$,beforeModel:async(Z)=>{let Q=await $.beforeModel?.(Z);if(Q?.stop)return Q;let W=Q?.messages??Z.request.messages,J=await this.prepareMessagesForModelRequest(W);return{...Q,messages:J}}}}createRuntimePrepareTurn($,Z){let Q=this.config.prepareTurn;if(!Q)return;return async(W)=>{let J=E8(W.messages),X=await this.prepareProviderMessagesForApi(J),Y=await Q({agentId:W.agentId,conversationId:W.conversationId??this.conversation.getConversationId(),parentAgentId:W.parentAgentId??null,iteration:W.iteration,messages:J,apiMessages:X,abortSignal:W.signal??new AbortController().signal,systemPrompt:W.systemPrompt??"",tools:Z,model:{id:this.config.modelId,provider:this.config.providerId,info:$},emitStatusNotice:W.emitStatusNotice});if(!Y)return;return{...Y.messages?{messages:OZ(Y.messages)}:{},...Y.systemPrompt!==void 0?{systemPrompt:Y.systemPrompt}:{}}}}async prepareMessagesForModelRequest($){let Z=await this.prepareProviderMessagesForApi(qZ($));return OZ(Z)}async prepareProviderMessagesForApi($){let Z=$,Q=this.contributionRegistry.getRegistrySnapshot().messageBuilder;for(let W of Q)Z=await W.build(Z);return this.messageBuilder.buildForApi(Z)}handleRuntimeEvent($){switch($.type){case"message-added":case"assistant-message":{this.syncConversationFromRuntimeMessage($.snapshot.messages,[$.message]);break}case"turn-started":{this.currentTurnSuccessfulTools=0,this.currentTurnFailedTools=0,this.currentTurnFailureDetails=[];break}case"tool-started":{this.toolStartedAt.set($.toolCall.toolCallId,new Date),this.toolInputs.set($.toolCall.toolCallId,$.toolCall.input),this.inspectLoopForToolCall($.toolCall.toolName,$.toolCall.input,$.iteration);break}case"tool-finished":{let Z=this.toolStartedAt.get($.toolCall.toolCallId),Q=new Date,W=this.toolInputs.get($.toolCall.toolCallId);this.toolStartedAt.delete($.toolCall.toolCallId),this.toolInputs.delete($.toolCall.toolCallId);let J=$.message.content.find((V)=>V.type==="tool-result"),X=J?.type==="tool-result"&&J.isError===!0,Y=X?uq(J?.type==="tool-result"?J.output:void 0):void 0,j={id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:W,output:J?.type==="tool-result"?J.output:void 0,error:Y,durationMs:Z===void 0?0:Q.getTime()-Z.getTime(),startedAt:Z??Q,endedAt:Q};if(this.currentRunToolCalls.push(j),X){if(this.currentTurnFailedTools+=1,Y)this.currentTurnFailureDetails.push(`[${$.toolCall.toolName}] ${Y}`)}else this.currentTurnSuccessfulTools+=1;break}case"turn-finished":{let Z=this.currentTurnFailedTools,Q=this.currentTurnSuccessfulTools;if(Z>0&&Q===0){let W=this.currentTurnFailureDetails.join("; ");this.enqueueMistakeRecord({iteration:$.iteration,reason:"tool_execution_failed",details:`${Z} tool call(s) failed${W?`: ${W}`:""}`})}else if(Q>0)this.mistakeTracker.reset();break}case"usage-updated":{this.currentRunUsage={inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens>0?$.usage.cacheReadTokens:void 0,cacheWriteTokens:$.usage.cacheWriteTokens>0?$.usage.cacheWriteTokens:void 0,totalCost:$.usage.totalCost};break}default:break}for(let Z of this.eventAdapter.translate($))this.emitLegacyEvent(Z)}syncConversationFromRuntimeMessage($,Z){if($.length>0){this.conversation.replaceMessages(E8($));return}if(Z.length===0)return;let Q=new Set(this.conversation.getMessages().map((J)=>J.id).filter((J)=>typeof J==="string")),W=E8(Z).filter((J)=>!J.id||!Q.has(J.id));if(W.length===0)return;this.conversation.replaceMessages([...this.conversation.getMessages(),...W])}emitLegacyEvent($){for(let Z of this.listeners)try{Z($)}catch(Q){this.logger?.error?.("SessionRuntime event listener threw",{agentId:this.agentId,error:Q})}}inspectLoopForToolCall($,Z,Q){if(this.trackerAbortInFlight||this.loopDetectionDisabled)return;let W=this.loopTracker.inspect({name:$,input:Z});if(W.kind==="ok")return;if(W.kind==="soft"){if(W.message)this.conversation.appendMessage({role:"user",content:[{type:"text",text:W.message}]});return}this.enqueueMistakeRecord({iteration:Q,reason:"tool_execution_failed",forceAtLimit:!0,details:W.message??`Detected repeated tool calls to \`${$}\`; stopping to avoid a loop.`})}enqueueMistakeRecord($){if(this.trackerAbortInFlight)return;this.activeTrackerWork=this.activeTrackerWork.then(async()=>{if(this.trackerAbortInFlight)return;let Z=await this.mistakeTracker.record($);if(Z.action==="stop")this.trackerAbortInFlight=!0,this.conversation.appendMessage({role:"user",content:[{type:"text",text:Z.message}]}),this.activeRuntime?.abort(Z.reason??Z.message)})}buildLegacyResult($){let{runResult:Z,thrownError:Q,startedAt:W,endedAt:J}=$,X=J.getTime()-W.getTime(),Y=Q?"error":sq(Z),j=Z?.outputText||(Z?.status==="failed"?Z.error?.message:void 0)||"",V=Z?{inputTokens:Z.usage.inputTokens,outputTokens:Z.usage.outputTokens,cacheReadTokens:Z.usage.cacheReadTokens>0?Z.usage.cacheReadTokens:void 0,cacheWriteTokens:Z.usage.cacheWriteTokens>0?Z.usage.cacheWriteTokens:void 0,totalCost:Z.usage.totalCost}:this.currentRunUsage,H=Z?E8(Z.messages):this.conversation.getMessages(),B=TB(this.config);if(Q)throw Q;return{text:j,usage:V,messages:H,toolCalls:this.currentRunToolCalls,iterations:Z?.iterations??0,finishReason:Y,model:{id:this.config.modelId,provider:this.config.providerId,info:B},startedAt:W,endedAt:J,durationMs:X}}}function aq($,Z,Q,W){if(!$)return;if(Z==="debug"){$.debug(Q,W);return}if(Z==="error"&&$.error){$.error(Q,W);return}let J=Z==="warn"?"warn":Z==="error"?"error":"info";$.log(Q,{...W,severity:J})}function sq($){if(!$)return"error";switch($.status){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}async function oq($,Z,Q,W){let{buildInitialUserContent:J}=await Promise.resolve().then(() => UB);return J($,Z,Q,W)}function TB($){if($.knownModels?.[$.modelId])return $.knownModels[$.modelId];let Z=U3($);if(Z?.[$.modelId])return Z[$.modelId];return}import{buildClineSystemPrompt as LB}from"@cline/shared";function _B($,Z){let Q=$.trim();if(Z.providerId.toLowerCase()!=="cline")return Q;return LB({ide:Z.clineIdeName?.trim()||"Terminal",workspaceRoot:Z.cwd?.trim()||"/",providerId:Z.providerId,rules:`# Team Teammate Role
|
|
470
|
-
${Q}`,platform:Z.clinePlatform,metadata:Z.workspaceMetadata})}function zB($,Z){let Q=$.trim();if(Z.providerId.toLowerCase()!=="cline")return Q;return LB({ide:Z.clineIdeName||"Terminal",workspaceRoot:Z.cwd?.trim()||"/",providerId:Z.providerId,overridePrompt:Q,metadata:Z.workspaceMetadata,platform:Z.clinePlatform})}function O$($){let Z={...$};return{getRuntimeConfig:()=>Z,getConnectionConfig:()=>({providerId:Z.providerId,modelId:Z.modelId,apiKey:Z.apiKey,baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking,maxTokensPerTurn:Z.maxTokensPerTurn}),updateConnectionDefaults:(Q)=>{Z={...Z,...Q}}}}function K2($){let Z=$.configProvider.getRuntimeConfig(),Q=$.kind==="teammate"?_B($.prompt,Z):zB($.prompt,Z);return{...$.configProvider.getConnectionConfig(),systemPrompt:Q,tools:$.tools,maxIterations:$.maxIterations??Z.maxIterations,parentAgentId:$.parentAgentId,abortSignal:$.abortSignal,onEvent:$.onEvent,hooks:Z.hooks,extensions:Z.extensions,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval,logger:Z.logger,role:$.role}}function q$($){let Z=K2($),Q=new z$(Z);if(Z.onEvent)Q.subscribeEvents(Z.onEvent);return Q}var $M=N3.object({systemPrompt:N3.string().describe("System prompt defining the sub-agent's behavior"),task:N3.string().describe("Task for the sub-agent to complete")});function M$($){return tq({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:eq($M),execute:async(Z,Q)=>{let W=$.createSubAgentTools?await $.createSubAgentTools(Z,Q):$.subAgentTools??[],J=q$({kind:"subagent",prompt:Z.systemPrompt,configProvider:$.configProvider,tools:W,maxIterations:$.defaultMaxIterations,parentAgentId:Q.agentId,abortSignal:Q.signal,onEvent:$.onSubAgentEvent,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval}),X=J.getAgentId(),Y=J.getConversationId(),j=Q.agentId;if($.onSubAgentStart)try{await $.onSubAgentStart({subAgentId:X,conversationId:Y,parentAgentId:j,input:Z})}catch{}try{let V=await J.run(Z.task),H={text:V.text,iterations:V.iterations,finishReason:V.finishReason,usage:{inputTokens:V.usage.inputTokens,outputTokens:V.usage.outputTokens}};if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:X,conversationId:Y,parentAgentId:j,input:Z,result:H,agentResult:V})}catch{}return H}catch(V){if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:X,conversationId:Y,parentAgentId:j,input:Z,error:V instanceof Error?V:Error(String(V))})}catch{}throw V}},timeoutMs:300000,retryable:!1})}import{createTool as F0,TEAM_AWAIT_TIMEOUT_MS as ZM,TEAM_RUN_MESSAGE_PREVIEW_LIMIT as QM,TEAM_RUN_TEXT_PREVIEW_LIMIT as WM,TEAM_TASK_IGNORED_FIELDS_BY_ACTION as JM,TeamAttachOutcomeFragmentInputSchema as OB,TeamAwaitRunsInputSchema as qB,TeamBroadcastInputSchema as MB,TeamBroadcastToolResultSchema as XM,TeamCancelRunInputSchema as RB,TeamCancelRunToolResultSchema as YM,TeamCleanupInputSchema as EB,TeamCleanupToolResultSchema as jM,TeamCreateOutcomeInputSchema as NB,TeamCreateOutcomeToolResultSchema as VM,TeamFinalizeOutcomeInputSchema as CB,TeamFinalizeOutcomeToolResultSchema as HM,TeamListOutcomesInputSchema as wB,TeamListRunsInputSchema as PB,TeamMailboxMessageToolResultSchema as BM,TeamMissionLogInputSchema as SB,TeamMissionLogToolResultSchema as GM,TeamOutcomeFragmentToolResultSchema as bB,TeamOutcomeToolResultSchema as KM,TeamReadMailboxInputSchema as yB,TeamReviewOutcomeFragmentInputSchema as hB,TeamRunTaskInputSchema as kB,TeamRunTaskToolResultSchema as C3,TeamRunToolSummarySchema as w3,TeamSendMessageInputSchema as IB,TeamSendMessageToolResultSchema as FM,TeamShutdownTeammateInputSchema as xB,TeamSimpleAgentStatusToolResultSchema as gB,TeamSpawnTeammateInputSchema as mB,TeamStatusInputSchema as vB,TeamStatusToolResultSchema as AM,TeamTaskInputSchema as cB,TeamTaskToolResultSchema as y6,validateWithZod as k,zodToJsonSchema as A0}from"@cline/shared";function uB($,Z){let Q=$.replace(/\s+/g," ").trim();if(Q.length<=Z)return Q;return`${Q.slice(0,Math.max(0,Z-3)).trimEnd()}...`}function F2($,Z){if($===void 0)throw Error(`Missing required field: ${Z}`);return $}function fM($){let Z=$.result;if(!Z)return;return{textPreview:uB(Z.text,WM),iterations:Z.iterations,finishReason:Z.finishReason,durationMs:Z.durationMs,usage:{inputTokens:Z.usage.inputTokens,outputTokens:Z.usage.outputTokens,cacheReadTokens:Z.usage.cacheReadTokens,cacheWriteTokens:Z.usage.cacheWriteTokens,totalCost:Z.usage.totalCost}}}function NZ($){return $?.toISOString()}function P3($){return{id:$.id,agentId:$.agentId,taskId:$.taskId,status:$.status,messagePreview:uB($.message,QM),priority:$.priority,retryCount:$.retryCount,maxRetries:$.maxRetries,nextAttemptAt:NZ($.nextAttemptAt),continueConversation:$.continueConversation,startedAt:$.startedAt.toISOString(),endedAt:NZ($.endedAt),leaseOwner:$.leaseOwner,heartbeatAt:NZ($.heartbeatAt),lastProgressAt:NZ($.lastProgressAt),lastProgressMessage:$.lastProgressMessage,currentActivity:$.currentActivity,error:$.error,resultSummary:fM($)}}function UM($){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 C8=["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 dB($){let Z=[];if($.createBaseTools)Z.push(...$.createBaseTools());Z.push(...A2({runtime:$.runtime,requesterId:$.spec.agentId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!1})),$.runtime.spawnTeammate({agentId:$.spec.agentId,config:K2({kind:"teammate",prompt:$.spec.rolePrompt,role:$.spec.rolePrompt,configProvider:$.teammateConfigProvider,tools:Z,maxIterations:$.spec.maxIterations,cwd:$.teammateConfigProvider.getRuntimeConfig().cwd})})}function w8($){let Z=$.leadAgentId??"lead",Q=$.restoredFromPersistence===!0,W=A2({runtime:$.runtime,requesterId:Z,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!0,includeSpawnTool:$.includeLeadSpawnTool,includeManagementTools:$.includeLeadManagementTools,onLeadToolsUnlocked:$.onLeadToolsUnlocked}),J=[];for(let X of $.restoredTeammates??[]){if($.runtime.isTeammateActive(X.agentId))continue;dB({runtime:$.runtime,requesterId:Z,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:X}),J.push(X.agentId)}return{tools:W,restoredFromPersistence:Q,restoredTeammates:J}}function A2($){let Z=$.allowSpawn??!0,Q=$.includeSpawnTool??!0,W=$.includeManagementTools??!0,J=[];if(Q)J.push(F0({name:"team_spawn_teammate",description:"Spawn a teammate with a required agentId and rolePrompt.",inputSchema:A0(mB),execute:async(Y)=>{let j=k(mB,Y);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");if(!Z)throw Error("Spawning teammates is disabled in this context.");let V={agentId:j.agentId,rolePrompt:j.rolePrompt};if(dB({runtime:$.runtime,requesterId:$.requesterId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:V}),!W)$.onLeadToolsUnlocked?.(A2({...$,includeSpawnTool:!1,includeManagementTools:!0,onLeadToolsUnlocked:void 0}));return k(gB,{agentId:j.agentId,status:"spawned"})}}));if(!W)return J;J.push(F0({name:"team_shutdown_teammate",description:"Shutdown a teammate by agentId.",inputSchema:A0(xB),execute:async(Y)=>{let j=k(xB,Y);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");return $.runtime.shutdownTeammate(j.agentId,j.reason),k(gB,{agentId:j.agentId,status:"stopped"})}})),J.push(F0({name:"team_status",description:"Return a snapshot of team members, task counts, mailbox, and mission log stats.",inputSchema:A0(vB),execute:async(Y)=>{return k(vB,Y),k(AM,$.runtime.getSnapshot())}})),J.push(F0({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:A0(cB),execute:async(Y)=>{let j=k(cB,Y);switch(j.action){case"create":{let V=new Set(JM.create??[]),H=Object.entries(Y).filter(([G,K])=>V.has(G)&&K!=null).map(([G])=>G),B=$.runtime.createTask({title:F2(j.title,"title"),description:F2(j.description,"description"),dependsOn:j.dependsOn,assignee:j.assignee,createdBy:$.requesterId});return k(y6,{action:"create",taskId:B.id,status:B.status,...H.length>0?{ignoredFields:H,note:`Ignored fields for action=create: ${H.join(", ")}`}:{}})}case"list":return k(y6,{action:"list",tasks:$.runtime.listTaskItems({status:j.status,assignee:j.assignee})});case"claim":{let V=$.runtime.claimTask(F2(j.taskId,"taskId"),$.requesterId);return k(y6,{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(F2(j.taskId,"taskId"),$.requesterId,F2(j.summary,"summary"));return k(y6,{action:"complete",taskId:V.id,status:V.status})}case"block":{let V=$.runtime.blockTask(F2(j.taskId,"taskId"),$.requesterId,F2(j.reason,"reason"));return k(y6,{action:"block",taskId:V.id,status:V.status})}}}}));let X=new Map;return J.push(F0({name:"team_run_task",description:"Route a delegated task to a teammate. Choose sync (wait) or async (run in background).",inputSchema:A0(kB),execute:async(Y)=>{let j=k(kB,Y);if(j.runMode==="async"){let B=$.runtime.startTeammateRun(j.agentId,j.task,{taskId:j.taskId||void 0,fromAgentId:$.requesterId,continueConversation:j.continueConversation||void 0});return k(C3,{agentId:j.agentId,mode:"async",status:"queued",dispatched:!0,message:`Task dispatched to ${j.agentId} and queued as ${B.id}.`,runId:B.id})}let V=X.get(j.agentId);if(V){let B=await V;return k(C3,{...B,status:"joined",deduped:!0,message:`Task for ${j.agentId} was already dispatched in this tool batch; joined the existing in-flight run.`})}let H=$.runtime.routeToTeammate(j.agentId,j.task,{taskId:j.taskId||void 0,fromAgentId:$.requesterId,continueConversation:j.continueConversation||void 0}).then((B)=>k(C3,{agentId:j.agentId,mode:"sync",status:"running",dispatched:!0,message:`Task dispatched to ${j.agentId} and completed in sync mode.`,text:B.text,iterations:B.iterations})).finally(()=>{X.delete(j.agentId)});return X.set(j.agentId,H),await H}})),J.push(F0({name:"team_cancel_run",description:"Cancel one async teammate run.",inputSchema:A0(RB),execute:async(Y)=>{let j=k(RB,Y),V=$.runtime.cancelRun(j.runId,j.reason);return k(YM,{runId:V.id,status:V.status})}})),J.push(F0({name:"team_list_runs",description:"List teammate runs started with team_run_task in async mode, including live activity/progress fields when available.",inputSchema:A0(PB),execute:async(Y)=>k(w3.array(),$.runtime.listRuns(k(PB,Y)).map(P3))})),J.push(F0({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:A0(qB),timeoutMs:ZM,execute:async(Y)=>{let j=k(qB,Y);if(j.runId){let B=await $.runtime.awaitRun(j.runId);return UM(B),k(w3,P3(B))}let V=await $.runtime.awaitAllRuns(),H=V.filter((B)=>["failed","cancelled","interrupted"].includes(B.status));if(H.length>0){let B=H.map((G)=>`${G.id}:${G.status}${G.error?`(${G.error})`:""}`).join(", ");throw Error(`One or more runs did not complete successfully: ${B}`)}return k(w3.array(),V.map(P3))}})),J.push(F0({name:"team_send_message",description:"Send a mailbox message to a specific teammate.",inputSchema:A0(IB),execute:async(Y)=>{let j=k(IB,Y),V=$.runtime.sendMessage($.requesterId,j.toAgentId,j.subject,j.body,j.taskId??void 0);return k(FM,{id:V.id,toAgentId:V.toAgentId})}})),J.push(F0({name:"team_broadcast",description:"Broadcast a message to all teammates.",inputSchema:A0(MB),execute:async(Y)=>{let j=k(MB,Y),V=$.runtime.broadcast($.requesterId,j.subject,j.body,{taskId:j.taskId??void 0});return k(XM,{delivered:V.length})}})),J.push(F0({name:"team_read_mailbox",description:"Read the current agent mailbox.",inputSchema:A0(yB),execute:async(Y)=>{let j=k(yB,Y);return k(BM.array(),$.runtime.listMailbox($.requesterId,{unreadOnly:j.unreadOnly,markRead:!0}))}})),J.push(F0({name:"team_mission_log",description:"Append a mission log update for your team.",inputSchema:A0(SB),execute:async(Y)=>{let j=k(SB,Y),V=$.runtime.appendMissionLog({agentId:$.requesterId,taskId:j.taskId||void 0,kind:j.kind,summary:j.summary,evidence:j.evidence?.length?j.evidence:void 0,nextAction:j.nextAction||void 0});return k(GM,{id:V.id})}})),J.push(F0({name:"team_cleanup",description:"Clean up the team runtime. Fails if teammates are still running.",inputSchema:A0(EB),execute:async(Y)=>{if(k(EB,Y),$.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can run cleanup.");return $.runtime.cleanup(),k(jM,{status:"cleaned"})}})),J.push(F0({name:"team_create_outcome",description:"Create a converged team outcome.",inputSchema:A0(NB),execute:async(Y)=>{let j=k(NB,Y),V=$.runtime.createOutcome({title:j.title,requiredSections:j.requiredSections,createdBy:$.requesterId});return k(VM,{outcomeId:V.id,status:V.status,requiredSections:V.requiredSections})}})),J.push(F0({name:"team_attach_outcome_fragment",description:"Attach a fragment to an outcome section.",inputSchema:A0(OB),execute:async(Y)=>{let j=k(OB,Y),V=$.runtime.attachOutcomeFragment({outcomeId:j.outcomeId,section:j.section,sourceAgentId:$.requesterId,sourceRunId:j.sourceRunId||void 0,content:j.content});return k(bB,{fragmentId:V.id,status:V.status})}})),J.push(F0({name:"team_review_outcome_fragment",description:"Review one outcome fragment.",inputSchema:A0(hB),execute:async(Y)=>{let j=k(hB,Y),V=$.runtime.reviewOutcomeFragment({fragmentId:j.fragmentId,reviewedBy:$.requesterId,approved:j.approved});return k(bB,{fragmentId:V.id,status:V.status})}})),J.push(F0({name:"team_finalize_outcome",description:"Finalize one outcome.",inputSchema:A0(CB),execute:async(Y)=>{let j=k(CB,Y),V=$.runtime.finalizeOutcome(j.outcomeId);return k(HM,{outcomeId:V.id,status:V.status})}})),J.push(F0({name:"team_list_outcomes",description:"List team outcomes.",inputSchema:A0(wB),execute:async(Y)=>{return k(wB,Y),k(KM.array(),$.runtime.listOutcomes())}})),J}function CZ($){return{...$,tasks:$.tasks.map((Z)=>({...Z,createdAt:new Date(Z.createdAt),updatedAt:new Date(Z.updatedAt)})),mailbox:$.mailbox.map((Z)=>({...Z,sentAt:new Date(Z.sentAt),readAt:Z.readAt?new Date(Z.readAt):void 0})),missionLog:$.missionLog.map((Z)=>({...Z,ts:new Date(Z.ts)})),runs:($.runs??[]).map((Z)=>({...Z,startedAt:new Date(Z.startedAt),endedAt:Z.endedAt?new Date(Z.endedAt):void 0,nextAttemptAt:Z.nextAttemptAt?new Date(Z.nextAttemptAt):void 0,heartbeatAt:Z.heartbeatAt?new Date(Z.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),finalizedAt:Z.finalizedAt?new Date(Z.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),reviewedAt:Z.reviewedAt?new Date(Z.reviewedAt):void 0}))}}function lB($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}var DM=[{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:M$({configProvider:{}}).description,headlessToolNames:["spawn_agent"]},{id:"teams",description:"Enable team collaboration tools for teammate management, task coordination, mailbox messaging, mission logs, and outcomes.",headlessToolNames:[...C8]}],TM={read_files:"enableReadFiles",search_codebase:"enableSearch",run_commands:"enableBash",fetch_web_content:"enableWebFetch",apply_patch:"enableApplyPatch",editor:"enableEditor",skills:"enableSkills",ask_question:"enableAskQuestion"};function LM($){return $==="plan"||$==="yolo"?$:"act"}function rB($){let Z=LM($.mode),Q=u0[l1({mode:Z})],W=R8($.providerId??"",$.modelId??"",Z,M8);return{mode:Z,flags:{...Q,...W,...typeof $.enableSpawnAgent==="boolean"?{enableSpawnAgent:$.enableSpawnAgent}:{},...typeof $.enableAgentTeams==="boolean"?{enableAgentTeams:$.enableAgentTeams}:{}}}}function pB($,Z){if(Z.disabledToolIds?.has($))return!1;let{flags:Q}=rB(Z);if($==="spawn_agent")return Q.enableSpawnAgent===!0;if($==="teams")return Q.enableAgentTeams===!0;if($==="editor")return Q.enableEditor===!0||Q.enableApplyPatch===!0;let W=TM[$];return W?Q[W]===!0:!1}function _M($,Z){if($.id==="editor"){let{flags:Q}=rB(Z),W=Q.enableApplyPatch===!0&&Q.enableEditor!==!0;return{...$,defaultEnabled:pB($.id,Z),headlessToolNames:[W?"apply_patch":"editor"]}}return{...$,defaultEnabled:pB($.id,Z)}}function f2($={}){return DM.map((Z)=>_M(Z,$))}function wZ($={}){return f2($).filter((Z)=>Z.defaultEnabled).map((Z)=>Z.id)}function PZ($){if(!$.enabled)return new Set;let Z=f2($.availabilityContext),Q=new Set(Z.map((W)=>W.id));if(!$.allowlist||$.allowlist.length===0)return new Set(Z.filter((W)=>W.defaultEnabled).map((W)=>W.id));for(let W of $.allowlist)if(!Q.has(W))throw Error(`Unknown tool "${W}". Available tools: ${Z.map((J)=>J.id).join(", ")}`);return new Set($.allowlist)}function h6($,Z={}){return f2(Z).filter((Q)=>$.has(Q.id)).flatMap((Q)=>Q.headlessToolNames)}function SZ($,Z={}){return h6($,Z)}function U2($={}){let{executorOptions:Z={},executors:Q,...W}=$,J={...q8(Z),...Q??{}};return T$({...W,executors:J})}import{mkdirSync as EM,writeFileSync as NM}from"node:fs";import{dirname as CM}from"node:path";import{normalizeUserInput as wM}from"@cline/shared";import{nanoid as PM}from"nanoid";var nB={};N(nB,{sanitizeSessionToken:()=>D2,parseTeamTaskSubSessionId:()=>S8,parseSubSessionId:()=>I6,makeTeamTaskSubSessionId:()=>k6,makeSubSessionId:()=>P8,deriveSubsessionStatus:()=>x6});import{nanoid as qM}from"nanoid";function D2($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function P8($,Z){let Q=D2($),W=D2(Z),J=`${Q}__${W}`;return J.length>180?J.slice(0,180):J}function k6($,Z){let Q=D2($),W=D2(Z);return`${Q}__teamtask__${W}__${qM(6)}`}function S8($){let Q=$.indexOf("__teamtask__");if(Q<=0)return null;let W=$.slice(0,Q),J=$.slice(Q+12),X=J.lastIndexOf("__");if(X<=0)return null;let Y=J.slice(0,X),j=J.slice(X+2);if(!W||!Y||!j)return null;return{rootSessionId:W,agentId:Y,teamTaskId:j}}function I6($){if(S8($))return null;let Z="__",Q=$.indexOf(Z);if(Q<=0)return null;let W=$.slice(0,Q),J=$.slice(Q+Z.length);if(!W||!J)return null;return{rootSessionId:W,agentId:J}}function x6($){switch($.hookName){case"agent_end":return"completed";case"agent_error":return"failed";case"session_shutdown":{let Z=String($.reason??"").toLowerCase();if(Z.includes("cancel")||Z.includes("abort")||Z.includes("interrupt"))return"cancelled";if(Z.includes("fail")||Z.includes("error"))return"failed";return"completed"}default:return"running"}}import{z as $0}from"zod";var oB={};N(oB,{isTerminalSessionStatus:()=>sB,isNonTerminalSessionStatus:()=>H0,SessionSource:()=>_0,SESSION_STATUSES:()=>g6,NON_TERMINAL_SESSION_STATUSES:()=>aB});import{SESSION_STATUS_VALUES as MM}from"@cline/shared";var g6=MM,aB=["idle","running","pending"];function sB($){return!aB.includes($)}function H0($){return!sB($)}var _0={CORE:"core",CLI:"cli",SUBAGENT:"subagent",DESKTOP:"desktop",KANBAN:"kanban",API:"api",WEB:"web",VSCODE:"vscode",ENTERPRISE:"enterprise",IDE:"ide",JETBRAINS:"jetbrains",NEOVIM:"neovim",UNKNOWN:"unknown"};var RM=$0.enum(g6),b0=$0.object({version:$0.literal(1),session_id:$0.string().min(1),source:$0.string().min(1),pid:$0.number().int(),started_at:$0.string().min(1),ended_at:$0.string().min(1).optional(),exit_code:$0.number().int().nullable().optional(),status:RM,interactive:$0.boolean(),provider:$0.string().min(1),model:$0.string().min(1),cwd:$0.string().min(1),workspace_root:$0.string().min(1),team_name:$0.string().min(1).optional(),enable_tools:$0.boolean(),enable_spawn:$0.boolean(),enable_teams:$0.boolean(),prompt:$0.string().optional(),metadata:$0.record($0.string(),$0.unknown()).optional(),messages_path:$0.string().min(1).optional()});function tB($){if(!$)return!1;return Object.values($).some((Z)=>typeof Z==="function")}function b3($,Z){let Q=[...$??[],...Z??[]];if(Q.length===0)return;let W=[],J=new Set;for(let X of Q){if(J.has(X.name))continue;J.add(X.name),W.push(X)}return W}function eB($){return JSON.stringify($,(Z,Q)=>{if(Q instanceof Error)return{name:Q.name,message:Q.message,stack:Q.stack};return Q})}function p1($){return typeof $==="string"&&$.trim()?$.trim():void 0}function S3($,Z){let Q={...$};Q.id=p1(Q.id)??PM();let W=Q.modelInfo&&typeof Q.modelInfo==="object"?{...Q.modelInfo}:void 0,J={id:p1(W?.id)??p1(Q.modelId)??p1(Z?.id),provider:p1(W?.provider)??p1(Q.providerId)??p1(Z?.provider),family:p1(W?.family)??p1(Z?.family)};if(delete Q.providerId,delete Q.modelId,J.id&&J.provider)Q.modelInfo={id:J.id,provider:J.provider,...J.family?{family:J.family}:{}};else delete Q.modelInfo;return Q}function bZ($){return $.map((Z)=>S3(Z))}function yZ($,Z,Q=[]){let W=$.map((V,H)=>{let B=Q[H],K=B?.role===V.role&&JSON.stringify(B.content)===JSON.stringify(V.content)?{...B,...V}:{...V};return S3(K)}),J=Q.length,X=[];for(let V=J;V<W.length;V+=1)if(W[V]?.role==="assistant")X.push(V);if(X.length===0){let V=[...W].reverse().findIndex((H)=>H.role==="assistant");if(V===-1)return W;X.push(W.length-1-V)}let Y=X[X.length-1],j=X.some((V)=>W[V]?.metrics);for(let V of X){let H=W[V],B=H.metrics;if(!B&&V===Y&&!j){let G=Z.usage;B={inputTokens:G.inputTokens,outputTokens:G.outputTokens,cacheReadTokens:G.cacheReadTokens??0,cacheWriteTokens:G.cacheWriteTokens??0,cost:G.totalCost}}W[V]={...S3(H,{id:Z.model.id,provider:Z.model.provider,family:Z.model.info?.family}),...B?{metrics:B}:{},ts:H.ts??Z.endedAt.getTime()}}return W}function m6($){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 SM=120;function T2($){let Z=$?.trim();return Z?Z.slice(0,SM):void 0}function y3($){let Z=wM($??"").trim();if(!Z)return;return T2(Z.split(`
|
|
471
|
-
`)[0]?.trim())}function
|
|
472
|
-
`,"utf8")}function ZG($,Z){return b0.parse({version:1,session_id:$.sessionId,source:$.source,pid:$.pid,started_at:$.startedAt,ended_at:Z?.endedAt??$.endedAt??void 0,exit_code:Z?.exitCode??$.exitCode??void 0,status:Z?.status??$.status,interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspace_root:$.workspaceRoot,team_name:$.teamName??void 0,enable_tools:$.enableTools,enable_spawn:$.enableSpawn,enable_teams:$.enableTeams,prompt:$.prompt??void 0,metadata:Z?.metadata??$.metadata??void 0,messages_path:$.messagesPath??void 0})}async function QG($,Z,Q){let W=0;while(!0){let J=await $();if(J===void 0)return{updated:!1};let X=await Z(J);if(typeof X==="object"&&X!==null&&"updated"in X&&X.updated===!1){if(W+=1,W>=Q)return X;continue}return X}}L0();var WG={};N(WG,{summarizeUsageFromMessages:()=>y8,sumUsageTotals:()=>c6,getCurrentContextSize:()=>I3,createInitialAccumulatedUsage:()=>D0,accumulateUsageTotals:()=>f0});function D0(){return{inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0}}function f0($,Z){return{inputTokens:$.inputTokens+Math.max(0,Z.inputTokens??0),outputTokens:$.outputTokens+Math.max(0,Z.outputTokens??0),cacheReadTokens:$.cacheReadTokens+Math.max(0,Z.cacheReadTokens??0),cacheWriteTokens:$.cacheWriteTokens+Math.max(0,Z.cacheWriteTokens??0),totalCost:$.totalCost+Math.max(0,Z.totalCost??0)}}function c6($){let Z=D0();for(let Q of $)Z=f0(Z,Q);return Z}function b8($){return typeof $==="number"&&Number.isFinite($)?$:0}function y8($){let Z=D0();for(let Q of $){let W=Q.metrics;if(!W)continue;Z=f0(Z,{inputTokens:b8(W.inputTokens),outputTokens:b8(W.outputTokens),cacheReadTokens:b8(W.cacheReadTokens),cacheWriteTokens:b8(W.cacheWriteTokens),totalCost:b8(W.cost)})}return Z}function I3($){for(let Z=$.length-1;Z>=0;Z-=1){let Q=$[Z];if(Q?.role!=="assistant")continue;let W=b8(Q.metrics?.inputTokens);return W>0?W:void 0}return}function bM($){if(!$||typeof $!=="object")return;let Z=$,Q=Z.skill??Z.skill_name??Z.skillName;if(typeof Q!=="string")return;let W=Q.trim();return W.length>0?W:void 0}function x3($){if(!$||typeof $!=="object")return{};let Z=$;return{agentId:typeof Z.agentId==="string"?Z.agentId:void 0,conversationId:typeof Z.conversationId==="string"?Z.conversationId:void 0,parentAgentId:typeof Z.parentAgentId==="string"?Z.parentAgentId:void 0}}function r1($){let Z=$.agentId?.trim();if(!Z)return;let Q=$.parentAgentId?.trim()||void 0,W=$.teamRole,J="root";if(W==="teammate")J="team_teammate";else if(W==="lead")J="team_lead";else if(Q)J="subagent";return{agentId:Z,agentKind:J,conversationId:$.conversationId?.trim()||void 0,parentAgentId:Q,createdByAgentId:$.createdByAgentId?.trim()||Q||void 0,isSubagent:Boolean(Q),teamId:$.teamId?.trim()||void 0,teamName:$.teamName?.trim()||void 0,teamRole:W,teamAgentId:$.teamAgentId?.trim()||void 0}}function yM($){return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheWriteTokens:$.cacheWriteTokens,cacheReadTokens:$.cacheReadTokens,totalCost:$.cost}}function hM($){let Z=$.isPrimaryAgentEvent?[$.overrides?.agentId,$.eventMetadata.agentId,$.overrides?.teamAgentId]:[$.overrides?.teamAgentId,$.overrides?.agentId,$.eventMetadata.agentId,$.eventMetadata.conversationId];for(let Q of Z){let W=Q?.trim();if(W)return W}return $.isPrimaryAgentEvent?"root":"unknown"}function g3($,Z,Q){let{sessionId:W,config:J,liveSession:X,emit:Y}=$,j=J.telemetry,V=X?.runtime.teamRuntime,H=Q?.isPrimaryAgentEvent??!0,B=x3(Z),G=r1({agentId:Q?.agentId??B.agentId,conversationId:Q?.conversationId??B.conversationId,parentAgentId:Q?.parentAgentId??B.parentAgentId,createdByAgentId:Q?.createdByAgentId,teamId:Q?.teamId??V?.getTeamId(),teamName:Q?.teamName??V?.getTeamName(),teamRole:Q?.teamRole,teamAgentId:Q?.teamAgentId});if(Z.type==="content_start"&&Z.contentType==="tool"&&Z.toolName==="skills"){let K=bM(Z.input);if(K)E9(j,{ulid:W,skillName:K,skillSource:"project",skillsAvailableGlobal:0,skillsAvailableProject:0,provider:J.providerId,modelId:J.modelId,...G})}if(Z.type==="content_end"&&Z.contentType==="tool"){let K=Z.toolName??"unknown",F=!Z.error;if(W8(j,{ulid:W,tool:K,autoApproved:void 0,success:F,modelId:J.modelId,provider:J.providerId,...G}),!F&&(K==="editor"||K==="apply_patch"))N9(j,{ulid:W,modelId:J.modelId,provider:J.providerId,errorType:Z.error,...G})}if(Z.type==="notice"&&Z.reason==="api_error")m4(j,{ulid:W,model:J.modelId,provider:J.providerId,errorMessage:Z.message,...G});if(Z.type==="error")m4(j,{ulid:W,model:J.modelId,provider:J.providerId,errorMessage:Z.error?.message??"unknown error",...G});if(Z.type==="usage"&&X?.turnUsageBaseline){let K=yM(Z);if(H){X.turnPrimaryUsage=f0(X.turnPrimaryUsage??D0(),K);let A=f0(X.turnUsageBaseline,X.turnPrimaryUsage);$.usageBySession.set(W,A),Q8(j,{ulid:W,provider:J.providerId,model:J.modelId,source:"assistant",mode:J.mode,...G}),M9(j,{ulid:W,tokensIn:Z.inputTokens,tokensOut:Z.outputTokens,cacheWriteTokens:Z.cacheWriteTokens,cacheReadTokens:Z.cacheReadTokens,totalCost:Z.cost,model:J.modelId,...G})}else{let A=hM({isPrimaryAgentEvent:H,overrides:Q,eventMetadata:B}),D=X.turnUsageByAgent??new Map;X.turnUsageByAgent=D,D.set(A,f0(D.get(A)??D0(),K))}let F=f0(X.turnPrimaryUsage??D0(),c6(X.turnUsageByAgent?.values()??[]));$.aggregateUsageBySession.set(W,f0(X.turnAggregateUsageBaseline??X.turnUsageBaseline,F))}if(Z.type==="iteration_end"&&H)$.persistMessages(W,X?.agent.getMessages()??[],X?.config.systemPrompt);Y({type:"agent_event",payload:{sessionId:W,event:Z,teamAgentId:Q?.teamAgentId,teamRole:Q!==void 0?Q.teamRole??(H?"lead":void 0):void 0}}),Y({type:"chunk",payload:{sessionId:W,stream:"agent",chunk:eB(Z),ts:Date.now()}})}function E$($){return $.workspaceRoot??$.cwd}import{hasRuntimeConfigExtension as uE}from"@cline/shared";$1();import{existsSync as mZ,readFileSync as zR,statSync as OR}from"node:fs";import{basename as qR,dirname as xZ,join as vZ,resolve as gZ}from"node:path";import{discoverPluginModulePaths as MR,resolveConfiguredPluginModulePaths as MG,resolvePluginConfigSearchPaths as RR,SKILLS_CONFIG_DIRECTORY_NAME as ER}from"@cline/shared/storage";import{resolve as $R}from"node:path";import{normalizePluginManifest as ZR}from"@cline/shared";import{existsSync as z0,readFileSync as k8}from"node:fs";import{builtinModules as kM,createRequire as u3}from"node:module";import{dirname as N$,extname as d6,isAbsolute as IM,resolve as p}from"node:path";import{fileURLToPath as XG}from"node:url";import{PLUGIN_FILE_EXTENSIONS as xM}from"@cline/shared";var YG=N$(XG(import.meta.url)),gM=u3(import.meta.url),mM=p(YG,"..","..","..","..",".."),m3=uM(mM),vM=["@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"],d3=new Set(kM.flatMap(($)=>[$,$.replace(/^node:/,"")])),u6=new Set(xM),cM=["development","node","import","require","default"];function uM($){let Z={},Q={"@cline/sdk":p($,"packages/sdk/src/index.ts"),"@cline/agents":p($,"packages/agents/src/index.ts"),"@cline/core":p($,"packages/core/src/index.ts"),"@cline/llms":p($,"packages/llms/src/index.ts"),"@cline/shared":p($,"packages/shared/src/index.ts"),"@cline/shared/storage":p($,"packages/shared/src/storage/index.ts"),"@cline/shared/db":p($,"packages/shared/src/db/index.ts")};for(let[W,J]of Object.entries(Q))if(z0(J))Z[W]=J;for(let W of["agents","core","llms","shared"]){let J=p($,"packages",W),X=p(J,"package.json");if(!z0(X))continue;try{let Y=JSON.parse(k8(X,"utf8"));if(typeof Y.name!=="string"||!Y.exports)continue;if(typeof Y.exports==="string"){let j=p(J,Y.exports);if(z0(j))Z[Y.name]=j;continue}if(typeof Y.exports!=="object")continue;for(let[j,V]of Object.entries(Y.exports)){let H=dM(J,V);if(!H)continue;let B=j==="."?Y.name:`${Y.name}/${j.replace(/^\.\//,"")}`;Z[B]=H}}catch{}}return Z}function dM($,Z){let Q=l3(Z);if(!Q)return null;let W=jG($,Q);for(let J of W)if(z0(J))return J;return null}function l3($,Z=new Set){if(typeof $==="string")return $;if(!$||typeof $!=="object")return null;if(Z.has($))return null;Z.add($);let Q=$;for(let W of cM){let J=l3(Q[W],Z);if(J)return J}return null}function jG($,Z){let Q=Z.replace(/^\.\//,""),W=[p($,Z)];if(Q.startsWith("dist/")){let J=Q.replace(/^dist\//,"src/").replace(/\.(mjs|cjs|js)$/,"");return[p($,`${J}.ts`),p($,`${J}.tsx`),p($,`${J}.mts`),p($,`${J}.cts`),...W]}return W}function lM($){return Object.fromEntries(Object.entries($).sort(([Z],[Q])=>Q.length-Z.length))}function hZ($){return!($.startsWith(".")||$.startsWith("/")||$.startsWith("file:")||$.startsWith("data:")||$.startsWith("http:")||$.startsWith("https:"))}function h8($){if($.startsWith("@")){let[Z,Q]=$.split("/",3);return Q?`${Z}/${Q}`:$}return $.split("/",1)[0]??$}function pM($){let Z=h8($);if($===Z)return".";return`.${$.slice(Z.length)}`}function VG($){return h8($).startsWith("@cline/")}function v3($,Z){let Q=h8(Z),W=N$($);while(!0){let J=p(W,"node_modules",Q);if(z0(J)||z0(p(J,"package.json")))return!0;let X=p(W,"..");if(X===W)return!1;W=X}}function JG($){return c3($)!==null}function c3($){try{return gM.resolve($)}catch{}return rM($)}function rM($){let Z=h8($),Q=HG(Z);if(!Q)return null;let W=p(Q,"package.json");try{let J=JSON.parse(k8(W,"utf8")),X=pM($),Y=X==="."&&typeof J.exports==="string"?J.exports:J.exports&&typeof J.exports==="object"&&Object.hasOwn(J.exports,X)?J.exports[X]:void 0,j=l3(Y)??(X==="."&&typeof J.main==="string"?J.main:null);if(!j)return null;let V=p(Q,j),H=[V,...jG(Q,j).filter((B)=>B!==V)];for(let B of H)if(z0(B))return B;return null}catch{return null}}function iM(){let $=[YG],Z=process.env.CLINE_WRAPPER_PATH?.trim();if(Z)$.push(N$(N$(Z)));let Q=process.execPath?.trim();if(Q)$.push(N$(Q));return[...new Set($.map((W)=>p(W)))]}function nM($,Z){let Q=$;while(!0){let W=p(Q,"package.json");if(z0(W))try{if(JSON.parse(k8(W,"utf8")).name===Z)return Q}catch{}let J=p(Q,"node_modules",Z,"package.json");if(z0(J))return N$(J);let X=p(Q,"..");if(X===Q)return null;Q=X}}function HG($){for(let Z of iM()){let Q=nM(Z,$);if(Q)return Q}return null}function aM($){let Q=N$($);for(let W=0;W<4;W++){let J=p(Q,"package.json");if(z0(J))try{let Y=JSON.parse(k8(J,"utf8"));return Y!=null&&typeof Y==="object"&&"cline"in Y}catch{return!1}let X=p(Q,"..");if(X===Q)return!1;Q=X}return!1}function BG($,Z){let Q=Z.startsWith("file:")?XG(Z):IM(Z)?Z:p(N$($),Z);if(z0(Q)&&u6.has(d6(Q)))return Q;for(let W of u6){let J=`${Q}${W}`;if(z0(J))return J}for(let W of u6){let J=p(Q,`index${W}`);if(z0(J))return J}return null}function GG($){let Z=new Set,Q=[/\bimport\s+(?:type\s+)?[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bexport\s+[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bimport\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g,/\brequire\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g];for(let W of Q)for(let J of $.matchAll(W)){let X=J[1];if(X)Z.add(X)}return[...Z]}function sM($){return d6($)!==".ts"}function KG($,Z,Q=new Set){if(Q.has($)||!z0($))return;if(Q.add($),!u6.has(d6($)))return;let W=k8($,"utf8"),J=sM($);for(let X of GG(W)){if(X.startsWith("node:")||d3.has(X))continue;if(hZ(X)){if(!J)continue;if(Object.hasOwn(m3,X)||Object.hasOwn(m3,h8(X))||v3($,X)||VG(X)&&JG(X)||Z&&JG(X))continue;throw Error(`Cannot find module '${h8(X)}'`)}let Y=BG($,X);if(Y)KG(Y,Z,Q)}}function FG($,Z=new Set,Q=new Set){if(Z.has($)||!z0($))return Q;if(Z.add($),!u6.has(d6($)))return Q;let W=k8($,"utf8");for(let J of GG(W)){if(Q.add(J),hZ(J))continue;let X=BG($,J);if(X)FG(X,Z,Q)}return Q}function oM($,Z){let Q=u3($),W={},J=FG($),X=new Set(vM);for(let[Y,j]of Object.entries(m3)){try{Q.resolve(Y);continue}catch{}W[Y]=j}for(let Y of J)if(hZ(Y)&&(VG(Y)||Z))X.add(Y);for(let Y of X){if(Object.hasOwn(W,Y)||v3($,Y))continue;let j=c3(Y);if(j)W[Y]=j}if(!Z)return W;for(let Y of J){if(!hZ(Y)||Object.hasOwn(W,Y)||v3($,Y)||Y.startsWith("node:")||d3.has(Y))continue;let j=c3(Y);if(j)W[Y]=j}return W}function tM($){let Z=d6($);return Z===".ts"||Z===".tsx"||Z===".mts"||Z===".cts"}var L2;function eM(){if(L2!==void 0)return L2;let $=HG("jiti");if(!$)return L2=null,null;let Z=p($,"dist","babel.cjs");if(!z0(Z))return L2=null,null;try{let W=u3(Z)(Z);L2=typeof W==="function"?W:null}catch{L2=null}return L2}async function AG($,Z={}){let Q=!aM($);KG($,Q);let W=oM($,Q),J=lM(W),X=await import("jiti"),Y=typeof X==="function"?X:typeof X.default==="function"?X.default:void 0;if(!Y)throw Error("Unable to load jiti");let j=Object.entries(J).filter(([,G])=>tM(G)).map(([G])=>G),V=eM(),H=V?(G)=>V({...G,interopDefault:!0}):void 0;return await Y($,{alias:J,cache:Z.useCache,requireCache:Z.useCache,esmResolve:!0,interopDefault:!1,nativeModules:[...d3],transformModules:j,tryNative:!1,...H?{transform:H}:{}}).import($,{})}function fG($,Z){if(!$)return!0;if($.providerIds?.length){if(!Z?.providerId||!$.providerIds.includes(Z.providerId))return!1}if($.modelIds?.length){if(!Z?.modelId||!$.modelIds.includes(Z.modelId))return!1}return!0}function UG($){return typeof $==="object"&&$!==null}function p3($){return Array.isArray($)&&$.every((Z)=>typeof Z==="string")}function QR($,Z){if(!UG($.manifest))throw Error(`Invalid plugin module at ${Z}: missing required "manifest"`);if(!p3($.manifest.capabilities))throw Error(`Invalid plugin module at ${Z}: manifest.capabilities must be a string array`);if($.manifest.capabilities.length===0)throw Error(`Invalid plugin module at ${Z}: manifest.capabilities cannot be empty`);if(Object.hasOwn($.manifest,"providerIds")&&!p3($.manifest.providerIds))throw Error(`Invalid plugin module at ${Z}: manifest.providerIds must be a string array when provided`);if(Object.hasOwn($.manifest,"modelIds")&&!p3($.manifest.modelIds))throw Error(`Invalid plugin module at ${Z}: manifest.modelIds must be a string array when provided`)}function WR($,Z){if(!UG($))throw Error(`Invalid plugin module at ${Z}: expected object export`);if(typeof $.name!=="string"||$.name.length===0)throw Error(`Invalid plugin module at ${Z}: expected non-empty "name"`);if(!Object.hasOwn($,"manifest"))throw Error(`Invalid plugin module at ${Z}: missing required "manifest"`);QR($,Z)}async function l6($,Z={}){let Q=$R(Z.cwd??process.cwd(),$),W=await AG(Q,{useCache:Z.useCache}),J=Z.exportName??"plugin",X=W.default??W[J];WR(X,Q);let Y=X,j=Y.setup,V=j?(H,B)=>{let G={...Z.session,...B.session},K={...B,session:Object.keys(G).length>0?G:void 0,client:Z.client??B.client,user:Z.user??B.user,workspaceInfo:Z.workspaceInfo??B.workspaceInfo,automation:Z.automation??B.automation,logger:Z.logger??B.logger,telemetry:Z.telemetry??B.telemetry};return j(H,K)}:void 0;return{...Y,manifest:ZR(Y.manifest),setup:V}}async function kZ($,Z={}){return(await _2($,Z)).plugins}async function _2($,Z={}){let Q=[],W=[],J=new Map,X=0;for(let j of $)try{let V=await l6(j,Z);if(!fG(V.manifest,Z))continue;let H=J.get(V.name);if(H)W.push({type:"duplicate_plugin_override",pluginName:V.name,pluginPath:j,overriddenPluginPath:H.pluginPath,message:`Plugin "${V.name}" from ${j} overrides ${H.pluginPath}`});J.set(V.name,{plugin:V,pluginPath:j,order:X++})}catch(V){let H=V instanceof Error?V.message:String(V);Q.push({pluginPath:j,phase:"load",message:H,stack:V instanceof Error?V.stack:void 0})}let Y=[...J.values()].sort((j,V)=>j.order-V.order);return{plugins:Y.map((j)=>j.plugin),pluginPaths:Y.map((j)=>j.pluginPath),failures:Q,warnings:W}}import{existsSync as a3}from"node:fs";import{createRequire as qG}from"node:module";import{dirname as IZ,join as x8}from"node:path";import{fileURLToPath as VR}from"node:url";var zG={};N(zG,{resolveSubprocessRuntimeExecutable:()=>r3,buildSubprocessSandboxCommand:()=>_G,SubprocessSandbox:()=>I8,CLINE_JS_RUNTIME_PATH_ENV:()=>LG});import{spawn as JR}from"node:child_process";import{basename as XR}from"node:path";import{augmentNodeCommandForDebug as YR,withResolvedClineBuildEnv as jR}from"@cline/shared";function DG($){if($ instanceof Error)return $;return Error(String($))}var LG="CLINE_JS_RUNTIME_PATH";function TG($){let Z=$?.trim();if(!Z)return!1;let Q=XR(Z).toLowerCase();return Q==="node"||Q==="node.exe"||Q==="bun"||Q==="bun.exe"}function r3($={}){let Z=$.env??process.env,Q=$.runtimeExecutable?.trim()||Z[LG]?.trim();if(Q)return Q;let W=$.execPath?.trim()||process.execPath;if(TG(W))return W;for(let J of[Z.BUN_EXEC_PATH,Z.npm_node_execpath,Z.NODE]){let X=J?.trim();if(X&&TG(X))return X}return"node"}function _G($,Z={}){let Q=r3({env:Z.env,execPath:Z.execPath,runtimeExecutable:Z.runtimeExecutable});return YR([Q,...$],{env:Z.env,execArgv:Z.execArgv,debugRole:Z.name==="plugin-sandbox"?"plugin-sandbox":"sandbox"})}class I8{options;process=null;requestCounter=0;pending=new Map;constructor($){this.options=$}get processLabel(){return this.options.name??"sandbox"}clearPendingRequest($){let Z=this.pending.get($);if(!Z)return;if(this.pending.delete($),Z.timeout)clearTimeout(Z.timeout);return Z}start(){if(this.process&&this.process.exitCode===null)return;let $=this.options.bootstrapFile?[this.options.bootstrapFile]:["-e",this.options.bootstrapScript??""],Z=_G($,{name:this.options.name,runtimeExecutable:this.options.runtimeExecutable}),Q=JR(Z[0]??r3(this.options),Z.slice(1),{stdio:["ignore","ignore","pipe","ipc"],env:jR(process.env),windowsHide:!0});this.process=Q;let W="",J=(X)=>{let Y=W+X;W=Y.length>4000?Y.slice(-4000):Y};Q.stderr?.setEncoding("utf8"),Q.stderr?.on("data",(X)=>{J(X)}),Q.on("message",(X)=>{this.onMessage(X)}),Q.on("error",(X)=>{this.failPending(Error(`${this.processLabel} process error: ${DG(X).message}`))}),Q.on("exit",(X,Y)=>{this.process=null;let j=W.trim();this.failPending(Error(`${this.options.name??"sandbox"} process exited (code=${String(X)}, signal=${String(Y)})${j?`: ${j}`:""}`))})}async call($,Z,Q={}){this.start();let W=this.process;if(!W||W.exitCode!==null)throw Error(`${this.processLabel} process is not available`);let J=`req_${++this.requestCounter}`,X={type:"call",id:J,method:$,args:Z};return await new Promise((Y,j)=>{let V={resolve:(H)=>Y(H),reject:j};if((Q.timeoutMs??0)>0)V.timeout=setTimeout(()=>{this.clearPendingRequest(J),this.shutdown().catch(()=>{}),j(Error(`${this.processLabel} call timed out after ${Q.timeoutMs}ms: ${$}`))},Q.timeoutMs);this.pending.set(J,V),W.send(X,(H)=>{if(!H)return;let B=this.clearPendingRequest(J);if(!B)return;B.reject(Error(`${this.processLabel} failed to send call "${$}": ${DG(H).message}`))})})}async shutdown(){let $=this.process;if(this.process=null,!$||$.exitCode!==null){this.failPending(Error(`${this.processLabel} shutdown`));return}await new Promise((Z)=>{let Q=setTimeout(()=>{try{$.kill("SIGKILL")}catch{}Z()},300);$.once("exit",()=>{clearTimeout(Q),Z()});try{$.kill("SIGTERM")}catch{clearTimeout(Q),Z()}}),this.failPending(Error(`${this.processLabel} shutdown`))}onMessage($){if(!$)return;if($.type==="event"){if(typeof $.name==="string"&&$.name.length>0)this.options.onEvent?.({name:$.name,payload:$.payload});return}if($.type!=="response"||!$.id)return;let Z=this.clearPendingRequest($.id);if(!Z)return;if($.ok){Z.resolve($.result);return}Z.reject(Error($.error?.message||`${this.processLabel} call failed`))}failPending($){for(let[Z,Q]of this.pending.entries()){if(this.pending.delete(Z),Q.timeout)clearTimeout(Q.timeout);Q.reject($)}}}function HR($){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 p6($){return($ instanceof Error?$.message:String($)).includes("Unknown sandbox plugin id:")}function BR(){return`@cline/cli-${process.platform==="win32"?"windows":process.platform}-${process.arch}`}function GR(){let $=process.env.CLINE_WRAPPER_PATH?.trim();if(!$)return;try{let Q=qG($).resolve(`${BR()}/package.json`),W=x8(IZ(Q),"extensions","plugin-sandbox-bootstrap.js");return a3(W)?W:void 0}catch{return}}function KR(){let $=process.execPath?.trim();if(!$)return;let Z=x8(IZ(IZ($)),"extensions","plugin-sandbox-bootstrap.js");return a3(Z)?Z:void 0}function FR(){let $=IZ(VR(import.meta.url)),Z=qG(import.meta.url),Q=[x8($,"plugin-sandbox-bootstrap.js"),x8($,"extensions","plugin-sandbox-bootstrap.js"),x8($,"agents","plugin-sandbox-bootstrap.js"),GR(),KR()];for(let X of Q.filter((Y)=>typeof Y==="string"))if(a3(X))return{file:X};let W=x8($,"plugin-sandbox-bootstrap.ts"),J="jiti";try{J=Z.resolve("jiti")}catch{}return{script:[`const createJiti = require(${JSON.stringify(J)});`,`const jiti = createJiti(${JSON.stringify(W)}, { cache: false, requireCache: false, esmResolve: true, interopDefault: false });`,`Promise.resolve(jiti.import(${JSON.stringify(W)}, {})).catch((error) => {`," console.error(error);"," process.exitCode = 1;","});"].join(`
|
|
473
|
-
`)}}var i3=
|
|
474
|
-
`).filter(Boolean);await Promise.allSettled(J.map((X)=>z2($,["update-ref","-d",X])))}catch{}}async function
|
|
475
|
-
`),W=[...$.appendMessages??[],...Z.appendMessages??[]];return{cancel:$.cancel===!0||Z.cancel===!0?!0:void 0,review:$.review===!0||Z.review===!0?!0:void 0,context:Q||void 0,overrideInput:Z.overrideInput!==void 0?Z.overrideInput:$.overrideInput,systemPrompt:Z.systemPrompt!==void 0?Z.systemPrompt:$.systemPrompt,appendMessages:W.length>0?W:void 0}}function
|
|
476
|
-
`).map((X)=>X.trim()).filter(Boolean).filter((X)=>X.startsWith("HOOK_CONTROL\t")).map((X)=>X.slice(13)),J=W.length>0?W[W.length-1]:Z;try{return{parsedJson:JSON.parse(J)}}catch(X){return{parseError:X instanceof Error?X.message:"Failed to parse hook stdout JSON"}}}async function
|
|
477
|
-
`,Y=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??sR(SG(),"hooks.jsonl");SG(Y),nR(Y,J,"utf8")};return{beforeRun:async(W)=>{let J=QJ(W,"");Q({...O0(J,Z),hookName:"agent_start",taskStart:{taskMetadata:{}}});return},beforeTool:async(W)=>{let J=IG(W);Q({...O0(J,Z),hookName:"tool_call",iteration:J.iteration,tool_call:{id:J.call.id,name:J.call.name,input:J.call.input},preToolUse:{toolName:J.call.name,parameters:dZ(J.call.input)}});return},afterTool:async(W)=>{let J=xG(W);Q({...O0(J,Z),hookName:"tool_result",iteration:J.iteration,tool_result:J.record,postToolUse:{toolName:J.record.name,parameters:dZ(J.record.input),result:typeof J.record.output==="string"?J.record.output:JSON.stringify(J.record.output),success:!J.record.error,executionTimeMs:J.record.durationMs}});return},afterRun:async({snapshot:W,result:J})=>{let X=w$(W);if(J.status==="completed"){Q({...O0(X,Z),hookName:"agent_end",iteration:J.iterations,turn:{outputText:J.outputText,status:J.status},taskComplete:{taskMetadata:{}}});return}if(J.status==="aborted"||ZJ(J.error?.message)){Q({...O0(X,Z),hookName:"agent_abort",reason:J.error?.message,taskCancel:{taskMetadata:{}}});return}if(J.error)Q({...O0(X,Z),hookName:"agent_error",iteration:J.iterations,error:{name:J.error.name,message:J.error.message,stack:J.error.stack}})},onEvent:async(W)=>{if(W.type!=="message-added"||W.message.role!=="user")return;let J=QJ({snapshot:W.snapshot},gG(W.message.content));Q({...O0(J,Z),hookName:"prompt_submit",userPromptSubmit:{prompt:J.userMessage,attachments:[]}})}}}function o6($){let Z=XE($.workspacePath);if(!Object.values(Z).some((G)=>G.length>0))return;let W=async(G,K)=>{let F=Z[K]??[];if(F.length===0)return;O2({commands:F,cwd:$.cwd,logger:$.logger,payload:K==="agent_resume"?{...O0(G,$),hookName:K,taskResume:{taskMetadata:{},previousState:{}}}:{...O0(G,$),hookName:K,taskStart:{taskMetadata:{}}}})},J=async(G)=>{let K=Z.prompt_submit??[];if(K.length>0)O2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...O0(G,$),hookName:"prompt_submit",userPromptSubmit:{prompt:G.userMessage,attachments:[]}}})},X=async(G)=>{let K=Z.tool_call??[];if(K.length===0)return;return YE({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:dZ(G.call.input)}}})},Y=async(G)=>{let K=Z.tool_result??[];if(K.length===0)return;O2({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:dZ(G.record.input),result:typeof G.record.output==="string"?G.record.output:JSON.stringify(G.record.output),success:!G.record.error,executionTimeMs:G.record.durationMs}}})},j=async(G)=>{let K=Z.agent_end??[];if(K.length===0)return;O2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...O0(G,$),hookName:"agent_end",iteration:G.iteration,turn:G.turn,taskComplete:{taskMetadata:{}}}})},V=async(G)=>{let K=Z.agent_error??[];if(K.length===0)return;O2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...O0(G,$),hookName:"agent_error",iteration:G.iteration,error:{name:G.error.name,message:G.error.message,stack:G.error.stack}}})},H=async(G)=>{if(ZJ(G.reason)){let F=Z.agent_abort??[];if(F.length>0)O2({commands:F,cwd:$.cwd,logger:$.logger,payload:{...O0(G,$),hookName:"agent_abort",reason:G.reason,taskCancel:{taskMetadata:{}}}})}let K=Z.session_shutdown??[];if(K.length===0)return;O2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...O0(G,$),hookName:"session_shutdown",reason:G.reason}})},B={};if((Z.agent_start?.length??0)>0||(Z.agent_resume?.length??0)>0||(Z.prompt_submit?.length??0)>0){if((Z.agent_start?.length??0)>0||(Z.agent_resume?.length??0)>0)B.beforeRun=async(G)=>{let K=process.env.CLINE_HOOK_AGENT_RESUME==="1"?"agent_resume":"agent_start";await W(w$(G.snapshot),K);return};if((Z.prompt_submit?.length??0)>0)B.onEvent=async(G)=>{if(G.type!=="message-added"||G.message.role!=="user")return;await J(QJ({snapshot:G.snapshot},gG(G.message.content)))}}if((Z.tool_call?.length??0)>0)B.beforeTool=async(G)=>{let K=await X(IG(G));return jE(K)};if((Z.tool_result?.length??0)>0)B.afterTool=async(G)=>{await Y(xG(G));return};if((Z.agent_end?.length??0)>0)B.afterRun=async({snapshot:G,result:K})=>{if(K.status!=="completed")return;await j({...w$(G),iteration:K.iterations,turn:{outputText:K.outputText,status:K.status}})};if((Z.agent_error?.length??0)>0||(Z.agent_abort?.length??0)>0||(Z.session_shutdown?.length??0)>0){let G=B.afterRun;B.afterRun=async(K)=>{await G?.(K);let{snapshot:F,result:A}=K;if(A.status==="aborted"||ZJ(A.error?.message)){await H({...w$(F),reason:A.error?.message});return}if(A.error)await V({...w$(F),iteration:A.iterations,error:A.error})}}return B}function d8($){return v8("core.hook_config_files",o6($))}function q2($,Z){let Q=$.map((W)=>W[Z]).filter((W)=>typeof W==="function");if(Q.length===0)return;return async(W)=>{let J;for(let X of Q){let Y=await X(W);if(!Y||typeof Y!=="object")continue;let j=Y;J={...J??{},...j,stop:J?.stop===!0||j.stop===!0?!0:j.stop,options:J?.options||j.options?{...J?.options??{},...j.options??{}}:void 0}}return J}}function M2($){let Z=$.filter((Q)=>Q!==void 0);if(Z.length===0)return;return{beforeRun:q2(Z,"beforeRun"),afterRun:q2(Z,"afterRun"),beforeModel:q2(Z,"beforeModel"),afterModel:q2(Z,"afterModel"),beforeTool:q2(Z,"beforeTool"),afterTool:q2(Z,"afterTool"),onEvent:q2(Z,"onEvent")}}var mG={};N(mG,{normalizeRuntimeCapabilities:()=>q0});function q0(...$){let Z,Q;for(let J of $){if(!J)continue;if(J.toolExecutors)Z={...Z??{},...J.toolExecutors};if(J.requestToolApproval)Q=J.requestToolApproval}let W=Z&&Object.keys(Z).length>0;if(!W&&!Q)return;return{...W?{toolExecutors:Z}:{},...Q?{requestToolApproval:Q}:{}}}var nG={};N(nG,{toProviderConfig:()=>l0,emptyStoredProviderSettings:()=>b$,StoredProviderSettingsSchema:()=>i8,StoredProviderSettingsEntrySchema:()=>KQ,ProviderSettingsSchemaTyped:()=>r8});import{z as S$}from"zod";var iG={};N(iG,{toProviderConfig:()=>l0,safeParseSettings:()=>GQ,safeCreateProviderConfig:()=>FJ,parseSettings:()=>BQ,normalizeProviderId:()=>p8,isBuiltInProviderId:()=>GJ,createProviderConfig:()=>KJ,SapSettingsSchema:()=>jQ,ReasoningSettingsSchema:()=>WQ,ProviderSettingsSchema:()=>P$,ProviderProtocolSchema:()=>$Q,ProviderIdSchema:()=>Q5,ProviderClientSchema:()=>ZQ,OcaSettingsSchema:()=>VQ,ModelCatalogSettingsSchema:()=>HQ,GcpSettingsSchema:()=>XQ,BUILT_IN_PROVIDER_IDS:()=>BJ,BUILT_IN_PROVIDER:()=>Z5,AzureSettingsSchema:()=>YQ,AwsSettingsSchema:()=>JQ,AuthSettingsSchema:()=>QQ});import*as d0 from"@cline/llms";import{z as C}from"zod";var rG={};N(rG,{resolveProviderConfig:()=>$5,getProviderConfig:()=>eZ,getLiveModelsCatalog:()=>l8,clearPublicModelsCatalogCache:()=>PE,clearPrivateModelsCatalogCache:()=>HJ,clearLiveModelsCatalogCache:()=>VJ,OPENAI_COMPATIBLE_PROVIDERS:()=>e6,DEFAULT_MODELS_CATALOG_URL:()=>aZ});import*as s from"@cline/llms";function JJ($){if(!Array.isArray($))return[];return $.map((Z)=>{if(typeof Z==="string")return Z.trim();if(Z&&typeof Z==="object"){let Q=Z;for(let W of[Q.id,Q.name,Q.model])if(typeof W==="string"&&W.trim())return W.trim()}return""}).filter((Z)=>Z.length>0)}function VE($,Z){let Q=JJ($);if(Q.length>0)return Q;if(!$||typeof $!=="object")return[];let W=$,J=JJ(W.data??W.models);if(J.length>0)return J;if(W.models&&typeof W.models==="object"&&!Array.isArray(W.models)){let Y=Object.keys(W.models).filter((j)=>j.trim().length>0);if(Y.length>0)return Y}let X=W.providers?.[Z];if(X&&typeof X==="object"){let j=JJ(X.models??X);if(j.length>0)return j}return[]}async function lZ($,Z){let Q=await fetch($,{method:"GET"});if(!Q.ok)throw Error(`failed to fetch models from ${$}: HTTP ${Q.status}`);return VE(await Q.json(),Z)}function vG($){return $.replace(/\/+$/,"")}function pZ($,Z,Q){let W=Q?.trim();if(!W)return;let J=$?.trim();if(!J||!Z?.trim())return W;try{let X=new URL(W),Y=new URL(Z),j=new URL(J);if(X.origin!==Y.origin)return W;let V=vG(Y.pathname),H=vG(j.pathname);if(V&&X.pathname.startsWith(`${V}/`)){let B=X.pathname.slice(V.length);j.pathname=`${H}${B}`}else j.pathname=X.pathname;return j.search=X.search,j.hash=X.hash,j.toString()}catch{return W}}function HE($){return Object.fromEntries(Object.entries($).map(([Z,Q])=>[Z,{...Q}]))}function BE($){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 GE=Object.values(s.MODEL_COLLECTIONS_BY_PROVIDER_ID).map(($)=>({id:$.provider.id,baseUrl:$.provider.baseUrl??"",modelsSourceUrl:$.provider.modelsSourceUrl,modelId:$.provider.defaultModelId,knownModels:HE($.models),capabilities:$.provider.capabilities?[...$.provider.capabilities]:void 0,env:$.provider.env?[...$.provider.env]:void 0,client:$.provider.client,protocol:$.provider.protocol})),uG=Object.fromEntries(GE.map(($)=>[$.id,$]));function KE($){return uG[$]}function FE(){return Object.fromEntries(Object.entries(uG).filter(([,$])=>BE($)))}function dG($=[]){let Z=$.flatMap((Q)=>{switch(Q){case"reasoning":case"prompt-cache":case"tools":case"oauth":return[Q];default:return[]}});return Z.length>0?Z:void 0}var aZ="https://models.dev/api.json",AE=600000,lG=300000,fE=5000,nZ=new Map,t6=new Map,XJ=new Map,rZ=new Map;async function UE(){return s.getGeneratedProviderModels()}async function DE($,Z={},Q={},W={},J={},X={}){if($==="litellm")return s.sortModelsByReleaseDate(W);let Y=await UE(),j=s.resolveProviderModelCatalogKeys($),V=Object.assign({},...j.map((K)=>Y[K]??{})),H=Boolean(s.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl),B=Object.keys(J).length>0;if(H&&B)return s.sortModelsByReleaseDate({...J,...X});if($==="openai-codex")return s.sortModelsByReleaseDate({...Z,...s.filterOpenAICodexModels(Q),...J,...X});if($==="cline-pass"&&Object.keys(Q).length>0)return s.sortModelsByReleaseDate({...Q,...X});let G=s.sortModelsByReleaseDate({...V,...Z,...Q,...W,...J});if($==="cline")return s.sortModelsByReleaseDate({...s.preferCanonicalModelIds(G,s.VERCEL_OPENROUTER_MODEL_ID_ALIAS_RULES),...X});return s.sortModelsByReleaseDate({...G,...X})}function TE($,Z){let Q=s.resolveProviderModelCatalogKeys($);return Object.assign({},...Q.map((W)=>Z[W]??{}))}function sZ($){let Z=$?.trim();return Z&&Z.length>0?Z:""}function jJ($){let Z=$.apiKey?.trim()||$.accessToken?.trim();return Z&&Z.length>0?Z:void 0}function LE($){let Z=2166136261;for(let Q=0;Q<$.length;Q+=1)Z^=$.charCodeAt(Q),Z+=(Z<<1)+(Z<<4)+(Z<<7)+(Z<<8)+(Z<<24);return(Z>>>0).toString(16)}function _E($,Z){return`${$}:${sZ(Z.baseUrl)}:${LE(jJ(Z)??"")}`}async function oZ($,Z,Q=fE){let W=new AbortController,J=setTimeout(()=>W.abort(),Q);try{return await fetch($,{...Z,signal:W.signal})}finally{clearTimeout(J)}}function R2($,Z,Q){if(Q&&!$.includes(Z))$.push(Z)}function tZ($,Z){let Q=["streaming","tools"];return R2(Q,"images",Boolean(Z.supportsImages)),R2(Q,"prompt-cache",Boolean(Z.supportsPromptCache)),R2(Q,"reasoning",Boolean(Z.supportsReasoning)),{id:$,name:Z.name??$,contextWindow:Z.contextWindow,maxInputTokens:Z.maxInputTokens,maxTokens:Z.maxTokens,capabilities:Q,releaseDate:Z.releaseDate,status:"active"}}async function zE($,Z){let Q=await oZ("https://inference.baseten.co/v1/models",{method:"GET",headers:{Authorization:`Bearer ${Z}`,"Content-Type":"application/json"}});if(!Q.ok)throw Error(`Baseten model refresh failed: HTTP ${Q.status}`);let J=(await Q.json())?.data??[],X={};for(let Y of J){let j=Y.id?.trim();if(!j)continue;if(j.includes("whisper")||j.includes("tts")||j.includes("embedding"))continue;let V=Y.supported_features??[];X[j]=tZ(j,{name:j,contextWindow:Y.context_length,maxInputTokens:Y.context_length,maxTokens:Y.max_completion_tokens,supportsReasoning:V.includes("reasoning")||V.includes("reasoning_effort"),supportsImages:!1})}return X}function cG($){if(typeof $==="number")return Number.isFinite($)?$:void 0;if(typeof $==="string"){let Z=Number($);return Number.isFinite(Z)?Z:void 0}return}async function OE($,Z){let Q=await oZ("https://api.hicap.ai/v2/openai/models",{method:"GET",headers:{"api-key":Z}});if(!Q.ok)throw Error(`Hicap model refresh failed: HTTP ${Q.status}`);let J=(await Q.json())?.data??[],X={};for(let Y of J){let j=Y.id?.trim();if(!j)continue;X[j]=tZ(j,{name:j,maxInputTokens:128000,supportsImages:!0,supportsPromptCache:!0})}return X}async function qE($,Z){let W=`${(sZ($.baseUrl)||"https://inference.poolside.ai/v1").replace(/\/+$/,"")}/models`,J=await oZ(W,{method:"GET",headers:{Authorization:`Bearer ${Z}`,accept:"application/json"}});if(!J.ok)throw Error(`Poolside model refresh failed: HTTP ${J.status}`);let Y=(await J.json())?.data??[],j={};for(let V of Y){let H=V.id?.trim();if(!H)continue;let B=V.supported_features??[],G=V.supported_sampling_parameters??[],K=V.input_modalities??[],F=["streaming"];R2(F,"tools",B.includes("tools")),R2(F,"reasoning",B.includes("reasoning")),R2(F,"temperature",G.includes("temperature")),R2(F,"images",K.includes("image"));let A={input:cG(V.pricing?.prompt),output:cG(V.pricing?.completion)};j[H]={id:H,name:V.name??H,description:V.description,contextWindow:V.context_length,maxInputTokens:V.context_length,maxTokens:V.max_completion_tokens,capabilities:F,pricing:A.input!==void 0||A.output!==void 0?A:void 0,status:"active"}}return j}function ME($){let Z=sZ($).replace(/\/+$/,"");if(!Z)return"http://localhost:4000";return Z.endsWith("/v1")?Z.slice(0,-3):Z}function RE($){return[`${$}/v1/model/info`,`${$}/model/info`]}async function EE($){let Z=(await $.text().catch(()=>"")).replace(/\s+/g," ").trim(),Q=500,W=Z?`: ${Z.slice(0,500)}${Z.length>500?"...":""}`:"";return`HTTP ${$.status}${W}`}async function NE($,Z){let Q=ME($.baseUrl),W=[],J=[["x-litellm-api-key",{"x-litellm-api-key":Z}],["Authorization",{Authorization:`Bearer ${Z}`}]];for(let X of RE(Q))for(let[Y,j]of J)try{let V=await oZ(X,{method:"GET",headers:{accept:"application/json",...j}});if(V.ok){let B=(await V.json())?.data??[],G={};for(let K of B){let F=K.model_name?.trim(),D=K.litellm_params?.model?.trim()||F;if(!D)continue;let f=K.model_info,T=tZ(D,{name:F??D,maxTokens:f?.max_output_tokens??f?.max_tokens,maxInputTokens:f?.max_input_tokens??f?.max_tokens,supportsImages:f?.supports_vision,supportsPromptCache:f?.supports_prompt_caching,supportsReasoning:f?.supports_reasoning});if(G[D]=T,F)G[F]={...T,id:F,name:F}}return G}W.push(`${new URL(X).pathname} (${Y}): ${await EE(V)}`)}catch(V){let H=V instanceof Error?V.message:String(V);W.push(`${new URL(X).pathname} (${Y}): ${H}`)}throw Error(`LiteLLM model refresh failed. Attempts: ${W.join("; ")}`)}var pG={baseten:zE,hicap:OE,litellm:NE,poolside:qE},YJ=new Map,iZ=new Map;function CE($,Z){return`${$}:${sZ(Z.baseUrl)}`}async function wE($,Z,Q){let W=s.MODEL_COLLECTIONS_BY_PROVIDER_ID[$],J=pZ(Q.baseUrl,W?.provider.baseUrl,W?.provider.modelsSourceUrl);if(!J)return{};let X=Z?.cacheTtlMs??lG,Y=CE($,Q),j=Date.now(),V=YJ.get(Y);if(V&&V.expiresAt>j)return V.data;let H=iZ.get(Y);if(H)return H;let B=lZ(J,$).then((G)=>{let K=Object.fromEntries(G.map((F)=>[F,tZ(F,{name:F})]));return YJ.set(Y,{data:K,expiresAt:j+X}),K}).finally(()=>{iZ.delete(Y)});return iZ.set(Y,B),B}function PE(){YJ.clear(),iZ.clear()}async function SE($,Z){let Q=jJ(Z);if(!Q)return{};let W=pG[$];if(!W)return{};return W(Z,Q)}function bE($,Z,Q){if(!Q)return!1;if(!pG[$])return!1;if(Z?.loadPrivateOnAuth===!1)return!1;return Boolean(jJ(Q))}async function yE($,Z,Q){let W=Z?.cacheTtlMs??lG,J=_E($,Q),X=Date.now(),Y=XJ.get(J);if(Y&&Y.expiresAt>X)return Y.data;let j=rZ.get(J);if(j)return j;let V=SE($,Q).then((H)=>{return XJ.set(J,{data:H,expiresAt:X+W}),H}).finally(()=>{rZ.delete(J)});return rZ.set(J,V),V}async function hE($){return s.fetchLiveProviderModels($,globalThis.fetch)}async function l8($={}){let Z=$.url??aZ,Q=$.cacheTtlMs??AE,W=Date.now(),J=nZ.get(Z);if(J&&J.expiresAt>W)return J.data;let X=t6.get(Z);if(X)return X;let Y=hE(Z).then((j)=>{return nZ.set(Z,{data:j,expiresAt:W+Q}),j}).finally(()=>{t6.delete(Z)});return t6.set(Z,Y),Y}function VJ($){if($){nZ.delete($),t6.delete($);return}nZ.clear(),t6.clear()}function HJ(){XJ.clear(),rZ.clear()}function kE($){return Object.fromEntries(Object.entries($).map(([Z,Q])=>[Z,{baseUrl:Q.baseUrl,modelId:Q.modelId,capabilities:dG(Q.capabilities)}]))}var e6=kE(FE());function eZ($){let Z=KE($);if(!Z)return;return{baseUrl:Z.baseUrl||void 0,modelId:Z.modelId,knownModels:Z.knownModels,capabilities:dG(Z.capabilities)}}async function $5($,Z,Q){let W=eZ($);if(!W)return;try{let J=Z?.loadLatestOnInit?await l8(Z):void 0,X=J?TE($,J):{},Y=Q&&bE($,Z,Q)?await yE($,Z,Q):{},V=Boolean(s.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl)?Q??{providerId:$,modelId:W.modelId,baseUrl:W.baseUrl}:Q,H=V?await wE($,Z,V).catch(()=>({})):{},B=await DE($,W.knownModels,X,Y,H,Q?.knownModels);return{...W,knownModels:B}}catch(J){if(Z?.failOnError)throw J;if($==="litellm")return{...W,knownModels:{}};return W}}var Z5=d0.BUILT_IN_PROVIDER,BJ=d0.BUILT_IN_PROVIDER_IDS,GJ=d0.isBuiltInProviderId,p8=d0.normalizeProviderId,Q5=C.string().min(1).regex(/^[a-z0-9][a-z0-9-]*$/i),$Q=C.enum(["anthropic","gemini","openai-chat","openai-responses","openai-r1","ai-sdk"]),ZQ=C.enum(["anthropic","ai-sdk","ai-sdk-community","openai","openai-compatible","openai-r1","gemini","bedrock","custom","fetch","vertex"]),QQ=C.object({apiKey:C.string().optional(),accessToken:C.string().optional(),refreshToken:C.string().optional(),expiresAt:C.number().int().positive().optional(),accountId:C.string().optional()}),IE=C.enum(["none","low","medium","high","xhigh"]),WQ=C.object({enabled:C.boolean().optional(),effort:IE.optional(),budgetTokens:C.number().int().positive().optional()}),JQ=C.object({accessKey:C.string().optional(),secretKey:C.string().optional(),sessionToken:C.string().optional(),region:C.string().optional(),profile:C.string().optional(),authentication:C.enum(["iam","api-key","apikey","profile"]).optional(),usePromptCache:C.boolean().optional(),useCrossRegionInference:C.boolean().optional(),useGlobalInference:C.boolean().optional(),endpoint:C.string().url().optional(),customModelBaseId:C.string().optional()}),XQ=C.object({projectId:C.string().optional(),region:C.string().optional()}),YQ=C.object({apiVersion:C.string().optional(),useIdentity:C.boolean().optional()}),jQ=C.object({clientId:C.string().optional(),clientSecret:C.string().optional(),tokenUrl:C.string().url().optional(),resourceGroup:C.string().optional(),deploymentId:C.string().optional(),useOrchestrationMode:C.boolean().optional(),api:C.enum(["orchestration","foundation-models"]).optional(),defaultSettings:C.record(C.string(),C.unknown()).optional()}),VQ=C.object({mode:C.enum(["internal","external"]).optional(),usePromptCache:C.boolean().optional()}),HQ=C.object({loadLatestOnInit:C.boolean().optional(),loadPrivateOnAuth:C.boolean().optional(),url:C.string().url().optional(),cacheTtlMs:C.number().int().positive().optional(),failOnError:C.boolean().optional()}),P$=C.object({provider:Q5,apiKey:C.string().optional(),auth:QQ.optional(),model:C.string().optional(),protocol:$Q.optional(),client:ZQ.optional(),routingProviderId:Q5.optional(),maxTokens:C.number().int().positive().optional(),contextWindow:C.number().int().positive().optional(),baseUrl:C.string().url().optional(),headers:C.record(C.string(),C.string()).optional(),timeout:C.number().int().positive().optional(),reasoning:WQ.optional(),aws:JQ.optional(),gcp:XQ.optional(),azure:YQ.optional(),sap:jQ.optional(),oca:VQ.optional(),region:C.string().optional(),apiLine:C.enum(["china","international"]).optional(),capabilities:C.array(C.enum(["reasoning","prompt-cache","streaming","tools","vision","computer-use","oauth","popular"])).optional(),modelCatalog:HQ.optional()});function BQ($){return P$.parse($)}function GQ($){return P$.safeParse($)}function xE($){return $.protocol==="openai-responses"||$.client==="openai"}function l0($,Z={}){let Q=$.provider,W=p8(Q),J=Z.includeKnownModels!==!1,X=$.reasoning?.effort||"none",Y=X==="none"?void 0:X,j=e6[W],V=Object.assign({},...d0.resolveProviderModelCatalogKeys(W).map((D)=>d0.getGeneratedModelsForProvider(D))),H=Object.keys(V)[0],B=D8(W,$),G=$.baseUrl??(W==="oca"?$.oca?.mode==="internal"?YZ:jZ:j?.baseUrl),K=$.routingProviderId??(xE($)&&W!==Z5.OPENAI_NATIVE?Z5.OPENAI_NATIVE:void 0),F=J?j?.knownModels??(Object.keys(V).length>0?V:void 0):void 0,A={providerId:Q,clientType:$.client,routingProviderId:K,modelId:$.model??j?.modelId??H??"default",...J?{knownModels:F}:{},apiKey:B,accessToken:$.auth?.accessToken,refreshToken:$.auth?.refreshToken,accountId:$.auth?.accountId,baseUrl:G,headers:$.headers,timeoutMs:$.timeout,maxOutputTokens:$.maxTokens,maxInputTokens:$.contextWindow,thinking:$.reasoning?.enabled,reasoningEffort:Y,thinkingBudgetTokens:$.reasoning?.budgetTokens,region:$.region??$.aws?.region??$.gcp?.region,apiLine:$.apiLine,useCrossRegionInference:$.aws?.useCrossRegionInference,useGlobalInference:$.aws?.useGlobalInference,aws:$.aws?{accessKey:$.aws.accessKey,secretKey:$.aws.secretKey,sessionToken:$.aws.sessionToken,authentication:$.aws.authentication,profile:$.aws.profile,usePromptCache:$.aws.usePromptCache,endpoint:$.aws.endpoint,customModelBaseId:$.aws.customModelBaseId}:void 0,gcp:$.gcp?{projectId:$.gcp.projectId,region:$.gcp.region}:void 0,azure:$.azure,sap:$.sap,oca:$.oca,capabilities:$.capabilities??j?.capabilities,modelCatalog:$.modelCatalog?{loadLatestOnInit:$.modelCatalog.loadLatestOnInit,loadPrivateOnAuth:$.modelCatalog.loadPrivateOnAuth,url:$.modelCatalog.url,cacheTtlMs:$.modelCatalog.cacheTtlMs,failOnError:$.modelCatalog.failOnError}:void 0};return Object.fromEntries(Object.entries(A).filter(([D,f])=>f!==void 0))}function KJ($){let Z=BQ($);return l0(Z)}function FJ($){let Z=GQ($);if(Z.success)return{success:!0,config:l0(Z.data)};return{success:!1,error:Z.error}}var r8=P$;var KQ=S$.object({settings:P$,updatedAt:S$.string().datetime(),tokenSource:S$.enum(["manual","oauth","migration"]).default("manual")}),i8=S$.object({version:S$.literal(1),lastUsedProvider:S$.string().min(1).optional(),providers:S$.record(S$.string(),KQ)});function b$(){return{version:1,providers:{}}}$1();var aG={};N(aG,{InMemoryWorkspaceManager:()=>n8});import{upsertWorkspaceInfo as gE,WorkspaceManifestSchema as AJ}from"@cline/shared";class n8{manifest;listeners=new Set;constructor($){this.manifest=AJ.parse($??{workspaces:{}})}async addWorkspacePath($){let Z=await $8($);return this.manifest=gE(this.manifest,Z),this.emit({type:"workspace_added",workspace:Z}),Z}async switchWorkspace($){let Z=N1($),Q=this.manifest.workspaces[Z];if(Q)return this.manifest=AJ.parse({...this.manifest,currentWorkspacePath:Z}),this.emit({type:"workspace_switched",workspace:Q}),Q;let W=await this.addWorkspacePath(Z);return this.manifest=AJ.parse({...this.manifest,currentWorkspacePath:W.rootPath}),this.emit({type:"workspace_switched",workspace:W}),W}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}getCurrentWorkspace(){let $=this.manifest.currentWorkspacePath;if(!$)return;return this.manifest.workspaces[$]}getWorkspace($){let Z=N1($);return this.manifest.workspaces[Z]}listWorkspaces(){return Object.values(this.manifest.workspaces)}getManifest(){return this.manifest}emit($){for(let Z of this.listeners)Z($)}}L0();import{createHash as mE}from"node:crypto";var sG=new Set,oG=new Set;function vE($){return mE("sha256").update($).digest("hex")}function cE($){if($.vcsTypes&&$.vcsTypes.length>0)return $.vcsTypes;return[$.vcsType==="git"?"git":"none"]}function tG($){if(!$.telemetry)return;let Z=vE($.rootPath),Q=$.rootCount??1;if(!sG.has(Z))sG.add(Z),_9($.telemetry,{root_count:Q,vcs_types:cE($),init_duration_ms:$.durationMs,feature_flag_enabled:$.featureFlagEnabled??!0,is_remote_workspace:$.isRemoteWorkspace});if($.initError&&!oG.has(Z)){oG.add(Z);let W=Error($.initError.message);W.name=$.initError.errorType||"Error",z9($.telemetry,W,{fallback_to_single_root:!0,workspace_count:Q})}}function dE($){return`${$.pluginName??$.pluginPath}: ${$.message}`}function lE($,Z,Q){if(Z.length>0)for(let X of Z)Q?.log(X.message,{severity:"warn"});if($.length===0)return;let W=$.slice(0,3).map(dE).join("; "),J=$.length>3?`; and ${$.length-3} more`:"";Q?.log(`Some plugins failed to initialize. ${W}${J}. Use --verbose for more details.`,{severity:"warn"});for(let X of $)Q?.log(`Plugin initialization failed (${X.phase}) for ${X.pluginPath}`,{severity:"warn",stack:X.stack,pluginPath:X.pluginPath,pluginName:X.pluginName})}function pE($,Z){let Q=typeof $.thinking==="boolean",W=typeof $.reasoningEffort==="string";if(!Q&&!W)return Z;return{...Z??{},...Q?{enabled:$.thinking}:{},...W?{effort:$.reasoningEffort}:{}}}function eG($,Z){return uE($,Z)}function rE($){let Z=0;for(let Q of $??[]){if(Q.role!=="user")continue;if(("metadata"in Q&&Q.metadata&&typeof Q.metadata==="object"&&!Array.isArray(Q.metadata)?Q.metadata:void 0)?.kind==="recovery_notice")continue;Z+=1}return Z}function iE($){let Z={...$.storedHeaders??{},...$.configHeaders??{}},Q=$.accountId?.trim()||nE($.accessToken);if(Z.originator="cline",Z.session_id=$.sessionId,Z["User-Agent"]=`Cline/${process.env.npm_package_version||"1.0.0"}`,Q)Z["ChatGPT-Account-Id"]=Q;return Z}function nE($){let Z=$?.trim();if(!Z)return;let Q=E0(Z),W=Q?.["https://api.openai.com/auth"]?.chatgpt_account_id;if(typeof W==="string"&&W.length>0)return W;let J=Q?.organizations?.[0]?.id;if(typeof J==="string"&&J.length>0)return J;let X=Q?.chatgpt_account_id;if(typeof X==="string"&&X.length>0)return X;return}function aE($,Z,Q,W,J){let X=Q.getProviderSettings($.providerId),Y=W||X?.modelCatalog?{...W??{},...X?.modelCatalog??{}}:void 0,j=$.providerConfig?.providerId===$.providerId?$.providerConfig:void 0,V={...X??{},provider:$.providerId,model:$.modelId,apiKey:$.apiKey??X?.apiKey,baseUrl:$.baseUrl??X?.baseUrl,headers:$.providerId==="openai-codex"?iE({sessionId:Z,configHeaders:$.headers,storedHeaders:X?.headers,accountId:X?.auth?.accountId,accessToken:$.apiKey??X?.auth?.accessToken??X?.apiKey}):$.headers??X?.headers,reasoning:pE($,X?.reasoning),modelCatalog:Y},H={...l0(V),...j??{}};if($.knownModels)H.knownModels=$.knownModels;if($.extensionContext)H.extensionContext=$.extensionContext;let G=$.fetch??H.fetch??J;if(G)H.fetch=G;return H}async function $K($){let{input:Z,sessionId:Q,providerSettingsManager:W,defaultTelemetry:J,defaultCapabilities:X,defaultToolPolicies:Y,defaultFetch:j,onPluginEvent:V,onTeamEvent:H,createSubAgentLifecycleCallbacks:B,createSpawnTool:G,localRuntime:K,readSessionMetadata:F,writeSessionMetadata:A}=$,D=E$(Z.config),{modelCatalogDefaults:f,userInstructionService:T,configExtensions:U,onTeamRestored:z,...O}=K??{},_=Object.keys(O).length>0?O:void 0,{workspaceInfo:L,workspaceMetadata:E,durationMs:w,vcsType:h,initError:l}=await QW(D),o=_?.extensionContext,t={...o??{},workspace:{...L,...o?.workspace??{}},session:{...o?.session??{},sessionId:Q},logger:o?.logger??_?.logger,telemetry:o?.telemetry??_?.telemetry??J};tG({telemetry:t.telemetry,rootPath:L.rootPath,workspaceInfo:L,rootCount:1,vcsType:h,durationMs:w,initError:l,featureFlagEnabled:!0});let Q0=d8({cwd:Z.config.cwd,workspacePath:D,rootSessionId:Q,logger:_?.logger,workspaceInfo:L}),e0=tB(_?.hooks)?void 0:u8({rootSessionId:Q,workspacePath:D,workspaceInfo:L}),p$=M2([_?.hooks,e0]),r;if(eG(U,"plugins"))try{r=await m8({pluginPaths:_?.pluginPaths,workspacePath:D,cwd:Z.config.cwd,onEvent:V,providerId:Z.config.providerId,modelId:Z.config.modelId,workspaceInfo:L,session:t.session,client:t.client,user:t.user,logger:t.logger,telemetry:t.telemetry,automation:t.automation}),lE(r.failures,r.warnings,_?.logger)}catch(s2){let t7=s2 instanceof Error?s2.message:String(s2);_?.logger?.log?.(`plugin loading failed; continuing without plugins (${t7})`)}let P=b3(Q0?[Q0]:void 0,b3(_?.extensions,v9(r?.extensions))),B0=eG(U,"plugins")?n1(r?.pluginPaths??[]):void 0,G0={...Z.config,..._??{},sessionId:Q,hooks:p$,extensions:P,extensionContext:t,telemetry:t.telemetry},w0=aE(G0,Q,W,f,j),n2=M2([G0.hooks,G0.checkpoint?.enabled===!0?PG({cwd:G0.cwd,sessionId:Q,logger:G0.logger,createCheckpoint:G0.checkpoint?.createCheckpoint,initialRunCount:rE(Z.initialMessages),readSessionMetadata:F,writeSessionMetadata:A}):void 0]),M1={...G0,providerConfig:w0,workspaceMetadata:E,hooks:n2},H1=Z.toolPolicies??G0.toolPolicies??Y,w4=q0(X,Z.capabilities),a2=w4?.requestToolApproval,G9=w4?.toolExecutors,R1=B?.(M1),K9=new n8({currentWorkspacePath:L.rootPath,workspaces:{[L.rootPath]:L}});return{effectiveInput:Z,config:M1,providerConfig:w0,workspaceMetadata:E,workspaceInfo:L,extensions:P,hooks:n2,toolPolicies:H1,requestToolApproval:a2,pluginSandboxShutdown:r?.shutdown,runtimeBuilderInput:{config:M1,hooks:n2,extensions:P,onTeamEvent:H,createSpawnTool:G,onTeamRestored:z,onSubAgentEvent:R1?.onSubAgentEvent,onSubAgentStart:R1?.onSubAgentStart,onSubAgentEnd:R1?.onSubAgentEnd,userInstructionService:T,pluginSkillDirectories:B0,configExtensions:U,toolExecutors:G9,toolPolicies:H1,workspaceManager:K9,logger:M1.logger,telemetry:M1.telemetry,requestToolApproval:a2}}}import{existsSync as AQ,mkdirSync as sE,readdirSync as oE,rmdirSync as tE,rmSync as eE,unlinkSync as $N}from"node:fs";import{dirname as ZK,join as FQ}from"node:path";function J0(){return new Date().toISOString()}function W5($){if(!$||!AQ($))return;try{$N($)}catch{}}function ZN($){let Z=S8($);if(Z)return{rootSessionId:Z.rootSessionId,fileStem:`${Z.agentId}__${Z.teamTaskId}`};let Q=I6($);if(Q)return{rootSessionId:Q.rootSessionId,fileStem:Q.agentId};return{rootSessionId:$,fileStem:$}}class fJ{ensureSessionsDir;constructor($){this.ensureSessionsDir=$}sessionArtifactsDir($){return FQ(this.ensureSessionsDir(),$)}ensureSessionArtifactsDir($){let Z=this.sessionArtifactsDir($);if(!AQ(Z))sE(Z,{recursive:!0});return Z}sessionMessagesPath($){return FQ(this.sessionArtifactsDir($),`${$}.messages.json`)}sessionManifestPath($,Z=!1){let Q=Z?this.ensureSessionArtifactsDir($):this.sessionArtifactsDir($);return FQ(Q,`${$}.json`)}removeSessionDirIfEmpty($){let Z=this.sessionArtifactsDir($),Q=this.ensureSessionsDir();while(Z.startsWith(Q)&&Z!==Q){if(!AQ(Z)){Z=ZK(Z);continue}try{if(oE(Z).length>0)break;tE(Z)}catch{break}Z=ZK(Z)}}removeSessionDir($){this.removeDir(this.sessionArtifactsDir($))}removeDir($){if(!AQ($))return;try{eE($,{recursive:!0,force:!0})}catch{}}subagentArtifactPaths($,Z,Q){let{rootSessionId:W,fileStem:J}=ZN($),X=this.sessionArtifactsDir(W);return{messagesPath:FQ(X,`${J}.messages.json`)}}}import{resolveDocumentsExtensionPath as QN}from"@cline/shared/storage";L0();function QK($,Z,Q,W,J){if(Q)q9($.telemetry,{ulid:Z,apiProvider:$.providerId,...J});else O9($.telemetry,{ulid:Z,apiProvider:$.providerId,...J});WN($.telemetry,{workspacePath:W})}function WN($,Z){let Q=QN("Hooks"),W=C$(Z.workspacePath),J=new Map;for(let X of W){let Y=X.hookEventName??"unknown",j=J.get(Y)??{global:0,workspace:0};if(X.path===Q||X.path.startsWith(`${Q}/`))j.global+=1;else j.workspace+=1;J.set(Y,j)}for(let[X,Y]of J.entries())b9($,X,Y.global,Y.workspace)}function WK($,Z){for(let Q of Z.mentions)P9($,Q,Z.matchedFiles.includes(Q)?1:0,"file",!Z.matchedFiles.includes(Q));for(let Q of Z.matchedFiles)C9($,"file",Q.length);for(let Q of Z.ignoredMentions)w9($,"file","not_found",Q)}var WU={};N(WU,{ProviderSettingsManager:()=>O1});import{chmodSync as HU,existsSync as RY,mkdirSync as RI,readFileSync as EI,writeFileSync as NI}from"node:fs";import{basename as BU,dirname as EY}from"node:path";import{resolveProviderSettingsPath as CI}from"@cline/shared/storage";var M={};N(M,{writeHubDiscovery:()=>l9,writeGlobalSettings:()=>b1,withHubStartupLock:()=>p9,verifyHubConnection:()=>F1,updateMcpSettingsFileSync:()=>j1,updateMcpSettingsFile:()=>e8,updateMcpServerOAuthStateAsync:()=>z5,updateMcpServerOAuthState:()=>P2,updateLocalProvider:()=>P7,uninstallPlugin:()=>n5,uninstallMarketplaceSkill:()=>G7,uninstallMarketplacePlugin:()=>K7,uninstallMarketplaceMcpServerFromSettings:()=>H7,uninstallMarketplaceEntry:()=>dX,truncateNotificationBody:()=>W9,truncateCommandOutput:()=>Y2,toggleDisabledTool:()=>g9,toTeamProgressLifecycleEvent:()=>B4,toProviderConfig:()=>l0,toHubStatusUrl:()=>_W,toHubHealthUrl:()=>r9,toHookConfigFileName:()=>s6,syncPluginMcpServersToSettings:()=>r5,summarizeUsageFromMessages:()=>y8,stopLocalHubServerGracefully:()=>bW,startLocalOAuthServer:()=>J1,startHubWebSocketServer:()=>Y9,startHubServer:()=>YU,startClineDeviceAuth:()=>uW,splitCoreSessionConfig:()=>i4,spawnDetachedHubServerWithRetry:()=>B8,spawnDetachedHubServer:()=>EW,setTelemetryOptOutGlobally:()=>yj,setMcpServerDisabled:()=>C2,setDisabledTools:()=>FW,setDisabledPlugin:()=>mj,setAutoUpdateEnabledGlobally:()=>kj,sendHubCommand:()=>DV,saveProviderOAuthCredentials:()=>W2,saveLocalProviderSettings:()=>WY,saveLocalProviderOAuthCredentials:()=>jY,sanitizeSessionToken:()=>D2,safeParseSettings:()=>GQ,safeCreateProviderConfig:()=>FJ,runSubprocessEvent:()=>D4,runHook:()=>L4,reviveTeamStateDates:()=>CZ,restartLocalHubIfIdleAfterStartupTimeout:()=>o9,resolveWorkspaceHubOwnerContext:()=>$V,resolveWorkflowsConfigSearchPaths:()=>A5,resolveSkillsConfigSearchPaths:()=>K5,resolveSharedHubOwnerContext:()=>Q1,resolveSessionBackend:()=>KX,resolveRulesConfigSearchPaths:()=>F5,resolveProviderConfig:()=>$5,resolveProviderApiKeyFromSettings:()=>nW,resolveProductionHubOwnerContext:()=>K1,resolvePluginSkillDirectoriesFromPaths:()=>n1,resolvePluginConfigSearchPaths:()=>r6,resolveMcpServerRegistrations:()=>p0,resolveMarketplaceMcpServerName:()=>s5,resolveLocalClineAuthToken:()=>HY,resolveHubUrl:()=>yW,resolveHubOwnerContext:()=>x1,resolveHubEndpointOptions:()=>G1,resolveHubBuildId:()=>d9,resolveHooksConfigSearchPaths:()=>n6,resolveDisabledToolNames:()=>B1,resolveDisabledPluginPaths:()=>u4,resolveDefaultMcpSettingsPath:()=>Z0,resolveDefaultHubPort:()=>H8,resolveDefaultHubPathname:()=>RW,resolveDefaultHubHost:()=>MW,resolveCoreSelectedToolIds:()=>PZ,resolveCoreDistinctId:()=>P0,resolveCompatibleLocalHubUrl:()=>o4,resolveClineDir:()=>sj,resolveClineDataDir:()=>o$,resolveAndLoadAgentPlugins:()=>m8,resolveAgentPluginPaths:()=>i1,requestHubShutdown:()=>s4,requestDesktopToolApproval:()=>NX,removePluginMcpServersFromSettings:()=>i5,rememberRecoverableLocalHubUrl:()=>B$,registerRemoteConfigSessionBlobUpload:()=>$7,registerMcpServersFromSettingsFile:()=>S2,registerDisposable:()=>zI,refreshProviderModelsFromSource:()=>JY,refreshOpenAICodexToken:()=>XZ,refreshOcaToken:()=>HZ,refreshClineToken:()=>WZ,readSessionCheckpointHistory:()=>I2,readRemoteConfigSessionBlobUploadMetadata:()=>TX,readHubDiscovery:()=>K0,readGlobalSettings:()=>M0,readBearerToken:()=>u7,probeHubServer:()=>g1,probeHubConnection:()=>UV,prewarmFileIndex:()=>TZ,prewarmDetachedHubServer:()=>n9,prepareRemoteConfigCoreIntegration:()=>_X,parseWorkflowConfigFromMarkdown:()=>G5,parseUserCommandEnvelope:()=>_I,parseSkillConfigFromMarkdown:()=>H5,parseSettings:()=>BQ,parseRuleConfigFromMarkdown:()=>B5,parsePluginSource:()=>z7,parseMcpInstallArgs:()=>p5,parseHookEventPayload:()=>T4,parseConfiguredAgentConfig:()=>k5,normalizeWorkspacePath:()=>N1,normalizeUserInput:()=>LI,normalizeSdkError:()=>TI,normalizeRuntimeCapabilities:()=>q0,normalizeProviderId:()=>p8,normalizeOAuthProvider:()=>XY,normalizeHubWebSocketUrl:()=>G$,noopBasicLogger:()=>DI,migrateLegacyProviderSettings:()=>Z9,mergeRulesForSystemPrompt:()=>e2,mergeAgentHooks:()=>M2,marketplaceEntryKey:()=>uX,makeTeamTaskSubSessionId:()=>k6,makeSubSessionId:()=>P8,loginOpenAICodex:()=>$6,loginOcaOAuth:()=>W6,loginLocalProvider:()=>YY,loginClineOAuth:()=>t4,loginAndSaveProviderOAuthCredentials:()=>X6,loginAndSaveLocalProviderOAuthCredentials:()=>VY,loadOpenTelemetryAdapter:()=>nk,loadMcpSettingsFile:()=>N2,loadLlmsConfigFromFile:()=>zY,loadConfiguredAgentConfigs:()=>j4,loadAgentPluginsFromPathsWithDiagnostics:()=>_2,loadAgentPluginsFromPaths:()=>kZ,loadAgentPluginFromPath:()=>l6,listSessionHistoryFromBackend:()=>rJ,listPluginToolsWithDiagnostics:()=>hQ,listPluginTools:()=>M5,listMcpServerOAuthStatuses:()=>O5,listLocalProviders:()=>ZY,listHookConfigFiles:()=>C$,isToolDisabledGlobally:()=>Ij,isTelemetryOptedOutGlobally:()=>x9,isSessionNotFoundError:()=>I1,isRuleEnabled:()=>A9,isPluginDisabledGlobally:()=>gj,isOfficialPluginSlug:()=>_7,isOAuthProvider:()=>Q2,isMarketplaceSkillInstalled:()=>B7,isLocalHubOrigin:()=>MY,isLocalHubHostName:()=>d7,isHubReconnectableTransportError:()=>PW,isHubCommandTimeoutError:()=>s9,isDiscoveryFilePresent:()=>tj,isClineOrgIndividualInferenceSubscriptionMessage:()=>JI,isClineOrgIndividualInferenceSubscriptionError:()=>WI,isClineNotSubscribedMessage:()=>QI,isClineNotSubscribedError:()=>ZI,isClineAccountActionRequest:()=>fQ,isBuiltInProviderId:()=>GJ,isAutoUpdateEnabledGlobally:()=>hj,installPlugin:()=>aX,installMcpServer:()=>CX,identifyAccount:()=>S1,hasMcpSettingsFile:()=>s1,getValidOpenAICodexCredentials:()=>Z6,getValidOcaCredentials:()=>J6,getValidClineCredentials:()=>e4,getProviderOAuthCredentialsFromSettings:()=>Y6,getProviderConfigFields:()=>BY,getProviderConfig:()=>eZ,getProviderAuthStorageId:()=>iW,getProviderAuthHandler:()=>j0,getPersistedProviderApiKey:()=>D8,getMcpServerOAuthState:()=>w2,getMarketplaceSkillCandidates:()=>o5,getLocalProviderModels:()=>QY,getLiveModelsCatalog:()=>l8,getGlobalMarketplaceSkillPaths:()=>t5,getFileIndex:()=>d1,getCurrentContextSize:()=>I3,getCoreHeadlessToolNames:()=>h6,getCoreDefaultEnabledToolIds:()=>wZ,getCoreBuiltinToolCatalog:()=>f2,getCoreAcpToolNames:()=>SZ,getClinePassSubscriptionUrl:()=>$I,getClineOrgIndividualInferenceSubscriptionMessage:()=>tk,getClineNotSubscribedMessage:()=>ek,getClineDefaultSystemPrompt:()=>XI,generateWorkspaceInfoWithDiagnostics:()=>S4,generateWorkspaceInfo:()=>$8,formatRulesForSystemPrompt:()=>t2,formatProviderOAuthApiKey:()=>aW,formatDisplayUserInput:()=>UI,findInstalledGlobalMarketplaceSkillName:()=>e5,findCheckpointForRun:()=>f4,filterExtensionToolRegistrations:()=>v9,filterDisabledTools:()=>y1,filterDisabledPluginPaths:()=>m9,fetchClineRecommendedModels:()=>LY,executeClineAccountAction:()=>UQ,ensureHubWebSocketServer:()=>l7,ensureHubServer:()=>jU,ensureDetachedHubServer:()=>YV,ensureCustomProvidersLoaded:()=>N7,ensureCompatibleLocalHubUrl:()=>$2,enrichPromptWithMentions:()=>O8,emptyWorkspaceManifest:()=>FI,emptyStoredProviderSettings:()=>b$,discoverPluginModulePaths:()=>i6,disablePluginMcpServersInSettings:()=>bX,deriveSubsessionStatus:()=>x6,deleteLocalProvider:()=>S7,defineLlmsConfig:()=>_Y,createWorkflowsConfigDefinition:()=>D5,createUserInstructionConfigService:()=>y$,createToolPoliciesWithPreset:()=>_Z,createTool:()=>KI,createTeamName:()=>W7,createSubprocessHooks:()=>sQ,createSpawnAgentTool:()=>M$,createSkillsConfigDefinition:()=>f5,createShellTool:()=>q6,createShellExecutor:()=>j2,createSessionHost:()=>F4,createRuntimeHost:()=>F4,createRulesConfigDefinition:()=>U5,createRemoteConfigSessionMessagesArtifactUploader:()=>LX,createProviderConfig:()=>KJ,createOpenTelemetryTelemetryService:()=>r4,createOAuthClientCallbacks:()=>a8,createMcpTools:()=>W4,createLocalHubScheduleRuntimeHandlers:()=>XU,createLlmsSdk:()=>qY,createInitialAccumulatedUsage:()=>D0,createInMemoryHubOwnerContext:()=>oj,createHubServerUrl:()=>Z1,createHubAuthToken:()=>u9,createHookConfigFileHooks:()=>o6,createHookConfigFileExtension:()=>d8,createHookAuditHooks:()=>u8,createDisabledMcpToolPolicy:()=>q5,createDisabledMcpToolPolicies:()=>yQ,createDelegatedAgentConfigProvider:()=>O$,createDelegatedAgent:()=>q$,createDefaultToolsWithPreset:()=>zZ,createDefaultTools:()=>T$,createDefaultShellExecutor:()=>w6,createDefaultMcpServerClientFactory:()=>Z4,createDefaultExecutors:()=>q8,createCoreSettingsService:()=>y2,createCoreSessionSnapshot:()=>f1,createContributionRegistry:()=>GI,createContextCompactionPrepareTurn:()=>K6,createConfiguredTelemetryService:()=>h1,createConfiguredTelemetryHandle:()=>V8,createConfiguredAgentTools:()=>V4,createClineTelemetryServiceMetadata:()=>BI,createClineTelemetryServiceConfig:()=>HI,createCheckpointComparePlan:()=>rQ,createBuiltinTools:()=>U2,createAgentTeamsTools:()=>A2,createAgentRuntime:()=>MI,createAgentHooksExtension:()=>v8,connectToHub:()=>t9,completeClineDeviceAuth:()=>dW,compareCheckpointToWorkspace:()=>u5,collectPluginMcpOAuthCandidates:()=>O7,clearPrivateModelsCatalogCache:()=>HJ,clearLiveModelsCatalogCache:()=>VJ,clearHubDiscovery:()=>S0,captureWorkspacePathResolved:()=>Nj,captureWorkspaceInitialized:()=>_9,captureWorkspaceInitError:()=>z9,captureToolUsage:()=>W8,captureTokenUsage:()=>M9,captureTaskRestarted:()=>q9,captureTaskCreated:()=>O9,captureTaskCompleted:()=>g4,captureSubagentExecution:()=>v4,captureSkillUsed:()=>E9,captureSdkError:()=>VI,captureProviderConfigured:()=>Cj,captureProviderApiError:()=>m4,captureModeSwitch:()=>R9,captureMentionUsed:()=>C9,captureMentionSearchResults:()=>P9,captureMentionFailed:()=>w9,captureHookDiscovery:()=>b9,captureExtensionActivated:()=>Ej,captureDiffEditFailure:()=>N9,captureConversationTurnEvent:()=>Q8,captureCompactionSkipped:()=>h9,captureCompactionExecuted:()=>y9,captureAuthSucceeded:()=>w1,captureAuthStarted:()=>C1,captureAuthLoggedOut:()=>V$,captureAuthFailed:()=>P1,captureAgentUnexpectedReasoningTokens:()=>Rj,captureAgentTeamCreated:()=>S9,captureAgentCreated:()=>H$,buildWorkspaceMetadata:()=>b4,buildTeamProgressSummary:()=>H4,buildSdkErrorProperties:()=>YI,buildRemoteConfigSessionBlobUploadMetadata:()=>tQ,buildMcpInstallTransport:()=>J7,buildDelegatedAgentConfig:()=>K2,buildConfiguredAgentToolName:()=>I5,buildConfiguredAgentToolDescriptors:()=>x5,buildCheckpointWorkspaceDiff:()=>iQ,bootstrapAgentTeams:()=>w8,authorizeMcpServerOAuth:()=>wQ,addLocalProvider:()=>$Y,accumulateUsageTotals:()=>f0,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>V5,UnifiedConfigFileWatcher:()=>E2,ToolPresets:()=>u0,TelemetryService:()=>Y8,TelemetryLoggerSink:()=>p4,TEAM_TOOL_NAMES:()=>C8,SubprocessSandbox:()=>I8,StructuredCommandInputSchema:()=>J2,StoredProviderSettingsSchema:()=>i8,StoredProviderSettingsEntrySchema:()=>KQ,SqliteTeamStore:()=>c2,SqliteSessionStore:()=>D1,SessionVersioningService:()=>u$,SessionVersioningError:()=>k0,SessionSource:()=>_0,SessionNotFoundError:()=>k1,SapSettingsSchema:()=>jQ,SKILLS_CONFIG_DIRECTORY_NAME:()=>j5,SESSION_STATUSES:()=>g6,SESSION_NOT_FOUND_ERROR_CODE:()=>s$,SDK_ERROR_TELEMETRY_EVENT:()=>OI,RpcClineAccountService:()=>X5,RemoteRuntimeHost:()=>Y4,ReasoningSettingsSchema:()=>WQ,RULES_CONFIG_DIRECTORY_NAME:()=>qQ,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY:()=>eQ,ProviderSettingsSchema:()=>P$,ProviderSettingsManager:()=>O1,ProviderProtocolSchema:()=>$Q,ProviderIdSchema:()=>Q5,ProviderClientSchema:()=>ZQ,OpenTelemetryProvider:()=>j8,OcaSettingsSchema:()=>VQ,OPENAI_COMPATIBLE_PROVIDERS:()=>e6,NodeHubClient:()=>W1,NoOpFeatureFlagsProvider:()=>g2,NativeHubTransportAdapter:()=>X9,ModelCatalogSettingsSchema:()=>HQ,McpSettingsUpdateSkippedError:()=>t8,McpSettingsMutatorPurityError:()=>h$,McpSettingsLockTimeoutError:()=>k$,MAX_COMMAND_OUTPUT_CHARS:()=>c1,LocalRuntimeHost:()=>_1,Llms:()=>ak,InMemoryWorkspaceManager:()=>n8,InMemoryMcpManager:()=>b2,HubUIClient:()=>IW,HubTransportError:()=>R0,HubSessionClient:()=>kW,HubServerTransport:()=>C4,HubScheduleService:()=>Z8,HubScheduleCommandService:()=>o2,HubRuntimeHost:()=>o1,HubCommandError:()=>G8,HookEventPayloadSchema:()=>aQ,HookEventNameSchema:()=>nQ,HookConfigFileName:()=>c8,HOOK_CONFIG_FILE_EVENT_MAP:()=>a6,HOOKS_CONFIG_DIRECTORY_NAME:()=>cZ,GlobalSettingsSchema:()=>c4,GcpSettingsSchema:()=>XQ,FileTeamPersistenceStore:()=>k7,FeatureFlagsService:()=>x2,FeatureFlagDefaultValue:()=>fI,FEATURE_FLAGS:()=>AI,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>c7,DefaultToolNames:()=>U0,DefaultRuntimeBuilder:()=>O4,DefaultLlmsSdk:()=>Q9,DEFAULT_MODELS_CATALOG_URL:()=>aZ,DEFAULT_HUB_PORT:()=>OW,DEFAULT_HUB_PATHNAME:()=>qW,DEFAULT_HUB_HOST:()=>zW,CoreSettingsService:()=>I$,CoreSessionService:()=>L1,ContributionRegistry:()=>jI,ClineOrgIndividualInferenceSubscriptionError:()=>ok,ClineNotSubscribedError:()=>sk,ClineCore:()=>d5,ClineAccountService:()=>J5,ChatViewStateSchema:()=>UY,ChatSummarySchema:()=>v7,ChatSessionStatusSchema:()=>x7,ChatSessionConfigSchema:()=>I7,ChatMessageSchema:()=>m7,ChatMessageRoleSchema:()=>g7,CORE_TELEMETRY_EVENTS:()=>m,CORE_BUILD_VERSION:()=>DY,BrowserWebSocketHubAdapter:()=>J9,BUILT_IN_PROVIDER_IDS:()=>BJ,BUILT_IN_PROVIDER:()=>Z5,AzureSettingsSchema:()=>YQ,AwsSettingsSchema:()=>JQ,AuthSettingsSchema:()=>QQ,AgentTeamsRuntime:()=>k2,AgentTeam:()=>K4,Agent:()=>qI,ALL_DEFAULT_TOOL_NAMES:()=>X$});R(M,Po);import*as ak from"@cline/llms";import{ClineNotSubscribedError as sk,ClineOrgIndividualInferenceSubscriptionError as ok,getClineOrgIndividualInferenceSubscriptionMessage as tk,getClineNotSubscribedMessage as ek,getClinePassSubscriptionUrl as $I,isClineNotSubscribedError as ZI,isClineNotSubscribedMessage as QI,isClineOrgIndividualInferenceSubscriptionError as WI,isClineOrgIndividualInferenceSubscriptionMessage as JI}from"@cline/llms";import{buildClineSystemPrompt as XI,buildSdkErrorProperties as YI,ContributionRegistry as jI,captureSdkError as VI,createClineTelemetryServiceConfig as HI,createClineTelemetryServiceMetadata as BI,createContributionRegistry as GI,createTool as KI,emptyWorkspaceManifest as FI,FEATURE_FLAGS as AI,FeatureFlagDefaultValue as fI,formatDisplayUserInput as UI,noopBasicLogger as DI,normalizeSdkError as TI,normalizeUserInput as LI,parseUserCommandEnvelope as _I,registerDisposable as zI,SDK_ERROR_TELEMETRY_EVENT as OI}from"@cline/shared";import"@cline/shared/storage";var XK={};N(XK,{isClineAccountActionRequest:()=>fQ,executeClineAccountAction:()=>UQ,RpcClineAccountService:()=>X5,ClineAccountService:()=>J5});function JN($){if(typeof $!=="object"||$===null||!("error"in $))return;let Z=$.error;return typeof Z==="string"&&Z.trim()?Z:void 0}function JK($,Z,Q){let W=JN(Q);if(W)return W;let J=Z.trim();if(J){let X=J.length>200?`${J.slice(0,200)}...`:J;return`Cline account request failed with status ${$}: ${X}`}return`Cline account request failed with status ${$}`}class J5{apiBaseUrl;getAuthTokenFn;getCurrentUserIdFn;getOrganizationMemberIdFn;getHeadersFn;requestTimeoutMs;fetchImpl;constructor($){let Z=$.apiBaseUrl.trim();if(!Z)throw Error("apiBaseUrl is required");this.apiBaseUrl=Z,this.getAuthTokenFn=$.getAuthToken,this.getCurrentUserIdFn=$.getCurrentUserId,this.getOrganizationMemberIdFn=$.getOrganizationMemberId,this.getHeadersFn=$.getHeaders,this.requestTimeoutMs=$.requestTimeoutMs??30000,this.fetchImpl=$.fetchImpl??fetch}async fetchMe(){return this.request("/api/v1/users/me")}async fetchRemoteConfig(){return this.request("/api/v1/users/me/remote-config")}async fetchFeaturebaseToken(){try{return await this.request("/api/v1/users/me/featurebase-token")}catch{return}}async fetchBalance($){let Z=await this.resolveUserId($);return this.request(`/api/v1/users/${encodeURIComponent(Z)}/balance`)}async fetchUsageTransactions($){let Z=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(Z)}/usages`)).items??[]}async fetchPaymentTransactions($){let Z=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(Z)}/payments`)).paymentTransactions??[]}async fetchUserOrganizations(){return(await this.fetchMe()).organizations??[]}async fetchAvailableSubscriptionPlans($){let Z=new URL("/api/v1/plans",this.apiBaseUrl);if($?.type)Z.searchParams.set("type",$.type);return this.request(`${Z.pathname}${Z.search}`)}async fetchOrganization($){let Z=$.trim();if(!Z)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(Z)}`)}async fetchOrganizationBalance($){let Z=$.trim();if(!Z)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(Z)}/balance`)}async fetchOrganizationUsageTransactions($){let Z=$.organizationId.trim();if(!Z)throw Error("organizationId is required");let Q=await this.resolveOrganizationMemberId(Z,$.memberId);return(await this.request(`/api/v1/organizations/${encodeURIComponent(Z)}/members/${encodeURIComponent(Q)}/usages`)).items??[]}async switchAccount($){await this.request("/api/v1/users/active-account",{method:"PUT",body:{organizationId:$?.trim()||null},expectNoContent:!0})}async resolveUserId($){let Z=$?.trim();if(Z)return Z;let W=(this.getCurrentUserIdFn?await this.getCurrentUserIdFn():void 0)?.trim();if(W)return W;let J=await this.fetchMe();if(!J.id?.trim())throw Error("Unable to resolve current user id");return J.id}async resolveOrganizationMemberId($,Z){let Q=Z?.trim();if(Q)return Q;let J=(this.getOrganizationMemberIdFn?await this.getOrganizationMemberIdFn($):void 0)?.trim();if(J)return J;let Y=(await this.fetchUserOrganizations()).find((j)=>j.organizationId===$)?.memberId;if(!Y?.trim())throw Error(`Unable to resolve memberId for organization ${$}`);return Y}async request($,Z){let Q=(await this.getAuthTokenFn())?.trim();if(!Q)throw Error("No Cline account auth token found");let W=this.getHeadersFn?await this.getHeadersFn():{},J=new AbortController,X=setTimeout(()=>J.abort(),this.requestTimeoutMs);try{let Y=await this.fetchImpl(new URL($,this.apiBaseUrl),{method:Z?.method??"GET",headers:{Authorization:`Bearer ${Q}`,"Content-Type":"application/json",...W??{}},body:Z?.body!==void 0?JSON.stringify(Z.body):void 0,signal:J.signal});if(Y.status===204||Z?.expectNoContent){if(!Y.ok)throw Error(`Cline account request failed with status ${Y.status}`);return}let j=await Y.text(),V;if(j.trim())try{V=JSON.parse(j)}catch{if(!Y.ok)throw Error(JK(Y.status,j,void 0));throw Error("Cline account response was not valid JSON")}if(!Y.ok)throw Error(JK(Y.status,j,V));if(typeof V==="object"&&V!==null){let H=V;if(typeof H.success==="boolean"){if(!H.success)throw Error(H.error||"Cline account request failed");if(H.data!==void 0)return H.data}}if(V===void 0||V===null)throw Error("Cline account response payload was empty");return V}finally{clearTimeout(X)}}}function fQ($){return $.action==="clineAccount"}async function UQ($,Z){switch($.operation){case"fetchMe":return Z.fetchMe();case"fetchBalance":return Z.fetchBalance($.userId);case"fetchUsageTransactions":return Z.fetchUsageTransactions($.userId);case"fetchPaymentTransactions":return Z.fetchPaymentTransactions($.userId);case"fetchUserOrganizations":return Z.fetchUserOrganizations();case"fetchOrganizationBalance":return Z.fetchOrganizationBalance($.organizationId);case"fetchOrganizationUsageTransactions":return Z.fetchOrganizationUsageTransactions({organizationId:$.organizationId,memberId:$.memberId});case"switchAccount":return await Z.switchAccount($.organizationId),{updated:!0};case"fetchFeaturebaseToken":return Z.fetchFeaturebaseToken?.();default:throw Error(`Unsupported Cline account operation: ${String($)}`)}}class X5{executor;constructor($){this.executor=$}async fetchMe(){return this.request({action:"clineAccount",operation:"fetchMe"})}async fetchBalance($){return this.request({action:"clineAccount",operation:"fetchBalance",...$?.trim()?{userId:$.trim()}:{}})}async fetchUsageTransactions($){return this.request({action:"clineAccount",operation:"fetchUsageTransactions",...$?.trim()?{userId:$.trim()}:{}})}async fetchPaymentTransactions($){return this.request({action:"clineAccount",operation:"fetchPaymentTransactions",...$?.trim()?{userId:$.trim()}:{}})}async fetchUserOrganizations(){return this.request({action:"clineAccount",operation:"fetchUserOrganizations"})}async fetchOrganizationBalance($){let Z=$.trim();if(!Z)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationBalance",organizationId:Z})}async fetchOrganizationUsageTransactions($){let Z=$.organizationId.trim();if(!Z)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationUsageTransactions",organizationId:Z,...$.memberId?.trim()?{memberId:$.memberId.trim()}:{}})}async switchAccount($){await this.request({action:"clineAccount",operation:"switchAccount",organizationId:$?.trim()||null})}async fetchFeaturebaseToken(){return this.request({action:"clineAccount",operation:"fetchFeaturebaseToken"})}async request($){return(await this.executor.runProviderAction($)).result}}var YK={};N(YK,{createOAuthClientCallbacks:()=>a8});function a8($){return{onAuth:({url:Z,instructions:Q})=>{if($.onOutput?.(Q??"Complete sign-in in your browser."),$.openUrl)try{Promise.resolve($.openUrl(Z)).catch((W)=>{$.onOpenUrlError?.({url:Z,error:W})})}catch(W){$.onOpenUrlError?.({url:Z,error:W})}$.onOutput?.(Z)},onPrompt:$.onPrompt,onServerListening:$.onServerListening,onServerClose:$.onServerClose}}var CA={};N(CA,{ClineCore:()=>d5});function jK($){if($===!0)return{};if(!$)return;return $}function VK($){if($==="user")return"global";return $}class UJ{getService;constructor($){this.getService=$}async start(){await this.getService().start()}async stop(){await this.getService().stop()}async reconcileNow(){await this.getService().reconcileNow()}ingestEvent($){let Z=this.getService().ingestEvent($);return{event:Z.event,duplicate:Z.duplicate,matchedSpecIds:Z.matchedSpecs.map((Q)=>Q.specId),queuedRuns:Z.queuedRuns,suppressions:Z.suppressions}}listEvents($){return this.getService().listEventLogs($)}getEvent($){return this.getService().getEventLog($)}listSpecs($){return this.getService().listSpecs($)}listRuns($){return this.getService().listRuns($)}}function HK($){let{host:Z}=$;return{async startSession(Q){let W=(Q.cwd?.trim()||Q.workspaceRoot).trim(),J=await Z.startSession({source:Q.source?.trim()||_0.CLI,interactive:!1,config:{providerId:p8(Q.provider),modelId:Q.model,apiKey:Q.apiKey?.trim()||void 0,cwd:W,workspaceRoot:Q.workspaceRoot,systemPrompt:Q.systemPrompt??"",mode:jN(Q),maxIterations:Q.maxIterations,enableTools:Q.enableTools!==!1,enableSpawnAgent:Q.enableSpawn!==!1,enableAgentTeams:Q.enableTeams!==!1,disableMcpSettingsTools:Q.disableMcpSettingsTools,missionLogIntervalSteps:Q.missionStepInterval,missionLogIntervalMs:Q.missionTimeIntervalMs},toolPolicies:Q.toolPolicies??{"*":{autoApprove:Q.autoApproveTools!==!1}},localRuntime:{extensionContext:$.getExtensionContext(),configExtensions:Q.configExtensions}});return{sessionId:J.sessionId,startResult:{sessionId:J.sessionId,manifestPath:J.manifestPath,messagesPath:J.messagesPath}}},async sendSession(Q,W){let J=await Z.runTurn({sessionId:Q,prompt:W.prompt,userImages:W.attachments?.userImages,userFiles:W.attachments?.userFiles?.map((X)=>X.content),delivery:W.delivery});if(!J)throw Error("ClineCore automation runtime returned no result");return{result:YN(J)}},async abortSession(Q){return await Z.abort(Q,Error("ClineCore automation abort")),{applied:!0}},async stopSession(Q){return await Z.stopSession(Q),{applied:!0}}}}function DQ($){let Z=XN($.automationService,$.automation),Q=$.context?.client??($.clientName?{name:$.clientName}:void 0),W=$.context?.user??($.distinctId?{distinctId:$.distinctId}:void 0),J=$.context?.logger??$.logger,X=$.context?.telemetry??$.telemetry;if(!Z&&!Q&&!W&&!J&&!X)return $.context;return{...$.context??{},...Q?{client:Q}:{},...W?{user:W}:{},...J?{logger:J}:{},...X?{telemetry:X}:{},...Z?{automation:Z}:{}}}function XN($,Z){if(!$)return;return{ingestEvent:(Q)=>{Z.ingestEvent(Q)}}}function YN($){return{text:$.text,usage:{inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens,cacheWriteTokens:$.usage.cacheWriteTokens,totalCost:$.usage.totalCost},inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,iterations:$.iterations,finishReason:$.finishReason,toolCalls:$.toolCalls.map((Z)=>({name:Z.name,input:Z.input,output:Z.output,error:Z.error,durationMs:Z.durationMs}))}}function jN($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}var GF={};N(GF,{createCoreSettingsService:()=>y2,CoreSettingsService:()=>I$});import{existsSync as E5,readFileSync as rC}from"node:fs";import{basename as bJ,dirname as JF,extname as iC,isAbsolute as jF,join as nC,relative as VF,resolve as XF}from"node:path";var OK={};N(OK,{resolveWorkflowsConfigSearchPaths:()=>A5,resolveSkillsConfigSearchPaths:()=>K5,resolveRulesConfigSearchPaths:()=>F5,parseWorkflowConfigFromMarkdown:()=>G5,parseSkillConfigFromMarkdown:()=>H5,parseRuleConfigFromMarkdown:()=>B5,createWorkflowsConfigDefinition:()=>D5,createUserInstructionConfigService:()=>y$,createSkillsConfigDefinition:()=>f5,createRulesConfigDefinition:()=>U5,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>V5,UnifiedConfigFileWatcher:()=>E2,SKILLS_CONFIG_DIRECTORY_NAME:()=>j5,RULES_CONFIG_DIRECTORY_NAME:()=>qQ});import{createHash as VN}from"node:crypto";import{watch as HN}from"node:fs";import{readdir as BN,readFile as GN}from"node:fs/promises";import{join as KN}from"node:path";function FN($){return VN("sha1").update($).digest("hex")}function KK($){return Boolean($&&typeof $==="object"&&"code"in $)}function BK($){return KK($)&&$.code==="ENOENT"}function GK($){return KK($)&&($.code==="EACCES"||$.code==="EPERM")}class E2{definitions;debounceMs;emitParseErrors;listeners=new Set;recordsByType=new Map;watchersByDirectory=new Map;baseTypesByDirectory=new Map;watchedTypesByDirectory=new Map;discoveredDirectoriesByType=new Map;definitionsByType=new Map;pendingTypes=new Set;flushTimer;refreshQueue=Promise.resolve();started=!1;constructor($,Z){if($.length===0)throw Error("UnifiedConfigFileWatcher requires at least one definition.");this.definitions=$,this.debounceMs=Z?.debounceMs??75,this.emitParseErrors=Z?.emitParseErrors??!1;for(let Q of $){if(this.definitionsByType.has(Q.type))throw Error(`Duplicate unified config definition type '${Q.type}'.`);this.definitionsByType.set(Q.type,Q),this.recordsByType.set(Q.type,new Map),this.discoveredDirectoriesByType.set(Q.type,new Set);for(let W of Q.directories){let J=this.baseTypesByDirectory.get(W);if(J)J.add(Q.type);else this.baseTypesByDirectory.set(W,new Set([Q.type]))}}}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}async start(){if(this.started)return;this.started=!0,await this.refreshAll(),this.startDirectoryWatchers()}stop(){if(this.started=!1,this.flushTimer)clearTimeout(this.flushTimer),this.flushTimer=void 0;this.pendingTypes.clear();for(let $ of this.watchersByDirectory.values())$.close();this.watchersByDirectory.clear(),this.watchedTypesByDirectory=new Map}async refreshAll(){await this.enqueueRefresh(async()=>{for(let $ of this.definitions)await this.refreshTypeInternal($)})}async refreshType($){let Z=this.definitionsByType.get($);if(!Z)throw Error(`Unknown unified config type '${$}'.`);await this.enqueueRefresh(async()=>{await this.refreshTypeInternal(Z)})}getSnapshot($){let Z=this.recordsByType.get($);return new Map([...Z?.entries()??[]].map(([Q,W])=>[Q,{...W}]))}getAllSnapshots(){let $=new Map;for(let[Z,Q]of this.recordsByType.entries())$.set(Z,new Map([...Q.entries()].map(([W,J])=>[W,{...J}])));return $}emit($){for(let Z of this.listeners)Z($)}enqueueRefresh($){return this.refreshQueue=this.refreshQueue.then($,$),this.refreshQueue}startDirectoryWatchers(){this.syncDirectoryWatchers()}syncDirectoryWatchers(){let $=this.buildDesiredTypesByDirectory();for(let[Z,Q]of this.watchersByDirectory.entries()){if($.has(Z))continue;Q.close(),this.watchersByDirectory.delete(Z)}this.watchedTypesByDirectory=$;for(let Z of $.keys()){if(this.watchersByDirectory.has(Z))continue;try{let Q=HN(Z,()=>{let W=this.watchedTypesByDirectory.get(Z);if(!W)return;for(let J of W)this.pendingTypes.add(J);this.scheduleFlush()});this.watchersByDirectory.set(Z,Q),Q.on("error",(W)=>{let J=this.watchedTypesByDirectory.get(Z);if(!J)return;for(let X of J)this.emit({kind:"error",type:X,error:W,filePath:Z})})}catch(Q){if(!BK(Q)&&!GK(Q)){let W=$.get(Z);if(!W)continue;for(let J of W)this.emit({kind:"error",type:J,error:Q,filePath:Z})}}}}scheduleFlush(){if(this.flushTimer)clearTimeout(this.flushTimer);this.flushTimer=setTimeout(()=>{this.flushTimer=void 0;let $=[...this.pendingTypes];this.pendingTypes.clear(),this.enqueueRefresh(async()=>{for(let Z of $){let Q=this.definitionsByType.get(Z);if(!Q)continue;await this.refreshTypeInternal(Q)}})},this.debounceMs)}async refreshTypeInternal($){let{records:Z,discoveredDirectories:Q}=await this.loadDefinition($),W=this.recordsByType.get($.type)??new Map;for(let[J,X]of W.entries()){if(Z.has(J))continue;this.emit({kind:"remove",type:$.type,id:J,filePath:X.filePath})}for(let[J,X]of Z.entries()){let Y=W.get(J);if(Y&&Y.filePath===X.filePath&&Y.fingerprint===X.fingerprint)continue;this.emit({kind:"upsert",record:{type:X.type,id:J,item:X.item,filePath:X.filePath}})}if(this.recordsByType.set($.type,Z),this.discoveredDirectoriesByType.set($.type,Q),this.started)this.syncDirectoryWatchers()}async loadDefinition($){let Z=new Map,Q=new Set;for(let W of $.directories){Q.add(W);let J=$.discoverFiles?await $.discoverFiles(W):await this.readDirectoryFileCandidates(W);for(let X of J){let{fileName:Y,filePath:j}=X;if(Q.add(X.directoryPath),$.includeFile&&!$.includeFile(Y,j))continue;try{let V=await GN(j,"utf8"),H={type:$.type,directoryPath:X.directoryPath,fileName:Y,filePath:j,content:V},B=$.parseFile(H),G=$.resolveId(B,H).trim();if(!G)continue;Z.set(G,{type:$.type,id:G,item:B,filePath:j,fingerprint:FN(V)})}catch(V){if(this.emitParseErrors)this.emit({kind:"error",type:$.type,error:V,filePath:j})}}}return{records:Z,discoveredDirectories:Q}}buildDesiredTypesByDirectory(){let $=new Map;for(let[Z,Q]of this.baseTypesByDirectory.entries())$.set(Z,new Set(Q));for(let[Z,Q]of this.discoveredDirectoriesByType.entries())for(let W of Q){let J=$.get(W);if(J)J.add(Z);else $.set(W,new Set([Z]))}return $}async readDirectoryFileCandidates($){try{return(await BN($,{withFileTypes:!0})).filter((Q)=>Q.isFile()).map((Q)=>({directoryPath:$,fileName:Q.name,filePath:KN($,Q.name)})).sort((Q,W)=>Q.fileName.localeCompare(W.fileName))}catch(Z){if(BK(Z)||GK(Z))return[];throw Z}}}import{readdir as TJ,readFile as AN,stat as DJ}from"node:fs/promises";import{basename as a1,dirname as fN,extname as LQ,join as y0,resolve as Y5}from"node:path";import{AGENTS_RULES_FILE_NAME as FK,RULES_CONFIG_DIRECTORY_NAME as qQ,resolveGlobalAgentsRulesPath as UN,resolveRulesConfigSearchPaths as DN,resolveSkillsConfigSearchPaths as TN,resolveWorkflowsConfigSearchPaths as LN,SKILLS_CONFIG_DIRECTORY_NAME as j5,WORKFLOWS_CONFIG_DIRECTORY_NAME as V5}from"@cline/shared/storage";import _N from"yaml";var TQ="SKILL.md",zN="managed.json",ON=new Set([".md",".markdown",".txt"]);function LJ($){return $.trim().toLowerCase()}function s8($){let Z=$;return Z?.code==="ENOENT"||Z?.code==="EACCES"||Z?.code==="EPERM"||Z?.code==="ELOOP"}function _Q($){return ON.has(LQ($).toLowerCase())}function AK($){let Z=[],Q=new Set;for(let W of $){let J=Y5(W);if(Q.has(J))continue;Q.add(J),Z.push(W)}return Z}function qN($){let Z=[...$?.directories??K5($?.workspacePath)];if($?.pluginSkillDirectories)Z.push(...$.pluginSkillDirectories);else if($?.includePluginSkills)Z.push(...CG({pluginPaths:$.pluginPaths,workspacePath:$.workspacePath,cwd:$.cwd??$.workspacePath}));return AK(Z)}async function _J($){try{let Z=await TJ($,{withFileTypes:!0}),Q=[];for(let W of Z){if(!W.isDirectory())continue;let J=y0($,W.name),X=y0(J,zN);try{let Y=await AN(X,"utf8"),j=JSON.parse(Y);if(j&&typeof j==="object")Q.push(J)}catch(Y){if(s8(Y))continue;if(Y?.name==="SyntaxError")continue;throw Y}}return Q.sort((W,J)=>W.localeCompare(J))}catch(Z){if(s8(Z))return[];throw Z}}function zJ($){let Z=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,Q=$.match(Z);if(!Q)return{data:{},body:$,hadFrontmatter:!1};let[,W,J]=Q;try{let X=_N.parse(W);return{data:X&&typeof X==="object"&&!Array.isArray(X)?X:{},body:J,hadFrontmatter:!0}}catch(X){let Y=X instanceof Error?X.message:String(X);return{data:{},body:$,hadFrontmatter:!0,parseError:Y}}}function zQ($,Z,Q){if($===void 0||$===null){if(Q)throw Error(`Missing required frontmatter field '${Z}'.`);return}if(typeof $!=="string")throw Error(`Frontmatter field '${Z}' must be a string.`);let W=$.trim();if(!W&&Q)throw Error(`Frontmatter field '${Z}' cannot be empty.`);return W||void 0}function o8($,Z){if($===void 0||$===null)return;if(typeof $!=="boolean")throw Error(`Frontmatter field '${Z}' must be a boolean.`);return $}function MN($,Z){if(a1($.filePath).toLowerCase()!==FK.toLowerCase())return a1($.filePath,LQ($.filePath));if(Z&&Y5($.filePath)===Y5(Z,FK))return"Workspace AGENTS.md";if(Y5($.filePath)===Y5(UN()))return"Global AGENTS.md";return a1($.filePath,LQ($.filePath))}function H5($,Z){let{data:Q,body:W,parseError:J}=zJ($);if(J)throw Error(`Failed to parse YAML frontmatter: ${J}`);let X=W.trim();if(!X)throw Error("Missing instructions body in skill file.");let j=zQ(Q.name,"name",!1)??Z.trim();if(!j)throw Error("Missing skill name.");return{name:j,description:zQ(Q.description,"description",!1),disabled:o8(Q.disabled,"disabled")??(o8(Q.enabled,"enabled")===!1?!0:void 0),instructions:X,frontmatter:Q}}function B5($,Z){let{data:Q,body:W,parseError:J}=zJ($);if(J)throw Error(`Failed to parse YAML frontmatter: ${J}`);let X=W.trim();if(!X)throw Error("Missing instructions body in rule file.");let Y=zQ(Q.name,"name",!1)??Z.trim();if(!Y)throw Error("Missing rule name.");return{name:Y,disabled:o8(Q.disabled,"disabled")??(o8(Q.enabled,"enabled")===!1?!0:void 0),instructions:X,frontmatter:Q}}function G5($,Z){let{data:Q,body:W,parseError:J}=zJ($);if(J)throw Error(`Failed to parse YAML frontmatter: ${J}`);let X=W.trim();if(!X)throw Error("Missing instructions body in workflow file.");let Y=zQ(Q.name,"name",!1)??Z.trim();if(!Y)throw Error("Missing workflow name.");return{name:Y,disabled:o8(Q.disabled,"disabled")??(o8(Q.enabled,"enabled")===!1?!0:void 0),instructions:X,frontmatter:Q}}function K5($){return TN($)}function F5($){return DN($)}function A5($){return LN($)}async function fK($){if(a1($)===".cline"){let Z=await _J($);return(await Promise.all(Z.map((W)=>fK(y0(W,j5))))).flat()}try{let Z=await TJ($,{withFileTypes:!0}),Q=[];for(let W of Z){if(W.isFile()&&W.name===TQ){Q.push({directoryPath:$,fileName:W.name,filePath:y0($,W.name)});continue}let J=y0($,W.name);if(W.isDirectory()||W.isSymbolicLink()&&await DJ(J).then((Y)=>Y.isDirectory()).catch((Y)=>{if(s8(Y))return!1;throw Y}))Q.push({directoryPath:J,fileName:TQ,filePath:y0(J,TQ)})}return Q}catch(Z){if(s8(Z))return[];throw Z}}async function OQ($){if(a1($)===".cline"){let Z=await _J($);return(await Promise.all(Z.map((W)=>OQ(y0(W,"rules.md"))))).flat()}try{if((await DJ($)).isFile())return[{directoryPath:fN($),fileName:a1($),filePath:$}]}catch(Z){if(!s8(Z))throw Z}try{let Q=(await TJ($,{withFileTypes:!0})).filter((J)=>J.isFile()&&_Q(J.name)).map((J)=>({directoryPath:$,fileName:J.name,filePath:y0($,J.name)})),W=y0($,"AGENTS.md");try{if((await DJ(W)).isFile()){if(!Q.some((Y)=>Y.fileName==="AGENTS.md"))Q.push({directoryPath:$,fileName:"AGENTS.md",filePath:W})}}catch{}return Q}catch(Z){if(s8(Z))return[];throw Z}}async function RN($){if(a1($)===".cline"){let Z=await _J($);return(await Promise.all(Z.map((W)=>OQ(y0(W,V5))))).flat()}return OQ($)}function f5($){let Z=qN($),Q=$?.workspacePath?y0($.workspacePath,".cline"):void 0;return{type:"skill",directories:Q?AK([...Z,Q]):Z,discoverFiles:fK,includeFile:(W)=>W===TQ,parseFile:(W)=>H5(W.content,a1(W.directoryPath)),resolveId:(W)=>LJ(W.name)}}function U5($){let Z=$?.directories??F5($?.workspacePath),Q=$?.workspacePath?y0($.workspacePath,".cline"):void 0;return{type:"rule",directories:Q?[...Z,Q]:Z,discoverFiles:OQ,includeFile:(W,J)=>W===".clinerules"||_Q(W)||_Q(J),parseFile:(W)=>B5(W.content,MN(W,$?.workspacePath)),resolveId:(W)=>LJ(W.name)}}function D5($){let Z=$?.directories??A5($?.workspacePath),Q=$?.workspacePath?y0($.workspacePath,".cline"):void 0;return{type:"workflow",directories:Q?[...Z,Q]:Z,discoverFiles:RN,includeFile:(W)=>_Q(W),parseFile:(W)=>G5(W.content,a1(W.filePath,LQ(W.filePath))),resolveId:(W)=>LJ(W.name)}}function UK($){let Z=[f5($?.skills),U5($?.rules),D5($?.workflows)];return new E2(Z,{debounceMs:$?.debounceMs,emitParseErrors:$?.emitParseErrors})}import{truncateSplit as DK}from"@cline/shared";function EN($,Z){if($.description?.trim())return DK($.description,".");if(Z==="workflow")return;return DK($.instructions,".")}function NN($){return $.disabled!==!0}function TK($,Z){return[...$.getSnapshot(Z).entries()].map(([Q,W])=>({id:Q,record:W})).filter(({record:Q})=>NN(Q.item)).map(({id:Q,record:W})=>({id:Q,name:W.item.name,instructions:W.item.instructions,description:EN(W.item,Z),kind:Z})).sort((Q,W)=>Q.name.localeCompare(W.name))}function T5($){let Z=new Map;for(let Q of[...TK($,"workflow"),...TK($,"skill")])if(!Z.has(Q.name))Z.set(Q.name,Q);return[...Z.values()].sort((Q,W)=>Q.name.localeCompare(W.name))}function LK($,Z){if(!$.startsWith("/")||$.length<2)return $;let Q=$.match(/^\/(\S+)/);if(!Q)return $;let W=Q[1];if(!W)return $;let J=W.length+1,X=$.slice(J),Y=T5(Z).find((j)=>j.name===W);return Y?`${Y.instructions}${X}`:$}function MQ($){return $.trim().replace(/^\/+/,"").toLowerCase()}function CN($){if(!$||$.length===0)return;let Z=$.map(MQ).filter((Q)=>Q.length>0);return Z.length>0?new Set(Z):void 0}function wN($,Z,Q){if(!Q)return!0;let W=MQ($),J=MQ(Z),X=W.includes(":")?W.split(":").at(-1)??W:W,Y=J.includes(":")?J.split(":").at(-1)??J:J;return Q.has(W)||Q.has(J)||Q.has(X)||Q.has(Y)}function L5($,Z){let Q=CN(Z);return[...$.getSnapshot("skill").entries()].map(([J,X])=>{let Y=X.item;return{id:J,name:Y.name.trim(),description:Y.description?.trim(),disabled:Y.disabled===!0,skill:Y}}).filter((J)=>wN(J.id,J.name,Q))}function PN($,Z){return L5($,Z).filter((Q)=>!Q.disabled).map((Q)=>Q.name.trim()).filter((Q)=>Q.length>0).sort((Q,W)=>Q.localeCompare(W))}function SN($,Z,Q){let W=MQ(Z);if(!W)return{error:"Missing skill name."};let J=L5($,Q),X=J.find((B)=>B.id===W);if(X){let{skill:B}=X;if(B.disabled===!0)return{error:`Skill "${B.name}" is configured but disabled.`};return{id:X.id,skill:B}}let Y=W.includes(":")?W.split(":").at(-1)??W:W,j=J.filter(({id:B})=>{if(B===Y)return!0;return B.endsWith(`:${Y}`)}),V=j.filter(({skill:B})=>B.disabled!==!0);if(V.length===1){let{id:B,skill:G}=V[0];return{id:B,skill:G}}if(V.length>1)return{error:`Skill "${Z}" is ambiguous. Use one of: ${V.map(({id:B})=>B).join(", ")}`};if(j.length===1){let{skill:B}=j[0];return{error:`Skill "${B.name}" is configured but disabled.`}}if(j.length>1)return{error:`Skill "${Z}" is ambiguous, and all matches are disabled: ${j.map(({id:B})=>B).join(", ")}`};let H=PN($,Q);return{error:H.length>0?`Skill "${Z}" not found. Available skills: ${H.join(", ")}`:"No skills are currently available."}}function OJ($,Z=Promise.resolve(),Q){let W=new Set,J=async(X,Y)=>{await Z;let j=SN($,X,Q);if("error"in j)return j.error;let{id:V,skill:H}=j;if(W.has(V))return`Skill "${H.name}" is already running.`;W.add(V);try{let B=Y?.trim(),G=B?`
|
|
470
|
+
${W}`;return Q||W}function sq($,Z){let Q=Z?.["*"]??{},W=Z?.[$]??{};return{...Q,...W}.enabled!==!1}function oq($,Z){return $.filter((Q)=>sq(Q.name,Z))}function tq($,Z){return y1(oq($,Z))}function eq($){let Z=$.filter((Q)=>Q!==void 0);if(Z.length===0)return{};return{beforeRun:async(Q)=>{for(let W of Z){let J=await W.beforeRun?.(Q);if(J?.stop)return J}return},afterRun:async(Q)=>{for(let W of Z)await W.afterRun?.(Q)},beforeModel:async(Q)=>{let W=Q.request,J;for(let X of Z){let Y=await X.beforeModel?.({...Q,request:W});if(!Y)continue;if(Y.stop)return Y;J={...J,...Y,options:LB(J?.options,Y.options)},W={...W,...Y.messages?{messages:Y.messages}:{},...Y.tools?{tools:Y.tools}:{},...Y.options?{options:LB(W.options,Y.options)}:{}}}return J},afterModel:async(Q)=>{for(let W of Z){let J=await W.afterModel?.(Q);if(J?.stop)return J}return},beforeTool:async(Q)=>{let W=Q.input,J;for(let X of Z){let Y=await X.beforeTool?.({...Q,input:W});if(!Y)continue;if(Y.stop||Y.skip)return Y;if(J={...J,...Y},Object.hasOwn(Y,"input"))W=Y.input}return J},afterTool:async(Q)=>{let W=Q.result,J;for(let X of Z){let Y=await X.afterTool?.({...Q,result:W});if(!Y)continue;if(Y.stop)return Y;if(J={...J,...Y},Y.result)W=Y.result}return J},onEvent:async(Q)=>{for(let W of Z)await W.onEvent?.(Q)}}}class z${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 E3;shutdownCalled=!1;currentRunToolCalls=[];currentRunUsage={inputTokens:0,outputTokens:0};toolStartedAt=new Map;toolInputs=new Map;currentTurnSuccessfulTools=0;currentTurnFailedTools=0;currentTurnFailureDetails=[];activeTrackerWork=Promise.resolve();trackerAbortInFlight=!1;constructor($,Z={}){this.config=$,this.agentId=`agent_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,this.parentAgentId=$.parentAgentId,this.logger=Z.logger??$.logger,this.telemetry=Z.telemetry??$.telemetry,this.createAgentRuntimeImpl=Z.createAgentRuntimeImpl??pq,this.conversation=new O3($.initialMessages),this.messageBuilder=new _3(FB()),this.contributionRegistry=rq({extensions:$.extensions?[...$.extensions]:[],setupContext:{session:$.extensionContext?.session,client:$.extensionContext?.client,user:$.extensionContext?.user,workspaceInfo:$.extensionContext?.workspace,automation:$.extensionContext?.automation,logger:$.extensionContext?.logger??this.logger,telemetry:$.extensionContext?.telemetry??this.telemetry}}),this.contributionRegistry.resolve(),this.contributionRegistry.validate();let Q=$.execution?.maxConsecutiveMistakes??6;this.mistakeTracker=new R3({maxConsecutiveMistakes:Q,onLimitReached:$.onConsecutiveMistakeLimitReached,emit:(X)=>this.emitLegacyEvent(X),log:(X,Y,j)=>$M(this.logger,X,Y,j),agentId:this.agentId,getConversationId:()=>this.conversation.getConversationId(),getActiveRunId:()=>this.activeRunId??"",appendRecoveryNotice:(X,Y)=>{this.conversation.appendMessage({role:"user",content:[{type:"text",text:X}]})}});let W=$.execution?.loopDetection;this.loopDetectionDisabled=W===!1;let J=W===!1||W===void 0?void 0:W;this.loopTracker=new M3(J)}getAgentId(){return this.agentId}getConversationId(){return this.conversation.getConversationId()}getMessages(){return this.conversation.getMessages()}canStartRun(){return!this.running&&!this.shutdownCalled}getExtensionRegistry(){return this.contributionRegistry.getRegistrySnapshot()}addTools($){if($.length===0)return;let Z=new Set(this.config.tools.map((W)=>W.name)),Q=[...this.config.tools];for(let W of $)if(!Z.has(W.name))Q.push(W),Z.add(W.name);this.config={...this.config,tools:Q}}updateConnection($){let Z={...this.config};if($.providerId!==void 0)Z.providerId=$.providerId;if($.modelId!==void 0)Z.modelId=$.modelId;if($.apiKey!==void 0)Z.apiKey=$.apiKey;if($.baseUrl!==void 0)Z.baseUrl=$.baseUrl;if($.headers!==void 0)Z.headers=$.headers;if($.providerConfig!==void 0)Z.providerConfig=$.providerConfig;if($.reasoningEffort!==void 0)Z.reasoningEffort=$.reasoningEffort;if($.thinking!==void 0)Z.thinking=$.thinking;if($.thinkingBudgetTokens!==void 0)Z.thinkingBudgetTokens=$.thinkingBudgetTokens;this.config=Z}clearHistory(){this.conversation.clearHistory(),this.resetConversationBoundaryTrackers()}restore($){this.conversation.restore($),this.resetConversationBoundaryTrackers()}resetConversationBoundaryTrackers(){this.messageBuilder.resetConversationState(),this.mistakeTracker.reset(),this.loopTracker.reset()}subscribeEvents($){return this.listeners.add($),()=>{this.listeners.delete($)}}abort($){let Z=typeof $==="string"?$:$ instanceof Error?$.message:$===void 0?void 0:String($);if(this.abortRequested=!0,this.abortReason=Z,this.activeRunPromise)this.activeRunPromise.catch(()=>{});this.activeRuntime?.abort(Z)}async shutdown($,Z){if(this.running){if(!this.abortRequested||!this.activeRunPromise)throw Error(`SessionRuntime.shutdown called while a run is in progress (agentId=${this.agentId})`);await this.activeRunPromise}if(this.shutdownCalled)return;this.shutdownCalled=!0}run($,Z,Q){return this.conversation.resetForRun(),this.resetConversationBoundaryTrackers(),this.executeRun({userMessage:$,userImages:Z,userFiles:Q,isContinue:!1})}continue($,Z,Q){return this.executeRun({userMessage:$,userImages:Z,userFiles:Q,isContinue:!0})}async composeSystemPrompt(){let $=[];for(let Z of this.contributionRegistry.getRegisteredRules()){let Q=await nq(Z);if(Q)$.push(Q)}return aq(this.config.systemPrompt,$)}executeRun($){let Z;return Z=this.executeRunInternal($).finally(()=>{if(this.activeRunPromise===Z)this.activeRunPromise=null}),this.activeRunPromise=Z,Z}async executeRunInternal($){if(this.shutdownCalled)throw Error(`SessionRuntime.run called after shutdown (agentId=${this.agentId})`);if(this.running)throw Error(`SessionRuntime state is "running"; call canStartRun() first (agentId=${this.agentId})`);this.running=!0,this.abortRequested=!1,this.abortReason=void 0,this.activeRunId=`run_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,await this.ensureExtensionsInitialized(),this.eventAdapter.reset(),this.currentRunToolCalls=[],this.currentRunUsage={inputTokens:0,outputTokens:0},this.toolStartedAt.clear(),this.toolInputs.clear(),this.currentTurnSuccessfulTools=0,this.currentTurnFailedTools=0,this.currentTurnFailureDetails=[],this.activeTrackerWork=Promise.resolve(),this.trackerAbortInFlight=!1;let Z=new Date,Q=$.userMessage;if(Q!==void 0){let U=await QM(Q,$.userImages,$.userFiles,this.config.userFileContentLoader);this.conversation.appendMessage({role:"user",content:U})}let W=await this.composeSystemPrompt(),J=JB(this.config,this.logger,this.telemetry),X=new Map;for(let U of this.contributionRegistry.getRegisteredTools())X.set(U.name,U);let Y=tq([...X.values()],this.config.toolPolicies),j=new Map;for(let U of Y)j.set(U.name,U);for(let U of this.config.tools)j.set(U.name,U);let V=this.conversation.getConversationId(),H=_B(this.config),B=Array.from(j.values()),G=qZ(this.conversation.getMessages()),K=fB({agentConfig:this.config,sessionId:this.config.sessionId,agentId:this.agentId,conversationId:V,parentAgentId:this.parentAgentId,model:J,logger:this.logger,telemetry:this.telemetry,tools:B,toolContextMetadata:{modelSupportsImages:H?.capabilities?.includes("images")??!0,...this.config.toolContextMetadata,[OH]:this.telemetry},hooks:this.createRuntimeHooks(),prepareTurn:this.createRuntimePrepareTurn(H,B),initialMessages:G,systemPrompt:W}),F=this.createAgentRuntimeImpl(K);if(this.activeRuntime=F,this.abortRequested)F.abort(this.abortReason);let A=F.subscribe((U)=>{this.handleRuntimeEvent(U)}),L,f;try{if($.isContinue)L=await F.continue(void 0);else L=await F.run("")}catch(U){f=U instanceof Error?U:Error(String(U))}finally{A();try{await this.activeTrackerWork}catch(U){this.logger?.error?.("SessionRuntime tracker work failed during drain",{agentId:this.agentId,error:U})}this.activeRuntime=null,this.running=!1,this.abortRequested=!1,this.abortReason=void 0}if(L&&L.messages.length>0){let U=R8(L.messages);this.conversation.replaceMessages(U)}let D=new Date;try{return this.buildLegacyResult({runResult:L,thrownError:f,startedAt:Z,endedAt:D})}finally{this.activeRunId=null}}async ensureExtensionsInitialized(){if(this.extensionsInitialized)return;try{await this.contributionRegistry.initialize({tolerateSetupErrors:this.config.hookErrorMode!=="throw"})}catch($){if(this.config.hookErrorMode==="throw")throw $;this.emitLegacyEvent({type:"error",error:$ instanceof Error?$:Error(String($)),recoverable:!0,iteration:0})}this.extensionsInitialized=!0}createRuntimeHooks(){let $=eq([this.config.hooks,...this.contributionRegistry.getValidatedExtensions().map((Z)=>Z.hooks)]);return{...$,beforeModel:async(Z)=>{let Q=await $.beforeModel?.(Z);if(Q?.stop)return Q;let W=Q?.messages??Z.request.messages,J=await this.prepareMessagesForModelRequest(W);return{...Q,messages:J}}}}createRuntimePrepareTurn($,Z){let Q=this.config.prepareTurn;if(!Q)return;return async(W)=>{let J=R8(W.messages),X=await this.prepareProviderMessagesForApi(J),Y=await Q({agentId:W.agentId,conversationId:W.conversationId??this.conversation.getConversationId(),parentAgentId:W.parentAgentId??null,iteration:W.iteration,messages:J,apiMessages:X,abortSignal:W.signal??new AbortController().signal,systemPrompt:W.systemPrompt??"",tools:Z,model:{id:this.config.modelId,provider:this.config.providerId,info:$},emitStatusNotice:W.emitStatusNotice});if(!Y)return;return{...Y.messages?{messages:qZ(Y.messages)}:{},...Y.systemPrompt!==void 0?{systemPrompt:Y.systemPrompt}:{}}}}async prepareMessagesForModelRequest($){let Z=await this.prepareProviderMessagesForApi(MZ($));return qZ(Z)}async prepareProviderMessagesForApi($){let Z=$,Q=this.contributionRegistry.getRegistrySnapshot().messageBuilder;for(let W of Q)Z=await W.build(Z);return this.messageBuilder.buildForApi(Z)}handleRuntimeEvent($){switch($.type){case"message-added":case"assistant-message":{this.syncConversationFromRuntimeMessage($.snapshot.messages,[$.message]);break}case"turn-started":{this.currentTurnSuccessfulTools=0,this.currentTurnFailedTools=0,this.currentTurnFailureDetails=[];break}case"tool-started":{this.toolStartedAt.set($.toolCall.toolCallId,new Date),this.toolInputs.set($.toolCall.toolCallId,$.toolCall.input),this.inspectLoopForToolCall($.toolCall.toolName,$.toolCall.input,$.iteration);break}case"tool-finished":{let Z=this.toolStartedAt.get($.toolCall.toolCallId),Q=new Date,W=this.toolInputs.get($.toolCall.toolCallId);this.toolStartedAt.delete($.toolCall.toolCallId),this.toolInputs.delete($.toolCall.toolCallId);let J=$.message.content.find((V)=>V.type==="tool-result"),X=J?.type==="tool-result"&&J.isError===!0,Y=X?iq(J?.type==="tool-result"?J.output:void 0):void 0,j={id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:W,output:J?.type==="tool-result"?J.output:void 0,error:Y,durationMs:Z===void 0?0:Q.getTime()-Z.getTime(),startedAt:Z??Q,endedAt:Q};if(this.currentRunToolCalls.push(j),X){if(this.currentTurnFailedTools+=1,Y)this.currentTurnFailureDetails.push(`[${$.toolCall.toolName}] ${Y}`)}else this.currentTurnSuccessfulTools+=1;break}case"turn-finished":{let Z=this.currentTurnFailedTools,Q=this.currentTurnSuccessfulTools;if(Z>0&&Q===0){let W=this.currentTurnFailureDetails.join("; ");this.enqueueMistakeRecord({iteration:$.iteration,reason:"tool_execution_failed",details:`${Z} tool call(s) failed${W?`: ${W}`:""}`})}else if(Q>0)this.mistakeTracker.reset();break}case"usage-updated":{this.currentRunUsage={inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens>0?$.usage.cacheReadTokens:void 0,cacheWriteTokens:$.usage.cacheWriteTokens>0?$.usage.cacheWriteTokens:void 0,totalCost:$.usage.totalCost};break}default:break}for(let Z of this.eventAdapter.translate($))this.emitLegacyEvent(Z)}syncConversationFromRuntimeMessage($,Z){if($.length>0){this.conversation.replaceMessages(R8($));return}if(Z.length===0)return;let Q=new Set(this.conversation.getMessages().map((J)=>J.id).filter((J)=>typeof J==="string")),W=R8(Z).filter((J)=>!J.id||!Q.has(J.id));if(W.length===0)return;this.conversation.replaceMessages([...this.conversation.getMessages(),...W])}emitLegacyEvent($){for(let Z of this.listeners)try{Z($)}catch(Q){this.logger?.error?.("SessionRuntime event listener threw",{agentId:this.agentId,error:Q})}}inspectLoopForToolCall($,Z,Q){if(this.trackerAbortInFlight||this.loopDetectionDisabled)return;let W=this.loopTracker.inspect({name:$,input:Z});if(W.kind==="ok")return;if(W.kind==="soft"){if(W.message)this.conversation.appendMessage({role:"user",content:[{type:"text",text:W.message}]});return}this.enqueueMistakeRecord({iteration:Q,reason:"tool_execution_failed",forceAtLimit:!0,details:W.message??`Detected repeated tool calls to \`${$}\`; stopping to avoid a loop.`})}enqueueMistakeRecord($){if(this.trackerAbortInFlight)return;this.activeTrackerWork=this.activeTrackerWork.then(async()=>{if(this.trackerAbortInFlight)return;let Z=await this.mistakeTracker.record($);if(Z.action==="stop")this.trackerAbortInFlight=!0,this.conversation.appendMessage({role:"user",content:[{type:"text",text:Z.message}]}),this.activeRuntime?.abort(Z.reason??Z.message)})}buildLegacyResult($){let{runResult:Z,thrownError:Q,startedAt:W,endedAt:J}=$,X=J.getTime()-W.getTime(),Y=Q?"error":ZM(Z),j=(Z?.status==="failed"?Z.error?.message:void 0)||Z?.outputText||"",V=Z?{inputTokens:Z.usage.inputTokens,outputTokens:Z.usage.outputTokens,cacheReadTokens:Z.usage.cacheReadTokens>0?Z.usage.cacheReadTokens:void 0,cacheWriteTokens:Z.usage.cacheWriteTokens>0?Z.usage.cacheWriteTokens:void 0,totalCost:Z.usage.totalCost}:this.currentRunUsage,H=Z?R8(Z.messages):this.conversation.getMessages(),B=_B(this.config);if(Q)throw Q;return{text:j,usage:V,messages:H,toolCalls:this.currentRunToolCalls,iterations:Z?.iterations??0,finishReason:Y,model:{id:this.config.modelId,provider:this.config.providerId,info:B},startedAt:W,endedAt:J,durationMs:X}}}function $M($,Z,Q,W){if(!$)return;if(Z==="debug"){$.debug(Q,W);return}if(Z==="error"&&$.error){$.error(Q,W);return}let J=Z==="warn"?"warn":Z==="error"?"error":"info";$.log(Q,{...W,severity:J})}function ZM($){if(!$)return"error";switch($.status){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}async function QM($,Z,Q,W){let{buildInitialUserContent:J}=await Promise.resolve().then(() => DB);return J($,Z,Q,W)}function _B($){if($.knownModels?.[$.modelId])return $.knownModels[$.modelId];let Z=U3($);if(Z?.[$.modelId])return Z[$.modelId];return}import{buildClineSystemPrompt as zB}from"@cline/shared";function TB($,Z){let Q=$.trim();if(Z.providerId.toLowerCase()!=="cline")return Q;return zB({ide:Z.clineIdeName?.trim()||"Terminal",workspaceRoot:Z.cwd?.trim()||"/",providerId:Z.providerId,rules:`# Team Teammate Role
|
|
471
|
+
${Q}`,platform:Z.clinePlatform,metadata:Z.workspaceMetadata})}function OB($,Z){let Q=$.trim();if(Z.providerId.toLowerCase()!=="cline")return Q;return zB({ide:Z.clineIdeName||"Terminal",workspaceRoot:Z.cwd?.trim()||"/",providerId:Z.providerId,overridePrompt:Q,metadata:Z.workspaceMetadata,platform:Z.clinePlatform})}function T$($){let Z={...$};return{getRuntimeConfig:()=>Z,getConnectionConfig:()=>({providerId:Z.providerId,modelId:Z.modelId,apiKey:Z.apiKey,baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking,maxTokensPerTurn:Z.maxTokensPerTurn}),updateConnectionDefaults:(Q)=>{Z={...Z,...Q}}}}function G2($){let Z=$.configProvider.getRuntimeConfig(),Q=$.kind==="teammate"?TB($.prompt,Z):OB($.prompt,Z);return{...$.configProvider.getConnectionConfig(),systemPrompt:Q,tools:$.tools,maxIterations:$.maxIterations??Z.maxIterations,parentAgentId:$.parentAgentId,abortSignal:$.abortSignal,onEvent:$.onEvent,hooks:Z.hooks,extensions:Z.extensions,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval,logger:Z.logger,role:$.role}}function O$($){let Z=G2($),Q=new z$(Z);if(Z.onEvent)Q.subscribeEvents(Z.onEvent);return Q}var XM=N3.object({systemPrompt:N3.string().describe("System prompt defining the sub-agent's behavior"),task:N3.string().describe("Task for the sub-agent to complete")});function q$($){return WM({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:JM(XM),execute:async(Z,Q)=>{let W=$.createSubAgentTools?await $.createSubAgentTools(Z,Q):$.subAgentTools??[],J=O$({kind:"subagent",prompt:Z.systemPrompt,configProvider:$.configProvider,tools:W,maxIterations:$.defaultMaxIterations,parentAgentId:Q.agentId,abortSignal:Q.signal,onEvent:$.onSubAgentEvent,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval}),X=J.getAgentId(),Y=J.getConversationId(),j=Q.agentId;if($.onSubAgentStart)try{await $.onSubAgentStart({subAgentId:X,conversationId:Y,parentAgentId:j,input:Z})}catch{}try{let V=await J.run(Z.task),H={text:V.text,iterations:V.iterations,finishReason:V.finishReason,usage:{inputTokens:V.usage.inputTokens,outputTokens:V.usage.outputTokens}};if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:X,conversationId:Y,parentAgentId:j,input:Z,result:H,agentResult:V})}catch{}return H}catch(V){if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:X,conversationId:Y,parentAgentId:j,input:Z,error:V instanceof Error?V:Error(String(V))})}catch{}throw V}},timeoutMs:300000,retryable:!1})}import{createTool as F0,TEAM_AWAIT_TIMEOUT_MS as YM,TEAM_RUN_MESSAGE_PREVIEW_LIMIT as jM,TEAM_RUN_TEXT_PREVIEW_LIMIT as VM,TEAM_TASK_IGNORED_FIELDS_BY_ACTION as HM,TeamAttachOutcomeFragmentInputSchema as qB,TeamAwaitRunsInputSchema as MB,TeamBroadcastInputSchema as RB,TeamBroadcastToolResultSchema as BM,TeamCancelRunInputSchema as EB,TeamCancelRunToolResultSchema as GM,TeamCleanupInputSchema as NB,TeamCleanupToolResultSchema as KM,TeamCreateOutcomeInputSchema as wB,TeamCreateOutcomeToolResultSchema as FM,TeamFinalizeOutcomeInputSchema as CB,TeamFinalizeOutcomeToolResultSchema as AM,TeamListOutcomesInputSchema as PB,TeamListRunsInputSchema as SB,TeamMailboxMessageToolResultSchema as fM,TeamMissionLogInputSchema as bB,TeamMissionLogToolResultSchema as UM,TeamOutcomeFragmentToolResultSchema as yB,TeamOutcomeToolResultSchema as DM,TeamReadMailboxInputSchema as hB,TeamReviewOutcomeFragmentInputSchema as kB,TeamRunTaskInputSchema as IB,TeamRunTaskToolResultSchema as w3,TeamRunToolSummarySchema as C3,TeamSendMessageInputSchema as xB,TeamSendMessageToolResultSchema as LM,TeamShutdownTeammateInputSchema as gB,TeamSimpleAgentStatusToolResultSchema as mB,TeamSpawnTeammateInputSchema as vB,TeamStatusInputSchema as cB,TeamStatusToolResultSchema as _M,TeamTaskInputSchema as uB,TeamTaskToolResultSchema as b6,validateWithZod as k,zodToJsonSchema as A0}from"@cline/shared";function dB($,Z){let Q=$.replace(/\s+/g," ").trim();if(Q.length<=Z)return Q;return`${Q.slice(0,Math.max(0,Z-3)).trimEnd()}...`}function K2($,Z){if($===void 0)throw Error(`Missing required field: ${Z}`);return $}function zM($){let Z=$.result;if(!Z)return;return{textPreview:dB(Z.text,VM),iterations:Z.iterations,finishReason:Z.finishReason,durationMs:Z.durationMs,usage:{inputTokens:Z.usage.inputTokens,outputTokens:Z.usage.outputTokens,cacheReadTokens:Z.usage.cacheReadTokens,cacheWriteTokens:Z.usage.cacheWriteTokens,totalCost:Z.usage.totalCost}}}function wZ($){return $?.toISOString()}function P3($){return{id:$.id,agentId:$.agentId,taskId:$.taskId,status:$.status,messagePreview:dB($.message,jM),priority:$.priority,retryCount:$.retryCount,maxRetries:$.maxRetries,nextAttemptAt:wZ($.nextAttemptAt),continueConversation:$.continueConversation,startedAt:$.startedAt.toISOString(),endedAt:wZ($.endedAt),leaseOwner:$.leaseOwner,heartbeatAt:wZ($.heartbeatAt),lastProgressAt:wZ($.lastProgressAt),lastProgressMessage:$.lastProgressMessage,currentActivity:$.currentActivity,error:$.error,resultSummary:zM($)}}function TM($){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 N8=["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 lB($){let Z=[];if($.createBaseTools)Z.push(...$.createBaseTools());Z.push(...F2({runtime:$.runtime,requesterId:$.spec.agentId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!1})),$.runtime.spawnTeammate({agentId:$.spec.agentId,config:G2({kind:"teammate",prompt:$.spec.rolePrompt,role:$.spec.rolePrompt,configProvider:$.teammateConfigProvider,tools:Z,maxIterations:$.spec.maxIterations,cwd:$.teammateConfigProvider.getRuntimeConfig().cwd})})}function w8($){let Z=$.leadAgentId??"lead",Q=$.restoredFromPersistence===!0,W=F2({runtime:$.runtime,requesterId:Z,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!0,includeSpawnTool:$.includeLeadSpawnTool,includeManagementTools:$.includeLeadManagementTools,onLeadToolsUnlocked:$.onLeadToolsUnlocked}),J=[];for(let X of $.restoredTeammates??[]){if($.runtime.isTeammateActive(X.agentId))continue;lB({runtime:$.runtime,requesterId:Z,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:X}),J.push(X.agentId)}return{tools:W,restoredFromPersistence:Q,restoredTeammates:J}}function F2($){let Z=$.allowSpawn??!0,Q=$.includeSpawnTool??!0,W=$.includeManagementTools??!0,J=[];if(Q)J.push(F0({name:"team_spawn_teammate",description:"Spawn a teammate with a required agentId and rolePrompt.",inputSchema:A0(vB),execute:async(Y)=>{let j=k(vB,Y);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");if(!Z)throw Error("Spawning teammates is disabled in this context.");let V={agentId:j.agentId,rolePrompt:j.rolePrompt};if(lB({runtime:$.runtime,requesterId:$.requesterId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:V}),!W)$.onLeadToolsUnlocked?.(F2({...$,includeSpawnTool:!1,includeManagementTools:!0,onLeadToolsUnlocked:void 0}));return k(mB,{agentId:j.agentId,status:"spawned"})}}));if(!W)return J;J.push(F0({name:"team_shutdown_teammate",description:"Shutdown a teammate by agentId.",inputSchema:A0(gB),execute:async(Y)=>{let j=k(gB,Y);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");return $.runtime.shutdownTeammate(j.agentId,j.reason),k(mB,{agentId:j.agentId,status:"stopped"})}})),J.push(F0({name:"team_status",description:"Return a snapshot of team members, task counts, mailbox, and mission log stats.",inputSchema:A0(cB),execute:async(Y)=>{return k(cB,Y),k(_M,$.runtime.getSnapshot())}})),J.push(F0({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:A0(uB),execute:async(Y)=>{let j=k(uB,Y);switch(j.action){case"create":{let V=new Set(HM.create??[]),H=Object.entries(Y).filter(([G,K])=>V.has(G)&&K!=null).map(([G])=>G),B=$.runtime.createTask({title:K2(j.title,"title"),description:K2(j.description,"description"),dependsOn:j.dependsOn,assignee:j.assignee,createdBy:$.requesterId});return k(b6,{action:"create",taskId:B.id,status:B.status,...H.length>0?{ignoredFields:H,note:`Ignored fields for action=create: ${H.join(", ")}`}:{}})}case"list":return k(b6,{action:"list",tasks:$.runtime.listTaskItems({status:j.status,assignee:j.assignee})});case"claim":{let V=$.runtime.claimTask(K2(j.taskId,"taskId"),$.requesterId);return k(b6,{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(K2(j.taskId,"taskId"),$.requesterId,K2(j.summary,"summary"));return k(b6,{action:"complete",taskId:V.id,status:V.status})}case"block":{let V=$.runtime.blockTask(K2(j.taskId,"taskId"),$.requesterId,K2(j.reason,"reason"));return k(b6,{action:"block",taskId:V.id,status:V.status})}}}}));let X=new Map;return J.push(F0({name:"team_run_task",description:"Route a delegated task to a teammate. Choose sync (wait) or async (run in background).",inputSchema:A0(IB),execute:async(Y)=>{let j=k(IB,Y);if(j.runMode==="async"){let B=$.runtime.startTeammateRun(j.agentId,j.task,{taskId:j.taskId||void 0,fromAgentId:$.requesterId,continueConversation:j.continueConversation||void 0});return k(w3,{agentId:j.agentId,mode:"async",status:"queued",dispatched:!0,message:`Task dispatched to ${j.agentId} and queued as ${B.id}.`,runId:B.id})}let V=X.get(j.agentId);if(V){let B=await V;return k(w3,{...B,status:"joined",deduped:!0,message:`Task for ${j.agentId} was already dispatched in this tool batch; joined the existing in-flight run.`})}let H=$.runtime.routeToTeammate(j.agentId,j.task,{taskId:j.taskId||void 0,fromAgentId:$.requesterId,continueConversation:j.continueConversation||void 0}).then((B)=>k(w3,{agentId:j.agentId,mode:"sync",status:"running",dispatched:!0,message:`Task dispatched to ${j.agentId} and completed in sync mode.`,text:B.text,iterations:B.iterations})).finally(()=>{X.delete(j.agentId)});return X.set(j.agentId,H),await H}})),J.push(F0({name:"team_cancel_run",description:"Cancel one async teammate run.",inputSchema:A0(EB),execute:async(Y)=>{let j=k(EB,Y),V=$.runtime.cancelRun(j.runId,j.reason);return k(GM,{runId:V.id,status:V.status})}})),J.push(F0({name:"team_list_runs",description:"List teammate runs started with team_run_task in async mode, including live activity/progress fields when available.",inputSchema:A0(SB),execute:async(Y)=>k(C3.array(),$.runtime.listRuns(k(SB,Y)).map(P3))})),J.push(F0({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:A0(MB),timeoutMs:YM,execute:async(Y)=>{let j=k(MB,Y);if(j.runId){let B=await $.runtime.awaitRun(j.runId);return TM(B),k(C3,P3(B))}let V=await $.runtime.awaitAllRuns(),H=V.filter((B)=>["failed","cancelled","interrupted"].includes(B.status));if(H.length>0){let B=H.map((G)=>`${G.id}:${G.status}${G.error?`(${G.error})`:""}`).join(", ");throw Error(`One or more runs did not complete successfully: ${B}`)}return k(C3.array(),V.map(P3))}})),J.push(F0({name:"team_send_message",description:"Send a mailbox message to a specific teammate.",inputSchema:A0(xB),execute:async(Y)=>{let j=k(xB,Y),V=$.runtime.sendMessage($.requesterId,j.toAgentId,j.subject,j.body,j.taskId??void 0);return k(LM,{id:V.id,toAgentId:V.toAgentId})}})),J.push(F0({name:"team_broadcast",description:"Broadcast a message to all teammates.",inputSchema:A0(RB),execute:async(Y)=>{let j=k(RB,Y),V=$.runtime.broadcast($.requesterId,j.subject,j.body,{taskId:j.taskId??void 0});return k(BM,{delivered:V.length})}})),J.push(F0({name:"team_read_mailbox",description:"Read the current agent mailbox.",inputSchema:A0(hB),execute:async(Y)=>{let j=k(hB,Y);return k(fM.array(),$.runtime.listMailbox($.requesterId,{unreadOnly:j.unreadOnly,markRead:!0}))}})),J.push(F0({name:"team_mission_log",description:"Append a mission log update for your team.",inputSchema:A0(bB),execute:async(Y)=>{let j=k(bB,Y),V=$.runtime.appendMissionLog({agentId:$.requesterId,taskId:j.taskId||void 0,kind:j.kind,summary:j.summary,evidence:j.evidence?.length?j.evidence:void 0,nextAction:j.nextAction||void 0});return k(UM,{id:V.id})}})),J.push(F0({name:"team_cleanup",description:"Clean up the team runtime. Fails if teammates are still running.",inputSchema:A0(NB),execute:async(Y)=>{if(k(NB,Y),$.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can run cleanup.");return $.runtime.cleanup(),k(KM,{status:"cleaned"})}})),J.push(F0({name:"team_create_outcome",description:"Create a converged team outcome.",inputSchema:A0(wB),execute:async(Y)=>{let j=k(wB,Y),V=$.runtime.createOutcome({title:j.title,requiredSections:j.requiredSections,createdBy:$.requesterId});return k(FM,{outcomeId:V.id,status:V.status,requiredSections:V.requiredSections})}})),J.push(F0({name:"team_attach_outcome_fragment",description:"Attach a fragment to an outcome section.",inputSchema:A0(qB),execute:async(Y)=>{let j=k(qB,Y),V=$.runtime.attachOutcomeFragment({outcomeId:j.outcomeId,section:j.section,sourceAgentId:$.requesterId,sourceRunId:j.sourceRunId||void 0,content:j.content});return k(yB,{fragmentId:V.id,status:V.status})}})),J.push(F0({name:"team_review_outcome_fragment",description:"Review one outcome fragment.",inputSchema:A0(kB),execute:async(Y)=>{let j=k(kB,Y),V=$.runtime.reviewOutcomeFragment({fragmentId:j.fragmentId,reviewedBy:$.requesterId,approved:j.approved});return k(yB,{fragmentId:V.id,status:V.status})}})),J.push(F0({name:"team_finalize_outcome",description:"Finalize one outcome.",inputSchema:A0(CB),execute:async(Y)=>{let j=k(CB,Y),V=$.runtime.finalizeOutcome(j.outcomeId);return k(AM,{outcomeId:V.id,status:V.status})}})),J.push(F0({name:"team_list_outcomes",description:"List team outcomes.",inputSchema:A0(PB),execute:async(Y)=>{return k(PB,Y),k(DM.array(),$.runtime.listOutcomes())}})),J}function CZ($){return{...$,tasks:$.tasks.map((Z)=>({...Z,createdAt:new Date(Z.createdAt),updatedAt:new Date(Z.updatedAt)})),mailbox:$.mailbox.map((Z)=>({...Z,sentAt:new Date(Z.sentAt),readAt:Z.readAt?new Date(Z.readAt):void 0})),missionLog:$.missionLog.map((Z)=>({...Z,ts:new Date(Z.ts)})),runs:($.runs??[]).map((Z)=>({...Z,startedAt:new Date(Z.startedAt),endedAt:Z.endedAt?new Date(Z.endedAt):void 0,nextAttemptAt:Z.nextAttemptAt?new Date(Z.nextAttemptAt):void 0,heartbeatAt:Z.heartbeatAt?new Date(Z.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),finalizedAt:Z.finalizedAt?new Date(Z.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),reviewedAt:Z.reviewedAt?new Date(Z.reviewedAt):void 0}))}}function pB($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}var OM=[{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:q$({configProvider:{}}).description,headlessToolNames:["spawn_agent"]},{id:"teams",description:"Enable team collaboration tools for teammate management, task coordination, mailbox messaging, mission logs, and outcomes.",headlessToolNames:[...N8]}],qM={read_files:"enableReadFiles",search_codebase:"enableSearch",run_commands:"enableBash",fetch_web_content:"enableWebFetch",apply_patch:"enableApplyPatch",editor:"enableEditor",skills:"enableSkills",ask_question:"enableAskQuestion"};function MM($){return $==="plan"||$==="yolo"?$:"act"}function iB($){let Z=MM($.mode),Q=u0[l1({mode:Z})],W=M8($.providerId??"",$.modelId??"",Z,q8);return{mode:Z,flags:{...Q,...W,...typeof $.enableSpawnAgent==="boolean"?{enableSpawnAgent:$.enableSpawnAgent}:{},...typeof $.enableAgentTeams==="boolean"?{enableAgentTeams:$.enableAgentTeams}:{}}}}function rB($,Z){if(Z.disabledToolIds?.has($))return!1;let{flags:Q}=iB(Z);if($==="spawn_agent")return Q.enableSpawnAgent===!0;if($==="teams")return Q.enableAgentTeams===!0;if($==="editor")return Q.enableEditor===!0||Q.enableApplyPatch===!0;let W=qM[$];return W?Q[W]===!0:!1}function RM($,Z){if($.id==="editor"){let{flags:Q}=iB(Z),W=Q.enableApplyPatch===!0&&Q.enableEditor!==!0;return{...$,defaultEnabled:rB($.id,Z),headlessToolNames:[W?"apply_patch":"editor"]}}return{...$,defaultEnabled:rB($.id,Z)}}function A2($={}){return OM.map((Z)=>RM(Z,$))}function PZ($={}){return A2($).filter((Z)=>Z.defaultEnabled).map((Z)=>Z.id)}function SZ($){if(!$.enabled)return new Set;let Z=A2($.availabilityContext),Q=new Set(Z.map((W)=>W.id));if(!$.allowlist||$.allowlist.length===0)return new Set(Z.filter((W)=>W.defaultEnabled).map((W)=>W.id));for(let W of $.allowlist)if(!Q.has(W))throw Error(`Unknown tool "${W}". Available tools: ${Z.map((J)=>J.id).join(", ")}`);return new Set($.allowlist)}function y6($,Z={}){return A2(Z).filter((Q)=>$.has(Q.id)).flatMap((Q)=>Q.headlessToolNames)}function bZ($,Z={}){return y6($,Z)}function f2($={}){let{executorOptions:Z={},executors:Q,...W}=$,J={...O8(Z),...Q??{}};return D$({...W,executors:J})}import{mkdirSync as SM,writeFileSync as bM}from"node:fs";import{dirname as yM}from"node:path";import{normalizeUserInput as hM}from"@cline/shared";import{nanoid as kM}from"nanoid";var aB={};N(aB,{sanitizeSessionToken:()=>U2,parseTeamTaskSubSessionId:()=>P8,parseSubSessionId:()=>k6,makeTeamTaskSubSessionId:()=>h6,makeSubSessionId:()=>C8,deriveSubsessionStatus:()=>I6});import{nanoid as wM}from"nanoid";function U2($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function C8($,Z){let Q=U2($),W=U2(Z),J=`${Q}__${W}`;return J.length>180?J.slice(0,180):J}function h6($,Z){let Q=U2($),W=U2(Z);return`${Q}__teamtask__${W}__${wM(6)}`}function P8($){let Q=$.indexOf("__teamtask__");if(Q<=0)return null;let W=$.slice(0,Q),J=$.slice(Q+12),X=J.lastIndexOf("__");if(X<=0)return null;let Y=J.slice(0,X),j=J.slice(X+2);if(!W||!Y||!j)return null;return{rootSessionId:W,agentId:Y,teamTaskId:j}}function k6($){if(P8($))return null;let Z="__",Q=$.indexOf(Z);if(Q<=0)return null;let W=$.slice(0,Q),J=$.slice(Q+Z.length);if(!W||!J)return null;return{rootSessionId:W,agentId:J}}function I6($){switch($.hookName){case"agent_end":return"completed";case"agent_error":return"failed";case"session_shutdown":{let Z=String($.reason??"").toLowerCase();if(Z.includes("cancel")||Z.includes("abort")||Z.includes("interrupt"))return"cancelled";if(Z.includes("fail")||Z.includes("error"))return"failed";return"completed"}default:return"running"}}import{z as $0}from"zod";var tB={};N(tB,{isTerminalSessionStatus:()=>oB,isNonTerminalSessionStatus:()=>H0,SessionSource:()=>z0,SESSION_STATUSES:()=>x6,NON_TERMINAL_SESSION_STATUSES:()=>sB});import{SESSION_STATUS_VALUES as CM}from"@cline/shared";var x6=CM,sB=["idle","running","pending"];function oB($){return!sB.includes($)}function H0($){return!oB($)}var z0={CORE:"core",CLI:"cli",SUBAGENT:"subagent",DESKTOP:"desktop",KANBAN:"kanban",API:"api",WEB:"web",VSCODE:"vscode",ENTERPRISE:"enterprise",IDE:"ide",JETBRAINS:"jetbrains",NEOVIM:"neovim",UNKNOWN:"unknown"};var PM=$0.enum(x6),b0=$0.object({version:$0.literal(1),session_id:$0.string().min(1),source:$0.string().min(1),pid:$0.number().int(),started_at:$0.string().min(1),ended_at:$0.string().min(1).optional(),exit_code:$0.number().int().nullable().optional(),status:PM,interactive:$0.boolean(),provider:$0.string().min(1),model:$0.string().min(1),cwd:$0.string().min(1),workspace_root:$0.string().min(1),team_name:$0.string().min(1).optional(),enable_tools:$0.boolean(),enable_spawn:$0.boolean(),enable_teams:$0.boolean(),prompt:$0.string().optional(),metadata:$0.record($0.string(),$0.unknown()).optional(),messages_path:$0.string().min(1).optional()});function eB($){if(!$)return!1;return Object.values($).some((Z)=>typeof Z==="function")}function b3($,Z){let Q=[...$??[],...Z??[]];if(Q.length===0)return;let W=[],J=new Set;for(let X of Q){if(J.has(X.name))continue;J.add(X.name),W.push(X)}return W}function $G($){return JSON.stringify($,(Z,Q)=>{if(Q instanceof Error)return{name:Q.name,message:Q.message,stack:Q.stack};return Q})}function p1($){return typeof $==="string"&&$.trim()?$.trim():void 0}function S3($,Z){let Q={...$};Q.id=p1(Q.id)??kM();let W=Q.modelInfo&&typeof Q.modelInfo==="object"?{...Q.modelInfo}:void 0,J={id:p1(W?.id)??p1(Q.modelId)??p1(Z?.id),provider:p1(W?.provider)??p1(Q.providerId)??p1(Z?.provider),family:p1(W?.family)??p1(Z?.family)};if(delete Q.providerId,delete Q.modelId,J.id&&J.provider)Q.modelInfo={id:J.id,provider:J.provider,...J.family?{family:J.family}:{}};else delete Q.modelInfo;return Q}function yZ($){return $.map((Z)=>S3(Z))}function hZ($,Z,Q=[]){let W=$.map((V,H)=>{let B=Q[H],K=B?.role===V.role&&JSON.stringify(B.content)===JSON.stringify(V.content)?{...B,...V}:{...V};return S3(K)}),J=Q.length,X=[];for(let V=J;V<W.length;V+=1)if(W[V]?.role==="assistant")X.push(V);if(X.length===0){let V=[...W].reverse().findIndex((H)=>H.role==="assistant");if(V===-1)return W;X.push(W.length-1-V)}let Y=X[X.length-1],j=X.some((V)=>W[V]?.metrics);for(let V of X){let H=W[V],B=H.metrics;if(!B&&V===Y&&!j){let G=Z.usage;B={inputTokens:G.inputTokens,outputTokens:G.outputTokens,cacheReadTokens:G.cacheReadTokens??0,cacheWriteTokens:G.cacheWriteTokens??0,cost:G.totalCost}}W[V]={...S3(H,{id:Z.model.id,provider:Z.model.provider,family:Z.model.info?.family}),...B?{metrics:B}:{},ts:H.ts??Z.endedAt.getTime()}}return W}function g6($){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 IM=120;function D2($){let Z=$?.trim();return Z?Z.slice(0,IM):void 0}function y3($){let Z=hM($??"").trim();if(!Z)return;return D2(Z.split(`
|
|
472
|
+
`)[0]?.trim())}function M$($){if(!$)return;let Z={...$},Q=D2(typeof Z.title==="string"?Z.title:void 0);if(Q)Z.title=Q;else delete Z.title;return Object.keys(Z).length>0?Z:void 0}function m6($){let Z=M$($.metadata)??{},Q=$.title!==void 0?D2($.title):y3($.prompt);if(Q)Z.title=Q;return Object.keys(Z).length>0?Z:void 0}function h3($){let Z=P8($);if(Z)return{agent:"teammate",sessionId:Z.rootSessionId,taskType:"team"};let Q=k6($);if(Q)return{agent:"subagent",sessionId:Q.rootSessionId,taskType:"subagent_task"};return{agent:"lead",sessionId:$}}function k3($){return{version:1,updated_at:$.updatedAt,agent:$.context.agent,sessionId:$.context.sessionId,...$.context.taskType?{taskType:$.context.taskType}:{},messages:yZ($.messages),...$.systemPrompt?{system_prompt:$.systemPrompt}:{}}}function ZG($,Z,Q){SM(yM($),{recursive:!0}),bM($,`${JSON.stringify(k3({updatedAt:Z,context:Q,messages:[]}),null,2)}
|
|
473
|
+
`,"utf8")}function QG($,Z){return b0.parse({version:1,session_id:$.sessionId,source:$.source,pid:$.pid,started_at:$.startedAt,ended_at:Z?.endedAt??$.endedAt??void 0,exit_code:Z?.exitCode??$.exitCode??void 0,status:Z?.status??$.status,interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspace_root:$.workspaceRoot,team_name:$.teamName??void 0,enable_tools:$.enableTools,enable_spawn:$.enableSpawn,enable_teams:$.enableTeams,prompt:$.prompt??void 0,metadata:Z?.metadata??$.metadata??void 0,messages_path:$.messagesPath??void 0})}async function WG($,Z,Q){let W=0;while(!0){let J=await $();if(J===void 0)return{updated:!1};let X=await Z(J);if(typeof X==="object"&&X!==null&&"updated"in X&&X.updated===!1){if(W+=1,W>=Q)return X;continue}return X}}_0();var JG={};N(JG,{summarizeUsageFromMessages:()=>b8,sumUsageTotals:()=>v6,getCurrentContextSize:()=>I3,createInitialAccumulatedUsage:()=>D0,accumulateUsageTotals:()=>f0});function D0(){return{inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0}}function f0($,Z){return{inputTokens:$.inputTokens+Math.max(0,Z.inputTokens??0),outputTokens:$.outputTokens+Math.max(0,Z.outputTokens??0),cacheReadTokens:$.cacheReadTokens+Math.max(0,Z.cacheReadTokens??0),cacheWriteTokens:$.cacheWriteTokens+Math.max(0,Z.cacheWriteTokens??0),totalCost:$.totalCost+Math.max(0,Z.totalCost??0)}}function v6($){let Z=D0();for(let Q of $)Z=f0(Z,Q);return Z}function S8($){return typeof $==="number"&&Number.isFinite($)?$:0}function b8($){let Z=D0();for(let Q of $){let W=Q.metrics;if(!W)continue;Z=f0(Z,{inputTokens:S8(W.inputTokens),outputTokens:S8(W.outputTokens),cacheReadTokens:S8(W.cacheReadTokens),cacheWriteTokens:S8(W.cacheWriteTokens),totalCost:S8(W.cost)})}return Z}function I3($){for(let Z=$.length-1;Z>=0;Z-=1){let Q=$[Z];if(Q?.role!=="assistant")continue;let W=S8(Q.metrics?.inputTokens);return W>0?W:void 0}return}function xM($){if(!$||typeof $!=="object")return;let Z=$,Q=Z.skill??Z.skill_name??Z.skillName;if(typeof Q!=="string")return;let W=Q.trim();return W.length>0?W:void 0}function x3($){if(!$||typeof $!=="object")return{};let Z=$;return{agentId:typeof Z.agentId==="string"?Z.agentId:void 0,conversationId:typeof Z.conversationId==="string"?Z.conversationId:void 0,parentAgentId:typeof Z.parentAgentId==="string"?Z.parentAgentId:void 0}}function r1($){let Z=$.agentId?.trim();if(!Z)return;let Q=$.parentAgentId?.trim()||void 0,W=$.teamRole,J="root";if(W==="teammate")J="team_teammate";else if(W==="lead")J="team_lead";else if(Q)J="subagent";return{agentId:Z,agentKind:J,conversationId:$.conversationId?.trim()||void 0,parentAgentId:Q,createdByAgentId:$.createdByAgentId?.trim()||Q||void 0,isSubagent:Boolean(Q),teamId:$.teamId?.trim()||void 0,teamName:$.teamName?.trim()||void 0,teamRole:W,teamAgentId:$.teamAgentId?.trim()||void 0}}function gM($){return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheWriteTokens:$.cacheWriteTokens,cacheReadTokens:$.cacheReadTokens,totalCost:$.cost}}function mM($){let Z=$.isPrimaryAgentEvent?[$.overrides?.agentId,$.eventMetadata.agentId,$.overrides?.teamAgentId]:[$.overrides?.teamAgentId,$.overrides?.agentId,$.eventMetadata.agentId,$.eventMetadata.conversationId];for(let Q of Z){let W=Q?.trim();if(W)return W}return $.isPrimaryAgentEvent?"root":"unknown"}function g3($,Z,Q){let{sessionId:W,config:J,liveSession:X,emit:Y}=$,j=J.telemetry,V=X?.runtime.teamRuntime,H=Q?.isPrimaryAgentEvent??!0,B=x3(Z),G=r1({agentId:Q?.agentId??B.agentId,conversationId:Q?.conversationId??B.conversationId,parentAgentId:Q?.parentAgentId??B.parentAgentId,createdByAgentId:Q?.createdByAgentId,teamId:Q?.teamId??V?.getTeamId(),teamName:Q?.teamName??V?.getTeamName(),teamRole:Q?.teamRole,teamAgentId:Q?.teamAgentId});if(Z.type==="content_start"&&Z.contentType==="tool"&&Z.toolName==="skills"){let K=xM(Z.input);if(K)R9(j,{ulid:W,skillName:K,skillSource:"project",skillsAvailableGlobal:0,skillsAvailableProject:0,provider:J.providerId,modelId:J.modelId,...G})}if(Z.type==="content_end"&&Z.contentType==="tool"){let K=Z.toolName??"unknown",F=!Z.error;if(Q8(j,{ulid:W,tool:K,autoApproved:void 0,success:F,modelId:J.modelId,provider:J.providerId,...G}),!F&&(K==="editor"||K==="apply_patch"))E9(j,{ulid:W,modelId:J.modelId,provider:J.providerId,errorType:Z.error,...G})}if(Z.type==="notice"&&Z.reason==="api_error")g4(j,{ulid:W,model:J.modelId,provider:J.providerId,errorMessage:Z.message,...G});if(Z.type==="error")g4(j,{ulid:W,model:J.modelId,provider:J.providerId,errorMessage:Z.error?.message??"unknown error",...G});if(Z.type==="usage"&&X?.turnUsageBaseline){let K=gM(Z);if(H){X.turnPrimaryUsage=f0(X.turnPrimaryUsage??D0(),K);let A=f0(X.turnUsageBaseline,X.turnPrimaryUsage);$.usageBySession.set(W,A),Z8(j,{ulid:W,provider:J.providerId,model:J.modelId,source:"assistant",mode:J.mode,...G}),q9(j,{ulid:W,tokensIn:Z.inputTokens,tokensOut:Z.outputTokens,cacheWriteTokens:Z.cacheWriteTokens,cacheReadTokens:Z.cacheReadTokens,totalCost:Z.cost,model:J.modelId,...G})}else{let A=mM({isPrimaryAgentEvent:H,overrides:Q,eventMetadata:B}),L=X.turnUsageByAgent??new Map;X.turnUsageByAgent=L,L.set(A,f0(L.get(A)??D0(),K))}let F=f0(X.turnPrimaryUsage??D0(),v6(X.turnUsageByAgent?.values()??[]));$.aggregateUsageBySession.set(W,f0(X.turnAggregateUsageBaseline??X.turnUsageBaseline,F))}if(Z.type==="iteration_end"&&H)$.persistMessages(W,X?.agent.getMessages()??[],X?.config.systemPrompt);Y({type:"agent_event",payload:{sessionId:W,event:Z,teamAgentId:Q?.teamAgentId,teamRole:Q!==void 0?Q.teamRole??(H?"lead":void 0):void 0}}),Y({type:"chunk",payload:{sessionId:W,stream:"agent",chunk:$G(Z),ts:Date.now()}})}function R$($){return $.workspaceRoot??$.cwd}import{hasRuntimeConfigExtension as iE}from"@cline/shared";$1();import{existsSync as vZ,readFileSync as ER,statSync as NR}from"node:fs";import{basename as wR,dirname as gZ,join as cZ,resolve as mZ}from"node:path";import{discoverPluginModulePaths as CR,resolveConfiguredPluginModulePaths as RG,resolvePluginConfigSearchPaths as PR,SKILLS_CONFIG_DIRECTORY_NAME as SR}from"@cline/shared/storage";import{resolve as XR}from"node:path";import{normalizePluginManifest as YR}from"@cline/shared";import{existsSync as T0,readFileSync as h8}from"node:fs";import{builtinModules as vM,createRequire as u3}from"node:module";import{dirname as E$,extname as u6,isAbsolute as cM,resolve as p}from"node:path";import{fileURLToPath as YG}from"node:url";import{PLUGIN_FILE_EXTENSIONS as uM}from"@cline/shared";var jG=E$(YG(import.meta.url)),dM=u3(import.meta.url),lM=p(jG,"..","..","..","..",".."),m3=iM(lM),pM=["@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"],d3=new Set(vM.flatMap(($)=>[$,$.replace(/^node:/,"")])),c6=new Set(uM),rM=["development","node","import","require","default"];function iM($){let Z={},Q={"@cline/sdk":p($,"packages/sdk/src/index.ts"),"@cline/agents":p($,"packages/agents/src/index.ts"),"@cline/core":p($,"packages/core/src/index.ts"),"@cline/llms":p($,"packages/llms/src/index.ts"),"@cline/shared":p($,"packages/shared/src/index.ts"),"@cline/shared/storage":p($,"packages/shared/src/storage/index.ts"),"@cline/shared/db":p($,"packages/shared/src/db/index.ts")};for(let[W,J]of Object.entries(Q))if(T0(J))Z[W]=J;for(let W of["agents","core","llms","shared"]){let J=p($,"packages",W),X=p(J,"package.json");if(!T0(X))continue;try{let Y=JSON.parse(h8(X,"utf8"));if(typeof Y.name!=="string"||!Y.exports)continue;if(typeof Y.exports==="string"){let j=p(J,Y.exports);if(T0(j))Z[Y.name]=j;continue}if(typeof Y.exports!=="object")continue;for(let[j,V]of Object.entries(Y.exports)){let H=nM(J,V);if(!H)continue;let B=j==="."?Y.name:`${Y.name}/${j.replace(/^\.\//,"")}`;Z[B]=H}}catch{}}return Z}function nM($,Z){let Q=l3(Z);if(!Q)return null;let W=VG($,Q);for(let J of W)if(T0(J))return J;return null}function l3($,Z=new Set){if(typeof $==="string")return $;if(!$||typeof $!=="object")return null;if(Z.has($))return null;Z.add($);let Q=$;for(let W of rM){let J=l3(Q[W],Z);if(J)return J}return null}function VG($,Z){let Q=Z.replace(/^\.\//,""),W=[p($,Z)];if(Q.startsWith("dist/")){let J=Q.replace(/^dist\//,"src/").replace(/\.(mjs|cjs|js)$/,"");return[p($,`${J}.ts`),p($,`${J}.tsx`),p($,`${J}.mts`),p($,`${J}.cts`),...W]}return W}function aM($){return Object.fromEntries(Object.entries($).sort(([Z],[Q])=>Q.length-Z.length))}function kZ($){return!($.startsWith(".")||$.startsWith("/")||$.startsWith("file:")||$.startsWith("data:")||$.startsWith("http:")||$.startsWith("https:"))}function y8($){if($.startsWith("@")){let[Z,Q]=$.split("/",3);return Q?`${Z}/${Q}`:$}return $.split("/",1)[0]??$}function sM($){let Z=y8($);if($===Z)return".";return`.${$.slice(Z.length)}`}function HG($){return y8($).startsWith("@cline/")}function v3($,Z){let Q=y8(Z),W=E$($);while(!0){let J=p(W,"node_modules",Q);if(T0(J)||T0(p(J,"package.json")))return!0;let X=p(W,"..");if(X===W)return!1;W=X}}function XG($){return c3($)!==null}function c3($){try{return dM.resolve($)}catch{}return oM($)}function oM($){let Z=y8($),Q=BG(Z);if(!Q)return null;let W=p(Q,"package.json");try{let J=JSON.parse(h8(W,"utf8")),X=sM($),Y=X==="."&&typeof J.exports==="string"?J.exports:J.exports&&typeof J.exports==="object"&&Object.hasOwn(J.exports,X)?J.exports[X]:void 0,j=l3(Y)??(X==="."&&typeof J.main==="string"?J.main:null);if(!j)return null;let V=p(Q,j),H=[V,...VG(Q,j).filter((B)=>B!==V)];for(let B of H)if(T0(B))return B;return null}catch{return null}}function tM(){let $=[jG],Z=process.env.CLINE_WRAPPER_PATH?.trim();if(Z)$.push(E$(E$(Z)));let Q=process.execPath?.trim();if(Q)$.push(E$(Q));return[...new Set($.map((W)=>p(W)))]}function eM($,Z){let Q=$;while(!0){let W=p(Q,"package.json");if(T0(W))try{if(JSON.parse(h8(W,"utf8")).name===Z)return Q}catch{}let J=p(Q,"node_modules",Z,"package.json");if(T0(J))return E$(J);let X=p(Q,"..");if(X===Q)return null;Q=X}}function BG($){for(let Z of tM()){let Q=eM(Z,$);if(Q)return Q}return null}function $R($){let Q=E$($);for(let W=0;W<4;W++){let J=p(Q,"package.json");if(T0(J))try{let Y=JSON.parse(h8(J,"utf8"));return Y!=null&&typeof Y==="object"&&"cline"in Y}catch{return!1}let X=p(Q,"..");if(X===Q)return!1;Q=X}return!1}function GG($,Z){let Q=Z.startsWith("file:")?YG(Z):cM(Z)?Z:p(E$($),Z);if(T0(Q)&&c6.has(u6(Q)))return Q;for(let W of c6){let J=`${Q}${W}`;if(T0(J))return J}for(let W of c6){let J=p(Q,`index${W}`);if(T0(J))return J}return null}function KG($){let Z=new Set,Q=[/\bimport\s+(?:type\s+)?[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bexport\s+[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bimport\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g,/\brequire\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g];for(let W of Q)for(let J of $.matchAll(W)){let X=J[1];if(X)Z.add(X)}return[...Z]}function ZR($){return u6($)!==".ts"}function FG($,Z,Q=new Set){if(Q.has($)||!T0($))return;if(Q.add($),!c6.has(u6($)))return;let W=h8($,"utf8"),J=ZR($);for(let X of KG(W)){if(X.startsWith("node:")||d3.has(X))continue;if(kZ(X)){if(!J)continue;if(Object.hasOwn(m3,X)||Object.hasOwn(m3,y8(X))||v3($,X)||HG(X)&&XG(X)||Z&&XG(X))continue;throw Error(`Cannot find module '${y8(X)}'`)}let Y=GG($,X);if(Y)FG(Y,Z,Q)}}function AG($,Z=new Set,Q=new Set){if(Z.has($)||!T0($))return Q;if(Z.add($),!c6.has(u6($)))return Q;let W=h8($,"utf8");for(let J of KG(W)){if(Q.add(J),kZ(J))continue;let X=GG($,J);if(X)AG(X,Z,Q)}return Q}function QR($,Z){let Q=u3($),W={},J=AG($),X=new Set(pM);for(let[Y,j]of Object.entries(m3)){try{Q.resolve(Y);continue}catch{}W[Y]=j}for(let Y of J)if(kZ(Y)&&(HG(Y)||Z))X.add(Y);for(let Y of X){if(Object.hasOwn(W,Y)||v3($,Y))continue;let j=c3(Y);if(j)W[Y]=j}if(!Z)return W;for(let Y of J){if(!kZ(Y)||Object.hasOwn(W,Y)||v3($,Y)||Y.startsWith("node:")||d3.has(Y))continue;let j=c3(Y);if(j)W[Y]=j}return W}function WR($){let Z=u6($);return Z===".ts"||Z===".tsx"||Z===".mts"||Z===".cts"}var L2;function JR(){if(L2!==void 0)return L2;let $=BG("jiti");if(!$)return L2=null,null;let Z=p($,"dist","babel.cjs");if(!T0(Z))return L2=null,null;try{let W=u3(Z)(Z);L2=typeof W==="function"?W:null}catch{L2=null}return L2}async function fG($,Z={}){let Q=!$R($);FG($,Q);let W=QR($,Q),J=aM(W),X=await import("jiti"),Y=typeof X==="function"?X:typeof X.default==="function"?X.default:void 0;if(!Y)throw Error("Unable to load jiti");let j=Object.entries(J).filter(([,G])=>WR(G)).map(([G])=>G),V=JR(),H=V?(G)=>V({...G,interopDefault:!0}):void 0;return await Y($,{alias:J,cache:Z.useCache,requireCache:Z.useCache,esmResolve:!0,interopDefault:!1,nativeModules:[...d3],transformModules:j,tryNative:!1,...H?{transform:H}:{}}).import($,{})}function UG($,Z){if(!$)return!0;if($.providerIds?.length){if(!Z?.providerId||!$.providerIds.includes(Z.providerId))return!1}if($.modelIds?.length){if(!Z?.modelId||!$.modelIds.includes(Z.modelId))return!1}return!0}function DG($){return typeof $==="object"&&$!==null}function p3($){return Array.isArray($)&&$.every((Z)=>typeof Z==="string")}function jR($,Z){if(!DG($.manifest))throw Error(`Invalid plugin module at ${Z}: missing required "manifest"`);if(!p3($.manifest.capabilities))throw Error(`Invalid plugin module at ${Z}: manifest.capabilities must be a string array`);if($.manifest.capabilities.length===0)throw Error(`Invalid plugin module at ${Z}: manifest.capabilities cannot be empty`);if(Object.hasOwn($.manifest,"providerIds")&&!p3($.manifest.providerIds))throw Error(`Invalid plugin module at ${Z}: manifest.providerIds must be a string array when provided`);if(Object.hasOwn($.manifest,"modelIds")&&!p3($.manifest.modelIds))throw Error(`Invalid plugin module at ${Z}: manifest.modelIds must be a string array when provided`)}function VR($,Z){if(!DG($))throw Error(`Invalid plugin module at ${Z}: expected object export`);if(typeof $.name!=="string"||$.name.length===0)throw Error(`Invalid plugin module at ${Z}: expected non-empty "name"`);if(!Object.hasOwn($,"manifest"))throw Error(`Invalid plugin module at ${Z}: missing required "manifest"`);jR($,Z)}async function d6($,Z={}){let Q=XR(Z.cwd??process.cwd(),$),W=await fG(Q,{useCache:Z.useCache}),J=Z.exportName??"plugin",X=W.default??W[J];VR(X,Q);let Y=X,j=Y.setup,V=j?(H,B)=>{let G={...Z.session,...B.session},K={...B,session:Object.keys(G).length>0?G:void 0,client:Z.client??B.client,user:Z.user??B.user,workspaceInfo:Z.workspaceInfo??B.workspaceInfo,automation:Z.automation??B.automation,logger:Z.logger??B.logger,telemetry:Z.telemetry??B.telemetry};return j(H,K)}:void 0;return{...Y,manifest:YR(Y.manifest),setup:V}}async function IZ($,Z={}){return(await _2($,Z)).plugins}async function _2($,Z={}){let Q=[],W=[],J=new Map,X=0;for(let j of $)try{let V=await d6(j,Z);if(!UG(V.manifest,Z))continue;let H=J.get(V.name);if(H)W.push({type:"duplicate_plugin_override",pluginName:V.name,pluginPath:j,overriddenPluginPath:H.pluginPath,message:`Plugin "${V.name}" from ${j} overrides ${H.pluginPath}`});J.set(V.name,{plugin:V,pluginPath:j,order:X++})}catch(V){let H=V instanceof Error?V.message:String(V);Q.push({pluginPath:j,phase:"load",message:H,stack:V instanceof Error?V.stack:void 0})}let Y=[...J.values()].sort((j,V)=>j.order-V.order);return{plugins:Y.map((j)=>j.plugin),pluginPaths:Y.map((j)=>j.pluginPath),failures:Q,warnings:W}}import{existsSync as a3}from"node:fs";import{createRequire as MG}from"node:module";import{dirname as xZ,join as I8}from"node:path";import{fileURLToPath as FR}from"node:url";var OG={};N(OG,{resolveSubprocessRuntimeExecutable:()=>r3,buildSubprocessSandboxCommand:()=>TG,SubprocessSandbox:()=>k8,CLINE_JS_RUNTIME_PATH_ENV:()=>zG});import{spawn as HR}from"node:child_process";import{basename as BR}from"node:path";import{augmentNodeCommandForDebug as GR,withResolvedClineBuildEnv as KR}from"@cline/shared";function LG($){if($ instanceof Error)return $;return Error(String($))}var zG="CLINE_JS_RUNTIME_PATH";function _G($){let Z=$?.trim();if(!Z)return!1;let Q=BR(Z).toLowerCase();return Q==="node"||Q==="node.exe"||Q==="bun"||Q==="bun.exe"}function r3($={}){let Z=$.env??process.env,Q=$.runtimeExecutable?.trim()||Z[zG]?.trim();if(Q)return Q;let W=$.execPath?.trim()||process.execPath;if(_G(W))return W;for(let J of[Z.BUN_EXEC_PATH,Z.npm_node_execpath,Z.NODE]){let X=J?.trim();if(X&&_G(X))return X}return"node"}function TG($,Z={}){let Q=r3({env:Z.env,execPath:Z.execPath,runtimeExecutable:Z.runtimeExecutable});return GR([Q,...$],{env:Z.env,execArgv:Z.execArgv,debugRole:Z.name==="plugin-sandbox"?"plugin-sandbox":"sandbox"})}class k8{options;process=null;requestCounter=0;pending=new Map;constructor($){this.options=$}get processLabel(){return this.options.name??"sandbox"}clearPendingRequest($){let Z=this.pending.get($);if(!Z)return;if(this.pending.delete($),Z.timeout)clearTimeout(Z.timeout);return Z}start(){if(this.process&&this.process.exitCode===null)return;let $=this.options.bootstrapFile?[this.options.bootstrapFile]:["-e",this.options.bootstrapScript??""],Z=TG($,{name:this.options.name,runtimeExecutable:this.options.runtimeExecutable}),Q=HR(Z[0]??r3(this.options),Z.slice(1),{stdio:["ignore","ignore","pipe","ipc"],env:KR(process.env),windowsHide:!0});this.process=Q;let W="",J=(X)=>{let Y=W+X;W=Y.length>4000?Y.slice(-4000):Y};Q.stderr?.setEncoding("utf8"),Q.stderr?.on("data",(X)=>{J(X)}),Q.on("message",(X)=>{this.onMessage(X)}),Q.on("error",(X)=>{this.failPending(Error(`${this.processLabel} process error: ${LG(X).message}`))}),Q.on("exit",(X,Y)=>{this.process=null;let j=W.trim();this.failPending(Error(`${this.options.name??"sandbox"} process exited (code=${String(X)}, signal=${String(Y)})${j?`: ${j}`:""}`))})}async call($,Z,Q={}){this.start();let W=this.process;if(!W||W.exitCode!==null)throw Error(`${this.processLabel} process is not available`);let J=`req_${++this.requestCounter}`,X={type:"call",id:J,method:$,args:Z};return await new Promise((Y,j)=>{let V={resolve:(H)=>Y(H),reject:j};if((Q.timeoutMs??0)>0)V.timeout=setTimeout(()=>{this.clearPendingRequest(J),this.shutdown().catch(()=>{}),j(Error(`${this.processLabel} call timed out after ${Q.timeoutMs}ms: ${$}`))},Q.timeoutMs);this.pending.set(J,V),W.send(X,(H)=>{if(!H)return;let B=this.clearPendingRequest(J);if(!B)return;B.reject(Error(`${this.processLabel} failed to send call "${$}": ${LG(H).message}`))})})}async shutdown(){let $=this.process;if(this.process=null,!$||$.exitCode!==null){this.failPending(Error(`${this.processLabel} shutdown`));return}await new Promise((Z)=>{let Q=setTimeout(()=>{try{$.kill("SIGKILL")}catch{}Z()},300);$.once("exit",()=>{clearTimeout(Q),Z()});try{$.kill("SIGTERM")}catch{clearTimeout(Q),Z()}}),this.failPending(Error(`${this.processLabel} shutdown`))}onMessage($){if(!$)return;if($.type==="event"){if(typeof $.name==="string"&&$.name.length>0)this.options.onEvent?.({name:$.name,payload:$.payload});return}if($.type!=="response"||!$.id)return;let Z=this.clearPendingRequest($.id);if(!Z)return;if($.ok){Z.resolve($.result);return}Z.reject(Error($.error?.message||`${this.processLabel} call failed`))}failPending($){for(let[Z,Q]of this.pending.entries()){if(this.pending.delete(Z),Q.timeout)clearTimeout(Q.timeout);Q.reject($)}}}function AR($){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 l6($){return($ instanceof Error?$.message:String($)).includes("Unknown sandbox plugin id:")}function fR(){return`@cline/cli-${process.platform==="win32"?"windows":process.platform}-${process.arch}`}function UR(){let $=process.env.CLINE_WRAPPER_PATH?.trim();if(!$)return;try{let Q=MG($).resolve(`${fR()}/package.json`),W=I8(xZ(Q),"extensions","plugin-sandbox-bootstrap.js");return a3(W)?W:void 0}catch{return}}function DR(){let $=process.execPath?.trim();if(!$)return;let Z=I8(xZ(xZ($)),"extensions","plugin-sandbox-bootstrap.js");return a3(Z)?Z:void 0}function LR(){let $=xZ(FR(import.meta.url)),Z=MG(import.meta.url),Q=[I8($,"plugin-sandbox-bootstrap.js"),I8($,"extensions","plugin-sandbox-bootstrap.js"),I8($,"agents","plugin-sandbox-bootstrap.js"),UR(),DR()];for(let X of Q.filter((Y)=>typeof Y==="string"))if(a3(X))return{file:X};let W=I8($,"plugin-sandbox-bootstrap.ts"),J="jiti";try{J=Z.resolve("jiti")}catch{}return{script:[`const createJiti = require(${JSON.stringify(J)});`,`const jiti = createJiti(${JSON.stringify(W)}, { cache: false, requireCache: false, esmResolve: true, interopDefault: false });`,`Promise.resolve(jiti.import(${JSON.stringify(W)}, {})).catch((error) => {`," console.error(error);"," process.exitCode = 1;","});"].join(`
|
|
474
|
+
`)}}var i3=LR();function n3($,Z,Q){if(typeof $==="number"&&$>0)return $;if(Q){let W=process.env[Q];if(W){let J=Number(W);if(Number.isInteger(J)&&J>0)return J}}return Z}async function x8($){let Z=new k8({name:"plugin-sandbox",..."file"in i3?{bootstrapFile:i3.file}:{bootstrapScript:i3.script},onEvent:$.onEvent}),Q=n3($.importTimeoutMs,4000,"CLINE_PLUGIN_IMPORT_TIMEOUT_MS"),W=n3($.hookTimeoutMs,3000),J=n3($.contributionTimeoutMs,60000),X={pluginPaths:$.pluginPaths,exportName:$.exportName,providerId:$.providerId,modelId:$.modelId,cwd:$.cwd,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,loggerEnabled:Boolean($.logger)},Y,j=()=>{return Y??=Z.call("initialize",X,{timeoutMs:Q}).finally(()=>{Y=void 0}),Y},V;try{V=await Z.call("initialize",X,{timeoutMs:Q})}catch(G){throw await Z.shutdown().catch(()=>{}),G}let H=V.plugins.map(AR);return{extensions:H.map((G)=>{let K={name:G.name,__clinePluginPath:G.pluginPath,manifest:G.manifest,setup:(F)=>{_R(F,Z,G,J,j),zR(F,Z,G,J,j),TR(F,Z,G,J,j),qR(F,Z,G,J,j),OR(F,G)}};return K.hooks=RR(Z,G,W,j),K}),failures:V.failures,pluginPaths:H.map((G)=>G.pluginPath),shutdown:async()=>{await Z.shutdown()},warnings:V.warnings}}function _R($,Z,Q,W,J){for(let X of Q.contributions?.tools??[]){let Y={name:X.name,description:X.description??"",inputSchema:X.inputSchema??{type:"object",properties:{}},timeoutMs:X.timeoutMs,retryable:X.retryable,execute:async(j,V)=>{try{return await Z.call("executeTool",{pluginId:Q.pluginId,contributionId:X.id,input:j,context:V},{timeoutMs:W})}catch(H){if(!l6(H))throw H;return await J(),await Z.call("executeTool",{pluginId:Q.pluginId,contributionId:X.id,input:j,context:V},{timeoutMs:W})}}};$.registerTool(Y)}}function zR($,Z,Q,W,J){for(let X of Q.contributions?.commands??[])$.registerCommand({name:X.name,description:X.description,handler:async(Y)=>{try{return await Z.call("executeCommand",{pluginId:Q.pluginId,contributionId:X.id,input:Y},{timeoutMs:W})}catch(j){if(!l6(j))throw j;return await J(),await Z.call("executeCommand",{pluginId:Q.pluginId,contributionId:X.id,input:Y},{timeoutMs:W})}}})}function TR($,Z,Q,W,J){for(let X of Q.contributions?.rules??[])$.registerRule({id:X.ruleId,source:X.source,content:X.hasContentHandler===!0?async()=>{try{return await Z.call("resolveRuleContent",{pluginId:Q.pluginId,contributionId:X.id},{timeoutMs:W})}catch(Y){if(!l6(Y))throw Y;return await J(),await Z.call("resolveRuleContent",{pluginId:Q.pluginId,contributionId:X.id},{timeoutMs:W})}}:X.content??""})}function OR($,Z){for(let Q of Z.contributions?.providers??[])$.registerProvider({name:Q.name,description:Q.description,metadata:Q.metadata});for(let Q of Z.contributions?.automationEventTypes??[])$.registerAutomationEventType({eventType:Q.eventType,source:Q.source,description:Q.description,attributesSchema:Q.attributesSchema,payloadSchema:Q.payloadSchema,examples:Q.examples,metadata:Q.metadata});for(let Q of Z.contributions?.mcpServers??[])$.registerMcpServer(Q)}function qR($,Z,Q,W,J){for(let X of Q.contributions?.messageBuilders??[])$.registerMessageBuilder({name:X.name,async build(Y){try{let j=await Z.call("buildMessages",{pluginId:Q.pluginId,contributionId:X.id,messages:Y},{timeoutMs:W});return qG(j)?j:Y}catch(j){if(!l6(j))throw j;await J();let V=await Z.call("buildMessages",{pluginId:Q.pluginId,contributionId:X.id,messages:Y},{timeoutMs:W});return qG(V)?V:Y}}})}function qG($){return Array.isArray($)&&$.every((Z)=>typeof Z==="object"&&Z!==null&&("role"in Z)&&("content"in Z))}function MR($,Z,Q,W,J){return async(X)=>{try{return await $.call("invokeHook",{pluginId:Z,hookName:Q,payload:X},{timeoutMs:W})}catch(Y){if(!l6(Y))throw Y;return await J(),await $.call("invokeHook",{pluginId:Z,hookName:Q,payload:X},{timeoutMs:W})}}}function RR($,Z,Q,W){let J={};for(let X of Z.hooks??[])J[X]=MR($,Z.pluginId,X,Q,W);return Object.keys(J).length>0?J:void 0}var o3="package.json",bR="package";function p6($){return PR($)}function r6($){return CR($)}function yR($){try{return vZ($)&&NR($).isDirectory()}catch{return!1}}function t3($){let Z=[],Q=new Set;for(let W of $){let J=mZ(W);if(Q.has(J))continue;Q.add(J),Z.push(J)}return Z}function EG($){let Z=t3($);return g9(Z)}function NG($){return p6($).flatMap((Z)=>r6(Z)).filter((Z)=>vZ(Z))}function hR($,Z){let Q=[];for(let W of $)try{Q.push(...RG([W],Z))}catch{}return Q}function s3($){return typeof $==="object"&&$!==null}function kR($){try{let Z=JSON.parse(ER(cZ($,o3),"utf8"));if(!s3(Z)||!s3(Z.cline))return[];let Q=Z.cline.plugins;if(!Array.isArray(Q))return[];let W=[];for(let J of Q){if(typeof J==="string"){W.push(J);continue}if(!s3(J)||!Array.isArray(J.paths))continue;for(let X of J.paths)if(typeof X==="string")W.push(X)}return W}catch{return[]}}function wG($,Z){let Q=mZ(Z);return kR($).some((W)=>mZ($,W)===Q)}function IR($,Z){return wR($)===bR&&vZ(cZ(gZ($),o3))&&wG(gZ($),Z)}function xR($){let Z=mZ($),Q=[],W=gZ(Z);while(!0){if(IR(W,Z)){Q.push(W);break}if(vZ(cZ(W,o3))){if(wG(W,Z))Q.push(W);break}let J=gZ(W);if(J===W)break;W=J}return t3(Q)}function i1($={}){let Z=$.cwd??process.cwd(),Q=NG($.workspacePath),W=RG($.pluginPaths??[],Z);return EG([...W,...Q])}function gR($={}){let Z=$.cwd??process.cwd(),Q=NG($.workspacePath),W=hR($.pluginPaths??[],Z);return EG([...W,...Q])}function n1($){let Z=[];for(let Q of $)for(let W of xR(Q)){let J=cZ(W,SR);if(yR(J))Z.push(J)}return t3(Z)}function CG($={}){return n1(gR($))}async function g8($={}){let Z=i1($);if(Z.length===0)return{extensions:[],failures:[],warnings:[],pluginPaths:[]};if($.mode==="in_process"){let W=await _2(Z,{cwd:$.cwd,exportName:$.exportName,providerId:$.providerId,modelId:$.modelId,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,automation:$.automation,logger:$.logger,telemetry:$.telemetry});return{extensions:W.plugins,failures:W.failures,pluginPaths:W.pluginPaths,warnings:W.warnings}}let Q=await x8({pluginPaths:Z,exportName:$.exportName,importTimeoutMs:$.importTimeoutMs,hookTimeoutMs:$.hookTimeoutMs,contributionTimeoutMs:$.contributionTimeoutMs,onEvent:$.onEvent,providerId:$.providerId,modelId:$.modelId,cwd:$.cwd,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,logger:$.logger});return{extensions:Q.extensions??[],shutdown:Q.shutdown,failures:Q.failures,pluginPaths:Q.pluginPaths,warnings:Q.warnings}}import{execFile as mR}from"node:child_process";import{promisify as vR}from"node:util";var cR=vR(mR);function e3($,Z){$?.log(Z,{severity:"warn"})}function uR($){let Z=$?.checkpoint;if(!Z||typeof Z!=="object"||Array.isArray(Z))return;let Q=Z;if(!Q.latest||!Array.isArray(Q.history))return;let W=Q.latest,J=Q.history.filter((X)=>!!X&&typeof X==="object"&&typeof X.ref==="string"&&typeof X.createdAt==="number"&&typeof X.runCount==="number");if(typeof W.ref!=="string"||typeof W.createdAt!=="number"||typeof W.runCount!=="number")return;return{latest:W,history:J}}async function z2($,Z){let Q=await cR("git",["-C",$,...Z],{windowsHide:!0});return{stdout:Q.stdout.trim(),stderr:Q.stderr.trim()}}async function $J($,Z){if(!$)return;let Q=`refs/cline/checkpoints/${Z}/`;try{let{stdout:W}=await z2($,["for-each-ref","--format=%(refname)",Q]),J=W.trim().split(`
|
|
475
|
+
`).filter(Boolean);await Promise.allSettled(J.map((X)=>z2($,["update-ref","-d",X])))}catch{}}async function PG($,Z,Q){if(!$||Q.length===0)return;await Promise.allSettled(Q.map((W)=>z2($,["update-ref",`refs/cline/checkpoints/${Z}/${W.runCount}`,W.ref])))}function dR($,Z){let Q=$.findIndex((W)=>W.runCount===Z.runCount);if(Q<0)return[...$,Z];return $.map((W,J)=>J===Q?Z:W)}function SG($){let Z=$.initialRunCount??0,Q,W=async()=>{if(Q!==void 0)return Q;try{Q=(await z2($.cwd,["rev-parse","--is-inside-work-tree"])).stdout==="true"}catch{Q=!1}return Q},J=async()=>{if($.createCheckpoint)return await $.createCheckpoint({cwd:$.cwd,sessionId:$.sessionId,runCount:Z});if(!await W())return;let X=async(H)=>{try{let G=(await z2($.cwd,["rev-parse","HEAD"])).stdout.trim();if(!G)return;return{ref:G,createdAt:Date.now(),runCount:Z,kind:"commit"}}catch(B){e3($.logger,`${H}: ${B instanceof Error?B.message:String(B)}`);return}},Y=`cline checkpoint session=${$.sessionId} run=${Z}`,j="";try{j=(await z2($.cwd,["stash","create",Y])).stdout.trim()}catch(H){return e3($.logger,`Checkpoint snapshot failed: ${H instanceof Error?H.message:String(H)}`),X("Checkpoint HEAD fallback failed")}if(!j)return X("Checkpoint HEAD fallback failed");let V=`refs/cline/checkpoints/${$.sessionId}/${Z}`;try{await z2($.cwd,["update-ref",V,j])}catch(H){e3($.logger,`Checkpoint store failed: ${H instanceof Error?H.message:String(H)}`);return}return{ref:j,createdAt:Date.now(),runCount:Z,kind:"stash"}};return{beforeRun:async({snapshot:X})=>{if(X.parentAgentId!=null)return;Z+=1;return},beforeModel:async({snapshot:X})=>{if(X.parentAgentId!=null||X.iteration!==1||Z<1)return;let Y=await J();if(!Y)return;let j=await $.readSessionMetadata(),V=uR(j);if(V?.latest.ref===Y.ref)return;let H=dR(V?.history??[],Y);await $.writeSessionMetadata({...j??{},checkpoint:{latest:Y,history:H}});return}}}import{spawn as tR}from"node:child_process";import{appendFileSync as eR,readFileSync as $E}from"node:fs";import{join as ZE}from"node:path";import{augmentNodeCommandForDebug as hG,withResolvedClineBuildEnv as WJ}from"@cline/shared";import{ensureHookLogDir as bG}from"@cline/shared/storage";function m8($,Z){if(!Z)return;return{name:$,manifest:{capabilities:["hooks"]},hooks:Z}}import{existsSync as lR,readdirSync as pR}from"node:fs";import{basename as rR,extname as iR,join as nR}from"node:path";import{HOOKS_CONFIG_DIRECTORY_NAME as uZ,resolveHooksConfigSearchPaths as aR}from"@cline/shared/storage";function i6($){return aR($)}var v8;((B)=>{B.TaskStart="TaskStart";B.TaskResume="TaskResume";B.TaskCancel="TaskCancel";B.TaskComplete="TaskComplete";B.TaskError="TaskError";B.PreToolUse="PreToolUse";B.PostToolUse="PostToolUse";B.UserPromptSubmit="UserPromptSubmit";B.PreCompact="PreCompact";B.SessionShutdown="SessionShutdown"})(v8||={});var n6={["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"},sR=new Map(Object.values(v8).map(($)=>[$.toLowerCase(),$])),oR=new Set(["",".sh",".bash",".zsh",".js",".mjs",".cjs",".ts",".mts",".cts",".py",".ps1"]);function a6($){let Z=iR($).toLowerCase();if(!oR.has(Z))return;let Q=rR($,Z).trim().toLowerCase();return sR.get(Q)}function N$($){let Z=[],Q=new Set,W=i6($).filter((J)=>lR(J));for(let J of W)try{for(let X of pR(J,{withFileTypes:!0})){if(!X.isFile())continue;let Y=a6(X.name);if(!Y)continue;let j=nR(J,X.name);if(Q.has(j))continue;Q.add(j),Z.push({fileName:Y,hookEventName:n6[Y],path:j})}}catch{}return Z.sort((J,X)=>J.path.localeCompare(X.path))}function lZ($){if(!$||typeof $!=="object")return{};let Z={};for(let[Q,W]of Object.entries($))Z[Q]=typeof W==="string"?W:JSON.stringify(W);return Z}function dZ($,Z,Q){let W=Q instanceof Error?`: ${Q.message}`:"",J=`${Z}${W}`;if($){try{$.log(J,{severity:"warn",...Q!==void 0?{error:Q}:{}})}catch{}return}console.warn(J)}function QE($,Z){if(!Z)return $;if(!$)return{...Z};let Q=[$.context,Z.context].filter((J)=>typeof J==="string"&&J.length>0).join(`
|
|
476
|
+
`),W=[...$.appendMessages??[],...Z.appendMessages??[]];return{cancel:$.cancel===!0||Z.cancel===!0?!0:void 0,review:$.review===!0||Z.review===!0?!0:void 0,context:Q||void 0,overrideInput:Z.overrideInput!==void 0?Z.overrideInput:$.overrideInput,systemPrompt:Z.systemPrompt!==void 0?Z.systemPrompt:$.systemPrompt,appendMessages:W.length>0?W:void 0}}function WE($){if(!$||typeof $!=="object")return;let Z=$,Q=typeof Z.context==="string"?Z.context:typeof Z.contextModification==="string"?Z.contextModification:typeof Z.errorMessage==="string"?Z.errorMessage:void 0;return{cancel:typeof Z.cancel==="boolean"?Z.cancel:void 0,review:typeof Z.review==="boolean"?Z.review:void 0,context:Q,overrideInput:Object.hasOwn(Z,"overrideInput")?Z.overrideInput:void 0}}function ZJ($){let Z=String($??"").toLowerCase();return Z.includes("cancel")||Z.includes("abort")||Z.includes("interrupt")}function O0($,Z){let Q=process.env.CLINE_USER_ID?.trim()||process.env.USER?.trim()||"unknown",W={rootSessionId:Z.rootSessionId||$.conversationId};return{clineVersion:process.env.CLINE_VERSION?.trim()||"",timestamp:new Date().toISOString(),taskId:$.conversationId,sessionContext:W,workspaceRoots:Z.workspacePath?[Z.workspacePath]:[],workspaceInfo:Z.workspaceInfo,userId:Q,agent_id:$.agentId,parent_agent_id:$.parentAgentId}}function JE($){let Z=$.trim();if(!Z)return{};let W=Z.split(`
|
|
477
|
+
`).map((X)=>X.trim()).filter(Boolean).filter((X)=>X.startsWith("HOOK_CONTROL\t")).map((X)=>X.slice(13)),J=W.length>0?W[W.length-1]:Z;try{return{parsedJson:JSON.parse(J)}}catch(X){return{parseError:X instanceof Error?X.message:"Failed to parse hook stdout JSON"}}}async function XE($,Z){let Q=$.stdin;if(!Q)throw Error("hook command failed to create stdin");await new Promise((W,J)=>{let X=!1,Y=()=>{Q.off("error",V),Q.off("finish",H),$.off("close",B)},j=(G)=>{if(X)return;if(X=!0,Y(),G){let K=G.code;if(K==="EPIPE"||K==="ERR_STREAM_DESTROYED"){W();return}J(G);return}W()},V=(G)=>j(G),H=()=>j(),B=()=>j();Q.on("error",V),Q.once("finish",H),$.once("close",B);try{Q.end(Z)}catch(G){j(G)}})}async function kG($,Z){if(Z.command.length===0)throw Error("runHookCommand requires non-empty command");try{return await yG($,Z)}catch(Q){let W=VE(Z.command,process.platform,Q);if(!W)throw Q;return await yG($,{...Z,command:W})}}async function yG($,Z){let Q=hG(Z.command,{env:Z.env,debugRole:"hook"}),W=tR(Q[0],Q.slice(1),{cwd:Z.cwd,env:WJ(Z.env),stdio:Z.detached?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:Z.detached,windowsHide:!0}),J=new Promise((K)=>{W.once("spawn",()=>K())}),X=new Promise((K,F)=>{W.once("error",(A)=>F(A))}),Y=JSON.stringify($);if(await Promise.race([J,X]),await XE(W,Y),Z.detached){W.unref();return}if(!W.stdout||!W.stderr)throw Error("hook command failed to create stdout/stderr");let j="",V="",H=!1,B;W.stdout.on("data",(K)=>{j+=K.toString()}),W.stderr.on("data",(K)=>{V+=K.toString()});let G=new Promise((K)=>{if((Z.timeoutMs??0)>0)B=setTimeout(()=>{H=!0,W.kill("SIGKILL")},Z.timeoutMs);W.once("close",(F)=>{if(B)clearTimeout(B);let{parsedJson:A,parseError:L}=JE(j);K({exitCode:F,stdout:j,stderr:V,parsedJson:A,parseError:L,timedOut:H})})});return await Promise.race([G,X])}function YE($){try{let Q=$E($,"utf8").split(/\r?\n/,1)[0]?.trim();if(!Q?.startsWith("#!"))return;let W=Q.slice(2).trim();if(!W)return;let J=W.split(/\s+/).filter(Boolean);return J.length>0?J:void 0}catch{return}}function jE($){return!!($&&typeof $==="object"&&("code"in $)&&$.code==="ENOENT")}function VE($,Z=process.platform,Q){if(Z!=="win32"||!jE(Q))return;if($[0]!=="py"||$[1]!=="-3")return;return["python",...$.slice(2)]}function IG($){if($.length===0)return;let[Z,...Q]=$,W=Z.replace(/\\/g,"/").toLowerCase(),J=W.split("/").at(-1)??W;if(J==="env")return IG(Q);if(J==="bash"||J==="sh"||J==="zsh")return[J,...Q];if(J==="python3"||J==="python")return process.platform==="win32"?["py","-3",...Q]:[J,...Q];return $}function HE($){let Z=YE($);if(Z&&Z.length>0)return[...IG(Z)??Z,$];let Q=$.toLowerCase();if(Q.endsWith(".sh")||Q.endsWith(".bash")||Q.endsWith(".zsh"))return["bash",$];if(Q.endsWith(".js")||Q.endsWith(".mjs")||Q.endsWith(".cjs"))return hG(["node",$],{debugRole:"hook"});if(Q.endsWith(".ts")||Q.endsWith(".mts")||Q.endsWith(".cts"))return["bun","run",$];if(Q.endsWith(".py"))return process.platform==="win32"?["py","-3",$]:["python3",$];if(Q.endsWith(".ps1"))return[process.platform==="win32"?"powershell":"pwsh","-File",$];return["bash",$]}function BE($){let Z={};for(let Q of N$($)){if(!Q.hookEventName)continue;let W=Q.hookEventName,J=Z[W]??[];J.push(HE(Q.path)),Z[W]=J}return Z}async function GE($){let Z;for(let Q of $.commands){let W=Q.join(" ");try{let J=await kG($.payload,{command:Q,cwd:$.cwd,env:WJ(process.env),detached:!1,timeoutMs:$.timeoutMs});if(J?.timedOut){dZ($.logger,`hook command timed out: ${W}`);continue}if(J?.parseError){dZ($.logger,`hook command returned invalid JSON control output: ${W} (${J.parseError})`);continue}Z=QE(Z,WE(J?.parsedJson))}catch(J){dZ($.logger,`hook command failed: ${W}`,J)}}return Z}function T2($){for(let Z of $.commands){let Q=Z.join(" ");kG($.payload,{command:Z,cwd:$.cwd,env:WJ(process.env),detached:!0}).catch((W)=>{dZ($.logger,`hook command failed: ${Q}`,W)})}}function w$($){return{agentId:$.agentId,conversationId:$.conversationId??$.runId??$.agentId,parentAgentId:$.parentAgentId??null}}function QJ($,Z){return{...w$($.snapshot),userMessage:Z}}function xG($){return{...w$($.snapshot),iteration:$.snapshot.iteration,call:{id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:$.input}}}function gG($){return{...w$($.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 mG($){return $.filter((Z)=>Z.type==="text"&&typeof Z.text==="string").map((Z)=>Z.text).join("")}function KE($){if(!$)return;let Z={};if($.cancel===!0)Z.stop=!0;if($.overrideInput!==void 0)Z.input=$.overrideInput;return Object.keys(Z).length>0?Z:void 0}function c8($){let Z={cwd:$.workspacePath,workspacePath:$.workspacePath,rootSessionId:$.rootSessionId,workspaceInfo:$.workspaceInfo},Q=(W)=>{let J=`${JSON.stringify({ts:new Date().toISOString(),...W})}
|
|
478
|
+
`,Y=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??ZE(bG(),"hooks.jsonl");bG(Y),eR(Y,J,"utf8")};return{beforeRun:async(W)=>{let J=QJ(W,"");Q({...O0(J,Z),hookName:"agent_start",taskStart:{taskMetadata:{}}});return},beforeTool:async(W)=>{let J=xG(W);Q({...O0(J,Z),hookName:"tool_call",iteration:J.iteration,tool_call:{id:J.call.id,name:J.call.name,input:J.call.input},preToolUse:{toolName:J.call.name,parameters:lZ(J.call.input)}});return},afterTool:async(W)=>{let J=gG(W);Q({...O0(J,Z),hookName:"tool_result",iteration:J.iteration,tool_result:J.record,postToolUse:{toolName:J.record.name,parameters:lZ(J.record.input),result:typeof J.record.output==="string"?J.record.output:JSON.stringify(J.record.output),success:!J.record.error,executionTimeMs:J.record.durationMs}});return},afterRun:async({snapshot:W,result:J})=>{let X=w$(W);if(J.status==="completed"){Q({...O0(X,Z),hookName:"agent_end",iteration:J.iterations,turn:{outputText:J.outputText,status:J.status},taskComplete:{taskMetadata:{}}});return}if(J.status==="aborted"||ZJ(J.error?.message)){Q({...O0(X,Z),hookName:"agent_abort",reason:J.error?.message,taskCancel:{taskMetadata:{}}});return}if(J.error)Q({...O0(X,Z),hookName:"agent_error",iteration:J.iterations,error:{name:J.error.name,message:J.error.message,stack:J.error.stack}})},onEvent:async(W)=>{if(W.type!=="message-added"||W.message.role!=="user")return;let J=QJ({snapshot:W.snapshot},mG(W.message.content));Q({...O0(J,Z),hookName:"prompt_submit",userPromptSubmit:{prompt:J.userMessage,attachments:[]}})}}}function s6($){let Z=BE($.workspacePath);if(!Object.values(Z).some((G)=>G.length>0))return;let W=async(G,K)=>{let F=Z[K]??[];if(F.length===0)return;T2({commands:F,cwd:$.cwd,logger:$.logger,payload:K==="agent_resume"?{...O0(G,$),hookName:K,taskResume:{taskMetadata:{},previousState:{}}}:{...O0(G,$),hookName:K,taskStart:{taskMetadata:{}}}})},J=async(G)=>{let K=Z.prompt_submit??[];if(K.length>0)T2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...O0(G,$),hookName:"prompt_submit",userPromptSubmit:{prompt:G.userMessage,attachments:[]}}})},X=async(G)=>{let K=Z.tool_call??[];if(K.length===0)return;return GE({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:lZ(G.call.input)}}})},Y=async(G)=>{let K=Z.tool_result??[];if(K.length===0)return;T2({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:lZ(G.record.input),result:typeof G.record.output==="string"?G.record.output:JSON.stringify(G.record.output),success:!G.record.error,executionTimeMs:G.record.durationMs}}})},j=async(G)=>{let K=Z.agent_end??[];if(K.length===0)return;T2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...O0(G,$),hookName:"agent_end",iteration:G.iteration,turn:G.turn,taskComplete:{taskMetadata:{}}}})},V=async(G)=>{let K=Z.agent_error??[];if(K.length===0)return;T2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...O0(G,$),hookName:"agent_error",iteration:G.iteration,error:{name:G.error.name,message:G.error.message,stack:G.error.stack}}})},H=async(G)=>{if(ZJ(G.reason)){let F=Z.agent_abort??[];if(F.length>0)T2({commands:F,cwd:$.cwd,logger:$.logger,payload:{...O0(G,$),hookName:"agent_abort",reason:G.reason,taskCancel:{taskMetadata:{}}}})}let K=Z.session_shutdown??[];if(K.length===0)return;T2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...O0(G,$),hookName:"session_shutdown",reason:G.reason}})},B={};if((Z.agent_start?.length??0)>0||(Z.agent_resume?.length??0)>0||(Z.prompt_submit?.length??0)>0){if((Z.agent_start?.length??0)>0||(Z.agent_resume?.length??0)>0)B.beforeRun=async(G)=>{let K=process.env.CLINE_HOOK_AGENT_RESUME==="1"?"agent_resume":"agent_start";await W(w$(G.snapshot),K);return};if((Z.prompt_submit?.length??0)>0)B.onEvent=async(G)=>{if(G.type!=="message-added"||G.message.role!=="user")return;await J(QJ({snapshot:G.snapshot},mG(G.message.content)))}}if((Z.tool_call?.length??0)>0)B.beforeTool=async(G)=>{let K=await X(xG(G));return KE(K)};if((Z.tool_result?.length??0)>0)B.afterTool=async(G)=>{await Y(gG(G));return};if((Z.agent_end?.length??0)>0)B.afterRun=async({snapshot:G,result:K})=>{if(K.status!=="completed")return;await j({...w$(G),iteration:K.iterations,turn:{outputText:K.outputText,status:K.status}})};if((Z.agent_error?.length??0)>0||(Z.agent_abort?.length??0)>0||(Z.session_shutdown?.length??0)>0){let G=B.afterRun;B.afterRun=async(K)=>{await G?.(K);let{snapshot:F,result:A}=K;if(A.status==="aborted"||ZJ(A.error?.message)){await H({...w$(F),reason:A.error?.message});return}if(A.error)await V({...w$(F),iteration:A.iterations,error:A.error})}}return B}function u8($){return m8("core.hook_config_files",s6($))}function O2($,Z){let Q=$.map((W)=>W[Z]).filter((W)=>typeof W==="function");if(Q.length===0)return;return async(W)=>{let J;for(let X of Q){let Y=await X(W);if(!Y||typeof Y!=="object")continue;let j=Y;J={...J??{},...j,stop:J?.stop===!0||j.stop===!0?!0:j.stop,options:J?.options||j.options?{...J?.options??{},...j.options??{}}:void 0}}return J}}function q2($){let Z=$.filter((Q)=>Q!==void 0);if(Z.length===0)return;return{beforeRun:O2(Z,"beforeRun"),afterRun:O2(Z,"afterRun"),beforeModel:O2(Z,"beforeModel"),afterModel:O2(Z,"afterModel"),beforeTool:O2(Z,"beforeTool"),afterTool:O2(Z,"afterTool"),onEvent:O2(Z,"onEvent")}}var vG={};N(vG,{normalizeRuntimeCapabilities:()=>q0});function q0(...$){let Z,Q;for(let J of $){if(!J)continue;if(J.toolExecutors)Z={...Z??{},...J.toolExecutors};if(J.requestToolApproval)Q=J.requestToolApproval}let W=Z&&Object.keys(Z).length>0;if(!W&&!Q)return;return{...W?{toolExecutors:Z}:{},...Q?{requestToolApproval:Q}:{}}}var aG={};N(aG,{toProviderConfig:()=>l0,emptyStoredProviderSettings:()=>S$,StoredProviderSettingsSchema:()=>r8,StoredProviderSettingsEntrySchema:()=>FQ,ProviderSettingsSchemaTyped:()=>p8});import{z as P$}from"zod";var nG={};N(nG,{toProviderConfig:()=>l0,safeParseSettings:()=>KQ,safeCreateProviderConfig:()=>FJ,parseSettings:()=>GQ,normalizeProviderId:()=>l8,isBuiltInProviderId:()=>GJ,createProviderConfig:()=>KJ,SapSettingsSchema:()=>VQ,ReasoningSettingsSchema:()=>JQ,ProviderSettingsSchema:()=>C$,ProviderProtocolSchema:()=>ZQ,ProviderIdSchema:()=>Z5,ProviderClientSchema:()=>QQ,OcaSettingsSchema:()=>HQ,ModelCatalogSettingsSchema:()=>BQ,GcpSettingsSchema:()=>YQ,BUILT_IN_PROVIDER_IDS:()=>BJ,BUILT_IN_PROVIDER:()=>$5,AzureSettingsSchema:()=>jQ,AwsSettingsSchema:()=>XQ,AuthSettingsSchema:()=>WQ});import*as d0 from"@cline/llms";import{z as w}from"zod";var iG={};N(iG,{resolveProviderConfig:()=>e6,getProviderConfig:()=>$Q,getLiveModelsCatalog:()=>d8,clearPublicModelsCatalogCache:()=>kE,clearPrivateModelsCatalogCache:()=>HJ,clearLiveModelsCatalogCache:()=>VJ,OPENAI_COMPATIBLE_PROVIDERS:()=>t6,DEFAULT_MODELS_CATALOG_URL:()=>sZ});import*as s from"@cline/llms";function JJ($){if(!Array.isArray($))return[];return $.map((Z)=>{if(typeof Z==="string")return Z.trim();if(Z&&typeof Z==="object"){let Q=Z;for(let W of[Q.id,Q.name,Q.model])if(typeof W==="string"&&W.trim())return W.trim()}return""}).filter((Z)=>Z.length>0)}function FE($,Z){let Q=JJ($);if(Q.length>0)return Q;if(!$||typeof $!=="object")return[];let W=$,J=JJ(W.data??W.models);if(J.length>0)return J;if(W.models&&typeof W.models==="object"&&!Array.isArray(W.models)){let Y=Object.keys(W.models).filter((j)=>j.trim().length>0);if(Y.length>0)return Y}let X=W.providers?.[Z];if(X&&typeof X==="object"){let j=JJ(X.models??X);if(j.length>0)return j}return[]}async function pZ($,Z){let Q=await fetch($,{method:"GET"});if(!Q.ok)throw Error(`failed to fetch models from ${$}: HTTP ${Q.status}`);return FE(await Q.json(),Z)}function cG($){return $.replace(/\/+$/,"")}function rZ($,Z,Q){let W=Q?.trim();if(!W)return;let J=$?.trim();if(!J||!Z?.trim())return W;try{let X=new URL(W),Y=new URL(Z),j=new URL(J);if(X.origin!==Y.origin)return W;let V=cG(Y.pathname),H=cG(j.pathname);if(V&&X.pathname.startsWith(`${V}/`)){let B=X.pathname.slice(V.length);j.pathname=`${H}${B}`}else j.pathname=X.pathname;return j.search=X.search,j.hash=X.hash,j.toString()}catch{return W}}function AE($){return Object.fromEntries(Object.entries($).map(([Z,Q])=>[Z,{...Q}]))}function fE($){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 UE=Object.values(s.MODEL_COLLECTIONS_BY_PROVIDER_ID).map(($)=>({id:$.provider.id,baseUrl:$.provider.baseUrl??"",modelsSourceUrl:$.provider.modelsSourceUrl,modelId:$.provider.defaultModelId,knownModels:AE($.models),capabilities:$.provider.capabilities?[...$.provider.capabilities]:void 0,env:$.provider.env?[...$.provider.env]:void 0,client:$.provider.client,protocol:$.provider.protocol})),dG=Object.fromEntries(UE.map(($)=>[$.id,$]));function DE($){return dG[$]}function LE(){return Object.fromEntries(Object.entries(dG).filter(([,$])=>fE($)))}function lG($=[]){let Z=$.flatMap((Q)=>{switch(Q){case"reasoning":case"prompt-cache":case"tools":case"oauth":return[Q];default:return[]}});return Z.length>0?Z:void 0}var sZ="https://models.dev/api.json",_E=600000,pG=300000,zE=5000,aZ=new Map,o6=new Map,XJ=new Map,iZ=new Map;async function TE(){return s.getGeneratedProviderModels()}async function OE($,Z={},Q={},W={},J={},X={}){if($==="litellm")return s.sortModelsByReleaseDate(W);let Y=await TE(),j=s.resolveProviderModelCatalogKeys($),V=Object.assign({},...j.map((K)=>Y[K]??{})),H=Boolean(s.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl),B=Object.keys(J).length>0;if(H&&B)return s.sortModelsByReleaseDate({...J,...X});if($==="openai-codex")return s.sortModelsByReleaseDate({...Z,...s.filterOpenAICodexModels(Q),...J,...X});if($==="cline-pass"&&Object.keys(Q).length>0)return s.sortModelsByReleaseDate({...Q,...X});let G=s.sortModelsByReleaseDate({...V,...Z,...Q,...W,...J});if($==="cline")return s.sortModelsByReleaseDate({...s.preferCanonicalModelIds(G,s.VERCEL_OPENROUTER_MODEL_ID_ALIAS_RULES),...X});return s.sortModelsByReleaseDate({...G,...X})}function qE($,Z){let Q=s.resolveProviderModelCatalogKeys($);return Object.assign({},...Q.map((W)=>Z[W]??{}))}function oZ($){let Z=$?.trim();return Z&&Z.length>0?Z:""}function jJ($){let Z=$.apiKey?.trim()||$.accessToken?.trim();return Z&&Z.length>0?Z:void 0}function ME($){let Z=2166136261;for(let Q=0;Q<$.length;Q+=1)Z^=$.charCodeAt(Q),Z+=(Z<<1)+(Z<<4)+(Z<<7)+(Z<<8)+(Z<<24);return(Z>>>0).toString(16)}function RE($,Z){return`${$}:${oZ(Z.baseUrl)}:${ME(jJ(Z)??"")}`}async function tZ($,Z,Q=zE){let W=new AbortController,J=setTimeout(()=>W.abort(),Q);try{return await fetch($,{...Z,signal:W.signal})}finally{clearTimeout(J)}}function M2($,Z,Q){if(Q&&!$.includes(Z))$.push(Z)}function eZ($,Z){let Q=["streaming","tools"];return M2(Q,"images",Boolean(Z.supportsImages)),M2(Q,"prompt-cache",Boolean(Z.supportsPromptCache)),M2(Q,"reasoning",Boolean(Z.supportsReasoning)),{id:$,name:Z.name??$,contextWindow:Z.contextWindow,maxInputTokens:Z.maxInputTokens,maxTokens:Z.maxTokens,capabilities:Q,releaseDate:Z.releaseDate,status:"active"}}async function EE($,Z){let Q=await tZ("https://inference.baseten.co/v1/models",{method:"GET",headers:{Authorization:`Bearer ${Z}`,"Content-Type":"application/json"}});if(!Q.ok)throw Error(`Baseten model refresh failed: HTTP ${Q.status}`);let J=(await Q.json())?.data??[],X={};for(let Y of J){let j=Y.id?.trim();if(!j)continue;if(j.includes("whisper")||j.includes("tts")||j.includes("embedding"))continue;let V=Y.supported_features??[];X[j]=eZ(j,{name:j,contextWindow:Y.context_length,maxInputTokens:Y.context_length,maxTokens:Y.max_completion_tokens,supportsReasoning:V.includes("reasoning")||V.includes("reasoning_effort"),supportsImages:!1})}return X}function uG($){if(typeof $==="number")return Number.isFinite($)?$:void 0;if(typeof $==="string"){let Z=Number($);return Number.isFinite(Z)?Z:void 0}return}async function NE($,Z){let Q=await tZ("https://api.hicap.ai/v2/openai/models",{method:"GET",headers:{"api-key":Z}});if(!Q.ok)throw Error(`Hicap model refresh failed: HTTP ${Q.status}`);let J=(await Q.json())?.data??[],X={};for(let Y of J){let j=Y.id?.trim();if(!j)continue;X[j]=eZ(j,{name:j,maxInputTokens:128000,supportsImages:!0,supportsPromptCache:!0})}return X}async function wE($,Z){let W=`${(oZ($.baseUrl)||"https://inference.poolside.ai/v1").replace(/\/+$/,"")}/models`,J=await tZ(W,{method:"GET",headers:{Authorization:`Bearer ${Z}`,accept:"application/json"}});if(!J.ok)throw Error(`Poolside model refresh failed: HTTP ${J.status}`);let Y=(await J.json())?.data??[],j={};for(let V of Y){let H=V.id?.trim();if(!H)continue;let B=V.supported_features??[],G=V.supported_sampling_parameters??[],K=V.input_modalities??[],F=["streaming"];M2(F,"tools",B.includes("tools")),M2(F,"reasoning",B.includes("reasoning")),M2(F,"temperature",G.includes("temperature")),M2(F,"images",K.includes("image"));let A={input:uG(V.pricing?.prompt),output:uG(V.pricing?.completion)};j[H]={id:H,name:V.name??H,description:V.description,contextWindow:V.context_length,maxInputTokens:V.context_length,maxTokens:V.max_completion_tokens,capabilities:F,pricing:A.input!==void 0||A.output!==void 0?A:void 0,status:"active"}}return j}function CE($){let Z=oZ($).replace(/\/+$/,"");if(!Z)return"http://localhost:4000";return Z.endsWith("/v1")?Z.slice(0,-3):Z}function PE($){return[`${$}/v1/model/info`,`${$}/model/info`]}async function SE($){let Z=(await $.text().catch(()=>"")).replace(/\s+/g," ").trim(),Q=500,W=Z?`: ${Z.slice(0,500)}${Z.length>500?"...":""}`:"";return`HTTP ${$.status}${W}`}async function bE($,Z){let Q=CE($.baseUrl),W=[],J=[["x-litellm-api-key",{"x-litellm-api-key":Z}],["Authorization",{Authorization:`Bearer ${Z}`}]];for(let X of PE(Q))for(let[Y,j]of J)try{let V=await tZ(X,{method:"GET",headers:{accept:"application/json",...j}});if(V.ok){let B=(await V.json())?.data??[],G={};for(let K of B){let F=K.model_name?.trim(),L=K.litellm_params?.model?.trim()||F;if(!L)continue;let f=K.model_info,D=eZ(L,{name:F??L,maxTokens:f?.max_output_tokens??f?.max_tokens,maxInputTokens:f?.max_input_tokens??f?.max_tokens,supportsImages:f?.supports_vision,supportsPromptCache:f?.supports_prompt_caching,supportsReasoning:f?.supports_reasoning});if(G[L]=D,F)G[F]={...D,id:F,name:F}}return G}W.push(`${new URL(X).pathname} (${Y}): ${await SE(V)}`)}catch(V){let H=V instanceof Error?V.message:String(V);W.push(`${new URL(X).pathname} (${Y}): ${H}`)}throw Error(`LiteLLM model refresh failed. Attempts: ${W.join("; ")}`)}var rG={baseten:EE,hicap:NE,litellm:bE,poolside:wE},YJ=new Map,nZ=new Map;function yE($,Z){return`${$}:${oZ(Z.baseUrl)}`}async function hE($,Z,Q){let W=s.MODEL_COLLECTIONS_BY_PROVIDER_ID[$],J=rZ(Q.baseUrl,W?.provider.baseUrl,W?.provider.modelsSourceUrl);if(!J)return{};let X=Z?.cacheTtlMs??pG,Y=yE($,Q),j=Date.now(),V=YJ.get(Y);if(V&&V.expiresAt>j)return V.data;let H=nZ.get(Y);if(H)return H;let B=pZ(J,$).then((G)=>{let K=Object.fromEntries(G.map((F)=>[F,eZ(F,{name:F})]));return YJ.set(Y,{data:K,expiresAt:j+X}),K}).finally(()=>{nZ.delete(Y)});return nZ.set(Y,B),B}function kE(){YJ.clear(),nZ.clear()}async function IE($,Z){let Q=jJ(Z);if(!Q)return{};let W=rG[$];if(!W)return{};return W(Z,Q)}function xE($,Z,Q){if(!Q)return!1;if(!rG[$])return!1;if(Z?.loadPrivateOnAuth===!1)return!1;return Boolean(jJ(Q))}async function gE($,Z,Q){let W=Z?.cacheTtlMs??pG,J=RE($,Q),X=Date.now(),Y=XJ.get(J);if(Y&&Y.expiresAt>X)return Y.data;let j=iZ.get(J);if(j)return j;let V=IE($,Q).then((H)=>{return XJ.set(J,{data:H,expiresAt:X+W}),H}).finally(()=>{iZ.delete(J)});return iZ.set(J,V),V}async function mE($){return s.fetchLiveProviderModels($,globalThis.fetch)}async function d8($={}){let Z=$.url??sZ,Q=$.cacheTtlMs??_E,W=Date.now(),J=aZ.get(Z);if(J&&J.expiresAt>W)return J.data;let X=o6.get(Z);if(X)return X;let Y=mE(Z).then((j)=>{return aZ.set(Z,{data:j,expiresAt:W+Q}),j}).finally(()=>{o6.delete(Z)});return o6.set(Z,Y),Y}function VJ($){if($){aZ.delete($),o6.delete($);return}aZ.clear(),o6.clear()}function HJ(){XJ.clear(),iZ.clear()}function vE($){return Object.fromEntries(Object.entries($).map(([Z,Q])=>[Z,{baseUrl:Q.baseUrl,modelId:Q.modelId,capabilities:lG(Q.capabilities)}]))}var t6=vE(LE());function $Q($){let Z=DE($);if(!Z)return;return{baseUrl:Z.baseUrl||void 0,modelId:Z.modelId,knownModels:Z.knownModels,capabilities:lG(Z.capabilities)}}async function e6($,Z,Q){let W=$Q($);if(!W)return;try{let J=Z?.loadLatestOnInit?await d8(Z):void 0,X=J?qE($,J):{},Y=Q&&xE($,Z,Q)?await gE($,Z,Q):{},V=Boolean(s.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl)?Q??{providerId:$,modelId:W.modelId,baseUrl:W.baseUrl}:Q,H=V?await hE($,Z,V).catch(()=>({})):{},B=await OE($,W.knownModels,X,Y,H,Q?.knownModels);return{...W,knownModels:B}}catch(J){if(Z?.failOnError)throw J;if($==="litellm")return{...W,knownModels:{}};return W}}var $5=d0.BUILT_IN_PROVIDER,BJ=d0.BUILT_IN_PROVIDER_IDS,GJ=d0.isBuiltInProviderId,l8=d0.normalizeProviderId,Z5=w.string().min(1).regex(/^[a-z0-9][a-z0-9-]*$/i),ZQ=w.enum(["anthropic","gemini","openai-chat","openai-responses","openai-r1","ai-sdk"]),QQ=w.enum(["anthropic","ai-sdk","ai-sdk-community","openai","openai-compatible","openai-r1","gemini","bedrock","custom","fetch","vertex"]),WQ=w.object({apiKey:w.string().optional(),accessToken:w.string().optional(),refreshToken:w.string().optional(),expiresAt:w.number().int().positive().optional(),accountId:w.string().optional()}),cE=w.enum(["none","low","medium","high","xhigh"]),JQ=w.object({enabled:w.boolean().optional(),effort:cE.optional(),budgetTokens:w.number().int().positive().optional()}),XQ=w.object({accessKey:w.string().optional(),secretKey:w.string().optional(),sessionToken:w.string().optional(),region:w.string().optional(),profile:w.string().optional(),authentication:w.enum(["iam","api-key","apikey","profile"]).optional(),usePromptCache:w.boolean().optional(),useCrossRegionInference:w.boolean().optional(),useGlobalInference:w.boolean().optional(),endpoint:w.string().url().optional(),customModelBaseId:w.string().optional()}),YQ=w.object({projectId:w.string().optional(),region:w.string().optional()}),jQ=w.object({apiVersion:w.string().optional(),useIdentity:w.boolean().optional()}),VQ=w.object({clientId:w.string().optional(),clientSecret:w.string().optional(),tokenUrl:w.string().url().optional(),resourceGroup:w.string().optional(),deploymentId:w.string().optional(),useOrchestrationMode:w.boolean().optional(),api:w.enum(["orchestration","foundation-models"]).optional(),defaultSettings:w.record(w.string(),w.unknown()).optional()}),HQ=w.object({mode:w.enum(["internal","external"]).optional(),usePromptCache:w.boolean().optional()}),BQ=w.object({loadLatestOnInit:w.boolean().optional(),loadPrivateOnAuth:w.boolean().optional(),url:w.string().url().optional(),cacheTtlMs:w.number().int().positive().optional(),failOnError:w.boolean().optional()}),C$=w.object({provider:Z5,apiKey:w.string().optional(),auth:WQ.optional(),model:w.string().optional(),protocol:ZQ.optional(),client:QQ.optional(),routingProviderId:Z5.optional(),maxTokens:w.number().int().positive().optional(),contextWindow:w.number().int().positive().optional(),baseUrl:w.string().url().optional(),headers:w.record(w.string(),w.string()).optional(),timeout:w.number().int().positive().optional(),reasoning:JQ.optional(),aws:XQ.optional(),gcp:YQ.optional(),azure:jQ.optional(),sap:VQ.optional(),oca:HQ.optional(),region:w.string().optional(),apiLine:w.enum(["china","international"]).optional(),capabilities:w.array(w.enum(["reasoning","prompt-cache","streaming","tools","vision","computer-use","oauth","popular"])).optional(),modelCatalog:BQ.optional()});function GQ($){return C$.parse($)}function KQ($){return C$.safeParse($)}function uE($){return $.protocol==="openai-responses"||$.client==="openai"}function l0($,Z={}){let Q=$.provider,W=l8(Q),J=Z.includeKnownModels!==!1,X=$.reasoning?.effort||"none",Y=X==="none"?void 0:X,j=t6[W],V=Object.assign({},...d0.resolveProviderModelCatalogKeys(W).map((L)=>d0.getGeneratedModelsForProvider(L))),H=Object.keys(V)[0],B=U8(W,$),G=$.baseUrl??(W==="oca"?$.oca?.mode==="internal"?XZ:YZ:j?.baseUrl),K=$.routingProviderId??(uE($)&&W!==$5.OPENAI_NATIVE?$5.OPENAI_NATIVE:void 0),F=J?j?.knownModels??(Object.keys(V).length>0?V:void 0):void 0,A={providerId:Q,clientType:$.client,routingProviderId:K,modelId:$.model??j?.modelId??H??"default",...J?{knownModels:F}:{},apiKey:B,accessToken:$.auth?.accessToken,refreshToken:$.auth?.refreshToken,accountId:$.auth?.accountId,baseUrl:G,headers:$.headers,timeoutMs:$.timeout,maxOutputTokens:$.maxTokens,maxInputTokens:$.contextWindow,thinking:$.reasoning?.enabled,reasoningEffort:Y,thinkingBudgetTokens:$.reasoning?.budgetTokens,region:$.region??$.aws?.region??$.gcp?.region,apiLine:$.apiLine,useCrossRegionInference:$.aws?.useCrossRegionInference,useGlobalInference:$.aws?.useGlobalInference,aws:$.aws?{accessKey:$.aws.accessKey,secretKey:$.aws.secretKey,sessionToken:$.aws.sessionToken,authentication:$.aws.authentication,profile:$.aws.profile,usePromptCache:$.aws.usePromptCache,endpoint:$.aws.endpoint,customModelBaseId:$.aws.customModelBaseId}:void 0,gcp:$.gcp?{projectId:$.gcp.projectId,region:$.gcp.region}:void 0,azure:$.azure,sap:$.sap,oca:$.oca,capabilities:$.capabilities??j?.capabilities,modelCatalog:$.modelCatalog?{loadLatestOnInit:$.modelCatalog.loadLatestOnInit,loadPrivateOnAuth:$.modelCatalog.loadPrivateOnAuth,url:$.modelCatalog.url,cacheTtlMs:$.modelCatalog.cacheTtlMs,failOnError:$.modelCatalog.failOnError}:void 0};return Object.fromEntries(Object.entries(A).filter(([L,f])=>f!==void 0))}function KJ($){let Z=GQ($);return l0(Z)}function FJ($){let Z=KQ($);if(Z.success)return{success:!0,config:l0(Z.data)};return{success:!1,error:Z.error}}var p8=C$;var FQ=P$.object({settings:C$,updatedAt:P$.string().datetime(),tokenSource:P$.enum(["manual","oauth","migration"]).default("manual")}),r8=P$.object({version:P$.literal(1),lastUsedProvider:P$.string().min(1).optional(),providers:P$.record(P$.string(),FQ)});function S$(){return{version:1,providers:{}}}$1();var sG={};N(sG,{InMemoryWorkspaceManager:()=>i8});import{upsertWorkspaceInfo as dE,WorkspaceManifestSchema as AJ}from"@cline/shared";class i8{manifest;listeners=new Set;constructor($){this.manifest=AJ.parse($??{workspaces:{}})}async addWorkspacePath($){let Z=await e2($);return this.manifest=dE(this.manifest,Z),this.emit({type:"workspace_added",workspace:Z}),Z}async switchWorkspace($){let Z=N1($),Q=this.manifest.workspaces[Z];if(Q)return this.manifest=AJ.parse({...this.manifest,currentWorkspacePath:Z}),this.emit({type:"workspace_switched",workspace:Q}),Q;let W=await this.addWorkspacePath(Z);return this.manifest=AJ.parse({...this.manifest,currentWorkspacePath:W.rootPath}),this.emit({type:"workspace_switched",workspace:W}),W}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}getCurrentWorkspace(){let $=this.manifest.currentWorkspacePath;if(!$)return;return this.manifest.workspaces[$]}getWorkspace($){let Z=N1($);return this.manifest.workspaces[Z]}listWorkspaces(){return Object.values(this.manifest.workspaces)}getManifest(){return this.manifest}emit($){for(let Z of this.listeners)Z($)}}_0();import{createHash as lE}from"node:crypto";var oG=new Set,tG=new Set;function pE($){return lE("sha256").update($).digest("hex")}function rE($){if($.vcsTypes&&$.vcsTypes.length>0)return $.vcsTypes;return[$.vcsType==="git"?"git":"none"]}function eG($){if(!$.telemetry)return;let Z=pE($.rootPath),Q=$.rootCount??1;if(!oG.has(Z))oG.add(Z),_9($.telemetry,{root_count:Q,vcs_types:rE($),init_duration_ms:$.durationMs,feature_flag_enabled:$.featureFlagEnabled??!0,is_remote_workspace:$.isRemoteWorkspace});if($.initError&&!tG.has(Z)){tG.add(Z);let W=Error($.initError.message);W.name=$.initError.errorType||"Error",z9($.telemetry,W,{fallback_to_single_root:!0,workspace_count:Q})}}function nE($){return`${$.pluginName??$.pluginPath}: ${$.message}`}function aE($,Z,Q){if(Z.length>0)for(let X of Z)Q?.log(X.message,{severity:"warn"});if($.length===0)return;let W=$.slice(0,3).map(nE).join("; "),J=$.length>3?`; and ${$.length-3} more`:"";Q?.log(`Some plugins failed to initialize. ${W}${J}. Use --verbose for more details.`,{severity:"warn"});for(let X of $)Q?.log(`Plugin initialization failed (${X.phase}) for ${X.pluginPath}`,{severity:"warn",stack:X.stack,pluginPath:X.pluginPath,pluginName:X.pluginName})}function sE($,Z){let Q=typeof $.thinking==="boolean",W=typeof $.reasoningEffort==="string";if(!Q&&!W)return Z;return{...Z??{},...Q?{enabled:$.thinking}:{},...W?{effort:$.reasoningEffort}:{}}}function $K($,Z){return iE($,Z)}function oE($){let Z=0;for(let Q of $??[]){if(Q.role!=="user")continue;if(("metadata"in Q&&Q.metadata&&typeof Q.metadata==="object"&&!Array.isArray(Q.metadata)?Q.metadata:void 0)?.kind==="recovery_notice")continue;Z+=1}return Z}function tE($){let Z={...$.storedHeaders??{},...$.configHeaders??{}},Q=$.accountId?.trim()||eE($.accessToken);if(Z.originator="cline",Z.session_id=$.sessionId,Z["User-Agent"]=`Cline/${process.env.npm_package_version||"1.0.0"}`,Q)Z["ChatGPT-Account-Id"]=Q;return Z}function eE($){let Z=$?.trim();if(!Z)return;let Q=E0(Z),W=Q?.["https://api.openai.com/auth"]?.chatgpt_account_id;if(typeof W==="string"&&W.length>0)return W;let J=Q?.organizations?.[0]?.id;if(typeof J==="string"&&J.length>0)return J;let X=Q?.chatgpt_account_id;if(typeof X==="string"&&X.length>0)return X;return}function $N($,Z,Q,W,J){let X=Q.getProviderSettings($.providerId),Y=W||X?.modelCatalog?{...W??{},...X?.modelCatalog??{}}:void 0,j=$.providerConfig?.providerId===$.providerId?$.providerConfig:void 0,V={...X??{},provider:$.providerId,model:$.modelId,apiKey:$.apiKey??X?.apiKey,baseUrl:$.baseUrl??X?.baseUrl,headers:$.providerId==="openai-codex"?tE({sessionId:Z,configHeaders:$.headers,storedHeaders:X?.headers,accountId:X?.auth?.accountId,accessToken:$.apiKey??X?.auth?.accessToken??X?.apiKey}):$.headers??X?.headers,reasoning:sE($,X?.reasoning),modelCatalog:Y},H={...l0(V),...j??{}};if($.knownModels)H.knownModels=$.knownModels;if($.extensionContext)H.extensionContext=$.extensionContext;let G=$.fetch??H.fetch??J;if(G)H.fetch=G;return H}async function ZK($){let{input:Z,sessionId:Q,providerSettingsManager:W,defaultTelemetry:J,defaultCapabilities:X,defaultToolPolicies:Y,defaultFetch:j,onPluginEvent:V,onTeamEvent:H,createSubAgentLifecycleCallbacks:B,createSpawnTool:G,localRuntime:K,readSessionMetadata:F,writeSessionMetadata:A}=$,L=R$(Z.config),{modelCatalogDefaults:f,userInstructionService:D,configExtensions:U,onTeamRestored:T,...O}=K??{},z=Object.keys(O).length>0?O:void 0,{workspaceInfo:_,workspaceMetadata:E,durationMs:C,vcsType:y,initError:l}=await WW(L),o=z?.extensionContext,t={...o??{},workspace:{..._,...o?.workspace??{}},session:{...o?.session??{},sessionId:Q},logger:o?.logger??z?.logger,telemetry:o?.telemetry??z?.telemetry??J};eG({telemetry:t.telemetry,rootPath:_.rootPath,workspaceInfo:_,rootCount:1,vcsType:y,durationMs:C,initError:l,featureFlagEnabled:!0});let Q0=u8({cwd:Z.config.cwd,workspacePath:L,rootSessionId:Q,logger:z?.logger,workspaceInfo:_}),e0=eB(z?.hooks)?void 0:c8({rootSessionId:Q,workspacePath:L,workspaceInfo:_}),l$=q2([z?.hooks,e0]),r;if($K(U,"plugins"))try{r=await g8({pluginPaths:z?.pluginPaths,workspacePath:L,cwd:Z.config.cwd,onEvent:V,providerId:Z.config.providerId,modelId:Z.config.modelId,workspaceInfo:_,session:t.session,client:t.client,user:t.user,logger:t.logger,telemetry:t.telemetry,automation:t.automation}),aE(r.failures,r.warnings,z?.logger)}catch(a2){let e7=a2 instanceof Error?a2.message:String(a2);z?.logger?.log?.(`plugin loading failed; continuing without plugins (${e7})`)}let P=b3(Q0?[Q0]:void 0,b3(z?.extensions,m9(r?.extensions))),B0=$K(U,"plugins")?n1(r?.pluginPaths??[]):void 0,G0={...Z.config,...z??{},sessionId:Q,hooks:l$,extensions:P,extensionContext:t,telemetry:t.telemetry},C0=$N(G0,Q,W,f,j),i2=q2([G0.hooks,G0.checkpoint?.enabled===!0?SG({cwd:G0.cwd,sessionId:Q,logger:G0.logger,createCheckpoint:G0.checkpoint?.createCheckpoint,initialRunCount:oE(Z.initialMessages),readSessionMetadata:F,writeSessionMetadata:A}):void 0]),M1={...G0,providerConfig:C0,workspaceMetadata:E,hooks:i2},H1=Z.toolPolicies??G0.toolPolicies??Y,w4=q0(X,Z.capabilities),n2=w4?.requestToolApproval,B9=w4?.toolExecutors,R1=B?.(M1),G9=new i8({currentWorkspacePath:_.rootPath,workspaces:{[_.rootPath]:_}});return{effectiveInput:Z,config:M1,providerConfig:C0,workspaceMetadata:E,workspaceInfo:_,extensions:P,hooks:i2,toolPolicies:H1,requestToolApproval:n2,pluginSandboxShutdown:r?.shutdown,runtimeBuilderInput:{config:M1,hooks:i2,extensions:P,onTeamEvent:H,createSpawnTool:G,onTeamRestored:T,onSubAgentEvent:R1?.onSubAgentEvent,onSubAgentStart:R1?.onSubAgentStart,onSubAgentEnd:R1?.onSubAgentEnd,userInstructionService:D,pluginSkillDirectories:B0,configExtensions:U,toolExecutors:B9,toolPolicies:H1,workspaceManager:G9,logger:M1.logger,telemetry:M1.telemetry,requestToolApproval:n2}}}import{existsSync as fQ,mkdirSync as ZN,readdirSync as QN,rmdirSync as WN,rmSync as JN,unlinkSync as XN}from"node:fs";import{dirname as QK,join as AQ}from"node:path";function J0(){return new Date().toISOString()}function Q5($){if(!$||!fQ($))return;try{XN($)}catch{}}function YN($){let Z=P8($);if(Z)return{rootSessionId:Z.rootSessionId,fileStem:`${Z.agentId}__${Z.teamTaskId}`};let Q=k6($);if(Q)return{rootSessionId:Q.rootSessionId,fileStem:Q.agentId};return{rootSessionId:$,fileStem:$}}class fJ{ensureSessionsDir;constructor($){this.ensureSessionsDir=$}sessionArtifactsDir($){return AQ(this.ensureSessionsDir(),$)}ensureSessionArtifactsDir($){let Z=this.sessionArtifactsDir($);if(!fQ(Z))ZN(Z,{recursive:!0});return Z}sessionMessagesPath($){return AQ(this.sessionArtifactsDir($),`${$}.messages.json`)}sessionManifestPath($,Z=!1){let Q=Z?this.ensureSessionArtifactsDir($):this.sessionArtifactsDir($);return AQ(Q,`${$}.json`)}removeSessionDirIfEmpty($){let Z=this.sessionArtifactsDir($),Q=this.ensureSessionsDir();while(Z.startsWith(Q)&&Z!==Q){if(!fQ(Z)){Z=QK(Z);continue}try{if(QN(Z).length>0)break;WN(Z)}catch{break}Z=QK(Z)}}removeSessionDir($){this.removeDir(this.sessionArtifactsDir($))}removeDir($){if(!fQ($))return;try{JN($,{recursive:!0,force:!0})}catch{}}subagentArtifactPaths($,Z,Q){let{rootSessionId:W,fileStem:J}=YN($),X=this.sessionArtifactsDir(W);return{messagesPath:AQ(X,`${J}.messages.json`)}}}import{resolveDocumentsExtensionPath as jN}from"@cline/shared/storage";_0();function WK($,Z,Q,W,J){if(Q)O9($.telemetry,{ulid:Z,apiProvider:$.providerId,...J});else T9($.telemetry,{ulid:Z,apiProvider:$.providerId,...J});VN($.telemetry,{workspacePath:W})}function VN($,Z){let Q=jN("Hooks"),W=N$(Z.workspacePath),J=new Map;for(let X of W){let Y=X.hookEventName??"unknown",j=J.get(Y)??{global:0,workspace:0};if(X.path===Q||X.path.startsWith(`${Q}/`))j.global+=1;else j.workspace+=1;J.set(Y,j)}for(let[X,Y]of J.entries())S9($,X,Y.global,Y.workspace)}function JK($,Z){for(let Q of Z.mentions)C9($,Q,Z.matchedFiles.includes(Q)?1:0,"file",!Z.matchedFiles.includes(Q));for(let Q of Z.matchedFiles)N9($,"file",Q.length);for(let Q of Z.ignoredMentions)w9($,"file","not_found",Q)}var JU={};N(JU,{ProviderSettingsManager:()=>O1});import{chmodSync as BU,existsSync as RY,mkdirSync as PI,readFileSync as SI,writeFileSync as bI}from"node:fs";import{basename as GU,dirname as EY}from"node:path";import{resolveProviderSettingsPath as yI}from"@cline/shared/storage";var M={};N(M,{writeHubDiscovery:()=>d9,writeGlobalSettings:()=>b1,withHubStartupLock:()=>l9,verifyHubConnection:()=>F1,updateMcpSettingsFileSync:()=>j1,updateMcpSettingsFile:()=>t8,updateMcpServerOAuthStateAsync:()=>z5,updateMcpServerOAuthState:()=>C2,updateLocalProvider:()=>S7,uninstallPlugin:()=>i5,uninstallMarketplaceSkill:()=>K7,uninstallMarketplacePlugin:()=>F7,uninstallMarketplaceMcpServerFromSettings:()=>B7,uninstallMarketplaceEntry:()=>dX,truncateNotificationBody:()=>Q9,truncateCommandOutput:()=>X2,toggleDisabledTool:()=>x9,toTeamProgressLifecycleEvent:()=>H4,toProviderConfig:()=>l0,toHubStatusUrl:()=>TW,toHubHealthUrl:()=>p9,toHookConfigFileName:()=>a6,syncPluginMcpServersToSettings:()=>p5,summarizeUsageFromMessages:()=>b8,stopLocalHubServerGracefully:()=>yW,startLocalOAuthServer:()=>J1,startHubWebSocketServer:()=>X9,startHubServer:()=>jU,startClineDeviceAuth:()=>dW,splitCoreSessionConfig:()=>r4,spawnDetachedHubServerWithRetry:()=>H8,spawnDetachedHubServer:()=>NW,setTelemetryOptOutGlobally:()=>yj,setMcpServerDisabled:()=>N2,setDisabledTools:()=>AW,setDisabledPlugin:()=>mj,setAutoUpdateEnabledGlobally:()=>kj,sendHubCommand:()=>DV,saveProviderOAuthCredentials:()=>Q2,saveLocalProviderSettings:()=>WY,saveLocalProviderOAuthCredentials:()=>jY,sanitizeSessionToken:()=>U2,safeParseSettings:()=>KQ,safeCreateProviderConfig:()=>FJ,runSubprocessEvent:()=>U4,runHook:()=>L4,reviveTeamStateDates:()=>CZ,restartLocalHubIfIdleAfterStartupTimeout:()=>s9,resolveWorkspaceHubOwnerContext:()=>$V,resolveWorkflowsConfigSearchPaths:()=>F5,resolveSkillsConfigSearchPaths:()=>G5,resolveSharedHubOwnerContext:()=>Q1,resolveSessionBackend:()=>KX,resolveRulesConfigSearchPaths:()=>K5,resolveProviderConfig:()=>e6,resolveProviderApiKeyFromSettings:()=>aW,resolveProductionHubOwnerContext:()=>K1,resolvePluginSkillDirectoriesFromPaths:()=>n1,resolvePluginConfigSearchPaths:()=>p6,resolveMcpServerRegistrations:()=>p0,resolveMarketplaceMcpServerName:()=>a5,resolveLocalClineAuthToken:()=>HY,resolveHubUrl:()=>hW,resolveHubOwnerContext:()=>x1,resolveHubEndpointOptions:()=>G1,resolveHubBuildId:()=>u9,resolveHooksConfigSearchPaths:()=>i6,resolveDisabledToolNames:()=>B1,resolveDisabledPluginPaths:()=>c4,resolveDefaultMcpSettingsPath:()=>Z0,resolveDefaultHubPort:()=>V8,resolveDefaultHubPathname:()=>EW,resolveDefaultHubHost:()=>RW,resolveCoreSelectedToolIds:()=>SZ,resolveCoreDistinctId:()=>P0,resolveCompatibleLocalHubUrl:()=>s4,resolveClineDir:()=>sj,resolveClineDataDir:()=>s$,resolveAndLoadAgentPlugins:()=>g8,resolveAgentPluginPaths:()=>i1,requestHubShutdown:()=>a4,requestDesktopToolApproval:()=>NX,removePluginMcpServersFromSettings:()=>r5,rememberRecoverableLocalHubUrl:()=>B$,registerRemoteConfigSessionBlobUpload:()=>Z7,registerMcpServersFromSettingsFile:()=>P2,registerDisposable:()=>EI,refreshProviderModelsFromSource:()=>JY,refreshOpenAICodexToken:()=>JZ,refreshOcaToken:()=>VZ,refreshClineToken:()=>QZ,readSessionCheckpointHistory:()=>k2,readRemoteConfigSessionBlobUploadMetadata:()=>LX,readHubDiscovery:()=>K0,readGlobalSettings:()=>M0,readBearerToken:()=>d7,probeHubServer:()=>g1,probeHubConnection:()=>UV,prewarmFileIndex:()=>_Z,prewarmDetachedHubServer:()=>i9,prepareRemoteConfigCoreIntegration:()=>zX,parseWorkflowConfigFromMarkdown:()=>B5,parseUserCommandEnvelope:()=>RI,parseSkillConfigFromMarkdown:()=>V5,parseSettings:()=>GQ,parseRuleConfigFromMarkdown:()=>H5,parsePluginSource:()=>O7,parseMcpInstallArgs:()=>l5,parseHookEventPayload:()=>D4,parseConfiguredAgentConfig:()=>h5,normalizeWorkspacePath:()=>N1,normalizeUserInput:()=>MI,normalizeSdkError:()=>qI,normalizeRuntimeCapabilities:()=>q0,normalizeProviderId:()=>l8,normalizeOAuthProvider:()=>XY,normalizeHubWebSocketUrl:()=>G$,noopBasicLogger:()=>OI,migrateLegacyProviderSettings:()=>$9,mergeRulesForSystemPrompt:()=>t2,mergeAgentHooks:()=>q2,marketplaceEntryKey:()=>uX,makeTeamTaskSubSessionId:()=>h6,makeSubSessionId:()=>C8,loginOpenAICodex:()=>e4,loginOcaOAuth:()=>Q6,loginLocalProvider:()=>YY,loginClineOAuth:()=>o4,loginAndSaveProviderOAuthCredentials:()=>J6,loginAndSaveLocalProviderOAuthCredentials:()=>VY,loadOpenTelemetryAdapter:()=>ek,loadMcpSettingsFile:()=>E2,loadLlmsConfigFromFile:()=>TY,loadConfiguredAgentConfigs:()=>Y4,loadAgentPluginsFromPathsWithDiagnostics:()=>_2,loadAgentPluginsFromPaths:()=>IZ,loadAgentPluginFromPath:()=>d6,listSessionHistoryFromBackend:()=>rJ,listPluginToolsWithDiagnostics:()=>kQ,listPluginTools:()=>q5,listMcpServerOAuthStatuses:()=>T5,listLocalProviders:()=>ZY,listHookConfigFiles:()=>N$,isToolDisabledGlobally:()=>Ij,isTelemetryOptedOutGlobally:()=>I9,isSessionNotFoundError:()=>I1,isRuleEnabled:()=>F9,isPluginDisabledGlobally:()=>gj,isOfficialPluginSlug:()=>T7,isOAuthProvider:()=>Z2,isMarketplaceSkillInstalled:()=>G7,isLocalHubOrigin:()=>MY,isLocalHubHostName:()=>l7,isHubReconnectableTransportError:()=>SW,isHubCommandTimeoutError:()=>a9,isDiscoveryFilePresent:()=>tj,isClineOrgIndividualInferenceSubscriptionMessage:()=>HI,isClineOrgIndividualInferenceSubscriptionError:()=>VI,isClineNotSubscribedMessage:()=>jI,isClineNotSubscribedError:()=>YI,isClineAccountActionRequest:()=>UQ,isBuiltInProviderId:()=>GJ,isAutoUpdateEnabledGlobally:()=>hj,installPlugin:()=>aX,installMcpServer:()=>wX,identifyAccount:()=>S1,hasMcpSettingsFile:()=>s1,getValidOpenAICodexCredentials:()=>$6,getValidOcaCredentials:()=>W6,getValidClineCredentials:()=>t4,getProviderOAuthCredentialsFromSettings:()=>X6,getProviderConfigFields:()=>BY,getProviderConfig:()=>$Q,getProviderAuthStorageId:()=>nW,getProviderAuthHandler:()=>j0,getPersistedProviderApiKey:()=>U8,getMcpServerOAuthState:()=>w2,getMarketplaceSkillCandidates:()=>s5,getLocalProviderModels:()=>QY,getLiveModelsCatalog:()=>d8,getGlobalMarketplaceSkillPaths:()=>o5,getFileIndex:()=>d1,getCurrentContextSize:()=>I3,getCoreHeadlessToolNames:()=>y6,getCoreDefaultEnabledToolIds:()=>PZ,getCoreBuiltinToolCatalog:()=>A2,getCoreAcpToolNames:()=>bZ,getClinePassSubscriptionUrl:()=>XI,getClineOrgIndividualInferenceSubscriptionMessage:()=>WI,getClineNotSubscribedMessage:()=>JI,getClineDefaultSystemPrompt:()=>BI,generateWorkspaceInfoWithDiagnostics:()=>P4,generateWorkspaceInfo:()=>e2,formatRulesForSystemPrompt:()=>o2,formatProviderOAuthApiKey:()=>sW,formatDisplayUserInput:()=>TI,findInstalledGlobalMarketplaceSkillName:()=>t5,findCheckpointForRun:()=>A4,filterExtensionToolRegistrations:()=>m9,filterDisabledTools:()=>y1,filterDisabledPluginPaths:()=>g9,fetchClineRecommendedModels:()=>_Y,executeClineAccountAction:()=>DQ,ensureHubWebSocketServer:()=>p7,ensureHubServer:()=>VU,ensureDetachedHubServer:()=>YV,ensureCustomProvidersLoaded:()=>w7,ensureCompatibleLocalHubUrl:()=>e$,enrichPromptWithMentions:()=>T8,emptyWorkspaceManifest:()=>LI,emptyStoredProviderSettings:()=>S$,discoverPluginModulePaths:()=>r6,disablePluginMcpServersInSettings:()=>bX,deriveSubsessionStatus:()=>I6,deleteLocalProvider:()=>b7,defineLlmsConfig:()=>zY,createWorkflowsConfigDefinition:()=>U5,createUserInstructionConfigService:()=>b$,createToolPoliciesWithPreset:()=>TZ,createTool:()=>DI,createTeamName:()=>J7,createSubprocessHooks:()=>oQ,createSpawnAgentTool:()=>q$,createSkillsConfigDefinition:()=>A5,createShellTool:()=>O6,createShellExecutor:()=>Y2,createSessionHost:()=>K4,createRuntimeHost:()=>K4,createRulesConfigDefinition:()=>f5,createRemoteConfigSessionMessagesArtifactUploader:()=>_X,createProviderConfig:()=>KJ,createOpenTelemetryTelemetryService:()=>p4,createOAuthClientCallbacks:()=>n8,createMcpTools:()=>Q4,createLocalHubScheduleRuntimeHandlers:()=>YU,createLlmsSdk:()=>qY,createInitialAccumulatedUsage:()=>D0,createInMemoryHubOwnerContext:()=>oj,createHubServerUrl:()=>Z1,createHubAuthToken:()=>c9,createHookConfigFileHooks:()=>s6,createHookConfigFileExtension:()=>u8,createHookAuditHooks:()=>c8,createDisabledMcpToolPolicy:()=>O5,createDisabledMcpToolPolicies:()=>hQ,createDelegatedAgentConfigProvider:()=>T$,createDelegatedAgent:()=>O$,createDefaultToolsWithPreset:()=>OZ,createDefaultTools:()=>D$,createDefaultShellExecutor:()=>w6,createDefaultMcpServerClientFactory:()=>$4,createDefaultExecutors:()=>O8,createCoreSettingsService:()=>b2,createCoreSessionSnapshot:()=>f1,createContributionRegistry:()=>UI,createContextCompactionPrepareTurn:()=>G6,createConfiguredTelemetryService:()=>h1,createConfiguredTelemetryHandle:()=>j8,createConfiguredAgentTools:()=>j4,createClineTelemetryServiceMetadata:()=>fI,createClineTelemetryServiceConfig:()=>AI,createCheckpointComparePlan:()=>iQ,createBuiltinTools:()=>f2,createAgentTeamsTools:()=>F2,createAgentRuntime:()=>CI,createAgentHooksExtension:()=>m8,connectToHub:()=>o9,completeClineDeviceAuth:()=>lW,compareCheckpointToWorkspace:()=>c5,collectPluginMcpOAuthCandidates:()=>q7,clearPrivateModelsCatalogCache:()=>HJ,clearLiveModelsCatalogCache:()=>VJ,clearHubDiscovery:()=>S0,captureWorkspacePathResolved:()=>Nj,captureWorkspaceInitialized:()=>_9,captureWorkspaceInitError:()=>z9,captureToolUsage:()=>Q8,captureTokenUsage:()=>q9,captureTaskRestarted:()=>O9,captureTaskCreated:()=>T9,captureTaskCompleted:()=>x4,captureSubagentExecution:()=>m4,captureSkillUsed:()=>R9,captureSdkError:()=>FI,captureProviderConfigured:()=>wj,captureProviderApiError:()=>g4,captureModeSwitch:()=>M9,captureMentionUsed:()=>N9,captureMentionSearchResults:()=>C9,captureMentionFailed:()=>w9,captureHookDiscovery:()=>S9,captureExtensionActivated:()=>Ej,captureDiffEditFailure:()=>E9,captureConversationTurnEvent:()=>Z8,captureCompactionSkipped:()=>y9,captureCompactionExecuted:()=>b9,captureAuthSucceeded:()=>C1,captureAuthStarted:()=>w1,captureAuthLoggedOut:()=>V$,captureAuthFailed:()=>P1,captureAgentUnexpectedReasoningTokens:()=>Rj,captureAgentTeamCreated:()=>P9,captureAgentCreated:()=>H$,buildWorkspaceMetadata:()=>S4,buildTeamProgressSummary:()=>V4,buildSdkErrorProperties:()=>GI,buildRemoteConfigSessionBlobUploadMetadata:()=>eQ,buildMcpInstallTransport:()=>X7,buildDelegatedAgentConfig:()=>G2,buildConfiguredAgentToolName:()=>k5,buildConfiguredAgentToolDescriptors:()=>I5,buildCheckpointWorkspaceDiff:()=>nQ,bootstrapAgentTeams:()=>w8,authorizeMcpServerOAuth:()=>PQ,addLocalProvider:()=>$Y,accumulateUsageTotals:()=>f0,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>j5,UnifiedConfigFileWatcher:()=>R2,ToolPresets:()=>u0,TelemetryService:()=>X8,TelemetryLoggerSink:()=>l4,TEAM_TOOL_NAMES:()=>N8,SubprocessSandbox:()=>k8,StructuredCommandInputSchema:()=>W2,StoredProviderSettingsSchema:()=>r8,StoredProviderSettingsEntrySchema:()=>FQ,SqliteTeamStore:()=>v2,SqliteSessionStore:()=>D1,SessionVersioningService:()=>c$,SessionVersioningError:()=>k0,SessionSource:()=>z0,SessionNotFoundError:()=>k1,SapSettingsSchema:()=>VQ,SKILLS_CONFIG_DIRECTORY_NAME:()=>Y5,SESSION_STATUSES:()=>x6,SESSION_NOT_FOUND_ERROR_CODE:()=>a$,SDK_ERROR_TELEMETRY_EVENT:()=>NI,RpcClineAccountService:()=>J5,RemoteRuntimeHost:()=>X4,ReasoningSettingsSchema:()=>JQ,RULES_CONFIG_DIRECTORY_NAME:()=>MQ,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY:()=>$7,ProviderSettingsSchema:()=>C$,ProviderSettingsManager:()=>O1,ProviderProtocolSchema:()=>ZQ,ProviderIdSchema:()=>Z5,ProviderClientSchema:()=>QQ,OpenTelemetryProvider:()=>Y8,OcaSettingsSchema:()=>HQ,OPENAI_COMPATIBLE_PROVIDERS:()=>t6,NodeHubClient:()=>W1,NoOpFeatureFlagsProvider:()=>x2,NativeHubTransportAdapter:()=>J9,ModelCatalogSettingsSchema:()=>BQ,McpSettingsUpdateSkippedError:()=>o8,McpSettingsMutatorPurityError:()=>y$,McpSettingsLockTimeoutError:()=>h$,MAX_COMMAND_OUTPUT_CHARS:()=>c1,LocalRuntimeHost:()=>z1,Llms:()=>$I,InMemoryWorkspaceManager:()=>i8,InMemoryMcpManager:()=>S2,HubUIClient:()=>xW,HubTransportError:()=>R0,HubSessionClient:()=>IW,HubServerTransport:()=>N4,HubScheduleService:()=>$8,HubScheduleCommandService:()=>s2,HubRuntimeHost:()=>o1,HubCommandError:()=>B8,HookEventPayloadSchema:()=>sQ,HookEventNameSchema:()=>aQ,HookConfigFileName:()=>v8,HOOK_CONFIG_FILE_EVENT_MAP:()=>n6,HOOKS_CONFIG_DIRECTORY_NAME:()=>uZ,GlobalSettingsSchema:()=>v4,GcpSettingsSchema:()=>YQ,FileTeamPersistenceStore:()=>I7,FeatureFlagsService:()=>I2,FeatureFlagDefaultValue:()=>zI,FEATURE_FLAGS:()=>_I,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>u7,DefaultToolNames:()=>U0,DefaultRuntimeBuilder:()=>T4,DefaultLlmsSdk:()=>Z9,DEFAULT_MODELS_CATALOG_URL:()=>sZ,DEFAULT_HUB_PORT:()=>qW,DEFAULT_HUB_PATHNAME:()=>MW,DEFAULT_HUB_HOST:()=>OW,CoreSettingsService:()=>k$,CoreSessionService:()=>_1,ContributionRegistry:()=>KI,ClineOrgIndividualInferenceSubscriptionError:()=>QI,ClineNotSubscribedError:()=>ZI,ClineCore:()=>u5,ClineAccountService:()=>W5,ChatViewStateSchema:()=>UY,ChatSummarySchema:()=>c7,ChatSessionStatusSchema:()=>g7,ChatSessionConfigSchema:()=>x7,ChatMessageSchema:()=>v7,ChatMessageRoleSchema:()=>m7,CORE_TELEMETRY_EVENTS:()=>m,CORE_BUILD_VERSION:()=>DY,BrowserWebSocketHubAdapter:()=>W9,BUILT_IN_PROVIDER_IDS:()=>BJ,BUILT_IN_PROVIDER:()=>$5,AzureSettingsSchema:()=>jQ,AwsSettingsSchema:()=>XQ,AuthSettingsSchema:()=>WQ,AgentTeamsRuntime:()=>h2,AgentTeam:()=>G4,Agent:()=>wI,ALL_DEFAULT_TOOL_NAMES:()=>X$});R(M,xo);import*as $I from"@cline/llms";import{ClineNotSubscribedError as ZI,ClineOrgIndividualInferenceSubscriptionError as QI,getClineOrgIndividualInferenceSubscriptionMessage as WI,getClineNotSubscribedMessage as JI,getClinePassSubscriptionUrl as XI,isClineNotSubscribedError as YI,isClineNotSubscribedMessage as jI,isClineOrgIndividualInferenceSubscriptionError as VI,isClineOrgIndividualInferenceSubscriptionMessage as HI}from"@cline/llms";import{buildClineSystemPrompt as BI,buildSdkErrorProperties as GI,ContributionRegistry as KI,captureSdkError as FI,createClineTelemetryServiceConfig as AI,createClineTelemetryServiceMetadata as fI,createContributionRegistry as UI,createTool as DI,emptyWorkspaceManifest as LI,FEATURE_FLAGS as _I,FeatureFlagDefaultValue as zI,formatDisplayUserInput as TI,noopBasicLogger as OI,normalizeSdkError as qI,normalizeUserInput as MI,parseUserCommandEnvelope as RI,registerDisposable as EI,SDK_ERROR_TELEMETRY_EVENT as NI}from"@cline/shared";import"@cline/shared/storage";var YK={};N(YK,{isClineAccountActionRequest:()=>UQ,executeClineAccountAction:()=>DQ,RpcClineAccountService:()=>J5,ClineAccountService:()=>W5});function HN($){if(typeof $!=="object"||$===null||!("error"in $))return;let Z=$.error;return typeof Z==="string"&&Z.trim()?Z:void 0}function XK($,Z,Q){let W=HN(Q);if(W)return W;let J=Z.trim();if(J){let X=J.length>200?`${J.slice(0,200)}...`:J;return`Cline account request failed with status ${$}: ${X}`}return`Cline account request failed with status ${$}`}class W5{apiBaseUrl;getAuthTokenFn;getCurrentUserIdFn;getOrganizationMemberIdFn;getHeadersFn;requestTimeoutMs;fetchImpl;constructor($){let Z=$.apiBaseUrl.trim();if(!Z)throw Error("apiBaseUrl is required");this.apiBaseUrl=Z,this.getAuthTokenFn=$.getAuthToken,this.getCurrentUserIdFn=$.getCurrentUserId,this.getOrganizationMemberIdFn=$.getOrganizationMemberId,this.getHeadersFn=$.getHeaders,this.requestTimeoutMs=$.requestTimeoutMs??30000,this.fetchImpl=$.fetchImpl??fetch}async fetchMe(){return this.request("/api/v1/users/me")}async fetchRemoteConfig(){return this.request("/api/v1/users/me/remote-config")}async fetchFeaturebaseToken(){try{return await this.request("/api/v1/users/me/featurebase-token")}catch{return}}async fetchBalance($){let Z=await this.resolveUserId($);return this.request(`/api/v1/users/${encodeURIComponent(Z)}/balance`)}async fetchUsageTransactions($){let Z=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(Z)}/usages`)).items??[]}async fetchPaymentTransactions($){let Z=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(Z)}/payments`)).paymentTransactions??[]}async fetchUserOrganizations(){return(await this.fetchMe()).organizations??[]}async fetchAvailableSubscriptionPlans($){let Z=new URL("/api/v1/plans",this.apiBaseUrl);if($?.type)Z.searchParams.set("type",$.type);return this.request(`${Z.pathname}${Z.search}`)}async fetchCurrentUserPlan(){return this.request("/api/v1/users/me/plan")}async fetchOrganization($){let Z=$.trim();if(!Z)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(Z)}`)}async fetchOrganizationBalance($){let Z=$.trim();if(!Z)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(Z)}/balance`)}async fetchOrganizationUsageTransactions($){let Z=$.organizationId.trim();if(!Z)throw Error("organizationId is required");let Q=await this.resolveOrganizationMemberId(Z,$.memberId);return(await this.request(`/api/v1/organizations/${encodeURIComponent(Z)}/members/${encodeURIComponent(Q)}/usages`)).items??[]}async switchAccount($){await this.request("/api/v1/users/active-account",{method:"PUT",body:{organizationId:$?.trim()||null},expectNoContent:!0})}async resolveUserId($){let Z=$?.trim();if(Z)return Z;let W=(this.getCurrentUserIdFn?await this.getCurrentUserIdFn():void 0)?.trim();if(W)return W;let J=await this.fetchMe();if(!J.id?.trim())throw Error("Unable to resolve current user id");return J.id}async resolveOrganizationMemberId($,Z){let Q=Z?.trim();if(Q)return Q;let J=(this.getOrganizationMemberIdFn?await this.getOrganizationMemberIdFn($):void 0)?.trim();if(J)return J;let Y=(await this.fetchUserOrganizations()).find((j)=>j.organizationId===$)?.memberId;if(!Y?.trim())throw Error(`Unable to resolve memberId for organization ${$}`);return Y}async request($,Z){let Q=(await this.getAuthTokenFn())?.trim();if(!Q)throw Error("No Cline account auth token found");let W=this.getHeadersFn?await this.getHeadersFn():{},J=new AbortController,X=setTimeout(()=>J.abort(),this.requestTimeoutMs);try{let Y=await this.fetchImpl(new URL($,this.apiBaseUrl),{method:Z?.method??"GET",headers:{Authorization:`Bearer ${Q}`,"Content-Type":"application/json",...W??{}},body:Z?.body!==void 0?JSON.stringify(Z.body):void 0,signal:J.signal});if(Y.status===204||Z?.expectNoContent){if(!Y.ok)throw Error(`Cline account request failed with status ${Y.status}`);return}let j=await Y.text(),V;if(j.trim())try{V=JSON.parse(j)}catch{if(!Y.ok)throw Error(XK(Y.status,j,void 0));throw Error("Cline account response was not valid JSON")}if(!Y.ok)throw Error(XK(Y.status,j,V));if(typeof V==="object"&&V!==null){let H=V;if(typeof H.success==="boolean"){if(!H.success)throw Error(H.error||"Cline account request failed");return H.data}}if(V===void 0||V===null)throw Error("Cline account response payload was empty");return V}finally{clearTimeout(X)}}}function UQ($){return $.action==="clineAccount"}async function DQ($,Z){switch($.operation){case"fetchMe":return Z.fetchMe();case"fetchBalance":return Z.fetchBalance($.userId);case"fetchUsageTransactions":return Z.fetchUsageTransactions($.userId);case"fetchPaymentTransactions":return Z.fetchPaymentTransactions($.userId);case"fetchUserOrganizations":return Z.fetchUserOrganizations();case"fetchOrganizationBalance":return Z.fetchOrganizationBalance($.organizationId);case"fetchOrganizationUsageTransactions":return Z.fetchOrganizationUsageTransactions({organizationId:$.organizationId,memberId:$.memberId});case"switchAccount":return await Z.switchAccount($.organizationId),{updated:!0};case"fetchFeaturebaseToken":return Z.fetchFeaturebaseToken?.();default:throw Error(`Unsupported Cline account operation: ${String($)}`)}}class J5{executor;constructor($){this.executor=$}async fetchMe(){return this.request({action:"clineAccount",operation:"fetchMe"})}async fetchBalance($){return this.request({action:"clineAccount",operation:"fetchBalance",...$?.trim()?{userId:$.trim()}:{}})}async fetchUsageTransactions($){return this.request({action:"clineAccount",operation:"fetchUsageTransactions",...$?.trim()?{userId:$.trim()}:{}})}async fetchPaymentTransactions($){return this.request({action:"clineAccount",operation:"fetchPaymentTransactions",...$?.trim()?{userId:$.trim()}:{}})}async fetchUserOrganizations(){return this.request({action:"clineAccount",operation:"fetchUserOrganizations"})}async fetchOrganizationBalance($){let Z=$.trim();if(!Z)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationBalance",organizationId:Z})}async fetchOrganizationUsageTransactions($){let Z=$.organizationId.trim();if(!Z)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationUsageTransactions",organizationId:Z,...$.memberId?.trim()?{memberId:$.memberId.trim()}:{}})}async switchAccount($){await this.request({action:"clineAccount",operation:"switchAccount",organizationId:$?.trim()||null})}async fetchFeaturebaseToken(){return this.request({action:"clineAccount",operation:"fetchFeaturebaseToken"})}async request($){return(await this.executor.runProviderAction($)).result}}var jK={};N(jK,{createOAuthClientCallbacks:()=>n8});function n8($){return{onAuth:({url:Z,instructions:Q})=>{if($.onOutput?.(Q??"Complete sign-in in your browser."),$.openUrl)try{Promise.resolve($.openUrl(Z)).catch((W)=>{$.onOpenUrlError?.({url:Z,error:W})})}catch(W){$.onOpenUrlError?.({url:Z,error:W})}$.onOutput?.(Z)},onPrompt:$.onPrompt,onServerListening:$.onServerListening,onServerClose:$.onServerClose}}var CA={};N(CA,{ClineCore:()=>u5});function VK($){if($===!0)return{};if(!$)return;return $}function HK($){if($==="user")return"global";return $}class UJ{getService;constructor($){this.getService=$}async start(){await this.getService().start()}async stop(){await this.getService().stop()}async reconcileNow(){await this.getService().reconcileNow()}ingestEvent($){let Z=this.getService().ingestEvent($);return{event:Z.event,duplicate:Z.duplicate,matchedSpecIds:Z.matchedSpecs.map((Q)=>Q.specId),queuedRuns:Z.queuedRuns,suppressions:Z.suppressions}}listEvents($){return this.getService().listEventLogs($)}getEvent($){return this.getService().getEventLog($)}listSpecs($){return this.getService().listSpecs($)}listRuns($){return this.getService().listRuns($)}}function BK($){let{host:Z}=$;return{async startSession(Q){let W=(Q.cwd?.trim()||Q.workspaceRoot).trim(),J=await Z.startSession({source:Q.source?.trim()||z0.CLI,interactive:!1,config:{providerId:l8(Q.provider),modelId:Q.model,apiKey:Q.apiKey?.trim()||void 0,cwd:W,workspaceRoot:Q.workspaceRoot,systemPrompt:Q.systemPrompt??"",mode:KN(Q),maxIterations:Q.maxIterations,enableTools:Q.enableTools!==!1,enableSpawnAgent:Q.enableSpawn!==!1,enableAgentTeams:Q.enableTeams!==!1,disableMcpSettingsTools:Q.disableMcpSettingsTools,missionLogIntervalSteps:Q.missionStepInterval,missionLogIntervalMs:Q.missionTimeIntervalMs},toolPolicies:Q.toolPolicies??{"*":{autoApprove:Q.autoApproveTools!==!1}},localRuntime:{extensionContext:$.getExtensionContext(),configExtensions:Q.configExtensions}});return{sessionId:J.sessionId,startResult:{sessionId:J.sessionId,manifestPath:J.manifestPath,messagesPath:J.messagesPath}}},async sendSession(Q,W){let J=await Z.runTurn({sessionId:Q,prompt:W.prompt,userImages:W.attachments?.userImages,userFiles:W.attachments?.userFiles?.map((X)=>X.content),delivery:W.delivery});if(!J)throw Error("ClineCore automation runtime returned no result");return{result:GN(J)}},async abortSession(Q){return await Z.abort(Q,Error("ClineCore automation abort")),{applied:!0}},async stopSession(Q){return await Z.stopSession(Q),{applied:!0}}}}function LQ($){let Z=BN($.automationService,$.automation),Q=$.context?.client??($.clientName?{name:$.clientName}:void 0),W=$.context?.user??($.distinctId?{distinctId:$.distinctId}:void 0),J=$.context?.logger??$.logger,X=$.context?.telemetry??$.telemetry;if(!Z&&!Q&&!W&&!J&&!X)return $.context;return{...$.context??{},...Q?{client:Q}:{},...W?{user:W}:{},...J?{logger:J}:{},...X?{telemetry:X}:{},...Z?{automation:Z}:{}}}function BN($,Z){if(!$)return;return{ingestEvent:(Q)=>{Z.ingestEvent(Q)}}}function GN($){return{text:$.text,usage:{inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens,cacheWriteTokens:$.usage.cacheWriteTokens,totalCost:$.usage.totalCost},inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,iterations:$.iterations,finishReason:$.finishReason,toolCalls:$.toolCalls.map((Z)=>({name:Z.name,input:Z.input,output:Z.output,error:Z.error,durationMs:Z.durationMs}))}}function KN($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}var KF={};N(KF,{createCoreSettingsService:()=>b2,CoreSettingsService:()=>k$});import{existsSync as R5,readFileSync as ow}from"node:fs";import{basename as bJ,dirname as XF,extname as tw,isAbsolute as VF,join as ew,relative as HF,resolve as YF}from"node:path";var qK={};N(qK,{resolveWorkflowsConfigSearchPaths:()=>F5,resolveSkillsConfigSearchPaths:()=>G5,resolveRulesConfigSearchPaths:()=>K5,parseWorkflowConfigFromMarkdown:()=>B5,parseSkillConfigFromMarkdown:()=>V5,parseRuleConfigFromMarkdown:()=>H5,createWorkflowsConfigDefinition:()=>U5,createUserInstructionConfigService:()=>b$,createSkillsConfigDefinition:()=>A5,createRulesConfigDefinition:()=>f5,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>j5,UnifiedConfigFileWatcher:()=>R2,SKILLS_CONFIG_DIRECTORY_NAME:()=>Y5,RULES_CONFIG_DIRECTORY_NAME:()=>MQ});import{createHash as FN}from"node:crypto";import{watch as AN}from"node:fs";import{readdir as fN,readFile as UN}from"node:fs/promises";import{join as DN}from"node:path";function LN($){return FN("sha1").update($).digest("hex")}function FK($){return Boolean($&&typeof $==="object"&&"code"in $)}function GK($){return FK($)&&$.code==="ENOENT"}function KK($){return FK($)&&($.code==="EACCES"||$.code==="EPERM")}class R2{definitions;debounceMs;emitParseErrors;listeners=new Set;recordsByType=new Map;watchersByDirectory=new Map;baseTypesByDirectory=new Map;watchedTypesByDirectory=new Map;discoveredDirectoriesByType=new Map;definitionsByType=new Map;pendingTypes=new Set;flushTimer;refreshQueue=Promise.resolve();started=!1;constructor($,Z){if($.length===0)throw Error("UnifiedConfigFileWatcher requires at least one definition.");this.definitions=$,this.debounceMs=Z?.debounceMs??75,this.emitParseErrors=Z?.emitParseErrors??!1;for(let Q of $){if(this.definitionsByType.has(Q.type))throw Error(`Duplicate unified config definition type '${Q.type}'.`);this.definitionsByType.set(Q.type,Q),this.recordsByType.set(Q.type,new Map),this.discoveredDirectoriesByType.set(Q.type,new Set);for(let W of Q.directories){let J=this.baseTypesByDirectory.get(W);if(J)J.add(Q.type);else this.baseTypesByDirectory.set(W,new Set([Q.type]))}}}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}async start(){if(this.started)return;this.started=!0,await this.refreshAll(),this.startDirectoryWatchers()}stop(){if(this.started=!1,this.flushTimer)clearTimeout(this.flushTimer),this.flushTimer=void 0;this.pendingTypes.clear();for(let $ of this.watchersByDirectory.values())$.close();this.watchersByDirectory.clear(),this.watchedTypesByDirectory=new Map}async refreshAll(){await this.enqueueRefresh(async()=>{for(let $ of this.definitions)await this.refreshTypeInternal($)})}async refreshType($){let Z=this.definitionsByType.get($);if(!Z)throw Error(`Unknown unified config type '${$}'.`);await this.enqueueRefresh(async()=>{await this.refreshTypeInternal(Z)})}getSnapshot($){let Z=this.recordsByType.get($);return new Map([...Z?.entries()??[]].map(([Q,W])=>[Q,{...W}]))}getAllSnapshots(){let $=new Map;for(let[Z,Q]of this.recordsByType.entries())$.set(Z,new Map([...Q.entries()].map(([W,J])=>[W,{...J}])));return $}emit($){for(let Z of this.listeners)Z($)}enqueueRefresh($){return this.refreshQueue=this.refreshQueue.then($,$),this.refreshQueue}startDirectoryWatchers(){this.syncDirectoryWatchers()}syncDirectoryWatchers(){let $=this.buildDesiredTypesByDirectory();for(let[Z,Q]of this.watchersByDirectory.entries()){if($.has(Z))continue;Q.close(),this.watchersByDirectory.delete(Z)}this.watchedTypesByDirectory=$;for(let Z of $.keys()){if(this.watchersByDirectory.has(Z))continue;try{let Q=AN(Z,()=>{let W=this.watchedTypesByDirectory.get(Z);if(!W)return;for(let J of W)this.pendingTypes.add(J);this.scheduleFlush()});this.watchersByDirectory.set(Z,Q),Q.on("error",(W)=>{let J=this.watchedTypesByDirectory.get(Z);if(!J)return;for(let X of J)this.emit({kind:"error",type:X,error:W,filePath:Z})})}catch(Q){if(!GK(Q)&&!KK(Q)){let W=$.get(Z);if(!W)continue;for(let J of W)this.emit({kind:"error",type:J,error:Q,filePath:Z})}}}}scheduleFlush(){if(this.flushTimer)clearTimeout(this.flushTimer);this.flushTimer=setTimeout(()=>{this.flushTimer=void 0;let $=[...this.pendingTypes];this.pendingTypes.clear(),this.enqueueRefresh(async()=>{for(let Z of $){let Q=this.definitionsByType.get(Z);if(!Q)continue;await this.refreshTypeInternal(Q)}})},this.debounceMs)}async refreshTypeInternal($){let{records:Z,discoveredDirectories:Q}=await this.loadDefinition($),W=this.recordsByType.get($.type)??new Map;for(let[J,X]of W.entries()){if(Z.has(J))continue;this.emit({kind:"remove",type:$.type,id:J,filePath:X.filePath})}for(let[J,X]of Z.entries()){let Y=W.get(J);if(Y&&Y.filePath===X.filePath&&Y.fingerprint===X.fingerprint)continue;this.emit({kind:"upsert",record:{type:X.type,id:J,item:X.item,filePath:X.filePath}})}if(this.recordsByType.set($.type,Z),this.discoveredDirectoriesByType.set($.type,Q),this.started)this.syncDirectoryWatchers()}async loadDefinition($){let Z=new Map,Q=new Set;for(let W of $.directories){Q.add(W);let J=$.discoverFiles?await $.discoverFiles(W):await this.readDirectoryFileCandidates(W);for(let X of J){let{fileName:Y,filePath:j}=X;if(Q.add(X.directoryPath),$.includeFile&&!$.includeFile(Y,j))continue;try{let V=await UN(j,"utf8"),H={type:$.type,directoryPath:X.directoryPath,fileName:Y,filePath:j,content:V},B=$.parseFile(H),G=$.resolveId(B,H).trim();if(!G)continue;Z.set(G,{type:$.type,id:G,item:B,filePath:j,fingerprint:LN(V)})}catch(V){if(this.emitParseErrors)this.emit({kind:"error",type:$.type,error:V,filePath:j})}}}return{records:Z,discoveredDirectories:Q}}buildDesiredTypesByDirectory(){let $=new Map;for(let[Z,Q]of this.baseTypesByDirectory.entries())$.set(Z,new Set(Q));for(let[Z,Q]of this.discoveredDirectoriesByType.entries())for(let W of Q){let J=$.get(W);if(J)J.add(Z);else $.set(W,new Set([Z]))}return $}async readDirectoryFileCandidates($){try{return(await fN($,{withFileTypes:!0})).filter((Q)=>Q.isFile()).map((Q)=>({directoryPath:$,fileName:Q.name,filePath:DN($,Q.name)})).sort((Q,W)=>Q.fileName.localeCompare(W.fileName))}catch(Z){if(GK(Z)||KK(Z))return[];throw Z}}}import{readdir as LJ,readFile as _N,stat as DJ}from"node:fs/promises";import{basename as a1,dirname as zN,extname as zQ,join as y0,resolve as X5}from"node:path";import{AGENTS_RULES_FILE_NAME as AK,RULES_CONFIG_DIRECTORY_NAME as MQ,resolveGlobalAgentsRulesPath as TN,resolveRulesConfigSearchPaths as ON,resolveSkillsConfigSearchPaths as qN,resolveWorkflowsConfigSearchPaths as MN,SKILLS_CONFIG_DIRECTORY_NAME as Y5,WORKFLOWS_CONFIG_DIRECTORY_NAME as j5}from"@cline/shared/storage";import RN from"yaml";var _Q="SKILL.md",EN="managed.json",NN=new Set([".md",".markdown",".txt"]);function _J($){return $.trim().toLowerCase()}function a8($){let Z=$;return Z?.code==="ENOENT"||Z?.code==="EACCES"||Z?.code==="EPERM"||Z?.code==="ELOOP"}function TQ($){return NN.has(zQ($).toLowerCase())}function fK($){let Z=[],Q=new Set;for(let W of $){let J=X5(W);if(Q.has(J))continue;Q.add(J),Z.push(W)}return Z}function wN($){let Z=[...$?.directories??G5($?.workspacePath)];if($?.pluginSkillDirectories)Z.push(...$.pluginSkillDirectories);else if($?.includePluginSkills)Z.push(...CG({pluginPaths:$.pluginPaths,workspacePath:$.workspacePath,cwd:$.cwd??$.workspacePath}));return fK(Z)}async function zJ($){try{let Z=await LJ($,{withFileTypes:!0}),Q=[];for(let W of Z){if(!W.isDirectory())continue;let J=y0($,W.name),X=y0(J,EN);try{let Y=await _N(X,"utf8"),j=JSON.parse(Y);if(j&&typeof j==="object")Q.push(J)}catch(Y){if(a8(Y))continue;if(Y?.name==="SyntaxError")continue;throw Y}}return Q.sort((W,J)=>W.localeCompare(J))}catch(Z){if(a8(Z))return[];throw Z}}function TJ($){let Z=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,Q=$.match(Z);if(!Q)return{data:{},body:$,hadFrontmatter:!1};let[,W,J]=Q;try{let X=RN.parse(W);return{data:X&&typeof X==="object"&&!Array.isArray(X)?X:{},body:J,hadFrontmatter:!0}}catch(X){let Y=X instanceof Error?X.message:String(X);return{data:{},body:$,hadFrontmatter:!0,parseError:Y}}}function OQ($,Z,Q){if($===void 0||$===null){if(Q)throw Error(`Missing required frontmatter field '${Z}'.`);return}if(typeof $!=="string")throw Error(`Frontmatter field '${Z}' must be a string.`);let W=$.trim();if(!W&&Q)throw Error(`Frontmatter field '${Z}' cannot be empty.`);return W||void 0}function s8($,Z){if($===void 0||$===null)return;if(typeof $!=="boolean")throw Error(`Frontmatter field '${Z}' must be a boolean.`);return $}function CN($,Z){if(a1($.filePath).toLowerCase()!==AK.toLowerCase())return a1($.filePath,zQ($.filePath));if(Z&&X5($.filePath)===X5(Z,AK))return"Workspace AGENTS.md";if(X5($.filePath)===X5(TN()))return"Global AGENTS.md";return a1($.filePath,zQ($.filePath))}function V5($,Z){let{data:Q,body:W,parseError:J}=TJ($);if(J)throw Error(`Failed to parse YAML frontmatter: ${J}`);let X=W.trim();if(!X)throw Error("Missing instructions body in skill file.");let j=OQ(Q.name,"name",!1)??Z.trim();if(!j)throw Error("Missing skill name.");return{name:j,description:OQ(Q.description,"description",!1),disabled:s8(Q.disabled,"disabled")??(s8(Q.enabled,"enabled")===!1?!0:void 0),instructions:X,frontmatter:Q}}function H5($,Z){let{data:Q,body:W,parseError:J}=TJ($);if(J)throw Error(`Failed to parse YAML frontmatter: ${J}`);let X=W.trim();if(!X)throw Error("Missing instructions body in rule file.");let Y=OQ(Q.name,"name",!1)??Z.trim();if(!Y)throw Error("Missing rule name.");return{name:Y,disabled:s8(Q.disabled,"disabled")??(s8(Q.enabled,"enabled")===!1?!0:void 0),instructions:X,frontmatter:Q}}function B5($,Z){let{data:Q,body:W,parseError:J}=TJ($);if(J)throw Error(`Failed to parse YAML frontmatter: ${J}`);let X=W.trim();if(!X)throw Error("Missing instructions body in workflow file.");let Y=OQ(Q.name,"name",!1)??Z.trim();if(!Y)throw Error("Missing workflow name.");return{name:Y,disabled:s8(Q.disabled,"disabled")??(s8(Q.enabled,"enabled")===!1?!0:void 0),instructions:X,frontmatter:Q}}function G5($){return qN($)}function K5($){return ON($)}function F5($){return MN($)}async function UK($){if(a1($)===".cline"){let Z=await zJ($);return(await Promise.all(Z.map((W)=>UK(y0(W,Y5))))).flat()}try{let Z=await LJ($,{withFileTypes:!0}),Q=[];for(let W of Z){if(W.isFile()&&W.name===_Q){Q.push({directoryPath:$,fileName:W.name,filePath:y0($,W.name)});continue}let J=y0($,W.name);if(W.isDirectory()||W.isSymbolicLink()&&await DJ(J).then((Y)=>Y.isDirectory()).catch((Y)=>{if(a8(Y))return!1;throw Y}))Q.push({directoryPath:J,fileName:_Q,filePath:y0(J,_Q)})}return Q}catch(Z){if(a8(Z))return[];throw Z}}async function qQ($){if(a1($)===".cline"){let Z=await zJ($);return(await Promise.all(Z.map((W)=>qQ(y0(W,"rules.md"))))).flat()}try{if((await DJ($)).isFile())return[{directoryPath:zN($),fileName:a1($),filePath:$}]}catch(Z){if(!a8(Z))throw Z}try{let Q=(await LJ($,{withFileTypes:!0})).filter((J)=>J.isFile()&&TQ(J.name)).map((J)=>({directoryPath:$,fileName:J.name,filePath:y0($,J.name)})),W=y0($,"AGENTS.md");try{if((await DJ(W)).isFile()){if(!Q.some((Y)=>Y.fileName==="AGENTS.md"))Q.push({directoryPath:$,fileName:"AGENTS.md",filePath:W})}}catch{}return Q}catch(Z){if(a8(Z))return[];throw Z}}async function PN($){if(a1($)===".cline"){let Z=await zJ($);return(await Promise.all(Z.map((W)=>qQ(y0(W,j5))))).flat()}return qQ($)}function A5($){let Z=wN($),Q=$?.workspacePath?y0($.workspacePath,".cline"):void 0;return{type:"skill",directories:Q?fK([...Z,Q]):Z,discoverFiles:UK,includeFile:(W)=>W===_Q,parseFile:(W)=>V5(W.content,a1(W.directoryPath)),resolveId:(W)=>_J(W.name)}}function f5($){let Z=$?.directories??K5($?.workspacePath),Q=$?.workspacePath?y0($.workspacePath,".cline"):void 0;return{type:"rule",directories:Q?[...Z,Q]:Z,discoverFiles:qQ,includeFile:(W,J)=>W===".clinerules"||TQ(W)||TQ(J),parseFile:(W)=>H5(W.content,CN(W,$?.workspacePath)),resolveId:(W)=>_J(W.name)}}function U5($){let Z=$?.directories??F5($?.workspacePath),Q=$?.workspacePath?y0($.workspacePath,".cline"):void 0;return{type:"workflow",directories:Q?[...Z,Q]:Z,discoverFiles:PN,includeFile:(W)=>TQ(W),parseFile:(W)=>B5(W.content,a1(W.filePath,zQ(W.filePath))),resolveId:(W)=>_J(W.name)}}function DK($){let Z=[A5($?.skills),f5($?.rules),U5($?.workflows)];return new R2(Z,{debounceMs:$?.debounceMs,emitParseErrors:$?.emitParseErrors})}import{truncateSplit as LK}from"@cline/shared";function SN($,Z){if($.description?.trim())return LK($.description,".");if(Z==="workflow")return;return LK($.instructions,".")}function bN($){return $.disabled!==!0}function _K($,Z){return[...$.getSnapshot(Z).entries()].map(([Q,W])=>({id:Q,record:W})).filter(({record:Q})=>bN(Q.item)).map(({id:Q,record:W})=>({id:Q,name:W.item.name,instructions:W.item.instructions,description:SN(W.item,Z),kind:Z})).sort((Q,W)=>Q.name.localeCompare(W.name))}function D5($){let Z=new Map;for(let Q of[..._K($,"workflow"),..._K($,"skill")])if(!Z.has(Q.name))Z.set(Q.name,Q);return[...Z.values()].sort((Q,W)=>Q.name.localeCompare(W.name))}function zK($,Z){if(!$.startsWith("/")||$.length<2)return $;let Q=$.match(/^\/(\S+)/);if(!Q)return $;let W=Q[1];if(!W)return $;let J=W.length+1,X=$.slice(J),Y=D5(Z).find((j)=>j.name===W);return Y?`${Y.instructions}${X}`:$}function RQ($){return $.trim().replace(/^\/+/,"").toLowerCase()}function yN($){if(!$||$.length===0)return;let Z=$.map(RQ).filter((Q)=>Q.length>0);return Z.length>0?new Set(Z):void 0}function hN($,Z,Q){if(!Q)return!0;let W=RQ($),J=RQ(Z),X=W.includes(":")?W.split(":").at(-1)??W:W,Y=J.includes(":")?J.split(":").at(-1)??J:J;return Q.has(W)||Q.has(J)||Q.has(X)||Q.has(Y)}function L5($,Z){let Q=yN(Z);return[...$.getSnapshot("skill").entries()].map(([J,X])=>{let Y=X.item;return{id:J,name:Y.name.trim(),description:Y.description?.trim(),disabled:Y.disabled===!0,skill:Y}}).filter((J)=>hN(J.id,J.name,Q))}function kN($,Z){return L5($,Z).filter((Q)=>!Q.disabled).map((Q)=>Q.name.trim()).filter((Q)=>Q.length>0).sort((Q,W)=>Q.localeCompare(W))}function IN($,Z,Q){let W=RQ(Z);if(!W)return{error:"Missing skill name."};let J=L5($,Q),X=J.find((B)=>B.id===W);if(X){let{skill:B}=X;if(B.disabled===!0)return{error:`Skill "${B.name}" is configured but disabled.`};return{id:X.id,skill:B}}let Y=W.includes(":")?W.split(":").at(-1)??W:W,j=J.filter(({id:B})=>{if(B===Y)return!0;return B.endsWith(`:${Y}`)}),V=j.filter(({skill:B})=>B.disabled!==!0);if(V.length===1){let{id:B,skill:G}=V[0];return{id:B,skill:G}}if(V.length>1)return{error:`Skill "${Z}" is ambiguous. Use one of: ${V.map(({id:B})=>B).join(", ")}`};if(j.length===1){let{skill:B}=j[0];return{error:`Skill "${B.name}" is configured but disabled.`}}if(j.length>1)return{error:`Skill "${Z}" is ambiguous, and all matches are disabled: ${j.map(({id:B})=>B).join(", ")}`};let H=kN($,Q);return{error:H.length>0?`Skill "${Z}" not found. Available skills: ${H.join(", ")}`:"No skills are currently available."}}function OJ($,Z=Promise.resolve(),Q){let W=new Set,J=async(X,Y)=>{await Z;let j=IN($,X,Q);if("error"in j)return j.error;let{id:V,skill:H}=j;if(W.has(V))return`Skill "${H.name}" is already running.`;W.add(V);try{let B=Y?.trim(),G=B?`
|
|
478
479
|
<command-args>${B}</command-args>`:"",K=H.description?.trim()?`Description: ${H.description.trim()}
|
|
479
480
|
|
|
480
481
|
`:"";return`<command-name>${H.name}</command-name>${G}
|
|
481
482
|
<command-instructions>
|
|
482
483
|
${K}${H.instructions}
|
|
483
|
-
</command-instructions>`}finally{W.delete(V)}};return Object.defineProperty(J,"configuredSkills",{get:()=>L5($,Q).map(({skill:X,...Y})=>Y),enumerable:!0,configurable:!1}),J}function
|
|
484
|
+
</command-instructions>`}finally{W.delete(V)}};return Object.defineProperty(J,"configuredSkills",{get:()=>L5($,Q).map(({skill:X,...Y})=>Y),enumerable:!0,configurable:!1}),J}function TK($){let Z=$.watcherReady??Promise.resolve();return{name:"cline-user-instructions",manifest:{capabilities:[$.includeRules?"rules":void 0,$.registerSkillsTool?"tools":void 0,$.includeSkills||$.includeWorkflows?"commands":void 0].filter((W)=>Boolean(W))},async setup(W){if(await Z,$.includeRules)W.registerRule({id:"cline-user-instructions:rules",source:"user-instruction-watcher",content:()=>QW($.watcher)});if($.registerSkillsTool)W.registerTool(j2(OJ($.watcher,Z,$.allowedSkillNames)));for(let J of D5($.watcher).filter((X)=>X.kind==="skill"&&$.includeSkills||X.kind==="workflow"&&$.includeWorkflows))W.registerCommand({name:J.name,description:J.description,handler:(X)=>{let Y=X.trim();return Y?`${J.instructions}
|
|
484
485
|
|
|
485
|
-
${Y}`:J.instructions}})}}}class
|
|
486
|
-
${
|
|
486
|
+
${Y}`:J.instructions}})}}}class OK{watcher;ready;stopped=!1;constructor($){this.watcher=DK($)}start(){if(!this.ready)this.stopped=!1,this.ready=this.watcher.start();return this.ready}stop(){if(this.stopped)return;this.stopped=!0,this.watcher.stop(),this.ready=void 0}async refreshType($){await this.start(),await this.watcher.refreshType($)}listRecords($){return[...this.watcher.getSnapshot($).entries()].map(([Z,Q])=>({type:$,id:Z,filePath:Q.filePath,item:Q.item}))}listRuntimeCommands(){return D5(this.watcher)}resolveRuntimeSlashCommand($){return zK($,this.watcher)}hasConfiguredSkills($){return L5(this.watcher,$).some((Z)=>!Z.disabled)}createSkillsExecutor($){return OJ(this.watcher,(this.ready??Promise.resolve()).catch(()=>{}),$)}createExtension($){return TK({...$,watcher:this.watcher,watcherReady:(this.ready??Promise.resolve()).catch(()=>{})})}}function b$($){return new OK($)}import{readFile as xN,writeFile as gN}from"node:fs/promises";import RK from"yaml";function mN($){let Z=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,Q=$.match(Z);if(!Q)return{data:{},body:$,hadFrontmatter:!1};let[,W,J]=Q,X=RK.parse(W);return{data:X&&typeof X==="object"&&!Array.isArray(X)?X:{},body:J,hadFrontmatter:!0}}function MK($,Z){return`---
|
|
487
|
+
${RK.stringify($).trimEnd()}
|
|
487
488
|
---
|
|
488
|
-
${Z}`}function
|
|
489
|
+
${Z}`}function vN($,Z){let{data:Q,body:W,hadFrontmatter:J}=mN($);if(!J&&Z)return $;if(Z){if(delete Q.disabled,Q.enabled===!1)delete Q.enabled;if(Object.keys(Q).length===0)return W;return MK(Q,W)}return Q.disabled=!0,MK(Q,W)}async function EK({filePath:$,enabled:Z}){let Q=await xN($,"utf8"),W=vN(Q,Z);return await gN($,W),{filePath:$,enabled:Z,disabled:!Z}}var ZF={};N(ZF,{updateMcpSettingsFileSync:()=>j1,updateMcpSettingsFile:()=>t8,updateMcpServerOAuthStateAsync:()=>z5,updateMcpServerOAuthState:()=>C2,setMcpServerDisabled:()=>N2,resolvePluginMcpServerRegistrations:()=>bQ,resolveMcpServerRegistrations:()=>p0,resolveDefaultMcpSettingsPath:()=>Z0,registerMcpServersFromSettingsFile:()=>P2,normalizePluginMcpServerRegistration:()=>SJ,loadMcpSettingsFile:()=>E2,listMcpServerOAuthStatuses:()=>T5,hasMcpSettingsFile:()=>s1,getMcpServerOAuthState:()=>w2,createMcpTools:()=>Q4,createDisabledMcpToolPolicy:()=>O5,createDisabledMcpToolPolicies:()=>hQ,createDefaultMcpServerClientFactory:()=>$4,authorizeMcpServerOAuth:()=>PQ,McpSettingsUpdateSkippedError:()=>o8,McpSettingsMutatorPurityError:()=>y$,McpSettingsLockTimeoutError:()=>h$,InMemoryMcpManager:()=>S2});import{spawn as Rw}from"node:child_process";import{StringDecoder as aK}from"node:string_decoder";import{UnauthorizedError as pK}from"@modelcontextprotocol/sdk/client/auth.js";import{Client as Ew}from"@modelcontextprotocol/sdk/client/index.js";import{randomUUID as fw}from"node:crypto";import{UnauthorizedError as Uw}from"@modelcontextprotocol/sdk/client/auth.js";import{Client as Dw}from"@modelcontextprotocol/sdk/client/index.js";import{SSEClientTransport as Lw}from"@modelcontextprotocol/sdk/client/sse.js";import{StreamableHTTPClientTransport as _w}from"@modelcontextprotocol/sdk/client/streamableHttp.js";NQ();var zw="/mcp/oauth/callback",Tw=[1456,1457,1458],Ow=300000;function qw($){if($ instanceof Error){let Z=$.message.trim();if(Z.length>0)return Z}return String($)}function Mw($){return{client_name:"Cline",redirect_uris:[$],grant_types:["authorization_code","refresh_token"],response_types:["code"],token_endpoint_auth_method:"none"}}function CQ($){let Z={};try{Z=w2($.serverName,{filePath:$.settingsPath})??{}}catch{Z={}}let Q,W,J=async(Y)=>{let j=e8(Y(Z))??{};try{Z=C2($.serverName,()=>j,{filePath:$.settingsPath})}catch{Z=j}};return{provider:{get redirectUrl(){return Z.redirectUrl??$.redirectUrl},get clientMetadata(){return Mw(Z.redirectUrl??$.redirectUrl)},state:()=>{return W=fw(),W},clientInformation:()=>Z.clientInformation,saveClientInformation:async(Y)=>{await J((j)=>({...j,clientInformation:Y,redirectUrl:$.redirectUrl,lastError:void 0}))},tokens:()=>Z.tokens,saveTokens:async(Y)=>{let j=Date.now();await J((V)=>({...V,tokens:Y,redirectUrl:$.redirectUrl,lastError:void 0,lastAuthenticatedAt:j}))},redirectToAuthorization:async(Y)=>{Q=Y.toString(),await $.onAuthorizationUrl?.(Q)},saveCodeVerifier:async(Y)=>{await J((j)=>({...j,codeVerifier:Y,redirectUrl:$.redirectUrl}))},codeVerifier:()=>{if(!Z.codeVerifier)throw Error(`Missing OAuth code verifier for MCP server "${$.serverName}".`);return Z.codeVerifier},invalidateCredentials:async(Y)=>{await J((j)=>{if(Y==="all")return{lastError:j.lastError,redirectUrl:j.redirectUrl};return{...j,...Y==="client"?{clientInformation:void 0}:{},...Y==="tokens"?{tokens:void 0,lastAuthenticatedAt:void 0}:{},...Y==="verifier"?{codeVerifier:void 0}:{},...Y==="discovery"?{discoveryState:void 0}:{}}})},saveDiscoveryState:async(Y)=>{await J((j)=>({...j,discoveryState:Y}))},discoveryState:()=>Z.discoveryState},getLastAuthorizationUrl:()=>Q,getLastOAuthState:()=>W,resetInteractiveState:async()=>{await J((Y)=>({...Y,clientInformation:void 0,codeVerifier:void 0,discoveryState:void 0,lastError:void 0,redirectUrl:$.redirectUrl}))},markError:async(Y)=>{await J((j)=>({...j,lastError:Y}))},clearError:async()=>{await J((Y)=>({...Y,lastError:void 0}))}}}function wQ($){let Z=$.registration.transport;if(Z.type==="stdio")throw Error(`MCP server "${$.registration.name}" uses stdio transport and does not support OAuth browser flow.`);let Q=Z.headers?{headers:Z.headers}:void 0;if(Z.type==="sse")return new Lw(new URL(Z.url),{authProvider:$.oauthProvider,requestInit:Q,fetch:$.fetch});return new _w(new URL(Z.url),{authProvider:$.oauthProvider,requestInit:Q,fetch:$.fetch})}function lK($){return new Dw({name:$.clientName?.trim()||"@cline/core",version:$.clientVersion?.trim()||"0.0.0"})}async function PQ($){let Z=$.serverName.trim();if(!Z)throw Error("MCP server name cannot be empty.");let{resolveMcpServerRegistrations:Q}=await Promise.resolve().then(() => (NQ(),dK)),W=Q({filePath:$.filePath}).find((V)=>V.name===Z);if(!W)throw Error(`MCP server "${Z}" is not configured.`);if(W.disabled)throw Error(`MCP server "${Z}" is disabled. Enable it before running OAuth.`);if(W.transport.type==="stdio")throw Error(`MCP server "${Z}" uses stdio transport and does not support OAuth browser flow.`);let J=await J1({host:$.callbackHost,ports:$.callbackPorts?.length?$.callbackPorts:Tw,callbackPath:$.callbackPath??zw,timeoutMs:$.timeoutMs??Ow,successHtml:$.successHtml,onListening:$.onServerListening,onClose:$.onServerClose});if(!J.callbackUrl)throw Error("Unable to bind local MCP OAuth callback server.");let X=CQ({settingsPath:$.filePath,serverName:Z,redirectUrl:J.callbackUrl,onAuthorizationUrl:async(V)=>{await $.openUrl?.(V)}});await X.resetInteractiveState();let Y=lK($),j;try{let V=wQ({registration:W,oauthProvider:X.provider,fetch:$.fetch});try{return await Y.connect(V),await Y.listTools(),await X.clearError(),{serverName:Z,authorized:!0,message:`MCP server "${Z}" is already authorized.`}}catch(H){if(!(H instanceof Uw))throw H;if(!X.getLastAuthorizationUrl())throw Error(`MCP server "${Z}" did not provide an authorization URL.`);let G=await J.waitForCallback();if(!G)throw Error("Timed out waiting for MCP OAuth authorization callback.");if(G.error)throw Error(`OAuth authorization failed: ${G.error}`);if(!G.code)throw Error("OAuth callback did not include an authorization code.");let K=X.getLastOAuthState();if(!K)throw Error(`MCP server "${Z}" did not start an OAuth stateful authorization flow.`);if(G.state!==K)throw Error("OAuth authorization failed: state mismatch.");await V.finishAuth(G.code),j=lK($);let F=wQ({registration:W,oauthProvider:X.provider,fetch:$.fetch});return await j.connect(F),await j.listTools(),await X.clearError(),{serverName:Z,authorized:!0,message:`MCP server "${Z}" OAuth authorization completed.`}}}catch(V){let H=qw(V);throw await X.markError(H),Error(H)}finally{await Y.close().catch(()=>{return}),await j?.close().catch(()=>{return}),J.close()}}var Nw="2024-11-05",ww=5000,Cw=1500,rK="http://127.0.0.1:1456/mcp/oauth/callback";function SQ($){return $ instanceof Error?$.message:String($)}function iK($){let Z=Buffer.from(JSON.stringify($),"utf8"),Q=Buffer.from(`Content-Length: ${Z.byteLength}\r
|
|
489
490
|
\r
|
|
490
|
-
`,"utf8");return Buffer.concat([Q,Z])}function
|
|
491
|
-
`,"utf8")}class
|
|
491
|
+
`,"utf8");return Buffer.concat([Q,Z])}function nK($){return Buffer.from(`${JSON.stringify($)}
|
|
492
|
+
`,"utf8")}class CJ{buffer="";decoder=new aK("utf8");push($){this.buffer+=this.decoder.write($);let Z=[];while(!0){let Q=this.buffer.indexOf(`\r
|
|
492
493
|
\r
|
|
493
|
-
`);if(Q<0)break;let J=this.buffer.slice(0,Q).match(/(?:^|\r\n)Content-Length:\s*(\d+)(?:\r\n|$)/i);if(!J)throw Error("Invalid MCP stdio frame: missing Content-Length header.");let X=Number.parseInt(J[1],10),Y=Q+4,j=Y+X;if(this.buffer.length<j)break;Z.push(this.buffer.slice(Y,j)),this.buffer=this.buffer.slice(j)}return Z}}class PJ{buffer="";decoder=new
|
|
494
|
-
`);if(Q<0)break;let W=this.buffer.slice(0,Q).trim();if(this.buffer=this.buffer.slice(Q+1),W.length>0)Z.push(W)}return Z}}class aK{registration;process;nextRequestId=1;pending=new Map;framedParser=new wJ;newlineParser=new PJ;stderrBuffer="";connected=!1;protocolMode="newline";constructor($){this.registration=$}async connect(){if(this.connected)return;if(this.registration.transport.type!=="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${this.registration.transport.type}`);let $=["newline","framed"],Z;for(let Q of $){await this.disconnect().catch(()=>{}),this.spawnProcess(Q);try{await this.request("initialize",{protocolVersion:OC,capabilities:{},clientInfo:{name:"@cline/core",version:"0.0.0"}},MC),this.notify("notifications/initialized"),this.connected=!0,this.protocolMode=Q;return}catch(W){Z=W instanceof Error?W:Error(String(W))}}throw Z??Error(`Failed to connect to MCP server "${this.registration.name}".`)}async disconnect(){let $=this.process;if(this.connected=!1,this.process=void 0,this.failAllPending(Error(`Disconnected from MCP server "${this.registration.name}".`)),!$)return;$.kill()}async listTools(){return((await this.request("tools/list")).tools??[]).filter((Z)=>typeof Z?.name==="string"&&typeof Z.inputSchema==="object"&&Z.inputSchema!==null).map((Z)=>({name:Z.name,description:Z.description,inputSchema:Z.inputSchema}))}async callTool($){return this.request("tools/call",{name:$.name,arguments:$.arguments??{}})}spawnProcess($){let Z=this.registration.transport;if(Z.type!=="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${Z.type}`);this.framedParser=new wJ,this.newlineParser=new PJ,this.stderrBuffer="",this.protocolMode=$;let Q=process.platform==="win32"?{windowsHide:!0,shell:!0}:{},W=_C(Z.command,Z.args??[],{cwd:Z.cwd,env:{...process.env,...Z.env??{}},stdio:["pipe","pipe","pipe"],...Q});this.process=W,W.stdout.on("data",(J)=>this.handleStdout(J)),W.stderr.on("data",(J)=>{if(this.process!==W)return;if(this.stderrBuffer+=J.toString("utf8"),this.stderrBuffer.length>16384)this.stderrBuffer=this.stderrBuffer.slice(-16384)}),W.once("error",(J)=>{if(this.process!==W)return;this.failAllPending(Error(`MCP process error: ${PQ(J)}`))}),W.once("exit",(J,X)=>{if(this.process!==W)return;this.connected=!1,this.process=void 0;let Y=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`MCP process exited for "${this.registration.name}" (code=${J??"null"}, signal=${X??"null"}).${Y}`))})}handleStdout($){try{let Z=this.protocolMode==="framed"?this.framedParser.push($):this.newlineParser.push($);for(let Q of Z){let W=JSON.parse(Q);if(typeof W.id!=="number")continue;let J=this.pending.get(W.id);if(!J)continue;if(this.pending.delete(W.id),clearTimeout(J.timeout),W.error){let X=W.error.message||`MCP request failed with code ${W.error.code??"unknown"}`;J.reject(Error(X));continue}J.resolve(W.result)}}catch(Z){this.handleProtocolFailure(Z)}}handleProtocolFailure($){let Z=this.process;if(!Z)return;this.connected=!1,this.process=void 0;let Q=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`Invalid MCP response from "${this.registration.name}": ${PQ($)}.${Q}`)),Z.kill()}async request($,Z,Q=qC){let W=this.process;if(!W?.stdin.writable)throw Error(`MCP server "${this.registration.name}" is not connected.`);let J=this.nextRequestId++,X={jsonrpc:"2.0",id:J,method:$,...Z?{params:Z}:{}},Y=new Promise((j,V)=>{let H=setTimeout(()=>{this.pending.delete(J),V(Error(`MCP request timed out for "${this.registration.name}" (${$}).`))},Q);this.pending.set(J,{resolve:j,reject:V,timeout:H})});try{W.stdin.write(this.protocolMode==="framed"?rK(X):iK(X))}catch(j){let V=this.pending.get(J);if(V)clearTimeout(V.timeout),this.pending.delete(J);throw j}return Y}notify($,Z){let Q=this.process;if(!Q?.stdin.writable)return;let W={jsonrpc:"2.0",method:$,...Z?{params:Z}:{}};Q.stdin.write(this.protocolMode==="framed"?rK(W):iK(W))}failAllPending($){for(let[Z,Q]of this.pending)clearTimeout(Q.timeout),this.pending.delete(Z),Q.reject($)}}class sK{registration;options;client;authContext;constructor($,Z){this.registration=$;this.options=Z}async connect(){if(this.client)return;if(this.registration.transport.type==="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${this.registration.transport.type}`);let $=CQ({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??pK});this.authContext=$;try{let Z=new zC({name:this.options.clientName?.trim()||"@cline/core",version:this.options.clientVersion?.trim()||"0.0.0"}),Q=NQ({registration:this.registration,oauthProvider:$.provider,fetch:this.options.fetch});await Z.connect(Q),await $.clearError(),this.client=Z}catch(Z){let Q=Z instanceof lK?this.formatUnauthorizedMessage($.getLastAuthorizationUrl()):PQ(Z);throw await $.markError(Q),Error(Q)}}async disconnect(){let $=this.client;this.client=void 0,await $?.close()}async listTools(){let $=await this.ensureConnectedClient();try{return(await $.listTools()).tools.map((Q)=>({name:Q.name,description:Q.description,inputSchema:Q.inputSchema&&typeof Q.inputSchema==="object"&&!Array.isArray(Q.inputSchema)?Q.inputSchema:{}}))}catch(Z){return await this.handleOperationError(Z)}}async callTool($){let Z=await this.ensureConnectedClient();try{return await Z.callTool({name:$.name,arguments:$.arguments??{}})}catch(Q){return await this.handleOperationError(Q)}}async ensureConnectedClient(){if(!this.client)await this.connect();if(!this.client)throw Error(`MCP server "${this.registration.name}" is not connected.`);return this.client}formatUnauthorizedMessage($){let Z=`MCP server "${this.registration.name}" requires OAuth authorization.`;if(!$)return`${Z} Run authorizeMcpServerOAuth for this server.`;return`${Z} Run authorizeMcpServerOAuth for this server and complete this URL: ${$}`}async handleOperationError($){let Z=this.authContext??CQ({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??pK}),Q=$ instanceof lK?this.formatUnauthorizedMessage(Z.getLastAuthorizationUrl()):PQ($);throw await Z.markError(Q),Error(Q)}}function Z4($={}){return(Z)=>Z.transport.type==="stdio"?new aK(Z):new sK(Z,$)}EQ();function r0(){return Date.now()}function RC($){return $.map((Z)=>({name:Z.name,description:Z.description,inputSchema:Z.inputSchema}))}class b2{toolsCacheTtlMs;clientFactory;servers=new Map;operationLocks=new Map;constructor($){this.clientFactory=$.clientFactory,this.toolsCacheTtlMs=$.toolsCacheTtlMs??5000}async registerServer($){await this.runExclusive($.name,async()=>{let Z=this.servers.get($.name);if(!Z){this.servers.set($.name,{registration:{...$},status:"disconnected",updatedAt:r0()});return}let Q=JSON.stringify(Z.registration.transport)!==JSON.stringify($.transport);if(Z.registration={...$},Z.updatedAt=r0(),Q)await this.disconnectState(Z),Z.client=void 0,Z.toolCache=void 0,Z.toolCacheUpdatedAt=void 0})}async unregisterServer($){await this.runExclusive($,async()=>{let Z=this.requireServer($);await this.disconnectState(Z),this.servers.delete($)})}async connectServer($){await this.runExclusive($,async()=>{let Z=this.requireServer($);await this.connectState(Z)})}async disconnectServer($){await this.runExclusive($,async()=>{let Z=this.requireServer($);await this.disconnectState(Z)})}async setServerDisabled($,Z){await this.runExclusive($,async()=>{let Q=this.requireServer($);if(Q.registration={...Q.registration,disabled:Z},Q.updatedAt=r0(),Z)await this.disconnectState(Q)})}listServers(){return[...this.servers.values()].map(($)=>({name:$.registration.name,status:$.status,disabled:$.registration.disabled===!0,lastError:$.lastError,toolCount:$.toolCache?.length??0,updatedAt:$.updatedAt,metadata:$.registration.metadata})).sort(($,Z)=>$.name.localeCompare(Z.name))}async listTools($){let Z=this.requireServer($),Q=Z.toolCacheUpdatedAt??0;if(Z.toolCache&&r0()-Q<=this.toolsCacheTtlMs)return Z.toolCache;return this.refreshTools($)}async refreshTools($){return this.runExclusive($,async()=>{let Z=this.requireServer($),W=await(await this.ensureConnectedClient(Z)).listTools(),J=RC(W);return Z.toolCache=J,Z.toolCacheUpdatedAt=r0(),Z.updatedAt=r0(),J})}async callTool($){return this.runExclusive($.serverName,async()=>{let Z=this.requireServer($.serverName),Q=await this.ensureConnectedClient(Z);return Z.updatedAt=r0(),Q.callTool({name:$.toolName,arguments:$.arguments,context:$.context})})}async dispose(){let $=[...this.servers.keys()];for(let Z of $)await this.unregisterServer(Z)}async ensureConnectedClient($){if(await this.connectState($),!$.client)throw Error(`MCP server "${$.registration.name}" does not have an initialized client.`);return $.client}async connectState($){if($.registration.disabled)throw Error(`MCP server "${$.registration.name}" is disabled and cannot be connected.`);if($.status==="connected"&&$.client)return;$.status="connecting",$.updatedAt=r0();try{let Z=$.client??await this.clientFactory($.registration);await Z.connect(),$.client=Z,$.status="connected",$.lastError=void 0,$.updatedAt=r0()}catch(Z){throw $.status="disconnected",$.lastError=Z instanceof Error?Z.message:String(Z),$.updatedAt=r0(),Z}}async disconnectState($){if(!$.client){$.status="disconnected",$.updatedAt=r0();return}try{await $.client.disconnect()}finally{$.status="disconnected",$.updatedAt=r0()}}requireServer($){let Z=this.servers.get($);if(!Z)throw Error(`Unknown MCP server: ${$}`);return Z}async runExclusive($,Z){let Q=this.operationLocks.get($)??Promise.resolve(),W,J=new Promise((Y)=>{W=Y}),X=Q.catch(()=>{return}).then(()=>J);this.operationLocks.set($,X),await Q.catch(()=>{return});try{return await Z()}finally{if(W?.(),this.operationLocks.get($)===X)this.operationLocks.delete($)}}}function Q4($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function oK($){return Q4($)&&Object.values($).every((Z)=>typeof Z==="string")}function EC($){return Array.isArray($)&&$.every((Z)=>typeof Z==="string")}function NC($){if(!Q4($))return!1;return($.fromEnv===void 0||typeof $.fromEnv==="string")&&($.value===void 0||typeof $.value==="string")&&($.required===void 0||typeof $.required==="boolean")}function CC($){let Z=$.env?Object.entries($.env):[];if(Z.length===0)return{ok:!0};let Q={};for(let[W,J]of Z){if(typeof J==="string"){Q[W]=J;continue}let X=J.fromEnv?.trim()||W,Y=process.env[X];if(typeof Y==="string"&&Y.length>0){Q[W]=Y;continue}if(typeof J.value==="string"){Q[W]=J.value;continue}if(J.required===!0)return{ok:!1,reason:`required environment variable "${X}" is not set`}}return{ok:!0,env:Object.keys(Q).length>0?Q:void 0}}function SJ($){if(!Q4($))return{name:"",loadError:"invalid MCP server registration"};let Z=typeof $.name==="string"?$.name.trim():"";if(!Z)return{name:Z,loadError:"empty MCP server name"};let Q=$.env,W=Q===void 0?void 0:Q;if(W!==void 0){if(!Q4(W))return{name:Z,loadError:"invalid env"};for(let[V,H]of Object.entries(W))if(typeof H!=="string"&&!NC(H))return{name:Z,loadError:`invalid env "${V}"`}}let J=$.transport;if(!Q4(J))return{name:Z,loadError:"invalid MCP transport"};let X=J.type;if(X!=="stdio"&&X!=="sse"&&X!=="streamableHttp")return{name:Z,loadError:"invalid MCP transport type"};if(X!=="stdio"&&W!==void 0)return{name:Z,loadError:"top-level env is only supported for stdio MCP transports"};let Y=Q4($.metadata)?$.metadata:void 0;if(X==="stdio"){let V=J.command;if(typeof V!=="string"||!V.trim())return{name:Z,loadError:"stdio MCP transport requires command"};let H=J.args;if(H!==void 0&&!EC(H))return{name:Z,loadError:"stdio MCP transport args must be strings"};let B=J.cwd;if(B!==void 0&&typeof B!=="string")return{name:Z,loadError:"stdio MCP transport cwd must be a string"};let G=J.env;if(G!==void 0&&!oK(G))return{name:Z,loadError:"stdio MCP transport env must be strings"};let K=CC({name:Z,transport:{type:"stdio",command:V,args:H,cwd:B,env:G},env:W,metadata:Y});if(!K.ok)return{name:Z,loadError:K.reason};let F=G||K.env?{...G??{},...K.env??{}}:void 0;return{name:Z,registration:{name:Z,transport:{type:"stdio",command:V,args:H,cwd:B,env:F},metadata:Y}}}if(typeof J.url!=="string"||!J.url.trim())return{name:Z,loadError:`${X} MCP transport requires url`};let j=J.headers;if(j!==void 0&&!oK(j))return{name:Z,loadError:`${X} MCP transport headers must be strings`};return{name:Z,registration:{name:Z,transport:X==="sse"?{type:"sse",url:J.url,headers:j}:{type:"streamableHttp",url:J.url,headers:j},metadata:Y}}}function SQ($){let Z=new Map;return $.map(({server:Q,owner:W,ownerLabel:J})=>{let X=SJ(Q);if(!X.registration)return{owner:W,name:X.name,loadError:X.loadError??"invalid MCP server registration"};let Y=Z.get(X.registration.name);if(Z.has(X.registration.name)){let j=Y?` already registered by ${Y}`:"";return{owner:W,name:X.registration.name,loadError:`duplicate MCP server name "${X.registration.name}"${j}`}}return Z.set(X.registration.name,J),{owner:W,name:X.registration.name,registration:X.registration}})}import{createHash as wC}from"node:crypto";var tK=64,PC=/[^a-zA-Z0-9_-]+/g,eK=8,SC=1,bC="mcp_tool";function yC($){return wC("sha1").update($).digest("hex").slice(0,eK)}function hC($){return $.replace(PC,"_")}var bQ=({serverName:$,toolName:Z})=>{let Q=`${$}__${Z}`,W=hC(Q);if(W===Q&&Q.length<=tK)return Q;let J=yC(Q),X=tK-SC-eK;return`${W.slice(0,X)||bC}_${J}`};function q5($){return{[($.nameTransform??bQ)({serverName:$.serverName,toolName:$.toolName})]:{enabled:!1}}}function yQ($){let Z={};for(let Q of $.toolNames)Object.assign(Z,q5({serverName:$.serverName,toolName:Q,nameTransform:$.nameTransform}));return Z}import{createTool as kC}from"@cline/shared";function IC($,Z){let Q=Z.description?.trim();if(Q)return Q;return`Execute MCP tool "${Z.name}" from server "${$}".`}async function W4($){let Z=await $.provider.listTools($.serverName),Q=$.nameTransform??bQ;return Z.map((W)=>{let J=Q({serverName:$.serverName,toolName:W.name});return kC({name:J,description:IC($.serverName,W),inputSchema:W.inputSchema,timeoutMs:$.timeoutMs,retryable:$.retryable,maxRetries:$.maxRetries,execute:async(X,Y)=>$.provider.callTool({serverName:$.serverName,toolName:W.name,arguments:X&&typeof X==="object"&&!Array.isArray(X)?X:void 0,context:Y})})})}$1();var WF={};N(WF,{listPluginToolsWithDiagnostics:()=>hQ,listPluginTools:()=>M5});import{stat as xC}from"node:fs/promises";import{isAbsolute as gC,relative as mC,resolve as ZF}from"node:path";$1();function vC($,Z){let Q=mC(ZF($),ZF(Z));return Q===""||!Q.startsWith("..")&&!gC(Q)}var cC=32,J4=new Map;function uC($,Z){if(!J4.has($)&&J4.size>=cC){let Q=J4.keys().next().value;if(Q)J4.delete(Q)}J4.set($,Z)}async function dC($){let Z=await Promise.all($.pluginPaths.map(async(Q)=>{try{let W=await xC(Q);return`${Q}:${W.mtimeMs}:${W.size}`}catch{return`${Q}:missing`}}));return JSON.stringify({workspacePath:$.workspacePath,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,pathStats:Z})}function QF($,Z){return $.map((Q)=>({...Q,enabled:!Z.has(Q.name)}))}function lC($){return $.sort((Z,Q)=>{let W=Z.name.localeCompare(Q.name);if(W!==0)return W;return Z.path.localeCompare(Q.path)})}async function pC($,Z){if(!$.setup)return{tools:[]};let Q=[],W={registerTool:(J)=>Q.push(J),registerCommand:()=>{},registerMessageBuilder:()=>{},registerRule:()=>{},registerProvider:()=>{},registerAutomationEventType:()=>{},registerMcpServer:(J)=>{if(!$.manifest.capabilities.includes("mcp"))throw Error('registerMcpServer requires the "mcp" capability')}};return await $.setup(W,{workspaceInfo:Z}),{tools:Q}}async function hQ($){let Z=i1({workspacePath:$.workspacePath,cwd:$.cwd}),Q=B1($.disabledToolNames);if(Z.length===0)return{tools:[],failures:[],warnings:[]};let W=await dC({pluginPaths:Z,workspacePath:$.workspacePath,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId}),J=J4.get(W);if(J)return{tools:QF(J.tools,Q),failures:J.failures,warnings:J.warnings};let X=[],Y=[],j=[],V;try{V=await g8({pluginPaths:Z,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,workspaceInfo:{rootPath:$.workspacePath}}),Y=[...V.failures],j=[...V.warnings];for(let B of V.extensions??[]){let G=B.__clinePluginPath;if(!G)continue;let K=vC($.workspacePath,G)?"workspace-plugin":"global-plugin",F;try{F=await pC(B,{rootPath:$.workspacePath})}catch(A){Y.push({pluginPath:G,pluginName:B.name,phase:"setup",message:A instanceof Error?A.message:String(A),stack:A instanceof Error?A.stack:void 0});continue}for(let A of F.tools)X.push({name:A.name,pluginName:B.name,path:G,source:K,description:A.description?.trim()||void 0})}}catch(B){Y=Z.map((G)=>({pluginPath:G,phase:"load",message:B instanceof Error?B.message:String(B),stack:B instanceof Error?B.stack:void 0}))}finally{await V?.shutdown().catch(()=>{})}let H=lC(X);return uC(W,{tools:H,failures:Y,warnings:j}),{tools:QF(H,Q),failures:Y,warnings:j}}async function M5($){return(await hQ($)).tools}function N5($,Z){if(!Z)return"global";let Q=VF(Z,$);return!Q.startsWith("..")&&!jF(Q)?"workspace":"global"}function aC($,Z){return N5($,Z)==="workspace"?"workspace-plugin":"global-plugin"}function sC($,Z){let Q=VF(XF($),XF(Z));return Q===""||!Q.startsWith("..")&&!jF(Q)}function oC($){try{let Z=JSON.parse(rC($,"utf8"));return typeof Z.name==="string"&&Z.name.trim()?Z.name.trim():void 0}catch{return}}function tC($){let Z=JF($);while(!0){let Q=nC(Z,"package.json");if(E5(Q)){let J=oC(Q);if(J)return J;break}let W=JF(Z);if(W===Z)break;Z=W}return bJ($,iC($))}function eC($){let Z=[];for(let Q of i1({workspacePath:$.workspaceRoot||void 0,cwd:$.cwd}))for(let W of n1([Q]))Z.push({directory:W,pluginName:tC(Q),pluginPath:Q,source:$.workspaceRoot?aC(Q,$.workspaceRoot):"global-plugin"});return Z.sort((Q,W)=>W.directory.length-Q.directory.length)}function $w($,Z){return Z.find((Q)=>sC(Q.directory,$))}function R5($){return[...$].sort((Z,Q)=>{let W=(J)=>{switch(J){case"workspace":case"workspace-plugin":return 0;case"global":case"global-plugin":return 1;case"builtin":return 2}};if(Z.source!==Q.source)return W(Z.source)-W(Q.source);return Z.name.localeCompare(Q.name)})}function HF($){return $.workspaceRoot?.trim()||$.cwd?.trim()||""}function BF($,Z){return $.cwd?.trim()||Z||process.cwd()}async function YF($,Z){if($.userInstructionService)return await Z($.userInstructionService);let Q=HF($),W=BF($,Q),J=y$({skills:{workspacePath:Q||void 0,includePluginSkills:!0,cwd:W},rules:{workspacePath:Q||void 0},workflows:{workspacePath:Q||void 0}});try{return await J.start(),await Z(J)}finally{J.stop()}}function Zw($,Z){if(!$)return;let Q=$.listRecords("skill");if(Z.id){let W=Q.find((J)=>J.id===Z.id);if(W)return W}for(let W of Q)if(W.filePath===Z.path||W.item.name===Z.name||W.id===Z.name)return W;return}class I${async list($={}){return await YF($,async(Z)=>{let Q=HF($),W=eC({workspaceRoot:Q,cwd:BF($,Q)}),J=[],X=[],Y=[],j=[],V=[];if(Z){for(let B of Z.listRecords("workflow")){let G=B.item;J.push({id:B.id,name:G.name,path:B.filePath,enabled:G.disabled!==!0,kind:"workflow",source:N5(B.filePath,Q),description:G.instructions,toggleable:!1})}for(let B of Z.listRecords("rule")){let G=B.item;X.push({id:B.id,name:G.name,path:B.filePath,enabled:G.disabled!==!0,kind:"rule",source:N5(B.filePath,Q),description:G.instructions,toggleable:!1})}for(let B of Z.listRecords("skill")){let G=B.item,K=$w(B.filePath,W);Y.push({id:B.id,name:G.name,path:B.filePath,enabled:G.disabled!==!0,kind:"skill",source:K?.source??N5(B.filePath,Q),description:G.description,pluginName:K?.pluginName,pluginPath:K?.pluginPath,toggleable:!0})}}if(Q)try{for(let B of await M5({workspacePath:Q,cwd:$.cwd,providerId:$.availabilityContext?.providerId,modelId:$.availabilityContext?.modelId}))j.push({id:`${B.pluginName}:${B.name}:${B.path}`,name:B.name,path:B.path,enabled:B.enabled,kind:"tool",source:B.source,description:B.description,toggleable:!0})}catch{}let H=Z0();if(s1({filePath:H}))try{for(let B of p0({filePath:H}))V.push({id:B.name,name:B.name,path:H,enabled:B.disabled!==!0,kind:"mcp",source:N5(H,Q),description:B.transport.type,toggleable:!0})}catch{}return{workflows:R5(J.filter((B)=>E5(B.path))),rules:R5(X.filter((B)=>E5(B.path))),skills:R5(Y.filter((B)=>E5(B.path))),tools:R5(j),mcp:R5(V.filter((B)=>E5(B.path)))}})}async toggle($){if($.type==="skills")return await YF($,async(Z)=>{let Q=Zw(Z,$),W=Q?.filePath;if(!W)throw Error(`Unable to resolve skill setting '${$.id??$.name??bJ($.path??"")}'.`);let J=Q?.item&&"disabled"in Q.item?Q.item.disabled!==!0:void 0,X=$.enabled??(J!==void 0?!J:void 0);if(X===void 0)throw Error(`Cannot determine toggle state for skill '${$.id??$.name??bJ($.path??"")}'; provide an explicit enabled value or a resolvable workspace context.`);return await RK({filePath:W,enabled:X}),await Z?.refreshType("skill"),{snapshot:await this.list({...$,userInstructionService:Z}),changedTypes:["skills"]}});if($.type==="tools"){if(!$.name?.trim())throw Error("Tool settings toggle requires a tool name.");if($.enabled===void 0)g9($.name);else xj($.name,!$.enabled);return{snapshot:await this.list($),changedTypes:["tools"]}}if($.type==="mcp"){let Z=$.name?.trim()||$.id?.trim();if(!Z)throw Error("MCP server settings toggle requires a server name.");let Q=$.path?.trim()||Z0(),W=$.enabled;if(W===void 0){let J=p0({filePath:Q}).find((X)=>X.name===Z);if(!J)throw Error(`Unknown MCP server: ${Z}`);W=J.disabled===!0}return C2({filePath:Q,name:Z,disabled:!W}),{snapshot:await this.list($),changedTypes:["mcp"]}}throw Error(`Settings type '${$.type}' does not support toggles.`)}}function y2(){return new I$}function KF($){return{async list(Z){let Q=$;if(Q.listSettings)return await Q.listSettings(Z);return await y2().list(Z)},async toggle(Z){let Q=$;if(Q.toggleSetting)return await Q.toggleSetting(Z);return await y2().toggle(Z)}}}function FF($){function Z(){let Q=$.pendingPrompts;if(!Q)throw Error("Pending prompt service is not available.");return Q}return{list(Q){return Z().list(Q)},update(Q){return Z().update(Q)},delete(Q){return Z().delete(Q)}}}function AF($){let Z=$.config;return"providerId"in Z?{...$,config:{...Z,...Qw($.localRuntime)},localRuntime:$.localRuntime}:$}function yJ($,Z={}){let Q=i4($.config),W=q0(Z.defaultCapabilities,$.capabilities),J=Ww(Q.localRuntime,$.localRuntime),X=Z.withExtensionContext?.(J?.extensionContext);if(X)J={...J??{},extensionContext:X};return{...$,...Q,...J?{localRuntime:J}:{},...W?{capabilities:W}:{}}}function Qw($){if(!$)return{};let{modelCatalogDefaults:Z,userInstructionService:Q,configExtensions:W,onTeamRestored:J,...X}=$;return X}function Ww(...$){let Z={};for(let Q of $)if(Q)Object.assign(Z,Q);return Object.keys(Z).length>0?Z:void 0}L0();function fF($){let Z=$.input.config.telemetry??$.telemetry;if(!Z)return;Z.capture({event:m.SESSION.STARTED,properties:{sessionId:$.sessionId,source:$.input.source??_0.CORE,providerId:$.input.config.providerId,modelId:$.input.config.modelId,enableTools:$.input.config.enableTools,enableSpawnAgent:$.input.config.enableSpawnAgent,enableAgentTeams:$.input.config.enableAgentTeams,clientName:$.clientName,runtimeAddress:$.runtimeAddress}})}function C5($){return!!$&&typeof $==="object"&&!Array.isArray($)}function hJ($){let Z=$?.trim();return Z?Z:void 0}function Jw($,Z){let Q=$?.trim();if(!Q)return Z;let W=Date.parse(Q);if(!Number.isFinite(W))return Z;return new Date(W).toISOString()}function UF($,Z){return new Date(new Date($).getTime()+Math.max(0,Math.floor(Z))*1000).toISOString()}function DF($,Z){return new Date(new Date($).getTime()-Math.max(0,Math.floor(Z))*1000).toISOString()}function Xw($,Z){if(!$)return Z;return new Date($).getTime()>=new Date(Z).getTime()?$:Z}function Yw($,Z){let Q=$.eventId.trim(),W=$.eventType.trim(),J=$.source.trim(),X=hJ($.subject),Y=hJ($.dedupeKey)??`${W}:${J}:${X??Q}`;return{eventId:Q,eventType:W,source:J,subject:X,occurredAt:Jw($.occurredAt,Z),workspaceRoot:hJ($.workspaceRoot),payload:C5($.payload)?$.payload:void 0,attributes:C5($.attributes)?$.attributes:void 0,dedupeKey:Y}}function kJ($,Z){if(!Z)return;let Q=Z.split("."),W=$;for(let J of Q){if(!C5(W))return;W=W[J]}return W}function jw($,Z){if($.attributes&&Object.hasOwn($.attributes,Z))return $.attributes[Z];if($.payload&&Object.hasOwn($.payload,Z))return $.payload[Z];let Q={eventId:$.eventId,eventType:$.eventType,source:$.source,subject:$.subject,occurredAt:$.occurredAt,workspaceRoot:$.workspaceRoot,dedupeKey:$.dedupeKey,attributes:$.attributes,payload:$.payload},W=kJ(Q,Z);if(W!==void 0)return W;if($.attributes){let J=kJ($.attributes,Z);if(J!==void 0)return J}if($.payload)return kJ($.payload,Z);return}function kQ($,Z){if(Array.isArray(Z))return Z.some((Q)=>kQ($,Q));if(Array.isArray($))return $.some((Q)=>kQ(Q,Z));if(C5(Z)){if(!C5($))return!1;return Object.entries(Z).every(([Q,W])=>kQ($[Q],W))}return Object.is($,Z)}function Vw($,Z){if(!Z||Object.keys(Z).length===0)return!0;return Object.entries(Z).every(([Q,W])=>kQ(jw($,Q),W))}class IJ{store;nowFn;logger;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now()),this.logger=$.logger}ingestEvent($){let Z=new Date(this.nowFn()).toISOString(),Q=Yw($,Z),W=this.store.insertEventLog(Q,{receivedAtIso:Z});if(!W.created)return this.logger?.debug("cron.event.duplicate",{eventId:W.record.eventId,eventType:W.record.eventType,source:W.record.source}),{event:W.record,duplicate:!0,matchedSpecs:[],queuedRuns:[],suppressions:[{reason:"duplicate_event",dedupeKey:W.record.dedupeKey}]};try{let J=this.store.listEventSpecsForType(Q.eventType),X=[],Y=[],j=[];for(let B of J){if(!Vw(Q,B.filters)){X.push({specId:B.specId,externalId:B.externalId,reason:"filter_mismatch",dedupeKey:Q.dedupeKey});continue}Y.push(B);let G=this.materializeForSpec(B,Q,W.record.receivedAt);if(G.run)j.push(G.run);else X.push({specId:B.specId,externalId:B.externalId,reason:G.reason,dedupeKey:Q.dedupeKey})}let V=Y.length===0?"unmatched":j.length>0?"queued":"suppressed";this.store.updateEventLogProcessing(W.record.eventId,{status:V,matchedSpecCount:Y.length,queuedRunCount:j.length,suppressedCount:X.filter((B)=>B.reason!=="filter_mismatch").length});let H=this.store.getEventLog(W.record.eventId);return this.logger?.debug("cron.event.processed",{eventId:W.record.eventId,eventType:W.record.eventType,status:V,matchedSpecCount:Y.length,queuedRunCount:j.length}),{event:H??W.record,duplicate:!1,matchedSpecs:Y,queuedRuns:j,suppressions:X}}catch(J){if(this.store.updateEventLogProcessing(W.record.eventId,{status:"failed",error:J instanceof Error?J.message:String(J)}),this.logger?.error)this.logger.error("cron.event.failed",{eventId:W.record.eventId,eventType:W.record.eventType,error:J});throw J}}materializeForSpec($,Z,Q){let W=Z.dedupeKey??Z.eventId,J=$.debounceSeconds??0;if(J>0){let V=this.store.findQueuedEventRunForDedupe({specId:$.specId,dedupeKey:W});if(V){let H=Xw(V.scheduledFor,UF(Q,J)),B=this.store.updateQueuedEventRunForDebounce({runId:V.runId,triggerEventId:Z.eventId,scheduledFor:H});if(B)return{run:B,reason:"dedupe_window"}}}let X=$.dedupeWindowSeconds??0;if(X>0&&this.store.hasRecentEventRunForDedupe({specId:$.specId,dedupeKey:W,sinceIso:DF(Q,X)}))return{reason:"dedupe_window"};let Y=$.cooldownSeconds??0;if(Y>0&&this.store.hasRecentEventRunForSpec({specId:$.specId,sinceIso:DF(Q,Y)}))return{reason:"cooldown"};return{run:this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"event",triggerEventId:Z.eventId,scheduledFor:J>0?UF(Q,J):Q}),reason:"dedupe_window"}}}import{existsSync as Mw,readdirSync as Rw,readFileSync as Ew,statSync as Nw}from"node:fs";import{relative as Cw}from"node:path";import{resolveCronSpecsDir as ww}from"@cline/shared/storage";import{createHash as Hw}from"node:crypto";import Bw from"yaml";function Gw($){let Z=$.replace(/\\/g,"/");if(Z.startsWith("events/")&&Z.endsWith(".event.md"))return"event";if(Z.endsWith(".cron.md"))return"schedule";return"one_off"}function Kw($){let Z=$.replace(/\r\n/g,`
|
|
494
|
+
`);if(Q<0)break;let J=this.buffer.slice(0,Q).match(/(?:^|\r\n)Content-Length:\s*(\d+)(?:\r\n|$)/i);if(!J)throw Error("Invalid MCP stdio frame: missing Content-Length header.");let X=Number.parseInt(J[1],10),Y=Q+4,j=Y+X;if(this.buffer.length<j)break;Z.push(this.buffer.slice(Y,j)),this.buffer=this.buffer.slice(j)}return Z}}class PJ{buffer="";decoder=new aK("utf8");push($){this.buffer+=this.decoder.write($);let Z=[];while(!0){let Q=this.buffer.indexOf(`
|
|
495
|
+
`);if(Q<0)break;let W=this.buffer.slice(0,Q).trim();if(this.buffer=this.buffer.slice(Q+1),W.length>0)Z.push(W)}return Z}}class sK{registration;process;nextRequestId=1;pending=new Map;framedParser=new CJ;newlineParser=new PJ;stderrBuffer="";connected=!1;protocolMode="newline";constructor($){this.registration=$}async connect(){if(this.connected)return;if(this.registration.transport.type!=="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${this.registration.transport.type}`);let $=["newline","framed"],Z;for(let Q of $){await this.disconnect().catch(()=>{}),this.spawnProcess(Q);try{await this.request("initialize",{protocolVersion:Nw,capabilities:{},clientInfo:{name:"@cline/core",version:"0.0.0"}},Cw),this.notify("notifications/initialized"),this.connected=!0,this.protocolMode=Q;return}catch(W){Z=W instanceof Error?W:Error(String(W))}}throw Z??Error(`Failed to connect to MCP server "${this.registration.name}".`)}async disconnect(){let $=this.process;if(this.connected=!1,this.process=void 0,this.failAllPending(Error(`Disconnected from MCP server "${this.registration.name}".`)),!$)return;$.kill()}async listTools(){return((await this.request("tools/list")).tools??[]).filter((Z)=>typeof Z?.name==="string"&&typeof Z.inputSchema==="object"&&Z.inputSchema!==null).map((Z)=>({name:Z.name,description:Z.description,inputSchema:Z.inputSchema}))}async callTool($){return this.request("tools/call",{name:$.name,arguments:$.arguments??{}})}spawnProcess($){let Z=this.registration.transport;if(Z.type!=="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${Z.type}`);this.framedParser=new CJ,this.newlineParser=new PJ,this.stderrBuffer="",this.protocolMode=$;let Q=process.platform==="win32"?{windowsHide:!0,shell:!0}:{},W=Rw(Z.command,Z.args??[],{cwd:Z.cwd,env:{...process.env,...Z.env??{}},stdio:["pipe","pipe","pipe"],...Q});this.process=W,W.stdout.on("data",(J)=>this.handleStdout(J)),W.stderr.on("data",(J)=>{if(this.process!==W)return;if(this.stderrBuffer+=J.toString("utf8"),this.stderrBuffer.length>16384)this.stderrBuffer=this.stderrBuffer.slice(-16384)}),W.once("error",(J)=>{if(this.process!==W)return;this.failAllPending(Error(`MCP process error: ${SQ(J)}`))}),W.once("exit",(J,X)=>{if(this.process!==W)return;this.connected=!1,this.process=void 0;let Y=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`MCP process exited for "${this.registration.name}" (code=${J??"null"}, signal=${X??"null"}).${Y}`))})}handleStdout($){try{let Z=this.protocolMode==="framed"?this.framedParser.push($):this.newlineParser.push($);for(let Q of Z){let W=JSON.parse(Q);if(typeof W.id!=="number")continue;let J=this.pending.get(W.id);if(!J)continue;if(this.pending.delete(W.id),clearTimeout(J.timeout),W.error){let X=W.error.message||`MCP request failed with code ${W.error.code??"unknown"}`;J.reject(Error(X));continue}J.resolve(W.result)}}catch(Z){this.handleProtocolFailure(Z)}}handleProtocolFailure($){let Z=this.process;if(!Z)return;this.connected=!1,this.process=void 0;let Q=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`Invalid MCP response from "${this.registration.name}": ${SQ($)}.${Q}`)),Z.kill()}async request($,Z,Q=ww){let W=this.process;if(!W?.stdin.writable)throw Error(`MCP server "${this.registration.name}" is not connected.`);let J=this.nextRequestId++,X={jsonrpc:"2.0",id:J,method:$,...Z?{params:Z}:{}},Y=new Promise((j,V)=>{let H=setTimeout(()=>{this.pending.delete(J),V(Error(`MCP request timed out for "${this.registration.name}" (${$}).`))},Q);this.pending.set(J,{resolve:j,reject:V,timeout:H})});try{W.stdin.write(this.protocolMode==="framed"?iK(X):nK(X))}catch(j){let V=this.pending.get(J);if(V)clearTimeout(V.timeout),this.pending.delete(J);throw j}return Y}notify($,Z){let Q=this.process;if(!Q?.stdin.writable)return;let W={jsonrpc:"2.0",method:$,...Z?{params:Z}:{}};Q.stdin.write(this.protocolMode==="framed"?iK(W):nK(W))}failAllPending($){for(let[Z,Q]of this.pending)clearTimeout(Q.timeout),this.pending.delete(Z),Q.reject($)}}class oK{registration;options;client;authContext;constructor($,Z){this.registration=$;this.options=Z}async connect(){if(this.client)return;if(this.registration.transport.type==="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${this.registration.transport.type}`);let $=CQ({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??rK});this.authContext=$;try{let Z=new Ew({name:this.options.clientName?.trim()||"@cline/core",version:this.options.clientVersion?.trim()||"0.0.0"}),Q=wQ({registration:this.registration,oauthProvider:$.provider,fetch:this.options.fetch});await Z.connect(Q),await $.clearError(),this.client=Z}catch(Z){let Q=Z instanceof pK?this.formatUnauthorizedMessage($.getLastAuthorizationUrl()):SQ(Z);throw await $.markError(Q),Error(Q)}}async disconnect(){let $=this.client;this.client=void 0,await $?.close()}async listTools(){let $=await this.ensureConnectedClient();try{return(await $.listTools()).tools.map((Q)=>({name:Q.name,description:Q.description,inputSchema:Q.inputSchema&&typeof Q.inputSchema==="object"&&!Array.isArray(Q.inputSchema)?Q.inputSchema:{}}))}catch(Z){return await this.handleOperationError(Z)}}async callTool($){let Z=await this.ensureConnectedClient();try{return await Z.callTool({name:$.name,arguments:$.arguments??{}})}catch(Q){return await this.handleOperationError(Q)}}async ensureConnectedClient(){if(!this.client)await this.connect();if(!this.client)throw Error(`MCP server "${this.registration.name}" is not connected.`);return this.client}formatUnauthorizedMessage($){let Z=`MCP server "${this.registration.name}" requires OAuth authorization.`;if(!$)return`${Z} Run authorizeMcpServerOAuth for this server.`;return`${Z} Run authorizeMcpServerOAuth for this server and complete this URL: ${$}`}async handleOperationError($){let Z=this.authContext??CQ({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??rK}),Q=$ instanceof pK?this.formatUnauthorizedMessage(Z.getLastAuthorizationUrl()):SQ($);throw await Z.markError(Q),Error(Q)}}function $4($={}){return(Z)=>Z.transport.type==="stdio"?new sK(Z):new oK(Z,$)}NQ();function r0(){return Date.now()}function Pw($){return $.map((Z)=>({name:Z.name,description:Z.description,inputSchema:Z.inputSchema}))}class S2{toolsCacheTtlMs;clientFactory;servers=new Map;operationLocks=new Map;constructor($){this.clientFactory=$.clientFactory,this.toolsCacheTtlMs=$.toolsCacheTtlMs??5000}async registerServer($){await this.runExclusive($.name,async()=>{let Z=this.servers.get($.name);if(!Z){this.servers.set($.name,{registration:{...$},status:"disconnected",updatedAt:r0()});return}let Q=JSON.stringify(Z.registration.transport)!==JSON.stringify($.transport);if(Z.registration={...$},Z.updatedAt=r0(),Q)await this.disconnectState(Z),Z.client=void 0,Z.toolCache=void 0,Z.toolCacheUpdatedAt=void 0})}async unregisterServer($){await this.runExclusive($,async()=>{let Z=this.requireServer($);await this.disconnectState(Z),this.servers.delete($)})}async connectServer($){await this.runExclusive($,async()=>{let Z=this.requireServer($);await this.connectState(Z)})}async disconnectServer($){await this.runExclusive($,async()=>{let Z=this.requireServer($);await this.disconnectState(Z)})}async setServerDisabled($,Z){await this.runExclusive($,async()=>{let Q=this.requireServer($);if(Q.registration={...Q.registration,disabled:Z},Q.updatedAt=r0(),Z)await this.disconnectState(Q)})}listServers(){return[...this.servers.values()].map(($)=>({name:$.registration.name,status:$.status,disabled:$.registration.disabled===!0,lastError:$.lastError,toolCount:$.toolCache?.length??0,updatedAt:$.updatedAt,metadata:$.registration.metadata})).sort(($,Z)=>$.name.localeCompare(Z.name))}async listTools($){let Z=this.requireServer($),Q=Z.toolCacheUpdatedAt??0;if(Z.toolCache&&r0()-Q<=this.toolsCacheTtlMs)return Z.toolCache;return this.refreshTools($)}async refreshTools($){return this.runExclusive($,async()=>{let Z=this.requireServer($),W=await(await this.ensureConnectedClient(Z)).listTools(),J=Pw(W);return Z.toolCache=J,Z.toolCacheUpdatedAt=r0(),Z.updatedAt=r0(),J})}async callTool($){return this.runExclusive($.serverName,async()=>{let Z=this.requireServer($.serverName),Q=await this.ensureConnectedClient(Z);return Z.updatedAt=r0(),Q.callTool({name:$.toolName,arguments:$.arguments,context:$.context})})}async dispose(){let $=[...this.servers.keys()];for(let Z of $)await this.unregisterServer(Z)}async ensureConnectedClient($){if(await this.connectState($),!$.client)throw Error(`MCP server "${$.registration.name}" does not have an initialized client.`);return $.client}async connectState($){if($.registration.disabled)throw Error(`MCP server "${$.registration.name}" is disabled and cannot be connected.`);if($.status==="connected"&&$.client)return;$.status="connecting",$.updatedAt=r0();try{let Z=$.client??await this.clientFactory($.registration);await Z.connect(),$.client=Z,$.status="connected",$.lastError=void 0,$.updatedAt=r0()}catch(Z){throw $.status="disconnected",$.lastError=Z instanceof Error?Z.message:String(Z),$.updatedAt=r0(),Z}}async disconnectState($){if(!$.client){$.status="disconnected",$.updatedAt=r0();return}try{await $.client.disconnect()}finally{$.status="disconnected",$.updatedAt=r0()}}requireServer($){let Z=this.servers.get($);if(!Z)throw Error(`Unknown MCP server: ${$}`);return Z}async runExclusive($,Z){let Q=this.operationLocks.get($)??Promise.resolve(),W,J=new Promise((Y)=>{W=Y}),X=Q.catch(()=>{return}).then(()=>J);this.operationLocks.set($,X),await Q.catch(()=>{return});try{return await Z()}finally{if(W?.(),this.operationLocks.get($)===X)this.operationLocks.delete($)}}}function Z4($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function tK($){return Z4($)&&Object.values($).every((Z)=>typeof Z==="string")}function Sw($){return Array.isArray($)&&$.every((Z)=>typeof Z==="string")}function bw($){if(!Z4($))return!1;return($.fromEnv===void 0||typeof $.fromEnv==="string")&&($.value===void 0||typeof $.value==="string")&&($.required===void 0||typeof $.required==="boolean")}function yw($){let Z=$.env?Object.entries($.env):[];if(Z.length===0)return{ok:!0};let Q={};for(let[W,J]of Z){if(typeof J==="string"){Q[W]=J;continue}let X=J.fromEnv?.trim()||W,Y=process.env[X];if(typeof Y==="string"&&Y.length>0){Q[W]=Y;continue}if(typeof J.value==="string"){Q[W]=J.value;continue}if(J.required===!0)return{ok:!1,reason:`required environment variable "${X}" is not set`}}return{ok:!0,env:Object.keys(Q).length>0?Q:void 0}}function SJ($){if(!Z4($))return{name:"",loadError:"invalid MCP server registration"};let Z=typeof $.name==="string"?$.name.trim():"";if(!Z)return{name:Z,loadError:"empty MCP server name"};let Q=$.env,W=Q===void 0?void 0:Q;if(W!==void 0){if(!Z4(W))return{name:Z,loadError:"invalid env"};for(let[V,H]of Object.entries(W))if(typeof H!=="string"&&!bw(H))return{name:Z,loadError:`invalid env "${V}"`}}let J=$.transport;if(!Z4(J))return{name:Z,loadError:"invalid MCP transport"};let X=J.type;if(X!=="stdio"&&X!=="sse"&&X!=="streamableHttp")return{name:Z,loadError:"invalid MCP transport type"};if(X!=="stdio"&&W!==void 0)return{name:Z,loadError:"top-level env is only supported for stdio MCP transports"};let Y=Z4($.metadata)?$.metadata:void 0;if(X==="stdio"){let V=J.command;if(typeof V!=="string"||!V.trim())return{name:Z,loadError:"stdio MCP transport requires command"};let H=J.args;if(H!==void 0&&!Sw(H))return{name:Z,loadError:"stdio MCP transport args must be strings"};let B=J.cwd;if(B!==void 0&&typeof B!=="string")return{name:Z,loadError:"stdio MCP transport cwd must be a string"};let G=J.env;if(G!==void 0&&!tK(G))return{name:Z,loadError:"stdio MCP transport env must be strings"};let K=yw({name:Z,transport:{type:"stdio",command:V,args:H,cwd:B,env:G},env:W,metadata:Y});if(!K.ok)return{name:Z,loadError:K.reason};let F=G||K.env?{...G??{},...K.env??{}}:void 0;return{name:Z,registration:{name:Z,transport:{type:"stdio",command:V,args:H,cwd:B,env:F},metadata:Y}}}if(typeof J.url!=="string"||!J.url.trim())return{name:Z,loadError:`${X} MCP transport requires url`};let j=J.headers;if(j!==void 0&&!tK(j))return{name:Z,loadError:`${X} MCP transport headers must be strings`};return{name:Z,registration:{name:Z,transport:X==="sse"?{type:"sse",url:J.url,headers:j}:{type:"streamableHttp",url:J.url,headers:j},metadata:Y}}}function bQ($){let Z=new Map;return $.map(({server:Q,owner:W,ownerLabel:J})=>{let X=SJ(Q);if(!X.registration)return{owner:W,name:X.name,loadError:X.loadError??"invalid MCP server registration"};let Y=Z.get(X.registration.name);if(Z.has(X.registration.name)){let j=Y?` already registered by ${Y}`:"";return{owner:W,name:X.registration.name,loadError:`duplicate MCP server name "${X.registration.name}"${j}`}}return Z.set(X.registration.name,J),{owner:W,name:X.registration.name,registration:X.registration}})}import{createHash as hw}from"node:crypto";var eK=64,kw=/[^a-zA-Z0-9_-]+/g,$F=8,Iw=1,xw="mcp_tool";function gw($){return hw("sha1").update($).digest("hex").slice(0,$F)}function mw($){return $.replace(kw,"_")}var yQ=({serverName:$,toolName:Z})=>{let Q=`${$}__${Z}`,W=mw(Q);if(W===Q&&Q.length<=eK)return Q;let J=gw(Q),X=eK-Iw-$F;return`${W.slice(0,X)||xw}_${J}`};function O5($){return{[($.nameTransform??yQ)({serverName:$.serverName,toolName:$.toolName})]:{enabled:!1}}}function hQ($){let Z={};for(let Q of $.toolNames)Object.assign(Z,O5({serverName:$.serverName,toolName:Q,nameTransform:$.nameTransform}));return Z}import{createTool as vw}from"@cline/shared";function cw($,Z){let Q=Z.description?.trim();if(Q)return Q;return`Execute MCP tool "${Z.name}" from server "${$}".`}async function Q4($){let Z=await $.provider.listTools($.serverName),Q=$.nameTransform??yQ;return Z.map((W)=>{let J=Q({serverName:$.serverName,toolName:W.name});return vw({name:J,description:cw($.serverName,W),inputSchema:W.inputSchema,timeoutMs:$.timeoutMs,retryable:$.retryable,maxRetries:$.maxRetries,execute:async(X,Y)=>$.provider.callTool({serverName:$.serverName,toolName:W.name,arguments:X&&typeof X==="object"&&!Array.isArray(X)?X:void 0,context:Y})})})}$1();var JF={};N(JF,{listPluginToolsWithDiagnostics:()=>kQ,listPluginTools:()=>q5});import{stat as uw}from"node:fs/promises";import{isAbsolute as dw,relative as lw,resolve as QF}from"node:path";$1();function pw($,Z){let Q=lw(QF($),QF(Z));return Q===""||!Q.startsWith("..")&&!dw(Q)}var rw=32,W4=new Map;function iw($,Z){if(!W4.has($)&&W4.size>=rw){let Q=W4.keys().next().value;if(Q)W4.delete(Q)}W4.set($,Z)}async function nw($){let Z=await Promise.all($.pluginPaths.map(async(Q)=>{try{let W=await uw(Q);return`${Q}:${W.mtimeMs}:${W.size}`}catch{return`${Q}:missing`}}));return JSON.stringify({workspacePath:$.workspacePath,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,pathStats:Z})}function WF($,Z){return $.map((Q)=>({...Q,enabled:!Z.has(Q.name)}))}function aw($){return $.sort((Z,Q)=>{let W=Z.name.localeCompare(Q.name);if(W!==0)return W;return Z.path.localeCompare(Q.path)})}async function sw($,Z){if(!$.setup)return{tools:[]};let Q=[],W={registerTool:(J)=>Q.push(J),registerCommand:()=>{},registerMessageBuilder:()=>{},registerRule:()=>{},registerProvider:()=>{},registerAutomationEventType:()=>{},registerMcpServer:(J)=>{if(!$.manifest.capabilities.includes("mcp"))throw Error('registerMcpServer requires the "mcp" capability')}};return await $.setup(W,{workspaceInfo:Z}),{tools:Q}}async function kQ($){let Z=i1({workspacePath:$.workspacePath,cwd:$.cwd}),Q=B1($.disabledToolNames);if(Z.length===0)return{tools:[],failures:[],warnings:[]};let W=await nw({pluginPaths:Z,workspacePath:$.workspacePath,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId}),J=W4.get(W);if(J)return{tools:WF(J.tools,Q),failures:J.failures,warnings:J.warnings};let X=[],Y=[],j=[],V;try{V=await x8({pluginPaths:Z,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,workspaceInfo:{rootPath:$.workspacePath}}),Y=[...V.failures],j=[...V.warnings];for(let B of V.extensions??[]){let G=B.__clinePluginPath;if(!G)continue;let K=pw($.workspacePath,G)?"workspace-plugin":"global-plugin",F;try{F=await sw(B,{rootPath:$.workspacePath})}catch(A){Y.push({pluginPath:G,pluginName:B.name,phase:"setup",message:A instanceof Error?A.message:String(A),stack:A instanceof Error?A.stack:void 0});continue}for(let A of F.tools)X.push({name:A.name,pluginName:B.name,path:G,source:K,description:A.description?.trim()||void 0})}}catch(B){Y=Z.map((G)=>({pluginPath:G,phase:"load",message:B instanceof Error?B.message:String(B),stack:B instanceof Error?B.stack:void 0}))}finally{await V?.shutdown().catch(()=>{})}let H=aw(X);return iw(W,{tools:H,failures:Y,warnings:j}),{tools:WF(H,Q),failures:Y,warnings:j}}async function q5($){return(await kQ($)).tools}function E5($,Z){if(!Z)return"global";let Q=HF(Z,$);return!Q.startsWith("..")&&!VF(Q)?"workspace":"global"}function $C($,Z){return E5($,Z)==="workspace"?"workspace-plugin":"global-plugin"}function ZC($,Z){let Q=HF(YF($),YF(Z));return Q===""||!Q.startsWith("..")&&!VF(Q)}function QC($){try{let Z=JSON.parse(ow($,"utf8"));return typeof Z.name==="string"&&Z.name.trim()?Z.name.trim():void 0}catch{return}}function WC($){let Z=XF($);while(!0){let Q=ew(Z,"package.json");if(R5(Q)){let J=QC(Q);if(J)return J;break}let W=XF(Z);if(W===Z)break;Z=W}return bJ($,tw($))}function JC($){let Z=[];for(let Q of i1({workspacePath:$.workspaceRoot||void 0,cwd:$.cwd}))for(let W of n1([Q]))Z.push({directory:W,pluginName:WC(Q),pluginPath:Q,source:$.workspaceRoot?$C(Q,$.workspaceRoot):"global-plugin"});return Z.sort((Q,W)=>W.directory.length-Q.directory.length)}function XC($,Z){return Z.find((Q)=>ZC(Q.directory,$))}function M5($){return[...$].sort((Z,Q)=>{let W=(J)=>{switch(J){case"workspace":case"workspace-plugin":return 0;case"global":case"global-plugin":return 1;case"builtin":return 2}};if(Z.source!==Q.source)return W(Z.source)-W(Q.source);return Z.name.localeCompare(Q.name)})}function BF($){return $.workspaceRoot?.trim()||$.cwd?.trim()||""}function GF($,Z){return $.cwd?.trim()||Z||process.cwd()}async function jF($,Z){if($.userInstructionService)return await Z($.userInstructionService);let Q=BF($),W=GF($,Q),J=b$({skills:{workspacePath:Q||void 0,includePluginSkills:!0,cwd:W},rules:{workspacePath:Q||void 0},workflows:{workspacePath:Q||void 0}});try{return await J.start(),await Z(J)}finally{J.stop()}}function YC($,Z){if(!$)return;let Q=$.listRecords("skill");if(Z.id){let W=Q.find((J)=>J.id===Z.id);if(W)return W}for(let W of Q)if(W.filePath===Z.path||W.item.name===Z.name||W.id===Z.name)return W;return}class k${async list($={}){return await jF($,async(Z)=>{let Q=BF($),W=JC({workspaceRoot:Q,cwd:GF($,Q)}),J=[],X=[],Y=[],j=[],V=[];if(Z){for(let B of Z.listRecords("workflow")){let G=B.item;J.push({id:B.id,name:G.name,path:B.filePath,enabled:G.disabled!==!0,kind:"workflow",source:E5(B.filePath,Q),description:G.instructions,toggleable:!1})}for(let B of Z.listRecords("rule")){let G=B.item;X.push({id:B.id,name:G.name,path:B.filePath,enabled:G.disabled!==!0,kind:"rule",source:E5(B.filePath,Q),description:G.instructions,toggleable:!1})}for(let B of Z.listRecords("skill")){let G=B.item,K=XC(B.filePath,W);Y.push({id:B.id,name:G.name,path:B.filePath,enabled:G.disabled!==!0,kind:"skill",source:K?.source??E5(B.filePath,Q),description:G.description,pluginName:K?.pluginName,pluginPath:K?.pluginPath,toggleable:!0})}}if(Q)try{for(let B of await q5({workspacePath:Q,cwd:$.cwd,providerId:$.availabilityContext?.providerId,modelId:$.availabilityContext?.modelId}))j.push({id:`${B.pluginName}:${B.name}:${B.path}`,name:B.name,path:B.path,enabled:B.enabled,kind:"tool",source:B.source,description:B.description,toggleable:!0})}catch{}let H=Z0();if(s1({filePath:H}))try{for(let B of p0({filePath:H}))V.push({id:B.name,name:B.name,path:H,enabled:B.disabled!==!0,kind:"mcp",source:E5(H,Q),description:B.transport.type,toggleable:!0})}catch{}return{workflows:M5(J.filter((B)=>R5(B.path))),rules:M5(X.filter((B)=>R5(B.path))),skills:M5(Y.filter((B)=>R5(B.path))),tools:M5(j),mcp:M5(V.filter((B)=>R5(B.path)))}})}async toggle($){if($.type==="skills")return await jF($,async(Z)=>{let Q=YC(Z,$),W=Q?.filePath;if(!W)throw Error(`Unable to resolve skill setting '${$.id??$.name??bJ($.path??"")}'.`);let J=Q?.item&&"disabled"in Q.item?Q.item.disabled!==!0:void 0,X=$.enabled??(J!==void 0?!J:void 0);if(X===void 0)throw Error(`Cannot determine toggle state for skill '${$.id??$.name??bJ($.path??"")}'; provide an explicit enabled value or a resolvable workspace context.`);return await EK({filePath:W,enabled:X}),await Z?.refreshType("skill"),{snapshot:await this.list({...$,userInstructionService:Z}),changedTypes:["skills"]}});if($.type==="tools"){if(!$.name?.trim())throw Error("Tool settings toggle requires a tool name.");if($.enabled===void 0)x9($.name);else xj($.name,!$.enabled);return{snapshot:await this.list($),changedTypes:["tools"]}}if($.type==="mcp"){let Z=$.name?.trim()||$.id?.trim();if(!Z)throw Error("MCP server settings toggle requires a server name.");let Q=$.path?.trim()||Z0(),W=$.enabled;if(W===void 0){let J=p0({filePath:Q}).find((X)=>X.name===Z);if(!J)throw Error(`Unknown MCP server: ${Z}`);W=J.disabled===!0}return N2({filePath:Q,name:Z,disabled:!W}),{snapshot:await this.list($),changedTypes:["mcp"]}}throw Error(`Settings type '${$.type}' does not support toggles.`)}}function b2(){return new k$}function FF($){return{async list(Z){let Q=$;if(Q.listSettings)return await Q.listSettings(Z);return await b2().list(Z)},async toggle(Z){let Q=$;if(Q.toggleSetting)return await Q.toggleSetting(Z);return await b2().toggle(Z)}}}function AF($){function Z(){let Q=$.pendingPrompts;if(!Q)throw Error("Pending prompt service is not available.");return Q}return{list(Q){return Z().list(Q)},update(Q){return Z().update(Q)},delete(Q){return Z().delete(Q)}}}function fF($){let Z=$.config;return"providerId"in Z?{...$,config:{...Z,...jC($.localRuntime)},localRuntime:$.localRuntime}:$}function yJ($,Z={}){let Q=r4($.config),W=q0(Z.defaultCapabilities,$.capabilities),J=VC(Q.localRuntime,$.localRuntime),X=Z.withExtensionContext?.(J?.extensionContext);if(X)J={...J??{},extensionContext:X};return{...$,...Q,...J?{localRuntime:J}:{},...W?{capabilities:W}:{}}}function jC($){if(!$)return{};let{modelCatalogDefaults:Z,userInstructionService:Q,configExtensions:W,onTeamRestored:J,...X}=$;return X}function VC(...$){let Z={};for(let Q of $)if(Q)Object.assign(Z,Q);return Object.keys(Z).length>0?Z:void 0}_0();function UF($){let Z=$.input.config.telemetry??$.telemetry;if(!Z)return;Z.capture({event:m.SESSION.STARTED,properties:{sessionId:$.sessionId,source:$.input.source??z0.CORE,providerId:$.input.config.providerId,modelId:$.input.config.modelId,enableTools:$.input.config.enableTools,enableSpawnAgent:$.input.config.enableSpawnAgent,enableAgentTeams:$.input.config.enableAgentTeams,clientName:$.clientName,runtimeAddress:$.runtimeAddress}})}function N5($){return!!$&&typeof $==="object"&&!Array.isArray($)}function hJ($){let Z=$?.trim();return Z?Z:void 0}function HC($,Z){let Q=$?.trim();if(!Q)return Z;let W=Date.parse(Q);if(!Number.isFinite(W))return Z;return new Date(W).toISOString()}function DF($,Z){return new Date(new Date($).getTime()+Math.max(0,Math.floor(Z))*1000).toISOString()}function LF($,Z){return new Date(new Date($).getTime()-Math.max(0,Math.floor(Z))*1000).toISOString()}function BC($,Z){if(!$)return Z;return new Date($).getTime()>=new Date(Z).getTime()?$:Z}function GC($,Z){let Q=$.eventId.trim(),W=$.eventType.trim(),J=$.source.trim(),X=hJ($.subject),Y=hJ($.dedupeKey)??`${W}:${J}:${X??Q}`;return{eventId:Q,eventType:W,source:J,subject:X,occurredAt:HC($.occurredAt,Z),workspaceRoot:hJ($.workspaceRoot),payload:N5($.payload)?$.payload:void 0,attributes:N5($.attributes)?$.attributes:void 0,dedupeKey:Y}}function kJ($,Z){if(!Z)return;let Q=Z.split("."),W=$;for(let J of Q){if(!N5(W))return;W=W[J]}return W}function KC($,Z){if($.attributes&&Object.hasOwn($.attributes,Z))return $.attributes[Z];if($.payload&&Object.hasOwn($.payload,Z))return $.payload[Z];let Q={eventId:$.eventId,eventType:$.eventType,source:$.source,subject:$.subject,occurredAt:$.occurredAt,workspaceRoot:$.workspaceRoot,dedupeKey:$.dedupeKey,attributes:$.attributes,payload:$.payload},W=kJ(Q,Z);if(W!==void 0)return W;if($.attributes){let J=kJ($.attributes,Z);if(J!==void 0)return J}if($.payload)return kJ($.payload,Z);return}function IQ($,Z){if(Array.isArray(Z))return Z.some((Q)=>IQ($,Q));if(Array.isArray($))return $.some((Q)=>IQ(Q,Z));if(N5(Z)){if(!N5($))return!1;return Object.entries(Z).every(([Q,W])=>IQ($[Q],W))}return Object.is($,Z)}function FC($,Z){if(!Z||Object.keys(Z).length===0)return!0;return Object.entries(Z).every(([Q,W])=>IQ(KC($,Q),W))}class IJ{store;nowFn;logger;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now()),this.logger=$.logger}ingestEvent($){let Z=new Date(this.nowFn()).toISOString(),Q=GC($,Z),W=this.store.insertEventLog(Q,{receivedAtIso:Z});if(!W.created)return this.logger?.debug("cron.event.duplicate",{eventId:W.record.eventId,eventType:W.record.eventType,source:W.record.source}),{event:W.record,duplicate:!0,matchedSpecs:[],queuedRuns:[],suppressions:[{reason:"duplicate_event",dedupeKey:W.record.dedupeKey}]};try{let J=this.store.listEventSpecsForType(Q.eventType),X=[],Y=[],j=[];for(let B of J){if(!FC(Q,B.filters)){X.push({specId:B.specId,externalId:B.externalId,reason:"filter_mismatch",dedupeKey:Q.dedupeKey});continue}Y.push(B);let G=this.materializeForSpec(B,Q,W.record.receivedAt);if(G.run)j.push(G.run);else X.push({specId:B.specId,externalId:B.externalId,reason:G.reason,dedupeKey:Q.dedupeKey})}let V=Y.length===0?"unmatched":j.length>0?"queued":"suppressed";this.store.updateEventLogProcessing(W.record.eventId,{status:V,matchedSpecCount:Y.length,queuedRunCount:j.length,suppressedCount:X.filter((B)=>B.reason!=="filter_mismatch").length});let H=this.store.getEventLog(W.record.eventId);return this.logger?.debug("cron.event.processed",{eventId:W.record.eventId,eventType:W.record.eventType,status:V,matchedSpecCount:Y.length,queuedRunCount:j.length}),{event:H??W.record,duplicate:!1,matchedSpecs:Y,queuedRuns:j,suppressions:X}}catch(J){if(this.store.updateEventLogProcessing(W.record.eventId,{status:"failed",error:J instanceof Error?J.message:String(J)}),this.logger?.error)this.logger.error("cron.event.failed",{eventId:W.record.eventId,eventType:W.record.eventType,error:J});throw J}}materializeForSpec($,Z,Q){let W=Z.dedupeKey??Z.eventId,J=$.debounceSeconds??0;if(J>0){let V=this.store.findQueuedEventRunForDedupe({specId:$.specId,dedupeKey:W});if(V){let H=BC(V.scheduledFor,DF(Q,J)),B=this.store.updateQueuedEventRunForDebounce({runId:V.runId,triggerEventId:Z.eventId,scheduledFor:H});if(B)return{run:B,reason:"dedupe_window"}}}let X=$.dedupeWindowSeconds??0;if(X>0&&this.store.hasRecentEventRunForDedupe({specId:$.specId,dedupeKey:W,sinceIso:LF(Q,X)}))return{reason:"dedupe_window"};let Y=$.cooldownSeconds??0;if(Y>0&&this.store.hasRecentEventRunForSpec({specId:$.specId,sinceIso:LF(Q,Y)}))return{reason:"cooldown"};return{run:this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"event",triggerEventId:Z.eventId,scheduledFor:J>0?DF(Q,J):Q}),reason:"dedupe_window"}}}import{existsSync as CC,readdirSync as PC,readFileSync as SC,statSync as bC}from"node:fs";import{relative as yC}from"node:path";import{resolveCronSpecsDir as hC}from"@cline/shared/storage";import{createHash as AC}from"node:crypto";import fC from"yaml";function UC($){let Z=$.replace(/\\/g,"/");if(Z.startsWith("events/")&&Z.endsWith(".event.md"))return"event";if(Z.endsWith(".cron.md"))return"schedule";return"one_off"}function DC($){let Z=$.replace(/\r\n/g,`
|
|
495
496
|
`);if(!Z.startsWith(`---
|
|
496
497
|
`))return{frontmatter:void 0,body:$};let Q=Z.slice(4),W=Q.indexOf(`
|
|
497
498
|
---`);if(W===-1)return{frontmatter:void 0,body:$};let J=Q.slice(0,W),X=Q.slice(W+4);if(X.startsWith(`
|
|
498
|
-
`))X=X.slice(1);return{frontmatter:J,body:X}}function i0($){if(typeof $!=="string")return;let Z=$.trim();return Z.length>0?Z:void 0}function
|
|
499
|
-
`),Q.update(Z),Q.digest("hex")}function _w($){return($.split("/").pop()??$).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}var zw=["schedule","timezone"],Ow=["event","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds","maxParallel"],qw=["cwd"];function TF($,Z,Q,W,J){return{externalId:$,relativePath:$,triggerKind:Z,body:Q,contentHash:_F(W,Q),error:J}}function A1($,Z,Q,W,J,X){return{externalId:$,relativePath:Z,triggerKind:Q,body:W,contentHash:J,error:X}}function zF($){let Z=$.relativePath.replace(/\\/g,"/"),Q=Gw(Z),{frontmatter:W,body:J}=Kw($.raw),X={};if(W!==void 0&&W.trim().length>0)try{let U=Bw.parse(W);if(U&&typeof U==="object"&&!Array.isArray(U))X=U;else if(U!==null&&U!==void 0)return TF(Z,Q,J,{},"frontmatter must be a YAML mapping")}catch(U){return TF(Z,Q,J,{},U instanceof Error?`failed to parse frontmatter: ${U.message}`:"failed to parse frontmatter")}let Y=_F(X,J),j=i0(X.id),V=j??Z;if(Q!=="schedule"){for(let U of zw)if(X[U]!==void 0)return A1(V,Z,Q,J,Y,`field "${U}" is only allowed on *.cron.md specs`)}for(let U of qw)if(X[U]!==void 0)return A1(V,Z,Q,J,Y,`field "${U}" is no longer supported; cron specs use workspaceRoot as cwd`);if(Q!=="event"){for(let U of Ow)if(X[U]!==void 0)return A1(V,Z,Q,J,Y,`field "${U}" is only allowed on .event.md specs`)}let H=i0(X.prompt),B=J.trim(),G=H??(B.length>0?B:void 0);if(!G)return A1(V,Z,Q,J,Y,"prompt is required (frontmatter `prompt` or markdown body)");let K=i0(X.workspaceRoot);if(!K)return A1(V,Z,Q,J,Y,"workspaceRoot is required");let F,A;try{F=Dw(X.tools),A=Lw(X.extensions)}catch(U){return A1(V,Z,Q,J,Y,U instanceof Error?U.message:String(U))}let D=fw(X.mode);if(X.mode!==void 0&&D===void 0)return A1(V,Z,Q,J,Y,"mode must be one of: act, plan, yolo");let f={id:j,title:i0(X.title)??j??_w(Z),prompt:G,workspaceRoot:K,mode:D??"yolo",systemPrompt:i0(X.systemPrompt),modelSelection:Aw(X.modelSelection),maxIterations:xJ(X.maxIterations),timeoutSeconds:xJ(X.timeoutSeconds),tools:F,notesDirectory:i0(X.notesDirectory),extensions:A,source:i0(X.source)??"user",tags:Fw(X.tags),enabled:typeof X.enabled==="boolean"?X.enabled:!0,metadata:mJ(X.metadata)},T;if(Q==="schedule"){let U=i0(X.schedule);if(!U)return A1(V,Z,Q,J,Y,"schedule is required for *.cron.md specs");let z=i0(X.timezone);try{Uj(U,z)}catch(_){return A1(V,Z,Q,J,Y,_ instanceof Error?_.message:String(_))}T={...f,triggerKind:"schedule",schedule:U,timezone:z}}else if(Q==="event"){let U=i0(X.event);if(!U)return A1(V,Z,Q,J,Y,"event is required for .event.md specs");T={...f,triggerKind:"event",event:U,filters:mJ(X.filters),debounceSeconds:gJ(X.debounceSeconds),dedupeWindowSeconds:gJ(X.dedupeWindowSeconds),cooldownSeconds:gJ(X.cooldownSeconds),maxParallel:xJ(X.maxParallel)}}else T={...f,triggerKind:"one_off"};return{externalId:V,relativePath:Z,triggerKind:Q,body:J,contentHash:Y,spec:T}}function Pw($,Z){return Cw($,Z).replace(/\\/g,"/")}function Sw($){if(!Mw($))return[];let Z=[],Q=[$];while(Q.length>0){let W=Q.pop();if(!W)continue;let J;try{J=Rw(W,{withFileTypes:!0})}catch{continue}for(let X of J){let Y=`${W}/${X.name}`;if(X.isDirectory()){if(X.name==="reports")continue;Q.push(Y);continue}if(!X.isFile())continue;if(!X.name.endsWith(".md"))continue;Z.push(Y)}}return Z}class cJ{store;cronDir;constructor($){this.store=$.store,this.cronDir=ww($.specs??($.workspaceRoot?{scope:"workspace",workspaceRoot:$.workspaceRoot}:void 0))}getCronDir(){return this.cronDir}async reconcileAll(){let $={scanned:0,upserted:0,invalidParses:0,removed:0,changes:[]},Z=Sw(this.cronDir),Q=new Set;for(let J of Z){let X=Pw(this.cronDir,J);Q.add(X),$.scanned+=1;let Y=await this.reconcileFile(X,J);if(Y){if($.changes.push(Y),$.upserted+=1,Y.parse.error)$.invalidParses+=1}}let W=this.store.listSpecs({includeRemoved:!1,limit:1e4});for(let J of W)if(!Q.has(J.sourcePath))this.handleFileDeleted(J),$.removed+=1;return this.refreshScheduleNextRunAt(),$}async reconcileFile($,Z){let Q=this.store.getSpecBySourcePath($),W,J;try{W=Ew(Z,"utf8"),J=Nw(Z).mtimeMs}catch{return}let Y=zF({relativePath:$,raw:W}),j=this.store.upsertSpec({externalId:Y.externalId,sourcePath:$,triggerKind:Y.triggerKind,sourceMtimeMs:J,sourceHash:Y.contentHash,parseStatus:Y.error?"invalid":"valid",parseError:Y.error,spec:Y.spec});if(!Y.error&&Y.triggerKind==="schedule"&&j.record.enabled)this.applyScheduleNextRunAt(j.record,{forceReset:!Q||Q.removed||!Q.enabled||Q.scheduleExpr!==j.record.scheduleExpr||Q.timezone!==j.record.timezone});return{relativePath:$,result:j,parse:Y}}handleFileDeleted($){this.store.markSpecRemoved($.specId),this.store.cancelQueuedRunsForSpec($.specId)}refreshScheduleNextRunAt(){let $=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let Z of $)this.applyScheduleNextRunAt(Z,{forceReset:!1})}applyScheduleNextRunAt($,Z){if(!$.scheduleExpr)return;if(!Z.forceReset&&$.nextRunAt)return;try{let Q=Date.now(),W=$.lastRunAt?Math.max(Q,new Date($.lastRunAt).getTime()):Q,J=n$($.scheduleExpr,W,$.timezone),X=new Date(J).toISOString();if($.nextRunAt!==X)this.store.updateSpecNextRunAt($.specId,X)}catch{}}}import{existsSync as bw,mkdirSync as yw,watch as hw}from"node:fs";import{relative as kw,resolve as Iw}from"node:path";var xw=250;class uJ{reconciler;debounceMs;onError;onReconciled;watcher;pending=new Map;disposed=!1;constructor($){this.reconciler=$.reconciler,this.debounceMs=Math.max(0,$.debounceMs??xw),this.onError=$.onError??(()=>{}),this.onReconciled=$.onReconciled??(()=>{})}start(){if(this.disposed)throw Error("CronWatcher disposed");if(this.watcher)return;let $=this.reconciler.getCronDir();try{yw($,{recursive:!0}),this.watcher=hw($,{recursive:!0},(Z,Q)=>{if(!Q)return;let W=String(Q).replace(/\\/g,"/");if(!W.endsWith(".md"))return;if(W.startsWith("reports/"))return;this.scheduleReconcile(W)}),this.watcher.on("error",this.onError)}catch(Z){this.onError(Z)}}stop(){for(let $ of this.pending.values())clearTimeout($);this.pending.clear(),this.watcher?.close(),this.watcher=void 0}dispose(){this.disposed=!0,this.stop()}scheduleReconcile($){let Z=this.pending.get($);if(Z)clearTimeout(Z);let Q=setTimeout(()=>{this.pending.delete($),this.reconcileNow($)},this.debounceMs);this.pending.set($,Q)}async reconcileNow($){try{let Z=Iw(this.reconciler.getCronDir(),$);if(!bw(Z)){await this.reconciler.reconcileAll(),await this.onReconciled();return}let Q=kw(this.reconciler.getCronDir(),Z).replace(/\\/g,"/");await this.reconciler.reconcileFile(Q,Z),await this.onReconciled()}catch(Z){this.onError(Z)}}}class w5{store;reconciler;watcher;eventIngress;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new x4({dbPath:$.dbPath});let Z=$.specs;this.reconciler=new cJ({store:this.store,specs:Z}),this.materializer=new P4({store:this.store}),this.eventIngress=new IJ({store:this.store,logger:$.logger}),this.runner=new y4({store:this.store,materializer:this.materializer,runtimeHandlers:$.runtimeHandlers,workspaceRoot:$.workspaceRoot,specs:Z,logger:$.logger,pollIntervalMs:$.pollIntervalMs,claimLeaseSeconds:$.claimLeaseSeconds,globalMaxConcurrency:$.globalMaxConcurrency}),this.watcher=new uJ({reconciler:this.reconciler,debounceMs:$.watcherDebounceMs,onReconciled:()=>{this.materializer.materializeAll()},onError:(Q)=>{let W=$.logger;if(W)if(W.error)W.error("cron.watcher.failed",{error:Q});else W.log("cron.watcher.failed",{error:Q})}})}async start(){if(this.disposed)throw Error("CronService disposed");if(this.started)return;this.started=!0,await this.reconciler.reconcileAll(),this.materializer.materializeAll(),this.watcher.start(),await this.runner.start()}async stop(){this.watcher.stop(),await this.runner.stop(),this.started=!1}async dispose(){if(this.disposed)return;this.disposed=!0,this.watcher.dispose(),await this.runner.dispose(),this.store.close()}listSpecs($){return this.store.listSpecs($)}getSpec($){return this.store.getSpec($)}listRuns($){return this.store.listRuns($)}getRun($){return this.store.getRun($)}listActiveRuns(){return this.store.listRuns({status:"running",limit:200})}listUpcomingRuns($=20){return this.store.listRuns({status:"queued",limit:$})}async reconcileNow(){await this.reconciler.reconcileAll(),this.materializer.materializeAll()}ingestEvent($){return this.eventIngress.ingestEvent($)}listEventLogs($){return this.store.listEventLogs($)}getEventLog($){return this.store.getEventLog($)}}var PF={};N(PF,{manifestToSessionRecord:()=>xQ,listSessionHistoryFromBackend:()=>rJ,listSessionHistory:()=>gQ,hydrateSessionHistory:()=>wF});import{readdir as cw,readFile as EF}from"node:fs/promises";import{join as NF}from"node:path";import{formatDisplayUserInput as uw,normalizeUserInput as dw}from"@cline/shared";import{resolveSessionDataDir as CF}from"@cline/shared/storage";import{existsSync as gw}from"node:fs";import{readFile as mw}from"node:fs/promises";import{formatDisplayUserInput as OF}from"@cline/shared";class P5{listeners=new Set;subscribe($,Z){let Q={listener:$,sessionId:Z?.sessionId?.trim()||void 0};return this.listeners.add(Q),()=>{this.listeners.delete(Q)}}emit($){let Z=$.payload.sessionId?.trim();for(let Q of this.listeners){if(Q.sessionId&&Q.sessionId!==Z)continue;Q.listener($)}}get size(){return this.listeners.size}}async function x$($){let Z=$?.trim();if(!Z||!gw(Z))return[];try{let Q=(await mw(Z,"utf8")).trim();if(!Q)return[];let W=JSON.parse(Q);if(Array.isArray(W))return qF(W);if(W&&typeof W==="object"&&!Array.isArray(W)){let J=W.messages;if(Array.isArray(J))return qF(J)}return[]}catch{return[]}}function vw($){if($.role!=="user")return $;if(typeof $.content==="string")return{...$,content:OF($.content)};return{...$,content:$.content.map((Z)=>{if(Z.type!=="text"||typeof Z.text!=="string")return Z;return{...Z,text:OF(Z.text)}})}}function qF($){return $.map(vw)}function dJ($){return $?{...$}:void 0}async function MF($,Z){if(!($.hookName==="tool_call"||!!$.parent_agent_id))return;await Z.queueSpawnRequest($);let W=await Z.upsertSubagentSessionFromHook($);if(!W)return;await Z.appendSubagentHookAudit(W,$),await Z.applySubagentStatus(W,$)}function S5($){if(typeof $!=="string")return;let Z=$.trim();return Z.length>0?Z:void 0}function n0($){let Z=S5($);if(!Z)return;return Z.toLowerCase()==="unknown"?void 0:Z}function IQ($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function lw($){if(!$||typeof $!=="object"||Array.isArray($))return;return{...$}}function pJ($){let Z=$??200;return Number.isFinite(Z)?Math.max(0,Math.floor(Z)):200}function pw($){if($===0)return 0;return Math.min(Math.max($*2,20),2000)}function rw($){return $.isSubagent!==!0&&!S5($.parentSessionId)}function iw($){let Z=$.match(/\d{13,}/g);if(!Z||Z.length===0)return 0;let Q=0;for(let W of Z){let J=Number.parseInt(W,10);if(Number.isFinite(J)&&J>Q)Q=J}return Q}function xQ($){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 nw($){let Z=pJ($);if(Z===0)return[];let Q=CF(),J=(await cw(Q,{withFileTypes:!0}).catch(()=>[])).filter((Y)=>Y.isDirectory()).map((Y)=>({entry:Y,recency:iw(Y.name.trim())})).sort((Y,j)=>j.recency-Y.recency||j.entry.name.localeCompare(Y.entry.name));return(await Promise.all(J.map(async({entry:Y})=>{let j=Y.name.trim();if(!j)return;let V=NF(Q,j,`${j}.json`),H=await EF(V,"utf8").catch(()=>{return});if(!H)return;let B;try{B=JSON.parse(H)}catch{return}let G=b0.safeParse(B);if(!G.success)return;return xQ(G.data)}))).filter((Y)=>Boolean(Y)).sort((Y,j)=>j.startedAt.localeCompare(Y.startedAt)).slice(0,Z)}async function aw($,Z,Q){let W=pJ(Z);if(W===0)return await $.listSessions(0),[];let J=Q.includeSubagents?W:pw(W),X=await $.listSessions(J);return(Q.includeSubagents?X:X.filter(rw)).slice(0,W)}function sw($){if(typeof $==="string")return $.trim();let Z=[];for(let Q of $){if(!Q||typeof Q!=="object")continue;let W=Q;if(W.type!=="text")continue;let J=W.text?.trim();if(J)Z.push(J)}return Z.join(`
|
|
500
|
-
`).trim()}function
|
|
501
|
-
`)[0]??J);return ow(X,50)}return}function ew($){let Z=0;for(let Q of $)Z+=IQ(Q.metrics?.cost)??0;return Z}function $P($){let Z,Q;for(let W=$.length-1;W>=0;W-=1){let J=$[W];if(!Z)Z=n0(J.modelInfo?.provider);if(!Q)Q=n0(J.modelInfo?.id);if(Z&&Q)break}return{provider:Z,model:Q}}function ZP($){return n0($?.provider)??n0($?.provider&&typeof $.provider==="object"&&!Array.isArray($.provider)?$.provider.id:void 0)}function QP($){return n0($?.model)??n0($?.model&&typeof $.model==="object"&&!Array.isArray($.model)?$.model.id:void 0)}function lJ($,Z){let Q=lw($.metadata),W=S5(Z?.title)??S5(Q?.title),J=IQ(Z?.totalCost)??IQ(Q?.totalCost),X=Q||W!==void 0||J!==void 0?{...Q??{},...W!==void 0?{title:W}:{},...J!==void 0?{totalCost:J}:{}}:void 0;return{...$,provider:n0(Z?.provider)??n0($.provider)??ZP(Q)??"",model:n0(Z?.model)??n0($.model)??QP(Q)??"",metadata:X}}function WP($){let Z=$.content;if(!Array.isArray(Z))return!1;return Z.some((Q)=>!!Q&&typeof Q==="object"&&Q.type==="tool-call")}function JP($,Z){if($.status!=="running"||$.interactive!==!0)return!1;let Q=Z.at(-1);return Q?.role==="assistant"&&!WP(Q)}async function XP($,Z){return await Promise.all(Z.map(async(Q)=>{if(Q.status!=="running"||Q.interactive!==!0)return Q;let W=await $.readSessionMessages(Q.sessionId);return JP(Q,W)?{...Q,status:"idle"}:Q}))}async function wF($,Z){return await Promise.all(Z.map(async(Q)=>{let W=lJ(Q),J=Boolean(S5(W.metadata?.title)),X=Boolean(n0(W.provider)),Y=Boolean(n0(W.model)),j=IQ(W.metadata?.totalCost),V=j!==void 0&&j>0;if(J&&X&&Y&&V)return W;let H=await $.readSessionMessages(Q.sessionId);if(H.length===0)return W;let B=$P(H),G=ew(H);return lJ(Q,{title:J?void 0:tw(H),provider:X?void 0:B.provider,model:Y?void 0:B.model,totalCost:V||G<=0?void 0:G})}))}async function gQ($,Z={}){let Q=pJ(Z.limit),W=Z.includeSubagents===!0,J=await aw($,Q,{includeSubagents:W}),X=Z.includeManifestFallback===!0&&J.length<Q?await nw(Math.min(Math.max(Q*2,100),500)):[],Y=new Map;for(let H of[...J,...X]){if(Y.has(H.sessionId))continue;Y.set(H.sessionId,H)}let j=X.length===0?J:Array.from(Y.values()).sort((H,B)=>B.startedAt.localeCompare(H.startedAt)).slice(0,Q),V=await XP($,j);if(Z.hydrate===!1)return V.map((H)=>lJ(H));return await wF($,V)}async function YP($){let Z=$.trim();if(!Z)return;let Q=NF(CF(),Z,`${Z}.json`),W=await EF(Q,"utf8").catch(()=>{return});if(!W)return;try{let J=b0.safeParse(JSON.parse(W));return J.success?J.data.messages_path:void 0}catch{return}}async function rJ($,Z={}){let Q=new Map;return await gQ({listSessions:async(J)=>{let X=await $.listSessions(J);Q.clear();for(let Y of X)Q.set(Y.sessionId,Y);return X.map(m6)},readSessionMessages:async(J)=>{let X=Q.get(J)?.messagesPath??await YP(J);return await x$(X)}},Z)}var DA={};N(DA,{resolveSessionBackend:()=>KX,createRuntimeHost:()=>F4});import{captureSdkError as fA}from"@cline/shared";var dF={};N(dF,{HubRuntimeHost:()=>o1});import{captureSdkError as bF,createSessionId as yF,HUB_CHECKPOINT_CAPABILITY as BP,HUB_COMPACTION_CAPABILITY as GP,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as KP,HUB_HOOK_CAPABILITY_PREFIX as FP,HUB_MISTAKE_LIMIT_CAPABILITY as AP,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as fP,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as UP,isHubToolExecutorName as DP}from"@cline/shared";var SF={};N(SF,{createCoreSessionSnapshot:()=>f1,coreSessionSnapshotToRecord:()=>mQ});function jP($){return $?JSON.parse(JSON.stringify($)):void 0}function VP($){return $?JSON.parse(JSON.stringify($)):void 0}function HP($){let Z=$?.checkpoint&&typeof $.checkpoint==="object"&&!Array.isArray($.checkpoint)?$.checkpoint:void 0,W=(Array.isArray(Z?.history)?Z.history:[]).filter((Y)=>!!Y&&typeof Y==="object"&&!Array.isArray(Y)).flatMap((Y)=>{let j=typeof Y.ref==="string"?Y.ref.trim():"",V=Number(Y.createdAt),H=Number(Y.runCount);if(!j||!Number.isFinite(V)||!Number.isInteger(H))return[];return[{ref:j,createdAt:V,runCount:H,...Y.kind==="stash"||Y.kind==="commit"?{kind:Y.kind}:{}}]}),J=W.at(-1),X=$?.checkpointEnabled===!0?!0:void 0;if(!X&&W.length===0)return;return{...X?{enabled:X}:{},...J?{latest:J}:{},history:W}}function f1($){let{session:Z}=$,Q=jP(Z.metadata);return{version:1,sessionId:Z.sessionId,source:Z.source,status:Z.status,createdAt:Z.startedAt,updatedAt:Z.updatedAt,endedAt:Z.endedAt??null,exitCode:Z.exitCode??null,interactive:Z.interactive,workspace:{cwd:Z.cwd,root:Z.workspaceRoot},model:{providerId:Z.provider,modelId:Z.model},capabilities:{enableTools:Z.enableTools,enableSpawn:Z.enableSpawn,enableTeams:Z.enableTeams},lineage:{...Z.parentSessionId?{parentSessionId:Z.parentSessionId}:{},...Z.parentAgentId?{parentAgentId:Z.parentAgentId}:{},...Z.agentId?{agentId:Z.agentId}:{},...Z.conversationId?{conversationId:Z.conversationId}:{},isSubagent:Z.isSubagent},...Z.teamName?{team:{name:Z.teamName}}:{},...Z.prompt?{prompt:Z.prompt}:{},...Q?{metadata:Q}:{},...Z.messagesPath?{artifacts:{messagesPath:Z.messagesPath}}:{},...$.messages?{messages:VP($.messages)}:{},...$.usage?{usage:{...$.usage}}:{},...$.aggregateUsage?{aggregateUsage:{...$.aggregateUsage}}:{},...(()=>{let W=HP(Q);return W?{checkpoint:W}:{}})()}}function mQ($){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 X4($){if(!$)return;return JSON.parse(JSON.stringify($))}var TP=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function hF($){if(!$||typeof $!=="object"||Array.isArray($))return;return JSON.parse(JSON.stringify($))}function kF($){if(!$)return;let{userInstructionService:Z,...Q}=$;return JSON.parse(JSON.stringify(Q))}function IF($){let Z=$&&typeof $==="object"&&!Array.isArray($)?$:{};return{agentId:typeof Z.agentId==="string"?Z.agentId:"",conversationId:typeof Z.conversationId==="string"?Z.conversationId:"",iteration:typeof Z.iteration==="number"?Z.iteration:0,metadata:Z.metadata&&typeof Z.metadata==="object"&&!Array.isArray(Z.metadata)?Z.metadata:void 0}}function h2($,Z,Q){$.manifest.push(Z),$.handlers.set(Z.capabilityName,Q)}function xF($,Z){let Q={manifest:[],handlers:new Map};for(let J of Object.keys(Z.toolExecutors??{}).filter(DP)){let X=Z.toolExecutors?.[J];if(typeof X!=="function")continue;h2(Q,{kind:"toolExecutor",executor:J,capabilityName:`${fP}${J}`},async({payload:Y,abortSignal:j})=>{let V=Array.isArray(Y.args)?[...Y.args]:[],H={...IF(Y.context),signal:j};return{result:await X(...V,H)}})}for(let J of $?.extraTools??[])h2(Q,{kind:"tool",name:J.name,description:J.description,inputSchema:X4(J.inputSchema)??{},...J.lifecycle?{lifecycle:X4(J.lifecycle)}:{},capabilityName:`${KP}${J.name}`},async({payload:X,abortSignal:Y,progress:j})=>{let V={...IF(X.context),signal:Y};return{result:await J.execute(X.input,{...V,emitUpdate:(B)=>{j({update:B})}})}});let W=$?.hooks;if(W)for(let J of TP){let X=W[J];if(typeof X!=="function")continue;h2(Q,{kind:"hook",name:J,capabilityName:`${FP}${J}`},async({payload:Y})=>({control:await X(Y.context)}))}if($?.compaction?.compact){let J=$.compaction.compact;h2(Q,{kind:"compaction",capabilityName:GP,config:hF($.compaction)},async({payload:X})=>({result:await J(X.context)}))}if($?.checkpoint?.createCheckpoint){let J=$.checkpoint.createCheckpoint;h2(Q,{kind:"checkpoint",capabilityName:BP,config:hF($.checkpoint)},async({payload:X})=>({result:await J(X.context)}))}if($?.onConsecutiveMistakeLimitReached){let J=$.onConsecutiveMistakeLimitReached;h2(Q,{kind:"mistakeLimit",capabilityName:AP},async({payload:X})=>({result:await J(X.context)}))}if($?.userInstructionService){let J=$.userInstructionService;h2(Q,{kind:"userInstructionService",capabilityName:UP},async()=>{return await J.start().catch(()=>{}),{snapshot:{records:{skill:J.listRecords("skill"),rule:J.listRecords("rule"),workflow:J.listRecords("workflow")},runtimeCommands:J.listRuntimeCommands()}}})}return Q}function cF($){if(typeof $==="string"&&$.trim())return $.trim();if($ instanceof Error)return $.message.trim()||void 0;if($&&typeof $==="object"&&"message"in $){let Z=$.message;if(typeof Z==="string"&&Z.trim())return Z.trim()}return}function LP($){return cF($)??"Capability request was cancelled."}function _P($){if(typeof $!=="string")return $;try{return JSON.parse($)}catch{return $}}function zP($){return $==="completed"||$==="max_iterations"||$==="aborted"||$==="mistake_limit"||$==="error"}function OP($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$,Q=typeof Z.inputTokens==="number"?Z.inputTokens:void 0,W=typeof Z.outputTokens==="number"?Z.outputTokens:void 0;if(Q===void 0||W===void 0)return;return{inputTokens:Q,outputTokens:W,cacheReadTokens:typeof Z.cacheReadTokens==="number"?Z.cacheReadTokens:0,cacheWriteTokens:typeof Z.cacheWriteTokens==="number"?Z.cacheWriteTokens:0,totalCost:typeof Z.totalCost==="number"?Z.totalCost:0}}function gF($){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 iJ($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function g$($,Z){return iJ($?.[Z])??0}function qP($){let Z=$?.delta&&typeof $.delta==="object"?$.delta:void 0,Q=$?.totals&&typeof $.totals==="object"?$.totals:void 0,W=$?.agent&&typeof $.agent==="object"?$.agent:void 0,J=W?.teamRole==="teammate"||W?.teamRole==="lead"?W.teamRole:void 0;return{event:{type:"usage",agentId:typeof W?.agentId==="string"?W.agentId:void 0,conversationId:typeof W?.conversationId==="string"?W.conversationId:void 0,parentAgentId:typeof W?.parentAgentId==="string"?W.parentAgentId:void 0,inputTokens:g$(Z,"inputTokens"),outputTokens:g$(Z,"outputTokens"),cacheReadTokens:g$(Z,"cacheReadTokens"),cacheWriteTokens:g$(Z,"cacheWriteTokens"),cost:iJ(Z?.totalCost),totalInputTokens:g$(Q,"inputTokens"),totalOutputTokens:g$(Q,"outputTokens"),totalCacheReadTokens:g$(Q,"cacheReadTokens"),totalCacheWriteTokens:g$(Q,"cacheWriteTokens"),totalCost:iJ(Q?.totalCost)},teamAgentId:typeof W?.teamAgentId==="string"?W.teamAgentId:void 0,teamRole:J}}function MP($){let Z=$?.result&&typeof $.result==="object"&&!Array.isArray($.result)?$.result:void 0,Q=$?.reason??Z?.finishReason,W=zP(Q)?Q:Q==="failed"?"error":"completed",J=OP($?.usage??Z?.usage);return{type:"done",reason:W,text:typeof $?.text==="string"?$.text:typeof Z?.text==="string"?Z.text:"",iterations:typeof $?.iterations==="number"?$.iterations:typeof Z?.iterations==="number"?Z.iterations:0,usage:J}}function vQ($,Z){return $.error?.message??`hub command failed: ${Z}`}function b5($){switch($){case"idle":case"completed":return"completed";case"failed":return"failed";case"aborted":return"cancelled";default:return"running"}}function uF($){let Z=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):void 0;return{sessionId:$.sessionId,parentSessionId:typeof Z?.parentSessionId==="string"?Z.parentSessionId:void 0,agentId:$.runtimeSession?.agentId||(typeof Z?.agentId==="string"?Z.agentId:void 0),parentAgentId:typeof Z?.parentAgentId==="string"?Z.parentAgentId:void 0,conversationId:typeof Z?.conversationId==="string"?Z.conversationId:void 0,isSubagent:typeof Z?.isSubagent==="boolean"?Z.isSubagent:!1,source:typeof Z?.source==="string"?Z.source:_0.CORE,pid:typeof Z?.pid==="number"?Z.pid:void 0,startedAt:new Date($.createdAt).toISOString(),endedAt:b5($.status)==="running"?void 0:new Date($.updatedAt).toISOString(),exitCode:b5($.status)==="completed"?0:b5($.status)==="failed"?1:void 0,status:b5($.status),interactive:Z?.interactive===!0,provider:typeof Z?.provider==="string"?Z.provider:"hub",model:typeof Z?.model==="string"?Z.model:"hub",cwd:$.cwd?.trim()||$.workspaceRoot,workspaceRoot:$.workspaceRoot,teamName:typeof Z?.teamName==="string"?Z.teamName:void 0,enableTools:$.runtimeOptions?.enableTools??Z?.enableTools===!0,enableSpawn:$.runtimeOptions?.enableSpawn??Z?.enableSpawn===!0,enableTeams:$.runtimeOptions?.enableTeams??Z?.enableTeams===!0,prompt:typeof Z?.prompt==="string"?Z.prompt:void 0,metadata:Z,updatedAt:new Date($.updatedAt).toISOString(),messagesPath:typeof Z?.messagesPath==="string"?Z.messagesPath:void 0,hookPath:typeof Z?.hookPath==="string"?Z.hookPath:void 0}}function m$($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$;return Z.version===1&&typeof Z.sessionId==="string"?JSON.parse(JSON.stringify(Z)):void 0}function RP($){let Z=m$($?.snapshot);if(Z)return mQ(Z);let Q=$?.session;return Q?uF(Q):void 0}function mF($,Z,Q){let W=Q?.workspaceRoot?.trim()||Z.config.workspaceRoot||Z.config.cwd;return b0.parse({version:1,session_id:$,source:Z.source??_0.CORE,pid:process.pid,started_at:new Date(Q?.createdAt??Date.now()).toISOString(),status:b5(Q?.status),interactive:Z.interactive===!0,provider:Z.config.providerId,model:Z.config.modelId,cwd:Q?.cwd?.trim()||Z.config.cwd,workspace_root:W,team_name:Z.config.teamName,enable_tools:Z.config.enableTools,enable_spawn:Z.config.enableSpawnAgent,enable_teams:Z.config.enableAgentTeams,prompt:Z.prompt?.trim()||void 0,metadata:Z.sessionMetadata&&Object.keys(Z.sessionMetadata).length>0?Z.sessionMetadata:void 0})}function vF($,Z){return b0.parse({version:1,session_id:$.sessionId,source:$.source,pid:process.pid,started_at:$.createdAt,status:$.status,interactive:$.interactive,provider:$.model.providerId,model:$.model.modelId,cwd:$.workspace.cwd,workspace_root:$.workspace.root,team_name:$.team?.name,enable_tools:$.capabilities.enableTools,enable_spawn:$.capabilities.enableSpawn,enable_teams:$.capabilities.enableTeams,prompt:($.prompt??Z.prompt?.trim())||void 0,metadata:$.metadata,messages_path:$.artifacts?.messagesPath})}class o1{runtimeAddress;pendingPrompts;client;clientOptions;clientContext;events=new P5;sessionCapabilities=new Map;sessionClientContributionHandlers=new Map;sessionSubscriptions=new Map;pendingApprovalToolCallIds=new Set;agentDoneEmittedForCurrentRunBySession=new Set;activeCapabilityAbortControllers=new Map;defaultCapabilities;telemetry;constructor($,Z){this.clientContext=Z,this.clientOptions={authToken:$.authToken,clientType:$.clientType??"core-hub-runtime",displayName:$.displayName??"core hub runtime",workspaceRoot:Z?.workspaceRoot,cwd:Z?.cwd},this.defaultCapabilities=q0($.capabilities)??{},this.telemetry=$.telemetry,this.runtimeAddress=$.url,this.pendingPrompts={list:(Q)=>this.requestPendingPromptsList(Q),update:(Q)=>this.requestPendingPromptUpdate(Q),delete:(Q)=>this.requestPendingPromptDelete(Q)},this.client=this.createClient($.url)}createClient($){return new W1({...this.clientOptions,url:$})}async replaceClient($){let Z=this.client;this.client=this.createClient($),this.runtimeAddress=$,await Promise.resolve(Z.dispose()).catch(()=>{return})}async recoverLocalHubStartupDeadlock($){if(!s9($,"session.create"))return!1;let Z=await o9({url:this.client.getUrl(),workspaceRoot:this.clientContext?.workspaceRoot,cwd:this.clientContext?.cwd}).catch(()=>{return});if(!Z)return!1;return await this.replaceClient(Z),!0}registerPlannedSession($,Z,Q){if(this.sessionCapabilities.set($,Z),Q.size>0)this.sessionClientContributionHandlers.set($,Q);this.ensureSessionSubscription($)}cleanupPlannedSession($){this.sessionCapabilities.delete($),this.sessionClientContributionHandlers.delete($),this.disposeSessionSubscription($)}async connect(){await this.client.connect()}async startSession($){let Z=this.resolveCapabilities($),Q=xF($.localRuntime,Z),W=$.config.sessionId?.trim()||yF(),J=()=>this.client.command("session.create",{workspaceRoot:$.config.workspaceRoot?.trim()||$.config.cwd,cwd:$.config.cwd,sessionConfig:X4({...$.config,sessionId:W}),metadata:{...$.sessionMetadata??{},source:$.source??_0.CORE,provider:$.config.providerId,model:$.config.modelId,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,teamName:$.config.teamName,prompt:$.prompt,interactive:$.interactive===!0},runtimeOptions:{...Q.manifest.length>0?{clientContributions:Q.manifest}:{},...$.localRuntime?.configExtensions?{configExtensions:$.localRuntime.configExtensions}:{}},toolPolicies:X4($.toolPolicies),initialMessages:$.initialMessages});this.registerPlannedSession(W,Z,Q.handlers);let X;try{X=await J()}catch(H){if(this.cleanupPlannedSession(W),await this.recoverLocalHubStartupDeadlock(H)){this.registerPlannedSession(W,Z,Q.handlers);try{X=await J()}catch(B){throw this.cleanupPlannedSession(W),B}}else throw H}let Y=m$(X.payload?.snapshot),j=X.payload?.session,V=(Y?.sessionId??j?.sessionId)?.trim();if(!V)throw this.cleanupPlannedSession(W),Error("Hub runtime did not return a session id.");if(V!==W)this.cleanupPlannedSession(W),this.registerPlannedSession(V,Z,Q.handlers);return{sessionId:V,manifest:Y?vF(Y,$):mF(V,$,j),manifestPath:"",messagesPath:"",result:void 0}}async restoreSession($){let Z=$.sessionId.trim();if(!Z)throw Error("sessionId is required");let Q=$.restore?.messages!==!1;if(Q&&!$.start)throw Error("start is required when restore.messages is true");let W=$.start,J=W?this.resolveCapabilities(W):void 0,X=W?xF(W.localRuntime,J??{}):{manifest:[],handlers:new Map},Y=W?W.config.sessionId?.trim()||yF():void 0;if(Y&&J)this.sessionCapabilities.set(Y,J);if(Y&&X.handlers.size>0)this.sessionClientContributionHandlers.set(Y,X.handlers),this.ensureSessionSubscription(Y);let j;try{j=await this.client.command("session.restore",{sessionId:Z,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...W?{workspaceRoot:W.config.workspaceRoot?.trim()||W.config.cwd,cwd:W.config.cwd??$.cwd,sessionConfig:X4({...W.config,sessionId:Y}),metadata:{...W.sessionMetadata??{},source:W.source??_0.CORE,provider:W.config.providerId,model:W.config.modelId,enableTools:W.config.enableTools,enableSpawn:W.config.enableSpawnAgent,enableTeams:W.config.enableAgentTeams,teamName:W.config.teamName,prompt:W.prompt,interactive:W.interactive===!0},runtimeOptions:{...X.manifest.length>0?{clientContributions:X.manifest}:{},...W.localRuntime?.configExtensions?{configExtensions:W.localRuntime.configExtensions}:{}},toolPolicies:X4(W.toolPolicies)}:{}},Z)}catch(F){if(Y)this.sessionCapabilities.delete(Y),this.sessionClientContributionHandlers.delete(Y),this.disposeSessionSubscription(Y);throw F}if(!j.ok){let F=typeof j.payload?.error==="string"?j.payload.error:"session.restore failed";if(Y)this.sessionCapabilities.delete(Y),this.sessionClientContributionHandlers.delete(Y),this.disposeSessionSubscription(Y);throw Error(F)}let V=m$(j.payload?.snapshot),H=j.payload?.session,B=(V?.sessionId??H?.sessionId)?.trim();if(Q&&!B){if(Y)this.sessionCapabilities.delete(Y),this.sessionClientContributionHandlers.delete(Y),this.disposeSessionSubscription(Y);throw Error("Hub checkpoint restore returned no session id")}if(B&&Y&&B!==Y)this.sessionCapabilities.delete(Y),this.sessionClientContributionHandlers.delete(Y),this.disposeSessionSubscription(Y);if(B&&J)this.sessionCapabilities.set(B,J);if(B&&X.handlers.size>0)this.sessionClientContributionHandlers.set(B,X.handlers);if(B)this.ensureSessionSubscription(B);let G=Array.isArray(j.payload?.messages)?j.payload.messages:void 0,K=j.payload?.checkpoint;if(!K)throw Error("Hub checkpoint restore returned no checkpoint");return{sessionId:B,startResult:B?{sessionId:B,manifest:V?vF(V,W??{}):mF(B,W??{},H),manifestPath:"",messagesPath:"",result:void 0}:void 0,messages:G,checkpoint:K}}async runTurn($){return this.ensureSessionSubscription($.sessionId),(await this.client.command("run.start",{sessionId:$.sessionId,input:$.prompt,mode:$.mode,attachments:($.userImages?.length??0)>0||($.userFiles?.length??0)>0?{...$.userImages?.length?{userImages:$.userImages}:{},...$.userFiles?.length?{userFiles:$.userFiles}:{}}:void 0,delivery:$.delivery,timeoutMs:$.timeoutMs},$.sessionId,{timeoutMs:null})).payload?.result}async requestPendingPromptsList($){this.ensureSessionSubscription($.sessionId);let Z=await this.client.command("session.pending_prompts",{sessionId:$.sessionId},$.sessionId);return Array.isArray(Z.payload?.prompts)?Z.payload.prompts:[]}async requestPendingPromptUpdate($){this.ensureSessionSubscription($.sessionId);let Z=await this.client.command("session.update_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(Z.payload?.prompts)?Z.payload.prompts:[],prompt:Z.payload?.prompt,updated:Z.payload?.updated===!0}}async requestPendingPromptDelete($){this.ensureSessionSubscription($.sessionId);let Z=await this.client.command("session.remove_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(Z.payload?.prompts)?Z.payload.prompts:[],prompt:Z.payload?.prompt,removed:Z.payload?.removed===!0}}async getAccumulatedUsage($){let Z=await this.client.command("session.get",{includeSnapshot:!0},$),Q=m$(Z.payload?.snapshot);if(Q){let Y=Q.usage?{...Q.usage}:void 0,j=Q.aggregateUsage?{...Q.aggregateUsage}:void 0;return Y||j?{usage:Y,aggregateUsage:j}:void 0}let W=Z.payload?.session,J=gF(W?.usage),X=gF(W?.aggregateUsage);return J||X?{usage:J,aggregateUsage:X}:void 0}async abort($,Z){await this.client.command("run.abort",{sessionId:$,reason:cF(Z)},$)}async stopSession($){this.sessionCapabilities.delete($),this.disposeSessionSubscription($),await this.client.command("session.detach",{sessionId:$},$)}async dispose(){for(let[$,Z]of this.sessionSubscriptions){Z();try{await this.client.command("session.detach",{sessionId:$},$)}catch{}}this.sessionSubscriptions.clear(),this.sessionCapabilities.clear(),this.agentDoneEmittedForCurrentRunBySession.clear();for(let $ of this.activeCapabilityAbortControllers.values())$.abort("Hub runtime host disposed.");this.activeCapabilityAbortControllers.clear(),await this.client.dispose()}async getSession($){let Z;try{Z=await this.client.command("session.get",void 0,$)}catch(Q){if(I1(Q))return;throw Q}return RP(Z.payload)}async listSessions($=100){let Z=await this.client.command("session.list",{limit:$}),Q=Array.isArray(Z.payload?.snapshots)?Z.payload.snapshots.flatMap((J)=>{let X=m$(J);return X?[mQ(X)]:[]}):[];if(Q.length>0)return Q;return(Z.payload?.sessions??[]).map(uF)}async listSettings($){let Z=await this.client.command("settings.list",kF($));if(!Z.ok)throw Error(vQ(Z,"settings.list"));return Z.payload?.snapshot}async toggleSetting($){let Z=await this.client.command("settings.toggle",kF($));if(!Z.ok)throw Error(vQ(Z,"settings.toggle"));return{snapshot:Z.payload?.snapshot,changedTypes:Array.isArray(Z.payload?.changedTypes)?Z.payload.changedTypes:[]}}async deleteSession($){return this.sessionCapabilities.delete($),this.disposeSessionSubscription($),(await this.client.command("session.delete",{sessionId:$})).payload?.deleted===!0}async updateSession($,Z){let Q={...Z.metadata??{}};if(typeof Z.prompt==="string")Q.prompt=Z.prompt;if(typeof Z.title==="string")Q.title=Z.title;return{updated:(await this.client.command("session.update",{sessionId:$,metadata:Q})).ok}}async readSessionMessages($){let Z=$.trim();if(!Z)return[];let Q=await this.client.command("session.messages",{sessionId:Z},Z);if(!Q.ok)throw bF(this.telemetry,{component:"core",operation:"hub.runtime_host.read_session_messages",error:Error(vQ(Q,"session.messages")),severity:Q.error?.code==="session_not_found"?"warn":"error",handled:!0,context:{command:"session.messages",sessionId:Z,errorCode:Q.error?.code,runtimeAddress:this.runtimeAddress}}),Error(vQ(Q,"session.messages"));let W=Q.payload?.messages;return Array.isArray(W)?W:[]}async dispatchHookEvent($){await this.client.command("session.hook",{payload:$})}subscribe($,Z){return this.events.subscribe($,Z)}ensureSessionSubscription($){let Z=$.trim();if(!Z||this.sessionSubscriptions.has(Z))return;let Q=this.client.subscribe((W)=>{this.handleHubEvent(W)},{sessionId:Z});this.sessionSubscriptions.set(Z,typeof Q==="function"?Q:()=>{})}disposeSessionSubscription($){let Z=$.trim();if(!Z)return;this.sessionSubscriptions.get(Z)?.(),this.sessionSubscriptions.delete(Z),this.agentDoneEmittedForCurrentRunBySession.delete(Z)}resolveCapabilities($){return q0(this.defaultCapabilities,$.capabilities)??{}}emitToolCallContentStart($){this.events.emit({type:"agent_event",payload:{sessionId:$.sessionId,event:{type:"content_start",contentType:"tool",toolCallId:$.toolCallId,toolName:$.toolName,input:$.toolInput}}})}emitAgentDoneIfNeeded($){if(this.agentDoneEmittedForCurrentRunBySession.has($.sessionId))return;this.agentDoneEmittedForCurrentRunBySession.add($.sessionId),this.events.emit({type:"agent_event",payload:{sessionId:$.sessionId,event:MP($.payload)}})}handleHubEvent($){let Z=$.sessionId?.trim();if($.event==="capability.requested"){this.handleCapabilityRequest($).catch((Q)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_request",Q,$)});return}if($.event==="capability.resolved"){this.handleCapabilityResolved($);return}if($.event==="approval.requested"){this.handleApprovalRequested($).catch((Q)=>{this.captureDetachedHubEventError("hub.runtime_host.approval_request",Q,$)});return}if(!Z)return;switch($.event){case"run.started":{this.agentDoneEmittedForCurrentRunBySession.delete(Z);let Q=m$($.payload?.snapshot),W=$.payload?.session;if(Q)this.events.emit({type:"session_snapshot",payload:{sessionId:Z,snapshot:Q}});this.events.emit({type:"status",payload:{sessionId:Z,status:W?.status??"running"}});return}case"iteration.started":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"iteration_start",iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0}}});return}case"iteration.finished":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"iteration_end",iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0,hadToolCalls:$.payload?.hadToolCalls===!0,toolCallCount:typeof $.payload?.toolCallCount==="number"?$.payload.toolCallCount:0}}});return}case"assistant.delta":{let Q=typeof $.payload?.text==="string"?$.payload.text:"";if(!Q)return;this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_start",contentType:"text",text:Q}}});return}case"assistant.finished":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_end",contentType:"text",text:typeof $.payload?.text==="string"?$.payload.text:void 0}}});return}case"reasoning.delta":{let Q=typeof $.payload?.text==="string"?$.payload.text:"",W=$.payload?.redacted===!0;if(!Q&&!W)return;this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_start",contentType:"reasoning",reasoning:Q,redacted:W}}});return}case"reasoning.finished":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_end",contentType:"reasoning",reasoning:typeof $.payload?.reasoning==="string"?$.payload.reasoning:void 0}}});return}case"agent.done":{this.emitAgentDoneIfNeeded({sessionId:Z,payload:$.payload});return}case"usage.updated":{let Q=qP($.payload);this.events.emit({type:"agent_event",payload:{sessionId:Z,event:Q.event,teamAgentId:Q.teamAgentId,teamRole:Q.teamRole}});return}case"tool.started":{let Q=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(Q&&this.pendingApprovalToolCallIds.delete(Q))return;this.emitToolCallContentStart({sessionId:Z,toolCallId:Q,toolName:typeof $.payload?.toolName==="string"?$.payload.toolName:void 0,toolInput:$.payload?.input});return}case"tool.finished":{let Q=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(Q)this.pendingApprovalToolCallIds.delete(Q);this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_end",contentType:"tool",toolCallId:Q,toolName:typeof $.payload?.toolName==="string"?$.payload.toolName:void 0,output:$.payload?.output,error:typeof $.payload?.error==="string"?$.payload.error:void 0}}});return}case"session.created":case"session.updated":case"session.attached":case"session.detached":{let Q=m$($.payload?.snapshot),W=$.payload?.session;if(Q)this.events.emit({type:"session_snapshot",payload:{sessionId:Z,snapshot:Q}});this.events.emit({type:"status",payload:{sessionId:Z,status:W?.status??"running"}});return}case"session.pending_prompts":{this.events.emit({type:"pending_prompts",payload:{sessionId:Z,prompts:Array.isArray($.payload?.prompts)?$.payload.prompts:[]}});return}case"session.pending_prompt_submitted":{let Q=$.payload?.prompt;if(!Q)return;this.events.emit({type:"pending_prompt_submitted",payload:{sessionId:Z,id:Q.id,prompt:Q.prompt,delivery:Q.delivery,attachmentCount:Q.attachmentCount,userImages:Q.userImages,userFiles:Q.userFiles}});return}case"run.completed":case"run.failed":case"run.aborted":{let Q=m$($.payload?.snapshot),W=typeof $.payload?.reason==="string"?$.payload.reason:$.event==="run.aborted"?"aborted":$.event==="run.failed"?"error":"completed";if(this.emitAgentDoneIfNeeded({sessionId:Z,payload:{...$.payload,reason:W}}),Q?.interactive===!0&&H0(Q.status))return;this.events.emit({type:"ended",payload:{sessionId:Z,reason:W,ts:$.timestamp??Date.now()}});return}default:return}}captureDetachedHubEventError($,Z,Q){try{bF(this.telemetry,{component:"core",operation:$,error:Z,severity:"warn",handled:!0,context:{event:Q.event,sessionId:Q.sessionId,runtimeAddress:this.runtimeAddress}})}catch{}}async handleCapabilityRequest($){let Z=$.sessionId?.trim();if(!Z)return;let Q=typeof $.payload?.targetClientId==="string"?$.payload.targetClientId:void 0;if(Q&&Q!==this.client.getClientId())return;let W=typeof $.payload?.requestId==="string"?$.payload.requestId:"",J=typeof $.payload?.capabilityName==="string"?$.payload.capabilityName:"";if(!W)return;let X=this.sessionClientContributionHandlers.get(Z)?.get(J);if(!X){await this.client.command("capability.respond",{requestId:W,ok:!1,error:`No client contribution handler registered for capability ${J} in session ${Z}.`},Z).catch(()=>{});return}let Y=$.payload?.payload&&typeof $.payload.payload==="object"&&!Array.isArray($.payload.payload)?$.payload.payload:{},j=new AbortController;this.activeCapabilityAbortControllers.set(W,j);let V=(H)=>{this.client.command("capability.progress",{requestId:W,payload:H},Z).catch((B)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_progress",B,$)})};try{let H=await X({payload:Y,abortSignal:j.signal,progress:V});if(j.signal.aborted)return;await this.client.command("capability.respond",{requestId:W,ok:!0,payload:H},Z)}catch(H){if(j.signal.aborted)return;await this.client.command("capability.respond",{requestId:W,ok:!1,error:H instanceof Error?H.message:String(H)},Z)}finally{this.activeCapabilityAbortControllers.delete(W)}}handleCapabilityResolved($){if($.payload?.cancelled!==!0)return;let Z=typeof $.payload.requestId==="string"?$.payload.requestId.trim():"";if(!Z)return;let Q=this.activeCapabilityAbortControllers.get(Z);if(!Q)return;Q.abort(LP($.payload.error))}async handleApprovalRequested($){let Z=$.sessionId?.trim();if(!Z)return;let Q=this.sessionCapabilities.get(Z)?.requestToolApproval??this.defaultCapabilities.requestToolApproval;if(!Q)return;let W=typeof $.payload?.approvalId==="string"?$.payload.approvalId.trim():"",J=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:"",X=typeof $.payload?.toolName==="string"?$.payload.toolName:"";if(!W||!J||!X)return;let Y=$.payload?.policy&&typeof $.payload.policy==="object"&&!Array.isArray($.payload.policy)?$.payload.policy:{autoApprove:!1},j=_P($.payload?.inputJson);this.pendingApprovalToolCallIds.add(J),this.emitToolCallContentStart({sessionId:Z,toolCallId:J,toolName:X,toolInput:j});let V=await Promise.resolve(Q({sessionId:Z,agentId:typeof $.payload?.agentId==="string"?$.payload.agentId:"",conversationId:typeof $.payload?.conversationId==="string"?$.payload.conversationId:Z,iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0,toolCallId:J,toolName:X,input:j,policy:Y})).catch((H)=>({approved:!1,reason:H instanceof Error?H.message:`Tool approval request failed: ${String(H)}`}));await this.client.command("approval.respond",{approvalId:W,approved:V.approved,reason:V.reason},Z).catch(()=>{})}}var lF={};N(lF,{RemoteRuntimeHost:()=>Y4});class Y4 extends o1{constructor($){super({url:G$($.endpoint),authToken:$.authToken,clientType:$.clientType??"core-remote-runtime",displayName:$.displayName??"core remote runtime",capabilities:$.capabilities},{workspaceRoot:$.workspaceRoot,cwd:$.cwd})}}var pF={};N(pF,{SqliteSessionStore:()=>D1});import{existsSync as EP,mkdirSync as NP}from"node:fs";import{join as CP}from"node:path";import{asBool as y5,asOptionalString as U1,asString as t1,ensureSessionSchema as wP,loadSqliteDb as PP,nowIso as cQ,toBoolInt as h5}from"@cline/shared/db";import{resolveDbDataDir as SP}from"@cline/shared/storage";class D1{sessionsDirPath;db;constructor($={}){this.sessionsDirPath=$.sessionsDir??SP()}init(){this.getRawDb()}ensureSessionsDir(){if(!EP(this.sessionsDirPath))NP(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}sessionDbPath(){return CP(this.ensureSessionsDir(),"sessions.db")}getRawDb(){if(this.db)return this.db;let $=PP(this.sessionDbPath());return wP($,{includeLegacyMigrations:!0}),this.db=$,$}close(){this.db?.close?.(),this.db=void 0}run($,Z=[]){return this.getRawDb().prepare($).run(...Z)}queryOne($,Z=[]){return this.getRawDb().prepare($).get(...Z)??void 0}queryAll($,Z=[]){return this.getRawDb().prepare($).all(...Z)}create($){let Z=cQ();this.run(`INSERT OR REPLACE INTO sessions (
|
|
499
|
+
`))X=X.slice(1);return{frontmatter:J,body:X}}function i0($){if(typeof $!=="string")return;let Z=$.trim();return Z.length>0?Z:void 0}function LC($){if(!Array.isArray($))return;let Z=$.map((Q)=>typeof Q==="string"?Q.trim():"").filter((Q)=>Q.length>0);return Z.length>0?Z:void 0}function mJ($){if(!$||typeof $!=="object"||Array.isArray($))return;return $}function _C($){let Z=mJ($);if(!Z)return;let Q=i0(Z.providerId),W=i0(Z.modelId);if(Q===void 0&&W===void 0)return;return{providerId:Q,modelId:W}}function zC($){if(typeof $!=="string")return;let Z=$.trim().toLowerCase();if(Z==="act"||Z==="plan"||Z==="yolo")return Z;return}function zF($,Z={}){let Q=Array.isArray($)?$:typeof $==="string"?$.split(","):void 0;if(!Q)return;let W=[...new Set(Q.map((J)=>typeof J==="string"?J.trim():"").filter((J)=>J.length>0))];if(Array.isArray($)&&Z.preserveEmptyArray)return W;return W.length>0?W:void 0}var TC=new Set(X$);function OC($){let Z=zF($,{preserveEmptyArray:!0});if(!Z)return;let Q=Z.filter((W)=>!TC.has(W));if(Q.length>0)throw Error(`unknown tool(s): ${Q.join(", ")}`);return Z}var qC=new Set(["rules","skills","plugins"]);function MC($){let Z=zF($,{preserveEmptyArray:!0});if(!Z)return;let Q=Z.filter((W)=>!qC.has(W));if(Q.length>0)throw Error(`unknown extension(s): ${Q.join(", ")}`);return Z}function xJ($){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return;return Math.floor($)}function gJ($){if(typeof $!=="number"||!Number.isFinite($)||$<0)return;return Math.floor($)}function vJ($){if($===null||typeof $!=="object")return JSON.stringify($??null);if(Array.isArray($))return`[${$.map((Q)=>vJ(Q)).join(",")}]`;let Z=Object.entries($).filter(([,Q])=>Q!==void 0);return Z.sort(([Q],[W])=>Q<W?-1:Q>W?1:0),`{${Z.map(([Q,W])=>`${JSON.stringify(Q)}:${vJ(W)}`).join(",")}}`}function TF($,Z){let Q=AC("sha256");return Q.update(vJ($)),Q.update(`
|
|
500
|
+
`),Q.update(Z),Q.digest("hex")}function RC($){return($.split("/").pop()??$).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}var EC=["schedule","timezone"],NC=["event","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds","maxParallel"],wC=["cwd"];function _F($,Z,Q,W,J){return{externalId:$,relativePath:$,triggerKind:Z,body:Q,contentHash:TF(W,Q),error:J}}function A1($,Z,Q,W,J,X){return{externalId:$,relativePath:Z,triggerKind:Q,body:W,contentHash:J,error:X}}function OF($){let Z=$.relativePath.replace(/\\/g,"/"),Q=UC(Z),{frontmatter:W,body:J}=DC($.raw),X={};if(W!==void 0&&W.trim().length>0)try{let U=fC.parse(W);if(U&&typeof U==="object"&&!Array.isArray(U))X=U;else if(U!==null&&U!==void 0)return _F(Z,Q,J,{},"frontmatter must be a YAML mapping")}catch(U){return _F(Z,Q,J,{},U instanceof Error?`failed to parse frontmatter: ${U.message}`:"failed to parse frontmatter")}let Y=TF(X,J),j=i0(X.id),V=j??Z;if(Q!=="schedule"){for(let U of EC)if(X[U]!==void 0)return A1(V,Z,Q,J,Y,`field "${U}" is only allowed on *.cron.md specs`)}for(let U of wC)if(X[U]!==void 0)return A1(V,Z,Q,J,Y,`field "${U}" is no longer supported; cron specs use workspaceRoot as cwd`);if(Q!=="event"){for(let U of NC)if(X[U]!==void 0)return A1(V,Z,Q,J,Y,`field "${U}" is only allowed on .event.md specs`)}let H=i0(X.prompt),B=J.trim(),G=H??(B.length>0?B:void 0);if(!G)return A1(V,Z,Q,J,Y,"prompt is required (frontmatter `prompt` or markdown body)");let K=i0(X.workspaceRoot);if(!K)return A1(V,Z,Q,J,Y,"workspaceRoot is required");let F,A;try{F=OC(X.tools),A=MC(X.extensions)}catch(U){return A1(V,Z,Q,J,Y,U instanceof Error?U.message:String(U))}let L=zC(X.mode);if(X.mode!==void 0&&L===void 0)return A1(V,Z,Q,J,Y,"mode must be one of: act, plan, yolo");let f={id:j,title:i0(X.title)??j??RC(Z),prompt:G,workspaceRoot:K,mode:L??"yolo",systemPrompt:i0(X.systemPrompt),modelSelection:_C(X.modelSelection),maxIterations:xJ(X.maxIterations),timeoutSeconds:xJ(X.timeoutSeconds),tools:F,notesDirectory:i0(X.notesDirectory),extensions:A,source:i0(X.source)??"user",tags:LC(X.tags),enabled:typeof X.enabled==="boolean"?X.enabled:!0,metadata:mJ(X.metadata)},D;if(Q==="schedule"){let U=i0(X.schedule);if(!U)return A1(V,Z,Q,J,Y,"schedule is required for *.cron.md specs");let T=i0(X.timezone);try{Uj(U,T)}catch(z){return A1(V,Z,Q,J,Y,z instanceof Error?z.message:String(z))}D={...f,triggerKind:"schedule",schedule:U,timezone:T}}else if(Q==="event"){let U=i0(X.event);if(!U)return A1(V,Z,Q,J,Y,"event is required for .event.md specs");D={...f,triggerKind:"event",event:U,filters:mJ(X.filters),debounceSeconds:gJ(X.debounceSeconds),dedupeWindowSeconds:gJ(X.dedupeWindowSeconds),cooldownSeconds:gJ(X.cooldownSeconds),maxParallel:xJ(X.maxParallel)}}else D={...f,triggerKind:"one_off"};return{externalId:V,relativePath:Z,triggerKind:Q,body:J,contentHash:Y,spec:D}}function kC($,Z){return yC($,Z).replace(/\\/g,"/")}function IC($){if(!CC($))return[];let Z=[],Q=[$];while(Q.length>0){let W=Q.pop();if(!W)continue;let J;try{J=PC(W,{withFileTypes:!0})}catch{continue}for(let X of J){let Y=`${W}/${X.name}`;if(X.isDirectory()){if(X.name==="reports")continue;Q.push(Y);continue}if(!X.isFile())continue;if(!X.name.endsWith(".md"))continue;Z.push(Y)}}return Z}class cJ{store;cronDir;constructor($){this.store=$.store,this.cronDir=hC($.specs??($.workspaceRoot?{scope:"workspace",workspaceRoot:$.workspaceRoot}:void 0))}getCronDir(){return this.cronDir}async reconcileAll(){let $={scanned:0,upserted:0,invalidParses:0,removed:0,changes:[]},Z=IC(this.cronDir),Q=new Set;for(let J of Z){let X=kC(this.cronDir,J);Q.add(X),$.scanned+=1;let Y=await this.reconcileFile(X,J);if(Y){if($.changes.push(Y),$.upserted+=1,Y.parse.error)$.invalidParses+=1}}let W=this.store.listSpecs({includeRemoved:!1,limit:1e4});for(let J of W)if(!Q.has(J.sourcePath))this.handleFileDeleted(J),$.removed+=1;return this.refreshScheduleNextRunAt(),$}async reconcileFile($,Z){let Q=this.store.getSpecBySourcePath($),W,J;try{W=SC(Z,"utf8"),J=bC(Z).mtimeMs}catch{return}let Y=OF({relativePath:$,raw:W}),j=this.store.upsertSpec({externalId:Y.externalId,sourcePath:$,triggerKind:Y.triggerKind,sourceMtimeMs:J,sourceHash:Y.contentHash,parseStatus:Y.error?"invalid":"valid",parseError:Y.error,spec:Y.spec});if(!Y.error&&Y.triggerKind==="schedule"&&j.record.enabled)this.applyScheduleNextRunAt(j.record,{forceReset:!Q||Q.removed||!Q.enabled||Q.scheduleExpr!==j.record.scheduleExpr||Q.timezone!==j.record.timezone});return{relativePath:$,result:j,parse:Y}}handleFileDeleted($){this.store.markSpecRemoved($.specId),this.store.cancelQueuedRunsForSpec($.specId)}refreshScheduleNextRunAt(){let $=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let Z of $)this.applyScheduleNextRunAt(Z,{forceReset:!1})}applyScheduleNextRunAt($,Z){if(!$.scheduleExpr)return;if(!Z.forceReset&&$.nextRunAt)return;try{let Q=Date.now(),W=$.lastRunAt?Math.max(Q,new Date($.lastRunAt).getTime()):Q,J=i$($.scheduleExpr,W,$.timezone),X=new Date(J).toISOString();if($.nextRunAt!==X)this.store.updateSpecNextRunAt($.specId,X)}catch{}}}import{existsSync as xC,mkdirSync as gC,watch as mC}from"node:fs";import{relative as vC,resolve as cC}from"node:path";var uC=250;class uJ{reconciler;debounceMs;onError;onReconciled;watcher;pending=new Map;disposed=!1;constructor($){this.reconciler=$.reconciler,this.debounceMs=Math.max(0,$.debounceMs??uC),this.onError=$.onError??(()=>{}),this.onReconciled=$.onReconciled??(()=>{})}start(){if(this.disposed)throw Error("CronWatcher disposed");if(this.watcher)return;let $=this.reconciler.getCronDir();try{gC($,{recursive:!0}),this.watcher=mC($,{recursive:!0},(Z,Q)=>{if(!Q)return;let W=String(Q).replace(/\\/g,"/");if(!W.endsWith(".md"))return;if(W.startsWith("reports/"))return;this.scheduleReconcile(W)}),this.watcher.on("error",this.onError)}catch(Z){this.onError(Z)}}stop(){for(let $ of this.pending.values())clearTimeout($);this.pending.clear(),this.watcher?.close(),this.watcher=void 0}dispose(){this.disposed=!0,this.stop()}scheduleReconcile($){let Z=this.pending.get($);if(Z)clearTimeout(Z);let Q=setTimeout(()=>{this.pending.delete($),this.reconcileNow($)},this.debounceMs);this.pending.set($,Q)}async reconcileNow($){try{let Z=cC(this.reconciler.getCronDir(),$);if(!xC(Z)){await this.reconciler.reconcileAll(),await this.onReconciled();return}let Q=vC(this.reconciler.getCronDir(),Z).replace(/\\/g,"/");await this.reconciler.reconcileFile(Q,Z),await this.onReconciled()}catch(Z){this.onError(Z)}}}class w5{store;reconciler;watcher;eventIngress;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new I4({dbPath:$.dbPath});let Z=$.specs;this.reconciler=new cJ({store:this.store,specs:Z}),this.materializer=new C4({store:this.store}),this.eventIngress=new IJ({store:this.store,logger:$.logger}),this.runner=new b4({store:this.store,materializer:this.materializer,runtimeHandlers:$.runtimeHandlers,workspaceRoot:$.workspaceRoot,specs:Z,logger:$.logger,pollIntervalMs:$.pollIntervalMs,claimLeaseSeconds:$.claimLeaseSeconds,globalMaxConcurrency:$.globalMaxConcurrency}),this.watcher=new uJ({reconciler:this.reconciler,debounceMs:$.watcherDebounceMs,onReconciled:()=>{this.materializer.materializeAll()},onError:(Q)=>{let W=$.logger;if(W)if(W.error)W.error("cron.watcher.failed",{error:Q});else W.log("cron.watcher.failed",{error:Q})}})}async start(){if(this.disposed)throw Error("CronService disposed");if(this.started)return;this.started=!0,await this.reconciler.reconcileAll(),this.materializer.materializeAll(),this.watcher.start(),await this.runner.start()}async stop(){this.watcher.stop(),await this.runner.stop(),this.started=!1}async dispose(){if(this.disposed)return;this.disposed=!0,this.watcher.dispose(),await this.runner.dispose(),this.store.close()}listSpecs($){return this.store.listSpecs($)}getSpec($){return this.store.getSpec($)}listRuns($){return this.store.listRuns($)}getRun($){return this.store.getRun($)}listActiveRuns(){return this.store.listRuns({status:"running",limit:200})}listUpcomingRuns($=20){return this.store.listRuns({status:"queued",limit:$})}async reconcileNow(){await this.reconciler.reconcileAll(),this.materializer.materializeAll()}ingestEvent($){return this.eventIngress.ingestEvent($)}listEventLogs($){return this.store.listEventLogs($)}getEventLog($){return this.store.getEventLog($)}}var SF={};N(SF,{manifestToSessionRecord:()=>gQ,listSessionHistoryFromBackend:()=>rJ,listSessionHistory:()=>mQ,hydrateSessionHistory:()=>PF});import{readdir as rC,readFile as NF}from"node:fs/promises";import{join as wF}from"node:path";import{formatDisplayUserInput as iC,normalizeUserInput as nC}from"@cline/shared";import{resolveSessionDataDir as CF}from"@cline/shared/storage";import{existsSync as dC}from"node:fs";import{readFile as lC}from"node:fs/promises";import{formatDisplayUserInput as qF}from"@cline/shared";class C5{listeners=new Set;subscribe($,Z){let Q={listener:$,sessionId:Z?.sessionId?.trim()||void 0};return this.listeners.add(Q),()=>{this.listeners.delete(Q)}}emit($){let Z=$.payload.sessionId?.trim();for(let Q of this.listeners){if(Q.sessionId&&Q.sessionId!==Z)continue;Q.listener($)}}get size(){return this.listeners.size}}async function I$($){let Z=$?.trim();if(!Z||!dC(Z))return[];try{let Q=(await lC(Z,"utf8")).trim();if(!Q)return[];let W=JSON.parse(Q);if(Array.isArray(W))return MF(W);if(W&&typeof W==="object"&&!Array.isArray(W)){let J=W.messages;if(Array.isArray(J))return MF(J)}return[]}catch{return[]}}function pC($){if($.role!=="user")return $;if(typeof $.content==="string")return{...$,content:qF($.content)};return{...$,content:$.content.map((Z)=>{if(Z.type!=="text"||typeof Z.text!=="string")return Z;return{...Z,text:qF(Z.text)}})}}function MF($){return $.map(pC)}function dJ($){return $?{...$}:void 0}async function RF($,Z){if(!($.hookName==="tool_call"||!!$.parent_agent_id))return;await Z.queueSpawnRequest($);let W=await Z.upsertSubagentSessionFromHook($);if(!W)return;await Z.appendSubagentHookAudit(W,$),await Z.applySubagentStatus(W,$)}function P5($){if(typeof $!=="string")return;let Z=$.trim();return Z.length>0?Z:void 0}function n0($){let Z=P5($);if(!Z)return;return Z.toLowerCase()==="unknown"?void 0:Z}function xQ($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function aC($){if(!$||typeof $!=="object"||Array.isArray($))return;return{...$}}function pJ($){let Z=$??200;return Number.isFinite(Z)?Math.max(0,Math.floor(Z)):200}function sC($){if($===0)return 0;return Math.min(Math.max($*2,20),2000)}function oC($){return $.isSubagent!==!0&&!P5($.parentSessionId)}function tC($){let Z=$.match(/\d{13,}/g);if(!Z||Z.length===0)return 0;let Q=0;for(let W of Z){let J=Number.parseInt(W,10);if(Number.isFinite(J)&&J>Q)Q=J}return Q}function gQ($){return{sessionId:$.session_id,source:$.source,pid:$.pid,startedAt:$.started_at,endedAt:$.ended_at??null,exitCode:$.exit_code??null,status:$.status,interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspaceRoot:$.workspace_root,teamName:$.team_name,enableTools:$.enable_tools,enableSpawn:$.enable_spawn,enableTeams:$.enable_teams,isSubagent:!1,prompt:$.prompt,metadata:$.metadata,messagesPath:$.messages_path,updatedAt:$.ended_at??$.started_at}}async function eC($){let Z=pJ($);if(Z===0)return[];let Q=CF(),J=(await rC(Q,{withFileTypes:!0}).catch(()=>[])).filter((Y)=>Y.isDirectory()).map((Y)=>({entry:Y,recency:tC(Y.name.trim())})).sort((Y,j)=>j.recency-Y.recency||j.entry.name.localeCompare(Y.entry.name));return(await Promise.all(J.map(async({entry:Y})=>{let j=Y.name.trim();if(!j)return;let V=wF(Q,j,`${j}.json`),H=await NF(V,"utf8").catch(()=>{return});if(!H)return;let B;try{B=JSON.parse(H)}catch{return}let G=b0.safeParse(B);if(!G.success)return;return gQ(G.data)}))).filter((Y)=>Boolean(Y)).sort((Y,j)=>j.startedAt.localeCompare(Y.startedAt)).slice(0,Z)}async function $P($,Z,Q){let W=pJ(Z);if(W===0)return await $.listSessions(0),[];let J=Q.includeSubagents?W:sC(W),X=await $.listSessions(J);return(Q.includeSubagents?X:X.filter(oC)).slice(0,W)}function ZP($){if(typeof $==="string")return $.trim();let Z=[];for(let Q of $){if(!Q||typeof Q!=="object")continue;let W=Q;if(W.type!=="text")continue;let J=W.text?.trim();if(J)Z.push(J)}return Z.join(`
|
|
501
|
+
`).trim()}function EF($){return $.replace(/\s+/g," ").trim()}function QP($,Z){if($.length<=Z)return $;return`${$.slice(0,Math.max(0,Z-3)).trimEnd()}...`}function WP($){for(let Z of["user","assistant"])for(let Q of $){if(Q.role!==Z)continue;let W=EF(ZP(Q.content));if(!W)continue;let J=Z==="user"?EF(iC(W)):W,X=nC(J.split(`
|
|
502
|
+
`)[0]??J);return QP(X,50)}return}function JP($){let Z=0;for(let Q of $)Z+=xQ(Q.metrics?.cost)??0;return Z}function XP($){let Z,Q;for(let W=$.length-1;W>=0;W-=1){let J=$[W];if(!Z)Z=n0(J.modelInfo?.provider);if(!Q)Q=n0(J.modelInfo?.id);if(Z&&Q)break}return{provider:Z,model:Q}}function YP($){return n0($?.provider)??n0($?.provider&&typeof $.provider==="object"&&!Array.isArray($.provider)?$.provider.id:void 0)}function jP($){return n0($?.model)??n0($?.model&&typeof $.model==="object"&&!Array.isArray($.model)?$.model.id:void 0)}function lJ($,Z){let Q=aC($.metadata),W=P5(Z?.title)??P5(Q?.title),J=xQ(Z?.totalCost)??xQ(Q?.totalCost),X=Q||W!==void 0||J!==void 0?{...Q??{},...W!==void 0?{title:W}:{},...J!==void 0?{totalCost:J}:{}}:void 0;return{...$,provider:n0(Z?.provider)??n0($.provider)??YP(Q)??"",model:n0(Z?.model)??n0($.model)??jP(Q)??"",metadata:X}}function VP($){let Z=$.content;if(!Array.isArray(Z))return!1;return Z.some((Q)=>!!Q&&typeof Q==="object"&&Q.type==="tool-call")}function HP($,Z){if($.status!=="running"||$.interactive!==!0)return!1;let Q=Z.at(-1);return Q?.role==="assistant"&&!VP(Q)}async function BP($,Z){return await Promise.all(Z.map(async(Q)=>{if(Q.status!=="running"||Q.interactive!==!0)return Q;let W=await $.readSessionMessages(Q.sessionId);return HP(Q,W)?{...Q,status:"idle"}:Q}))}async function PF($,Z){return await Promise.all(Z.map(async(Q)=>{let W=lJ(Q),J=Boolean(P5(W.metadata?.title)),X=Boolean(n0(W.provider)),Y=Boolean(n0(W.model)),j=xQ(W.metadata?.totalCost),V=j!==void 0&&j>0;if(J&&X&&Y&&V)return W;let H=await $.readSessionMessages(Q.sessionId);if(H.length===0)return W;let B=XP(H),G=JP(H);return lJ(Q,{title:J?void 0:WP(H),provider:X?void 0:B.provider,model:Y?void 0:B.model,totalCost:V||G<=0?void 0:G})}))}async function mQ($,Z={}){let Q=pJ(Z.limit),W=Z.includeSubagents===!0,J=await $P($,Q,{includeSubagents:W}),X=Z.includeManifestFallback===!0&&J.length<Q?await eC(Math.min(Math.max(Q*2,100),500)):[],Y=new Map;for(let H of[...J,...X]){if(Y.has(H.sessionId))continue;Y.set(H.sessionId,H)}let j=X.length===0?J:Array.from(Y.values()).sort((H,B)=>B.startedAt.localeCompare(H.startedAt)).slice(0,Q),V=await BP($,j);if(Z.hydrate===!1)return V.map((H)=>lJ(H));return await PF($,V)}async function GP($){let Z=$.trim();if(!Z)return;let Q=wF(CF(),Z,`${Z}.json`),W=await NF(Q,"utf8").catch(()=>{return});if(!W)return;try{let J=b0.safeParse(JSON.parse(W));return J.success?J.data.messages_path:void 0}catch{return}}async function rJ($,Z={}){let Q=new Map;return await mQ({listSessions:async(J)=>{let X=await $.listSessions(J);Q.clear();for(let Y of X)Q.set(Y.sessionId,Y);return X.map(g6)},readSessionMessages:async(J)=>{let X=Q.get(J)?.messagesPath??await GP(J);return await I$(X)}},Z)}var LA={};N(LA,{resolveSessionBackend:()=>KX,createRuntimeHost:()=>K4});import{captureSdkError as UA}from"@cline/shared";var lF={};N(lF,{HubRuntimeHost:()=>o1});import{captureSdkError as yF,createSessionId as hF,HUB_CHECKPOINT_CAPABILITY as fP,HUB_COMPACTION_CAPABILITY as UP,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as DP,HUB_HOOK_CAPABILITY_PREFIX as LP,HUB_MISTAKE_LIMIT_CAPABILITY as _P,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as zP,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as TP,isHubToolExecutorName as OP}from"@cline/shared";var bF={};N(bF,{createCoreSessionSnapshot:()=>f1,coreSessionSnapshotToRecord:()=>vQ});function KP($){return $?JSON.parse(JSON.stringify($)):void 0}function FP($){return $?JSON.parse(JSON.stringify($)):void 0}function AP($){let Z=$?.checkpoint&&typeof $.checkpoint==="object"&&!Array.isArray($.checkpoint)?$.checkpoint:void 0,W=(Array.isArray(Z?.history)?Z.history:[]).filter((Y)=>!!Y&&typeof Y==="object"&&!Array.isArray(Y)).flatMap((Y)=>{let j=typeof Y.ref==="string"?Y.ref.trim():"",V=Number(Y.createdAt),H=Number(Y.runCount);if(!j||!Number.isFinite(V)||!Number.isInteger(H))return[];return[{ref:j,createdAt:V,runCount:H,...Y.kind==="stash"||Y.kind==="commit"?{kind:Y.kind}:{}}]}),J=W.at(-1),X=$?.checkpointEnabled===!0?!0:void 0;if(!X&&W.length===0)return;return{...X?{enabled:X}:{},...J?{latest:J}:{},history:W}}function f1($){let{session:Z}=$,Q=KP(Z.metadata);return{version:1,sessionId:Z.sessionId,source:Z.source,status:Z.status,createdAt:Z.startedAt,updatedAt:Z.updatedAt,endedAt:Z.endedAt??null,exitCode:Z.exitCode??null,interactive:Z.interactive,workspace:{cwd:Z.cwd,root:Z.workspaceRoot},model:{providerId:Z.provider,modelId:Z.model},capabilities:{enableTools:Z.enableTools,enableSpawn:Z.enableSpawn,enableTeams:Z.enableTeams},lineage:{...Z.parentSessionId?{parentSessionId:Z.parentSessionId}:{},...Z.parentAgentId?{parentAgentId:Z.parentAgentId}:{},...Z.agentId?{agentId:Z.agentId}:{},...Z.conversationId?{conversationId:Z.conversationId}:{},isSubagent:Z.isSubagent},...Z.teamName?{team:{name:Z.teamName}}:{},...Z.prompt?{prompt:Z.prompt}:{},...Q?{metadata:Q}:{},...Z.messagesPath?{artifacts:{messagesPath:Z.messagesPath}}:{},...$.messages?{messages:FP($.messages)}:{},...$.usage?{usage:{...$.usage}}:{},...$.aggregateUsage?{aggregateUsage:{...$.aggregateUsage}}:{},...(()=>{let W=AP(Q);return W?{checkpoint:W}:{}})()}}function vQ($){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 J4($){if(!$)return;return JSON.parse(JSON.stringify($))}var qP=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function kF($){if(!$||typeof $!=="object"||Array.isArray($))return;return JSON.parse(JSON.stringify($))}function IF($){if(!$)return;let{userInstructionService:Z,...Q}=$;return JSON.parse(JSON.stringify(Q))}function xF($){let Z=$&&typeof $==="object"&&!Array.isArray($)?$:{};return{agentId:typeof Z.agentId==="string"?Z.agentId:"",conversationId:typeof Z.conversationId==="string"?Z.conversationId:"",iteration:typeof Z.iteration==="number"?Z.iteration:0,metadata:Z.metadata&&typeof Z.metadata==="object"&&!Array.isArray(Z.metadata)?Z.metadata:void 0}}function y2($,Z,Q){$.manifest.push(Z),$.handlers.set(Z.capabilityName,Q)}function gF($,Z){let Q={manifest:[],handlers:new Map};for(let J of Object.keys(Z.toolExecutors??{}).filter(OP)){let X=Z.toolExecutors?.[J];if(typeof X!=="function")continue;y2(Q,{kind:"toolExecutor",executor:J,capabilityName:`${zP}${J}`},async({payload:Y,abortSignal:j})=>{let V=Array.isArray(Y.args)?[...Y.args]:[],H={...xF(Y.context),signal:j};return{result:await X(...V,H)}})}for(let J of $?.extraTools??[])y2(Q,{kind:"tool",name:J.name,description:J.description,inputSchema:J4(J.inputSchema)??{},...J.lifecycle?{lifecycle:J4(J.lifecycle)}:{},capabilityName:`${DP}${J.name}`},async({payload:X,abortSignal:Y,progress:j})=>{let V={...xF(X.context),signal:Y};return{result:await J.execute(X.input,{...V,emitUpdate:(B)=>{j({update:B})}})}});let W=$?.hooks;if(W)for(let J of qP){let X=W[J];if(typeof X!=="function")continue;y2(Q,{kind:"hook",name:J,capabilityName:`${LP}${J}`},async({payload:Y})=>({control:await X(Y.context)}))}if($?.compaction?.compact){let J=$.compaction.compact;y2(Q,{kind:"compaction",capabilityName:UP,config:kF($.compaction)},async({payload:X})=>({result:await J(X.context)}))}if($?.checkpoint?.createCheckpoint){let J=$.checkpoint.createCheckpoint;y2(Q,{kind:"checkpoint",capabilityName:fP,config:kF($.checkpoint)},async({payload:X})=>({result:await J(X.context)}))}if($?.onConsecutiveMistakeLimitReached){let J=$.onConsecutiveMistakeLimitReached;y2(Q,{kind:"mistakeLimit",capabilityName:_P},async({payload:X})=>({result:await J(X.context)}))}if($?.userInstructionService){let J=$.userInstructionService;y2(Q,{kind:"userInstructionService",capabilityName:TP},async()=>{return await J.start().catch(()=>{}),{snapshot:{records:{skill:J.listRecords("skill"),rule:J.listRecords("rule"),workflow:J.listRecords("workflow")},runtimeCommands:J.listRuntimeCommands()}}})}return Q}function uF($){if(typeof $==="string"&&$.trim())return $.trim();if($ instanceof Error)return $.message.trim()||void 0;if($&&typeof $==="object"&&"message"in $){let Z=$.message;if(typeof Z==="string"&&Z.trim())return Z.trim()}return}function MP($){return uF($)??"Capability request was cancelled."}function RP($){if(typeof $!=="string")return $;try{return JSON.parse($)}catch{return $}}function EP($){return $==="completed"||$==="max_iterations"||$==="aborted"||$==="mistake_limit"||$==="error"}function NP($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$,Q=typeof Z.inputTokens==="number"?Z.inputTokens:void 0,W=typeof Z.outputTokens==="number"?Z.outputTokens:void 0;if(Q===void 0||W===void 0)return;return{inputTokens:Q,outputTokens:W,cacheReadTokens:typeof Z.cacheReadTokens==="number"?Z.cacheReadTokens:0,cacheWriteTokens:typeof Z.cacheWriteTokens==="number"?Z.cacheWriteTokens:0,totalCost:typeof Z.totalCost==="number"?Z.totalCost:0}}function mF($){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 iJ($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function x$($,Z){return iJ($?.[Z])??0}function wP($){let Z=$?.delta&&typeof $.delta==="object"?$.delta:void 0,Q=$?.totals&&typeof $.totals==="object"?$.totals:void 0,W=$?.agent&&typeof $.agent==="object"?$.agent:void 0,J=W?.teamRole==="teammate"||W?.teamRole==="lead"?W.teamRole:void 0;return{event:{type:"usage",agentId:typeof W?.agentId==="string"?W.agentId:void 0,conversationId:typeof W?.conversationId==="string"?W.conversationId:void 0,parentAgentId:typeof W?.parentAgentId==="string"?W.parentAgentId:void 0,inputTokens:x$(Z,"inputTokens"),outputTokens:x$(Z,"outputTokens"),cacheReadTokens:x$(Z,"cacheReadTokens"),cacheWriteTokens:x$(Z,"cacheWriteTokens"),cost:iJ(Z?.totalCost),totalInputTokens:x$(Q,"inputTokens"),totalOutputTokens:x$(Q,"outputTokens"),totalCacheReadTokens:x$(Q,"cacheReadTokens"),totalCacheWriteTokens:x$(Q,"cacheWriteTokens"),totalCost:iJ(Q?.totalCost)},teamAgentId:typeof W?.teamAgentId==="string"?W.teamAgentId:void 0,teamRole:J}}function CP($){let Z=$?.result&&typeof $.result==="object"&&!Array.isArray($.result)?$.result:void 0,Q=$?.reason??Z?.finishReason,W=EP(Q)?Q:Q==="failed"?"error":"completed",J=NP($?.usage??Z?.usage);return{type:"done",reason:W,text:typeof $?.text==="string"?$.text:typeof Z?.text==="string"?Z.text:"",iterations:typeof $?.iterations==="number"?$.iterations:typeof Z?.iterations==="number"?Z.iterations:0,usage:J}}function cQ($,Z){return $.error?.message??`hub command failed: ${Z}`}function S5($){switch($){case"idle":case"completed":return"completed";case"failed":return"failed";case"aborted":return"cancelled";default:return"running"}}function dF($){let Z=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):void 0;return{sessionId:$.sessionId,parentSessionId:typeof Z?.parentSessionId==="string"?Z.parentSessionId:void 0,agentId:$.runtimeSession?.agentId||(typeof Z?.agentId==="string"?Z.agentId:void 0),parentAgentId:typeof Z?.parentAgentId==="string"?Z.parentAgentId:void 0,conversationId:typeof Z?.conversationId==="string"?Z.conversationId:void 0,isSubagent:typeof Z?.isSubagent==="boolean"?Z.isSubagent:!1,source:typeof Z?.source==="string"?Z.source:z0.CORE,pid:typeof Z?.pid==="number"?Z.pid:void 0,startedAt:new Date($.createdAt).toISOString(),endedAt:S5($.status)==="running"?void 0:new Date($.updatedAt).toISOString(),exitCode:S5($.status)==="completed"?0:S5($.status)==="failed"?1:void 0,status:S5($.status),interactive:Z?.interactive===!0,provider:typeof Z?.provider==="string"?Z.provider:"hub",model:typeof Z?.model==="string"?Z.model:"hub",cwd:$.cwd?.trim()||$.workspaceRoot,workspaceRoot:$.workspaceRoot,teamName:typeof Z?.teamName==="string"?Z.teamName:void 0,enableTools:$.runtimeOptions?.enableTools??Z?.enableTools===!0,enableSpawn:$.runtimeOptions?.enableSpawn??Z?.enableSpawn===!0,enableTeams:$.runtimeOptions?.enableTeams??Z?.enableTeams===!0,prompt:typeof Z?.prompt==="string"?Z.prompt:void 0,metadata:Z,updatedAt:new Date($.updatedAt).toISOString(),messagesPath:typeof Z?.messagesPath==="string"?Z.messagesPath:void 0,hookPath:typeof Z?.hookPath==="string"?Z.hookPath:void 0}}function g$($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$;return Z.version===1&&typeof Z.sessionId==="string"?JSON.parse(JSON.stringify(Z)):void 0}function PP($){let Z=g$($?.snapshot);if(Z)return vQ(Z);let Q=$?.session;return Q?dF(Q):void 0}function vF($,Z,Q){let W=Q?.workspaceRoot?.trim()||Z.config.workspaceRoot||Z.config.cwd;return b0.parse({version:1,session_id:$,source:Z.source??z0.CORE,pid:process.pid,started_at:new Date(Q?.createdAt??Date.now()).toISOString(),status:S5(Q?.status),interactive:Z.interactive===!0,provider:Z.config.providerId,model:Z.config.modelId,cwd:Q?.cwd?.trim()||Z.config.cwd,workspace_root:W,team_name:Z.config.teamName,enable_tools:Z.config.enableTools,enable_spawn:Z.config.enableSpawnAgent,enable_teams:Z.config.enableAgentTeams,prompt:Z.prompt?.trim()||void 0,metadata:Z.sessionMetadata&&Object.keys(Z.sessionMetadata).length>0?Z.sessionMetadata:void 0})}function cF($,Z){return b0.parse({version:1,session_id:$.sessionId,source:$.source,pid:process.pid,started_at:$.createdAt,status:$.status,interactive:$.interactive,provider:$.model.providerId,model:$.model.modelId,cwd:$.workspace.cwd,workspace_root:$.workspace.root,team_name:$.team?.name,enable_tools:$.capabilities.enableTools,enable_spawn:$.capabilities.enableSpawn,enable_teams:$.capabilities.enableTeams,prompt:($.prompt??Z.prompt?.trim())||void 0,metadata:$.metadata,messages_path:$.artifacts?.messagesPath})}class o1{runtimeAddress;pendingPrompts;client;clientOptions;clientContext;events=new C5;sessionCapabilities=new Map;sessionClientContributionHandlers=new Map;sessionSubscriptions=new Map;pendingApprovalToolCallIds=new Set;agentDoneEmittedForCurrentRunBySession=new Set;activeCapabilityAbortControllers=new Map;defaultCapabilities;telemetry;constructor($,Z){this.clientContext=Z,this.clientOptions={authToken:$.authToken,clientType:$.clientType??"core-hub-runtime",displayName:$.displayName??"core hub runtime",workspaceRoot:Z?.workspaceRoot,cwd:Z?.cwd},this.defaultCapabilities=q0($.capabilities)??{},this.telemetry=$.telemetry,this.runtimeAddress=$.url,this.pendingPrompts={list:(Q)=>this.requestPendingPromptsList(Q),update:(Q)=>this.requestPendingPromptUpdate(Q),delete:(Q)=>this.requestPendingPromptDelete(Q)},this.client=this.createClient($.url)}createClient($){return new W1({...this.clientOptions,url:$})}async replaceClient($){let Z=this.client;this.client=this.createClient($),this.runtimeAddress=$,await Promise.resolve(Z.dispose()).catch(()=>{return})}async recoverLocalHubStartupDeadlock($){if(!a9($,"session.create"))return!1;let Z=await s9({url:this.client.getUrl(),workspaceRoot:this.clientContext?.workspaceRoot,cwd:this.clientContext?.cwd}).catch(()=>{return});if(!Z)return!1;return await this.replaceClient(Z),!0}registerPlannedSession($,Z,Q){if(this.sessionCapabilities.set($,Z),Q.size>0)this.sessionClientContributionHandlers.set($,Q);this.ensureSessionSubscription($)}cleanupPlannedSession($){this.sessionCapabilities.delete($),this.sessionClientContributionHandlers.delete($),this.disposeSessionSubscription($)}async connect(){await this.client.connect()}async startSession($){let Z=this.resolveCapabilities($),Q=gF($.localRuntime,Z),W=$.config.sessionId?.trim()||hF(),J=()=>this.client.command("session.create",{workspaceRoot:$.config.workspaceRoot?.trim()||$.config.cwd,cwd:$.config.cwd,sessionConfig:J4({...$.config,sessionId:W}),metadata:{...$.sessionMetadata??{},source:$.source??z0.CORE,provider:$.config.providerId,model:$.config.modelId,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,teamName:$.config.teamName,prompt:$.prompt,interactive:$.interactive===!0},runtimeOptions:{...Q.manifest.length>0?{clientContributions:Q.manifest}:{},...$.localRuntime?.configExtensions?{configExtensions:$.localRuntime.configExtensions}:{}},toolPolicies:J4($.toolPolicies),initialMessages:$.initialMessages});this.registerPlannedSession(W,Z,Q.handlers);let X;try{X=await J()}catch(H){if(this.cleanupPlannedSession(W),await this.recoverLocalHubStartupDeadlock(H)){this.registerPlannedSession(W,Z,Q.handlers);try{X=await J()}catch(B){throw this.cleanupPlannedSession(W),B}}else throw H}let Y=g$(X.payload?.snapshot),j=X.payload?.session,V=(Y?.sessionId??j?.sessionId)?.trim();if(!V)throw this.cleanupPlannedSession(W),Error("Hub runtime did not return a session id.");if(V!==W)this.cleanupPlannedSession(W),this.registerPlannedSession(V,Z,Q.handlers);return{sessionId:V,manifest:Y?cF(Y,$):vF(V,$,j),manifestPath:"",messagesPath:"",result:void 0}}async restoreSession($){let Z=$.sessionId.trim();if(!Z)throw Error("sessionId is required");let Q=$.restore?.messages!==!1;if(Q&&!$.start)throw Error("start is required when restore.messages is true");let W=$.start,J=W?this.resolveCapabilities(W):void 0,X=W?gF(W.localRuntime,J??{}):{manifest:[],handlers:new Map},Y=W?W.config.sessionId?.trim()||hF():void 0;if(Y&&J)this.sessionCapabilities.set(Y,J);if(Y&&X.handlers.size>0)this.sessionClientContributionHandlers.set(Y,X.handlers),this.ensureSessionSubscription(Y);let j;try{j=await this.client.command("session.restore",{sessionId:Z,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...W?{workspaceRoot:W.config.workspaceRoot?.trim()||W.config.cwd,cwd:W.config.cwd??$.cwd,sessionConfig:J4({...W.config,sessionId:Y}),metadata:{...W.sessionMetadata??{},source:W.source??z0.CORE,provider:W.config.providerId,model:W.config.modelId,enableTools:W.config.enableTools,enableSpawn:W.config.enableSpawnAgent,enableTeams:W.config.enableAgentTeams,teamName:W.config.teamName,prompt:W.prompt,interactive:W.interactive===!0},runtimeOptions:{...X.manifest.length>0?{clientContributions:X.manifest}:{},...W.localRuntime?.configExtensions?{configExtensions:W.localRuntime.configExtensions}:{}},toolPolicies:J4(W.toolPolicies)}:{}},Z)}catch(F){if(Y)this.sessionCapabilities.delete(Y),this.sessionClientContributionHandlers.delete(Y),this.disposeSessionSubscription(Y);throw F}if(!j.ok){let F=typeof j.payload?.error==="string"?j.payload.error:"session.restore failed";if(Y)this.sessionCapabilities.delete(Y),this.sessionClientContributionHandlers.delete(Y),this.disposeSessionSubscription(Y);throw Error(F)}let V=g$(j.payload?.snapshot),H=j.payload?.session,B=(V?.sessionId??H?.sessionId)?.trim();if(Q&&!B){if(Y)this.sessionCapabilities.delete(Y),this.sessionClientContributionHandlers.delete(Y),this.disposeSessionSubscription(Y);throw Error("Hub checkpoint restore returned no session id")}if(B&&Y&&B!==Y)this.sessionCapabilities.delete(Y),this.sessionClientContributionHandlers.delete(Y),this.disposeSessionSubscription(Y);if(B&&J)this.sessionCapabilities.set(B,J);if(B&&X.handlers.size>0)this.sessionClientContributionHandlers.set(B,X.handlers);if(B)this.ensureSessionSubscription(B);let G=Array.isArray(j.payload?.messages)?j.payload.messages:void 0,K=j.payload?.checkpoint;if(!K)throw Error("Hub checkpoint restore returned no checkpoint");return{sessionId:B,startResult:B?{sessionId:B,manifest:V?cF(V,W??{}):vF(B,W??{},H),manifestPath:"",messagesPath:"",result:void 0}:void 0,messages:G,checkpoint:K}}async runTurn($){return this.ensureSessionSubscription($.sessionId),(await this.client.command("run.start",{sessionId:$.sessionId,input:$.prompt,mode:$.mode,attachments:($.userImages?.length??0)>0||($.userFiles?.length??0)>0?{...$.userImages?.length?{userImages:$.userImages}:{},...$.userFiles?.length?{userFiles:$.userFiles}:{}}:void 0,delivery:$.delivery,timeoutMs:$.timeoutMs},$.sessionId,{timeoutMs:null})).payload?.result}async requestPendingPromptsList($){this.ensureSessionSubscription($.sessionId);let Z=await this.client.command("session.pending_prompts",{sessionId:$.sessionId},$.sessionId);return Array.isArray(Z.payload?.prompts)?Z.payload.prompts:[]}async requestPendingPromptUpdate($){this.ensureSessionSubscription($.sessionId);let Z=await this.client.command("session.update_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(Z.payload?.prompts)?Z.payload.prompts:[],prompt:Z.payload?.prompt,updated:Z.payload?.updated===!0}}async requestPendingPromptDelete($){this.ensureSessionSubscription($.sessionId);let Z=await this.client.command("session.remove_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(Z.payload?.prompts)?Z.payload.prompts:[],prompt:Z.payload?.prompt,removed:Z.payload?.removed===!0}}async getAccumulatedUsage($){let Z=await this.client.command("session.get",{includeSnapshot:!0},$),Q=g$(Z.payload?.snapshot);if(Q){let Y=Q.usage?{...Q.usage}:void 0,j=Q.aggregateUsage?{...Q.aggregateUsage}:void 0;return Y||j?{usage:Y,aggregateUsage:j}:void 0}let W=Z.payload?.session,J=mF(W?.usage),X=mF(W?.aggregateUsage);return J||X?{usage:J,aggregateUsage:X}:void 0}async abort($,Z){await this.client.command("run.abort",{sessionId:$,reason:uF(Z)},$)}async stopSession($){this.sessionCapabilities.delete($),this.disposeSessionSubscription($),await this.client.command("session.detach",{sessionId:$},$)}async dispose(){for(let[$,Z]of this.sessionSubscriptions){Z();try{await this.client.command("session.detach",{sessionId:$},$)}catch{}}this.sessionSubscriptions.clear(),this.sessionCapabilities.clear(),this.agentDoneEmittedForCurrentRunBySession.clear();for(let $ of this.activeCapabilityAbortControllers.values())$.abort("Hub runtime host disposed.");this.activeCapabilityAbortControllers.clear(),await this.client.dispose()}async getSession($){let Z;try{Z=await this.client.command("session.get",void 0,$)}catch(Q){if(I1(Q))return;throw Q}return PP(Z.payload)}async listSessions($=100){let Z=await this.client.command("session.list",{limit:$}),Q=Array.isArray(Z.payload?.snapshots)?Z.payload.snapshots.flatMap((J)=>{let X=g$(J);return X?[vQ(X)]:[]}):[];if(Q.length>0)return Q;return(Z.payload?.sessions??[]).map(dF)}async listSettings($){let Z=await this.client.command("settings.list",IF($));if(!Z.ok)throw Error(cQ(Z,"settings.list"));return Z.payload?.snapshot}async toggleSetting($){let Z=await this.client.command("settings.toggle",IF($));if(!Z.ok)throw Error(cQ(Z,"settings.toggle"));return{snapshot:Z.payload?.snapshot,changedTypes:Array.isArray(Z.payload?.changedTypes)?Z.payload.changedTypes:[]}}async deleteSession($){return this.sessionCapabilities.delete($),this.disposeSessionSubscription($),(await this.client.command("session.delete",{sessionId:$})).payload?.deleted===!0}async updateSession($,Z){let Q={...Z.metadata??{}};if(typeof Z.prompt==="string")Q.prompt=Z.prompt;if(typeof Z.title==="string")Q.title=Z.title;return{updated:(await this.client.command("session.update",{sessionId:$,metadata:Q})).ok}}async readSessionMessages($){let Z=$.trim();if(!Z)return[];let Q=await this.client.command("session.messages",{sessionId:Z},Z);if(!Q.ok)throw yF(this.telemetry,{component:"core",operation:"hub.runtime_host.read_session_messages",error:Error(cQ(Q,"session.messages")),severity:Q.error?.code==="session_not_found"?"warn":"error",handled:!0,context:{command:"session.messages",sessionId:Z,errorCode:Q.error?.code,runtimeAddress:this.runtimeAddress}}),Error(cQ(Q,"session.messages"));let W=Q.payload?.messages;return Array.isArray(W)?W:[]}async dispatchHookEvent($){await this.client.command("session.hook",{payload:$})}subscribe($,Z){return this.events.subscribe($,Z)}ensureSessionSubscription($){let Z=$.trim();if(!Z||this.sessionSubscriptions.has(Z))return;let Q=this.client.subscribe((W)=>{this.handleHubEvent(W)},{sessionId:Z});this.sessionSubscriptions.set(Z,typeof Q==="function"?Q:()=>{})}disposeSessionSubscription($){let Z=$.trim();if(!Z)return;this.sessionSubscriptions.get(Z)?.(),this.sessionSubscriptions.delete(Z),this.agentDoneEmittedForCurrentRunBySession.delete(Z)}resolveCapabilities($){return q0(this.defaultCapabilities,$.capabilities)??{}}emitToolCallContentStart($){this.events.emit({type:"agent_event",payload:{sessionId:$.sessionId,event:{type:"content_start",contentType:"tool",toolCallId:$.toolCallId,toolName:$.toolName,input:$.toolInput}}})}emitAgentDoneIfNeeded($){if(this.agentDoneEmittedForCurrentRunBySession.has($.sessionId))return;this.agentDoneEmittedForCurrentRunBySession.add($.sessionId),this.events.emit({type:"agent_event",payload:{sessionId:$.sessionId,event:CP($.payload)}})}handleHubEvent($){let Z=$.sessionId?.trim();if($.event==="capability.requested"){this.handleCapabilityRequest($).catch((Q)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_request",Q,$)});return}if($.event==="capability.resolved"){this.handleCapabilityResolved($);return}if($.event==="approval.requested"){this.handleApprovalRequested($).catch((Q)=>{this.captureDetachedHubEventError("hub.runtime_host.approval_request",Q,$)});return}if(!Z)return;switch($.event){case"run.started":{this.agentDoneEmittedForCurrentRunBySession.delete(Z);let Q=g$($.payload?.snapshot),W=$.payload?.session;if(Q)this.events.emit({type:"session_snapshot",payload:{sessionId:Z,snapshot:Q}});this.events.emit({type:"status",payload:{sessionId:Z,status:W?.status??"running"}});return}case"iteration.started":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"iteration_start",iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0}}});return}case"iteration.finished":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"iteration_end",iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0,hadToolCalls:$.payload?.hadToolCalls===!0,toolCallCount:typeof $.payload?.toolCallCount==="number"?$.payload.toolCallCount:0}}});return}case"assistant.delta":{let Q=typeof $.payload?.text==="string"?$.payload.text:"";if(!Q)return;this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_start",contentType:"text",text:Q}}});return}case"assistant.finished":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_end",contentType:"text",text:typeof $.payload?.text==="string"?$.payload.text:void 0}}});return}case"reasoning.delta":{let Q=typeof $.payload?.text==="string"?$.payload.text:"",W=$.payload?.redacted===!0;if(!Q&&!W)return;this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_start",contentType:"reasoning",reasoning:Q,redacted:W}}});return}case"reasoning.finished":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_end",contentType:"reasoning",reasoning:typeof $.payload?.reasoning==="string"?$.payload.reasoning:void 0}}});return}case"agent.done":{this.emitAgentDoneIfNeeded({sessionId:Z,payload:$.payload});return}case"usage.updated":{let Q=wP($.payload);this.events.emit({type:"agent_event",payload:{sessionId:Z,event:Q.event,teamAgentId:Q.teamAgentId,teamRole:Q.teamRole}});return}case"tool.started":{let Q=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(Q&&this.pendingApprovalToolCallIds.delete(Q))return;this.emitToolCallContentStart({sessionId:Z,toolCallId:Q,toolName:typeof $.payload?.toolName==="string"?$.payload.toolName:void 0,toolInput:$.payload?.input});return}case"tool.finished":{let Q=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(Q)this.pendingApprovalToolCallIds.delete(Q);this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_end",contentType:"tool",toolCallId:Q,toolName:typeof $.payload?.toolName==="string"?$.payload.toolName:void 0,output:$.payload?.output,error:typeof $.payload?.error==="string"?$.payload.error:void 0}}});return}case"session.created":case"session.updated":case"session.attached":case"session.detached":{let Q=g$($.payload?.snapshot),W=$.payload?.session;if(Q)this.events.emit({type:"session_snapshot",payload:{sessionId:Z,snapshot:Q}});this.events.emit({type:"status",payload:{sessionId:Z,status:W?.status??"running"}});return}case"session.pending_prompts":{this.events.emit({type:"pending_prompts",payload:{sessionId:Z,prompts:Array.isArray($.payload?.prompts)?$.payload.prompts:[]}});return}case"session.pending_prompt_submitted":{let Q=$.payload?.prompt;if(!Q)return;this.events.emit({type:"pending_prompt_submitted",payload:{sessionId:Z,id:Q.id,prompt:Q.prompt,delivery:Q.delivery,attachmentCount:Q.attachmentCount,userImages:Q.userImages,userFiles:Q.userFiles}});return}case"run.completed":case"run.failed":case"run.aborted":{let Q=g$($.payload?.snapshot),W=typeof $.payload?.reason==="string"?$.payload.reason:$.event==="run.aborted"?"aborted":$.event==="run.failed"?"error":"completed";if(this.emitAgentDoneIfNeeded({sessionId:Z,payload:{...$.payload,reason:W}}),Q?.interactive===!0&&H0(Q.status))return;this.events.emit({type:"ended",payload:{sessionId:Z,reason:W,ts:$.timestamp??Date.now()}});return}default:return}}captureDetachedHubEventError($,Z,Q){try{yF(this.telemetry,{component:"core",operation:$,error:Z,severity:"warn",handled:!0,context:{event:Q.event,sessionId:Q.sessionId,runtimeAddress:this.runtimeAddress}})}catch{}}async handleCapabilityRequest($){let Z=$.sessionId?.trim();if(!Z)return;let Q=typeof $.payload?.targetClientId==="string"?$.payload.targetClientId:void 0;if(Q&&Q!==this.client.getClientId())return;let W=typeof $.payload?.requestId==="string"?$.payload.requestId:"",J=typeof $.payload?.capabilityName==="string"?$.payload.capabilityName:"";if(!W)return;let X=this.sessionClientContributionHandlers.get(Z)?.get(J);if(!X){await this.client.command("capability.respond",{requestId:W,ok:!1,error:`No client contribution handler registered for capability ${J} in session ${Z}.`},Z).catch(()=>{});return}let Y=$.payload?.payload&&typeof $.payload.payload==="object"&&!Array.isArray($.payload.payload)?$.payload.payload:{},j=new AbortController;this.activeCapabilityAbortControllers.set(W,j);let V=(H)=>{this.client.command("capability.progress",{requestId:W,payload:H},Z).catch((B)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_progress",B,$)})};try{let H=await X({payload:Y,abortSignal:j.signal,progress:V});if(j.signal.aborted)return;await this.client.command("capability.respond",{requestId:W,ok:!0,payload:H},Z)}catch(H){if(j.signal.aborted)return;await this.client.command("capability.respond",{requestId:W,ok:!1,error:H instanceof Error?H.message:String(H)},Z)}finally{this.activeCapabilityAbortControllers.delete(W)}}handleCapabilityResolved($){if($.payload?.cancelled!==!0)return;let Z=typeof $.payload.requestId==="string"?$.payload.requestId.trim():"";if(!Z)return;let Q=this.activeCapabilityAbortControllers.get(Z);if(!Q)return;Q.abort(MP($.payload.error))}async handleApprovalRequested($){let Z=$.sessionId?.trim();if(!Z)return;let Q=this.sessionCapabilities.get(Z)?.requestToolApproval??this.defaultCapabilities.requestToolApproval;if(!Q)return;let W=typeof $.payload?.approvalId==="string"?$.payload.approvalId.trim():"",J=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:"",X=typeof $.payload?.toolName==="string"?$.payload.toolName:"";if(!W||!J||!X)return;let Y=$.payload?.policy&&typeof $.payload.policy==="object"&&!Array.isArray($.payload.policy)?$.payload.policy:{autoApprove:!1},j=RP($.payload?.inputJson);this.pendingApprovalToolCallIds.add(J),this.emitToolCallContentStart({sessionId:Z,toolCallId:J,toolName:X,toolInput:j});let V=await Promise.resolve(Q({sessionId:Z,agentId:typeof $.payload?.agentId==="string"?$.payload.agentId:"",conversationId:typeof $.payload?.conversationId==="string"?$.payload.conversationId:Z,iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0,toolCallId:J,toolName:X,input:j,policy:Y})).catch((H)=>({approved:!1,reason:H instanceof Error?H.message:`Tool approval request failed: ${String(H)}`}));await this.client.command("approval.respond",{approvalId:W,approved:V.approved,reason:V.reason},Z).catch(()=>{})}}var pF={};N(pF,{RemoteRuntimeHost:()=>X4});class X4 extends o1{constructor($){super({url:G$($.endpoint),authToken:$.authToken,clientType:$.clientType??"core-remote-runtime",displayName:$.displayName??"core remote runtime",capabilities:$.capabilities},{workspaceRoot:$.workspaceRoot,cwd:$.cwd})}}var rF={};N(rF,{SqliteSessionStore:()=>D1});import{existsSync as SP,mkdirSync as bP}from"node:fs";import{join as yP}from"node:path";import{asBool as b5,asOptionalString as U1,asString as t1,ensureSessionSchema as hP,loadSqliteDb as kP,nowIso as uQ,toBoolInt as y5}from"@cline/shared/db";import{resolveDbDataDir as IP}from"@cline/shared/storage";class D1{sessionsDirPath;db;constructor($={}){this.sessionsDirPath=$.sessionsDir??IP()}init(){this.getRawDb()}ensureSessionsDir(){if(!SP(this.sessionsDirPath))bP(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}sessionDbPath(){return yP(this.ensureSessionsDir(),"sessions.db")}getRawDb(){if(this.db)return this.db;let $=kP(this.sessionDbPath());return hP($,{includeLegacyMigrations:!0}),this.db=$,$}close(){this.db?.close?.(),this.db=void 0}run($,Z=[]){return this.getRawDb().prepare($).run(...Z)}queryOne($,Z=[]){return this.getRawDb().prepare($).get(...Z)??void 0}queryAll($,Z=[]){return this.getRawDb().prepare($).all(...Z)}create($){let Z=uQ();this.run(`INSERT OR REPLACE INTO sessions (
|
|
502
503
|
session_id, source, pid, started_at, ended_at, exit_code, status, status_lock, interactive,
|
|
503
504
|
provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
|
|
504
505
|
parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
|
|
505
506
|
metadata_json, transcript_path, hook_path, messages_path, updated_at
|
|
506
|
-
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.sessionId,$.source,$.pid,$.startedAt,$.endedAt??null,$.exitCode??null,$.status,0,
|
|
507
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.sessionId,$.source,$.pid,$.startedAt,$.endedAt??null,$.exitCode??null,$.status,0,y5($.interactive),$.provider,$.model,$.cwd,$.workspaceRoot,$.teamName??null,y5($.enableTools),y5($.enableSpawn),y5($.enableTeams),$.parentSessionId??null,$.parentAgentId??null,$.agentId??null,$.conversationId??null,y5($.isSubagent),$.prompt??null,$.metadata?JSON.stringify($.metadata):null,"",$.hookPath??"",$.messagesPath??null,Z])}update($){let Z=[],Q=[];if($.endedAt!==void 0)Z.push("ended_at = ?"),Q.push($.endedAt);if($.exitCode!==void 0)Z.push("exit_code = ?"),Q.push($.exitCode);if($.status!==void 0)Z.push("status = ?"),Q.push($.status);if($.prompt!==void 0)Z.push("prompt = ?"),Q.push($.prompt);if($.metadata!==void 0)Z.push("metadata_json = ?"),Q.push($.metadata?JSON.stringify($.metadata):null);if($.parentSessionId!==void 0)Z.push("parent_session_id = ?"),Q.push($.parentSessionId);if($.parentAgentId!==void 0)Z.push("parent_agent_id = ?"),Q.push($.parentAgentId);if($.agentId!==void 0)Z.push("agent_id = ?"),Q.push($.agentId);if($.conversationId!==void 0)Z.push("conversation_id = ?"),Q.push($.conversationId);if(Z.length===0)return;Z.push("updated_at = ?"),Q.push(uQ()),Q.push($.sessionId),this.run(`UPDATE sessions SET ${Z.join(", ")} WHERE session_id = ?`,Q)}updateStatus($,Z,Q){this.update({sessionId:$,status:Z,endedAt:H0(Z)?null:uQ(),exitCode:H0(Z)?null:Q??(Z==="failed"?1:0)})}get($){let Z=this.queryOne(`SELECT session_id, source, pid, started_at, ended_at, exit_code, status, interactive,
|
|
507
508
|
provider, model, cwd, workspace_root, team_name,
|
|
508
509
|
enable_tools, enable_spawn, enable_teams,
|
|
509
510
|
parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent,
|
|
510
511
|
prompt, metadata_json, hook_path, messages_path, updated_at
|
|
511
|
-
FROM sessions WHERE session_id = ?`,[$]);if(!Z)return;return{sessionId:t1(Z.session_id),source:t1(Z.source),pid:Number(Z.pid??0),startedAt:t1(Z.started_at),endedAt:Z.ended_at??null,exitCode:Z.exit_code??null,status:t1(Z.status),interactive:
|
|
512
|
-
`,"utf8")}readSessionManifest($){return this.readManifestFile($).manifest}readManifestFile($){let Z=this.artifacts.sessionManifestPath($,!1);if(!
|
|
513
|
-
`;if(
|
|
514
|
-
`,"utf8")}}import{appendFileSync as
|
|
515
|
-
`,"utf8")}}import{formatUserInputBlock as
|
|
512
|
+
FROM sessions WHERE session_id = ?`,[$]);if(!Z)return;return{sessionId:t1(Z.session_id),source:t1(Z.source),pid:Number(Z.pid??0),startedAt:t1(Z.started_at),endedAt:Z.ended_at??null,exitCode:Z.exit_code??null,status:t1(Z.status),interactive:b5(Z.interactive),provider:t1(Z.provider),model:t1(Z.model),cwd:t1(Z.cwd),workspaceRoot:t1(Z.workspace_root),teamName:U1(Z.team_name),enableTools:b5(Z.enable_tools),enableSpawn:b5(Z.enable_spawn),enableTeams:b5(Z.enable_teams),parentSessionId:U1(Z.parent_session_id),parentAgentId:U1(Z.parent_agent_id),agentId:U1(Z.agent_id),conversationId:U1(Z.conversation_id),isSubagent:b5(Z.is_subagent),prompt:U1(Z.prompt),metadata:(()=>{let Q=U1(Z.metadata_json);if(!Q)return;try{let W=JSON.parse(Q);if(W&&typeof W==="object"&&!Array.isArray(W))return W}catch{}return})(),hookPath:U1(Z.hook_path),messagesPath:U1(Z.messages_path),updatedAt:U1(Z.updated_at)??uQ()}}list($=200){let Z=this.queryAll("SELECT session_id FROM sessions ORDER BY started_at DESC LIMIT ?",[$]),Q=[];for(let W of Z){let J=this.get(t1(W.session_id));if(J)Q.push(J)}return Q}delete($,Z=!1){let Q=this.run("DELETE FROM sessions WHERE session_id = ?",[$]).changes??0;if(Z)this.run("DELETE FROM sessions WHERE parent_session_id = ?",[$]);return Q>0}}J8();import{existsSync as YX,mkdirSync as US,readFileSync as VA,renameSync as DS,writeFileSync as LS}from"node:fs";import{join as HA}from"node:path";import{resolveSessionDataDir as _S}from"@cline/shared/storage";import{dirname as AS}from"node:path";import{nanoid as fS}from"nanoid";import{appendFileSync as xP,existsSync as gP,mkdirSync as iF,readFileSync as mP,writeFileSync as nF}from"node:fs";import{dirname as aF,join as vP}from"node:path";import{ensureHookLogDir as cP}from"@cline/shared/storage";class nJ{adapter;messagesArtifactUploader;logger;artifacts;constructor($,Z,Q){this.adapter=$;this.messagesArtifactUploader=Z;this.logger=Q;this.artifacts=new fJ(()=>this.ensureSessionsDir())}ensureSessionsDir(){return this.adapter.ensureSessionsDir()}initializeMessagesFile($,Z,Q){ZG(Z,Q,h3($))}writeSessionManifest($,Z){iF(aF($),{recursive:!0}),nF($,`${JSON.stringify(b0.parse(Z),null,2)}
|
|
513
|
+
`,"utf8")}readSessionManifest($){return this.readManifestFile($).manifest}readManifestFile($){let Z=this.artifacts.sessionManifestPath($,!1);if(!gP(Z))return{path:Z};try{return{path:Z,manifest:b0.parse(JSON.parse(mP(Z,"utf8")))}}catch{return{path:Z}}}async resolveArtifactPath($,Z,Q){let J=(await this.adapter.getSession($))?.[Z];return typeof J==="string"&&J.trim().length>0?J:Q($)}async persistSessionMessages($,Z,Q){let W=await this.resolveArtifactPath($,"messagesPath",(Y)=>this.artifacts.sessionMessagesPath(Y)),J=k3({updatedAt:J0(),context:h3($),messages:Z,systemPrompt:Q}),X=`${JSON.stringify(J,null,2)}
|
|
514
|
+
`;if(iF(aF(W),{recursive:!0}),nF(W,X,"utf8"),!this.messagesArtifactUploader)return;try{let Y=await this.adapter.getSession($);await this.messagesArtifactUploader.uploadMessagesFile({sessionId:$,path:W,contents:X,row:Y})}catch(Y){this.logger?.debug("Failed to upload persisted session messages",{sessionId:$,error:Y})}}appendStaleSessionHookLog($,Z,Q,W,J){let Y=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??vP(cP(),"hooks.jsonl");xP(Y,`${JSON.stringify({ts:$,hookName:"session_shutdown",reason:W,sessionId:Z,pid:Q,source:J})}
|
|
515
|
+
`,"utf8")}}import{appendFileSync as uP}from"node:fs";import{join as dP}from"node:path";import{resolveRootSessionId as sF}from"@cline/shared";import{ensureHookLogDir as lP}from"@cline/shared/storage";import{z as aJ}from"zod";var pP="subagent",rP=aJ.looseObject({task:aJ.string().optional(),systemPrompt:aJ.string().optional()});class dQ{adapter;manifestStore;toPersistedMessages;heartbeatLogIntervalMs;teamTaskSessionsByAgent=new Map;teamTaskLastHeartbeatBySession=new Map;teamTaskLastProgressLineBySession=new Map;constructor($,Z,Q,W){this.adapter=$;this.manifestStore=Z;this.toPersistedMessages=Q;this.heartbeatLogIntervalMs=W}teamTaskQueueKey($,Z){return`${$}::${Z}`}activeTeamTaskSessionId($,Z){return this.teamTaskSessionsByAgent.get(this.teamTaskQueueKey($,Z))?.at(-1)}buildSubsessionRow($,Z){return{sessionId:Z.sessionId,source:pP,pid:process.ppid,startedAt:Z.startedAt,endedAt:null,exitCode:null,status:"running",statusLock:0,interactive:!1,provider:$.provider,model:$.model,cwd:$.cwd,workspaceRoot:$.workspaceRoot,teamName:$.teamName??null,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,parentSessionId:Z.parentSessionId,parentAgentId:Z.parentAgentId,agentId:Z.agentId,conversationId:Z.conversationId??null,isSubagent:!0,prompt:Z.prompt,metadata:m6({prompt:Z.prompt}),hookPath:"",messagesPath:Z.messagesPath,updatedAt:Z.startedAt}}async queueSpawnRequest($){if($.hookName!=="tool_call"||$.parent_agent_id!==null)return;if($.tool_call?.name!=="spawn_agent")return;let Z=sF($.sessionContext);if(!Z)return;let Q=rP.safeParse($.tool_call.input);await this.adapter.enqueueSpawnRequest({rootSessionId:Z,parentAgentId:$.agent_id,task:Q.success?Q.data.task:void 0,systemPrompt:Q.success?Q.data.systemPrompt:void 0})}async upsertSubagentSession($){let Z=$.rootSessionId;if(!Z)return;let Q=await this.adapter.getSession(Z);if(!Q)return;let W=C8(Z,$.agentId),J=await this.adapter.getSession(W),X=J0(),Y=this.manifestStore.artifacts.subagentArtifactPaths(W,$.agentId,this.activeTeamTaskSessionId(Z,$.parentAgentId)),j=$.prompt??J?.prompt??void 0;if(!j)j=await this.adapter.claimSpawnRequest(Z,$.parentAgentId)??`Subagent run by ${$.parentAgentId}`;if(!J)return await this.adapter.upsertSession(this.buildSubsessionRow(Q,{sessionId:W,parentSessionId:Z,parentAgentId:$.parentAgentId,agentId:$.agentId,conversationId:$.conversationId,prompt:j,startedAt:X,...Y})),this.manifestStore.initializeMessagesFile(W,Y.messagesPath,X),W;return await this.adapter.updateSession({sessionId:W,setRunning:!0,parentSessionId:Z,parentAgentId:$.parentAgentId,agentId:$.agentId,conversationId:$.conversationId,prompt:J.prompt??j??null,metadata:m6({metadata:J.metadata??void 0,prompt:J.prompt??j??null}),expectedStatusLock:J.statusLock}),W}async upsertSubagentSessionFromHook($){if(!$.parent_agent_id)return;let Z=sF($.sessionContext);if(!Z)return;if($.hookName==="session_shutdown"){let Q=C8(Z,$.agent_id);return await this.adapter.getSession(Q)?Q:void 0}return await this.upsertSubagentSession({agentId:$.agent_id,parentAgentId:$.parent_agent_id,conversationId:$.taskId,rootSessionId:Z})}async applySubagentStatus($,Z){await this.applySubagentStatusBySessionId($,I6(Z))}async applySubagentStatusBySessionId($,Z){let Q=await this.adapter.getSession($);if(!Q)return;let W=H0(Z)?null:J0(),J=H0(Z)?null:Z==="failed"?1:0;await this.adapter.updateSession({sessionId:$,status:Z,endedAt:W,exitCode:J,expectedStatusLock:Q.statusLock})}async applyStatusToRunningChildSessions($,Z){if(!$)return;let Q=await this.adapter.listSessions({limit:2000,parentSessionId:$,status:"running"});for(let W of Q)await this.applySubagentStatusBySessionId(W.sessionId,Z)}async onTeamTaskStart($,Z,Q){let W=await this.adapter.getSession($);if(!W)return;let J=h6($,Z),X=J0(),{messagesPath:Y}=this.manifestStore.artifacts.subagentArtifactPaths(J,Z);await this.adapter.upsertSession(this.buildSubsessionRow(W,{sessionId:J,parentSessionId:$,parentAgentId:"lead",agentId:Z,prompt:Q||`Team task for ${Z}`,startedAt:X,messagesPath:Y})),this.manifestStore.initializeMessagesFile(J,Y,X);let j=this.teamTaskQueueKey($,Z),V=this.teamTaskSessionsByAgent.get(j)??[];V.push(J),this.teamTaskSessionsByAgent.set(j,V)}async onTeamTaskEnd($,Z,Q,W,J,X){let Y=this.teamTaskQueueKey($,Z),j=this.teamTaskSessionsByAgent.get(Y);if(!j||j.length===0)return;let V=j.shift();if(j.length===0)this.teamTaskSessionsByAgent.delete(Y);if(!V)return;let H=J?.messages??X,B=this.toPersistedMessages(H,J,X);if(B)await this.manifestStore.persistSessionMessages(V,B);await this.applySubagentStatusBySessionId(V,Q),this.teamTaskLastHeartbeatBySession.delete(V),this.teamTaskLastProgressLineBySession.delete(V)}async onTeamTaskProgress($,Z,Q,W){let J=this.teamTaskQueueKey($,Z),X=this.teamTaskSessionsByAgent.get(J)?.[0];if(!X)return;let Y=Q.trim();if(!Y)return;let j=W?.kind??"progress";if(j==="heartbeat"){let H=Date.now(),B=this.teamTaskLastHeartbeatBySession.get(X)??0;if(H-B<this.heartbeatLogIntervalMs)return;this.teamTaskLastHeartbeatBySession.set(X,H)}let V=j==="heartbeat"?"[progress] heartbeat":j==="text"?`[progress] text: ${Y}`:`[progress] ${Y}`;if(this.teamTaskLastProgressLineBySession.get(X)===V)return;this.teamTaskLastProgressLineBySession.set(X,V)}async handleSubAgentStart($,Z){let Q=await this.upsertSubagentSession({agentId:Z.subAgentId,parentAgentId:Z.parentAgentId,conversationId:Z.conversationId,prompt:Z.input.task,rootSessionId:$});if(!Q)return;await this.applySubagentStatusBySessionId(Q,"running")}async handleSubAgentEnd($,Z){let Q=await this.upsertSubagentSession({agentId:Z.subAgentId,parentAgentId:Z.parentAgentId,conversationId:Z.conversationId,prompt:Z.input.task,rootSessionId:$});if(!Q)return;if(Z.error){await this.applySubagentStatusBySessionId(Q,"failed");return}let W=this.toPersistedMessages(Z.agentResult?.messages,Z.agentResult);if(W)await this.manifestStore.persistSessionMessages(Q,W);let J=Z.result?.finishReason??"completed";await this.applySubagentStatusBySessionId(Q,J==="aborted"?"cancelled":"completed")}appendSubagentHookAudit($){let Q=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??dP(lP(),"hooks.jsonl");uP(Q,`${JSON.stringify({ts:J0(),...$})}
|
|
516
|
+
`,"utf8")}}import{formatUserInputBlock as FS}from"@cline/shared";var jA={};N(jA,{toTeamProgressLifecycleEvent:()=>H4,sanitizeTeamName:()=>pB,reviveTeamStateDates:()=>CZ,parseConfiguredAgentConfig:()=>h5,loadConfiguredAgentConfigs:()=>Y4,createWorkerReviewerTeam:()=>YA,createSpawnAgentTool:()=>q$,createDelegatedAgentConfigProvider:()=>T$,createDelegatedAgent:()=>O$,createConfiguredAgentTools:()=>j4,createAgentTeamsTools:()=>F2,createAgentTeam:()=>tJ,buildTeamProgressSummary:()=>V4,buildDelegatedAgentConfig:()=>G2,buildConfiguredAgentToolName:()=>k5,buildConfiguredAgentToolDescriptors:()=>I5,bootstrapAgentTeams:()=>w8,AgentTeamsRuntime:()=>h2,AgentTeam:()=>G4});import{existsSync as iP,readdirSync as nP,readFileSync as aP}from"node:fs";import{basename as oF,extname as sP,join as oP}from"node:path";import{resolveAgentConfigSearchPaths as tP}from"@cline/shared/storage";import eF from"yaml";import{z as N0}from"zod";var $A=N0.object({name:N0.string().trim().min(1),description:N0.string().trim().min(1),tools:N0.union([N0.string(),N0.array(N0.string())]).optional(),skills:N0.union([N0.string(),N0.array(N0.string())]).optional(),providerId:N0.string().trim().min(1).optional(),modelId:N0.string().trim().min(1).optional(),maxIterations:N0.number().int().positive().optional()});function eP($){let Z=$.match(/^(---)[^\S\r\n]*(?:\r?\n|$)/);if(!Z)throw Error("Missing YAML frontmatter block in agent config file.");let Q=Z[0].length,W=/^---[^\S\r\n]*(?:\r?\n|$)/gm;W.lastIndex=Q;let J,X=Array.from($.matchAll(W)).filter((Y)=>Y.index>=Q);for(let Y of X){let j=Y.index,V=$.slice(Q,j);try{let H=eF.parse(V);if(!H||typeof H!=="object"||Array.isArray(H))continue;$A.parse(H);let B=$.slice(j+Y[0].length);J={frontmatter:V,body:B}}catch{}}if(J)return J;throw Error("Missing closing YAML frontmatter delimiter in agent config file.")}function tF($){if($===void 0)return;let Z=Array.isArray($)?$:$.split(",");return Array.from(new Set(Z.map((Q)=>Q.trim()).filter((Q)=>Q.length>0)))}function $S($){return $.trim().toLowerCase()}function ZS($){let Z=sP($).toLowerCase();return Z===".yml"||Z===".yaml"}function h5($,Z={}){let{frontmatter:Q,body:W}=eP($),J=eF.parse(Q);if(!J||typeof J!=="object"||Array.isArray(J))throw Error("Agent config frontmatter must be a YAML mapping.");let X=$A.parse(J),Y=W.trim();if(!Y)throw Error("Missing system prompt body in agent config file.");return{name:X.name,description:X.description,tools:tF(X.tools),skills:tF(X.skills),providerId:X.providerId,modelId:X.modelId,maxIterations:X.maxIterations,systemPrompt:Y,path:Z.path}}function Y4($){let Z=$.searchPaths??tP($.workspaceRoot),Q=new Map,W=[];for(let X of Z.filter(Boolean)){if(!iP(X))continue;let Y;try{Y=nP(X,{withFileTypes:!0})}catch(j){W.push({path:X,error:j instanceof Error?j:Error(String(j))});continue}for(let j of Y){if(!j.isFile()||!ZS(j.name))continue;let V=oP(X,j.name);try{let H=aP(V,"utf8"),B=h5(H,{path:V}),G=$S(B.name);if(!Q.has(G))Q.set(G,B)}catch(H){W.push({path:V,error:H instanceof Error?H:Error(String(H))})}}}return{configs:Array.from(Q.values()).sort((X,Y)=>(X.path?oF(X.path):X.name).localeCompare(Y.path?oF(Y.path):Y.name)),errors:W}}import{createTool as QS,zodToJsonSchema as WS}from"@cline/shared";import{z as ZA}from"zod";var sJ="subagent_",lQ=64,JS=ZA.object({prompt:ZA.string().trim().min(1).describe("Task for the subagent to perform")});function XS($){let Z="",Q=!0;for(let W of $.trim().toLowerCase()){let J=W.charCodeAt(0);if(!(J>=97&&J<=122||J>=48&&J<=57||W==="_")||W==="_"){if(!Q)Z+="_",Q=!0;continue}Z+=W,Q=!1}return Q?Z.slice(0,-1):Z}function YS($){let Z=2166136261;for(let Q=0;Q<$.length;Q++)Z^=$.charCodeAt(Q),Z=Math.imul(Z,16777619);return(Z>>>0).toString(36)}function k5($){let Z=XS($)||"agent",Q=YS($).slice(0,6),W=`${sJ}${Z}`;if(W.length<=lQ)return W;let J=lQ-sJ.length-Q.length-1,X=Z.slice(0,Math.max(1,J));return`${sJ}${X}_${Q}`.slice(0,lQ)}function I5($){let Z=new Set,Q=[];for(let W of[...$].sort((J,X)=>J.name.localeCompare(X.name))){let J=k5(W.name),X=J,Y=2;while(Z.has(X)){let j=`_${Y++}`,V=Math.max(1,lQ-j.length);X=`${J.slice(0,V)}${j}`}Z.add(X),Q.push({toolName:X,config:W})}return Q}function jS($,Z){return{...$,providerId:Z.providerId??$.providerId,modelId:Z.modelId??$.modelId,maxIterations:Z.maxIterations??$.maxIterations}}function j4($){return I5($.agents).map(({toolName:Z,config:Q})=>{return QS({name:Z,description:`Use the "${Q.name}" subagent: ${Q.description}`,inputSchema:WS(JS),execute:async(J,X)=>{let Y=$.configProvider.getRuntimeConfig(),j=T$(jS(Y,Q)),V=$.createSubAgentTools?await $.createSubAgentTools(Q,J,X):[],H=O$({kind:"subagent",prompt:Q.systemPrompt,configProvider:j,tools:V,maxIterations:Q.maxIterations,parentAgentId:X.agentId,abortSignal:X.signal,onEvent:$.onSubAgentEvent,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval}),B=H.getAgentId(),G=H.getConversationId(),K=X.agentId,F={systemPrompt:Q.systemPrompt,task:J.prompt};if($.onSubAgentStart)try{await $.onSubAgentStart({subAgentId:B,conversationId:G,parentAgentId:K,input:F})}catch{}try{let A=await H.run(J.prompt),L={text:A.text,iterations:A.iterations,finishReason:A.finishReason,usage:{inputTokens:A.usage.inputTokens,outputTokens:A.usage.outputTokens}};if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:B,conversationId:G,parentAgentId:K,input:F,result:L,agentResult:A})}catch{}return L}catch(A){if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:B,conversationId:G,parentAgentId:K,input:F,error:A instanceof Error?A:Error(String(A))})}catch{}throw A}},timeoutMs:300000,retryable:!1})})}function L1(){return new Date().toISOString()}function QA($,Z){if(Z<=0)return 0;return Math.round($/Z*100)}function VS($,Z){let Q=new Set;for(let J of Z)if(J.status==="reviewed")Q.add(`${J.outcomeId}:${J.section}`);let W=new Set;for(let J of $){if(J.status==="finalized")continue;for(let X of J.requiredSections)if(!Q.has(`${J.id}:${X}`))W.add(`${J.id}:${X}`)}return[...W].sort((J,X)=>J.localeCompare(X))}function V4($,Z){let Q={idle:0,running:0,stopped:0},W={pending:0,in_progress:0,blocked:0,completed:0},J={queued:0,running:0,completed:0,failed:0,cancelled:0,interrupted:0},X={draft:0,in_review:0,finalized:0},Y={draft:0,reviewed:0,rejected:0},j=0,V=0;for(let f of Z.members)if(Q[f.status]+=1,f.role==="lead")j+=1;else V+=1;let H=[],B=[],G=Z.tasks.filter((f)=>f.status==="completed").length,K=new Map(Z.tasks.map((f)=>[f.id,f]));for(let f of Z.tasks){if(W[f.status]+=1,f.status==="blocked"){H.push(f.id);continue}if(f.status!=="pending")continue;if(f.dependsOn.every((U)=>{return K.get(U)?.status==="completed"}))B.push(f.id)}let F=[],A,L=0;for(let f of Z.runs){if(J[f.status]+=1,f.status==="queued"||f.status==="running")F.push(f.id);let D=f.startedAt.getTime();if(D>=L)L=D,A=f.id}for(let f of Z.outcomes)X[f.status]+=1;for(let f of Z.outcomeFragments)Y[f.status]+=1;return{teamName:$,updatedAt:L1(),members:{total:Z.members.length,byStatus:Q,leadCount:j,teammateCount:V},tasks:{total:Z.tasks.length,byStatus:W,blockedTaskIds:H,readyTaskIds:B,completionPct:QA(G,Z.tasks.length)},runs:{total:Z.runs.length,byStatus:J,activeRunIds:F,latestRunId:A},outcomes:{total:Z.outcomes.length,byStatus:X,finalizedPct:QA(X.finalized,Z.outcomes.length),missingRequiredSections:VS(Z.outcomes,Z.outcomeFragments)},fragments:{total:Z.outcomeFragments.length,byStatus:Y}}}function H4($){let{event:Z}=$;switch(Z.type){case"team_task_updated":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:L1(),taskId:Z.task.id,agentId:Z.task.assignee??Z.task.createdBy};case"run_queued":case"run_started":case"run_completed":case"run_failed":case"run_cancelled":case"run_interrupted":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:L1(),runId:Z.run.id,taskId:Z.run.taskId,agentId:Z.run.agentId,message:Z.run.error};case"run_progress":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:L1(),runId:Z.run.id,taskId:Z.run.taskId,agentId:Z.run.agentId,message:Z.message};case"outcome_created":case"outcome_finalized":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:L1(),outcomeId:Z.outcome.id};case"outcome_fragment_attached":case"outcome_fragment_reviewed":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:L1(),outcomeId:Z.fragment.outcomeId,fragmentId:Z.fragment.id,agentId:Z.fragment.sourceAgentId};case"team_message":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:L1(),taskId:Z.message.taskId,agentId:Z.message.fromAgentId,message:Z.message.subject};case"team_mission_log":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:L1(),taskId:Z.entry.taskId,agentId:Z.entry.agentId,message:Z.entry.summary};case"teammate_spawned":case"teammate_shutdown":case"task_start":case"task_end":case"agent_event":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:L1(),agentId:Z.agentId}}return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:L1()}}import{sanitizeFileName as HS,TeamMessageType as I}from"@cline/shared";import{nanoid as BS}from"nanoid";import{TeamMessageType as zn}from"@cline/shared";function oJ($){if(typeof DOMException<"u"&&$ instanceof DOMException&&$.name==="AbortError")return!0;if(!($ instanceof Error))return!1;return $.name==="AbortError"||$.message.toLowerCase().includes("aborted")}function WA($,Z){return $?.status==="stopped"&&oJ(Z)}var GS=600000,JA="recovered_queued";function KS($){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.
|
|
516
517
|
|
|
517
|
-
${$.message}`}class
|
|
518
|
+
${$.message}`}class G4{agents=new Map;configs=new Map;onTeamEvent;constructor($,Z){if(this.onTeamEvent=Z,$)for(let[Q,W]of Object.entries($))this.addAgent(Q,W)}addAgent($,Z){if(this.agents.has($))throw Error(`Agent with id "${$}" already exists in the team`);let Q={...Z,onEvent:(J)=>{Z.onEvent?.(J),this.emitEvent({type:I.AgentEvent,agentId:$,event:J})}},W=new z$(Q);if(Q.onEvent)W.subscribeEvents(Q.onEvent);this.agents.set($,W),this.configs.set($,Z)}removeAgent($){return this.configs.delete($),this.agents.delete($)}getAgent($){return this.agents.get($)}getAgentIds(){return Array.from(this.agents.keys())}get size(){return this.agents.size}async routeTo($,Z){let Q=this.agents.get($);if(!Q)throw Error(`Agent "${$}" not found in team`);this.emitEvent({type:I.TaskStart,agentId:$,message:Z});try{let W=await Q.run(Z);return this.emitEvent({type:I.TaskEnd,agentId:$,result:W}),W}catch(W){let J=W instanceof Error?W:Error(String(W));throw this.emitEvent({type:I.TaskEnd,agentId:$,error:J,messages:Q.getMessages()}),W}}async continueTo($,Z){let Q=this.agents.get($);if(!Q)throw Error(`Agent "${$}" not found in team`);this.emitEvent({type:I.TaskStart,agentId:$,message:Z});try{let W=await Q.continue(Z);return this.emitEvent({type:I.TaskEnd,agentId:$,result:W}),W}catch(W){let J=W instanceof Error?W:Error(String(W));throw this.emitEvent({type:I.TaskEnd,agentId:$,error:J,messages:Q.getMessages()}),W}}async runParallel($){let Z=$.map(async(Q)=>{let W=this.agents.get(Q.agentId);if(!W)return{agentId:Q.agentId,result:void 0,error:Error(`Agent "${Q.agentId}" not found in team`),metadata:Q.metadata};this.emitEvent({type:I.TaskStart,agentId:Q.agentId,message:Q.message});try{let J=await W.run(Q.message);return this.emitEvent({type:I.TaskEnd,agentId:Q.agentId,result:J}),{agentId:Q.agentId,result:J,metadata:Q.metadata}}catch(J){let X=J instanceof Error?J:Error(String(J));return this.emitEvent({type:I.TaskEnd,agentId:Q.agentId,error:X,messages:W.getMessages()}),{agentId:Q.agentId,result:void 0,error:X,metadata:Q.metadata}}});return Promise.all(Z)}async runSequential($){let Z=[];for(let Q of $){let W=this.agents.get(Q.agentId);if(!W){Z.push({agentId:Q.agentId,result:void 0,error:Error(`Agent "${Q.agentId}" not found in team`),metadata:Q.metadata});continue}this.emitEvent({type:I.TaskStart,agentId:Q.agentId,message:Q.message});try{let J=await W.run(Q.message);this.emitEvent({type:I.TaskEnd,agentId:Q.agentId,result:J}),Z.push({agentId:Q.agentId,result:J,metadata:Q.metadata})}catch(J){let X=J instanceof Error?J:Error(String(J));this.emitEvent({type:I.TaskEnd,agentId:Q.agentId,error:X,messages:W.getMessages()}),Z.push({agentId:Q.agentId,result:void 0,error:X,metadata:Q.metadata})}}return Z}async runPipeline($,Z,Q){let W=[],J=Z;for(let X of $){let Y=this.agents.get(X);if(!Y){W.push({agentId:X,result:void 0,error:Error(`Agent "${X}" not found in team`)});break}this.emitEvent({type:I.TaskStart,agentId:X,message:J});try{let j=await Y.run(J);this.emitEvent({type:I.TaskEnd,agentId:X,result:j}),W.push({agentId:X,result:j});let V=$.indexOf(X)+1;if(V<$.length){let H=$[V];J=Q?Q(j,H):`Previous agent output:
|
|
518
519
|
${j.text}
|
|
519
520
|
|
|
520
|
-
Please continue from here.`}}catch(j){let V=j instanceof Error?j:Error(String(j));this.emitEvent({type:I.TaskEnd,agentId:X,error:V,messages:Y.getMessages()}),W.push({agentId:X,result:void 0,error:V});break}}return W}abortAll(){for(let $ of this.agents.values())$.abort(Error("Agent team abortAll requested"))}clear(){this.abortAll(),this.agents.clear(),this.configs.clear()}emitEvent($){try{this.onTeamEvent?.($)}catch{}}}function tJ($,Z){return new
|
|
521
|
+
Please continue from here.`}}catch(j){let V=j instanceof Error?j:Error(String(j));this.emitEvent({type:I.TaskEnd,agentId:X,error:V,messages:Y.getMessages()}),W.push({agentId:X,result:void 0,error:V});break}}return W}abortAll(){for(let $ of this.agents.values())$.abort(Error("Agent team abortAll requested"))}clear(){this.abortAll(),this.agents.clear(),this.configs.clear()}emitEvent($){try{this.onTeamEvent?.($)}catch{}}}function tJ($,Z){return new G4($,Z)}function YA($){let Z=tJ({worker:$.worker,reviewer:$.reviewer}),Q=Z;return Q.doAndReview=async(W)=>{let J=await Z.routeTo("worker",W),X=await Z.routeTo("reviewer",`Please review this work:
|
|
521
522
|
|
|
522
|
-
${J.text}`);return{workerResult:J,reviewResult:X}},Q}class
|
|
523
|
+
${J.text}`);return{workerResult:J,reviewResult:X}},Q}class h2{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_${HS(BS(10))}`,this.onTeamEvent=$.onTeamEvent,this.missionLogIntervalSteps=Math.max(1,$.missionLogIntervalSteps??3),this.missionLogIntervalMs=Math.max(1000,$.missionLogIntervalMs??120000),this.maxConcurrentRuns=Math.max(1,$.maxConcurrentRuns??2);let Z=$.leadAgentId??"lead";this.members.set(Z,{agentId:Z,role:"lead",status:"idle",runningCount:0,lastMissionStep:0,lastMissionAt:Date.now()})}getTeamId(){return this.teamId}getTeamName(){return this.teamName}getMemberRole($){return this.members.get($)?.role}getMemberIds(){return Array.from(this.members.keys())}getTeammateIds(){return Array.from(this.members.values()).filter(($)=>$.role==="teammate").map(($)=>$.agentId)}getTask($){return this.tasks.get($)}listTasks(){return Array.from(this.tasks.values())}listTaskItems($){return Array.from(this.tasks.values()).map((Z)=>{let Q=this.getUnresolvedDependencies(Z);return{...Z,blockedBy:Q,isReady:Z.status==="pending"&&!Z.assignee&&Q.length===0}}).filter((Z)=>{if($?.status&&Z.status!==$.status)return!1;if($?.assignee&&Z.assignee!==$.assignee)return!1;return!0})}listMissionLog($){if(!$||$<=0)return[...this.missionLog];return this.missionLog.slice(Math.max(0,this.missionLog.length-$))}listMailbox($,Z){let Q=Z?.unreadOnly??!0,W=Z?.markRead??!0,J=Z?.limit,X=this.mailbox.filter((j)=>j.toAgentId===$&&(!Q||!j.readAt)),Y=typeof J==="number"&&J>0?X.slice(Math.max(0,X.length-J)):X;if(W){let j=new Date;for(let V of Y)if(!V.readAt)V.readAt=j}return Y.map((j)=>({...j}))}getSnapshot(){let $={pending:0,in_progress:0,blocked:0,completed:0};for(let Q of this.tasks.values())$[Q.status]++;let Z={draft:0,in_review:0,finalized:0};for(let Q of this.outcomes.values())Z[Q.status]++;return{teamId:this.teamId,teamName:this.teamName,members:Array.from(this.members.values()).map((Q)=>({agentId:Q.agentId,role:Q.role,description:Q.description,status:Q.status})),taskCounts:$,unreadMessages:this.mailbox.filter((Q)=>!Q.readAt).length,missionLogEntries:this.missionLog.length,activeRuns:Array.from(this.runs.values()).filter((Q)=>Q.status==="running").length,queuedRuns:Array.from(this.runs.values()).filter((Q)=>Q.status==="queued").length,outcomeCounts:Z}}exportState(){return{teamId:this.teamId,teamName:this.teamName,members:Array.from(this.members.values()).map(($)=>({agentId:$.agentId,role:$.role,description:$.description,status:$.status})),tasks:Array.from(this.tasks.values()).map(($)=>({...$})),mailbox:this.mailbox.map(($)=>({...$})),missionLog:this.missionLog.map(($)=>({...$})),runs:Array.from(this.runs.values()).map(($)=>({...$})),outcomes:Array.from(this.outcomes.values()).map(($)=>({...$})),outcomeFragments:Array.from(this.outcomeFragments.values()).map(($)=>({...$}))}}hydrateState($){this.clearQueuedRunDispatchTimer(),this.tasks.clear();for(let Q of $.tasks)this.tasks.set(Q.id,{...Q});this.mailbox.length=0,this.mailbox.push(...$.mailbox.map((Q)=>({...Q}))),this.missionLog.length=0,this.missionLog.push(...$.missionLog.map((Q)=>({...Q}))),this.runs.clear();for(let Q of $.runs??[])this.runs.set(Q.id,{...Q});this.runQueue.length=0,this.runQueue.push(...Array.from(this.runs.values()).filter((Q)=>Q.status==="queued").map((Q)=>Q.id)),this.outcomes.clear();for(let Q of $.outcomes??[])this.outcomes.set(Q.id,{...Q});this.outcomeFragments.clear();for(let Q of $.outcomeFragments??[])this.outcomeFragments.set(Q.id,{...Q});let Z=Array.from(this.members.values()).filter((Q)=>Q.role==="lead");this.members.clear();for(let Q of Z)this.members.set(Q.agentId,{...Q,status:"idle",runningCount:0,lastMissionStep:this.missionStepCounter,lastMissionAt:Date.now()});for(let Q of $.members){if(Q.role!=="teammate")continue;this.members.set(Q.agentId,{agentId:Q.agentId,role:"teammate",description:Q.description,status:"stopped",agent:void 0,runningCount:0,lastMissionStep:this.missionStepCounter,lastMissionAt:Date.now()})}this.taskCounter=Math.max(this.taskCounter,B4($.tasks.map((Q)=>Q.id),"task_")),this.messageCounter=Math.max(this.messageCounter,B4($.mailbox.map((Q)=>Q.id),"msg_")),this.missionCounter=Math.max(this.missionCounter,B4($.missionLog.map((Q)=>Q.id),"log_")),this.runCounter=Math.max(this.runCounter,B4(($.runs??[]).map((Q)=>Q.id),"run_")),this.outcomeCounter=Math.max(this.outcomeCounter,B4(($.outcomes??[]).map((Q)=>Q.id),"out_")),this.outcomeFragmentCounter=Math.max(this.outcomeFragmentCounter,B4(($.outcomeFragments??[]).map((Q)=>Q.id),"frag_"))}isTeammateActive($){let Z=this.members.get($);return!!Z&&Z.role==="teammate"&&!!Z.agent}spawnTeammate({agentId:$,config:Z}){let Q=this.members.get($);if(Q&&Q.role!=="teammate")throw Error(`Team member "${$}" already exists and is not a teammate`);if(Q&&Q.runningCount>0)throw Error(`Teammate "${$}" is currently running and cannot be respawned`);let W={...Z,apiTimeoutMs:GS,consumePendingUserMessage:()=>{let Y=this.members.get($);if(!Y||!Y.pendingSteerMessage)return;let j=Y.pendingSteerMessage;return Y.pendingSteerMessage=void 0,j},onEvent:(Y)=>{Z.onEvent?.(Y),this.emitEvent({type:I.AgentEvent,agentId:$,event:Y}),this.trackMeaningfulEvent($,Y)}},J=new z$(W);if(W.onEvent)J.subscribeEvents(W.onEvent);let X={agentId:$,role:"teammate",description:Z.role,status:"idle",agent:J,runningCount:0,lastMissionStep:0,lastMissionAt:Date.now()};return this.members.set($,X),this.emitEvent({type:I.TeammateSpawned,agentId:$,role:Z.role,teammate:{rolePrompt:Z.systemPrompt,modelId:Z.modelId,maxIterations:Z.maxIterations,runtimeAgentId:J.getAgentId(),conversationId:J.getConversationId(),parentAgentId:null}}),{agentId:X.agentId,role:X.role,description:X.description,status:X.status}}shutdownTeammate($,Z){let Q=this.members.get($);if(!Q||Q.role!=="teammate")throw Error(`Teammate "${$}" was not found`);try{Q.agent?.abort()}catch(W){if(!oJ(W))throw W}Q.status="stopped",this.emitEvent({type:I.TeammateShutdown,agentId:$,reason:Z})}updateTeammateConnections($){for(let Z of this.members.values()){if(Z.role!=="teammate"||!Z.agent)continue;Z.agent.updateConnection($)}}createTask($){let Z=`task_${String(++this.taskCounter).padStart(4,"0")}`,Q=new Date,W={id:Z,title:$.title,description:$.description,status:$.assignee?"in_progress":"pending",createdAt:Q,updatedAt:Q,createdBy:$.createdBy,assignee:$.assignee,dependsOn:$.dependsOn??[]};return this.tasks.set(Z,W),this.emitEvent({type:I.TeamTaskUpdated,task:{...W}}),{...W}}claimTask($,Z){let Q=this.requireTask($);return this.assertDependenciesResolved(Q),Q.status="in_progress",Q.assignee=Z,Q.updatedAt=new Date,this.emitEvent({type:I.TeamTaskUpdated,task:{...Q}}),this.appendMissionLog({agentId:Z,taskId:$,kind:"progress",summary:`Claimed task "${Q.title}"`}),{...Q}}blockTask($,Z,Q){let W=this.requireTask($);return W.status="blocked",W.updatedAt=new Date,W.summary=Q,this.emitEvent({type:I.TeamTaskUpdated,task:{...W}}),this.appendMissionLog({agentId:Z,taskId:$,kind:"blocked",summary:Q}),{...W}}completeTask($,Z,Q){let W=this.requireTask($);if(W.status="completed",W.updatedAt=new Date,W.summary=Q,!W.assignee)W.assignee=Z;return this.emitEvent({type:I.TeamTaskUpdated,task:{...W}}),this.appendMissionLog({agentId:Z,taskId:$,kind:"done",summary:Q}),{...W}}async routeToTeammate($,Z,Q){let W=this.members.get($);if(!W||W.role!=="teammate"||!W.agent)throw Error(`Teammate "${$}" was not found`);if(!W.agent.canStartRun())throw Error("Cannot start a new run while another run is already in progress");W.runningCount++,W.status="running",this.emitEvent({type:I.TaskStart,agentId:$,message:Z});try{let J=this.listMailbox($,{unreadOnly:!0,markRead:!0}),X=J.length>0?`${this.buildMailboxNotification(J)}
|
|
523
524
|
|
|
524
|
-
${Z}`:Z,Y=Q?.continueConversation?await W.agent.continue(X):await W.agent.run(X);return this.emitEvent({type:I.TaskEnd,agentId:$,result:Y}),this.recordProgressStep($,`Completed a delegated run (${Y.iterations} iterations)`,Q?.taskId,!0),Y}catch(J){let X=J instanceof Error?J:Error(String(J));if(this.emitEvent({type:I.TaskEnd,agentId:$,error:X,messages:W.agent.getMessages()}),!QA(W,X))this.appendMissionLog({agentId:$,taskId:Q?.taskId,kind:"error",summary:X.message});throw X}finally{if(W.runningCount--,W.runningCount<=0&&this.members.get($)?.status!=="stopped")W.status="idle"}}startTeammateRun($,Z,Q){let W=`run_${String(++this.runCounter).padStart(5,"0")}`,J={id:W,agentId:$,taskId:Q?.taskId,status:"queued",message:Z,priority:Q?.priority??0,retryCount:0,maxRetries:Math.max(0,Q?.maxRetries??0),continueConversation:Q?.continueConversation,startedAt:new Date(0),leaseOwner:Q?.leaseOwner,heartbeatAt:void 0,lastProgressAt:new Date,lastProgressMessage:"queued",currentActivity:"queued"};return this.runs.set(W,J),this.runQueue.push(W),this.emitEvent({type:I.RunQueued,run:{...J}}),this.dispatchQueuedRuns(),{...J}}dispatchQueuedRuns(){this.clearQueuedRunDispatchTimer();let $;while(this.countActiveRuns()<this.maxConcurrentRuns&&this.runQueue.length>0){let Z=this.selectNextDispatchableQueuedRun();$=Z.nextDelayedAttemptAt;let Q=Z.index;if(Q<0){this.scheduleQueuedRunDispatch($);return}let[W]=this.runQueue.splice(Q,1),J=W?this.runs.get(W):void 0;if(!J||J.status!=="queued")continue;this.executeQueuedRun(J)}this.scheduleQueuedRunDispatch($)}selectNextDispatchableQueuedRun(){let $=-1,Z=Number.NEGATIVE_INFINITY,Q,W=Date.now();for(let J=0;J<this.runQueue.length;J++){let X=this.runs.get(this.runQueue[J]);if(!X||X.status!=="queued")continue;if(X.nextAttemptAt&&X.nextAttemptAt.getTime()>W){if(!Q||X.nextAttemptAt<Q)Q=X.nextAttemptAt;continue}if(X.priority>Z)Z=X.priority,$=J}return{index:$,nextDelayedAttemptAt:Q}}scheduleQueuedRunDispatch($){if(!$)return;let Z=Math.max(0,$.getTime()-Date.now());this.queuedRunDispatchTimer=setTimeout(()=>{this.queuedRunDispatchTimer=void 0,this.dispatchQueuedRuns()},Z)}clearQueuedRunDispatchTimer(){if(!this.queuedRunDispatchTimer)return;clearTimeout(this.queuedRunDispatchTimer),this.queuedRunDispatchTimer=void 0}countActiveRuns(){let $=0;for(let Z of this.runs.values())if(Z.status==="running")$++;return $}async executeQueuedRun($){let Z=$.currentActivity===WA;$.nextAttemptAt=void 0,$.status="running",$.startedAt=new Date,$.heartbeatAt=new Date,$.currentActivity="run_started",this.emitEvent({type:I.RunStarted,run:{...$}});let Q=setInterval(()=>{if($.status!=="running")return;this.recordRunProgress($,"heartbeat")},2000);try{let W=Z?jS($):$.message,J=await this.routeToTeammate($.agentId,W,{taskId:$.taskId,continueConversation:$.continueConversation});$.status="completed",$.result=J,$.endedAt=new Date,$.currentActivity="completed",this.emitEvent({type:I.RunCompleted,run:{...$}})}catch(W){let J=W instanceof Error?W.message:String(W??"Unknown error");$.error=J,$.endedAt=new Date;let X=this.members.get($.agentId);if(QA(X,W))$.status="cancelled",$.currentActivity="cancelled",this.emitEvent({type:I.RunCancelled,run:{...$},reason:J});else if($.retryCount<$.maxRetries)$.retryCount++,$.status="queued",$.nextAttemptAt=new Date(Date.now()+Math.min(30000,1000*2**$.retryCount)),this.runQueue.push($.id),this.recordRunProgress($,`retry_scheduled_${$.retryCount}`);else $.status="failed",$.currentActivity="failed",this.emitEvent({type:I.RunFailed,run:{...$}})}finally{clearInterval(Q),this.dispatchQueuedRuns()}}listRuns($){let Z=$?.includeCompleted??!0;return Array.from(this.runs.values()).filter((Q)=>{if(!Z&&!["running","queued"].includes(Q.status))return!1;if($?.status&&Q.status!==$.status)return!1;if($?.agentId&&Q.agentId!==$.agentId)return!1;return!0}).map((Q)=>({...Q}))}getRun($){let Z=this.runs.get($);return Z?{...Z}:void 0}async awaitRun($,Z=250){let Q=this.runs.get($);if(!Q)throw Error(`Run "${$}" was not found`);while(Q.status==="queued"||Q.status==="running")await JA(Z);return{...Q}}async awaitAllRuns($=250){while(Array.from(this.runs.values()).some((Z)=>["queued","running"].includes(Z.status)))await JA($);return this.listRuns()}cancelRun($,Z){let Q=this.runs.get($);if(!Q)throw Error(`Run "${$}" was not found`);if(Q.status==="completed"||Q.status==="failed")return{...Q};Q.status="cancelled",Q.error=Z,Q.endedAt=new Date,Q.currentActivity="cancelled";let W=this.runQueue.indexOf($);if(W>=0)this.runQueue.splice(W,1);return this.emitEvent({type:I.RunCancelled,run:{...Q},reason:Z}),{...Q}}recoverActiveRuns($="runtime_recovered"){let Z=[];for(let Q of this.runs.values()){if(!["queued","running"].includes(Q.status))continue;let W=this.members.get(Q.agentId);if(!W||W.role!=="teammate"||!W.agent){Q.status="interrupted",Q.error="teammate_unavailable_after_recovery",Q.endedAt=new Date,Q.currentActivity="interrupted",this.emitEvent({type:I.RunInterrupted,run:{...Q},reason:Q.error});continue}let J=new Date;if(Q.status="queued",Q.error=void 0,Q.endedAt=void 0,Q.heartbeatAt=J,Q.lastProgressAt=J,Q.lastProgressMessage=$,Q.currentActivity=WA,!this.runQueue.includes(Q.id))this.runQueue.push(Q.id);Z.push({...Q}),this.emitEvent({type:I.RunQueued,run:{...Q}})}return this.dispatchQueuedRuns(),Z}markStaleRunsInterrupted($="runtime_recovered"){let Z=[];for(let Q of this.runs.values()){if(!["queued","running"].includes(Q.status))continue;Q.status="interrupted",Q.error=$,Q.endedAt=new Date,Q.currentActivity="interrupted",Z.push({...Q}),this.emitEvent({type:I.RunInterrupted,run:{...Q},reason:$})}return this.runQueue.length=0,this.clearQueuedRunDispatchTimer(),Z}sendMessage($,Z,Q,W,J){if(!this.members.has($))throw Error(`Unknown sender "${$}"`);let X=this.members.get(Z);if(!X)throw Error(`Unknown recipient "${Z}"`);let Y={id:`msg_${String(++this.messageCounter).padStart(5,"0")}`,teamId:this.teamId,fromAgentId:$,toAgentId:Z,subject:Q,body:W,taskId:J,sentAt:new Date};if(this.mailbox.push(Y),this.emitEvent({type:I.TeamMessage,message:{...Y}}),X.role==="teammate"&&X.runningCount>0&&X.agent)X.pendingSteerMessage=`[MAILBOX] You got a message from ${$}. Subject: "${Q}". Use the team_read_mailbox tool to read it at your convenience.`;return{...Y}}broadcast($,Z,Q,W){let J=[];for(let X of this.members.values()){if(X.agentId===$)continue;if(X.role==="lead")continue;J.push(this.sendMessage($,X.agentId,Z,Q,W?.taskId))}return J}appendMissionLog($){if(!this.members.has($.agentId))throw Error(`Unknown team member "${$.agentId}"`);let Z={id:`log_${String(++this.missionCounter).padStart(6,"0")}`,ts:new Date,teamId:this.teamId,agentId:$.agentId,taskId:$.taskId,kind:$.kind,summary:$.summary,evidence:$.evidence,nextAction:$.nextAction};this.missionLog.push(Z);let Q=this.members.get($.agentId);if(Q)Q.lastMissionAt=Date.now(),Q.lastMissionStep=this.missionStepCounter;return this.emitEvent({type:I.TeamMissionLog,entry:{...Z}}),{...Z}}createOutcome($){let Z={id:`out_${String(++this.outcomeCounter).padStart(4,"0")}`,teamId:this.teamId,title:$.title,status:"draft",requiredSections:[...new Set($.requiredSections)],createdBy:$.createdBy,createdAt:new Date};return this.outcomes.set(Z.id,Z),this.emitEvent({type:I.OutcomeCreated,outcome:{...Z}}),{...Z}}listOutcomes(){return Array.from(this.outcomes.values()).map(($)=>({...$}))}attachOutcomeFragment($){let Z=this.outcomes.get($.outcomeId);if(!Z)throw Error(`Outcome "${$.outcomeId}" was not found`);if(!Z.requiredSections.includes($.section))throw Error(`Section "${$.section}" is not part of outcome "${$.outcomeId}"`);let Q={id:`frag_${String(++this.outcomeFragmentCounter).padStart(5,"0")}`,teamId:this.teamId,outcomeId:$.outcomeId,section:$.section,sourceAgentId:$.sourceAgentId,sourceRunId:$.sourceRunId,content:$.content,status:"draft",createdAt:new Date};if(this.outcomeFragments.set(Q.id,Q),Z.status==="draft")Z.status="in_review";return this.emitEvent({type:I.OutcomeFragmentAttached,fragment:{...Q}}),{...Q}}reviewOutcomeFragment($){let Z=this.outcomeFragments.get($.fragmentId);if(!Z)throw Error(`Fragment "${$.fragmentId}" was not found`);return Z.status=$.approved?"reviewed":"rejected",Z.reviewedBy=$.reviewedBy,Z.reviewedAt=new Date,this.emitEvent({type:I.OutcomeFragmentReviewed,fragment:{...Z}}),{...Z}}listOutcomeFragments($){return Array.from(this.outcomeFragments.values()).filter((Z)=>Z.outcomeId===$).map((Z)=>({...Z}))}finalizeOutcome($){let Z=this.outcomes.get($);if(!Z)throw Error(`Outcome "${$}" was not found`);let Q=this.listOutcomeFragments($);for(let W of Z.requiredSections)if(!Q.some((X)=>X.section===W&&X.status==="reviewed"))throw Error(`Outcome "${$}" cannot be finalized. Section "${W}" is missing a reviewed fragment.`);return Z.status="finalized",Z.finalizedAt=new Date,this.emitEvent({type:I.OutcomeFinalized,outcome:{...Z}}),{...Z}}cleanup(){for(let $ of this.members.values())if($.role==="teammate"&&$.runningCount>0)throw Error(`Cannot cleanup team while teammate "${$.agentId}" is still running`);if(Array.from(this.runs.values()).some(($)=>["queued","running"].includes($.status)))throw Error("Cannot cleanup team while async teammate runs are still active");for(let $ of this.members.values())if($.role==="teammate")try{$.agent?.abort()}catch(Z){if(!oJ(Z))throw Z}this.tasks.clear(),this.mailbox.length=0,this.missionLog.length=0,this.runs.clear(),this.runQueue.length=0,this.clearQueuedRunDispatchTimer(),this.outcomes.clear(),this.outcomeFragments.clear();for(let[$,Z]of this.members.entries())if(Z.role==="teammate")this.members.delete($)}requireTask($){let Z=this.tasks.get($);if(!Z)throw Error(`Task "${$}" was not found`);return Z}assertDependenciesResolved($){let Z=this.getUnresolvedDependencies($);if(Z.length>0)throw Error(`Task "${$.id}" is blocked by "${Z[0]}"`)}getUnresolvedDependencies($){return $.dependsOn.filter((Z)=>{let Q=this.tasks.get(Z);return!Q||Q.status!=="completed"})}trackMeaningfulEvent($,Z){if(this.recordRunActivityFromAgentEvent($,Z),Z.type==="iteration_end"&&Z.hadToolCalls){this.recordProgressStep($,`Completed iteration ${Z.iteration} with ${Z.toolCallCount} tool call(s)`);return}if(Z.type==="content_end"&&Z.contentType==="tool"&&!Z.error){this.recordProgressStep($,`Finished tool "${Z.toolName??"unknown"}"`);return}if(Z.type==="done"){this.appendMissionLog({agentId:$,kind:"done",summary:`Completed a delegated run (${Z.iterations} iterations)`});return}if(Z.type==="error")this.appendMissionLog({agentId:$,kind:"error",summary:Z.error.message})}recordRunActivityFromAgentEvent($,Z){let Q;switch(Z.type){case"iteration_start":Q=`iteration_${Z.iteration}_started`;break;case"content_start":if(Z.contentType==="tool")Q=`running_tool_${Z.toolName??"unknown"}`;break;case"content_end":if(Z.contentType==="tool")Q=Z.error?this.formatProgressErrorActivity(`tool_${Z.toolName??"unknown"}_error`,Z.error):`finished_tool_${Z.toolName??"unknown"}`;break;case"done":Q="finalizing_response";break;case"error":Q=this.formatProgressErrorActivity("run_error",Z.error.message);break;default:break}if(!Q)return;for(let W of this.runs.values()){if(W.agentId!==$||W.status!=="running")continue;this.recordRunProgress(W,Q)}}recordRunProgress($,Z){let Q=new Date;$.heartbeatAt=Q,$.lastProgressAt=Q,$.lastProgressMessage=Z,$.currentActivity=Z,this.emitEvent({type:I.RunProgress,run:{...$},message:Z})}formatProgressErrorActivity($,Z){let Q=Z.replace(/\s+/g," ").trim();if(Q.length===0)return $;let W=Q.length>240?`${Q.slice(0,237).trimEnd()}...`:Q;return`${$}: ${W}`}recordProgressStep($,Z,Q,W=!1){this.missionStepCounter++;let J=this.members.get($);if(!J)return;let X=this.missionStepCounter-J.lastMissionStep,Y=Date.now()-J.lastMissionAt;if(!W&&X<this.missionLogIntervalSteps&&Y<this.missionLogIntervalMs)return;this.appendMissionLog({agentId:$,taskId:Q,kind:"progress",summary:Z})}buildMailboxNotification($){if($.length===0)return"";let Z=[`[MAILBOX] You have ${$.length} unread message(s):`];for(let Q of $)Z.push(`--- Message from ${Q.fromAgentId} | subject: ${Q.subject} ---`),Z.push(Q.body);return Z.push("---"),Z.join(`
|
|
525
|
-
`)}emitEvent($){try{this.onTeamEvent?.($)}catch{}}}function
|
|
525
|
+
${Z}`:Z,Y=Q?.continueConversation?await W.agent.continue(X):await W.agent.run(X);return this.emitEvent({type:I.TaskEnd,agentId:$,result:Y}),this.recordProgressStep($,`Completed a delegated run (${Y.iterations} iterations)`,Q?.taskId,!0),Y}catch(J){let X=J instanceof Error?J:Error(String(J));if(this.emitEvent({type:I.TaskEnd,agentId:$,error:X,messages:W.agent.getMessages()}),!WA(W,X))this.appendMissionLog({agentId:$,taskId:Q?.taskId,kind:"error",summary:X.message});throw X}finally{if(W.runningCount--,W.runningCount<=0&&this.members.get($)?.status!=="stopped")W.status="idle"}}startTeammateRun($,Z,Q){let W=`run_${String(++this.runCounter).padStart(5,"0")}`,J={id:W,agentId:$,taskId:Q?.taskId,status:"queued",message:Z,priority:Q?.priority??0,retryCount:0,maxRetries:Math.max(0,Q?.maxRetries??0),continueConversation:Q?.continueConversation,startedAt:new Date(0),leaseOwner:Q?.leaseOwner,heartbeatAt:void 0,lastProgressAt:new Date,lastProgressMessage:"queued",currentActivity:"queued"};return this.runs.set(W,J),this.runQueue.push(W),this.emitEvent({type:I.RunQueued,run:{...J}}),this.dispatchQueuedRuns(),{...J}}dispatchQueuedRuns(){this.clearQueuedRunDispatchTimer();let $;while(this.countActiveRuns()<this.maxConcurrentRuns&&this.runQueue.length>0){let Z=this.selectNextDispatchableQueuedRun();$=Z.nextDelayedAttemptAt;let Q=Z.index;if(Q<0){this.scheduleQueuedRunDispatch($);return}let[W]=this.runQueue.splice(Q,1),J=W?this.runs.get(W):void 0;if(!J||J.status!=="queued")continue;this.executeQueuedRun(J)}this.scheduleQueuedRunDispatch($)}selectNextDispatchableQueuedRun(){let $=-1,Z=Number.NEGATIVE_INFINITY,Q,W=Date.now();for(let J=0;J<this.runQueue.length;J++){let X=this.runs.get(this.runQueue[J]);if(!X||X.status!=="queued")continue;if(X.nextAttemptAt&&X.nextAttemptAt.getTime()>W){if(!Q||X.nextAttemptAt<Q)Q=X.nextAttemptAt;continue}if(X.priority>Z)Z=X.priority,$=J}return{index:$,nextDelayedAttemptAt:Q}}scheduleQueuedRunDispatch($){if(!$)return;let Z=Math.max(0,$.getTime()-Date.now());this.queuedRunDispatchTimer=setTimeout(()=>{this.queuedRunDispatchTimer=void 0,this.dispatchQueuedRuns()},Z)}clearQueuedRunDispatchTimer(){if(!this.queuedRunDispatchTimer)return;clearTimeout(this.queuedRunDispatchTimer),this.queuedRunDispatchTimer=void 0}countActiveRuns(){let $=0;for(let Z of this.runs.values())if(Z.status==="running")$++;return $}async executeQueuedRun($){let Z=$.currentActivity===JA;$.nextAttemptAt=void 0,$.status="running",$.startedAt=new Date,$.heartbeatAt=new Date,$.currentActivity="run_started",this.emitEvent({type:I.RunStarted,run:{...$}});let Q=setInterval(()=>{if($.status!=="running")return;this.recordRunProgress($,"heartbeat")},2000);try{let W=Z?KS($):$.message,J=await this.routeToTeammate($.agentId,W,{taskId:$.taskId,continueConversation:$.continueConversation});$.status="completed",$.result=J,$.endedAt=new Date,$.currentActivity="completed",this.emitEvent({type:I.RunCompleted,run:{...$}})}catch(W){let J=W instanceof Error?W.message:String(W??"Unknown error");$.error=J,$.endedAt=new Date;let X=this.members.get($.agentId);if(WA(X,W))$.status="cancelled",$.currentActivity="cancelled",this.emitEvent({type:I.RunCancelled,run:{...$},reason:J});else if($.retryCount<$.maxRetries)$.retryCount++,$.status="queued",$.nextAttemptAt=new Date(Date.now()+Math.min(30000,1000*2**$.retryCount)),this.runQueue.push($.id),this.recordRunProgress($,`retry_scheduled_${$.retryCount}`);else $.status="failed",$.currentActivity="failed",this.emitEvent({type:I.RunFailed,run:{...$}})}finally{clearInterval(Q),this.dispatchQueuedRuns()}}listRuns($){let Z=$?.includeCompleted??!0;return Array.from(this.runs.values()).filter((Q)=>{if(!Z&&!["running","queued"].includes(Q.status))return!1;if($?.status&&Q.status!==$.status)return!1;if($?.agentId&&Q.agentId!==$.agentId)return!1;return!0}).map((Q)=>({...Q}))}getRun($){let Z=this.runs.get($);return Z?{...Z}:void 0}async awaitRun($,Z=250){let Q=this.runs.get($);if(!Q)throw Error(`Run "${$}" was not found`);while(Q.status==="queued"||Q.status==="running")await XA(Z);return{...Q}}async awaitAllRuns($=250){while(Array.from(this.runs.values()).some((Z)=>["queued","running"].includes(Z.status)))await XA($);return this.listRuns()}cancelRun($,Z){let Q=this.runs.get($);if(!Q)throw Error(`Run "${$}" was not found`);if(Q.status==="completed"||Q.status==="failed")return{...Q};Q.status="cancelled",Q.error=Z,Q.endedAt=new Date,Q.currentActivity="cancelled";let W=this.runQueue.indexOf($);if(W>=0)this.runQueue.splice(W,1);return this.emitEvent({type:I.RunCancelled,run:{...Q},reason:Z}),{...Q}}recoverActiveRuns($="runtime_recovered"){let Z=[];for(let Q of this.runs.values()){if(!["queued","running"].includes(Q.status))continue;let W=this.members.get(Q.agentId);if(!W||W.role!=="teammate"||!W.agent){Q.status="interrupted",Q.error="teammate_unavailable_after_recovery",Q.endedAt=new Date,Q.currentActivity="interrupted",this.emitEvent({type:I.RunInterrupted,run:{...Q},reason:Q.error});continue}let J=new Date;if(Q.status="queued",Q.error=void 0,Q.endedAt=void 0,Q.heartbeatAt=J,Q.lastProgressAt=J,Q.lastProgressMessage=$,Q.currentActivity=JA,!this.runQueue.includes(Q.id))this.runQueue.push(Q.id);Z.push({...Q}),this.emitEvent({type:I.RunQueued,run:{...Q}})}return this.dispatchQueuedRuns(),Z}markStaleRunsInterrupted($="runtime_recovered"){let Z=[];for(let Q of this.runs.values()){if(!["queued","running"].includes(Q.status))continue;Q.status="interrupted",Q.error=$,Q.endedAt=new Date,Q.currentActivity="interrupted",Z.push({...Q}),this.emitEvent({type:I.RunInterrupted,run:{...Q},reason:$})}return this.runQueue.length=0,this.clearQueuedRunDispatchTimer(),Z}sendMessage($,Z,Q,W,J){if(!this.members.has($))throw Error(`Unknown sender "${$}"`);let X=this.members.get(Z);if(!X)throw Error(`Unknown recipient "${Z}"`);let Y={id:`msg_${String(++this.messageCounter).padStart(5,"0")}`,teamId:this.teamId,fromAgentId:$,toAgentId:Z,subject:Q,body:W,taskId:J,sentAt:new Date};if(this.mailbox.push(Y),this.emitEvent({type:I.TeamMessage,message:{...Y}}),X.role==="teammate"&&X.runningCount>0&&X.agent)X.pendingSteerMessage=`[MAILBOX] You got a message from ${$}. Subject: "${Q}". Use the team_read_mailbox tool to read it at your convenience.`;return{...Y}}broadcast($,Z,Q,W){let J=[];for(let X of this.members.values()){if(X.agentId===$)continue;if(X.role==="lead")continue;J.push(this.sendMessage($,X.agentId,Z,Q,W?.taskId))}return J}appendMissionLog($){if(!this.members.has($.agentId))throw Error(`Unknown team member "${$.agentId}"`);let Z={id:`log_${String(++this.missionCounter).padStart(6,"0")}`,ts:new Date,teamId:this.teamId,agentId:$.agentId,taskId:$.taskId,kind:$.kind,summary:$.summary,evidence:$.evidence,nextAction:$.nextAction};this.missionLog.push(Z);let Q=this.members.get($.agentId);if(Q)Q.lastMissionAt=Date.now(),Q.lastMissionStep=this.missionStepCounter;return this.emitEvent({type:I.TeamMissionLog,entry:{...Z}}),{...Z}}createOutcome($){let Z={id:`out_${String(++this.outcomeCounter).padStart(4,"0")}`,teamId:this.teamId,title:$.title,status:"draft",requiredSections:[...new Set($.requiredSections)],createdBy:$.createdBy,createdAt:new Date};return this.outcomes.set(Z.id,Z),this.emitEvent({type:I.OutcomeCreated,outcome:{...Z}}),{...Z}}listOutcomes(){return Array.from(this.outcomes.values()).map(($)=>({...$}))}attachOutcomeFragment($){let Z=this.outcomes.get($.outcomeId);if(!Z)throw Error(`Outcome "${$.outcomeId}" was not found`);if(!Z.requiredSections.includes($.section))throw Error(`Section "${$.section}" is not part of outcome "${$.outcomeId}"`);let Q={id:`frag_${String(++this.outcomeFragmentCounter).padStart(5,"0")}`,teamId:this.teamId,outcomeId:$.outcomeId,section:$.section,sourceAgentId:$.sourceAgentId,sourceRunId:$.sourceRunId,content:$.content,status:"draft",createdAt:new Date};if(this.outcomeFragments.set(Q.id,Q),Z.status==="draft")Z.status="in_review";return this.emitEvent({type:I.OutcomeFragmentAttached,fragment:{...Q}}),{...Q}}reviewOutcomeFragment($){let Z=this.outcomeFragments.get($.fragmentId);if(!Z)throw Error(`Fragment "${$.fragmentId}" was not found`);return Z.status=$.approved?"reviewed":"rejected",Z.reviewedBy=$.reviewedBy,Z.reviewedAt=new Date,this.emitEvent({type:I.OutcomeFragmentReviewed,fragment:{...Z}}),{...Z}}listOutcomeFragments($){return Array.from(this.outcomeFragments.values()).filter((Z)=>Z.outcomeId===$).map((Z)=>({...Z}))}finalizeOutcome($){let Z=this.outcomes.get($);if(!Z)throw Error(`Outcome "${$}" was not found`);let Q=this.listOutcomeFragments($);for(let W of Z.requiredSections)if(!Q.some((X)=>X.section===W&&X.status==="reviewed"))throw Error(`Outcome "${$}" cannot be finalized. Section "${W}" is missing a reviewed fragment.`);return Z.status="finalized",Z.finalizedAt=new Date,this.emitEvent({type:I.OutcomeFinalized,outcome:{...Z}}),{...Z}}cleanup(){for(let $ of this.members.values())if($.role==="teammate"&&$.runningCount>0)throw Error(`Cannot cleanup team while teammate "${$.agentId}" is still running`);if(Array.from(this.runs.values()).some(($)=>["queued","running"].includes($.status)))throw Error("Cannot cleanup team while async teammate runs are still active");for(let $ of this.members.values())if($.role==="teammate")try{$.agent?.abort()}catch(Z){if(!oJ(Z))throw Z}this.tasks.clear(),this.mailbox.length=0,this.missionLog.length=0,this.runs.clear(),this.runQueue.length=0,this.clearQueuedRunDispatchTimer(),this.outcomes.clear(),this.outcomeFragments.clear();for(let[$,Z]of this.members.entries())if(Z.role==="teammate")this.members.delete($)}requireTask($){let Z=this.tasks.get($);if(!Z)throw Error(`Task "${$}" was not found`);return Z}assertDependenciesResolved($){let Z=this.getUnresolvedDependencies($);if(Z.length>0)throw Error(`Task "${$.id}" is blocked by "${Z[0]}"`)}getUnresolvedDependencies($){return $.dependsOn.filter((Z)=>{let Q=this.tasks.get(Z);return!Q||Q.status!=="completed"})}trackMeaningfulEvent($,Z){if(this.recordRunActivityFromAgentEvent($,Z),Z.type==="iteration_end"&&Z.hadToolCalls){this.recordProgressStep($,`Completed iteration ${Z.iteration} with ${Z.toolCallCount} tool call(s)`);return}if(Z.type==="content_end"&&Z.contentType==="tool"&&!Z.error){this.recordProgressStep($,`Finished tool "${Z.toolName??"unknown"}"`);return}if(Z.type==="done"){this.appendMissionLog({agentId:$,kind:"done",summary:`Completed a delegated run (${Z.iterations} iterations)`});return}if(Z.type==="error")this.appendMissionLog({agentId:$,kind:"error",summary:Z.error.message})}recordRunActivityFromAgentEvent($,Z){let Q;switch(Z.type){case"iteration_start":Q=`iteration_${Z.iteration}_started`;break;case"content_start":if(Z.contentType==="tool")Q=`running_tool_${Z.toolName??"unknown"}`;break;case"content_end":if(Z.contentType==="tool")Q=Z.error?this.formatProgressErrorActivity(`tool_${Z.toolName??"unknown"}_error`,Z.error):`finished_tool_${Z.toolName??"unknown"}`;break;case"done":Q="finalizing_response";break;case"error":Q=this.formatProgressErrorActivity("run_error",Z.error.message);break;default:break}if(!Q)return;for(let W of this.runs.values()){if(W.agentId!==$||W.status!=="running")continue;this.recordRunProgress(W,Q)}}recordRunProgress($,Z){let Q=new Date;$.heartbeatAt=Q,$.lastProgressAt=Q,$.lastProgressMessage=Z,$.currentActivity=Z,this.emitEvent({type:I.RunProgress,run:{...$},message:Z})}formatProgressErrorActivity($,Z){let Q=Z.replace(/\s+/g," ").trim();if(Q.length===0)return $;let W=Q.length>240?`${Q.slice(0,237).trimEnd()}...`:Q;return`${$}: ${W}`}recordProgressStep($,Z,Q,W=!1){this.missionStepCounter++;let J=this.members.get($);if(!J)return;let X=this.missionStepCounter-J.lastMissionStep,Y=Date.now()-J.lastMissionAt;if(!W&&X<this.missionLogIntervalSteps&&Y<this.missionLogIntervalMs)return;this.appendMissionLog({agentId:$,taskId:Q,kind:"progress",summary:Z})}buildMailboxNotification($){if($.length===0)return"";let Z=[`[MAILBOX] You have ${$.length} unread message(s):`];for(let Q of $)Z.push(`--- Message from ${Q.fromAgentId} | subject: ${Q.subject} ---`),Z.push(Q.body);return Z.push("---"),Z.join(`
|
|
526
|
+
`)}emitEvent($){try{this.onTeamEvent?.($)}catch{}}}function XA($){return new Promise((Z)=>setTimeout(Z,$))}function B4($,Z){let Q=0;for(let W of $){if(!W.startsWith(Z))continue;let J=Number.parseInt(W.slice(Z.length),10);if(Number.isFinite(J))Q=Math.max(Q,J)}return Q}function eJ($,Z){switch(Z.type){case"run_queued":case"run_started":$.activeTeamRunIds.add(Z.run.id);break;case"run_completed":case"run_failed":case"run_cancelled":case"run_interrupted":{let Q;if(Z.type==="run_failed")Q=Z.run.error;else if(Z.type==="run_cancelled"||Z.type==="run_interrupted")Q=Z.run.error??Z.reason;$.activeTeamRunIds.delete(Z.run.id),$.pendingTeamRunUpdates.push({runId:Z.run.id,agentId:Z.run.agentId,taskId:Z.run.taskId,status:Z.type.replace("run_",""),error:Q,iterations:Z.run.result?.iterations}),pQ($);break}default:break}}async function $X($,Z,Q){switch(Z.type){case"run_progress":await Q("onTeamTaskProgress",$,Z.run.agentId,Z.message,{kind:Z.message==="heartbeat"?"heartbeat":"progress"});break;case"agent_event":if(Z.event.type==="content_start"&&Z.event.contentType==="text"&&typeof Z.event.text==="string"){let W=Z.event.text.replace(/\s+/g," ").trim().slice(0,120);if(W)await Q("onTeamTaskProgress",$,Z.agentId,W,{kind:"text"})}break;case"task_start":await Q("onTeamTaskStart",$,Z.agentId,Z.message);break;case"task_end":{if(Z.error)await Q("onTeamTaskEnd",$,Z.agentId,"failed",`[error] ${Z.error.message}`,void 0,Z.messages);else if(Z.result?.finishReason==="aborted")await Q("onTeamTaskEnd",$,Z.agentId,"cancelled","[done] aborted",Z.result,Z.result.messages);else await Q("onTeamTaskEnd",$,Z.agentId,"completed",`[done] ${Z.result?.finishReason??"completed"}`,Z.result,Z.result?.messages);break}default:break}}function ZX($,Z,Q,W){if(!$.runtime.teamRuntime)return;let J=$.runtime.teamRuntime.getTeamName();W({type:"team_progress",payload:{sessionId:Z,teamName:J,lifecycle:H4({teamName:J,sessionId:Z,event:Q}),summary:V4(J,$.runtime.teamRuntime.exportState())}})}function x5($){return $.activeTeamRunIds.size>0||$.pendingTeamRunUpdates.length>0}function QX($,Z){if($.aborting)return!1;if(!(Z==="completed"||Z==="max_iterations"))return!1;return $.config.enableAgentTeams===!0&&x5($)}function pQ($){let Z=$.teamRunWaiters.splice(0);for(let Q of Z)Q()}async function WX($){while(!0){if($.aborting)return[];if($.pendingTeamRunUpdates.length>0){let Z=[...$.pendingTeamRunUpdates];return $.pendingTeamRunUpdates.length=0,Z}if($.activeTeamRunIds.size===0)return[];await new Promise((Z)=>{$.teamRunWaiters.push(Z)})}}function JX($,Z){let Q=Z.map((X)=>{let Y=[`- ${X.runId} (${X.agentId}) -> ${X.status}`];if(X.taskId)Y.push(` task=${X.taskId}`);if(typeof X.iterations==="number")Y.push(` iterations=${X.iterations}`);if(X.error)Y.push(` error=${X.error}`);return Y.join("")}),W=$.activeTeamRunIds.size,J=W>0?`There are still ${W} teammate run(s) in progress. Continue coordination and decide whether to wait for more updates.`:"No teammate runs are currently in progress. Continue coordination using these updates.";return g5(`System-delivered teammate async run updates:
|
|
526
527
|
${Q.join(`
|
|
527
528
|
`)}
|
|
528
529
|
|
|
529
|
-
${J}`,$.config.mode)}function
|
|
530
|
-
`,"utf8"),
|
|
530
|
+
${J}`,$.config.mode)}function g5($,Z){return FS($,Z==="plan"?"plan":Z==="yolo"?"yolo":"act")}var XX=4;class e1{adapter;manifestStore;teamChildren;static STALE_REASON="failed_external_process_exit";static STALE_SOURCE="stale_session_reconciler";static TEAM_HEARTBEAT_LOG_INTERVAL_MS=30000;constructor($,Z={}){this.adapter=$;this.manifestStore=new nJ($,Z.messagesArtifactUploader,Z.logger),this.teamChildren=new dQ($,this.manifestStore,(Q,W,J)=>this.toPersistedMessages(Q,W,J),e1.TEAM_HEARTBEAT_LOG_INTERVAL_MS)}toPersistedMessages($,Z,Q){if(!$)return;return Z?hZ(Z.messages,Z,Q):yZ($)}ensureSessionsDir(){return this.manifestStore.ensureSessionsDir()}writeSessionManifest($,Z){this.manifestStore.writeSessionManifest($,Z)}readSessionManifest($){return this.manifestStore.readSessionManifest($)}async createRootSessionWithArtifacts($){let Z=$.startedAt??J0(),Q=$.sessionId.trim(),W=Q.length>0?Q:`${Date.now()}_${fS(5)}`,J=this.manifestStore.artifacts.sessionMessagesPath(W),X=this.manifestStore.artifacts.sessionManifestPath(W),Y=m6({metadata:$.metadata,prompt:$.prompt}),j={version:1,session_id:W,source:$.source,pid:$.pid,started_at:Z,status:"running",interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspace_root:$.workspaceRoot,team_name:$.teamName,enable_tools:$.enableTools,enable_spawn:$.enableSpawn,enable_teams:$.enableTeams,prompt:$.prompt?.trim()||void 0,metadata:Y,messages_path:J};return await this.adapter.upsertSession({sessionId:W,source:$.source,pid:$.pid,startedAt:Z,endedAt:null,exitCode:null,status:"running",statusLock:0,interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspaceRoot:$.workspaceRoot,teamName:$.teamName??null,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,parentSessionId:null,parentAgentId:null,agentId:null,conversationId:null,isSubagent:!1,prompt:j.prompt??null,metadata:M$(j.metadata),hookPath:"",messagesPath:J,updatedAt:J0()}),this.manifestStore.initializeMessagesFile(W,J,Z),this.manifestStore.writeSessionManifest(X,j),{manifestPath:X,messagesPath:J,manifest:j}}async updateSessionStatus($,Z,Q){let W;if((await WG(()=>this.adapter.getSession($),async(X)=>{return W=H0(Z)?void 0:J0(),this.adapter.updateSession({sessionId:$,status:Z,endedAt:W??null,exitCode:H0(Z)?null:typeof Q==="number"?Q:null,expectedStatusLock:X.statusLock})},XX)).updated){if(Z==="cancelled")await this.teamChildren.applyStatusToRunningChildSessions($,"cancelled");return{updated:!0,endedAt:W}}return{updated:!1}}async updateSession($){for(let Z=0;Z<XX;Z++){let Q=await this.adapter.getSession($.sessionId);if(!Q)return{updated:!1};let W=Q.metadata??void 0,J=$.metadata!==void 0?M$($.metadata)??{}:M$(W)??{},X=D2(typeof W?.title==="string"?W.title:void 0),Y=$.title!==void 0?D2($.title):X??y3($.prompt);if(Y)J.title=Y;else delete J.title;let j=$.metadata!==void 0||$.prompt!==void 0||$.title!==void 0;if(!(await this.adapter.updateSession({sessionId:$.sessionId,prompt:$.prompt,metadata:j?Object.keys(J).length>0?J:null:void 0,title:Y,expectedStatusLock:Q.statusLock})).updated)continue;let{path:H,manifest:B}=this.manifestStore.readManifestFile($.sessionId);if(B){if($.prompt!==void 0)B.prompt=$.prompt??void 0;let G=$.metadata!==void 0?M$($.metadata)??{}:M$(B.metadata)??{};if(Y)G.title=Y;B.metadata=Object.keys(G).length>0?G:void 0,this.manifestStore.writeSessionManifest(H,B)}return{updated:!0}}return{updated:!1}}queueSpawnRequest($){return this.teamChildren.queueSpawnRequest($)}upsertSubagentSession($){return this.teamChildren.upsertSubagentSession($)}upsertSubagentSessionFromHook($){return this.teamChildren.upsertSubagentSessionFromHook($)}appendSubagentHookAudit($,Z){return this.teamChildren.appendSubagentHookAudit(Z),Promise.resolve()}persistSessionMessages($,Z,Q){let W=yZ(Z);return this.manifestStore.persistSessionMessages($,W,Q)}applySubagentStatus($,Z){return this.teamChildren.applySubagentStatus($,Z)}applySubagentStatusBySessionId($,Z){return this.teamChildren.applySubagentStatusBySessionId($,Z)}applyStatusToRunningChildSessions($,Z){return this.teamChildren.applyStatusToRunningChildSessions($,Z)}onTeamTaskStart($,Z,Q){return this.teamChildren.onTeamTaskStart($,Z,Q)}onTeamTaskEnd($,Z,Q,W,J,X){return this.teamChildren.onTeamTaskEnd($,Z,Q,W,J,X)}onTeamTaskProgress($,Z,Q,W){return this.teamChildren.onTeamTaskProgress($,Z,Q,W)}handleSubAgentStart($,Z){return this.teamChildren.handleSubAgentStart($,Z)}handleSubAgentEnd($,Z){return this.teamChildren.handleSubAgentEnd($,Z)}isPidAlive($){if(!Number.isFinite($)||$<=0)return!1;try{return process.kill(Math.floor($),0),!0}catch(Z){return typeof Z==="object"&&Z!==null&&"code"in Z&&Z.code==="EPERM"}}async reconcileDeadRunningSession($){if(H0($.status)===!1||this.isPidAlive($.pid))return $;let Z=J0(),Q=e1.STALE_REASON;for(let W=0;W<XX;W++){let J=await this.adapter.getSession($.sessionId);if(!J)return;if(H0(J.status)===!1)return J;let X={...J.metadata??{},terminal_marker:Q,terminal_marker_at:Z,terminal_marker_pid:J.pid,terminal_marker_source:e1.STALE_SOURCE},Y=await this.adapter.updateSession({sessionId:J.sessionId,status:"failed",endedAt:Z,exitCode:1,metadata:X,expectedStatusLock:J.statusLock});if(!Y.updated)continue;await this.teamChildren.applyStatusToRunningChildSessions(J.sessionId,"failed");let j=QG(J,{status:"failed",endedAt:Z,exitCode:1,metadata:X}),{path:V}=this.manifestStore.readManifestFile(J.sessionId);return this.manifestStore.writeSessionManifest(V,j),this.manifestStore.appendStaleSessionHookLog(Z,J.sessionId,J.pid,Q,e1.STALE_SOURCE),{...J,status:"failed",endedAt:Z,exitCode:1,metadata:X,statusLock:Y.statusLock,updatedAt:Z}}return await this.adapter.getSession($.sessionId)}async listSessions($=200){let Z=Math.max(1,Math.floor($)),Q=Math.min(Z*5,2000);return await this.reconcileDeadSessions(Q),(await this.adapter.listSessions({limit:Q})).slice(0,Z).map((J)=>{let X=M$(J.metadata??void 0),Y=this.manifestStore.readSessionManifest(J.sessionId),j=D2(typeof Y?.metadata?.title==="string"?Y.metadata.title:void 0),V=j?{...X??{},title:j}:X;return{...J,metadata:V}})}async reconcileDeadSessions($=2000){let Z=Math.max(1,Math.floor($)),Q=(await Promise.all(["idle","running","pending"].map((J)=>this.adapter.listSessions({limit:Z,status:J})))).flat(),W=0;for(let J of Q){let X=await this.reconcileDeadRunningSession(J);if(X&&X.status!==J.status)W++}return W}async deleteSession($){let Z=$.trim();if(!Z)throw Error("session id is required");let Q=await this.adapter.getSession(Z);if(!Q)return{deleted:!1};if(await this.adapter.deleteSession(Z,!1),!Q.isSubagent){let W=await this.adapter.listSessions({limit:2000,parentSessionId:Z});await this.adapter.deleteSession(Z,!0),await Promise.allSettled(W.map(async(J)=>{await $J(J.cwd,J.sessionId),Q5(J.messagesPath),Q5(this.manifestStore.artifacts.sessionManifestPath(J.sessionId,!1)),this.manifestStore.artifacts.removeSessionDirIfEmpty(J.sessionId)}))}if(await $J(Q.cwd,Z),Q5(Q.messagesPath),Q5(this.manifestStore.artifacts.sessionManifestPath(Z,!1)),Q.isSubagent)this.manifestStore.artifacts.removeSessionDirIfEmpty(Z);else{let W=new Set([this.manifestStore.artifacts.sessionArtifactsDir(Z)]);for(let J of[Q.messagesPath])if(typeof J==="string"&&J.trim().length>0)W.add(AS(J));for(let J of W)this.manifestStore.artifacts.removeDir(J)}return{deleted:!0}}}function jX(){return new Date().toISOString()}function BA($,Z){let Q=`${$}.tmp`;LS(Q,`${JSON.stringify(Z,null,2)}
|
|
531
|
+
`,"utf8"),DS(Q,$)}class GA{sessionsDirPath;constructor($=_S()){this.sessionsDirPath=$}ensureSessionsDir(){if(!YX(this.sessionsDirPath))US(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}indexPath(){return HA(this.ensureSessionsDir(),"sessions.index.json")}spawnQueuePath(){return HA(this.ensureSessionsDir(),"subagent-spawn-queue.json")}readIndex(){let $=this.indexPath();if(!YX($))return{version:1,sessions:{}};try{let Z=JSON.parse(VA($,"utf8"));if(Z?.version===1&&Z.sessions)return Z}catch{}return{version:1,sessions:{}}}writeIndex($){BA(this.indexPath(),$)}readQueue(){let $=this.spawnQueuePath();if(!YX($))return{version:1,nextId:1,requests:[]};try{let Z=JSON.parse(VA($,"utf8"));if(Z?.version===1&&typeof Z.nextId==="number"&&Array.isArray(Z.requests))return Z}catch{}return{version:1,nextId:1,requests:[]}}writeQueue($){BA(this.spawnQueuePath(),$)}async upsertSession($){let Z=this.readIndex();Z.sessions[$.sessionId]=$,this.writeIndex(Z)}async getSession($){return this.readIndex().sessions[$]}async listSessions($){return Object.values(this.readIndex().sessions).filter((Z)=>$.parentSessionId!==void 0?Z.parentSessionId===$.parentSessionId:!0).filter((Z)=>$.status!==void 0?Z.status===$.status:!0).sort((Z,Q)=>Q.startedAt.localeCompare(Z.startedAt)).slice(0,$.limit)}async updateSession($){let Z=this.readIndex(),Q=Z.sessions[$.sessionId];if(!Q)return{updated:!1,statusLock:0};if($.expectedStatusLock!==void 0&&Q.statusLock!==$.expectedStatusLock)return{updated:!1,statusLock:Q.statusLock};let W=$.expectedStatusLock!==void 0?$.expectedStatusLock+1:Q.statusLock,J={...Q,status:$.status??Q.status,endedAt:$.endedAt!==void 0?$.endedAt:Q.endedAt??null,exitCode:$.exitCode!==void 0?$.exitCode:Q.exitCode??null,prompt:$.prompt!==void 0?$.prompt:Q.prompt??null,metadata:$.metadata!==void 0?$.metadata??null:Q.metadata??null,parentSessionId:$.parentSessionId!==void 0?$.parentSessionId??null:Q.parentSessionId??null,parentAgentId:$.parentAgentId!==void 0?$.parentAgentId??null:Q.parentAgentId??null,agentId:$.agentId!==void 0?$.agentId??null:Q.agentId??null,conversationId:$.conversationId!==void 0?$.conversationId??null:Q.conversationId??null,statusLock:W,isSubagent:$.setRunning||$.parentSessionId!==void 0?!0:Q.isSubagent,updatedAt:jX()};if($.setRunning)J.status="running",J.endedAt=null,J.exitCode=null;return Z.sessions[$.sessionId]=J,this.writeIndex(Z),{updated:!0,statusLock:J.statusLock}}async deleteSession($,Z){let Q=this.readIndex();if(!Q.sessions[$])return!1;if(delete Q.sessions[$],Z){for(let J of Object.values(Q.sessions))if(J.parentSessionId===$)delete Q.sessions[J.sessionId]}return this.writeIndex(Q),!0}async enqueueSpawnRequest($){let Z=this.readQueue();Z.requests.push({id:Z.nextId,rootSessionId:$.rootSessionId,parentAgentId:$.parentAgentId,task:$.task,systemPrompt:$.systemPrompt,createdAt:jX()}),Z.nextId+=1,this.writeQueue(Z)}async claimSpawnRequest($,Z){let Q=this.readQueue(),W=Q.requests.find((J)=>J.rootSessionId===$&&J.parentAgentId===Z&&!J.consumedAt);if(!W)return;return W.consumedAt=jX(),this.writeQueue(Q),W.task}}class VX extends e1{constructor($,Z={}){super(new GA($),Z)}ensureSessionsDir(){return super.ensureSessionsDir()}}var AA={};N(AA,{CoreSessionService:()=>_1});import{existsSync as zS,mkdirSync as TS}from"node:fs";import{resolveSessionDataDir as OS}from"@cline/shared/storage";var HX=`
|
|
531
532
|
session_id AS sessionId,
|
|
532
533
|
source,
|
|
533
534
|
pid,
|
|
@@ -554,7 +555,7 @@ ${J}`,$.config.mode)}function m5($,Z){return VS($,Z==="plan"?"plan":Z==="yolo"?"
|
|
|
554
555
|
metadata_json AS metadata,
|
|
555
556
|
hook_path AS hookPath,
|
|
556
557
|
messages_path AS messagesPath,
|
|
557
|
-
updated_at AS updatedAt`;function BX($){$.interactive=$.interactive===1,$.enableTools=$.enableTools===1,$.enableSpawn=$.enableSpawn===1,$.enableTeams=$.enableTeams===1,$.isSubagent=$.isSubagent===1;let Z=$.metadata;if(typeof Z==="string"&&Z.trim())try{let Q=JSON.parse(Z);$.metadata=Q&&typeof Q==="object"&&!Array.isArray(Q)?Q:null}catch{$.metadata=null}else $.metadata=null;return $}function GX($){if(!$||Object.keys($).length===0)return null;return JSON.stringify($)}function
|
|
558
|
+
updated_at AS updatedAt`;function BX($){$.interactive=$.interactive===1,$.enableTools=$.enableTools===1,$.enableSpawn=$.enableSpawn===1,$.enableTeams=$.enableTeams===1,$.isSubagent=$.isSubagent===1;let Z=$.metadata;if(typeof Z==="string"&&Z.trim())try{let Q=JSON.parse(Z);$.metadata=Q&&typeof Q==="object"&&!Array.isArray(Q)?Q:null}catch{$.metadata=null}else $.metadata=null;return $}function GX($){if(!$||Object.keys($).length===0)return null;return JSON.stringify($)}function KA($){return{...$,tasks:$.tasks.map((Z)=>({...Z,createdAt:new Date(Z.createdAt),updatedAt:new Date(Z.updatedAt)})),mailbox:$.mailbox.map((Z)=>({...Z,sentAt:new Date(Z.sentAt),readAt:Z.readAt?new Date(Z.readAt):void 0})),missionLog:$.missionLog.map((Z)=>({...Z,ts:new Date(Z.ts)})),runs:($.runs??[]).map((Z)=>({...Z,startedAt:new Date(Z.startedAt),endedAt:Z.endedAt?new Date(Z.endedAt):void 0,nextAttemptAt:Z.nextAttemptAt?new Date(Z.nextAttemptAt):void 0,heartbeatAt:Z.heartbeatAt?new Date(Z.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),finalizedAt:Z.finalizedAt?new Date(Z.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),reviewedAt:Z.reviewedAt?new Date(Z.reviewedAt):void 0}))}}class FA{store;sessionsDirPath;constructor($,Z=OS()){this.store=$;this.sessionsDirPath=Z}ensureSessionsDir(){if(!zS(this.sessionsDirPath))TS(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}async upsertSession($){this.store.run(`INSERT OR REPLACE INTO sessions (
|
|
558
559
|
session_id, source, pid, started_at, ended_at, exit_code, status, status_lock, interactive,
|
|
559
560
|
provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
|
|
560
561
|
parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
|
|
@@ -570,17 +571,17 @@ ${J}`,$.config.mode)}function m5($,Z){return VS($,Z==="plan"?"plan":Z==="yolo"?"
|
|
|
570
571
|
WHERE session_id = ? AND status_lock = ?`,[J0(),$.expectedStatusLock+1,$.parentSessionId??null,$.parentAgentId??null,$.agentId??null,$.conversationId??null,$.prompt??null,$.sessionId,$.expectedStatusLock]).changes??0)>0,statusLock:$.expectedStatusLock+1}}let Z=[],Q=[];if($.status!==void 0)Z.push("status = ?"),Q.push($.status);if($.endedAt!==void 0)Z.push("ended_at = ?"),Q.push($.endedAt);if($.exitCode!==void 0)Z.push("exit_code = ?"),Q.push($.exitCode);if($.prompt!==void 0)Z.push("prompt = ?"),Q.push($.prompt??null);if($.metadata!==void 0)Z.push("metadata_json = ?"),Q.push(GX($.metadata));if($.parentSessionId!==void 0)Z.push("parent_session_id = ?"),Q.push($.parentSessionId??null);if($.parentAgentId!==void 0)Z.push("parent_agent_id = ?"),Q.push($.parentAgentId??null);if($.agentId!==void 0)Z.push("agent_id = ?"),Q.push($.agentId??null);if($.conversationId!==void 0)Z.push("conversation_id = ?"),Q.push($.conversationId??null);if(Z.length===0){let Y=await this.getSession($.sessionId);return{updated:!!Y,statusLock:Y?.statusLock??0}}let W=0;if($.expectedStatusLock!==void 0)W=$.expectedStatusLock+1,Z.push("status_lock = ?"),Q.push(W);Z.push("updated_at = ?"),Q.push(J0());let J=`UPDATE sessions SET ${Z.join(", ")} WHERE session_id = ?`;if(Q.push($.sessionId),$.expectedStatusLock!==void 0)J+=" AND status_lock = ?",Q.push($.expectedStatusLock);if((this.store.run(J,Q).changes??0)===0)return{updated:!1,statusLock:0};if($.expectedStatusLock===void 0)W=(await this.getSession($.sessionId))?.statusLock??0;return{updated:!0,statusLock:W}}async deleteSession($,Z){let Q=this.store.run("DELETE FROM sessions WHERE session_id = ?",[$]).changes??0;if(Z)this.store.run("DELETE FROM sessions WHERE parent_session_id = ?",[$]);return Q>0}async enqueueSpawnRequest($){this.store.run(`INSERT INTO subagent_spawn_queue (root_session_id, parent_agent_id, task, system_prompt, created_at, consumed_at)
|
|
571
572
|
VALUES (?, ?, ?, ?, ?, NULL)`,[$.rootSessionId,$.parentAgentId,$.task??null,$.systemPrompt??null,J0()])}async claimSpawnRequest($,Z){let Q=this.store.queryOne(`SELECT id, task FROM subagent_spawn_queue
|
|
572
573
|
WHERE root_session_id = ? AND parent_agent_id = ? AND consumed_at IS NULL
|
|
573
|
-
ORDER BY id ASC LIMIT 1`,[$,Z]);if(!Q||typeof Q.id!=="number")return;return this.store.run("UPDATE subagent_spawn_queue SET consumed_at = ? WHERE id = ?",[J0(),Q.id]),Q.task??void 0}}class
|
|
574
|
+
ORDER BY id ASC LIMIT 1`,[$,Z]);if(!Q||typeof Q.id!=="number")return;return this.store.run("UPDATE subagent_spawn_queue SET consumed_at = ? WHERE id = ?",[J0(),Q.id]),Q.task??void 0}}class _1 extends e1{store;constructor($,Z={}){super(new FA($,Z.sessionArtifactsDir),Z);this.store=$}createRootSession($){this.store.run(`INSERT OR REPLACE INTO sessions (
|
|
574
575
|
session_id, source, pid, started_at, ended_at, exit_code, status, status_lock, interactive,
|
|
575
576
|
provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
|
|
576
577
|
parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
|
|
577
578
|
metadata_json, transcript_path, hook_path, messages_path, updated_at
|
|
578
|
-
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.sessionId,$.source,$.pid,$.startedAt,null,null,"running",0,$.interactive?1:0,$.provider,$.model,$.cwd,$.workspaceRoot,$.teamName??null,$.enableTools?1:0,$.enableSpawn?1:0,$.enableTeams?1:0,null,null,null,null,0,$.prompt??null,$.metadata?JSON.stringify($.metadata):null,"","",$.messagesPath,J0()])}}function TS($){if($.backendMode)return $.backendMode;if(process.env.CLINE_VCR?.trim())return"local";let Z=process.env.CLINE_SESSION_BACKEND_MODE?.trim().toLowerCase();if(Z==="local"||Z==="hub"||Z==="remote")return Z;return"auto"}var v5,c5;function LS($,Z){if($!=="auto"&&$!=="hub")return;if(Z.hub?.endpoint?.trim())return;n9(Z.hub?.workspaceRoot?.trim()||Z.hub?.cwd?.trim()||process.cwd())}async function _S($){await $.reconcileDeadSessions?.().catch(()=>{})}function UA($){try{let Z=new D1;return Z.init(),new L1(Z,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}catch(Z){return $.telemetry?.capture({event:"session_backend_fallback",properties:{requestedBackend:"sqlite",fallbackBackend:"file"}}),fA($.telemetry,{component:"core",operation:"session_backend.sqlite_init",error:Z,severity:"warn",handled:!0,context:{requestedBackend:"sqlite",fallbackBackend:"file"}}),new VX(void 0,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}}function AA($,Z,Q){return new _1({sessionService:Q??$.sessionService??UA($),capabilities:$.capabilities,telemetry:$.telemetry,toolPolicies:$.toolPolicies,distinctId:Z,fetch:$.fetch})}async function KX($){if(v5)return v5;if(c5)return await c5;return c5=(async()=>{return v5=UA($),await _S(v5),v5})().finally(()=>{c5=void 0}),await c5}async function F4($){let Z=P0($.distinctId);$.telemetry?.setDistinctId(Z);let Q=TS($);if(LS(Q,$),Q==="remote"){let W=$.remote?.endpoint?.trim();if(!W)throw Error("Remote runtime mode requires `remote.endpoint` to be configured.");return $.logger?.log("Using remote runtime host",{endpoint:W}),new Y4({endpoint:W,authToken:$.remote?.authToken,clientType:$.remote?.clientType,displayName:$.remote?.displayName,workspaceRoot:$.remote?.workspaceRoot,cwd:$.remote?.cwd,capabilities:$.capabilities})}if(Q==="hub"){let W=$.hub?.endpoint?.trim(),J=W||await $2({strategy:$.hub?.strategy??"require-hub",workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});if(!J)throw Error("No compatible hub runtime is available.");return $.logger?.log("Using hub runtime host",{url:J,explicitEndpoint:W||void 0}),new o1({url:J,authToken:$.hub?.authToken,clientType:$.hub?.clientType,displayName:$.hub?.displayName,capabilities:$.capabilities,telemetry:$.telemetry},{workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd})}if(Q==="auto"){let W=await o4({endpoint:$.hub?.endpoint,strategy:$.hub?.strategy??"prefer-hub",workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});if(W){$.logger?.log("Using discovered local hub runtime host",{url:W});let J=new o1({url:W,authToken:$.hub?.authToken,clientType:$.hub?.clientType,displayName:$.hub?.displayName,capabilities:$.capabilities,telemetry:$.telemetry},{workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});try{return await J.connect(),J}catch(X){$.logger?.log("Falling back to local runtime host",{reason:"hub_connect_failed",severity:"warn",error:X}),fA($.telemetry,{component:"core",operation:"runtime_host.hub_connect",error:X,severity:"warn",handled:!0,context:{backendMode:"auto",fallbackBackend:"local"}})}}return $.logger?.log("Falling back to local runtime host",{reason:"compatible_hub_unavailable",severity:"warn"}),AA($,Z)}return AA($,Z)}var MA={};N(MA,{createCheckpointComparePlan:()=>rQ,compareCheckpointToWorkspace:()=>u5,buildCheckpointWorkspaceDiff:()=>iQ});import{execFile as qS}from"node:child_process";import*as OA from"node:fs/promises";import*as U4 from"node:path";import{promisify as MS}from"node:util";var _A={};N(_A,{trimMessagesToCheckpoint:()=>LA,trimMessagesBeforeCheckpoint:()=>AX,readSessionCheckpointHistory:()=>I2,findCheckpointForRun:()=>f4,createRestoredCheckpointMetadata:()=>FX,createCheckpointRestorePlan:()=>fX,applyCheckpointToWorktree:()=>UX});import{execFile as zS}from"node:child_process";import{promisify as OS}from"node:util";var A4=OS(zS);function I2($){let Z=$?.metadata?.checkpoint&&typeof $.metadata.checkpoint==="object"&&!Array.isArray($.metadata.checkpoint)?$.metadata.checkpoint:void 0;return(Array.isArray(Z?.history)?Z.history:[]).filter((W)=>!!W&&typeof W==="object"&&!Array.isArray(W)).flatMap((W)=>{let J=String(W.ref??"").trim(),X=Number(W.createdAt??0),Y=Number(W.runCount??0);if(J.length===0||!Number.isFinite(X)||!Number.isInteger(Y)||Y<1)return[];let j=W.kind==="stash"||W.kind==="commit"?W.kind:void 0;return[{ref:J,createdAt:X,runCount:Y,...j?{kind:j}:{}}]})}function FX($,Z){let Q=I2($).filter((J)=>J.runCount<=Z),W=Q.at(-1);return W?{latest:W,history:Q}:void 0}function f4($,Z){return $.reduce((Q,W)=>{if(W.runCount>Z)return Q;if(!Q||W.runCount>Q.runCount)return W;return Q},void 0)}function TA($,Z){let Q=0;for(let W=0;W<$.length;W+=1){let J=$[W];if(J?.role!=="user")continue;if(("metadata"in J&&J.metadata&&typeof J.metadata==="object"?J.metadata:void 0)?.kind==="recovery_notice")continue;if(Q+=1,Q===Z)return W}throw Error(`Could not find user message for checkpoint run ${Z}`)}function LA($,Z){let Q=TA($,Z);return $.slice(0,Q+1)}function AX($,Z){let Q=TA($,Z);return $.slice(0,Q)}function fX($){let Z=$.checkpointRunCount;if(!Number.isInteger(Z)||Z<1)throw Error("checkpointRunCount must be a positive integer");let Q=f4(I2($.session),Z);if(!Q)throw Error(`No checkpoint found at or before run ${Z} in session ${$.session.sessionId}`);let W=($.cwd?.trim()||$.session.cwd||$.session.workspaceRoot).trim();if(!W)throw Error("cwd or workspaceRoot is required to restore a checkpoint");return{checkpoint:Q,cwd:W,...$.restoreMessages!==!1?{messages:LA($.messages??[],Z)}:{}}}async function UX($,Z){if((await A4("git",["-C",$,"rev-parse","--is-inside-work-tree"],{windowsHide:!0})).stdout.trim()!=="true")throw Error(`${$} is not a git repository`);if(await A4("git",["-C",$,"cat-file","-e",`${Z.ref}^{commit}`],{windowsHide:!0}),await A4("git",["-C",$,"reset","--hard"],{windowsHide:!0}),await A4("git",["-C",$,"clean","-fd"],{windowsHide:!0}),Z.kind==="commit"){await A4("git",["-C",$,"reset","--hard",Z.ref],{windowsHide:!0});return}await A4("git",["-C",$,"stash","apply",Z.ref],{windowsHide:!0})}var RS=MS(qS),ES=52428800;async function pQ($,Z){let{stdout:Q}=await RS("git",["-C",$,...Z],{windowsHide:!0,maxBuffer:ES,encoding:"utf8"});return Q}function zA($){return $.split("\x00").filter(Boolean)}function qA($,Z){let Q=U4.resolve($,Z),W=U4.relative($,Q);if(W.startsWith("..")||U4.isAbsolute(W))throw Error(`Checkpoint diff path escapes workspace: ${Z}`);return Q}async function NS($,Z,Q){try{return await pQ($,["show",`${Z}:${Q}`])}catch{return""}}async function CS($,Z){try{return await OA.readFile(qA($,Z),"utf8")}catch{return""}}async function wS($,Z){await pQ($,["cat-file","-e",`${Z.ref}^{tree}`]);let[Q,W]=await Promise.all([pQ($,["diff","--name-only","-z",Z.ref,"--"]),pQ($,["ls-files","--others","--exclude-standard","-z"])]);return[...new Set([...zA(Q),...zA(W)])].sort((X,Y)=>X.localeCompare(Y))}function rQ($){let Z=$.checkpointRunCount;if(!Number.isInteger(Z)||Z<1)throw Error("checkpointRunCount must be a positive integer");let Q=f4(I2($.session),Z);if(!Q)throw Error(`No checkpoint found at or before run ${Z} in session ${$.session.sessionId}`);let W=($.cwd?.trim()||$.session.cwd||$.session.workspaceRoot).trim();if(!W)throw Error("cwd or workspaceRoot is required to compare a checkpoint");return{checkpoint:Q,cwd:W}}async function iQ($,Z){let Q=await wS($,Z);return(await Promise.all(Q.map(async(J)=>{let[X,Y]=await Promise.all([NS($,Z.ref,J),CS($,J)]);return{filePath:qA($,J),leftContent:X,rightContent:Y}}))).filter((J)=>J.leftContent!==J.rightContent)}async function u5($){let Z=rQ($),Q=await iQ(Z.cwd,Z.checkpoint);return{...Z,diffs:Q}}var NA={};N(NA,{NoOpFeatureFlagsProvider:()=>g2,FeatureFlagsService:()=>x2});import{existsSync as PS,mkdirSync as SS,readFileSync as bS,writeFileSync as yS}from"node:fs";import{dirname as hS}from"node:path";import{FEATURE_FLAGS as RA,FeatureFlagDefaultValue as DX}from"@cline/shared";var kS=3600000,IS=604800000,EA=1;class x2{provider;telemetry;logger;cacheTtlMs;cacheFilePath;persistentCacheMaxAgeMs;context;cache=new Map;cacheInfo={updateTime:0,userId:null};constructor($){this.provider=$.provider,this.telemetry=$.telemetry,this.logger=$.logger,this.cacheTtlMs=$.cacheTtlMs??kS,this.cacheFilePath=$.cacheFilePath,this.persistentCacheMaxAgeMs=$.persistentCacheMaxAgeMs??IS,this.context={...$.context??{}},this.hydrateFromPersistentCache()}setContext($){this.context={...$}}hydrateCache($){this.cacheInfo={updateTime:$.updateTime,userId:$.userId,flagsPayload:$.flagsPayload},this.rebuildCacheFromSnapshot($.flagsPayload)}getCacheSnapshot(){return{updateTime:this.cacheInfo.updateTime,userId:this.cacheInfo.userId,flagsPayload:this.cacheInfo.flagsPayload}}async poll($){let Z=$??this.context.userId??null,Q=Date.now();if(Q-this.cacheInfo.updateTime<this.cacheTtlMs){if(this.cacheInfo.userId===Z)return}let W=this.cacheInfo;this.cacheInfo={updateTime:Q,userId:Z||null};try{let J=await this.provider.getAllFlagsAndPayloads({flagKeys:RA.length>0?RA:void 0,context:{...this.context,userId:Z}});if(this.cacheInfo.userId!==Z)return;this.cacheInfo.flagsPayload=J,this.rebuildCacheFromSnapshot(J),this.writePersistentCache()}catch(J){if(this.cacheInfo.userId!==Z)return;throw this.cacheInfo=W.updateTime?W:{updateTime:0,userId:null},this.logger?.error?.("Error polling SDK feature flags",{error:J}),J}}hydrateFromPersistentCache(){let $=this.readPersistentCache();if($)this.hydrateCache($)}isFeatureFlagPayload($){if($===null||typeof $==="string"||typeof $==="number"||typeof $==="boolean")return!0;if(Array.isArray($))return $.every((Z)=>this.isFeatureFlagPayload(Z));if(typeof $==="object")return Object.values($).every((Z)=>this.isFeatureFlagPayload(Z));return!1}readPayloadRecord($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=Object.entries($).filter(([,W])=>this.isFeatureFlagPayload(W));if(Z.length===0)return;let Q={};for(let[W,J]of Z)Q[W]=J;return Q}readPersistentCache(){try{if(!this.cacheFilePath||!PS(this.cacheFilePath))return;let $=JSON.parse(bS(this.cacheFilePath,"utf8"));if(!$||typeof $!=="object")return;let Z=$;if(Z.version!==EA||typeof Z.updatedAt!=="number"||!Number.isFinite(Z.updatedAt)||Date.now()-Z.updatedAt>this.persistentCacheMaxAgeMs)return;return{updateTime:Z.updatedAt,userId:Z.userId??null,flagsPayload:{featureFlags:this.readPayloadRecord(Z.flagsPayload?.featureFlags),featureFlagPayloads:this.readPayloadRecord(Z.flagsPayload?.featureFlagPayloads)}}}catch($){this.logger?.error?.("Error reading SDK feature flags cache",{error:$});return}}writePersistentCache(){try{if(!this.cacheFilePath)return;SS(hS(this.cacheFilePath),{recursive:!0,mode:448});let $=this.getCacheSnapshot(),Z={version:EA,updatedAt:$.updateTime,userId:$.userId,flagsPayload:$.flagsPayload};yS(this.cacheFilePath,`${JSON.stringify(Z,null,2)}
|
|
579
|
-
`,"utf8")}catch($){this.logger?.error?.("Error writing SDK feature flags cache",{error:$})}}getReturnedFlagKeys($){return[...new Set([...Object.keys($?.featureFlags??{}),...Object.keys($?.featureFlagPayloads??{})])]}rebuildCacheFromSnapshot($){let Z=new Map;for(let Q of this.getReturnedFlagKeys($)){let W=this.getFeatureFlag(Q);Z.set(Q,W??!1)}this.cache=Z}getFeatureFlag($){try{let Z=this.cacheInfo.flagsPayload?.featureFlagPayloads?.[$],Q=this.cacheInfo.flagsPayload?.featureFlags?.[$],W=Z??Q??DX[$]??void 0;if(!this.cache.has($)||this.cache.get($)!==W)this.telemetry?.capture({event:m.FEATURE_FLAGS.FLAG_CALLED,properties:{$feature_flag:$,$feature_flag_response:Q}});return W}catch(Z){return this.logger?.error?.(`Error checking SDK feature flag ${$}`,{error:Z}),DX[$]??!1}}getBooleanFlagEnabled($){return this.cache.get($)===!0}getFlagPayload($){return this.cache.get($)??DX[$]}getProvider(){return this.provider}get enabled(){return this.provider.enabled}getSettings(){return this.provider.getSettings()}test($,Z){if(process.env.IS_TEST==="true")this.cache.set($,Z)}async dispose(){await this.provider.dispose()}}class
|
|
580
|
-
`).map((X)=>X.trim()).filter(Boolean).filter((X)=>X.startsWith("HOOK_CONTROL\t")).map((X)=>X.slice(13)),J=W.length>0?W[W.length-1]:Z;try{return{parsedJson:JSON.parse(J)}}catch(X){return{parseError:X instanceof Error?X.message:"Failed to parse subprocess stdout JSON"}}}function cS($,Z){let Q=$ instanceof Error?$:Error(String($)),W=Q,J=Z.join(" ");if(W.code==="EACCES")return Error(`Failed to execute hook command "${J}" (EACCES). Configure hooks with an explicit interpreter/command array (for example: ["bash", "/path/to/script"]) or make the script executable with a valid shebang.`);return Error(`Failed to execute hook command "${J}": ${Q.message}`)}async function uS($,Z){let Q=$.stdin;if(!Q)throw Error("runSubprocessEvent failed to create stdin pipe");await new Promise((W,J)=>{let X=(Y)=>{Q.off("error",X);let j=Y.code;if(j==="EPIPE"||j==="ERR_STREAM_DESTROYED"){W();return}J(Y)};Q.once("error",X),Q.end(Z,(Y)=>{if(Q.off("error",X),Y){let j=Y.code;if(j==="EPIPE"||j==="ERR_STREAM_DESTROYED"){W();return}J(Y);return}W()})})}async function D4($,Z){let Q=gS(Z.command,{env:Z.env,debugRole:"hook"});if(!Array.isArray(Q)||Q.length===0)throw Error("runSubprocessEvent requires a non-empty command");let W=!!Z.detached,J=xS(Q[0],Q.slice(1),{cwd:Z.cwd,env:mS(Z.env),stdio:W?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:W,windowsHide:!0}),X=new Promise((K)=>{J.once("spawn",()=>{try{Z.onSpawn?.({command:Q,pid:J.pid??void 0,detached:W})}catch{}K()})}),Y=new Promise((K,F)=>{J.once("error",(A)=>{F(cS(A,Q))})});if(await uS(J,JSON.stringify($)),W){await Promise.race([X,Y]),J.unref();return}if(!J.stdout||!J.stderr)throw Error("runSubprocessEvent failed to create stdout/stderr pipes");let j="",V="",H=!1,B;J.stdout.on("data",(K)=>{j+=K.toString()}),J.stderr.on("data",(K)=>{V+=K.toString()});let G=new Promise((K)=>{if((Z.timeoutMs??0)>0)B=setTimeout(()=>{H=!0,J.kill("SIGKILL")},Z.timeoutMs);J.once("close",(F)=>{if(B)clearTimeout(B);let{parsedJson:A,parseError:D}=vS(j);K({exitCode:F,stdout:j,stderr:V,parsedJson:A,parseError:D,timedOut:H})})});return await Promise.race([G,Y])}var lS=m2.object({contextModification:m2.string().optional(),cancel:m2.boolean().optional(),review:m2.boolean().optional(),errorMessage:m2.string().optional(),context:m2.string().optional(),overrideInput:m2.unknown().optional()}).passthrough();var pS=["agent","hook"];async function L4($,Z={}){let Q=Z.command??pS;return await D4($,{command:Q,cwd:Z.cwd,env:Z.env,detached:Z.detached,timeoutMs:Z.timeoutMs,onSpawn:Z.onSpawn})}function SA($){return $ instanceof Error?$:Error(String($))}function rS($){if(!$||typeof $!=="object")return;let Z=lS.safeParse($);if(!Z.success)return;let Q=Z.data;if(!(("cancel"in Q)||("review"in Q)||("context"in Q)||("contextModification"in Q)||("overrideInput"in Q)||("errorMessage"in Q)))return;let J=typeof Q.context==="string"?Q.context:typeof Q.contextModification==="string"?Q.contextModification:typeof Q.errorMessage==="string"&&Q.errorMessage.length>0?Q.errorMessage:void 0;return{cancel:typeof Q.cancel==="boolean"?Q.cancel:void 0,review:typeof Q.review==="boolean"?Q.review:void 0,context:J,overrideInput:Object.hasOwn(Q,"overrideInput")?Q.overrideInput:void 0}}function PA($){if(!$||typeof $!=="object")return{};let Z={};for(let[Q,W]of Object.entries($))if(typeof W==="string")Z[Q]=W;else Z[Q]=JSON.stringify(W);return Z}function $$($,Z,Q){let W=Q.env??process.env,J=W.CLINE_USER_ID?.trim()||W.USER?.trim()||"unknown",X=Q.cwd||process.cwd();return{clineVersion:W.CLINE_VERSION?.trim()||"",hookName:$,timestamp:new Date().toISOString(),taskId:Z.conversationId,sessionContext:dS(Q.sessionContext,{hookName:$,conversationId:Z.conversationId,agentId:Z.agentId,parentAgentId:Z.parentAgentId}),workspaceRoots:X?[X]:[],workspaceInfo:Q.workspaceInfo,userId:J,agent_id:Z.agentId,parent_agent_id:Z.parentAgentId}}function iS($){return{name:$.name,message:$.message,stack:$.stack}}function nS($){let Z=String($??"").toLowerCase();return Z.includes("cancel")||Z.includes("abort")||Z.includes("interrupt")}function aS($){return{agentId:$.snapshot.agentId,conversationId:$.snapshot.conversationId??$.snapshot.runId??$.snapshot.agentId,parentAgentId:$.snapshot.parentAgentId??null}}function sS($){return $.filter((Z)=>Z.type==="text"&&typeof Z.text==="string").map((Z)=>Z.text).join("")}function oS($){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 tS($){if(!$)return;let Z={};if($.cancel===!0)Z.stop=!0;if($.overrideInput!==void 0)Z.input=$.overrideInput;return Object.keys(Z).length>0?Z:void 0}async function v2($,Z){try{let Q=await L4($,{command:Z.command,cwd:Z.cwd,env:Z.env,detached:!0,onSpawn:Z.onSpawn});Z.onDispatch?.({payload:$,result:Q,detached:!0})}catch(Q){Z.onDispatchError?.(SA(Q),$)}}function sQ($={}){return{hooks:{beforeRun:async(j)=>{let V=aS(j);if(($.env??process.env).CLINE_HOOK_AGENT_RESUME==="1"){let B={...$$("agent_resume",V,$),hookName:"agent_resume",taskResume:{taskMetadata:{},previousState:{}}};await v2(B,$)}else{let B={...$$("agent_start",V,$),hookName:"agent_start",taskStart:{taskMetadata:{}}};await v2(B,$)}return},beforeTool:async(j)=>{let V={agentId:j.snapshot.agentId,conversationId:j.snapshot.conversationId??j.snapshot.runId??j.snapshot.agentId,parentAgentId:j.snapshot.parentAgentId??null},H={...$$("tool_call",V,$),hookName:"tool_call",iteration:j.snapshot.iteration,tool_call:{id:j.toolCall.toolCallId,name:j.toolCall.toolName,input:j.input},preToolUse:{toolName:j.toolCall.toolName,parameters:PA(j.input)}};try{let B=await L4(H,{command:$.command,cwd:$.cwd,env:$.env,detached:!1,timeoutMs:$.timeoutMs,onSpawn:$.onSpawn});if($.onDispatch?.({payload:H,result:B,detached:!1}),B?.timedOut)throw Error("tool_call hook command timed out");if(B?.parseError)throw Error(`tool_call hook produced invalid control JSON: ${B.parseError}`);return tS(rS(B?.parsedJson))}catch(B){$.onDispatchError?.(SA(B),H);return}},afterTool:async(j)=>{let V=oS(j),H={agentId:j.snapshot.agentId,conversationId:j.snapshot.conversationId??j.snapshot.runId??j.snapshot.agentId,parentAgentId:j.snapshot.parentAgentId??null},B={...$$("tool_result",H,$),hookName:"tool_result",iteration:j.snapshot.iteration,tool_result:V,postToolUse:{toolName:V.name,parameters:PA(V.input),result:typeof V.output==="string"?V.output:JSON.stringify(V.output),success:!V.error,executionTimeMs:V.durationMs}};await v2(B,$);return},afterRun:async({snapshot:j,result:V})=>{let H={agentId:j.agentId,conversationId:j.conversationId??j.runId??j.agentId,parentAgentId:j.parentAgentId??null};if(V.status==="completed"){let K={...$$("agent_end",H,$),hookName:"agent_end",iteration:V.iterations,turn:{outputText:V.outputText,status:V.status},taskComplete:{taskMetadata:{}}};await v2(K,$);return}let B=V.status==="aborted"||nS(V.error?.message)?"agent_abort":"agent_error",G=B==="agent_error"?{...$$(B,H,$),hookName:B,iteration:V.iterations,error:iS(V.error??Error("Agent run failed")),taskCancel:{taskMetadata:{}}}:{...$$(B,H,$),hookName:B,reason:V.error?.message,taskCancel:{taskMetadata:{}}};await v2(G,$)},onEvent:async(j)=>{if(j.type!=="message-added"||j.message.role!=="user")return;let V={agentId:j.snapshot.agentId,conversationId:j.snapshot.conversationId??j.snapshot.runId??j.snapshot.agentId,parentAgentId:j.snapshot.parentAgentId??null},H={...$$("prompt_submit",V,$),hookName:"prompt_submit",userPromptSubmit:{prompt:sS(j.message.content),attachments:[]}};await v2(H,$)}},shutdown:async({agentId:j,conversationId:V,parentAgentId:H,reason:B})=>{let G={...$$("session_shutdown",{agentId:j,conversationId:V,parentAgentId:H},$),hookName:"session_shutdown",reason:B};await v2(G,$)}}}oQ();var hA={};N(hA,{registerRemoteConfigSessionBlobUpload:()=>$7,readRemoteConfigSessionBlobUploadMetadata:()=>TX,prepareRemoteConfigCoreIntegration:()=>_X,createRemoteConfigSessionMessagesArtifactUploader:()=>LX,buildRemoteConfigSessionBlobUploadMetadata:()=>tQ,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY:()=>eQ});import{buildRemoteConfigSessionBlobUploadMetadata as tQ,clearRemoteConfigSessionBlobUpload as eS,createClineTelemetryServiceConfig as $b,createSessionId as Zb,createRemoteConfigSessionMessagesArtifactUploader as Qb,prepareRemoteConfigRuntime as Wb,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY as eQ,readRemoteConfigSessionBlobUploadMetadata as TX,registerRemoteConfigSessionBlobUpload as $7}from"@cline/shared";function Jb($,Z){let Q=$.telemetry||Z.telemetryService?{...Z.telemetryService??{},...$.telemetry??{}}:void 0;if(!Q)return;return h1($b(Q)).telemetry}function LX(){let $=Qb();return{async uploadMessagesFile(Z){await $.uploadMessagesFile(Z)}}}async function _X($){let Z=await Wb($),Q=Jb(Z,$),W=[Z.pluginDefinition],J=Z.claims?.subject,X=tQ(Z.bundle?.remoteConfig,J),Y;return{prepared:Z,extensions:W,telemetry:Q,applyToStartSessionInput(j){let V=j.config.extensions??[],H=j.config.telemetry,B=X?j.config.sessionId?.trim()||Zb():j.config.sessionId;if(B&&X)Y=B;let G=B&&X?$7(B,Z.bundle?.remoteConfig,J):void 0,K=G?{...j.sessionMetadata??{},[eQ]:G}:j.sessionMetadata;return{...j,...K?{sessionMetadata:K}:{},config:{...j.config,...B?{sessionId:B}:{},extensions:[...V,...W],telemetry:Q??H}}},async dispose(){if(Y)eS(Y)}}}var cA={};N(cA,{createTeamName:()=>W7,DefaultRuntimeBuilder:()=>O4});import{hasRuntimeConfigExtension as Tb}from"@cline/shared";import{nanoid as Lb}from"nanoid";$1();var vA={};N(vA,{createLocalTeamStore:()=>MX,SqliteTeamStore:()=>c2,FileTeamStore:()=>l5});import{appendFileSync as Xb,existsSync as _4,mkdirSync as kA,readdirSync as Yb,readFileSync as IA,renameSync as jb,writeFileSync as Vb}from"node:fs";import{join as zX}from"node:path";import{resolveTeamDataDir as Hb}from"@cline/shared/storage";function xA(){return new Date().toISOString()}function OX($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function gA($){return{...$,tasks:$.tasks.map((Z)=>({...Z,createdAt:new Date(Z.createdAt),updatedAt:new Date(Z.updatedAt)})),mailbox:$.mailbox.map((Z)=>({...Z,sentAt:new Date(Z.sentAt),readAt:Z.readAt?new Date(Z.readAt):void 0})),missionLog:$.missionLog.map((Z)=>({...Z,ts:new Date(Z.ts)})),runs:($.runs??[]).map((Z)=>({...Z,startedAt:new Date(Z.startedAt),endedAt:Z.endedAt?new Date(Z.endedAt):void 0,nextAttemptAt:Z.nextAttemptAt?new Date(Z.nextAttemptAt):void 0,heartbeatAt:Z.heartbeatAt?new Date(Z.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),finalizedAt:Z.finalizedAt?new Date(Z.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),reviewedAt:Z.reviewedAt?new Date(Z.reviewedAt):void 0}))}}class l5{teamDirPath;constructor($={}){this.teamDirPath=$.teamDir??Hb()}init(){this.ensureTeamDir()}listTeamNames(){if(!_4(this.teamDirPath))return[];return Yb(this.teamDirPath,{withFileTypes:!0}).filter(($)=>$.isDirectory()).filter(($)=>_4(this.statePath($.name))).map(($)=>$.name).sort()}readState($){let Z=this.readEnvelope($);return Z?.teamState?gA(Z.teamState):void 0}readHistory($,Z=200){let Q=this.historyPath($);if(!_4(Q))return[];return IA(Q,"utf8").split(`
|
|
581
|
-
`).map((W)=>W.trim()).filter(Boolean).map((W)=>{try{return JSON.parse(W)}catch{return}}).filter((W)=>W!==void 0).reverse().slice(0,Z)}loadRuntime($){let Z=this.readEnvelope($);return{state:Z?.teamState?
|
|
582
|
-
`,"utf8")}persistRuntime($,Z,Q){this.ensureTeamSubdir($);let W={version:1,updatedAt:
|
|
583
|
-
`,"utf8"),
|
|
579
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.sessionId,$.source,$.pid,$.startedAt,null,null,"running",0,$.interactive?1:0,$.provider,$.model,$.cwd,$.workspaceRoot,$.teamName??null,$.enableTools?1:0,$.enableSpawn?1:0,$.enableTeams?1:0,null,null,null,null,0,$.prompt??null,$.metadata?JSON.stringify($.metadata):null,"","",$.messagesPath,J0()])}}function qS($){if($.backendMode)return $.backendMode;if(process.env.CLINE_VCR?.trim())return"local";let Z=process.env.CLINE_SESSION_BACKEND_MODE?.trim().toLowerCase();if(Z==="local"||Z==="hub"||Z==="remote")return Z;return"auto"}var m5,v5;function MS($,Z){if($!=="auto"&&$!=="hub")return;if(Z.hub?.endpoint?.trim())return;i9(Z.hub?.workspaceRoot?.trim()||Z.hub?.cwd?.trim()||process.cwd())}async function RS($){await $.reconcileDeadSessions?.().catch(()=>{})}function DA($){try{let Z=new D1;return Z.init(),new _1(Z,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}catch(Z){return $.telemetry?.capture({event:"session_backend_fallback",properties:{requestedBackend:"sqlite",fallbackBackend:"file"}}),UA($.telemetry,{component:"core",operation:"session_backend.sqlite_init",error:Z,severity:"warn",handled:!0,context:{requestedBackend:"sqlite",fallbackBackend:"file"}}),new VX(void 0,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}}function fA($,Z,Q){return new z1({sessionService:Q??$.sessionService??DA($),capabilities:$.capabilities,telemetry:$.telemetry,toolPolicies:$.toolPolicies,distinctId:Z,fetch:$.fetch})}async function KX($){if(m5)return m5;if(v5)return await v5;return v5=(async()=>{return m5=DA($),await RS(m5),m5})().finally(()=>{v5=void 0}),await v5}async function K4($){let Z=P0($.distinctId);$.telemetry?.setDistinctId(Z);let Q=qS($);if(MS(Q,$),Q==="remote"){let W=$.remote?.endpoint?.trim();if(!W)throw Error("Remote runtime mode requires `remote.endpoint` to be configured.");return $.logger?.log("Using remote runtime host",{endpoint:W}),new X4({endpoint:W,authToken:$.remote?.authToken,clientType:$.remote?.clientType,displayName:$.remote?.displayName,workspaceRoot:$.remote?.workspaceRoot,cwd:$.remote?.cwd,capabilities:$.capabilities})}if(Q==="hub"){let W=$.hub?.endpoint?.trim(),J=W||await e$({strategy:$.hub?.strategy??"require-hub",workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});if(!J)throw Error("No compatible hub runtime is available.");return $.logger?.log("Using hub runtime host",{url:J,explicitEndpoint:W||void 0}),new o1({url:J,authToken:$.hub?.authToken,clientType:$.hub?.clientType,displayName:$.hub?.displayName,capabilities:$.capabilities,telemetry:$.telemetry},{workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd})}if(Q==="auto"){let W=await s4({endpoint:$.hub?.endpoint,strategy:$.hub?.strategy??"prefer-hub",workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});if(W){$.logger?.log("Using discovered local hub runtime host",{url:W});let J=new o1({url:W,authToken:$.hub?.authToken,clientType:$.hub?.clientType,displayName:$.hub?.displayName,capabilities:$.capabilities,telemetry:$.telemetry},{workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});try{return await J.connect(),J}catch(X){$.logger?.log("Falling back to local runtime host",{reason:"hub_connect_failed",severity:"warn",error:X}),UA($.telemetry,{component:"core",operation:"runtime_host.hub_connect",error:X,severity:"warn",handled:!0,context:{backendMode:"auto",fallbackBackend:"local"}})}}return $.logger?.log("Falling back to local runtime host",{reason:"compatible_hub_unavailable",severity:"warn"}),fA($,Z)}return fA($,Z)}var RA={};N(RA,{createCheckpointComparePlan:()=>iQ,compareCheckpointToWorkspace:()=>c5,buildCheckpointWorkspaceDiff:()=>nQ});import{execFile as wS}from"node:child_process";import*as qA from"node:fs/promises";import*as f4 from"node:path";import{promisify as CS}from"node:util";var TA={};N(TA,{trimMessagesToCheckpoint:()=>zA,trimMessagesBeforeCheckpoint:()=>AX,readSessionCheckpointHistory:()=>k2,findCheckpointForRun:()=>A4,createRestoredCheckpointMetadata:()=>FX,createCheckpointRestorePlan:()=>fX,applyCheckpointToWorktree:()=>UX});import{execFile as ES}from"node:child_process";import{promisify as NS}from"node:util";var F4=NS(ES);function k2($){let Z=$?.metadata?.checkpoint&&typeof $.metadata.checkpoint==="object"&&!Array.isArray($.metadata.checkpoint)?$.metadata.checkpoint:void 0;return(Array.isArray(Z?.history)?Z.history:[]).filter((W)=>!!W&&typeof W==="object"&&!Array.isArray(W)).flatMap((W)=>{let J=String(W.ref??"").trim(),X=Number(W.createdAt??0),Y=Number(W.runCount??0);if(J.length===0||!Number.isFinite(X)||!Number.isInteger(Y)||Y<1)return[];let j=W.kind==="stash"||W.kind==="commit"?W.kind:void 0;return[{ref:J,createdAt:X,runCount:Y,...j?{kind:j}:{}}]})}function FX($,Z){let Q=k2($).filter((J)=>J.runCount<=Z),W=Q.at(-1);return W?{latest:W,history:Q}:void 0}function A4($,Z){return $.reduce((Q,W)=>{if(W.runCount>Z)return Q;if(!Q||W.runCount>Q.runCount)return W;return Q},void 0)}function _A($,Z){let Q=0;for(let W=0;W<$.length;W+=1){let J=$[W];if(J?.role!=="user")continue;if(("metadata"in J&&J.metadata&&typeof J.metadata==="object"?J.metadata:void 0)?.kind==="recovery_notice")continue;if(Q+=1,Q===Z)return W}throw Error(`Could not find user message for checkpoint run ${Z}`)}function zA($,Z){let Q=_A($,Z);return $.slice(0,Q+1)}function AX($,Z){let Q=_A($,Z);return $.slice(0,Q)}function fX($){let Z=$.checkpointRunCount;if(!Number.isInteger(Z)||Z<1)throw Error("checkpointRunCount must be a positive integer");let Q=A4(k2($.session),Z);if(!Q)throw Error(`No checkpoint found at or before run ${Z} in session ${$.session.sessionId}`);let W=($.cwd?.trim()||$.session.cwd||$.session.workspaceRoot).trim();if(!W)throw Error("cwd or workspaceRoot is required to restore a checkpoint");return{checkpoint:Q,cwd:W,...$.restoreMessages!==!1?{messages:zA($.messages??[],Z)}:{}}}async function UX($,Z){if((await F4("git",["-C",$,"rev-parse","--is-inside-work-tree"],{windowsHide:!0})).stdout.trim()!=="true")throw Error(`${$} is not a git repository`);if(await F4("git",["-C",$,"cat-file","-e",`${Z.ref}^{commit}`],{windowsHide:!0}),await F4("git",["-C",$,"reset","--hard"],{windowsHide:!0}),await F4("git",["-C",$,"clean","-fd"],{windowsHide:!0}),Z.kind==="commit"){await F4("git",["-C",$,"reset","--hard",Z.ref],{windowsHide:!0});return}await F4("git",["-C",$,"stash","apply",Z.ref],{windowsHide:!0})}var PS=CS(wS),SS=52428800;async function rQ($,Z){let{stdout:Q}=await PS("git",["-C",$,...Z],{windowsHide:!0,maxBuffer:SS,encoding:"utf8"});return Q}function OA($){return $.split("\x00").filter(Boolean)}function MA($,Z){let Q=f4.resolve($,Z),W=f4.relative($,Q);if(W.startsWith("..")||f4.isAbsolute(W))throw Error(`Checkpoint diff path escapes workspace: ${Z}`);return Q}async function bS($,Z,Q){try{return await rQ($,["show",`${Z}:${Q}`])}catch{return""}}async function yS($,Z){try{return await qA.readFile(MA($,Z),"utf8")}catch{return""}}async function hS($,Z){await rQ($,["cat-file","-e",`${Z.ref}^{tree}`]);let[Q,W]=await Promise.all([rQ($,["diff","--name-only","-z",Z.ref,"--"]),rQ($,["ls-files","--others","--exclude-standard","-z"])]);return[...new Set([...OA(Q),...OA(W)])].sort((X,Y)=>X.localeCompare(Y))}function iQ($){let Z=$.checkpointRunCount;if(!Number.isInteger(Z)||Z<1)throw Error("checkpointRunCount must be a positive integer");let Q=A4(k2($.session),Z);if(!Q)throw Error(`No checkpoint found at or before run ${Z} in session ${$.session.sessionId}`);let W=($.cwd?.trim()||$.session.cwd||$.session.workspaceRoot).trim();if(!W)throw Error("cwd or workspaceRoot is required to compare a checkpoint");return{checkpoint:Q,cwd:W}}async function nQ($,Z){let Q=await hS($,Z);return(await Promise.all(Q.map(async(J)=>{let[X,Y]=await Promise.all([bS($,Z.ref,J),yS($,J)]);return{filePath:MA($,J),leftContent:X,rightContent:Y}}))).filter((J)=>J.leftContent!==J.rightContent)}async function c5($){let Z=iQ($),Q=await nQ(Z.cwd,Z.checkpoint);return{...Z,diffs:Q}}var wA={};N(wA,{NoOpFeatureFlagsProvider:()=>x2,FeatureFlagsService:()=>I2});import{existsSync as kS,mkdirSync as IS,readFileSync as xS,writeFileSync as gS}from"node:fs";import{dirname as mS}from"node:path";import{FEATURE_FLAGS as EA,FeatureFlagDefaultValue as DX}from"@cline/shared";var vS=3600000,cS=604800000,NA=1;class I2{provider;telemetry;logger;cacheTtlMs;cacheFilePath;persistentCacheMaxAgeMs;context;cache=new Map;cacheInfo={updateTime:0,userId:null};constructor($){this.provider=$.provider,this.telemetry=$.telemetry,this.logger=$.logger,this.cacheTtlMs=$.cacheTtlMs??vS,this.cacheFilePath=$.cacheFilePath,this.persistentCacheMaxAgeMs=$.persistentCacheMaxAgeMs??cS,this.context={...$.context??{}},this.hydrateFromPersistentCache()}setContext($){this.context={...$}}hydrateCache($){this.cacheInfo={updateTime:$.updateTime,userId:$.userId,flagsPayload:$.flagsPayload},this.rebuildCacheFromSnapshot($.flagsPayload)}getCacheSnapshot(){return{updateTime:this.cacheInfo.updateTime,userId:this.cacheInfo.userId,flagsPayload:this.cacheInfo.flagsPayload}}async poll($){let Z=$??this.context.userId??null,Q=Date.now();if(Q-this.cacheInfo.updateTime<this.cacheTtlMs){if(this.cacheInfo.userId===Z)return}let W=this.cacheInfo;this.cacheInfo={updateTime:Q,userId:Z||null};try{let J=await this.provider.getAllFlagsAndPayloads({flagKeys:EA.length>0?EA:void 0,context:{...this.context,userId:Z}});if(this.cacheInfo.userId!==Z)return;this.cacheInfo.flagsPayload=J,this.rebuildCacheFromSnapshot(J),this.writePersistentCache()}catch(J){if(this.cacheInfo.userId!==Z)return;throw this.cacheInfo=W.updateTime?W:{updateTime:0,userId:null},this.logger?.error?.("Error polling SDK feature flags",{error:J}),J}}hydrateFromPersistentCache(){let $=this.readPersistentCache();if($)this.hydrateCache($)}isFeatureFlagPayload($){if($===null||typeof $==="string"||typeof $==="number"||typeof $==="boolean")return!0;if(Array.isArray($))return $.every((Z)=>this.isFeatureFlagPayload(Z));if(typeof $==="object")return Object.values($).every((Z)=>this.isFeatureFlagPayload(Z));return!1}readPayloadRecord($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=Object.entries($).filter(([,W])=>this.isFeatureFlagPayload(W));if(Z.length===0)return;let Q={};for(let[W,J]of Z)Q[W]=J;return Q}readPersistentCache(){try{if(!this.cacheFilePath||!kS(this.cacheFilePath))return;let $=JSON.parse(xS(this.cacheFilePath,"utf8"));if(!$||typeof $!=="object")return;let Z=$;if(Z.version!==NA||typeof Z.updatedAt!=="number"||!Number.isFinite(Z.updatedAt)||Date.now()-Z.updatedAt>this.persistentCacheMaxAgeMs)return;return{updateTime:Z.updatedAt,userId:Z.userId??null,flagsPayload:{featureFlags:this.readPayloadRecord(Z.flagsPayload?.featureFlags),featureFlagPayloads:this.readPayloadRecord(Z.flagsPayload?.featureFlagPayloads)}}}catch($){this.logger?.error?.("Error reading SDK feature flags cache",{error:$});return}}writePersistentCache(){try{if(!this.cacheFilePath)return;IS(mS(this.cacheFilePath),{recursive:!0,mode:448});let $=this.getCacheSnapshot(),Z={version:NA,updatedAt:$.updateTime,userId:$.userId,flagsPayload:$.flagsPayload};gS(this.cacheFilePath,`${JSON.stringify(Z,null,2)}
|
|
580
|
+
`,"utf8")}catch($){this.logger?.error?.("Error writing SDK feature flags cache",{error:$})}}getReturnedFlagKeys($){return[...new Set([...Object.keys($?.featureFlags??{}),...Object.keys($?.featureFlagPayloads??{})])]}rebuildCacheFromSnapshot($){let Z=new Map;for(let Q of this.getReturnedFlagKeys($)){let W=this.getFeatureFlag(Q);Z.set(Q,W??!1)}this.cache=Z}getFeatureFlag($){try{let Z=this.cacheInfo.flagsPayload?.featureFlagPayloads?.[$],Q=this.cacheInfo.flagsPayload?.featureFlags?.[$],W=Z??Q??DX[$]??void 0;if(!this.cache.has($)||this.cache.get($)!==W)this.telemetry?.capture({event:m.FEATURE_FLAGS.FLAG_CALLED,properties:{$feature_flag:$,$feature_flag_response:Q}});return W}catch(Z){return this.logger?.error?.(`Error checking SDK feature flag ${$}`,{error:Z}),DX[$]??!1}}getBooleanFlagEnabled($){return this.cache.get($)===!0}getFlagPayload($){return this.cache.get($)??DX[$]}getProvider(){return this.provider}get enabled(){return this.provider.enabled}getSettings(){return this.provider.getSettings()}test($,Z){if(process.env.IS_TEST==="true")this.cache.set($,Z)}async dispose(){await this.provider.dispose()}}class x2{async getAllFlagsAndPayloads(){return{}}enabled=!1;getSettings(){return{enabled:!1,timeoutMs:1000}}async dispose(){}}J8();class u5{clientName;runtimeAddress;automation;settings;featureFlags;pendingPrompts;host;prepare;capabilities;logger;telemetry;distinctId;automationService;activeSessionBootstraps=new Map;unsubscribeBootstrapCleanup;constructor($,Z,Q,W,J,X,Y,j,V,H){this.clientName=Z,this.runtimeAddress=Q,this.host=$,this.prepare=W,this.capabilities=J,this.logger=X,this.telemetry=Y,this.distinctId=j,this.featureFlags=V,this.settings=FF($),this.pendingPrompts=AF($),this.automation=new UJ(()=>{if(!this.automationService)throw Error("ClineCore automation is not enabled. Pass `automation: true` or automation options to ClineCore.create().");return this.automationService}),this.automationService=H?new w5({workspaceRoot:H.workspaceRoot??process.cwd(),specs:{cronSpecsDir:H.cronSpecsDir??H.cronDir,scope:HK(H.cronScope),workspaceRoot:H.workspaceRoot},runtimeHandlers:BK({host:$,getExtensionContext:()=>LQ({automationService:this.automationService,automation:this.automation,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}),dbPath:H.dbPath,logger:H.logger,pollIntervalMs:H.pollIntervalMs,claimLeaseSeconds:H.claimLeaseSeconds,globalMaxConcurrency:H.globalMaxConcurrency,watcherDebounceMs:H.watcherDebounceMs}):void 0,this.unsubscribeBootstrapCleanup=this.host.subscribe((B)=>{if(B.type!=="ended")return;this.disposeSessionBootstrap(B.payload.sessionId)})}static async create($={}){let Z=P0($.distinctId),Q=q0($.capabilities),W={...$,capabilities:Q,distinctId:Z},J=await K4(W),X=VK($.automation),Y=$.featureFlags||new I2({provider:new x2,telemetry:$.telemetry,logger:$.logger,context:{distinctId:Z,clientName:$.clientName}}),j=new u5(J,$.clientName,J.runtimeAddress,$.prepare,Q,$.logger,$.telemetry,Z,Y,X?{...X,logger:$.logger}:void 0);if(X&&X.autoStart!==!1)await j.automation.start();return j}async disposeSessionBootstrap($){let Z=this.activeSessionBootstraps.get($);if(!Z)return;this.activeSessionBootstraps.delete($),await Promise.resolve(Z.dispose?.())}async start($){let Z=fF($),Q=await this.prepare?.(Z);try{let W=Q?await Q.applyToStartSessionInput(Z):Z,J=await this.host.startSession(yJ(W,{defaultCapabilities:this.capabilities,withExtensionContext:(X)=>LQ({automationService:this.automationService,automation:this.automation,context:X,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}));if(Q)if(await this.host.getSession(J.sessionId))this.activeSessionBootstraps.set(J.sessionId,Q);else await Promise.resolve(Q.dispose?.());return UF({input:W,sessionId:J.sessionId,telemetry:this.telemetry,clientName:this.clientName,runtimeAddress:this.runtimeAddress}),J}catch(W){throw await Promise.resolve(Q?.dispose?.()),W}}send=(...$)=>this.host.runTurn(...$);getAccumulatedUsage=(...$)=>{return this.host.getAccumulatedUsage?.(...$)??Promise.resolve(void 0)};abort=(...$)=>this.host.abort(...$);stop=async($)=>{await this.host.stopSession($),await this.disposeSessionBootstrap($)};dispose=async(...$)=>{try{await this.automationService?.dispose(),await this.host.dispose(...$)}finally{this.unsubscribeBootstrapCleanup();let Z=[...this.activeSessionBootstraps.keys()];await Promise.allSettled(Z.map((Q)=>this.disposeSessionBootstrap(Q)))}};get=(...$)=>this.host.getSession(...$);listHistory=async($={})=>await mQ(this.host,$);list=async($=200,Z={})=>await this.listHistory({...Z,limit:$});delete=async($)=>{let Z=await this.host.deleteSession($);if(Z)await this.disposeSessionBootstrap($);return Z};update=(...$)=>this.host.updateSession(...$);readMessages=(...$)=>this.host.readSessionMessages(...$);async restore($){let Z=$.start?yJ($.start,{defaultCapabilities:this.capabilities,withExtensionContext:(Q)=>LQ({automationService:this.automationService,automation:this.automation,context:Q,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}):void 0;return this.host.restoreSession({sessionId:$.sessionId,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd,restore:$.restore,start:Z})}async compareCheckpoint($){let Z=$.sessionId.trim();if(!Z)throw Error("sessionId is required");let Q=await this.host.getSession(Z);if(!Q)throw Error(`Session ${Z} not found`);return c5({session:Q,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd})}ingestHookEvent=(...$)=>this.host.dispatchHookEvent(...$);subscribe($,Z){return this.host.subscribe($,Z)}updateSessionModel=(...$)=>{return this.host.updateSessionModel?.(...$)??Promise.resolve()}}var PA={};N(PA,{resolvePluginSkillDirectoriesFromPaths:()=>n1,resolvePluginConfigSearchPaths:()=>p6,resolveAndLoadAgentPlugins:()=>g8,resolveAgentPluginPaths:()=>i1,loadAgentPluginsFromPathsWithDiagnostics:()=>_2,loadAgentPluginsFromPaths:()=>IZ,loadAgentPluginFromPath:()=>d6,discoverPluginModulePaths:()=>r6});var yA={};N(yA,{toHookConfigFileName:()=>a6,runSubprocessEvent:()=>U4,runHook:()=>L4,resolveHooksConfigSearchPaths:()=>i6,parseHookEventPayload:()=>D4,mergeAgentHooks:()=>q2,listHookConfigFiles:()=>N$,createSubprocessHooks:()=>oQ,createHookConfigFileHooks:()=>s6,createHookConfigFileExtension:()=>u8,createHookAuditHooks:()=>c8,createAgentHooksExtension:()=>m8,HookEventPayloadSchema:()=>sQ,HookEventNameSchema:()=>aQ,HookConfigFileName:()=>v8,HOOK_CONFIG_FILE_EVENT_MAP:()=>n6,HOOKS_CONFIG_DIRECTORY_NAME:()=>uZ});import{HookEventNameSchema as aQ,HookEventPayloadSchema as sQ,parseHookEventPayload as D4,resolveHookSessionContext as nS}from"@cline/shared";import{z as g2}from"zod";import{spawn as uS}from"node:child_process";import{augmentNodeCommandForDebug as dS,withResolvedClineBuildEnv as lS}from"@cline/shared";function pS($){let Z=$.trim();if(!Z)return{};let W=Z.split(`
|
|
581
|
+
`).map((X)=>X.trim()).filter(Boolean).filter((X)=>X.startsWith("HOOK_CONTROL\t")).map((X)=>X.slice(13)),J=W.length>0?W[W.length-1]:Z;try{return{parsedJson:JSON.parse(J)}}catch(X){return{parseError:X instanceof Error?X.message:"Failed to parse subprocess stdout JSON"}}}function rS($,Z){let Q=$ instanceof Error?$:Error(String($)),W=Q,J=Z.join(" ");if(W.code==="EACCES")return Error(`Failed to execute hook command "${J}" (EACCES). Configure hooks with an explicit interpreter/command array (for example: ["bash", "/path/to/script"]) or make the script executable with a valid shebang.`);return Error(`Failed to execute hook command "${J}": ${Q.message}`)}async function iS($,Z){let Q=$.stdin;if(!Q)throw Error("runSubprocessEvent failed to create stdin pipe");await new Promise((W,J)=>{let X=(Y)=>{Q.off("error",X);let j=Y.code;if(j==="EPIPE"||j==="ERR_STREAM_DESTROYED"){W();return}J(Y)};Q.once("error",X),Q.end(Z,(Y)=>{if(Q.off("error",X),Y){let j=Y.code;if(j==="EPIPE"||j==="ERR_STREAM_DESTROYED"){W();return}J(Y);return}W()})})}async function U4($,Z){let Q=dS(Z.command,{env:Z.env,debugRole:"hook"});if(!Array.isArray(Q)||Q.length===0)throw Error("runSubprocessEvent requires a non-empty command");let W=!!Z.detached,J=uS(Q[0],Q.slice(1),{cwd:Z.cwd,env:lS(Z.env),stdio:W?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:W,windowsHide:!0}),X=new Promise((K)=>{J.once("spawn",()=>{try{Z.onSpawn?.({command:Q,pid:J.pid??void 0,detached:W})}catch{}K()})}),Y=new Promise((K,F)=>{J.once("error",(A)=>{F(rS(A,Q))})});if(await iS(J,JSON.stringify($)),W){await Promise.race([X,Y]),J.unref();return}if(!J.stdout||!J.stderr)throw Error("runSubprocessEvent failed to create stdout/stderr pipes");let j="",V="",H=!1,B;J.stdout.on("data",(K)=>{j+=K.toString()}),J.stderr.on("data",(K)=>{V+=K.toString()});let G=new Promise((K)=>{if((Z.timeoutMs??0)>0)B=setTimeout(()=>{H=!0,J.kill("SIGKILL")},Z.timeoutMs);J.once("close",(F)=>{if(B)clearTimeout(B);let{parsedJson:A,parseError:L}=pS(j);K({exitCode:F,stdout:j,stderr:V,parsedJson:A,parseError:L,timedOut:H})})});return await Promise.race([G,Y])}var aS=g2.object({contextModification:g2.string().optional(),cancel:g2.boolean().optional(),review:g2.boolean().optional(),errorMessage:g2.string().optional(),context:g2.string().optional(),overrideInput:g2.unknown().optional()}).passthrough();var sS=["agent","hook"];async function L4($,Z={}){let Q=Z.command??sS;return await U4($,{command:Q,cwd:Z.cwd,env:Z.env,detached:Z.detached,timeoutMs:Z.timeoutMs,onSpawn:Z.onSpawn})}function bA($){return $ instanceof Error?$:Error(String($))}function oS($){if(!$||typeof $!=="object")return;let Z=aS.safeParse($);if(!Z.success)return;let Q=Z.data;if(!(("cancel"in Q)||("review"in Q)||("context"in Q)||("contextModification"in Q)||("overrideInput"in Q)||("errorMessage"in Q)))return;let J=typeof Q.context==="string"?Q.context:typeof Q.contextModification==="string"?Q.contextModification:typeof Q.errorMessage==="string"&&Q.errorMessage.length>0?Q.errorMessage:void 0;return{cancel:typeof Q.cancel==="boolean"?Q.cancel:void 0,review:typeof Q.review==="boolean"?Q.review:void 0,context:J,overrideInput:Object.hasOwn(Q,"overrideInput")?Q.overrideInput:void 0}}function SA($){if(!$||typeof $!=="object")return{};let Z={};for(let[Q,W]of Object.entries($))if(typeof W==="string")Z[Q]=W;else Z[Q]=JSON.stringify(W);return Z}function $$($,Z,Q){let W=Q.env??process.env,J=W.CLINE_USER_ID?.trim()||W.USER?.trim()||"unknown",X=Q.cwd||process.cwd();return{clineVersion:W.CLINE_VERSION?.trim()||"",hookName:$,timestamp:new Date().toISOString(),taskId:Z.conversationId,sessionContext:nS(Q.sessionContext,{hookName:$,conversationId:Z.conversationId,agentId:Z.agentId,parentAgentId:Z.parentAgentId}),workspaceRoots:X?[X]:[],workspaceInfo:Q.workspaceInfo,userId:J,agent_id:Z.agentId,parent_agent_id:Z.parentAgentId}}function tS($){return{name:$.name,message:$.message,stack:$.stack}}function eS($){let Z=String($??"").toLowerCase();return Z.includes("cancel")||Z.includes("abort")||Z.includes("interrupt")}function $b($){return{agentId:$.snapshot.agentId,conversationId:$.snapshot.conversationId??$.snapshot.runId??$.snapshot.agentId,parentAgentId:$.snapshot.parentAgentId??null}}function Zb($){return $.filter((Z)=>Z.type==="text"&&typeof Z.text==="string").map((Z)=>Z.text).join("")}function Qb($){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 Wb($){if(!$)return;let Z={};if($.cancel===!0)Z.stop=!0;if($.overrideInput!==void 0)Z.input=$.overrideInput;return Object.keys(Z).length>0?Z:void 0}async function m2($,Z){try{let Q=await L4($,{command:Z.command,cwd:Z.cwd,env:Z.env,detached:!0,onSpawn:Z.onSpawn});Z.onDispatch?.({payload:$,result:Q,detached:!0})}catch(Q){Z.onDispatchError?.(bA(Q),$)}}function oQ($={}){return{hooks:{beforeRun:async(j)=>{let V=$b(j);if(($.env??process.env).CLINE_HOOK_AGENT_RESUME==="1"){let B={...$$("agent_resume",V,$),hookName:"agent_resume",taskResume:{taskMetadata:{},previousState:{}}};await m2(B,$)}else{let B={...$$("agent_start",V,$),hookName:"agent_start",taskStart:{taskMetadata:{}}};await m2(B,$)}return},beforeTool:async(j)=>{let V={agentId:j.snapshot.agentId,conversationId:j.snapshot.conversationId??j.snapshot.runId??j.snapshot.agentId,parentAgentId:j.snapshot.parentAgentId??null},H={...$$("tool_call",V,$),hookName:"tool_call",iteration:j.snapshot.iteration,tool_call:{id:j.toolCall.toolCallId,name:j.toolCall.toolName,input:j.input},preToolUse:{toolName:j.toolCall.toolName,parameters:SA(j.input)}};try{let B=await L4(H,{command:$.command,cwd:$.cwd,env:$.env,detached:!1,timeoutMs:$.timeoutMs,onSpawn:$.onSpawn});if($.onDispatch?.({payload:H,result:B,detached:!1}),B?.timedOut)throw Error("tool_call hook command timed out");if(B?.parseError)throw Error(`tool_call hook produced invalid control JSON: ${B.parseError}`);return Wb(oS(B?.parsedJson))}catch(B){$.onDispatchError?.(bA(B),H);return}},afterTool:async(j)=>{let V=Qb(j),H={agentId:j.snapshot.agentId,conversationId:j.snapshot.conversationId??j.snapshot.runId??j.snapshot.agentId,parentAgentId:j.snapshot.parentAgentId??null},B={...$$("tool_result",H,$),hookName:"tool_result",iteration:j.snapshot.iteration,tool_result:V,postToolUse:{toolName:V.name,parameters:SA(V.input),result:typeof V.output==="string"?V.output:JSON.stringify(V.output),success:!V.error,executionTimeMs:V.durationMs}};await m2(B,$);return},afterRun:async({snapshot:j,result:V})=>{let H={agentId:j.agentId,conversationId:j.conversationId??j.runId??j.agentId,parentAgentId:j.parentAgentId??null};if(V.status==="completed"){let K={...$$("agent_end",H,$),hookName:"agent_end",iteration:V.iterations,turn:{outputText:V.outputText,status:V.status},taskComplete:{taskMetadata:{}}};await m2(K,$);return}let B=V.status==="aborted"||eS(V.error?.message)?"agent_abort":"agent_error",G=B==="agent_error"?{...$$(B,H,$),hookName:B,iteration:V.iterations,error:tS(V.error??Error("Agent run failed")),taskCancel:{taskMetadata:{}}}:{...$$(B,H,$),hookName:B,reason:V.error?.message,taskCancel:{taskMetadata:{}}};await m2(G,$)},onEvent:async(j)=>{if(j.type!=="message-added"||j.message.role!=="user")return;let V={agentId:j.snapshot.agentId,conversationId:j.snapshot.conversationId??j.snapshot.runId??j.snapshot.agentId,parentAgentId:j.snapshot.parentAgentId??null},H={...$$("prompt_submit",V,$),hookName:"prompt_submit",userPromptSubmit:{prompt:Zb(j.message.content),attachments:[]}};await m2(H,$)}},shutdown:async({agentId:j,conversationId:V,parentAgentId:H,reason:B})=>{let G={...$$("session_shutdown",{agentId:j,conversationId:V,parentAgentId:H},$),hookName:"session_shutdown",reason:B};await m2(G,$)}}}tQ();var kA={};N(kA,{registerRemoteConfigSessionBlobUpload:()=>Z7,readRemoteConfigSessionBlobUploadMetadata:()=>LX,prepareRemoteConfigCoreIntegration:()=>zX,createRemoteConfigSessionMessagesArtifactUploader:()=>_X,buildRemoteConfigSessionBlobUploadMetadata:()=>eQ,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY:()=>$7});import{buildRemoteConfigSessionBlobUploadMetadata as eQ,clearRemoteConfigSessionBlobUpload as Jb,createClineTelemetryServiceConfig as Xb,createSessionId as Yb,createRemoteConfigSessionMessagesArtifactUploader as jb,prepareRemoteConfigRuntime as Vb,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY as $7,readRemoteConfigSessionBlobUploadMetadata as LX,registerRemoteConfigSessionBlobUpload as Z7}from"@cline/shared";function Hb($,Z){let Q=$.telemetry||Z.telemetryService?{...Z.telemetryService??{},...$.telemetry??{}}:void 0;if(!Q)return;return h1(Xb(Q)).telemetry}function _X(){let $=jb();return{async uploadMessagesFile(Z){await $.uploadMessagesFile(Z)}}}async function zX($){let Z=await Vb($),Q=Hb(Z,$),W=[Z.pluginDefinition],J=Z.claims?.subject,X=eQ(Z.bundle?.remoteConfig,J),Y;return{prepared:Z,extensions:W,telemetry:Q,applyToStartSessionInput(j){let V=j.config.extensions??[],H=j.config.telemetry,B=X?j.config.sessionId?.trim()||Yb():j.config.sessionId;if(B&&X)Y=B;let G=B&&X?Z7(B,Z.bundle?.remoteConfig,J):void 0,K=G?{...j.sessionMetadata??{},[$7]:G}:j.sessionMetadata;return{...j,...K?{sessionMetadata:K}:{},config:{...j.config,...B?{sessionId:B}:{},extensions:[...V,...W],telemetry:Q??H}}},async dispose(){if(Y)Jb(Y)}}}var uA={};N(uA,{createTeamName:()=>J7,DefaultRuntimeBuilder:()=>T4});import{hasRuntimeConfigExtension as qb}from"@cline/shared";import{nanoid as Mb}from"nanoid";$1();var cA={};N(cA,{createLocalTeamStore:()=>MX,SqliteTeamStore:()=>v2,FileTeamStore:()=>d5});import{appendFileSync as Bb,existsSync as _4,mkdirSync as IA,readdirSync as Gb,readFileSync as xA,renameSync as Kb,writeFileSync as Fb}from"node:fs";import{join as TX}from"node:path";import{resolveTeamDataDir as Ab}from"@cline/shared/storage";function gA(){return new Date().toISOString()}function OX($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function mA($){return{...$,tasks:$.tasks.map((Z)=>({...Z,createdAt:new Date(Z.createdAt),updatedAt:new Date(Z.updatedAt)})),mailbox:$.mailbox.map((Z)=>({...Z,sentAt:new Date(Z.sentAt),readAt:Z.readAt?new Date(Z.readAt):void 0})),missionLog:$.missionLog.map((Z)=>({...Z,ts:new Date(Z.ts)})),runs:($.runs??[]).map((Z)=>({...Z,startedAt:new Date(Z.startedAt),endedAt:Z.endedAt?new Date(Z.endedAt):void 0,nextAttemptAt:Z.nextAttemptAt?new Date(Z.nextAttemptAt):void 0,heartbeatAt:Z.heartbeatAt?new Date(Z.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),finalizedAt:Z.finalizedAt?new Date(Z.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),reviewedAt:Z.reviewedAt?new Date(Z.reviewedAt):void 0}))}}class d5{teamDirPath;constructor($={}){this.teamDirPath=$.teamDir??Ab()}init(){this.ensureTeamDir()}listTeamNames(){if(!_4(this.teamDirPath))return[];return Gb(this.teamDirPath,{withFileTypes:!0}).filter(($)=>$.isDirectory()).filter(($)=>_4(this.statePath($.name))).map(($)=>$.name).sort()}readState($){let Z=this.readEnvelope($);return Z?.teamState?mA(Z.teamState):void 0}readHistory($,Z=200){let Q=this.historyPath($);if(!_4(Q))return[];return xA(Q,"utf8").split(`
|
|
582
|
+
`).map((W)=>W.trim()).filter(Boolean).map((W)=>{try{return JSON.parse(W)}catch{return}}).filter((W)=>W!==void 0).reverse().slice(0,Z)}loadRuntime($){let Z=this.readEnvelope($);return{state:Z?.teamState?mA(Z.teamState):void 0,teammates:Z?.teammates??[],interruptedRunIds:[]}}handleTeamEvent($,Z){this.ensureTeamSubdir($),Bb(this.historyPath($),`${JSON.stringify({ts:gA(),eventType:Z.type,payload:Z})}
|
|
583
|
+
`,"utf8")}persistRuntime($,Z,Q){this.ensureTeamSubdir($);let W={version:1,updatedAt:gA(),teamState:Z,teammates:Q},J=this.statePath($),X=`${J}.tmp`;Fb(X,`${JSON.stringify(W,null,2)}
|
|
584
|
+
`,"utf8"),Kb(X,J)}markInProgressRunsInterrupted($,Z){let Q=this.readEnvelope($);if(!Q?.teamState?.runs?.length)return[];let W=Q.teamState.runs.filter((X)=>X.status==="queued"||X.status==="running").map((X)=>X.id);if(W.length===0)return[];let J=new Date;return Q.teamState={...Q.teamState,runs:Q.teamState.runs.map((X)=>X.status==="queued"||X.status==="running"?{...X,status:"interrupted",error:Z,endedAt:J}:X)},this.persistRuntime($,Q.teamState,Q.teammates),W}ensureTeamDir(){if(!_4(this.teamDirPath))IA(this.teamDirPath,{recursive:!0});return this.teamDirPath}ensureTeamSubdir($){let Z=TX(this.ensureTeamDir(),OX($));if(!_4(Z))IA(Z,{recursive:!0});return Z}statePath($){return TX(this.ensureTeamDir(),OX($),"state.json")}historyPath($){return TX(this.ensureTeamDir(),OX($),"task-history.jsonl")}readEnvelope($){let Z=this.statePath($);if(!_4(Z))return;try{let Q=JSON.parse(xA(Z,"utf8"));if(Q?.version===1&&Q.teamState)return Q}catch{}return}}import{existsSync as fb,mkdirSync as Ub}from"node:fs";import{join as Db}from"node:path";import{safeJsonParse as vA}from"@cline/shared";import{loadSqliteDb as Lb,nowIso as qX}from"@cline/shared/db";import{resolveDbDataDir as _b}from"@cline/shared/storage";function zb(){return _b()}function z4($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function Tb($){let Z=vA($);if(!Array.isArray(Z))return[];let Q=[];for(let W of Z){if(!W||typeof W!=="object")continue;let J=W,X=J.agentId,Y=J.rolePrompt;if(typeof X!=="string"||!X.trim())continue;if(typeof Y!=="string"||!Y.trim())continue;let j={agentId:X.trim(),rolePrompt:Y};if(typeof J.modelId==="string"&&J.modelId.trim())j.modelId=J.modelId.trim();if(typeof J.maxIterations==="number"&&Number.isFinite(J.maxIterations))j.maxIterations=Math.max(1,Math.floor(J.maxIterations));Q.push(j)}return Q}function Ob($){return{...$,tasks:$.tasks.map((Z)=>({...Z,createdAt:new Date(Z.createdAt),updatedAt:new Date(Z.updatedAt)})),mailbox:$.mailbox.map((Z)=>({...Z,sentAt:new Date(Z.sentAt),readAt:Z.readAt?new Date(Z.readAt):void 0})),missionLog:$.missionLog.map((Z)=>({...Z,ts:new Date(Z.ts)})),runs:($.runs??[]).map((Z)=>({...Z,startedAt:new Date(Z.startedAt),endedAt:Z.endedAt?new Date(Z.endedAt):void 0,nextAttemptAt:Z.nextAttemptAt?new Date(Z.nextAttemptAt):void 0,heartbeatAt:Z.heartbeatAt?new Date(Z.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),finalizedAt:Z.finalizedAt?new Date(Z.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),reviewedAt:Z.reviewedAt?new Date(Z.reviewedAt):void 0}))}}class v2{teamDirPath;db;constructor($={}){this.teamDirPath=$.teamDir??zb()}init(){this.getRawDb()}ensureTeamDir(){if(!fb(this.teamDirPath))Ub(this.teamDirPath,{recursive:!0});return this.teamDirPath}dbPath(){return Db(this.ensureTeamDir(),"teams.db")}getRawDb(){if(this.db)return this.db;let $=Lb(this.dbPath());return this.ensureSchema($),this.db=$,$}ensureSchema($){if($.exec("PRAGMA journal_mode = WAL;"),$.exec("PRAGMA busy_timeout = 5000;"),$.exec(`
|
|
584
585
|
CREATE TABLE IF NOT EXISTS team_store_schema_version (
|
|
585
586
|
lock INTEGER PRIMARY KEY CHECK (lock = 1),
|
|
586
587
|
version INTEGER NOT NULL
|
|
@@ -664,7 +665,7 @@ ${J}`,$.config.mode)}function m5($,Z){return VS($,Z==="plan"?"plan":Z==="yolo"?"
|
|
|
664
665
|
version INTEGER NOT NULL DEFAULT 1,
|
|
665
666
|
PRIMARY KEY(team_name, fragment_id)
|
|
666
667
|
);
|
|
667
|
-
`)}run($,Z=[]){return this.getRawDb().prepare($).run(...Z)}queryOne($,Z=[]){return this.getRawDb().prepare($).get(...Z)??void 0}queryAll($,Z=[]){return this.getRawDb().prepare($).all(...Z)}withTransaction($){let Z=this.getRawDb();Z.exec("BEGIN IMMEDIATE;");try{$(),Z.exec("COMMIT;")}catch(Q){try{Z.exec("ROLLBACK;")}catch{}throw Q}}listTeamNames(){return this.queryAll("SELECT team_name FROM team_runtime_snapshot ORDER BY team_name ASC").map(($)=>$.team_name)}readState($){let Z=this.queryOne("SELECT team_name, state_json, teammates_json, updated_at FROM team_runtime_snapshot WHERE team_name = ?",[z4($)]);if(!Z)return;let Q=
|
|
668
|
+
`)}run($,Z=[]){return this.getRawDb().prepare($).run(...Z)}queryOne($,Z=[]){return this.getRawDb().prepare($).get(...Z)??void 0}queryAll($,Z=[]){return this.getRawDb().prepare($).all(...Z)}withTransaction($){let Z=this.getRawDb();Z.exec("BEGIN IMMEDIATE;");try{$(),Z.exec("COMMIT;")}catch(Q){try{Z.exec("ROLLBACK;")}catch{}throw Q}}listTeamNames(){return this.queryAll("SELECT team_name FROM team_runtime_snapshot ORDER BY team_name ASC").map(($)=>$.team_name)}readState($){let Z=this.queryOne("SELECT team_name, state_json, teammates_json, updated_at FROM team_runtime_snapshot WHERE team_name = ?",[z4($)]);if(!Z)return;let Q=vA(Z.state_json);if(!Q)return;try{return Ob(Q)}catch{return}}readHistory($,Z=200){return this.queryAll("SELECT event_type, payload_json, ts FROM team_events WHERE team_name = ? ORDER BY id DESC LIMIT ?",[z4($),Z]).flatMap((Q)=>{try{return[{eventType:Q.event_type,payload:JSON.parse(Q.payload_json),ts:Q.ts}]}catch{return[]}})}loadRuntime($){let Z=z4($),Q=this.readState(Z),W=this.queryOne("SELECT team_name, state_json, teammates_json, updated_at FROM team_runtime_snapshot WHERE team_name = ?",[Z]),J=W?Tb(W.teammates_json):[];return{state:Q,teammates:J,interruptedRunIds:[]}}appendTeamEvent($,Z,Q,W){this.run(`INSERT INTO team_events (team_name, ts, event_type, payload_json, causation_id, correlation_id)
|
|
668
669
|
VALUES (?, ?, ?, ?, NULL, ?)`,[z4($),qX(),Z,JSON.stringify(Q),W??null])}persistRuntime($,Z,Q){let W=z4($),J=qX();this.withTransaction(()=>{this.run(`INSERT INTO team_runtime_snapshot (team_name, state_json, teammates_json, updated_at)
|
|
669
670
|
VALUES (?, ?, ?, ?)
|
|
670
671
|
ON CONFLICT(team_name) DO UPDATE SET
|
|
@@ -711,43 +712,43 @@ ${J}`,$.config.mode)}function m5($,Z){return VS($,Z==="plan"?"plan":Z==="yolo"?"
|
|
|
711
712
|
reviewed_by = excluded.reviewed_by,
|
|
712
713
|
reviewed_at = excluded.reviewed_at,
|
|
713
714
|
version = team_outcome_fragments.version + 1`,[W,X.outcomeId,X.id,X.section,X.sourceAgentId,X.sourceRunId??null,X.content,X.status,X.reviewedBy??null,X.reviewedAt?X.reviewedAt.toISOString():null])})}markInProgressRunsInterrupted($,Z){let Q=z4($),W=this.queryAll("SELECT run_id FROM team_runs WHERE team_name = ? AND status IN ('queued', 'running')",[Q]);if(W.length===0)return[];let J=qX();return this.run(`UPDATE team_runs SET status = 'interrupted', error = ?, ended_at = ?, version = version + 1
|
|
714
|
-
WHERE team_name = ? AND status IN ('queued', 'running')`,[Z,J,Q]),W.map((X)=>X.run_id)}handleTeamEvent($,Z){this.appendTeamEvent($,Z.type,Z)}}function MX($={}){try{let Z=new
|
|
715
|
-
`,"utf8");let V=Z.timeoutMs??300000,H=Z.pollIntervalMs??200,B=Date.now();while(Date.now()-B<V){try{let G=await
|
|
716
|
-
`,"utf8")}function nA($){return{pluginPaths:[...new Set(($.pluginPaths??[]).map((Z)=>Z.trim()).filter((Z)=>Z.length>0))],pluginNames:[...new Set(($.pluginNames??[]).map((Z)=>Z.trim()).filter((Z)=>Z.length>0))]}}function j7($){if(!u2($))return;let Z=$.metadata;return u2(Z)?Z:void 0}function Y7($,Z){let Q=j7($);if(!Q||Q.source!=="plugin")return!1;let W=typeof Q.pluginName==="string"?Q.pluginName:typeof Q.plugin==="string"?Q.plugin:void 0,J=typeof Q.pluginPath==="string"?Q.pluginPath:void 0;if(Z.pluginName&&W===Z.pluginName){if(!Z.pluginPath||J===Z.pluginPath)return!0}if(J&&Z.pluginPath&&(J===Z.pluginPath||X7(Z.pluginPath,J)||X7(J,Z.pluginPath)))return!0;if(W&&Z.pluginNames?.some((X)=>X===W))return!0;if(J&&Z.pluginPaths?.some((X)=>J===X||X7(X,J)||X7(J,X)))return!0;return!1}function ab($){let Z=u2($.existing?.oauth)?{oauth:$.existing.oauth}:{};return{transport:$.registration.transport.type==="stdio"&&$.registration.transport.cwd===void 0?{...$.registration.transport,cwd:iA($.pluginPath)}:$.registration.transport,...$.disabled?{disabled:!0}:{},...Z,metadata:{...$.registration.metadata??{},source:"plugin",pluginName:$.pluginName,pluginPath:$.pluginPath}}}async function sb($){if($.pluginPaths.length===0)return{plugins:[],servers:[],failures:[]};let Z=await g8({pluginPaths:[...$.pluginPaths],cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,workspaceInfo:$.workspacePath?{rootPath:$.workspacePath}:void 0});try{let Q=[],W=[],J=(Z.failures??[]).map((X)=>({pluginPath:X.pluginPath,pluginName:X.pluginName,message:X.message}));for(let X of Z.extensions??[]){let Y=X.__clinePluginPath;if(!Y)continue;if(!X.setup){Q.push({pluginName:X.name,pluginPath:Y});continue}let j=[],V={registerTool:(H)=>{},registerCommand:()=>{},registerMessageBuilder:()=>{},registerRule:()=>{},registerProvider:()=>{},registerAutomationEventType:()=>{},registerMcpServer:(H)=>{if(!X.manifest.capabilities.includes("mcp"))throw Error('registerMcpServer requires the "mcp" capability');j.push(H)}};try{await X.setup(V,{workspaceInfo:$.workspacePath?{rootPath:$.workspacePath}:void 0})}catch(H){J.push({pluginPath:Y,pluginName:X.name,message:H instanceof Error?H.message:String(H)});continue}Q.push({pluginName:X.name,pluginPath:Y});for(let H of j)W.push({pluginName:X.name,pluginPath:Y,server:{...H,metadata:{...H.metadata??{},source:"plugin",pluginName:X.name,pluginPath:Y}}})}return{plugins:Q,servers:W,failures:J}}finally{await Z.shutdown().catch(()=>{})}}async function r5($){let Z=$.settingsPath??Z0(),Q={mutations:[],failures:[]},W;try{W=await sb($)}catch(H){for(let B of $.pluginPaths)Q.failures.push({pluginPath:B,message:H instanceof Error?H.message:String(H)});return Q}Q.failures.push(...W.failures);let J;try{J=wX(Z)}catch(H){for(let B of $.pluginPaths)Q.failures.push({pluginPath:B,message:H instanceof Error?H.message:String(H)});return Q}let X=PX(J),Y=new Map,j=new Map;for(let H of W.plugins)Y.set(H.pluginPath,new Set),j.set(H.pluginPath,H.pluginName);let V=SQ(W.servers.map((H)=>({server:H.server,owner:H,ownerLabel:H.pluginName})));for(let H of V){let B=H.owner;if(!Y.has(B.pluginPath))Y.set(B.pluginPath,new Set);if(H.name)Y.get(B.pluginPath)?.add(H.name);if(!H.registration){Q.mutations.push({name:H.name,pluginName:B.pluginName,pluginPath:B.pluginPath,action:"skipped",reason:H.loadError??"invalid MCP server registration"});continue}let G=X[H.registration.name];if(G!==void 0){if(!Y7(G,{pluginName:B.pluginName,pluginPath:B.pluginPath})){Q.mutations.push({name:H.registration.name,pluginName:B.pluginName,pluginPath:B.pluginPath,action:"skipped",reason:"MCP server name is already configured"});continue}}X[H.registration.name]=ab({registration:H.registration,pluginName:B.pluginName,pluginPath:B.pluginPath,existing:u2(G)?G:void 0}),Q.mutations.push({name:H.registration.name,pluginName:B.pluginName,pluginPath:B.pluginPath,action:G===void 0?"created":"updated"})}for(let[H,B]of Object.entries(X)){let G=j7(B),K=typeof G?.pluginPath==="string"?G.pluginPath:"",F=Y.get(K);if(F&&Y7(B,{pluginPath:K})&&!F.has(H))delete X[H],Q.mutations.push({name:H,pluginName:typeof G?.pluginName==="string"?G.pluginName:j.get(K)??"plugin",pluginPath:K,action:"removed",reason:"plugin no longer declares this MCP server"})}if(Q.mutations.some((H)=>H.action!=="skipped"))try{SX(Z,J,X)}catch(H){for(let B of $.pluginPaths)Q.failures.push({pluginPath:B,message:H instanceof Error?H.message:String(H)})}return Q}function bX($){let Z=$.settingsPath??Z0(),Q;try{Q=wX(Z)}catch{return[]}let W=PX(Q),J=nA($),X=[];for(let[Y,j]of Object.entries(W)){if(!u2(j)||!Y7(j,J))continue;let V=j7(j);W[Y]={...j,disabled:!0},X.push({name:Y,pluginName:typeof V?.pluginName==="string"?V.pluginName:"plugin",pluginPath:typeof V?.pluginPath==="string"?V.pluginPath:"",action:"disabled"})}if(X.length>0)SX(Z,Q,W);return X}function i5($){let Z=$.settingsPath??Z0(),Q;try{Q=wX(Z)}catch{return[]}let W=PX(Q),J=nA($),X=[];for(let[Y,j]of Object.entries(W)){if(!Y7(j,J))continue;let V=j7(j);delete W[Y],X.push({name:Y,pluginName:typeof V?.pluginName==="string"?V.pluginName:"plugin",pluginPath:typeof V?.pluginPath==="string"?V.pluginPath:"",action:"removed"})}if(X.length>0)SX(Z,Q,W);return X}var gX="_installed",jy="package",Vy=new Map([["git",2],["local",1],["npm",1],["official",1],["remote",1]]);function hX($){return $.trim().toLowerCase()}function V1($,Z){let Q=Z?.trim();if(!Q)return;$.add(Q)}function Hy($){return $.replace(/-[0-9a-f]{12}$/i,"")}function kX($){let Z=Qy($);return Z?$.slice(0,-Z.length):$}function IX($){if(!M4($))return;try{let Z=JSON.parse(tb($,"utf8"));return typeof Z.name==="string"?Z.name.trim():void 0}catch{return}}function mX($,Z){let Q=Jy(Z,$);return Q===""||!Q.startsWith("..")&&!Wy(Q)}function sA($){let Q=q4($).split(yX),W=Q.lastIndexOf(gX);if(W<0)return;let J=Q[W+1];if(!J)return;let X=Vy.get(J)??1,Y=W+2+X;if(Q.length<Y)return;let j=Q.slice(0,Y).join(yX)||yX;return M4(j)?j:void 0}function V7($){try{return ob($,{withFileTypes:!0})}catch{return[]}}function By($){let Z=Z$($,gX);if(!M4(Z))return[];let Q=[];for(let W of V7(Z)){if(!W.isDirectory())continue;let J=Z$(Z,W.name);if(W.name==="git"){for(let X of V7(J)){if(!X.isDirectory())continue;let Y=Z$(J,X.name);for(let j of V7(Y))if(j.isDirectory())Q.push(Z$(Y,j.name))}continue}for(let X of V7(J))if(X.isDirectory())Q.push(Z$(J,X.name))}return Q.sort((W,J)=>W.localeCompare(J))}function oA($){try{return Xy($)}catch{return[]}}function xX($){let Z=oA($),Q=new Set;V1(Q,a0($)),V1(Q,Hy(a0($))),V1(Q,IX(Z$($,"package.json"))),V1(Q,IX(Z$($,jy,"package.json")));for(let W of Z)V1(Q,a0(W)),V1(Q,kX(a0(W)));return{installPath:$,entryPaths:Z,names:[...Q].sort((W,J)=>W.localeCompare(J)),installed:!0}}function Gy($,Z){let Q=q4($),W=Z.find((Y)=>mX(Q,Y));if(!W)return;let J=v$(Q);while(J!==W&&J!==v$(J)){if(M4(Z$(J,"package.json")))return J;J=v$(J)}let X=a0(Q);if((X==="index.ts"||X==="index.js")&&v$(Q)!==W)return v$(Q);return Q}function tA($,Z){let Q=Gy($,Z);if(!Q)return;let W=new Set;return V1(W,a0($)),V1(W,kX(a0($))),V1(W,a0(Q)),V1(W,kX(a0(Q))),V1(W,IX(Z$(Q,"package.json"))),{installPath:Q,entryPaths:[$],names:[...W].sort((J,X)=>J.localeCompare(X)),installed:!1}}function Ky($){let Z=$.workspaceRoot?.trim()||$.cwd?.trim()||process.cwd();return Yy(Z).filter((Q)=>M4(Q))}function Fy($){let Z=new Map;for(let Q of $){for(let W of By(Q))Z.set(W,xX(W));for(let W of oA(Q)){let J=sA(W);if(J){if(!Z.has(J))Z.set(J,xX(J));continue}let X=tA(W,$);if(X)Z.set(X.installPath,X)}}return[...Z.values()].sort((Q,W)=>Q.installPath.localeCompare(W.installPath))}function Ay($,Z){let Q=hX(Z);if(!Q)return!1;if(hX($.installPath)===Q)return!0;return $.names.some((W)=>hX(W)===Q)}function fy($,Z,Q){let W=q4($);for(let X of Z){if(mX(W,X.installPath))return X;if(X.entryPaths.some((Y)=>q4(Y)===W))return X}let J=sA(W);if(J)return xX(J);if(M4(W))return tA(W,Q);return}function Uy($){let Z=M0(),Q=Z.disabledPlugins;if(!Q?.length)return;let W=Q.filter((J)=>{let X=q4(J);if(mX(X,$.installPath))return!1;return!$.entryPaths.some((Y)=>q4(Y)===X)});if(W.length===Q.length)return;b1({...Z,disabledPlugins:W})}function Dy($){let Z=v$($);while(Z!==v$(Z)&&a0(Z)!==gX){try{eb(Z)}catch{return}Z=v$(Z)}}function Ty($){return`${$.names[0]??a0($.installPath)} at ${$.installPath}`}async function n5($){let Z=Ky($),Q=Fy(Z),W=$.path?.trim(),J=$.name?.trim(),X;if(W){if(X=fy(W,Q,Z),!X)throw Error(`No plugin found at ${W}`)}else{if(!J)throw Error("plugin uninstall requires a plugin name");let j=Q.filter((V)=>Ay(V,J));if(j.length===0)throw Error(`No plugin found matching "${J}"`);if(j.length>1)throw Error(`Multiple plugins match "${J}": ${j.map(Ty).join(", ")}`);X=j[0]}let Y=Zy(X.installPath,{throwIfNoEntry:!1});if(!Y)throw Error(`Plugin install path does not exist: ${X.installPath}`);if(i5({pluginPaths:[X.installPath,...X.entryPaths],pluginNames:X.names}),$y(X.installPath,{recursive:Y.isDirectory(),force:!0}),Uy(X),X.installed)Dy(X.installPath);return{name:J||X.names[0]||a0(X.installPath),installPath:X.installPath,removedPaths:[X.installPath],entryPaths:X.entryPaths}}var vX=120000,a5=12000,Ey=/(api[_ -]?key|access[_ -]?token|refresh[_ -]?token|auth(?:orization)?[_ -]?token|token|secret|password|authorization|credential)/i,Ny=/((?:^|[^\w])(?:[a-z0-9_]*?(?:api[_ -]?key|access[_ -]?token|refresh[_ -]?token|auth(?:orization)?[_ -]?token|token|secret|password|credential)[a-z0-9_]*)\s*[:=]\s*)(.+)$/gi,Cy=/((?:^|[^\w])authorization\s*[:=]\s*)bearer\s+([^\s,"'}\]]+)/gi,wy=/((?:^|[^\w])authorization\s*[:=])(?!\s*bearer\b)\s*(.+)$/gi;function cX($){return $.install?.args??[]}function Py(){return process.env.HOME?.trim()||process.env.USERPROFILE?.trim()||zy()}function Sy($){let Z=0,Q=$.length;while(Z<Q&&($[Z]==="."||$[Z]==="-"))Z++;while(Q>Z&&($[Q-1]==="."||$[Q-1]==="-"))Q--;return $.slice(Z,Q)}function by($){return Sy($.toLowerCase().replace(/[^a-z0-9._]+/g,"-")).slice(0,255)||"skill"}function Qf($){return $.split(/\r?\n/).map((Z)=>{if(!Ey.test(Z))return Z;return Z.replace(Ny,"$1[redacted]").replace(Cy,"$1Bearer [redacted]").replace(/\b(Bearer)\s+(?!\[redacted\])([^\s,"'}\]]+)/gi,"$1 [redacted]").replace(wy,"$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(`
|
|
717
|
-
`).slice(-
|
|
718
|
-
`)).trim();return Z.length>0?Z:void 0}function
|
|
719
|
-
Timed out after ${vX/1000}s.`,Y.kill("SIGTERM")},vX);H.unref?.(),B.unref?.(),Y.stdout?.on("data",(G)=>{if(j+=String(G),j.length>
|
|
715
|
+
WHERE team_name = ? AND status IN ('queued', 'running')`,[Z,J,Q]),W.map((X)=>X.run_id)}handleTeamEvent($,Z){this.appendTeamEvent($,Z.type,Z)}}function MX($={}){try{let Z=new v2($);return Z.init(),Z}catch{let Z=new d5({teamDir:$.teamDir});return Z.init(),Z}}function Q7($,Z){return qb($,Z)}function Rb($,Z){let Q=Z?.["*"]??{},W=Z?.[$]??{};return{...Q,...W}.enabled!==!1}function Eb($,Z){return $.filter((Q)=>Rb(Q.name,Z))}function RX($,Z){return y1(Eb($,Z))}var Nb={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 wb($){let Z=$.trim().toLowerCase();return Nb[Z]??Z}function Cb($,Z){if(Z.tools===void 0)return $;let Q=new Set(Z.tools.map(wb));if(Z.skills!==void 0)Q.add("skills");return $.filter((W)=>Q.has(W.name))}function J7(){return`team-${Mb(5)}`}function W7($,Z,Q,W,J,X,Y,j){let V=u0[l1({mode:Q})],H=M8(Z,W,Q,J??q8);return RX(f2({cwd:$,...V,enableSkills:!!Y,...H,executors:{...Y?{skills:Y}:{},...j??{}}}),X)}function Pb($){return W7($.cwd,$.providerId,$.mode,$.modelId,$.toolRoutingRules,$.toolPolicies,Sb,$.toolExecutors).some((Z)=>Z.name==="skills")}var Sb=async()=>"";async function bb($){let Z=Z0();if(!s1({filePath:Z}))return{tools:[]};let Q=new S2({clientFactory:$4({settingsPath:Z})}),W;try{W=await P2(Q,{filePath:Z})}catch(j){await Q.dispose().catch(()=>{});let V=j instanceof Error?j.message:String(j);return $?.log(`[mcp] Failed to load MCP settings, skipping MCP tools: ${V}`),{tools:[]}}let J=W.filter((j)=>j.disabled!==!0),X=await Promise.allSettled(J.map((j)=>Q4({serverName:j.name,provider:Q}))),Y=[];for(let[j,V]of X.entries())if(V.status==="fulfilled")Y.push(...V.value);else{let H=V.reason instanceof Error?V.reason.message:String(V.reason);$?.log(`[mcp] Failed to load tools from MCP server "${J[j].name}", skipping: ${H}`)}return{tools:Y,shutdown:async()=>{await Q.dispose()}}}function yb($,Z){if(!$)return;for(let Q of $.getTeammateIds())try{$.shutdownTeammate(Q,Z)}catch{}}function hb($){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 kb($){let Z=u0[l1({mode:$.mode})];return{sessionId:$.sessionId||"",mode:$.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act",enableTools:$.enableTools!==!1,enableSpawnAgent:$.enableSpawnAgent??Z.enableSpawnAgent??!0,enableAgentTeams:$.enableAgentTeams??Z.enableAgentTeams??!0,disableMcpSettingsTools:$.disableMcpSettingsTools===!0,yolo:$.yolo===!0,missionLogIntervalSteps:typeof $.missionLogIntervalSteps==="number"&&Number.isFinite($.missionLogIntervalSteps)?$.missionLogIntervalSteps:3,missionLogIntervalMs:typeof $.missionLogIntervalMs==="number"&&Number.isFinite($.missionLogIntervalMs)?$.missionLogIntervalMs:120000}}class T4{teamRuntimeEntries=new Map;async build($){let{config:Z,hooks:Q,extensions:W,logger:J,telemetry:X,createSpawnTool:Y,onTeamRestored:j,userInstructionService:V,configExtensions:H,toolExecutors:B}=$,G=$.onTeamEvent??(()=>{}),K=kb(Z),F=Z.workspaceRoot??Z.cwd,A=$.toolPolicies??Z.toolPolicies,L=B1(),f=[],D=Z.teamName?.trim()||J7(),U=Z.sessionId?.trim()||D,T=K.enableSpawnAgent?Y4({workspaceRoot:F}):{configs:[],errors:[]},O=T.configs.some((v)=>v.skills!==void 0),z=Q7(H,"rules"),_=Q7(H,"skills"),E=_||O,C=Q7(H,"workflows"),y=Q7(H,"plugins"),l=z||_||C,o=!1,t=Boolean(V),Q0=V,e0;for(let v of T.errors)(J??Z.logger)?.log?.(`[agents] Failed to load agent config at ${v.path}: ${v.error.message}`);if(!Q0&&(l||O))Q0=b$({skills:E?{workspacePath:F,includePluginSkills:y,pluginSkillDirectories:y?$.pluginSkillDirectories:void 0,pluginPaths:Z.pluginPaths,cwd:Z.cwd}:{workspacePath:F},rules:{workspacePath:Z.cwd},workflows:{workspacePath:Z.cwd}});if(Q0)await Q0.start().catch(()=>{});let l$=K.enableTools&&_&&Boolean(Q0)&&Q0?.hasConfiguredSkills(Z.skills)===!0&&Pb({cwd:Z.cwd,providerId:Z.providerId,mode:K.mode,modelId:Z.modelId,toolRoutingRules:Z.toolRoutingRules,toolPolicies:A,toolExecutors:B}),r=Q0&&l?Q0.createExtension({includeRules:z,includeSkills:_,includeWorkflows:C,registerSkillsTool:l$,allowedSkillNames:Z.skills}):void 0,q1=r?[...W??Z.extensions??[],r]:W??Z.extensions;if(K.enableTools){if(f.push(...W7(Z.cwd,Z.providerId,K.mode,Z.modelId,Z.toolRoutingRules,A,void 0,B)),!K.disableMcpSettingsTools){let v=await bb(Z.logger);f.push(...v.tools),e0=v.shutdown}}let P,B0=K.enableAgentTeams?MX():void 0,G0=B0?.loadRuntime(U),C0=G0?.state,i2=G0?.teammates??[],M1=new Map(i2.map((v)=>[v.agentId,v])),H1=Z.sessionId||D,w4,n2=[],B9=!1,R1=T$({providerId:Z.providerId,modelId:Z.modelId,cwd:Z.cwd,apiKey:Z.apiKey??"",baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking,maxTokensPerTurn:Z.maxTokensPerTurn,maxIterations:Z.maxIterations,hooks:Q,extensions:q1,logger:J??Z.logger,telemetry:$.telemetry??Z.telemetry,workspaceMetadata:Z.workspaceMetadata});if(K.enableSpawnAgent){if(T.configs.length>0)f.push(...RX(j4({configProvider:R1,agents:T.configs,createSubAgentTools:(v)=>K.enableTools?Cb(W7(Z.cwd,v.providerId??Z.providerId,K.mode,v.modelId??Z.modelId,Z.toolRoutingRules,A,v.skills!==void 0&&Q0?.createSkillsExecutor?Q0.createSkillsExecutor(v.skills):void 0,B),v):[],hookErrorMode:Z.hookErrorMode,toolPolicies:A,requestToolApproval:$.requestToolApproval,onSubAgentEvent:$.onSubAgentEvent,onSubAgentStart:$.onSubAgentStart,onSubAgentEnd:$.onSubAgentEnd}),A))}if(!this.teamRuntimeEntries.has(H1))this.teamRuntimeEntries.set(H1,{delegatedAgentConfigProvider:R1});let G9=()=>{if(!K.enableAgentTeams)return;let v=this.teamRuntimeEntries.get(H1)??{delegatedAgentConfigProvider:R1};if(this.teamRuntimeEntries.set(H1,v),P=v.runtime,!P){if(P=new h2({teamName:D,leadAgentId:Z.sessionId||"lead",missionLogIntervalSteps:K.missionLogIntervalSteps,missionLogIntervalMs:K.missionLogIntervalMs,onTeamEvent:(Y0)=>{if(G(Y0),P&&B0){if(Y0.type==="teammate_spawned"&&Y0.teammate?.rolePrompt){let E1={agentId:Y0.agentId,rolePrompt:Y0.teammate.rolePrompt,modelId:Y0.teammate.modelId,maxIterations:Y0.teammate.maxIterations};M1.set(E1.agentId,E1)}if(Y0.type==="teammate_shutdown"&&!hb(Y0.reason))M1.delete(Y0.agentId);B0.handleTeamEvent(U,Y0),B0.persistRuntime(U,P.exportState(),Array.from(M1.values()))}}}),C0)P.hydrateState(C0),B9=!0;v.runtime=P}if(!o){if(!P)return;o=!0;let Y0=w8({runtime:P,leadAgentId:Z.sessionId||"lead",restoredFromPersistence:Boolean(C0),restoredTeammates:i2,includeLeadSpawnTool:!0,includeLeadManagementTools:!0,onLeadToolsUnlocked:(E1)=>{n2=E1,w4?.addTools(E1)},createBaseTools:K.enableTools?()=>W7(Z.cwd,Z.providerId,K.mode,Z.modelId,Z.toolRoutingRules,A,void 0,B):void 0,teammateConfigProvider:R1});if(B9)P.recoverActiveRuns("runtime_recovered");if(Y0.restoredFromPersistence)j?.();f.push(...Y0.tools)}return P};if(K.enableSpawnAgent&&Y){let v=Y();f.push({...v,execute:async(Y0,E1)=>{return G9(),v.execute(Y0,E1)}})}if(K.enableAgentTeams)G9();let a2=RX(f,A),e7=a2.some((v)=>v.name==="submit_and_exit"&&v.lifecycle?.completesRun===!0),K9=K.enableAgentTeams?()=>{let v=this.teamRuntimeEntries.get(H1)?.runtime;if(!v)return;let Y0=v.listTasks(),E1=Y0.some((J$)=>J$.status==="in_progress"||J$.status==="pending"),Zj=v.listRuns({}),LD=Zj.some((J$)=>J$.status==="running"||J$.status==="queued");if(E1||LD){let J$=Y0.filter((x0)=>x0.status==="in_progress"||x0.status==="pending").map((x0)=>`${x0.id} (${x0.status}): ${x0.title}`).join(", "),Qj=Zj.filter((x0)=>x0.status==="running"||x0.status==="queued").map((x0)=>`${x0.id} (${x0.status})`).join(", "),$W=[];if(J$)$W.push(`Unfinished tasks: ${J$}`);if(Qj)$W.push(`Active runs: ${Qj}`);return`[SYSTEM] You still have team obligations. ${$W.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,DD=e7?{requireCompletionTool:!0,...K9?{completionGuard:K9}:{}}:K9?{completionGuard:K9}:void 0;return{tools:a2,logger:J??Z.logger,telemetry:X??Z.telemetry,teamRuntime:P,teamRestoredFromPersistence:Boolean(C0),delegatedAgentConfigProvider:this.teamRuntimeEntries.get(H1)?.delegatedAgentConfigProvider??R1,extensions:q1,completionPolicy:DD,registerLeadAgent:(v)=>{if(w4=v,n2.length>0)v.addTools(y1(n2,[...L]))},shutdown:async(v)=>{if(yb(P,v),this.teamRuntimeEntries.delete(H1),await e0?.(),!t)Q0?.stop()}}}}var lA={};N(lA,{requestDesktopToolApproval:()=>NX});import{mkdir as Ib,readFile as xb,unlink as gb,writeFile as mb}from"node:fs/promises";import{join as dA}from"node:path";function vb($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function cb($){return new Promise((Z)=>setTimeout(Z,$))}async function EX($){try{await gb($)}catch{}}async function NX($,Z={}){let Q=Z.approvalDir?.trim(),W=Z.sessionId?.trim();if(!Q||!W)return{approved:!1,reason:"Desktop tool approval IPC is not configured"};await Ib(Q,{recursive:!0});let J=vb(`${$.toolCallId}`),X=dA(Q,`${W}.request.${J}.json`),Y=dA(Q,`${W}.decision.${J}.json`),j=Z.nowIso??(()=>new Date().toISOString());await mb(X,`${JSON.stringify({requestId:J,sessionId:W,createdAt:j(),toolCallId:$.toolCallId,toolName:$.toolName,input:$.input,iteration:$.iteration,agentId:$.agentId,conversationId:$.conversationId},null,2)}
|
|
716
|
+
`,"utf8");let V=Z.timeoutMs??300000,H=Z.pollIntervalMs??200,B=Date.now();while(Date.now()-B<V){try{let G=await xb(Y,"utf8"),K=JSON.parse(G),F={approved:K.approved===!0,reason:typeof K.reason==="string"?K.reason:void 0};return await Promise.all([EX(Y),EX(X)]),F}catch{}await cb(H)}return await EX(X),{approved:!1,reason:"Tool approval request timed out"}}$1();var rA={};N(rA,{parseMcpInstallArgs:()=>l5,installMcpServer:()=>wX,buildMcpInstallTransport:()=>X7});function ub($){let Z=($??"stdio").trim();if(Z==="http"||Z==="streamable-http")return"streamableHttp";if(Z==="stdio"||Z==="sse"||Z==="streamableHttp")return Z;throw Error(`Unsupported MCP transport "${Z}". Expected stdio, sse, http, streamable-http, or streamableHttp.`)}function db($){let Z;try{Z=new URL($)}catch{throw Error(`Invalid MCP server URL: ${$}`)}if(Z.protocol!=="http:"&&Z.protocol!=="https:")throw Error(`Invalid MCP server URL: ${$} (only http and https are supported)`)}function lb($){let Z=$.indexOf(":");if(Z<=0)throw Error(`Invalid MCP header "${$}". Expected "Header-Name: header value".`);let Q=$.slice(0,Z).trim(),W=$.slice(Z+1).trim();if(!Q||!W)throw Error(`Invalid MCP header "${$}". Expected "Header-Name: header value".`);if(!/^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/.test(Q))throw Error(`Invalid MCP header name "${Q}".`);return[Q,W]}function pb($){let Z=$.indexOf("<");return Z>=0&&$.indexOf(">",Z+1)>Z+1}function pA($){let Z=[...$.headers??[]],Q=[],W=$.transport,J=$.targetArgs??[];for(let X=0;X<J.length;X++){let Y=J[X];if($.parseTransport&&Y==="--transport"){let j=J[X+1];if(!j)throw Error("--transport requires a value");W=j,X++;continue}if($.parseTransport&&Y?.startsWith("--transport=")){W=Y.slice(12);continue}if(Y==="--header"){let j=J[X+1];if(!j)throw Error("--header requires a value");Z.push(j),X++;continue}if(Y?.startsWith("--header=")){Z.push(Y.slice(9));continue}Q.push(Y)}return{headers:Z,targetArgs:Q,transport:W}}function rb($){if($.length===0)return{warnings:[]};let Z={},Q=[];for(let W of $){let[J,X]=lb(W);if(Z[J]=X,pb(X))Q.push(`Header "${J}" looks like it contains a placeholder. Update it in MCP settings before using this server.`)}return{headers:Z,warnings:Q}}function X7($){let Z=$.name.trim();if(!Z)throw Error("MCP server name is required");let{headers:Q,targetArgs:W,transport:J}=pA({headers:$.headers,targetArgs:$.targetArgs,transport:$.transport}),X=ub(J),{headers:Y,warnings:j}=rb(Q);if(X==="stdio"){if(Q.length>0)throw Error("Stdio MCP installs do not support request headers.");let[H,...B]=W;if(!H?.trim())throw Error("Stdio MCP install requires a command after the server name, for example: cline mcp install fs --yes -- npx -y @modelcontextprotocol/server-filesystem /tmp");return{name:Z,transport:{type:X,command:H,args:B.length>0?B:void 0},warnings:j}}if(W.length!==1)throw Error("Remote MCP install requires exactly one URL argument after the server name.");let V=W[0]?.trim()??"";return db(V),{name:Z,transport:Y?{type:X,url:V,headers:Y}:{type:X,url:V},warnings:j}}function l5($){let[Z,...Q]=$;if(!Z)throw Error("Marketplace MCP install args must start with a server name.");return{name:Z,...pA({parseTransport:!0,targetArgs:Q})}}function ib($,Z,Q){j1(Q,(W)=>{let J=W.mcpServers,X=J&&typeof J==="object"&&!Array.isArray(J)?{...J}:{};X[$]={transport:Z},W.mcpServers=X})}function wX($){let{name:Z,transport:Q,warnings:W}=X7($);return ib(Z,Q,$.settingsPath??Z0()),{name:Z,status:"installed",transport:Q,warnings:W}}var Jf={};N(Jf,{uninstallMarketplaceSkill:()=>K7,uninstallMarketplacePlugin:()=>F7,uninstallMarketplaceMcpServerFromSettings:()=>B7,uninstallMarketplaceEntry:()=>dX,resolveMarketplaceMcpServerName:()=>a5,marketplaceEntryKey:()=>uX,isMarketplaceSkillInstalled:()=>G7,getMarketplaceSkillCandidates:()=>s5,getGlobalMarketplaceSkillPaths:()=>o5,findInstalledGlobalMarketplaceSkillName:()=>t5});import{spawn as My}from"node:child_process";import{existsSync as Qf,rmSync as Ry}from"node:fs";import{homedir as Ey,platform as Ny}from"node:os";import{dirname as wy,join as Zf}from"node:path";import{resolveClineDir as Cy,resolveMcpSettingsPath as Py}from"@cline/shared/storage";$1();var $f={};N($f,{uninstallPlugin:()=>i5});import{existsSync as q4,readdirSync as Qy,readFileSync as Wy,rmdirSync as Jy,rmSync as Xy,statSync as Yy}from"node:fs";import{basename as a0,dirname as m$,extname as jy,isAbsolute as Vy,join as Z$,relative as Hy,resolve as O4,sep as yX}from"node:path";import{discoverPluginModulePaths as By,resolvePluginConfigSearchPaths as Gy}from"@cline/shared/storage";var sA={};N(sA,{syncPluginMcpServersToSettings:()=>p5,removePluginMcpServersFromSettings:()=>r5,disablePluginMcpServersInSettings:()=>bX});import{existsSync as nb,mkdirSync as ab,readFileSync as sb,writeFileSync as ob}from"node:fs";import{dirname as nA,isAbsolute as tb,relative as eb,resolve as iA}from"node:path";function c2($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function Y7($,Z){let Q=eb(iA($),iA(Z));return Q===""||!Q.startsWith("..")&&!tb(Q)}function CX($){if(!nb($))return{mcpServers:{}};try{let Z=JSON.parse(sb($,"utf8"));if(c2(Z))return Z}catch(Z){throw Error(`Invalid MCP settings at "${$}": ${Z instanceof Error?Z.message:String(Z)}`)}throw Error(`Invalid MCP settings at "${$}": expected an object`)}function PX($){if(c2($.mcpServers))return{...$.mcpServers};return{}}function SX($,Z,Q){ab(nA($),{recursive:!0}),ob($,`${JSON.stringify({...Z,mcpServers:Q},null,2)}
|
|
717
|
+
`,"utf8")}function aA($){return{pluginPaths:[...new Set(($.pluginPaths??[]).map((Z)=>Z.trim()).filter((Z)=>Z.length>0))],pluginNames:[...new Set(($.pluginNames??[]).map((Z)=>Z.trim()).filter((Z)=>Z.length>0))]}}function V7($){if(!c2($))return;let Z=$.metadata;return c2(Z)?Z:void 0}function j7($,Z){let Q=V7($);if(!Q||Q.source!=="plugin")return!1;let W=typeof Q.pluginName==="string"?Q.pluginName:typeof Q.plugin==="string"?Q.plugin:void 0,J=typeof Q.pluginPath==="string"?Q.pluginPath:void 0;if(Z.pluginName&&W===Z.pluginName){if(!Z.pluginPath||J===Z.pluginPath)return!0}if(J&&Z.pluginPath&&(J===Z.pluginPath||Y7(Z.pluginPath,J)||Y7(J,Z.pluginPath)))return!0;if(W&&Z.pluginNames?.some((X)=>X===W))return!0;if(J&&Z.pluginPaths?.some((X)=>J===X||Y7(X,J)||Y7(J,X)))return!0;return!1}function $y($){let Z=c2($.existing?.oauth)?{oauth:$.existing.oauth}:{};return{transport:$.registration.transport.type==="stdio"&&$.registration.transport.cwd===void 0?{...$.registration.transport,cwd:nA($.pluginPath)}:$.registration.transport,...$.disabled?{disabled:!0}:{},...Z,metadata:{...$.registration.metadata??{},source:"plugin",pluginName:$.pluginName,pluginPath:$.pluginPath}}}async function Zy($){if($.pluginPaths.length===0)return{plugins:[],servers:[],failures:[]};let Z=await x8({pluginPaths:[...$.pluginPaths],cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,workspaceInfo:$.workspacePath?{rootPath:$.workspacePath}:void 0});try{let Q=[],W=[],J=(Z.failures??[]).map((X)=>({pluginPath:X.pluginPath,pluginName:X.pluginName,message:X.message}));for(let X of Z.extensions??[]){let Y=X.__clinePluginPath;if(!Y)continue;if(!X.setup){Q.push({pluginName:X.name,pluginPath:Y});continue}let j=[],V={registerTool:(H)=>{},registerCommand:()=>{},registerMessageBuilder:()=>{},registerRule:()=>{},registerProvider:()=>{},registerAutomationEventType:()=>{},registerMcpServer:(H)=>{if(!X.manifest.capabilities.includes("mcp"))throw Error('registerMcpServer requires the "mcp" capability');j.push(H)}};try{await X.setup(V,{workspaceInfo:$.workspacePath?{rootPath:$.workspacePath}:void 0})}catch(H){J.push({pluginPath:Y,pluginName:X.name,message:H instanceof Error?H.message:String(H)});continue}Q.push({pluginName:X.name,pluginPath:Y});for(let H of j)W.push({pluginName:X.name,pluginPath:Y,server:{...H,metadata:{...H.metadata??{},source:"plugin",pluginName:X.name,pluginPath:Y}}})}return{plugins:Q,servers:W,failures:J}}finally{await Z.shutdown().catch(()=>{})}}async function p5($){let Z=$.settingsPath??Z0(),Q={mutations:[],failures:[]},W;try{W=await Zy($)}catch(H){for(let B of $.pluginPaths)Q.failures.push({pluginPath:B,message:H instanceof Error?H.message:String(H)});return Q}Q.failures.push(...W.failures);let J;try{J=CX(Z)}catch(H){for(let B of $.pluginPaths)Q.failures.push({pluginPath:B,message:H instanceof Error?H.message:String(H)});return Q}let X=PX(J),Y=new Map,j=new Map;for(let H of W.plugins)Y.set(H.pluginPath,new Set),j.set(H.pluginPath,H.pluginName);let V=bQ(W.servers.map((H)=>({server:H.server,owner:H,ownerLabel:H.pluginName})));for(let H of V){let B=H.owner;if(!Y.has(B.pluginPath))Y.set(B.pluginPath,new Set);if(H.name)Y.get(B.pluginPath)?.add(H.name);if(!H.registration){Q.mutations.push({name:H.name,pluginName:B.pluginName,pluginPath:B.pluginPath,action:"skipped",reason:H.loadError??"invalid MCP server registration"});continue}let G=X[H.registration.name];if(G!==void 0){if(!j7(G,{pluginName:B.pluginName,pluginPath:B.pluginPath})){Q.mutations.push({name:H.registration.name,pluginName:B.pluginName,pluginPath:B.pluginPath,action:"skipped",reason:"MCP server name is already configured"});continue}}X[H.registration.name]=$y({registration:H.registration,pluginName:B.pluginName,pluginPath:B.pluginPath,existing:c2(G)?G:void 0}),Q.mutations.push({name:H.registration.name,pluginName:B.pluginName,pluginPath:B.pluginPath,action:G===void 0?"created":"updated"})}for(let[H,B]of Object.entries(X)){let G=V7(B),K=typeof G?.pluginPath==="string"?G.pluginPath:"",F=Y.get(K);if(F&&j7(B,{pluginPath:K})&&!F.has(H))delete X[H],Q.mutations.push({name:H,pluginName:typeof G?.pluginName==="string"?G.pluginName:j.get(K)??"plugin",pluginPath:K,action:"removed",reason:"plugin no longer declares this MCP server"})}if(Q.mutations.some((H)=>H.action!=="skipped"))try{SX(Z,J,X)}catch(H){for(let B of $.pluginPaths)Q.failures.push({pluginPath:B,message:H instanceof Error?H.message:String(H)})}return Q}function bX($){let Z=$.settingsPath??Z0(),Q;try{Q=CX(Z)}catch{return[]}let W=PX(Q),J=aA($),X=[];for(let[Y,j]of Object.entries(W)){if(!c2(j)||!j7(j,J))continue;let V=V7(j);W[Y]={...j,disabled:!0},X.push({name:Y,pluginName:typeof V?.pluginName==="string"?V.pluginName:"plugin",pluginPath:typeof V?.pluginPath==="string"?V.pluginPath:"",action:"disabled"})}if(X.length>0)SX(Z,Q,W);return X}function r5($){let Z=$.settingsPath??Z0(),Q;try{Q=CX(Z)}catch{return[]}let W=PX(Q),J=aA($),X=[];for(let[Y,j]of Object.entries(W)){if(!j7(j,J))continue;let V=V7(j);delete W[Y],X.push({name:Y,pluginName:typeof V?.pluginName==="string"?V.pluginName:"plugin",pluginPath:typeof V?.pluginPath==="string"?V.pluginPath:"",action:"removed"})}if(X.length>0)SX(Z,Q,W);return X}var gX="_installed",Ky="package",Fy=new Map([["git",2],["local",1],["npm",1],["official",1],["remote",1]]);function hX($){return $.trim().toLowerCase()}function V1($,Z){let Q=Z?.trim();if(!Q)return;$.add(Q)}function Ay($){return $.replace(/-[0-9a-f]{12}$/i,"")}function kX($){let Z=jy($);return Z?$.slice(0,-Z.length):$}function IX($){if(!q4($))return;try{let Z=JSON.parse(Wy($,"utf8"));return typeof Z.name==="string"?Z.name.trim():void 0}catch{return}}function mX($,Z){let Q=Hy(Z,$);return Q===""||!Q.startsWith("..")&&!Vy(Q)}function oA($){let Q=O4($).split(yX),W=Q.lastIndexOf(gX);if(W<0)return;let J=Q[W+1];if(!J)return;let X=Fy.get(J)??1,Y=W+2+X;if(Q.length<Y)return;let j=Q.slice(0,Y).join(yX)||yX;return q4(j)?j:void 0}function H7($){try{return Qy($,{withFileTypes:!0})}catch{return[]}}function fy($){let Z=Z$($,gX);if(!q4(Z))return[];let Q=[];for(let W of H7(Z)){if(!W.isDirectory())continue;let J=Z$(Z,W.name);if(W.name==="git"){for(let X of H7(J)){if(!X.isDirectory())continue;let Y=Z$(J,X.name);for(let j of H7(Y))if(j.isDirectory())Q.push(Z$(Y,j.name))}continue}for(let X of H7(J))if(X.isDirectory())Q.push(Z$(J,X.name))}return Q.sort((W,J)=>W.localeCompare(J))}function tA($){try{return By($)}catch{return[]}}function xX($){let Z=tA($),Q=new Set;V1(Q,a0($)),V1(Q,Ay(a0($))),V1(Q,IX(Z$($,"package.json"))),V1(Q,IX(Z$($,Ky,"package.json")));for(let W of Z)V1(Q,a0(W)),V1(Q,kX(a0(W)));return{installPath:$,entryPaths:Z,names:[...Q].sort((W,J)=>W.localeCompare(J)),installed:!0}}function Uy($,Z){let Q=O4($),W=Z.find((Y)=>mX(Q,Y));if(!W)return;let J=m$(Q);while(J!==W&&J!==m$(J)){if(q4(Z$(J,"package.json")))return J;J=m$(J)}let X=a0(Q);if((X==="index.ts"||X==="index.js")&&m$(Q)!==W)return m$(Q);return Q}function eA($,Z){let Q=Uy($,Z);if(!Q)return;let W=new Set;return V1(W,a0($)),V1(W,kX(a0($))),V1(W,a0(Q)),V1(W,kX(a0(Q))),V1(W,IX(Z$(Q,"package.json"))),{installPath:Q,entryPaths:[$],names:[...W].sort((J,X)=>J.localeCompare(X)),installed:!1}}function Dy($){let Z=$.workspaceRoot?.trim()||$.cwd?.trim()||process.cwd();return Gy(Z).filter((Q)=>q4(Q))}function Ly($){let Z=new Map;for(let Q of $){for(let W of fy(Q))Z.set(W,xX(W));for(let W of tA(Q)){let J=oA(W);if(J){if(!Z.has(J))Z.set(J,xX(J));continue}let X=eA(W,$);if(X)Z.set(X.installPath,X)}}return[...Z.values()].sort((Q,W)=>Q.installPath.localeCompare(W.installPath))}function _y($,Z){let Q=hX(Z);if(!Q)return!1;if(hX($.installPath)===Q)return!0;return $.names.some((W)=>hX(W)===Q)}function zy($,Z,Q){let W=O4($);for(let X of Z){if(mX(W,X.installPath))return X;if(X.entryPaths.some((Y)=>O4(Y)===W))return X}let J=oA(W);if(J)return xX(J);if(q4(W))return eA(W,Q);return}function Ty($){let Z=M0(),Q=Z.disabledPlugins;if(!Q?.length)return;let W=Q.filter((J)=>{let X=O4(J);if(mX(X,$.installPath))return!1;return!$.entryPaths.some((Y)=>O4(Y)===X)});if(W.length===Q.length)return;b1({...Z,disabledPlugins:W})}function Oy($){let Z=m$($);while(Z!==m$(Z)&&a0(Z)!==gX){try{Jy(Z)}catch{return}Z=m$(Z)}}function qy($){return`${$.names[0]??a0($.installPath)} at ${$.installPath}`}async function i5($){let Z=Dy($),Q=Ly(Z),W=$.path?.trim(),J=$.name?.trim(),X;if(W){if(X=zy(W,Q,Z),!X)throw Error(`No plugin found at ${W}`)}else{if(!J)throw Error("plugin uninstall requires a plugin name");let j=Q.filter((V)=>_y(V,J));if(j.length===0)throw Error(`No plugin found matching "${J}"`);if(j.length>1)throw Error(`Multiple plugins match "${J}": ${j.map(qy).join(", ")}`);X=j[0]}let Y=Yy(X.installPath,{throwIfNoEntry:!1});if(!Y)throw Error(`Plugin install path does not exist: ${X.installPath}`);if(r5({pluginPaths:[X.installPath,...X.entryPaths],pluginNames:X.names}),Xy(X.installPath,{recursive:Y.isDirectory(),force:!0}),Ty(X),X.installed)Oy(X.installPath);return{name:J||X.names[0]||a0(X.installPath),installPath:X.installPath,removedPaths:[X.installPath],entryPaths:X.entryPaths}}var vX=120000,n5=12000,Sy=/(api[_ -]?key|access[_ -]?token|refresh[_ -]?token|auth(?:orization)?[_ -]?token|token|secret|password|authorization|credential)/i,by=/((?:^|[^\w])(?:[a-z0-9_]*?(?:api[_ -]?key|access[_ -]?token|refresh[_ -]?token|auth(?:orization)?[_ -]?token|token|secret|password|credential)[a-z0-9_]*)\s*[:=]\s*)(.+)$/gi,yy=/((?:^|[^\w])authorization\s*[:=]\s*)bearer\s+([^\s,"'}\]]+)/gi,hy=/((?:^|[^\w])authorization\s*[:=])(?!\s*bearer\b)\s*(.+)$/gi;function cX($){return $.install?.args??[]}function ky(){return process.env.HOME?.trim()||process.env.USERPROFILE?.trim()||Ey()}function Iy($){let Z=0,Q=$.length;while(Z<Q&&($[Z]==="."||$[Z]==="-"))Z++;while(Q>Z&&($[Q-1]==="."||$[Q-1]==="-"))Q--;return $.slice(Z,Q)}function xy($){return Iy($.toLowerCase().replace(/[^a-z0-9._]+/g,"-")).slice(0,255)||"skill"}function Wf($){return $.split(/\r?\n/).map((Z)=>{if(!Sy.test(Z))return Z;return Z.replace(by,"$1[redacted]").replace(yy,"$1Bearer [redacted]").replace(/\b(Bearer)\s+(?!\[redacted\])([^\s,"'}\]]+)/gi,"$1 [redacted]").replace(hy,"$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(`
|
|
718
|
+
`).slice(-n5)}function gy($){let Z=Wf([$.stdout,$.stderr].filter(Boolean).join(`
|
|
719
|
+
`)).trim();return Z.length>0?Z:void 0}function my($){if($==="")return'""';if(/^[a-zA-Z0-9_./:=@%+,-]+$/.test($))return $;return JSON.stringify($)}function vy($,Z){return[$,...Z].map((Q)=>my(Wf(Q).trim())).join(" ")}var cy=async($,Z)=>new Promise((Q,W)=>{let J=!1,X=!1,Y=My($,Z,{env:process.env,shell:Ny()==="win32",stdio:["ignore","pipe","pipe"],windowsHide:!0}),j="",V="",H=setTimeout(()=>{if(!J)Y.kill("SIGKILL")},vX+5000),B=setTimeout(()=>{X=!0,V+=`
|
|
720
|
+
Timed out after ${vX/1000}s.`,Y.kill("SIGTERM")},vX);H.unref?.(),B.unref?.(),Y.stdout?.on("data",(G)=>{if(j+=String(G),j.length>n5*2)j=j.slice(-n5)}),Y.stderr?.on("data",(G)=>{if(V+=String(G),V.length>n5*2)V=V.slice(-n5)}),Y.once("error",(G)=>{clearTimeout(B),clearTimeout(H),W(G)}),Y.once("close",(G,K)=>{J=!0,clearTimeout(B),clearTimeout(H),Q({exitCode:X?124:G??(K==="SIGINT"?130:1),stdout:j,stderr:V})})});function uX($){return`${$.type}:${$.id}`}function a5($){let Z=cX($);if(Z.length===0)throw Error("Marketplace install args are required.");return l5(Z).name}function B7($,Z={}){let Q=a5($),W=Z.mcpSettingsPath??Py(),J=j1(W,(X)=>{let Y=X.mcpServers&&typeof X.mcpServers==="object"&&!Array.isArray(X.mcpServers)?X.mcpServers:{},j=Object.hasOwn(Y,Q);if(j)delete Y[Q];return X.mcpServers=Y,j});return{name:Q,deleted:J}}function s5($){let Z=new Set,Q=(J)=>{let X=xy(J??"");if(X&&X!=="skill")Z.add(X)};Q($.id),Q($.name);let W=cX($);for(let J=0;J<W.length;J++){let X=W[J];if((X==="--skill"||X==="-s")&&W[J+1]){Q(W[J+1]),J++;continue}let Y=X.split("@").at(1);if(Y)Q(Y)}return[...Z]}function o5($){return[Zf(Cy(),"skills",$,"SKILL.md"),Zf(ky(),".agents","skills",$,"SKILL.md")].filter((Z,Q,W)=>W.indexOf(Z)===Q)}function t5($){if($.type!=="skill")return;return s5($).find((Z)=>o5(Z).some((Q)=>Qf(Q)))}function G7($){return t5($)!==void 0}function uy($){let Z=[];if($.type!=="skill")return Z;for(let Q of s5($))for(let W of o5(Q)){if(!Qf(W))continue;let J=wy(W);Ry(J,{recursive:!0,force:!0}),Z.push(J)}return Z}async function K7($,Z={}){let Q=t5($);if(!Q)return{id:$.id,type:"skill",status:"uninstalled",message:`${$.name??$.id} is not installed.`};let W="npx",J=["-y","skills@latest","remove",Q,"-g","-y"],X=vy(W,J),Y=Z.spawnCommand??cy,j;try{j=await Y(W,J)}catch(B){throw Error(`Failed to start ${$.name??$.id} uninstall command:
|
|
720
721
|
${X}
|
|
721
|
-
${B instanceof Error?B.message:String(B)}`)}let V=
|
|
722
|
+
${B instanceof Error?B.message:String(B)}`)}let V=gy(j);if(j.exitCode!==0)throw Error(`${$.name??$.id} uninstall failed with exit code ${j.exitCode}.
|
|
722
723
|
Command:
|
|
723
724
|
${X}${V?`
|
|
724
725
|
|
|
725
|
-
${V}`:""}`);let H=
|
|
726
|
-
`)||void 0}}async function
|
|
727
|
-
`)}}async function dX($,Z={}){if($.type==="mcp"){let Q=
|
|
728
|
-
`,"utf8")}function
|
|
729
|
-
`,"utf8")}async function
|
|
730
|
-
`,"utf8")}function qf($,Z){return{id:$,name:Z.name??$,supportsAttachments:Z.capabilities?.includes("files"),supportsVision:Z.capabilities?.includes("images"),supportsReasoning:Z.capabilities?.includes("reasoning")||Z.thinkingConfig!=null}}function Mf($){if(!$||$.length===0)return;let Z=new Set;if($.includes("reasoning"))Z.add("reasoning");if($.includes("prompt-cache"))Z.add("prompt-cache");if($.includes("tools"))Z.add("tools");return Z.size>0?[...Z]:void 0}function Rf($){let Z=new Set;if(!$||$.length===0)return[...Z];if($.includes("streaming"))Z.add("streaming");if($.includes("tools"))Z.add("tools");if($.includes("reasoning"))Z.add("reasoning");if($.includes("prompt-cache"))Z.add("prompt-cache");if($.includes("vision"))Z.add("images"),Z.add("files");return[...Z]}function gh($){return $!=null&&typeof $.name==="string"&&typeof $.baseUrl==="string"}function Ef($,Z){return $??Z??"openai-chat"}function Nf($,Z,Q){return $??Q??(Z==="openai-responses"?"openai":"openai-compatible")}function Cf($,Z,Q){let W=new Set(Z?.capabilities??Q??[]);if(Z?.supportsVision)W.add("images");if(Z?.supportsAttachments)W.add("files");if(Z?.supportsReasoning)W.add("reasoning");return{id:$,name:Z?.name??$,maxTokens:Z?.maxTokens,contextWindow:Z?.contextWindow,maxInputTokens:Z?.maxInputTokens,capabilities:W.size>0?[...W]:void 0}}function mh($,Z){for(let[Q,W]of Object.entries(Z??{})){let J=W.id?.trim()||Q.trim();if(!J)continue;h0.registerModel($,J,Cf(J,W))}}function vh($,Z,Q){return{...Z??{},id:$,name:Z?.name??$,capabilities:Z?.capabilities??Q}}function ch($){return Object.assign({},...h0.resolveProviderModelCatalogKeys($).map((Q)=>h0.getGeneratedModelsForProvider(Q)))}function uh($){let Z=$.provider.trim();if(!Z||h0.isBuiltInProviderId(Z))return;let Q=$.baseUrl?.trim();if(!Q)return;let W=h0.MODEL_COLLECTIONS_BY_PROVIDER_ID[Z],J=ch(Z),X=Rf($.capabilities),Y=X.length>0?X:void 0,j=$.model?.trim(),V={...J,...W?.models??{}};if(j)V[j]=vh(j,V[j],Y);let H=Object.keys(V).filter(Boolean),B=j||H[0];if(!B)return;let G=Ef($.protocol,W?.provider.protocol),K=Nf($.client,G,W?.provider.client);h0.registerProvider({provider:{id:Z,name:W?.provider.name??_f(Z),description:W?.provider.description,protocol:G,client:K,baseUrl:Q,modelsSourceUrl:W?.provider.modelsSourceUrl,defaultModelId:B,capabilities:Mf($.capabilities)??W?.provider.capabilities,source:"file"},models:V})}function E7($){for(let Z of Object.values($.providers))uh(Z.settings)}function $9($,Z){let Q=Z.models??{};if(!gh(Z.provider)){mh($,Q);return}let W=Rf(Z.provider.capabilities),J=Object.entries(Q).map(([H,B])=>({id:B.id?.trim()||H.trim(),model:B})).filter(({id:H})=>H.length>0),X=Z.provider.defaultModelId?.trim()||J[0]?.id||"default",Y=Ef(Z.provider.protocol,void 0),j=Nf(Z.provider.client,Y,void 0),V=Object.fromEntries(J.map(({id:H,model:B})=>[H,{...Cf(H,B,W.length>0?W:void 0),status:"active"}]));h0.registerProvider({provider:{id:$,name:Z.provider.name.trim()||_f($),protocol:Y,client:j,baseUrl:Z.provider.baseUrl,modelsSourceUrl:Z.provider.modelsSourceUrl,defaultModelId:X,capabilities:Mf(Z.provider.capabilities),source:"file"},models:V})}function wf($){let Z=l2($);if(q7.has(Z))return;let Q=oX(Z);for(let[W,J]of Object.entries(Q.providers))$9(W,J);q7.add(Z)}async function N7($){let Z=l2($);if(q7.has(Z))return;let Q=await N4(Z);for(let[W,J]of Object.entries(Q.providers))$9(W,J);q7.add(Z)}var Sf="cline-pass";function dh($){return $.apiKey??$.auth?.apiKey}function lh($){return($.auth?.accessToken?.trim()??"").length>0}function bf($){return $.split(/[-_]/).filter(Boolean).map((Z)=>Z.charAt(0).toUpperCase()+Z.slice(1)).join(" ")}function ph($){let Z=$.split(/\s+/).filter(Boolean);if(Z.length===0)return"?";if(Z.length===1)return Z[0].slice(0,2).toUpperCase();return`${Z[0][0]}${Z[1][0]}`.toUpperCase()}function rh($){let Z=["#c4956a","#6b8aad","#e8963a","#5b9bd5","#6bbd7b","#9b7dd4","#d07f68","#57a6a1"],Q=0;for(let W of $)Q=Q*31+W.charCodeAt(0)>>>0;return Z[Q%Z.length]}function yf($){return Object.entries($).sort(([Z],[Q])=>Z.localeCompare(Q)).map(([Z,Q])=>qf(Z,Q))}async function ih($,Z){let Q=await C0.getModelsForProvider($),W=$===Sf;if(!Z&&!W)return Q;let J=await $5($,{loadLatestOnInit:W,loadPrivateOnAuth:!0,failOnError:!1},Z);if($==="litellm"&&J?.knownModels)return J.knownModels;if(W&&J?.knownModels)return J.knownModels;return J?.knownModels?{...Q,...J.knownModels}:Q}function tX($){return[...new Set(($??[]).map((Z)=>Z.trim()).filter(Boolean))]}function nh($){if(!$?.length)return;return[...new Set($)]}function ah($,Z){return nh([...$??[],...Z??[]])}function sh($){let Z=$?.popularRank;return typeof Z==="number"&&Number.isFinite(Z)?Z:Number.MAX_SAFE_INTEGER}function oh($){if(!$||typeof $!=="object")return!1;let Z=$;return typeof Z.path==="string"&&Z.path.trim().length>0&&typeof Z.label==="string"&&Z.label.trim().length>0&&["text","password","url","number","select","boolean"].includes(String(Z.type))}function th($){let Z=$?.configFields;if(!Array.isArray(Z))return;return Z.filter(oh)}var C7={path:"apiKey",label:"API Key",type:"password",placeholder:"Enter API key...",description:"API key issued by the provider.",secret:!0},Pf={path:"baseUrl",label:"Base URL",type:"url",placeholder:"https://...",description:"Base endpoint used for provider requests."};function eh($){if(!$)return[C7];if($.source!=="system")return $.baseUrl?[C7,Pf]:[C7];let Z=[];if($.env?.length)Z.push(C7);if($.baseUrl)Z.push(Pf);return Z}function $k($,Z){return Z.split(".").reduce((Q,W)=>{if(!Q||typeof Q!=="object")return;return Q[W]},$)}function Zk($){if(typeof $==="string"||typeof $==="number"||typeof $==="boolean"||$===null)return $;return}function Qk($,Z,Q){if(!$?.length)return;let W={};for(let J of $){let Y=Zk(J.path==="baseUrl"&&Z?.baseUrl===void 0?Q?.baseUrl:$k(Z,J.path))??J.defaultValue;if(Y!==void 0)W[J.path]=Y}return W}function hf($){let Z=Object.entries($??{}).filter(([Q])=>Q.trim().length>0);return Z.length>0?Object.fromEntries(Z):void 0}function eX($,Z){let Q=Z?.includes("vision")??!1,W=Z?.includes("reasoning")??!1;return Object.fromEntries($.map((J)=>[J,{id:J,name:J,supportsVision:Q,supportsAttachments:Q,supportsReasoning:W}]))}async function kf($){if(!$.shouldRecompute)return $.fallbackModelIds??[];let Z=$.modelsSourceUrl?await lZ($.modelsSourceUrl,$.providerId):[];return[...new Set([...$.explicitModels??[],...Z])]}function If($,Z){let Q=$.read(),W=!1;if(Q.providers[Z])delete Q.providers[Z],W=!0;if(Q.lastUsedProvider===Z)delete Q.lastUsedProvider,W=!0;if(W)$.write(Q);C0.unregisterProvider(Z)}async function $Y($,Z){let Q=Z.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let W=Z.baseUrl.trim(),J=Z.apiKey?.trim()??"";if(!W&&!J){let A=l2($);if((await N4(A)).providers[Q]){let f=await S7($,{providerId:Q});return{providerId:Q,settingsPath:f.settingsPath,modelsPath:f.modelsPath,modelsCount:0}}return If($,Q),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:A,modelsCount:0}}if(C0.hasProvider(Q))throw Error(`provider "${Q}" already exists`);let X=Z.name.trim();if(!X)throw Error("name is required");if(!W)throw Error("baseUrl is required");let Y=tX(Z.models),j=Z.modelsSourceUrl?.trim(),V=await kf({providerId:Q,explicitModels:Y,modelsSourceUrl:j,shouldRecompute:!0});if(V.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let H=Z.defaultModelId?.trim()&&V.includes(Z.defaultModelId.trim())?Z.defaultModelId.trim():V[0],B=Z.capabilities?.length?[...new Set(Z.capabilities)]:void 0,G=hf(Z.headers);$.saveProviderSettings({provider:Q,apiKey:J||void 0,baseUrl:W,headers:G,timeout:Z.timeoutMs,model:H,protocol:Z.protocol,client:Z.client},{setLastUsed:!1});let K=l2($),F=await N4(K);return F.providers[Q]={provider:{name:X,baseUrl:W,defaultModelId:H,protocol:Z.protocol,client:Z.client,capabilities:B,modelsSourceUrl:j},models:eX(V,B)},await R7(K,F),$9(Q,F.providers[Q]),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:K,modelsCount:V.length}}async function P7($,Z){let Q=Z.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let W=l2($),J=await N4(W),X=J.providers[Q];if(!X){let O=$.getProviderSettings(Q);if(!O)throw Error(`provider "${Q}" does not exist`);let _=Z.modelsSourceUrl?.trim(),L=tX(Z.models)[0]??O.model?.trim();if(!L&&!_)throw Error(`provider "${Q}" cannot be updated because no model is configured`);X={provider:{name:Z.name?.trim()||bf(Q),baseUrl:Z.baseUrl?.trim()??O.baseUrl?.trim()??"",defaultModelId:L,protocol:O.protocol,client:O.client,capabilities:O.capabilities},models:L?eX([L],O.capabilities):{}}}if(!X.provider)throw Error(`provider "${Q}" cannot be updated because it is a model overlay (no provider metadata)`);let Y=Z.name?.trim()??X.provider.name.trim();if(!Y)throw Error("name is required");let j=Z.baseUrl?.trim()??X.provider.baseUrl.trim();if(!j)throw Error("baseUrl is required");let V=Z.capabilities===void 0?X.provider.capabilities:Z.capabilities===null?void 0:[...new Set(Z.capabilities)],H=Z.protocol===void 0?X.provider.protocol:Z.protocol??void 0,B=Z.client===void 0?X.provider.client:Z.client??void 0,G=tX(Z.models),K=Z.modelsSourceUrl===void 0?X.provider.modelsSourceUrl:Z.modelsSourceUrl?.trim()||void 0,F=Z.models!==void 0||Z.modelsSourceUrl!==void 0&&!!K,A=Object.keys(X.models??{}).map((O)=>O.trim()).filter(Boolean),D=await kf({providerId:Q,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 f=Z.defaultModelId===void 0?X.provider.defaultModelId?.trim():Z.defaultModelId?.trim(),T=f&&D.includes(f)?f:D[0],z={...$.getProviderSettings(Q)??{},provider:Q,baseUrl:j,model:T};if(H)z.protocol=H;else delete z.protocol;if(B)z.client=B;else delete z.client;if(Z.apiKey!==void 0){let O=Z.apiKey?.trim()??"";if(O)z.apiKey=O;else delete z.apiKey}if(Z.headers!==void 0){let O=hf(Z.headers);if(O)z.headers=O;else delete z.headers}if(Z.timeoutMs!==void 0)if(typeof Z.timeoutMs==="number")z.timeout=Z.timeoutMs;else delete z.timeout;return $.saveProviderSettings(z,{setLastUsed:!1}),J.providers[Q]={provider:{name:Y,baseUrl:j,defaultModelId:T,protocol:H,client:B,capabilities:V,modelsSourceUrl:K},models:eX(D,V)},await R7(W,J),$9(Q,J.providers[Q]),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:W,modelsCount:D.length}}async function S7($,Z){let Q=Z.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let W=l2($),J=await N4(W);if(!J.providers[Q])throw Error(`provider "${Q}" does not exist`);return delete J.providers[Q],await R7(W,J),C0.unregisterProvider(Q),If($,Q),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:W}}async function ZY($,Z={}){let Q=$.read(),W=C0.getProviderIds(),J=await Promise.all(W.map(async(Y)=>{let[j,V]=await Promise.all([C0.getProvider(Y),C0.getModelsForProvider(Y)]),H=yf(V),B=Q.providers[Y]?.settings,G=j?.name??bf(Y),K=ah(j?.capabilities,B?.capabilities),F=th(j?.metadata)??eh(j);return{provider:{id:Y,name:G,models:H.length,color:rh(Y),letter:ph(G),enabled:Boolean(B),apiKey:B?dh(B):void 0,oauthAccessTokenPresent:B?lh(B):void 0,baseUrl:B?.baseUrl??j?.baseUrl,defaultModelId:j?.defaultModelId,protocol:B?.protocol??j?.protocol,client:B?.client??j?.client,capabilities:K,authDescription:"This provider uses API keys for authentication.",baseUrlDescription:"The base endpoint to use for provider requests.",configFields:F,configValues:Qk(F,B,j),modelList:H},rank:sh(j?.metadata)}}));J.sort((Y,j)=>{if(Y.rank!==j.rank)return Y.rank-j.rank;return Y.provider.name.localeCompare(j.provider.name)||Y.provider.id.localeCompare(j.provider.id)});let X=J.map((Y)=>Y.provider);if(Z.isClinePassEnabled!==!0)X=X.filter((Y)=>Y.id!==Sf);return{providers:X,settingsPath:$.getFilePath()}}async function QY($,Z){let Q=$.trim(),W=await ih(Q,Z),J=yf(W);return{providerId:Q,models:J}}function w7($){return $!=null&&typeof $==="object"&&!Array.isArray($)}function xf($,Z){if(!w7(Z))return w7($)?{...$}:void 0;let Q=w7($)?{...$}:{};for(let[W,J]of Object.entries(Z)){if(J==null||J===""){delete Q[W];continue}if(w7(J)){let X=xf(Q[W],J);if(X&&Object.keys(X).length>0)Q[W]=X;else delete Q[W];continue}Q[W]=J}return Object.keys(Q).length>0?Q:void 0}function WY($,Z){let Q=Z.providerId.trim();if(Z.enabled===!1){let X=$.read();if(delete X.providers[Q],X.lastUsedProvider===Q)delete X.lastUsedProvider;return $.write(X),{providerId:Q,enabled:!1,settingsPath:$.getFilePath()}}let J={...$.getProviderSettings(Q)??{},provider:Q};for(let X of["apiKey","baseUrl","model","region"])if(Object.hasOwn(Z,X)&&typeof Z[X]==="string")if(Z[X].trim().length===0)delete J[X];else J[X]=Z[X];for(let X of["maxTokens","contextWindow","timeout","apiLine","protocol","client","routingProviderId","capabilities"])if(Object.hasOwn(Z,X))J[X]=Z[X];for(let X of["auth","headers","reasoning","aws","gcp","azure","sap","oca"])if(Object.hasOwn(Z,X)&&Z[X]!=null){let Y=xf(J[X],Z[X]);if(Y)J[X]=Y;else delete J[X]}return $.saveProviderSettings(J,{setLastUsed:!1}),{providerId:Q,enabled:!0,settingsPath:$.getFilePath()}}async function JY($,Z){let Q=Z.trim(),W=$.getProviderSettings(Q),X=C0.MODEL_COLLECTIONS_BY_PROVIDER_ID[Q]?.provider,Y=W?.baseUrl?.trim()||X?.baseUrl?.trim(),j=pZ(Y,X?.baseUrl,X?.modelsSourceUrl);if(!W||!X||!Y||!j)return{providerId:Q,refreshed:!1};let V=await P7($,{providerId:Q,name:X.name,baseUrl:Y,apiKey:W.apiKey,headers:W.headers??null,timeoutMs:W.timeout??null,modelsSourceUrl:j,protocol:W.protocol??X.protocol??null,client:W.client??X.client??null,capabilities:W.capabilities??null});return{providerId:Q,refreshed:!0,modelsCount:V.modelsCount}}function XY($){let Z=$.trim().toLowerCase(),Q=j0(Z);if(Q)return Q.providerId;throw Error(`provider "${$}" does not support OAuth login`)}async function YY($,Z,Q,W){let J=j0($);if(!J)throw Error(`provider "${$}" does not support OAuth login`);let X=a8({onPrompt:async(Y)=>Y.defaultValue??"",openUrl:Q,onOpenUrlError:({error:Y})=>{throw Y instanceof Error?Y:Error(String(Y))}});return J.login({settings:Z,callbacks:X,telemetry:W})}function jY($,Z,Q,W,J){return W2({manager:$,providerId:Z,settings:Q,credentials:W,setLastUsed:J?.setLastUsed})}async function VY($,Z,Q,W){let J=a8({onPrompt:async(X)=>X.defaultValue??"",openUrl:Q,onOpenUrlError:({error:X})=>{throw X instanceof Error?X:Error(String(X))}});return X6($,Z,{callbacks:J,telemetry:W})}function HY($){let Z=$?.auth?.accessToken?.trim()||$?.apiKey?.trim();return Z&&Z.length>0?Z:void 0}var mf={};N(mf,{getProviderConfigFields:()=>BY});import*as b7 from"@cline/llms";var Wk=["apiKey","baseUrl","azureApiVersion","awsRegion","awsProfile","gcpProjectId","gcpRegion","sapClientId","sapClientSecret","sapTokenUrl","sapResourceGroup","sapDeploymentId"],Jk={"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 Xk($,Z){let Q={};for(let W of Wk){let J=$[W],X=Z[W];if(J||X)Q[W]={...J,...X}}return Q}function Yk($){let Z=Jk[$.providerId];if(!Z)return $;return{...$,description:Z.description??$.description,fields:Z.mode==="replace"?Z.fields:Xk($.fields,Z.fields)}}var jk=new Set(["ollama","lmstudio","litellm","openai-compatible"]);function Vk($,Z){if(!Z?.provider.baseUrl)return!1;if(Z.provider.source!=="system")return!0;return jk.has($)}function BY($){let Z=b7.normalizeProviderId($);if(Q2(Z))return{providerId:Z,authMethod:"oauth",fields:{}};let Q=b7.MODEL_COLLECTIONS_BY_PROVIDER_ID[Z];if(Q?.provider.capabilities?.includes("local-auth"))return{providerId:Z,authMethod:"local",fields:{}};let W=Q?.provider.baseUrl,J={apiKey:{}};if(Vk(Z,Q))J.baseUrl={defaultValue:W};return Yk({providerId:Z,authMethod:"api-key",fields:J})}var df={};N(df,{resolveLegacyClineAuth:()=>FY,migrateLegacyProviderSettings:()=>Z9});import{existsSync as Hk,readFileSync as Bk}from"node:fs";import{dirname as Gk,join as GY}from"node:path";import*as h7 from"@cline/llms";import{resolveClineDataDir as Kk}from"@cline/shared/storage";var y7="openai",uf=h7.BUILT_IN_PROVIDER.OPENAI_COMPATIBLE,vf=128000;function FY($){let Z=$?.trim();if(!Z)return;try{let Q=JSON.parse(Z);if(!Q)return;let W=typeof Q.expiresAt==="number"&&Number.isFinite(Q.expiresAt)?Q.expiresAt<10000000000?Q.expiresAt*1000:Q.expiresAt:void 0;return{accessToken:Q.idToken,refreshToken:Q.refreshToken,expiresAt:W,accountId:Q.userInfo?.id}}catch{return}}function b($){let Z=$?.trim();return Z?Z:void 0}function Fk($){return $==="credentials"?"iam":$}function cf($){if(!Hk($))return;try{let Z=Bk($,"utf8"),Q=JSON.parse(Z);if(Q&&typeof Q==="object"&&!Array.isArray(Q))return Q}catch{}return}function Ak($){let Z=$.dataDir??Kk(),Q=$.globalStatePath??GY(Z,"globalState.json"),W=$.secretsPath??GY(Z,"secrets.json"),J=cf(Q),X=cf(W);if(!J&&!X)return;return{globalState:J??{},secrets:X??{}}}function KY($){if($===y7)return uf;return $}function fk($,Z,Q,W){let J=Q==="plan"?"planMode":"actMode",X=Z===W?b(Q==="plan"?$.planModeApiModelId:$.actModeApiModelId):void 0,j={openrouter:`${J}OpenRouterModelId`,cline:`${J}ClineModelId`,openai:`${J}OpenAiModelId`,ollama:`${J}OllamaModelId`,lmstudio:`${J}LmStudioModelId`,litellm:`${J}LiteLlmModelId`,requesty:`${J}RequestyModelId`,together:`${J}TogetherModelId`,fireworks:`${J}FireworksModelId`,sapaicore:`${J}SapAiCoreModelId`,groq:`${J}GroqModelId`,baseten:`${J}BasetenModelId`,huggingface:`${J}HuggingFaceModelId`,"huawei-cloud-maas":`${J}HuaweiCloudMaasModelId`,oca:`${J}OcaModelId`,aihubmix:`${J}AihubmixModelId`,hicap:`${J}HicapModelId`,nousResearch:`${J}NousResearchModelId`,"vercel-ai-gateway":`${J}VercelAiGatewayModelId`}[Z];return(j?b(typeof $[j]==="string"?$[j]:void 0):void 0)??X}function Uk($,Z,Q){let W=Q==="plan"?$.planModeThinkingBudgetTokens:$.actModeThinkingBudgetTokens,J=[...Z==="oca"?[$.actModeOcaReasoningEffort,$.planModeOcaReasoningEffort]:[],...Z==="gemini"?[$.geminiActModeThinkingLevel,$.geminiPlanModeThinkingLevel]:[],$.actModeReasoningEffort,$.planModeReasoningEffort].map(b).find(Boolean),X=J==="none"||J==="low"||J==="medium"||J==="high"||J==="xhigh"?J:void 0,Y=typeof W==="number"&&Number.isInteger(W)&&W>0?W:void 0;if(!X&&Y===void 0)return;return{...X?{effort:X}:{},...Y!==void 0?{budgetTokens:Y}:{}}}function Dk($){let Z=$["openai-codex-oauth-credentials"];if(!Z)return;try{let Q=JSON.parse(Z),W=b(Q.access_token),J=b(Q.refresh_token),X=b(Q.accountId);if(!W&&!J&&!X)return;return{...W?{apiKey:W}:{},auth:{...W?{accessToken:W}:{},...J?{refreshToken:J}:{},...X?{accountId:X}:{}}}}catch{return}}function Tk($){let Z=h7.getGeneratedModelsForProvider($);return Object.keys(Z)[0]??void 0}function Lk($,Z,Q,W){let J=KY($),X=b(W==="plan"?Z.planModeApiProvider:Z.actModeApiProvider),Y=fk(Z,$,W,X)??Tk(J),j=Uk(Z,J,W),V=typeof Z.requestTimeoutMs==="number"&&Number.isInteger(Z.requestTimeoutMs)&&Z.requestTimeoutMs>0?Z.requestTimeoutMs:void 0,H={anthropic:Q.apiKey,cline:Q.clineApiKey,openai:Q.openAiApiKey,"openai-native":Q.openAiNativeApiKey,openrouter:Q.openRouterApiKey,bedrock:Q.awsBedrockApiKey,gemini:Q.geminiApiKey,ollama:Q.ollamaApiKey,deepseek:Q.deepSeekApiKey,requesty:Q.requestyApiKey,together:Q.togetherApiKey,fireworks:Q.fireworksApiKey,qwen:Q.qwenApiKey,doubao:Q.doubaoApiKey,mistral:Q.mistralApiKey,litellm:Q.liteLlmApiKey,asksage:Q.asksageApiKey,xai:Q.xaiApiKey,moonshot:Q.moonshotApiKey,zai:Q.zaiApiKey,huggingface:Q.huggingFaceApiKey,nebius:Q.nebiusApiKey,sambanova:Q.sambanovaApiKey,cerebras:Q.cerebrasApiKey,groq:Q.groqApiKey,"huawei-cloud-maas":Q.huaweiCloudMaasApiKey,baseten:Q.basetenApiKey,"vercel-ai-gateway":Q.vercelAiGatewayApiKey,dify:Q.difyApiKey,minimax:Q.minimaxApiKey,hicap:Q.hicapApiKey,aihubmix:Q.aihubmixApiKey,nousResearch:Q.nousResearchApiKey,oca:Q.ocaApiKey},B={};if($==="openai-codex")Object.assign(B,Dk(Q));if($==="cline")try{let T=b(Q["cline:clineAccountId"]);if(T)B.auth={...B.auth??{},...FY(T)}}catch{}if($===y7&&Z.openAiHeaders)B.headers=Z.openAiHeaders;if($==="bedrock"){let T=Fk(Z.awsAuthentication),U=T==="profile"||Z.awsUseProfile===!0;B.aws={accessKey:b(Q.awsAccessKey),secretKey:b(Q.awsSecretKey),sessionToken:b(Q.awsSessionToken),region:b(Z.awsRegion),authentication:T,profile:U?b(Z.awsProfile):void 0,usePromptCache:Z.awsBedrockUsePromptCache,useCrossRegionInference:Z.awsUseCrossRegionInference,useGlobalInference:Z.awsUseGlobalInference,endpoint:b(Z.awsBedrockEndpoint),customModelBaseId:b(W==="plan"?Z.planModeAwsBedrockCustomModelBaseId:Z.actModeAwsBedrockCustomModelBaseId)}}if($==="vertex")B.gcp={projectId:b(Z.vertexProjectId),region:b(Z.vertexRegion)};if($===y7&&(Z.azureApiVersion||Z.azureIdentity!==void 0))B.azure={apiVersion:b(Z.azureApiVersion),useIdentity:Z.azureIdentity};if($==="sapaicore"){let T=Z.sapAiCoreUseOrchestrationMode??!0;B.sap={clientId:b(Q.sapAiCoreClientId),clientSecret:b(Q.sapAiCoreClientSecret),tokenUrl:b(Z.sapAiCoreTokenUrl),resourceGroup:b(Z.sapAiResourceGroup),deploymentId:T?void 0:b(W==="plan"?Z.planModeSapAiCoreDeploymentId:Z.actModeSapAiCoreDeploymentId),useOrchestrationMode:T}}if($==="oca"){B.oca={mode:Z.ocaMode};let T=b(Q.ocaRefreshToken);if(T)B.auth={...B.auth??{},refreshToken:T}}if($==="qwen")B.apiLine=Z.qwenApiLine;if($==="moonshot")B.apiLine=Z.moonshotApiLine;if($==="zai")B.apiLine=Z.zaiApiLine;if($==="minimax")B.apiLine=Z.minimaxApiLine;let G={anthropic:Z.anthropicBaseUrl,openai:Z.openAiBaseUrl,ollama:Z.ollamaBaseUrl,lmstudio:Z.lmStudioBaseUrl,litellm:Z.liteLlmBaseUrl,gemini:Z.geminiBaseUrl,requesty:Z.requestyBaseUrl,asksage:Z.asksageApiUrl,dify:Z.difyBaseUrl,oca:Z.ocaBaseUrl,aihubmix:Z.aihubmixBaseUrl,sapaicore:Z.sapAiCoreBaseUrl},K=b(H[$]),F=b(G[$]),A={provider:J,...K?{apiKey:K}:{},...Y?{model:Y}:{},...F?{baseUrl:F}:{},...j?{reasoning:j}:{},...V?{timeout:V}:{},...B},D=r8.safeParse(A);if(!D.success)return;return Object.keys(A).filter((T)=>T!=="provider").length>0?D.data:void 0}function _k($,Z){if($!==uf)return;if(!Z.baseUrl||!Z.model)return;return{provider:{name:"OpenAI Compatible",baseUrl:Z.baseUrl,defaultModelId:Z.model},models:{[Z.model]:{id:Z.model,name:Z.model,contextWindow:vf,maxInputTokens:vf,capabilities:["streaming","tools","images"]}}}}function zk($,Z){let Q=new Set;for(let J of[$.actModeApiProvider,$.planModeApiProvider]){let X=b(J);if(X)Q.add(X)}if(b(Z.apiKey))Q.add("anthropic");if(b(Z.openRouterApiKey))Q.add("openrouter");if(b(Z.openAiApiKey))Q.add(y7);if(b(Z.openAiNativeApiKey))Q.add("openai-native");if(b(Z["openai-codex-oauth-credentials"]))Q.add("openai-codex");if(b(Z.geminiApiKey))Q.add("gemini");if(b(Z.ollamaApiKey))Q.add("ollama");if(b(Z.awsAccessKey)||b(Z.awsBedrockApiKey)||$.awsAuthentication!==void 0||$.awsUseProfile===!0||b($.awsProfile))Q.add("bedrock");if(b($.vertexProjectId)||b($.vertexRegion))Q.add("vertex");if(b(Z.clineApiKey))Q.add("cline");let W=FY(b(Z["cline:clineAccountId"]));if(W?.accessToken||W?.refreshToken||W?.accountId)Q.add("cline");if(b(Z.ocaApiKey))Q.add("oca");if(b(Z.sapAiCoreClientId)||b(Z.sapAiCoreClientSecret)||b($.sapAiCoreTokenUrl)||b($.sapAiCoreBaseUrl)||b($.sapAiResourceGroup)||$.sapAiCoreUseOrchestrationMode!==void 0)Q.add("sapaicore");return Q}function Z9($){let Z=$.providerSettingsManager.read(),Q=Ak($);if(!Q)return{migrated:!1,providerCount:Object.keys(Z.providers).length,lastUsedProvider:Z.lastUsedProvider};let{globalState:W,secrets:J}=Q,X=W.mode==="plan"?"plan":"act",Y=zk(W,J),j=b$();j.providers={...Z.providers},j.lastUsedProvider=Z.lastUsedProvider;let V=new Date().toISOString(),H=0,B=GY(Gk($.providerSettingsManager.getFilePath()),"models.json"),G=oX(B),K=0;for(let D of Y){let f=KY(D);if(j.providers[f])continue;let T=Lk(D,W,J,X);if(!T)continue;j.providers[f]={settings:T,updatedAt:V,tokenSource:"migration"},H+=1;let U=_k(f,T);if(U&&!G.providers[f])G.providers[f]=U,K+=1}if(H===0&&K===0)return{migrated:!1,providerCount:Object.keys(Z.providers).length,lastUsedProvider:Z.lastUsedProvider};let F=b(X==="plan"?W.planModeApiProvider:W.actModeApiProvider),A=F?KY(F):void 0;if(j.lastUsedProvider=Z.lastUsedProvider??(A&&j.providers[A]?A:Object.keys(j.providers)[0]),$.providerSettingsManager.write(j),K>0)Of(B,G);return{migrated:H>0||K>0,providerCount:Object.keys(j.providers).length,lastUsedProvider:j.lastUsedProvider}}oQ();L0();c9();var lf={};N(lf,{SessionVersioningService:()=>u$,SessionVersioningError:()=>k0});class k0 extends Error{code;constructor($,Z){super(Z);this.code=$;this.name="SessionVersioningError"}}function Ok($){let Z=$.sessionId.trim();if(!Z)throw new k0("invalid_restore","sessionId is required");if(!$.restoreMessages&&!$.restoreWorkspace)throw new k0("invalid_restore","restore.messages or restore.workspace must be true");if($.restoreMessages&&$.requiresStart)throw new k0("invalid_restore","start is required when restore.messages is true");if(!Number.isInteger($.checkpointRunCount)||$.checkpointRunCount<1)throw new k0("invalid_restore","checkpointRunCount must be a positive integer");return Z}class u${async restoreCheckpoint($){let Z=$.restore?.messages!==!1,Q=$.restore?.workspace!==!1,W=Ok({sessionId:$.sessionId,restoreMessages:Z,restoreWorkspace:Q,requiresStart:$.start===void 0,checkpointRunCount:$.checkpointRunCount}),J=await $.getSession(W);if(!J)throw new k0("session_not_found",`Session ${W} not found`);let X=Z?await $.readMessages(W):void 0;if(Z&&X?.length===0)throw new k0("session_messages_not_found",`No messages found for session ${W}`);let Y=fX({session:J,messages:X,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd,restoreMessages:Z});if(Q)await($.applyWorkspaceCheckpoint??UX)(Y.cwd,Y.checkpoint);let j=f1({session:J,messages:X});if(!Z)return{checkpoint:Y.checkpoint,sourceSnapshot:j};let V=FX(J,$.checkpointRunCount),H=$.restore?.omitCheckpointMessageFromSession?AX(X??[],$.checkpointRunCount):Y.messages??[],B={sourceSession:J,sourceMessages:X,sourceSnapshot:j,plan:Y,restoredCheckpointMetadata:V,initialMessages:H,restoreMessages:Z,restoreWorkspace:Q,checkpointRunCount:$.checkpointRunCount};if(!$.start||!$.startSession)throw new k0("invalid_restore","start is required when restore.messages is true");let G=$.buildStartInput?await $.buildStartInput(B,$.start):$.start,K=await $.startSession(G),F=$.getStartedSessionId?.(K);if(F)await($.retainCheckpointRefs??wG)(Y.cwd,F,V?.history??[]);let A=F&&$.readRestoredSession?await $.readRestoredSession(F):void 0;return{sessionId:F,startResult:K,messages:Y.messages,checkpoint:Y.checkpoint,sourceSnapshot:j,...A?{restoredSnapshot:f1({session:A,messages:H})}:{}}}}var pf={};N(pf,{FileTeamPersistenceStore:()=>k7});import{appendFileSync as qk,existsSync as AY,mkdirSync as Mk,readFileSync as Rk,renameSync as Ek,unlinkSync as Nk,writeFileSync as Ck}from"node:fs";import{join as fY}from"node:path";import{resolveTeamDataDir as wk}from"@cline/shared/storage";function Pk($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}class k7{dirPath;statePath;taskHistoryPath;teammateSpecs=new Map;constructor($){let Z=Pk($.teamName),Q=$.baseDir?.trim()||wk();this.dirPath=fY(Q,Z),this.statePath=fY(this.dirPath,"state.json"),this.taskHistoryPath=fY(this.dirPath,"task-history.jsonl")}loadState(){if(!AY(this.statePath))return;try{let $=Rk(this.statePath,"utf8"),Z=JSON.parse($);if(Z.version!==1||!Z.teamState)return;for(let Q of Z.teammates??[])this.teammateSpecs.set(Q.agentId,Q);return GA(Z.teamState)}catch{return}}getTeammateSpecs(){return Array.from(this.teammateSpecs.values())}upsertTeammateSpec($){this.teammateSpecs.set($.agentId,$)}removeTeammateSpec($){this.teammateSpecs.delete($)}persist($){if(!this.hasPersistableState($)){this.clearPersistedState();return}this.ensureDir();let Z={version:1,updatedAt:new Date().toISOString(),teamState:$.exportState(),teammates:Array.from(this.teammateSpecs.values())},Q=`${this.statePath}.tmp`;Ck(Q,`${JSON.stringify(Z,null,2)}
|
|
731
|
-
`,"utf8"),
|
|
732
|
-
`,"utf8")}ensureDir(){if(!AY(this.dirPath))Mk(this.dirPath,{recursive:!0})}hasPersistableState($){let Z=$.exportState();if(this.teammateSpecs.size>0)return!0;if(Z.members.some((Q)=>Q.role==="teammate"))return!0;return Z.tasks.length>0||Z.mailbox.length>0||Z.missionLog.length>0}clearPersistedState(){if(AY(this.statePath))Nk(this.statePath)}}var rf={};N(rf,{ChatViewStateSchema:()=>UY,ChatSummarySchema:()=>v7,ChatSessionStatusSchema:()=>x7,ChatSessionConfigSchema:()=>I7,ChatMessageSchema:()=>m7,ChatMessageRoleSchema:()=>g7});import{z as y}from"zod";var I7=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()}),x7=y.enum(["idle","starting","running","pending","stopping","completed","cancelled","failed","error"]),g7=y.enum(["user","assistant","tool","system","status","error"]),m7=y.object({id:y.string().min(1),sessionId:y.string().nullable(),role:g7,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()}),v7=y.object({toolCalls:y.number().int().nonnegative(),tokensIn:y.number().int().nonnegative(),tokensOut:y.number().int().nonnegative()}),UY=y.object({sessionId:y.string().nullable(),status:x7,config:I7,messages:y.array(m7),rawTranscript:y.string(),error:y.string().nullable(),summary:v7});var nf={};N(nf,{CORE_BUILD_VERSION:()=>DY});var DY=lj;import{Agent as qI,createAgentRuntime as MI}from"@cline/agents";var af={};N(af,{fetchClineRecommendedModels:()=>LY,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>c7});import{getClineEnvironmentConfig as Sk}from"@cline/shared";var bk=5000,c7={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 yk($){return{recommended:$.recommended.map((Z)=>({...Z,tags:[...Z.tags]})),free:$.free.map((Z)=>({...Z,tags:[...Z.tags]})),clinePass:$.clinePass.map((Z)=>({...Z,tags:[...Z.tags]}))}}function TY($){if(!$||typeof $!=="object")return null;let Z=$;if(typeof Z.id!=="string"||Z.id.length===0)return null;return{id:Z.id,name:typeof Z.name==="string"&&Z.name.length>0?Z.name:Z.id,description:typeof Z.description==="string"?Z.description:"",tags:Array.isArray(Z.tags)?Z.tags.filter((Q)=>typeof Q==="string"):[]}}function hk($){if(!$||typeof $!=="object")return null;let Z=$,Q=Array.isArray(Z.recommended)?Z.recommended:[],W=Array.isArray(Z.free)?Z.free:[],J=Array.isArray(Z.clinePass)?Z.clinePass:[],X=Q.map(TY).filter((V)=>V!==null),Y=W.map(TY).filter((V)=>V!==null),j=J.map(TY).filter((V)=>V!==null);if(X.length===0&&Y.length===0&&j.length===0)return null;return{recommended:X,free:Y,clinePass:j}}function kk($){let Z=$.baseUrl?.trim();if(Z)return Z;let Q=Sk().apiBaseUrl;try{return($.providerSettingsManager??new O1).getProviderSettings("cline")?.baseUrl?.trim()||Q}catch{return Q}}async function Ik($,Z,Q){let W=new AbortController,J=setTimeout(()=>W.abort(),Q);try{return await $(Z,{signal:W.signal})}finally{clearTimeout(J)}}async function LY($={}){try{let Z=kk($),Q=$.fetchImpl??fetch,W=await Ik(Q,`${Z}/api/v1/ai/cline/recommended-models`,$.timeoutMs??bk);if(!W.ok)throw Error(`HTTP ${W.status}`);let J=await W.json(),X=hk(J);if(X)return X}catch{}return yk(c7)}var sf={};N(sf,{loadLlmsConfigFromFile:()=>zY,defineLlmsConfig:()=>_Y});import{readFile as xk}from"node:fs/promises";import gk from"node:path";function _Y($){return $}async function zY($){let Z=gk.resolve($),Q=await xk(Z,"utf8"),W;try{W=JSON.parse(Q)}catch(J){let X=J instanceof Error?J.message:String(J);throw Error(`Failed to parse JSON config at "${Z}": ${X}`)}return mk(W,Z)}function mk($,Z){if(!$||typeof $!=="object")throw Error(`Invalid llms config in "${Z}": expected an object.`);let W=$.providers;if(!Array.isArray(W))throw Error(`Invalid llms config in "${Z}": "providers" must be an array.`);if(!W.length)throw Error(`Invalid llms config in "${Z}": "providers" cannot be empty.`);return $}var QU={};N(QU,{createLlmsSdk:()=>qY,DefaultLlmsSdk:()=>Q9});import{BUILT_IN_PROVIDER_IDS as ef,createHandler as uk,createHandlerAsync as dk,getProviderCollection as lk,hasProvider as $U,registerAsyncHandler as pk,registerHandler as rk,registerModel as ik,registerProvider as ZU}from"@cline/llms";function of($){return $?{...$}:{}}function vk($,Z){if($)return $;if(!Z)return;let Q=globalThis.process;if(!Q?.env)return;return Q.env[Z]}function ck($,Z){if(!Z.length)throw Error(`Provider "${$}" must include at least one model.`)}function tf($){let Z=Object.keys($.collection.models);return{id:$.collection.provider.id,name:$.collection.provider.name,description:$.collection.provider.description,protocol:$.collection.provider.protocol,baseUrl:$.collection.provider.baseUrl,capabilities:$.collection.provider.capabilities,env:$.collection.provider.env,models:Z,defaultModel:$.collection.provider.defaultModelId,modelCount:Z.length}}class OY{providers=new Map;register($){ck($.id,$.models);let Z=$.defaultModel??$.models[0];if(!Z)throw Error(`Provider "${$.id}" must define a default model.`);if(!$.models.includes(Z))throw Error(`Default model "${Z}" is not included in configured models for "${$.id}".`);let Q=this.providers.get($.id);this.providers.set($.id,{id:$.id,models:new Set([...Q?.models??[],...$.models]),defaultModel:Z,defaults:{...Q?.defaults??{},...of($.defaults)}})}registerSelectionConfig($){this.register({id:$.id,models:$.models,defaultModel:$.defaultModel,defaults:{apiKey:vk($.apiKey,$.apiKeyEnv),routingProviderId:$.builtinProviderId,baseUrl:$.baseUrl,headers:$.headers,timeoutMs:$.timeoutMs,capabilities:$.capabilities,...of($.settings)}})}registerModel($,Z){let Q=this.providers.get($);if(!Q){this.providers.set($,{id:$,models:new Set([Z]),defaultModel:Z,defaults:{}});return}Q.models.add(Z)}createHandlerConfig($){let Z=this.require($.providerId),Q=$.modelId??Z.defaultModel;if(!Z.models.has(Q))throw Error(`Model "${Q}" is not configured for provider "${$.providerId}".`);return{providerId:$.providerId,modelId:Q,...Z.defaults,...$.overrides}}list(){return Array.from(this.providers.values()).map(($)=>({id:$.id,models:Array.from($.models),defaultModel:$.defaultModel}))}getModels($){return Array.from(this.require($).models)}hasProvider($){return this.providers.has($)}hasModel($,Z){return this.providers.get($)?.models.has(Z)??!1}require($){let Z=this.providers.get($);if(!Z)throw Error(`Provider "${$}" is not configured in this SDK instance.`);return Z}}class Q9{configuredProviders=new OY;constructor($){this.applyConfig($)}createHandler($){return uk(this.configuredProviders.createHandlerConfig($))}async createHandlerAsync($){return dk(this.configuredProviders.createHandlerConfig($))}registerProvider($){if(ZU($.collection),$.handlerFactory&&$.asyncHandlerFactory)throw Error(`Provider "${$.collection.provider.id}" cannot register both sync and async handlers.`);if($.handlerFactory)rk($.collection.provider.id,$.handlerFactory);if($.asyncHandlerFactory)pk($.collection.provider.id,$.asyncHandlerFactory);this.configuredProviders.register({id:$.collection.provider.id,models:$.exposeModels??Object.keys($.collection.models),defaultModel:$.defaultModel??$.collection.provider.defaultModelId,defaults:$.defaults})}registerBuiltinProvider($){let Z=$.exposeModels??Object.keys($.models),Q=$.defaultModel??Z[0];if(!Q)throw Error(`Provider "${$.id}" must define a default model.`);ZU({provider:{id:$.id,name:$.name??$.id,description:$.description,protocol:$.protocol,baseUrl:$.baseUrl,defaultModelId:Q,client:$.client??"openai-compatible",capabilities:$.capabilities,env:$.env,source:"system"},models:$.models}),this.configuredProviders.register({id:$.id,models:Z,defaultModel:Q,defaults:{routingProviderId:$.builtinProviderId,...$.defaults??{}}})}registerModel($){ik($.providerId,$.modelId,$.info),this.configuredProviders.registerModel($.providerId,$.modelId)}getProviders(){return this.configuredProviders.list()}getBuiltInProviderIds(){return[...ef]}async getBuiltInProviders(){return(await Promise.all(ef.map((Z)=>lk(Z)))).filter((Z)=>Z!==void 0).map((Z)=>tf({collection:Z}))}getModels($){return this.configuredProviders.getModels($)}isProviderConfigured($){return this.configuredProviders.hasProvider($)}isModelConfigured($,Z){return this.configuredProviders.hasModel($,Z)}applyConfig($){for(let Z of $.providers)this.configuredProviders.registerSelectionConfig(Z);for(let Z of $.models??[])this.registerModel(Z);for(let Z of $.customProviders??[])this.registerProvider(Z);for(let Z of this.configuredProviders.list()){let Q=$U(Z.id),W=this.configuredProviders.createHandlerConfig({providerId:Z.id,modelId:Z.defaultModel}).routingProviderId,J=typeof W==="string"&&$U(W);if(!Q&&!J)throw Error(`Provider "${Z.id}" is not known. Register it through customProviders/registerProvider, registerBuiltinProvider, or use a built-in provider ID.`)}}}function qY($){return new Q9($)}AW();async function nk(){return Promise.resolve().then(() => (oQ(),yA))}function wI(){return new Date().toISOString()}var PI="cline",SI="cline-pass";function bI($){if(BU($)!=="providers.json")return;let Z=EY($);if(BU(Z)!=="settings")return;return EY(Z)}class O1{filePath;dataDir;constructor($={}){if(this.filePath=$.filePath??CI(),this.dataDir=$.dataDir??bI(this.filePath),this.dataDir||!$.filePath)Z9({providerSettingsManager:this,dataDir:this.dataDir});if(wf(this),E7(this.read()),RY(this.filePath))try{HU(this.filePath,384)}catch{}}getFilePath(){return this.filePath}read(){if(!RY(this.filePath))return b$();try{let $=EI(this.filePath,"utf8"),Z=JSON.parse($),Q=i8.safeParse(Z);if(Q.success)return E7(Q.data),Q.data}catch{}return b$()}write($){let Z=i8.parse($),Q=EY(this.filePath);if(!RY(Q))RI(Q,{recursive:!0,mode:448});NI(this.filePath,`${JSON.stringify(Z,null,2)}
|
|
733
|
-
`,"utf8");try{HU(this.filePath,384)}catch{}E7(Z)}saveProviderSettings($,Z={}){let Q=r8.parse($),W=this.read(),J=Q.provider,X=Z.setLastUsed!==!1,Y=W.providers[J],j=Z.tokenSource??Y?.tokenSource??"manual",V={...W,providers:{...W.providers,[J]:{settings:Q,updatedAt:wI(),tokenSource:j}},lastUsedProvider:X?J:W.lastUsedProvider};return this.write(V),V}resolveProviderSettings($,Z){let Q=$.providers[Z]?.settings,J=j0(Z)?.storageProviderId;if(!J||J===Z)return Q;let X=$.providers[J]?.settings;if(!X)return Q;return r8.parse({...X.auth?{auth:X.auth}:{},...X.apiKey?{apiKey:X.apiKey}:{},...X.baseUrl?{baseUrl:X.baseUrl}:{},...Q??{},provider:Z})}getProviderSettings($){let Z=this.read();return this.resolveProviderSettings(Z,$)}resolveLastUsedProviderId($,Z){let Q=$.lastUsedProvider;if(Q===SI&&Z.isClinePassEnabled===!1)return PI;return Q}getLastUsedProviderSettings($={}){let Z=this.read(),Q=this.resolveLastUsedProviderId(Z,$);if(!Q)return;return this.resolveProviderSettings(Z,Q)}getProviderConfig($,Z){let Q=this.getProviderSettings($);if(!Q)return;return l0(Q,Z)}getLastUsedProviderConfig($={}){let Z=this.getLastUsedProviderSettings($);if(!Z)return;return l0(Z,$)}async refreshCatalog(){try{await l8({})}catch{}}}L0();X8();function yI($,Z){let Q=$?.expiresAt,W=Z?.expiresAt;return $?.accessToken===Z?.accessToken&&$?.refreshToken===Z?.refreshToken&&$?.accountId===Z?.accountId&&Q===W}class p7 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 NY{providerSettingsManager;telemetry;refreshInFlight=new Map;constructor($){this.providerSettingsManager=$?.providerSettingsManager??new O1,this.telemetry=$?.telemetry}async resolveProviderApiKey($){let Z=j0($.providerId);if(!Z)return null;return this.resolveWithSingleFlight(Z.providerId,Z.storageProviderId,$.forceRefresh)}async resolveWithSingleFlight($,Z,Q=!1){let W=this.refreshInFlight.get(Z);if(W)return W;let J=this.resolveProviderApiKeyInternal($,Z,Q).catch((X)=>{throw X}).finally(()=>{this.refreshInFlight.delete(Z)});return this.refreshInFlight.set(Z,J),J}async resolveProviderApiKeyInternal($,Z,Q){let W=j0($);if(!W)return null;let J=this.providerSettingsManager.getProviderSettings(Z);if(!J)return null;let X=Y6($,J);if(!X)return null;let Y=await W.refresh({settings:J,credentials:X,forceRefresh:Q,telemetry:this.telemetry});if(!Y)throw new p7($);let j=W2({manager:this.providerSettingsManager,providerId:$,settings:J,credentials:Y,setLastUsed:!1,save:!1}),V=!yI(J.auth,j.auth);if(V)this.providerSettingsManager.saveProviderSettings(j,{setLastUsed:!1,tokenSource:"oauth"});return{apiKey:W.getApiKey(j)??Y.access,accountId:Y.accountId,refreshed:V}}}import{normalizeUserInput as hI}from"@cline/shared";import{nanoid as kI}from"nanoid";class GU{list($){return $?s0($):[]}update($,Z){if(!$)return{sessionId:Z.sessionId,prompts:[],updated:!1};let Q=Z.promptId.trim(),W=$.pendingPrompts.findIndex((V)=>V.id===Q);if(W<0)return{sessionId:Z.sessionId,prompts:s0($),updated:!1};let J=$.pendingPrompts[W];if(!J)return{sessionId:Z.sessionId,prompts:s0($),updated:!1};let X=Z.prompt===void 0?J.prompt:hI(Z.prompt).trim();if(!X)throw Error("prompt cannot be empty");let Y=Z.delivery??J.delivery,j={...J,prompt:X,mode:Z.mode??J.mode,delivery:Y};return $.pendingPrompts.splice(W,1),II($,j,W,J.delivery),{sessionId:Z.sessionId,prompts:s0($),prompt:r7(j),updated:!0}}delete($,Z){if(!$)return{sessionId:Z.sessionId,prompts:[],removed:!1};let Q=Z.promptId.trim(),W=$.pendingPrompts.findIndex((X)=>X.id===Q);if(W<0)return{sessionId:Z.sessionId,prompts:s0($),removed:!1};let[J]=$.pendingPrompts.splice(W,1);return{sessionId:Z.sessionId,prompts:s0($),prompt:J?r7(J):void 0,removed:!0}}enqueue($,Z){let{prompt:Q,mode:W,delivery:J,userImages:X,userFiles:Y}=Z,j=$.pendingPrompts.findIndex((V)=>V.prompt===Q);if(j>=0){let[V]=$.pendingPrompts.splice(j,1),H={...V,prompt:Q,mode:W??V.mode,userImages:X??V.userImages,userFiles:Y??V.userFiles};if(J==="steer"||V.delivery==="steer")$.pendingPrompts.unshift({...H,delivery:"steer"});else $.pendingPrompts.push(H)}else{let V={id:`pending_${Date.now()}_${kI(5)}`,prompt:Q,mode:W,delivery:J,userImages:X,userFiles:Y};if(J==="steer")$.pendingPrompts.unshift(V);else $.pendingPrompts.push(V)}return s0($)}consumeSteer($){let Z=$.pendingPrompts.findIndex((W)=>W.delivery==="steer");if(Z<0)return{prompts:s0($)};let[Q]=$.pendingPrompts.splice(Z,1);return{entry:Q,prompts:s0($)}}shiftNext($){return{entry:$.pendingPrompts.shift(),prompts:s0($)}}requeueFront($,Z){return $.pendingPrompts.unshift(Z),s0($)}clear($){return $.pendingPrompts.length=0,[]}}class CY{deps;service=new GU;constructor($){this.deps=$}list($){return this.service.list(this.deps.getSession($))}update($){let Z=this.deps.getSession($.sessionId);if(!Z||Z.aborting)return{sessionId:$.sessionId,prompts:[],updated:!1};let Q=this.service.update(Z,$);return this.emitPrompts(Z),this.scheduleDrain($.sessionId,Z),Q}delete($){let Z=this.deps.getSession($.sessionId);if(!Z||Z.aborting)return{sessionId:$.sessionId,prompts:[],removed:!1};let Q=this.service.delete(Z,$);return this.emitPrompts(Z),this.scheduleDrain($.sessionId,Z),Q}enqueue($,Z){let Q=this.deps.getSession($);if(!Q||Q.aborting)return;this.service.enqueue(Q,Z),this.emitPrompts(Q),this.scheduleDrain($,Q)}consumeSteer($){let Z=this.deps.getSession($);if(!Z)return;let{entry:Q}=this.service.consumeSteer(Z);if(!Q)return;return this.emitPrompts(Z),this.emitSubmitted(Z,Q),Q}clearAborted($){if($.pendingPrompts.length===0)return;this.service.clear($),this.emitPrompts($)}emitPrompts($){this.deps.emit({type:"pending_prompts",payload:{sessionId:$.sessionId,prompts:s0($)}})}scheduleDrain($,Z){if(Z.pendingPrompts.length===0||Z.aborting||Z.drainingPendingPrompts||!Z.agent.canStartRun())return;queueMicrotask(()=>{this.drain($)})}async drain($){let Z=this.deps.getSession($);if(!Z)return;if(Z.aborting||Z.drainingPendingPrompts)return;if(!Z.agent.canStartRun())return;let{entry:Q}=this.service.shiftNext(Z);if(!Q)return;this.emitPrompts(Z),this.emitSubmitted(Z,Q),Z.drainingPendingPrompts=!0;let W=!0;try{await this.deps.send({sessionId:$,prompt:Q.prompt,...Q.mode?{mode:Q.mode}:{},userImages:Q.userImages,userFiles:Q.userFiles})}catch{W=!1,this.service.requeueFront(Z,Q),this.emitPrompts(Z)}finally{if(Z.drainingPendingPrompts=!1,W&&Z.pendingPrompts.length>0&&Z.status!=="failed"&&Z.status!=="cancelled")queueMicrotask(()=>{this.drain($)})}}emitSubmitted($,Z){let Q=r7(Z);this.deps.emit({type:"pending_prompt_submitted",payload:{sessionId:$.sessionId,id:Q.id,prompt:Q.prompt,delivery:Q.delivery,attachmentCount:Q.attachmentCount,userImages:Q.userImages,userFiles:Q.userFiles}})}}function r7($){return{id:$.id,prompt:$.prompt,delivery:$.delivery,attachmentCount:($.userImages?.length??0)+($.userFiles?.length??0),userImages:$.userImages,userFiles:$.userFiles}}function s0($){return $.pendingPrompts.map(r7)}function II($,Z,Q,W){if(Z.delivery==="steer")$.pendingPrompts.unshift(Z);else if(W==="steer")$.pendingPrompts.push(Z);else $.pendingPrompts.splice(Q,0,Z)}L0();class PY{deps;constructor($){this.deps=$}dispatchAgentEvent($,Z,Q){let W=this.deps.getSession($),J={sessionId:$,config:Z,liveSession:W,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit},X=x3(Q),Y=!!W&&(!X.agentId||X.agentId===wY(W.agent));g3(J,Q,Y?{isPrimaryAgentEvent:!0,agentId:wY(W.agent),conversationId:W.agent.getConversationId(),...W?.runtime.teamRuntime?{teamRole:"lead"}:{}}:{isPrimaryAgentEvent:!1})}async handleTeamEvent($,Z){let Q=this.deps.getSession($);if(Q){if(eJ(Q,Z),Z.type==="agent_event"){let W={sessionId:$,config:Q.config,liveSession:Q,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit};g3(W,Z.event,{agentId:Z.agentId,teamRole:"teammate",teamAgentId:Z.agentId,isPrimaryAgentEvent:!1})}if(Z.type==="teammate_spawned"){let W=r1({agentId:Z.teammate.runtimeAgentId??Z.agentId,conversationId:Z.teammate.conversationId,parentAgentId:Z.teammate.parentAgentId,createdByAgentId:wY(Q.agent),teamId:Q.runtime.teamRuntime?.getTeamId(),teamName:Q.runtime.teamRuntime?.getTeamName(),teamRole:"teammate",teamAgentId:Z.agentId});if(W)H$(Q.config.telemetry,{ulid:$,modelId:Z.teammate.modelId??Q.config.modelId,provider:Q.config.providerId,...W})}}if(await $X($,Z,this.deps.invokeBackendOptional),Q)ZX(Q,$,Z,this.deps.emit)}async handlePluginEvent($,Z,Q){if(Z.name==="plugin_log"){this.handlePluginLog($,Z.payload);return}if(Z.name==="automation_event"){let V=this.deps.getSession($)?.config.extensionContext?.automation??Q;if(!V)return;let H=Z.payload&&typeof Z.payload==="object"?Z.payload:void 0;if(!H)return;await V.ingestEvent(H);return}if(Z.name!=="steer_message"&&Z.name!=="queue_message"&&Z.name!=="pending_prompt")return;let W=Z.payload&&typeof Z.payload==="object"?Z.payload:void 0,J=typeof W?.sessionId==="string"&&W.sessionId.trim().length>0?W.sessionId.trim():$,X=typeof W?.prompt==="string"?W.prompt.trim():"";if(!X)return;let Y=Z.name==="steer_message"?"steer":Z.name==="queue_message"?"queue":W?.delivery==="steer"?"steer":"queue";this.deps.enqueuePendingPrompt(J,{prompt:X,delivery:Y})}handlePluginLog($,Z,Q){let W=this.deps.getSession($),J=Q??W?.config.extensionContext?.logger??W?.config.logger;if(!J||!Z||typeof Z!=="object")return;let X=Z,Y=typeof X.message==="string"?X.message:"";if(!Y)return;let j=X.metadata&&typeof X.metadata==="object"?{...X.metadata}:{};if(j.sessionId??=$,typeof X.pluginName==="string"&&X.pluginName)j.pluginName=X.pluginName;if(X.level==="debug"){J.debug(Y,j);return}if(X.level==="error"){if(J.error)J.error(Y,j);else J.log(Y,{...j,severity:"error"});return}J.log(Y,j)}}function wY($){return $.getAgentId()}function SY($){return{sessionId:$.sessionId,source:$.source,pid:process.pid,startedAt:$.startedAt,endedAt:$.endedAt??null,exitCode:$.exitCode??null,status:$.status,interactive:$.interactive,provider:$.config.providerId,model:$.config.modelId,cwd:$.config.cwd,workspaceRoot:E$($.config),teamName:$.config.teamName?.trim()||void 0,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,parentSessionId:typeof $.sessionMetadata?.parentSessionId==="string"?$.sessionMetadata.parentSessionId:void 0,parentAgentId:typeof $.sessionMetadata?.parentAgentId==="string"?$.sessionMetadata.parentAgentId:void 0,agentId:typeof $.sessionMetadata?.agentId==="string"?$.sessionMetadata.agentId:void 0,conversationId:typeof $.sessionMetadata?.conversationId==="string"?$.sessionMetadata.conversationId:void 0,isSubagent:typeof $.sessionMetadata?.isSubagent==="boolean"?$.sessionMetadata.isSubagent:!1,prompt:$.pendingPrompt,metadata:$.sessionMetadata,messagesPath:$.artifacts?.messagesPath,updatedAt:$.updatedAt??$.endedAt??$.startedAt}}function bY($,Z){let Q=$[Z];return typeof Q==="function"?Q:null}async function KU($,Z,...Q){let W=bY($,Z);if(!W)throw Error(`session service method not available: ${Z}`);return Promise.resolve(W.apply($,Q))}async function FU($,Z,...Q){let W=bY($,Z);if(!W)return;await Promise.resolve(W.apply($,Q))}async function AU($,Z,...Q){let W=bY($,Z);if(!W)return;return await Promise.resolve(W.apply($,Q))}$1();L0();function yY($,Z,Q){return{onSubAgentEvent:(W)=>$.onAgentEvent(Q,Z,W),onSubAgentStart:(W)=>{let J=$.getSession(Q)?.runtime.teamRuntime;$.subAgentStarts.set(W.subAgentId,{startedAt:Date.now(),rootSessionId:Q});let X=r1({agentId:W.subAgentId,conversationId:W.conversationId,parentAgentId:W.parentAgentId,teamId:J?.getTeamId(),teamName:J?.getTeamName(),createdByAgentId:W.parentAgentId});if(X)H$(Z.telemetry,{ulid:Q,modelId:Z.modelId,provider:Z.providerId,...X});v4(Z.telemetry,{event:"started",ulid:Q,durationMs:0,parentId:W.parentAgentId,agentId:W.subAgentId,...X}),$.invokeBackendOptional("handleSubAgentStart",Q,W)},onSubAgentEnd:(W)=>{let J=$.getSession(Q)?.runtime.teamRuntime,X=$.subAgentStarts.get(W.subAgentId),Y=X?Date.now()-X.startedAt:0,j=W.result?.text?W.result.text.split(`
|
|
734
|
-
`).length:0;v4(Z.telemetry,{event:"ended",ulid:Q,durationMs:Y,outputLines:j,errorMessage:W.error?String(W.error):void 0,agentId:W.subAgentId,parentId:W.parentAgentId,...r1({agentId:W.subAgentId,conversationId:W.conversationId,parentAgentId:W.parentAgentId,teamId:J?.getTeamId(),teamName:J?.getTeamName(),createdByAgentId:W.parentAgentId})}),$.subAgentStarts.delete(W.subAgentId),$.invokeBackendOptional("handleSubAgentEnd",Q,W)}}}function hY($,Z,Q,W){let J=yY($,Z,Q);return M$({configProvider:{getRuntimeConfig:()=>$.getSession(Q)?.runtime.delegatedAgentConfigProvider?.getRuntimeConfig()??{providerId:Z.providerId,modelId:Z.modelId,cwd:Z.cwd,apiKey:Z.apiKey,baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking,maxIterations:Z.maxIterations,hooks:Z.hooks,extensions:Z.extensions,logger:Z.logger,telemetry:Z.telemetry},getConnectionConfig:()=>$.getSession(Q)?.runtime.delegatedAgentConfigProvider?.getConnectionConfig()??{providerId:Z.providerId,modelId:Z.modelId,apiKey:Z.apiKey,baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking},updateConnectionDefaults:()=>{}},createSubAgentTools:()=>{let Y=Z.enableTools?U2({cwd:Z.cwd,...u0[l1({mode:Z.mode})],executors:W}):[];if(Z.enableSpawnAgent)Y.push(hY($,Z,Q,W));return y1(Y)},...J})}import{readFile as xI,stat as gI}from"node:fs/promises";var mI=20480000;async function fU($){let Z=await gI($);if(!Z.isFile())throw Error("Path is not a file");if(Z.size>mI)throw Error("File is too large to read into context.");let Q=await xI($,"utf8");if(Q.includes("\x00"))throw Error("Cannot read binary file into context.");return Q}var UU=5000;function j9($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function iI($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$,Q=j9(Z.inputTokens),W=j9(Z.outputTokens),J=j9(Z.cacheReadTokens),X=j9(Z.cacheWriteTokens),Y=j9(Z.totalCost);if(Q===void 0||W===void 0||J===void 0||X===void 0||Y===void 0)return;return{inputTokens:Q,outputTokens:W,cacheReadTokens:J,cacheWriteTokens:X,totalCost:Y}}function nI($,Z){return{inputTokens:Math.max($.inputTokens,Z.inputTokens),outputTokens:Math.max($.outputTokens,Z.outputTokens),cacheReadTokens:Math.max($.cacheReadTokens,Z.cacheReadTokens),cacheWriteTokens:Math.max($.cacheWriteTokens,Z.cacheWriteTokens),totalCost:Math.max($.totalCost,Z.totalCost)}}class _1{runtimeAddress=void 0;pendingPrompts;sessionService;runtimeBuilder;createAgentInstance;toolExecutors;defaultCapabilities;defaultToolPolicies;providerSettingsManager;oauthTokenManager;defaultTelemetry;defaultFetch;events=new P5;sessions=new Map;usageBySession=new Map;aggregateUsageBySession=new Map;subAgentStarts=new Map;pendingPromptsController;eventBridge;sessionVersioning=new u$;constructor($){let Z=cI();if(Z)rI(Z);let Q=P0($.distinctId);this.sessionService=$.sessionService,this.runtimeBuilder=$.runtimeBuilder??new O4,this.createAgentInstance=$.createAgent??((W)=>new z$(W)),this.defaultCapabilities=q0($.capabilities),this.toolExecutors=this.defaultCapabilities?.toolExecutors,this.defaultToolPolicies=$.toolPolicies,this.providerSettingsManager=$.providerSettingsManager??new O1,this.oauthTokenManager=$.oauthTokenManager??new NY({providerSettingsManager:this.providerSettingsManager,telemetry:$.telemetry}),this.defaultTelemetry=$.telemetry,this.defaultTelemetry?.setDistinctId(Q),this.defaultFetch=$.fetch,this.pendingPromptsController=new CY({getSession:(W)=>this.sessions.get(W),emit:(W)=>this.emit(W),send:(W)=>this.runTurn(W)}),this.pendingPrompts={list:async(W)=>this.pendingPromptsController.list(W.sessionId),update:async(W)=>this.pendingPromptsController.update(W),delete:async(W)=>this.pendingPromptsController.delete(W)},this.eventBridge=new PY({getSession:(W)=>this.sessions.get(W),usageBySession:this.usageBySession,aggregateUsageBySession:this.aggregateUsageBySession,emit:(W)=>this.emit(W),persistMessages:(W,J,X)=>{this.invoke("persistSessionMessages",W,J,X)},enqueuePendingPrompt:(W,J)=>this.pendingPromptsController.enqueue(W,J),invokeBackendOptional:(W,...J)=>this.invokeOptional(W,...J)})}async applyInitialOAuthCredentials($){if($.config.apiKey?.trim())return $;let Z=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId});if(!Z?.apiKey)return $;return{...$,config:{...$.config,apiKey:Z.apiKey}}}async startSession($){let Z=$.source??_0.CLI,Q=J0(),W=$.config.sessionId?.trim()??"",J=W||dI(),X=await this.applyInitialOAuthCredentials($),Y=X.initialMessages??[],j=Y.length>0?y8(Y):D0(),V=await this.invokeOptionalValue("ensureSessionsDir")??"";if(!V)throw Error("session service method not available: ensureSessionsDir");let H=kY(V,J),B=kY(H,`${J}.messages.json`),G=kY(H,`${J}.json`),K=E$($.config),F=b0.parse({version:1,session_id:J,source:Z,pid:process.pid,started_at:Q,status:"running",interactive:$.interactive===!0,provider:X.config.providerId,model:X.config.modelId,cwd:X.config.cwd,workspace_root:K,team_name:X.config.teamName,enable_tools:X.config.enableTools,enable_spawn:X.config.enableSpawnAgent,enable_teams:X.config.enableAgentTeams,prompt:X.prompt?.trim()||void 0,messages_path:B}),A;if(W.length>0&&Y.length>0&&!X.prompt?.trim()){let P=await this.invokeOptionalValue("readSessionManifest",J);if(P)F=P,A={manifestPath:G,messagesPath:P.messages_path||B,manifest:P}}let f=await this.seedAggregateUsageFromArtifacts({initialUsage:j,sessionDir:H,rootMessagesPath:A?.messagesPath??B,manifest:F});this.usageBySession.set(J,j),this.aggregateUsageBySession.set(J,f);let T=q0(this.defaultCapabilities,$.capabilities),U=T?.toolExecutors??this.toolExecutors,z=$.localRuntime,O=z?.extensionContext?.logger??z?.logger,_=z?.extensionContext?.automation,L,E={getSession:(P)=>this.sessions.get(P),subAgentStarts:this.subAgentStarts,onAgentEvent:(P,B0,G0)=>this.eventBridge.dispatchAgentEvent(P,B0,G0),invokeBackendOptional:(P,...B0)=>this.invokeOptional(P,...B0)};L=await $K({input:X,localRuntime:$.localRuntime,sessionId:J,providerSettingsManager:this.providerSettingsManager,defaultTelemetry:this.defaultTelemetry,defaultCapabilities:T,defaultToolPolicies:this.defaultToolPolicies,defaultFetch:this.defaultFetch,onPluginEvent:(P)=>{if(P.name==="plugin_log"){this.eventBridge.handlePluginLog(J,P.payload,O);return}this.eventBridge.handlePluginEvent(J,P,_)},onTeamEvent:(P)=>{this.eventBridge.handleTeamEvent(J,P),L.config.onTeamEvent?.(P)},createSpawnTool:()=>hY(E,L.config,J,U),createSubAgentLifecycleCallbacks:(P)=>yY(E,P,J),readSessionMetadata:async()=>(await this.getSession(J))?.metadata,writeSessionMetadata:async(P)=>{await this.persistSessionMetadata(J,()=>P)}});let w=await this.runtimeBuilder.build(L.runtimeBuilderInput),h=L.config,l=L.providerConfig;if(w.teamRuntime&&!h.teamName?.trim())h.teamName=w.teamRuntime.getTeamName();let o=[...w.tools,...h.extraTools??[]],t=w.extensions??L.extensions,Q0={sessionId:J,providerId:l.providerId,modelId:l.modelId,apiKey:l.apiKey,baseUrl:l.baseUrl,headers:l.headers,knownModels:l.knownModels,providerConfig:l,thinking:h.thinking,reasoningEffort:h.reasoningEffort??l.reasoningEffort,maxTokensPerTurn:h.maxTokensPerTurn,systemPrompt:h.systemPrompt,maxIterations:h.maxIterations,execution:h.execution,prepareTurn:K6(h),tools:o,hooks:L.hooks,extensions:t,hookErrorMode:h.hookErrorMode,initialMessages:L.effectiveInput.initialMessages,userFileContentLoader:fU,toolPolicies:L.toolPolicies,requestToolApproval:L.requestToolApproval?async(P)=>{let B0=L.requestToolApproval,G0=this.sessions.get(J);if(G0)await this.markTurnPending(G0);try{if(!B0)return{approved:!1,reason:"Tool approval callback is not configured."};return await B0(P)}finally{let w0=this.sessions.get(J);if(w0?.status==="pending")await this.markTurnRunning(w0)}}:void 0,telemetry:h.telemetry,onConsecutiveMistakeLimitReached:h.onConsecutiveMistakeLimitReached,completionPolicy:w.completionPolicy,consumePendingUserMessage:()=>{let P=this.pendingPromptsController.consumeSteer(J);return P?m5(P.prompt,P.mode??h.mode):void 0},logger:w.logger??h.logger,extensionContext:h.extensionContext,onEvent:(P)=>this.eventBridge.dispatchAgentEvent(J,h,P)};Q0.hooks={...Q0.hooks,onEvent:async(P)=>{if(await L.hooks?.onEvent?.(P),P.type!=="assistant-message")return;let B0=this.sessions.get(J);if(!B0)return;let G0=B0.agent.getMessages();try{await this.invoke("persistSessionMessages",J,G0,h.systemPrompt)}catch(w0){h.logger?.error?.("Failed to persist session messages after assistant response",{sessionId:J,error:w0}),p2(h.telemetry,{component:"core",operation:"session.persist_messages_after_assistant_response",error:w0,severity:"warn",handled:!0,context:{sessionId:J,providerId:h.providerId,modelId:h.modelId}})}}};let e0=this.createAgentInstance(Q0);if(Q0.onEvent)e0.subscribeEvents(Q0.onEvent);w.registerLeadAgent?.(e0);let p$=r1({agentId:e0.getAgentId(),conversationId:e0.getConversationId(),teamId:w.teamRuntime?.getTeamId(),teamName:w.teamRuntime?.getTeamName(),teamRole:w.teamRuntime?"lead":void 0});if(QK(h,J,W.length>0,K,p$),p$)H$(h.telemetry,{ulid:J,modelId:h.modelId,provider:h.providerId,...p$});if(w.teamRuntime)S9(h.telemetry,{ulid:J,teamId:w.teamRuntime.getTeamId(),teamName:w.teamRuntime.getTeamName(),leadAgentId:e0.getAgentId(),restoredFromPersistence:w.teamRestoredFromPersistence===!0});let r={sessionId:J,config:h,sessionMetadata:X.sessionMetadata,...A?{artifacts:A}:{},source:Z,startedAt:A?.manifest.started_at??Q,updatedAt:A?.manifest.ended_at??A?.manifest.started_at??Q,pendingPrompt:F.prompt,runtime:w,agent:e0,started:!1,status:A?.manifest.status??"running",aborting:!1,interactive:$.interactive===!0,persistedMessages:Y,activeTeamRunIds:new Set,pendingTeamRunUpdates:[],teamRunWaiters:[],pendingPrompts:[],drainingPendingPrompts:!1,pluginSandboxShutdown:L.pluginSandboxShutdown,submitAndExitObserved:!1,lastInteractiveTurnFinishReason:void 0};if(this.sessions.set(J,r),this.emitStatus(J,"running"),Y.length>0&&!A){if(await this.ensureSessionPersisted(r),await this.invoke("persistSessionMessages",r.sessionId,Y,r.config.systemPrompt),!X.prompt?.trim())await this.updateStatus(r,"completed",0)}let q1;try{if(X.prompt?.trim())if(q1=await this.executeTurn(r,{prompt:X.prompt,userImages:X.userImages,userFiles:X.userFiles}),!r.interactive)await this.finalizeSingleRun(r,q1.finishReason);else await this.completeInteractiveTurn(r,q1.finishReason)}catch(P){if(r.interactive&&r.aborting)q1=await this.completeAbortedInteractiveTurn(r);else{p2(r.config.telemetry,{component:"core",operation:"session.start",error:P,severity:"error",handled:!1,context:{sessionId:r.sessionId,providerId:r.config.providerId,modelId:r.config.modelId}});try{await this.failSession(r)}catch(B0){r.config.logger?.error?.("Session failure cleanup threw",{sessionId:r.sessionId,error:B0})}throw P}}return{sessionId:J,manifest:F,manifestPath:G,messagesPath:B,result:q1}}async restoreSession($){return this.sessionVersioning.restoreCheckpoint({...$,getSession:(Z)=>this.getSession(Z),readMessages:(Z)=>this.readSessionMessages(Z),buildStartInput:(Z,Q)=>{let W=Z.restoredCheckpointMetadata?{...Q.sessionMetadata??{},checkpoint:Z.restoredCheckpointMetadata}:Q.sessionMetadata;return{...Q,...W?{sessionMetadata:W}:{},initialMessages:Z.initialMessages}},startSession:(Z)=>this.startSession(Z),getStartedSessionId:(Z)=>Z.sessionId,readRestoredSession:(Z)=>this.getSession(Z)})}async runTurn($){let Z=this.getSessionOrThrow($.sessionId),Q=Z.agent.canStartRun(),W=$.delivery??(Z.interactive&&!Q?"queue":void 0);if(Z.config.telemetry?.capture({event:"session.input_sent",properties:{sessionId:$.sessionId,promptLength:$.prompt.length,userImageCount:$.userImages?.length??0,userFileCount:$.userFiles?.length??0,delivery:W??"immediate"}}),W==="queue"||W==="steer"){this.pendingPromptsController.enqueue($.sessionId,{prompt:$.prompt,mode:$.mode,delivery:W,userImages:$.userImages,userFiles:$.userFiles});return}try{let J=await this.executeTurn(Z,{prompt:$.prompt,mode:$.mode,userImages:$.userImages,userFiles:$.userFiles});if(!Z.interactive)await this.finalizeSingleRun(Z,J.finishReason);else await this.completeInteractiveTurn(Z,J.finishReason);if(J.finishReason==="error"||J.finishReason==="aborted")return J;return queueMicrotask(()=>{this.pendingPromptsController.drain($.sessionId)}),J}catch(J){if(Z.interactive&&Z.aborting)return await this.completeAbortedInteractiveTurn(Z);throw p2(Z.config.telemetry,{component:"core",operation:"session.submit",error:J,severity:"error",handled:!1,context:{sessionId:Z.sessionId,providerId:Z.config.providerId,modelId:Z.config.modelId}}),await this.failSession(Z),J}}async getAccumulatedUsage($){let Z=dJ(this.usageBySession.get($)),Q=dJ(this.aggregateUsageBySession.get($));return Z||Q?{usage:Z,aggregateUsage:Q}:void 0}async abort($,Z){let Q=this.sessions.get($);if(!Q)return;Q.config.telemetry?.capture({event:"session.aborted",properties:{sessionId:$}}),Q.aborting=!0,this.pendingPromptsController.clearAborted(Q),Q.agent.abort(Z)}async stopSession($){let Z=this.sessions.get($);if(!Z)return;if(Z.config.telemetry?.capture({event:"session.stopped",properties:{sessionId:$}}),Z.interactive&&!H0(Z.status)){await this.releaseSessionRuntime(Z,"session_stop");return}if(Z.interactive&&Z.agent.canStartRun()){await this.shutdownSession(Z,{status:this.resolveInteractiveStopStatus(Z),exitCode:this.resolveInteractiveStopExitCode(Z),shutdownReason:"session_stop",endReason:"stopped"});return}Z.aborting=!0,Z.agent.abort(Error("session_stop")),await this.shutdownSession(Z,{status:"cancelled",exitCode:0,shutdownReason:"session_stop",endReason:"stopped"})}async dispose($="session_manager_dispose"){let Z=[...this.sessions.values()];if(Z.length===0)return;await Promise.allSettled(Z.map((Q)=>Q.interactive&&!H0(Q.status)?this.releaseSessionRuntime(Q,$):Q.interactive&&Q.agent.canStartRun()?this.shutdownSession(Q,{status:this.resolveInteractiveStopStatus(Q),exitCode:this.resolveInteractiveStopExitCode(Q),shutdownReason:$,endReason:"disposed"}):this.shutdownSession(Q,{status:"cancelled",exitCode:0,shutdownReason:$,endReason:"disposed"}))),this.usageBySession.clear(),this.aggregateUsageBySession.clear()}async getSession($){let Z=this.sessions.get($);if(Z)return SY(Z);let Q=$.trim();if(!Q)return;let W=await this.getRow(Q);if(W)return m6(W);let J=await this.readManifest(Q);return J?xQ(J):void 0}async listSessions($=200){let Q=(await this.listRows($)).map(m6),W=new Set(Q.map((J)=>J.sessionId));for(let J of this.sessions.values()){if(W.has(J.sessionId))continue;Q.unshift(SY(J))}return Q.slice(0,$)}async deleteSession($){if(this.sessions.has($))await this.stopSession($);let Z=await this.invoke("deleteSession",$);if(Z.deleted)this.usageBySession.delete($),this.aggregateUsageBySession.delete($);return Z.deleted}async updateSession($,Z){return{updated:(await this.invokeOptionalValue("updateSession",{sessionId:$,prompt:Z.prompt,metadata:Z.metadata,title:Z.title}))?.updated===!0}}async readSessionMessages($){let Z=$.trim();if(!Z)return[];let Q=await this.getRow(Z);if(Q?.messagesPath)return x$(Q.messagesPath);let W=await this.readManifest(Z);return x$(W?.messages_path)}async dispatchHookEvent($){await MF($,{queueSpawnRequest:(Z)=>this.invokeOptional("queueSpawnRequest",Z),upsertSubagentSessionFromHook:(Z)=>this.invokeOptionalValue("upsertSubagentSessionFromHook",Z),appendSubagentHookAudit:(Z,Q)=>this.invokeOptional("appendSubagentHookAudit",Z,Q),applySubagentStatus:(Z,Q)=>this.invokeOptional("applySubagentStatus",Z,Q)})}subscribe($,Z){return this.events.subscribe($,Z)}async updateSessionModel($,Z){let Q=this.getSessionOrThrow($);Q.config.modelId=Z,Q.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({modelId:Z}),Q.agent.updateConnection({modelId:Z})}handlePluginEvent($,Z,Q){return this.eventBridge.handlePluginEvent($,Z,Q)}async executeTurn($,Z){let Q=await this.prepareTurnInput($,Z),W=Q.prompt.trim();if(!W)throw Error("prompt cannot be empty");if(!$.artifacts&&!$.pendingPrompt)$.pendingPrompt=W;await this.ensureSessionPersisted($),await this.syncOAuthCredentials($),await this.markTurnRunning($);let J=await this.executeAgentTurn($,W,Q.userImages,Q.userFiles);while(QX($,J.finishReason)){let X=await WX($);if(X.length===0)break;let Y=JX($,X);J=await this.executeAgentTurn($,Y)}return J}async completeInteractiveTurn($,Z){if(g5($))return;$.lastInteractiveTurnFinishReason=Z,await this.markTurnIdle($),$.aborting=!1}resolveInteractiveStopStatus($){let Z=$.lastInteractiveTurnFinishReason;if(!Z)return"cancelled";switch(Z){case"completed":return"completed";case"error":return"failed";case"aborted":case"max_iterations":case"mistake_limit":return"cancelled"}return Z}resolveInteractiveStopExitCode($){return $.lastInteractiveTurnFinishReason==="error"?1:0}async completeAbortedInteractiveTurn($){let Z=new Date,Q=$.agent.getMessages(),W=D0();return $.persistedMessages=Q,$.started=$.started||Q.length>0,this.eventBridge.dispatchAgentEvent($.sessionId,$.config,{type:"done",reason:"aborted",text:"",iterations:0,usage:W}),await this.completeInteractiveTurn($,"aborted"),{text:"",usage:W,messages:Q,toolCalls:[],iterations:0,finishReason:"aborted",model:{id:$.config.modelId,provider:$.config.providerId},startedAt:Z,endedAt:Z,durationMs:0}}async executeAgentTurn($,Z,Q,W){let J=$.started||$.agent.getMessages().length>0,X=$.persistedMessages??$.agent.getMessages(),Y=this.usageBySession.get($.sessionId)??D0(),j=this.aggregateUsageBySession.get($.sessionId)??Y;$.turnUsageBaseline=Y,$.turnAggregateUsageBaseline=j,$.turnPrimaryUsage=D0(),$.turnUsageByAgent=new Map,R9($.config.telemetry,$.sessionId,$.config.mode),Q8($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,model:$.config.modelId,source:"user",mode:$.config.mode,...this.getSessionAgentTelemetryIdentity($)});try{let V=J?()=>$.agent.continue(Z,Q,W):()=>$.agent.run(Z,Q,W),H=await this.runWithAuthRetry($,V,X);$.started=!0;let B=yZ(H.messages,H,X);$.persistedMessages=B;let G=c6($.turnUsageByAgent?.values()??[]),K=f0(Y,H.usage),F=f0(f0(D0(),H.usage),G),A=f0(j,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,B,$.config.systemPrompt),this.observeTaskCompletionTool($,H),H}catch(V){throw p2($.config.telemetry,{component:"core",operation:"session.turn",error:V,severity:"error",handled:!1,context:{sessionId:$.sessionId,providerId:$.config.providerId,modelId:$.config.modelId}}),await this.invoke("persistSessionMessages",$.sessionId,$.agent.getMessages(),$.config.systemPrompt),V}finally{$.turnUsageBaseline=void 0,$.turnAggregateUsageBaseline=void 0,$.turnPrimaryUsage=void 0,$.turnUsageByAgent=void 0}}observeTaskCompletionTool($,Z){if($.submitAndExitObserved)return;if(!Z.toolCalls.some((W)=>W.name===U0.SUBMIT_AND_EXIT&&W.error===void 0))return;$.submitAndExitObserved=!0,g4($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"submit_and_exit",...this.getSessionAgentTelemetryIdentity($)})}async prepareTurnInput($,Z){let Q=E$($.config),W=pI(Z.prompt).trim();if(!W)return{prompt:"",userImages:Z.userImages,userFiles:this.resolveAbsoluteFilePaths($.config.cwd,Z.userFiles)};let J=await O8(W,Q);WK($.config.telemetry,J);let X=m5(J.prompt,Z.mode??$.config.mode),Y=this.resolveAbsoluteFilePaths($.config.cwd,Z.userFiles),j=this.resolveAbsoluteFilePaths(Q,J.matchedFiles),V=Array.from(new Set([...Y,...j]));return{prompt:X,userImages:Z.userImages,userFiles:V.length>0?V:void 0}}async ensureSessionPersisted($){if($.artifacts)return;let Z=E$($.config);$.artifacts=await this.invoke("createRootSessionWithArtifacts",{sessionId:$.sessionId,source:$.source,pid:process.pid,interactive:$.interactive,provider:$.config.providerId,model:$.config.modelId,cwd:$.config.cwd,workspaceRoot:Z,teamName:$.config.teamName,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,prompt:$.pendingPrompt,metadata:$.sessionMetadata,startedAt:$.startedAt})}async markTurnRunning($){if($.status==="running")return;await this.updateStatus($,"running",null)}async markTurnPending($){if($.status==="pending")return;await this.updateStatus($,"pending",null)}async markTurnIdle($){if($.status==="idle")return;await this.updateStatus($,"idle",null)}async persistSessionMetadata($,Z){let Q=this.sessions.get($),W=await this.invokeOptionalValue("readSessionManifest",$)??Q?.artifacts?.manifest,J=Z(W?.metadata);if(!Q?.artifacts)return;if((await this.invokeOptionalValue("updateSession",{sessionId:$,metadata:J}))?.updated===!1)return;Q.sessionMetadata=J,Q.artifacts.manifest.metadata=J}async finalizeSingleRun($,Z){if(g5($))return;let Q=Z==="aborted"||$.aborting,W=Z==="error";await this.shutdownSession($,{status:Q?"cancelled":W?"failed":"completed",exitCode:W?1:0,shutdownReason:W?"session_error":"session_complete",endReason:Z})}async failSession($){await this.shutdownSession($,{status:"failed",exitCode:1,shutdownReason:"session_error",endReason:"error"})}async shutdownSession($,Z){if(Z.status==="completed"&&!$.submitAndExitObserved)g4($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"shutdown",...this.getSessionAgentTelemetryIdentity($)});lQ($);let Q=[],W=(J,X)=>{Q.push(X),$.config.logger?.log("Session shutdown cleanup failed",{sessionId:$.sessionId,stage:J,error:X,severity:"warn"}),p2($.config.telemetry,{component:"core",operation:"session.shutdown_cleanup",error:X,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:J,status:Z.status,shutdownReason:Z.shutdownReason,providerId:$.config.providerId,modelId:$.config.modelId}})};if($.artifacts){try{await this.updateStatus($,Z.status,Z.exitCode)}catch(J){W("update_status",J)}try{await $.agent.shutdown(Z.shutdownReason)}catch(J){W("agent_shutdown",J)}}try{await Promise.resolve($.runtime.shutdown(Z.shutdownReason))}catch(J){W("runtime_shutdown",J)}try{await $.pluginSandboxShutdown?.()}catch(J){W("plugin_sandbox_shutdown",J)}if(this.sessions.delete($.sessionId),this.emit({type:"ended",payload:{sessionId:$.sessionId,reason:Z.endReason,ts:Date.now()}}),Q.length>0&&Z.status==="failed")throw Q[0]}async releaseSessionRuntime($,Z){let Q=[],W=(J,X)=>{Q.push(X),$.config.logger?.log("Session runtime cleanup failed",{sessionId:$.sessionId,stage:J,error:X,severity:"warn"}),p2($.config.telemetry,{component:"core",operation:"session.runtime_cleanup",error:X,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:J,reason:Z,providerId:$.config.providerId,modelId:$.config.modelId}})};try{await $.agent.shutdown(Z)}catch(J){W("agent_shutdown",J)}try{await Promise.resolve($.runtime.shutdown(Z))}catch(J){W("runtime_shutdown",J)}try{await $.pluginSandboxShutdown?.()}catch(J){W("plugin_sandbox_shutdown",J)}if(this.sessions.delete($.sessionId),Q.length>0)throw Q[0]}async updateStatus($,Z,Q){if(!$.artifacts)return;let W=await this.invoke("updateSessionStatus",$.sessionId,Z,Q);if(!W.updated)return;let J=await this.invokeOptionalValue("readSessionManifest",$.sessionId)??$.artifacts.manifest;if(J.status=Z,H0(Z))delete J.ended_at,J.exit_code=null;else J.ended_at=W.endedAt??J0(),J.exit_code=typeof Q==="number"?Q:null;$.artifacts.manifest=J,$.status=Z,$.updatedAt=W.endedAt??J0(),$.endedAt=H0(Z)?null:J.ended_at,$.exitCode=J.exit_code,await this.invoke("writeSessionManifest",$.artifacts.manifestPath,J),this.emitStatus($.sessionId,Z)}async runWithAuthRetry($,Z,Q){try{return await Z()}catch(W){if(!Q2($.config.providerId)||!lI(W))throw W;return await this.syncOAuthCredentials($,{forceRefresh:!0}),$.agent.restore(Q),Z()}}async syncOAuthCredentials($,Z){let Q=null;try{Q=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId,forceRefresh:Z?.forceRefresh})}catch(W){if(W instanceof p7)throw Error(`${W.providerId} requires re-authentication.`);throw W}if(!Q?.apiKey||$.config.apiKey===Q.apiKey)return;$.config.apiKey=Q.apiKey,$.agent.updateConnection({apiKey:Q.apiKey}),$.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({apiKey:Q.apiKey}),$.runtime.teamRuntime?.updateTeammateConnections({apiKey:Q.apiKey})}getSessionOrThrow($){let Z=this.sessions.get($);if(!Z){let Q=new k1($);throw p2(this.defaultTelemetry,{component:"core",operation:"session.active_lookup",error:Q,severity:"warn",handled:!0,context:{sessionId:$,activeSessionCount:this.sessions.size}}),Q}return Z}resolveAbsoluteFilePaths($,Z){if(!Z||Z.length===0)return[];let Q=Z.map((W)=>W.trim()).filter((W)=>W.length>0).map((W)=>uI(W)?W:IY($,W));return Array.from(new Set(Q))}getSessionAgentTelemetryIdentity($){return r1({agentId:$.agent.getAgentId(),conversationId:$.agent.getConversationId(),teamId:$.runtime.teamRuntime?.getTeamId(),teamName:$.runtime.teamRuntime?.getTeamName(),teamRole:$.runtime.teamRuntime?"lead":void 0})}async seedAggregateUsageFromArtifacts($){let Z=await this.summarizePersistedTeammateUsage($.sessionDir,$.rootMessagesPath,$.manifest.session_id),Q=f0($.initialUsage,Z);return this.withPersistedAggregateUsageFloor(Q,$.manifest)}async summarizePersistedTeammateUsage($,Z,Q){let W=IY(Z),J=`${Q}.messages.json`,X;try{X=vI($)}catch{return D0()}let Y=D0();for(let j of X){if(!j.endsWith(".messages.json"))continue;if(j===J)continue;let V=IY($,j);if(V===W)continue;let H=await x$(V);if(H.length===0)continue;Y=f0(Y,y8(H))}return Y}withPersistedAggregateUsageFloor($,Z){let Q=iI(Z.metadata?.aggregateUsage);if(Q)return nI($,Q);let W=Z.metadata?.aggregatedAgentsCost;if(typeof W!=="number"||!Number.isFinite(W)||W<=$.totalCost)return $;return{...$,totalCost:W}}emitStatus($,Z){this.emitSessionSnapshot($),this.emit({type:"status",payload:{sessionId:$,status:Z}})}async emitSessionSnapshot($){let Z=await this.getSession($);if(!Z)return;this.emit({type:"session_snapshot",payload:{sessionId:$,snapshot:f1({session:Z,messages:await this.readSessionMessages($),usage:this.usageBySession.get($),aggregateUsage:this.aggregateUsageBySession.get($)})}})}emit($){this.events.emit($)}async listRows($){return this.invoke("listSessions",Math.min(Math.max(1,Math.floor($)),UU))}async getRow($){let Z=$.trim();if(!Z)return;return(await this.listRows(UU)).find((W)=>W.sessionId===Z)}async readManifest($){let Z=$.trim();if(!Z)return;return await this.invokeOptionalValue("readSessionManifest",Z)}invoke($,...Z){return KU(this.sessionService,$,...Z)}invokeOptional($,...Z){return FU(this.sessionService,$,...Z)}invokeOptionalValue($,...Z){return AU(this.sessionService,$,...Z)}}function sI($){return{text:$.text,usage:$.usage,inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,iterations:$.iterations,finishReason:$.finishReason,toolCalls:$.toolCalls.map((Z)=>({name:Z.name,input:Z.input,output:Z.output,error:Z.error,durationMs:Z.durationMs}))}}function oI($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}function XU($={}){let Z=new _1({sessionService:new L1(new D1),fetch:$.fetch,telemetry:$.telemetry});return{async startSession(Q){let W=(Q.cwd?.trim()||Q.workspaceRoot).trim(),J=await Z.startSession({source:Q.source?.trim()||_0.CLI,interactive:!1,config:{providerId:aI(Q.provider),modelId:Q.model,apiKey:Q.apiKey?.trim()||void 0,cwd:W,workspaceRoot:Q.workspaceRoot,systemPrompt:Q.systemPrompt??"",mode:oI(Q),maxIterations:Q.maxIterations,enableTools:Q.enableTools!==!1,enableSpawnAgent:Q.enableSpawn!==!1,enableAgentTeams:Q.enableTeams!==!1,disableMcpSettingsTools:Q.disableMcpSettingsTools,missionLogIntervalSteps:Q.missionStepInterval,missionLogIntervalMs:Q.missionTimeIntervalMs},toolPolicies:Q.toolPolicies??{"*":{autoApprove:Q.autoApproveTools!==!1}},localRuntime:{configExtensions:Q.configExtensions}});return{sessionId:J.sessionId,startResult:{sessionId:J.sessionId,manifestPath:J.manifestPath,messagesPath:J.messagesPath}}},async sendSession(Q,W){let J=await Z.runTurn({sessionId:Q,prompt:W.prompt,userImages:W.attachments?.userImages,userFiles:W.attachments?.userFiles?.map((X)=>X.content)});if(!J)throw Error("local hub schedule runtime returned no turn result");return{result:sI(J)}},async abortSession(Q){return await Z.abort(Q,Error("hub schedule abort")),{applied:!0}},async stopSession(Q){return await Z.stopSession(Q),{applied:!0}}}}import{resolveClineBuildEnv as AD}from"@cline/shared";function tI($){if(typeof $==="string")return $.trim()||void 0;if(!Array.isArray($))return;return $.map((Q)=>{if(Q&&typeof Q==="object"&&"type"in Q&&Q.type==="text"&&"text"in Q&&typeof Q.text==="string")return Q.text.trim();return""}).filter(Boolean).join(`
|
|
735
|
-
`).trim()||void 0}var DU=120,xY="...";function W9($){let Z=$.trim();if(!Z)return"";if(Buffer.byteLength(Z,"utf8")<=DU)return Z;let Q=DU-Buffer.byteLength(xY,"utf8");if(Q<=0)return xY;let W="";for(let J of Z){if(Buffer.byteLength(W+J,"utf8")>Q)break;W+=J}return`${W}${xY}`}async function TU($){let Z=$?.sessionId?.trim()||"unknown",Q=typeof $?.metadata?.messagesPath==="string"?$.metadata.messagesPath:void 0,J=[...await x$(Q)].reverse().find((V)=>V.role==="assistant"),X=J?tI(J.content):void 0,Y=$?.workspaceRoot?.trim()||"workspace",j=typeof $?.metadata?.prompt==="string"?$.metadata.prompt.trim():Y;return{title:`Task completed (${Z})`,body:W9(X&&X.length>0?X:j.length>0?j:Y),severity:"info"}}import{captureSdkError as o7,createSessionId as sx}from"@cline/shared";import{createSessionId as Qx}from"@cline/shared";import{createSessionId as Zx}from"@cline/shared";function eI($){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 $x($){let Z=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):{};if($.parentSessionId?.trim())Z.parentSessionId=$.parentSessionId;if($.parentAgentId?.trim())Z.parentAgentId=$.parentAgentId;if($.agentId?.trim())Z.agentId=$.agentId;if($.conversationId?.trim())Z.conversationId=$.conversationId;if($.messagesPath?.trim())Z.messagesPath=$.messagesPath;if($.prompt?.trim())Z.prompt=$.prompt;if($.provider?.trim())Z.provider=$.provider;if($.model?.trim())Z.model=$.model;if($.source?.trim())Z.source=$.source;if(typeof $.pid==="number")Z.pid=$.pid;return Object.keys(Z).length>0?Z:void 0}function i7($,Z,Q,W){return{sessionId:$.sessionId,workspaceRoot:$.workspaceRoot,cwd:$.cwd,createdAt:Date.parse($.startedAt),updatedAt:Date.parse($.updatedAt),createdByClientId:Z?.createdByClientId??"hub",status:eI($.status),participants:Z?[...Z.participants.values()]:[],metadata:$x($),runtimeOptions:{enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,mode:typeof $.metadata?.mode==="string"?$.metadata.mode:void 0,systemPrompt:typeof $.metadata?.systemPrompt==="string"?$.metadata.systemPrompt:void 0},runtimeSession:$.agentId?{agentId:$.agentId,team:$.teamName?{teamId:$.teamName}:void 0}:void 0,...Q?{usage:{...Q}}:{},...W?{aggregateUsage:{...W}}:{}}}function c($,Z){return{version:$.version,requestId:$.requestId,ok:!0,...Z!==void 0?{payload:Z}:{}}}function x($,Z,Q){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:Z,message:Q}}}function n7($){return $&&typeof $==="object"&&!Array.isArray($)?$:void 0}function I0($){if(typeof $.payload?.sessionId==="string")return $.payload.sessionId.trim();return $.sessionId?.trim()??""}function r2($,Z,Q){return{version:"v1",event:$,eventId:Zx("hevt_"),sessionId:Q,timestamp:Date.now(),payload:Z}}async function o0($,Z){let Q=await $.sessionHost.getSession(Z);if(!Q)return;let W=await $.sessionHost.getAccumulatedUsage?.(Z);return i7(Q,$.sessionState.get(Z),W?.usage,W?.aggregateUsage)}async function t0($,Z){let Q=await $.sessionHost.getSession(Z);if(!Q)return;let[W,J]=await Promise.all([typeof $.sessionHost.readSessionMessages==="function"?$.sessionHost.readSessionMessages(Z):[],$.sessionHost.getAccumulatedUsage?.(Z)]);return f1({session:Q,messages:W,usage:J?.usage,aggregateUsage:J?.aggregateUsage})}function a7($,Z,Q,W,J={}){let X=$.sessionState.get(Z);if(X){if(J.interactive!==void 0)X.interactive=J.interactive;if(!X.participants.has(Q))X.participants.set(Q,{clientId:Q,attachedAt:Date.now(),role:W});return X}let Y={createdByClientId:Q,interactive:J.interactive??!0,participants:new Map([[Q,{clientId:Q,attachedAt:Date.now(),role:W}]])};return $.sessionState.set(Z,Y),Y}async function gY($,Z){let Q=Qx("approval_"),W=Z.sessionId;if($.sessionState.get(W)?.interactive===!1)return{approved:!1,reason:"Tool approval requires an interactive session, but this session is non-interactive."};return await new Promise((X)=>{$.pendingApprovals.set(Q,{sessionId:W,resolve:X}),$.publish($.buildEvent("approval.requested",{approvalId:Q,sessionId:Z.sessionId,agentId:Z.agentId,conversationId:Z.conversationId,iteration:Z.iteration,toolCallId:Z.toolCallId,toolName:Z.toolName,inputJson:JSON.stringify(Z.input??null),policy:Z.policy},W))})}function mY($,Z,Q){let W=$.pendingApprovals.get(Z);if(!W)return;return $.pendingApprovals.delete(Z),W.resolve(Q),{sessionId:W.sessionId}}function vY($,Z,Q){let W=0;for(let[J,X]of[...$.pendingApprovals.entries()]){if(!Z({approvalId:J,sessionId:X.sessionId}))continue;$.pendingApprovals.delete(J),X.resolve({approved:!1,reason:Q}),$.publish($.buildEvent("approval.resolved",{approvalId:J,approved:!1,cancelled:!0,reason:Q},X.sessionId)),W+=1}return W}async function LU($,Z){let Q=typeof Z.payload?.approvalId==="string"?Z.payload.approvalId.trim():"";if(!$.pendingApprovals.get(Q))return x(Z,"approval_not_found",`Unknown approval: ${Q}`);let J=typeof Z.payload?.reason==="string"?Z.payload.reason:Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)&&typeof Z.payload.payload.reason==="string"?Z.payload.payload.reason:void 0,X=Z.payload?.approved===!0,Y=mY($,Q,{approved:X,reason:J});if(!Y)return x(Z,"approval_not_found",`Unknown approval: ${Q}`);return $.publish($.buildEvent("approval.resolved",{approvalId:Q,approved:X,reason:J},Y.sessionId)),c(Z,{approvalId:Q,approved:X})}import{createSessionId as Xx}from"@cline/shared";function Wx($){if($ instanceof Error)return{name:$.name,message:$.message,stack:$.stack};if($===void 0)return;return $}var _U={debug:10,info:20,warn:30,error:40,silent:50};function Jx(){let $=process.env.CLINE_HUB_LOG_LEVEL?.trim().toLowerCase();if($==="debug"||$==="info"||$==="warn"||$==="error"||$==="silent")return $;return process.env.VITEST?"error":"info"}function u($,Z,Q={}){if(_U[$]<_U[Jx()])return;let W=JSON.stringify({ts:new Date().toISOString(),level:$,component:"hub",message:Z,...Object.fromEntries(Object.entries(Q).map(([J,X])=>[J,Wx(X)]).filter(([,J])=>J!==void 0))});if($==="error"||$==="warn"){console.error(`[hub] ${W}`);return}console.log(`[hub] ${W}`)}function cY($,Z){let Q=Z instanceof Error?Z.stack||Z.message:String(Z);u("error",$,{error:Q})}async function zU($,Z,Q,W,J,X){let Y=Xx("capreq_"),j=performance.now();return u("info","capability.request.start",{requestId:Y,sessionId:Z,capabilityName:Q,targetClientId:J}),await new Promise((V,H)=>{$.pendingCapabilityRequests.set(Y,{sessionId:Z,targetClientId:J,capabilityName:Q,onProgress:X,resolve:(B)=>{if(u(B.ok?"info":"warn","capability.request.end",{requestId:Y,sessionId:Z,capabilityName:Q,targetClientId:J,ok:B.ok,error:B.error,durationMs:Math.round(performance.now()-j)}),!B.ok){H(Error(B.error||`Capability ${Q} was rejected by ${J}.`));return}V(B.payload)}}),$.publish($.buildEvent("capability.requested",{requestId:Y,targetClientId:J,capabilityName:Q,payload:W},Z)),u("info","capability.request.published",{requestId:Y,sessionId:Z,capabilityName:Q,targetClientId:J})})}function OU($,Z){let Q=typeof Z.payload?.requestId==="string"?Z.payload.requestId.trim():"",W=$.pendingCapabilityRequests.get(Q);if(!W)return x(Z,"capability_not_found",`Unknown capability request: ${Q}`);if((Z.clientId?.trim()||"")!==W.targetClientId)return x(Z,"capability_wrong_client",`Capability request ${Q} is owned by ${W.targetClientId}`);if(Z.sessionId?.trim()&&Z.sessionId.trim()!==W.sessionId)return x(Z,"capability_wrong_session",`Capability request ${Q} belongs to session ${W.sessionId}`);let X=Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)?Z.payload.payload:{};return W.onProgress?.(X),c(Z,{requestId:Q})}function d$($,Z,Q){let W=0;for(let[J,X]of[...$.pendingCapabilityRequests.entries()]){if(!Z({requestId:J,...X}))continue;$.pendingCapabilityRequests.delete(J),u("warn","capability.request.cancelled",{requestId:J,sessionId:X.sessionId,capabilityName:X.capabilityName,targetClientId:X.targetClientId,reason:Q}),X.resolve({ok:!1,error:Q}),$.publish($.buildEvent("capability.resolved",{requestId:J,capabilityName:X.capabilityName,targetClientId:X.targetClientId,ok:!1,cancelled:!0,error:Q},X.sessionId)),W+=1}return W}async function qU($,Z){let Q=typeof Z.payload?.sessionId==="string"?Z.payload.sessionId.trim():Z.sessionId?.trim()||"",W=typeof Z.payload?.capabilityName==="string"?Z.payload.capabilityName.trim():"",J=typeof Z.payload?.targetClientId==="string"?Z.payload.targetClientId.trim():"";if(!Q||!W||!J)return x(Z,"invalid_capability_request","capability.request requires sessionId, capabilityName, and targetClientId");try{let X=Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)?Z.payload.payload:{},Y=await $.requestCapability(Q,W,X,J);return c(Z,Y)}catch(X){return x(Z,"capability_request_failed",X instanceof Error?X.message:String(X))}}function MU($,Z){let Q=typeof Z.payload?.requestId==="string"?Z.payload.requestId.trim():"",W=$.pendingCapabilityRequests.get(Q);if(!W)return x(Z,"capability_not_found",`Unknown capability request: ${Q}`);let J=Z.clientId?.trim()||"";if(J!==W.targetClientId)return x(Z,"capability_wrong_client",`Capability request ${Q} is owned by ${W.targetClientId}`);if(Z.sessionId?.trim()&&Z.sessionId.trim()!==W.sessionId)return x(Z,"capability_wrong_session",`Capability request ${Q} belongs to session ${W.sessionId}`);$.pendingCapabilityRequests.delete(Q);let X=Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)?Z.payload.payload:void 0,Y=typeof Z.payload?.error==="string"?Z.payload.error:void 0,j=Z.payload?.ok===!0;return u(j?"info":"warn","capability.respond",{requestId:Q,sessionId:W.sessionId,capabilityName:W.capabilityName,targetClientId:W.targetClientId,respondedByClientId:J,ok:j,error:Y}),W.resolve({ok:j,payload:X,error:Y}),$.publish($.buildEvent("capability.resolved",{requestId:Q,capabilityName:W.capabilityName,targetClientId:W.targetClientId,respondedByClientId:J,ok:j,payload:X,error:Y},W.sessionId)),c(Z,{requestId:Q,ok:j})}import{createSessionId as Yx}from"@cline/shared";function RU($,Z){let Q=Z.payload,W=Q?.clientId?.trim()||Z.clientId?.trim()||Yx("client_");return $.clients.set(W,{clientId:W,clientType:Q?.clientType??"unknown",displayName:Q?.displayName,actorKind:Q?.actorKind??"client",connectedAt:Date.now(),lastSeenAt:Date.now(),transport:Q?.transport??"native",capabilities:Q?.capabilities??[],metadata:Q?.metadata,workspaceContext:Q?.workspaceContext}),$.publish($.buildEvent("hub.client.registered",{clientId:W,clientType:Q?.clientType??"unknown",displayName:Q?.displayName,connectedAt:Date.now()})),c(Z,{clientId:W})}function EU($,Z){let Q=Z.clientId?.trim(),W=Q?$.clients.get(Q):void 0;if(!Q||!W)return x(Z,"client_not_found","Client is not registered with this hub.");let J=n7(Z.payload?.metadata);if(W.lastSeenAt=Date.now(),J)W.metadata=JSON.parse(JSON.stringify(J));return c(Z)}function NU($,Z,Q){let W=Z.clientId?.trim();if(W)$.clients.delete(W),Q(W),$.publish($.buildEvent("hub.client.disconnected",{clientId:W}));return c(Z)}function CU($,Z){return c(Z,{clients:[...$.clients.values()]})}L0();import{existsSync as SU,mkdirSync as jx,readdirSync as Vx,readFileSync as Hx,rmSync as Bx,writeFileSync as Gx}from"node:fs";import{dirname as Kx,join as wU}from"node:path";import{CONNECTOR_PLATFORMS as Fx,connectorChannelsFromPlatforms as Ax,listConnectorCatalog as bU,shouldIncludeConnectorField as fx}from"@cline/shared";import{resolveConnectorDataDir as Ux,resolveConnectorSettingsPath as dY}from"@cline/shared/storage";var Dx=1,PU={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},Tx={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 V9($){return typeof $==="string"?$.trim():void 0}function yU($){if(!SU($))return;try{let Z=JSON.parse(Hx($,"utf8"));return l$(Z)?Z:void 0}catch{return}}function lY(){let $=yU(dY()),Z=l$($?.connectors)?$.connectors:{},Q={};for(let[W,J]of Object.entries(Z)){if(!l$(J))continue;let X=V9(J.type),Y=V9(J.configuredAt),j=V9(J.updatedAt);if(!X||!Y||!j)continue;let V=s7(J.values),H=l$(J.security)?{enabled:J.security.enabled===!0,values:s7(J.security.values)}:void 0;Q[W]={type:X,values:V,security:H,configuredAt:Y,updatedAt:j}}return{version:Dx,connectors:Q}}function hU($){let Z=dY();jx(Kx(Z),{recursive:!0}),Gx(Z,`${JSON.stringify($,null,2)}
|
|
736
|
-
`,"utf8")}function s7($){if(!l$($))return{};let Z={};for(let[Q,W]of Object.entries($))if(typeof W==="string")Z[Q]=W.trim();return Z}function Lx($){if(!Number.isInteger($)||$<=0)return!1;try{return process.kill($,0),!0}catch{return!1}}function _x($){let Z=wU(Ux(),$);if(!SU(Z))return[];return Vx(Z).filter((Q)=>Q.endsWith(".json")&&!Q.endsWith(".threads.json")).map((Q)=>wU(Z,Q))}function zx($,Z,Q){let W=Z.botUsername??Z.userName??Z.applicationId??Z.phoneNumberId??String(Q);return`${$}:${W}`}function Ox($,Z){let Q=yU(Z);if(!Q)return;let W=typeof Q.pid==="number"?Q.pid:void 0,J=typeof Q.hubUrl==="string"?Q.hubUrl:typeof Q.rpcAddress==="string"?Q.rpcAddress:void 0;if(!W||!J||!Lx(W))return;let X=Tx[$];if(!X)return;let Y={};for(let j of X.required){let V=PU[j](Q);if(!V||typeof V==="string"&&!V.trim())return;Y[j]=V}for(let j of X.optional){let V=PU[j](Q);if(V!==void 0)Y[j]=V}return{id:zx($,Y,W),type:$,pid:W,hubUrl:J,...Y}}function qx(){let $=[];for(let{name:Z}of bU())for(let Q of _x(Z)){let W=Ox(Z,Q);if(W)$.push(W)}return $.sort((Z,Q)=>{if(Z.type!==Q.type)return Z.type.localeCompare(Q.type);let W=Z.botUsername??Z.userName??"",J=Q.botUsername??Q.userName??"";return W.localeCompare(J)})}function Mx(){let $=lY();return Object.entries($.connectors).map(([Z,Q])=>({id:Z,type:Q.type,configuredAt:Q.configuredAt,updatedAt:Q.updatedAt})).sort((Z,Q)=>Z.type.localeCompare(Q.type))}function pY(){return{available:Ax(),active:qx(),configured:Mx()}}function Rx($,Z){if($.required&&!Z[$.flag]?.trim())throw Error(`${$.label} is required`)}function Ex($,Z){let Q={};for(let J of $.fields)Q[J.flag]=Z[J.flag]??J.initialValue??"";let W={};for(let J of $.fields){if(!fx(J,Q))continue;Rx(J,Q),W[J.flag]=Q[J.flag]}return W}function Nx($){if(!l$($))throw Error("connector.configure payload must be an object.");let Z=V9($.channel);if(!Z)throw Error("channel is required");let Q=Fx.find((K)=>K.id===Z);if(!Q)throw Error(`unknown connector channel: ${Z}`);if(!new Set(bU().map((K)=>K.name)).has(Q.id))throw Error(`connector channel is not available: ${Z}`);let J=s7($.values),X=Ex(Q,J),Y=l$($.security)?$.security:{},j=Y.enabled===!0,V=s7(Y.values);if(j&&Q.security)for(let K of Q.security.fields){let F=V[K.key];if(!F)throw Error(K.requiredMessage);let A=K.validate?.(F);if(A)throw Error(A)}let H=lY(),B=new Date().toISOString(),G=H.connectors[Z];return H.connectors[Z]={type:Z,values:X,security:j?{enabled:!0,values:V}:{enabled:!1,values:{}},configuredAt:G?.configuredAt??B,updatedAt:B},hU(H),pY()}function Cx($){if(!l$($))throw Error("connector.delete_config payload must be an object.");let Z=V9($.channel);if(!Z)throw Error("channel is required");let Q=lY();if(delete Q.connectors[Z],Object.keys(Q.connectors).length>0)hU(Q);else Bx(dY(),{force:!0});return pY()}function wx($){return $==="connector.configure"||$==="connector.delete_config"}function uY($,Z,Q){if(!wx(Z.command))return;W8($.telemetry,{ulid:Z.sessionId??Z.requestId??"hub",tool:Z.command,success:Q})}async function kU($,Z){try{if(Z.command==="connector.channels")return c(Z,pY());if(Z.command==="connector.configure"){let Q=Nx(Z.payload);return uY($,Z,!0),c(Z,Q)}if(Z.command==="connector.delete_config"){let Q=Cx(Z.payload);return uY($,Z,!0),c(Z,Q)}return x(Z,"unsupported_connector_command",`unsupported connector command: ${Z.command}`)}catch(Q){return uY($,Z,!1),x(Z,"connector_command_failed",Q instanceof Error?Q.message:String(Q))}}var Px=30000;function Sx($){if($==="aborted")return"run.aborted";if($==="error"||$==="failed")return"run.failed";return"run.completed"}function bx($){if($.finishReason!=="error")return;return $.text.trim()||void 0}function yx($,Z,Q){let W=Q instanceof Error&&Q.message.trim()?Q.message:`Unknown session: ${Z}`;return x($,s$,W)}function hx($){return $?$:void 0}function kx($){let Z=typeof $.timeoutMs==="number"?$.timeoutMs:typeof $.timeout_ms==="number"?$.timeout_ms:void 0;if(Z&&Number.isFinite(Z)&&Z>0)return Math.floor(Z);let Q=typeof $.timeoutSeconds==="number"?$.timeoutSeconds:typeof $.timeout_seconds==="number"?$.timeout_seconds:void 0;if(Q&&Number.isFinite(Q)&&Q>0)return Math.floor(Q*1000);return}async function Ix($,Z,Q,W){let J=performance.now(),X=!1,Y={command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Q.sessionId,timeoutMs:W},j=setInterval(()=>{if(X)return;let B=Math.round(performance.now()-J);u("warn","run.heartbeat",{...Y,elapsedMs:B}),$.publish($.buildEvent("run.heartbeat",{requestId:Z.requestId,elapsedMs:B,...W?{timeoutMs:W}:{}},Q.sessionId))},Px),V=$.sessionHost.runTurn(Q);V.then((B)=>{if(!X)return;u("warn","run.late_end",{...Y,elapsedMs:Math.round(performance.now()-J),finishReason:B?.finishReason})},(B)=>{if(!X)return;u("error","run.late_error",{...Y,elapsedMs:Math.round(performance.now()-J),error:B})});let H;try{if(!W)return await V;return await Promise.race([V,new Promise((B,G)=>{H=setTimeout(()=>{let K=`Hub run ${Z.command} timed out after ${W}ms.`;X=!0,clearInterval(j),G(Error(K)),u("error","run.timeout",{...Y,elapsedMs:Math.round(performance.now()-J)}),vY($,(F)=>F.sessionId===Q.sessionId,K),d$($,(F)=>F.sessionId===Q.sessionId,K),$.sessionHost.abort(Q.sessionId,K).catch((F)=>{u("error","run.timeout_abort_failed",{...Y,error:F})})},W)})])}finally{if(X=!0,clearInterval(j),H)clearTimeout(H)}}async function IU($,Z){let Q=I0(Z),W=Z.payload&&typeof Z.payload==="object"?Z.payload:{},J=typeof W.prompt==="string"?W.prompt:typeof W.input==="string"?W.input:"";if(!J.trim())return x(Z,"invalid_session_input","session input requires a prompt string");$.publish($.buildEvent("run.started",void 0,Q));let X=W.attachments&&typeof W.attachments==="object"&&!Array.isArray(W.attachments)?W.attachments:void 0,Y=Array.isArray(X?.userFiles)?X.userFiles.filter((B)=>typeof B==="string"):void 0,j=kx(W);$.suppressNextTerminalEventBySession.set(Q,"run.start.reply");let V;try{V=await Ix($,Z,{sessionId:Q,prompt:J,mode:hx(W.mode),delivery:W.delivery==="queue"||W.delivery==="steer"?W.delivery:void 0,userImages:Array.isArray(X?.userImages)?X.userImages:void 0,userFiles:Y,timeoutMs:j},j)}catch(B){if($.suppressNextTerminalEventBySession.get(Q)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Q);if(I1(B))return yx(Z,Q,B);throw $.publish($.buildEvent("run.failed",{reason:"error",error:B instanceof Error?B.message:String(B)},Q)),B}if(V){let B=await t0($,Q),G=bx(V);if($.publish($.buildEvent(Sx(V.finishReason),{reason:V.finishReason,...G?{error:G}:{},result:V,...B?{snapshot:B}:{}},Q)),$.suppressNextTerminalEventBySession.get(Q)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Q)}else $.suppressNextTerminalEventBySession.delete(Q);let H=await t0($,Q);return c(Z,V||H?{...V?{result:V}:{},...H?{snapshot:H}:{}}:void 0)}async function xU($,Z){let Q=I0(Z),W=typeof Z.payload?.reason==="string"?Z.payload.reason:"Run was aborted before pending approval or capability request was resolved.";vY($,(J)=>J.sessionId===Q,W);try{await $.sessionHost.abort(Q,Z.payload?.reason)}catch(J){u("warn","run.abort_failed",{command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Q,error:J})}finally{d$($,(J)=>J.sessionId===Q,W)}return c(Z,{applied:!0})}async function gU($,Z){let Q=T4(Z.payload?.payload);if(!Q)return x(Z,"invalid_hook_payload","session.hook requires a valid hook event payload");return await $.sessionHost.dispatchHookEvent(Q),c(Z,{applied:!0})}async function mU($,Z){switch(Z.type){case"chunk":return;case"agent_event":await xx($,Z);return;case"hook":if(Z.payload.hookEventName==="tool_call")$.publish($.buildEvent("tool.started",{toolName:Z.payload.toolName},Z.payload.sessionId));else if(Z.payload.hookEventName==="tool_result")$.publish($.buildEvent("tool.finished",{toolName:Z.payload.toolName},Z.payload.sessionId));return;case"team_progress":{let Q={type:"team_progress_projection",version:1,sessionId:Z.payload.sessionId,summary:Z.payload.summary,lastEvent:Z.payload.lifecycle};$.publish($.buildEvent("team.progress",Q,Z.payload.sessionId));return}case"pending_prompts":$.publish($.buildEvent("session.pending_prompts",{sessionId:Z.payload.sessionId,prompts:Z.payload.prompts},Z.payload.sessionId));return;case"pending_prompt_submitted":{let Q={id:Z.payload.id,prompt:Z.payload.prompt,delivery:Z.payload.delivery,attachmentCount:Z.payload.attachmentCount,userImages:Z.payload.userImages,userFiles:Z.payload.userFiles};$.publish($.buildEvent("session.pending_prompt_submitted",{sessionId:Z.payload.sessionId,prompt:Q},Z.payload.sessionId));return}case"session_snapshot":$.publish($.buildEvent("session.updated",{sessionId:Z.payload.sessionId,snapshot:Z.payload.snapshot},Z.payload.sessionId));return;case"status":{let[Q,W]=await Promise.all([o0($,Z.payload.sessionId),t0($,Z.payload.sessionId)]);if(Q)$.publish($.buildEvent("session.updated",{session:Q,...W?{snapshot:W}:{}},Z.payload.sessionId));return}case"ended":await gx($,Z);return;default:return}}async function xx($,Z){let{sessionId:Q,event:W}=Z.payload;if(W.type==="iteration_start"){$.publish($.buildEvent("iteration.started",{iteration:W.iteration},Q));return}if(W.type==="iteration_end"){$.publish($.buildEvent("iteration.finished",{iteration:W.iteration,hadToolCalls:W.hadToolCalls,toolCallCount:W.toolCallCount},Q));return}if(W.type==="content_start"){if(W.contentType==="text"&&typeof W.text==="string"&&W.text.length>0){$.publish($.buildEvent("assistant.delta",{text:W.text},Q));return}if(W.contentType==="reasoning"){if(W.redacted&&!W.reasoning){$.publish($.buildEvent("reasoning.delta",{text:"",redacted:!0},Q));return}if(typeof W.reasoning==="string"&&W.reasoning.length>0)$.publish($.buildEvent("reasoning.delta",{text:W.reasoning,redacted:W.redacted===!0},Q));return}if(W.contentType==="tool"){$.publish($.buildEvent("tool.started",{toolCallId:W.toolCallId,toolName:W.toolName,input:W.input},Q));return}}if(W.type==="content_end"){switch(W.contentType){case"text":$.publish($.buildEvent("assistant.finished",{text:W.text},Q));break;case"reasoning":$.publish($.buildEvent("reasoning.finished",{reasoning:W.reasoning},Q));break;case"tool":$.publish($.buildEvent("tool.finished",{toolCallId:W.toolCallId,toolName:W.toolName,output:W.output,error:W.error},Q));break}return}if(W.type==="usage"){let J;try{J=await $.sessionHost.getAccumulatedUsage?.(Q)}catch{J=void 0}$.publish($.buildEvent("usage.updated",{sessionId:Q,delta:{inputTokens:W.inputTokens,outputTokens:W.outputTokens,cacheReadTokens:W.cacheReadTokens??0,cacheWriteTokens:W.cacheWriteTokens??0,totalCost:W.cost??0},totals:{inputTokens:W.totalInputTokens,outputTokens:W.totalOutputTokens,cacheReadTokens:W.totalCacheReadTokens??0,cacheWriteTokens:W.totalCacheWriteTokens??0,totalCost:W.totalCost??0},usage:J?.usage,aggregateUsage:J?.aggregateUsage,agent:{kind:Z.payload.teamRole==="teammate"?"teammate":W.parentAgentId?"subagent":"lead",agentId:W.agentId,conversationId:W.conversationId,parentAgentId:W.parentAgentId,teamAgentId:Z.payload.teamAgentId,teamRole:Z.payload.teamRole}},Q));return}if(W.type==="done")$.publish($.buildEvent("agent.done",{reason:W.reason,text:W.text,iterations:W.iterations,usage:W.usage},Q))}async function gx($,Z){let Q=$.suppressNextTerminalEventBySession.get(Z.payload.sessionId),W=Q===Z.payload.reason||Q==="run.start.reply";if(W)$.suppressNextTerminalEventBySession.delete(Z.payload.sessionId);let[J,X]=await Promise.all([o0($,Z.payload.sessionId),t0($,Z.payload.sessionId)]);if(Z.payload.reason==="completed"){let Y=await TU(J);$.publish($.buildEvent("ui.notify",Y,Z.payload.sessionId))}if(W)return;$.publish($.buildEvent(Z.payload.reason==="aborted"?"run.aborted":Z.payload.reason==="error"||Z.payload.reason==="failed"?"run.failed":"run.completed",{reason:Z.payload.reason,...X?{snapshot:X}:{}},Z.payload.sessionId))}import{createSessionId as uU,parseRuntimeConfigExtensions as dU}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as i00,HUB_COMPACTION_CAPABILITY as n00,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as a00,HUB_HOOK_CAPABILITY_PREFIX as s00,HUB_MISTAKE_LIMIT_CAPABILITY as o00,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as t00,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as e00,isHubToolExecutorName as mx}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as J10,HUB_COMPACTION_CAPABILITY as X10,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as Y10,HUB_HOOK_CAPABILITY_PREFIX as j10,HUB_MISTAKE_LIMIT_CAPABILITY as V10,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as H10,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as B10}from"@cline/shared";var vx=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function i2($){return $&&typeof $==="object"&&!Array.isArray($)?JSON.parse(JSON.stringify($)):void 0}function cx($,Z){let Q=typeof $.name==="string"?$.name.trim():"",W=typeof $.description==="string"?$.description:"",J=typeof $.capabilityName==="string"?$.capabilityName.trim():"",X=i2($.inputSchema);if(!Q||!W||!X||!J||Z.has(J))return;return Z.add(J),{kind:"tool",capabilityName:J,name:Q,description:W,inputSchema:X,...i2($.lifecycle)?{lifecycle:i2($.lifecycle)}:{}}}function iY($){if(!Array.isArray($))return[];let Z=[],Q=new Set;for(let W of $){if(!W||typeof W!=="object"||Array.isArray(W))continue;let J=W,X=J.kind,Y=typeof J.capabilityName==="string"?J.capabilityName.trim():"";if(!Y||Q.has(Y))continue;if(X==="tool"){let j=cx(J,Q);if(j)Z.push(j);continue}if(X==="toolExecutor"){let j=J.executor;if(!mx(j))continue;Q.add(Y),Z.push({kind:"toolExecutor",capabilityName:Y,executor:j});continue}if(X==="hook"){let j=typeof J.name==="string"?J.name.trim():"";if(!j)continue;Q.add(Y),Z.push({kind:"hook",capabilityName:Y,name:j});continue}if(X==="compaction"){Q.add(Y),Z.push({kind:"compaction",capabilityName:Y,...i2(J.config)?{config:i2(J.config)}:{}});continue}if(X==="checkpoint"){Q.add(Y),Z.push({kind:"checkpoint",capabilityName:Y,...i2(J.config)?{config:i2(J.config)}:{}});continue}if(X==="mistakeLimit"){Q.add(Y),Z.push({kind:"mistakeLimit",capabilityName:Y});continue}if(X==="userInstructionService")Q.add(Y),Z.push({kind:"userInstructionService",capabilityName:Y})}return Z}function cU($){return{agentId:$.agentId,conversationId:$.conversationId,iteration:$.iteration,metadata:$.metadata}}function ux($){return Object.hasOwn($,"update")?$.update:$}function H9($){return $.trim().replace(/^\/+/,"").toLowerCase()}function dx($){let Z=($??[]).map(H9).filter(Boolean);return Z.length>0?new Set(Z):void 0}function lx($,Z,Q){if(!Q)return!0;let W=H9($),J=H9(Z),X=W.includes(":")?W.split(":").at(-1)??W:W,Y=J.includes(":")?J.split(":").at(-1)??J:J;return Q.has(W)||Q.has(J)||Q.has(X)||Q.has(Y)}function rY($,Z){let Q=dx(Z);return $.records.skill.map((W)=>({id:W.id,name:W.item.name,description:"description"in W.item&&typeof W.item.description==="string"?W.item.description:void 0,disabled:W.item.disabled===!0,skill:W.item})).filter((W)=>lx(W.id,W.name,Q))}function vU($,Z){let Q=async(W,J)=>{let X=H9(W),j=rY($,Z).filter((K)=>K.id===X||H9(K.name)===X||K.id.endsWith(`:${X}`)).filter((K)=>!K.disabled);if(j.length!==1)return j.length>1?`Skill "${W}" is ambiguous. Use one of: ${j.map((K)=>K.id).join(", ")}`:`Skill "${W}" not found.`;let V=j[0].skill,H=J?.trim(),B=H?`
|
|
726
|
+
${V}`:""}`);let H=uy($);if(G7($))throw Error(`Skill uninstall completed, but ${$.name??$.id} is still present in Cline's global skills directories.`);return{id:$.id,type:"skill",status:"uninstalled",message:`Uninstalled ${$.name??$.id}.`,output:[V,...H.map((B)=>`Removed: ${B}`)].filter(Boolean).join(`
|
|
727
|
+
`)||void 0}}async function F7($,Z={}){let[Q]=cX($),W=Q?.trim()||$.id;if(!W)throw Error("Plugin marketplace uninstalls require a plugin name.");let J=await i5({name:W,workspaceRoot:Z.workspaceRoot});return{id:$.id,type:"plugin",status:"uninstalled",message:`Uninstalled ${$.name??J.name??$.id}.`,output:[`Path: ${J.installPath}`,...J.removedPaths.map((X)=>`Removed: ${X}`)].join(`
|
|
728
|
+
`)}}async function dX($,Z={}){if($.type==="mcp"){let Q=a5($);if(Z.deleteMcpServer)await Z.deleteMcpServer(Q);else B7($,Z);return{id:$.id,type:$.type,status:"uninstalled",message:`Uninstalled ${$.name??Q??$.id}.`}}if($.type==="skill")return K7($,Z);if($.type==="plugin")return F7($,Z);throw Error(`Unsupported marketplace entry type: ${$.type}`)}var Lf={};N(Lf,{parsePluginSource:()=>O7,isOfficialPluginSlug:()=>T7,installPlugin:()=>aX,collectPluginMcpOAuthCandidates:()=>q7});import{spawn as dy}from"node:child_process";import{createHash as ly}from"node:crypto";import{existsSync as T1,mkdirSync as rX,readdirSync as py,readFileSync as ry,renameSync as A7,rmSync as D7,statSync as iX}from"node:fs";import{cp as pX,mkdir as Kf,writeFile as L7}from"node:fs/promises";import{homedir as Xf}from"node:os";import{basename as W$,dirname as Yf,extname as iy,join as n,relative as Ff,resolve as v$,sep as ny}from"node:path";import{isPluginModulePath as U7,resolveClineDir as ay,resolvePluginModuleEntries as sy}from"@cline/shared/storage";var M4="_installed",_7="package",oy="https://github.com/cline/plugins.git",jf=30000,f7=10485760,Vf="@cline/",ty=["dependencies","devDependencies","optionalDependencies","peerDependencies"],ey={name:"cline-installed-plugin",private:!0,cline:{plugins:[]}};function z7($){if($==="~")return Xf();if($.startsWith("~/"))return n(Xf(),$.slice(2));return $}function Af($){return $.split(ny).join("/")}function u2($){return ly("sha256").update($).digest("hex").slice(0,12)}function $h($){let Z=0;while(Z<$.length&&$[Z]==="-")Z++;let Q=$.length;while(Q>Z&&$[Q-1]==="-")Q--;return $.slice(Z,Q)}function Q$($){let Z="",Q=!1,W=$.startsWith("@")?$.slice(1):$;for(let X of W.slice(0,256)){if(X>="a"&&X<="z"||X>="A"&&X<="Z"||X>="0"&&X<="9"||X==="."||X==="_"||X==="-")Z+=X,Q=X==="-";else if(!Q)Z+="-",Q=!0;if(Z.length>=80)break}return $h(Z)||"plugin"}function T7($){return/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test($.trim())}function Zh($){return $?.trim()||oy}function Hf($){let Q=$.trim().match(/^(@?[^@/]+(?:\/[^@/]+)?)(?:@.+)?$/);if(!Q?.[1])throw Error(`Invalid npm plugin source: npm:${$}`);return{name:Q[1]}}function Qh($){if($.startsWith(".")||$.startsWith("/")||$==="~"||$.startsWith("~/")||/^[A-Za-z]:[\\/]|^\\\\/.test($))return!1;let[Z,...Q]=$.split("/");return!!Z&&Q.length>=2&&Z.includes(".")&&!Z.startsWith(".")&&!Z.endsWith(".")}function Wh($){let Z=$.match(/^git@([^:]+):(.+)$/);if(Z){let Y=Z[2]??"",j=Y.indexOf("@");if(j<0)return{repo:$};return{repo:`git@${Z[1]}:${Y.slice(0,j)}`,ref:Y.slice(j+1)||void 0}}if($.includes("://"))try{let Y=new URL($),j=Y.pathname.replace(/^\/+/,""),V=j.indexOf("@");if(V<0)return{repo:$};return Y.pathname=`/${j.slice(0,V)}`,{repo:Y.toString().replace(/\/$/,""),ref:j.slice(V+1)||void 0}}catch{return{repo:$}}let Q=$.indexOf("/");if(Q<0)return{repo:$};let W=$.slice(0,Q),J=$.slice(Q+1),X=J.indexOf("@");if(X<0)return{repo:$};return{repo:`${W}/${J.slice(0,X)}`,ref:J.slice(X+1)||void 0}}function Jh($){try{return decodeURIComponent($)}catch{return $}}function Xh($){return W$(Jh($))||"plugin"}function Yh($){let Z=$.split("/").filter(Boolean);return Z.length>=5&&(Z[2]==="blob"||Z[2]==="raw")}function Bf($){if(!/^https?:\/\//i.test($))return null;let Z;try{Z=new URL($)}catch{return null}let Q=Z.hostname.toLowerCase(),W=Xh(Z.pathname),J=U7(W),X=(Q==="github.com"||Q==="www.github.com")&&Yh(Z.pathname);if(Z.protocol!=="https:"){if(X||Q==="raw.githubusercontent.com"||J)throw Error(`Remote plugin file URLs must use https: ${$}`);return null}if(Q==="github.com"||Q==="www.github.com"){let Y=Z.pathname.split("/").filter(Boolean);if(!X)return null;if(!J)throw Error(`Remote plugin file must be .js or .ts: ${$}`);return{type:"remote",url:`https://raw.githubusercontent.com/${[Y[0],Y[1],...Y.slice(3)].join("/")}`,filename:W}}if(Q==="raw.githubusercontent.com"){if(!J)throw Error(`Remote plugin file must be .js or .ts: ${$}`);return{type:"remote",url:Z.toString(),filename:W}}if(!J)return null;return{type:"remote",url:Z.toString(),filename:W}}function Gf($,Z={}){let Q=$.trim(),W=Q.startsWith("git:")&&!Q.startsWith("git://"),J=W?Q.slice(4).trim():Q;if(!Z.force&&!W&&!/^(https?|ssh|git):\/\//i.test(J))return null;let{repo:X,ref:Y}=Wh(J),j="",V="";if(X.startsWith("git@")){let G=X.match(/^git@([^:]+):(.+)$/);j=G?.[1]??"",V=G?.[2]??""}else if(/^(https?|ssh|git):\/\//i.test(X)){let G=new URL(X);j=G.hostname,V=G.pathname.replace(/^\/+/,"")}else{let G=X.indexOf("/");if(G<0)return null;j=X.slice(0,G),V=X.slice(G+1)}let H=V.replace(/\.git$/,"").replace(/^\/+/,"");if(!j||!H||H.split("/").length<2)return null;return{type:"git",repo:X.startsWith("git@")||/^(https?|ssh|git):\/\//i.test(X)?X:`https://${X}`,ref:Y,host:j,path:H}}function O7($,Z){let Q=$.trim();if(!Q)throw Error("plugin install requires a source");if(Z==="npm"){let Y=Q.startsWith("npm:")?Q.slice(4).trim():Q,{name:j}=Hf(Y);return{type:"npm",spec:Y,name:j}}if(Z==="git"){let Y=Gf(Q,{force:!0});if(!Y)throw Error(`Invalid git plugin source: ${$}`);return Y}if(Z==="local")return{type:"local",path:$};if(Z==="remote"){let Y=Bf(Q);if(!Y)throw Error(`Invalid remote plugin source: ${$}`);return Y}if(Q.startsWith("npm:")){let Y=Q.slice(4).trim(),{name:j}=Hf(Y);return{type:"npm",spec:Y,name:j}}if(Q.startsWith(".")||Q.startsWith("/")||Q==="~"||Q.startsWith("~/")||/^[A-Za-z]:[\\/]|^\\\\/.test(Q))return{type:"local",path:$};let J=Bf(Q);if(J)return J;let X=Gf(Q);if(X)return X;if(T7(Q))return{type:"official",slug:Q};if(Qh(Q))throw Error(`Unrecognized plugin source "${$}". Use --git for hostname-style repositories or pass an explicit local path such as ./github.com/owner/repo.`);return{type:"local",path:$}}function jh($){return $?n($,".cline","plugins"):n(ay(),"plugins")}function Vh($,Z,Q){if(Z.type==="npm")return n($,M4,"npm",`${Q$(Z.name)}-${u2(Q)}`);if(Z.type==="git")return n($,M4,"git",Q$(Z.host),`${Q$(Z.path)}-${u2(Q)}`);if(Z.type==="remote")return n($,M4,"remote",`${Q$(Z.filename)}-${u2(Q)}`);if(Z.type==="official")return n($,M4,"official",`${Q$(Z.slug)}-${u2(Q)}`);return n($,M4,"local",`${Q$(W$(z7(Z.path)))}-${u2(Q)}`)}function Hh($,Z,Q){if($.type==="npm")return`npm:${$.spec}`;if($.type==="git")return`git:${$.repo}${$.ref?`#${$.ref}`:""}`;if($.type==="remote")return`remote:${$.url}`;if($.type==="official")return`official:${Q}#plugins/${$.slug}`;return`local:${v$(Z,z7($.path))}`}function Bh($,Z){if($.type==="npm")return $.name;if($.type==="git")return Q$(W$($.path));if($.type==="remote")return Q$(W$($.filename,iy($.filename)));if($.type==="official")return $.slug;return Q$(W$(v$(Z,z7($.path))))}async function R4($,Z,Q={}){await new Promise((W,J)=>{let X=dy($,Z,{cwd:Q.cwd,stdio:["ignore","ignore","pipe"],env:process.env,windowsHide:!0}),Y="";X.stderr.on("data",(j)=>{Y+=String(j)}),X.on("error",J),X.on("close",(j)=>{if(j===0){W();return}let V=Y.trim();J(Error(`${$} ${Z.join(" ")} failed with exit code ${j}${V?`: ${V}`:""}`))})})}function ff($){let Z=n($,"package.json");if(!T1(Z))return null;try{return JSON.parse(ry(Z,"utf8"))}catch{return null}}function Gh($){let Z=$?.cline?.plugins;if(!Array.isArray(Z))return[];return Z.flatMap((Q)=>{if(typeof Q==="string")return[Q];return Q.paths??[]})}async function Kh($){let Z=n($,"package.json"),Q=ff($);if(!Q)return;let W=!1;for(let J of ty){let X=Q[J];if(!X||typeof X!=="object")continue;for(let Y of Object.keys(X)){if(!Y.startsWith(Vf))continue;delete X[Y],delete Q.peerDependenciesMeta?.[Y],W=!0}if(Object.keys(X).length===0)delete Q[J]}if(Q.peerDependenciesMeta){for(let J of Object.keys(Q.peerDependenciesMeta)){if(!J.startsWith(Vf))continue;delete Q.peerDependenciesMeta[J],W=!0}if(Object.keys(Q.peerDependenciesMeta).length===0)delete Q.peerDependenciesMeta}if(!W)return;await L7(Z,`${JSON.stringify(Q,null,2)}
|
|
729
|
+
`,"utf8")}function Fh($,Z){let Q=n($,"node_modules","@cline");if(!T1(Q))return;for(let W of Df(Q)){if(`@cline/${W.name}`===Z)continue;D7(n(Q,W.name),{recursive:!0,force:!0})}}function Uf($){let Z=Gh(ff($)).map((X)=>v$($,X)).filter((X)=>T1(X)&&iX(X).isFile()&&U7(X));if(Z.length>0)return Z;let Q=sy($);if(Q?.length)return Q;let W=[],J=[$];while(J.length>0){let X=J.pop();if(!X)continue;for(let Y of Df(X)){let j=n(X,Y.name);if(Y.name==="node_modules"||Y.name===".git")continue;if(Y.isDirectory()){J.push(j);continue}if(Y.isFile()&&!Y.name.startsWith(".")&&U7(j))W.push(j)}}return W.sort((X,Y)=>X.localeCompare(Y))}function Df($){try{return py($,{withFileTypes:!0})}catch{return[]}}function Ah($,Z){let Q=Uf(Z);if(Q.length===0)throw Error(`No plugin entry files found in ${Z}`);return Q.map((W)=>`./${Af(Ff($,W))}`)}async function fh($,Z,Q){let W=Ah($,Z);return await L7(n($,"package.json"),JSON.stringify({...ey,name:Q,cline:{plugins:[{paths:W}]}},null,2),"utf8"),W}async function Uh($,Z,Q){let W=n(Z,_7);return await Kf(W,{recursive:!0}),await L7(n(W,"package.json"),JSON.stringify({name:"cline-plugin-install",private:!0},null,2),"utf8"),await R4(Q,["install",$.spec,"--prefix",W,"--omit=dev","--omit=peer","--legacy-peer-deps","--no-audit","--no-fund","--package-lock=false"]),Fh(W,$.name),n(W,"node_modules",$.name)}async function nX($,Z){if(!T1(n($,"package.json")))return;await Kh($),await R4(Z,["install","--omit=dev","--omit=peer","--legacy-peer-deps","--no-audit","--no-fund","--package-lock=false"],{cwd:$})}async function Dh($,Z,Q){if($.ref?.startsWith("-"))throw Error(`Invalid git ref "${$.ref}".`);let W=n(Z,_7),J=["clone","--filter=blob:none"];if($.ref)J.push("--branch",$.ref);J.push("--",$.repo,W);try{await R4("git",J)}catch(X){if(!$.ref)throw X;await R4("git",["clone","--filter=blob:none","--",$.repo,W]),await R4("git",["checkout","--detach",$.ref],{cwd:W})}return await nX(W,Q),W}async function Lh($,Z,Q,W){let J=n(Z,"repo");await R4("git",["clone","--filter=blob:none","--depth","1","--",W,J]);let X=n(J,"plugins",$.slug);if(!T1(X)||!iX(X).isDirectory())throw Error(`Official Cline plugin "${$.slug}" was not found at plugins/${$.slug} in ${W}`);let Y=n(Z,_7);return await pX(X,Y,{recursive:!0,filter:(j)=>{let V=W$(j);return V!==".git"&&V!=="node_modules"}}),D7(J,{recursive:!0,force:!0}),await nX(Y,Q),Y}function lX($){return Error(`Remote plugin file from ${$} exceeds the ${f7} byte limit`)}function _h($){let Z=$.headers.get("content-length");if(!Z)return;let Q=Number(Z);if(!Number.isFinite(Q)||Q<0)return;return Q}async function zh($,Z){let Q=_h($);if(Q!==void 0&&Q>f7)throw lX(Z);if(!$.body){let Y=Buffer.from(await $.text(),"utf8");if(Y.byteLength>f7)throw lX(Z);return Y}let W=$.body.getReader(),J=[],X=0;try{while(!0){let{done:Y,value:j}=await W.read();if(Y)break;let V=Buffer.from(j);if(X+=V.byteLength,X>f7)throw await W.cancel().catch(()=>{return}),lX(Z);J.push(V)}return Buffer.concat(J,X)}finally{W.releaseLock()}}async function Th($,Z){let Q=new AbortController,W=setTimeout(()=>{Q.abort()},jf);try{let J=await fetch($.url,{signal:Q.signal});if(!J.ok){let Y=J.statusText?` ${J.statusText}`:"";throw Error(`Failed to download plugin file from ${$.url}: ${J.status}${Y}`)}let X=await zh(J,$.url);return rX(Z,{recursive:!0}),await L7(n(Z,$.filename),X),Z}catch(J){if(J instanceof Error&&J.name==="AbortError")throw Error(`Timed out downloading plugin file from ${$.url} after ${jf}ms`);throw J}finally{clearTimeout(W)}}async function Oh($,Z,Q,W){let J=v$(Q,z7($.path));if(!T1(J))throw Error(`Plugin source path does not exist: ${J}`);let X=iX(J);if(X.isFile()){if(!U7(J))throw Error(`Plugin file must be .js or .ts: ${J}`);rX(Z,{recursive:!0});let j=n(Z,W$(J));return await pX(J,j),Z}if(!X.isDirectory())throw Error(`Plugin source must be a file or directory: ${J}`);let Y=n(Z,_7);return await pX(J,Y,{recursive:!0,filter:(j)=>{let V=W$(j);return V!==".git"&&V!=="node_modules"}}),await nX(Y,W),Y}function qh($,Z){if(T1($)&&!Z)throw Error(`Plugin is already installed at ${$}. Use --force to replace it.`)}function Mh($,Z,Q){if(rX(Yf(Z),{recursive:!0}),!T1(Z)){A7($,Z);return}if(!Q)throw Error(`Plugin is already installed at ${Z}. Use --force to replace it.`);let W=n(Yf(Z),`.replace-${W$(Z)}-${Date.now()}-${process.pid}-${u2(`${Z}:${Math.random()}`)}`);A7(Z,W);try{A7($,Z)}catch(J){if(!T1(Z)&&T1(W))A7(W,Z);throw J}try{D7(W,{recursive:!0,force:!0})}catch{}}function Rh($){let Z=$.transport;if(Z.type==="stdio")return!1;return Z.headers!==void 0&&Object.keys(Z.headers).length>0}function Eh($){let Z=$.oauth?.tokens?.access_token;return typeof Z==="string"&&Z.trim().length>0}function Nh($){let Z=$.metadata;if(!Z||Z.source!=="plugin"||typeof Z.pluginName!=="string"||typeof Z.pluginPath!=="string")return;return{pluginName:Z.pluginName,pluginPath:Z.pluginPath}}function q7($){let Z=new Set($.pluginPaths.map((J)=>v$(J)));if(Z.size===0)return[];let Q;try{Q=p0({filePath:$.settingsPath??Z0()})}catch{return[]}let W=[];for(let J of Q){let X=Nh(J);if(!X||!Z.has(v$(X.pluginPath)))continue;let Y=J.transport.type;if(Y==="stdio")continue;if(Rh(J)||Eh(J))continue;W.push({name:J.name,pluginName:X.pluginName,pluginPath:X.pluginPath,transportType:Y,lastError:J.oauth?.lastError})}return W.sort((J,X)=>J.name.localeCompare(X.name))}async function aX($){let Z=$.source.trim(),Q=O7(Z,$.sourceType),W=$.cwd?.trim(),J=W?v$(W):process.cwd(),X=jh(W?J:void 0),Y=Zh($.officialPluginsRepo),j=Hh(Q,J,Y),V=Vh(X,Q,j),H=Bh(Q,J),B=n(X,M4,".tmp"),G=n(B,`${Date.now()}-${process.pid}-${u2(`${Z}:${Math.random()}`)}`),K=$.npmCommand??(process.env.CLINE_NPM_COMMAND?.trim()||"npm"),F=$.force===!0;qh(V,F),await Kf(B,{recursive:!0});let A;try{if(Q.type==="npm")A=await Uh(Q,G,K);else if(Q.type==="git")A=await Dh(Q,G,K);else if(Q.type==="official")A=await Lh(Q,G,K,Y);else if(Q.type==="remote")A=await Th(Q,G);else A=await Oh(Q,G,J,K);let L=(Q.type==="local"||Q.type==="remote")&&A===G?Uf(G).map((U)=>`./${Af(Ff(G,U))}`):await fh(G,A,H);if(L.length===0)throw Error(`No plugin entry files found for ${Z}`);Mh(G,V,F);let f={source:Z,installPath:V,entryPaths:L.map((U)=>v$(V,U)),mcpSyncFailures:[],mcpOAuthCandidates:[]},D=await p5({pluginPaths:f.entryPaths,cwd:J,workspacePath:J});return f.mcpSyncFailures=D.failures,f.mcpOAuthCandidates=q7({pluginPaths:f.entryPaths}),f}catch(L){throw D7(G,{recursive:!0,force:!0}),L}}var mf={};N(mf,{updateLocalProvider:()=>S7,saveLocalProviderSettings:()=>WY,saveLocalProviderOAuthCredentials:()=>jY,resolveLocalClineAuthToken:()=>HY,refreshProviderModelsFromSource:()=>JY,normalizeOAuthProvider:()=>XY,loginLocalProvider:()=>YY,loginAndSaveLocalProviderOAuthCredentials:()=>VY,listLocalProviders:()=>ZY,getLocalProviderModels:()=>QY,ensureCustomProvidersLoaded:()=>w7,deleteLocalProvider:()=>b7,addLocalProvider:()=>$Y});import*as w0 from"@cline/llms";import{existsSync as wh,mkdirSync as Ch,readFileSync as Ph,writeFileSync as Sh}from"node:fs";import{mkdir as bh,readFile as yh,writeFile as hh}from"node:fs/promises";import{dirname as sX,join as kh}from"node:path";import*as h0 from"@cline/llms";import{ModelCapabilitySchema as Ih,ProviderCapabilitySchema as xh,ProviderClientSchema as gh,ProviderProtocolSchema as mh}from"@cline/shared";import{z as a}from"zod";var vh=a.object({id:a.string().optional(),name:a.string().optional(),maxTokens:a.number().optional(),contextWindow:a.number().optional(),maxInputTokens:a.number().optional(),capabilities:a.array(Ih).optional(),supportsVision:a.boolean().optional(),supportsAttachments:a.boolean().optional(),supportsReasoning:a.boolean().optional()}).passthrough(),ch=a.object({name:a.string(),baseUrl:a.string(),defaultModelId:a.string().optional(),protocol:mh.optional(),client:gh.optional(),capabilities:a.array(xh).optional(),modelsSourceUrl:a.string().optional()}).passthrough(),_f=a.object({provider:ch.optional(),models:a.record(a.string(),vh).optional()}).passthrough(),zf=a.object({version:a.literal(1),providers:a.record(a.string(),_f)}),uh=a.object({version:a.literal(1),providers:a.record(a.string(),a.unknown())}),M7=new Set;function Tf($){return $.split(/[-_]/).filter(Boolean).map((Z)=>Z.charAt(0).toUpperCase()+Z.slice(1)).join(" ")}function d2($){return kh(sX($.getFilePath()),"models.json")}function R7(){return{version:1,providers:{}}}function Of($){let Z=uh.safeParse($);if(!Z.success)return R7();let Q={};for(let[W,J]of Object.entries(Z.data.providers)){let X=_f.safeParse(J);if(X.success)Q[W]=X.data}return{version:1,providers:Q}}function oX($){if(!wh($))return R7();try{let Z=Ph($,"utf8");return Of(JSON.parse(Z))}catch{}return R7()}async function E4($){try{let Z=await yh($,"utf8");return Of(JSON.parse(Z))}catch{}return R7()}function qf($,Z){Ch(sX($),{recursive:!0});let Q=zf.parse(Z);Sh($,`${JSON.stringify(Q,null,2)}
|
|
730
|
+
`,"utf8")}async function E7($,Z){await bh(sX($),{recursive:!0});let Q=zf.parse(Z);await hh($,`${JSON.stringify(Q,null,2)}
|
|
731
|
+
`,"utf8")}function Mf($,Z){return{id:$,name:Z.name??$,supportsAttachments:Z.capabilities?.includes("files"),supportsVision:Z.capabilities?.includes("images"),supportsReasoning:Z.capabilities?.includes("reasoning")||Z.thinkingConfig!=null}}function Rf($){if(!$||$.length===0)return;let Z=new Set;if($.includes("reasoning"))Z.add("reasoning");if($.includes("prompt-cache"))Z.add("prompt-cache");if($.includes("tools"))Z.add("tools");return Z.size>0?[...Z]:void 0}function Ef($){let Z=new Set;if(!$||$.length===0)return[...Z];if($.includes("streaming"))Z.add("streaming");if($.includes("tools"))Z.add("tools");if($.includes("reasoning"))Z.add("reasoning");if($.includes("prompt-cache"))Z.add("prompt-cache");if($.includes("vision"))Z.add("images"),Z.add("files");return[...Z]}function dh($){return $!=null&&typeof $.name==="string"&&typeof $.baseUrl==="string"}function Nf($,Z){return $??Z??"openai-chat"}function wf($,Z,Q){return $??Q??(Z==="openai-responses"?"openai":"openai-compatible")}function Cf($,Z,Q){let W=new Set(Z?.capabilities??Q??[]);if(Z?.supportsVision)W.add("images");if(Z?.supportsAttachments)W.add("files");if(Z?.supportsReasoning)W.add("reasoning");return{id:$,name:Z?.name??$,maxTokens:Z?.maxTokens,contextWindow:Z?.contextWindow,maxInputTokens:Z?.maxInputTokens,capabilities:W.size>0?[...W]:void 0}}function lh($,Z){for(let[Q,W]of Object.entries(Z??{})){let J=W.id?.trim()||Q.trim();if(!J)continue;h0.registerModel($,J,Cf(J,W))}}function ph($,Z,Q){return{...Z??{},id:$,name:Z?.name??$,capabilities:Z?.capabilities??Q}}function rh($){return Object.assign({},...h0.resolveProviderModelCatalogKeys($).map((Q)=>h0.getGeneratedModelsForProvider(Q)))}function ih($){let Z=$.provider.trim();if(!Z||h0.isBuiltInProviderId(Z))return;let Q=$.baseUrl?.trim();if(!Q)return;let W=h0.MODEL_COLLECTIONS_BY_PROVIDER_ID[Z],J=rh(Z),X=Ef($.capabilities),Y=X.length>0?X:void 0,j=$.model?.trim(),V={...J,...W?.models??{}};if(j)V[j]=ph(j,V[j],Y);let H=Object.keys(V).filter(Boolean),B=j||H[0];if(!B)return;let G=Nf($.protocol,W?.provider.protocol),K=wf($.client,G,W?.provider.client);h0.registerProvider({provider:{id:Z,name:W?.provider.name??Tf(Z),description:W?.provider.description,protocol:G,client:K,baseUrl:Q,modelsSourceUrl:W?.provider.modelsSourceUrl,defaultModelId:B,capabilities:Rf($.capabilities)??W?.provider.capabilities,source:"file"},models:V})}function N7($){for(let Z of Object.values($.providers))ih(Z.settings)}function e5($,Z){let Q=Z.models??{};if(!dh(Z.provider)){lh($,Q);return}let W=Ef(Z.provider.capabilities),J=Object.entries(Q).map(([H,B])=>({id:B.id?.trim()||H.trim(),model:B})).filter(({id:H})=>H.length>0),X=Z.provider.defaultModelId?.trim()||J[0]?.id||"default",Y=Nf(Z.provider.protocol,void 0),j=wf(Z.provider.client,Y,void 0),V=Object.fromEntries(J.map(({id:H,model:B})=>[H,{...Cf(H,B,W.length>0?W:void 0),status:"active"}]));h0.registerProvider({provider:{id:$,name:Z.provider.name.trim()||Tf($),protocol:Y,client:j,baseUrl:Z.provider.baseUrl,modelsSourceUrl:Z.provider.modelsSourceUrl,defaultModelId:X,capabilities:Rf(Z.provider.capabilities),source:"file"},models:V})}function Pf($){let Z=d2($);if(M7.has(Z))return;let Q=oX(Z);for(let[W,J]of Object.entries(Q.providers))e5(W,J);M7.add(Z)}async function w7($){let Z=d2($);if(M7.has(Z))return;let Q=await E4(Z);for(let[W,J]of Object.entries(Q.providers))e5(W,J);M7.add(Z)}var bf="cline-pass";function nh($){return $.apiKey??$.auth?.apiKey}function ah($){return($.auth?.accessToken?.trim()??"").length>0}function yf($){return $.split(/[-_]/).filter(Boolean).map((Z)=>Z.charAt(0).toUpperCase()+Z.slice(1)).join(" ")}function sh($){let Z=$.split(/\s+/).filter(Boolean);if(Z.length===0)return"?";if(Z.length===1)return Z[0].slice(0,2).toUpperCase();return`${Z[0][0]}${Z[1][0]}`.toUpperCase()}function oh($){let Z=["#c4956a","#6b8aad","#e8963a","#5b9bd5","#6bbd7b","#9b7dd4","#d07f68","#57a6a1"],Q=0;for(let W of $)Q=Q*31+W.charCodeAt(0)>>>0;return Z[Q%Z.length]}function hf($){return Object.entries($).sort(([Z],[Q])=>Z.localeCompare(Q)).map(([Z,Q])=>Mf(Z,Q))}async function th($,Z){let Q=await w0.getModelsForProvider($),W=$===bf;if(!Z&&!W)return Q;let J=await e6($,{loadLatestOnInit:W,loadPrivateOnAuth:!0,failOnError:!1},Z);if($==="litellm"&&J?.knownModels)return J.knownModels;if(W&&J?.knownModels)return J.knownModels;return J?.knownModels?{...Q,...J.knownModels}:Q}function tX($){return[...new Set(($??[]).map((Z)=>Z.trim()).filter(Boolean))]}function eh($){if(!$?.length)return;return[...new Set($)]}function $k($,Z){return eh([...$??[],...Z??[]])}function Zk($){let Z=$?.popularRank;return typeof Z==="number"&&Number.isFinite(Z)?Z:Number.MAX_SAFE_INTEGER}function Qk($){if(!$||typeof $!=="object")return!1;let Z=$;return typeof Z.path==="string"&&Z.path.trim().length>0&&typeof Z.label==="string"&&Z.label.trim().length>0&&["text","password","url","number","select","boolean"].includes(String(Z.type))}function Wk($){let Z=$?.configFields;if(!Array.isArray(Z))return;return Z.filter(Qk)}var C7={path:"apiKey",label:"API Key",type:"password",placeholder:"Enter API key...",description:"API key issued by the provider.",secret:!0},Sf={path:"baseUrl",label:"Base URL",type:"url",placeholder:"https://...",description:"Base endpoint used for provider requests."};function Jk($){if(!$)return[C7];if($.source!=="system")return $.baseUrl?[C7,Sf]:[C7];let Z=[];if($.env?.length)Z.push(C7);if($.baseUrl)Z.push(Sf);return Z}function Xk($,Z){return Z.split(".").reduce((Q,W)=>{if(!Q||typeof Q!=="object")return;return Q[W]},$)}function Yk($){if(typeof $==="string"||typeof $==="number"||typeof $==="boolean"||$===null)return $;return}function jk($,Z,Q){if(!$?.length)return;let W={};for(let J of $){let Y=Yk(J.path==="baseUrl"&&Z?.baseUrl===void 0?Q?.baseUrl:Xk(Z,J.path))??J.defaultValue;if(Y!==void 0)W[J.path]=Y}return W}function kf($){let Z=Object.entries($??{}).filter(([Q])=>Q.trim().length>0);return Z.length>0?Object.fromEntries(Z):void 0}function eX($,Z){let Q=Z?.includes("vision")??!1,W=Z?.includes("reasoning")??!1;return Object.fromEntries($.map((J)=>[J,{id:J,name:J,supportsVision:Q,supportsAttachments:Q,supportsReasoning:W}]))}async function If($){if(!$.shouldRecompute)return $.fallbackModelIds??[];let Z=$.modelsSourceUrl?await pZ($.modelsSourceUrl,$.providerId):[];return[...new Set([...$.explicitModels??[],...Z])]}function xf($,Z){let Q=$.read(),W=!1;if(Q.providers[Z])delete Q.providers[Z],W=!0;if(Q.lastUsedProvider===Z)delete Q.lastUsedProvider,W=!0;if(W)$.write(Q);w0.unregisterProvider(Z)}async function $Y($,Z){let Q=Z.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let W=Z.baseUrl.trim(),J=Z.apiKey?.trim()??"";if(!W&&!J){let A=d2($);if((await E4(A)).providers[Q]){let f=await b7($,{providerId:Q});return{providerId:Q,settingsPath:f.settingsPath,modelsPath:f.modelsPath,modelsCount:0}}return xf($,Q),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:A,modelsCount:0}}if(w0.hasProvider(Q))throw Error(`provider "${Q}" already exists`);let X=Z.name.trim();if(!X)throw Error("name is required");if(!W)throw Error("baseUrl is required");let Y=tX(Z.models),j=Z.modelsSourceUrl?.trim(),V=await If({providerId:Q,explicitModels:Y,modelsSourceUrl:j,shouldRecompute:!0});if(V.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let H=Z.defaultModelId?.trim()&&V.includes(Z.defaultModelId.trim())?Z.defaultModelId.trim():V[0],B=Z.capabilities?.length?[...new Set(Z.capabilities)]:void 0,G=kf(Z.headers);$.saveProviderSettings({provider:Q,apiKey:J||void 0,baseUrl:W,headers:G,timeout:Z.timeoutMs,model:H,protocol:Z.protocol,client:Z.client},{setLastUsed:!1});let K=d2($),F=await E4(K);return F.providers[Q]={provider:{name:X,baseUrl:W,defaultModelId:H,protocol:Z.protocol,client:Z.client,capabilities:B,modelsSourceUrl:j},models:eX(V,B)},await E7(K,F),e5(Q,F.providers[Q]),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:K,modelsCount:V.length}}async function S7($,Z){let Q=Z.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let W=d2($),J=await E4(W),X=J.providers[Q];if(!X){let O=$.getProviderSettings(Q);if(!O)throw Error(`provider "${Q}" does not exist`);let z=Z.modelsSourceUrl?.trim(),_=tX(Z.models)[0]??O.model?.trim();if(!_&&!z)throw Error(`provider "${Q}" cannot be updated because no model is configured`);X={provider:{name:Z.name?.trim()||yf(Q),baseUrl:Z.baseUrl?.trim()??O.baseUrl?.trim()??"",defaultModelId:_,protocol:O.protocol,client:O.client,capabilities:O.capabilities},models:_?eX([_],O.capabilities):{}}}if(!X.provider)throw Error(`provider "${Q}" cannot be updated because it is a model overlay (no provider metadata)`);let Y=Z.name?.trim()??X.provider.name.trim();if(!Y)throw Error("name is required");let j=Z.baseUrl?.trim()??X.provider.baseUrl.trim();if(!j)throw Error("baseUrl is required");let V=Z.capabilities===void 0?X.provider.capabilities:Z.capabilities===null?void 0:[...new Set(Z.capabilities)],H=Z.protocol===void 0?X.provider.protocol:Z.protocol??void 0,B=Z.client===void 0?X.provider.client:Z.client??void 0,G=tX(Z.models),K=Z.modelsSourceUrl===void 0?X.provider.modelsSourceUrl:Z.modelsSourceUrl?.trim()||void 0,F=Z.models!==void 0||Z.modelsSourceUrl!==void 0&&!!K,A=Object.keys(X.models??{}).map((O)=>O.trim()).filter(Boolean),L=await If({providerId:Q,explicitModels:G,modelsSourceUrl:K,fallbackModelIds:A,shouldRecompute:F});if(L.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let f=Z.defaultModelId===void 0?X.provider.defaultModelId?.trim():Z.defaultModelId?.trim(),D=f&&L.includes(f)?f:L[0],T={...$.getProviderSettings(Q)??{},provider:Q,baseUrl:j,model:D};if(H)T.protocol=H;else delete T.protocol;if(B)T.client=B;else delete T.client;if(Z.apiKey!==void 0){let O=Z.apiKey?.trim()??"";if(O)T.apiKey=O;else delete T.apiKey}if(Z.headers!==void 0){let O=kf(Z.headers);if(O)T.headers=O;else delete T.headers}if(Z.timeoutMs!==void 0)if(typeof Z.timeoutMs==="number")T.timeout=Z.timeoutMs;else delete T.timeout;return $.saveProviderSettings(T,{setLastUsed:!1}),J.providers[Q]={provider:{name:Y,baseUrl:j,defaultModelId:D,protocol:H,client:B,capabilities:V,modelsSourceUrl:K},models:eX(L,V)},await E7(W,J),e5(Q,J.providers[Q]),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:W,modelsCount:L.length}}async function b7($,Z){let Q=Z.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let W=d2($),J=await E4(W);if(!J.providers[Q])throw Error(`provider "${Q}" does not exist`);return delete J.providers[Q],await E7(W,J),w0.unregisterProvider(Q),xf($,Q),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:W}}async function ZY($,Z={}){let Q=$.read(),W=w0.getProviderIds(),J=await Promise.all(W.map(async(Y)=>{let[j,V]=await Promise.all([w0.getProvider(Y),w0.getModelsForProvider(Y)]),H=hf(V),B=Q.providers[Y]?.settings,G=j?.name??yf(Y),K=$k(j?.capabilities,B?.capabilities),F=Wk(j?.metadata)??Jk(j);return{provider:{id:Y,name:G,models:H.length,color:oh(Y),letter:sh(G),enabled:Boolean(B),apiKey:B?nh(B):void 0,oauthAccessTokenPresent:B?ah(B):void 0,baseUrl:B?.baseUrl??j?.baseUrl,defaultModelId:j?.defaultModelId,protocol:B?.protocol??j?.protocol,client:B?.client??j?.client,capabilities:K,authDescription:"This provider uses API keys for authentication.",baseUrlDescription:"The base endpoint to use for provider requests.",configFields:F,configValues:jk(F,B,j),modelList:H},rank:Zk(j?.metadata)}}));J.sort((Y,j)=>{if(Y.rank!==j.rank)return Y.rank-j.rank;return Y.provider.name.localeCompare(j.provider.name)||Y.provider.id.localeCompare(j.provider.id)});let X=J.map((Y)=>Y.provider);if(Z.isClinePassEnabled!==!0)X=X.filter((Y)=>Y.id!==bf);return{providers:X,settingsPath:$.getFilePath()}}async function QY($,Z){let Q=$.trim(),W=await th(Q,Z),J=hf(W);return{providerId:Q,models:J}}function P7($){return $!=null&&typeof $==="object"&&!Array.isArray($)}function gf($,Z){if(!P7(Z))return P7($)?{...$}:void 0;let Q=P7($)?{...$}:{};for(let[W,J]of Object.entries(Z)){if(J==null||J===""){delete Q[W];continue}if(P7(J)){let X=gf(Q[W],J);if(X&&Object.keys(X).length>0)Q[W]=X;else delete Q[W];continue}Q[W]=J}return Object.keys(Q).length>0?Q:void 0}function WY($,Z){let Q=Z.providerId.trim();if(Z.enabled===!1){let X=$.read();if(delete X.providers[Q],X.lastUsedProvider===Q)delete X.lastUsedProvider;return $.write(X),{providerId:Q,enabled:!1,settingsPath:$.getFilePath()}}let J={...$.getProviderSettings(Q)??{},provider:Q};for(let X of["apiKey","baseUrl","model","region"])if(Object.hasOwn(Z,X)&&typeof Z[X]==="string")if(Z[X].trim().length===0)delete J[X];else J[X]=Z[X];for(let X of["maxTokens","contextWindow","timeout","apiLine","protocol","client","routingProviderId","capabilities"])if(Object.hasOwn(Z,X))J[X]=Z[X];for(let X of["auth","headers","reasoning","aws","gcp","azure","sap","oca"])if(Object.hasOwn(Z,X)&&Z[X]!=null){let Y=gf(J[X],Z[X]);if(Y)J[X]=Y;else delete J[X]}return $.saveProviderSettings(J,{setLastUsed:!1}),{providerId:Q,enabled:!0,settingsPath:$.getFilePath()}}async function JY($,Z){let Q=Z.trim(),W=$.getProviderSettings(Q),X=w0.MODEL_COLLECTIONS_BY_PROVIDER_ID[Q]?.provider,Y=W?.baseUrl?.trim()||X?.baseUrl?.trim(),j=rZ(Y,X?.baseUrl,X?.modelsSourceUrl);if(!W||!X||!Y||!j)return{providerId:Q,refreshed:!1};let V=await S7($,{providerId:Q,name:X.name,baseUrl:Y,apiKey:W.apiKey,headers:W.headers??null,timeoutMs:W.timeout??null,modelsSourceUrl:j,protocol:W.protocol??X.protocol??null,client:W.client??X.client??null,capabilities:W.capabilities??null});return{providerId:Q,refreshed:!0,modelsCount:V.modelsCount}}function XY($){let Z=$.trim().toLowerCase(),Q=j0(Z);if(Q)return Q.providerId;throw Error(`provider "${$}" does not support OAuth login`)}async function YY($,Z,Q,W){let J=j0($);if(!J)throw Error(`provider "${$}" does not support OAuth login`);let X=n8({onPrompt:async(Y)=>Y.defaultValue??"",openUrl:Q,onOpenUrlError:({error:Y})=>{throw Y instanceof Error?Y:Error(String(Y))}});return J.login({settings:Z,callbacks:X,telemetry:W})}function jY($,Z,Q,W,J){return Q2({manager:$,providerId:Z,settings:Q,credentials:W,setLastUsed:J?.setLastUsed})}async function VY($,Z,Q,W){let J=n8({onPrompt:async(X)=>X.defaultValue??"",openUrl:Q,onOpenUrlError:({error:X})=>{throw X instanceof Error?X:Error(String(X))}});return J6($,Z,{callbacks:J,telemetry:W})}function HY($){let Z=$?.auth?.accessToken?.trim()||$?.apiKey?.trim();return Z&&Z.length>0?Z:void 0}var vf={};N(vf,{getProviderConfigFields:()=>BY});import*as y7 from"@cline/llms";var Vk=["apiKey","baseUrl","azureApiVersion","awsRegion","awsProfile","gcpProjectId","gcpRegion","sapClientId","sapClientSecret","sapTokenUrl","sapResourceGroup","sapDeploymentId"],Hk={"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 Bk($,Z){let Q={};for(let W of Vk){let J=$[W],X=Z[W];if(J||X)Q[W]={...J,...X}}return Q}function Gk($){let Z=Hk[$.providerId];if(!Z)return $;return{...$,description:Z.description??$.description,fields:Z.mode==="replace"?Z.fields:Bk($.fields,Z.fields)}}var Kk=new Set(["ollama","lmstudio","litellm","openai-compatible"]);function Fk($,Z){if(!Z?.provider.baseUrl)return!1;if(Z.provider.source!=="system")return!0;return Kk.has($)}function BY($){let Z=y7.normalizeProviderId($);if(Z2(Z))return{providerId:Z,authMethod:"oauth",fields:{}};let Q=y7.MODEL_COLLECTIONS_BY_PROVIDER_ID[Z];if(Q?.provider.capabilities?.includes("local-auth"))return{providerId:Z,authMethod:"local",fields:{}};let W=Q?.provider.baseUrl,J={apiKey:{}};if(Fk(Z,Q))J.baseUrl={defaultValue:W};return Gk({providerId:Z,authMethod:"api-key",fields:J})}var lf={};N(lf,{resolveLegacyClineAuth:()=>FY,migrateLegacyProviderSettings:()=>$9});import{existsSync as Ak,readFileSync as fk}from"node:fs";import{dirname as Uk,join as GY}from"node:path";import*as k7 from"@cline/llms";import{resolveClineDataDir as Dk}from"@cline/shared/storage";var h7="openai",df=k7.BUILT_IN_PROVIDER.OPENAI_COMPATIBLE,cf=128000;function FY($){let Z=$?.trim();if(!Z)return;try{let Q=JSON.parse(Z);if(!Q)return;let W=typeof Q.expiresAt==="number"&&Number.isFinite(Q.expiresAt)?Q.expiresAt<10000000000?Q.expiresAt*1000:Q.expiresAt:void 0;return{accessToken:Q.idToken,refreshToken:Q.refreshToken,expiresAt:W,accountId:Q.userInfo?.id}}catch{return}}function b($){let Z=$?.trim();return Z?Z:void 0}function Lk($){return $==="credentials"?"iam":$}function uf($){if(!Ak($))return;try{let Z=fk($,"utf8"),Q=JSON.parse(Z);if(Q&&typeof Q==="object"&&!Array.isArray(Q))return Q}catch{}return}function _k($){let Z=$.dataDir??Dk(),Q=$.globalStatePath??GY(Z,"globalState.json"),W=$.secretsPath??GY(Z,"secrets.json"),J=uf(Q),X=uf(W);if(!J&&!X)return;return{globalState:J??{},secrets:X??{}}}function KY($){if($===h7)return df;return $}function zk($,Z,Q,W){let J=Q==="plan"?"planMode":"actMode",X=Z===W?b(Q==="plan"?$.planModeApiModelId:$.actModeApiModelId):void 0,j={openrouter:`${J}OpenRouterModelId`,cline:`${J}ClineModelId`,openai:`${J}OpenAiModelId`,ollama:`${J}OllamaModelId`,lmstudio:`${J}LmStudioModelId`,litellm:`${J}LiteLlmModelId`,requesty:`${J}RequestyModelId`,together:`${J}TogetherModelId`,fireworks:`${J}FireworksModelId`,sapaicore:`${J}SapAiCoreModelId`,groq:`${J}GroqModelId`,baseten:`${J}BasetenModelId`,huggingface:`${J}HuggingFaceModelId`,"huawei-cloud-maas":`${J}HuaweiCloudMaasModelId`,oca:`${J}OcaModelId`,aihubmix:`${J}AihubmixModelId`,hicap:`${J}HicapModelId`,nousResearch:`${J}NousResearchModelId`,"vercel-ai-gateway":`${J}VercelAiGatewayModelId`}[Z];return(j?b(typeof $[j]==="string"?$[j]:void 0):void 0)??X}function Tk($,Z,Q){let W=Q==="plan"?$.planModeThinkingBudgetTokens:$.actModeThinkingBudgetTokens,J=[...Z==="oca"?[$.actModeOcaReasoningEffort,$.planModeOcaReasoningEffort]:[],...Z==="gemini"?[$.geminiActModeThinkingLevel,$.geminiPlanModeThinkingLevel]:[],$.actModeReasoningEffort,$.planModeReasoningEffort].map(b).find(Boolean),X=J==="none"||J==="low"||J==="medium"||J==="high"||J==="xhigh"?J:void 0,Y=typeof W==="number"&&Number.isInteger(W)&&W>0?W:void 0;if(!X&&Y===void 0)return;return{...X?{effort:X}:{},...Y!==void 0?{budgetTokens:Y}:{}}}function Ok($){let Z=$["openai-codex-oauth-credentials"];if(!Z)return;try{let Q=JSON.parse(Z),W=b(Q.access_token),J=b(Q.refresh_token),X=b(Q.accountId);if(!W&&!J&&!X)return;return{...W?{apiKey:W}:{},auth:{...W?{accessToken:W}:{},...J?{refreshToken:J}:{},...X?{accountId:X}:{}}}}catch{return}}function qk($){let Z=k7.getGeneratedModelsForProvider($);return Object.keys(Z)[0]??void 0}function Mk($,Z,Q,W){let J=KY($),X=b(W==="plan"?Z.planModeApiProvider:Z.actModeApiProvider),Y=zk(Z,$,W,X)??qk(J),j=Tk(Z,J,W),V=typeof Z.requestTimeoutMs==="number"&&Number.isInteger(Z.requestTimeoutMs)&&Z.requestTimeoutMs>0?Z.requestTimeoutMs:void 0,H={anthropic:Q.apiKey,cline:Q.clineApiKey,openai:Q.openAiApiKey,"openai-native":Q.openAiNativeApiKey,openrouter:Q.openRouterApiKey,bedrock:Q.awsBedrockApiKey,gemini:Q.geminiApiKey,ollama:Q.ollamaApiKey,deepseek:Q.deepSeekApiKey,requesty:Q.requestyApiKey,together:Q.togetherApiKey,fireworks:Q.fireworksApiKey,qwen:Q.qwenApiKey,doubao:Q.doubaoApiKey,mistral:Q.mistralApiKey,litellm:Q.liteLlmApiKey,asksage:Q.asksageApiKey,xai:Q.xaiApiKey,moonshot:Q.moonshotApiKey,zai:Q.zaiApiKey,huggingface:Q.huggingFaceApiKey,nebius:Q.nebiusApiKey,sambanova:Q.sambanovaApiKey,cerebras:Q.cerebrasApiKey,groq:Q.groqApiKey,"huawei-cloud-maas":Q.huaweiCloudMaasApiKey,baseten:Q.basetenApiKey,"vercel-ai-gateway":Q.vercelAiGatewayApiKey,dify:Q.difyApiKey,minimax:Q.minimaxApiKey,hicap:Q.hicapApiKey,aihubmix:Q.aihubmixApiKey,nousResearch:Q.nousResearchApiKey,oca:Q.ocaApiKey},B={};if($==="openai-codex")Object.assign(B,Ok(Q));if($==="cline")try{let D=b(Q["cline:clineAccountId"]);if(D)B.auth={...B.auth??{},...FY(D)}}catch{}if($===h7&&Z.openAiHeaders)B.headers=Z.openAiHeaders;if($==="bedrock"){let D=Lk(Z.awsAuthentication),U=D==="profile"||Z.awsUseProfile===!0;B.aws={accessKey:b(Q.awsAccessKey),secretKey:b(Q.awsSecretKey),sessionToken:b(Q.awsSessionToken),region:b(Z.awsRegion),authentication:D,profile:U?b(Z.awsProfile):void 0,usePromptCache:Z.awsBedrockUsePromptCache,useCrossRegionInference:Z.awsUseCrossRegionInference,useGlobalInference:Z.awsUseGlobalInference,endpoint:b(Z.awsBedrockEndpoint),customModelBaseId:b(W==="plan"?Z.planModeAwsBedrockCustomModelBaseId:Z.actModeAwsBedrockCustomModelBaseId)}}if($==="vertex")B.gcp={projectId:b(Z.vertexProjectId),region:b(Z.vertexRegion)};if($===h7&&(Z.azureApiVersion||Z.azureIdentity!==void 0))B.azure={apiVersion:b(Z.azureApiVersion),useIdentity:Z.azureIdentity};if($==="sapaicore"){let D=Z.sapAiCoreUseOrchestrationMode??!0;B.sap={clientId:b(Q.sapAiCoreClientId),clientSecret:b(Q.sapAiCoreClientSecret),tokenUrl:b(Z.sapAiCoreTokenUrl),resourceGroup:b(Z.sapAiResourceGroup),deploymentId:D?void 0:b(W==="plan"?Z.planModeSapAiCoreDeploymentId:Z.actModeSapAiCoreDeploymentId),useOrchestrationMode:D}}if($==="oca"){B.oca={mode:Z.ocaMode};let D=b(Q.ocaRefreshToken);if(D)B.auth={...B.auth??{},refreshToken:D}}if($==="qwen")B.apiLine=Z.qwenApiLine;if($==="moonshot")B.apiLine=Z.moonshotApiLine;if($==="zai")B.apiLine=Z.zaiApiLine;if($==="minimax")B.apiLine=Z.minimaxApiLine;let G={anthropic:Z.anthropicBaseUrl,openai:Z.openAiBaseUrl,ollama:Z.ollamaBaseUrl,lmstudio:Z.lmStudioBaseUrl,litellm:Z.liteLlmBaseUrl,gemini:Z.geminiBaseUrl,requesty:Z.requestyBaseUrl,asksage:Z.asksageApiUrl,dify:Z.difyBaseUrl,oca:Z.ocaBaseUrl,aihubmix:Z.aihubmixBaseUrl,sapaicore:Z.sapAiCoreBaseUrl},K=b(H[$]),F=b(G[$]),A={provider:J,...K?{apiKey:K}:{},...Y?{model:Y}:{},...F?{baseUrl:F}:{},...j?{reasoning:j}:{},...V?{timeout:V}:{},...B},L=p8.safeParse(A);if(!L.success)return;return Object.keys(A).filter((D)=>D!=="provider").length>0?L.data:void 0}function Rk($,Z){if($!==df)return;if(!Z.baseUrl||!Z.model)return;return{provider:{name:"OpenAI Compatible",baseUrl:Z.baseUrl,defaultModelId:Z.model},models:{[Z.model]:{id:Z.model,name:Z.model,contextWindow:cf,maxInputTokens:cf,capabilities:["streaming","tools","images"]}}}}function Ek($,Z){let Q=new Set;for(let J of[$.actModeApiProvider,$.planModeApiProvider]){let X=b(J);if(X)Q.add(X)}if(b(Z.apiKey))Q.add("anthropic");if(b(Z.openRouterApiKey))Q.add("openrouter");if(b(Z.openAiApiKey))Q.add(h7);if(b(Z.openAiNativeApiKey))Q.add("openai-native");if(b(Z["openai-codex-oauth-credentials"]))Q.add("openai-codex");if(b(Z.geminiApiKey))Q.add("gemini");if(b(Z.ollamaApiKey))Q.add("ollama");if(b(Z.awsAccessKey)||b(Z.awsBedrockApiKey)||$.awsAuthentication!==void 0||$.awsUseProfile===!0||b($.awsProfile))Q.add("bedrock");if(b($.vertexProjectId)||b($.vertexRegion))Q.add("vertex");if(b(Z.clineApiKey))Q.add("cline");let W=FY(b(Z["cline:clineAccountId"]));if(W?.accessToken||W?.refreshToken||W?.accountId)Q.add("cline");if(b(Z.ocaApiKey))Q.add("oca");if(b(Z.sapAiCoreClientId)||b(Z.sapAiCoreClientSecret)||b($.sapAiCoreTokenUrl)||b($.sapAiCoreBaseUrl)||b($.sapAiResourceGroup)||$.sapAiCoreUseOrchestrationMode!==void 0)Q.add("sapaicore");return Q}function $9($){let Z=$.providerSettingsManager.read(),Q=_k($);if(!Q)return{migrated:!1,providerCount:Object.keys(Z.providers).length,lastUsedProvider:Z.lastUsedProvider};let{globalState:W,secrets:J}=Q,X=W.mode==="plan"?"plan":"act",Y=Ek(W,J),j=S$();j.providers={...Z.providers},j.lastUsedProvider=Z.lastUsedProvider;let V=new Date().toISOString(),H=0,B=GY(Uk($.providerSettingsManager.getFilePath()),"models.json"),G=oX(B),K=0;for(let L of Y){let f=KY(L);if(j.providers[f])continue;let D=Mk(L,W,J,X);if(!D)continue;j.providers[f]={settings:D,updatedAt:V,tokenSource:"migration"},H+=1;let U=Rk(f,D);if(U&&!G.providers[f])G.providers[f]=U,K+=1}if(H===0&&K===0)return{migrated:!1,providerCount:Object.keys(Z.providers).length,lastUsedProvider:Z.lastUsedProvider};let F=b(X==="plan"?W.planModeApiProvider:W.actModeApiProvider),A=F?KY(F):void 0;if(j.lastUsedProvider=Z.lastUsedProvider??(A&&j.providers[A]?A:Object.keys(j.providers)[0]),$.providerSettingsManager.write(j),K>0)qf(B,G);return{migrated:H>0||K>0,providerCount:Object.keys(j.providers).length,lastUsedProvider:j.lastUsedProvider}}tQ();_0();v9();var pf={};N(pf,{SessionVersioningService:()=>c$,SessionVersioningError:()=>k0});class k0 extends Error{code;constructor($,Z){super(Z);this.code=$;this.name="SessionVersioningError"}}function Nk($){let Z=$.sessionId.trim();if(!Z)throw new k0("invalid_restore","sessionId is required");if(!$.restoreMessages&&!$.restoreWorkspace)throw new k0("invalid_restore","restore.messages or restore.workspace must be true");if($.restoreMessages&&$.requiresStart)throw new k0("invalid_restore","start is required when restore.messages is true");if(!Number.isInteger($.checkpointRunCount)||$.checkpointRunCount<1)throw new k0("invalid_restore","checkpointRunCount must be a positive integer");return Z}class c${async restoreCheckpoint($){let Z=$.restore?.messages!==!1,Q=$.restore?.workspace!==!1,W=Nk({sessionId:$.sessionId,restoreMessages:Z,restoreWorkspace:Q,requiresStart:$.start===void 0,checkpointRunCount:$.checkpointRunCount}),J=await $.getSession(W);if(!J)throw new k0("session_not_found",`Session ${W} not found`);let X=Z?await $.readMessages(W):void 0;if(Z&&X?.length===0)throw new k0("session_messages_not_found",`No messages found for session ${W}`);let Y=fX({session:J,messages:X,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd,restoreMessages:Z});if(Q)await($.applyWorkspaceCheckpoint??UX)(Y.cwd,Y.checkpoint);let j=f1({session:J,messages:X});if(!Z)return{checkpoint:Y.checkpoint,sourceSnapshot:j};let V=FX(J,$.checkpointRunCount),H=$.restore?.omitCheckpointMessageFromSession?AX(X??[],$.checkpointRunCount):Y.messages??[],B={sourceSession:J,sourceMessages:X,sourceSnapshot:j,plan:Y,restoredCheckpointMetadata:V,initialMessages:H,restoreMessages:Z,restoreWorkspace:Q,checkpointRunCount:$.checkpointRunCount};if(!$.start||!$.startSession)throw new k0("invalid_restore","start is required when restore.messages is true");let G=$.buildStartInput?await $.buildStartInput(B,$.start):$.start,K=await $.startSession(G),F=$.getStartedSessionId?.(K);if(F)await($.retainCheckpointRefs??PG)(Y.cwd,F,V?.history??[]);let A=F&&$.readRestoredSession?await $.readRestoredSession(F):void 0;return{sessionId:F,startResult:K,messages:Y.messages,checkpoint:Y.checkpoint,sourceSnapshot:j,...A?{restoredSnapshot:f1({session:A,messages:H})}:{}}}}var rf={};N(rf,{FileTeamPersistenceStore:()=>I7});import{appendFileSync as wk,existsSync as AY,mkdirSync as Ck,readFileSync as Pk,renameSync as Sk,unlinkSync as bk,writeFileSync as yk}from"node:fs";import{join as fY}from"node:path";import{resolveTeamDataDir as hk}from"@cline/shared/storage";function kk($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}class I7{dirPath;statePath;taskHistoryPath;teammateSpecs=new Map;constructor($){let Z=kk($.teamName),Q=$.baseDir?.trim()||hk();this.dirPath=fY(Q,Z),this.statePath=fY(this.dirPath,"state.json"),this.taskHistoryPath=fY(this.dirPath,"task-history.jsonl")}loadState(){if(!AY(this.statePath))return;try{let $=Pk(this.statePath,"utf8"),Z=JSON.parse($);if(Z.version!==1||!Z.teamState)return;for(let Q of Z.teammates??[])this.teammateSpecs.set(Q.agentId,Q);return KA(Z.teamState)}catch{return}}getTeammateSpecs(){return Array.from(this.teammateSpecs.values())}upsertTeammateSpec($){this.teammateSpecs.set($.agentId,$)}removeTeammateSpec($){this.teammateSpecs.delete($)}persist($){if(!this.hasPersistableState($)){this.clearPersistedState();return}this.ensureDir();let Z={version:1,updatedAt:new Date().toISOString(),teamState:$.exportState(),teammates:Array.from(this.teammateSpecs.values())},Q=`${this.statePath}.tmp`;yk(Q,`${JSON.stringify(Z,null,2)}
|
|
732
|
+
`,"utf8"),Sk(Q,this.statePath)}appendTaskHistory($){let Z={};switch($.type){case"team_task_updated":Z=$.task;break;case"team_message":Z={agentId:$.message.fromAgentId,toAgentId:$.message.toAgentId,subject:$.message.subject,taskId:$.message.taskId};break;case"team_mission_log":Z={agentId:$.entry.agentId,kind:$.entry.kind,summary:$.entry.summary,taskId:$.entry.taskId};break;case"teammate_spawned":case"teammate_shutdown":case"task_start":Z={agentId:$.agentId,message:"message"in $?$.message:void 0};break;case"task_end":Z={agentId:$.agentId,finishReason:$.result?.finishReason,error:$.error?.message};break;case"agent_event":Z={agentId:$.agentId,eventType:$.event.type};break}this.ensureDir(),wk(this.taskHistoryPath,`${JSON.stringify({ts:new Date().toISOString(),type:$.type,task:Z})}
|
|
733
|
+
`,"utf8")}ensureDir(){if(!AY(this.dirPath))Ck(this.dirPath,{recursive:!0})}hasPersistableState($){let Z=$.exportState();if(this.teammateSpecs.size>0)return!0;if(Z.members.some((Q)=>Q.role==="teammate"))return!0;return Z.tasks.length>0||Z.mailbox.length>0||Z.missionLog.length>0}clearPersistedState(){if(AY(this.statePath))bk(this.statePath)}}var nf={};N(nf,{ChatViewStateSchema:()=>UY,ChatSummarySchema:()=>c7,ChatSessionStatusSchema:()=>g7,ChatSessionConfigSchema:()=>x7,ChatMessageSchema:()=>v7,ChatMessageRoleSchema:()=>m7});import{z as h}from"zod";var x7=h.object({workspaceRoot:h.string().min(1),cwd:h.string().optional(),provider:h.string().min(1),model:h.string().min(1),mode:h.enum(["act","plan"]).default("act"),apiKey:h.string(),systemPrompt:h.string().optional(),rules:h.string().optional(),maxIterations:h.number().int().positive().optional(),enableTools:h.boolean(),enableSpawn:h.boolean().optional(),enableTeams:h.boolean().optional(),autoApproveTools:h.boolean().optional(),missionStepInterval:h.number().int().positive().optional(),missionTimeIntervalMs:h.number().int().positive().optional()}),g7=h.enum(["idle","starting","running","pending","stopping","completed","cancelled","failed","error"]),m7=h.enum(["user","assistant","tool","system","status","error"]),v7=h.object({id:h.string().min(1),sessionId:h.string().nullable(),role:m7,content:h.string(),createdAt:h.number().int().nonnegative(),meta:h.object({stream:h.enum(["stdout","stderr"]).optional(),toolName:h.string().optional(),iteration:h.number().int().nonnegative().optional(),agentId:h.string().optional(),conversationId:h.string().optional(),hookEventName:h.string().optional(),inputTokens:h.number().int().nonnegative().optional(),outputTokens:h.number().int().nonnegative().optional(),checkpoint:h.object({ref:h.string(),createdAt:h.number().int().nonnegative(),runCount:h.number().int().positive(),kind:h.enum(["stash","commit"]).optional()}).optional()}).optional()}),c7=h.object({toolCalls:h.number().int().nonnegative(),tokensIn:h.number().int().nonnegative(),tokensOut:h.number().int().nonnegative()}),UY=h.object({sessionId:h.string().nullable(),status:g7,config:x7,messages:h.array(v7),rawTranscript:h.string(),error:h.string().nullable(),summary:c7});var af={};N(af,{CORE_BUILD_VERSION:()=>DY});var DY=lj;import{Agent as wI,createAgentRuntime as CI}from"@cline/agents";var sf={};N(sf,{fetchClineRecommendedModels:()=>_Y,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>u7});import{getClineEnvironmentConfig as Ik}from"@cline/shared";var xk=5000,u7={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 gk($){return{recommended:$.recommended.map((Z)=>({...Z,tags:[...Z.tags]})),free:$.free.map((Z)=>({...Z,tags:[...Z.tags]})),clinePass:$.clinePass.map((Z)=>({...Z,tags:[...Z.tags]}))}}function LY($){if(!$||typeof $!=="object")return null;let Z=$;if(typeof Z.id!=="string"||Z.id.length===0)return null;return{id:Z.id,name:typeof Z.name==="string"&&Z.name.length>0?Z.name:Z.id,description:typeof Z.description==="string"?Z.description:"",tags:Array.isArray(Z.tags)?Z.tags.filter((Q)=>typeof Q==="string"):[]}}function mk($){if(!$||typeof $!=="object")return null;let Z=$,Q=Array.isArray(Z.recommended)?Z.recommended:[],W=Array.isArray(Z.free)?Z.free:[],J=Array.isArray(Z.clinePass)?Z.clinePass:[],X=Q.map(LY).filter((V)=>V!==null),Y=W.map(LY).filter((V)=>V!==null),j=J.map(LY).filter((V)=>V!==null);if(X.length===0&&Y.length===0&&j.length===0)return null;return{recommended:X,free:Y,clinePass:j}}function vk($){let Z=$.baseUrl?.trim();if(Z)return Z;let Q=Ik().apiBaseUrl;try{return($.providerSettingsManager??new O1).getProviderSettings("cline")?.baseUrl?.trim()||Q}catch{return Q}}async function ck($,Z,Q){let W=new AbortController,J=setTimeout(()=>W.abort(),Q);try{return await $(Z,{signal:W.signal})}finally{clearTimeout(J)}}async function _Y($={}){try{let Z=vk($),Q=$.fetchImpl??fetch,W=await ck(Q,`${Z}/api/v1/ai/cline/recommended-models`,$.timeoutMs??xk);if(!W.ok)throw Error(`HTTP ${W.status}`);let J=await W.json(),X=mk(J);if(X)return X}catch{}return gk(u7)}var of={};N(of,{loadLlmsConfigFromFile:()=>TY,defineLlmsConfig:()=>zY});import{readFile as uk}from"node:fs/promises";import dk from"node:path";function zY($){return $}async function TY($){let Z=dk.resolve($),Q=await uk(Z,"utf8"),W;try{W=JSON.parse(Q)}catch(J){let X=J instanceof Error?J.message:String(J);throw Error(`Failed to parse JSON config at "${Z}": ${X}`)}return lk(W,Z)}function lk($,Z){if(!$||typeof $!=="object")throw Error(`Invalid llms config in "${Z}": expected an object.`);let W=$.providers;if(!Array.isArray(W))throw Error(`Invalid llms config in "${Z}": "providers" must be an array.`);if(!W.length)throw Error(`Invalid llms config in "${Z}": "providers" cannot be empty.`);return $}var WU={};N(WU,{createLlmsSdk:()=>qY,DefaultLlmsSdk:()=>Z9});import{BUILT_IN_PROVIDER_IDS as $U,createHandler as ik,createHandlerAsync as nk,getProviderCollection as ak,hasProvider as ZU,registerAsyncHandler as sk,registerHandler as ok,registerModel as tk,registerProvider as QU}from"@cline/llms";function tf($){return $?{...$}:{}}function pk($,Z){if($)return $;if(!Z)return;let Q=globalThis.process;if(!Q?.env)return;return Q.env[Z]}function rk($,Z){if(!Z.length)throw Error(`Provider "${$}" must include at least one model.`)}function ef($){let Z=Object.keys($.collection.models);return{id:$.collection.provider.id,name:$.collection.provider.name,description:$.collection.provider.description,protocol:$.collection.provider.protocol,baseUrl:$.collection.provider.baseUrl,capabilities:$.collection.provider.capabilities,env:$.collection.provider.env,models:Z,defaultModel:$.collection.provider.defaultModelId,modelCount:Z.length}}class OY{providers=new Map;register($){rk($.id,$.models);let Z=$.defaultModel??$.models[0];if(!Z)throw Error(`Provider "${$.id}" must define a default model.`);if(!$.models.includes(Z))throw Error(`Default model "${Z}" is not included in configured models for "${$.id}".`);let Q=this.providers.get($.id);this.providers.set($.id,{id:$.id,models:new Set([...Q?.models??[],...$.models]),defaultModel:Z,defaults:{...Q?.defaults??{},...tf($.defaults)}})}registerSelectionConfig($){this.register({id:$.id,models:$.models,defaultModel:$.defaultModel,defaults:{apiKey:pk($.apiKey,$.apiKeyEnv),routingProviderId:$.builtinProviderId,baseUrl:$.baseUrl,headers:$.headers,timeoutMs:$.timeoutMs,capabilities:$.capabilities,...tf($.settings)}})}registerModel($,Z){let Q=this.providers.get($);if(!Q){this.providers.set($,{id:$,models:new Set([Z]),defaultModel:Z,defaults:{}});return}Q.models.add(Z)}createHandlerConfig($){let Z=this.require($.providerId),Q=$.modelId??Z.defaultModel;if(!Z.models.has(Q))throw Error(`Model "${Q}" is not configured for provider "${$.providerId}".`);return{providerId:$.providerId,modelId:Q,...Z.defaults,...$.overrides}}list(){return Array.from(this.providers.values()).map(($)=>({id:$.id,models:Array.from($.models),defaultModel:$.defaultModel}))}getModels($){return Array.from(this.require($).models)}hasProvider($){return this.providers.has($)}hasModel($,Z){return this.providers.get($)?.models.has(Z)??!1}require($){let Z=this.providers.get($);if(!Z)throw Error(`Provider "${$}" is not configured in this SDK instance.`);return Z}}class Z9{configuredProviders=new OY;constructor($){this.applyConfig($)}createHandler($){return ik(this.configuredProviders.createHandlerConfig($))}async createHandlerAsync($){return nk(this.configuredProviders.createHandlerConfig($))}registerProvider($){if(QU($.collection),$.handlerFactory&&$.asyncHandlerFactory)throw Error(`Provider "${$.collection.provider.id}" cannot register both sync and async handlers.`);if($.handlerFactory)ok($.collection.provider.id,$.handlerFactory);if($.asyncHandlerFactory)sk($.collection.provider.id,$.asyncHandlerFactory);this.configuredProviders.register({id:$.collection.provider.id,models:$.exposeModels??Object.keys($.collection.models),defaultModel:$.defaultModel??$.collection.provider.defaultModelId,defaults:$.defaults})}registerBuiltinProvider($){let Z=$.exposeModels??Object.keys($.models),Q=$.defaultModel??Z[0];if(!Q)throw Error(`Provider "${$.id}" must define a default model.`);QU({provider:{id:$.id,name:$.name??$.id,description:$.description,protocol:$.protocol,baseUrl:$.baseUrl,defaultModelId:Q,client:$.client??"openai-compatible",capabilities:$.capabilities,env:$.env,source:"system"},models:$.models}),this.configuredProviders.register({id:$.id,models:Z,defaultModel:Q,defaults:{routingProviderId:$.builtinProviderId,...$.defaults??{}}})}registerModel($){tk($.providerId,$.modelId,$.info),this.configuredProviders.registerModel($.providerId,$.modelId)}getProviders(){return this.configuredProviders.list()}getBuiltInProviderIds(){return[...$U]}async getBuiltInProviders(){return(await Promise.all($U.map((Z)=>ak(Z)))).filter((Z)=>Z!==void 0).map((Z)=>ef({collection:Z}))}getModels($){return this.configuredProviders.getModels($)}isProviderConfigured($){return this.configuredProviders.hasProvider($)}isModelConfigured($,Z){return this.configuredProviders.hasModel($,Z)}applyConfig($){for(let Z of $.providers)this.configuredProviders.registerSelectionConfig(Z);for(let Z of $.models??[])this.registerModel(Z);for(let Z of $.customProviders??[])this.registerProvider(Z);for(let Z of this.configuredProviders.list()){let Q=ZU(Z.id),W=this.configuredProviders.createHandlerConfig({providerId:Z.id,modelId:Z.defaultModel}).routingProviderId,J=typeof W==="string"&&ZU(W);if(!Q&&!J)throw Error(`Provider "${Z.id}" is not known. Register it through customProviders/registerProvider, registerBuiltinProvider, or use a built-in provider ID.`)}}}function qY($){return new Z9($)}fW();async function ek(){return Promise.resolve().then(() => (tQ(),hA))}function hI(){return new Date().toISOString()}var kI="cline",II="cline-pass";function xI($){if(GU($)!=="providers.json")return;let Z=EY($);if(GU(Z)!=="settings")return;return EY(Z)}class O1{filePath;dataDir;constructor($={}){if(this.filePath=$.filePath??yI(),this.dataDir=$.dataDir??xI(this.filePath),this.dataDir||!$.filePath)$9({providerSettingsManager:this,dataDir:this.dataDir});if(Pf(this),N7(this.read()),RY(this.filePath))try{BU(this.filePath,384)}catch{}}getFilePath(){return this.filePath}read(){if(!RY(this.filePath))return S$();try{let $=SI(this.filePath,"utf8"),Z=JSON.parse($),Q=r8.safeParse(Z);if(Q.success)return N7(Q.data),Q.data}catch{}return S$()}write($){let Z=r8.parse($),Q=EY(this.filePath);if(!RY(Q))PI(Q,{recursive:!0,mode:448});bI(this.filePath,`${JSON.stringify(Z,null,2)}
|
|
734
|
+
`,"utf8");try{BU(this.filePath,384)}catch{}N7(Z)}saveProviderSettings($,Z={}){let Q=p8.parse($),W=this.read(),J=Q.provider,X=Z.setLastUsed!==!1,Y=W.providers[J],j=Z.tokenSource??Y?.tokenSource??"manual",V={...W,providers:{...W.providers,[J]:{settings:Q,updatedAt:hI(),tokenSource:j}},lastUsedProvider:X?J:W.lastUsedProvider};return this.write(V),V}resolveProviderSettings($,Z){let Q=$.providers[Z]?.settings,J=j0(Z)?.storageProviderId;if(!J||J===Z)return Q;let X=$.providers[J]?.settings;if(!X)return Q;return p8.parse({...X.auth?{auth:X.auth}:{},...X.apiKey?{apiKey:X.apiKey}:{},...X.baseUrl?{baseUrl:X.baseUrl}:{},...Q??{},provider:Z})}getProviderSettings($){let Z=this.read();return this.resolveProviderSettings(Z,$)}resolveLastUsedProviderId($,Z){let Q=$.lastUsedProvider;if(Q===II&&Z.isClinePassEnabled===!1)return kI;return Q}getLastUsedProviderSettings($={}){let Z=this.read(),Q=this.resolveLastUsedProviderId(Z,$);if(!Q)return;return this.resolveProviderSettings(Z,Q)}getProviderConfig($,Z){let Q=this.getProviderSettings($);if(!Q)return;return l0(Q,Z)}getLastUsedProviderConfig($={}){let Z=this.getLastUsedProviderSettings($);if(!Z)return;return l0(Z,$)}async refreshCatalog(){try{await d8({})}catch{}}}_0();J8();function gI($,Z){let Q=$?.expiresAt,W=Z?.expiresAt;return $?.accessToken===Z?.accessToken&&$?.refreshToken===Z?.refreshToken&&$?.accountId===Z?.accountId&&Q===W}class r7 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 NY{providerSettingsManager;telemetry;refreshInFlight=new Map;constructor($){this.providerSettingsManager=$?.providerSettingsManager??new O1,this.telemetry=$?.telemetry}async resolveProviderApiKey($){let Z=j0($.providerId);if(!Z)return null;return this.resolveWithSingleFlight(Z.providerId,Z.storageProviderId,$.forceRefresh)}async resolveWithSingleFlight($,Z,Q=!1){let W=this.refreshInFlight.get(Z);if(W)return W;let J=this.resolveProviderApiKeyInternal($,Z,Q).catch((X)=>{throw X}).finally(()=>{this.refreshInFlight.delete(Z)});return this.refreshInFlight.set(Z,J),J}async resolveProviderApiKeyInternal($,Z,Q){let W=j0($);if(!W)return null;let J=this.providerSettingsManager.getProviderSettings(Z);if(!J)return null;let X=X6($,J);if(!X)return null;let Y=await W.refresh({settings:J,credentials:X,forceRefresh:Q,telemetry:this.telemetry});if(!Y)throw new r7($);let j=Q2({manager:this.providerSettingsManager,providerId:$,settings:J,credentials:Y,setLastUsed:!1,save:!1}),V=!gI(J.auth,j.auth);if(V)this.providerSettingsManager.saveProviderSettings(j,{setLastUsed:!1,tokenSource:"oauth"});return{apiKey:W.getApiKey(j)??Y.access,accountId:Y.accountId,refreshed:V}}}import{normalizeUserInput as mI}from"@cline/shared";import{nanoid as vI}from"nanoid";class KU{list($){return $?s0($):[]}update($,Z){if(!$)return{sessionId:Z.sessionId,prompts:[],updated:!1};let Q=Z.promptId.trim(),W=$.pendingPrompts.findIndex((V)=>V.id===Q);if(W<0)return{sessionId:Z.sessionId,prompts:s0($),updated:!1};let J=$.pendingPrompts[W];if(!J)return{sessionId:Z.sessionId,prompts:s0($),updated:!1};let X=Z.prompt===void 0?J.prompt:mI(Z.prompt).trim();if(!X)throw Error("prompt cannot be empty");let Y=Z.delivery??J.delivery,j={...J,prompt:X,mode:Z.mode??J.mode,delivery:Y};return $.pendingPrompts.splice(W,1),cI($,j,W,J.delivery),{sessionId:Z.sessionId,prompts:s0($),prompt:i7(j),updated:!0}}delete($,Z){if(!$)return{sessionId:Z.sessionId,prompts:[],removed:!1};let Q=Z.promptId.trim(),W=$.pendingPrompts.findIndex((X)=>X.id===Q);if(W<0)return{sessionId:Z.sessionId,prompts:s0($),removed:!1};let[J]=$.pendingPrompts.splice(W,1);return{sessionId:Z.sessionId,prompts:s0($),prompt:J?i7(J):void 0,removed:!0}}enqueue($,Z){let{prompt:Q,mode:W,delivery:J,userImages:X,userFiles:Y}=Z,j=$.pendingPrompts.findIndex((V)=>V.prompt===Q);if(j>=0){let[V]=$.pendingPrompts.splice(j,1),H={...V,prompt:Q,mode:W??V.mode,userImages:X??V.userImages,userFiles:Y??V.userFiles};if(J==="steer"||V.delivery==="steer")$.pendingPrompts.unshift({...H,delivery:"steer"});else $.pendingPrompts.push(H)}else{let V={id:`pending_${Date.now()}_${vI(5)}`,prompt:Q,mode:W,delivery:J,userImages:X,userFiles:Y};if(J==="steer")$.pendingPrompts.unshift(V);else $.pendingPrompts.push(V)}return s0($)}consumeSteer($){let Z=$.pendingPrompts.findIndex((W)=>W.delivery==="steer");if(Z<0)return{prompts:s0($)};let[Q]=$.pendingPrompts.splice(Z,1);return{entry:Q,prompts:s0($)}}shiftNext($){return{entry:$.pendingPrompts.shift(),prompts:s0($)}}requeueFront($,Z){return $.pendingPrompts.unshift(Z),s0($)}clear($){return $.pendingPrompts.length=0,[]}}class wY{deps;service=new KU;constructor($){this.deps=$}list($){return this.service.list(this.deps.getSession($))}update($){let Z=this.deps.getSession($.sessionId);if(!Z||Z.aborting)return{sessionId:$.sessionId,prompts:[],updated:!1};let Q=this.service.update(Z,$);return this.emitPrompts(Z),this.scheduleDrain($.sessionId,Z),Q}delete($){let Z=this.deps.getSession($.sessionId);if(!Z||Z.aborting)return{sessionId:$.sessionId,prompts:[],removed:!1};let Q=this.service.delete(Z,$);return this.emitPrompts(Z),this.scheduleDrain($.sessionId,Z),Q}enqueue($,Z){let Q=this.deps.getSession($);if(!Q||Q.aborting)return;this.service.enqueue(Q,Z),this.emitPrompts(Q),this.scheduleDrain($,Q)}consumeSteer($){let Z=this.deps.getSession($);if(!Z)return;let{entry:Q}=this.service.consumeSteer(Z);if(!Q)return;return this.emitPrompts(Z),this.emitSubmitted(Z,Q),Q}clearAborted($){if($.pendingPrompts.length===0)return;this.service.clear($),this.emitPrompts($)}emitPrompts($){this.deps.emit({type:"pending_prompts",payload:{sessionId:$.sessionId,prompts:s0($)}})}scheduleDrain($,Z){if(Z.pendingPrompts.length===0||Z.aborting||Z.drainingPendingPrompts||!Z.agent.canStartRun())return;queueMicrotask(()=>{this.drain($)})}async drain($){let Z=this.deps.getSession($);if(!Z)return;if(Z.aborting||Z.drainingPendingPrompts)return;if(!Z.agent.canStartRun())return;let{entry:Q}=this.service.shiftNext(Z);if(!Q)return;this.emitPrompts(Z),this.emitSubmitted(Z,Q),Z.drainingPendingPrompts=!0;let W=!0;try{await this.deps.send({sessionId:$,prompt:Q.prompt,...Q.mode?{mode:Q.mode}:{},userImages:Q.userImages,userFiles:Q.userFiles})}catch{W=!1,this.service.requeueFront(Z,Q),this.emitPrompts(Z)}finally{if(Z.drainingPendingPrompts=!1,W&&Z.pendingPrompts.length>0&&Z.status!=="failed"&&Z.status!=="cancelled")queueMicrotask(()=>{this.drain($)})}}emitSubmitted($,Z){let Q=i7(Z);this.deps.emit({type:"pending_prompt_submitted",payload:{sessionId:$.sessionId,id:Q.id,prompt:Q.prompt,delivery:Q.delivery,attachmentCount:Q.attachmentCount,userImages:Q.userImages,userFiles:Q.userFiles}})}}function i7($){return{id:$.id,prompt:$.prompt,delivery:$.delivery,attachmentCount:($.userImages?.length??0)+($.userFiles?.length??0),userImages:$.userImages,userFiles:$.userFiles}}function s0($){return $.pendingPrompts.map(i7)}function cI($,Z,Q,W){if(Z.delivery==="steer")$.pendingPrompts.unshift(Z);else if(W==="steer")$.pendingPrompts.push(Z);else $.pendingPrompts.splice(Q,0,Z)}_0();class PY{deps;constructor($){this.deps=$}dispatchAgentEvent($,Z,Q){let W=this.deps.getSession($),J={sessionId:$,config:Z,liveSession:W,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit},X=x3(Q),Y=!!W&&(!X.agentId||X.agentId===CY(W.agent));g3(J,Q,Y?{isPrimaryAgentEvent:!0,agentId:CY(W.agent),conversationId:W.agent.getConversationId(),...W?.runtime.teamRuntime?{teamRole:"lead"}:{}}:{isPrimaryAgentEvent:!1})}async handleTeamEvent($,Z){let Q=this.deps.getSession($);if(Q){if(eJ(Q,Z),Z.type==="agent_event"){let W={sessionId:$,config:Q.config,liveSession:Q,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit};g3(W,Z.event,{agentId:Z.agentId,teamRole:"teammate",teamAgentId:Z.agentId,isPrimaryAgentEvent:!1})}if(Z.type==="teammate_spawned"){let W=r1({agentId:Z.teammate.runtimeAgentId??Z.agentId,conversationId:Z.teammate.conversationId,parentAgentId:Z.teammate.parentAgentId,createdByAgentId:CY(Q.agent),teamId:Q.runtime.teamRuntime?.getTeamId(),teamName:Q.runtime.teamRuntime?.getTeamName(),teamRole:"teammate",teamAgentId:Z.agentId});if(W)H$(Q.config.telemetry,{ulid:$,modelId:Z.teammate.modelId??Q.config.modelId,provider:Q.config.providerId,...W})}}if(await $X($,Z,this.deps.invokeBackendOptional),Q)ZX(Q,$,Z,this.deps.emit)}async handlePluginEvent($,Z,Q){if(Z.name==="plugin_log"){this.handlePluginLog($,Z.payload);return}if(Z.name==="automation_event"){let V=this.deps.getSession($)?.config.extensionContext?.automation??Q;if(!V)return;let H=Z.payload&&typeof Z.payload==="object"?Z.payload:void 0;if(!H)return;await V.ingestEvent(H);return}if(Z.name!=="steer_message"&&Z.name!=="queue_message"&&Z.name!=="pending_prompt")return;let W=Z.payload&&typeof Z.payload==="object"?Z.payload:void 0,J=typeof W?.sessionId==="string"&&W.sessionId.trim().length>0?W.sessionId.trim():$,X=typeof W?.prompt==="string"?W.prompt.trim():"";if(!X)return;let Y=Z.name==="steer_message"?"steer":Z.name==="queue_message"?"queue":W?.delivery==="steer"?"steer":"queue";this.deps.enqueuePendingPrompt(J,{prompt:X,delivery:Y})}handlePluginLog($,Z,Q){let W=this.deps.getSession($),J=Q??W?.config.extensionContext?.logger??W?.config.logger;if(!J||!Z||typeof Z!=="object")return;let X=Z,Y=typeof X.message==="string"?X.message:"";if(!Y)return;let j=X.metadata&&typeof X.metadata==="object"?{...X.metadata}:{};if(j.sessionId??=$,typeof X.pluginName==="string"&&X.pluginName)j.pluginName=X.pluginName;if(X.level==="debug"){J.debug(Y,j);return}if(X.level==="error"){if(J.error)J.error(Y,j);else J.log(Y,{...j,severity:"error"});return}J.log(Y,j)}}function CY($){return $.getAgentId()}function SY($){return{sessionId:$.sessionId,source:$.source,pid:process.pid,startedAt:$.startedAt,endedAt:$.endedAt??null,exitCode:$.exitCode??null,status:$.status,interactive:$.interactive,provider:$.config.providerId,model:$.config.modelId,cwd:$.config.cwd,workspaceRoot:R$($.config),teamName:$.config.teamName?.trim()||void 0,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,parentSessionId:typeof $.sessionMetadata?.parentSessionId==="string"?$.sessionMetadata.parentSessionId:void 0,parentAgentId:typeof $.sessionMetadata?.parentAgentId==="string"?$.sessionMetadata.parentAgentId:void 0,agentId:typeof $.sessionMetadata?.agentId==="string"?$.sessionMetadata.agentId:void 0,conversationId:typeof $.sessionMetadata?.conversationId==="string"?$.sessionMetadata.conversationId:void 0,isSubagent:typeof $.sessionMetadata?.isSubagent==="boolean"?$.sessionMetadata.isSubagent:!1,prompt:$.pendingPrompt,metadata:$.sessionMetadata,messagesPath:$.artifacts?.messagesPath,updatedAt:$.updatedAt??$.endedAt??$.startedAt}}function bY($,Z){let Q=$[Z];return typeof Q==="function"?Q:null}async function FU($,Z,...Q){let W=bY($,Z);if(!W)throw Error(`session service method not available: ${Z}`);return Promise.resolve(W.apply($,Q))}async function AU($,Z,...Q){let W=bY($,Z);if(!W)return;await Promise.resolve(W.apply($,Q))}async function fU($,Z,...Q){let W=bY($,Z);if(!W)return;return await Promise.resolve(W.apply($,Q))}$1();_0();function yY($,Z,Q){return{onSubAgentEvent:(W)=>$.onAgentEvent(Q,Z,W),onSubAgentStart:(W)=>{let J=$.getSession(Q)?.runtime.teamRuntime;$.subAgentStarts.set(W.subAgentId,{startedAt:Date.now(),rootSessionId:Q});let X=r1({agentId:W.subAgentId,conversationId:W.conversationId,parentAgentId:W.parentAgentId,teamId:J?.getTeamId(),teamName:J?.getTeamName(),createdByAgentId:W.parentAgentId});if(X)H$(Z.telemetry,{ulid:Q,modelId:Z.modelId,provider:Z.providerId,...X});m4(Z.telemetry,{event:"started",ulid:Q,durationMs:0,parentId:W.parentAgentId,agentId:W.subAgentId,...X}),$.invokeBackendOptional("handleSubAgentStart",Q,W)},onSubAgentEnd:(W)=>{let J=$.getSession(Q)?.runtime.teamRuntime,X=$.subAgentStarts.get(W.subAgentId),Y=X?Date.now()-X.startedAt:0,j=W.result?.text?W.result.text.split(`
|
|
735
|
+
`).length:0;m4(Z.telemetry,{event:"ended",ulid:Q,durationMs:Y,outputLines:j,errorMessage:W.error?String(W.error):void 0,agentId:W.subAgentId,parentId:W.parentAgentId,...r1({agentId:W.subAgentId,conversationId:W.conversationId,parentAgentId:W.parentAgentId,teamId:J?.getTeamId(),teamName:J?.getTeamName(),createdByAgentId:W.parentAgentId})}),$.subAgentStarts.delete(W.subAgentId),$.invokeBackendOptional("handleSubAgentEnd",Q,W)}}}function hY($,Z,Q,W){let J=yY($,Z,Q);return q$({configProvider:{getRuntimeConfig:()=>$.getSession(Q)?.runtime.delegatedAgentConfigProvider?.getRuntimeConfig()??{providerId:Z.providerId,modelId:Z.modelId,cwd:Z.cwd,apiKey:Z.apiKey,baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking,maxIterations:Z.maxIterations,hooks:Z.hooks,extensions:Z.extensions,logger:Z.logger,telemetry:Z.telemetry},getConnectionConfig:()=>$.getSession(Q)?.runtime.delegatedAgentConfigProvider?.getConnectionConfig()??{providerId:Z.providerId,modelId:Z.modelId,apiKey:Z.apiKey,baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking},updateConnectionDefaults:()=>{}},createSubAgentTools:()=>{let Y=Z.enableTools?f2({cwd:Z.cwd,...u0[l1({mode:Z.mode})],executors:W}):[];if(Z.enableSpawnAgent)Y.push(hY($,Z,Q,W));return y1(Y)},...J})}import{readFile as uI,stat as dI}from"node:fs/promises";var lI=20480000;async function UU($){let Z=await dI($);if(!Z.isFile())throw Error("Path is not a file");if(Z.size>lI)throw Error("File is too large to read into context.");let Q=await uI($,"utf8");if(Q.includes("\x00"))throw Error("Cannot read binary file into context.");return Q}var DU=5000;function Y9($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function tI($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$,Q=Y9(Z.inputTokens),W=Y9(Z.outputTokens),J=Y9(Z.cacheReadTokens),X=Y9(Z.cacheWriteTokens),Y=Y9(Z.totalCost);if(Q===void 0||W===void 0||J===void 0||X===void 0||Y===void 0)return;return{inputTokens:Q,outputTokens:W,cacheReadTokens:J,cacheWriteTokens:X,totalCost:Y}}function eI($,Z){return{inputTokens:Math.max($.inputTokens,Z.inputTokens),outputTokens:Math.max($.outputTokens,Z.outputTokens),cacheReadTokens:Math.max($.cacheReadTokens,Z.cacheReadTokens),cacheWriteTokens:Math.max($.cacheWriteTokens,Z.cacheWriteTokens),totalCost:Math.max($.totalCost,Z.totalCost)}}class z1{runtimeAddress=void 0;pendingPrompts;sessionService;runtimeBuilder;createAgentInstance;toolExecutors;defaultCapabilities;defaultToolPolicies;providerSettingsManager;oauthTokenManager;defaultTelemetry;defaultFetch;events=new C5;sessions=new Map;usageBySession=new Map;aggregateUsageBySession=new Map;subAgentStarts=new Map;pendingPromptsController;eventBridge;sessionVersioning=new c$;constructor($){let Z=rI();if(Z)oI(Z);let Q=P0($.distinctId);this.sessionService=$.sessionService,this.runtimeBuilder=$.runtimeBuilder??new T4,this.createAgentInstance=$.createAgent??((W)=>new z$(W)),this.defaultCapabilities=q0($.capabilities),this.toolExecutors=this.defaultCapabilities?.toolExecutors,this.defaultToolPolicies=$.toolPolicies,this.providerSettingsManager=$.providerSettingsManager??new O1,this.oauthTokenManager=$.oauthTokenManager??new NY({providerSettingsManager:this.providerSettingsManager,telemetry:$.telemetry}),this.defaultTelemetry=$.telemetry,this.defaultTelemetry?.setDistinctId(Q),this.defaultFetch=$.fetch,this.pendingPromptsController=new wY({getSession:(W)=>this.sessions.get(W),emit:(W)=>this.emit(W),send:(W)=>this.runTurn(W)}),this.pendingPrompts={list:async(W)=>this.pendingPromptsController.list(W.sessionId),update:async(W)=>this.pendingPromptsController.update(W),delete:async(W)=>this.pendingPromptsController.delete(W)},this.eventBridge=new PY({getSession:(W)=>this.sessions.get(W),usageBySession:this.usageBySession,aggregateUsageBySession:this.aggregateUsageBySession,emit:(W)=>this.emit(W),persistMessages:(W,J,X)=>{this.invoke("persistSessionMessages",W,J,X)},enqueuePendingPrompt:(W,J)=>this.pendingPromptsController.enqueue(W,J),invokeBackendOptional:(W,...J)=>this.invokeOptional(W,...J)})}async applyInitialOAuthCredentials($){if($.config.apiKey?.trim())return $;let Z=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId});if(!Z?.apiKey)return $;return{...$,config:{...$.config,apiKey:Z.apiKey}}}async startSession($){let Z=$.source??z0.CLI,Q=J0(),W=$.config.sessionId?.trim()??"",J=W||nI(),X=await this.applyInitialOAuthCredentials($),Y=X.initialMessages??[],j=Y.length>0?b8(Y):D0(),V=await this.invokeOptionalValue("ensureSessionsDir")??"";if(!V)throw Error("session service method not available: ensureSessionsDir");let H=kY(V,J),B=kY(H,`${J}.messages.json`),G=kY(H,`${J}.json`),K=R$($.config),F=b0.parse({version:1,session_id:J,source:Z,pid:process.pid,started_at:Q,status:"running",interactive:$.interactive===!0,provider:X.config.providerId,model:X.config.modelId,cwd:X.config.cwd,workspace_root:K,team_name:X.config.teamName,enable_tools:X.config.enableTools,enable_spawn:X.config.enableSpawnAgent,enable_teams:X.config.enableAgentTeams,prompt:X.prompt?.trim()||void 0,messages_path:B}),A;if(W.length>0&&Y.length>0&&!X.prompt?.trim()){let P=await this.invokeOptionalValue("readSessionManifest",J);if(P)F=P,A={manifestPath:G,messagesPath:P.messages_path||B,manifest:P}}let f=await this.seedAggregateUsageFromArtifacts({initialUsage:j,sessionDir:H,rootMessagesPath:A?.messagesPath??B,manifest:F});this.usageBySession.set(J,j),this.aggregateUsageBySession.set(J,f);let D=q0(this.defaultCapabilities,$.capabilities),U=D?.toolExecutors??this.toolExecutors,T=$.localRuntime,O=T?.extensionContext?.logger??T?.logger,z=T?.extensionContext?.automation,_,E={getSession:(P)=>this.sessions.get(P),subAgentStarts:this.subAgentStarts,onAgentEvent:(P,B0,G0)=>this.eventBridge.dispatchAgentEvent(P,B0,G0),invokeBackendOptional:(P,...B0)=>this.invokeOptional(P,...B0)};_=await ZK({input:X,localRuntime:$.localRuntime,sessionId:J,providerSettingsManager:this.providerSettingsManager,defaultTelemetry:this.defaultTelemetry,defaultCapabilities:D,defaultToolPolicies:this.defaultToolPolicies,defaultFetch:this.defaultFetch,onPluginEvent:(P)=>{if(P.name==="plugin_log"){this.eventBridge.handlePluginLog(J,P.payload,O);return}this.eventBridge.handlePluginEvent(J,P,z)},onTeamEvent:(P)=>{this.eventBridge.handleTeamEvent(J,P),_.config.onTeamEvent?.(P)},createSpawnTool:()=>hY(E,_.config,J,U),createSubAgentLifecycleCallbacks:(P)=>yY(E,P,J),readSessionMetadata:async()=>(await this.getSession(J))?.metadata,writeSessionMetadata:async(P)=>{await this.persistSessionMetadata(J,()=>P)}});let C=await this.runtimeBuilder.build(_.runtimeBuilderInput),y=_.config,l=_.providerConfig;if(C.teamRuntime&&!y.teamName?.trim())y.teamName=C.teamRuntime.getTeamName();let o=[...C.tools,...y.extraTools??[]],t=C.extensions??_.extensions,Q0={sessionId:J,providerId:l.providerId,modelId:l.modelId,apiKey:l.apiKey,baseUrl:l.baseUrl,headers:l.headers,knownModels:l.knownModels,providerConfig:l,thinking:y.thinking,reasoningEffort:y.reasoningEffort??l.reasoningEffort,maxTokensPerTurn:y.maxTokensPerTurn,systemPrompt:y.systemPrompt,maxIterations:y.maxIterations,execution:y.execution,prepareTurn:G6(y),tools:o,hooks:_.hooks,extensions:t,hookErrorMode:y.hookErrorMode,initialMessages:_.effectiveInput.initialMessages,userFileContentLoader:UU,toolPolicies:_.toolPolicies,requestToolApproval:_.requestToolApproval?async(P)=>{let B0=_.requestToolApproval,G0=this.sessions.get(J);if(G0)await this.markTurnPending(G0);try{if(!B0)return{approved:!1,reason:"Tool approval callback is not configured."};return await B0(P)}finally{let C0=this.sessions.get(J);if(C0?.status==="pending")await this.markTurnRunning(C0)}}:void 0,telemetry:y.telemetry,onConsecutiveMistakeLimitReached:y.onConsecutiveMistakeLimitReached,completionPolicy:C.completionPolicy,consumePendingUserMessage:()=>{let P=this.pendingPromptsController.consumeSteer(J);return P?g5(P.prompt,P.mode??y.mode):void 0},logger:C.logger??y.logger,extensionContext:y.extensionContext,onEvent:(P)=>this.eventBridge.dispatchAgentEvent(J,y,P)};Q0.hooks={...Q0.hooks,onEvent:async(P)=>{if(await _.hooks?.onEvent?.(P),P.type!=="assistant-message")return;let B0=this.sessions.get(J);if(!B0)return;let G0=B0.agent.getMessages();try{await this.invoke("persistSessionMessages",J,G0,y.systemPrompt)}catch(C0){y.logger?.error?.("Failed to persist session messages after assistant response",{sessionId:J,error:C0}),l2(y.telemetry,{component:"core",operation:"session.persist_messages_after_assistant_response",error:C0,severity:"warn",handled:!0,context:{sessionId:J,providerId:y.providerId,modelId:y.modelId}})}}};let e0=this.createAgentInstance(Q0);if(Q0.onEvent)e0.subscribeEvents(Q0.onEvent);C.registerLeadAgent?.(e0);let l$=r1({agentId:e0.getAgentId(),conversationId:e0.getConversationId(),teamId:C.teamRuntime?.getTeamId(),teamName:C.teamRuntime?.getTeamName(),teamRole:C.teamRuntime?"lead":void 0});if(WK(y,J,W.length>0,K,l$),l$)H$(y.telemetry,{ulid:J,modelId:y.modelId,provider:y.providerId,...l$});if(C.teamRuntime)P9(y.telemetry,{ulid:J,teamId:C.teamRuntime.getTeamId(),teamName:C.teamRuntime.getTeamName(),leadAgentId:e0.getAgentId(),restoredFromPersistence:C.teamRestoredFromPersistence===!0});let r={sessionId:J,config:y,sessionMetadata:X.sessionMetadata,...A?{artifacts:A}:{},source:Z,startedAt:A?.manifest.started_at??Q,updatedAt:A?.manifest.ended_at??A?.manifest.started_at??Q,pendingPrompt:F.prompt,runtime:C,agent:e0,started:!1,status:A?.manifest.status??"running",aborting:!1,interactive:$.interactive===!0,persistedMessages:Y,activeTeamRunIds:new Set,pendingTeamRunUpdates:[],teamRunWaiters:[],pendingPrompts:[],drainingPendingPrompts:!1,pluginSandboxShutdown:_.pluginSandboxShutdown,submitAndExitObserved:!1,lastInteractiveTurnFinishReason:void 0};if(this.sessions.set(J,r),this.emitStatus(J,"running"),Y.length>0&&!A){if(await this.ensureSessionPersisted(r),await this.invoke("persistSessionMessages",r.sessionId,Y,r.config.systemPrompt),!X.prompt?.trim())await this.updateStatus(r,"completed",0)}let q1;try{if(X.prompt?.trim())if(q1=await this.executeTurn(r,{prompt:X.prompt,userImages:X.userImages,userFiles:X.userFiles}),!r.interactive)await this.finalizeSingleRun(r,q1.finishReason);else await this.completeInteractiveTurn(r,q1.finishReason)}catch(P){if(r.interactive&&r.aborting)q1=await this.completeAbortedInteractiveTurn(r);else{l2(r.config.telemetry,{component:"core",operation:"session.start",error:P,severity:"error",handled:!1,context:{sessionId:r.sessionId,providerId:r.config.providerId,modelId:r.config.modelId}});try{await this.failSession(r)}catch(B0){r.config.logger?.error?.("Session failure cleanup threw",{sessionId:r.sessionId,error:B0})}throw P}}return{sessionId:J,manifest:F,manifestPath:G,messagesPath:B,result:q1}}async restoreSession($){return this.sessionVersioning.restoreCheckpoint({...$,getSession:(Z)=>this.getSession(Z),readMessages:(Z)=>this.readSessionMessages(Z),buildStartInput:(Z,Q)=>{let W=Z.restoredCheckpointMetadata?{...Q.sessionMetadata??{},checkpoint:Z.restoredCheckpointMetadata}:Q.sessionMetadata;return{...Q,...W?{sessionMetadata:W}:{},initialMessages:Z.initialMessages}},startSession:(Z)=>this.startSession(Z),getStartedSessionId:(Z)=>Z.sessionId,readRestoredSession:(Z)=>this.getSession(Z)})}async runTurn($){let Z=this.getSessionOrThrow($.sessionId),Q=Z.agent.canStartRun(),W=$.delivery??(Z.interactive&&!Q?"queue":void 0);if(Z.config.telemetry?.capture({event:"session.input_sent",properties:{sessionId:$.sessionId,promptLength:$.prompt.length,userImageCount:$.userImages?.length??0,userFileCount:$.userFiles?.length??0,delivery:W??"immediate"}}),W==="queue"||W==="steer"){this.pendingPromptsController.enqueue($.sessionId,{prompt:$.prompt,mode:$.mode,delivery:W,userImages:$.userImages,userFiles:$.userFiles});return}try{let J=await this.executeTurn(Z,{prompt:$.prompt,mode:$.mode,userImages:$.userImages,userFiles:$.userFiles});if(!Z.interactive)await this.finalizeSingleRun(Z,J.finishReason);else await this.completeInteractiveTurn(Z,J.finishReason);if(J.finishReason==="error"||J.finishReason==="aborted")return J;return queueMicrotask(()=>{this.pendingPromptsController.drain($.sessionId)}),J}catch(J){if(Z.interactive&&Z.aborting)return await this.completeAbortedInteractiveTurn(Z);throw l2(Z.config.telemetry,{component:"core",operation:"session.submit",error:J,severity:"error",handled:!1,context:{sessionId:Z.sessionId,providerId:Z.config.providerId,modelId:Z.config.modelId}}),await this.failSession(Z),J}}async getAccumulatedUsage($){let Z=dJ(this.usageBySession.get($)),Q=dJ(this.aggregateUsageBySession.get($));return Z||Q?{usage:Z,aggregateUsage:Q}:void 0}async abort($,Z){let Q=this.sessions.get($);if(!Q)return;Q.config.telemetry?.capture({event:"session.aborted",properties:{sessionId:$}}),Q.aborting=!0,this.pendingPromptsController.clearAborted(Q),Q.agent.abort(Z)}async stopSession($){let Z=this.sessions.get($);if(!Z)return;if(Z.config.telemetry?.capture({event:"session.stopped",properties:{sessionId:$}}),Z.interactive&&!H0(Z.status)){await this.releaseSessionRuntime(Z,"session_stop");return}if(Z.interactive&&Z.agent.canStartRun()){await this.shutdownSession(Z,{status:this.resolveInteractiveStopStatus(Z),exitCode:this.resolveInteractiveStopExitCode(Z),shutdownReason:"session_stop",endReason:"stopped"});return}Z.aborting=!0,Z.agent.abort(Error("session_stop")),await this.shutdownSession(Z,{status:"cancelled",exitCode:0,shutdownReason:"session_stop",endReason:"stopped"})}async dispose($="session_manager_dispose"){let Z=[...this.sessions.values()];if(Z.length===0)return;await Promise.allSettled(Z.map((Q)=>Q.interactive&&!H0(Q.status)?this.releaseSessionRuntime(Q,$):Q.interactive&&Q.agent.canStartRun()?this.shutdownSession(Q,{status:this.resolveInteractiveStopStatus(Q),exitCode:this.resolveInteractiveStopExitCode(Q),shutdownReason:$,endReason:"disposed"}):this.shutdownSession(Q,{status:"cancelled",exitCode:0,shutdownReason:$,endReason:"disposed"}))),this.usageBySession.clear(),this.aggregateUsageBySession.clear()}async getSession($){let Z=this.sessions.get($);if(Z)return SY(Z);let Q=$.trim();if(!Q)return;let W=await this.getRow(Q);if(W)return g6(W);let J=await this.readManifest(Q);return J?gQ(J):void 0}async listSessions($=200){let Q=(await this.listRows($)).map(g6),W=new Set(Q.map((J)=>J.sessionId));for(let J of this.sessions.values()){if(W.has(J.sessionId))continue;Q.unshift(SY(J))}return Q.slice(0,$)}async deleteSession($){if(this.sessions.has($))await this.stopSession($);let Z=await this.invoke("deleteSession",$);if(Z.deleted)this.usageBySession.delete($),this.aggregateUsageBySession.delete($);return Z.deleted}async updateSession($,Z){return{updated:(await this.invokeOptionalValue("updateSession",{sessionId:$,prompt:Z.prompt,metadata:Z.metadata,title:Z.title}))?.updated===!0}}async readSessionMessages($){let Z=$.trim();if(!Z)return[];let Q=await this.getRow(Z);if(Q?.messagesPath)return I$(Q.messagesPath);let W=await this.readManifest(Z);return I$(W?.messages_path)}async dispatchHookEvent($){await RF($,{queueSpawnRequest:(Z)=>this.invokeOptional("queueSpawnRequest",Z),upsertSubagentSessionFromHook:(Z)=>this.invokeOptionalValue("upsertSubagentSessionFromHook",Z),appendSubagentHookAudit:(Z,Q)=>this.invokeOptional("appendSubagentHookAudit",Z,Q),applySubagentStatus:(Z,Q)=>this.invokeOptional("applySubagentStatus",Z,Q)})}subscribe($,Z){return this.events.subscribe($,Z)}async updateSessionModel($,Z){let Q=this.getSessionOrThrow($);Q.config.modelId=Z,Q.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({modelId:Z}),Q.agent.updateConnection({modelId:Z})}handlePluginEvent($,Z,Q){return this.eventBridge.handlePluginEvent($,Z,Q)}async executeTurn($,Z){let Q=await this.prepareTurnInput($,Z),W=Q.prompt.trim();if(!W)throw Error("prompt cannot be empty");if(!$.artifacts&&!$.pendingPrompt)$.pendingPrompt=W;await this.ensureSessionPersisted($),await this.syncOAuthCredentials($),await this.markTurnRunning($);let J=await this.executeAgentTurn($,W,Q.userImages,Q.userFiles);while(QX($,J.finishReason)){let X=await WX($);if(X.length===0)break;let Y=JX($,X);J=await this.executeAgentTurn($,Y)}return J}async completeInteractiveTurn($,Z){if(x5($))return;$.lastInteractiveTurnFinishReason=Z,await this.markTurnIdle($),$.aborting=!1}resolveInteractiveStopStatus($){let Z=$.lastInteractiveTurnFinishReason;if(!Z)return"cancelled";switch(Z){case"completed":return"completed";case"error":return"failed";case"aborted":case"max_iterations":case"mistake_limit":return"cancelled"}return Z}resolveInteractiveStopExitCode($){return $.lastInteractiveTurnFinishReason==="error"?1:0}async completeAbortedInteractiveTurn($){let Z=new Date,Q=$.agent.getMessages(),W=D0();return $.persistedMessages=Q,$.started=$.started||Q.length>0,this.eventBridge.dispatchAgentEvent($.sessionId,$.config,{type:"done",reason:"aborted",text:"",iterations:0,usage:W}),await this.completeInteractiveTurn($,"aborted"),{text:"",usage:W,messages:Q,toolCalls:[],iterations:0,finishReason:"aborted",model:{id:$.config.modelId,provider:$.config.providerId},startedAt:Z,endedAt:Z,durationMs:0}}async executeAgentTurn($,Z,Q,W){let J=$.started||$.agent.getMessages().length>0,X=$.persistedMessages??$.agent.getMessages(),Y=this.usageBySession.get($.sessionId)??D0(),j=this.aggregateUsageBySession.get($.sessionId)??Y;$.turnUsageBaseline=Y,$.turnAggregateUsageBaseline=j,$.turnPrimaryUsage=D0(),$.turnUsageByAgent=new Map,M9($.config.telemetry,$.sessionId,$.config.mode),Z8($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,model:$.config.modelId,source:"user",mode:$.config.mode,...this.getSessionAgentTelemetryIdentity($)});try{let V=J?()=>$.agent.continue(Z,Q,W):()=>$.agent.run(Z,Q,W),H=await this.runWithAuthRetry($,V,X);$.started=!0;let B=hZ(H.messages,H,X);$.persistedMessages=B;let G=v6($.turnUsageByAgent?.values()??[]),K=f0(Y,H.usage),F=f0(f0(D0(),H.usage),G),A=f0(j,F);return this.usageBySession.set($.sessionId,K),this.aggregateUsageBySession.set($.sessionId,A),await this.persistSessionMetadata($.sessionId,(L)=>({...L??{},totalCost:K.totalCost,aggregatedAgentsCost:A.totalCost,usage:K,aggregateUsage:A})),await this.invoke("persistSessionMessages",$.sessionId,B,$.config.systemPrompt),this.observeTaskCompletionTool($,H),H}catch(V){throw l2($.config.telemetry,{component:"core",operation:"session.turn",error:V,severity:"error",handled:!1,context:{sessionId:$.sessionId,providerId:$.config.providerId,modelId:$.config.modelId}}),await this.invoke("persistSessionMessages",$.sessionId,$.agent.getMessages(),$.config.systemPrompt),V}finally{$.turnUsageBaseline=void 0,$.turnAggregateUsageBaseline=void 0,$.turnPrimaryUsage=void 0,$.turnUsageByAgent=void 0}}observeTaskCompletionTool($,Z){if($.submitAndExitObserved)return;if(!Z.toolCalls.some((W)=>W.name===U0.SUBMIT_AND_EXIT&&W.error===void 0))return;$.submitAndExitObserved=!0,x4($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"submit_and_exit",...this.getSessionAgentTelemetryIdentity($)})}async prepareTurnInput($,Z){let Q=R$($.config),W=sI(Z.prompt).trim();if(!W)return{prompt:"",userImages:Z.userImages,userFiles:this.resolveAbsoluteFilePaths($.config.cwd,Z.userFiles)};let J=await T8(W,Q);JK($.config.telemetry,J);let X=g5(J.prompt,Z.mode??$.config.mode),Y=this.resolveAbsoluteFilePaths($.config.cwd,Z.userFiles),j=this.resolveAbsoluteFilePaths(Q,J.matchedFiles),V=Array.from(new Set([...Y,...j]));return{prompt:X,userImages:Z.userImages,userFiles:V.length>0?V:void 0}}async ensureSessionPersisted($){if($.artifacts)return;let Z=R$($.config);$.artifacts=await this.invoke("createRootSessionWithArtifacts",{sessionId:$.sessionId,source:$.source,pid:process.pid,interactive:$.interactive,provider:$.config.providerId,model:$.config.modelId,cwd:$.config.cwd,workspaceRoot:Z,teamName:$.config.teamName,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,prompt:$.pendingPrompt,metadata:$.sessionMetadata,startedAt:$.startedAt})}async markTurnRunning($){if($.status==="running")return;await this.updateStatus($,"running",null)}async markTurnPending($){if($.status==="pending")return;await this.updateStatus($,"pending",null)}async markTurnIdle($){if($.status==="idle")return;await this.updateStatus($,"idle",null)}async persistSessionMetadata($,Z){let Q=this.sessions.get($),W=await this.invokeOptionalValue("readSessionManifest",$)??Q?.artifacts?.manifest,J=Z(W?.metadata);if(!Q?.artifacts)return;if((await this.invokeOptionalValue("updateSession",{sessionId:$,metadata:J}))?.updated===!1)return;Q.sessionMetadata=J,Q.artifacts.manifest.metadata=J}async finalizeSingleRun($,Z){if(x5($))return;let Q=Z==="aborted"||$.aborting,W=Z==="error";await this.shutdownSession($,{status:Q?"cancelled":W?"failed":"completed",exitCode:W?1:0,shutdownReason:W?"session_error":"session_complete",endReason:Z})}async failSession($){await this.shutdownSession($,{status:"failed",exitCode:1,shutdownReason:"session_error",endReason:"error"})}async shutdownSession($,Z){if(Z.status==="completed"&&!$.submitAndExitObserved)x4($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"shutdown",...this.getSessionAgentTelemetryIdentity($)});pQ($);let Q=[],W=(J,X)=>{Q.push(X),$.config.logger?.log("Session shutdown cleanup failed",{sessionId:$.sessionId,stage:J,error:X,severity:"warn"}),l2($.config.telemetry,{component:"core",operation:"session.shutdown_cleanup",error:X,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:J,status:Z.status,shutdownReason:Z.shutdownReason,providerId:$.config.providerId,modelId:$.config.modelId}})};if($.artifacts){try{await this.updateStatus($,Z.status,Z.exitCode)}catch(J){W("update_status",J)}try{await $.agent.shutdown(Z.shutdownReason)}catch(J){W("agent_shutdown",J)}}try{await Promise.resolve($.runtime.shutdown(Z.shutdownReason))}catch(J){W("runtime_shutdown",J)}try{await $.pluginSandboxShutdown?.()}catch(J){W("plugin_sandbox_shutdown",J)}if(this.sessions.delete($.sessionId),this.emit({type:"ended",payload:{sessionId:$.sessionId,reason:Z.endReason,ts:Date.now()}}),Q.length>0&&Z.status==="failed")throw Q[0]}async releaseSessionRuntime($,Z){let Q=[],W=(J,X)=>{Q.push(X),$.config.logger?.log("Session runtime cleanup failed",{sessionId:$.sessionId,stage:J,error:X,severity:"warn"}),l2($.config.telemetry,{component:"core",operation:"session.runtime_cleanup",error:X,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:J,reason:Z,providerId:$.config.providerId,modelId:$.config.modelId}})};try{await $.agent.shutdown(Z)}catch(J){W("agent_shutdown",J)}try{await Promise.resolve($.runtime.shutdown(Z))}catch(J){W("runtime_shutdown",J)}try{await $.pluginSandboxShutdown?.()}catch(J){W("plugin_sandbox_shutdown",J)}if(this.sessions.delete($.sessionId),Q.length>0)throw Q[0]}async updateStatus($,Z,Q){if(!$.artifacts)return;let W=await this.invoke("updateSessionStatus",$.sessionId,Z,Q);if(!W.updated)return;let J=await this.invokeOptionalValue("readSessionManifest",$.sessionId)??$.artifacts.manifest;if(J.status=Z,H0(Z))delete J.ended_at,J.exit_code=null;else J.ended_at=W.endedAt??J0(),J.exit_code=typeof Q==="number"?Q:null;$.artifacts.manifest=J,$.status=Z,$.updatedAt=W.endedAt??J0(),$.endedAt=H0(Z)?null:J.ended_at,$.exitCode=J.exit_code,await this.invoke("writeSessionManifest",$.artifacts.manifestPath,J),this.emitStatus($.sessionId,Z)}async runWithAuthRetry($,Z,Q){try{return await Z()}catch(W){if(!Z2($.config.providerId)||!aI(W))throw W;return await this.syncOAuthCredentials($,{forceRefresh:!0}),$.agent.restore(Q),Z()}}async syncOAuthCredentials($,Z){let Q=null;try{Q=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId,forceRefresh:Z?.forceRefresh})}catch(W){if(W instanceof r7)throw Error(`${W.providerId} requires re-authentication.`);throw W}if(!Q?.apiKey||$.config.apiKey===Q.apiKey)return;$.config.apiKey=Q.apiKey,$.agent.updateConnection({apiKey:Q.apiKey}),$.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({apiKey:Q.apiKey}),$.runtime.teamRuntime?.updateTeammateConnections({apiKey:Q.apiKey})}getSessionOrThrow($){let Z=this.sessions.get($);if(!Z){let Q=new k1($);throw l2(this.defaultTelemetry,{component:"core",operation:"session.active_lookup",error:Q,severity:"warn",handled:!0,context:{sessionId:$,activeSessionCount:this.sessions.size}}),Q}return Z}resolveAbsoluteFilePaths($,Z){if(!Z||Z.length===0)return[];let Q=Z.map((W)=>W.trim()).filter((W)=>W.length>0).map((W)=>iI(W)?W:IY($,W));return Array.from(new Set(Q))}getSessionAgentTelemetryIdentity($){return r1({agentId:$.agent.getAgentId(),conversationId:$.agent.getConversationId(),teamId:$.runtime.teamRuntime?.getTeamId(),teamName:$.runtime.teamRuntime?.getTeamName(),teamRole:$.runtime.teamRuntime?"lead":void 0})}async seedAggregateUsageFromArtifacts($){let Z=await this.summarizePersistedTeammateUsage($.sessionDir,$.rootMessagesPath,$.manifest.session_id),Q=f0($.initialUsage,Z);return this.withPersistedAggregateUsageFloor(Q,$.manifest)}async summarizePersistedTeammateUsage($,Z,Q){let W=IY(Z),J=`${Q}.messages.json`,X;try{X=pI($)}catch{return D0()}let Y=D0();for(let j of X){if(!j.endsWith(".messages.json"))continue;if(j===J)continue;let V=IY($,j);if(V===W)continue;let H=await I$(V);if(H.length===0)continue;Y=f0(Y,b8(H))}return Y}withPersistedAggregateUsageFloor($,Z){let Q=tI(Z.metadata?.aggregateUsage);if(Q)return eI($,Q);let W=Z.metadata?.aggregatedAgentsCost;if(typeof W!=="number"||!Number.isFinite(W)||W<=$.totalCost)return $;return{...$,totalCost:W}}emitStatus($,Z){this.emitSessionSnapshot($),this.emit({type:"status",payload:{sessionId:$,status:Z}})}async emitSessionSnapshot($){let Z=await this.getSession($);if(!Z)return;this.emit({type:"session_snapshot",payload:{sessionId:$,snapshot:f1({session:Z,messages:await this.readSessionMessages($),usage:this.usageBySession.get($),aggregateUsage:this.aggregateUsageBySession.get($)})}})}emit($){this.events.emit($)}async listRows($){return this.invoke("listSessions",Math.min(Math.max(1,Math.floor($)),DU))}async getRow($){let Z=$.trim();if(!Z)return;return(await this.listRows(DU)).find((W)=>W.sessionId===Z)}async readManifest($){let Z=$.trim();if(!Z)return;return await this.invokeOptionalValue("readSessionManifest",Z)}invoke($,...Z){return FU(this.sessionService,$,...Z)}invokeOptional($,...Z){return AU(this.sessionService,$,...Z)}invokeOptionalValue($,...Z){return fU(this.sessionService,$,...Z)}}function Zx($){return{text:$.text,usage:$.usage,inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,iterations:$.iterations,finishReason:$.finishReason,toolCalls:$.toolCalls.map((Z)=>({name:Z.name,input:Z.input,output:Z.output,error:Z.error,durationMs:Z.durationMs}))}}function Qx($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}function YU($={}){let Z=new z1({sessionService:new _1(new D1),fetch:$.fetch,telemetry:$.telemetry});return{async startSession(Q){let W=(Q.cwd?.trim()||Q.workspaceRoot).trim(),J=await Z.startSession({source:Q.source?.trim()||z0.CLI,interactive:!1,config:{providerId:$x(Q.provider),modelId:Q.model,apiKey:Q.apiKey?.trim()||void 0,cwd:W,workspaceRoot:Q.workspaceRoot,systemPrompt:Q.systemPrompt??"",mode:Qx(Q),maxIterations:Q.maxIterations,enableTools:Q.enableTools!==!1,enableSpawnAgent:Q.enableSpawn!==!1,enableAgentTeams:Q.enableTeams!==!1,disableMcpSettingsTools:Q.disableMcpSettingsTools,missionLogIntervalSteps:Q.missionStepInterval,missionLogIntervalMs:Q.missionTimeIntervalMs},toolPolicies:Q.toolPolicies??{"*":{autoApprove:Q.autoApproveTools!==!1}},localRuntime:{configExtensions:Q.configExtensions}});return{sessionId:J.sessionId,startResult:{sessionId:J.sessionId,manifestPath:J.manifestPath,messagesPath:J.messagesPath}}},async sendSession(Q,W){let J=await Z.runTurn({sessionId:Q,prompt:W.prompt,userImages:W.attachments?.userImages,userFiles:W.attachments?.userFiles?.map((X)=>X.content)});if(!J)throw Error("local hub schedule runtime returned no turn result");return{result:Zx(J)}},async abortSession(Q){return await Z.abort(Q,Error("hub schedule abort")),{applied:!0}},async stopSession(Q){return await Z.stopSession(Q),{applied:!0}}}}import{resolveClineBuildEnv as fD}from"@cline/shared";function Wx($){if(typeof $==="string")return $.trim()||void 0;if(!Array.isArray($))return;return $.map((Q)=>{if(Q&&typeof Q==="object"&&"type"in Q&&Q.type==="text"&&"text"in Q&&typeof Q.text==="string")return Q.text.trim();return""}).filter(Boolean).join(`
|
|
736
|
+
`).trim()||void 0}var LU=120,xY="...";function Q9($){let Z=$.trim();if(!Z)return"";if(Buffer.byteLength(Z,"utf8")<=LU)return Z;let Q=LU-Buffer.byteLength(xY,"utf8");if(Q<=0)return xY;let W="";for(let J of Z){if(Buffer.byteLength(W+J,"utf8")>Q)break;W+=J}return`${W}${xY}`}async function _U($){let Z=$?.sessionId?.trim()||"unknown",Q=typeof $?.metadata?.messagesPath==="string"?$.metadata.messagesPath:void 0,J=[...await I$(Q)].reverse().find((V)=>V.role==="assistant"),X=J?Wx(J.content):void 0,Y=$?.workspaceRoot?.trim()||"workspace",j=typeof $?.metadata?.prompt==="string"?$.metadata.prompt.trim():Y;return{title:`Task completed (${Z})`,body:Q9(X&&X.length>0?X:j.length>0?j:Y),severity:"info"}}import{captureSdkError as t7,createSessionId as Zg}from"@cline/shared";import{createSessionId as jx}from"@cline/shared";import{createSessionId as Yx}from"@cline/shared";function Jx($){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 Xx($){let Z=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):{};if($.parentSessionId?.trim())Z.parentSessionId=$.parentSessionId;if($.parentAgentId?.trim())Z.parentAgentId=$.parentAgentId;if($.agentId?.trim())Z.agentId=$.agentId;if($.conversationId?.trim())Z.conversationId=$.conversationId;if($.messagesPath?.trim())Z.messagesPath=$.messagesPath;if($.prompt?.trim())Z.prompt=$.prompt;if($.provider?.trim())Z.provider=$.provider;if($.model?.trim())Z.model=$.model;if($.source?.trim())Z.source=$.source;if(typeof $.pid==="number")Z.pid=$.pid;return Object.keys(Z).length>0?Z:void 0}function n7($,Z,Q,W){return{sessionId:$.sessionId,workspaceRoot:$.workspaceRoot,cwd:$.cwd,createdAt:Date.parse($.startedAt),updatedAt:Date.parse($.updatedAt),createdByClientId:Z?.createdByClientId??"hub",status:Jx($.status),participants:Z?[...Z.participants.values()]:[],metadata:Xx($),runtimeOptions:{enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,mode:typeof $.metadata?.mode==="string"?$.metadata.mode:void 0,systemPrompt:typeof $.metadata?.systemPrompt==="string"?$.metadata.systemPrompt:void 0},runtimeSession:$.agentId?{agentId:$.agentId,team:$.teamName?{teamId:$.teamName}:void 0}:void 0,...Q?{usage:{...Q}}:{},...W?{aggregateUsage:{...W}}:{}}}function c($,Z){return{version:$.version,requestId:$.requestId,ok:!0,...Z!==void 0?{payload:Z}:{}}}function x($,Z,Q){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:Z,message:Q}}}function a7($){return $&&typeof $==="object"&&!Array.isArray($)?$:void 0}function I0($){if(typeof $.payload?.sessionId==="string")return $.payload.sessionId.trim();return $.sessionId?.trim()??""}function p2($,Z,Q){return{version:"v1",event:$,eventId:Yx("hevt_"),sessionId:Q,timestamp:Date.now(),payload:Z}}async function o0($,Z){let Q=await $.sessionHost.getSession(Z);if(!Q)return;let W=await $.sessionHost.getAccumulatedUsage?.(Z);return n7(Q,$.sessionState.get(Z),W?.usage,W?.aggregateUsage)}async function t0($,Z){let Q=await $.sessionHost.getSession(Z);if(!Q)return;let[W,J]=await Promise.all([typeof $.sessionHost.readSessionMessages==="function"?$.sessionHost.readSessionMessages(Z):[],$.sessionHost.getAccumulatedUsage?.(Z)]);return f1({session:Q,messages:W,usage:J?.usage,aggregateUsage:J?.aggregateUsage})}function s7($,Z,Q,W,J={}){let X=$.sessionState.get(Z);if(X){if(J.interactive!==void 0)X.interactive=J.interactive;if(!X.participants.has(Q))X.participants.set(Q,{clientId:Q,attachedAt:Date.now(),role:W});return X}let Y={createdByClientId:Q,interactive:J.interactive??!0,participants:new Map([[Q,{clientId:Q,attachedAt:Date.now(),role:W}]])};return $.sessionState.set(Z,Y),Y}async function gY($,Z){let Q=jx("approval_"),W=Z.sessionId;if($.sessionState.get(W)?.interactive===!1)return{approved:!1,reason:"Tool approval requires an interactive session, but this session is non-interactive."};return await new Promise((X)=>{$.pendingApprovals.set(Q,{sessionId:W,resolve:X}),$.publish($.buildEvent("approval.requested",{approvalId:Q,sessionId:Z.sessionId,agentId:Z.agentId,conversationId:Z.conversationId,iteration:Z.iteration,toolCallId:Z.toolCallId,toolName:Z.toolName,inputJson:JSON.stringify(Z.input??null),policy:Z.policy},W))})}function mY($,Z,Q){let W=$.pendingApprovals.get(Z);if(!W)return;return $.pendingApprovals.delete(Z),W.resolve(Q),{sessionId:W.sessionId}}function vY($,Z,Q){let W=0;for(let[J,X]of[...$.pendingApprovals.entries()]){if(!Z({approvalId:J,sessionId:X.sessionId}))continue;$.pendingApprovals.delete(J),X.resolve({approved:!1,reason:Q}),$.publish($.buildEvent("approval.resolved",{approvalId:J,approved:!1,cancelled:!0,reason:Q},X.sessionId)),W+=1}return W}async function zU($,Z){let Q=typeof Z.payload?.approvalId==="string"?Z.payload.approvalId.trim():"";if(!$.pendingApprovals.get(Q))return x(Z,"approval_not_found",`Unknown approval: ${Q}`);let J=typeof Z.payload?.reason==="string"?Z.payload.reason:Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)&&typeof Z.payload.payload.reason==="string"?Z.payload.payload.reason:void 0,X=Z.payload?.approved===!0,Y=mY($,Q,{approved:X,reason:J});if(!Y)return x(Z,"approval_not_found",`Unknown approval: ${Q}`);return $.publish($.buildEvent("approval.resolved",{approvalId:Q,approved:X,reason:J},Y.sessionId)),c(Z,{approvalId:Q,approved:X})}import{createSessionId as Bx}from"@cline/shared";function Vx($){if($ instanceof Error)return{name:$.name,message:$.message,stack:$.stack};if($===void 0)return;return $}var TU={debug:10,info:20,warn:30,error:40,silent:50};function Hx(){let $=process.env.CLINE_HUB_LOG_LEVEL?.trim().toLowerCase();if($==="debug"||$==="info"||$==="warn"||$==="error"||$==="silent")return $;return process.env.VITEST?"error":"info"}function u($,Z,Q={}){if(TU[$]<TU[Hx()])return;let W=JSON.stringify({ts:new Date().toISOString(),level:$,component:"hub",message:Z,...Object.fromEntries(Object.entries(Q).map(([J,X])=>[J,Vx(X)]).filter(([,J])=>J!==void 0))});if($==="error"||$==="warn"){console.error(`[hub] ${W}`);return}console.log(`[hub] ${W}`)}function cY($,Z){let Q=Z instanceof Error?Z.stack||Z.message:String(Z);u("error",$,{error:Q})}async function OU($,Z,Q,W,J,X){let Y=Bx("capreq_"),j=performance.now();return u("info","capability.request.start",{requestId:Y,sessionId:Z,capabilityName:Q,targetClientId:J}),await new Promise((V,H)=>{$.pendingCapabilityRequests.set(Y,{sessionId:Z,targetClientId:J,capabilityName:Q,onProgress:X,resolve:(B)=>{if(u(B.ok?"info":"warn","capability.request.end",{requestId:Y,sessionId:Z,capabilityName:Q,targetClientId:J,ok:B.ok,error:B.error,durationMs:Math.round(performance.now()-j)}),!B.ok){H(Error(B.error||`Capability ${Q} was rejected by ${J}.`));return}V(B.payload)}}),$.publish($.buildEvent("capability.requested",{requestId:Y,targetClientId:J,capabilityName:Q,payload:W},Z)),u("info","capability.request.published",{requestId:Y,sessionId:Z,capabilityName:Q,targetClientId:J})})}function qU($,Z){let Q=typeof Z.payload?.requestId==="string"?Z.payload.requestId.trim():"",W=$.pendingCapabilityRequests.get(Q);if(!W)return x(Z,"capability_not_found",`Unknown capability request: ${Q}`);if((Z.clientId?.trim()||"")!==W.targetClientId)return x(Z,"capability_wrong_client",`Capability request ${Q} is owned by ${W.targetClientId}`);if(Z.sessionId?.trim()&&Z.sessionId.trim()!==W.sessionId)return x(Z,"capability_wrong_session",`Capability request ${Q} belongs to session ${W.sessionId}`);let X=Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)?Z.payload.payload:{};return W.onProgress?.(X),c(Z,{requestId:Q})}function u$($,Z,Q){let W=0;for(let[J,X]of[...$.pendingCapabilityRequests.entries()]){if(!Z({requestId:J,...X}))continue;$.pendingCapabilityRequests.delete(J),u("warn","capability.request.cancelled",{requestId:J,sessionId:X.sessionId,capabilityName:X.capabilityName,targetClientId:X.targetClientId,reason:Q}),X.resolve({ok:!1,error:Q}),$.publish($.buildEvent("capability.resolved",{requestId:J,capabilityName:X.capabilityName,targetClientId:X.targetClientId,ok:!1,cancelled:!0,error:Q},X.sessionId)),W+=1}return W}async function MU($,Z){let Q=typeof Z.payload?.sessionId==="string"?Z.payload.sessionId.trim():Z.sessionId?.trim()||"",W=typeof Z.payload?.capabilityName==="string"?Z.payload.capabilityName.trim():"",J=typeof Z.payload?.targetClientId==="string"?Z.payload.targetClientId.trim():"";if(!Q||!W||!J)return x(Z,"invalid_capability_request","capability.request requires sessionId, capabilityName, and targetClientId");try{let X=Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)?Z.payload.payload:{},Y=await $.requestCapability(Q,W,X,J);return c(Z,Y)}catch(X){return x(Z,"capability_request_failed",X instanceof Error?X.message:String(X))}}function RU($,Z){let Q=typeof Z.payload?.requestId==="string"?Z.payload.requestId.trim():"",W=$.pendingCapabilityRequests.get(Q);if(!W)return x(Z,"capability_not_found",`Unknown capability request: ${Q}`);let J=Z.clientId?.trim()||"";if(J!==W.targetClientId)return x(Z,"capability_wrong_client",`Capability request ${Q} is owned by ${W.targetClientId}`);if(Z.sessionId?.trim()&&Z.sessionId.trim()!==W.sessionId)return x(Z,"capability_wrong_session",`Capability request ${Q} belongs to session ${W.sessionId}`);$.pendingCapabilityRequests.delete(Q);let X=Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)?Z.payload.payload:void 0,Y=typeof Z.payload?.error==="string"?Z.payload.error:void 0,j=Z.payload?.ok===!0;return u(j?"info":"warn","capability.respond",{requestId:Q,sessionId:W.sessionId,capabilityName:W.capabilityName,targetClientId:W.targetClientId,respondedByClientId:J,ok:j,error:Y}),W.resolve({ok:j,payload:X,error:Y}),$.publish($.buildEvent("capability.resolved",{requestId:Q,capabilityName:W.capabilityName,targetClientId:W.targetClientId,respondedByClientId:J,ok:j,payload:X,error:Y},W.sessionId)),c(Z,{requestId:Q,ok:j})}import{createSessionId as Gx}from"@cline/shared";function EU($,Z){let Q=Z.payload,W=Q?.clientId?.trim()||Z.clientId?.trim()||Gx("client_");return $.clients.set(W,{clientId:W,clientType:Q?.clientType??"unknown",displayName:Q?.displayName,actorKind:Q?.actorKind??"client",connectedAt:Date.now(),lastSeenAt:Date.now(),transport:Q?.transport??"native",capabilities:Q?.capabilities??[],metadata:Q?.metadata,workspaceContext:Q?.workspaceContext}),$.publish($.buildEvent("hub.client.registered",{clientId:W,clientType:Q?.clientType??"unknown",displayName:Q?.displayName,connectedAt:Date.now()})),c(Z,{clientId:W})}function NU($,Z){let Q=Z.clientId?.trim(),W=Q?$.clients.get(Q):void 0;if(!Q||!W)return x(Z,"client_not_found","Client is not registered with this hub.");let J=a7(Z.payload?.metadata);if(W.lastSeenAt=Date.now(),J)W.metadata=JSON.parse(JSON.stringify(J));return c(Z)}function wU($,Z,Q){let W=Z.clientId?.trim();if(W)$.clients.delete(W),Q(W),$.publish($.buildEvent("hub.client.disconnected",{clientId:W}));return c(Z)}function CU($,Z){return c(Z,{clients:[...$.clients.values()]})}_0();import{existsSync as bU,mkdirSync as Kx,readdirSync as Fx,readFileSync as Ax,rmSync as fx,writeFileSync as Ux}from"node:fs";import{dirname as Dx,join as PU}from"node:path";import{CONNECTOR_PLATFORMS as Lx,connectorChannelsFromPlatforms as _x,listConnectorCatalog as yU,shouldIncludeConnectorField as zx}from"@cline/shared";import{resolveConnectorDataDir as Tx,resolveConnectorSettingsPath as dY}from"@cline/shared/storage";var Ox=1,SU={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},qx={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 d$($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function j9($){return typeof $==="string"?$.trim():void 0}function hU($){if(!bU($))return;try{let Z=JSON.parse(Ax($,"utf8"));return d$(Z)?Z:void 0}catch{return}}function lY(){let $=hU(dY()),Z=d$($?.connectors)?$.connectors:{},Q={};for(let[W,J]of Object.entries(Z)){if(!d$(J))continue;let X=j9(J.type),Y=j9(J.configuredAt),j=j9(J.updatedAt);if(!X||!Y||!j)continue;let V=o7(J.values),H=d$(J.security)?{enabled:J.security.enabled===!0,values:o7(J.security.values)}:void 0;Q[W]={type:X,values:V,security:H,configuredAt:Y,updatedAt:j}}return{version:Ox,connectors:Q}}function kU($){let Z=dY();Kx(Dx(Z),{recursive:!0}),Ux(Z,`${JSON.stringify($,null,2)}
|
|
737
|
+
`,"utf8")}function o7($){if(!d$($))return{};let Z={};for(let[Q,W]of Object.entries($))if(typeof W==="string")Z[Q]=W.trim();return Z}function Mx($){if(!Number.isInteger($)||$<=0)return!1;try{return process.kill($,0),!0}catch{return!1}}function Rx($){let Z=PU(Tx(),$);if(!bU(Z))return[];return Fx(Z).filter((Q)=>Q.endsWith(".json")&&!Q.endsWith(".threads.json")).map((Q)=>PU(Z,Q))}function Ex($,Z,Q){let W=Z.botUsername??Z.userName??Z.applicationId??Z.phoneNumberId??String(Q);return`${$}:${W}`}function Nx($,Z){let Q=hU(Z);if(!Q)return;let W=typeof Q.pid==="number"?Q.pid:void 0,J=typeof Q.hubUrl==="string"?Q.hubUrl:typeof Q.rpcAddress==="string"?Q.rpcAddress:void 0;if(!W||!J||!Mx(W))return;let X=qx[$];if(!X)return;let Y={};for(let j of X.required){let V=SU[j](Q);if(!V||typeof V==="string"&&!V.trim())return;Y[j]=V}for(let j of X.optional){let V=SU[j](Q);if(V!==void 0)Y[j]=V}return{id:Ex($,Y,W),type:$,pid:W,hubUrl:J,...Y}}function wx(){let $=[];for(let{name:Z}of yU())for(let Q of Rx(Z)){let W=Nx(Z,Q);if(W)$.push(W)}return $.sort((Z,Q)=>{if(Z.type!==Q.type)return Z.type.localeCompare(Q.type);let W=Z.botUsername??Z.userName??"",J=Q.botUsername??Q.userName??"";return W.localeCompare(J)})}function Cx(){let $=lY();return Object.entries($.connectors).map(([Z,Q])=>({id:Z,type:Q.type,configuredAt:Q.configuredAt,updatedAt:Q.updatedAt})).sort((Z,Q)=>Z.type.localeCompare(Q.type))}function pY(){return{available:_x(),active:wx(),configured:Cx()}}function Px($,Z){if($.required&&!Z[$.flag]?.trim())throw Error(`${$.label} is required`)}function Sx($,Z){let Q={};for(let J of $.fields)Q[J.flag]=Z[J.flag]??J.initialValue??"";let W={};for(let J of $.fields){if(!zx(J,Q))continue;Px(J,Q),W[J.flag]=Q[J.flag]}return W}function bx($){if(!d$($))throw Error("connector.configure payload must be an object.");let Z=j9($.channel);if(!Z)throw Error("channel is required");let Q=Lx.find((K)=>K.id===Z);if(!Q)throw Error(`unknown connector channel: ${Z}`);if(!new Set(yU().map((K)=>K.name)).has(Q.id))throw Error(`connector channel is not available: ${Z}`);let J=o7($.values),X=Sx(Q,J),Y=d$($.security)?$.security:{},j=Y.enabled===!0,V=o7(Y.values);if(j&&Q.security)for(let K of Q.security.fields){let F=V[K.key];if(!F)throw Error(K.requiredMessage);let A=K.validate?.(F);if(A)throw Error(A)}let H=lY(),B=new Date().toISOString(),G=H.connectors[Z];return H.connectors[Z]={type:Z,values:X,security:j?{enabled:!0,values:V}:{enabled:!1,values:{}},configuredAt:G?.configuredAt??B,updatedAt:B},kU(H),pY()}function yx($){if(!d$($))throw Error("connector.delete_config payload must be an object.");let Z=j9($.channel);if(!Z)throw Error("channel is required");let Q=lY();if(delete Q.connectors[Z],Object.keys(Q.connectors).length>0)kU(Q);else fx(dY(),{force:!0});return pY()}function hx($){return $==="connector.configure"||$==="connector.delete_config"}function uY($,Z,Q){if(!hx(Z.command))return;Q8($.telemetry,{ulid:Z.sessionId??Z.requestId??"hub",tool:Z.command,success:Q})}async function IU($,Z){try{if(Z.command==="connector.channels")return c(Z,pY());if(Z.command==="connector.configure"){let Q=bx(Z.payload);return uY($,Z,!0),c(Z,Q)}if(Z.command==="connector.delete_config"){let Q=yx(Z.payload);return uY($,Z,!0),c(Z,Q)}return x(Z,"unsupported_connector_command",`unsupported connector command: ${Z.command}`)}catch(Q){return uY($,Z,!1),x(Z,"connector_command_failed",Q instanceof Error?Q.message:String(Q))}}var kx=30000;function Ix($){if($==="aborted")return"run.aborted";if($==="error"||$==="failed")return"run.failed";return"run.completed"}function xx($){if($.finishReason!=="error")return;return $.text.trim()||void 0}function gx($,Z,Q){let W=Q instanceof Error&&Q.message.trim()?Q.message:`Unknown session: ${Z}`;return x($,a$,W)}function mx($){return $?$:void 0}function vx($){let Z=typeof $.timeoutMs==="number"?$.timeoutMs:typeof $.timeout_ms==="number"?$.timeout_ms:void 0;if(Z&&Number.isFinite(Z)&&Z>0)return Math.floor(Z);let Q=typeof $.timeoutSeconds==="number"?$.timeoutSeconds:typeof $.timeout_seconds==="number"?$.timeout_seconds:void 0;if(Q&&Number.isFinite(Q)&&Q>0)return Math.floor(Q*1000);return}async function cx($,Z,Q,W){let J=performance.now(),X=!1,Y={command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Q.sessionId,timeoutMs:W},j=setInterval(()=>{if(X)return;let B=Math.round(performance.now()-J);u("warn","run.heartbeat",{...Y,elapsedMs:B}),$.publish($.buildEvent("run.heartbeat",{requestId:Z.requestId,elapsedMs:B,...W?{timeoutMs:W}:{}},Q.sessionId))},kx),V=$.sessionHost.runTurn(Q);V.then((B)=>{if(!X)return;u("warn","run.late_end",{...Y,elapsedMs:Math.round(performance.now()-J),finishReason:B?.finishReason})},(B)=>{if(!X)return;u("error","run.late_error",{...Y,elapsedMs:Math.round(performance.now()-J),error:B})});let H;try{if(!W)return await V;return await Promise.race([V,new Promise((B,G)=>{H=setTimeout(()=>{let K=`Hub run ${Z.command} timed out after ${W}ms.`;X=!0,clearInterval(j),G(Error(K)),u("error","run.timeout",{...Y,elapsedMs:Math.round(performance.now()-J)}),vY($,(F)=>F.sessionId===Q.sessionId,K),u$($,(F)=>F.sessionId===Q.sessionId,K),$.sessionHost.abort(Q.sessionId,K).catch((F)=>{u("error","run.timeout_abort_failed",{...Y,error:F})})},W)})])}finally{if(X=!0,clearInterval(j),H)clearTimeout(H)}}async function xU($,Z){let Q=I0(Z),W=Z.payload&&typeof Z.payload==="object"?Z.payload:{},J=typeof W.prompt==="string"?W.prompt:typeof W.input==="string"?W.input:"";if(!J.trim())return x(Z,"invalid_session_input","session input requires a prompt string");$.publish($.buildEvent("run.started",void 0,Q));let X=W.attachments&&typeof W.attachments==="object"&&!Array.isArray(W.attachments)?W.attachments:void 0,Y=Array.isArray(X?.userFiles)?X.userFiles.filter((B)=>typeof B==="string"):void 0,j=vx(W);$.suppressNextTerminalEventBySession.set(Q,"run.start.reply");let V;try{V=await cx($,Z,{sessionId:Q,prompt:J,mode:mx(W.mode),delivery:W.delivery==="queue"||W.delivery==="steer"?W.delivery:void 0,userImages:Array.isArray(X?.userImages)?X.userImages:void 0,userFiles:Y,timeoutMs:j},j)}catch(B){if($.suppressNextTerminalEventBySession.get(Q)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Q);if(I1(B))return gx(Z,Q,B);throw $.publish($.buildEvent("run.failed",{reason:"error",error:B instanceof Error?B.message:String(B)},Q)),B}if(V){let B=await t0($,Q),G=xx(V);if($.publish($.buildEvent(Ix(V.finishReason),{reason:V.finishReason,...G?{error:G}:{},result:V,...B?{snapshot:B}:{}},Q)),$.suppressNextTerminalEventBySession.get(Q)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Q)}else $.suppressNextTerminalEventBySession.delete(Q);let H=await t0($,Q);return c(Z,V||H?{...V?{result:V}:{},...H?{snapshot:H}:{}}:void 0)}async function gU($,Z){let Q=I0(Z),W=typeof Z.payload?.reason==="string"?Z.payload.reason:"Run was aborted before pending approval or capability request was resolved.";vY($,(J)=>J.sessionId===Q,W);try{await $.sessionHost.abort(Q,Z.payload?.reason)}catch(J){u("warn","run.abort_failed",{command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Q,error:J})}finally{u$($,(J)=>J.sessionId===Q,W)}return c(Z,{applied:!0})}async function mU($,Z){let Q=D4(Z.payload?.payload);if(!Q)return x(Z,"invalid_hook_payload","session.hook requires a valid hook event payload");return await $.sessionHost.dispatchHookEvent(Q),c(Z,{applied:!0})}async function vU($,Z){switch(Z.type){case"chunk":return;case"agent_event":await ux($,Z);return;case"hook":if(Z.payload.hookEventName==="tool_call")$.publish($.buildEvent("tool.started",{toolName:Z.payload.toolName},Z.payload.sessionId));else if(Z.payload.hookEventName==="tool_result")$.publish($.buildEvent("tool.finished",{toolName:Z.payload.toolName},Z.payload.sessionId));return;case"team_progress":{let Q={type:"team_progress_projection",version:1,sessionId:Z.payload.sessionId,summary:Z.payload.summary,lastEvent:Z.payload.lifecycle};$.publish($.buildEvent("team.progress",Q,Z.payload.sessionId));return}case"pending_prompts":$.publish($.buildEvent("session.pending_prompts",{sessionId:Z.payload.sessionId,prompts:Z.payload.prompts},Z.payload.sessionId));return;case"pending_prompt_submitted":{let Q={id:Z.payload.id,prompt:Z.payload.prompt,delivery:Z.payload.delivery,attachmentCount:Z.payload.attachmentCount,userImages:Z.payload.userImages,userFiles:Z.payload.userFiles};$.publish($.buildEvent("session.pending_prompt_submitted",{sessionId:Z.payload.sessionId,prompt:Q},Z.payload.sessionId));return}case"session_snapshot":$.publish($.buildEvent("session.updated",{sessionId:Z.payload.sessionId,snapshot:Z.payload.snapshot},Z.payload.sessionId));return;case"status":{let[Q,W]=await Promise.all([o0($,Z.payload.sessionId),t0($,Z.payload.sessionId)]);if(Q)$.publish($.buildEvent("session.updated",{session:Q,...W?{snapshot:W}:{}},Z.payload.sessionId));return}case"ended":await dx($,Z);return;default:return}}async function ux($,Z){let{sessionId:Q,event:W}=Z.payload;if(W.type==="iteration_start"){$.publish($.buildEvent("iteration.started",{iteration:W.iteration},Q));return}if(W.type==="iteration_end"){$.publish($.buildEvent("iteration.finished",{iteration:W.iteration,hadToolCalls:W.hadToolCalls,toolCallCount:W.toolCallCount},Q));return}if(W.type==="content_start"){if(W.contentType==="text"&&typeof W.text==="string"&&W.text.length>0){$.publish($.buildEvent("assistant.delta",{text:W.text},Q));return}if(W.contentType==="reasoning"){if(W.redacted&&!W.reasoning){$.publish($.buildEvent("reasoning.delta",{text:"",redacted:!0},Q));return}if(typeof W.reasoning==="string"&&W.reasoning.length>0)$.publish($.buildEvent("reasoning.delta",{text:W.reasoning,redacted:W.redacted===!0},Q));return}if(W.contentType==="tool"){$.publish($.buildEvent("tool.started",{toolCallId:W.toolCallId,toolName:W.toolName,input:W.input},Q));return}}if(W.type==="content_end"){switch(W.contentType){case"text":$.publish($.buildEvent("assistant.finished",{text:W.text},Q));break;case"reasoning":$.publish($.buildEvent("reasoning.finished",{reasoning:W.reasoning},Q));break;case"tool":$.publish($.buildEvent("tool.finished",{toolCallId:W.toolCallId,toolName:W.toolName,output:W.output,error:W.error},Q));break}return}if(W.type==="usage"){let J;try{J=await $.sessionHost.getAccumulatedUsage?.(Q)}catch{J=void 0}$.publish($.buildEvent("usage.updated",{sessionId:Q,delta:{inputTokens:W.inputTokens,outputTokens:W.outputTokens,cacheReadTokens:W.cacheReadTokens??0,cacheWriteTokens:W.cacheWriteTokens??0,totalCost:W.cost??0},totals:{inputTokens:W.totalInputTokens,outputTokens:W.totalOutputTokens,cacheReadTokens:W.totalCacheReadTokens??0,cacheWriteTokens:W.totalCacheWriteTokens??0,totalCost:W.totalCost??0},usage:J?.usage,aggregateUsage:J?.aggregateUsage,agent:{kind:Z.payload.teamRole==="teammate"?"teammate":W.parentAgentId?"subagent":"lead",agentId:W.agentId,conversationId:W.conversationId,parentAgentId:W.parentAgentId,teamAgentId:Z.payload.teamAgentId,teamRole:Z.payload.teamRole}},Q));return}if(W.type==="done")$.publish($.buildEvent("agent.done",{reason:W.reason,text:W.text,iterations:W.iterations,usage:W.usage},Q))}async function dx($,Z){let Q=$.suppressNextTerminalEventBySession.get(Z.payload.sessionId),W=Q===Z.payload.reason||Q==="run.start.reply";if(W)$.suppressNextTerminalEventBySession.delete(Z.payload.sessionId);let[J,X]=await Promise.all([o0($,Z.payload.sessionId),t0($,Z.payload.sessionId)]);if(Z.payload.reason==="completed"){let Y=await _U(J);$.publish($.buildEvent("ui.notify",Y,Z.payload.sessionId))}if(W)return;$.publish($.buildEvent(Z.payload.reason==="aborted"?"run.aborted":Z.payload.reason==="error"||Z.payload.reason==="failed"?"run.failed":"run.completed",{reason:Z.payload.reason,...X?{snapshot:X}:{}},Z.payload.sessionId))}import{createSessionId as dU,parseRuntimeConfigExtensions as lU}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as $10,HUB_COMPACTION_CAPABILITY as Z10,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as Q10,HUB_HOOK_CAPABILITY_PREFIX as W10,HUB_MISTAKE_LIMIT_CAPABILITY as J10,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as X10,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as Y10,isHubToolExecutorName as lx}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as G10,HUB_COMPACTION_CAPABILITY as K10,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as F10,HUB_HOOK_CAPABILITY_PREFIX as A10,HUB_MISTAKE_LIMIT_CAPABILITY as f10,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as U10,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as D10}from"@cline/shared";var px=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function r2($){return $&&typeof $==="object"&&!Array.isArray($)?JSON.parse(JSON.stringify($)):void 0}function rx($,Z){let Q=typeof $.name==="string"?$.name.trim():"",W=typeof $.description==="string"?$.description:"",J=typeof $.capabilityName==="string"?$.capabilityName.trim():"",X=r2($.inputSchema);if(!Q||!W||!X||!J||Z.has(J))return;return Z.add(J),{kind:"tool",capabilityName:J,name:Q,description:W,inputSchema:X,...r2($.lifecycle)?{lifecycle:r2($.lifecycle)}:{}}}function iY($){if(!Array.isArray($))return[];let Z=[],Q=new Set;for(let W of $){if(!W||typeof W!=="object"||Array.isArray(W))continue;let J=W,X=J.kind,Y=typeof J.capabilityName==="string"?J.capabilityName.trim():"";if(!Y||Q.has(Y))continue;if(X==="tool"){let j=rx(J,Q);if(j)Z.push(j);continue}if(X==="toolExecutor"){let j=J.executor;if(!lx(j))continue;Q.add(Y),Z.push({kind:"toolExecutor",capabilityName:Y,executor:j});continue}if(X==="hook"){let j=typeof J.name==="string"?J.name.trim():"";if(!j)continue;Q.add(Y),Z.push({kind:"hook",capabilityName:Y,name:j});continue}if(X==="compaction"){Q.add(Y),Z.push({kind:"compaction",capabilityName:Y,...r2(J.config)?{config:r2(J.config)}:{}});continue}if(X==="checkpoint"){Q.add(Y),Z.push({kind:"checkpoint",capabilityName:Y,...r2(J.config)?{config:r2(J.config)}:{}});continue}if(X==="mistakeLimit"){Q.add(Y),Z.push({kind:"mistakeLimit",capabilityName:Y});continue}if(X==="userInstructionService")Q.add(Y),Z.push({kind:"userInstructionService",capabilityName:Y})}return Z}function uU($){return{agentId:$.agentId,conversationId:$.conversationId,iteration:$.iteration,metadata:$.metadata}}function ix($){return Object.hasOwn($,"update")?$.update:$}function V9($){return $.trim().replace(/^\/+/,"").toLowerCase()}function nx($){let Z=($??[]).map(V9).filter(Boolean);return Z.length>0?new Set(Z):void 0}function ax($,Z,Q){if(!Q)return!0;let W=V9($),J=V9(Z),X=W.includes(":")?W.split(":").at(-1)??W:W,Y=J.includes(":")?J.split(":").at(-1)??J:J;return Q.has(W)||Q.has(J)||Q.has(X)||Q.has(Y)}function rY($,Z){let Q=nx(Z);return $.records.skill.map((W)=>({id:W.id,name:W.item.name,description:"description"in W.item&&typeof W.item.description==="string"?W.item.description:void 0,disabled:W.item.disabled===!0,skill:W.item})).filter((W)=>ax(W.id,W.name,Q))}function cU($,Z){let Q=async(W,J)=>{let X=V9(W),j=rY($,Z).filter((K)=>K.id===X||V9(K.name)===X||K.id.endsWith(`:${X}`)).filter((K)=>!K.disabled);if(j.length!==1)return j.length>1?`Skill "${W}" is ambiguous. Use one of: ${j.map((K)=>K.id).join(", ")}`:`Skill "${W}" not found.`;let V=j[0].skill,H=J?.trim(),B=H?`
|
|
737
738
|
<command-args>${H}</command-args>`:"",G=V.description?.trim()?`Description: ${V.description.trim()}
|
|
738
739
|
|
|
739
740
|
`:"";return`<command-name>${V.name}</command-name>${B}
|
|
740
741
|
<command-instructions>
|
|
741
742
|
${G}${V.instructions}
|
|
742
|
-
</command-instructions>`};return Object.defineProperty(Q,"configuredSkills",{get:()=>rY($,Z).map(({skill:W,...J})=>J),enumerable:!0}),Q}function
|
|
743
|
+
</command-instructions>`};return Object.defineProperty(Q,"configuredSkills",{get:()=>rY($,Z).map(({skill:W,...J})=>J),enumerable:!0}),Q}function sx($,Z,Q,W){let J={records:{skill:[],rule:[],workflow:[]},runtimeCommands:[]},X=async()=>{let Y=await W($,Q.capabilityName,{},Z);if(Y?.snapshot)J=Y.snapshot};return{start:X,stop:()=>{},refreshType:async()=>{await X()},listRecords:(Y)=>[...J.records[Y]],listRuntimeCommands:()=>[...J.runtimeCommands],resolveRuntimeSlashCommand:(Y)=>{if(!Y.startsWith("/")||Y.length<2)return Y;let V=Y.match(/^\/(\S+)/)?.[1];if(!V)return Y;let H=J.runtimeCommands.find((B)=>B.name===V);return H?`${H.instructions}${Y.slice(V.length+1)}`:Y},hasConfiguredSkills:(Y)=>rY(J,Y).some((j)=>!j.disabled),createSkillsExecutor:(Y)=>cU(J,Y),createExtension:(Y)=>({name:"cline-hub-user-instructions",manifest:{capabilities:[Y.includeRules?"rules":void 0,Y.registerSkillsTool?"tools":void 0,Y.includeSkills||Y.includeWorkflows?"commands":void 0].filter((j)=>Boolean(j))},setup(j){if(Y.includeRules)j.registerRule({id:"cline-hub-user-instructions:rules",source:"hub-user-instructions",content:()=>o2(J.records.rule.map((V)=>V.item).filter((V)=>V.disabled!==!0))});if(Y.registerSkillsTool)j.registerTool(j2(cU(J,Y.allowedSkillNames)));for(let V of J.runtimeCommands.filter((H)=>H.kind==="skill"&&Y.includeSkills||H.kind==="workflow"&&Y.includeWorkflows))j.registerCommand({name:V.name,description:V.description,handler:(H)=>{let B=H.trim();return B?`${V.instructions}
|
|
743
744
|
|
|
744
|
-
${B}`:V.instructions}})}})}}function rx($,Z,Q,W){let J=Q.map((X)=>[X.executor,async(...Y)=>{let j=Y.at(-1),V=Y.slice(0,-1);return(await W($,X.capabilityName,{executor:X.executor,args:V,context:cU(j)},Z))?.result}]);return J.length>0?Object.fromEntries(J):void 0}function ix($,Z,Q,W){if(Q.length===0)return;return Q.map((J)=>({name:J.name,description:J.description,inputSchema:J.inputSchema,lifecycle:J.lifecycle,async execute(X,Y){return(await W($,J.capabilityName,{toolName:J.name,input:X,context:cU(Y)},Z,Y.emitUpdate?(V)=>{Y.emitUpdate?.(ux(V))}:void 0))?.result}}))}function nx($,Z,Q,W){let J=new Map(Q.map((Y)=>[Y.name,Y])),X={};for(let Y of vx){let j=J.get(Y);if(!j)continue;X[Y]=async(V)=>{return(await W($,j.capabilityName,{context:V},Z))?.control}}return Object.keys(X).length>0?X:void 0}function nY($){let Z=$.contributions.filter((V)=>V.kind==="toolExecutor"),Q=$.contributions.filter((V)=>V.kind==="tool"),W=$.contributions.filter((V)=>V.kind==="hook"),J=$.contributions.find((V)=>V.kind==="compaction"),X=$.contributions.find((V)=>V.kind==="checkpoint"),Y=$.contributions.find((V)=>V.kind==="mistakeLimit"),j=$.contributions.find((V)=>V.kind==="userInstructionService");return{hasClientContributions:$.contributions.length>0,toolExecutors:rx($.sessionId,$.targetClientId,Z,$.requestCapability),localRuntime:{...W.length>0?{hooks:nx($.sessionId,$.targetClientId,W,$.requestCapability)}:{},...Q.length>0?{extraTools:ix($.sessionId,$.targetClientId,Q,$.requestCapability)}:{},...J?{compaction:{...$.sessionConfig?.compaction??{},...J.config,compact:async(V)=>{return(await $.requestCapability($.sessionId,J.capabilityName,{context:V},$.targetClientId))?.result}}}:{},...X?{checkpoint:{...$.sessionConfig?.checkpoint??{},...X.config,createCheckpoint:async(V)=>{return(await $.requestCapability($.sessionId,X.capabilityName,{context:V},$.targetClientId))?.result}}}:{},...Y?{onConsecutiveMistakeLimitReached:async(V)=>{return(await $.requestCapability($.sessionId,Y.capabilityName,{context:V},$.targetClientId))?.result}}:{},...j?{userInstructionService:px($.sessionId,$.targetClientId,j,$.requestCapability)}:{}}}}var lU="hubCapabilityOwnerClientId";function pU($,Z){$[lU]=Z}function ax($){let Z=$?.[lU];return typeof Z==="string"&&Z.trim()?Z.trim():void 0}async function rU($,Z,Q){let W=performance.now(),J={command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Z.sessionId};u("info","session.create.begin",J);let X=Z.payload&&typeof Z.payload==="object"?Z.payload:{},Y=X.metadata&&typeof X.metadata==="object"?JSON.parse(JSON.stringify(X.metadata)):{},j=X.sessionConfig&&typeof X.sessionConfig==="object"?JSON.parse(JSON.stringify(X.sessionConfig)):void 0,V=X.runtimeOptions&&typeof X.runtimeOptions==="object"?X.runtimeOptions:{};if(typeof j?.mode==="string")Y.mode=j.mode;else if(typeof V.mode==="string")Y.mode=V.mode;if(typeof j?.systemPrompt==="string")Y.systemPrompt=j.systemPrompt;else if(typeof V.systemPrompt==="string")Y.systemPrompt=V.systemPrompt;if(j?.checkpoint?.enabled===!0)Y.checkpointEnabled=!0;else if(V.checkpointEnabled===!0)Y.checkpointEnabled=!0;let H=X.modelSelection&&typeof X.modelSelection==="object"?X.modelSelection:{},B=typeof X.workspaceRoot==="string"&&X.workspaceRoot.trim()?X.workspaceRoot.trim():typeof X.cwd==="string"&&X.cwd.trim()?X.cwd.trim():"";if(!B)return u("warn","session.create.invalid",{...J,reason:"missing_workspace_root"}),x(Z,"invalid_session_create","session.create requires workspaceRoot or cwd");let G=Z.clientId?.trim()||"hub-client",K=iY(V.clientContributions);if(u("info","session.create.contributions_parsed",{...J,clientId:G,workspaceRoot:B,cwd:typeof X.cwd==="string"?X.cwd:void 0,contributionCount:K.length}),K.length>0)pU(Y,G);let A=(typeof j?.sessionId==="string"?j.sessionId.trim():"")||uU(),D=dU(V.configExtensions);u("info","session.create.runtime_build.begin",{...J,sessionId:A,configExtensionCount:D?.length??0});let f=nY({sessionId:A,targetClientId:G,contributions:K,sessionConfig:j,requestCapability:$.requestCapability});u("info","session.create.start_session.begin",{...J,sessionId:A,provider:j?.providerId??(typeof H.provider==="string"?H.provider:typeof Y.provider==="string"?Y.provider:"hub"),model:j?.modelId??(typeof H.model==="string"?H.model:typeof Y.model==="string"?Y.model:"hub")});let T=await $.sessionHost.startSession({source:typeof Y.source==="string"?Y.source:void 0,interactive:Y.interactive!==!1,sessionMetadata:Object.keys(Y).length>0?Y:void 0,initialMessages:Array.isArray(X.initialMessages)?X.initialMessages:void 0,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:D,...f.localRuntime},capabilities:{toolExecutors:f.toolExecutors,requestToolApproval:Q},config:{...j??{},sessionId:A,providerId:j?.providerId??(typeof H.provider==="string"?H.provider:typeof Y.provider==="string"?Y.provider:"hub"),modelId:j?.modelId??(typeof H.model==="string"?H.model:typeof Y.model==="string"?Y.model:"hub"),apiKey:j?.apiKey??(typeof H.apiKey==="string"?H.apiKey:void 0),cwd:j?.cwd??(typeof X.cwd==="string"&&X.cwd.trim()?X.cwd.trim():B),workspaceRoot:j?.workspaceRoot??B,systemPrompt:j?.systemPrompt??(typeof V.systemPrompt==="string"?V.systemPrompt:""),mode:j?.mode??(V.mode==="plan"||V.mode==="yolo"?V.mode:"act"),maxIterations:j?.maxIterations??(typeof V.maxIterations==="number"?V.maxIterations:void 0),enableTools:j?.enableTools??V.enableTools!==!1,enableSpawnAgent:j?.enableSpawnAgent??V.enableSpawn!==!1,enableAgentTeams:j?.enableAgentTeams??V.enableTeams!==!1,checkpoint:j?.checkpoint??(V.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:j?.teamName??(typeof Y.teamName==="string"?Y.teamName:void 0)},toolPolicies:X.toolPolicies&&typeof X.toolPolicies==="object"&&!Array.isArray(X.toolPolicies)?JSON.parse(JSON.stringify(X.toolPolicies)):V.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0});u("info","session.create.start_session.end",{...J,sessionId:T.sessionId,elapsedMs:Math.round(performance.now()-W),hasImmediateResult:!!T.result}),a7($,T.sessionId,G,"creator",{interactive:Y.interactive!==!1}),u("info","session.create.read_records.begin",{...J,sessionId:T.sessionId});let[U,z]=await Promise.all([o0($,T.sessionId),t0($,T.sessionId)]);if(u("info","session.create.read_records.end",{...J,sessionId:T.sessionId,hasSession:!!U,hasSnapshot:!!z,elapsedMs:Math.round(performance.now()-W)}),U)$.publish($.buildEvent("session.created",{session:U,...z?{snapshot:z}:{}},T.sessionId));return u("info","session.create.reply",{...J,sessionId:T.sessionId,elapsedMs:Math.round(performance.now()-W)}),c(Z,{session:U,...z?{snapshot:z}:{}})}async function iU($,Z,Q){let W=Z.payload&&typeof Z.payload==="object"?Z.payload:{},J=typeof W.sessionId==="string"?W.sessionId.trim():Z.sessionId?.trim()||"",X=W.checkpointRunCount;if(!J)return x(Z,"invalid_restore","session.restore requires a session id");let Y=W.restore&&typeof W.restore==="object"?W.restore:{},j=Y.messages!==!1;if(typeof X!=="number")return x(Z,"invalid_restore","checkpointRunCount must be a positive integer");try{let V=W.sessionConfig&&typeof W.sessionConfig==="object"?JSON.parse(JSON.stringify(W.sessionConfig)):void 0;if(j&&!V)return x(Z,"invalid_restore","sessionConfig is required when restore.messages is true");let H=W.runtimeOptions&&typeof W.runtimeOptions==="object"?W.runtimeOptions:{},B=W.metadata&&typeof W.metadata==="object"?JSON.parse(JSON.stringify(W.metadata)):{};if(typeof V?.mode==="string")B.mode=V.mode;else if(typeof H.mode==="string")B.mode=H.mode;if(typeof V?.systemPrompt==="string")B.systemPrompt=V.systemPrompt;else if(typeof H.systemPrompt==="string")B.systemPrompt=H.systemPrompt;if(V?.checkpoint?.enabled===!0)B.checkpointEnabled=!0;else if(H.checkpointEnabled===!0)B.checkpointEnabled=!0;let G=W.modelSelection&&typeof W.modelSelection==="object"?W.modelSelection:{},K=Z.clientId?.trim()||"hub-client",F=iY(H.clientContributions);if(F.length>0)pU(B,K);let D=(typeof V?.sessionId==="string"?V.sessionId.trim():"")||uU(),f=dU(H.configExtensions),T=nY({sessionId:D,targetClientId:K,contributions:F,sessionConfig:V,requestCapability:$.requestCapability}),z=await new u$().restoreCheckpoint({sessionId:J,checkpointRunCount:X,restore:{messages:Y.messages,workspace:Y.workspace,omitCheckpointMessageFromSession:Y.omitCheckpointMessageFromSession===!0},start:V,cwd:typeof V?.cwd==="string"&&V.cwd.trim()||typeof V?.workspaceRoot==="string"&&V.workspaceRoot.trim()||void 0,getSession:(E)=>$.sessionHost.getSession(E),readMessages:(E)=>$.sessionHost.readSessionMessages(E),buildStartInput:(E)=>{if(E.restoredCheckpointMetadata)B.checkpoint=E.restoredCheckpointMetadata;let w=typeof W.workspaceRoot==="string"&&W.workspaceRoot.trim()?W.workspaceRoot.trim():typeof W.cwd==="string"&&W.cwd.trim()?W.cwd.trim():E.sourceSession.workspaceRoot||E.sourceSession.cwd;return{source:typeof B.source==="string"?B.source:void 0,interactive:B.interactive!==!1,sessionMetadata:{...B,restoredFromSessionId:J,restoredCheckpointRunCount:X},initialMessages:E.initialMessages,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:f,...T.localRuntime},capabilities:{toolExecutors:T.toolExecutors,requestToolApproval:Q},config:{...V??{},sessionId:D,providerId:V?.providerId??(typeof G.provider==="string"?G.provider:E.sourceSession.provider),modelId:V?.modelId??(typeof G.model==="string"?G.model:E.sourceSession.model),apiKey:V?.apiKey??(typeof G.apiKey==="string"?G.apiKey:""),cwd:V?.cwd??E.plan.cwd,workspaceRoot:V?.workspaceRoot??w,systemPrompt:V?.systemPrompt??(typeof H.systemPrompt==="string"?H.systemPrompt:""),mode:V?.mode??(H.mode==="plan"||H.mode==="yolo"?H.mode:"act"),maxIterations:V?.maxIterations??(typeof H.maxIterations==="number"?H.maxIterations:void 0),enableTools:V?.enableTools??H.enableTools!==!1,enableSpawnAgent:V?.enableSpawnAgent??H.enableSpawn!==!1,enableAgentTeams:V?.enableAgentTeams??H.enableTeams!==!1,checkpoint:V?.checkpoint??(H.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:V?.teamName??(typeof B.teamName==="string"?B.teamName:void 0)},toolPolicies:W.toolPolicies&&typeof W.toolPolicies==="object"&&!Array.isArray(W.toolPolicies)?JSON.parse(JSON.stringify(W.toolPolicies)):H.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0}},startSession:(E)=>$.sessionHost.startSession(E),getStartedSessionId:(E)=>E.sessionId,readRestoredSession:(E)=>$.sessionHost.getSession(E)});if(!j)return c(Z,{checkpoint:z.checkpoint});let O=z.startResult;if(!O)return x(Z,"restore_failed","Checkpoint restore did not start a session");a7($,O.sessionId,K,"creator",{interactive:B.interactive!==!1});let[_,L]=await Promise.all([o0($,O.sessionId),t0($,O.sessionId)]);if(_)$.publish($.buildEvent("session.created",{session:_,...L?{snapshot:L}:{}},O.sessionId));return c(Z,{session:_,...L?{snapshot:L}:{},messages:z.messages??[],checkpoint:z.checkpoint})}catch(V){if(V instanceof k0)return x(Z,V.code,V.code==="session_not_found"?`Unknown session: ${J}`:V.message);return x(Z,"restore_failed",V instanceof Error?V.message:String(V))}}async function nU($,Z){let Q=I0(Z);if(!Q)return x(Z,"invalid_session_attach","session.attach requires a session id");a7($,Q,Z.clientId?.trim()||"hub-client","participant");let W=await o0($,Q);if(W)$.publish($.buildEvent("session.attached",{session:W},Q));return W?c(Z,{session:W}):x(Z,"session_not_found",`Unknown session: ${Q}`)}async function aU($,Z){let Q=I0(Z);if(!Q)return x(Z,"invalid_session_detach","session.detach requires a session id");let W=Z.clientId?.trim()||"hub-client",[J]=await Promise.all([o0($,Q)]),X=ax(J?.metadata)??W,Y=$.sessionState.get(Q);if(Y){if(Y.participants.delete(W),Y.createdByClientId===W)Y.createdByClientId=X;if(Y.participants.size===0)$.sessionState.delete(Q)}d$($,(H)=>H.sessionId===Q&&H.targetClientId===W,`Capability owner client ${W} detached before request was resolved.`);let[j,V]=await Promise.all([o0($,Q),t0($,Q)]);return $.publish($.buildEvent("session.detached",j?{session:j,...V?{snapshot:V}:{},clientId:W}:{clientId:W},Q)),c(Z)}async function sU($,Z){let Q=I0(Z),W=Z.payload?.includeSnapshot===!0,[J,X]=await Promise.all([o0($,Q),W?t0($,Q):Promise.resolve(void 0)]);return J?c(Z,{session:J,...X?{snapshot:X}:{}}):x(Z,"session_not_found",`Unknown session: ${Q}`)}async function oU($,Z){let Q=I0(Z);if(!Q)return x(Z,"invalid_session_id","session.messages requires a session id");if(!await o0($,Q))return x(Z,"session_not_found",`Unknown session: ${Q}`);let J=await $.sessionHost.readSessionMessages(Q);return c(Z,{sessionId:Q,messages:J})}async function tU($,Z){let Q=typeof Z.payload?.limit==="number"?Z.payload.limit:200,J=(await $.sessionHost.listSessions(Q)).map((X)=>i7(X,$.sessionState.get(X.sessionId)));return c(Z,{sessions:J})}async function eU($,Z){let Q=I0(Z),W=n7(Z.payload?.metadata),J=await $.sessionHost.updateSession(Q,{metadata:W}),[X,Y]=await Promise.all([o0($,Q),t0($,Q)]);if(X)$.publish($.buildEvent("session.updated",{session:X,...Y?{snapshot:Y}:{}},Q));return{version:Z.version,requestId:Z.requestId,ok:J.updated,payload:{updated:J.updated,session:X,...Y?{snapshot:Y}:{}}}}async function $D($,Z){let Q=I0(Z),W=await $.sessionHost.deleteSession(Q);return $.sessionState.delete(Q),c(Z,{deleted:W})}async function ZD($,Z){let Q=I0(Z),W=$.sessionHost.pendingPrompts;if(!W)return x(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let J=await W.list({sessionId:Q});return c(Z,{sessionId:Q,prompts:J})}async function QD($,Z){let Q=I0(Z),W=typeof Z.payload?.promptId==="string"?Z.payload.promptId.trim():"",J=typeof Z.payload?.prompt==="string"?Z.payload.prompt:void 0,X=Z.payload?.delivery==="queue"||Z.payload?.delivery==="steer"?Z.payload.delivery:void 0,Y=$.sessionHost.pendingPrompts;if(!Y)return x(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let j=await Y.update({sessionId:Q,promptId:W,prompt:J,delivery:X});return c(Z,j)}async function WD($,Z){let Q=I0(Z),W=typeof Z.payload?.promptId==="string"?Z.payload.promptId.trim():"",J=$.sessionHost.pendingPrompts;if(!J)return x(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let X=await J.delete({sessionId:Q,promptId:W});return c(Z,X)}function JD($){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 ox=new Set(["skills","workflows","rules","tools","mcp"]);function aY($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function B9($,Z){let Q=$[Z];if(Q===void 0)return;if(typeof Q!=="string")throw Error(`settings payload '${Z}' must be a string.`);return Q}function tx($,Z){let Q=$[Z];if(Q===void 0)return;if(typeof Q!=="boolean")throw Error(`settings payload '${Z}' must be a boolean.`);return Q}function XD($){if($===void 0)return{};if(!aY($))throw Error("settings.list payload must be an object.");return{cwd:B9($,"cwd"),workspaceRoot:B9($,"workspaceRoot"),availabilityContext:aY($.availabilityContext)?$.availabilityContext:void 0}}function ex($){if(!aY($))throw Error("settings.toggle payload must be an object.");let{type:Z}=$;if(typeof Z!=="string"||!ox.has(Z))throw Error("settings.toggle payload 'type' must be one of: skills, workflows, rules, tools, mcp.");return{...XD($),type:Z,id:B9($,"id"),path:B9($,"path"),name:B9($,"name"),enabled:tx($,"enabled")}}class C4{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=sx("hub_");ctx;constructor($){this.options=$;if(this.sessionHost=$.sessionHost??new _1({sessionService:new L1(new D1),fetch:$.fetch,telemetry:$.telemetry}),this.ctx={clients:this.clients,sessionState:this.sessionState,pendingApprovals:this.pendingApprovals,pendingCapabilityRequests:this.pendingCapabilityRequests,suppressNextTerminalEventBySession:this.suppressNextTerminalEventBySession,telemetry:$.telemetry,sessionHost:this.sessionHost,publish:(Z)=>this.publish(Z),buildEvent:r2,requestCapability:(Z,Q,W,J,X)=>zU(this.ctx,Z,Q,W,J,X)},this.schedules=new Z8({...$.scheduleOptions,runtimeHandlers:$.runtimeHandlers,eventPublisher:(Z,Q)=>{let W=Z==="schedule.execution.completed"?"schedule.execution_completed":Z==="schedule.execution.failed"?"schedule.execution_failed":void 0;if(!W)return;this.publish(r2(W,Q&&typeof Q==="object"?Q:void 0))}}),this.scheduleCommands=new o2(this.schedules),this.settings=$.settingsService??new I$,$.cronOptions)this.cronService=new w5({runtimeHandlers:$.runtimeHandlers,...$.cronOptions});this.sessionHost.subscribe((Z)=>{mU(this.ctx,Z).catch((Q)=>{cY("session event handling failed",Q),o7(this.options.telemetry,{component:"core",operation:"hub.session_event_project",error:Q,severity:"error",handled:!0,context:{eventType:Z.type,sessionId:Z.payload.sessionId}})})})}getCronService(){return this.cronService}getHubId(){return this.hubId}async start(){if(await this.schedules.start(),this.cronService)try{await this.cronService.start()}catch($){console.error("[hub] cron service start failed",$)}}async stop(){for(let $ of this.pendingApprovals.keys())mY(this.ctx,$,{approved:!1,reason:"Hub shutting down before approval was resolved."});if(d$(this.ctx,()=>!0,"Hub shutting down before capability request was resolved."),await this.sessionHost.dispose("hub_server_stop"),await this.schedules.dispose(),this.cronService)try{await this.cronService.dispose()}catch($){console.error("[hub] cron service stop failed",$)}}async handleCommand($){try{let Z=await this.dispatchCommand($);return this.captureFailedReply($,Z),Z}catch(Z){throw o7(this.options.telemetry,{component:"core",operation:"hub.command",error:Z,severity:"error",handled:!1,context:this.commandTelemetryContext($)}),Z}}async dispatchCommand($){switch($.command){case"client.register":return RU(this.ctx,$);case"client.update":return EU(this.ctx,$);case"client.unregister":return NU(this.ctx,$,(Z)=>{this.listeners.delete(Z),this.detachClientFromSessions(Z)});case"client.list":return CU(this.ctx,$);case"session.create":return await rU(this.ctx,$,(Z)=>gY(this.ctx,Z));case"session.restore":return await iU(this.ctx,$,(Z)=>gY(this.ctx,Z));case"session.attach":return await nU(this.ctx,$);case"session.detach":return await aU(this.ctx,$);case"session.get":return await sU(this.ctx,$);case"session.messages":return await oU(this.ctx,$);case"session.list":return await tU(this.ctx,$);case"session.update":return await eU(this.ctx,$);case"session.pending_prompts":return await ZD(this.ctx,$);case"session.update_pending_prompt":return await QD(this.ctx,$);case"session.remove_pending_prompt":return await WD(this.ctx,$);case"session.delete":return await $D(this.ctx,$);case"session.hook":return await gU(this.ctx,$);case"run.start":case"session.send_input":return await IU(this.ctx,$);case"run.abort":return await xU(this.ctx,$);case"capability.request":return await qU(this.ctx,$);case"approval.respond":return await LU(this.ctx,$);case"capability.respond":return MU(this.ctx,$);case"capability.progress":return OU(this.ctx,$);case"ui.notify":return this.publish(r2("ui.notify",$.payload??{})),c($);case"ui.show_window":return this.publish(r2("ui.show_window",$.payload??{})),c($);case"settings.list":return await this.handleSettingsList($);case"settings.toggle":return await this.handleSettingsToggle($);case"connector.channels":case"connector.configure":case"connector.delete_config":return await kU(this.ctx,$);case"settings.get":case"settings.patch":return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"not_implemented",message:`${$.command} is not implemented yet.`}};default:{let Z=await this.scheduleCommands.handleCommand($);if(Z.ok){let Q=JD($.command);if(Q)this.publish(r2(Q,Z.payload))}return Z}}}captureFailedReply($,Z){if(Z.ok||!Z.error||!$g(Z.error.code))return;o7(this.options.telemetry,{component:"core",operation:"hub.command_reply",error:Error(Z.error.message),severity:Z.error.code==="session_not_found"?"warn":"error",handled:!0,context:{...this.commandTelemetryContext($),errorCode:Z.error.code}})}commandTelemetryContext($){return{command:$.command,requestId:$.requestId,clientId:$.clientId,sessionId:typeof $.payload?.sessionId==="string"?$.payload.sessionId:$.sessionId}}async handleSettingsList($){try{let Z=await this.settings.list(XD($.payload));return{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:Z}}}catch(Z){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_list_failed",message:Z instanceof Error?Z.message:String(Z)}}}}async handleSettingsToggle($){try{let Z=await this.settings.toggle(ex($.payload));return this.publish(r2("settings.changed",{types:Z.changedTypes,snapshot:Z.snapshot})),{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:Z.snapshot,changedTypes:Z.changedTypes}}}catch(Z){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_toggle_failed",message:Z instanceof Error?Z.message:String(Z)}}}}subscribe($,Z,Q){let W=this.listeners.get($)??new Set,J={sessionId:Q?.sessionId,listener:Z};return W.add(J),this.listeners.set($,W),()=>{let X=this.listeners.get($);if(!X)return;if(X.delete(J),X.size===0)this.listeners.delete($)}}detachClientFromSessions($){for(let[Z,Q]of this.sessionState.entries())if(Q.participants.delete($),Q.participants.size===0)this.sessionState.delete(Z);d$(this.ctx,(Z)=>Z.targetClientId===$,`Capability owner client ${$} disconnected before request was resolved.`)}publish($){for(let Z of this.listeners.values())for(let Q of Z){if(Q.sessionId&&Q.sessionId!==$.sessionId)continue;try{Q.listener($)}catch(W){cY(`listener threw while publishing ${$.event}`,W),o7(this.options.telemetry,{component:"core",operation:"hub.publish",error:W,severity:"warn",handled:!0,context:{event:$.event,sessionId:$.sessionId}})}}}}function $g($){return $==="session_not_found"||$==="session_messages_not_found"||$==="hub_command_timeout"||$.endsWith("_failed")}import{timingSafeEqual as Jg}from"node:crypto";import Xg from"node:http";import Yg from"node:net";import{URL as eY}from"node:url";import{CURRENT_HUB_PROTOCOL_VERSION as VD,HUB_CAPABILITIES as jg,isHubProtocolCompatible as Vg,MAX_CLIENT_HUB_PROTOCOL_VERSION as HD,MIN_CLIENT_HUB_PROTOCOL_VERSION as BD}from"@cline/shared";import{WebSocketServer as Hg}from"ws";import{captureSdkError as YD,HUB_COMMAND_SLOW_LOG_MS as Zg,resolveHubCommandTimeoutMs as Qg,safeJsonParse as Wg}from"@cline/shared";function sY($){return{command:$.envelope.command,requestId:$.envelope.requestId,clientId:$.envelope.clientId,sessionId:$.envelope.sessionId}}function jD($,Z,Q){return{version:$.envelope.version,requestId:$.envelope.requestId,ok:!1,error:{code:Z,message:Q}}}class J9{transport;telemetry;constructor($,Z){this.transport=$;this.telemetry=Z}attach($){let Z=new Map,Q=new Set,W=!1,J=(V)=>{try{$.send(JSON.stringify(V))}catch(H){console.error(`[hub] failed to send websocket frame: ${H instanceof Error?H.stack||H.message:String(H)}`)}},X=(V)=>{J({kind:"event",envelope:V})},Y=async(V)=>{try{let H=JSON.parse(V.data);switch(H.kind){case"command":{let B=performance.now(),G=!1,K=sY(H);u("info","command.start",K);let F=setTimeout(()=>{if(G)return;u("warn","command.slow",{...K,elapsedMs:Math.round(performance.now()-B)})},Zg),A=this.transport.command(H.envelope);A.then((O)=>{if(!G)return;u(O.ok?"warn":"error","command.late_end",{...K,elapsedMs:Math.round(performance.now()-B),ok:O.ok,errorCode:O.error?.code,errorMessage:O.error?.message})},(O)=>{if(!G)return;u("error","command.late_error",{...K,elapsedMs:Math.round(performance.now()-B),error:O})});let D=!1,f,T,U=Qg(H.envelope.command,H.envelope.timeoutMs);try{T=U===null?await A:await Promise.race([A,new Promise((O)=>{f=setTimeout(()=>{D=!0,YD(this.telemetry,{component:"core",operation:"hub.command_timeout",error:Error(`Hub command ${H.envelope.command} did not complete within ${U}ms.`),severity:"error",handled:!0,context:{...K,timeoutMs:U}}),O(jD(H,"hub_command_timeout",`Hub command ${H.envelope.command} did not complete within ${U}ms. Check hub-daemon.log for command.start/command.slow logs with requestId ${H.envelope.requestId}.`))},U)})])}catch(O){if(clearTimeout(F),f)clearTimeout(f);throw O}if(G=D,clearTimeout(F),f)clearTimeout(f);let z=Math.round(performance.now()-B);if(D)u("error","command.timeout",{...K,durationMs:z,timeoutMs:U});else u(T.ok?"info":"warn","command.end",{...K,durationMs:z,ok:T.ok,errorCode:T.error?.code,errorMessage:T.error?.message});if(H.envelope.command==="client.register"&&T.ok){let _=(H.envelope.payload??{}).clientId?.trim()||H.envelope.clientId?.trim();if(_)Q.add(_)}else if(H.envelope.command==="client.unregister"&&T.ok){let O=H.envelope.clientId?.trim();if(O)Q.delete(O)}J({kind:"reply",envelope:T});break}case"stream.subscribe":{let B=`${H.clientId}:${H.sessionId??"*"}`;if(Z.has(B))break;let G=await this.transport.subscribe(H.clientId,X,{sessionId:H.sessionId});Z.set(B,G);break}case"stream.unsubscribe":{let B=`${H.clientId}:${H.sessionId??"*"}`;Z.get(B)?.(),Z.delete(B);break}case"reply":case"event":break}}catch(H){let B=typeof V.data==="string"?Wg(V.data):void 0;if(!B||B.kind!=="command"){u("error","rejected malformed websocket frame",{error:H});return}u("error","command.error",{...sY(B),error:H}),YD(this.telemetry,{component:"core",operation:"hub.websocket_command",error:H,severity:"error",handled:!0,context:sY(B)}),J({kind:"reply",envelope:jD(B,"command_failed",H instanceof Error?H.message:"Unknown hub error")})}},j=()=>{if(W)return;W=!0;for(let V of Z.values())V();Z.clear();for(let V of Q)this.transport.command({version:"v1",command:"client.unregister",clientId:V});Q.clear(),$.removeEventListener("message",Y),$.removeEventListener("close",j)};return $.addEventListener("message",Y),$.addEventListener("close",j),j}}class X9{transport;constructor($){this.transport=$}command($){return this.transport.handleCommand($)}subscribe($,Z,Q){return this.transport.subscribe($,Z,Q)}}function Bg($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString();if($ instanceof ArrayBuffer)return Buffer.from($).toString();if(Array.isArray($))return Buffer.concat($.map((Z)=>Buffer.from(Z))).toString();return String($)}function Gg($){return{send(Z){$.send(Z)},addEventListener(Z,Q){if(Z==="message"){$.on("message",(W)=>{Q({data:Bg(W)})});return}$.on("close",Q)},removeEventListener(){}}}function Kg($){try{$.write(`HTTP/1.1 400 Bad Request\r
|
|
745
|
+
${B}`:V.instructions}})}})}}function ox($,Z,Q,W){let J=Q.map((X)=>[X.executor,async(...Y)=>{let j=Y.at(-1),V=Y.slice(0,-1);return(await W($,X.capabilityName,{executor:X.executor,args:V,context:uU(j)},Z))?.result}]);return J.length>0?Object.fromEntries(J):void 0}function tx($,Z,Q,W){if(Q.length===0)return;return Q.map((J)=>({name:J.name,description:J.description,inputSchema:J.inputSchema,lifecycle:J.lifecycle,async execute(X,Y){return(await W($,J.capabilityName,{toolName:J.name,input:X,context:uU(Y)},Z,Y.emitUpdate?(V)=>{Y.emitUpdate?.(ix(V))}:void 0))?.result}}))}function ex($,Z,Q,W){let J=new Map(Q.map((Y)=>[Y.name,Y])),X={};for(let Y of px){let j=J.get(Y);if(!j)continue;X[Y]=async(V)=>{return(await W($,j.capabilityName,{context:V},Z))?.control}}return Object.keys(X).length>0?X:void 0}function nY($){let Z=$.contributions.filter((V)=>V.kind==="toolExecutor"),Q=$.contributions.filter((V)=>V.kind==="tool"),W=$.contributions.filter((V)=>V.kind==="hook"),J=$.contributions.find((V)=>V.kind==="compaction"),X=$.contributions.find((V)=>V.kind==="checkpoint"),Y=$.contributions.find((V)=>V.kind==="mistakeLimit"),j=$.contributions.find((V)=>V.kind==="userInstructionService");return{hasClientContributions:$.contributions.length>0,toolExecutors:ox($.sessionId,$.targetClientId,Z,$.requestCapability),localRuntime:{...W.length>0?{hooks:ex($.sessionId,$.targetClientId,W,$.requestCapability)}:{},...Q.length>0?{extraTools:tx($.sessionId,$.targetClientId,Q,$.requestCapability)}:{},...J?{compaction:{...$.sessionConfig?.compaction??{},...J.config,compact:async(V)=>{return(await $.requestCapability($.sessionId,J.capabilityName,{context:V},$.targetClientId))?.result}}}:{},...X?{checkpoint:{...$.sessionConfig?.checkpoint??{},...X.config,createCheckpoint:async(V)=>{return(await $.requestCapability($.sessionId,X.capabilityName,{context:V},$.targetClientId))?.result}}}:{},...Y?{onConsecutiveMistakeLimitReached:async(V)=>{return(await $.requestCapability($.sessionId,Y.capabilityName,{context:V},$.targetClientId))?.result}}:{},...j?{userInstructionService:sx($.sessionId,$.targetClientId,j,$.requestCapability)}:{}}}}var pU="hubCapabilityOwnerClientId";function rU($,Z){$[pU]=Z}function $g($){let Z=$?.[pU];return typeof Z==="string"&&Z.trim()?Z.trim():void 0}async function iU($,Z,Q){let W=performance.now(),J={command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Z.sessionId};u("info","session.create.begin",J);let X=Z.payload&&typeof Z.payload==="object"?Z.payload:{},Y=X.metadata&&typeof X.metadata==="object"?JSON.parse(JSON.stringify(X.metadata)):{},j=X.sessionConfig&&typeof X.sessionConfig==="object"?JSON.parse(JSON.stringify(X.sessionConfig)):void 0,V=X.runtimeOptions&&typeof X.runtimeOptions==="object"?X.runtimeOptions:{};if(typeof j?.mode==="string")Y.mode=j.mode;else if(typeof V.mode==="string")Y.mode=V.mode;if(typeof j?.systemPrompt==="string")Y.systemPrompt=j.systemPrompt;else if(typeof V.systemPrompt==="string")Y.systemPrompt=V.systemPrompt;if(j?.checkpoint?.enabled===!0)Y.checkpointEnabled=!0;else if(V.checkpointEnabled===!0)Y.checkpointEnabled=!0;let H=X.modelSelection&&typeof X.modelSelection==="object"?X.modelSelection:{},B=typeof X.workspaceRoot==="string"&&X.workspaceRoot.trim()?X.workspaceRoot.trim():typeof X.cwd==="string"&&X.cwd.trim()?X.cwd.trim():"";if(!B)return u("warn","session.create.invalid",{...J,reason:"missing_workspace_root"}),x(Z,"invalid_session_create","session.create requires workspaceRoot or cwd");let G=Z.clientId?.trim()||"hub-client",K=iY(V.clientContributions);if(u("info","session.create.contributions_parsed",{...J,clientId:G,workspaceRoot:B,cwd:typeof X.cwd==="string"?X.cwd:void 0,contributionCount:K.length}),K.length>0)rU(Y,G);let A=(typeof j?.sessionId==="string"?j.sessionId.trim():"")||dU(),L=lU(V.configExtensions);u("info","session.create.runtime_build.begin",{...J,sessionId:A,configExtensionCount:L?.length??0});let f=nY({sessionId:A,targetClientId:G,contributions:K,sessionConfig:j,requestCapability:$.requestCapability});u("info","session.create.start_session.begin",{...J,sessionId:A,provider:j?.providerId??(typeof H.provider==="string"?H.provider:typeof Y.provider==="string"?Y.provider:"hub"),model:j?.modelId??(typeof H.model==="string"?H.model:typeof Y.model==="string"?Y.model:"hub")});let D=await $.sessionHost.startSession({source:typeof Y.source==="string"?Y.source:void 0,interactive:Y.interactive!==!1,sessionMetadata:Object.keys(Y).length>0?Y:void 0,initialMessages:Array.isArray(X.initialMessages)?X.initialMessages:void 0,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:L,...f.localRuntime},capabilities:{toolExecutors:f.toolExecutors,requestToolApproval:Q},config:{...j??{},sessionId:A,providerId:j?.providerId??(typeof H.provider==="string"?H.provider:typeof Y.provider==="string"?Y.provider:"hub"),modelId:j?.modelId??(typeof H.model==="string"?H.model:typeof Y.model==="string"?Y.model:"hub"),apiKey:j?.apiKey??(typeof H.apiKey==="string"?H.apiKey:void 0),cwd:j?.cwd??(typeof X.cwd==="string"&&X.cwd.trim()?X.cwd.trim():B),workspaceRoot:j?.workspaceRoot??B,systemPrompt:j?.systemPrompt??(typeof V.systemPrompt==="string"?V.systemPrompt:""),mode:j?.mode??(V.mode==="plan"||V.mode==="yolo"?V.mode:"act"),maxIterations:j?.maxIterations??(typeof V.maxIterations==="number"?V.maxIterations:void 0),enableTools:j?.enableTools??V.enableTools!==!1,enableSpawnAgent:j?.enableSpawnAgent??V.enableSpawn!==!1,enableAgentTeams:j?.enableAgentTeams??V.enableTeams!==!1,checkpoint:j?.checkpoint??(V.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:j?.teamName??(typeof Y.teamName==="string"?Y.teamName:void 0)},toolPolicies:X.toolPolicies&&typeof X.toolPolicies==="object"&&!Array.isArray(X.toolPolicies)?JSON.parse(JSON.stringify(X.toolPolicies)):V.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0});u("info","session.create.start_session.end",{...J,sessionId:D.sessionId,elapsedMs:Math.round(performance.now()-W),hasImmediateResult:!!D.result}),s7($,D.sessionId,G,"creator",{interactive:Y.interactive!==!1}),u("info","session.create.read_records.begin",{...J,sessionId:D.sessionId});let[U,T]=await Promise.all([o0($,D.sessionId),t0($,D.sessionId)]);if(u("info","session.create.read_records.end",{...J,sessionId:D.sessionId,hasSession:!!U,hasSnapshot:!!T,elapsedMs:Math.round(performance.now()-W)}),U)$.publish($.buildEvent("session.created",{session:U,...T?{snapshot:T}:{}},D.sessionId));return u("info","session.create.reply",{...J,sessionId:D.sessionId,elapsedMs:Math.round(performance.now()-W)}),c(Z,{session:U,...T?{snapshot:T}:{}})}async function nU($,Z,Q){let W=Z.payload&&typeof Z.payload==="object"?Z.payload:{},J=typeof W.sessionId==="string"?W.sessionId.trim():Z.sessionId?.trim()||"",X=W.checkpointRunCount;if(!J)return x(Z,"invalid_restore","session.restore requires a session id");let Y=W.restore&&typeof W.restore==="object"?W.restore:{},j=Y.messages!==!1;if(typeof X!=="number")return x(Z,"invalid_restore","checkpointRunCount must be a positive integer");try{let V=W.sessionConfig&&typeof W.sessionConfig==="object"?JSON.parse(JSON.stringify(W.sessionConfig)):void 0;if(j&&!V)return x(Z,"invalid_restore","sessionConfig is required when restore.messages is true");let H=W.runtimeOptions&&typeof W.runtimeOptions==="object"?W.runtimeOptions:{},B=W.metadata&&typeof W.metadata==="object"?JSON.parse(JSON.stringify(W.metadata)):{};if(typeof V?.mode==="string")B.mode=V.mode;else if(typeof H.mode==="string")B.mode=H.mode;if(typeof V?.systemPrompt==="string")B.systemPrompt=V.systemPrompt;else if(typeof H.systemPrompt==="string")B.systemPrompt=H.systemPrompt;if(V?.checkpoint?.enabled===!0)B.checkpointEnabled=!0;else if(H.checkpointEnabled===!0)B.checkpointEnabled=!0;let G=W.modelSelection&&typeof W.modelSelection==="object"?W.modelSelection:{},K=Z.clientId?.trim()||"hub-client",F=iY(H.clientContributions);if(F.length>0)rU(B,K);let L=(typeof V?.sessionId==="string"?V.sessionId.trim():"")||dU(),f=lU(H.configExtensions),D=nY({sessionId:L,targetClientId:K,contributions:F,sessionConfig:V,requestCapability:$.requestCapability}),T=await new c$().restoreCheckpoint({sessionId:J,checkpointRunCount:X,restore:{messages:Y.messages,workspace:Y.workspace,omitCheckpointMessageFromSession:Y.omitCheckpointMessageFromSession===!0},start:V,cwd:typeof V?.cwd==="string"&&V.cwd.trim()||typeof V?.workspaceRoot==="string"&&V.workspaceRoot.trim()||void 0,getSession:(E)=>$.sessionHost.getSession(E),readMessages:(E)=>$.sessionHost.readSessionMessages(E),buildStartInput:(E)=>{if(E.restoredCheckpointMetadata)B.checkpoint=E.restoredCheckpointMetadata;let C=typeof W.workspaceRoot==="string"&&W.workspaceRoot.trim()?W.workspaceRoot.trim():typeof W.cwd==="string"&&W.cwd.trim()?W.cwd.trim():E.sourceSession.workspaceRoot||E.sourceSession.cwd;return{source:typeof B.source==="string"?B.source:void 0,interactive:B.interactive!==!1,sessionMetadata:{...B,restoredFromSessionId:J,restoredCheckpointRunCount:X},initialMessages:E.initialMessages,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:f,...D.localRuntime},capabilities:{toolExecutors:D.toolExecutors,requestToolApproval:Q},config:{...V??{},sessionId:L,providerId:V?.providerId??(typeof G.provider==="string"?G.provider:E.sourceSession.provider),modelId:V?.modelId??(typeof G.model==="string"?G.model:E.sourceSession.model),apiKey:V?.apiKey??(typeof G.apiKey==="string"?G.apiKey:""),cwd:V?.cwd??E.plan.cwd,workspaceRoot:V?.workspaceRoot??C,systemPrompt:V?.systemPrompt??(typeof H.systemPrompt==="string"?H.systemPrompt:""),mode:V?.mode??(H.mode==="plan"||H.mode==="yolo"?H.mode:"act"),maxIterations:V?.maxIterations??(typeof H.maxIterations==="number"?H.maxIterations:void 0),enableTools:V?.enableTools??H.enableTools!==!1,enableSpawnAgent:V?.enableSpawnAgent??H.enableSpawn!==!1,enableAgentTeams:V?.enableAgentTeams??H.enableTeams!==!1,checkpoint:V?.checkpoint??(H.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:V?.teamName??(typeof B.teamName==="string"?B.teamName:void 0)},toolPolicies:W.toolPolicies&&typeof W.toolPolicies==="object"&&!Array.isArray(W.toolPolicies)?JSON.parse(JSON.stringify(W.toolPolicies)):H.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0}},startSession:(E)=>$.sessionHost.startSession(E),getStartedSessionId:(E)=>E.sessionId,readRestoredSession:(E)=>$.sessionHost.getSession(E)});if(!j)return c(Z,{checkpoint:T.checkpoint});let O=T.startResult;if(!O)return x(Z,"restore_failed","Checkpoint restore did not start a session");s7($,O.sessionId,K,"creator",{interactive:B.interactive!==!1});let[z,_]=await Promise.all([o0($,O.sessionId),t0($,O.sessionId)]);if(z)$.publish($.buildEvent("session.created",{session:z,..._?{snapshot:_}:{}},O.sessionId));return c(Z,{session:z,..._?{snapshot:_}:{},messages:T.messages??[],checkpoint:T.checkpoint})}catch(V){if(V instanceof k0)return x(Z,V.code,V.code==="session_not_found"?`Unknown session: ${J}`:V.message);return x(Z,"restore_failed",V instanceof Error?V.message:String(V))}}async function aU($,Z){let Q=I0(Z);if(!Q)return x(Z,"invalid_session_attach","session.attach requires a session id");s7($,Q,Z.clientId?.trim()||"hub-client","participant");let W=await o0($,Q);if(W)$.publish($.buildEvent("session.attached",{session:W},Q));return W?c(Z,{session:W}):x(Z,"session_not_found",`Unknown session: ${Q}`)}async function sU($,Z){let Q=I0(Z);if(!Q)return x(Z,"invalid_session_detach","session.detach requires a session id");let W=Z.clientId?.trim()||"hub-client",[J]=await Promise.all([o0($,Q)]),X=$g(J?.metadata)??W,Y=$.sessionState.get(Q);if(Y){if(Y.participants.delete(W),Y.createdByClientId===W)Y.createdByClientId=X;if(Y.participants.size===0)$.sessionState.delete(Q)}u$($,(H)=>H.sessionId===Q&&H.targetClientId===W,`Capability owner client ${W} detached before request was resolved.`);let[j,V]=await Promise.all([o0($,Q),t0($,Q)]);return $.publish($.buildEvent("session.detached",j?{session:j,...V?{snapshot:V}:{},clientId:W}:{clientId:W},Q)),c(Z)}async function oU($,Z){let Q=I0(Z),W=Z.payload?.includeSnapshot===!0,[J,X]=await Promise.all([o0($,Q),W?t0($,Q):Promise.resolve(void 0)]);return J?c(Z,{session:J,...X?{snapshot:X}:{}}):x(Z,"session_not_found",`Unknown session: ${Q}`)}async function tU($,Z){let Q=I0(Z);if(!Q)return x(Z,"invalid_session_id","session.messages requires a session id");if(!await o0($,Q))return x(Z,"session_not_found",`Unknown session: ${Q}`);let J=await $.sessionHost.readSessionMessages(Q);return c(Z,{sessionId:Q,messages:J})}async function eU($,Z){let Q=typeof Z.payload?.limit==="number"?Z.payload.limit:200,J=(await $.sessionHost.listSessions(Q)).map((X)=>n7(X,$.sessionState.get(X.sessionId)));return c(Z,{sessions:J})}async function $D($,Z){let Q=I0(Z),W=a7(Z.payload?.metadata),J=await $.sessionHost.updateSession(Q,{metadata:W}),[X,Y]=await Promise.all([o0($,Q),t0($,Q)]);if(X)$.publish($.buildEvent("session.updated",{session:X,...Y?{snapshot:Y}:{}},Q));return{version:Z.version,requestId:Z.requestId,ok:J.updated,payload:{updated:J.updated,session:X,...Y?{snapshot:Y}:{}}}}async function ZD($,Z){let Q=I0(Z),W=await $.sessionHost.deleteSession(Q);return $.sessionState.delete(Q),c(Z,{deleted:W})}async function QD($,Z){let Q=I0(Z),W=$.sessionHost.pendingPrompts;if(!W)return x(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let J=await W.list({sessionId:Q});return c(Z,{sessionId:Q,prompts:J})}async function WD($,Z){let Q=I0(Z),W=typeof Z.payload?.promptId==="string"?Z.payload.promptId.trim():"",J=typeof Z.payload?.prompt==="string"?Z.payload.prompt:void 0,X=Z.payload?.delivery==="queue"||Z.payload?.delivery==="steer"?Z.payload.delivery:void 0,Y=$.sessionHost.pendingPrompts;if(!Y)return x(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let j=await Y.update({sessionId:Q,promptId:W,prompt:J,delivery:X});return c(Z,j)}async function JD($,Z){let Q=I0(Z),W=typeof Z.payload?.promptId==="string"?Z.payload.promptId.trim():"",J=$.sessionHost.pendingPrompts;if(!J)return x(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let X=await J.delete({sessionId:Q,promptId:W});return c(Z,X)}function XD($){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 Qg=new Set(["skills","workflows","rules","tools","mcp"]);function aY($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function H9($,Z){let Q=$[Z];if(Q===void 0)return;if(typeof Q!=="string")throw Error(`settings payload '${Z}' must be a string.`);return Q}function Wg($,Z){let Q=$[Z];if(Q===void 0)return;if(typeof Q!=="boolean")throw Error(`settings payload '${Z}' must be a boolean.`);return Q}function YD($){if($===void 0)return{};if(!aY($))throw Error("settings.list payload must be an object.");return{cwd:H9($,"cwd"),workspaceRoot:H9($,"workspaceRoot"),availabilityContext:aY($.availabilityContext)?$.availabilityContext:void 0}}function Jg($){if(!aY($))throw Error("settings.toggle payload must be an object.");let{type:Z}=$;if(typeof Z!=="string"||!Qg.has(Z))throw Error("settings.toggle payload 'type' must be one of: skills, workflows, rules, tools, mcp.");return{...YD($),type:Z,id:H9($,"id"),path:H9($,"path"),name:H9($,"name"),enabled:Wg($,"enabled")}}class N4{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=Zg("hub_");ctx;constructor($){this.options=$;if(this.sessionHost=$.sessionHost??new z1({sessionService:new _1(new D1),fetch:$.fetch,telemetry:$.telemetry}),this.ctx={clients:this.clients,sessionState:this.sessionState,pendingApprovals:this.pendingApprovals,pendingCapabilityRequests:this.pendingCapabilityRequests,suppressNextTerminalEventBySession:this.suppressNextTerminalEventBySession,telemetry:$.telemetry,sessionHost:this.sessionHost,publish:(Z)=>this.publish(Z),buildEvent:p2,requestCapability:(Z,Q,W,J,X)=>OU(this.ctx,Z,Q,W,J,X)},this.schedules=new $8({...$.scheduleOptions,runtimeHandlers:$.runtimeHandlers,eventPublisher:(Z,Q)=>{let W=Z==="schedule.execution.completed"?"schedule.execution_completed":Z==="schedule.execution.failed"?"schedule.execution_failed":void 0;if(!W)return;this.publish(p2(W,Q&&typeof Q==="object"?Q:void 0))}}),this.scheduleCommands=new s2(this.schedules),this.settings=$.settingsService??new k$,$.cronOptions)this.cronService=new w5({runtimeHandlers:$.runtimeHandlers,...$.cronOptions});this.sessionHost.subscribe((Z)=>{vU(this.ctx,Z).catch((Q)=>{cY("session event handling failed",Q),t7(this.options.telemetry,{component:"core",operation:"hub.session_event_project",error:Q,severity:"error",handled:!0,context:{eventType:Z.type,sessionId:Z.payload.sessionId}})})})}getCronService(){return this.cronService}getHubId(){return this.hubId}async start(){if(await this.schedules.start(),this.cronService)try{await this.cronService.start()}catch($){console.error("[hub] cron service start failed",$)}}async stop(){for(let $ of this.pendingApprovals.keys())mY(this.ctx,$,{approved:!1,reason:"Hub shutting down before approval was resolved."});if(u$(this.ctx,()=>!0,"Hub shutting down before capability request was resolved."),await this.sessionHost.dispose("hub_server_stop"),await this.schedules.dispose(),this.cronService)try{await this.cronService.dispose()}catch($){console.error("[hub] cron service stop failed",$)}}async handleCommand($){try{let Z=await this.dispatchCommand($);return this.captureFailedReply($,Z),Z}catch(Z){throw t7(this.options.telemetry,{component:"core",operation:"hub.command",error:Z,severity:"error",handled:!1,context:this.commandTelemetryContext($)}),Z}}async dispatchCommand($){switch($.command){case"client.register":return EU(this.ctx,$);case"client.update":return NU(this.ctx,$);case"client.unregister":return wU(this.ctx,$,(Z)=>{this.listeners.delete(Z),this.detachClientFromSessions(Z)});case"client.list":return CU(this.ctx,$);case"session.create":return await iU(this.ctx,$,(Z)=>gY(this.ctx,Z));case"session.restore":return await nU(this.ctx,$,(Z)=>gY(this.ctx,Z));case"session.attach":return await aU(this.ctx,$);case"session.detach":return await sU(this.ctx,$);case"session.get":return await oU(this.ctx,$);case"session.messages":return await tU(this.ctx,$);case"session.list":return await eU(this.ctx,$);case"session.update":return await $D(this.ctx,$);case"session.pending_prompts":return await QD(this.ctx,$);case"session.update_pending_prompt":return await WD(this.ctx,$);case"session.remove_pending_prompt":return await JD(this.ctx,$);case"session.delete":return await ZD(this.ctx,$);case"session.hook":return await mU(this.ctx,$);case"run.start":case"session.send_input":return await xU(this.ctx,$);case"run.abort":return await gU(this.ctx,$);case"capability.request":return await MU(this.ctx,$);case"approval.respond":return await zU(this.ctx,$);case"capability.respond":return RU(this.ctx,$);case"capability.progress":return qU(this.ctx,$);case"ui.notify":return this.publish(p2("ui.notify",$.payload??{})),c($);case"ui.show_window":return this.publish(p2("ui.show_window",$.payload??{})),c($);case"settings.list":return await this.handleSettingsList($);case"settings.toggle":return await this.handleSettingsToggle($);case"connector.channels":case"connector.configure":case"connector.delete_config":return await IU(this.ctx,$);case"settings.get":case"settings.patch":return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"not_implemented",message:`${$.command} is not implemented yet.`}};default:{let Z=await this.scheduleCommands.handleCommand($);if(Z.ok){let Q=XD($.command);if(Q)this.publish(p2(Q,Z.payload))}return Z}}}captureFailedReply($,Z){if(Z.ok||!Z.error||!Xg(Z.error.code))return;t7(this.options.telemetry,{component:"core",operation:"hub.command_reply",error:Error(Z.error.message),severity:Z.error.code==="session_not_found"?"warn":"error",handled:!0,context:{...this.commandTelemetryContext($),errorCode:Z.error.code}})}commandTelemetryContext($){return{command:$.command,requestId:$.requestId,clientId:$.clientId,sessionId:typeof $.payload?.sessionId==="string"?$.payload.sessionId:$.sessionId}}async handleSettingsList($){try{let Z=await this.settings.list(YD($.payload));return{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:Z}}}catch(Z){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_list_failed",message:Z instanceof Error?Z.message:String(Z)}}}}async handleSettingsToggle($){try{let Z=await this.settings.toggle(Jg($.payload));return this.publish(p2("settings.changed",{types:Z.changedTypes,snapshot:Z.snapshot})),{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:Z.snapshot,changedTypes:Z.changedTypes}}}catch(Z){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_toggle_failed",message:Z instanceof Error?Z.message:String(Z)}}}}subscribe($,Z,Q){let W=this.listeners.get($)??new Set,J={sessionId:Q?.sessionId,listener:Z};return W.add(J),this.listeners.set($,W),()=>{let X=this.listeners.get($);if(!X)return;if(X.delete(J),X.size===0)this.listeners.delete($)}}detachClientFromSessions($){for(let[Z,Q]of this.sessionState.entries())if(Q.participants.delete($),Q.participants.size===0)this.sessionState.delete(Z);u$(this.ctx,(Z)=>Z.targetClientId===$,`Capability owner client ${$} disconnected before request was resolved.`)}publish($){for(let Z of this.listeners.values())for(let Q of Z){if(Q.sessionId&&Q.sessionId!==$.sessionId)continue;try{Q.listener($)}catch(W){cY(`listener threw while publishing ${$.event}`,W),t7(this.options.telemetry,{component:"core",operation:"hub.publish",error:W,severity:"warn",handled:!0,context:{event:$.event,sessionId:$.sessionId}})}}}}function Xg($){return $==="session_not_found"||$==="session_messages_not_found"||$==="hub_command_timeout"||$.endsWith("_failed")}import{timingSafeEqual as Hg}from"node:crypto";import Bg from"node:http";import Gg from"node:net";import{URL as eY}from"node:url";import{CURRENT_HUB_PROTOCOL_VERSION as HD,HUB_CAPABILITIES as Kg,isHubProtocolCompatible as Fg,MAX_CLIENT_HUB_PROTOCOL_VERSION as BD,MIN_CLIENT_HUB_PROTOCOL_VERSION as GD}from"@cline/shared";import{WebSocketServer as Ag}from"ws";import{captureSdkError as jD,HUB_COMMAND_SLOW_LOG_MS as Yg,resolveHubCommandTimeoutMs as jg,safeJsonParse as Vg}from"@cline/shared";function sY($){return{command:$.envelope.command,requestId:$.envelope.requestId,clientId:$.envelope.clientId,sessionId:$.envelope.sessionId}}function VD($,Z,Q){return{version:$.envelope.version,requestId:$.envelope.requestId,ok:!1,error:{code:Z,message:Q}}}class W9{transport;telemetry;constructor($,Z){this.transport=$;this.telemetry=Z}attach($){let Z=new Map,Q=new Set,W=!1,J=(V)=>{try{$.send(JSON.stringify(V))}catch(H){console.error(`[hub] failed to send websocket frame: ${H instanceof Error?H.stack||H.message:String(H)}`)}},X=(V)=>{J({kind:"event",envelope:V})},Y=async(V)=>{try{let H=JSON.parse(V.data);switch(H.kind){case"command":{let B=performance.now(),G=!1,K=sY(H);u("info","command.start",K);let F=setTimeout(()=>{if(G)return;u("warn","command.slow",{...K,elapsedMs:Math.round(performance.now()-B)})},Yg),A=this.transport.command(H.envelope);A.then((O)=>{if(!G)return;u(O.ok?"warn":"error","command.late_end",{...K,elapsedMs:Math.round(performance.now()-B),ok:O.ok,errorCode:O.error?.code,errorMessage:O.error?.message})},(O)=>{if(!G)return;u("error","command.late_error",{...K,elapsedMs:Math.round(performance.now()-B),error:O})});let L=!1,f,D,U=jg(H.envelope.command,H.envelope.timeoutMs);try{D=U===null?await A:await Promise.race([A,new Promise((O)=>{f=setTimeout(()=>{L=!0,jD(this.telemetry,{component:"core",operation:"hub.command_timeout",error:Error(`Hub command ${H.envelope.command} did not complete within ${U}ms.`),severity:"error",handled:!0,context:{...K,timeoutMs:U}}),O(VD(H,"hub_command_timeout",`Hub command ${H.envelope.command} did not complete within ${U}ms. Check hub-daemon.log for command.start/command.slow logs with requestId ${H.envelope.requestId}.`))},U)})])}catch(O){if(clearTimeout(F),f)clearTimeout(f);throw O}if(G=L,clearTimeout(F),f)clearTimeout(f);let T=Math.round(performance.now()-B);if(L)u("error","command.timeout",{...K,durationMs:T,timeoutMs:U});else u(D.ok?"info":"warn","command.end",{...K,durationMs:T,ok:D.ok,errorCode:D.error?.code,errorMessage:D.error?.message});if(H.envelope.command==="client.register"&&D.ok){let z=(H.envelope.payload??{}).clientId?.trim()||H.envelope.clientId?.trim();if(z)Q.add(z)}else if(H.envelope.command==="client.unregister"&&D.ok){let O=H.envelope.clientId?.trim();if(O)Q.delete(O)}J({kind:"reply",envelope:D});break}case"stream.subscribe":{let B=`${H.clientId}:${H.sessionId??"*"}`;if(Z.has(B))break;let G=await this.transport.subscribe(H.clientId,X,{sessionId:H.sessionId});Z.set(B,G);break}case"stream.unsubscribe":{let B=`${H.clientId}:${H.sessionId??"*"}`;Z.get(B)?.(),Z.delete(B);break}case"reply":case"event":break}}catch(H){let B=typeof V.data==="string"?Vg(V.data):void 0;if(!B||B.kind!=="command"){u("error","rejected malformed websocket frame",{error:H});return}u("error","command.error",{...sY(B),error:H}),jD(this.telemetry,{component:"core",operation:"hub.websocket_command",error:H,severity:"error",handled:!0,context:sY(B)}),J({kind:"reply",envelope:VD(B,"command_failed",H instanceof Error?H.message:"Unknown hub error")})}},j=()=>{if(W)return;W=!0;for(let V of Z.values())V();Z.clear();for(let V of Q)this.transport.command({version:"v1",command:"client.unregister",clientId:V});Q.clear(),$.removeEventListener("message",Y),$.removeEventListener("close",j)};return $.addEventListener("message",Y),$.addEventListener("close",j),j}}class J9{transport;constructor($){this.transport=$}command($){return this.transport.handleCommand($)}subscribe($,Z,Q){return this.transport.subscribe($,Z,Q)}}function fg($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString();if($ instanceof ArrayBuffer)return Buffer.from($).toString();if(Array.isArray($))return Buffer.concat($.map((Z)=>Buffer.from(Z))).toString();return String($)}function Ug($){return{send(Z){$.send(Z)},addEventListener(Z,Q){if(Z==="message"){$.on("message",(W)=>{Q({data:fg(W)})});return}$.on("close",Q)},removeEventListener(){}}}function Dg($){try{$.write(`HTTP/1.1 400 Bad Request\r
|
|
745
746
|
Connection: close\r
|
|
746
747
|
Content-Length: 0\r
|
|
747
748
|
\r
|
|
748
|
-
`),$.end()}catch{$.destroy()}}function
|
|
749
|
+
`),$.end()}catch{$.destroy()}}function Lg($){try{$.write(`HTTP/1.1 401 Unauthorized\r
|
|
749
750
|
Connection: close\r
|
|
750
751
|
Content-Length: 0\r
|
|
751
752
|
\r
|
|
752
|
-
`),$.end()}catch{$.destroy()}}function oY($,Z){if(!$||!Z)return!1;let Q=Buffer.from($,"utf8"),W=Buffer.from(Z,"utf8");return Q.length===W.length&&
|
|
753
|
-
Caused by: ${$.stack}`;return X}async function
|
|
753
|
+
`),$.end()}catch{$.destroy()}}function oY($,Z){if(!$||!Z)return!1;let Q=Buffer.from($,"utf8"),W=Buffer.from(Z,"utf8");return Q.length===W.length&&Hg(Q,W)}function KD($,Z){let Q=$&&typeof $==="object"&&"code"in $&&typeof $.code==="string"?$.code:void 0,W=$ instanceof Error?$.message:typeof $==="string"?$:"Unknown startup error",J=`Failed to start hub server on ${Z.host}:${Z.port}${Z.pathname}: ${W}`,X=Error(Q?`${J} (${Q})`:J);if(Q)$.code=Q,X.code=Q;if($ instanceof Error&&$.stack)X.stack=`${X.name}: ${X.message}
|
|
754
|
+
Caused by: ${$.stack}`;return X}async function _g($){return await new Promise((Z,Q)=>{let W=Gg.createServer();W.once("error",Q),W.listen(0,$,()=>{let J=W.address();if(!J||typeof J==="string"){W.close(()=>Q(Error("Failed to resolve free port")));return}let X=J.port;W.close((Y)=>{if(Y){Q(Y);return}Z(X)})})})}function zg($){return $ instanceof Error&&"code"in $&&$.code==="EADDRINUSE"}var tY=new Map,FD="cline-hub-auth.",Tg=30000;function $j($){return Array.isArray($)?$.join(","):$??""}function AD($){return $===32||$===9}function d7($){let Z=$j($).trim(),Q="bearer";if(Z.length<=6||Z.slice(0,6).toLowerCase()!=="bearer"||!AD(Z.charCodeAt(6)))return null;let W=7;while(W<Z.length&&AD(Z.charCodeAt(W)))W+=1;return Z.slice(W).trim()||null}function Og($){for(let Z of $j($).split(",")){let Q=Z.trim();if(Q.startsWith(FD))return Q.slice(FD.length).trim()||null}return null}function l7($){let Z=$.trim().toLowerCase();return Z==="localhost"||Z==="127.0.0.1"||Z==="::1"||Z==="[::1]"}function MY($){let Z=$j($).trim();if(!Z)return!1;try{return l7(new eY(Z).hostname)}catch{return!1}}async function X9($){let Z=$.owner??x1(),Q=$.host??"127.0.0.1",W=$.pathname??"/hub",J=$.port??V8(),X=J===0?await _g(Q):J,Y=X,j=Z1(Q,X,W),V=u9(),H=c9(),B=new N4($);await B.start();let G=new W9(new J9(B),$.telemetry),K=new Set,F=new Date().toISOString(),A={protocolVersion:HD,minClientProtocolVersion:GD,maxClientProtocolVersion:BD,capabilities:Kg,coreVersion:i4.version,buildId:V,pid:process.pid,startedAt:F},L=new Set,f,D,U=async()=>{if(D)return D;return D=(async()=>{if(f)clearInterval(f),f=void 0;for(let _ of L)_.terminate?.();L.clear();for(let _ of K)_();if(K.clear(),await new Promise((_,E)=>{O.close((C)=>{if(C){E(C);return}_()})}),await new Promise((_,E)=>{T.close((C)=>{if(C){E(C);return}_()})}),await B.stop(),(await K0(Z.discoveryPath))?.url===j)await S0(Z.discoveryPath)})(),D},T=Bg.createServer((z,_)=>{if((z.url??"/")==="/health"){let C=JSON.stringify({ok:!0,protocolVersion:A.protocolVersion,minClientProtocolVersion:A.minClientProtocolVersion,maxClientProtocolVersion:A.maxClientProtocolVersion,coreVersion:A.coreVersion,host:Q,port:Y,url:j});_.statusCode=200,_.setHeader("content-type","application/json"),_.end(C);return}if((z.url??"/")==="/status"){if(!oY(d7(z.headers.authorization),H)){_.statusCode=401,_.end("Unauthorized");return}let C=JSON.stringify({hubId:B.getHubId(),...A,authToken:H,host:Q,port:Y,url:j,updatedAt:new Date().toISOString()});_.statusCode=200,_.setHeader("content-type","application/json"),_.end(C);return}if((z.url??"/")==="/version"){_.statusCode=200,_.setHeader("content-type","application/json"),_.end(JSON.stringify(A));return}if(new eY(z.url??"/",`http://${Q}:${Y}`).pathname==="/shutdown"&&z.method==="POST"){if(!oY(d7(z.headers.authorization),H)){_.statusCode=401,_.end("Unauthorized");return}_.statusCode=202,_.setHeader("content-type","application/json"),_.end(JSON.stringify({ok:!0})),queueMicrotask(()=>{U()});return}_.statusCode=404,_.end("Not found")}),O=new Ag({noServer:!0});f=setInterval(()=>{for(let z of L){if(z.isAlive===!1){try{z.terminate?.()}catch{}L.delete(z);continue}z.isAlive=!1;try{z.ping?.()}catch{try{z.terminate?.()}catch{}L.delete(z)}}},Tg),T.on("upgrade",(z,_,E)=>{if(new eY(z.url??"/",`http://${Q}:${Y}`).pathname!==W){_.destroy();return}if(!(oY(Og(z.headers["sec-websocket-protocol"]),H)||l7(Q)&&MY(z.headers.origin))){Lg(_);return}try{O.handleUpgrade(z,_,E,(l)=>{let o=l;o.isAlive=!0,o.on("pong",()=>{o.isAlive=!0}),L.add(o);let t=G.attach(Ug(l));K.add(t),l.once("close",()=>{L.delete(o),t(),K.delete(t)})})}catch{Dg(_)}});try{await new Promise((z,_)=>{T.once("error",(E)=>{_(KD(E,{host:Q,port:X,pathname:W}))}),T.listen(X,Q,()=>{let E=T.address();if(!E||typeof E==="string"){_(KD(Error("Failed to resolve hub port"),{host:Q,port:X,pathname:W}));return}Y=E.port,j=Z1(Q,Y,W),z()})})}catch(z){if(f)clearInterval(f),f=void 0;throw await B.stop().catch(()=>{return}),z}return await d9(Z.discoveryPath,{hubId:B.getHubId(),protocolVersion:HD,minClientProtocolVersion:GD,maxClientProtocolVersion:BD,capabilities:[...A.capabilities],coreVersion:i4.version,buildId:V,authToken:H,host:Q,port:Y,url:j,pid:process.pid,startedAt:F,updatedAt:F}),{host:Q,port:Y,url:j,authToken:H,close:U}}async function p7($){let Z=$.owner??x1(),Q=$.host!==void 0||$.port!==void 0||$.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),W=$.host??"127.0.0.1",J=$.port??V8(),X=$.pathname??"/hub",Y=Z1(W,J,X),j=Z.discoveryPath,V=(B)=>{if(!Q)B$(B.url,B.authToken);return B},H=tY.get(j);if(H){let B=await H;if(B.url===Y)return V({server:B,url:B.url,authToken:B.authToken,action:"reuse"})}return await l9(Z.discoveryPath,async()=>{let B=await K0(Z.discoveryPath);if(B?.url&&(B.url===Y||$.allowPortFallback===!0)){let F=await g1(B.url,{authToken:B.authToken});if(F?.url&&Fg(F).compatible&&await F1(F.url,{authToken:B.authToken}))return V({url:F.url,authToken:B.authToken,action:"reuse"})}if(B?.url)await S0(Z.discoveryPath);let K=async(F)=>{let A=X9({...F,owner:Z});tY.set(j,A);try{let L=await A;return V({server:L,url:L.url,authToken:L.authToken,action:"started"})}catch(L){throw tY.delete(j),L}};try{return await K($)}catch(F){if(!$.allowPortFallback||!zg(F))throw F;return await K({...$,port:0})}})}function UD(){return fD()==="production"?K1():Q1()}function qg($){return fD()!=="production"&&!$}async function jU($){let Z=G1({host:$.host,port:$.port,pathname:$.pathname});return await X9({...$,...Z,owner:UD()})}async function VU($){let Z=$.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Q=G1({host:$.host,port:$.port,pathname:$.pathname});return await p7({...$,...Q,allowPortFallback:$.allowPortFallback??qg(Z),owner:UD()})}export{d9 as writeHubDiscovery,l9 as withHubStartupLock,F1 as verifyHubConnection,Q9 as truncateNotificationBody,TW as toHubStatusUrl,p9 as toHubHealthUrl,yW as stopLocalHubServerGracefully,X9 as startHubWebSocketServer,jU as startHubServer,H8 as spawnDetachedHubServerWithRetry,NW as spawnDetachedHubServer,DV as sendHubCommand,s9 as restartLocalHubIfIdleAfterStartupTimeout,$V as resolveWorkspaceHubOwnerContext,Q1 as resolveSharedHubOwnerContext,K1 as resolveProductionHubOwnerContext,hW as resolveHubUrl,x1 as resolveHubOwnerContext,G1 as resolveHubEndpointOptions,u9 as resolveHubBuildId,V8 as resolveDefaultHubPort,EW as resolveDefaultHubPathname,RW as resolveDefaultHubHost,s4 as resolveCompatibleLocalHubUrl,sj as resolveClineDir,s$ as resolveClineDataDir,a4 as requestHubShutdown,B$ as rememberRecoverableLocalHubUrl,K0 as readHubDiscovery,d7 as readBearerToken,g1 as probeHubServer,UV as probeHubConnection,i9 as prewarmDetachedHubServer,G$ as normalizeHubWebSocketUrl,MY as isLocalHubOrigin,l7 as isLocalHubHostName,SW as isHubReconnectableTransportError,a9 as isHubCommandTimeoutError,tj as isDiscoveryFilePresent,p7 as ensureHubWebSocketServer,VU as ensureHubServer,YV as ensureDetachedHubServer,e$ as ensureCompatibleLocalHubUrl,YU as createLocalHubScheduleRuntimeHandlers,oj as createInMemoryHubOwnerContext,Z1 as createHubServerUrl,c9 as createHubAuthToken,h1 as createConfiguredTelemetryService,j8 as createConfiguredTelemetryHandle,o9 as connectToHub,S0 as clearHubDiscovery,W1 as NodeHubClient,J9 as NativeHubTransportAdapter,xW as HubUIClient,R0 as HubTransportError,IW as HubSessionClient,N4 as HubServerTransport,$8 as HubScheduleService,s2 as HubScheduleCommandService,B8 as HubCommandError,qW as DEFAULT_HUB_PORT,MW as DEFAULT_HUB_PATHNAME,OW as DEFAULT_HUB_HOST,W9 as BrowserWebSocketHubAdapter};
|