@cline/core 0.0.51-nightly.1781925400 → 0.0.51
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/hub/daemon/entry.js +30 -30
- package/dist/hub/index.js +32 -32
- package/dist/index.js +48 -48
- package/package.json +4 -4
package/dist/hub/daemon/entry.js
CHANGED
|
@@ -2,7 +2,7 @@ import{createRequire as RF}from"node:module";var{defineProperty:WZ,getOwnPropert
|
|
|
2
2
|
`,"utf8"),uU()}function O5(){return M0().telemetryOptOut}function bf($,J={}){k1({...M0(),telemetryOptOut:$},J)}function hf(){return M0().autoUpdateEnabled}function kf($,J={}){k1({...M0(),autoUpdateEnabled:$},J)}function B1($){return new Set($??M0().disabledTools??[])}function r4($){return new Set($??M0().disabledPlugins??[])}function If($){return B1().has($)}function T5($){let J=M0(),Q=new Set(J.disabledTools??[]),Z=Q.has($);if(Z)Q.delete($);else Q.add($);return k1({...J,disabledTools:[...Q]}),!Z}function uZ($,J){let Q=[...new Set($.map((j)=>j.trim()).filter(Boolean))];if(Q.length===0)return;let Z=M0(),W=B1(Z.disabledTools);for(let j of Q)if(J)W.add(j);else W.delete(j);k1({...Z,disabledTools:[...W]})}function xf($,J){return uZ([$],J),J}function gf($){return r4().has($)}function mf($,J){let Q=$.trim();if(!Q)return;let Z=M0(),W=r4(Z.disabledPlugins);if(J)W.add(Q);else W.delete(Q);k1({...Z,disabledPlugins:[...W]})}function M5($,J){let Q=r4(J);if(Q.size===0)return[...$];return $.filter((Z)=>!Q.has(Z))}function I1($,J){let Q=B1(J);if(Q.size===0)return[...$];return $.filter((Z)=>!Q.has(Z.name))}function q5($,J){if(!$||$.length===0)return $;let Q=B1(J);if(Q.size===0)return $;return $.map((Z)=>{if(!Z.setup)return Z;return{...Z,setup:(W,j)=>Z.setup?.({...W,registerTool:(X)=>{if(!Q.has(X.name))W.registerTool(X)}},j)}})}var yf,p4,_5;var W1=h$(()=>{O0();yf=e2.preprocess(($)=>Array.isArray($)?$.filter((J)=>typeof J==="string").map((J)=>J.trim()).filter(Boolean):void 0,e2.array(e2.string()).optional()).transform(($)=>{if(!$)return;let J=[...new Set($)].sort((Q,Z)=>Q.localeCompare(Z));return J.length>0?J:void 0}),p4=e2.object({telemetryOptOut:e2.boolean().default(!1).catch(!1),autoUpdateEnabled:e2.boolean().default(!0).catch(!0),disabledTools:yf.optional(),disabledPlugins:yf.optional()}).strip().transform(($)=>{let J={autoUpdateEnabled:$.autoUpdateEnabled,telemetryOptOut:$.telemetryOptOut};if($.disabledTools?.length)J.disabledTools=$.disabledTools;if($.disabledPlugins?.length)J.disabledPlugins=$.disabledPlugins;return J})});var XY={};w(XY,{normalizeUserMessage:()=>cR,buildInitialUserContent:()=>vR});async function vR($,J,Q,Z){let W=uR(J),j=await lR(Q,Z);if(W.length===0&&!j)return $;let X=[{type:"text",text:$},...W];if(j)X.push(...j);return X}function cR($){if($==null)return"";if(typeof $==="string")return $;let J=$.content;if(typeof J==="string")return J;if(!Array.isArray(J))return"";let Q=[];for(let Z of J)if(Z&&typeof Z==="object"&&Z.type==="text"){let W=Z.text;if(typeof W==="string")Q.push(W)}return Q.join(`
|
|
3
3
|
`)}function uR($){if(!$||$.length===0)return[];let J=[];for(let Q of $){let Z=dR(Q);if(Z)J.push(Z)}return J}function dR($){let J=$.trim();if(!J)return;let Q=J.match(/^data:([^;,]+);base64,(.+)$/);if(Q){let Z=Q[1],W=Q[2];if(!Z||!W)return;return{type:"image",mediaType:Z,data:W}}return{type:"image",mediaType:"image/png",data:J}}async function lR($,J){if(!$||$.length===0)return;let Q=J??(async()=>{throw Error("File loading is not configured in this runtime. Provide userFileContentLoader to enable userFiles support.")}),Z=await Promise.all($.map(async(W)=>{let j=W.replace(/\\/g,"/");try{let X=await Q(W);return{type:"file",path:j,content:X}}catch(X){let f=X instanceof Error?X.message:String(X);return{type:"file",path:j,content:`Error fetching content: ${f}`}}}));if(Z.length===0)return;return Z}var NH={};w(NH,{updateMcpServerOAuthState:()=>H2,setMcpServerDisabled:()=>Y2,resolveMcpServerRegistrations:()=>A1,resolveDefaultMcpSettingsPath:()=>K0,registerMcpServersFromSettingsFile:()=>B2,normalizeMcpServerOAuthState:()=>S8,loadMcpSettingsFile:()=>f2,listMcpServerOAuthStatuses:()=>u6,hasMcpSettingsFile:()=>c1,getMcpServerOAuthState:()=>V2});import{existsSync as uO,mkdirSync as _H,readFileSync as t7,writeFileSync as OH}from"node:fs";import{dirname as TH}from"node:path";import{resolveMcpSettingsPath as dO}from"@cline/shared/storage";import{z as y}from"zod";function o7($){if(!$)return;if($==="http")return"streamableHttp";return $}function K0(){return dO()}function $T($){let J=t7($,"utf8"),Q;try{Q=JSON.parse(J)}catch(Z){let W=Z instanceof Error?Z.message:String(Z);throw Error(`Failed to parse MCP settings JSON at "${$}": ${W}`)}if(!Q||typeof Q!=="object"||Array.isArray(Q))throw Error(`Invalid MCP settings at "${$}": expected object.`);return Q}function PH($,J){if(!Object.hasOwn($,J))return;let Q=$[J];if(!Q||typeof Q!=="object"||Array.isArray(Q))return;return Q}function JT($,J,Q){Object.defineProperty($,J,{value:Q,enumerable:!0,configurable:!0,writable:!0})}function f2($={}){let J=$.filePath??K0(),Q=t7(J,"utf8"),Z;try{Z=JSON.parse(Q)}catch(j){let X=j instanceof Error?j.message:String(j);throw Error(`Failed to parse MCP settings JSON at "${J}": ${X}`)}let W=eO.safeParse(Z);if(!W.success){let j=W.error.issues.map((X)=>{let f=X.path.join(".");return f?`${f}: ${X.message}`:X.message}).join("; ");throw Error(`Invalid MCP settings at "${J}": ${j}`)}return W.data}function QT($){let J=t7($,"utf8"),Q;try{Q=JSON.parse(J)}catch(j){let X=j instanceof Error?j.message:String(j);throw Error(`Failed to parse MCP settings JSON at "${$}": ${X}`)}if(!Q||typeof Q!=="object"||Array.isArray(Q))throw Error(`Invalid MCP settings at "${$}": expected object`);let Z=Q,W=Z.mcpServers;if(!W||typeof W!=="object"||Array.isArray(W))throw Error(`Invalid MCP settings at "${$}": mcpServers must be an object`);return Z}function S8($){if(!$)return;let J={...$.clientInformation?{clientInformation:$.clientInformation}:{},...$.tokens?{tokens:$.tokens}:{},...$.codeVerifier?{codeVerifier:$.codeVerifier}:{},...$.discoveryState?{discoveryState:$.discoveryState}:{},...$.redirectUrl?{redirectUrl:$.redirectUrl}:{},...$.lastError?{lastError:$.lastError}:{},...$.lastAuthenticatedAt?{lastAuthenticatedAt:$.lastAuthenticatedAt}:{}};return Object.keys(J).length>0?J:void 0}function ZT($){if($===void 0)return;let J=e7.safeParse($);if(!J.success)return;return S8(J.data)}function c1($={}){let J=$.filePath??K0();return uO(J)}function A1($={}){let J=f2($);return Object.entries(J.mcpServers).map(([Q,Z])=>({name:Q,transport:Z.transport,disabled:Z.disabled,metadata:Z.metadata,oauth:Z.oauth}))}function Y2($){let J=$.filePath??K0(),Q=$.name.trim();if(!Q)throw Error("MCP server settings toggle requires a server name.");let Z=$T(J),W=Z.mcpServers;if(!W||typeof W!=="object"||Array.isArray(W))throw Error(`Invalid MCP settings at "${J}": mcpServers must be an object.`);let j={...W},X=PH(j,Q);if(!X)throw Error(`Unknown MCP server: ${Q}`);let f={...X};if($.disabled)f.disabled=!0;else delete f.disabled;JT(j,Q,f),_H(TH(J),{recursive:!0}),OH(J,`${JSON.stringify({...Z,mcpServers:j},null,2)}
|
|
4
4
|
`)}function V2($,J={}){let Q=f2(J);if(!Object.hasOwn(Q.mcpServers,$))return;return S8(Q.mcpServers[$]?.oauth)}function H2($,J,Q={}){let Z=Q.filePath??K0(),W=QT(Z),j=W.mcpServers,X=PH(j,$);if(!X)throw Error(`Unknown MCP server: ${$}`);let f=ZT(X.oauth)??{},Y=S8(J(f));if(Y)X.oauth=Y;else delete X.oauth;return _H(TH(Z),{recursive:!0}),OH(Z,`${JSON.stringify(W,null,2)}
|
|
5
|
-
`,"utf8"),Y??{}}function u6($={}){return A1($).map((Q)=>{let Z=Q.transport.type!=="stdio",W=Q.oauth?.tokens?.access_token;return{serverName:Q.name,oauthSupported:Z,oauthConfigured:Z&&typeof W==="string"&&W.trim().length>0,lastError:Q.oauth?.lastError,lastAuthenticatedAt:Q.oauth?.lastAuthenticatedAt}}).sort((Q,Z)=>Q.serverName.localeCompare(Z.serverName))}async function B2($,J={}){let Q=A1(J);for(let Z of Q)await $.registerServer(Z);return Q}var c6,MH,e7,lO,pO,rO,iO,nO,aO,qH,sO,oO,tO,eO;var y9=h$(()=>{c6=y.record(y.string(),y.string()),MH=y.record(y.string(),y.unknown()),e7=y.object({clientInformation:y.record(y.string(),y.unknown()).optional(),tokens:y.record(y.string(),y.unknown()).optional(),codeVerifier:y.string().optional(),discoveryState:y.record(y.string(),y.unknown()).optional(),redirectUrl:y.string().url().optional(),lastError:y.string().optional(),lastAuthenticatedAt:y.number().int().positive().optional()}).strip(),lO=y.object({type:y.literal("stdio"),command:y.string().min(1),args:y.array(y.string()).optional(),cwd:y.string().min(1).optional(),env:c6.optional()}),pO=y.object({type:y.literal("sse"),url:y.string().url(),headers:c6.optional()}),rO=y.object({type:y.literal("streamableHttp"),url:y.string().url(),headers:c6.optional()}),iO=y.discriminatedUnion("type",[lO,pO,rO]),nO=y.object({transport:iO,disabled:y.boolean().optional(),metadata:MH.optional(),oauth:e7.optional()}),aO=y.enum(["stdio","sse","http","streamableHttp"]).optional(),qH=y.object({type:y.enum(["stdio","sse","streamableHttp"]).optional(),transportType:aO,disabled:y.boolean().optional(),metadata:MH.optional(),oauth:e7.optional()});sO=qH.extend({command:y.string().min(1),args:y.array(y.string()).optional(),cwd:y.string().min(1).optional(),env:c6.optional()}).superRefine(($,J)=>{let Q=$.type??o7($.transportType);if(Q&&Q!=="stdio")J.addIssue({code:y.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})),oO=qH.extend({url:y.string().url(),headers:c6.optional()}).superRefine(($,J)=>{let Q=$.type??o7($.transportType)??"sse";if(Q!=="sse"&&Q!=="streamableHttp")J.addIssue({code:y.ZodIssueCode.custom,message:'Expected type "sse" or "streamableHttp" for URL-based MCP server',path:["type"]})}).transform(($)=>{if(($.type??o7($.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}}),tO=y.union([nO,sO,oO]),eO=y.object({mcpServers:y.record(y.string(),tO)}).passthrough()});import{existsSync as VN,mkdirSync as HN,readFileSync as BN,writeFileSync as AN}from"node:fs";import{resolve as KN}from"node:path";import{resolveSessionDataDir as GN}from"@cline/shared/storage";import{nanoid as FN}from"nanoid";import*as DN from"node-machine-id";function b0($){let J=$?.trim();if(J)return J;let Q=LN();if(Q)return Q;return zN()}function RN(){let $=DN;return $.machineIdSync??$.default?.machineIdSync}function LN(){try{let $=RN();if(!$)return;return $().trim()||void 0}catch{return}}function zN(){let $=GN(),J=KN($,UN);try{if(VN(J)){let Z=BN(J,"utf8").trim();if(Z.length>0)return Z}}catch{}let Q=`cl-${FN()}`;try{HN($,{recursive:!0}),AN(J,Q,"utf8")}catch{}return Q}var UN="machine-id";var m8=()=>{};class RJ{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($,J){if(!this.isEnabled())return;this.emitLog($,J,!1)}emitRequired($,J){this.emitLog($,J,!0)}recordCounter($,J,Q,Z,W=!1){if(!this.meter||!W&&!this.isEnabled())return;let j=this.counters.get($);if(!j)j=this.meter.createCounter($,Z?{description:Z}:void 0),this.counters.set($,j);j.add(J,this.flattenProperties(this.buildAttributes(Q)))}recordHistogram($,J,Q,Z,W=!1){if(!this.meter||!W&&!this.isEnabled())return;let j=this.histograms.get($);if(!j)j=this.meter.createHistogram($,Z?{description:Z}:void 0),this.histograms.set($,j);j.record(J,this.flattenProperties(this.buildAttributes(Q)))}recordGauge($,J,Q,Z,W=!1){if(!this.meter||!W&&!this.isEnabled())return;let j=this.buildAttributes(Q),X=JSON.stringify(j),f=this.gaugeValues.get($);if(J===null){if(f){if(f.delete(X),f.size===0)this.gaugeValues.delete($),this.gauges.delete($)}return}let Y=f;if(!Y)Y=new Map,this.gaugeValues.set($,Y);if(!this.gauges.has($)){let V=this.meter.createObservableGauge($,Z?{description:Z}:void 0);V.addCallback((H)=>{for(let B of this.snapshotGaugeSeries($))H.observe(B.value,this.flattenProperties(B.attributes))}),this.gauges.set($,V)}Y.set(X,{value:J,attributes:j})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}setDistinctId($){this.distinctId=$}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}async flush(){await Promise.all([this.meterProvider?.forceFlush?.(),this.loggerProvider?.forceFlush?.()])}async dispose(){await Promise.all([this.meterProvider?.shutdown?.(),this.loggerProvider?.shutdown?.()])}emitLog($,J,Q){if(!this.logger)return;let Z=this.flattenProperties(this.buildAttributes(J,Q));this.logger.emit({severityText:"INFO",body:$,attributes:Z})}buildAttributes($,J=!1){return{...this.commonProperties,...this.metadata,...$,...this.distinctId?{distinct_id:this.distinctId}:{},...J?{_required:!0}:{}}}snapshotGaugeSeries($){let J=this.gaugeValues.get($);if(!J)return[];return Array.from(J.values(),(Q)=>({value:Q.value,attributes:Q.attributes?{...Q.attributes}:void 0}))}flattenProperties($,J="",Q=new WeakSet,Z=0){if(!$)return{};let W={},j=100,X=10;for(let[f,Y]of Object.entries($)){if(f==="__proto__"||f==="constructor"||f==="prototype")continue;let V=J?`${J}.${f}`:f;if(Y===null||Y===void 0){W[V]=String(Y);continue}if(Array.isArray(Y)){let H=Y.length>j?Y.slice(0,j):Y;try{W[V]=JSON.stringify(H)}catch{W[V]="[UnserializableArray]"}if(Y.length>j)W[`${V}_truncated`]=!0,W[`${V}_original_length`]=Y.length;continue}if(typeof Y==="object"){if(Y instanceof Date){W[V]=Y.toISOString();continue}if(Y instanceof Error){W[V]=Y.message;continue}if(Q.has(Y)){W[V]="[Circular]";continue}if(Z>=X){W[V]="[MaxDepthExceeded]";continue}Q.add(Y),Object.assign(W,this.flattenProperties(Y,V,Q,Z+1));continue}if(Iw(Y)){W[V]=Y;continue}try{W[V]=JSON.stringify(Y)}catch{W[V]=String(Y)}}return W}}function Iw($){return typeof $==="string"||typeof $==="number"||typeof $==="boolean"}class LJ{name;logger;enabled;constructor($={}){this.name=$.name??"TelemetryLoggerSink",this.logger=$.logger,this.enabled=$.enabled??!0}emit($,J){if(!this.isEnabled())return;this.logger?.log("telemetry.event",{telemetrySink:this.name,event:$,properties:J})}emitRequired($,J){this.logger?.log("telemetry.required_event",{telemetrySink:this.name,severity:"warn",event:$,properties:J})}recordCounter($,J,Q,Z,W){if(!W&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"counter",name:$,value:J,attributes:Q,description:Z,required:W===!0})}recordHistogram($,J,Q,Z,W){if(!W&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"histogram",name:$,value:J,attributes:Q,description:Z,required:W===!0})}recordGauge($,J,Q,Z,W){if(!W&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"gauge",name:$,value:J,attributes:Q,description:Z,required:W===!0})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}async flush(){}async dispose(){}}class t8{adapters;metadata;distinctId;commonProperties;constructor($={}){if(this.adapters=[...$.adapters??[]],$.logger)this.adapters.push(new LJ({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 J=this.buildAttributes($.properties);for(let Q of this.adapters)Q.emit($.event,J)}captureRequired($,J){let Q=this.buildAttributes(J);for(let Z of this.adapters)Z.emitRequired($,Q)}recordCounter($,J,Q,Z,W=!1){let j=this.buildAttributes(Q);for(let X of this.adapters)X.recordCounter($,J,j,Z,W)}recordHistogram($,J,Q,Z,W=!1){let j=this.buildAttributes(Q);for(let X of this.adapters)X.recordHistogram($,J,j,Z,W)}recordGauge($,J,Q,Z,W=!1){let j=this.buildAttributes(Q);for(let X of this.adapters)X.recordGauge($,J,j,Z,W)}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 H3=()=>{};import{metrics as xw,trace as gw}from"@opentelemetry/api";import{logs as mw}from"@opentelemetry/api-logs";import{OTLPLogExporter as vw}from"@opentelemetry/exporter-logs-otlp-http";import{OTLPMetricExporter as cw}from"@opentelemetry/exporter-metrics-otlp-http";import{OTLPTraceExporter as uw}from"@opentelemetry/exporter-trace-otlp-http";import{resourceFromAttributes as dw}from"@opentelemetry/resources";import{BatchLogRecordProcessor as lw,ConsoleLogRecordExporter as pw,LoggerProvider as rw}from"@opentelemetry/sdk-logs";import{ConsoleMetricExporter as iw,MeterProvider as nw,PeriodicExportingMetricReader as iA}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as aw,ConsoleSpanExporter as sw,SimpleSpanProcessor as ow}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as tw}from"@opentelemetry/sdk-trace-node";import{ATTR_SERVICE_NAME as ew,ATTR_SERVICE_VERSION as $S}from"@opentelemetry/semantic-conventions";class nA{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($,J){this.resolveProperties(J)}recordCounter(){}recordHistogram(){}recordGauge(){}async flush(){}async dispose(){}resolveProperties($){return{...this.commonProperties,...$,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{}}}}class e8{meterProvider;loggerProvider;tracerProvider;options;constructor($={}){this.options=$;let J=dw({[ew]:$.serviceName??"cline",...$.serviceVersion?{[$S]:$.serviceVersion}:{}});if(this.meterProvider=this.createMeterProvider(J),this.loggerProvider=this.createLoggerProvider(J),this.tracerProvider=this.createTracerProvider(J),this.meterProvider)xw.setGlobalMeterProvider(this.meterProvider);if(this.loggerProvider)mw.setGlobalLoggerProvider(this.loggerProvider);if(this.tracerProvider)this.tracerProvider.register()}getTracer($="cline",J){return gw.getTracer($,J??this.options.serviceVersion)}createAdapter($){return new RJ({...$,meterProvider:this.meterProvider,loggerProvider:this.loggerProvider})}createTelemetryService($){let J=this.createAdapter({name:$.name,enabled:this.options.enabled,metadata:$.metadata});return new t8({...$,adapters:[J],distinctId:b0($.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 J=B3(this.options.metricsExporter);if(J.length===0)return null;let Q=Math.max(1000,this.options.metricExportIntervalMs??this.options.metricExportInterval??60000),Z=Math.min(30000,Math.floor(Q*0.8)),W=J.map((j)=>ZS(j,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json",interval:Q,timeout:Z})).filter((j)=>j!==null);if(W.length===0)return null;return new nw({resource:$,readers:W})}createTracerProvider($){let J=B3(this.options.tracesExporter);if(J.length===0)return null;let Q=this.options.otlpTracesEndpoint??this.options.otlpEndpoint,Z=this.options.otlpTracesHeaders??this.options.otlpHeaders,W=[];for(let j of J){let X=QS(j,{endpoint:Q,headers:Z,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(X)W.push(X)}if(W.length===0)return null;return new tw({resource:$,spanProcessors:W})}createLoggerProvider($){let J=B3(this.options.logsExporter);if(J.length===0)return null;let Q=J.map((Z)=>{let W=JS(Z,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(!W)return null;return new lw(W,{maxQueueSize:this.options.logMaxQueueSize??2048,maxExportBatchSize:this.options.logBatchSize??512,scheduledDelayMillis:this.options.logBatchTimeoutMs??this.options.logBatchTimeout??5000})}).filter((Z)=>Z!==null);if(Q.length===0)return null;return new rw({resource:$,processors:Q})}}function zJ($){let J=new e8($),Q=J.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:J,telemetry:Q}}function s1($){if(O5())return{telemetry:new nA($)};if($.enabled!==!0)return{telemetry:new t8({...$,distinctId:b0($.distinctId)})};return zJ($)}function $4($){let{telemetry:J,provider:Q}=s1($);return{telemetry:J,provider:Q,flush:async()=>{let j=Q;if(j&&typeof j.forceFlush==="function")try{await j.forceFlush()}catch{}},dispose:async()=>{await Promise.allSettled([J.dispose(),Q?.dispose()])}}}function B3($){if(!$)return[];return(Array.isArray($)?$:$.split(",")).map((Q)=>Q.trim()).filter((Q)=>Q==="console"||Q==="otlp")}function JS($,J){if($==="console")return new pw;if(!J.endpoint)return null;let Q=A3(J.endpoint,"/v1/logs");return new vw({url:Q,headers:J.headers})}function QS($,J){if($==="console")return new ow(new sw);if(!J.endpoint)return null;let Q=A3(J.endpoint,"/v1/traces");return new aw(new uw({url:Q,headers:J.headers}))}function ZS($,J){if($==="console")return new iA({exporter:new iw,exportIntervalMillis:J.interval,exportTimeoutMillis:J.timeout});if(!J.endpoint)return null;let Q=A3(J.endpoint,"/v1/metrics");return new iA({exporter:new cw({url:Q,headers:J.headers}),exportIntervalMillis:J.interval,exportTimeoutMillis:J.timeout})}function A3($,J){let Q=new URL($),Z=Q.pathname.endsWith("/")?Q.pathname.slice(0,-1):Q.pathname;return Q.pathname=Z.endsWith(J)?Z:`${Z}${J}`,Q.toString()}var GQ=h$(()=>{W1();m8();H3()});var JG={};w(JG,{resolveCoreDistinctId:()=>b0,createOpenTelemetryTelemetryService:()=>zJ,createConfiguredTelemetryService:()=>s1,createConfiguredTelemetryHandle:()=>$4,OpenTelemetryProvider:()=>e8,OpenTelemetryAdapter:()=>RJ});var MQ=h$(()=>{m8();GQ()});import{AgentRuntimeAbortError as eb}from"@cline/agents";import{initVcr as $h,resolveClineBuildEnv as Jh}from"@cline/shared";import{normalizeProviderId as sb}from"@cline/llms";var WF={};w(WF,{LocalRuntimeHost:()=>z1});import{readdirSync as cb}from"node:fs";import{homedir as ub}from"node:os";import{isAbsolute as db,join as mj,resolve as vj}from"node:path";import{captureSdkError as h2,createSessionId as lb,isLikelyAuthError as pb,normalizeUserInput as rb}from"@cline/shared";import{setHomeDirIfUnset as ib}from"@cline/shared/storage";var PX={};w(PX,{saveProviderOAuthCredentials:()=>x$,resolveProviderApiKeyFromSettings:()=>DZ,loginAndSaveProviderOAuthCredentials:()=>z4,isOAuthProvider:()=>I$,getProviderOAuthCredentialsFromSettings:()=>_4,getProviderAuthStorageId:()=>FZ,getProviderAuthHandler:()=>W0,getPersistedProviderApiKey:()=>l2,formatProviderOAuthApiKey:()=>UZ});import{getClineEnvironmentConfig as MX}from"@cline/shared";O0();var fX={};w(fX,{startClineDeviceAuth:()=>HZ,refreshClineToken:()=>Q5,loginClineOAuth:()=>K4,getValidClineCredentials:()=>G4,completeClineDeviceAuth:()=>BZ});import{getClineEnvironmentConfig as jZ}from"@cline/shared";var tj={};w(tj,{startLocalOAuthServer:()=>J1});function MF(){let $;return{promise:new Promise((Q)=>{$=Q}),resolve:$}}async function J1($){let J=await import("node:http"),Q=$.host??"127.0.0.1",Z=$.timeoutMs??300000,W=$.successHtml??qF,j=MF(),X=!1,f=null,Y=null,V=null,H=(K)=>{if(X)return;X=!0,j.resolve(K)},B=()=>{if(f)clearTimeout(f),f=null;let K=V;if(V=null,Y)Y.close(),Y=null;if(K!==null&&$.onClose)Promise.resolve($.onClose({host:Q,port:K})).catch(()=>{})},A=async()=>{return f=setTimeout(()=>{B(),H(null)},Z),j.promise};for(let K of $.ports){let G=J.createServer((D,U)=>{try{let F=new URL(D.url||"",`http://${Q}:${K}`);if(F.pathname!==$.callbackPath){U.statusCode=404,U.end("Not found");return}let O={url:F,code:F.searchParams.get("code")??void 0,state:F.searchParams.get("state")??void 0,provider:F.searchParams.get("provider")??void 0,error:F.searchParams.get("error")??void 0};if(O.error){U.statusCode=400,U.end(`Authentication failed: ${O.error}`),B(),H(O);return}if(!O.code){U.statusCode=400,U.end("Missing authorization code");return}if($.expectedState&&O.state!==$.expectedState){U.statusCode=400,U.end("State mismatch");return}U.statusCode=200,U.setHeader("Content-Type","text/html; charset=utf-8"),U.end(W),B(),H(O)}catch{U.statusCode=500,U.end("Internal error")}}),R=await new Promise((D)=>{let U=(F)=>{G.off("error",U),D({bound:!1,error:F})};G.once("error",U),G.listen(K,Q,()=>{G.off("error",U),Y=G,D({bound:!0})})});if(R.error){if(R.error.code==="EADDRINUSE")continue;throw B(),R.error}if(R.bound){V=K;let D=`http://${Q}:${K}${$.callbackPath}`;if($.onListening)await Promise.resolve($.onListening({host:Q,port:K,callbackUrl:D})).catch(()=>{});return{callbackUrl:D,waitForCallback:A,cancelWait:()=>{B(),H(null)},close:()=>{B(),H(null)}}}}return{callbackUrl:"",waitForCallback:async()=>null,cancelWait:()=>{},close:()=>{}}}var qF=`<!DOCTYPE html>
|
|
5
|
+
`,"utf8"),Y??{}}function u6($={}){return A1($).map((Q)=>{let Z=Q.transport.type!=="stdio",W=Q.oauth?.tokens?.access_token;return{serverName:Q.name,oauthSupported:Z,oauthConfigured:Z&&typeof W==="string"&&W.trim().length>0,lastError:Q.oauth?.lastError,lastAuthenticatedAt:Q.oauth?.lastAuthenticatedAt}}).sort((Q,Z)=>Q.serverName.localeCompare(Z.serverName))}async function B2($,J={}){let Q=A1(J);for(let Z of Q)await $.registerServer(Z);return Q}var c6,MH,e7,lO,pO,rO,iO,nO,aO,qH,sO,oO,tO,eO;var yQ=h$(()=>{c6=y.record(y.string(),y.string()),MH=y.record(y.string(),y.unknown()),e7=y.object({clientInformation:y.record(y.string(),y.unknown()).optional(),tokens:y.record(y.string(),y.unknown()).optional(),codeVerifier:y.string().optional(),discoveryState:y.record(y.string(),y.unknown()).optional(),redirectUrl:y.string().url().optional(),lastError:y.string().optional(),lastAuthenticatedAt:y.number().int().positive().optional()}).strip(),lO=y.object({type:y.literal("stdio"),command:y.string().min(1),args:y.array(y.string()).optional(),cwd:y.string().min(1).optional(),env:c6.optional()}),pO=y.object({type:y.literal("sse"),url:y.string().url(),headers:c6.optional()}),rO=y.object({type:y.literal("streamableHttp"),url:y.string().url(),headers:c6.optional()}),iO=y.discriminatedUnion("type",[lO,pO,rO]),nO=y.object({transport:iO,disabled:y.boolean().optional(),metadata:MH.optional(),oauth:e7.optional()}),aO=y.enum(["stdio","sse","http","streamableHttp"]).optional(),qH=y.object({type:y.enum(["stdio","sse","streamableHttp"]).optional(),transportType:aO,disabled:y.boolean().optional(),metadata:MH.optional(),oauth:e7.optional()});sO=qH.extend({command:y.string().min(1),args:y.array(y.string()).optional(),cwd:y.string().min(1).optional(),env:c6.optional()}).superRefine(($,J)=>{let Q=$.type??o7($.transportType);if(Q&&Q!=="stdio")J.addIssue({code:y.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})),oO=qH.extend({url:y.string().url(),headers:c6.optional()}).superRefine(($,J)=>{let Q=$.type??o7($.transportType)??"sse";if(Q!=="sse"&&Q!=="streamableHttp")J.addIssue({code:y.ZodIssueCode.custom,message:'Expected type "sse" or "streamableHttp" for URL-based MCP server',path:["type"]})}).transform(($)=>{if(($.type??o7($.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}}),tO=y.union([nO,sO,oO]),eO=y.object({mcpServers:y.record(y.string(),tO)}).passthrough()});import{existsSync as VN,mkdirSync as HN,readFileSync as BN,writeFileSync as AN}from"node:fs";import{resolve as KN}from"node:path";import{resolveSessionDataDir as GN}from"@cline/shared/storage";import{nanoid as FN}from"nanoid";import*as DN from"node-machine-id";function b0($){let J=$?.trim();if(J)return J;let Q=LN();if(Q)return Q;return zN()}function RN(){let $=DN;return $.machineIdSync??$.default?.machineIdSync}function LN(){try{let $=RN();if(!$)return;return $().trim()||void 0}catch{return}}function zN(){let $=GN(),J=KN($,UN);try{if(VN(J)){let Z=BN(J,"utf8").trim();if(Z.length>0)return Z}}catch{}let Q=`cl-${FN()}`;try{HN($,{recursive:!0}),AN(J,Q,"utf8")}catch{}return Q}var UN="machine-id";var m8=()=>{};class RJ{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($,J){if(!this.isEnabled())return;this.emitLog($,J,!1)}emitRequired($,J){this.emitLog($,J,!0)}recordCounter($,J,Q,Z,W=!1){if(!this.meter||!W&&!this.isEnabled())return;let j=this.counters.get($);if(!j)j=this.meter.createCounter($,Z?{description:Z}:void 0),this.counters.set($,j);j.add(J,this.flattenProperties(this.buildAttributes(Q)))}recordHistogram($,J,Q,Z,W=!1){if(!this.meter||!W&&!this.isEnabled())return;let j=this.histograms.get($);if(!j)j=this.meter.createHistogram($,Z?{description:Z}:void 0),this.histograms.set($,j);j.record(J,this.flattenProperties(this.buildAttributes(Q)))}recordGauge($,J,Q,Z,W=!1){if(!this.meter||!W&&!this.isEnabled())return;let j=this.buildAttributes(Q),X=JSON.stringify(j),f=this.gaugeValues.get($);if(J===null){if(f){if(f.delete(X),f.size===0)this.gaugeValues.delete($),this.gauges.delete($)}return}let Y=f;if(!Y)Y=new Map,this.gaugeValues.set($,Y);if(!this.gauges.has($)){let V=this.meter.createObservableGauge($,Z?{description:Z}:void 0);V.addCallback((H)=>{for(let B of this.snapshotGaugeSeries($))H.observe(B.value,this.flattenProperties(B.attributes))}),this.gauges.set($,V)}Y.set(X,{value:J,attributes:j})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}setDistinctId($){this.distinctId=$}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}async flush(){await Promise.all([this.meterProvider?.forceFlush?.(),this.loggerProvider?.forceFlush?.()])}async dispose(){await Promise.all([this.meterProvider?.shutdown?.(),this.loggerProvider?.shutdown?.()])}emitLog($,J,Q){if(!this.logger)return;let Z=this.flattenProperties(this.buildAttributes(J,Q));this.logger.emit({severityText:"INFO",body:$,attributes:Z})}buildAttributes($,J=!1){return{...this.commonProperties,...this.metadata,...$,...this.distinctId?{distinct_id:this.distinctId}:{},...J?{_required:!0}:{}}}snapshotGaugeSeries($){let J=this.gaugeValues.get($);if(!J)return[];return Array.from(J.values(),(Q)=>({value:Q.value,attributes:Q.attributes?{...Q.attributes}:void 0}))}flattenProperties($,J="",Q=new WeakSet,Z=0){if(!$)return{};let W={},j=100,X=10;for(let[f,Y]of Object.entries($)){if(f==="__proto__"||f==="constructor"||f==="prototype")continue;let V=J?`${J}.${f}`:f;if(Y===null||Y===void 0){W[V]=String(Y);continue}if(Array.isArray(Y)){let H=Y.length>j?Y.slice(0,j):Y;try{W[V]=JSON.stringify(H)}catch{W[V]="[UnserializableArray]"}if(Y.length>j)W[`${V}_truncated`]=!0,W[`${V}_original_length`]=Y.length;continue}if(typeof Y==="object"){if(Y instanceof Date){W[V]=Y.toISOString();continue}if(Y instanceof Error){W[V]=Y.message;continue}if(Q.has(Y)){W[V]="[Circular]";continue}if(Z>=X){W[V]="[MaxDepthExceeded]";continue}Q.add(Y),Object.assign(W,this.flattenProperties(Y,V,Q,Z+1));continue}if(Iw(Y)){W[V]=Y;continue}try{W[V]=JSON.stringify(Y)}catch{W[V]=String(Y)}}return W}}function Iw($){return typeof $==="string"||typeof $==="number"||typeof $==="boolean"}class LJ{name;logger;enabled;constructor($={}){this.name=$.name??"TelemetryLoggerSink",this.logger=$.logger,this.enabled=$.enabled??!0}emit($,J){if(!this.isEnabled())return;this.logger?.log("telemetry.event",{telemetrySink:this.name,event:$,properties:J})}emitRequired($,J){this.logger?.log("telemetry.required_event",{telemetrySink:this.name,severity:"warn",event:$,properties:J})}recordCounter($,J,Q,Z,W){if(!W&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"counter",name:$,value:J,attributes:Q,description:Z,required:W===!0})}recordHistogram($,J,Q,Z,W){if(!W&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"histogram",name:$,value:J,attributes:Q,description:Z,required:W===!0})}recordGauge($,J,Q,Z,W){if(!W&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"gauge",name:$,value:J,attributes:Q,description:Z,required:W===!0})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}async flush(){}async dispose(){}}class t8{adapters;metadata;distinctId;commonProperties;constructor($={}){if(this.adapters=[...$.adapters??[]],$.logger)this.adapters.push(new LJ({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 J=this.buildAttributes($.properties);for(let Q of this.adapters)Q.emit($.event,J)}captureRequired($,J){let Q=this.buildAttributes(J);for(let Z of this.adapters)Z.emitRequired($,Q)}recordCounter($,J,Q,Z,W=!1){let j=this.buildAttributes(Q);for(let X of this.adapters)X.recordCounter($,J,j,Z,W)}recordHistogram($,J,Q,Z,W=!1){let j=this.buildAttributes(Q);for(let X of this.adapters)X.recordHistogram($,J,j,Z,W)}recordGauge($,J,Q,Z,W=!1){let j=this.buildAttributes(Q);for(let X of this.adapters)X.recordGauge($,J,j,Z,W)}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 H3=()=>{};import{metrics as xw,trace as gw}from"@opentelemetry/api";import{logs as mw}from"@opentelemetry/api-logs";import{OTLPLogExporter as vw}from"@opentelemetry/exporter-logs-otlp-http";import{OTLPMetricExporter as cw}from"@opentelemetry/exporter-metrics-otlp-http";import{OTLPTraceExporter as uw}from"@opentelemetry/exporter-trace-otlp-http";import{resourceFromAttributes as dw}from"@opentelemetry/resources";import{BatchLogRecordProcessor as lw,ConsoleLogRecordExporter as pw,LoggerProvider as rw}from"@opentelemetry/sdk-logs";import{ConsoleMetricExporter as iw,MeterProvider as nw,PeriodicExportingMetricReader as iA}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as aw,ConsoleSpanExporter as sw,SimpleSpanProcessor as ow}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as tw}from"@opentelemetry/sdk-trace-node";import{ATTR_SERVICE_NAME as ew,ATTR_SERVICE_VERSION as $S}from"@opentelemetry/semantic-conventions";class nA{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($,J){this.resolveProperties(J)}recordCounter(){}recordHistogram(){}recordGauge(){}async flush(){}async dispose(){}resolveProperties($){return{...this.commonProperties,...$,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{}}}}class e8{meterProvider;loggerProvider;tracerProvider;options;constructor($={}){this.options=$;let J=dw({[ew]:$.serviceName??"cline",...$.serviceVersion?{[$S]:$.serviceVersion}:{}});if(this.meterProvider=this.createMeterProvider(J),this.loggerProvider=this.createLoggerProvider(J),this.tracerProvider=this.createTracerProvider(J),this.meterProvider)xw.setGlobalMeterProvider(this.meterProvider);if(this.loggerProvider)mw.setGlobalLoggerProvider(this.loggerProvider);if(this.tracerProvider)this.tracerProvider.register()}getTracer($="cline",J){return gw.getTracer($,J??this.options.serviceVersion)}createAdapter($){return new RJ({...$,meterProvider:this.meterProvider,loggerProvider:this.loggerProvider})}createTelemetryService($){let J=this.createAdapter({name:$.name,enabled:this.options.enabled,metadata:$.metadata});return new t8({...$,adapters:[J],distinctId:b0($.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 J=B3(this.options.metricsExporter);if(J.length===0)return null;let Q=Math.max(1000,this.options.metricExportIntervalMs??this.options.metricExportInterval??60000),Z=Math.min(30000,Math.floor(Q*0.8)),W=J.map((j)=>ZS(j,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json",interval:Q,timeout:Z})).filter((j)=>j!==null);if(W.length===0)return null;return new nw({resource:$,readers:W})}createTracerProvider($){let J=B3(this.options.tracesExporter);if(J.length===0)return null;let Q=this.options.otlpTracesEndpoint??this.options.otlpEndpoint,Z=this.options.otlpTracesHeaders??this.options.otlpHeaders,W=[];for(let j of J){let X=QS(j,{endpoint:Q,headers:Z,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(X)W.push(X)}if(W.length===0)return null;return new tw({resource:$,spanProcessors:W})}createLoggerProvider($){let J=B3(this.options.logsExporter);if(J.length===0)return null;let Q=J.map((Z)=>{let W=JS(Z,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(!W)return null;return new lw(W,{maxQueueSize:this.options.logMaxQueueSize??2048,maxExportBatchSize:this.options.logBatchSize??512,scheduledDelayMillis:this.options.logBatchTimeoutMs??this.options.logBatchTimeout??5000})}).filter((Z)=>Z!==null);if(Q.length===0)return null;return new rw({resource:$,processors:Q})}}function zJ($){let J=new e8($),Q=J.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:J,telemetry:Q}}function s1($){if(O5())return{telemetry:new nA($)};if($.enabled!==!0)return{telemetry:new t8({...$,distinctId:b0($.distinctId)})};return zJ($)}function $4($){let{telemetry:J,provider:Q}=s1($);return{telemetry:J,provider:Q,flush:async()=>{let j=Q;if(j&&typeof j.forceFlush==="function")try{await j.forceFlush()}catch{}},dispose:async()=>{await Promise.allSettled([J.dispose(),Q?.dispose()])}}}function B3($){if(!$)return[];return(Array.isArray($)?$:$.split(",")).map((Q)=>Q.trim()).filter((Q)=>Q==="console"||Q==="otlp")}function JS($,J){if($==="console")return new pw;if(!J.endpoint)return null;let Q=A3(J.endpoint,"/v1/logs");return new vw({url:Q,headers:J.headers})}function QS($,J){if($==="console")return new ow(new sw);if(!J.endpoint)return null;let Q=A3(J.endpoint,"/v1/traces");return new aw(new uw({url:Q,headers:J.headers}))}function ZS($,J){if($==="console")return new iA({exporter:new iw,exportIntervalMillis:J.interval,exportTimeoutMillis:J.timeout});if(!J.endpoint)return null;let Q=A3(J.endpoint,"/v1/metrics");return new iA({exporter:new cw({url:Q,headers:J.headers}),exportIntervalMillis:J.interval,exportTimeoutMillis:J.timeout})}function A3($,J){let Q=new URL($),Z=Q.pathname.endsWith("/")?Q.pathname.slice(0,-1):Q.pathname;return Q.pathname=Z.endsWith(J)?Z:`${Z}${J}`,Q.toString()}var G9=h$(()=>{W1();m8();H3()});var JG={};w(JG,{resolveCoreDistinctId:()=>b0,createOpenTelemetryTelemetryService:()=>zJ,createConfiguredTelemetryService:()=>s1,createConfiguredTelemetryHandle:()=>$4,OpenTelemetryProvider:()=>e8,OpenTelemetryAdapter:()=>RJ});var M9=h$(()=>{m8();G9()});import{AgentRuntimeAbortError as eb}from"@cline/agents";import{initVcr as $h,resolveClineBuildEnv as Jh}from"@cline/shared";import{normalizeProviderId as sb}from"@cline/llms";var WF={};w(WF,{LocalRuntimeHost:()=>z1});import{readdirSync as cb}from"node:fs";import{homedir as ub}from"node:os";import{isAbsolute as db,join as mj,resolve as vj}from"node:path";import{captureSdkError as h2,createSessionId as lb,isLikelyAuthError as pb,normalizeUserInput as rb}from"@cline/shared";import{setHomeDirIfUnset as ib}from"@cline/shared/storage";var PX={};w(PX,{saveProviderOAuthCredentials:()=>x$,resolveProviderApiKeyFromSettings:()=>DZ,loginAndSaveProviderOAuthCredentials:()=>z4,isOAuthProvider:()=>I$,getProviderOAuthCredentialsFromSettings:()=>_4,getProviderAuthStorageId:()=>FZ,getProviderAuthHandler:()=>W0,getPersistedProviderApiKey:()=>l2,formatProviderOAuthApiKey:()=>UZ});import{getClineEnvironmentConfig as MX}from"@cline/shared";O0();var fX={};w(fX,{startClineDeviceAuth:()=>HZ,refreshClineToken:()=>Q5,loginClineOAuth:()=>K4,getValidClineCredentials:()=>G4,completeClineDeviceAuth:()=>BZ});import{getClineEnvironmentConfig as jZ}from"@cline/shared";var tj={};w(tj,{startLocalOAuthServer:()=>J1});function MF(){let $;return{promise:new Promise((Q)=>{$=Q}),resolve:$}}async function J1($){let J=await import("node:http"),Q=$.host??"127.0.0.1",Z=$.timeoutMs??300000,W=$.successHtml??qF,j=MF(),X=!1,f=null,Y=null,V=null,H=(K)=>{if(X)return;X=!0,j.resolve(K)},B=()=>{if(f)clearTimeout(f),f=null;let K=V;if(V=null,Y)Y.close(),Y=null;if(K!==null&&$.onClose)Promise.resolve($.onClose({host:Q,port:K})).catch(()=>{})},A=async()=>{return f=setTimeout(()=>{B(),H(null)},Z),j.promise};for(let K of $.ports){let G=J.createServer((D,U)=>{try{let F=new URL(D.url||"",`http://${Q}:${K}`);if(F.pathname!==$.callbackPath){U.statusCode=404,U.end("Not found");return}let O={url:F,code:F.searchParams.get("code")??void 0,state:F.searchParams.get("state")??void 0,provider:F.searchParams.get("provider")??void 0,error:F.searchParams.get("error")??void 0};if(O.error){U.statusCode=400,U.end(`Authentication failed: ${O.error}`),B(),H(O);return}if(!O.code){U.statusCode=400,U.end("Missing authorization code");return}if($.expectedState&&O.state!==$.expectedState){U.statusCode=400,U.end("State mismatch");return}U.statusCode=200,U.setHeader("Content-Type","text/html; charset=utf-8"),U.end(W),B(),H(O)}catch{U.statusCode=500,U.end("Internal error")}}),R=await new Promise((D)=>{let U=(F)=>{G.off("error",U),D({bound:!1,error:F})};G.once("error",U),G.listen(K,Q,()=>{G.off("error",U),Y=G,D({bound:!0})})});if(R.error){if(R.error.code==="EADDRINUSE")continue;throw B(),R.error}if(R.bound){V=K;let D=`http://${Q}:${K}${$.callbackPath}`;if($.onListening)await Promise.resolve($.onListening({host:Q,port:K,callbackUrl:D})).catch(()=>{});return{callbackUrl:D,waitForCallback:A,cancelWait:()=>{B(),H(null)},close:()=>{B(),H(null)}}}}return{callbackUrl:"",waitForCallback:async()=>null,cancelWait:()=>{},close:()=>{}}}var qF=`<!DOCTYPE html>
|
|
6
6
|
<html lang="en">
|
|
7
7
|
<head>
|
|
8
8
|
<meta charset="utf-8">
|
|
@@ -201,7 +201,7 @@ ${Q}`,platform:J.clinePlatform,metadata:J.workspaceMetadata})}function BY($,J){l
|
|
|
201
201
|
`).filter(Boolean);await Promise.allSettled(W.map((j)=>J2($,["update-ref","-d",j])))}catch{}}async function LV($,J,Q){if(!$||Q.length===0)return;await Promise.allSettled(Q.map((Z)=>J2($,["update-ref",`refs/cline/checkpoints/${J}/${Z.runCount}`,Z.ref])))}function dz($,J){let Q=$.findIndex((Z)=>Z.runCount===J.runCount);if(Q<0)return[...$,J];return $.map((Z,W)=>W===Q?J:Z)}function zV($){let J=$.initialRunCount??0,Q,Z=async()=>{if(Q!==void 0)return Q;try{Q=(await J2($.cwd,["rev-parse","--is-inside-work-tree"])).stdout==="true"}catch{Q=!1}return Q},W=async()=>{if($.createCheckpoint)return await $.createCheckpoint({cwd:$.cwd,sessionId:$.sessionId,runCount:J});if(!await Z())return;let j=async(V)=>{try{let B=(await J2($.cwd,["rev-parse","HEAD"])).stdout.trim();if(!B)return;return{ref:B,createdAt:Date.now(),runCount:J,kind:"commit"}}catch(H){q7($.logger,`${V}: ${H instanceof Error?H.message:String(H)}`);return}},X=`cline checkpoint session=${$.sessionId} run=${J}`,f="";try{f=(await J2($.cwd,["stash","create",X])).stdout.trim()}catch(V){return q7($.logger,`Checkpoint snapshot failed: ${V instanceof Error?V.message:String(V)}`),j("Checkpoint HEAD fallback failed")}if(!f)return j("Checkpoint HEAD fallback failed");let Y=`refs/cline/checkpoints/${$.sessionId}/${J}`;try{await J2($.cwd,["update-ref",Y,f])}catch(V){q7($.logger,`Checkpoint store failed: ${V instanceof Error?V.message:String(V)}`);return}return{ref:f,createdAt:Date.now(),runCount:J,kind:"stash"}};return{beforeRun:async({snapshot:j})=>{if(j.parentAgentId!=null)return;J+=1;return},beforeModel:async({snapshot:j})=>{if(j.parentAgentId!=null||j.iteration!==1||J<1)return;let X=await W();if(!X)return;let f=await $.readSessionMetadata(),Y=uz(f);if(Y?.latest.ref===X.ref)return;let V=dz(Y?.history??[],X);await $.writeSessionMetadata({...f??{},checkpoint:{latest:X,history:V}});return}}}import{spawn as tz}from"node:child_process";import{appendFileSync as ez,readFileSync as $_}from"node:fs";import{join as J_}from"node:path";import{augmentNodeCommandForDebug as TV,withResolvedClineBuildEnv as S7}from"@cline/shared";import{ensureHookLogDir as _V}from"@cline/shared/storage";function G8($,J){if(!J)return;return{name:$,manifest:{capabilities:["hooks"]},hooks:J}}import{existsSync as lz,readdirSync as pz}from"node:fs";import{basename as rz,extname as iz,join as nz}from"node:path";import{HOOKS_CONFIG_DIRECTORY_NAME as p5,resolveHooksConfigSearchPaths as az}from"@cline/shared/storage";function K6($){return az($)}var F8;((H)=>{H.TaskStart="TaskStart";H.TaskResume="TaskResume";H.TaskCancel="TaskCancel";H.TaskComplete="TaskComplete";H.TaskError="TaskError";H.PreToolUse="PreToolUse";H.PostToolUse="PostToolUse";H.UserPromptSubmit="UserPromptSubmit";H.PreCompact="PreCompact";H.SessionShutdown="SessionShutdown"})(F8||={});var G6={["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"},sz=new Map(Object.values(F8).map(($)=>[$.toLowerCase(),$])),oz=new Set(["",".sh",".bash",".zsh",".js",".mjs",".cjs",".ts",".mts",".cts",".py",".ps1"]);function F6($){let J=iz($).toLowerCase();if(!oz.has(J))return;let Q=rz($,J).trim().toLowerCase();return sz.get(Q)}function D$($){let J=[],Q=new Set,Z=K6($).filter((W)=>lz(W));for(let W of Z)try{for(let j of pz(W,{withFileTypes:!0})){if(!j.isFile())continue;let X=F6(j.name);if(!X)continue;let f=nz(W,j.name);if(Q.has(f))continue;Q.add(f),J.push({fileName:X,hookEventName:G6[X],path:f})}}catch{}return J.sort((W,j)=>W.path.localeCompare(j.path))}function i5($){if(!$||typeof $!=="object")return{};let J={};for(let[Q,Z]of Object.entries($))J[Q]=typeof Z==="string"?Z:JSON.stringify(Z);return J}function r5($,J,Q){let Z=Q instanceof Error?`: ${Q.message}`:"",W=`${J}${Z}`;if($){try{$.log(W,{severity:"warn",...Q!==void 0?{error:Q}:{}})}catch{}return}console.warn(W)}function Q_($,J){if(!J)return $;if(!$)return{...J};let Q=[$.context,J.context].filter((W)=>typeof W==="string"&&W.length>0).join(`
|
|
202
202
|
`),Z=[...$.appendMessages??[],...J.appendMessages??[]];return{cancel:$.cancel===!0||J.cancel===!0?!0:void 0,review:$.review===!0||J.review===!0?!0:void 0,context:Q||void 0,overrideInput:J.overrideInput!==void 0?J.overrideInput:$.overrideInput,systemPrompt:J.systemPrompt!==void 0?J.systemPrompt:$.systemPrompt,appendMessages:Z.length>0?Z:void 0}}function Z_($){if(!$||typeof $!=="object")return;let J=$,Q=typeof J.context==="string"?J.context:typeof J.contextModification==="string"?J.contextModification:typeof J.errorMessage==="string"?J.errorMessage:void 0;return{cancel:typeof J.cancel==="boolean"?J.cancel:void 0,review:typeof J.review==="boolean"?J.review:void 0,context:Q,overrideInput:Object.hasOwn(J,"overrideInput")?J.overrideInput:void 0}}function N7($){let J=String($??"").toLowerCase();return J.includes("cancel")||J.includes("abort")||J.includes("interrupt")}function L0($,J){let Q=process.env.CLINE_USER_ID?.trim()||process.env.USER?.trim()||"unknown",Z={rootSessionId:J.rootSessionId||$.conversationId};return{clineVersion:process.env.CLINE_VERSION?.trim()||"",timestamp:new Date().toISOString(),taskId:$.conversationId,sessionContext:Z,workspaceRoots:J.workspacePath?[J.workspacePath]:[],workspaceInfo:J.workspaceInfo,userId:Q,agent_id:$.agentId,parent_agent_id:$.parentAgentId}}function W_($){let J=$.trim();if(!J)return{};let Z=J.split(`
|
|
203
203
|
`).map((j)=>j.trim()).filter(Boolean).filter((j)=>j.startsWith("HOOK_CONTROL\t")).map((j)=>j.slice(13)),W=Z.length>0?Z[Z.length-1]:J;try{return{parsedJson:JSON.parse(W)}}catch(j){return{parseError:j instanceof Error?j.message:"Failed to parse hook stdout JSON"}}}async function j_($,J){let Q=$.stdin;if(!Q)throw Error("hook command failed to create stdin");await new Promise((Z,W)=>{let j=!1,X=()=>{Q.off("error",Y),Q.off("finish",V),$.off("close",H)},f=(B)=>{if(j)return;if(j=!0,X(),B){let A=B.code;if(A==="EPIPE"||A==="ERR_STREAM_DESTROYED"){Z();return}W(B);return}Z()},Y=(B)=>f(B),V=()=>f(),H=()=>f();Q.on("error",Y),Q.once("finish",V),$.once("close",H);try{Q.end(J)}catch(B){f(B)}})}async function MV($,J){if(J.command.length===0)throw Error("runHookCommand requires non-empty command");try{return await OV($,J)}catch(Q){let Z=Y_(J.command,process.platform,Q);if(!Z)throw Q;return await OV($,{...J,command:Z})}}async function OV($,J){let Q=TV(J.command,{env:J.env,debugRole:"hook"}),Z=tz(Q[0],Q.slice(1),{cwd:J.cwd,env:S7(J.env),stdio:J.detached?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:J.detached,windowsHide:!0}),W=new Promise((A)=>{Z.once("spawn",()=>A())}),j=new Promise((A,K)=>{Z.once("error",(G)=>K(G))}),X=JSON.stringify($);if(await Promise.race([W,j]),await j_(Z,X),J.detached){Z.unref();return}if(!Z.stdout||!Z.stderr)throw Error("hook command failed to create stdout/stderr");let f="",Y="",V=!1,H;Z.stdout.on("data",(A)=>{f+=A.toString()}),Z.stderr.on("data",(A)=>{Y+=A.toString()});let B=new Promise((A)=>{if((J.timeoutMs??0)>0)H=setTimeout(()=>{V=!0,Z.kill("SIGKILL")},J.timeoutMs);Z.once("close",(K)=>{if(H)clearTimeout(H);let{parsedJson:G,parseError:R}=W_(f);A({exitCode:K,stdout:f,stderr:Y,parsedJson:G,parseError:R,timedOut:V})})});return await Promise.race([B,j])}function X_($){try{let Q=$_($,"utf8").split(/\r?\n/,1)[0]?.trim();if(!Q?.startsWith("#!"))return;let Z=Q.slice(2).trim();if(!Z)return;let W=Z.split(/\s+/).filter(Boolean);return W.length>0?W:void 0}catch{return}}function f_($){return!!($&&typeof $==="object"&&("code"in $)&&$.code==="ENOENT")}function Y_($,J=process.platform,Q){if(J!=="win32"||!f_(Q))return;if($[0]!=="py"||$[1]!=="-3")return;return["python",...$.slice(2)]}function qV($){if($.length===0)return;let[J,...Q]=$,Z=J.replace(/\\/g,"/").toLowerCase(),W=Z.split("/").at(-1)??Z;if(W==="env")return qV(Q);if(W==="bash"||W==="sh"||W==="zsh")return[W,...Q];if(W==="python3"||W==="python")return process.platform==="win32"?["py","-3",...Q]:[W,...Q];return $}function V_($){let J=X_($);if(J&&J.length>0)return[...qV(J)??J,$];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 TV(["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 H_($){let J={};for(let Q of D$($)){if(!Q.hookEventName)continue;let Z=Q.hookEventName,W=J[Z]??[];W.push(V_(Q.path)),J[Z]=W}return J}async function B_($){let J;for(let Q of $.commands){let Z=Q.join(" ");try{let W=await MV($.payload,{command:Q,cwd:$.cwd,env:S7(process.env),detached:!1,timeoutMs:$.timeoutMs});if(W?.timedOut){r5($.logger,`hook command timed out: ${Z}`);continue}if(W?.parseError){r5($.logger,`hook command returned invalid JSON control output: ${Z} (${W.parseError})`);continue}J=Q_(J,Z_(W?.parsedJson))}catch(W){r5($.logger,`hook command failed: ${Z}`,W)}}return J}function Q2($){for(let J of $.commands){let Q=J.join(" ");MV($.payload,{command:J,cwd:$.cwd,env:S7(process.env),detached:!0}).catch((Z)=>{r5($.logger,`hook command failed: ${Q}`,Z)})}}function U$($){return{agentId:$.agentId,conversationId:$.conversationId??$.runId??$.agentId,parentAgentId:$.parentAgentId??null}}function w7($,J){return{...U$($.snapshot),userMessage:J}}function PV($){return{...U$($.snapshot),iteration:$.snapshot.iteration,call:{id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:$.input}}}function NV($){return{...U$($.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 wV($){return $.filter((J)=>J.type==="text"&&typeof J.text==="string").map((J)=>J.text).join("")}function A_($){if(!$)return;let J={};if($.cancel===!0)J.stop=!0;if($.overrideInput!==void 0)J.input=$.overrideInput;return Object.keys(J).length>0?J:void 0}function D8($){let J={cwd:$.workspacePath,workspacePath:$.workspacePath,rootSessionId:$.rootSessionId,workspaceInfo:$.workspaceInfo},Q=(Z)=>{let W=`${JSON.stringify({ts:new Date().toISOString(),...Z})}
|
|
204
|
-
`,X=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??J_(_V(),"hooks.jsonl");_V(X),ez(X,W,"utf8")};return{beforeRun:async(Z)=>{let W=w7(Z,"");Q({...L0(W,J),hookName:"agent_start",taskStart:{taskMetadata:{}}});return},beforeTool:async(Z)=>{let W=PV(Z);Q({...L0(W,J),hookName:"tool_call",iteration:W.iteration,tool_call:{id:W.call.id,name:W.call.name,input:W.call.input},preToolUse:{toolName:W.call.name,parameters:i5(W.call.input)}});return},afterTool:async(Z)=>{let W=NV(Z);Q({...L0(W,J),hookName:"tool_result",iteration:W.iteration,tool_result:W.record,postToolUse:{toolName:W.record.name,parameters:i5(W.record.input),result:typeof W.record.output==="string"?W.record.output:JSON.stringify(W.record.output),success:!W.record.error,executionTimeMs:W.record.durationMs}});return},afterRun:async({snapshot:Z,result:W})=>{let j=U$(Z);if(W.status==="completed"){Q({...L0(j,J),hookName:"agent_end",iteration:W.iterations,turn:{outputText:W.outputText,status:W.status},taskComplete:{taskMetadata:{}}});return}if(W.status==="aborted"||N7(W.error?.message)){Q({...L0(j,J),hookName:"agent_abort",reason:W.error?.message,taskCancel:{taskMetadata:{}}});return}if(W.error)Q({...L0(j,J),hookName:"agent_error",iteration:W.iterations,error:{name:W.error.name,message:W.error.message,stack:W.error.stack}})},onEvent:async(Z)=>{if(Z.type!=="message-added"||Z.message.role!=="user")return;let W=w7({snapshot:Z.snapshot},wV(Z.message.content));Q({...L0(W,J),hookName:"prompt_submit",userPromptSubmit:{prompt:W.userMessage,attachments:[]}})}}}function D6($){let J=H_($.workspacePath);if(!Object.values(J).some((B)=>B.length>0))return;let Z=async(B,A)=>{let K=J[A]??[];if(K.length===0)return;Q2({commands:K,cwd:$.cwd,logger:$.logger,payload:A==="agent_resume"?{...L0(B,$),hookName:A,taskResume:{taskMetadata:{},previousState:{}}}:{...L0(B,$),hookName:A,taskStart:{taskMetadata:{}}}})},W=async(B)=>{let A=J.prompt_submit??[];if(A.length>0)Q2({commands:A,cwd:$.cwd,logger:$.logger,payload:{...L0(B,$),hookName:"prompt_submit",userPromptSubmit:{prompt:B.userMessage,attachments:[]}}})},j=async(B)=>{let A=J.tool_call??[];if(A.length===0)return;return B_({commands:A,cwd:$.cwd,logger:$.logger,timeoutMs:$.toolCallTimeoutMs??120000,payload:{...L0(B,$),hookName:"tool_call",iteration:B.iteration,tool_call:{id:B.call.id,name:B.call.name,input:B.call.input},preToolUse:{toolName:B.call.name,parameters:i5(B.call.input)}}})},X=async(B)=>{let A=J.tool_result??[];if(A.length===0)return;Q2({commands:A,cwd:$.cwd,logger:$.logger,payload:{...L0(B,$),hookName:"tool_result",iteration:B.iteration,tool_result:B.record,postToolUse:{toolName:B.record.name,parameters:i5(B.record.input),result:typeof B.record.output==="string"?B.record.output:JSON.stringify(B.record.output),success:!B.record.error,executionTimeMs:B.record.durationMs}}})},f=async(B)=>{let A=J.agent_end??[];if(A.length===0)return;Q2({commands:A,cwd:$.cwd,logger:$.logger,payload:{...L0(B,$),hookName:"agent_end",iteration:B.iteration,turn:B.turn,taskComplete:{taskMetadata:{}}}})},Y=async(B)=>{let A=J.agent_error??[];if(A.length===0)return;Q2({commands:A,cwd:$.cwd,logger:$.logger,payload:{...L0(B,$),hookName:"agent_error",iteration:B.iteration,error:{name:B.error.name,message:B.error.message,stack:B.error.stack}}})},V=async(B)=>{if(N7(B.reason)){let K=J.agent_abort??[];if(K.length>0)Q2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...L0(B,$),hookName:"agent_abort",reason:B.reason,taskCancel:{taskMetadata:{}}}})}let A=J.session_shutdown??[];if(A.length===0)return;Q2({commands:A,cwd:$.cwd,logger:$.logger,payload:{...L0(B,$),hookName:"session_shutdown",reason:B.reason}})},H={};if((J.agent_start?.length??0)>0||(J.agent_resume?.length??0)>0||(J.prompt_submit?.length??0)>0){if((J.agent_start?.length??0)>0||(J.agent_resume?.length??0)>0)H.beforeRun=async(B)=>{let A=process.env.CLINE_HOOK_AGENT_RESUME==="1"?"agent_resume":"agent_start";await Z(U$(B.snapshot),A);return};if((J.prompt_submit?.length??0)>0)H.onEvent=async(B)=>{if(B.type!=="message-added"||B.message.role!=="user")return;await W(w7({snapshot:B.snapshot},wV(B.message.content)))}}if((J.tool_call?.length??0)>0)H.beforeTool=async(B)=>{let A=await j(PV(B));return A_(A)};if((J.tool_result?.length??0)>0)H.afterTool=async(B)=>{await X(NV(B));return};if((J.agent_end?.length??0)>0)H.afterRun=async({snapshot:B,result:A})=>{if(A.status!=="completed")return;await f({...U$(B),iteration:A.iterations,turn:{outputText:A.outputText,status:A.status}})};if((J.agent_error?.length??0)>0||(J.agent_abort?.length??0)>0||(J.session_shutdown?.length??0)>0){let B=H.afterRun;H.afterRun=async(A)=>{await B?.(A);let{snapshot:K,result:G}=A;if(G.status==="aborted"||N7(G.error?.message)){await V({...U$(K),reason:G.error?.message});return}if(G.error)await Y({...U$(K),iteration:G.iterations,error:G.error})}}return H}function U8($){return G8("core.hook_config_files",D6($))}function Z2($,J){let Q=$.map((Z)=>Z[J]).filter((Z)=>typeof Z==="function");if(Q.length===0)return;return async(Z)=>{let W;for(let j of Q){let X=await j(Z);if(!X||typeof X!=="object")continue;let f=X;W={...W??{},...f,stop:W?.stop===!0||f.stop===!0?!0:f.stop,options:W?.options||f.options?{...W?.options??{},...f.options??{}}:void 0}}return W}}function W2($){let J=$.filter((Q)=>Q!==void 0);if(J.length===0)return;return{beforeRun:Z2(J,"beforeRun"),afterRun:Z2(J,"afterRun"),beforeModel:Z2(J,"beforeModel"),afterModel:Z2(J,"afterModel"),beforeTool:Z2(J,"beforeTool"),afterTool:Z2(J,"afterTool"),onEvent:Z2(J,"onEvent")}}var SV={};w(SV,{normalizeRuntimeCapabilities:()=>z0});function z0(...$){let J,Q;for(let W of $){if(!W)continue;if(W.toolExecutors)J={...J??{},...W.toolExecutors};if(W.requestToolApproval)Q=W.requestToolApproval}let Z=J&&Object.keys(J).length>0;if(!Z&&!Q)return;return{...Z?{toolExecutors:J}:{},...Q?{requestToolApproval:Q}:{}}}var gV={};w(gV,{toProviderConfig:()=>d0,emptyStoredProviderSettings:()=>z$,StoredProviderSettingsSchema:()=>_8,StoredProviderSettingsEntrySchema:()=>D9,ProviderSettingsSchemaTyped:()=>z8});import{z as L$}from"zod";var xV={};w(xV,{toProviderConfig:()=>d0,safeParseSettings:()=>F9,safeCreateProviderConfig:()=>m7,parseSettings:()=>G9,normalizeProviderId:()=>L8,isBuiltInProviderId:()=>x7,createProviderConfig:()=>g7,SapSettingsSchema:()=>B9,ReasoningSettingsSchema:()=>f9,ProviderSettingsSchema:()=>R$,ProviderProtocolSchema:()=>W9,ProviderIdSchema:()=>_6,ProviderClientSchema:()=>j9,OcaSettingsSchema:()=>A9,ModelCatalogSettingsSchema:()=>K9,GcpSettingsSchema:()=>V9,BUILT_IN_PROVIDER_IDS:()=>I7,BUILT_IN_PROVIDER:()=>z6,AzureSettingsSchema:()=>H9,AwsSettingsSchema:()=>Y9,AuthSettingsSchema:()=>X9});import*as u0 from"@cline/llms";import{z as N}from"zod";var IV={};w(IV,{resolveProviderConfig:()=>L6,getProviderConfig:()=>Z9,getLiveModelsCatalog:()=>R8,clearPublicModelsCatalogCache:()=>b_,clearPrivateModelsCatalogCache:()=>k7,clearLiveModelsCatalogCache:()=>h7,OPENAI_COMPATIBLE_PROVIDERS:()=>R6,DEFAULT_MODELS_CATALOG_URL:()=>e5});import*as a from"@cline/llms";function C7($){if(!Array.isArray($))return[];return $.map((J)=>{if(typeof J==="string")return J.trim();if(J&&typeof J==="object"){let Q=J;for(let Z of[Q.id,Q.name,Q.model])if(typeof Z==="string"&&Z.trim())return Z.trim()}return""}).filter((J)=>J.length>0)}function K_($,J){let Q=C7($);if(Q.length>0)return Q;if(!$||typeof $!=="object")return[];let Z=$,W=C7(Z.data??Z.models);if(W.length>0)return W;if(Z.models&&typeof Z.models==="object"&&!Array.isArray(Z.models)){let X=Object.keys(Z.models).filter((f)=>f.trim().length>0);if(X.length>0)return X}let j=Z.providers?.[J];if(j&&typeof j==="object"){let f=C7(j.models??j);if(f.length>0)return f}return[]}async function n5($,J){let Q=await fetch($,{method:"GET"});if(!Q.ok)throw Error(`failed to fetch models from ${$}: HTTP ${Q.status}`);return K_(await Q.json(),J)}function CV($){return $.replace(/\/+$/,"")}function a5($,J,Q){let Z=Q?.trim();if(!Z)return;let W=$?.trim();if(!W||!J?.trim())return Z;try{let j=new URL(Z),X=new URL(J),f=new URL(W);if(j.origin!==X.origin)return Z;let Y=CV(X.pathname),V=CV(f.pathname);if(Y&&j.pathname.startsWith(`${Y}/`)){let H=j.pathname.slice(Y.length);f.pathname=`${V}${H}`}else f.pathname=j.pathname;return f.search=j.search,f.hash=j.hash,f.toString()}catch{return Z}}function G_($){return Object.fromEntries(Object.entries($).map(([J,Q])=>[J,{...Q}]))}function F_($){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 D_=Object.values(a.MODEL_COLLECTIONS_BY_PROVIDER_ID).map(($)=>({id:$.provider.id,baseUrl:$.provider.baseUrl??"",modelsSourceUrl:$.provider.modelsSourceUrl,modelId:$.provider.defaultModelId,knownModels:G_($.models),capabilities:$.provider.capabilities?[...$.provider.capabilities]:void 0,env:$.provider.env?[...$.provider.env]:void 0,client:$.provider.client,protocol:$.provider.protocol})),EV=Object.fromEntries(D_.map(($)=>[$.id,$]));function U_($){return EV[$]}function R_(){return Object.fromEntries(Object.entries(EV).filter(([,$])=>F_($)))}function bV($=[]){let J=$.flatMap((Q)=>{switch(Q){case"reasoning":case"prompt-cache":case"tools":case"oauth":return[Q];default:return[]}});return J.length>0?J:void 0}var e5="https://models.dev/api.json",L_=600000,hV=300000,z_=5000,t5=new Map,U6=new Map,y7=new Map,s5=new Map;async function __(){return a.getGeneratedProviderModels()}async function O_($,J={},Q={},Z={},W={},j={}){let X=await __(),f=a.resolveProviderModelCatalogKeys($),Y=Object.assign({},...f.map((A)=>X[A]??{})),V=Boolean(a.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl),H=Object.keys(W).length>0;if(V&&H)return a.sortModelsByReleaseDate({...W,...j});if($==="openai-codex")return a.sortModelsByReleaseDate({...J,...a.filterOpenAICodexModels(Q),...W,...j});let B=a.sortModelsByReleaseDate({...Y,...J,...Q,...Z,...W});if($==="cline")return a.sortModelsByReleaseDate({...a.preferCanonicalModelIds(B,a.VERCEL_OPENROUTER_MODEL_ID_ALIAS_RULES),...j});return a.sortModelsByReleaseDate({...B,...j})}function T_($,J){let Q=a.resolveProviderModelCatalogKeys($);return Object.assign({},...Q.map((Z)=>J[Z]??{}))}function $9($){let J=$?.trim();return J&&J.length>0?J:""}function b7($){let J=$.apiKey?.trim()||$.accessToken?.trim();return J&&J.length>0?J:void 0}function M_($){let J=2166136261;for(let Q=0;Q<$.length;Q+=1)J^=$.charCodeAt(Q),J+=(J<<1)+(J<<4)+(J<<7)+(J<<8)+(J<<24);return(J>>>0).toString(16)}function q_($,J){return`${$}:${$9(J.baseUrl)}:${M_(b7(J)??"")}`}async function J9($,J,Q=z_){let Z=new AbortController,W=setTimeout(()=>Z.abort(),Q);try{return await fetch($,{...J,signal:Z.signal})}finally{clearTimeout(W)}}function j2($,J,Q){if(Q&&!$.includes(J))$.push(J)}function Q9($,J){let Q=["streaming","tools"];return j2(Q,"images",Boolean(J.supportsImages)),j2(Q,"prompt-cache",Boolean(J.supportsPromptCache)),j2(Q,"reasoning",Boolean(J.supportsReasoning)),{id:$,name:J.name??$,contextWindow:J.contextWindow,maxInputTokens:J.maxInputTokens,maxTokens:J.maxTokens,capabilities:Q,releaseDate:J.releaseDate,status:"active"}}async function P_($,J){let Q=await J9("https://inference.baseten.co/v1/models",{method:"GET",headers:{Authorization:`Bearer ${J}`,"Content-Type":"application/json"}});if(!Q.ok)throw Error(`Baseten model refresh failed: HTTP ${Q.status}`);let W=(await Q.json())?.data??[],j={};for(let X of W){let f=X.id?.trim();if(!f)continue;if(f.includes("whisper")||f.includes("tts")||f.includes("embedding"))continue;let Y=X.supported_features??[];j[f]=Q9(f,{name:f,contextWindow:X.context_length,maxInputTokens:X.context_length,maxTokens:X.max_completion_tokens,supportsReasoning:Y.includes("reasoning")||Y.includes("reasoning_effort"),supportsImages:!1})}return j}function yV($){if(typeof $==="number")return Number.isFinite($)?$:void 0;if(typeof $==="string"){let J=Number($);return Number.isFinite(J)?J:void 0}return}async function N_($,J){let Q=await J9("https://api.hicap.ai/v2/openai/models",{method:"GET",headers:{"api-key":J}});if(!Q.ok)throw Error(`Hicap model refresh failed: HTTP ${Q.status}`);let W=(await Q.json())?.data??[],j={};for(let X of W){let f=X.id?.trim();if(!f)continue;j[f]=Q9(f,{name:f,maxInputTokens:128000,supportsImages:!0,supportsPromptCache:!0})}return j}async function w_($,J){let Z=`${($9($.baseUrl)||"https://inference.poolside.ai/v1").replace(/\/+$/,"")}/models`,W=await J9(Z,{method:"GET",headers:{Authorization:`Bearer ${J}`,accept:"application/json"}});if(!W.ok)throw Error(`Poolside model refresh failed: HTTP ${W.status}`);let X=(await W.json())?.data??[],f={};for(let Y of X){let V=Y.id?.trim();if(!V)continue;let H=Y.supported_features??[],B=Y.supported_sampling_parameters??[],A=Y.input_modalities??[],K=["streaming"];j2(K,"tools",H.includes("tools")),j2(K,"reasoning",H.includes("reasoning")),j2(K,"temperature",B.includes("temperature")),j2(K,"images",A.includes("image"));let G={input:yV(Y.pricing?.prompt),output:yV(Y.pricing?.completion)};f[V]={id:V,name:Y.name??V,description:Y.description,contextWindow:Y.context_length,maxInputTokens:Y.context_length,maxTokens:Y.max_completion_tokens,capabilities:K,pricing:G.input!==void 0||G.output!==void 0?G:void 0,status:"active"}}return f}function S_($){let J=$9($);if(!J)return"http://localhost:4000";return J.endsWith("/v1")?J.slice(0,-3):J}async function C_($,J){let Z=`${S_($.baseUrl)}/v1/model/info`,W=async(V)=>J9(Z,{method:"GET",headers:{accept:"application/json",...V}}),j=await W({"x-litellm-api-key":J});if(!j.ok)j=await W({Authorization:`Bearer ${J}`});if(!j.ok)throw Error(`LiteLLM model refresh failed: HTTP ${j.status}`);let f=(await j.json())?.data??[],Y={};for(let V of f){let H=V.model_name?.trim(),A=V.litellm_params?.model?.trim()||H;if(!A)continue;let K=V.model_info,G=Q9(A,{name:H??A,maxTokens:K?.max_output_tokens??K?.max_tokens,maxInputTokens:K?.max_input_tokens??K?.max_tokens,supportsImages:K?.supports_vision,supportsPromptCache:K?.supports_prompt_caching,supportsReasoning:K?.supports_reasoning});if(Y[A]=G,H)Y[H]={...G,id:H,name:H}}return Y}var kV={baseten:P_,hicap:N_,litellm:C_,poolside:w_},E7=new Map,o5=new Map;function y_($,J){return`${$}:${$9(J.baseUrl)}`}async function E_($,J,Q){let Z=a.MODEL_COLLECTIONS_BY_PROVIDER_ID[$],W=a5(Q.baseUrl,Z?.provider.baseUrl,Z?.provider.modelsSourceUrl);if(!W)return{};let j=J?.cacheTtlMs??hV,X=y_($,Q),f=Date.now(),Y=E7.get(X);if(Y&&Y.expiresAt>f)return Y.data;let V=o5.get(X);if(V)return V;let H=n5(W,$).then((B)=>{let A=Object.fromEntries(B.map((K)=>[K,Q9(K,{name:K})]));return E7.set(X,{data:A,expiresAt:f+j}),A}).finally(()=>{o5.delete(X)});return o5.set(X,H),H}function b_(){E7.clear(),o5.clear()}async function h_($,J){let Q=b7(J);if(!Q)return{};let Z=kV[$];if(!Z)return{};return Z(J,Q)}function k_($,J,Q){if(!Q)return!1;if(!kV[$])return!1;if(J?.loadPrivateOnAuth===!1)return!1;return Boolean(b7(Q))}async function I_($,J,Q){let Z=J?.cacheTtlMs??hV,W=q_($,Q),j=Date.now(),X=y7.get(W);if(X&&X.expiresAt>j)return X.data;let f=s5.get(W);if(f)return f;let Y=h_($,Q).then((V)=>{return y7.set(W,{data:V,expiresAt:j+Z}),V}).finally(()=>{s5.delete(W)});return s5.set(W,Y),Y}async function x_($){return a.fetchModelsDevProviderModels($,globalThis.fetch)}async function R8($={}){let J=$.url??e5,Q=$.cacheTtlMs??L_,Z=Date.now(),W=t5.get(J);if(W&&W.expiresAt>Z)return W.data;let j=U6.get(J);if(j)return j;let X=x_(J).then((f)=>{return t5.set(J,{data:f,expiresAt:Z+Q}),f}).finally(()=>{U6.delete(J)});return U6.set(J,X),X}function h7($){if($){t5.delete($),U6.delete($);return}t5.clear(),U6.clear()}function k7(){y7.clear(),s5.clear()}function g_($){return Object.fromEntries(Object.entries($).map(([J,Q])=>[J,{baseUrl:Q.baseUrl,modelId:Q.modelId,capabilities:bV(Q.capabilities)}]))}var R6=g_(R_());function Z9($){let J=U_($);if(!J)return;return{baseUrl:J.baseUrl||void 0,modelId:J.modelId,knownModels:J.knownModels,capabilities:bV(J.capabilities)}}async function L6($,J,Q){let Z=Z9($);if(!Z)return;try{let W=J?.loadLatestOnInit?await R8(J):void 0,j=W?T_($,W):{},X=Q&&k_($,J,Q)?await I_($,J,Q):{},Y=Boolean(a.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl)?Q??{providerId:$,modelId:Z.modelId,baseUrl:Z.baseUrl}:Q,V=Y?await E_($,J,Y).catch(()=>({})):{},H=await O_($,Z.knownModels,j,X,V,Q?.knownModels);return{...Z,knownModels:H}}catch(W){if(J?.failOnError)throw W;return Z}}var z6=u0.BUILT_IN_PROVIDER,I7=u0.BUILT_IN_PROVIDER_IDS,x7=u0.isBuiltInProviderId,L8=u0.normalizeProviderId,_6=N.string().min(1).regex(/^[a-z0-9][a-z0-9-]*$/i),W9=N.enum(["anthropic","gemini","openai-chat","openai-responses","openai-r1","ai-sdk"]),j9=N.enum(["anthropic","ai-sdk","ai-sdk-community","openai","openai-compatible","openai-r1","gemini","bedrock","custom","fetch","vertex"]),X9=N.object({apiKey:N.string().optional(),accessToken:N.string().optional(),refreshToken:N.string().optional(),expiresAt:N.number().int().positive().optional(),accountId:N.string().optional()}),m_=N.enum(["none","low","medium","high","xhigh"]),f9=N.object({enabled:N.boolean().optional(),effort:m_.optional(),budgetTokens:N.number().int().positive().optional()}),Y9=N.object({accessKey:N.string().optional(),secretKey:N.string().optional(),sessionToken:N.string().optional(),region:N.string().optional(),profile:N.string().optional(),authentication:N.enum(["iam","api-key","apikey","profile"]).optional(),usePromptCache:N.boolean().optional(),useCrossRegionInference:N.boolean().optional(),useGlobalInference:N.boolean().optional(),endpoint:N.string().url().optional(),customModelBaseId:N.string().optional()}),V9=N.object({projectId:N.string().optional(),region:N.string().optional()}),H9=N.object({apiVersion:N.string().optional(),useIdentity:N.boolean().optional()}),B9=N.object({clientId:N.string().optional(),clientSecret:N.string().optional(),tokenUrl:N.string().url().optional(),resourceGroup:N.string().optional(),deploymentId:N.string().optional(),useOrchestrationMode:N.boolean().optional(),api:N.enum(["orchestration","foundation-models"]).optional(),defaultSettings:N.record(N.string(),N.unknown()).optional()}),A9=N.object({mode:N.enum(["internal","external"]).optional(),usePromptCache:N.boolean().optional()}),K9=N.object({loadLatestOnInit:N.boolean().optional(),loadPrivateOnAuth:N.boolean().optional(),url:N.string().url().optional(),cacheTtlMs:N.number().int().positive().optional(),failOnError:N.boolean().optional()}),R$=N.object({provider:_6,apiKey:N.string().optional(),auth:X9.optional(),model:N.string().optional(),protocol:W9.optional(),client:j9.optional(),routingProviderId:_6.optional(),maxTokens:N.number().int().positive().optional(),contextWindow:N.number().int().positive().optional(),baseUrl:N.string().url().optional(),headers:N.record(N.string(),N.string()).optional(),timeout:N.number().int().positive().optional(),reasoning:f9.optional(),aws:Y9.optional(),gcp:V9.optional(),azure:H9.optional(),sap:B9.optional(),oca:A9.optional(),region:N.string().optional(),apiLine:N.enum(["china","international"]).optional(),capabilities:N.array(N.enum(["reasoning","prompt-cache","streaming","tools","vision","computer-use","oauth","popular"])).optional(),modelCatalog:K9.optional()});function G9($){return R$.parse($)}function F9($){return R$.safeParse($)}function v_($){return $.protocol==="openai-responses"||$.client==="openai"}function d0($,J={}){let Q=$.provider,Z=L8(Q),W=J.includeKnownModels!==!1,j=$.reasoning?.effort||"none",X=j==="none"?void 0:j,f=R6[Z],Y=Object.assign({},...u0.resolveProviderModelCatalogKeys(Z).map((R)=>u0.getGeneratedModelsForProvider(R))),V=Object.keys(Y)[0],H=l2(Z,$),B=$.baseUrl??(Z==="oca"?$.oca?.mode==="internal"?j5:X5:f?.baseUrl),A=$.routingProviderId??(v_($)&&Z!==z6.OPENAI_NATIVE?z6.OPENAI_NATIVE:void 0),K=W?f?.knownModels??(Object.keys(Y).length>0?Y:void 0):void 0,G={providerId:Q,clientType:$.client,routingProviderId:A,modelId:$.model??f?.modelId??V??"default",...W?{knownModels:K}:{},apiKey:H,accessToken:$.auth?.accessToken,refreshToken:$.auth?.refreshToken,accountId:$.auth?.accountId,baseUrl:B,headers:$.headers,timeoutMs:$.timeout,maxOutputTokens:$.maxTokens,maxInputTokens:$.contextWindow,thinking:$.reasoning?.enabled,reasoningEffort:X,thinkingBudgetTokens:$.reasoning?.budgetTokens,region:$.region??$.aws?.region??$.gcp?.region,apiLine:$.apiLine,useCrossRegionInference:$.aws?.useCrossRegionInference,useGlobalInference:$.aws?.useGlobalInference,aws:$.aws?{accessKey:$.aws.accessKey,secretKey:$.aws.secretKey,sessionToken:$.aws.sessionToken,authentication:$.aws.authentication,profile:$.aws.profile,usePromptCache:$.aws.usePromptCache,endpoint:$.aws.endpoint,customModelBaseId:$.aws.customModelBaseId}:void 0,gcp:$.gcp?{projectId:$.gcp.projectId,region:$.gcp.region}:void 0,azure:$.azure,sap:$.sap,oca:$.oca,capabilities:$.capabilities??f?.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(G).filter(([R,D])=>D!==void 0))}function g7($){let J=G9($);return d0(J)}function m7($){let J=F9($);if(J.success)return{success:!0,config:d0(J.data)};return{success:!1,error:J.error}}var z8=R$;var D9=L$.object({settings:R$,updatedAt:L$.string().datetime(),tokenSource:L$.enum(["manual","oauth","migration"]).default("manual")}),_8=L$.object({version:L$.literal(1),lastUsedProvider:L$.string().min(1).optional(),providers:L$.record(L$.string(),D9)});function z$(){return{version:1,providers:{}}}W1();var uV={};w(uV,{InMemoryWorkspaceManager:()=>T8});import{upsertWorkspaceInfo as l_,WorkspaceManifestSchema as c7}from"@cline/shared";var cV={};w(cV,{normalizeWorkspacePath:()=>m1,generateWorkspaceInfoWithDiagnostics:()=>O6,generateWorkspaceInfo:()=>O8,buildWorkspaceMetadataWithInfo:()=>v7,buildWorkspaceMetadata:()=>T6});import{basename as c_,resolve as u_}from"node:path";import{performance as mV}from"node:perf_hooks";import{processWorkspaceInfo as vV}from"@cline/shared";import d_ from"simple-git";function m1($){return u_($)}async function O8($){return(await O6($)).info}function U9($){if($ instanceof Error)return{errorType:$.name?.trim()||$.constructor.name||"Error",message:$.message};return{errorType:"Error",message:String($)}}async function O6($){let J=m1($),Q={rootPath:J,hint:c_(J)},Z;try{let W=d_({baseDir:J});if(!await W.checkIsRepo())return{info:Q,vcsType:"none"};try{let X=await W.getRemotes(!0);if(X.length>0){let f=X.map((Y)=>{let V=Y.refs.fetch||Y.refs.push;return`${Y.name}: ${V}`});Q.associatedRemoteUrls=f}}catch(X){Z??=U9(X)}try{let X=(await W.revparse(["HEAD"])).trim();if(X.length>0)Q.latestGitCommitHash=X}catch(X){Z??=U9(X)}try{let X=(await W.branch()).current.trim();if(X.length>0)Q.latestGitBranchName=X}catch(X){Z??=U9(X)}return{info:Q,vcsType:"git",error:Z}}catch(W){return{info:Q,vcsType:"none",error:U9(W)}}}async function T6($){let J=await O8($);return vV(J)}async function v7($){let J=mV.now(),Q=await O6($),Z=mV.now()-J,W=Q.info;return{workspaceInfo:W,workspaceMetadata:vV(W),durationMs:Z,vcsType:Q.vcsType,initError:Q.error}}class T8{manifest;listeners=new Set;constructor($){this.manifest=c7.parse($??{workspaces:{}})}async addWorkspacePath($){let J=await O8($);return this.manifest=l_(this.manifest,J),this.emit({type:"workspace_added",workspace:J}),J}async switchWorkspace($){let J=m1($),Q=this.manifest.workspaces[J];if(Q)return this.manifest=c7.parse({...this.manifest,currentWorkspacePath:J}),this.emit({type:"workspace_switched",workspace:Q}),Q;let Z=await this.addWorkspacePath(J);return this.manifest=c7.parse({...this.manifest,currentWorkspacePath:Z.rootPath}),this.emit({type:"workspace_switched",workspace:Z}),Z}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}getCurrentWorkspace(){let $=this.manifest.currentWorkspacePath;if(!$)return;return this.manifest.workspaces[$]}getWorkspace($){let J=m1($);return this.manifest.workspaces[J]}listWorkspaces(){return Object.values(this.manifest.workspaces)}getManifest(){return this.manifest}emit($){for(let J of this.listeners)J($)}}O0();import{createHash as p_}from"node:crypto";var dV=new Set,lV=new Set;function r_($){return p_("sha256").update($).digest("hex")}function i_($){if($.vcsTypes&&$.vcsTypes.length>0)return $.vcsTypes;return[$.vcsType==="git"?"git":"none"]}function pV($){if(!$.telemetry)return;let J=r_($.rootPath),Q=$.rootCount??1;if(!dV.has(J))dV.add(J),xJ($.telemetry,{root_count:Q,vcs_types:i_($),init_duration_ms:$.durationMs,feature_flag_enabled:$.featureFlagEnabled??!0,is_remote_workspace:$.isRemoteWorkspace});if($.initError&&!lV.has(J)){lV.add(J);let Z=Error($.initError.message);Z.name=$.initError.errorType||"Error",gJ($.telemetry,Z,{fallback_to_single_root:!0,workspace_count:Q})}}function a_($){return`${$.pluginName??$.pluginPath}: ${$.message}`}function s_($,J,Q){if(J.length>0)for(let j of J)Q?.log(j.message,{severity:"warn"});if($.length===0)return;let Z=$.slice(0,3).map(a_).join("; "),W=$.length>3?`; and ${$.length-3} more`:"";Q?.log(`Some plugins failed to initialize. ${Z}${W}. Use --verbose for more details.`,{severity:"warn"});for(let j of $)Q?.log(`Plugin initialization failed (${j.phase}) for ${j.pluginPath}`,{severity:"warn",stack:j.stack,pluginPath:j.pluginPath,pluginName:j.pluginName})}function o_($,J){let Q=typeof $.thinking==="boolean",Z=typeof $.reasoningEffort==="string";if(!Q&&!Z)return J;return{...J??{},...Q?{enabled:$.thinking}:{},...Z?{effort:$.reasoningEffort}:{}}}function rV($,J){return n_($,J)}function t_($){let J=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;J+=1}return J}function e_($){let J={...$.storedHeaders??{},...$.configHeaders??{}},Q=$.accountId?.trim()||$O($.accessToken);if(J.originator="cline",J.session_id=$.sessionId,J["User-Agent"]=`Cline/${process.env.npm_package_version||"1.0.0"}`,Q)J["ChatGPT-Account-Id"]=Q;return J}function $O($){let J=$?.trim();if(!J)return;let Q=T0(J),Z=Q?.["https://api.openai.com/auth"]?.chatgpt_account_id;if(typeof Z==="string"&&Z.length>0)return Z;let W=Q?.organizations?.[0]?.id;if(typeof W==="string"&&W.length>0)return W;let j=Q?.chatgpt_account_id;if(typeof j==="string"&&j.length>0)return j;return}function JO($,J,Q,Z,W){let j=Q.getProviderSettings($.providerId),X=Z||j?.modelCatalog?{...Z??{},...j?.modelCatalog??{}}:void 0,f=$.providerConfig?.providerId===$.providerId?$.providerConfig:void 0,Y={...j??{},provider:$.providerId,model:$.modelId,apiKey:$.apiKey??j?.apiKey,baseUrl:$.baseUrl??j?.baseUrl,headers:$.providerId==="openai-codex"?e_({sessionId:J,configHeaders:$.headers,storedHeaders:j?.headers,accountId:j?.auth?.accountId,accessToken:$.apiKey??j?.auth?.accessToken??j?.apiKey}):$.headers??j?.headers,reasoning:o_($,j?.reasoning),modelCatalog:X},V={...d0(Y),...f??{}};if($.knownModels)V.knownModels=$.knownModels;if($.extensionContext)V.extensionContext=$.extensionContext;let B=$.fetch??V.fetch??W;if(B)V.fetch=B;return V}async function iV($){let{input:J,sessionId:Q,providerSettingsManager:Z,defaultTelemetry:W,defaultCapabilities:j,defaultToolPolicies:X,defaultFetch:f,onPluginEvent:Y,onTeamEvent:V,createSubAgentLifecycleCallbacks:H,createSpawnTool:B,localRuntime:A,readSessionMetadata:K,writeSessionMetadata:G}=$,R=G$(J.config),{modelCatalogDefaults:D,userInstructionService:U,configExtensions:F,onTeamRestored:O,...T}=A??{},z=Object.keys(T).length>0?T:void 0,{workspaceInfo:L,workspaceMetadata:P,durationMs:S,vcsType:b,initError:u}=await v7(R),t=z?.extensionContext,Q0={...t??{},workspace:{...L,...t?.workspace??{}},session:{...t?.session??{},sessionId:Q},logger:t?.logger??z?.logger,telemetry:t?.telemetry??z?.telemetry??W};pV({telemetry:Q0.telemetry,rootPath:L.rootPath,workspaceInfo:L,rootCount:1,vcsType:b,durationMs:S,initError:u,featureFlagEnabled:!0});let e=U8({cwd:J.config.cwd,workspacePath:R,rootSessionId:Q,logger:z?.logger,workspaceInfo:L}),$1=uY(z?.hooks)?void 0:D8({rootSessionId:Q,workspacePath:R,workspaceInfo:L}),b$=W2([z?.hooks,$1]),r;if(rV(F,"plugins"))try{r=await K8({pluginPaths:z?.pluginPaths,workspacePath:R,cwd:J.config.cwd,onEvent:Y,providerId:J.config.providerId,modelId:J.config.modelId,workspaceInfo:L,session:Q0.session,client:Q0.client,user:Q0.user,logger:Q0.logger,telemetry:Q0.telemetry,automation:Q0.automation}),s_(r.failures,r.warnings,z?.logger)}catch(x2){let QZ=x2 instanceof Error?x2.message:String(x2);z?.logger?.log?.(`plugin loading failed; continuing without plugins (${QZ})`)}let C=W7(e?[e]:void 0,W7(z?.extensions,q5(r?.extensions))),f0=rV(F,"plugins")?$2(r?.pluginPaths??[]):void 0,Y0={...J.config,...z??{},sessionId:Q,hooks:b$,extensions:C,extensionContext:Q0,telemetry:Q0.telemetry},w0=JO(Y0,Q,Z,D,f),k2=W2([Y0.hooks,Y0.checkpoint?.enabled===!0?zV({cwd:Y0.cwd,sessionId:Q,logger:Y0.logger,createCheckpoint:Y0.checkpoint?.createCheckpoint,initialRunCount:t_(J.initialMessages),readSessionMetadata:K,writeSessionMetadata:G}):void 0]),T1={...Y0,providerConfig:w0,workspaceMetadata:P,hooks:k2},Y1=J.toolPolicies??Y0.toolPolicies??X,V4=z0(j,J.capabilities),I2=V4?.requestToolApproval,bJ=V4?.toolExecutors,M1=H?.(T1),hJ=new T8({currentWorkspacePath:L.rootPath,workspaces:{[L.rootPath]:L}});return{effectiveInput:J,config:T1,providerConfig:w0,workspaceMetadata:P,workspaceInfo:L,extensions:C,hooks:k2,toolPolicies:Y1,requestToolApproval:I2,pluginSandboxShutdown:r?.shutdown,runtimeBuilderInput:{config:T1,hooks:k2,extensions:C,onTeamEvent:V,createSpawnTool:B,onTeamRestored:O,onSubAgentEvent:M1?.onSubAgentEvent,onSubAgentStart:M1?.onSubAgentStart,onSubAgentEnd:M1?.onSubAgentEnd,userInstructionService:U,pluginSkillDirectories:f0,configExtensions:F,toolExecutors:bJ,toolPolicies:Y1,workspaceManager:hJ,logger:T1.logger,telemetry:T1.telemetry,requestToolApproval:I2}}}import{existsSync as L9,mkdirSync as QO,readdirSync as ZO,rmdirSync as WO,rmSync as jO,unlinkSync as XO}from"node:fs";import{dirname as nV,join as R9}from"node:path";function $0(){return new Date().toISOString()}function M6($){if(!$||!L9($))return;try{XO($)}catch{}}function fO($){let J=j8($);if(J)return{rootSessionId:J.rootSessionId,fileStem:`${J.agentId}__${J.teamTaskId}`};let Q=J6($);if(Q)return{rootSessionId:Q.rootSessionId,fileStem:Q.agentId};return{rootSessionId:$,fileStem:$}}class u7{ensureSessionsDir;constructor($){this.ensureSessionsDir=$}sessionArtifactsDir($){return R9(this.ensureSessionsDir(),$)}ensureSessionArtifactsDir($){let J=this.sessionArtifactsDir($);if(!L9(J))QO(J,{recursive:!0});return J}sessionMessagesPath($){return R9(this.sessionArtifactsDir($),`${$}.messages.json`)}sessionManifestPath($,J=!1){let Q=J?this.ensureSessionArtifactsDir($):this.sessionArtifactsDir($);return R9(Q,`${$}.json`)}removeSessionDirIfEmpty($){let J=this.sessionArtifactsDir($),Q=this.ensureSessionsDir();while(J.startsWith(Q)&&J!==Q){if(!L9(J)){J=nV(J);continue}try{if(ZO(J).length>0)break;WO(J)}catch{break}J=nV(J)}}removeSessionDir($){this.removeDir(this.sessionArtifactsDir($))}removeDir($){if(!L9($))return;try{jO($,{recursive:!0,force:!0})}catch{}}subagentArtifactPaths($,J,Q){let{rootSessionId:Z,fileStem:W}=fO($),j=this.sessionArtifactsDir(Z);return{messagesPath:R9(j,`${W}.messages.json`)}}}import{resolveDocumentsExtensionPath as YO}from"@cline/shared/storage";O0();function aV($,J,Q,Z,W){if(Q)vJ($.telemetry,{ulid:J,apiProvider:$.providerId,...W});else mJ($.telemetry,{ulid:J,apiProvider:$.providerId,...W});VO($.telemetry,{workspacePath:Z})}function VO($,J){let Q=YO("Hooks"),Z=D$(J.workspacePath),W=new Map;for(let j of Z){let X=j.hookEventName??"unknown",f=W.get(X)??{global:0,workspace:0};if(j.path===Q||j.path.startsWith(`${Q}/`))f.global+=1;else f.workspace+=1;W.set(X,f)}for(let[j,X]of W.entries())sJ($,j,X.global,X.workspace)}function sV($,J){for(let Q of J.mentions)nJ($,Q,J.matchedFiles.includes(Q)?1:0,"file",!J.matchedFiles.includes(Q));for(let Q of J.matchedFiles)rJ($,"file",Q.length);for(let Q of J.ignoredMentions)iJ($,"file","not_found",Q)}var ZF={};w(ZF,{ProviderSettingsManager:()=>_1});import{chmodSync as jF,existsSync as Sj,mkdirSync as Pb,readFileSync as Nb,writeFileSync as wb}from"node:fs";import{basename as XF,dirname as Cj}from"node:path";import{resolveProviderSettingsPath as Sb}from"@cline/shared/storage";var M={};w(M,{writeHubDiscovery:()=>a9,writeGlobalSettings:()=>k1,withHubStartupLock:()=>s9,verifyHubConnection:()=>G1,updateMcpServerOAuthState:()=>H2,updateLocalProvider:()=>uQ,uninstallPlugin:()=>Jj,truncateNotificationBody:()=>_J,toggleDisabledTool:()=>T5,toTeamProgressLifecycleEvent:()=>d8,toProviderConfig:()=>d0,toHubStatusUrl:()=>SW,toHubHealthUrl:()=>o9,toHookConfigFileName:()=>F6,syncPluginMcpServersToSettings:()=>r3,summarizeUsageFromMessages:()=>f8,stopLocalHubServerGracefully:()=>cW,startLocalOAuthServer:()=>J1,startHubWebSocketServer:()=>C2,startHubServer:()=>tK,startClineDeviceAuth:()=>HZ,splitCoreSessionConfig:()=>r6,spawnDetachedHubServerWithRetry:()=>k8,spawnDetachedHubServer:()=>kW,setTelemetryOptOutGlobally:()=>bf,setMcpServerDisabled:()=>Y2,setDisabledTools:()=>uZ,setDisabledPlugin:()=>mf,setAutoUpdateEnabledGlobally:()=>kf,sendHubCommand:()=>oA,saveProviderOAuthCredentials:()=>x$,saveLocalProviderSettings:()=>Vj,saveLocalProviderOAuthCredentials:()=>Kj,sanitizeSessionToken:()=>a$,safeParseSettings:()=>F9,safeCreateProviderConfig:()=>m7,runSubprocessEvent:()=>i8,runHook:()=>a8,reviveTeamStateDates:()=>E5,restartLocalHubIfIdleAfterStartupTimeout:()=>QQ,resolveWorkspaceHubOwnerContext:()=>IB,resolveWorkflowsConfigSearchPaths:()=>k6,resolveSkillsConfigSearchPaths:()=>b6,resolveSharedHubOwnerContext:()=>E0,resolveSessionBackend:()=>f3,resolveRulesConfigSearchPaths:()=>h6,resolveProviderConfig:()=>L6,resolveProviderApiKeyFromSettings:()=>DZ,resolveProductionHubOwnerContext:()=>n0,resolvePluginSkillDirectoriesFromPaths:()=>$2,resolvePluginConfigSearchPaths:()=>B6,resolveMcpServerRegistrations:()=>A1,resolveLocalClineAuthToken:()=>Fj,resolveHubUrl:()=>K3,resolveHubOwnerContext:()=>l1,resolveHubEndpointOptions:()=>i0,resolveHubBuildId:()=>n9,resolveHooksConfigSearchPaths:()=>K6,resolveDisabledToolNames:()=>B1,resolveDisabledPluginPaths:()=>r4,resolveDefaultMcpSettingsPath:()=>K0,resolveDefaultHubPort:()=>h8,resolveDefaultHubPathname:()=>hW,resolveDefaultHubHost:()=>bW,resolveCoreSelectedToolIds:()=>h5,resolveCoreDistinctId:()=>b0,resolveCompatibleLocalHubUrl:()=>XJ,resolveClineDir:()=>EB,resolveClineDataDir:()=>R2,resolveAndLoadAgentPlugins:()=>K8,resolveAgentPluginPaths:()=>e$,requestHubShutdown:()=>jJ,requestDesktopToolApproval:()=>u3,removePluginMcpServersFromSettings:()=>wJ,rememberRecoverableLocalHubUrl:()=>P$,registerRemoteConfigSessionBlobUpload:()=>NQ,registerMcpServersFromSettingsFile:()=>B2,registerDisposable:()=>Ob,refreshProviderModelsFromSource:()=>Hj,refreshOpenAICodexToken:()=>W5,refreshOcaToken:()=>Y5,refreshClineToken:()=>Q5,readSessionCheckpointHistory:()=>OJ,readRemoteConfigSessionBlobUploadMetadata:()=>b3,readHubDiscovery:()=>G0,readGlobalSettings:()=>M0,readBearerToken:()=>_Q,probeHubServer:()=>p1,probeHubConnection:()=>sA,prewarmFileIndex:()=>D5,prewarmDetachedHubServer:()=>e9,prepareRemoteConfigCoreIntegration:()=>k3,parseWorkflowConfigFromMarkdown:()=>E6,parseUserCommandEnvelope:()=>_b,parseSkillConfigFromMarkdown:()=>C6,parseSettings:()=>G9,parseRuleConfigFromMarkdown:()=>y6,parseHookEventPayload:()=>n8,parseConfiguredAgentConfig:()=>HJ,normalizeWorkspacePath:()=>m1,normalizeUserInput:()=>zb,normalizeSdkError:()=>Lb,normalizeRuntimeCapabilities:()=>z0,normalizeProviderId:()=>L8,normalizeOAuthProvider:()=>Bj,normalizeHubWebSocketUrl:()=>N$,noopBasicLogger:()=>Rb,migrateLegacyProviderSettings:()=>CJ,mergeRulesForSystemPrompt:()=>w8,mergeAgentHooks:()=>W2,makeTeamTaskSubSessionId:()=>$6,makeSubSessionId:()=>W8,loginOpenAICodex:()=>F4,loginOcaOAuth:()=>R4,loginLocalProvider:()=>Aj,loginClineOAuth:()=>K4,loginAndSaveProviderOAuthCredentials:()=>z4,loginAndSaveLocalProviderOAuthCredentials:()=>Gj,loadOpenTelemetryAdapter:()=>eE,loadMcpSettingsFile:()=>f2,loadLlmsConfigFromFile:()=>Pj,loadConfiguredAgentConfigs:()=>v8,loadAgentPluginsFromPathsWithDiagnostics:()=>t$,loadAgentPluginsFromPaths:()=>m5,loadAgentPluginFromPath:()=>V6,listSessionHistoryFromBackend:()=>qW,listPluginToolsWithDiagnostics:()=>m9,listPluginTools:()=>l6,listMcpServerOAuthStatuses:()=>u6,listLocalProviders:()=>fj,listHookConfigFiles:()=>D$,isToolDisabledGlobally:()=>If,isTelemetryOptedOutGlobally:()=>O5,isSessionNotFoundError:()=>d1,isRuleEnabled:()=>S9,isPluginDisabledGlobally:()=>gf,isOAuthProvider:()=>I$,isHubReconnectableTransportError:()=>mW,isHubCommandTimeoutError:()=>JQ,isDiscoveryFilePresent:()=>hB,isClineNotSubscribedMessage:()=>jb,isClineNotSubscribedError:()=>Wb,isClineAccountActionRequest:()=>z9,isBuiltInProviderId:()=>x7,isAutoUpdateEnabledGlobally:()=>hf,identifyAccount:()=>S1,hasMcpSettingsFile:()=>c1,getValidOpenAICodexCredentials:()=>D4,getValidOcaCredentials:()=>L4,getValidClineCredentials:()=>G4,getProviderOAuthCredentialsFromSettings:()=>_4,getProviderConfigFields:()=>Dj,getProviderConfig:()=>Z9,getProviderAuthStorageId:()=>FZ,getProviderAuthHandler:()=>W0,getPersistedProviderApiKey:()=>l2,getMcpServerOAuthState:()=>V2,getLocalProviderModels:()=>Yj,getLiveModelsCatalog:()=>R8,getFileIndex:()=>b1,getCurrentContextSize:()=>Y7,getCoreHeadlessToolNames:()=>e4,getCoreDefaultEnabledToolIds:()=>b5,getCoreBuiltinToolCatalog:()=>i$,getCoreAcpToolNames:()=>k5,getClinePassSubscriptionUrl:()=>Zb,getClineNotSubscribedMessage:()=>Qb,getClineDefaultSystemPrompt:()=>Xb,generateWorkspaceInfoWithDiagnostics:()=>O6,generateWorkspaceInfo:()=>O8,formatRulesForSystemPrompt:()=>N8,formatProviderOAuthApiKey:()=>UZ,formatDisplayUserInput:()=>Ub,filterExtensionToolRegistrations:()=>q5,filterDisabledTools:()=>I1,filterDisabledPluginPaths:()=>M5,fetchClineRecommendedModels:()=>Mj,executeClineAccountAction:()=>_9,ensureHubWebSocketServer:()=>OQ,ensureHubServer:()=>eK,ensureDetachedHubServer:()=>uB,ensureCustomProvidersLoaded:()=>mQ,ensureCompatibleLocalHubUrl:()=>_2,enrichPromptWithMentions:()=>a2,emptyWorkspaceManifest:()=>Gb,emptyStoredProviderSettings:()=>z$,discoverPluginModulePaths:()=>A6,disablePluginMcpServersInSettings:()=>i3,deriveSubsessionStatus:()=>Q6,deleteLocalProvider:()=>dQ,defineLlmsConfig:()=>qj,createWorkflowsConfigDefinition:()=>g6,createUserInstructionConfigService:()=>_$,createToolPoliciesWithPreset:()=>R5,createTool:()=>Kb,createTeamName:()=>CQ,createSubprocessHooks:()=>BQ,createSpawnAgentTool:()=>A$,createSkillsConfigDefinition:()=>I6,createSessionHost:()=>r8,createRuntimeHost:()=>r8,createRulesConfigDefinition:()=>x6,createRemoteConfigSessionMessagesArtifactUploader:()=>h3,createProviderConfig:()=>g7,createOpenTelemetryTelemetryService:()=>zJ,createOAuthClientCallbacks:()=>M8,createMcpTools:()=>E8,createLocalHubScheduleRuntimeHandlers:()=>TQ,createLlmsSdk:()=>wj,createInitialAccumulatedUsage:()=>D0,createInMemoryHubOwnerContext:()=>bB,createHubServerUrl:()=>j1,createHubAuthToken:()=>i9,createHookConfigFileHooks:()=>D6,createHookConfigFileExtension:()=>U8,createHookAuditHooks:()=>D8,createDisabledMcpToolPolicy:()=>d6,createDisabledMcpToolPolicies:()=>g9,createDelegatedAgentConfigProvider:()=>H$,createDelegatedAgent:()=>B$,createDefaultToolsWithPreset:()=>L5,createDefaultTools:()=>f$,createDefaultMcpServerClientFactory:()=>C8,createDefaultExecutors:()=>s2,createCoreSettingsService:()=>K2,createCoreSessionSnapshot:()=>F1,createContributionRegistry:()=>Ab,createContextCompactionPrepareTurn:()=>N4,createConfiguredTelemetryService:()=>s1,createConfiguredTelemetryHandle:()=>$4,createConfiguredAgentTools:()=>c8,createClineTelemetryServiceMetadata:()=>Bb,createClineTelemetryServiceConfig:()=>Hb,createBuiltinTools:()=>n$,createAgentTeamsTools:()=>r$,createAgentRuntime:()=>qb,createAgentHooksExtension:()=>G8,connectToHub:()=>FQ,completeClineDeviceAuth:()=>BZ,clearPrivateModelsCatalogCache:()=>k7,clearLiveModelsCatalogCache:()=>h7,clearHubDiscovery:()=>y0,captureWorkspacePathResolved:()=>nj,captureWorkspaceInitialized:()=>xJ,captureWorkspaceInitError:()=>gJ,captureToolUsage:()=>dJ,captureTokenUsage:()=>cJ,captureTaskRestarted:()=>vJ,captureTaskCreated:()=>mJ,captureTaskCompleted:()=>H4,captureSubagentExecution:()=>A4,captureSkillUsed:()=>lJ,captureSdkError:()=>Vb,captureProviderConfigured:()=>aj,captureProviderApiError:()=>B4,captureModeSwitch:()=>uJ,captureMentionUsed:()=>rJ,captureMentionSearchResults:()=>nJ,captureMentionFailed:()=>iJ,captureHookDiscovery:()=>sJ,captureExtensionActivated:()=>ij,captureDiffEditFailure:()=>pJ,captureConversationTurnEvent:()=>g2,captureCompactionSkipped:()=>tJ,captureCompactionExecuted:()=>oJ,captureAuthSucceeded:()=>N1,captureAuthStarted:()=>P1,captureAuthLoggedOut:()=>e1,captureAuthFailed:()=>w1,captureAgentTeamCreated:()=>aJ,captureAgentCreated:()=>$$,buildWorkspaceMetadata:()=>T6,buildTeamProgressSummary:()=>u8,buildSdkErrorProperties:()=>fb,buildRemoteConfigSessionBlobUploadMetadata:()=>qQ,buildDelegatedAgentConfig:()=>l$,buildConfiguredAgentToolName:()=>BJ,buildConfiguredAgentToolDescriptors:()=>AJ,bootstrapAgentTeams:()=>Z8,authorizeMcpServerOAuth:()=>h9,addLocalProvider:()=>Xj,accumulateUsageTotals:()=>A0,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>S6,UnifiedConfigFileWatcher:()=>X2,ToolPresets:()=>c0,TelemetryService:()=>t8,TelemetryLoggerSink:()=>LJ,TEAM_TOOL_NAMES:()=>Q8,SubprocessSandbox:()=>H8,StoredProviderSettingsSchema:()=>_8,StoredProviderSettingsEntrySchema:()=>D9,SqliteTeamStore:()=>y2,SqliteSessionStore:()=>U1,SessionVersioningService:()=>y$,SessionVersioningError:()=>k0,SessionSource:()=>U0,SessionNotFoundError:()=>u1,SapSettingsSchema:()=>B9,SKILLS_CONFIG_DIRECTORY_NAME:()=>w6,SESSION_STATUSES:()=>Z6,SESSION_NOT_FOUND_ERROR_CODE:()=>G2,SDK_ERROR_TELEMETRY_EVENT:()=>Tb,RpcClineAccountService:()=>P6,RemoteRuntimeHost:()=>g8,ReasoningSettingsSchema:()=>f9,RULES_CONFIG_DIRECTORY_NAME:()=>w9,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY:()=>PQ,ProviderSettingsSchema:()=>R$,ProviderSettingsManager:()=>_1,ProviderProtocolSchema:()=>W9,ProviderIdSchema:()=>_6,ProviderClientSchema:()=>j9,OpenTelemetryProvider:()=>e8,OcaSettingsSchema:()=>A9,OPENAI_COMPATIBLE_PROVIDERS:()=>R6,NodeHubClient:()=>X1,NoOpFeatureFlagsProvider:()=>q2,NativeHubTransportAdapter:()=>PJ,ModelCatalogSettingsSchema:()=>K9,LocalRuntimeHost:()=>z1,Llms:()=>$b,InMemoryWorkspaceManager:()=>T8,InMemoryMcpManager:()=>A2,HubUIClient:()=>D3,HubTransportError:()=>q0,HubSessionClient:()=>F3,HubServerTransport:()=>Q4,HubScheduleService:()=>o8,HubScheduleCommandService:()=>s8,HubRuntimeHost:()=>r1,HubCommandError:()=>I8,HookEventPayloadSchema:()=>HQ,HookEventNameSchema:()=>VQ,HookConfigFileName:()=>F8,HOOK_CONFIG_FILE_EVENT_MAP:()=>G6,HOOKS_CONFIG_DIRECTORY_NAME:()=>p5,GlobalSettingsSchema:()=>p4,GcpSettingsSchema:()=>V9,FileTeamPersistenceStore:()=>iQ,FeatureFlagsService:()=>M2,FeatureFlagDefaultValue:()=>Db,FEATURE_FLAGS:()=>Fb,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>eQ,DefaultToolNames:()=>F0,DefaultRuntimeBuilder:()=>j4,DefaultLlmsSdk:()=>yJ,DEFAULT_MODELS_CATALOG_URL:()=>e5,DEFAULT_HUB_PORT:()=>yW,DEFAULT_HUB_PATHNAME:()=>EW,DEFAULT_HUB_HOST:()=>CW,CoreSettingsService:()=>O$,CoreSessionService:()=>L1,ContributionRegistry:()=>Yb,ClineNotSubscribedError:()=>Jb,ClineCore:()=>UJ,ClineAccountService:()=>q6,ChatViewStateSchema:()=>Oj,ChatSummarySchema:()=>tQ,ChatSessionStatusSchema:()=>aQ,ChatSessionConfigSchema:()=>nQ,ChatMessageSchema:()=>oQ,ChatMessageRoleSchema:()=>sQ,CORE_TELEMETRY_EVENTS:()=>x,CORE_BUILD_VERSION:()=>Tj,BrowserWebSocketHubAdapter:()=>qJ,BUILT_IN_PROVIDER_IDS:()=>I7,BUILT_IN_PROVIDER:()=>z6,AzureSettingsSchema:()=>H9,AwsSettingsSchema:()=>Y9,AuthSettingsSchema:()=>X9,AgentTeamsRuntime:()=>T2,AgentTeam:()=>p8,Agent:()=>Mb,ALL_DEFAULT_TOOL_NAMES:()=>W$});q(M,Qa);import*as $b from"@cline/llms";import{ClineNotSubscribedError as Jb,getClineNotSubscribedMessage as Qb,getClinePassSubscriptionUrl as Zb,isClineNotSubscribedError as Wb,isClineNotSubscribedMessage as jb}from"@cline/llms";import{buildClineSystemPrompt as Xb,buildSdkErrorProperties as fb,ContributionRegistry as Yb,captureSdkError as Vb,createClineTelemetryServiceConfig as Hb,createClineTelemetryServiceMetadata as Bb,createContributionRegistry as Ab,createTool as Kb,emptyWorkspaceManifest as Gb,FEATURE_FLAGS as Fb,FeatureFlagDefaultValue as Db,formatDisplayUserInput as Ub,noopBasicLogger as Rb,normalizeSdkError as Lb,normalizeUserInput as zb,parseUserCommandEnvelope as _b,registerDisposable as Ob,SDK_ERROR_TELEMETRY_EVENT as Tb}from"@cline/shared";import"@cline/shared/storage";var tV={};w(tV,{isClineAccountActionRequest:()=>z9,executeClineAccountAction:()=>_9,RpcClineAccountService:()=>P6,ClineAccountService:()=>q6});function HO($){if(typeof $!=="object"||$===null||!("error"in $))return;let J=$.error;return typeof J==="string"&&J.trim()?J:void 0}function oV($,J,Q){let Z=HO(Q);if(Z)return Z;let W=J.trim();if(W){let j=W.length>200?`${W.slice(0,200)}...`:W;return`Cline account request failed with status ${$}: ${j}`}return`Cline account request failed with status ${$}`}class q6{apiBaseUrl;getAuthTokenFn;getCurrentUserIdFn;getOrganizationMemberIdFn;getHeadersFn;requestTimeoutMs;fetchImpl;constructor($){let J=$.apiBaseUrl.trim();if(!J)throw Error("apiBaseUrl is required");this.apiBaseUrl=J,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 J=await this.resolveUserId($);return this.request(`/api/v1/users/${encodeURIComponent(J)}/balance`)}async fetchUsageTransactions($){let J=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(J)}/usages`)).items??[]}async fetchPaymentTransactions($){let J=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(J)}/payments`)).paymentTransactions??[]}async fetchUserOrganizations(){return(await this.fetchMe()).organizations??[]}async fetchOrganization($){let J=$.trim();if(!J)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(J)}`)}async fetchOrganizationBalance($){let J=$.trim();if(!J)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(J)}/balance`)}async fetchOrganizationUsageTransactions($){let J=$.organizationId.trim();if(!J)throw Error("organizationId is required");let Q=await this.resolveOrganizationMemberId(J,$.memberId);return(await this.request(`/api/v1/organizations/${encodeURIComponent(J)}/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 J=$?.trim();if(J)return J;let Z=(this.getCurrentUserIdFn?await this.getCurrentUserIdFn():void 0)?.trim();if(Z)return Z;let W=await this.fetchMe();if(!W.id?.trim())throw Error("Unable to resolve current user id");return W.id}async resolveOrganizationMemberId($,J){let Q=J?.trim();if(Q)return Q;let W=(this.getOrganizationMemberIdFn?await this.getOrganizationMemberIdFn($):void 0)?.trim();if(W)return W;let X=(await this.fetchUserOrganizations()).find((f)=>f.organizationId===$)?.memberId;if(!X?.trim())throw Error(`Unable to resolve memberId for organization ${$}`);return X}async request($,J){let Q=(await this.getAuthTokenFn())?.trim();if(!Q)throw Error("No Cline account auth token found");let Z=this.getHeadersFn?await this.getHeadersFn():{},W=new AbortController,j=setTimeout(()=>W.abort(),this.requestTimeoutMs);try{let X=await this.fetchImpl(new URL($,this.apiBaseUrl),{method:J?.method??"GET",headers:{Authorization:`Bearer ${Q}`,"Content-Type":"application/json",...Z??{}},body:J?.body!==void 0?JSON.stringify(J.body):void 0,signal:W.signal});if(X.status===204||J?.expectNoContent){if(!X.ok)throw Error(`Cline account request failed with status ${X.status}`);return}let f=await X.text(),Y;if(f.trim())try{Y=JSON.parse(f)}catch{if(!X.ok)throw Error(oV(X.status,f,void 0));throw Error("Cline account response was not valid JSON")}if(!X.ok)throw Error(oV(X.status,f,Y));if(typeof Y==="object"&&Y!==null){let V=Y;if(typeof V.success==="boolean"){if(!V.success)throw Error(V.error||"Cline account request failed");if(V.data!==void 0)return V.data}}if(Y===void 0||Y===null)throw Error("Cline account response payload was empty");return Y}finally{clearTimeout(j)}}}function z9($){return $.action==="clineAccount"}async function _9($,J){switch($.operation){case"fetchMe":return J.fetchMe();case"fetchBalance":return J.fetchBalance($.userId);case"fetchUsageTransactions":return J.fetchUsageTransactions($.userId);case"fetchPaymentTransactions":return J.fetchPaymentTransactions($.userId);case"fetchUserOrganizations":return J.fetchUserOrganizations();case"fetchOrganizationBalance":return J.fetchOrganizationBalance($.organizationId);case"fetchOrganizationUsageTransactions":return J.fetchOrganizationUsageTransactions({organizationId:$.organizationId,memberId:$.memberId});case"switchAccount":return await J.switchAccount($.organizationId),{updated:!0};case"fetchFeaturebaseToken":return J.fetchFeaturebaseToken?.();default:throw Error(`Unsupported Cline account operation: ${String($)}`)}}class P6{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 J=$.trim();if(!J)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationBalance",organizationId:J})}async fetchOrganizationUsageTransactions($){let J=$.organizationId.trim();if(!J)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationUsageTransactions",organizationId:J,...$.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 eV={};w(eV,{createOAuthClientCallbacks:()=>M8});function M8($){return{onAuth:({url:J,instructions:Q})=>{if($.onOutput?.(Q??"Complete sign-in in your browser."),$.openUrl)try{Promise.resolve($.openUrl(J)).catch((Z)=>{$.onOpenUrlError?.({url:J,error:Z})})}catch(Z){$.onOpenUrlError?.({url:J,error:Z})}$.onOutput?.(J)},onPrompt:$.onPrompt,onServerListening:$.onServerListening,onServerClose:$.onServerClose}}var cA={};w(cA,{ClineCore:()=>UJ});function $H($){if($===!0)return{};if(!$)return;return $}function JH($){if($==="user")return"global";return $}class d7{getService;constructor($){this.getService=$}async start(){await this.getService().start()}async stop(){await this.getService().stop()}async reconcileNow(){await this.getService().reconcileNow()}ingestEvent($){let J=this.getService().ingestEvent($);return{event:J.event,duplicate:J.duplicate,matchedSpecIds:J.matchedSpecs.map((Q)=>Q.specId),queuedRuns:J.queuedRuns,suppressions:J.suppressions}}listEvents($){return this.getService().listEventLogs($)}getEvent($){return this.getService().getEventLog($)}listSpecs($){return this.getService().listSpecs($)}listRuns($){return this.getService().listRuns($)}}function QH($){let{host:J}=$;return{async startSession(Q){let Z=(Q.cwd?.trim()||Q.workspaceRoot).trim(),W=await J.startSession({source:Q.source?.trim()||U0.CLI,interactive:!1,config:{providerId:L8(Q.provider),modelId:Q.model,apiKey:Q.apiKey?.trim()||void 0,cwd:Z,workspaceRoot:Q.workspaceRoot,systemPrompt:Q.systemPrompt??"",mode:KO(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:W.sessionId,startResult:{sessionId:W.sessionId,manifestPath:W.manifestPath,messagesPath:W.messagesPath}}},async sendSession(Q,Z){let W=await J.runTurn({sessionId:Q,prompt:Z.prompt,userImages:Z.attachments?.userImages,userFiles:Z.attachments?.userFiles?.map((j)=>j.content),delivery:Z.delivery});if(!W)throw Error("ClineCore automation runtime returned no result");return{result:AO(W)}},async abortSession(Q){return await J.abort(Q,Error("ClineCore automation abort")),{applied:!0}},async stopSession(Q){return await J.stopSession(Q),{applied:!0}}}}function O9($){let J=BO($.automationService,$.automation),Q=$.context?.client??($.clientName?{name:$.clientName}:void 0),Z=$.context?.user??($.distinctId?{distinctId:$.distinctId}:void 0),W=$.context?.logger??$.logger,j=$.context?.telemetry??$.telemetry;if(!J&&!Q&&!Z&&!W&&!j)return $.context;return{...$.context??{},...Q?{client:Q}:{},...Z?{user:Z}:{},...W?{logger:W}:{},...j?{telemetry:j}:{},...J?{automation:J}:{}}}function BO($,J){if(!$)return;return{ingestEvent:(Q)=>{J.ingestEvent(Q)}}}function AO($){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((J)=>({name:J.name,input:J.input,output:J.output,error:J.error,durationMs:J.durationMs}))}}function KO($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}var rH={};w(rH,{createCoreSettingsService:()=>K2,CoreSettingsService:()=>O$});import{existsSync as v9}from"node:fs";import{basename as dH,isAbsolute as vT,relative as cT}from"node:path";var UH={};w(UH,{resolveWorkflowsConfigSearchPaths:()=>k6,resolveSkillsConfigSearchPaths:()=>b6,resolveRulesConfigSearchPaths:()=>h6,parseWorkflowConfigFromMarkdown:()=>E6,parseSkillConfigFromMarkdown:()=>C6,parseRuleConfigFromMarkdown:()=>y6,createWorkflowsConfigDefinition:()=>g6,createUserInstructionConfigService:()=>_$,createSkillsConfigDefinition:()=>I6,createRulesConfigDefinition:()=>x6,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>S6,UnifiedConfigFileWatcher:()=>X2,SKILLS_CONFIG_DIRECTORY_NAME:()=>w6,RULES_CONFIG_DIRECTORY_NAME:()=>w9});import{createHash as GO}from"node:crypto";import{watch as FO}from"node:fs";import{readdir as DO,readFile as UO}from"node:fs/promises";import{join as RO}from"node:path";function LO($){return GO("sha1").update($).digest("hex")}function jH($){return Boolean($&&typeof $==="object"&&"code"in $)}function ZH($){return jH($)&&$.code==="ENOENT"}function WH($){return jH($)&&($.code==="EACCES"||$.code==="EPERM")}class X2{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($,J){if($.length===0)throw Error("UnifiedConfigFileWatcher requires at least one definition.");this.definitions=$,this.debounceMs=J?.debounceMs??75,this.emitParseErrors=J?.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 Z of Q.directories){let W=this.baseTypesByDirectory.get(Z);if(W)W.add(Q.type);else this.baseTypesByDirectory.set(Z,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 J=this.definitionsByType.get($);if(!J)throw Error(`Unknown unified config type '${$}'.`);await this.enqueueRefresh(async()=>{await this.refreshTypeInternal(J)})}getSnapshot($){let J=this.recordsByType.get($);return new Map([...J?.entries()??[]].map(([Q,Z])=>[Q,{...Z}]))}getAllSnapshots(){let $=new Map;for(let[J,Q]of this.recordsByType.entries())$.set(J,new Map([...Q.entries()].map(([Z,W])=>[Z,{...W}])));return $}emit($){for(let J of this.listeners)J($)}enqueueRefresh($){return this.refreshQueue=this.refreshQueue.then($,$),this.refreshQueue}startDirectoryWatchers(){this.syncDirectoryWatchers()}syncDirectoryWatchers(){let $=this.buildDesiredTypesByDirectory();for(let[J,Q]of this.watchersByDirectory.entries()){if($.has(J))continue;Q.close(),this.watchersByDirectory.delete(J)}this.watchedTypesByDirectory=$;for(let J of $.keys()){if(this.watchersByDirectory.has(J))continue;try{let Q=FO(J,()=>{let Z=this.watchedTypesByDirectory.get(J);if(!Z)return;for(let W of Z)this.pendingTypes.add(W);this.scheduleFlush()});this.watchersByDirectory.set(J,Q),Q.on("error",(Z)=>{let W=this.watchedTypesByDirectory.get(J);if(!W)return;for(let j of W)this.emit({kind:"error",type:j,error:Z,filePath:J})})}catch(Q){if(!ZH(Q)&&!WH(Q)){let Z=$.get(J);if(!Z)continue;for(let W of Z)this.emit({kind:"error",type:W,error:Q,filePath:J})}}}}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 J of $){let Q=this.definitionsByType.get(J);if(!Q)continue;await this.refreshTypeInternal(Q)}})},this.debounceMs)}async refreshTypeInternal($){let{records:J,discoveredDirectories:Q}=await this.loadDefinition($),Z=this.recordsByType.get($.type)??new Map;for(let[W,j]of Z.entries()){if(J.has(W))continue;this.emit({kind:"remove",type:$.type,id:W,filePath:j.filePath})}for(let[W,j]of J.entries()){let X=Z.get(W);if(X&&X.filePath===j.filePath&&X.fingerprint===j.fingerprint)continue;this.emit({kind:"upsert",record:{type:j.type,id:W,item:j.item,filePath:j.filePath}})}if(this.recordsByType.set($.type,J),this.discoveredDirectoriesByType.set($.type,Q),this.started)this.syncDirectoryWatchers()}async loadDefinition($){let J=new Map,Q=new Set;for(let Z of $.directories){Q.add(Z);let W=$.discoverFiles?await $.discoverFiles(Z):await this.readDirectoryFileCandidates(Z);for(let j of W){let{fileName:X,filePath:f}=j;if(Q.add(j.directoryPath),$.includeFile&&!$.includeFile(X,f))continue;try{let Y=await UO(f,"utf8"),V={type:$.type,directoryPath:j.directoryPath,fileName:X,filePath:f,content:Y},H=$.parseFile(V),B=$.resolveId(H,V).trim();if(!B)continue;J.set(B,{type:$.type,id:B,item:H,filePath:f,fingerprint:LO(Y)})}catch(Y){if(this.emitParseErrors)this.emit({kind:"error",type:$.type,error:Y,filePath:f})}}}return{records:J,discoveredDirectories:Q}}buildDesiredTypesByDirectory(){let $=new Map;for(let[J,Q]of this.baseTypesByDirectory.entries())$.set(J,new Set(Q));for(let[J,Q]of this.discoveredDirectoriesByType.entries())for(let Z of Q){let W=$.get(Z);if(W)W.add(J);else $.set(Z,new Set([J]))}return $}async readDirectoryFileCandidates($){try{return(await DO($,{withFileTypes:!0})).filter((Q)=>Q.isFile()).map((Q)=>({directoryPath:$,fileName:Q.name,filePath:RO($,Q.name)})).sort((Q,Z)=>Q.fileName.localeCompare(Z.fileName))}catch(J){if(ZH(J)||WH(J))return[];throw J}}}import{readdir as p7,readFile as zO,stat as l7}from"node:fs/promises";import{basename as v1,dirname as _O,extname as M9,join as C0,resolve as N6}from"node:path";import{AGENTS_RULES_FILE_NAME as XH,RULES_CONFIG_DIRECTORY_NAME as w9,resolveGlobalAgentsRulesPath as OO,resolveRulesConfigSearchPaths as TO,resolveSkillsConfigSearchPaths as MO,resolveWorkflowsConfigSearchPaths as qO,SKILLS_CONFIG_DIRECTORY_NAME as w6,WORKFLOWS_CONFIG_DIRECTORY_NAME as S6}from"@cline/shared/storage";import PO from"yaml";var T9="SKILL.md",NO="managed.json",wO=new Set([".md",".markdown",".txt"]);function r7($){return $.trim().toLowerCase()}function q8($){let J=$;return J?.code==="ENOENT"||J?.code==="EACCES"||J?.code==="EPERM"||J?.code==="ELOOP"}function q9($){return wO.has(M9($).toLowerCase())}function fH($){let J=[],Q=new Set;for(let Z of $){let W=N6(Z);if(Q.has(W))continue;Q.add(W),J.push(Z)}return J}function SO($){let J=[...$?.directories??b6($?.workspacePath)];if($?.pluginSkillDirectories)J.push(...$.pluginSkillDirectories);else if($?.includePluginSkills)J.push(...RV({pluginPaths:$.pluginPaths,workspacePath:$.workspacePath,cwd:$.cwd??$.workspacePath}));return fH(J)}async function i7($){try{let J=await p7($,{withFileTypes:!0}),Q=[];for(let Z of J){if(!Z.isDirectory())continue;let W=C0($,Z.name),j=C0(W,NO);try{let X=await zO(j,"utf8"),f=JSON.parse(X);if(f&&typeof f==="object")Q.push(W)}catch(X){if(q8(X))continue;if(X?.name==="SyntaxError")continue;throw X}}return Q.sort((Z,W)=>Z.localeCompare(W))}catch(J){if(q8(J))return[];throw J}}function n7($){let J=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,Q=$.match(J);if(!Q)return{data:{},body:$,hadFrontmatter:!1};let[,Z,W]=Q;try{let j=PO.parse(Z);return{data:j&&typeof j==="object"&&!Array.isArray(j)?j:{},body:W,hadFrontmatter:!0}}catch(j){let X=j instanceof Error?j.message:String(j);return{data:{},body:$,hadFrontmatter:!0,parseError:X}}}function P9($,J,Q){if($===void 0||$===null){if(Q)throw Error(`Missing required frontmatter field '${J}'.`);return}if(typeof $!=="string")throw Error(`Frontmatter field '${J}' must be a string.`);let Z=$.trim();if(!Z&&Q)throw Error(`Frontmatter field '${J}' cannot be empty.`);return Z||void 0}function P8($,J){if($===void 0||$===null)return;if(typeof $!=="boolean")throw Error(`Frontmatter field '${J}' must be a boolean.`);return $}function CO($,J){if(v1($.filePath).toLowerCase()!==XH.toLowerCase())return v1($.filePath,M9($.filePath));if(J&&N6($.filePath)===N6(J,XH))return"Workspace AGENTS.md";if(N6($.filePath)===N6(OO()))return"Global AGENTS.md";return v1($.filePath,M9($.filePath))}function C6($,J){let{data:Q,body:Z,parseError:W}=n7($);if(W)throw Error(`Failed to parse YAML frontmatter: ${W}`);let j=Z.trim();if(!j)throw Error("Missing instructions body in skill file.");let f=P9(Q.name,"name",!1)??J.trim();if(!f)throw Error("Missing skill name.");return{name:f,description:P9(Q.description,"description",!1),disabled:P8(Q.disabled,"disabled")??(P8(Q.enabled,"enabled")===!1?!0:void 0),instructions:j,frontmatter:Q}}function y6($,J){let{data:Q,body:Z,parseError:W}=n7($);if(W)throw Error(`Failed to parse YAML frontmatter: ${W}`);let j=Z.trim();if(!j)throw Error("Missing instructions body in rule file.");let X=P9(Q.name,"name",!1)??J.trim();if(!X)throw Error("Missing rule name.");return{name:X,disabled:P8(Q.disabled,"disabled")??(P8(Q.enabled,"enabled")===!1?!0:void 0),instructions:j,frontmatter:Q}}function E6($,J){let{data:Q,body:Z,parseError:W}=n7($);if(W)throw Error(`Failed to parse YAML frontmatter: ${W}`);let j=Z.trim();if(!j)throw Error("Missing instructions body in workflow file.");let X=P9(Q.name,"name",!1)??J.trim();if(!X)throw Error("Missing workflow name.");return{name:X,disabled:P8(Q.disabled,"disabled")??(P8(Q.enabled,"enabled")===!1?!0:void 0),instructions:j,frontmatter:Q}}function b6($){return MO($)}function h6($){return TO($)}function k6($){return qO($)}async function YH($){if(v1($)===".cline"){let J=await i7($);return(await Promise.all(J.map((Z)=>YH(C0(Z,w6))))).flat()}try{let J=await p7($,{withFileTypes:!0}),Q=[];for(let Z of J){if(Z.isFile()&&Z.name===T9){Q.push({directoryPath:$,fileName:Z.name,filePath:C0($,Z.name)});continue}let W=C0($,Z.name);if(Z.isDirectory()||Z.isSymbolicLink()&&await l7(W).then((X)=>X.isDirectory()).catch((X)=>{if(q8(X))return!1;throw X}))Q.push({directoryPath:W,fileName:T9,filePath:C0(W,T9)})}return Q}catch(J){if(q8(J))return[];throw J}}async function N9($){if(v1($)===".cline"){let J=await i7($);return(await Promise.all(J.map((Z)=>N9(C0(Z,"rules.md"))))).flat()}try{if((await l7($)).isFile())return[{directoryPath:_O($),fileName:v1($),filePath:$}]}catch(J){if(!q8(J))throw J}try{let Q=(await p7($,{withFileTypes:!0})).filter((W)=>W.isFile()&&q9(W.name)).map((W)=>({directoryPath:$,fileName:W.name,filePath:C0($,W.name)})),Z=C0($,"AGENTS.md");try{if((await l7(Z)).isFile()){if(!Q.some((X)=>X.fileName==="AGENTS.md"))Q.push({directoryPath:$,fileName:"AGENTS.md",filePath:Z})}}catch{}return Q}catch(J){if(q8(J))return[];throw J}}async function yO($){if(v1($)===".cline"){let J=await i7($);return(await Promise.all(J.map((Z)=>N9(C0(Z,S6))))).flat()}return N9($)}function I6($){let J=SO($),Q=$?.workspacePath?C0($.workspacePath,".cline"):void 0;return{type:"skill",directories:Q?fH([...J,Q]):J,discoverFiles:YH,includeFile:(Z)=>Z===T9,parseFile:(Z)=>C6(Z.content,v1(Z.directoryPath)),resolveId:(Z)=>r7(Z.name)}}function x6($){let J=$?.directories??h6($?.workspacePath),Q=$?.workspacePath?C0($.workspacePath,".cline"):void 0;return{type:"rule",directories:Q?[...J,Q]:J,discoverFiles:N9,includeFile:(Z,W)=>Z===".clinerules"||q9(Z)||q9(W),parseFile:(Z)=>y6(Z.content,CO(Z,$?.workspacePath)),resolveId:(Z)=>r7(Z.name)}}function g6($){let J=$?.directories??k6($?.workspacePath),Q=$?.workspacePath?C0($.workspacePath,".cline"):void 0;return{type:"workflow",directories:Q?[...J,Q]:J,discoverFiles:yO,includeFile:(Z)=>q9(Z),parseFile:(Z)=>E6(Z.content,v1(Z.filePath,M9(Z.filePath))),resolveId:(Z)=>r7(Z.name)}}function VH($){let J=[I6($?.skills),x6($?.rules),g6($?.workflows)];return new X2(J,{debounceMs:$?.debounceMs,emitParseErrors:$?.emitParseErrors})}import{truncateSplit as HH}from"@cline/shared";function EO($,J){if($.description?.trim())return HH($.description,".");if(J==="workflow")return;return HH($.instructions,".")}function bO($){return $.disabled!==!0}function BH($,J){return[...$.getSnapshot(J).entries()].map(([Q,Z])=>({id:Q,record:Z})).filter(({record:Q})=>bO(Q.item)).map(({id:Q,record:Z})=>({id:Q,name:Z.item.name,instructions:Z.item.instructions,description:EO(Z.item,J),kind:J})).sort((Q,Z)=>Q.name.localeCompare(Z.name))}function m6($){let J=new Map;for(let Q of[...BH($,"workflow"),...BH($,"skill")])if(!J.has(Q.name))J.set(Q.name,Q);return[...J.values()].sort((Q,Z)=>Q.name.localeCompare(Z.name))}function AH($,J){if(!$.startsWith("/")||$.length<2)return $;let Q=$.match(/^\/(\S+)/);if(!Q)return $;let Z=Q[1];if(!Z)return $;let W=Z.length+1,j=$.slice(W),X=m6(J).find((f)=>f.name===Z);return X?`${X.instructions}${j}`:$}var GH={};w(GH,{mergeRulesForSystemPrompt:()=>w8,loadRulesForSystemPromptFromWatcher:()=>a7,listEnabledRulesFromWatcher:()=>KH,isRuleEnabled:()=>S9,formatRulesForSystemPrompt:()=>N8});function S9($){return $.disabled!==!0}function N8($){if($.length===0)return"";return`
|
|
204
|
+
`,X=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??J_(_V(),"hooks.jsonl");_V(X),ez(X,W,"utf8")};return{beforeRun:async(Z)=>{let W=w7(Z,"");Q({...L0(W,J),hookName:"agent_start",taskStart:{taskMetadata:{}}});return},beforeTool:async(Z)=>{let W=PV(Z);Q({...L0(W,J),hookName:"tool_call",iteration:W.iteration,tool_call:{id:W.call.id,name:W.call.name,input:W.call.input},preToolUse:{toolName:W.call.name,parameters:i5(W.call.input)}});return},afterTool:async(Z)=>{let W=NV(Z);Q({...L0(W,J),hookName:"tool_result",iteration:W.iteration,tool_result:W.record,postToolUse:{toolName:W.record.name,parameters:i5(W.record.input),result:typeof W.record.output==="string"?W.record.output:JSON.stringify(W.record.output),success:!W.record.error,executionTimeMs:W.record.durationMs}});return},afterRun:async({snapshot:Z,result:W})=>{let j=U$(Z);if(W.status==="completed"){Q({...L0(j,J),hookName:"agent_end",iteration:W.iterations,turn:{outputText:W.outputText,status:W.status},taskComplete:{taskMetadata:{}}});return}if(W.status==="aborted"||N7(W.error?.message)){Q({...L0(j,J),hookName:"agent_abort",reason:W.error?.message,taskCancel:{taskMetadata:{}}});return}if(W.error)Q({...L0(j,J),hookName:"agent_error",iteration:W.iterations,error:{name:W.error.name,message:W.error.message,stack:W.error.stack}})},onEvent:async(Z)=>{if(Z.type!=="message-added"||Z.message.role!=="user")return;let W=w7({snapshot:Z.snapshot},wV(Z.message.content));Q({...L0(W,J),hookName:"prompt_submit",userPromptSubmit:{prompt:W.userMessage,attachments:[]}})}}}function D6($){let J=H_($.workspacePath);if(!Object.values(J).some((B)=>B.length>0))return;let Z=async(B,A)=>{let K=J[A]??[];if(K.length===0)return;Q2({commands:K,cwd:$.cwd,logger:$.logger,payload:A==="agent_resume"?{...L0(B,$),hookName:A,taskResume:{taskMetadata:{},previousState:{}}}:{...L0(B,$),hookName:A,taskStart:{taskMetadata:{}}}})},W=async(B)=>{let A=J.prompt_submit??[];if(A.length>0)Q2({commands:A,cwd:$.cwd,logger:$.logger,payload:{...L0(B,$),hookName:"prompt_submit",userPromptSubmit:{prompt:B.userMessage,attachments:[]}}})},j=async(B)=>{let A=J.tool_call??[];if(A.length===0)return;return B_({commands:A,cwd:$.cwd,logger:$.logger,timeoutMs:$.toolCallTimeoutMs??120000,payload:{...L0(B,$),hookName:"tool_call",iteration:B.iteration,tool_call:{id:B.call.id,name:B.call.name,input:B.call.input},preToolUse:{toolName:B.call.name,parameters:i5(B.call.input)}}})},X=async(B)=>{let A=J.tool_result??[];if(A.length===0)return;Q2({commands:A,cwd:$.cwd,logger:$.logger,payload:{...L0(B,$),hookName:"tool_result",iteration:B.iteration,tool_result:B.record,postToolUse:{toolName:B.record.name,parameters:i5(B.record.input),result:typeof B.record.output==="string"?B.record.output:JSON.stringify(B.record.output),success:!B.record.error,executionTimeMs:B.record.durationMs}}})},f=async(B)=>{let A=J.agent_end??[];if(A.length===0)return;Q2({commands:A,cwd:$.cwd,logger:$.logger,payload:{...L0(B,$),hookName:"agent_end",iteration:B.iteration,turn:B.turn,taskComplete:{taskMetadata:{}}}})},Y=async(B)=>{let A=J.agent_error??[];if(A.length===0)return;Q2({commands:A,cwd:$.cwd,logger:$.logger,payload:{...L0(B,$),hookName:"agent_error",iteration:B.iteration,error:{name:B.error.name,message:B.error.message,stack:B.error.stack}}})},V=async(B)=>{if(N7(B.reason)){let K=J.agent_abort??[];if(K.length>0)Q2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...L0(B,$),hookName:"agent_abort",reason:B.reason,taskCancel:{taskMetadata:{}}}})}let A=J.session_shutdown??[];if(A.length===0)return;Q2({commands:A,cwd:$.cwd,logger:$.logger,payload:{...L0(B,$),hookName:"session_shutdown",reason:B.reason}})},H={};if((J.agent_start?.length??0)>0||(J.agent_resume?.length??0)>0||(J.prompt_submit?.length??0)>0){if((J.agent_start?.length??0)>0||(J.agent_resume?.length??0)>0)H.beforeRun=async(B)=>{let A=process.env.CLINE_HOOK_AGENT_RESUME==="1"?"agent_resume":"agent_start";await Z(U$(B.snapshot),A);return};if((J.prompt_submit?.length??0)>0)H.onEvent=async(B)=>{if(B.type!=="message-added"||B.message.role!=="user")return;await W(w7({snapshot:B.snapshot},wV(B.message.content)))}}if((J.tool_call?.length??0)>0)H.beforeTool=async(B)=>{let A=await j(PV(B));return A_(A)};if((J.tool_result?.length??0)>0)H.afterTool=async(B)=>{await X(NV(B));return};if((J.agent_end?.length??0)>0)H.afterRun=async({snapshot:B,result:A})=>{if(A.status!=="completed")return;await f({...U$(B),iteration:A.iterations,turn:{outputText:A.outputText,status:A.status}})};if((J.agent_error?.length??0)>0||(J.agent_abort?.length??0)>0||(J.session_shutdown?.length??0)>0){let B=H.afterRun;H.afterRun=async(A)=>{await B?.(A);let{snapshot:K,result:G}=A;if(G.status==="aborted"||N7(G.error?.message)){await V({...U$(K),reason:G.error?.message});return}if(G.error)await Y({...U$(K),iteration:G.iterations,error:G.error})}}return H}function U8($){return G8("core.hook_config_files",D6($))}function Z2($,J){let Q=$.map((Z)=>Z[J]).filter((Z)=>typeof Z==="function");if(Q.length===0)return;return async(Z)=>{let W;for(let j of Q){let X=await j(Z);if(!X||typeof X!=="object")continue;let f=X;W={...W??{},...f,stop:W?.stop===!0||f.stop===!0?!0:f.stop,options:W?.options||f.options?{...W?.options??{},...f.options??{}}:void 0}}return W}}function W2($){let J=$.filter((Q)=>Q!==void 0);if(J.length===0)return;return{beforeRun:Z2(J,"beforeRun"),afterRun:Z2(J,"afterRun"),beforeModel:Z2(J,"beforeModel"),afterModel:Z2(J,"afterModel"),beforeTool:Z2(J,"beforeTool"),afterTool:Z2(J,"afterTool"),onEvent:Z2(J,"onEvent")}}var SV={};w(SV,{normalizeRuntimeCapabilities:()=>z0});function z0(...$){let J,Q;for(let W of $){if(!W)continue;if(W.toolExecutors)J={...J??{},...W.toolExecutors};if(W.requestToolApproval)Q=W.requestToolApproval}let Z=J&&Object.keys(J).length>0;if(!Z&&!Q)return;return{...Z?{toolExecutors:J}:{},...Q?{requestToolApproval:Q}:{}}}var gV={};w(gV,{toProviderConfig:()=>d0,emptyStoredProviderSettings:()=>z$,StoredProviderSettingsSchema:()=>_8,StoredProviderSettingsEntrySchema:()=>DQ,ProviderSettingsSchemaTyped:()=>z8});import{z as L$}from"zod";var xV={};w(xV,{toProviderConfig:()=>d0,safeParseSettings:()=>FQ,safeCreateProviderConfig:()=>m7,parseSettings:()=>GQ,normalizeProviderId:()=>L8,isBuiltInProviderId:()=>x7,createProviderConfig:()=>g7,SapSettingsSchema:()=>BQ,ReasoningSettingsSchema:()=>fQ,ProviderSettingsSchema:()=>R$,ProviderProtocolSchema:()=>WQ,ProviderIdSchema:()=>_6,ProviderClientSchema:()=>jQ,OcaSettingsSchema:()=>AQ,ModelCatalogSettingsSchema:()=>KQ,GcpSettingsSchema:()=>VQ,BUILT_IN_PROVIDER_IDS:()=>I7,BUILT_IN_PROVIDER:()=>z6,AzureSettingsSchema:()=>HQ,AwsSettingsSchema:()=>YQ,AuthSettingsSchema:()=>XQ});import*as u0 from"@cline/llms";import{z as N}from"zod";var IV={};w(IV,{resolveProviderConfig:()=>L6,getProviderConfig:()=>ZQ,getLiveModelsCatalog:()=>R8,clearPublicModelsCatalogCache:()=>b_,clearPrivateModelsCatalogCache:()=>k7,clearLiveModelsCatalogCache:()=>h7,OPENAI_COMPATIBLE_PROVIDERS:()=>R6,DEFAULT_MODELS_CATALOG_URL:()=>e5});import*as a from"@cline/llms";function C7($){if(!Array.isArray($))return[];return $.map((J)=>{if(typeof J==="string")return J.trim();if(J&&typeof J==="object"){let Q=J;for(let Z of[Q.id,Q.name,Q.model])if(typeof Z==="string"&&Z.trim())return Z.trim()}return""}).filter((J)=>J.length>0)}function K_($,J){let Q=C7($);if(Q.length>0)return Q;if(!$||typeof $!=="object")return[];let Z=$,W=C7(Z.data??Z.models);if(W.length>0)return W;if(Z.models&&typeof Z.models==="object"&&!Array.isArray(Z.models)){let X=Object.keys(Z.models).filter((f)=>f.trim().length>0);if(X.length>0)return X}let j=Z.providers?.[J];if(j&&typeof j==="object"){let f=C7(j.models??j);if(f.length>0)return f}return[]}async function n5($,J){let Q=await fetch($,{method:"GET"});if(!Q.ok)throw Error(`failed to fetch models from ${$}: HTTP ${Q.status}`);return K_(await Q.json(),J)}function CV($){return $.replace(/\/+$/,"")}function a5($,J,Q){let Z=Q?.trim();if(!Z)return;let W=$?.trim();if(!W||!J?.trim())return Z;try{let j=new URL(Z),X=new URL(J),f=new URL(W);if(j.origin!==X.origin)return Z;let Y=CV(X.pathname),V=CV(f.pathname);if(Y&&j.pathname.startsWith(`${Y}/`)){let H=j.pathname.slice(Y.length);f.pathname=`${V}${H}`}else f.pathname=j.pathname;return f.search=j.search,f.hash=j.hash,f.toString()}catch{return Z}}function G_($){return Object.fromEntries(Object.entries($).map(([J,Q])=>[J,{...Q}]))}function F_($){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 D_=Object.values(a.MODEL_COLLECTIONS_BY_PROVIDER_ID).map(($)=>({id:$.provider.id,baseUrl:$.provider.baseUrl??"",modelsSourceUrl:$.provider.modelsSourceUrl,modelId:$.provider.defaultModelId,knownModels:G_($.models),capabilities:$.provider.capabilities?[...$.provider.capabilities]:void 0,env:$.provider.env?[...$.provider.env]:void 0,client:$.provider.client,protocol:$.provider.protocol})),EV=Object.fromEntries(D_.map(($)=>[$.id,$]));function U_($){return EV[$]}function R_(){return Object.fromEntries(Object.entries(EV).filter(([,$])=>F_($)))}function bV($=[]){let J=$.flatMap((Q)=>{switch(Q){case"reasoning":case"prompt-cache":case"tools":case"oauth":return[Q];default:return[]}});return J.length>0?J:void 0}var e5="https://models.dev/api.json",L_=600000,hV=300000,z_=5000,t5=new Map,U6=new Map,y7=new Map,s5=new Map;async function __(){return a.getGeneratedProviderModels()}async function O_($,J={},Q={},Z={},W={},j={}){let X=await __(),f=a.resolveProviderModelCatalogKeys($),Y=Object.assign({},...f.map((A)=>X[A]??{})),V=Boolean(a.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl),H=Object.keys(W).length>0;if(V&&H)return a.sortModelsByReleaseDate({...W,...j});if($==="openai-codex")return a.sortModelsByReleaseDate({...J,...a.filterOpenAICodexModels(Q),...W,...j});let B=a.sortModelsByReleaseDate({...Y,...J,...Q,...Z,...W});if($==="cline")return a.sortModelsByReleaseDate({...a.preferCanonicalModelIds(B,a.VERCEL_OPENROUTER_MODEL_ID_ALIAS_RULES),...j});return a.sortModelsByReleaseDate({...B,...j})}function T_($,J){let Q=a.resolveProviderModelCatalogKeys($);return Object.assign({},...Q.map((Z)=>J[Z]??{}))}function $Q($){let J=$?.trim();return J&&J.length>0?J:""}function b7($){let J=$.apiKey?.trim()||$.accessToken?.trim();return J&&J.length>0?J:void 0}function M_($){let J=2166136261;for(let Q=0;Q<$.length;Q+=1)J^=$.charCodeAt(Q),J+=(J<<1)+(J<<4)+(J<<7)+(J<<8)+(J<<24);return(J>>>0).toString(16)}function q_($,J){return`${$}:${$Q(J.baseUrl)}:${M_(b7(J)??"")}`}async function JQ($,J,Q=z_){let Z=new AbortController,W=setTimeout(()=>Z.abort(),Q);try{return await fetch($,{...J,signal:Z.signal})}finally{clearTimeout(W)}}function j2($,J,Q){if(Q&&!$.includes(J))$.push(J)}function QQ($,J){let Q=["streaming","tools"];return j2(Q,"images",Boolean(J.supportsImages)),j2(Q,"prompt-cache",Boolean(J.supportsPromptCache)),j2(Q,"reasoning",Boolean(J.supportsReasoning)),{id:$,name:J.name??$,contextWindow:J.contextWindow,maxInputTokens:J.maxInputTokens,maxTokens:J.maxTokens,capabilities:Q,releaseDate:J.releaseDate,status:"active"}}async function P_($,J){let Q=await JQ("https://inference.baseten.co/v1/models",{method:"GET",headers:{Authorization:`Bearer ${J}`,"Content-Type":"application/json"}});if(!Q.ok)throw Error(`Baseten model refresh failed: HTTP ${Q.status}`);let W=(await Q.json())?.data??[],j={};for(let X of W){let f=X.id?.trim();if(!f)continue;if(f.includes("whisper")||f.includes("tts")||f.includes("embedding"))continue;let Y=X.supported_features??[];j[f]=QQ(f,{name:f,contextWindow:X.context_length,maxInputTokens:X.context_length,maxTokens:X.max_completion_tokens,supportsReasoning:Y.includes("reasoning")||Y.includes("reasoning_effort"),supportsImages:!1})}return j}function yV($){if(typeof $==="number")return Number.isFinite($)?$:void 0;if(typeof $==="string"){let J=Number($);return Number.isFinite(J)?J:void 0}return}async function N_($,J){let Q=await JQ("https://api.hicap.ai/v2/openai/models",{method:"GET",headers:{"api-key":J}});if(!Q.ok)throw Error(`Hicap model refresh failed: HTTP ${Q.status}`);let W=(await Q.json())?.data??[],j={};for(let X of W){let f=X.id?.trim();if(!f)continue;j[f]=QQ(f,{name:f,maxInputTokens:128000,supportsImages:!0,supportsPromptCache:!0})}return j}async function w_($,J){let Z=`${($Q($.baseUrl)||"https://inference.poolside.ai/v1").replace(/\/+$/,"")}/models`,W=await JQ(Z,{method:"GET",headers:{Authorization:`Bearer ${J}`,accept:"application/json"}});if(!W.ok)throw Error(`Poolside model refresh failed: HTTP ${W.status}`);let X=(await W.json())?.data??[],f={};for(let Y of X){let V=Y.id?.trim();if(!V)continue;let H=Y.supported_features??[],B=Y.supported_sampling_parameters??[],A=Y.input_modalities??[],K=["streaming"];j2(K,"tools",H.includes("tools")),j2(K,"reasoning",H.includes("reasoning")),j2(K,"temperature",B.includes("temperature")),j2(K,"images",A.includes("image"));let G={input:yV(Y.pricing?.prompt),output:yV(Y.pricing?.completion)};f[V]={id:V,name:Y.name??V,description:Y.description,contextWindow:Y.context_length,maxInputTokens:Y.context_length,maxTokens:Y.max_completion_tokens,capabilities:K,pricing:G.input!==void 0||G.output!==void 0?G:void 0,status:"active"}}return f}function S_($){let J=$Q($);if(!J)return"http://localhost:4000";return J.endsWith("/v1")?J.slice(0,-3):J}async function C_($,J){let Z=`${S_($.baseUrl)}/v1/model/info`,W=async(V)=>JQ(Z,{method:"GET",headers:{accept:"application/json",...V}}),j=await W({"x-litellm-api-key":J});if(!j.ok)j=await W({Authorization:`Bearer ${J}`});if(!j.ok)throw Error(`LiteLLM model refresh failed: HTTP ${j.status}`);let f=(await j.json())?.data??[],Y={};for(let V of f){let H=V.model_name?.trim(),A=V.litellm_params?.model?.trim()||H;if(!A)continue;let K=V.model_info,G=QQ(A,{name:H??A,maxTokens:K?.max_output_tokens??K?.max_tokens,maxInputTokens:K?.max_input_tokens??K?.max_tokens,supportsImages:K?.supports_vision,supportsPromptCache:K?.supports_prompt_caching,supportsReasoning:K?.supports_reasoning});if(Y[A]=G,H)Y[H]={...G,id:H,name:H}}return Y}var kV={baseten:P_,hicap:N_,litellm:C_,poolside:w_},E7=new Map,o5=new Map;function y_($,J){return`${$}:${$Q(J.baseUrl)}`}async function E_($,J,Q){let Z=a.MODEL_COLLECTIONS_BY_PROVIDER_ID[$],W=a5(Q.baseUrl,Z?.provider.baseUrl,Z?.provider.modelsSourceUrl);if(!W)return{};let j=J?.cacheTtlMs??hV,X=y_($,Q),f=Date.now(),Y=E7.get(X);if(Y&&Y.expiresAt>f)return Y.data;let V=o5.get(X);if(V)return V;let H=n5(W,$).then((B)=>{let A=Object.fromEntries(B.map((K)=>[K,QQ(K,{name:K})]));return E7.set(X,{data:A,expiresAt:f+j}),A}).finally(()=>{o5.delete(X)});return o5.set(X,H),H}function b_(){E7.clear(),o5.clear()}async function h_($,J){let Q=b7(J);if(!Q)return{};let Z=kV[$];if(!Z)return{};return Z(J,Q)}function k_($,J,Q){if(!Q)return!1;if(!kV[$])return!1;if(J?.loadPrivateOnAuth===!1)return!1;return Boolean(b7(Q))}async function I_($,J,Q){let Z=J?.cacheTtlMs??hV,W=q_($,Q),j=Date.now(),X=y7.get(W);if(X&&X.expiresAt>j)return X.data;let f=s5.get(W);if(f)return f;let Y=h_($,Q).then((V)=>{return y7.set(W,{data:V,expiresAt:j+Z}),V}).finally(()=>{s5.delete(W)});return s5.set(W,Y),Y}async function x_($){return a.fetchModelsDevProviderModels($,globalThis.fetch)}async function R8($={}){let J=$.url??e5,Q=$.cacheTtlMs??L_,Z=Date.now(),W=t5.get(J);if(W&&W.expiresAt>Z)return W.data;let j=U6.get(J);if(j)return j;let X=x_(J).then((f)=>{return t5.set(J,{data:f,expiresAt:Z+Q}),f}).finally(()=>{U6.delete(J)});return U6.set(J,X),X}function h7($){if($){t5.delete($),U6.delete($);return}t5.clear(),U6.clear()}function k7(){y7.clear(),s5.clear()}function g_($){return Object.fromEntries(Object.entries($).map(([J,Q])=>[J,{baseUrl:Q.baseUrl,modelId:Q.modelId,capabilities:bV(Q.capabilities)}]))}var R6=g_(R_());function ZQ($){let J=U_($);if(!J)return;return{baseUrl:J.baseUrl||void 0,modelId:J.modelId,knownModels:J.knownModels,capabilities:bV(J.capabilities)}}async function L6($,J,Q){let Z=ZQ($);if(!Z)return;try{let W=J?.loadLatestOnInit?await R8(J):void 0,j=W?T_($,W):{},X=Q&&k_($,J,Q)?await I_($,J,Q):{},Y=Boolean(a.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl)?Q??{providerId:$,modelId:Z.modelId,baseUrl:Z.baseUrl}:Q,V=Y?await E_($,J,Y).catch(()=>({})):{},H=await O_($,Z.knownModels,j,X,V,Q?.knownModels);return{...Z,knownModels:H}}catch(W){if(J?.failOnError)throw W;return Z}}var z6=u0.BUILT_IN_PROVIDER,I7=u0.BUILT_IN_PROVIDER_IDS,x7=u0.isBuiltInProviderId,L8=u0.normalizeProviderId,_6=N.string().min(1).regex(/^[a-z0-9][a-z0-9-]*$/i),WQ=N.enum(["anthropic","gemini","openai-chat","openai-responses","openai-r1","ai-sdk"]),jQ=N.enum(["anthropic","ai-sdk","ai-sdk-community","openai","openai-compatible","openai-r1","gemini","bedrock","custom","fetch","vertex"]),XQ=N.object({apiKey:N.string().optional(),accessToken:N.string().optional(),refreshToken:N.string().optional(),expiresAt:N.number().int().positive().optional(),accountId:N.string().optional()}),m_=N.enum(["none","low","medium","high","xhigh"]),fQ=N.object({enabled:N.boolean().optional(),effort:m_.optional(),budgetTokens:N.number().int().positive().optional()}),YQ=N.object({accessKey:N.string().optional(),secretKey:N.string().optional(),sessionToken:N.string().optional(),region:N.string().optional(),profile:N.string().optional(),authentication:N.enum(["iam","api-key","apikey","profile"]).optional(),usePromptCache:N.boolean().optional(),useCrossRegionInference:N.boolean().optional(),useGlobalInference:N.boolean().optional(),endpoint:N.string().url().optional(),customModelBaseId:N.string().optional()}),VQ=N.object({projectId:N.string().optional(),region:N.string().optional()}),HQ=N.object({apiVersion:N.string().optional(),useIdentity:N.boolean().optional()}),BQ=N.object({clientId:N.string().optional(),clientSecret:N.string().optional(),tokenUrl:N.string().url().optional(),resourceGroup:N.string().optional(),deploymentId:N.string().optional(),useOrchestrationMode:N.boolean().optional(),api:N.enum(["orchestration","foundation-models"]).optional(),defaultSettings:N.record(N.string(),N.unknown()).optional()}),AQ=N.object({mode:N.enum(["internal","external"]).optional(),usePromptCache:N.boolean().optional()}),KQ=N.object({loadLatestOnInit:N.boolean().optional(),loadPrivateOnAuth:N.boolean().optional(),url:N.string().url().optional(),cacheTtlMs:N.number().int().positive().optional(),failOnError:N.boolean().optional()}),R$=N.object({provider:_6,apiKey:N.string().optional(),auth:XQ.optional(),model:N.string().optional(),protocol:WQ.optional(),client:jQ.optional(),routingProviderId:_6.optional(),maxTokens:N.number().int().positive().optional(),contextWindow:N.number().int().positive().optional(),baseUrl:N.string().url().optional(),headers:N.record(N.string(),N.string()).optional(),timeout:N.number().int().positive().optional(),reasoning:fQ.optional(),aws:YQ.optional(),gcp:VQ.optional(),azure:HQ.optional(),sap:BQ.optional(),oca:AQ.optional(),region:N.string().optional(),apiLine:N.enum(["china","international"]).optional(),capabilities:N.array(N.enum(["reasoning","prompt-cache","streaming","tools","vision","computer-use","oauth","popular"])).optional(),modelCatalog:KQ.optional()});function GQ($){return R$.parse($)}function FQ($){return R$.safeParse($)}function v_($){return $.protocol==="openai-responses"||$.client==="openai"}function d0($,J={}){let Q=$.provider,Z=L8(Q),W=J.includeKnownModels!==!1,j=$.reasoning?.effort||"none",X=j==="none"?void 0:j,f=R6[Z],Y=Object.assign({},...u0.resolveProviderModelCatalogKeys(Z).map((R)=>u0.getGeneratedModelsForProvider(R))),V=Object.keys(Y)[0],H=l2(Z,$),B=$.baseUrl??(Z==="oca"?$.oca?.mode==="internal"?j5:X5:f?.baseUrl),A=$.routingProviderId??(v_($)&&Z!==z6.OPENAI_NATIVE?z6.OPENAI_NATIVE:void 0),K=W?f?.knownModels??(Object.keys(Y).length>0?Y:void 0):void 0,G={providerId:Q,clientType:$.client,routingProviderId:A,modelId:$.model??f?.modelId??V??"default",...W?{knownModels:K}:{},apiKey:H,accessToken:$.auth?.accessToken,refreshToken:$.auth?.refreshToken,accountId:$.auth?.accountId,baseUrl:B,headers:$.headers,timeoutMs:$.timeout,maxOutputTokens:$.maxTokens,maxInputTokens:$.contextWindow,thinking:$.reasoning?.enabled,reasoningEffort:X,thinkingBudgetTokens:$.reasoning?.budgetTokens,region:$.region??$.aws?.region??$.gcp?.region,apiLine:$.apiLine,useCrossRegionInference:$.aws?.useCrossRegionInference,useGlobalInference:$.aws?.useGlobalInference,aws:$.aws?{accessKey:$.aws.accessKey,secretKey:$.aws.secretKey,sessionToken:$.aws.sessionToken,authentication:$.aws.authentication,profile:$.aws.profile,usePromptCache:$.aws.usePromptCache,endpoint:$.aws.endpoint,customModelBaseId:$.aws.customModelBaseId}:void 0,gcp:$.gcp?{projectId:$.gcp.projectId,region:$.gcp.region}:void 0,azure:$.azure,sap:$.sap,oca:$.oca,capabilities:$.capabilities??f?.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(G).filter(([R,D])=>D!==void 0))}function g7($){let J=GQ($);return d0(J)}function m7($){let J=FQ($);if(J.success)return{success:!0,config:d0(J.data)};return{success:!1,error:J.error}}var z8=R$;var DQ=L$.object({settings:R$,updatedAt:L$.string().datetime(),tokenSource:L$.enum(["manual","oauth","migration"]).default("manual")}),_8=L$.object({version:L$.literal(1),lastUsedProvider:L$.string().min(1).optional(),providers:L$.record(L$.string(),DQ)});function z$(){return{version:1,providers:{}}}W1();var uV={};w(uV,{InMemoryWorkspaceManager:()=>T8});import{upsertWorkspaceInfo as l_,WorkspaceManifestSchema as c7}from"@cline/shared";var cV={};w(cV,{normalizeWorkspacePath:()=>m1,generateWorkspaceInfoWithDiagnostics:()=>O6,generateWorkspaceInfo:()=>O8,buildWorkspaceMetadataWithInfo:()=>v7,buildWorkspaceMetadata:()=>T6});import{basename as c_,resolve as u_}from"node:path";import{performance as mV}from"node:perf_hooks";import{processWorkspaceInfo as vV}from"@cline/shared";import d_ from"simple-git";function m1($){return u_($)}async function O8($){return(await O6($)).info}function UQ($){if($ instanceof Error)return{errorType:$.name?.trim()||$.constructor.name||"Error",message:$.message};return{errorType:"Error",message:String($)}}async function O6($){let J=m1($),Q={rootPath:J,hint:c_(J)},Z;try{let W=d_({baseDir:J});if(!await W.checkIsRepo())return{info:Q,vcsType:"none"};try{let X=await W.getRemotes(!0);if(X.length>0){let f=X.map((Y)=>{let V=Y.refs.fetch||Y.refs.push;return`${Y.name}: ${V}`});Q.associatedRemoteUrls=f}}catch(X){Z??=UQ(X)}try{let X=(await W.revparse(["HEAD"])).trim();if(X.length>0)Q.latestGitCommitHash=X}catch(X){Z??=UQ(X)}try{let X=(await W.branch()).current.trim();if(X.length>0)Q.latestGitBranchName=X}catch(X){Z??=UQ(X)}return{info:Q,vcsType:"git",error:Z}}catch(W){return{info:Q,vcsType:"none",error:UQ(W)}}}async function T6($){let J=await O8($);return vV(J)}async function v7($){let J=mV.now(),Q=await O6($),Z=mV.now()-J,W=Q.info;return{workspaceInfo:W,workspaceMetadata:vV(W),durationMs:Z,vcsType:Q.vcsType,initError:Q.error}}class T8{manifest;listeners=new Set;constructor($){this.manifest=c7.parse($??{workspaces:{}})}async addWorkspacePath($){let J=await O8($);return this.manifest=l_(this.manifest,J),this.emit({type:"workspace_added",workspace:J}),J}async switchWorkspace($){let J=m1($),Q=this.manifest.workspaces[J];if(Q)return this.manifest=c7.parse({...this.manifest,currentWorkspacePath:J}),this.emit({type:"workspace_switched",workspace:Q}),Q;let Z=await this.addWorkspacePath(J);return this.manifest=c7.parse({...this.manifest,currentWorkspacePath:Z.rootPath}),this.emit({type:"workspace_switched",workspace:Z}),Z}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}getCurrentWorkspace(){let $=this.manifest.currentWorkspacePath;if(!$)return;return this.manifest.workspaces[$]}getWorkspace($){let J=m1($);return this.manifest.workspaces[J]}listWorkspaces(){return Object.values(this.manifest.workspaces)}getManifest(){return this.manifest}emit($){for(let J of this.listeners)J($)}}O0();import{createHash as p_}from"node:crypto";var dV=new Set,lV=new Set;function r_($){return p_("sha256").update($).digest("hex")}function i_($){if($.vcsTypes&&$.vcsTypes.length>0)return $.vcsTypes;return[$.vcsType==="git"?"git":"none"]}function pV($){if(!$.telemetry)return;let J=r_($.rootPath),Q=$.rootCount??1;if(!dV.has(J))dV.add(J),xJ($.telemetry,{root_count:Q,vcs_types:i_($),init_duration_ms:$.durationMs,feature_flag_enabled:$.featureFlagEnabled??!0,is_remote_workspace:$.isRemoteWorkspace});if($.initError&&!lV.has(J)){lV.add(J);let Z=Error($.initError.message);Z.name=$.initError.errorType||"Error",gJ($.telemetry,Z,{fallback_to_single_root:!0,workspace_count:Q})}}function a_($){return`${$.pluginName??$.pluginPath}: ${$.message}`}function s_($,J,Q){if(J.length>0)for(let j of J)Q?.log(j.message,{severity:"warn"});if($.length===0)return;let Z=$.slice(0,3).map(a_).join("; "),W=$.length>3?`; and ${$.length-3} more`:"";Q?.log(`Some plugins failed to initialize. ${Z}${W}. Use --verbose for more details.`,{severity:"warn"});for(let j of $)Q?.log(`Plugin initialization failed (${j.phase}) for ${j.pluginPath}`,{severity:"warn",stack:j.stack,pluginPath:j.pluginPath,pluginName:j.pluginName})}function o_($,J){let Q=typeof $.thinking==="boolean",Z=typeof $.reasoningEffort==="string";if(!Q&&!Z)return J;return{...J??{},...Q?{enabled:$.thinking}:{},...Z?{effort:$.reasoningEffort}:{}}}function rV($,J){return n_($,J)}function t_($){let J=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;J+=1}return J}function e_($){let J={...$.storedHeaders??{},...$.configHeaders??{}},Q=$.accountId?.trim()||$O($.accessToken);if(J.originator="cline",J.session_id=$.sessionId,J["User-Agent"]=`Cline/${process.env.npm_package_version||"1.0.0"}`,Q)J["ChatGPT-Account-Id"]=Q;return J}function $O($){let J=$?.trim();if(!J)return;let Q=T0(J),Z=Q?.["https://api.openai.com/auth"]?.chatgpt_account_id;if(typeof Z==="string"&&Z.length>0)return Z;let W=Q?.organizations?.[0]?.id;if(typeof W==="string"&&W.length>0)return W;let j=Q?.chatgpt_account_id;if(typeof j==="string"&&j.length>0)return j;return}function JO($,J,Q,Z,W){let j=Q.getProviderSettings($.providerId),X=Z||j?.modelCatalog?{...Z??{},...j?.modelCatalog??{}}:void 0,f=$.providerConfig?.providerId===$.providerId?$.providerConfig:void 0,Y={...j??{},provider:$.providerId,model:$.modelId,apiKey:$.apiKey??j?.apiKey,baseUrl:$.baseUrl??j?.baseUrl,headers:$.providerId==="openai-codex"?e_({sessionId:J,configHeaders:$.headers,storedHeaders:j?.headers,accountId:j?.auth?.accountId,accessToken:$.apiKey??j?.auth?.accessToken??j?.apiKey}):$.headers??j?.headers,reasoning:o_($,j?.reasoning),modelCatalog:X},V={...d0(Y),...f??{}};if($.knownModels)V.knownModels=$.knownModels;if($.extensionContext)V.extensionContext=$.extensionContext;let B=$.fetch??V.fetch??W;if(B)V.fetch=B;return V}async function iV($){let{input:J,sessionId:Q,providerSettingsManager:Z,defaultTelemetry:W,defaultCapabilities:j,defaultToolPolicies:X,defaultFetch:f,onPluginEvent:Y,onTeamEvent:V,createSubAgentLifecycleCallbacks:H,createSpawnTool:B,localRuntime:A,readSessionMetadata:K,writeSessionMetadata:G}=$,R=G$(J.config),{modelCatalogDefaults:D,userInstructionService:U,configExtensions:F,onTeamRestored:O,...T}=A??{},z=Object.keys(T).length>0?T:void 0,{workspaceInfo:L,workspaceMetadata:P,durationMs:S,vcsType:b,initError:u}=await v7(R),t=z?.extensionContext,Q0={...t??{},workspace:{...L,...t?.workspace??{}},session:{...t?.session??{},sessionId:Q},logger:t?.logger??z?.logger,telemetry:t?.telemetry??z?.telemetry??W};pV({telemetry:Q0.telemetry,rootPath:L.rootPath,workspaceInfo:L,rootCount:1,vcsType:b,durationMs:S,initError:u,featureFlagEnabled:!0});let e=U8({cwd:J.config.cwd,workspacePath:R,rootSessionId:Q,logger:z?.logger,workspaceInfo:L}),$1=uY(z?.hooks)?void 0:D8({rootSessionId:Q,workspacePath:R,workspaceInfo:L}),b$=W2([z?.hooks,$1]),r;if(rV(F,"plugins"))try{r=await K8({pluginPaths:z?.pluginPaths,workspacePath:R,cwd:J.config.cwd,onEvent:Y,providerId:J.config.providerId,modelId:J.config.modelId,workspaceInfo:L,session:Q0.session,client:Q0.client,user:Q0.user,logger:Q0.logger,telemetry:Q0.telemetry,automation:Q0.automation}),s_(r.failures,r.warnings,z?.logger)}catch(x2){let QZ=x2 instanceof Error?x2.message:String(x2);z?.logger?.log?.(`plugin loading failed; continuing without plugins (${QZ})`)}let C=W7(e?[e]:void 0,W7(z?.extensions,q5(r?.extensions))),f0=rV(F,"plugins")?$2(r?.pluginPaths??[]):void 0,Y0={...J.config,...z??{},sessionId:Q,hooks:b$,extensions:C,extensionContext:Q0,telemetry:Q0.telemetry},w0=JO(Y0,Q,Z,D,f),k2=W2([Y0.hooks,Y0.checkpoint?.enabled===!0?zV({cwd:Y0.cwd,sessionId:Q,logger:Y0.logger,createCheckpoint:Y0.checkpoint?.createCheckpoint,initialRunCount:t_(J.initialMessages),readSessionMetadata:K,writeSessionMetadata:G}):void 0]),T1={...Y0,providerConfig:w0,workspaceMetadata:P,hooks:k2},Y1=J.toolPolicies??Y0.toolPolicies??X,V4=z0(j,J.capabilities),I2=V4?.requestToolApproval,bJ=V4?.toolExecutors,M1=H?.(T1),hJ=new T8({currentWorkspacePath:L.rootPath,workspaces:{[L.rootPath]:L}});return{effectiveInput:J,config:T1,providerConfig:w0,workspaceMetadata:P,workspaceInfo:L,extensions:C,hooks:k2,toolPolicies:Y1,requestToolApproval:I2,pluginSandboxShutdown:r?.shutdown,runtimeBuilderInput:{config:T1,hooks:k2,extensions:C,onTeamEvent:V,createSpawnTool:B,onTeamRestored:O,onSubAgentEvent:M1?.onSubAgentEvent,onSubAgentStart:M1?.onSubAgentStart,onSubAgentEnd:M1?.onSubAgentEnd,userInstructionService:U,pluginSkillDirectories:f0,configExtensions:F,toolExecutors:bJ,toolPolicies:Y1,workspaceManager:hJ,logger:T1.logger,telemetry:T1.telemetry,requestToolApproval:I2}}}import{existsSync as LQ,mkdirSync as QO,readdirSync as ZO,rmdirSync as WO,rmSync as jO,unlinkSync as XO}from"node:fs";import{dirname as nV,join as RQ}from"node:path";function $0(){return new Date().toISOString()}function M6($){if(!$||!LQ($))return;try{XO($)}catch{}}function fO($){let J=j8($);if(J)return{rootSessionId:J.rootSessionId,fileStem:`${J.agentId}__${J.teamTaskId}`};let Q=J6($);if(Q)return{rootSessionId:Q.rootSessionId,fileStem:Q.agentId};return{rootSessionId:$,fileStem:$}}class u7{ensureSessionsDir;constructor($){this.ensureSessionsDir=$}sessionArtifactsDir($){return RQ(this.ensureSessionsDir(),$)}ensureSessionArtifactsDir($){let J=this.sessionArtifactsDir($);if(!LQ(J))QO(J,{recursive:!0});return J}sessionMessagesPath($){return RQ(this.sessionArtifactsDir($),`${$}.messages.json`)}sessionManifestPath($,J=!1){let Q=J?this.ensureSessionArtifactsDir($):this.sessionArtifactsDir($);return RQ(Q,`${$}.json`)}removeSessionDirIfEmpty($){let J=this.sessionArtifactsDir($),Q=this.ensureSessionsDir();while(J.startsWith(Q)&&J!==Q){if(!LQ(J)){J=nV(J);continue}try{if(ZO(J).length>0)break;WO(J)}catch{break}J=nV(J)}}removeSessionDir($){this.removeDir(this.sessionArtifactsDir($))}removeDir($){if(!LQ($))return;try{jO($,{recursive:!0,force:!0})}catch{}}subagentArtifactPaths($,J,Q){let{rootSessionId:Z,fileStem:W}=fO($),j=this.sessionArtifactsDir(Z);return{messagesPath:RQ(j,`${W}.messages.json`)}}}import{resolveDocumentsExtensionPath as YO}from"@cline/shared/storage";O0();function aV($,J,Q,Z,W){if(Q)vJ($.telemetry,{ulid:J,apiProvider:$.providerId,...W});else mJ($.telemetry,{ulid:J,apiProvider:$.providerId,...W});VO($.telemetry,{workspacePath:Z})}function VO($,J){let Q=YO("Hooks"),Z=D$(J.workspacePath),W=new Map;for(let j of Z){let X=j.hookEventName??"unknown",f=W.get(X)??{global:0,workspace:0};if(j.path===Q||j.path.startsWith(`${Q}/`))f.global+=1;else f.workspace+=1;W.set(X,f)}for(let[j,X]of W.entries())sJ($,j,X.global,X.workspace)}function sV($,J){for(let Q of J.mentions)nJ($,Q,J.matchedFiles.includes(Q)?1:0,"file",!J.matchedFiles.includes(Q));for(let Q of J.matchedFiles)rJ($,"file",Q.length);for(let Q of J.ignoredMentions)iJ($,"file","not_found",Q)}var ZF={};w(ZF,{ProviderSettingsManager:()=>_1});import{chmodSync as jF,existsSync as Sj,mkdirSync as Pb,readFileSync as Nb,writeFileSync as wb}from"node:fs";import{basename as XF,dirname as Cj}from"node:path";import{resolveProviderSettingsPath as Sb}from"@cline/shared/storage";var M={};w(M,{writeHubDiscovery:()=>aQ,writeGlobalSettings:()=>k1,withHubStartupLock:()=>sQ,verifyHubConnection:()=>G1,updateMcpServerOAuthState:()=>H2,updateLocalProvider:()=>u9,uninstallPlugin:()=>Jj,truncateNotificationBody:()=>_J,toggleDisabledTool:()=>T5,toTeamProgressLifecycleEvent:()=>d8,toProviderConfig:()=>d0,toHubStatusUrl:()=>SW,toHubHealthUrl:()=>oQ,toHookConfigFileName:()=>F6,syncPluginMcpServersToSettings:()=>r3,summarizeUsageFromMessages:()=>f8,stopLocalHubServerGracefully:()=>cW,startLocalOAuthServer:()=>J1,startHubWebSocketServer:()=>C2,startHubServer:()=>tK,startClineDeviceAuth:()=>HZ,splitCoreSessionConfig:()=>r6,spawnDetachedHubServerWithRetry:()=>k8,spawnDetachedHubServer:()=>kW,setTelemetryOptOutGlobally:()=>bf,setMcpServerDisabled:()=>Y2,setDisabledTools:()=>uZ,setDisabledPlugin:()=>mf,setAutoUpdateEnabledGlobally:()=>kf,sendHubCommand:()=>oA,saveProviderOAuthCredentials:()=>x$,saveLocalProviderSettings:()=>Vj,saveLocalProviderOAuthCredentials:()=>Kj,sanitizeSessionToken:()=>a$,safeParseSettings:()=>FQ,safeCreateProviderConfig:()=>m7,runSubprocessEvent:()=>i8,runHook:()=>a8,reviveTeamStateDates:()=>E5,restartLocalHubIfIdleAfterStartupTimeout:()=>Q9,resolveWorkspaceHubOwnerContext:()=>IB,resolveWorkflowsConfigSearchPaths:()=>k6,resolveSkillsConfigSearchPaths:()=>b6,resolveSharedHubOwnerContext:()=>E0,resolveSessionBackend:()=>f3,resolveRulesConfigSearchPaths:()=>h6,resolveProviderConfig:()=>L6,resolveProviderApiKeyFromSettings:()=>DZ,resolveProductionHubOwnerContext:()=>n0,resolvePluginSkillDirectoriesFromPaths:()=>$2,resolvePluginConfigSearchPaths:()=>B6,resolveMcpServerRegistrations:()=>A1,resolveLocalClineAuthToken:()=>Fj,resolveHubUrl:()=>K3,resolveHubOwnerContext:()=>l1,resolveHubEndpointOptions:()=>i0,resolveHubBuildId:()=>nQ,resolveHooksConfigSearchPaths:()=>K6,resolveDisabledToolNames:()=>B1,resolveDisabledPluginPaths:()=>r4,resolveDefaultMcpSettingsPath:()=>K0,resolveDefaultHubPort:()=>h8,resolveDefaultHubPathname:()=>hW,resolveDefaultHubHost:()=>bW,resolveCoreSelectedToolIds:()=>h5,resolveCoreDistinctId:()=>b0,resolveCompatibleLocalHubUrl:()=>XJ,resolveClineDir:()=>EB,resolveClineDataDir:()=>R2,resolveAndLoadAgentPlugins:()=>K8,resolveAgentPluginPaths:()=>e$,requestHubShutdown:()=>jJ,requestDesktopToolApproval:()=>u3,removePluginMcpServersFromSettings:()=>wJ,rememberRecoverableLocalHubUrl:()=>P$,registerRemoteConfigSessionBlobUpload:()=>N9,registerMcpServersFromSettingsFile:()=>B2,registerDisposable:()=>Ob,refreshProviderModelsFromSource:()=>Hj,refreshOpenAICodexToken:()=>W5,refreshOcaToken:()=>Y5,refreshClineToken:()=>Q5,readSessionCheckpointHistory:()=>OJ,readRemoteConfigSessionBlobUploadMetadata:()=>b3,readHubDiscovery:()=>G0,readGlobalSettings:()=>M0,readBearerToken:()=>_9,probeHubServer:()=>p1,probeHubConnection:()=>sA,prewarmFileIndex:()=>D5,prewarmDetachedHubServer:()=>eQ,prepareRemoteConfigCoreIntegration:()=>k3,parseWorkflowConfigFromMarkdown:()=>E6,parseUserCommandEnvelope:()=>_b,parseSkillConfigFromMarkdown:()=>C6,parseSettings:()=>GQ,parseRuleConfigFromMarkdown:()=>y6,parseHookEventPayload:()=>n8,parseConfiguredAgentConfig:()=>HJ,normalizeWorkspacePath:()=>m1,normalizeUserInput:()=>zb,normalizeSdkError:()=>Lb,normalizeRuntimeCapabilities:()=>z0,normalizeProviderId:()=>L8,normalizeOAuthProvider:()=>Bj,normalizeHubWebSocketUrl:()=>N$,noopBasicLogger:()=>Rb,migrateLegacyProviderSettings:()=>CJ,mergeRulesForSystemPrompt:()=>w8,mergeAgentHooks:()=>W2,makeTeamTaskSubSessionId:()=>$6,makeSubSessionId:()=>W8,loginOpenAICodex:()=>F4,loginOcaOAuth:()=>R4,loginLocalProvider:()=>Aj,loginClineOAuth:()=>K4,loginAndSaveProviderOAuthCredentials:()=>z4,loginAndSaveLocalProviderOAuthCredentials:()=>Gj,loadOpenTelemetryAdapter:()=>eE,loadMcpSettingsFile:()=>f2,loadLlmsConfigFromFile:()=>Pj,loadConfiguredAgentConfigs:()=>v8,loadAgentPluginsFromPathsWithDiagnostics:()=>t$,loadAgentPluginsFromPaths:()=>m5,loadAgentPluginFromPath:()=>V6,listSessionHistoryFromBackend:()=>qW,listPluginToolsWithDiagnostics:()=>mQ,listPluginTools:()=>l6,listMcpServerOAuthStatuses:()=>u6,listLocalProviders:()=>fj,listHookConfigFiles:()=>D$,isToolDisabledGlobally:()=>If,isTelemetryOptedOutGlobally:()=>O5,isSessionNotFoundError:()=>d1,isRuleEnabled:()=>SQ,isPluginDisabledGlobally:()=>gf,isOAuthProvider:()=>I$,isHubReconnectableTransportError:()=>mW,isHubCommandTimeoutError:()=>J9,isDiscoveryFilePresent:()=>hB,isClineNotSubscribedMessage:()=>jb,isClineNotSubscribedError:()=>Wb,isClineAccountActionRequest:()=>zQ,isBuiltInProviderId:()=>x7,isAutoUpdateEnabledGlobally:()=>hf,identifyAccount:()=>S1,hasMcpSettingsFile:()=>c1,getValidOpenAICodexCredentials:()=>D4,getValidOcaCredentials:()=>L4,getValidClineCredentials:()=>G4,getProviderOAuthCredentialsFromSettings:()=>_4,getProviderConfigFields:()=>Dj,getProviderConfig:()=>ZQ,getProviderAuthStorageId:()=>FZ,getProviderAuthHandler:()=>W0,getPersistedProviderApiKey:()=>l2,getMcpServerOAuthState:()=>V2,getLocalProviderModels:()=>Yj,getLiveModelsCatalog:()=>R8,getFileIndex:()=>b1,getCurrentContextSize:()=>Y7,getCoreHeadlessToolNames:()=>e4,getCoreDefaultEnabledToolIds:()=>b5,getCoreBuiltinToolCatalog:()=>i$,getCoreAcpToolNames:()=>k5,getClinePassSubscriptionUrl:()=>Zb,getClineNotSubscribedMessage:()=>Qb,getClineDefaultSystemPrompt:()=>Xb,generateWorkspaceInfoWithDiagnostics:()=>O6,generateWorkspaceInfo:()=>O8,formatRulesForSystemPrompt:()=>N8,formatProviderOAuthApiKey:()=>UZ,formatDisplayUserInput:()=>Ub,filterExtensionToolRegistrations:()=>q5,filterDisabledTools:()=>I1,filterDisabledPluginPaths:()=>M5,fetchClineRecommendedModels:()=>Mj,executeClineAccountAction:()=>_Q,ensureHubWebSocketServer:()=>O9,ensureHubServer:()=>eK,ensureDetachedHubServer:()=>uB,ensureCustomProvidersLoaded:()=>m9,ensureCompatibleLocalHubUrl:()=>_2,enrichPromptWithMentions:()=>a2,emptyWorkspaceManifest:()=>Gb,emptyStoredProviderSettings:()=>z$,discoverPluginModulePaths:()=>A6,disablePluginMcpServersInSettings:()=>i3,deriveSubsessionStatus:()=>Q6,deleteLocalProvider:()=>d9,defineLlmsConfig:()=>qj,createWorkflowsConfigDefinition:()=>g6,createUserInstructionConfigService:()=>_$,createToolPoliciesWithPreset:()=>R5,createTool:()=>Kb,createTeamName:()=>C9,createSubprocessHooks:()=>B9,createSpawnAgentTool:()=>A$,createSkillsConfigDefinition:()=>I6,createSessionHost:()=>r8,createRuntimeHost:()=>r8,createRulesConfigDefinition:()=>x6,createRemoteConfigSessionMessagesArtifactUploader:()=>h3,createProviderConfig:()=>g7,createOpenTelemetryTelemetryService:()=>zJ,createOAuthClientCallbacks:()=>M8,createMcpTools:()=>E8,createLocalHubScheduleRuntimeHandlers:()=>T9,createLlmsSdk:()=>wj,createInitialAccumulatedUsage:()=>D0,createInMemoryHubOwnerContext:()=>bB,createHubServerUrl:()=>j1,createHubAuthToken:()=>iQ,createHookConfigFileHooks:()=>D6,createHookConfigFileExtension:()=>U8,createHookAuditHooks:()=>D8,createDisabledMcpToolPolicy:()=>d6,createDisabledMcpToolPolicies:()=>gQ,createDelegatedAgentConfigProvider:()=>H$,createDelegatedAgent:()=>B$,createDefaultToolsWithPreset:()=>L5,createDefaultTools:()=>f$,createDefaultMcpServerClientFactory:()=>C8,createDefaultExecutors:()=>s2,createCoreSettingsService:()=>K2,createCoreSessionSnapshot:()=>F1,createContributionRegistry:()=>Ab,createContextCompactionPrepareTurn:()=>N4,createConfiguredTelemetryService:()=>s1,createConfiguredTelemetryHandle:()=>$4,createConfiguredAgentTools:()=>c8,createClineTelemetryServiceMetadata:()=>Bb,createClineTelemetryServiceConfig:()=>Hb,createBuiltinTools:()=>n$,createAgentTeamsTools:()=>r$,createAgentRuntime:()=>qb,createAgentHooksExtension:()=>G8,connectToHub:()=>F9,completeClineDeviceAuth:()=>BZ,clearPrivateModelsCatalogCache:()=>k7,clearLiveModelsCatalogCache:()=>h7,clearHubDiscovery:()=>y0,captureWorkspacePathResolved:()=>nj,captureWorkspaceInitialized:()=>xJ,captureWorkspaceInitError:()=>gJ,captureToolUsage:()=>dJ,captureTokenUsage:()=>cJ,captureTaskRestarted:()=>vJ,captureTaskCreated:()=>mJ,captureTaskCompleted:()=>H4,captureSubagentExecution:()=>A4,captureSkillUsed:()=>lJ,captureSdkError:()=>Vb,captureProviderConfigured:()=>aj,captureProviderApiError:()=>B4,captureModeSwitch:()=>uJ,captureMentionUsed:()=>rJ,captureMentionSearchResults:()=>nJ,captureMentionFailed:()=>iJ,captureHookDiscovery:()=>sJ,captureExtensionActivated:()=>ij,captureDiffEditFailure:()=>pJ,captureConversationTurnEvent:()=>g2,captureCompactionSkipped:()=>tJ,captureCompactionExecuted:()=>oJ,captureAuthSucceeded:()=>N1,captureAuthStarted:()=>P1,captureAuthLoggedOut:()=>e1,captureAuthFailed:()=>w1,captureAgentTeamCreated:()=>aJ,captureAgentCreated:()=>$$,buildWorkspaceMetadata:()=>T6,buildTeamProgressSummary:()=>u8,buildSdkErrorProperties:()=>fb,buildRemoteConfigSessionBlobUploadMetadata:()=>q9,buildDelegatedAgentConfig:()=>l$,buildConfiguredAgentToolName:()=>BJ,buildConfiguredAgentToolDescriptors:()=>AJ,bootstrapAgentTeams:()=>Z8,authorizeMcpServerOAuth:()=>hQ,addLocalProvider:()=>Xj,accumulateUsageTotals:()=>A0,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>S6,UnifiedConfigFileWatcher:()=>X2,ToolPresets:()=>c0,TelemetryService:()=>t8,TelemetryLoggerSink:()=>LJ,TEAM_TOOL_NAMES:()=>Q8,SubprocessSandbox:()=>H8,StoredProviderSettingsSchema:()=>_8,StoredProviderSettingsEntrySchema:()=>DQ,SqliteTeamStore:()=>y2,SqliteSessionStore:()=>U1,SessionVersioningService:()=>y$,SessionVersioningError:()=>k0,SessionSource:()=>U0,SessionNotFoundError:()=>u1,SapSettingsSchema:()=>BQ,SKILLS_CONFIG_DIRECTORY_NAME:()=>w6,SESSION_STATUSES:()=>Z6,SESSION_NOT_FOUND_ERROR_CODE:()=>G2,SDK_ERROR_TELEMETRY_EVENT:()=>Tb,RpcClineAccountService:()=>P6,RemoteRuntimeHost:()=>g8,ReasoningSettingsSchema:()=>fQ,RULES_CONFIG_DIRECTORY_NAME:()=>wQ,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY:()=>P9,ProviderSettingsSchema:()=>R$,ProviderSettingsManager:()=>_1,ProviderProtocolSchema:()=>WQ,ProviderIdSchema:()=>_6,ProviderClientSchema:()=>jQ,OpenTelemetryProvider:()=>e8,OcaSettingsSchema:()=>AQ,OPENAI_COMPATIBLE_PROVIDERS:()=>R6,NodeHubClient:()=>X1,NoOpFeatureFlagsProvider:()=>q2,NativeHubTransportAdapter:()=>PJ,ModelCatalogSettingsSchema:()=>KQ,LocalRuntimeHost:()=>z1,Llms:()=>$b,InMemoryWorkspaceManager:()=>T8,InMemoryMcpManager:()=>A2,HubUIClient:()=>D3,HubTransportError:()=>q0,HubSessionClient:()=>F3,HubServerTransport:()=>Q4,HubScheduleService:()=>o8,HubScheduleCommandService:()=>s8,HubRuntimeHost:()=>r1,HubCommandError:()=>I8,HookEventPayloadSchema:()=>H9,HookEventNameSchema:()=>V9,HookConfigFileName:()=>F8,HOOK_CONFIG_FILE_EVENT_MAP:()=>G6,HOOKS_CONFIG_DIRECTORY_NAME:()=>p5,GlobalSettingsSchema:()=>p4,GcpSettingsSchema:()=>VQ,FileTeamPersistenceStore:()=>i9,FeatureFlagsService:()=>M2,FeatureFlagDefaultValue:()=>Db,FEATURE_FLAGS:()=>Fb,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>e9,DefaultToolNames:()=>F0,DefaultRuntimeBuilder:()=>j4,DefaultLlmsSdk:()=>yJ,DEFAULT_MODELS_CATALOG_URL:()=>e5,DEFAULT_HUB_PORT:()=>yW,DEFAULT_HUB_PATHNAME:()=>EW,DEFAULT_HUB_HOST:()=>CW,CoreSettingsService:()=>O$,CoreSessionService:()=>L1,ContributionRegistry:()=>Yb,ClineNotSubscribedError:()=>Jb,ClineCore:()=>UJ,ClineAccountService:()=>q6,ChatViewStateSchema:()=>Oj,ChatSummarySchema:()=>t9,ChatSessionStatusSchema:()=>a9,ChatSessionConfigSchema:()=>n9,ChatMessageSchema:()=>o9,ChatMessageRoleSchema:()=>s9,CORE_TELEMETRY_EVENTS:()=>x,CORE_BUILD_VERSION:()=>Tj,BrowserWebSocketHubAdapter:()=>qJ,BUILT_IN_PROVIDER_IDS:()=>I7,BUILT_IN_PROVIDER:()=>z6,AzureSettingsSchema:()=>HQ,AwsSettingsSchema:()=>YQ,AuthSettingsSchema:()=>XQ,AgentTeamsRuntime:()=>T2,AgentTeam:()=>p8,Agent:()=>Mb,ALL_DEFAULT_TOOL_NAMES:()=>W$});q(M,Qa);import*as $b from"@cline/llms";import{ClineNotSubscribedError as Jb,getClineNotSubscribedMessage as Qb,getClinePassSubscriptionUrl as Zb,isClineNotSubscribedError as Wb,isClineNotSubscribedMessage as jb}from"@cline/llms";import{buildClineSystemPrompt as Xb,buildSdkErrorProperties as fb,ContributionRegistry as Yb,captureSdkError as Vb,createClineTelemetryServiceConfig as Hb,createClineTelemetryServiceMetadata as Bb,createContributionRegistry as Ab,createTool as Kb,emptyWorkspaceManifest as Gb,FEATURE_FLAGS as Fb,FeatureFlagDefaultValue as Db,formatDisplayUserInput as Ub,noopBasicLogger as Rb,normalizeSdkError as Lb,normalizeUserInput as zb,parseUserCommandEnvelope as _b,registerDisposable as Ob,SDK_ERROR_TELEMETRY_EVENT as Tb}from"@cline/shared";import"@cline/shared/storage";var tV={};w(tV,{isClineAccountActionRequest:()=>zQ,executeClineAccountAction:()=>_Q,RpcClineAccountService:()=>P6,ClineAccountService:()=>q6});function HO($){if(typeof $!=="object"||$===null||!("error"in $))return;let J=$.error;return typeof J==="string"&&J.trim()?J:void 0}function oV($,J,Q){let Z=HO(Q);if(Z)return Z;let W=J.trim();if(W){let j=W.length>200?`${W.slice(0,200)}...`:W;return`Cline account request failed with status ${$}: ${j}`}return`Cline account request failed with status ${$}`}class q6{apiBaseUrl;getAuthTokenFn;getCurrentUserIdFn;getOrganizationMemberIdFn;getHeadersFn;requestTimeoutMs;fetchImpl;constructor($){let J=$.apiBaseUrl.trim();if(!J)throw Error("apiBaseUrl is required");this.apiBaseUrl=J,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 J=await this.resolveUserId($);return this.request(`/api/v1/users/${encodeURIComponent(J)}/balance`)}async fetchUsageTransactions($){let J=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(J)}/usages`)).items??[]}async fetchPaymentTransactions($){let J=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(J)}/payments`)).paymentTransactions??[]}async fetchUserOrganizations(){return(await this.fetchMe()).organizations??[]}async fetchOrganization($){let J=$.trim();if(!J)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(J)}`)}async fetchOrganizationBalance($){let J=$.trim();if(!J)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(J)}/balance`)}async fetchOrganizationUsageTransactions($){let J=$.organizationId.trim();if(!J)throw Error("organizationId is required");let Q=await this.resolveOrganizationMemberId(J,$.memberId);return(await this.request(`/api/v1/organizations/${encodeURIComponent(J)}/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 J=$?.trim();if(J)return J;let Z=(this.getCurrentUserIdFn?await this.getCurrentUserIdFn():void 0)?.trim();if(Z)return Z;let W=await this.fetchMe();if(!W.id?.trim())throw Error("Unable to resolve current user id");return W.id}async resolveOrganizationMemberId($,J){let Q=J?.trim();if(Q)return Q;let W=(this.getOrganizationMemberIdFn?await this.getOrganizationMemberIdFn($):void 0)?.trim();if(W)return W;let X=(await this.fetchUserOrganizations()).find((f)=>f.organizationId===$)?.memberId;if(!X?.trim())throw Error(`Unable to resolve memberId for organization ${$}`);return X}async request($,J){let Q=(await this.getAuthTokenFn())?.trim();if(!Q)throw Error("No Cline account auth token found");let Z=this.getHeadersFn?await this.getHeadersFn():{},W=new AbortController,j=setTimeout(()=>W.abort(),this.requestTimeoutMs);try{let X=await this.fetchImpl(new URL($,this.apiBaseUrl),{method:J?.method??"GET",headers:{Authorization:`Bearer ${Q}`,"Content-Type":"application/json",...Z??{}},body:J?.body!==void 0?JSON.stringify(J.body):void 0,signal:W.signal});if(X.status===204||J?.expectNoContent){if(!X.ok)throw Error(`Cline account request failed with status ${X.status}`);return}let f=await X.text(),Y;if(f.trim())try{Y=JSON.parse(f)}catch{if(!X.ok)throw Error(oV(X.status,f,void 0));throw Error("Cline account response was not valid JSON")}if(!X.ok)throw Error(oV(X.status,f,Y));if(typeof Y==="object"&&Y!==null){let V=Y;if(typeof V.success==="boolean"){if(!V.success)throw Error(V.error||"Cline account request failed");if(V.data!==void 0)return V.data}}if(Y===void 0||Y===null)throw Error("Cline account response payload was empty");return Y}finally{clearTimeout(j)}}}function zQ($){return $.action==="clineAccount"}async function _Q($,J){switch($.operation){case"fetchMe":return J.fetchMe();case"fetchBalance":return J.fetchBalance($.userId);case"fetchUsageTransactions":return J.fetchUsageTransactions($.userId);case"fetchPaymentTransactions":return J.fetchPaymentTransactions($.userId);case"fetchUserOrganizations":return J.fetchUserOrganizations();case"fetchOrganizationBalance":return J.fetchOrganizationBalance($.organizationId);case"fetchOrganizationUsageTransactions":return J.fetchOrganizationUsageTransactions({organizationId:$.organizationId,memberId:$.memberId});case"switchAccount":return await J.switchAccount($.organizationId),{updated:!0};case"fetchFeaturebaseToken":return J.fetchFeaturebaseToken?.();default:throw Error(`Unsupported Cline account operation: ${String($)}`)}}class P6{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 J=$.trim();if(!J)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationBalance",organizationId:J})}async fetchOrganizationUsageTransactions($){let J=$.organizationId.trim();if(!J)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationUsageTransactions",organizationId:J,...$.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 eV={};w(eV,{createOAuthClientCallbacks:()=>M8});function M8($){return{onAuth:({url:J,instructions:Q})=>{if($.onOutput?.(Q??"Complete sign-in in your browser."),$.openUrl)try{Promise.resolve($.openUrl(J)).catch((Z)=>{$.onOpenUrlError?.({url:J,error:Z})})}catch(Z){$.onOpenUrlError?.({url:J,error:Z})}$.onOutput?.(J)},onPrompt:$.onPrompt,onServerListening:$.onServerListening,onServerClose:$.onServerClose}}var cA={};w(cA,{ClineCore:()=>UJ});function $H($){if($===!0)return{};if(!$)return;return $}function JH($){if($==="user")return"global";return $}class d7{getService;constructor($){this.getService=$}async start(){await this.getService().start()}async stop(){await this.getService().stop()}async reconcileNow(){await this.getService().reconcileNow()}ingestEvent($){let J=this.getService().ingestEvent($);return{event:J.event,duplicate:J.duplicate,matchedSpecIds:J.matchedSpecs.map((Q)=>Q.specId),queuedRuns:J.queuedRuns,suppressions:J.suppressions}}listEvents($){return this.getService().listEventLogs($)}getEvent($){return this.getService().getEventLog($)}listSpecs($){return this.getService().listSpecs($)}listRuns($){return this.getService().listRuns($)}}function QH($){let{host:J}=$;return{async startSession(Q){let Z=(Q.cwd?.trim()||Q.workspaceRoot).trim(),W=await J.startSession({source:Q.source?.trim()||U0.CLI,interactive:!1,config:{providerId:L8(Q.provider),modelId:Q.model,apiKey:Q.apiKey?.trim()||void 0,cwd:Z,workspaceRoot:Q.workspaceRoot,systemPrompt:Q.systemPrompt??"",mode:KO(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:W.sessionId,startResult:{sessionId:W.sessionId,manifestPath:W.manifestPath,messagesPath:W.messagesPath}}},async sendSession(Q,Z){let W=await J.runTurn({sessionId:Q,prompt:Z.prompt,userImages:Z.attachments?.userImages,userFiles:Z.attachments?.userFiles?.map((j)=>j.content),delivery:Z.delivery});if(!W)throw Error("ClineCore automation runtime returned no result");return{result:AO(W)}},async abortSession(Q){return await J.abort(Q,Error("ClineCore automation abort")),{applied:!0}},async stopSession(Q){return await J.stopSession(Q),{applied:!0}}}}function OQ($){let J=BO($.automationService,$.automation),Q=$.context?.client??($.clientName?{name:$.clientName}:void 0),Z=$.context?.user??($.distinctId?{distinctId:$.distinctId}:void 0),W=$.context?.logger??$.logger,j=$.context?.telemetry??$.telemetry;if(!J&&!Q&&!Z&&!W&&!j)return $.context;return{...$.context??{},...Q?{client:Q}:{},...Z?{user:Z}:{},...W?{logger:W}:{},...j?{telemetry:j}:{},...J?{automation:J}:{}}}function BO($,J){if(!$)return;return{ingestEvent:(Q)=>{J.ingestEvent(Q)}}}function AO($){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((J)=>({name:J.name,input:J.input,output:J.output,error:J.error,durationMs:J.durationMs}))}}function KO($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}var rH={};w(rH,{createCoreSettingsService:()=>K2,CoreSettingsService:()=>O$});import{existsSync as vQ}from"node:fs";import{basename as dH,isAbsolute as vT,relative as cT}from"node:path";var UH={};w(UH,{resolveWorkflowsConfigSearchPaths:()=>k6,resolveSkillsConfigSearchPaths:()=>b6,resolveRulesConfigSearchPaths:()=>h6,parseWorkflowConfigFromMarkdown:()=>E6,parseSkillConfigFromMarkdown:()=>C6,parseRuleConfigFromMarkdown:()=>y6,createWorkflowsConfigDefinition:()=>g6,createUserInstructionConfigService:()=>_$,createSkillsConfigDefinition:()=>I6,createRulesConfigDefinition:()=>x6,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>S6,UnifiedConfigFileWatcher:()=>X2,SKILLS_CONFIG_DIRECTORY_NAME:()=>w6,RULES_CONFIG_DIRECTORY_NAME:()=>wQ});import{createHash as GO}from"node:crypto";import{watch as FO}from"node:fs";import{readdir as DO,readFile as UO}from"node:fs/promises";import{join as RO}from"node:path";function LO($){return GO("sha1").update($).digest("hex")}function jH($){return Boolean($&&typeof $==="object"&&"code"in $)}function ZH($){return jH($)&&$.code==="ENOENT"}function WH($){return jH($)&&($.code==="EACCES"||$.code==="EPERM")}class X2{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($,J){if($.length===0)throw Error("UnifiedConfigFileWatcher requires at least one definition.");this.definitions=$,this.debounceMs=J?.debounceMs??75,this.emitParseErrors=J?.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 Z of Q.directories){let W=this.baseTypesByDirectory.get(Z);if(W)W.add(Q.type);else this.baseTypesByDirectory.set(Z,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 J=this.definitionsByType.get($);if(!J)throw Error(`Unknown unified config type '${$}'.`);await this.enqueueRefresh(async()=>{await this.refreshTypeInternal(J)})}getSnapshot($){let J=this.recordsByType.get($);return new Map([...J?.entries()??[]].map(([Q,Z])=>[Q,{...Z}]))}getAllSnapshots(){let $=new Map;for(let[J,Q]of this.recordsByType.entries())$.set(J,new Map([...Q.entries()].map(([Z,W])=>[Z,{...W}])));return $}emit($){for(let J of this.listeners)J($)}enqueueRefresh($){return this.refreshQueue=this.refreshQueue.then($,$),this.refreshQueue}startDirectoryWatchers(){this.syncDirectoryWatchers()}syncDirectoryWatchers(){let $=this.buildDesiredTypesByDirectory();for(let[J,Q]of this.watchersByDirectory.entries()){if($.has(J))continue;Q.close(),this.watchersByDirectory.delete(J)}this.watchedTypesByDirectory=$;for(let J of $.keys()){if(this.watchersByDirectory.has(J))continue;try{let Q=FO(J,()=>{let Z=this.watchedTypesByDirectory.get(J);if(!Z)return;for(let W of Z)this.pendingTypes.add(W);this.scheduleFlush()});this.watchersByDirectory.set(J,Q),Q.on("error",(Z)=>{let W=this.watchedTypesByDirectory.get(J);if(!W)return;for(let j of W)this.emit({kind:"error",type:j,error:Z,filePath:J})})}catch(Q){if(!ZH(Q)&&!WH(Q)){let Z=$.get(J);if(!Z)continue;for(let W of Z)this.emit({kind:"error",type:W,error:Q,filePath:J})}}}}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 J of $){let Q=this.definitionsByType.get(J);if(!Q)continue;await this.refreshTypeInternal(Q)}})},this.debounceMs)}async refreshTypeInternal($){let{records:J,discoveredDirectories:Q}=await this.loadDefinition($),Z=this.recordsByType.get($.type)??new Map;for(let[W,j]of Z.entries()){if(J.has(W))continue;this.emit({kind:"remove",type:$.type,id:W,filePath:j.filePath})}for(let[W,j]of J.entries()){let X=Z.get(W);if(X&&X.filePath===j.filePath&&X.fingerprint===j.fingerprint)continue;this.emit({kind:"upsert",record:{type:j.type,id:W,item:j.item,filePath:j.filePath}})}if(this.recordsByType.set($.type,J),this.discoveredDirectoriesByType.set($.type,Q),this.started)this.syncDirectoryWatchers()}async loadDefinition($){let J=new Map,Q=new Set;for(let Z of $.directories){Q.add(Z);let W=$.discoverFiles?await $.discoverFiles(Z):await this.readDirectoryFileCandidates(Z);for(let j of W){let{fileName:X,filePath:f}=j;if(Q.add(j.directoryPath),$.includeFile&&!$.includeFile(X,f))continue;try{let Y=await UO(f,"utf8"),V={type:$.type,directoryPath:j.directoryPath,fileName:X,filePath:f,content:Y},H=$.parseFile(V),B=$.resolveId(H,V).trim();if(!B)continue;J.set(B,{type:$.type,id:B,item:H,filePath:f,fingerprint:LO(Y)})}catch(Y){if(this.emitParseErrors)this.emit({kind:"error",type:$.type,error:Y,filePath:f})}}}return{records:J,discoveredDirectories:Q}}buildDesiredTypesByDirectory(){let $=new Map;for(let[J,Q]of this.baseTypesByDirectory.entries())$.set(J,new Set(Q));for(let[J,Q]of this.discoveredDirectoriesByType.entries())for(let Z of Q){let W=$.get(Z);if(W)W.add(J);else $.set(Z,new Set([J]))}return $}async readDirectoryFileCandidates($){try{return(await DO($,{withFileTypes:!0})).filter((Q)=>Q.isFile()).map((Q)=>({directoryPath:$,fileName:Q.name,filePath:RO($,Q.name)})).sort((Q,Z)=>Q.fileName.localeCompare(Z.fileName))}catch(J){if(ZH(J)||WH(J))return[];throw J}}}import{readdir as p7,readFile as zO,stat as l7}from"node:fs/promises";import{basename as v1,dirname as _O,extname as MQ,join as C0,resolve as N6}from"node:path";import{AGENTS_RULES_FILE_NAME as XH,RULES_CONFIG_DIRECTORY_NAME as wQ,resolveGlobalAgentsRulesPath as OO,resolveRulesConfigSearchPaths as TO,resolveSkillsConfigSearchPaths as MO,resolveWorkflowsConfigSearchPaths as qO,SKILLS_CONFIG_DIRECTORY_NAME as w6,WORKFLOWS_CONFIG_DIRECTORY_NAME as S6}from"@cline/shared/storage";import PO from"yaml";var TQ="SKILL.md",NO="managed.json",wO=new Set([".md",".markdown",".txt"]);function r7($){return $.trim().toLowerCase()}function q8($){let J=$;return J?.code==="ENOENT"||J?.code==="EACCES"||J?.code==="EPERM"||J?.code==="ELOOP"}function qQ($){return wO.has(MQ($).toLowerCase())}function fH($){let J=[],Q=new Set;for(let Z of $){let W=N6(Z);if(Q.has(W))continue;Q.add(W),J.push(Z)}return J}function SO($){let J=[...$?.directories??b6($?.workspacePath)];if($?.pluginSkillDirectories)J.push(...$.pluginSkillDirectories);else if($?.includePluginSkills)J.push(...RV({pluginPaths:$.pluginPaths,workspacePath:$.workspacePath,cwd:$.cwd??$.workspacePath}));return fH(J)}async function i7($){try{let J=await p7($,{withFileTypes:!0}),Q=[];for(let Z of J){if(!Z.isDirectory())continue;let W=C0($,Z.name),j=C0(W,NO);try{let X=await zO(j,"utf8"),f=JSON.parse(X);if(f&&typeof f==="object")Q.push(W)}catch(X){if(q8(X))continue;if(X?.name==="SyntaxError")continue;throw X}}return Q.sort((Z,W)=>Z.localeCompare(W))}catch(J){if(q8(J))return[];throw J}}function n7($){let J=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,Q=$.match(J);if(!Q)return{data:{},body:$,hadFrontmatter:!1};let[,Z,W]=Q;try{let j=PO.parse(Z);return{data:j&&typeof j==="object"&&!Array.isArray(j)?j:{},body:W,hadFrontmatter:!0}}catch(j){let X=j instanceof Error?j.message:String(j);return{data:{},body:$,hadFrontmatter:!0,parseError:X}}}function PQ($,J,Q){if($===void 0||$===null){if(Q)throw Error(`Missing required frontmatter field '${J}'.`);return}if(typeof $!=="string")throw Error(`Frontmatter field '${J}' must be a string.`);let Z=$.trim();if(!Z&&Q)throw Error(`Frontmatter field '${J}' cannot be empty.`);return Z||void 0}function P8($,J){if($===void 0||$===null)return;if(typeof $!=="boolean")throw Error(`Frontmatter field '${J}' must be a boolean.`);return $}function CO($,J){if(v1($.filePath).toLowerCase()!==XH.toLowerCase())return v1($.filePath,MQ($.filePath));if(J&&N6($.filePath)===N6(J,XH))return"Workspace AGENTS.md";if(N6($.filePath)===N6(OO()))return"Global AGENTS.md";return v1($.filePath,MQ($.filePath))}function C6($,J){let{data:Q,body:Z,parseError:W}=n7($);if(W)throw Error(`Failed to parse YAML frontmatter: ${W}`);let j=Z.trim();if(!j)throw Error("Missing instructions body in skill file.");let f=PQ(Q.name,"name",!1)??J.trim();if(!f)throw Error("Missing skill name.");return{name:f,description:PQ(Q.description,"description",!1),disabled:P8(Q.disabled,"disabled")??(P8(Q.enabled,"enabled")===!1?!0:void 0),instructions:j,frontmatter:Q}}function y6($,J){let{data:Q,body:Z,parseError:W}=n7($);if(W)throw Error(`Failed to parse YAML frontmatter: ${W}`);let j=Z.trim();if(!j)throw Error("Missing instructions body in rule file.");let X=PQ(Q.name,"name",!1)??J.trim();if(!X)throw Error("Missing rule name.");return{name:X,disabled:P8(Q.disabled,"disabled")??(P8(Q.enabled,"enabled")===!1?!0:void 0),instructions:j,frontmatter:Q}}function E6($,J){let{data:Q,body:Z,parseError:W}=n7($);if(W)throw Error(`Failed to parse YAML frontmatter: ${W}`);let j=Z.trim();if(!j)throw Error("Missing instructions body in workflow file.");let X=PQ(Q.name,"name",!1)??J.trim();if(!X)throw Error("Missing workflow name.");return{name:X,disabled:P8(Q.disabled,"disabled")??(P8(Q.enabled,"enabled")===!1?!0:void 0),instructions:j,frontmatter:Q}}function b6($){return MO($)}function h6($){return TO($)}function k6($){return qO($)}async function YH($){if(v1($)===".cline"){let J=await i7($);return(await Promise.all(J.map((Z)=>YH(C0(Z,w6))))).flat()}try{let J=await p7($,{withFileTypes:!0}),Q=[];for(let Z of J){if(Z.isFile()&&Z.name===TQ){Q.push({directoryPath:$,fileName:Z.name,filePath:C0($,Z.name)});continue}let W=C0($,Z.name);if(Z.isDirectory()||Z.isSymbolicLink()&&await l7(W).then((X)=>X.isDirectory()).catch((X)=>{if(q8(X))return!1;throw X}))Q.push({directoryPath:W,fileName:TQ,filePath:C0(W,TQ)})}return Q}catch(J){if(q8(J))return[];throw J}}async function NQ($){if(v1($)===".cline"){let J=await i7($);return(await Promise.all(J.map((Z)=>NQ(C0(Z,"rules.md"))))).flat()}try{if((await l7($)).isFile())return[{directoryPath:_O($),fileName:v1($),filePath:$}]}catch(J){if(!q8(J))throw J}try{let Q=(await p7($,{withFileTypes:!0})).filter((W)=>W.isFile()&&qQ(W.name)).map((W)=>({directoryPath:$,fileName:W.name,filePath:C0($,W.name)})),Z=C0($,"AGENTS.md");try{if((await l7(Z)).isFile()){if(!Q.some((X)=>X.fileName==="AGENTS.md"))Q.push({directoryPath:$,fileName:"AGENTS.md",filePath:Z})}}catch{}return Q}catch(J){if(q8(J))return[];throw J}}async function yO($){if(v1($)===".cline"){let J=await i7($);return(await Promise.all(J.map((Z)=>NQ(C0(Z,S6))))).flat()}return NQ($)}function I6($){let J=SO($),Q=$?.workspacePath?C0($.workspacePath,".cline"):void 0;return{type:"skill",directories:Q?fH([...J,Q]):J,discoverFiles:YH,includeFile:(Z)=>Z===TQ,parseFile:(Z)=>C6(Z.content,v1(Z.directoryPath)),resolveId:(Z)=>r7(Z.name)}}function x6($){let J=$?.directories??h6($?.workspacePath),Q=$?.workspacePath?C0($.workspacePath,".cline"):void 0;return{type:"rule",directories:Q?[...J,Q]:J,discoverFiles:NQ,includeFile:(Z,W)=>Z===".clinerules"||qQ(Z)||qQ(W),parseFile:(Z)=>y6(Z.content,CO(Z,$?.workspacePath)),resolveId:(Z)=>r7(Z.name)}}function g6($){let J=$?.directories??k6($?.workspacePath),Q=$?.workspacePath?C0($.workspacePath,".cline"):void 0;return{type:"workflow",directories:Q?[...J,Q]:J,discoverFiles:yO,includeFile:(Z)=>qQ(Z),parseFile:(Z)=>E6(Z.content,v1(Z.filePath,MQ(Z.filePath))),resolveId:(Z)=>r7(Z.name)}}function VH($){let J=[I6($?.skills),x6($?.rules),g6($?.workflows)];return new X2(J,{debounceMs:$?.debounceMs,emitParseErrors:$?.emitParseErrors})}import{truncateSplit as HH}from"@cline/shared";function EO($,J){if($.description?.trim())return HH($.description,".");if(J==="workflow")return;return HH($.instructions,".")}function bO($){return $.disabled!==!0}function BH($,J){return[...$.getSnapshot(J).entries()].map(([Q,Z])=>({id:Q,record:Z})).filter(({record:Q})=>bO(Q.item)).map(({id:Q,record:Z})=>({id:Q,name:Z.item.name,instructions:Z.item.instructions,description:EO(Z.item,J),kind:J})).sort((Q,Z)=>Q.name.localeCompare(Z.name))}function m6($){let J=new Map;for(let Q of[...BH($,"workflow"),...BH($,"skill")])if(!J.has(Q.name))J.set(Q.name,Q);return[...J.values()].sort((Q,Z)=>Q.name.localeCompare(Z.name))}function AH($,J){if(!$.startsWith("/")||$.length<2)return $;let Q=$.match(/^\/(\S+)/);if(!Q)return $;let Z=Q[1];if(!Z)return $;let W=Z.length+1,j=$.slice(W),X=m6(J).find((f)=>f.name===Z);return X?`${X.instructions}${j}`:$}var GH={};w(GH,{mergeRulesForSystemPrompt:()=>w8,loadRulesForSystemPromptFromWatcher:()=>a7,listEnabledRulesFromWatcher:()=>KH,isRuleEnabled:()=>SQ,formatRulesForSystemPrompt:()=>N8});function SQ($){return $.disabled!==!0}function N8($){if($.length===0)return"";return`
|
|
205
205
|
|
|
206
206
|
# Rules
|
|
207
207
|
${$.map((Q)=>`## ${Q.name}
|
|
@@ -209,7 +209,7 @@ ${Q.instructions}`).join(`
|
|
|
209
209
|
|
|
210
210
|
`)}`}function w8($,J){let Q=$?.trim(),Z=J?.trim();if(Q&&Z)return`${Q}
|
|
211
211
|
|
|
212
|
-
${Z}`;return Q||Z||void 0}function KH($){return[...$.getSnapshot("rule").values()].map((Q)=>Q.item).filter(
|
|
212
|
+
${Z}`;return Q||Z||void 0}function KH($){return[...$.getSnapshot("rule").values()].map((Q)=>Q.item).filter(SQ).sort((Q,Z)=>Q.name.localeCompare(Z.name))}function a7($){return N8(KH($))}function CQ($){return $.trim().replace(/^\/+/,"").toLowerCase()}function hO($){if(!$||$.length===0)return;let J=$.map(CQ).filter((Q)=>Q.length>0);return J.length>0?new Set(J):void 0}function kO($,J,Q){if(!Q)return!0;let Z=CQ($),W=CQ(J),j=Z.includes(":")?Z.split(":").at(-1)??Z:Z,X=W.includes(":")?W.split(":").at(-1)??W:W;return Q.has(Z)||Q.has(W)||Q.has(j)||Q.has(X)}function v6($,J){let Q=hO(J);return[...$.getSnapshot("skill").entries()].map(([W,j])=>{let X=j.item;return{id:W,name:X.name.trim(),description:X.description?.trim(),disabled:X.disabled===!0,skill:X}}).filter((W)=>kO(W.id,W.name,Q))}function IO($,J){return v6($,J).filter((Q)=>!Q.disabled).map((Q)=>Q.name.trim()).filter((Q)=>Q.length>0).sort((Q,Z)=>Q.localeCompare(Z))}function xO($,J,Q){let Z=CQ(J);if(!Z)return{error:"Missing skill name."};let W=v6($,Q),j=W.find((H)=>H.id===Z);if(j){let{skill:H}=j;if(H.disabled===!0)return{error:`Skill "${H.name}" is configured but disabled.`};return{id:j.id,skill:H}}let X=Z.includes(":")?Z.split(":").at(-1)??Z:Z,f=W.filter(({id:H})=>{if(H===X)return!0;return H.endsWith(`:${X}`)}),Y=f.filter(({skill:H})=>H.disabled!==!0);if(Y.length===1){let{id:H,skill:B}=Y[0];return{id:H,skill:B}}if(Y.length>1)return{error:`Skill "${J}" is ambiguous. Use one of: ${Y.map(({id:H})=>H).join(", ")}`};if(f.length===1){let{skill:H}=f[0];return{error:`Skill "${H.name}" is configured but disabled.`}}if(f.length>1)return{error:`Skill "${J}" is ambiguous, and all matches are disabled: ${f.map(({id:H})=>H).join(", ")}`};let V=IO($,Q);return{error:V.length>0?`Skill "${J}" not found. Available skills: ${V.join(", ")}`:"No skills are currently available."}}function s7($,J=Promise.resolve(),Q){let Z=new Set,W=async(j,X)=>{await J;let f=xO($,j,Q);if("error"in f)return f.error;let{id:Y,skill:V}=f;if(Z.has(Y))return`Skill "${V.name}" is already running.`;Z.add(Y);try{let H=X?.trim(),B=H?`
|
|
213
213
|
<command-args>${H}</command-args>`:"",A=V.description?.trim()?`Description: ${V.description.trim()}
|
|
214
214
|
|
|
215
215
|
`:"";return`<command-name>${V.name}</command-name>${B}
|
|
@@ -220,13 +220,13 @@ ${A}${V.instructions}
|
|
|
220
220
|
${X}`:W.instructions}})}}}class DH{watcher;ready;stopped=!1;constructor($){this.watcher=VH($)}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(([J,Q])=>({type:$,id:J,filePath:Q.filePath,item:Q.item}))}listRuntimeCommands(){return m6(this.watcher)}resolveRuntimeSlashCommand($){return AH($,this.watcher)}hasConfiguredSkills($){return v6(this.watcher,$).some((J)=>!J.disabled)}createSkillsExecutor($){return s7(this.watcher,(this.ready??Promise.resolve()).catch(()=>{}),$)}createExtension($){return FH({...$,watcher:this.watcher,watcherReady:(this.ready??Promise.resolve()).catch(()=>{})})}}function _$($){return new DH($)}import{readFile as gO,writeFile as mO}from"node:fs/promises";import LH from"yaml";function vO($){let J=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,Q=$.match(J);if(!Q)return{data:{},body:$,hadFrontmatter:!1};let[,Z,W]=Q,j=LH.parse(Z);return{data:j&&typeof j==="object"&&!Array.isArray(j)?j:{},body:W,hadFrontmatter:!0}}function RH($,J){return`---
|
|
221
221
|
${LH.stringify($).trimEnd()}
|
|
222
222
|
---
|
|
223
|
-
${J}`}function cO($,J){let{data:Q,body:Z,hadFrontmatter:W}=vO($);if(!W&&J)return $;if(J){if(delete Q.disabled,Q.enabled===!1)delete Q.enabled;if(Object.keys(Q).length===0)return Z;return RH(Q,Z)}return Q.disabled=!0,RH(Q,Z)}async function zH({filePath:$,enabled:J}){let Q=await gO($,"utf8"),Z=cO(Q,J);return await mO($,Z),{filePath:$,enabled:J,disabled:!J}}var mH={};w(mH,{updateMcpServerOAuthState:()=>H2,setMcpServerDisabled:()=>Y2,resolvePluginMcpServerRegistrations:()=>
|
|
223
|
+
${J}`}function cO($,J){let{data:Q,body:Z,hadFrontmatter:W}=vO($);if(!W&&J)return $;if(J){if(delete Q.disabled,Q.enabled===!1)delete Q.enabled;if(Object.keys(Q).length===0)return Z;return RH(Q,Z)}return Q.disabled=!0,RH(Q,Z)}async function zH({filePath:$,enabled:J}){let Q=await gO($,"utf8"),Z=cO(Q,J);return await mO($,Z),{filePath:$,enabled:J,disabled:!J}}var mH={};w(mH,{updateMcpServerOAuthState:()=>H2,setMcpServerDisabled:()=>Y2,resolvePluginMcpServerRegistrations:()=>IQ,resolveMcpServerRegistrations:()=>A1,resolveDefaultMcpSettingsPath:()=>K0,registerMcpServersFromSettingsFile:()=>B2,normalizePluginMcpServerRegistration:()=>QW,loadMcpSettingsFile:()=>f2,listMcpServerOAuthStatuses:()=>u6,hasMcpSettingsFile:()=>c1,getMcpServerOAuthState:()=>V2,createMcpTools:()=>E8,createDisabledMcpToolPolicy:()=>d6,createDisabledMcpToolPolicies:()=>gQ,createDefaultMcpServerClientFactory:()=>C8,authorizeMcpServerOAuth:()=>hQ,InMemoryMcpManager:()=>A2});import{spawn as GT}from"node:child_process";import{StringDecoder as bH}from"node:string_decoder";import{UnauthorizedError as SH}from"@modelcontextprotocol/sdk/client/auth.js";import{Client as FT}from"@modelcontextprotocol/sdk/client/index.js";import{randomUUID as WT}from"node:crypto";import{UnauthorizedError as jT}from"@modelcontextprotocol/sdk/client/auth.js";import{Client as XT}from"@modelcontextprotocol/sdk/client/index.js";import{SSEClientTransport as fT}from"@modelcontextprotocol/sdk/client/sse.js";import{StreamableHTTPClientTransport as YT}from"@modelcontextprotocol/sdk/client/streamableHttp.js";yQ();var VT="/mcp/oauth/callback",HT=[1456,1457,1458],BT=300000;function AT($){if($ instanceof Error){let J=$.message.trim();if(J.length>0)return J}return String($)}function KT($){return{client_name:"Cline",redirect_uris:[$],grant_types:["authorization_code","refresh_token"],response_types:["code"],token_endpoint_auth_method:"none"}}function bQ($){let J={};try{J=V2($.serverName,{filePath:$.settingsPath})??{}}catch{J={}}let Q,Z,W=async(X)=>{let f=S8(X(J))??{};try{J=H2($.serverName,()=>f,{filePath:$.settingsPath})}catch{J=f}};return{provider:{get redirectUrl(){return J.redirectUrl??$.redirectUrl},get clientMetadata(){return KT(J.redirectUrl??$.redirectUrl)},state:()=>{return Z=WT(),Z},clientInformation:()=>J.clientInformation,saveClientInformation:async(X)=>{await W((f)=>({...f,clientInformation:X,redirectUrl:$.redirectUrl,lastError:void 0}))},tokens:()=>J.tokens,saveTokens:async(X)=>{await W((f)=>({...f,tokens:X,redirectUrl:$.redirectUrl,lastError:void 0,lastAuthenticatedAt:Date.now()}))},redirectToAuthorization:async(X)=>{Q=X.toString(),await $.onAuthorizationUrl?.(Q)},saveCodeVerifier:async(X)=>{await W((f)=>({...f,codeVerifier:X,redirectUrl:$.redirectUrl}))},codeVerifier:()=>{if(!J.codeVerifier)throw Error(`Missing OAuth code verifier for MCP server "${$.serverName}".`);return J.codeVerifier},invalidateCredentials:async(X)=>{await W((f)=>{if(X==="all")return{lastError:f.lastError,redirectUrl:f.redirectUrl};return{...f,...X==="client"?{clientInformation:void 0}:{},...X==="tokens"?{tokens:void 0,lastAuthenticatedAt:void 0}:{},...X==="verifier"?{codeVerifier:void 0}:{},...X==="discovery"?{discoveryState:void 0}:{}}})},saveDiscoveryState:async(X)=>{await W((f)=>({...f,discoveryState:X}))},discoveryState:()=>J.discoveryState},getLastAuthorizationUrl:()=>Q,getLastOAuthState:()=>Z,resetInteractiveState:async()=>{await W((X)=>({...X,clientInformation:void 0,codeVerifier:void 0,discoveryState:void 0,lastError:void 0,redirectUrl:$.redirectUrl}))},markError:async(X)=>{await W((f)=>({...f,lastError:X}))},clearError:async()=>{await W((X)=>({...X,lastError:void 0}))}}}function EQ($){let J=$.registration.transport;if(J.type==="stdio")throw Error(`MCP server "${$.registration.name}" uses stdio transport and does not support OAuth browser flow.`);let Q=J.headers?{headers:J.headers}:void 0;if(J.type==="sse")return new fT(new URL(J.url),{authProvider:$.oauthProvider,requestInit:Q,fetch:$.fetch});return new YT(new URL(J.url),{authProvider:$.oauthProvider,requestInit:Q,fetch:$.fetch})}function wH($){return new XT({name:$.clientName?.trim()||"@cline/core",version:$.clientVersion?.trim()||"0.0.0"})}async function hQ($){let J=$.serverName.trim();if(!J)throw Error("MCP server name cannot be empty.");let{resolveMcpServerRegistrations:Q}=await Promise.resolve().then(() => (yQ(),NH)),Z=Q({filePath:$.filePath}).find((Y)=>Y.name===J);if(!Z)throw Error(`MCP server "${J}" is not configured.`);if(Z.disabled)throw Error(`MCP server "${J}" is disabled. Enable it before running OAuth.`);if(Z.transport.type==="stdio")throw Error(`MCP server "${J}" uses stdio transport and does not support OAuth browser flow.`);let W=await J1({host:$.callbackHost,ports:$.callbackPorts?.length?$.callbackPorts:HT,callbackPath:$.callbackPath??VT,timeoutMs:$.timeoutMs??BT,successHtml:$.successHtml,onListening:$.onServerListening,onClose:$.onServerClose});if(!W.callbackUrl)throw Error("Unable to bind local MCP OAuth callback server.");let j=bQ({settingsPath:$.filePath,serverName:J,redirectUrl:W.callbackUrl,onAuthorizationUrl:async(Y)=>{await $.openUrl?.(Y)}});await j.resetInteractiveState();let X=wH($),f;try{let Y=EQ({registration:Z,oauthProvider:j.provider,fetch:$.fetch});try{return await X.connect(Y),await X.listTools(),await j.clearError(),{serverName:J,authorized:!0,message:`MCP server "${J}" is already authorized.`}}catch(V){if(!(V instanceof jT))throw V;if(!j.getLastAuthorizationUrl())throw Error(`MCP server "${J}" did not provide an authorization URL.`);let B=await W.waitForCallback();if(!B)throw Error("Timed out waiting for MCP OAuth authorization callback.");if(B.error)throw Error(`OAuth authorization failed: ${B.error}`);if(!B.code)throw Error("OAuth callback did not include an authorization code.");let A=j.getLastOAuthState();if(!A)throw Error(`MCP server "${J}" did not start an OAuth stateful authorization flow.`);if(B.state!==A)throw Error("OAuth authorization failed: state mismatch.");await Y.finishAuth(B.code),f=wH($);let K=EQ({registration:Z,oauthProvider:j.provider,fetch:$.fetch});return await f.connect(K),await f.listTools(),await j.clearError(),{serverName:J,authorized:!0,message:`MCP server "${J}" OAuth authorization completed.`}}}catch(Y){let V=AT(Y);throw await j.markError(V),Error(V)}finally{await X.close().catch(()=>{return}),await f?.close().catch(()=>{return}),W.close()}}var DT="2024-11-05",UT=5000,RT=1500,CH="http://127.0.0.1:1456/mcp/oauth/callback";function kQ($){return $ instanceof Error?$.message:String($)}function yH($){let J=Buffer.from(JSON.stringify($),"utf8"),Q=Buffer.from(`Content-Length: ${J.byteLength}\r
|
|
224
224
|
\r
|
|
225
225
|
`,"utf8");return Buffer.concat([Q,J])}function EH($){return Buffer.from(`${JSON.stringify($)}
|
|
226
226
|
`,"utf8")}class $W{buffer="";decoder=new bH("utf8");push($){this.buffer+=this.decoder.write($);let J=[];while(!0){let Q=this.buffer.indexOf(`\r
|
|
227
227
|
\r
|
|
228
228
|
`);if(Q<0)break;let W=this.buffer.slice(0,Q).match(/(?:^|\r\n)Content-Length:\s*(\d+)(?:\r\n|$)/i);if(!W)throw Error("Invalid MCP stdio frame: missing Content-Length header.");let j=Number.parseInt(W[1],10),X=Q+4,f=X+j;if(this.buffer.length<f)break;J.push(this.buffer.slice(X,f)),this.buffer=this.buffer.slice(f)}return J}}class JW{buffer="";decoder=new bH("utf8");push($){this.buffer+=this.decoder.write($);let J=[];while(!0){let Q=this.buffer.indexOf(`
|
|
229
|
-
`);if(Q<0)break;let Z=this.buffer.slice(0,Q).trim();if(this.buffer=this.buffer.slice(Q+1),Z.length>0)J.push(Z)}return J}}class hH{registration;process;nextRequestId=1;pending=new Map;framedParser=new $W;newlineParser=new JW;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"],J;for(let Q of $){await this.disconnect().catch(()=>{}),this.spawnProcess(Q);try{await this.request("initialize",{protocolVersion:DT,capabilities:{},clientInfo:{name:"@cline/core",version:"0.0.0"}},RT),this.notify("notifications/initialized"),this.connected=!0,this.protocolMode=Q;return}catch(Z){J=Z instanceof Error?Z:Error(String(Z))}}throw J??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((J)=>typeof J?.name==="string"&&typeof J.inputSchema==="object"&&J.inputSchema!==null).map((J)=>({name:J.name,description:J.description,inputSchema:J.inputSchema}))}async callTool($){return this.request("tools/call",{name:$.name,arguments:$.arguments??{}})}spawnProcess($){let J=this.registration.transport;if(J.type!=="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${J.type}`);this.framedParser=new $W,this.newlineParser=new JW,this.stderrBuffer="",this.protocolMode=$;let Q=process.platform==="win32"?{windowsHide:!0,shell:!0}:{},Z=GT(J.command,J.args??[],{cwd:J.cwd,env:{...process.env,...J.env??{}},stdio:["pipe","pipe","pipe"],...Q});this.process=Z,Z.stdout.on("data",(W)=>this.handleStdout(W)),Z.stderr.on("data",(W)=>{if(this.process!==Z)return;if(this.stderrBuffer+=W.toString("utf8"),this.stderrBuffer.length>16384)this.stderrBuffer=this.stderrBuffer.slice(-16384)}),Z.once("error",(W)=>{if(this.process!==Z)return;this.failAllPending(Error(`MCP process error: ${k9(W)}`))}),Z.once("exit",(W,j)=>{if(this.process!==Z)return;this.connected=!1,this.process=void 0;let X=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`MCP process exited for "${this.registration.name}" (code=${W??"null"}, signal=${j??"null"}).${X}`))})}handleStdout($){try{let J=this.protocolMode==="framed"?this.framedParser.push($):this.newlineParser.push($);for(let Q of J){let Z=JSON.parse(Q);if(typeof Z.id!=="number")continue;let W=this.pending.get(Z.id);if(!W)continue;if(this.pending.delete(Z.id),clearTimeout(W.timeout),Z.error){let j=Z.error.message||`MCP request failed with code ${Z.error.code??"unknown"}`;W.reject(Error(j));continue}W.resolve(Z.result)}}catch(J){this.handleProtocolFailure(J)}}handleProtocolFailure($){let J=this.process;if(!J)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}": ${k9($)}.${Q}`)),J.kill()}async request($,J,Q=UT){let Z=this.process;if(!Z?.stdin.writable)throw Error(`MCP server "${this.registration.name}" is not connected.`);let W=this.nextRequestId++,j={jsonrpc:"2.0",id:W,method:$,...J?{params:J}:{}},X=new Promise((f,Y)=>{let V=setTimeout(()=>{this.pending.delete(W),Y(Error(`MCP request timed out for "${this.registration.name}" (${$}).`))},Q);this.pending.set(W,{resolve:f,reject:Y,timeout:V})});try{Z.stdin.write(this.protocolMode==="framed"?yH(j):EH(j))}catch(f){let Y=this.pending.get(W);if(Y)clearTimeout(Y.timeout),this.pending.delete(W);throw f}return X}notify($,J){let Q=this.process;if(!Q?.stdin.writable)return;let Z={jsonrpc:"2.0",method:$,...J?{params:J}:{}};Q.stdin.write(this.protocolMode==="framed"?yH(Z):EH(Z))}failAllPending($){for(let[J,Q]of this.pending)clearTimeout(Q.timeout),this.pending.delete(J),Q.reject($)}}class kH{registration;options;client;authContext;constructor($,J){this.registration=$;this.options=J}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 $=b9({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??CH});this.authContext=$;try{let J=new FT({name:this.options.clientName?.trim()||"@cline/core",version:this.options.clientVersion?.trim()||"0.0.0"}),Q=E9({registration:this.registration,oauthProvider:$.provider,fetch:this.options.fetch});await J.connect(Q),await $.clearError(),this.client=J}catch(J){let Q=J instanceof SH?this.formatUnauthorizedMessage($.getLastAuthorizationUrl()):k9(J);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(J){return await this.handleOperationError(J)}}async callTool($){let J=await this.ensureConnectedClient();try{return await J.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 J=`MCP server "${this.registration.name}" requires OAuth authorization.`;if(!$)return`${J} Run authorizeMcpServerOAuth for this server.`;return`${J} Run authorizeMcpServerOAuth for this server and complete this URL: ${$}`}async handleOperationError($){let J=this.authContext??b9({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??CH}),Q=$ instanceof SH?this.formatUnauthorizedMessage(J.getLastAuthorizationUrl()):k9($);throw await J.markError(Q),Error(Q)}}function C8($={}){return(J)=>J.transport.type==="stdio"?new hH(J):new kH(J,$)}y9();function l0(){return Date.now()}function LT($){return $.map((J)=>({name:J.name,description:J.description,inputSchema:J.inputSchema}))}class A2{toolsCacheTtlMs;clientFactory;servers=new Map;operationLocks=new Map;constructor($){this.clientFactory=$.clientFactory,this.toolsCacheTtlMs=$.toolsCacheTtlMs??5000}async registerServer($){await this.runExclusive($.name,async()=>{let J=this.servers.get($.name);if(!J){this.servers.set($.name,{registration:{...$},status:"disconnected",updatedAt:l0()});return}let Q=JSON.stringify(J.registration.transport)!==JSON.stringify($.transport);if(J.registration={...$},J.updatedAt=l0(),Q)await this.disconnectState(J),J.client=void 0,J.toolCache=void 0,J.toolCacheUpdatedAt=void 0})}async unregisterServer($){await this.runExclusive($,async()=>{let J=this.requireServer($);await this.disconnectState(J),this.servers.delete($)})}async connectServer($){await this.runExclusive($,async()=>{let J=this.requireServer($);await this.connectState(J)})}async disconnectServer($){await this.runExclusive($,async()=>{let J=this.requireServer($);await this.disconnectState(J)})}async setServerDisabled($,J){await this.runExclusive($,async()=>{let Q=this.requireServer($);if(Q.registration={...Q.registration,disabled:J},Q.updatedAt=l0(),J)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(($,J)=>$.name.localeCompare(J.name))}async listTools($){let J=this.requireServer($),Q=J.toolCacheUpdatedAt??0;if(J.toolCache&&l0()-Q<=this.toolsCacheTtlMs)return J.toolCache;return this.refreshTools($)}async refreshTools($){return this.runExclusive($,async()=>{let J=this.requireServer($),Z=await(await this.ensureConnectedClient(J)).listTools(),W=LT(Z);return J.toolCache=W,J.toolCacheUpdatedAt=l0(),J.updatedAt=l0(),W})}async callTool($){return this.runExclusive($.serverName,async()=>{let J=this.requireServer($.serverName),Q=await this.ensureConnectedClient(J);return J.updatedAt=l0(),Q.callTool({name:$.toolName,arguments:$.arguments,context:$.context})})}async dispose(){let $=[...this.servers.keys()];for(let J of $)await this.unregisterServer(J)}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=l0();try{let J=$.client??await this.clientFactory($.registration);await J.connect(),$.client=J,$.status="connected",$.lastError=void 0,$.updatedAt=l0()}catch(J){throw $.status="disconnected",$.lastError=J instanceof Error?J.message:String(J),$.updatedAt=l0(),J}}async disconnectState($){if(!$.client){$.status="disconnected",$.updatedAt=l0();return}try{await $.client.disconnect()}finally{$.status="disconnected",$.updatedAt=l0()}}requireServer($){let J=this.servers.get($);if(!J)throw Error(`Unknown MCP server: ${$}`);return J}async runExclusive($,J){let Q=this.operationLocks.get($)??Promise.resolve(),Z,W=new Promise((X)=>{Z=X}),j=Q.catch(()=>{return}).then(()=>W);this.operationLocks.set($,j),await Q.catch(()=>{return});try{return await J()}finally{if(Z?.(),this.operationLocks.get($)===j)this.operationLocks.delete($)}}}function y8($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function IH($){return y8($)&&Object.values($).every((J)=>typeof J==="string")}function zT($){return Array.isArray($)&&$.every((J)=>typeof J==="string")}function _T($){if(!y8($))return!1;return($.fromEnv===void 0||typeof $.fromEnv==="string")&&($.value===void 0||typeof $.value==="string")&&($.required===void 0||typeof $.required==="boolean")}function OT($){let J=$.env?Object.entries($.env):[];if(J.length===0)return{ok:!0};let Q={};for(let[Z,W]of J){if(typeof W==="string"){Q[Z]=W;continue}let j=W.fromEnv?.trim()||Z,X=process.env[j];if(typeof X==="string"&&X.length>0){Q[Z]=X;continue}if(typeof W.value==="string"){Q[Z]=W.value;continue}if(W.required===!0)return{ok:!1,reason:`required environment variable "${j}" is not set`}}return{ok:!0,env:Object.keys(Q).length>0?Q:void 0}}function QW($){if(!y8($))return{name:"",loadError:"invalid MCP server registration"};let J=typeof $.name==="string"?$.name.trim():"";if(!J)return{name:J,loadError:"empty MCP server name"};let Q=$.env,Z=Q===void 0?void 0:Q;if(Z!==void 0){if(!y8(Z))return{name:J,loadError:"invalid env"};for(let[Y,V]of Object.entries(Z))if(typeof V!=="string"&&!_T(V))return{name:J,loadError:`invalid env "${Y}"`}}let W=$.transport;if(!y8(W))return{name:J,loadError:"invalid MCP transport"};let j=W.type;if(j!=="stdio"&&j!=="sse"&&j!=="streamableHttp")return{name:J,loadError:"invalid MCP transport type"};if(j!=="stdio"&&Z!==void 0)return{name:J,loadError:"top-level env is only supported for stdio MCP transports"};let X=y8($.metadata)?$.metadata:void 0;if(j==="stdio"){let Y=W.command;if(typeof Y!=="string"||!Y.trim())return{name:J,loadError:"stdio MCP transport requires command"};let V=W.args;if(V!==void 0&&!zT(V))return{name:J,loadError:"stdio MCP transport args must be strings"};let H=W.cwd;if(H!==void 0&&typeof H!=="string")return{name:J,loadError:"stdio MCP transport cwd must be a string"};let B=W.env;if(B!==void 0&&!IH(B))return{name:J,loadError:"stdio MCP transport env must be strings"};let A=OT({name:J,transport:{type:"stdio",command:Y,args:V,cwd:H,env:B},env:Z,metadata:X});if(!A.ok)return{name:J,loadError:A.reason};let K=B||A.env?{...B??{},...A.env??{}}:void 0;return{name:J,registration:{name:J,transport:{type:"stdio",command:Y,args:V,cwd:H,env:K},metadata:X}}}if(typeof W.url!=="string"||!W.url.trim())return{name:J,loadError:`${j} MCP transport requires url`};let f=W.headers;if(f!==void 0&&!IH(f))return{name:J,loadError:`${j} MCP transport headers must be strings`};return{name:J,registration:{name:J,transport:j==="sse"?{type:"sse",url:W.url,headers:f}:{type:"streamableHttp",url:W.url,headers:f},metadata:X}}}function I9($){let J=new Map;return $.map(({server:Q,owner:Z,ownerLabel:W})=>{let j=QW(Q);if(!j.registration)return{owner:Z,name:j.name,loadError:j.loadError??"invalid MCP server registration"};let X=J.get(j.registration.name);if(J.has(j.registration.name)){let f=X?` already registered by ${X}`:"";return{owner:Z,name:j.registration.name,loadError:`duplicate MCP server name "${j.registration.name}"${f}`}}return J.set(j.registration.name,W),{owner:Z,name:j.registration.name,registration:j.registration}})}import{createHash as TT}from"node:crypto";var xH=128,MT=/[^a-zA-Z0-9_-]+/g,gH=8,qT=1,PT="mcp_tool";function NT($){return TT("sha1").update($).digest("hex").slice(0,gH)}function wT($){return $.replace(MT,"_")}var x9=({serverName:$,toolName:J})=>{let Q=`${$}__${J}`,Z=wT(Q);if(Z===Q&&Q.length<=xH)return Q;let W=NT(Q),j=xH-qT-gH;return`${Z.slice(0,j)||PT}_${W}`};function d6($){return{[($.nameTransform??x9)({serverName:$.serverName,toolName:$.toolName})]:{enabled:!1}}}function g9($){let J={};for(let Q of $.toolNames)Object.assign(J,d6({serverName:$.serverName,toolName:Q,nameTransform:$.nameTransform}));return J}import{createTool as ST}from"@cline/shared";function CT($,J){let Q=J.description?.trim();if(Q)return Q;return`Execute MCP tool "${J.name}" from server "${$}".`}async function E8($){let J=await $.provider.listTools($.serverName),Q=$.nameTransform??x9;return J.map((Z)=>{let W=Q({serverName:$.serverName,toolName:Z.name});return ST({name:W,description:CT($.serverName,Z),inputSchema:Z.inputSchema,timeoutMs:$.timeoutMs,retryable:$.retryable,maxRetries:$.maxRetries,execute:async(j,X)=>$.provider.callTool({serverName:$.serverName,toolName:Z.name,arguments:j&&typeof j==="object"&&!Array.isArray(j)?j:void 0,context:X})})})}W1();var uH={};w(uH,{listPluginToolsWithDiagnostics:()=>m9,listPluginTools:()=>l6});import{stat as yT}from"node:fs/promises";import{isAbsolute as ET,relative as bT,resolve as vH}from"node:path";W1();function hT($,J){let Q=bT(vH($),vH(J));return Q===""||!Q.startsWith("..")&&!ET(Q)}var kT=32,b8=new Map;function IT($,J){if(!b8.has($)&&b8.size>=kT){let Q=b8.keys().next().value;if(Q)b8.delete(Q)}b8.set($,J)}async function xT($){let J=await Promise.all($.pluginPaths.map(async(Q)=>{try{let Z=await yT(Q);return`${Q}:${Z.mtimeMs}:${Z.size}`}catch{return`${Q}:missing`}}));return JSON.stringify({workspacePath:$.workspacePath,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,pathStats:J})}function cH($,J){return $.map((Q)=>({...Q,enabled:!J.has(Q.name)}))}function gT($){return $.sort((J,Q)=>{let Z=J.name.localeCompare(Q.name);if(Z!==0)return Z;return J.path.localeCompare(Q.path)})}async function mT($,J){if(!$.setup)return{tools:[]};let Q=[],Z={registerTool:(W)=>Q.push(W),registerCommand:()=>{},registerMessageBuilder:()=>{},registerRule:()=>{},registerProvider:()=>{},registerAutomationEventType:()=>{},registerMcpServer:(W)=>{if(!$.manifest.capabilities.includes("mcp"))throw Error('registerMcpServer requires the "mcp" capability')}};return await $.setup(Z,{workspaceInfo:J}),{tools:Q}}async function m9($){let J=e$({workspacePath:$.workspacePath,cwd:$.cwd}),Q=B1($.disabledToolNames);if(J.length===0)return{tools:[],failures:[],warnings:[]};let Z=await xT({pluginPaths:J,workspacePath:$.workspacePath,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId}),W=b8.get(Z);if(W)return{tools:cH(W.tools,Q),failures:W.failures,warnings:W.warnings};let j=[],X=[],f=[],Y;try{Y=await A8({pluginPaths:J,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,workspaceInfo:{rootPath:$.workspacePath}}),X=[...Y.failures],f=[...Y.warnings];for(let H of Y.extensions??[]){let B=H.__clinePluginPath;if(!B)continue;let A=hT($.workspacePath,B)?"workspace-plugin":"global-plugin",K;try{K=await mT(H,{rootPath:$.workspacePath})}catch(G){X.push({pluginPath:B,pluginName:H.name,phase:"setup",message:G instanceof Error?G.message:String(G),stack:G instanceof Error?G.stack:void 0});continue}for(let G of K.tools)j.push({name:G.name,pluginName:H.name,path:B,source:A,description:G.description?.trim()||void 0})}}catch(H){X=J.map((B)=>({pluginPath:B,phase:"load",message:H instanceof Error?H.message:String(H),stack:H instanceof Error?H.stack:void 0}))}finally{await Y?.shutdown().catch(()=>{})}let V=gT(j);return IT(Z,{tools:V,failures:X,warnings:f}),{tools:cH(V,Q),failures:X,warnings:f}}async function l6($){return(await m9($)).tools}function c9($,J){if(!J)return"global";let Q=cT(J,$);return!Q.startsWith("..")&&!vT(Q)?"workspace":"global"}function p6($){return[...$].sort((J,Q)=>{let Z=(W)=>{switch(W){case"workspace":case"workspace-plugin":return 0;case"global":case"global-plugin":return 1;case"builtin":return 2}};if(J.source!==Q.source)return Z(J.source)-Z(Q.source);return J.name.localeCompare(Q.name)})}function pH($){return $.workspaceRoot?.trim()||$.cwd?.trim()||""}async function lH($,J){if($.userInstructionService)return await J($.userInstructionService);let Q=pH($);if(!Q)return await J(void 0);let Z=$.cwd?.trim()||Q,W=_$({skills:{workspacePath:Q,includePluginSkills:!0,cwd:Z},rules:{workspacePath:Q},workflows:{workspacePath:Q}});try{return await W.start(),await J(W)}finally{W.stop()}}function uT($,J){if(!$)return;let Q=$.listRecords("skill");if(J.id){let Z=Q.find((W)=>W.id===J.id);if(Z)return Z}for(let Z of Q)if(Z.filePath===J.path||Z.item.name===J.name||Z.id===J.name)return Z;return}class O${async list($={}){return await lH($,async(J)=>{let Q=pH($),Z=[],W=[],j=[],X=[],f=[];if(J){for(let V of J.listRecords("workflow")){let H=V.item;Z.push({id:V.id,name:H.name,path:V.filePath,enabled:H.disabled!==!0,kind:"workflow",source:c9(V.filePath,Q),description:H.instructions,toggleable:!1})}for(let V of J.listRecords("rule")){let H=V.item;W.push({id:V.id,name:H.name,path:V.filePath,enabled:H.disabled!==!0,kind:"rule",source:c9(V.filePath,Q),description:H.instructions,toggleable:!1})}for(let V of J.listRecords("skill")){let H=V.item;j.push({id:V.id,name:H.name,path:V.filePath,enabled:H.disabled!==!0,kind:"skill",source:c9(V.filePath,Q),description:H.description,toggleable:!0})}}if(Q)try{for(let V of await l6({workspacePath:Q,cwd:$.cwd,providerId:$.availabilityContext?.providerId,modelId:$.availabilityContext?.modelId}))X.push({id:`${V.pluginName}:${V.name}:${V.path}`,name:V.name,path:V.path,enabled:V.enabled,kind:"tool",source:V.source,description:V.description,toggleable:!0})}catch{}let Y=K0();if(c1({filePath:Y}))try{for(let V of A1({filePath:Y}))f.push({id:V.name,name:V.name,path:Y,enabled:V.disabled!==!0,kind:"mcp",source:c9(Y,Q),description:V.transport.type,toggleable:!0})}catch{}return{workflows:p6(Z.filter((V)=>v9(V.path))),rules:p6(W.filter((V)=>v9(V.path))),skills:p6(j.filter((V)=>v9(V.path))),tools:p6(X),mcp:p6(f.filter((V)=>v9(V.path)))}})}async toggle($){if($.type==="skills")return await lH($,async(J)=>{let Q=uT(J,$),Z=Q?.filePath;if(!Z)throw Error(`Unable to resolve skill setting '${$.id??$.name??dH($.path??"")}'.`);let W=Q?.item&&"disabled"in Q.item?Q.item.disabled!==!0:void 0,j=$.enabled??(W!==void 0?!W:void 0);if(j===void 0)throw Error(`Cannot determine toggle state for skill '${$.id??$.name??dH($.path??"")}'; provide an explicit enabled value or a resolvable workspace context.`);return await zH({filePath:Z,enabled:j}),await J?.refreshType("skill"),{snapshot:await this.list({...$,userInstructionService:J}),changedTypes:["skills"]}});if($.type==="tools"){if(!$.name?.trim())throw Error("Tool settings toggle requires a tool name.");if($.enabled===void 0)T5($.name);else xf($.name,!$.enabled);return{snapshot:await this.list($),changedTypes:["tools"]}}if($.type==="mcp"){let J=$.name?.trim()||$.id?.trim();if(!J)throw Error("MCP server settings toggle requires a server name.");let Q=$.path?.trim()||K0(),Z=$.enabled;if(Z===void 0){let W=A1({filePath:Q}).find((j)=>j.name===J);if(!W)throw Error(`Unknown MCP server: ${J}`);Z=W.disabled===!0}return Y2({filePath:Q,name:J,disabled:!Z}),{snapshot:await this.list($),changedTypes:["mcp"]}}throw Error(`Settings type '${$.type}' does not support toggles.`)}}function K2(){return new O$}function iH($){return{async list(J){let Q=$;if(Q.listSettings)return await Q.listSettings(J);return await K2().list(J)},async toggle(J){let Q=$;if(Q.toggleSetting)return await Q.toggleSetting(J);return await K2().toggle(J)}}}function nH($){function J(){let Q=$.pendingPrompts;if(!Q)throw Error("Pending prompt service is not available.");return Q}return{list(Q){return J().list(Q)},update(Q){return J().update(Q)},delete(Q){return J().delete(Q)}}}var aH={};w(aH,{splitCoreSessionConfig:()=>r6,isSessionNotFoundError:()=>d1,SessionNotFoundError:()=>u1,SESSION_NOT_FOUND_ERROR_CODE:()=>G2});var G2="session_not_found";class u1 extends Error{sessionId;code="session_not_found";constructor($,J){super(J??($?`session not found: ${$}`:"session not found"));this.sessionId=$;this.name="SessionNotFoundError"}}function d1($){return $ instanceof u1||typeof $==="object"&&$!==null&&"code"in $&&$.code==="session_not_found"}function r6($){let{hooks:J,logger:Q,telemetry:Z,extensionContext:W,extraTools:j,extensions:X,onTeamEvent:f,onConsecutiveMistakeLimitReached:Y,checkpoint:V,compaction:H,...B}=$,A={};if(J)A.hooks=J;if(Q)A.logger=Q;if(Z)A.telemetry=Z;if(W)A.extensionContext=W;if(j)A.extraTools=j;if(X)A.extensions=X;if(f)A.onTeamEvent=f;if(Y)A.onConsecutiveMistakeLimitReached=Y;if(V?.createCheckpoint)A.checkpoint=V;if(H?.compact)A.compaction=H;let K=Object.keys(A).length>0?A:void 0;return{config:{...B,...V?{checkpoint:{enabled:V.enabled}}:{},...H?{compaction:{enabled:H.enabled,strategy:H.strategy,thresholdRatio:H.thresholdRatio,reserveTokens:H.reserveTokens,preserveRecentTokens:H.preserveRecentTokens,maxInputTokens:H.maxInputTokens,summarizer:H.summarizer}}:{}},...K?{localRuntime:K}:{}}}function sH($){let J=$.config;return"providerId"in J?{...$,config:{...J,...dT($.localRuntime)},localRuntime:$.localRuntime}:$}function ZW($,J={}){let Q=r6($.config),Z=z0(J.defaultCapabilities,$.capabilities),W=lT(Q.localRuntime,$.localRuntime),j=J.withExtensionContext?.(W?.extensionContext);if(j)W={...W??{},extensionContext:j};return{...$,...Q,...W?{localRuntime:W}:{},...Z?{capabilities:Z}:{}}}function dT($){if(!$)return{};let{modelCatalogDefaults:J,userInstructionService:Q,configExtensions:Z,onTeamRestored:W,...j}=$;return j}function lT(...$){let J={};for(let Q of $)if(Q)Object.assign(J,Q);return Object.keys(J).length>0?J:void 0}O0();function oH($){let J=$.input.config.telemetry??$.telemetry;if(!J)return;J.capture({event:x.SESSION.STARTED,properties:{sessionId:$.sessionId,source:$.input.source??U0.CORE,providerId:$.input.config.providerId,modelId:$.input.config.modelId,enableTools:$.input.config.enableTools,enableSpawnAgent:$.input.config.enableSpawnAgent,enableAgentTeams:$.input.config.enableAgentTeams,clientName:$.clientName,runtimeAddress:$.runtimeAddress}})}function i6($){return!!$&&typeof $==="object"&&!Array.isArray($)}function WW($){let J=$?.trim();return J?J:void 0}function pT($,J){let Q=$?.trim();if(!Q)return J;let Z=Date.parse(Q);if(!Number.isFinite(Z))return J;return new Date(Z).toISOString()}function tH($,J){return new Date(new Date($).getTime()+Math.max(0,Math.floor(J))*1000).toISOString()}function eH($,J){return new Date(new Date($).getTime()-Math.max(0,Math.floor(J))*1000).toISOString()}function rT($,J){if(!$)return J;return new Date($).getTime()>=new Date(J).getTime()?$:J}function iT($,J){let Q=$.eventId.trim(),Z=$.eventType.trim(),W=$.source.trim(),j=WW($.subject),X=WW($.dedupeKey)??`${Z}:${W}:${j??Q}`;return{eventId:Q,eventType:Z,source:W,subject:j,occurredAt:pT($.occurredAt,J),workspaceRoot:WW($.workspaceRoot),payload:i6($.payload)?$.payload:void 0,attributes:i6($.attributes)?$.attributes:void 0,dedupeKey:X}}function jW($,J){if(!J)return;let Q=J.split("."),Z=$;for(let W of Q){if(!i6(Z))return;Z=Z[W]}return Z}function nT($,J){if($.attributes&&Object.hasOwn($.attributes,J))return $.attributes[J];if($.payload&&Object.hasOwn($.payload,J))return $.payload[J];let Q={eventId:$.eventId,eventType:$.eventType,source:$.source,subject:$.subject,occurredAt:$.occurredAt,workspaceRoot:$.workspaceRoot,dedupeKey:$.dedupeKey,attributes:$.attributes,payload:$.payload},Z=jW(Q,J);if(Z!==void 0)return Z;if($.attributes){let W=jW($.attributes,J);if(W!==void 0)return W}if($.payload)return jW($.payload,J);return}function u9($,J){if(Array.isArray(J))return J.some((Q)=>u9($,Q));if(Array.isArray($))return $.some((Q)=>u9(Q,J));if(i6(J)){if(!i6($))return!1;return Object.entries(J).every(([Q,Z])=>u9($[Q],Z))}return Object.is($,J)}function aT($,J){if(!J||Object.keys(J).length===0)return!0;return Object.entries(J).every(([Q,Z])=>u9(nT($,Q),Z))}class XW{store;nowFn;logger;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now()),this.logger=$.logger}ingestEvent($){let J=new Date(this.nowFn()).toISOString(),Q=iT($,J),Z=this.store.insertEventLog(Q,{receivedAtIso:J});if(!Z.created)return this.logger?.debug("cron.event.duplicate",{eventId:Z.record.eventId,eventType:Z.record.eventType,source:Z.record.source}),{event:Z.record,duplicate:!0,matchedSpecs:[],queuedRuns:[],suppressions:[{reason:"duplicate_event",dedupeKey:Z.record.dedupeKey}]};try{let W=this.store.listEventSpecsForType(Q.eventType),j=[],X=[],f=[];for(let H of W){if(!aT(Q,H.filters)){j.push({specId:H.specId,externalId:H.externalId,reason:"filter_mismatch",dedupeKey:Q.dedupeKey});continue}X.push(H);let B=this.materializeForSpec(H,Q,Z.record.receivedAt);if(B.run)f.push(B.run);else j.push({specId:H.specId,externalId:H.externalId,reason:B.reason,dedupeKey:Q.dedupeKey})}let Y=X.length===0?"unmatched":f.length>0?"queued":"suppressed";this.store.updateEventLogProcessing(Z.record.eventId,{status:Y,matchedSpecCount:X.length,queuedRunCount:f.length,suppressedCount:j.filter((H)=>H.reason!=="filter_mismatch").length});let V=this.store.getEventLog(Z.record.eventId);return this.logger?.debug("cron.event.processed",{eventId:Z.record.eventId,eventType:Z.record.eventType,status:Y,matchedSpecCount:X.length,queuedRunCount:f.length}),{event:V??Z.record,duplicate:!1,matchedSpecs:X,queuedRuns:f,suppressions:j}}catch(W){if(this.store.updateEventLogProcessing(Z.record.eventId,{status:"failed",error:W instanceof Error?W.message:String(W)}),this.logger?.error)this.logger.error("cron.event.failed",{eventId:Z.record.eventId,eventType:Z.record.eventType,error:W});throw W}}materializeForSpec($,J,Q){let Z=J.dedupeKey??J.eventId,W=$.debounceSeconds??0;if(W>0){let Y=this.store.findQueuedEventRunForDedupe({specId:$.specId,dedupeKey:Z});if(Y){let V=rT(Y.scheduledFor,tH(Q,W)),H=this.store.updateQueuedEventRunForDebounce({runId:Y.runId,triggerEventId:J.eventId,scheduledFor:V});if(H)return{run:H,reason:"dedupe_window"}}}let j=$.dedupeWindowSeconds??0;if(j>0&&this.store.hasRecentEventRunForDedupe({specId:$.specId,dedupeKey:Z,sinceIso:eH(Q,j)}))return{reason:"dedupe_window"};let X=$.cooldownSeconds??0;if(X>0&&this.store.hasRecentEventRunForSpec({specId:$.specId,sinceIso:eH(Q,X)}))return{reason:"cooldown"};return{run:this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"event",triggerEventId:J.eventId,scheduledFor:W>0?tH(Q,W):Q}),reason:"dedupe_window"}}}class n6{store;nowFn;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now())}materializeAll(){let $={oneOffQueued:0,scheduleQueued:0},J=this.store.listSpecs({triggerKind:"one_off",enabled:!0,parseStatus:"valid"});for(let Z of J)if(this.materializeOneOff(Z))$.oneOffQueued+=1;let Q=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let Z of Q)try{if(this.materializeSchedule(Z))$.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 QM}from"node:path";import{buildClineSystemPrompt as ZM}from"@cline/shared";import{nowIso as $B}from"@cline/shared/db";import{mkdirSync as sT,writeFileSync as oT}from"node:fs";import{join as tT}from"node:path";import{resolveCronReportsDir as eT}from"@cline/shared/storage";function T$($){if(/[:#\n]/.test($)||$.includes('"'))return JSON.stringify($);return $}function F2($,J){if(J===void 0||J===null)return;return`${$}: ${T$(J)}`}function $M($,J,Q){let Z=[`runId: ${T$($.runId)}`,`specId: ${T$(J.specId)}`,`externalId: ${T$(J.externalId)}`,`title: ${T$(J.title)}`,`triggerKind: ${T$($.triggerKind)}`,`status: ${T$($.status)}`,`sourcePath: ${T$(J.sourcePath)}`],W=[F2("sessionId",$.sessionId),F2("startedAt",$.startedAt),F2("completedAt",$.completedAt),F2("triggerEventId",$.triggerEventId),F2("triggerEventType",Q?.eventType),F2("triggerEventSource",Q?.source),F2("triggerEventSubject",Q?.subject)];for(let j of W)if(j)Z.push(j);return`---
|
|
229
|
+
`);if(Q<0)break;let Z=this.buffer.slice(0,Q).trim();if(this.buffer=this.buffer.slice(Q+1),Z.length>0)J.push(Z)}return J}}class hH{registration;process;nextRequestId=1;pending=new Map;framedParser=new $W;newlineParser=new JW;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"],J;for(let Q of $){await this.disconnect().catch(()=>{}),this.spawnProcess(Q);try{await this.request("initialize",{protocolVersion:DT,capabilities:{},clientInfo:{name:"@cline/core",version:"0.0.0"}},RT),this.notify("notifications/initialized"),this.connected=!0,this.protocolMode=Q;return}catch(Z){J=Z instanceof Error?Z:Error(String(Z))}}throw J??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((J)=>typeof J?.name==="string"&&typeof J.inputSchema==="object"&&J.inputSchema!==null).map((J)=>({name:J.name,description:J.description,inputSchema:J.inputSchema}))}async callTool($){return this.request("tools/call",{name:$.name,arguments:$.arguments??{}})}spawnProcess($){let J=this.registration.transport;if(J.type!=="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${J.type}`);this.framedParser=new $W,this.newlineParser=new JW,this.stderrBuffer="",this.protocolMode=$;let Q=process.platform==="win32"?{windowsHide:!0,shell:!0}:{},Z=GT(J.command,J.args??[],{cwd:J.cwd,env:{...process.env,...J.env??{}},stdio:["pipe","pipe","pipe"],...Q});this.process=Z,Z.stdout.on("data",(W)=>this.handleStdout(W)),Z.stderr.on("data",(W)=>{if(this.process!==Z)return;if(this.stderrBuffer+=W.toString("utf8"),this.stderrBuffer.length>16384)this.stderrBuffer=this.stderrBuffer.slice(-16384)}),Z.once("error",(W)=>{if(this.process!==Z)return;this.failAllPending(Error(`MCP process error: ${kQ(W)}`))}),Z.once("exit",(W,j)=>{if(this.process!==Z)return;this.connected=!1,this.process=void 0;let X=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`MCP process exited for "${this.registration.name}" (code=${W??"null"}, signal=${j??"null"}).${X}`))})}handleStdout($){try{let J=this.protocolMode==="framed"?this.framedParser.push($):this.newlineParser.push($);for(let Q of J){let Z=JSON.parse(Q);if(typeof Z.id!=="number")continue;let W=this.pending.get(Z.id);if(!W)continue;if(this.pending.delete(Z.id),clearTimeout(W.timeout),Z.error){let j=Z.error.message||`MCP request failed with code ${Z.error.code??"unknown"}`;W.reject(Error(j));continue}W.resolve(Z.result)}}catch(J){this.handleProtocolFailure(J)}}handleProtocolFailure($){let J=this.process;if(!J)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}": ${kQ($)}.${Q}`)),J.kill()}async request($,J,Q=UT){let Z=this.process;if(!Z?.stdin.writable)throw Error(`MCP server "${this.registration.name}" is not connected.`);let W=this.nextRequestId++,j={jsonrpc:"2.0",id:W,method:$,...J?{params:J}:{}},X=new Promise((f,Y)=>{let V=setTimeout(()=>{this.pending.delete(W),Y(Error(`MCP request timed out for "${this.registration.name}" (${$}).`))},Q);this.pending.set(W,{resolve:f,reject:Y,timeout:V})});try{Z.stdin.write(this.protocolMode==="framed"?yH(j):EH(j))}catch(f){let Y=this.pending.get(W);if(Y)clearTimeout(Y.timeout),this.pending.delete(W);throw f}return X}notify($,J){let Q=this.process;if(!Q?.stdin.writable)return;let Z={jsonrpc:"2.0",method:$,...J?{params:J}:{}};Q.stdin.write(this.protocolMode==="framed"?yH(Z):EH(Z))}failAllPending($){for(let[J,Q]of this.pending)clearTimeout(Q.timeout),this.pending.delete(J),Q.reject($)}}class kH{registration;options;client;authContext;constructor($,J){this.registration=$;this.options=J}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 $=bQ({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??CH});this.authContext=$;try{let J=new FT({name:this.options.clientName?.trim()||"@cline/core",version:this.options.clientVersion?.trim()||"0.0.0"}),Q=EQ({registration:this.registration,oauthProvider:$.provider,fetch:this.options.fetch});await J.connect(Q),await $.clearError(),this.client=J}catch(J){let Q=J instanceof SH?this.formatUnauthorizedMessage($.getLastAuthorizationUrl()):kQ(J);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(J){return await this.handleOperationError(J)}}async callTool($){let J=await this.ensureConnectedClient();try{return await J.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 J=`MCP server "${this.registration.name}" requires OAuth authorization.`;if(!$)return`${J} Run authorizeMcpServerOAuth for this server.`;return`${J} Run authorizeMcpServerOAuth for this server and complete this URL: ${$}`}async handleOperationError($){let J=this.authContext??bQ({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??CH}),Q=$ instanceof SH?this.formatUnauthorizedMessage(J.getLastAuthorizationUrl()):kQ($);throw await J.markError(Q),Error(Q)}}function C8($={}){return(J)=>J.transport.type==="stdio"?new hH(J):new kH(J,$)}yQ();function l0(){return Date.now()}function LT($){return $.map((J)=>({name:J.name,description:J.description,inputSchema:J.inputSchema}))}class A2{toolsCacheTtlMs;clientFactory;servers=new Map;operationLocks=new Map;constructor($){this.clientFactory=$.clientFactory,this.toolsCacheTtlMs=$.toolsCacheTtlMs??5000}async registerServer($){await this.runExclusive($.name,async()=>{let J=this.servers.get($.name);if(!J){this.servers.set($.name,{registration:{...$},status:"disconnected",updatedAt:l0()});return}let Q=JSON.stringify(J.registration.transport)!==JSON.stringify($.transport);if(J.registration={...$},J.updatedAt=l0(),Q)await this.disconnectState(J),J.client=void 0,J.toolCache=void 0,J.toolCacheUpdatedAt=void 0})}async unregisterServer($){await this.runExclusive($,async()=>{let J=this.requireServer($);await this.disconnectState(J),this.servers.delete($)})}async connectServer($){await this.runExclusive($,async()=>{let J=this.requireServer($);await this.connectState(J)})}async disconnectServer($){await this.runExclusive($,async()=>{let J=this.requireServer($);await this.disconnectState(J)})}async setServerDisabled($,J){await this.runExclusive($,async()=>{let Q=this.requireServer($);if(Q.registration={...Q.registration,disabled:J},Q.updatedAt=l0(),J)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(($,J)=>$.name.localeCompare(J.name))}async listTools($){let J=this.requireServer($),Q=J.toolCacheUpdatedAt??0;if(J.toolCache&&l0()-Q<=this.toolsCacheTtlMs)return J.toolCache;return this.refreshTools($)}async refreshTools($){return this.runExclusive($,async()=>{let J=this.requireServer($),Z=await(await this.ensureConnectedClient(J)).listTools(),W=LT(Z);return J.toolCache=W,J.toolCacheUpdatedAt=l0(),J.updatedAt=l0(),W})}async callTool($){return this.runExclusive($.serverName,async()=>{let J=this.requireServer($.serverName),Q=await this.ensureConnectedClient(J);return J.updatedAt=l0(),Q.callTool({name:$.toolName,arguments:$.arguments,context:$.context})})}async dispose(){let $=[...this.servers.keys()];for(let J of $)await this.unregisterServer(J)}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=l0();try{let J=$.client??await this.clientFactory($.registration);await J.connect(),$.client=J,$.status="connected",$.lastError=void 0,$.updatedAt=l0()}catch(J){throw $.status="disconnected",$.lastError=J instanceof Error?J.message:String(J),$.updatedAt=l0(),J}}async disconnectState($){if(!$.client){$.status="disconnected",$.updatedAt=l0();return}try{await $.client.disconnect()}finally{$.status="disconnected",$.updatedAt=l0()}}requireServer($){let J=this.servers.get($);if(!J)throw Error(`Unknown MCP server: ${$}`);return J}async runExclusive($,J){let Q=this.operationLocks.get($)??Promise.resolve(),Z,W=new Promise((X)=>{Z=X}),j=Q.catch(()=>{return}).then(()=>W);this.operationLocks.set($,j),await Q.catch(()=>{return});try{return await J()}finally{if(Z?.(),this.operationLocks.get($)===j)this.operationLocks.delete($)}}}function y8($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function IH($){return y8($)&&Object.values($).every((J)=>typeof J==="string")}function zT($){return Array.isArray($)&&$.every((J)=>typeof J==="string")}function _T($){if(!y8($))return!1;return($.fromEnv===void 0||typeof $.fromEnv==="string")&&($.value===void 0||typeof $.value==="string")&&($.required===void 0||typeof $.required==="boolean")}function OT($){let J=$.env?Object.entries($.env):[];if(J.length===0)return{ok:!0};let Q={};for(let[Z,W]of J){if(typeof W==="string"){Q[Z]=W;continue}let j=W.fromEnv?.trim()||Z,X=process.env[j];if(typeof X==="string"&&X.length>0){Q[Z]=X;continue}if(typeof W.value==="string"){Q[Z]=W.value;continue}if(W.required===!0)return{ok:!1,reason:`required environment variable "${j}" is not set`}}return{ok:!0,env:Object.keys(Q).length>0?Q:void 0}}function QW($){if(!y8($))return{name:"",loadError:"invalid MCP server registration"};let J=typeof $.name==="string"?$.name.trim():"";if(!J)return{name:J,loadError:"empty MCP server name"};let Q=$.env,Z=Q===void 0?void 0:Q;if(Z!==void 0){if(!y8(Z))return{name:J,loadError:"invalid env"};for(let[Y,V]of Object.entries(Z))if(typeof V!=="string"&&!_T(V))return{name:J,loadError:`invalid env "${Y}"`}}let W=$.transport;if(!y8(W))return{name:J,loadError:"invalid MCP transport"};let j=W.type;if(j!=="stdio"&&j!=="sse"&&j!=="streamableHttp")return{name:J,loadError:"invalid MCP transport type"};if(j!=="stdio"&&Z!==void 0)return{name:J,loadError:"top-level env is only supported for stdio MCP transports"};let X=y8($.metadata)?$.metadata:void 0;if(j==="stdio"){let Y=W.command;if(typeof Y!=="string"||!Y.trim())return{name:J,loadError:"stdio MCP transport requires command"};let V=W.args;if(V!==void 0&&!zT(V))return{name:J,loadError:"stdio MCP transport args must be strings"};let H=W.cwd;if(H!==void 0&&typeof H!=="string")return{name:J,loadError:"stdio MCP transport cwd must be a string"};let B=W.env;if(B!==void 0&&!IH(B))return{name:J,loadError:"stdio MCP transport env must be strings"};let A=OT({name:J,transport:{type:"stdio",command:Y,args:V,cwd:H,env:B},env:Z,metadata:X});if(!A.ok)return{name:J,loadError:A.reason};let K=B||A.env?{...B??{},...A.env??{}}:void 0;return{name:J,registration:{name:J,transport:{type:"stdio",command:Y,args:V,cwd:H,env:K},metadata:X}}}if(typeof W.url!=="string"||!W.url.trim())return{name:J,loadError:`${j} MCP transport requires url`};let f=W.headers;if(f!==void 0&&!IH(f))return{name:J,loadError:`${j} MCP transport headers must be strings`};return{name:J,registration:{name:J,transport:j==="sse"?{type:"sse",url:W.url,headers:f}:{type:"streamableHttp",url:W.url,headers:f},metadata:X}}}function IQ($){let J=new Map;return $.map(({server:Q,owner:Z,ownerLabel:W})=>{let j=QW(Q);if(!j.registration)return{owner:Z,name:j.name,loadError:j.loadError??"invalid MCP server registration"};let X=J.get(j.registration.name);if(J.has(j.registration.name)){let f=X?` already registered by ${X}`:"";return{owner:Z,name:j.registration.name,loadError:`duplicate MCP server name "${j.registration.name}"${f}`}}return J.set(j.registration.name,W),{owner:Z,name:j.registration.name,registration:j.registration}})}import{createHash as TT}from"node:crypto";var xH=128,MT=/[^a-zA-Z0-9_-]+/g,gH=8,qT=1,PT="mcp_tool";function NT($){return TT("sha1").update($).digest("hex").slice(0,gH)}function wT($){return $.replace(MT,"_")}var xQ=({serverName:$,toolName:J})=>{let Q=`${$}__${J}`,Z=wT(Q);if(Z===Q&&Q.length<=xH)return Q;let W=NT(Q),j=xH-qT-gH;return`${Z.slice(0,j)||PT}_${W}`};function d6($){return{[($.nameTransform??xQ)({serverName:$.serverName,toolName:$.toolName})]:{enabled:!1}}}function gQ($){let J={};for(let Q of $.toolNames)Object.assign(J,d6({serverName:$.serverName,toolName:Q,nameTransform:$.nameTransform}));return J}import{createTool as ST}from"@cline/shared";function CT($,J){let Q=J.description?.trim();if(Q)return Q;return`Execute MCP tool "${J.name}" from server "${$}".`}async function E8($){let J=await $.provider.listTools($.serverName),Q=$.nameTransform??xQ;return J.map((Z)=>{let W=Q({serverName:$.serverName,toolName:Z.name});return ST({name:W,description:CT($.serverName,Z),inputSchema:Z.inputSchema,timeoutMs:$.timeoutMs,retryable:$.retryable,maxRetries:$.maxRetries,execute:async(j,X)=>$.provider.callTool({serverName:$.serverName,toolName:Z.name,arguments:j&&typeof j==="object"&&!Array.isArray(j)?j:void 0,context:X})})})}W1();var uH={};w(uH,{listPluginToolsWithDiagnostics:()=>mQ,listPluginTools:()=>l6});import{stat as yT}from"node:fs/promises";import{isAbsolute as ET,relative as bT,resolve as vH}from"node:path";W1();function hT($,J){let Q=bT(vH($),vH(J));return Q===""||!Q.startsWith("..")&&!ET(Q)}var kT=32,b8=new Map;function IT($,J){if(!b8.has($)&&b8.size>=kT){let Q=b8.keys().next().value;if(Q)b8.delete(Q)}b8.set($,J)}async function xT($){let J=await Promise.all($.pluginPaths.map(async(Q)=>{try{let Z=await yT(Q);return`${Q}:${Z.mtimeMs}:${Z.size}`}catch{return`${Q}:missing`}}));return JSON.stringify({workspacePath:$.workspacePath,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,pathStats:J})}function cH($,J){return $.map((Q)=>({...Q,enabled:!J.has(Q.name)}))}function gT($){return $.sort((J,Q)=>{let Z=J.name.localeCompare(Q.name);if(Z!==0)return Z;return J.path.localeCompare(Q.path)})}async function mT($,J){if(!$.setup)return{tools:[]};let Q=[],Z={registerTool:(W)=>Q.push(W),registerCommand:()=>{},registerMessageBuilder:()=>{},registerRule:()=>{},registerProvider:()=>{},registerAutomationEventType:()=>{},registerMcpServer:(W)=>{if(!$.manifest.capabilities.includes("mcp"))throw Error('registerMcpServer requires the "mcp" capability')}};return await $.setup(Z,{workspaceInfo:J}),{tools:Q}}async function mQ($){let J=e$({workspacePath:$.workspacePath,cwd:$.cwd}),Q=B1($.disabledToolNames);if(J.length===0)return{tools:[],failures:[],warnings:[]};let Z=await xT({pluginPaths:J,workspacePath:$.workspacePath,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId}),W=b8.get(Z);if(W)return{tools:cH(W.tools,Q),failures:W.failures,warnings:W.warnings};let j=[],X=[],f=[],Y;try{Y=await A8({pluginPaths:J,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,workspaceInfo:{rootPath:$.workspacePath}}),X=[...Y.failures],f=[...Y.warnings];for(let H of Y.extensions??[]){let B=H.__clinePluginPath;if(!B)continue;let A=hT($.workspacePath,B)?"workspace-plugin":"global-plugin",K;try{K=await mT(H,{rootPath:$.workspacePath})}catch(G){X.push({pluginPath:B,pluginName:H.name,phase:"setup",message:G instanceof Error?G.message:String(G),stack:G instanceof Error?G.stack:void 0});continue}for(let G of K.tools)j.push({name:G.name,pluginName:H.name,path:B,source:A,description:G.description?.trim()||void 0})}}catch(H){X=J.map((B)=>({pluginPath:B,phase:"load",message:H instanceof Error?H.message:String(H),stack:H instanceof Error?H.stack:void 0}))}finally{await Y?.shutdown().catch(()=>{})}let V=gT(j);return IT(Z,{tools:V,failures:X,warnings:f}),{tools:cH(V,Q),failures:X,warnings:f}}async function l6($){return(await mQ($)).tools}function cQ($,J){if(!J)return"global";let Q=cT(J,$);return!Q.startsWith("..")&&!vT(Q)?"workspace":"global"}function p6($){return[...$].sort((J,Q)=>{let Z=(W)=>{switch(W){case"workspace":case"workspace-plugin":return 0;case"global":case"global-plugin":return 1;case"builtin":return 2}};if(J.source!==Q.source)return Z(J.source)-Z(Q.source);return J.name.localeCompare(Q.name)})}function pH($){return $.workspaceRoot?.trim()||$.cwd?.trim()||""}async function lH($,J){if($.userInstructionService)return await J($.userInstructionService);let Q=pH($);if(!Q)return await J(void 0);let Z=$.cwd?.trim()||Q,W=_$({skills:{workspacePath:Q,includePluginSkills:!0,cwd:Z},rules:{workspacePath:Q},workflows:{workspacePath:Q}});try{return await W.start(),await J(W)}finally{W.stop()}}function uT($,J){if(!$)return;let Q=$.listRecords("skill");if(J.id){let Z=Q.find((W)=>W.id===J.id);if(Z)return Z}for(let Z of Q)if(Z.filePath===J.path||Z.item.name===J.name||Z.id===J.name)return Z;return}class O${async list($={}){return await lH($,async(J)=>{let Q=pH($),Z=[],W=[],j=[],X=[],f=[];if(J){for(let V of J.listRecords("workflow")){let H=V.item;Z.push({id:V.id,name:H.name,path:V.filePath,enabled:H.disabled!==!0,kind:"workflow",source:cQ(V.filePath,Q),description:H.instructions,toggleable:!1})}for(let V of J.listRecords("rule")){let H=V.item;W.push({id:V.id,name:H.name,path:V.filePath,enabled:H.disabled!==!0,kind:"rule",source:cQ(V.filePath,Q),description:H.instructions,toggleable:!1})}for(let V of J.listRecords("skill")){let H=V.item;j.push({id:V.id,name:H.name,path:V.filePath,enabled:H.disabled!==!0,kind:"skill",source:cQ(V.filePath,Q),description:H.description,toggleable:!0})}}if(Q)try{for(let V of await l6({workspacePath:Q,cwd:$.cwd,providerId:$.availabilityContext?.providerId,modelId:$.availabilityContext?.modelId}))X.push({id:`${V.pluginName}:${V.name}:${V.path}`,name:V.name,path:V.path,enabled:V.enabled,kind:"tool",source:V.source,description:V.description,toggleable:!0})}catch{}let Y=K0();if(c1({filePath:Y}))try{for(let V of A1({filePath:Y}))f.push({id:V.name,name:V.name,path:Y,enabled:V.disabled!==!0,kind:"mcp",source:cQ(Y,Q),description:V.transport.type,toggleable:!0})}catch{}return{workflows:p6(Z.filter((V)=>vQ(V.path))),rules:p6(W.filter((V)=>vQ(V.path))),skills:p6(j.filter((V)=>vQ(V.path))),tools:p6(X),mcp:p6(f.filter((V)=>vQ(V.path)))}})}async toggle($){if($.type==="skills")return await lH($,async(J)=>{let Q=uT(J,$),Z=Q?.filePath;if(!Z)throw Error(`Unable to resolve skill setting '${$.id??$.name??dH($.path??"")}'.`);let W=Q?.item&&"disabled"in Q.item?Q.item.disabled!==!0:void 0,j=$.enabled??(W!==void 0?!W:void 0);if(j===void 0)throw Error(`Cannot determine toggle state for skill '${$.id??$.name??dH($.path??"")}'; provide an explicit enabled value or a resolvable workspace context.`);return await zH({filePath:Z,enabled:j}),await J?.refreshType("skill"),{snapshot:await this.list({...$,userInstructionService:J}),changedTypes:["skills"]}});if($.type==="tools"){if(!$.name?.trim())throw Error("Tool settings toggle requires a tool name.");if($.enabled===void 0)T5($.name);else xf($.name,!$.enabled);return{snapshot:await this.list($),changedTypes:["tools"]}}if($.type==="mcp"){let J=$.name?.trim()||$.id?.trim();if(!J)throw Error("MCP server settings toggle requires a server name.");let Q=$.path?.trim()||K0(),Z=$.enabled;if(Z===void 0){let W=A1({filePath:Q}).find((j)=>j.name===J);if(!W)throw Error(`Unknown MCP server: ${J}`);Z=W.disabled===!0}return Y2({filePath:Q,name:J,disabled:!Z}),{snapshot:await this.list($),changedTypes:["mcp"]}}throw Error(`Settings type '${$.type}' does not support toggles.`)}}function K2(){return new O$}function iH($){return{async list(J){let Q=$;if(Q.listSettings)return await Q.listSettings(J);return await K2().list(J)},async toggle(J){let Q=$;if(Q.toggleSetting)return await Q.toggleSetting(J);return await K2().toggle(J)}}}function nH($){function J(){let Q=$.pendingPrompts;if(!Q)throw Error("Pending prompt service is not available.");return Q}return{list(Q){return J().list(Q)},update(Q){return J().update(Q)},delete(Q){return J().delete(Q)}}}var aH={};w(aH,{splitCoreSessionConfig:()=>r6,isSessionNotFoundError:()=>d1,SessionNotFoundError:()=>u1,SESSION_NOT_FOUND_ERROR_CODE:()=>G2});var G2="session_not_found";class u1 extends Error{sessionId;code="session_not_found";constructor($,J){super(J??($?`session not found: ${$}`:"session not found"));this.sessionId=$;this.name="SessionNotFoundError"}}function d1($){return $ instanceof u1||typeof $==="object"&&$!==null&&"code"in $&&$.code==="session_not_found"}function r6($){let{hooks:J,logger:Q,telemetry:Z,extensionContext:W,extraTools:j,extensions:X,onTeamEvent:f,onConsecutiveMistakeLimitReached:Y,checkpoint:V,compaction:H,...B}=$,A={};if(J)A.hooks=J;if(Q)A.logger=Q;if(Z)A.telemetry=Z;if(W)A.extensionContext=W;if(j)A.extraTools=j;if(X)A.extensions=X;if(f)A.onTeamEvent=f;if(Y)A.onConsecutiveMistakeLimitReached=Y;if(V?.createCheckpoint)A.checkpoint=V;if(H?.compact)A.compaction=H;let K=Object.keys(A).length>0?A:void 0;return{config:{...B,...V?{checkpoint:{enabled:V.enabled}}:{},...H?{compaction:{enabled:H.enabled,strategy:H.strategy,thresholdRatio:H.thresholdRatio,reserveTokens:H.reserveTokens,preserveRecentTokens:H.preserveRecentTokens,maxInputTokens:H.maxInputTokens,summarizer:H.summarizer}}:{}},...K?{localRuntime:K}:{}}}function sH($){let J=$.config;return"providerId"in J?{...$,config:{...J,...dT($.localRuntime)},localRuntime:$.localRuntime}:$}function ZW($,J={}){let Q=r6($.config),Z=z0(J.defaultCapabilities,$.capabilities),W=lT(Q.localRuntime,$.localRuntime),j=J.withExtensionContext?.(W?.extensionContext);if(j)W={...W??{},extensionContext:j};return{...$,...Q,...W?{localRuntime:W}:{},...Z?{capabilities:Z}:{}}}function dT($){if(!$)return{};let{modelCatalogDefaults:J,userInstructionService:Q,configExtensions:Z,onTeamRestored:W,...j}=$;return j}function lT(...$){let J={};for(let Q of $)if(Q)Object.assign(J,Q);return Object.keys(J).length>0?J:void 0}O0();function oH($){let J=$.input.config.telemetry??$.telemetry;if(!J)return;J.capture({event:x.SESSION.STARTED,properties:{sessionId:$.sessionId,source:$.input.source??U0.CORE,providerId:$.input.config.providerId,modelId:$.input.config.modelId,enableTools:$.input.config.enableTools,enableSpawnAgent:$.input.config.enableSpawnAgent,enableAgentTeams:$.input.config.enableAgentTeams,clientName:$.clientName,runtimeAddress:$.runtimeAddress}})}function i6($){return!!$&&typeof $==="object"&&!Array.isArray($)}function WW($){let J=$?.trim();return J?J:void 0}function pT($,J){let Q=$?.trim();if(!Q)return J;let Z=Date.parse(Q);if(!Number.isFinite(Z))return J;return new Date(Z).toISOString()}function tH($,J){return new Date(new Date($).getTime()+Math.max(0,Math.floor(J))*1000).toISOString()}function eH($,J){return new Date(new Date($).getTime()-Math.max(0,Math.floor(J))*1000).toISOString()}function rT($,J){if(!$)return J;return new Date($).getTime()>=new Date(J).getTime()?$:J}function iT($,J){let Q=$.eventId.trim(),Z=$.eventType.trim(),W=$.source.trim(),j=WW($.subject),X=WW($.dedupeKey)??`${Z}:${W}:${j??Q}`;return{eventId:Q,eventType:Z,source:W,subject:j,occurredAt:pT($.occurredAt,J),workspaceRoot:WW($.workspaceRoot),payload:i6($.payload)?$.payload:void 0,attributes:i6($.attributes)?$.attributes:void 0,dedupeKey:X}}function jW($,J){if(!J)return;let Q=J.split("."),Z=$;for(let W of Q){if(!i6(Z))return;Z=Z[W]}return Z}function nT($,J){if($.attributes&&Object.hasOwn($.attributes,J))return $.attributes[J];if($.payload&&Object.hasOwn($.payload,J))return $.payload[J];let Q={eventId:$.eventId,eventType:$.eventType,source:$.source,subject:$.subject,occurredAt:$.occurredAt,workspaceRoot:$.workspaceRoot,dedupeKey:$.dedupeKey,attributes:$.attributes,payload:$.payload},Z=jW(Q,J);if(Z!==void 0)return Z;if($.attributes){let W=jW($.attributes,J);if(W!==void 0)return W}if($.payload)return jW($.payload,J);return}function uQ($,J){if(Array.isArray(J))return J.some((Q)=>uQ($,Q));if(Array.isArray($))return $.some((Q)=>uQ(Q,J));if(i6(J)){if(!i6($))return!1;return Object.entries(J).every(([Q,Z])=>uQ($[Q],Z))}return Object.is($,J)}function aT($,J){if(!J||Object.keys(J).length===0)return!0;return Object.entries(J).every(([Q,Z])=>uQ(nT($,Q),Z))}class XW{store;nowFn;logger;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now()),this.logger=$.logger}ingestEvent($){let J=new Date(this.nowFn()).toISOString(),Q=iT($,J),Z=this.store.insertEventLog(Q,{receivedAtIso:J});if(!Z.created)return this.logger?.debug("cron.event.duplicate",{eventId:Z.record.eventId,eventType:Z.record.eventType,source:Z.record.source}),{event:Z.record,duplicate:!0,matchedSpecs:[],queuedRuns:[],suppressions:[{reason:"duplicate_event",dedupeKey:Z.record.dedupeKey}]};try{let W=this.store.listEventSpecsForType(Q.eventType),j=[],X=[],f=[];for(let H of W){if(!aT(Q,H.filters)){j.push({specId:H.specId,externalId:H.externalId,reason:"filter_mismatch",dedupeKey:Q.dedupeKey});continue}X.push(H);let B=this.materializeForSpec(H,Q,Z.record.receivedAt);if(B.run)f.push(B.run);else j.push({specId:H.specId,externalId:H.externalId,reason:B.reason,dedupeKey:Q.dedupeKey})}let Y=X.length===0?"unmatched":f.length>0?"queued":"suppressed";this.store.updateEventLogProcessing(Z.record.eventId,{status:Y,matchedSpecCount:X.length,queuedRunCount:f.length,suppressedCount:j.filter((H)=>H.reason!=="filter_mismatch").length});let V=this.store.getEventLog(Z.record.eventId);return this.logger?.debug("cron.event.processed",{eventId:Z.record.eventId,eventType:Z.record.eventType,status:Y,matchedSpecCount:X.length,queuedRunCount:f.length}),{event:V??Z.record,duplicate:!1,matchedSpecs:X,queuedRuns:f,suppressions:j}}catch(W){if(this.store.updateEventLogProcessing(Z.record.eventId,{status:"failed",error:W instanceof Error?W.message:String(W)}),this.logger?.error)this.logger.error("cron.event.failed",{eventId:Z.record.eventId,eventType:Z.record.eventType,error:W});throw W}}materializeForSpec($,J,Q){let Z=J.dedupeKey??J.eventId,W=$.debounceSeconds??0;if(W>0){let Y=this.store.findQueuedEventRunForDedupe({specId:$.specId,dedupeKey:Z});if(Y){let V=rT(Y.scheduledFor,tH(Q,W)),H=this.store.updateQueuedEventRunForDebounce({runId:Y.runId,triggerEventId:J.eventId,scheduledFor:V});if(H)return{run:H,reason:"dedupe_window"}}}let j=$.dedupeWindowSeconds??0;if(j>0&&this.store.hasRecentEventRunForDedupe({specId:$.specId,dedupeKey:Z,sinceIso:eH(Q,j)}))return{reason:"dedupe_window"};let X=$.cooldownSeconds??0;if(X>0&&this.store.hasRecentEventRunForSpec({specId:$.specId,sinceIso:eH(Q,X)}))return{reason:"cooldown"};return{run:this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"event",triggerEventId:J.eventId,scheduledFor:W>0?tH(Q,W):Q}),reason:"dedupe_window"}}}class n6{store;nowFn;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now())}materializeAll(){let $={oneOffQueued:0,scheduleQueued:0},J=this.store.listSpecs({triggerKind:"one_off",enabled:!0,parseStatus:"valid"});for(let Z of J)if(this.materializeOneOff(Z))$.oneOffQueued+=1;let Q=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let Z of Q)try{if(this.materializeSchedule(Z))$.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 QM}from"node:path";import{buildClineSystemPrompt as ZM}from"@cline/shared";import{nowIso as $B}from"@cline/shared/db";import{mkdirSync as sT,writeFileSync as oT}from"node:fs";import{join as tT}from"node:path";import{resolveCronReportsDir as eT}from"@cline/shared/storage";function T$($){if(/[:#\n]/.test($)||$.includes('"'))return JSON.stringify($);return $}function F2($,J){if(J===void 0||J===null)return;return`${$}: ${T$(J)}`}function $M($,J,Q){let Z=[`runId: ${T$($.runId)}`,`specId: ${T$(J.specId)}`,`externalId: ${T$(J.externalId)}`,`title: ${T$(J.title)}`,`triggerKind: ${T$($.triggerKind)}`,`status: ${T$($.status)}`,`sourcePath: ${T$(J.sourcePath)}`],W=[F2("sessionId",$.sessionId),F2("startedAt",$.startedAt),F2("completedAt",$.completedAt),F2("triggerEventId",$.triggerEventId),F2("triggerEventType",Q?.eventType),F2("triggerEventSource",Q?.source),F2("triggerEventSubject",Q?.subject)];for(let j of W)if(j)Z.push(j);return`---
|
|
230
230
|
${Z.join(`
|
|
231
231
|
`)}
|
|
232
232
|
---
|
|
@@ -350,7 +350,7 @@ ${JSON.stringify(Z,null,2)}`}startClaimLeaseHeartbeat($){let J=Math.max(1000,Mat
|
|
|
350
350
|
ON cron_specs(trigger_kind, enabled, next_run_at);`,`CREATE INDEX IF NOT EXISTS cron_specs_event_match_idx
|
|
351
351
|
ON cron_specs(trigger_kind, event_type, enabled);`,`CREATE INDEX IF NOT EXISTS cron_specs_parse_status_idx
|
|
352
352
|
ON cron_specs(parse_status, updated_at DESC);`,`CREATE INDEX IF NOT EXISTS cron_specs_source_path_idx
|
|
353
|
-
ON cron_specs(source_path);`];function BB($){$.exec("PRAGMA journal_mode = WAL;"),$.exec("PRAGMA busy_timeout = 5000;"),$.exec("PRAGMA foreign_keys = ON;");for(let J of rM)$.exec(J)}function
|
|
353
|
+
ON cron_specs(source_path);`];function BB($){$.exec("PRAGMA journal_mode = WAL;"),$.exec("PRAGMA busy_timeout = 5000;"),$.exec("PRAGMA foreign_keys = ON;");for(let J of rM)$.exec(J)}function dQ($){if(!$)return;try{let J=JSON.parse($);if(J&&typeof J==="object"&&!Array.isArray(J))return J}catch{}return}function LW($,J={}){if(!$)return;try{let Q=JSON.parse($);if(!Array.isArray(Q))return;let Z=Q.map((W)=>typeof W==="string"?W.trim():"").filter((W)=>W.length>0);if(J.preserveEmpty)return Z;return Z.length>0?Z:void 0}catch{return}}function U2($){if(typeof $==="number"&&Number.isFinite($))return $;if(typeof $==="bigint")return Number($);return}function M$($){return{specId:o($.spec_id),externalId:o($.external_id),sourcePath:o($.source_path),triggerKind:o($.trigger_kind),sourceMtimeMs:U2($.source_mtime_ms),sourceHash:g($.source_hash),parseStatus:o($.parse_status)==="invalid"?"invalid":"valid",parseError:g($.parse_error),enabled:Number($.enabled??0)===1,removed:Number($.removed??0)===1,title:o($.title),prompt:g($.prompt),workspaceRoot:g($.workspace_root),scheduleExpr:g($.schedule_expr),timezone:g($.timezone),eventType:g($.event_type),filters:dQ(g($.filters_json)),debounceSeconds:U2($.debounce_seconds),dedupeWindowSeconds:U2($.dedupe_window_seconds),cooldownSeconds:U2($.cooldown_seconds),mode:g($.mode),systemPrompt:g($.system_prompt),providerId:g($.provider_id),modelId:g($.model_id),maxIterations:U2($.max_iterations),timeoutSeconds:U2($.timeout_seconds),maxParallel:U2($.max_parallel),tools:LW(g($.tools_json),{preserveEmpty:!0}),notesDirectory:g($.notes_directory),extensions:LW(g($.extensions_json),{preserveEmpty:!0}),source:g($.source),tags:LW(g($.tags_json)),metadata:dQ(g($.metadata_json)),revision:Number($.revision??1),lastMaterializedRunId:g($.last_materialized_run_id),lastRunAt:g($.last_run_at),nextRunAt:g($.next_run_at),createdAt:o($.created_at),updatedAt:o($.updated_at)}}function zW($){return{runId:o($.run_id),specId:o($.spec_id),specRevision:Number($.spec_revision??1),triggerKind:o($.trigger_kind),status:o($.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:o($.created_at),updatedAt:o($.updated_at)}}function AB($){return{eventId:o($.event_id),eventType:o($.event_type),source:o($.source),subject:g($.subject),occurredAt:o($.occurred_at),receivedAt:o($.received_at),workspaceRoot:g($.workspace_root),dedupeKey:g($.dedupe_key),payload:dQ(g($.payload_json)),attributes:dQ(g($.attributes_json)),processingStatus:o($.processing_status),matchedSpecCount:Number($.matched_spec_count??0),queuedRunCount:Number($.queued_run_count??0),suppressedCount:Number($.suppressed_count??0),error:g($.error),createdAt:o($.created_at),updatedAt:o($.updated_at)}}function KB($){return $?JSON.stringify($):null}var aM=["prompt","workspaceRoot","mode","systemPrompt","providerId","modelId","maxIterations","timeoutSeconds","maxParallel","tools","notesDirectory","extensions","source","scheduleExpr","timezone","eventType","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds"];function GB($){if($===void 0)return null;if($&&typeof $==="object")return JSON.stringify($);return $}function sM($,J,Q,Z){for(let W of aM){let j=$[W],X=J[W];if(GB(j)!==GB(X))return!0}if(Q===!1&&Z===!0)return!0;return!1}function oM($){return($.split("/").pop()??$).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}function tM($){return`hub/schedules/${$}.cron.md`}function eM($){let J={...$.metadata??{},...$.createdBy?{__hubScheduleCreatedBy:$.createdBy}:{},...$.cwd?{__hubScheduleCwd:$.cwd}:{},...$.runtimeOptions?{__hubRuntimeOptions:$.runtimeOptions}:{}};return Object.keys(J).length>0?J:void 0}function _W($){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((J)=>J.trim().length>0),enabled:$.enabled!==!1,metadata:eM($)}}function FB($){return JSON.stringify(_W($))}function $q($,J){let Q=$.metadata?{...$.metadata}:{},Z=J.createdBy===null?void 0:J.createdBy!==void 0?J.createdBy:typeof Q.__hubScheduleCreatedBy==="string"?Q.__hubScheduleCreatedBy:void 0,W=J.cwd!==void 0?J.cwd:typeof Q.__hubScheduleCwd==="string"?Q.__hubScheduleCwd:void 0,j=J.runtimeOptions!==void 0?J.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:J.name??$.title,cronPattern:J.cronPattern??$.scheduleExpr??"",prompt:J.prompt??$.prompt??"",workspaceRoot:J.workspaceRoot??$.workspaceRoot??"",cwd:W,modelSelection:J.modelSelection!==void 0?J.modelSelection:$.providerId||$.modelId?{providerId:$.providerId??"",modelId:$.modelId??""}:void 0,enabled:J.enabled??$.enabled,mode:J.mode??($.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"),systemPrompt:J.systemPrompt===null?void 0:J.systemPrompt!==void 0?J.systemPrompt:$.systemPrompt,maxIterations:J.maxIterations===null?void 0:J.maxIterations!==void 0?J.maxIterations:$.maxIterations,timeoutSeconds:J.timeoutSeconds===null?void 0:J.timeoutSeconds!==void 0?J.timeoutSeconds:$.timeoutSeconds,maxParallel:J.maxParallel??$.maxParallel??1,createdBy:Z,tags:J.tags??$.tags,runtimeOptions:j,metadata:J.metadata!==void 0?J.metadata:Object.keys(Q).length>0?Q:void 0}}class e6{db;constructor($={}){let J=$.dbPath??nM();this.db=iM(J),BB(this.db)}close(){this.db.close?.()}getSpecBySourcePath($){let J=this.db.prepare("SELECT * FROM cron_specs WHERE source_path = ?").get($);return J?M$(J):void 0}getSpec($){let J=this.db.prepare("SELECT * FROM cron_specs WHERE spec_id = ?").get($);return J?M$(J):void 0}getSpecByExternalId($){let J=this.db.prepare("SELECT * FROM cron_specs WHERE external_id = ? ORDER BY created_at ASC LIMIT 1").get($);return J?M$(J):void 0}listSpecs($={}){let J=[],Q=[];if($.triggerKind)J.push("trigger_kind = ?"),Q.push($.triggerKind);if(typeof $.enabled==="boolean")J.push("enabled = ?"),Q.push($.enabled?1:0);if($.parseStatus)J.push("parse_status = ?"),Q.push($.parseStatus);if(!$.includeRemoved)J.push("removed = 0");let Z=J.length>0?`WHERE ${J.join(" AND ")}`:"",W=Math.max(1,Math.floor($.limit??500));return this.db.prepare(`SELECT * FROM cron_specs ${Z} ORDER BY created_at DESC LIMIT ?`).all(...Q,W).map((X)=>M$(X))}createHubSchedule($){let J=`sched_${t6()}`,Q=this.upsertSpec({externalId:J,sourcePath:tM(J),triggerKind:"schedule",sourceHash:FB($),parseStatus:"valid",spec:_W($)});this.initializeScheduleNextRun(Q.record.specId);let Z=this.getSpec(Q.record.specId);if(!Z)throw Error("failed to create hub schedule");return Z}getHubSchedule($){let J=this.db.prepare(`SELECT * FROM cron_specs
|
|
354
354
|
WHERE external_id = ? AND source = 'hub-schedule' AND removed = 0
|
|
355
355
|
ORDER BY created_at ASC LIMIT 1`).get($);return J?M$(J):void 0}listHubSchedules($={}){let J=["source = 'hub-schedule'","trigger_kind = 'schedule'","removed = 0"],Q=[];if(typeof $.enabled==="boolean")J.push("enabled = ?"),Q.push($.enabled?1:0);if($.tags&&$.tags.length>0)for(let j of $.tags)J.push("tags_json LIKE ?"),Q.push(`%"${j.trim()}"%`);let Z=Math.max(1,Math.floor($.limit??200));return this.db.prepare(`SELECT * FROM cron_specs
|
|
356
356
|
WHERE ${J.join(" AND ")}
|
|
@@ -495,25 +495,25 @@ ${JSON.stringify(Z,null,2)}`}startClaimLeaseHeartbeat($){let J=Math.max(1000,Mat
|
|
|
495
495
|
error = ?,
|
|
496
496
|
scheduled_for = COALESCE(?, scheduled_for),
|
|
497
497
|
updated_at = ?
|
|
498
|
-
WHERE run_id = ? AND claim_token = ?`).run($.error??null,$.scheduledFor??null,J,$.runId,$.claimToken).changes??0)>0}attachSessionIdToRun($,J){this.db.prepare("UPDATE cron_runs SET session_id = ?, updated_at = ? WHERE run_id = ?").run(J,_0(),$)}attachReportPathToRun($,J){this.db.prepare("UPDATE cron_runs SET report_path = ?, updated_at = ? WHERE run_id = ?").run(J,_0(),$)}}class $J{store;reconciler;watcher;eventIngress;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new e6({dbPath:$.dbPath});let J=$.specs;this.reconciler=new UW({store:this.store,specs:J}),this.materializer=new n6({store:this.store}),this.eventIngress=new XW({store:this.store,logger:$.logger}),this.runner=new a6({store:this.store,materializer:this.materializer,runtimeHandlers:$.runtimeHandlers,workspaceRoot:$.workspaceRoot,specs:J,logger:$.logger,pollIntervalMs:$.pollIntervalMs,claimLeaseSeconds:$.claimLeaseSeconds,globalMaxConcurrency:$.globalMaxConcurrency}),this.watcher=new RW({reconciler:this.reconciler,debounceMs:$.watcherDebounceMs,onReconciled:()=>{this.materializer.materializeAll()},onError:(Q)=>{let Z=$.logger;if(Z)if(Z.error)Z.error("cron.watcher.failed",{error:Q});else Z.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 MB={};w(MB,{manifestToSessionRecord:()=>
|
|
498
|
+
WHERE run_id = ? AND claim_token = ?`).run($.error??null,$.scheduledFor??null,J,$.runId,$.claimToken).changes??0)>0}attachSessionIdToRun($,J){this.db.prepare("UPDATE cron_runs SET session_id = ?, updated_at = ? WHERE run_id = ?").run(J,_0(),$)}attachReportPathToRun($,J){this.db.prepare("UPDATE cron_runs SET report_path = ?, updated_at = ? WHERE run_id = ?").run(J,_0(),$)}}class $J{store;reconciler;watcher;eventIngress;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new e6({dbPath:$.dbPath});let J=$.specs;this.reconciler=new UW({store:this.store,specs:J}),this.materializer=new n6({store:this.store}),this.eventIngress=new XW({store:this.store,logger:$.logger}),this.runner=new a6({store:this.store,materializer:this.materializer,runtimeHandlers:$.runtimeHandlers,workspaceRoot:$.workspaceRoot,specs:J,logger:$.logger,pollIntervalMs:$.pollIntervalMs,claimLeaseSeconds:$.claimLeaseSeconds,globalMaxConcurrency:$.globalMaxConcurrency}),this.watcher=new RW({reconciler:this.reconciler,debounceMs:$.watcherDebounceMs,onReconciled:()=>{this.materializer.materializeAll()},onError:(Q)=>{let Z=$.logger;if(Z)if(Z.error)Z.error("cron.watcher.failed",{error:Q});else Z.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 MB={};w(MB,{manifestToSessionRecord:()=>pQ,listSessionHistoryFromBackend:()=>qW,listSessionHistory:()=>rQ,hydrateSessionHistory:()=>TB});import{readdir as Wq,readFile as zB}from"node:fs/promises";import{join as _B}from"node:path";import{formatDisplayUserInput as jq,normalizeUserInput as Xq}from"@cline/shared";import{resolveSessionDataDir as OB}from"@cline/shared/storage";import{existsSync as Jq}from"node:fs";import{readFile as Qq}from"node:fs/promises";import{formatDisplayUserInput as DB}from"@cline/shared";class JJ{listeners=new Set;subscribe($,J){let Q={listener:$,sessionId:J?.sessionId?.trim()||void 0};return this.listeners.add(Q),()=>{this.listeners.delete(Q)}}emit($){let J=$.payload.sessionId?.trim();for(let Q of this.listeners){if(Q.sessionId&&Q.sessionId!==J)continue;Q.listener($)}}get size(){return this.listeners.size}}async function q$($){let J=$?.trim();if(!J||!Jq(J))return[];try{let Q=(await Qq(J,"utf8")).trim();if(!Q)return[];let Z=JSON.parse(Q);if(Array.isArray(Z))return UB(Z);if(Z&&typeof Z==="object"&&!Array.isArray(Z)){let W=Z.messages;if(Array.isArray(W))return UB(W)}return[]}catch{return[]}}function Zq($){if($.role!=="user")return $;if(typeof $.content==="string")return{...$,content:DB($.content)};return{...$,content:$.content.map((J)=>{if(J.type!=="text"||typeof J.text!=="string")return J;return{...J,text:DB(J.text)}})}}function UB($){return $.map(Zq)}function OW($){return $?{...$}:void 0}async function RB($,J){if(!($.hookName==="tool_call"||!!$.parent_agent_id))return;await J.queueSpawnRequest($);let Z=await J.upsertSubagentSessionFromHook($);if(!Z)return;await J.appendSubagentHookAudit(Z,$),await J.applySubagentStatus(Z,$)}function QJ($){if(typeof $!=="string")return;let J=$.trim();return J.length>0?J:void 0}function r0($){let J=QJ($);if(!J)return;return J.toLowerCase()==="unknown"?void 0:J}function lQ($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function fq($){if(!$||typeof $!=="object"||Array.isArray($))return;return{...$}}function MW($){let J=$??200;return Number.isFinite(J)?Math.max(0,Math.floor(J)):200}function Yq($){if($===0)return 0;return Math.min(Math.max($*2,20),2000)}function Vq($){return $.isSubagent!==!0&&!QJ($.parentSessionId)}function Hq($){let J=$.match(/\d{13,}/g);if(!J||J.length===0)return 0;let Q=0;for(let Z of J){let W=Number.parseInt(Z,10);if(Number.isFinite(W)&&W>Q)Q=W}return Q}function pQ($){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 Bq($){let J=MW($);if(J===0)return[];let Q=OB(),W=(await Wq(Q,{withFileTypes:!0}).catch(()=>[])).filter((X)=>X.isDirectory()).map((X)=>({entry:X,recency:Hq(X.name.trim())})).sort((X,f)=>f.recency-X.recency||f.entry.name.localeCompare(X.entry.name));return(await Promise.all(W.map(async({entry:X})=>{let f=X.name.trim();if(!f)return;let Y=_B(Q,f,`${f}.json`),V=await zB(Y,"utf8").catch(()=>{return});if(!V)return;let H;try{H=JSON.parse(V)}catch{return}let B=S0.safeParse(H);if(!B.success)return;return pQ(B.data)}))).filter((X)=>Boolean(X)).sort((X,f)=>f.startedAt.localeCompare(X.startedAt)).slice(0,J)}async function Aq($,J,Q){let Z=MW(J);if(Z===0)return await $.listSessions(0),[];let W=Q.includeSubagents?Z:Yq(Z),j=await $.listSessions(W);return(Q.includeSubagents?j:j.filter(Vq)).slice(0,Z)}function Kq($){if(typeof $==="string")return $.trim();let J=[];for(let Q of $){if(!Q||typeof Q!=="object")continue;let Z=Q;if(Z.type!=="text")continue;let W=Z.text?.trim();if(W)J.push(W)}return J.join(`
|
|
499
499
|
`).trim()}function LB($){return $.replace(/\s+/g," ").trim()}function Gq($,J){if($.length<=J)return $;return`${$.slice(0,Math.max(0,J-3)).trimEnd()}...`}function Fq($){for(let J of["user","assistant"])for(let Q of $){if(Q.role!==J)continue;let Z=LB(Kq(Q.content));if(!Z)continue;let W=J==="user"?LB(jq(Z)):Z,j=Xq(W.split(`
|
|
500
|
-
`)[0]??W);return Gq(j,50)}return}function Dq($){let J=0;for(let Q of $)J+=
|
|
501
|
-
`,{encoding:"utf8",mode:384}),await Nq($,384)}async function y0($){await NW($,{force:!0}).catch(()=>{return})}async function
|
|
502
|
-
`,"utf8");try{return await J()}finally{await wB(Q)}}catch(W){if((W instanceof Error&&"code"in W?String(W.code):"")!=="EEXIST")throw W;let X=await xq(Q),f=X?Date.now()-Date.parse(X.acquiredAt):NB+1;if(!X||!hq(X.pid)||f>NB){await wB(Q);continue}if(Date.now()>=Z)throw Error(`Timed out waiting for hub startup lock ${Q}`);await kq(yq)}}async function p1($,J){try{let Q=await fetch(J?.authToken?SW($):o9($),{headers:J?.authToken?{authorization:`Bearer ${J.authToken}`}:void 0});if(!Q.ok)return;let Z=await Q.json();if(typeof Z.protocolVersion!=="string"||typeof Z.host!=="string"||typeof Z.port!=="number"||typeof Z.url!=="string")return;return{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((W)=>typeof W==="string"):void 0,coreVersion:typeof Z.coreVersion==="string"?Z.coreVersion:void 0,buildId:typeof Z.buildId==="string"?Z.buildId:void 0,host:Z.host,port:Z.port,url:Z.url,hubId:typeof Z.hubId==="string"?Z.hubId:void 0,authToken:typeof Z.authToken==="string"?Z.authToken:void 0,pid:typeof Z.pid==="number"?Z.pid:void 0,startedAt:typeof Z.startedAt==="string"?Z.startedAt:void 0,updatedAt:typeof Z.updatedAt==="string"?Z.updatedAt:void 0}}catch{return}}function j1($,J,Q="/hub"){return new URL(`ws://${$}:${J}${Q}`).toString()}function o9($){let J=new URL($);return J.protocol=J.protocol==="wss:"?"https:":"http:",J.pathname="/health",J.search="",J.toString()}function SW($){let J=new URL(o9($));return J.pathname="/status",J.toString()}function hB($){return Pq($)}import{CLINE_HUB_DEV_PORT as gq,CLINE_HUB_PORT as mq,resolveClineBuildEnv as vq}from"@cline/shared";var cq="CLINE_HUB_HOST",uq="CLINE_HUB_PORT",dq="CLINE_HUB_PATHNAME",CW="127.0.0.1",yW=mq,EW="/hub";function kB($){return vq($)==="development"?gq:yW}function bW($={}){return($.env??process.env)[cq]?.trim()||CW}function h8($={}){let Q=($.env??process.env)[uq]?.trim();if(!Q)return kB($);let Z=Number.parseInt(Q,10);if(!Number.isInteger(Z)||Z<1||Z>65535)return kB($);return Z}function hW($={}){return($.env??process.env)[dq]?.trim()||EW}function i0($={},J={}){return{host:$.host??bW(J),port:$.port??h8(J),pathname:$.pathname??hW(J)}}import{join as lq}from"node:path";var pq="shared:cline",rq="CLINE_HUB_DISCOVERY_PATH",iq="hub-production";function IB($){let J=m1($.trim());return l1(`workspace:${J||$.trim()}`)}function E0($=pq){return l1($)}function n0(){return{ownerId:iq,discoveryPath:process.env[rq]?.trim()||lq(R2(),"locks","hub","production.json")}}var jP=8000,XP=200,fP=3000,YP=100,VP=[100,250,500,1000,2000],HP="--cline-hub-daemon";function BP($){return[...$.host?["--host",$.host]:[],...typeof $.port==="number"?["--port",String($.port)]:[],...$.pathname?["--pathname",$.pathname]:[]]}function AP(){try{let $=$P(R2(),"logs","hub-daemon.log");return sq(eq($),{recursive:!0}),{fd:oq($,"a"),logPath:$}}catch{return}}function vB(){return mB()==="production"?n0():E0()}function L2($){return ZP($).compatible}function xB($,J,Q){if(!J||J.url!==Q)return $;return{...$,authToken:$.authToken??J.authToken,pid:$.pid??J.pid}}async function z2($,J){try{return await p1($,{authToken:J})}catch{return}}async function KP($,J){let Q=Date.now()+J;while(Date.now()<Q){if(!(await z2($))?.url)return!0;await new Promise((W)=>setTimeout(W,YP))}return!1}async function t9($,J){if(await jJ($.url,$.authToken).catch(()=>!1),$.pid)try{process.kill($.pid,"SIGTERM")}catch{}let Q=await KP($.url,fP);return await y0(J).catch(()=>{return}),Q}async function WJ($,J){if(L2($))return!0;return t9($,J)}async function cB($){if(mB()!=="production")return;let J=E0();if(J.discoveryPath===$.discoveryPath)return;let Q=await G0(J.discoveryPath);if(Q?.url)await t9(Q,J.discoveryPath);else await y0(J.discoveryPath).catch(()=>{return})}function GP(){let $=import.meta.url.endsWith(".ts")?"ts":"js";return JP(new URL(`./entry.${$}`,import.meta.url))}function FP($,J){let Q=GP(),Z=process.execPath?.trim();if(!Z)throw Error("unable to resolve runtime executable for hub daemon");let W=tq(Z).toLowerCase().includes("bun"),j=Q.startsWith("/$bunfs/"),X=W&&Q.toLowerCase().endsWith(".ts"),f=j?[HP]:[...X?["--conditions=development"]:[],Q];return{launcher:Z,args:[...f,"--cwd",$,...BP(J)],cwd:$,env:{...WP(process.env),CLINE_NO_INTERACTIVE:"1",[QP]:"1"}}}function DP($){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 kW($,J={}){if(gB())return;let Q=FP($,J),Z=AP();try{nq(Q.launcher,Q.args,{detached:!0,stdio:Z?["ignore",Z.fd,Z.fd]:"ignore",env:Q.env,cwd:Q.cwd,windowsHide:!0}).unref()}finally{if(Z)aq(Z.fd)}}async function k8($,J={}){for(let Q=0;;Q++)try{kW($,J);return}catch(Z){let W=VP[Q];if(!DP(Z)||W===void 0)throw Z;await new Promise((j)=>setTimeout(j,W))}}function e9($,J={}){if(gB())return;let Q=vB(),Z=i0(J),W=j1(Z.host,Z.port,Z.pathname),j=J.allowPortFallback===!0&&Z.port!==0;cB(Q).catch(()=>{return}).then(()=>G0(Q.discoveryPath)).then(async(X)=>{let f=!1;if(X?.url)if(!X.authToken){if(f=!0,!await t9(X,Q.discoveryPath)&&!j)return}else{let H=await z2(X.url,X.authToken);if(H?.url&&L2(H)&&await G1(H.url,{authToken:X.authToken}))return;if(H?.url)await WJ({...H,authToken:X.authToken},Q.discoveryPath);else await y0(Q.discoveryPath).catch(()=>{return})}let Y=await z2(W);if(Y?.url){if(L2(Y)){if(!j||!f)return}else if(!await WJ({...Y,authToken:void 0},Q.discoveryPath)&&!j)return}let V=j?{...Z,port:0}:Z;await k8($,V)}).catch(()=>{})}async function uB($,J={}){let Q=vB(),Z=J.host!==void 0||J.port!==void 0||J.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),W=i0(J),j=j1(W.host,W.port,W.pathname),X=(K)=>{if(!Z)P$(K.url,K.authToken);return K};await cB(Q).catch(()=>{return});let f=await G0(Q.discoveryPath),Y=!1;if(f?.url){let K=f.authToken;if(!K)Y=!0,await t9(f,Q.discoveryPath);else{let G=await z2(f.url,K);if(G?.url&&L2(G)&&await G1(G.url,{authToken:K}))return X({url:G.url,authToken:K});if(G?.url)await WJ({...G,authToken:K},Q.discoveryPath);else await y0(Q.discoveryPath).catch(()=>{return})}}let V=await z2(j);if(V?.url){let K=xB(V,f,j);if(L2(V))throw Error(`A compatible Cline Hub is already running at ${j}, but its discovery record is missing or unreadable. Run 'cline doctor fix' to repair local hub discovery.${Y?" 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 WJ(K,Q.discoveryPath)&&J.allowPortFallback!==!0&&W.port!==0)throw Error(`An incompatible Cline Hub is already running at ${j} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}let B=J.allowPortFallback===!0&&W.port!==0?{...W,port:0}:W;await k8($,B);let A=Date.now()+jP;while(Date.now()<A){let K=await G0(Q.discoveryPath);if(K?.url&&K.authToken){let R=await z2(K.url,K.authToken);if(R?.url&&L2(R)&&await G1(R.url,{authToken:K.authToken}))return X({url:R.url,authToken:K.authToken})}let G=await z2(j);if(G?.url&&!L2(G)){let R=xB(G,K,j);if(!await WJ(R,Q.discoveryPath)&&J.allowPortFallback!==!0&&W.port!==0)throw Error(`An incompatible Cline Hub is still running at ${j} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}await new Promise((R)=>setTimeout(R,XP))}throw Error("Timed out waiting for detached hub startup.")}function $Q(){return LP()==="production"?n0():E0()}function _P(){let $=globalThis.WebSocket;if(!$)throw Error("Global WebSocket is not available in this runtime. Node 22+ is required for hub mode.");return $}function iB($){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((J)=>Buffer.from(J))).toString();if($&&typeof $==="object"&&"data"in $&&typeof $.data<"u")return iB($.data);return String($)}function OP($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString("utf8");if($ instanceof ArrayBuffer)return Buffer.from($).toString("utf8");return""}function dB($){let J=$,Q=OP(J.reason);return new q0("hub_connection_closed",J.code||Q?`Hub connection closed (code=${J.code??0}${Q?`, reason=${Q}`:""})`:IW,{closeCode:J.code,closeReason:Q||void 0})}function TP($,J){if($ instanceof q0)return $;if($ instanceof Error)return new q0("hub_connect_failed",$.message);if($&&typeof $==="object"&&"error"in $&&$.error instanceof Error)return new q0("hub_connect_failed",$.error.message);let Q=$&&typeof $==="object"&&"message"in $&&typeof $.message==="string"?$.message.trim():"";if(Q)return new q0("hub_connect_failed",Q);let Z=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return new q0("hub_connect_failed",Z?`Failed to connect to hub at ${J.toString()} (${Z} event before socket open).`:`Failed to connect to hub at ${J.toString()}.`)}var MP=8000,qP=200,lB="*",pB=8000,PP="cline-hub-auth.",nB=new Map,aB=new Set,NP=3000,wP=3000,SP=100,IW="Hub connection closed",CP=250,yP=5000,rB=0.5;class q0 extends Error{code;details;constructor($,J,Q){super(J);this.code=$;this.details=Q;this.name="HubTransportError"}}function mW($){return $ instanceof q0}class I8 extends Error{command;code;constructor($,J,Q){super(Q);this.command=$;this.code=J;this.name="HubCommandError"}}function JQ($,J){return $ instanceof I8&&$.code==="hub_command_timeout"&&(J===void 0||$.command===J)}function sB($){let J=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),J)return J;let Q=vW($.toString());return Q?nB.get(Q):void 0}function EP($){try{let Q=new URL($).hostname.toLowerCase().replace(/^\[|\]$/g,"");return Q==="localhost"||Q==="127.0.0.1"||Q==="::1"}catch{return!1}}function vW($){if(!EP($))return;let J=new URL(N$($));return J.search="",J.hash="",J.toString()}function xW($){let J=vW($);return!!J&&aB.has(J)}function P$($,J){let Q=vW($);if(Q){if(aB.add(Q),J?.trim())nB.set(Q,J)}return $}class X1{options;socket;connectPromise;clientId;currentUrl;recoveryPromise;pendingReplies=new Map;listeners=new Set;subscriptionCounts=new Map;reconnectTimer;reconnectAttempt=0;closedByClient=!1;lastCloseError=new q0("hub_connection_closed",IW);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),J=this.options.authToken?.trim()||sB($);$.hash="";let Z=new(_P())($.toString(),J?[`${PP}${J}`]:void 0);this.socket=Z;let W=!1;this.connectPromise=new Promise((j,X)=>{let f=!1,Y=setTimeout(()=>{if(f)return;f=!0,W=!0,this.lastCloseError=new q0("hub_connect_timeout",`Timed out connecting to hub after ${pB}ms`),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0;try{Z.close()}catch{}X(this.lastCloseError)},pB);Z.addEventListener("open",()=>{if(f)return;f=!0,clearTimeout(Y),j()}),Z.addEventListener("error",(V)=>{if(f)return;f=!0,clearTimeout(Y),this.lastCloseError=TP(V,$),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0,X(this.lastCloseError)}),Z.addEventListener("close",(V)=>{if(f)return;if(f=!0,clearTimeout(Y),!W)this.lastCloseError=dB(V),this.sawSocketClose=!0;this.connectPromise=void 0,this.socket=void 0,X(this.lastCloseError)})}),Z.addEventListener("message",(j)=>{this.handleFrame(JSON.parse(iB(j)))}),Z.addEventListener("close",(j)=>{if(this.socket!==Z)return;if(!W)this.lastCloseError=dB(j),this.sawSocketClose=!0;this.registered=!1;for(let X of this.pendingReplies.values())X.reject(this.lastCloseError);if(this.pendingReplies.clear(),this.connectPromise=void 0,this.socket=void 0,!this.closedByClient&&this.hasActiveSubscriptions())this.scheduleReconnect()}),await this.connectPromise,await this.command("client.register",{clientId:this.clientId,clientType:this.options.clientType??"core",displayName:this.options.displayName??"core",transport:"native",actorKind:"client",workspaceContext:{workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}}),this.registered=!0;for(let j of this.subscriptionCounts.keys())this.sendSubscriptionFrame("stream.subscribe",this.subscriptionSessionIdFromKey(j));this.reconnectAttempt=0}subscribe($,J){let Q=J?.sessionId?.trim()||void 0,Z={listener:$,sessionId:Q};return this.listeners.add(Z),this.adjustSubscriptionCount(Q,1),()=>{if(!this.listeners.delete(Z))return;this.adjustSubscriptionCount(Q,-1)}}async command($,J,Q,Z){let W=0,j=$!=="client.register"&&$!=="client.unregister";while(!0)try{return await this.commandOnce($,J,Q,Z)}catch(X){if(!j||W>=1||!await this.recoverLocalHubTransport(X))throw X;W+=1}}async commandOnce($,J,Q,Z){await this.connect();let W=UP("hubreq_"),j=zP($,Z?.timeoutMs),X=new Promise((Y,V)=>{let H=j===null?void 0:setTimeout(()=>{if(!this.pendingReplies.delete(W))return;V(new I8($,"hub_command_timeout",`Hub command ${$} timed out after ${j}ms (hub=${this.currentUrl}, requestId=${W}, clientId=${this.clientId}). Check hub-daemon.log for matching command.start/command.slow entries, or run 'cline doctor fix' to restart the hub.`))},j);this.pendingReplies.set(W,{resolve:(B)=>{if(H)clearTimeout(H);Y(B)},reject:(B)=>{if(H)clearTimeout(H);V(B)}})});try{this.sendFrame({kind:"command",envelope:{version:"v1",command:$,requestId:W,clientId:this.clientId,sessionId:Q,timeoutMs:j,payload:J}})}catch(Y){throw this.pendingReplies.delete(W),Y}let f=await X;if(!f.ok){if(f.error?.code===G2){let Y=Q??(typeof J?.sessionId==="string"?J.sessionId:void 0);throw new u1(Y,f.error.message)}throw new I8($,f.error?.code,f.error?.message??`Hub command ${$} failed`)}return f}async recoverLocalHubTransport($){if(!xW(this.currentUrl)||!mW($))return!1;if(this.recoveryPromise)return await this.recoveryPromise;return this.recoveryPromise=(async()=>{let J=await _2({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}).catch(()=>{return});if(!J)return!1;return this.currentUrl=J,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(CP*2**this.reconnectAttempt,yP),J=Math.round($*(1-rB)+Math.random()*$*rB);this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=void 0,this.reconnectSubscribedTransport()},J)}async reconnectSubscribedTransport(){if(this.closedByClient||!this.hasActiveSubscriptions())return;try{await this.connect(),this.reconnectAttempt=0}catch{if(!xW(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 q0("hub_connection_closed",IW),this.sawSocketClose=!1;for(let J of this.pendingReplies.values())J.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 q0("hub_connection_not_open","Hub connection is not open.");throw this.lastCloseError}this.socket.send(JSON.stringify($))}sendSubscriptionFrame($,J){this.sendFrame({kind:$,clientId:this.clientId,...J?{sessionId:J}:{}})}adjustSubscriptionCount($,J){let Q=this.subscriptionKeyForSessionId($),Z=(this.subscriptionCounts.get(Q)??0)+J;if(Z<=0){if(this.subscriptionCounts.delete(Q),!this.hasActiveSubscriptions())this.clearReconnectTimer();if(J<0&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.unsubscribe",$);return}if(this.subscriptionCounts.set(Q,Z),J>0&&Z===1&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.subscribe",$)}subscriptionKeyForSessionId($){return $??lB}subscriptionSessionIdFromKey($){return $===lB?void 0:$}handleFrame($){switch($.kind){case"reply":{let J=$.envelope.requestId;if(!J)return;let Q=this.pendingReplies.get(J);if(!Q)return;this.pendingReplies.delete(J),Q.resolve($.envelope);return}case"event":for(let J of this.listeners){if(J.sessionId&&J.sessionId!==$.envelope.sessionId?.trim())continue;J.listener($.envelope)}return;case"command":case"stream.subscribe":case"stream.unsubscribe":return}}}function N$($){let J=new URL($);if(J.protocol==="http:")J.protocol="ws:";else if(J.protocol==="https:")J.protocol="wss:";return J.toString()}async function G1($,J){let Q=new X1({url:$,authToken:J?.authToken,clientType:"hub-healthcheck",displayName:"hub healthcheck",workspaceRoot:J?.workspaceRoot,cwd:J?.cwd});try{return await Q.connect(),!0}catch{return!1}finally{Q.close()}}async function gW($,J){let Q=N$($),Z=await p1(Q,{authToken:J?.authToken});if(!Z)return{status:"unreachable",url:Q};if(!RP(Z).compatible)return{status:"protocol_mismatch",url:Q};if(J?.verifyConnection===!0&&!await G1(Q,{workspaceRoot:J.workspaceRoot,cwd:J.cwd,authToken:J.authToken}))return{status:"unreachable",url:Q};return{status:"compatible",url:Q}}async function bP($){let J=Date.now()+MP;while(Date.now()<J){let Q=await G0($.discoveryPath);if(Q?.url){let Z=await gW(Q.url,{verifyConnection:!0,authToken:Q.authToken});if(Z.status==="compatible")return P$(Z.url,Q.authToken)}await new Promise((Z)=>setTimeout(Z,qP))}return}async function hP($){let J=Date.now()+wP;while(Date.now()<J){if(!(await p1($).catch(()=>{return}))?.url)return!0;await new Promise((Z)=>setTimeout(Z,SP))}return!1}function kP($,J){try{return N$($)===N$(J)}catch{return!1}}function IP($){return($&&typeof $==="object"&&Array.isArray($.sessions)?$.sessions:[]).some((Q)=>{if(!Q||typeof Q!=="object")return!1;let Z=Q;if(Z.status==="running"||Z.status==="idle"||Z.status==="pending")return!0;return Array.isArray(Z.participants)&&Z.participants.length>0})}async function xP($,J,Q){let Z=new X1({url:$,authToken:J,clientType:"hub-recovery-check",displayName:"hub recovery check",workspaceRoot:Q?.workspaceRoot,cwd:Q?.cwd});try{let W=await Z.command("session.list",{limit:500},void 0,{timeoutMs:NP});return!IP(W.payload)}catch{return!1}finally{await Z.dispose().catch(()=>{return})}}async function XJ($={}){if($.endpoint?.trim()){let W=await gW($.endpoint);return W.status==="compatible"?W.url:void 0}let J=$Q(),Q=await G0(J.discoveryPath);if(!Q?.url)return;let Z=await gW(Q.url,{authToken:Q.authToken});if(Z.status==="compatible")return P$(Z.url,Q.authToken);if(Z.status==="protocol_mismatch")await y0(J.discoveryPath).catch(()=>{return});return}async function _2($={}){let J=await XJ($);if(J&&await G1(J,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return J;if($.endpoint?.trim())return;let Q=$Q();return await k8($.workspaceRoot??process.cwd()),await bP(Q)}async function jJ($,J){let Q=new URL($),Z=J?.trim()||sB(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:Z?{authorization:`Bearer ${Z}`}:void 0})).ok}async function cW($=$Q()){let J=await G0($.discoveryPath);if(!J?.url)return!1;try{if(await jJ(J.url,J.authToken))return!0}catch{}return!1}async function QQ($){if(!xW($.url))return;let J=$Q(),Q=await G0(J.discoveryPath);if(!Q?.url||!kP(Q.url,$.url))return;if(!await xP(Q.url,Q.authToken,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return;if(!await cW())return;if(!await hP(Q.url))return;return await y0(J.discoveryPath).catch(()=>{return}),await _2({workspaceRoot:$.workspaceRoot,cwd:$.cwd})}var VA={};w(VA,{HubRuntimeHost:()=>r1});import{captureSdkError as tB,createSessionId as eB,HUB_CHECKPOINT_CAPABILITY as cP,HUB_COMPACTION_CAPABILITY as uP,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as dP,HUB_HOOK_CAPABILITY_PREFIX as lP,HUB_MISTAKE_LIMIT_CAPABILITY as pP,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as rP,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as iP,isHubToolExecutorName as nP}from"@cline/shared";var oB={};w(oB,{createCoreSessionSnapshot:()=>F1,coreSessionSnapshotToRecord:()=>ZQ});function gP($){return $?JSON.parse(JSON.stringify($)):void 0}function mP($){return $?JSON.parse(JSON.stringify($)):void 0}function vP($){let J=$?.checkpoint&&typeof $.checkpoint==="object"&&!Array.isArray($.checkpoint)?$.checkpoint:void 0,Z=(Array.isArray(J?.history)?J.history:[]).filter((X)=>!!X&&typeof X==="object"&&!Array.isArray(X)).flatMap((X)=>{let f=typeof X.ref==="string"?X.ref.trim():"",Y=Number(X.createdAt),V=Number(X.runCount);if(!f||!Number.isFinite(Y)||!Number.isInteger(V))return[];return[{ref:f,createdAt:Y,runCount:V,...X.kind==="stash"||X.kind==="commit"?{kind:X.kind}:{}}]}),W=Z.at(-1),j=$?.checkpointEnabled===!0?!0:void 0;if(!j&&Z.length===0)return;return{...j?{enabled:j}:{},...W?{latest:W}:{},history:Z}}function F1($){let{session:J}=$,Q=gP(J.metadata);return{version:1,sessionId:J.sessionId,source:J.source,status:J.status,createdAt:J.startedAt,updatedAt:J.updatedAt,endedAt:J.endedAt??null,exitCode:J.exitCode??null,interactive:J.interactive,workspace:{cwd:J.cwd,root:J.workspaceRoot},model:{providerId:J.provider,modelId:J.model},capabilities:{enableTools:J.enableTools,enableSpawn:J.enableSpawn,enableTeams:J.enableTeams},lineage:{...J.parentSessionId?{parentSessionId:J.parentSessionId}:{},...J.parentAgentId?{parentAgentId:J.parentAgentId}:{},...J.agentId?{agentId:J.agentId}:{},...J.conversationId?{conversationId:J.conversationId}:{},isSubagent:J.isSubagent},...J.teamName?{team:{name:J.teamName}}:{},...J.prompt?{prompt:J.prompt}:{},...Q?{metadata:Q}:{},...J.messagesPath?{artifacts:{messagesPath:J.messagesPath}}:{},...$.messages?{messages:mP($.messages)}:{},...$.usage?{usage:{...$.usage}}:{},...$.aggregateUsage?{aggregateUsage:{...$.aggregateUsage}}:{},...(()=>{let Z=vP(Q);return Z?{checkpoint:Z}:{}})()}}function ZQ($){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 x8($){if(!$)return;return JSON.parse(JSON.stringify($))}var aP=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function $A($){if(!$||typeof $!=="object"||Array.isArray($))return;return JSON.parse(JSON.stringify($))}function JA($){if(!$)return;let{userInstructionService:J,...Q}=$;return JSON.parse(JSON.stringify(Q))}function QA($){let J=$&&typeof $==="object"&&!Array.isArray($)?$:{};return{agentId:typeof J.agentId==="string"?J.agentId:"",conversationId:typeof J.conversationId==="string"?J.conversationId:"",iteration:typeof J.iteration==="number"?J.iteration:0,metadata:J.metadata&&typeof J.metadata==="object"&&!Array.isArray(J.metadata)?J.metadata:void 0}}function O2($,J,Q){$.manifest.push(J),$.handlers.set(J.capabilityName,Q)}function ZA($,J){let Q={manifest:[],handlers:new Map};for(let W of Object.keys(J.toolExecutors??{}).filter(nP)){let j=J.toolExecutors?.[W];if(typeof j!=="function")continue;O2(Q,{kind:"toolExecutor",executor:W,capabilityName:`${rP}${W}`},async({payload:X,abortSignal:f})=>{let Y=Array.isArray(X.args)?[...X.args]:[],V={...QA(X.context),signal:f};return{result:await j(...Y,V)}})}for(let W of $?.extraTools??[])O2(Q,{kind:"tool",name:W.name,description:W.description,inputSchema:x8(W.inputSchema)??{},...W.lifecycle?{lifecycle:x8(W.lifecycle)}:{},capabilityName:`${dP}${W.name}`},async({payload:j,abortSignal:X,progress:f})=>{let Y={...QA(j.context),signal:X};return{result:await W.execute(j.input,{...Y,emitUpdate:(H)=>{f({update:H})}})}});let Z=$?.hooks;if(Z)for(let W of aP){let j=Z[W];if(typeof j!=="function")continue;O2(Q,{kind:"hook",name:W,capabilityName:`${lP}${W}`},async({payload:X})=>({control:await j(X.context)}))}if($?.compaction?.compact){let W=$.compaction.compact;O2(Q,{kind:"compaction",capabilityName:uP,config:$A($.compaction)},async({payload:j})=>({result:await W(j.context)}))}if($?.checkpoint?.createCheckpoint){let W=$.checkpoint.createCheckpoint;O2(Q,{kind:"checkpoint",capabilityName:cP,config:$A($.checkpoint)},async({payload:j})=>({result:await W(j.context)}))}if($?.onConsecutiveMistakeLimitReached){let W=$.onConsecutiveMistakeLimitReached;O2(Q,{kind:"mistakeLimit",capabilityName:pP},async({payload:j})=>({result:await W(j.context)}))}if($?.userInstructionService){let W=$.userInstructionService;O2(Q,{kind:"userInstructionService",capabilityName:iP},async()=>{return await W.start().catch(()=>{}),{snapshot:{records:{skill:W.listRecords("skill"),rule:W.listRecords("rule"),workflow:W.listRecords("workflow")},runtimeCommands:W.listRuntimeCommands()}}})}return Q}function fA($){if(typeof $==="string"&&$.trim())return $.trim();if($ instanceof Error)return $.message.trim()||void 0;if($&&typeof $==="object"&&"message"in $){let J=$.message;if(typeof J==="string"&&J.trim())return J.trim()}return}function sP($){return fA($)??"Capability request was cancelled."}function oP($){if(typeof $!=="string")return $;try{return JSON.parse($)}catch{return $}}function tP($){return $==="completed"||$==="max_iterations"||$==="aborted"||$==="mistake_limit"||$==="error"}function eP($){if(!$||typeof $!=="object"||Array.isArray($))return;let J=$,Q=typeof J.inputTokens==="number"?J.inputTokens:void 0,Z=typeof J.outputTokens==="number"?J.outputTokens:void 0;if(Q===void 0||Z===void 0)return;return{inputTokens:Q,outputTokens:Z,cacheReadTokens:typeof J.cacheReadTokens==="number"?J.cacheReadTokens:0,cacheWriteTokens:typeof J.cacheWriteTokens==="number"?J.cacheWriteTokens:0,totalCost:typeof J.totalCost==="number"?J.totalCost:0}}function WA($){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 uW($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function w$($,J){return uW($?.[J])??0}function $N($){let J=$?.delta&&typeof $.delta==="object"?$.delta:void 0,Q=$?.totals&&typeof $.totals==="object"?$.totals:void 0,Z=$?.agent&&typeof $.agent==="object"?$.agent:void 0,W=Z?.teamRole==="teammate"||Z?.teamRole==="lead"?Z.teamRole:void 0;return{event:{type:"usage",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,inputTokens:w$(J,"inputTokens"),outputTokens:w$(J,"outputTokens"),cacheReadTokens:w$(J,"cacheReadTokens"),cacheWriteTokens:w$(J,"cacheWriteTokens"),cost:uW(J?.totalCost),totalInputTokens:w$(Q,"inputTokens"),totalOutputTokens:w$(Q,"outputTokens"),totalCacheReadTokens:w$(Q,"cacheReadTokens"),totalCacheWriteTokens:w$(Q,"cacheWriteTokens"),totalCost:uW(Q?.totalCost)},teamAgentId:typeof Z?.teamAgentId==="string"?Z.teamAgentId:void 0,teamRole:W}}function JN($){let J=$?.result&&typeof $.result==="object"&&!Array.isArray($.result)?$.result:void 0,Q=$?.reason??J?.finishReason,Z=tP(Q)?Q:Q==="failed"?"error":"completed",W=eP($?.usage??J?.usage);return{type:"done",reason:Z,text:typeof $?.text==="string"?$.text:typeof J?.text==="string"?J.text:"",iterations:typeof $?.iterations==="number"?$.iterations:typeof J?.iterations==="number"?J.iterations:0,usage:W}}function WQ($,J){return $.error?.message??`hub command failed: ${J}`}function fJ($){switch($){case"idle":case"completed":return"completed";case"failed":return"failed";case"aborted":return"cancelled";default:return"running"}}function YA($){let J=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):void 0;return{sessionId:$.sessionId,parentSessionId:typeof J?.parentSessionId==="string"?J.parentSessionId:void 0,agentId:$.runtimeSession?.agentId||(typeof J?.agentId==="string"?J.agentId:void 0),parentAgentId:typeof J?.parentAgentId==="string"?J.parentAgentId:void 0,conversationId:typeof J?.conversationId==="string"?J.conversationId:void 0,isSubagent:typeof J?.isSubagent==="boolean"?J.isSubagent:!1,source:typeof J?.source==="string"?J.source:U0.CORE,pid:typeof J?.pid==="number"?J.pid:void 0,startedAt:new Date($.createdAt).toISOString(),endedAt:fJ($.status)==="running"?void 0:new Date($.updatedAt).toISOString(),exitCode:fJ($.status)==="completed"?0:fJ($.status)==="failed"?1:void 0,status:fJ($.status),interactive:J?.interactive===!0,provider:typeof J?.provider==="string"?J.provider:"hub",model:typeof J?.model==="string"?J.model:"hub",cwd:$.cwd?.trim()||$.workspaceRoot,workspaceRoot:$.workspaceRoot,teamName:typeof J?.teamName==="string"?J.teamName:void 0,enableTools:$.runtimeOptions?.enableTools??J?.enableTools===!0,enableSpawn:$.runtimeOptions?.enableSpawn??J?.enableSpawn===!0,enableTeams:$.runtimeOptions?.enableTeams??J?.enableTeams===!0,prompt:typeof J?.prompt==="string"?J.prompt:void 0,metadata:J,updatedAt:new Date($.updatedAt).toISOString(),messagesPath:typeof J?.messagesPath==="string"?J.messagesPath:void 0,hookPath:typeof J?.hookPath==="string"?J.hookPath:void 0}}function S$($){if(!$||typeof $!=="object"||Array.isArray($))return;let J=$;return J.version===1&&typeof J.sessionId==="string"?JSON.parse(JSON.stringify(J)):void 0}function QN($){let J=S$($?.snapshot);if(J)return ZQ(J);let Q=$?.session;return Q?YA(Q):void 0}function jA($,J,Q){let Z=Q?.workspaceRoot?.trim()||J.config.workspaceRoot||J.config.cwd;return S0.parse({version:1,session_id:$,source:J.source??U0.CORE,pid:process.pid,started_at:new Date(Q?.createdAt??Date.now()).toISOString(),status:fJ(Q?.status),interactive:J.interactive===!0,provider:J.config.providerId,model:J.config.modelId,cwd:Q?.cwd?.trim()||J.config.cwd,workspace_root:Z,team_name:J.config.teamName,enable_tools:J.config.enableTools,enable_spawn:J.config.enableSpawnAgent,enable_teams:J.config.enableAgentTeams,prompt:J.prompt?.trim()||void 0,metadata:J.sessionMetadata&&Object.keys(J.sessionMetadata).length>0?J.sessionMetadata:void 0})}function XA($,J){return S0.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??J.prompt?.trim())||void 0,metadata:$.metadata,messages_path:$.artifacts?.messagesPath})}class r1{runtimeAddress;pendingPrompts;client;clientOptions;clientContext;events=new JJ;sessionCapabilities=new Map;sessionClientContributionHandlers=new Map;sessionSubscriptions=new Map;pendingApprovalToolCallIds=new Set;agentDoneEmittedForCurrentRunBySession=new Set;activeCapabilityAbortControllers=new Map;defaultCapabilities;telemetry;constructor($,J){this.clientContext=J,this.clientOptions={authToken:$.authToken,clientType:$.clientType??"core-hub-runtime",displayName:$.displayName??"core hub runtime",workspaceRoot:J?.workspaceRoot,cwd:J?.cwd},this.defaultCapabilities=z0($.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 X1({...this.clientOptions,url:$})}async replaceClient($){let J=this.client;this.client=this.createClient($),this.runtimeAddress=$,await Promise.resolve(J.dispose()).catch(()=>{return})}async recoverLocalHubStartupDeadlock($){if(!JQ($,"session.create"))return!1;let J=await QQ({url:this.client.getUrl(),workspaceRoot:this.clientContext?.workspaceRoot,cwd:this.clientContext?.cwd}).catch(()=>{return});if(!J)return!1;return await this.replaceClient(J),!0}registerPlannedSession($,J,Q){if(this.sessionCapabilities.set($,J),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 J=this.resolveCapabilities($),Q=ZA($.localRuntime,J),Z=$.config.sessionId?.trim()||eB(),W=()=>this.client.command("session.create",{workspaceRoot:$.config.workspaceRoot?.trim()||$.config.cwd,cwd:$.config.cwd,sessionConfig:x8({...$.config,sessionId:Z}),metadata:{...$.sessionMetadata??{},source:$.source??U0.CORE,provider:$.config.providerId,model:$.config.modelId,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,teamName:$.config.teamName,prompt:$.prompt,interactive:$.interactive===!0},runtimeOptions:{...Q.manifest.length>0?{clientContributions:Q.manifest}:{},...$.localRuntime?.configExtensions?{configExtensions:$.localRuntime.configExtensions}:{}},toolPolicies:x8($.toolPolicies),initialMessages:$.initialMessages});this.registerPlannedSession(Z,J,Q.handlers);let j;try{j=await W()}catch(V){if(this.cleanupPlannedSession(Z),await this.recoverLocalHubStartupDeadlock(V)){this.registerPlannedSession(Z,J,Q.handlers);try{j=await W()}catch(H){throw this.cleanupPlannedSession(Z),H}}else throw V}let X=S$(j.payload?.snapshot),f=j.payload?.session,Y=(X?.sessionId??f?.sessionId)?.trim();if(!Y)throw this.cleanupPlannedSession(Z),Error("Hub runtime did not return a session id.");if(Y!==Z)this.cleanupPlannedSession(Z),this.registerPlannedSession(Y,J,Q.handlers);return{sessionId:Y,manifest:X?XA(X,$):jA(Y,$,f),manifestPath:"",messagesPath:"",result:void 0}}async restoreSession($){let J=$.sessionId.trim();if(!J)throw Error("sessionId is required");let Q=$.restore?.messages!==!1;if(Q&&!$.start)throw Error("start is required when restore.messages is true");let Z=$.start,W=Z?this.resolveCapabilities(Z):void 0,j=Z?ZA(Z.localRuntime,W??{}):{manifest:[],handlers:new Map},X=Z?Z.config.sessionId?.trim()||eB():void 0;if(X&&W)this.sessionCapabilities.set(X,W);if(X&&j.handlers.size>0)this.sessionClientContributionHandlers.set(X,j.handlers),this.ensureSessionSubscription(X);let f;try{f=await this.client.command("session.restore",{sessionId:J,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...Z?{workspaceRoot:Z.config.workspaceRoot?.trim()||Z.config.cwd,cwd:Z.config.cwd??$.cwd,sessionConfig:x8({...Z.config,sessionId:X}),metadata:{...Z.sessionMetadata??{},source:Z.source??U0.CORE,provider:Z.config.providerId,model:Z.config.modelId,enableTools:Z.config.enableTools,enableSpawn:Z.config.enableSpawnAgent,enableTeams:Z.config.enableAgentTeams,teamName:Z.config.teamName,prompt:Z.prompt,interactive:Z.interactive===!0},runtimeOptions:{...j.manifest.length>0?{clientContributions:j.manifest}:{},...Z.localRuntime?.configExtensions?{configExtensions:Z.localRuntime.configExtensions}:{}},toolPolicies:x8(Z.toolPolicies)}:{}},J)}catch(K){if(X)this.sessionCapabilities.delete(X),this.sessionClientContributionHandlers.delete(X),this.disposeSessionSubscription(X);throw K}if(!f.ok){let K=typeof f.payload?.error==="string"?f.payload.error:"session.restore failed";if(X)this.sessionCapabilities.delete(X),this.sessionClientContributionHandlers.delete(X),this.disposeSessionSubscription(X);throw Error(K)}let Y=S$(f.payload?.snapshot),V=f.payload?.session,H=(Y?.sessionId??V?.sessionId)?.trim();if(Q&&!H){if(X)this.sessionCapabilities.delete(X),this.sessionClientContributionHandlers.delete(X),this.disposeSessionSubscription(X);throw Error("Hub checkpoint restore returned no session id")}if(H&&X&&H!==X)this.sessionCapabilities.delete(X),this.sessionClientContributionHandlers.delete(X),this.disposeSessionSubscription(X);if(H&&W)this.sessionCapabilities.set(H,W);if(H&&j.handlers.size>0)this.sessionClientContributionHandlers.set(H,j.handlers);if(H)this.ensureSessionSubscription(H);let B=Array.isArray(f.payload?.messages)?f.payload.messages:void 0,A=f.payload?.checkpoint;if(!A)throw Error("Hub checkpoint restore returned no checkpoint");return{sessionId:H,startResult:H?{sessionId:H,manifest:Y?XA(Y,Z??{}):jA(H,Z??{},V),manifestPath:"",messagesPath:"",result:void 0}:void 0,messages:B,checkpoint:A}}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 J=await this.client.command("session.pending_prompts",{sessionId:$.sessionId},$.sessionId);return Array.isArray(J.payload?.prompts)?J.payload.prompts:[]}async requestPendingPromptUpdate($){this.ensureSessionSubscription($.sessionId);let J=await this.client.command("session.update_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(J.payload?.prompts)?J.payload.prompts:[],prompt:J.payload?.prompt,updated:J.payload?.updated===!0}}async requestPendingPromptDelete($){this.ensureSessionSubscription($.sessionId);let J=await this.client.command("session.remove_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(J.payload?.prompts)?J.payload.prompts:[],prompt:J.payload?.prompt,removed:J.payload?.removed===!0}}async getAccumulatedUsage($){let J=await this.client.command("session.get",{includeSnapshot:!0},$),Q=S$(J.payload?.snapshot);if(Q){let X=Q.usage?{...Q.usage}:void 0,f=Q.aggregateUsage?{...Q.aggregateUsage}:void 0;return X||f?{usage:X,aggregateUsage:f}:void 0}let Z=J.payload?.session,W=WA(Z?.usage),j=WA(Z?.aggregateUsage);return W||j?{usage:W,aggregateUsage:j}:void 0}async abort($,J){await this.client.command("run.abort",{sessionId:$,reason:fA(J)},$)}async stopSession($){this.sessionCapabilities.delete($),this.disposeSessionSubscription($),await this.client.command("session.detach",{sessionId:$},$)}async dispose(){for(let[$,J]of this.sessionSubscriptions){J();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 J;try{J=await this.client.command("session.get",void 0,$)}catch(Q){if(d1(Q))return;throw Q}return QN(J.payload)}async listSessions($=100){let J=await this.client.command("session.list",{limit:$}),Q=Array.isArray(J.payload?.snapshots)?J.payload.snapshots.flatMap((W)=>{let j=S$(W);return j?[ZQ(j)]:[]}):[];if(Q.length>0)return Q;return(J.payload?.sessions??[]).map(YA)}async listSettings($){let J=await this.client.command("settings.list",JA($));if(!J.ok)throw Error(WQ(J,"settings.list"));return J.payload?.snapshot}async toggleSetting($){let J=await this.client.command("settings.toggle",JA($));if(!J.ok)throw Error(WQ(J,"settings.toggle"));return{snapshot:J.payload?.snapshot,changedTypes:Array.isArray(J.payload?.changedTypes)?J.payload.changedTypes:[]}}async deleteSession($){return this.sessionCapabilities.delete($),this.disposeSessionSubscription($),(await this.client.command("session.delete",{sessionId:$})).payload?.deleted===!0}async updateSession($,J){let Q={...J.metadata??{}};if(typeof J.prompt==="string")Q.prompt=J.prompt;if(typeof J.title==="string")Q.title=J.title;return{updated:(await this.client.command("session.update",{sessionId:$,metadata:Q})).ok}}async readSessionMessages($){let J=$.trim();if(!J)return[];let Q=await this.client.command("session.messages",{sessionId:J},J);if(!Q.ok)throw tB(this.telemetry,{component:"core",operation:"hub.runtime_host.read_session_messages",error:Error(WQ(Q,"session.messages")),severity:Q.error?.code==="session_not_found"?"warn":"error",handled:!0,context:{command:"session.messages",sessionId:J,errorCode:Q.error?.code,runtimeAddress:this.runtimeAddress}}),Error(WQ(Q,"session.messages"));let Z=Q.payload?.messages;return Array.isArray(Z)?Z:[]}async dispatchHookEvent($){await this.client.command("session.hook",{payload:$})}subscribe($,J){return this.events.subscribe($,J)}ensureSessionSubscription($){let J=$.trim();if(!J||this.sessionSubscriptions.has(J))return;let Q=this.client.subscribe((Z)=>{this.handleHubEvent(Z)},{sessionId:J});this.sessionSubscriptions.set(J,typeof Q==="function"?Q:()=>{})}disposeSessionSubscription($){let J=$.trim();if(!J)return;this.sessionSubscriptions.get(J)?.(),this.sessionSubscriptions.delete(J),this.agentDoneEmittedForCurrentRunBySession.delete(J)}resolveCapabilities($){return z0(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:JN($.payload)}})}handleHubEvent($){let J=$.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(!J)return;switch($.event){case"run.started":{this.agentDoneEmittedForCurrentRunBySession.delete(J);let Q=S$($.payload?.snapshot),Z=$.payload?.session;if(Q)this.events.emit({type:"session_snapshot",payload:{sessionId:J,snapshot:Q}});this.events.emit({type:"status",payload:{sessionId:J,status:Z?.status??"running"}});return}case"iteration.started":{this.events.emit({type:"agent_event",payload:{sessionId:J,event:{type:"iteration_start",iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0}}});return}case"iteration.finished":{this.events.emit({type:"agent_event",payload:{sessionId:J,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:J,event:{type:"content_start",contentType:"text",text:Q}}});return}case"assistant.finished":{this.events.emit({type:"agent_event",payload:{sessionId:J,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:"",Z=$.payload?.redacted===!0;if(!Q&&!Z)return;this.events.emit({type:"agent_event",payload:{sessionId:J,event:{type:"content_start",contentType:"reasoning",reasoning:Q,redacted:Z}}});return}case"reasoning.finished":{this.events.emit({type:"agent_event",payload:{sessionId:J,event:{type:"content_end",contentType:"reasoning",reasoning:typeof $.payload?.reasoning==="string"?$.payload.reasoning:void 0}}});return}case"agent.done":{this.emitAgentDoneIfNeeded({sessionId:J,payload:$.payload});return}case"usage.updated":{let Q=$N($.payload);this.events.emit({type:"agent_event",payload:{sessionId:J,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:J,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:J,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=S$($.payload?.snapshot),Z=$.payload?.session;if(Q)this.events.emit({type:"session_snapshot",payload:{sessionId:J,snapshot:Q}});this.events.emit({type:"status",payload:{sessionId:J,status:Z?.status??"running"}});return}case"session.pending_prompts":{this.events.emit({type:"pending_prompts",payload:{sessionId:J,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:J,id:Q.id,prompt:Q.prompt,delivery:Q.delivery,attachmentCount:Q.attachmentCount}});return}case"run.completed":case"run.failed":case"run.aborted":{let Q=S$($.payload?.snapshot),Z=typeof $.payload?.reason==="string"?$.payload.reason:$.event==="run.aborted"?"aborted":$.event==="run.failed"?"error":"completed";if(this.emitAgentDoneIfNeeded({sessionId:J,payload:{...$.payload,reason:Z}}),Q?.interactive===!0&&X0(Q.status))return;this.events.emit({type:"ended",payload:{sessionId:J,reason:Z,ts:$.timestamp??Date.now()}});return}default:return}}captureDetachedHubEventError($,J,Q){try{tB(this.telemetry,{component:"core",operation:$,error:J,severity:"warn",handled:!0,context:{event:Q.event,sessionId:Q.sessionId,runtimeAddress:this.runtimeAddress}})}catch{}}async handleCapabilityRequest($){let J=$.sessionId?.trim();if(!J)return;let Q=typeof $.payload?.targetClientId==="string"?$.payload.targetClientId:void 0;if(Q&&Q!==this.client.getClientId())return;let Z=typeof $.payload?.requestId==="string"?$.payload.requestId:"",W=typeof $.payload?.capabilityName==="string"?$.payload.capabilityName:"";if(!Z)return;let j=this.sessionClientContributionHandlers.get(J)?.get(W);if(!j){await this.client.command("capability.respond",{requestId:Z,ok:!1,error:`No client contribution handler registered for capability ${W} in session ${J}.`},J).catch(()=>{});return}let X=$.payload?.payload&&typeof $.payload.payload==="object"&&!Array.isArray($.payload.payload)?$.payload.payload:{},f=new AbortController;this.activeCapabilityAbortControllers.set(Z,f);let Y=(V)=>{this.client.command("capability.progress",{requestId:Z,payload:V},J).catch((H)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_progress",H,$)})};try{let V=await j({payload:X,abortSignal:f.signal,progress:Y});if(f.signal.aborted)return;await this.client.command("capability.respond",{requestId:Z,ok:!0,payload:V},J)}catch(V){if(f.signal.aborted)return;await this.client.command("capability.respond",{requestId:Z,ok:!1,error:V instanceof Error?V.message:String(V)},J)}finally{this.activeCapabilityAbortControllers.delete(Z)}}handleCapabilityResolved($){if($.payload?.cancelled!==!0)return;let J=typeof $.payload.requestId==="string"?$.payload.requestId.trim():"";if(!J)return;let Q=this.activeCapabilityAbortControllers.get(J);if(!Q)return;Q.abort(sP($.payload.error))}async handleApprovalRequested($){let J=$.sessionId?.trim();if(!J)return;let Q=this.sessionCapabilities.get(J)?.requestToolApproval??this.defaultCapabilities.requestToolApproval;if(!Q)return;let Z=typeof $.payload?.approvalId==="string"?$.payload.approvalId.trim():"",W=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:"",j=typeof $.payload?.toolName==="string"?$.payload.toolName:"";if(!Z||!W||!j)return;let X=$.payload?.policy&&typeof $.payload.policy==="object"&&!Array.isArray($.payload.policy)?$.payload.policy:{autoApprove:!1},f=oP($.payload?.inputJson);this.pendingApprovalToolCallIds.add(W),this.emitToolCallContentStart({sessionId:J,toolCallId:W,toolName:j,toolInput:f});let Y=await Promise.resolve(Q({sessionId:J,agentId:typeof $.payload?.agentId==="string"?$.payload.agentId:"",conversationId:typeof $.payload?.conversationId==="string"?$.payload.conversationId:J,iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0,toolCallId:W,toolName:j,input:f,policy:X})).catch((V)=>({approved:!1,reason:V instanceof Error?V.message:`Tool approval request failed: ${String(V)}`}));await this.client.command("approval.respond",{approvalId:Z,approved:Y.approved,reason:Y.reason},J).catch(()=>{})}}var HA={};w(HA,{RemoteRuntimeHost:()=>g8});class g8 extends r1{constructor($){super({url:N$($.endpoint),authToken:$.authToken,clientType:$.clientType??"core-remote-runtime",displayName:$.displayName??"core remote runtime",capabilities:$.capabilities},{workspaceRoot:$.workspaceRoot,cwd:$.cwd})}}var BA={};w(BA,{SqliteSessionStore:()=>U1});import{existsSync as ZN,mkdirSync as WN}from"node:fs";import{join as jN}from"node:path";import{asBool as YJ,asOptionalString as D1,asString as i1,ensureSessionSchema as XN,loadSqliteDb as fN,nowIso as jQ,toBoolInt as VJ}from"@cline/shared/db";import{resolveDbDataDir as YN}from"@cline/shared/storage";class U1{sessionsDirPath;db;constructor($={}){this.sessionsDirPath=$.sessionsDir??YN()}init(){this.getRawDb()}ensureSessionsDir(){if(!ZN(this.sessionsDirPath))WN(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}sessionDbPath(){return jN(this.ensureSessionsDir(),"sessions.db")}getRawDb(){if(this.db)return this.db;let $=fN(this.sessionDbPath());return XN($,{includeLegacyMigrations:!0}),this.db=$,$}close(){this.db?.close?.(),this.db=void 0}run($,J=[]){return this.getRawDb().prepare($).run(...J)}queryOne($,J=[]){return this.getRawDb().prepare($).get(...J)??void 0}queryAll($,J=[]){return this.getRawDb().prepare($).all(...J)}create($){let J=jQ();this.run(`INSERT OR REPLACE INTO sessions (
|
|
500
|
+
`)[0]??W);return Gq(j,50)}return}function Dq($){let J=0;for(let Q of $)J+=lQ(Q.metrics?.cost)??0;return J}function Uq($){let J,Q;for(let Z=$.length-1;Z>=0;Z-=1){let W=$[Z];if(!J)J=r0(W.modelInfo?.provider);if(!Q)Q=r0(W.modelInfo?.id);if(J&&Q)break}return{provider:J,model:Q}}function Rq($){return r0($?.provider)??r0($?.provider&&typeof $.provider==="object"&&!Array.isArray($.provider)?$.provider.id:void 0)}function Lq($){return r0($?.model)??r0($?.model&&typeof $.model==="object"&&!Array.isArray($.model)?$.model.id:void 0)}function TW($,J){let Q=fq($.metadata),Z=QJ(J?.title)??QJ(Q?.title),W=lQ(J?.totalCost)??lQ(Q?.totalCost),j=Q||Z!==void 0||W!==void 0?{...Q??{},...Z!==void 0?{title:Z}:{},...W!==void 0?{totalCost:W}:{}}:void 0;return{...$,provider:r0(J?.provider)??r0($.provider)??Rq(Q)??"",model:r0(J?.model)??r0($.model)??Lq(Q)??"",metadata:j}}function zq($){let J=$.content;if(!Array.isArray(J))return!1;return J.some((Q)=>!!Q&&typeof Q==="object"&&Q.type==="tool-call")}function _q($,J){if($.status!=="running"||$.interactive!==!0)return!1;let Q=J.at(-1);return Q?.role==="assistant"&&!zq(Q)}async function Oq($,J){return await Promise.all(J.map(async(Q)=>{if(Q.status!=="running"||Q.interactive!==!0)return Q;let Z=await $.readSessionMessages(Q.sessionId);return _q(Q,Z)?{...Q,status:"idle"}:Q}))}async function TB($,J){return await Promise.all(J.map(async(Q)=>{let Z=TW(Q),W=Boolean(QJ(Z.metadata?.title)),j=Boolean(r0(Z.provider)),X=Boolean(r0(Z.model)),f=lQ(Z.metadata?.totalCost),Y=f!==void 0&&f>0;if(W&&j&&X&&Y)return Z;let V=await $.readSessionMessages(Q.sessionId);if(V.length===0)return Z;let H=Uq(V),B=Dq(V);return TW(Q,{title:W?void 0:Fq(V),provider:j?void 0:H.provider,model:X?void 0:H.model,totalCost:Y||B<=0?void 0:B})}))}async function rQ($,J={}){let Q=MW(J.limit),Z=J.includeSubagents===!0,W=await Aq($,Q,{includeSubagents:Z}),j=J.includeManifestFallback===!0&&W.length<Q?await Bq(Math.min(Math.max(Q*2,100),500)):[],X=new Map;for(let V of[...W,...j]){if(X.has(V.sessionId))continue;X.set(V.sessionId,V)}let f=j.length===0?W:Array.from(X.values()).sort((V,H)=>H.startedAt.localeCompare(V.startedAt)).slice(0,Q),Y=await Oq($,f);if(J.hydrate===!1)return Y.map((V)=>TW(V));return await TB($,Y)}async function Tq($){let J=$.trim();if(!J)return;let Q=_B(OB(),J,`${J}.json`),Z=await zB(Q,"utf8").catch(()=>{return});if(!Z)return;try{let W=S0.safeParse(JSON.parse(Z));return W.success?W.data.messages_path:void 0}catch{return}}async function qW($,J={}){let Q=new Map;return await rQ({listSessions:async(W)=>{let j=await $.listSessions(W);Q.clear();for(let X of j)Q.set(X.sessionId,X);return j.map(W6)},readSessionMessages:async(W)=>{let j=Q.get(W)?.messagesPath??await Tq(W);return await q$(j)}},J)}var xA={};w(xA,{resolveSessionBackend:()=>f3,createRuntimeHost:()=>r8});import{captureSdkError as kA}from"@cline/shared";import{createSessionId as UP,isHubProtocolCompatible as RP,resolveClineBuildEnv as LP,resolveHubCommandTimeoutMs as zP}from"@cline/shared";import{spawn as nq}from"node:child_process";import{closeSync as aq,mkdirSync as sq,openSync as oq}from"node:fs";import{basename as tq,dirname as eq,join as $P}from"node:path";import{fileURLToPath as JP}from"node:url";import{CLINE_RUN_AS_HUB_DAEMON_ENV as QP,isHubDaemonProcess as gB,isHubProtocolCompatible as ZP,resolveClineBuildEnv as mB,withResolvedClineBuildEnv as WP}from"@cline/shared";import{createHash as Mq,randomBytes as qq}from"node:crypto";import{existsSync as Pq}from"node:fs";import{chmod as Nq,mkdir as PW,readFile as SB,rm as NW,writeFile as CB}from"node:fs/promises";import{dirname as yB,join as wW}from"node:path";import{resolveClineDataDir as R2,resolveClineDir as EB}from"@cline/shared/storage";var PB="0.0.51";var ZJ={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:PB,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 wq="CLINE_HUB_DISCOVERY_PATH",Sq="CLINE_HUB_BUILD_ID",NB=30000,Cq=15000,yq=100;function Eq($){return $.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function bq($){return Mq("sha256").update($).digest("hex").slice(0,12)}function hq($){if(!Number.isInteger($)||!$||$<=0)return!1;try{return process.kill($,0),!0}catch(J){return J instanceof Error&&"code"in J?String(J.code)==="EPERM":!1}}function iQ(){return qq(32).toString("hex")}function kq($){return new Promise((J)=>setTimeout(J,$))}function Iq($){return`${$}.lock`}async function xq($){try{let J=JSON.parse(await SB(wW($,"owner.json"),"utf8"));if(typeof J.pid!=="number"||typeof J.acquiredAt!=="string")return;return{pid:J.pid,acquiredAt:J.acquiredAt}}catch{return}}async function wB($){await NW($,{recursive:!0,force:!0}).catch(()=>{return})}function nQ(){return process.env[Sq]?.trim()||String(ZJ.version)}function l1($=process.argv[1]?.trim()||process.cwd()){let J=`hub-${bq($)}`,Q=process.env[wq]?.trim()||wW(R2(),"locks","hub","owners",`${Eq(J)}.json`);return{ownerId:J,discoveryPath:Q}}function bB($=`hub-${Date.now().toString(36)}`){return l1($)}async function G0($){try{let J=JSON.parse(await SB($,"utf8"));if(typeof J.hubId!=="string"||typeof J.protocolVersion!=="string"||typeof J.authToken!=="string"||typeof J.host!=="string"||typeof J.port!=="number"||typeof J.url!=="string"||typeof J.startedAt!=="string"||typeof J.updatedAt!=="string")return;return{hubId:J.hubId,protocolVersion:J.protocolVersion,minClientProtocolVersion:typeof J.minClientProtocolVersion==="string"?J.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof J.maxClientProtocolVersion==="string"?J.maxClientProtocolVersion:void 0,capabilities:Array.isArray(J.capabilities)?J.capabilities.filter((Q)=>typeof Q==="string"):void 0,coreVersion:typeof J.coreVersion==="string"?J.coreVersion:void 0,buildId:typeof J.buildId==="string"?J.buildId:void 0,authToken:J.authToken,host:J.host,port:J.port,url:J.url,pid:typeof J.pid==="number"?J.pid:void 0,startedAt:J.startedAt,updatedAt:J.updatedAt}}catch{return}}async function aQ($,J){await PW(yB($),{recursive:!0}),await NW($,{force:!0}).catch(()=>{return}),await CB($,`${JSON.stringify(J,null,2)}
|
|
501
|
+
`,{encoding:"utf8",mode:384}),await Nq($,384)}async function y0($){await NW($,{force:!0}).catch(()=>{return})}async function sQ($,J){let Q=Iq($);await PW(yB(Q),{recursive:!0});let Z=Date.now()+Cq;while(!0)try{await PW(Q,{recursive:!1}),await CB(wW(Q,"owner.json"),`${JSON.stringify({pid:process.pid,acquiredAt:new Date().toISOString()},null,2)}
|
|
502
|
+
`,"utf8");try{return await J()}finally{await wB(Q)}}catch(W){if((W instanceof Error&&"code"in W?String(W.code):"")!=="EEXIST")throw W;let X=await xq(Q),f=X?Date.now()-Date.parse(X.acquiredAt):NB+1;if(!X||!hq(X.pid)||f>NB){await wB(Q);continue}if(Date.now()>=Z)throw Error(`Timed out waiting for hub startup lock ${Q}`);await kq(yq)}}async function p1($,J){try{let Q=await fetch(J?.authToken?SW($):oQ($),{headers:J?.authToken?{authorization:`Bearer ${J.authToken}`}:void 0});if(!Q.ok)return;let Z=await Q.json();if(typeof Z.protocolVersion!=="string"||typeof Z.host!=="string"||typeof Z.port!=="number"||typeof Z.url!=="string")return;return{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((W)=>typeof W==="string"):void 0,coreVersion:typeof Z.coreVersion==="string"?Z.coreVersion:void 0,buildId:typeof Z.buildId==="string"?Z.buildId:void 0,host:Z.host,port:Z.port,url:Z.url,hubId:typeof Z.hubId==="string"?Z.hubId:void 0,authToken:typeof Z.authToken==="string"?Z.authToken:void 0,pid:typeof Z.pid==="number"?Z.pid:void 0,startedAt:typeof Z.startedAt==="string"?Z.startedAt:void 0,updatedAt:typeof Z.updatedAt==="string"?Z.updatedAt:void 0}}catch{return}}function j1($,J,Q="/hub"){return new URL(`ws://${$}:${J}${Q}`).toString()}function oQ($){let J=new URL($);return J.protocol=J.protocol==="wss:"?"https:":"http:",J.pathname="/health",J.search="",J.toString()}function SW($){let J=new URL(oQ($));return J.pathname="/status",J.toString()}function hB($){return Pq($)}import{CLINE_HUB_DEV_PORT as gq,CLINE_HUB_PORT as mq,resolveClineBuildEnv as vq}from"@cline/shared";var cq="CLINE_HUB_HOST",uq="CLINE_HUB_PORT",dq="CLINE_HUB_PATHNAME",CW="127.0.0.1",yW=mq,EW="/hub";function kB($){return vq($)==="development"?gq:yW}function bW($={}){return($.env??process.env)[cq]?.trim()||CW}function h8($={}){let Q=($.env??process.env)[uq]?.trim();if(!Q)return kB($);let Z=Number.parseInt(Q,10);if(!Number.isInteger(Z)||Z<1||Z>65535)return kB($);return Z}function hW($={}){return($.env??process.env)[dq]?.trim()||EW}function i0($={},J={}){return{host:$.host??bW(J),port:$.port??h8(J),pathname:$.pathname??hW(J)}}import{join as lq}from"node:path";var pq="shared:cline",rq="CLINE_HUB_DISCOVERY_PATH",iq="hub-production";function IB($){let J=m1($.trim());return l1(`workspace:${J||$.trim()}`)}function E0($=pq){return l1($)}function n0(){return{ownerId:iq,discoveryPath:process.env[rq]?.trim()||lq(R2(),"locks","hub","production.json")}}var jP=8000,XP=200,fP=3000,YP=100,VP=[100,250,500,1000,2000],HP="--cline-hub-daemon";function BP($){return[...$.host?["--host",$.host]:[],...typeof $.port==="number"?["--port",String($.port)]:[],...$.pathname?["--pathname",$.pathname]:[]]}function AP(){try{let $=$P(R2(),"logs","hub-daemon.log");return sq(eq($),{recursive:!0}),{fd:oq($,"a"),logPath:$}}catch{return}}function vB(){return mB()==="production"?n0():E0()}function L2($){return ZP($).compatible}function xB($,J,Q){if(!J||J.url!==Q)return $;return{...$,authToken:$.authToken??J.authToken,pid:$.pid??J.pid}}async function z2($,J){try{return await p1($,{authToken:J})}catch{return}}async function KP($,J){let Q=Date.now()+J;while(Date.now()<Q){if(!(await z2($))?.url)return!0;await new Promise((W)=>setTimeout(W,YP))}return!1}async function tQ($,J){if(await jJ($.url,$.authToken).catch(()=>!1),$.pid)try{process.kill($.pid,"SIGTERM")}catch{}let Q=await KP($.url,fP);return await y0(J).catch(()=>{return}),Q}async function WJ($,J){if(L2($))return!0;return tQ($,J)}async function cB($){if(mB()!=="production")return;let J=E0();if(J.discoveryPath===$.discoveryPath)return;let Q=await G0(J.discoveryPath);if(Q?.url)await tQ(Q,J.discoveryPath);else await y0(J.discoveryPath).catch(()=>{return})}function GP(){let $=import.meta.url.endsWith(".ts")?"ts":"js";return JP(new URL(`./entry.${$}`,import.meta.url))}function FP($,J){let Q=GP(),Z=process.execPath?.trim();if(!Z)throw Error("unable to resolve runtime executable for hub daemon");let W=tq(Z).toLowerCase().includes("bun"),j=Q.startsWith("/$bunfs/"),X=W&&Q.toLowerCase().endsWith(".ts"),f=j?[HP]:[...X?["--conditions=development"]:[],Q];return{launcher:Z,args:[...f,"--cwd",$,...BP(J)],cwd:$,env:{...WP(process.env),CLINE_NO_INTERACTIVE:"1",[QP]:"1"}}}function DP($){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 kW($,J={}){if(gB())return;let Q=FP($,J),Z=AP();try{nq(Q.launcher,Q.args,{detached:!0,stdio:Z?["ignore",Z.fd,Z.fd]:"ignore",env:Q.env,cwd:Q.cwd,windowsHide:!0}).unref()}finally{if(Z)aq(Z.fd)}}async function k8($,J={}){for(let Q=0;;Q++)try{kW($,J);return}catch(Z){let W=VP[Q];if(!DP(Z)||W===void 0)throw Z;await new Promise((j)=>setTimeout(j,W))}}function eQ($,J={}){if(gB())return;let Q=vB(),Z=i0(J),W=j1(Z.host,Z.port,Z.pathname),j=J.allowPortFallback===!0&&Z.port!==0;cB(Q).catch(()=>{return}).then(()=>G0(Q.discoveryPath)).then(async(X)=>{let f=!1;if(X?.url)if(!X.authToken){if(f=!0,!await tQ(X,Q.discoveryPath)&&!j)return}else{let H=await z2(X.url,X.authToken);if(H?.url&&L2(H)&&await G1(H.url,{authToken:X.authToken}))return;if(H?.url)await WJ({...H,authToken:X.authToken},Q.discoveryPath);else await y0(Q.discoveryPath).catch(()=>{return})}let Y=await z2(W);if(Y?.url){if(L2(Y)){if(!j||!f)return}else if(!await WJ({...Y,authToken:void 0},Q.discoveryPath)&&!j)return}let V=j?{...Z,port:0}:Z;await k8($,V)}).catch(()=>{})}async function uB($,J={}){let Q=vB(),Z=J.host!==void 0||J.port!==void 0||J.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),W=i0(J),j=j1(W.host,W.port,W.pathname),X=(K)=>{if(!Z)P$(K.url,K.authToken);return K};await cB(Q).catch(()=>{return});let f=await G0(Q.discoveryPath),Y=!1;if(f?.url){let K=f.authToken;if(!K)Y=!0,await tQ(f,Q.discoveryPath);else{let G=await z2(f.url,K);if(G?.url&&L2(G)&&await G1(G.url,{authToken:K}))return X({url:G.url,authToken:K});if(G?.url)await WJ({...G,authToken:K},Q.discoveryPath);else await y0(Q.discoveryPath).catch(()=>{return})}}let V=await z2(j);if(V?.url){let K=xB(V,f,j);if(L2(V))throw Error(`A compatible Cline Hub is already running at ${j}, but its discovery record is missing or unreadable. Run 'cline doctor fix' to repair local hub discovery.${Y?" 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 WJ(K,Q.discoveryPath)&&J.allowPortFallback!==!0&&W.port!==0)throw Error(`An incompatible Cline Hub is already running at ${j} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}let B=J.allowPortFallback===!0&&W.port!==0?{...W,port:0}:W;await k8($,B);let A=Date.now()+jP;while(Date.now()<A){let K=await G0(Q.discoveryPath);if(K?.url&&K.authToken){let R=await z2(K.url,K.authToken);if(R?.url&&L2(R)&&await G1(R.url,{authToken:K.authToken}))return X({url:R.url,authToken:K.authToken})}let G=await z2(j);if(G?.url&&!L2(G)){let R=xB(G,K,j);if(!await WJ(R,Q.discoveryPath)&&J.allowPortFallback!==!0&&W.port!==0)throw Error(`An incompatible Cline Hub is still running at ${j} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}await new Promise((R)=>setTimeout(R,XP))}throw Error("Timed out waiting for detached hub startup.")}function $9(){return LP()==="production"?n0():E0()}function _P(){let $=globalThis.WebSocket;if(!$)throw Error("Global WebSocket is not available in this runtime. Node 22+ is required for hub mode.");return $}function iB($){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((J)=>Buffer.from(J))).toString();if($&&typeof $==="object"&&"data"in $&&typeof $.data<"u")return iB($.data);return String($)}function OP($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString("utf8");if($ instanceof ArrayBuffer)return Buffer.from($).toString("utf8");return""}function dB($){let J=$,Q=OP(J.reason);return new q0("hub_connection_closed",J.code||Q?`Hub connection closed (code=${J.code??0}${Q?`, reason=${Q}`:""})`:IW,{closeCode:J.code,closeReason:Q||void 0})}function TP($,J){if($ instanceof q0)return $;if($ instanceof Error)return new q0("hub_connect_failed",$.message);if($&&typeof $==="object"&&"error"in $&&$.error instanceof Error)return new q0("hub_connect_failed",$.error.message);let Q=$&&typeof $==="object"&&"message"in $&&typeof $.message==="string"?$.message.trim():"";if(Q)return new q0("hub_connect_failed",Q);let Z=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return new q0("hub_connect_failed",Z?`Failed to connect to hub at ${J.toString()} (${Z} event before socket open).`:`Failed to connect to hub at ${J.toString()}.`)}var MP=8000,qP=200,lB="*",pB=8000,PP="cline-hub-auth.",nB=new Map,aB=new Set,NP=3000,wP=3000,SP=100,IW="Hub connection closed",CP=250,yP=5000,rB=0.5;class q0 extends Error{code;details;constructor($,J,Q){super(J);this.code=$;this.details=Q;this.name="HubTransportError"}}function mW($){return $ instanceof q0}class I8 extends Error{command;code;constructor($,J,Q){super(Q);this.command=$;this.code=J;this.name="HubCommandError"}}function J9($,J){return $ instanceof I8&&$.code==="hub_command_timeout"&&(J===void 0||$.command===J)}function sB($){let J=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),J)return J;let Q=vW($.toString());return Q?nB.get(Q):void 0}function EP($){try{let Q=new URL($).hostname.toLowerCase().replace(/^\[|\]$/g,"");return Q==="localhost"||Q==="127.0.0.1"||Q==="::1"}catch{return!1}}function vW($){if(!EP($))return;let J=new URL(N$($));return J.search="",J.hash="",J.toString()}function xW($){let J=vW($);return!!J&&aB.has(J)}function P$($,J){let Q=vW($);if(Q){if(aB.add(Q),J?.trim())nB.set(Q,J)}return $}class X1{options;socket;connectPromise;clientId;currentUrl;recoveryPromise;pendingReplies=new Map;listeners=new Set;subscriptionCounts=new Map;reconnectTimer;reconnectAttempt=0;closedByClient=!1;lastCloseError=new q0("hub_connection_closed",IW);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),J=this.options.authToken?.trim()||sB($);$.hash="";let Z=new(_P())($.toString(),J?[`${PP}${J}`]:void 0);this.socket=Z;let W=!1;this.connectPromise=new Promise((j,X)=>{let f=!1,Y=setTimeout(()=>{if(f)return;f=!0,W=!0,this.lastCloseError=new q0("hub_connect_timeout",`Timed out connecting to hub after ${pB}ms`),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0;try{Z.close()}catch{}X(this.lastCloseError)},pB);Z.addEventListener("open",()=>{if(f)return;f=!0,clearTimeout(Y),j()}),Z.addEventListener("error",(V)=>{if(f)return;f=!0,clearTimeout(Y),this.lastCloseError=TP(V,$),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0,X(this.lastCloseError)}),Z.addEventListener("close",(V)=>{if(f)return;if(f=!0,clearTimeout(Y),!W)this.lastCloseError=dB(V),this.sawSocketClose=!0;this.connectPromise=void 0,this.socket=void 0,X(this.lastCloseError)})}),Z.addEventListener("message",(j)=>{this.handleFrame(JSON.parse(iB(j)))}),Z.addEventListener("close",(j)=>{if(this.socket!==Z)return;if(!W)this.lastCloseError=dB(j),this.sawSocketClose=!0;this.registered=!1;for(let X of this.pendingReplies.values())X.reject(this.lastCloseError);if(this.pendingReplies.clear(),this.connectPromise=void 0,this.socket=void 0,!this.closedByClient&&this.hasActiveSubscriptions())this.scheduleReconnect()}),await this.connectPromise,await this.command("client.register",{clientId:this.clientId,clientType:this.options.clientType??"core",displayName:this.options.displayName??"core",transport:"native",actorKind:"client",workspaceContext:{workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}}),this.registered=!0;for(let j of this.subscriptionCounts.keys())this.sendSubscriptionFrame("stream.subscribe",this.subscriptionSessionIdFromKey(j));this.reconnectAttempt=0}subscribe($,J){let Q=J?.sessionId?.trim()||void 0,Z={listener:$,sessionId:Q};return this.listeners.add(Z),this.adjustSubscriptionCount(Q,1),()=>{if(!this.listeners.delete(Z))return;this.adjustSubscriptionCount(Q,-1)}}async command($,J,Q,Z){let W=0,j=$!=="client.register"&&$!=="client.unregister";while(!0)try{return await this.commandOnce($,J,Q,Z)}catch(X){if(!j||W>=1||!await this.recoverLocalHubTransport(X))throw X;W+=1}}async commandOnce($,J,Q,Z){await this.connect();let W=UP("hubreq_"),j=zP($,Z?.timeoutMs),X=new Promise((Y,V)=>{let H=j===null?void 0:setTimeout(()=>{if(!this.pendingReplies.delete(W))return;V(new I8($,"hub_command_timeout",`Hub command ${$} timed out after ${j}ms (hub=${this.currentUrl}, requestId=${W}, clientId=${this.clientId}). Check hub-daemon.log for matching command.start/command.slow entries, or run 'cline doctor fix' to restart the hub.`))},j);this.pendingReplies.set(W,{resolve:(B)=>{if(H)clearTimeout(H);Y(B)},reject:(B)=>{if(H)clearTimeout(H);V(B)}})});try{this.sendFrame({kind:"command",envelope:{version:"v1",command:$,requestId:W,clientId:this.clientId,sessionId:Q,timeoutMs:j,payload:J}})}catch(Y){throw this.pendingReplies.delete(W),Y}let f=await X;if(!f.ok){if(f.error?.code===G2){let Y=Q??(typeof J?.sessionId==="string"?J.sessionId:void 0);throw new u1(Y,f.error.message)}throw new I8($,f.error?.code,f.error?.message??`Hub command ${$} failed`)}return f}async recoverLocalHubTransport($){if(!xW(this.currentUrl)||!mW($))return!1;if(this.recoveryPromise)return await this.recoveryPromise;return this.recoveryPromise=(async()=>{let J=await _2({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}).catch(()=>{return});if(!J)return!1;return this.currentUrl=J,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(CP*2**this.reconnectAttempt,yP),J=Math.round($*(1-rB)+Math.random()*$*rB);this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=void 0,this.reconnectSubscribedTransport()},J)}async reconnectSubscribedTransport(){if(this.closedByClient||!this.hasActiveSubscriptions())return;try{await this.connect(),this.reconnectAttempt=0}catch{if(!xW(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 q0("hub_connection_closed",IW),this.sawSocketClose=!1;for(let J of this.pendingReplies.values())J.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 q0("hub_connection_not_open","Hub connection is not open.");throw this.lastCloseError}this.socket.send(JSON.stringify($))}sendSubscriptionFrame($,J){this.sendFrame({kind:$,clientId:this.clientId,...J?{sessionId:J}:{}})}adjustSubscriptionCount($,J){let Q=this.subscriptionKeyForSessionId($),Z=(this.subscriptionCounts.get(Q)??0)+J;if(Z<=0){if(this.subscriptionCounts.delete(Q),!this.hasActiveSubscriptions())this.clearReconnectTimer();if(J<0&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.unsubscribe",$);return}if(this.subscriptionCounts.set(Q,Z),J>0&&Z===1&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.subscribe",$)}subscriptionKeyForSessionId($){return $??lB}subscriptionSessionIdFromKey($){return $===lB?void 0:$}handleFrame($){switch($.kind){case"reply":{let J=$.envelope.requestId;if(!J)return;let Q=this.pendingReplies.get(J);if(!Q)return;this.pendingReplies.delete(J),Q.resolve($.envelope);return}case"event":for(let J of this.listeners){if(J.sessionId&&J.sessionId!==$.envelope.sessionId?.trim())continue;J.listener($.envelope)}return;case"command":case"stream.subscribe":case"stream.unsubscribe":return}}}function N$($){let J=new URL($);if(J.protocol==="http:")J.protocol="ws:";else if(J.protocol==="https:")J.protocol="wss:";return J.toString()}async function G1($,J){let Q=new X1({url:$,authToken:J?.authToken,clientType:"hub-healthcheck",displayName:"hub healthcheck",workspaceRoot:J?.workspaceRoot,cwd:J?.cwd});try{return await Q.connect(),!0}catch{return!1}finally{Q.close()}}async function gW($,J){let Q=N$($),Z=await p1(Q,{authToken:J?.authToken});if(!Z)return{status:"unreachable",url:Q};if(!RP(Z).compatible)return{status:"protocol_mismatch",url:Q};if(J?.verifyConnection===!0&&!await G1(Q,{workspaceRoot:J.workspaceRoot,cwd:J.cwd,authToken:J.authToken}))return{status:"unreachable",url:Q};return{status:"compatible",url:Q}}async function bP($){let J=Date.now()+MP;while(Date.now()<J){let Q=await G0($.discoveryPath);if(Q?.url){let Z=await gW(Q.url,{verifyConnection:!0,authToken:Q.authToken});if(Z.status==="compatible")return P$(Z.url,Q.authToken)}await new Promise((Z)=>setTimeout(Z,qP))}return}async function hP($){let J=Date.now()+wP;while(Date.now()<J){if(!(await p1($).catch(()=>{return}))?.url)return!0;await new Promise((Z)=>setTimeout(Z,SP))}return!1}function kP($,J){try{return N$($)===N$(J)}catch{return!1}}function IP($){return($&&typeof $==="object"&&Array.isArray($.sessions)?$.sessions:[]).some((Q)=>{if(!Q||typeof Q!=="object")return!1;let Z=Q;if(Z.status==="running"||Z.status==="idle"||Z.status==="pending")return!0;return Array.isArray(Z.participants)&&Z.participants.length>0})}async function xP($,J,Q){let Z=new X1({url:$,authToken:J,clientType:"hub-recovery-check",displayName:"hub recovery check",workspaceRoot:Q?.workspaceRoot,cwd:Q?.cwd});try{let W=await Z.command("session.list",{limit:500},void 0,{timeoutMs:NP});return!IP(W.payload)}catch{return!1}finally{await Z.dispose().catch(()=>{return})}}async function XJ($={}){if($.endpoint?.trim()){let W=await gW($.endpoint);return W.status==="compatible"?W.url:void 0}let J=$9(),Q=await G0(J.discoveryPath);if(!Q?.url)return;let Z=await gW(Q.url,{authToken:Q.authToken});if(Z.status==="compatible")return P$(Z.url,Q.authToken);if(Z.status==="protocol_mismatch")await y0(J.discoveryPath).catch(()=>{return});return}async function _2($={}){let J=await XJ($);if(J&&await G1(J,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return J;if($.endpoint?.trim())return;let Q=$9();return await k8($.workspaceRoot??process.cwd()),await bP(Q)}async function jJ($,J){let Q=new URL($),Z=J?.trim()||sB(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:Z?{authorization:`Bearer ${Z}`}:void 0})).ok}async function cW($=$9()){let J=await G0($.discoveryPath);if(!J?.url)return!1;try{if(await jJ(J.url,J.authToken))return!0}catch{}return!1}async function Q9($){if(!xW($.url))return;let J=$9(),Q=await G0(J.discoveryPath);if(!Q?.url||!kP(Q.url,$.url))return;if(!await xP(Q.url,Q.authToken,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return;if(!await cW())return;if(!await hP(Q.url))return;return await y0(J.discoveryPath).catch(()=>{return}),await _2({workspaceRoot:$.workspaceRoot,cwd:$.cwd})}var VA={};w(VA,{HubRuntimeHost:()=>r1});import{captureSdkError as tB,createSessionId as eB,HUB_CHECKPOINT_CAPABILITY as cP,HUB_COMPACTION_CAPABILITY as uP,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as dP,HUB_HOOK_CAPABILITY_PREFIX as lP,HUB_MISTAKE_LIMIT_CAPABILITY as pP,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as rP,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as iP,isHubToolExecutorName as nP}from"@cline/shared";var oB={};w(oB,{createCoreSessionSnapshot:()=>F1,coreSessionSnapshotToRecord:()=>Z9});function gP($){return $?JSON.parse(JSON.stringify($)):void 0}function mP($){return $?JSON.parse(JSON.stringify($)):void 0}function vP($){let J=$?.checkpoint&&typeof $.checkpoint==="object"&&!Array.isArray($.checkpoint)?$.checkpoint:void 0,Z=(Array.isArray(J?.history)?J.history:[]).filter((X)=>!!X&&typeof X==="object"&&!Array.isArray(X)).flatMap((X)=>{let f=typeof X.ref==="string"?X.ref.trim():"",Y=Number(X.createdAt),V=Number(X.runCount);if(!f||!Number.isFinite(Y)||!Number.isInteger(V))return[];return[{ref:f,createdAt:Y,runCount:V,...X.kind==="stash"||X.kind==="commit"?{kind:X.kind}:{}}]}),W=Z.at(-1),j=$?.checkpointEnabled===!0?!0:void 0;if(!j&&Z.length===0)return;return{...j?{enabled:j}:{},...W?{latest:W}:{},history:Z}}function F1($){let{session:J}=$,Q=gP(J.metadata);return{version:1,sessionId:J.sessionId,source:J.source,status:J.status,createdAt:J.startedAt,updatedAt:J.updatedAt,endedAt:J.endedAt??null,exitCode:J.exitCode??null,interactive:J.interactive,workspace:{cwd:J.cwd,root:J.workspaceRoot},model:{providerId:J.provider,modelId:J.model},capabilities:{enableTools:J.enableTools,enableSpawn:J.enableSpawn,enableTeams:J.enableTeams},lineage:{...J.parentSessionId?{parentSessionId:J.parentSessionId}:{},...J.parentAgentId?{parentAgentId:J.parentAgentId}:{},...J.agentId?{agentId:J.agentId}:{},...J.conversationId?{conversationId:J.conversationId}:{},isSubagent:J.isSubagent},...J.teamName?{team:{name:J.teamName}}:{},...J.prompt?{prompt:J.prompt}:{},...Q?{metadata:Q}:{},...J.messagesPath?{artifacts:{messagesPath:J.messagesPath}}:{},...$.messages?{messages:mP($.messages)}:{},...$.usage?{usage:{...$.usage}}:{},...$.aggregateUsage?{aggregateUsage:{...$.aggregateUsage}}:{},...(()=>{let Z=vP(Q);return Z?{checkpoint:Z}:{}})()}}function Z9($){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 x8($){if(!$)return;return JSON.parse(JSON.stringify($))}var aP=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function $A($){if(!$||typeof $!=="object"||Array.isArray($))return;return JSON.parse(JSON.stringify($))}function JA($){if(!$)return;let{userInstructionService:J,...Q}=$;return JSON.parse(JSON.stringify(Q))}function QA($){let J=$&&typeof $==="object"&&!Array.isArray($)?$:{};return{agentId:typeof J.agentId==="string"?J.agentId:"",conversationId:typeof J.conversationId==="string"?J.conversationId:"",iteration:typeof J.iteration==="number"?J.iteration:0,metadata:J.metadata&&typeof J.metadata==="object"&&!Array.isArray(J.metadata)?J.metadata:void 0}}function O2($,J,Q){$.manifest.push(J),$.handlers.set(J.capabilityName,Q)}function ZA($,J){let Q={manifest:[],handlers:new Map};for(let W of Object.keys(J.toolExecutors??{}).filter(nP)){let j=J.toolExecutors?.[W];if(typeof j!=="function")continue;O2(Q,{kind:"toolExecutor",executor:W,capabilityName:`${rP}${W}`},async({payload:X,abortSignal:f})=>{let Y=Array.isArray(X.args)?[...X.args]:[],V={...QA(X.context),signal:f};return{result:await j(...Y,V)}})}for(let W of $?.extraTools??[])O2(Q,{kind:"tool",name:W.name,description:W.description,inputSchema:x8(W.inputSchema)??{},...W.lifecycle?{lifecycle:x8(W.lifecycle)}:{},capabilityName:`${dP}${W.name}`},async({payload:j,abortSignal:X,progress:f})=>{let Y={...QA(j.context),signal:X};return{result:await W.execute(j.input,{...Y,emitUpdate:(H)=>{f({update:H})}})}});let Z=$?.hooks;if(Z)for(let W of aP){let j=Z[W];if(typeof j!=="function")continue;O2(Q,{kind:"hook",name:W,capabilityName:`${lP}${W}`},async({payload:X})=>({control:await j(X.context)}))}if($?.compaction?.compact){let W=$.compaction.compact;O2(Q,{kind:"compaction",capabilityName:uP,config:$A($.compaction)},async({payload:j})=>({result:await W(j.context)}))}if($?.checkpoint?.createCheckpoint){let W=$.checkpoint.createCheckpoint;O2(Q,{kind:"checkpoint",capabilityName:cP,config:$A($.checkpoint)},async({payload:j})=>({result:await W(j.context)}))}if($?.onConsecutiveMistakeLimitReached){let W=$.onConsecutiveMistakeLimitReached;O2(Q,{kind:"mistakeLimit",capabilityName:pP},async({payload:j})=>({result:await W(j.context)}))}if($?.userInstructionService){let W=$.userInstructionService;O2(Q,{kind:"userInstructionService",capabilityName:iP},async()=>{return await W.start().catch(()=>{}),{snapshot:{records:{skill:W.listRecords("skill"),rule:W.listRecords("rule"),workflow:W.listRecords("workflow")},runtimeCommands:W.listRuntimeCommands()}}})}return Q}function fA($){if(typeof $==="string"&&$.trim())return $.trim();if($ instanceof Error)return $.message.trim()||void 0;if($&&typeof $==="object"&&"message"in $){let J=$.message;if(typeof J==="string"&&J.trim())return J.trim()}return}function sP($){return fA($)??"Capability request was cancelled."}function oP($){if(typeof $!=="string")return $;try{return JSON.parse($)}catch{return $}}function tP($){return $==="completed"||$==="max_iterations"||$==="aborted"||$==="mistake_limit"||$==="error"}function eP($){if(!$||typeof $!=="object"||Array.isArray($))return;let J=$,Q=typeof J.inputTokens==="number"?J.inputTokens:void 0,Z=typeof J.outputTokens==="number"?J.outputTokens:void 0;if(Q===void 0||Z===void 0)return;return{inputTokens:Q,outputTokens:Z,cacheReadTokens:typeof J.cacheReadTokens==="number"?J.cacheReadTokens:0,cacheWriteTokens:typeof J.cacheWriteTokens==="number"?J.cacheWriteTokens:0,totalCost:typeof J.totalCost==="number"?J.totalCost:0}}function WA($){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 uW($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function w$($,J){return uW($?.[J])??0}function $N($){let J=$?.delta&&typeof $.delta==="object"?$.delta:void 0,Q=$?.totals&&typeof $.totals==="object"?$.totals:void 0,Z=$?.agent&&typeof $.agent==="object"?$.agent:void 0,W=Z?.teamRole==="teammate"||Z?.teamRole==="lead"?Z.teamRole:void 0;return{event:{type:"usage",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,inputTokens:w$(J,"inputTokens"),outputTokens:w$(J,"outputTokens"),cacheReadTokens:w$(J,"cacheReadTokens"),cacheWriteTokens:w$(J,"cacheWriteTokens"),cost:uW(J?.totalCost),totalInputTokens:w$(Q,"inputTokens"),totalOutputTokens:w$(Q,"outputTokens"),totalCacheReadTokens:w$(Q,"cacheReadTokens"),totalCacheWriteTokens:w$(Q,"cacheWriteTokens"),totalCost:uW(Q?.totalCost)},teamAgentId:typeof Z?.teamAgentId==="string"?Z.teamAgentId:void 0,teamRole:W}}function JN($){let J=$?.result&&typeof $.result==="object"&&!Array.isArray($.result)?$.result:void 0,Q=$?.reason??J?.finishReason,Z=tP(Q)?Q:Q==="failed"?"error":"completed",W=eP($?.usage??J?.usage);return{type:"done",reason:Z,text:typeof $?.text==="string"?$.text:typeof J?.text==="string"?J.text:"",iterations:typeof $?.iterations==="number"?$.iterations:typeof J?.iterations==="number"?J.iterations:0,usage:W}}function W9($,J){return $.error?.message??`hub command failed: ${J}`}function fJ($){switch($){case"idle":case"completed":return"completed";case"failed":return"failed";case"aborted":return"cancelled";default:return"running"}}function YA($){let J=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):void 0;return{sessionId:$.sessionId,parentSessionId:typeof J?.parentSessionId==="string"?J.parentSessionId:void 0,agentId:$.runtimeSession?.agentId||(typeof J?.agentId==="string"?J.agentId:void 0),parentAgentId:typeof J?.parentAgentId==="string"?J.parentAgentId:void 0,conversationId:typeof J?.conversationId==="string"?J.conversationId:void 0,isSubagent:typeof J?.isSubagent==="boolean"?J.isSubagent:!1,source:typeof J?.source==="string"?J.source:U0.CORE,pid:typeof J?.pid==="number"?J.pid:void 0,startedAt:new Date($.createdAt).toISOString(),endedAt:fJ($.status)==="running"?void 0:new Date($.updatedAt).toISOString(),exitCode:fJ($.status)==="completed"?0:fJ($.status)==="failed"?1:void 0,status:fJ($.status),interactive:J?.interactive===!0,provider:typeof J?.provider==="string"?J.provider:"hub",model:typeof J?.model==="string"?J.model:"hub",cwd:$.cwd?.trim()||$.workspaceRoot,workspaceRoot:$.workspaceRoot,teamName:typeof J?.teamName==="string"?J.teamName:void 0,enableTools:$.runtimeOptions?.enableTools??J?.enableTools===!0,enableSpawn:$.runtimeOptions?.enableSpawn??J?.enableSpawn===!0,enableTeams:$.runtimeOptions?.enableTeams??J?.enableTeams===!0,prompt:typeof J?.prompt==="string"?J.prompt:void 0,metadata:J,updatedAt:new Date($.updatedAt).toISOString(),messagesPath:typeof J?.messagesPath==="string"?J.messagesPath:void 0,hookPath:typeof J?.hookPath==="string"?J.hookPath:void 0}}function S$($){if(!$||typeof $!=="object"||Array.isArray($))return;let J=$;return J.version===1&&typeof J.sessionId==="string"?JSON.parse(JSON.stringify(J)):void 0}function QN($){let J=S$($?.snapshot);if(J)return Z9(J);let Q=$?.session;return Q?YA(Q):void 0}function jA($,J,Q){let Z=Q?.workspaceRoot?.trim()||J.config.workspaceRoot||J.config.cwd;return S0.parse({version:1,session_id:$,source:J.source??U0.CORE,pid:process.pid,started_at:new Date(Q?.createdAt??Date.now()).toISOString(),status:fJ(Q?.status),interactive:J.interactive===!0,provider:J.config.providerId,model:J.config.modelId,cwd:Q?.cwd?.trim()||J.config.cwd,workspace_root:Z,team_name:J.config.teamName,enable_tools:J.config.enableTools,enable_spawn:J.config.enableSpawnAgent,enable_teams:J.config.enableAgentTeams,prompt:J.prompt?.trim()||void 0,metadata:J.sessionMetadata&&Object.keys(J.sessionMetadata).length>0?J.sessionMetadata:void 0})}function XA($,J){return S0.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??J.prompt?.trim())||void 0,metadata:$.metadata,messages_path:$.artifacts?.messagesPath})}class r1{runtimeAddress;pendingPrompts;client;clientOptions;clientContext;events=new JJ;sessionCapabilities=new Map;sessionClientContributionHandlers=new Map;sessionSubscriptions=new Map;pendingApprovalToolCallIds=new Set;agentDoneEmittedForCurrentRunBySession=new Set;activeCapabilityAbortControllers=new Map;defaultCapabilities;telemetry;constructor($,J){this.clientContext=J,this.clientOptions={authToken:$.authToken,clientType:$.clientType??"core-hub-runtime",displayName:$.displayName??"core hub runtime",workspaceRoot:J?.workspaceRoot,cwd:J?.cwd},this.defaultCapabilities=z0($.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 X1({...this.clientOptions,url:$})}async replaceClient($){let J=this.client;this.client=this.createClient($),this.runtimeAddress=$,await Promise.resolve(J.dispose()).catch(()=>{return})}async recoverLocalHubStartupDeadlock($){if(!J9($,"session.create"))return!1;let J=await Q9({url:this.client.getUrl(),workspaceRoot:this.clientContext?.workspaceRoot,cwd:this.clientContext?.cwd}).catch(()=>{return});if(!J)return!1;return await this.replaceClient(J),!0}registerPlannedSession($,J,Q){if(this.sessionCapabilities.set($,J),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 J=this.resolveCapabilities($),Q=ZA($.localRuntime,J),Z=$.config.sessionId?.trim()||eB(),W=()=>this.client.command("session.create",{workspaceRoot:$.config.workspaceRoot?.trim()||$.config.cwd,cwd:$.config.cwd,sessionConfig:x8({...$.config,sessionId:Z}),metadata:{...$.sessionMetadata??{},source:$.source??U0.CORE,provider:$.config.providerId,model:$.config.modelId,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,teamName:$.config.teamName,prompt:$.prompt,interactive:$.interactive===!0},runtimeOptions:{...Q.manifest.length>0?{clientContributions:Q.manifest}:{},...$.localRuntime?.configExtensions?{configExtensions:$.localRuntime.configExtensions}:{}},toolPolicies:x8($.toolPolicies),initialMessages:$.initialMessages});this.registerPlannedSession(Z,J,Q.handlers);let j;try{j=await W()}catch(V){if(this.cleanupPlannedSession(Z),await this.recoverLocalHubStartupDeadlock(V)){this.registerPlannedSession(Z,J,Q.handlers);try{j=await W()}catch(H){throw this.cleanupPlannedSession(Z),H}}else throw V}let X=S$(j.payload?.snapshot),f=j.payload?.session,Y=(X?.sessionId??f?.sessionId)?.trim();if(!Y)throw this.cleanupPlannedSession(Z),Error("Hub runtime did not return a session id.");if(Y!==Z)this.cleanupPlannedSession(Z),this.registerPlannedSession(Y,J,Q.handlers);return{sessionId:Y,manifest:X?XA(X,$):jA(Y,$,f),manifestPath:"",messagesPath:"",result:void 0}}async restoreSession($){let J=$.sessionId.trim();if(!J)throw Error("sessionId is required");let Q=$.restore?.messages!==!1;if(Q&&!$.start)throw Error("start is required when restore.messages is true");let Z=$.start,W=Z?this.resolveCapabilities(Z):void 0,j=Z?ZA(Z.localRuntime,W??{}):{manifest:[],handlers:new Map},X=Z?Z.config.sessionId?.trim()||eB():void 0;if(X&&W)this.sessionCapabilities.set(X,W);if(X&&j.handlers.size>0)this.sessionClientContributionHandlers.set(X,j.handlers),this.ensureSessionSubscription(X);let f;try{f=await this.client.command("session.restore",{sessionId:J,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...Z?{workspaceRoot:Z.config.workspaceRoot?.trim()||Z.config.cwd,cwd:Z.config.cwd??$.cwd,sessionConfig:x8({...Z.config,sessionId:X}),metadata:{...Z.sessionMetadata??{},source:Z.source??U0.CORE,provider:Z.config.providerId,model:Z.config.modelId,enableTools:Z.config.enableTools,enableSpawn:Z.config.enableSpawnAgent,enableTeams:Z.config.enableAgentTeams,teamName:Z.config.teamName,prompt:Z.prompt,interactive:Z.interactive===!0},runtimeOptions:{...j.manifest.length>0?{clientContributions:j.manifest}:{},...Z.localRuntime?.configExtensions?{configExtensions:Z.localRuntime.configExtensions}:{}},toolPolicies:x8(Z.toolPolicies)}:{}},J)}catch(K){if(X)this.sessionCapabilities.delete(X),this.sessionClientContributionHandlers.delete(X),this.disposeSessionSubscription(X);throw K}if(!f.ok){let K=typeof f.payload?.error==="string"?f.payload.error:"session.restore failed";if(X)this.sessionCapabilities.delete(X),this.sessionClientContributionHandlers.delete(X),this.disposeSessionSubscription(X);throw Error(K)}let Y=S$(f.payload?.snapshot),V=f.payload?.session,H=(Y?.sessionId??V?.sessionId)?.trim();if(Q&&!H){if(X)this.sessionCapabilities.delete(X),this.sessionClientContributionHandlers.delete(X),this.disposeSessionSubscription(X);throw Error("Hub checkpoint restore returned no session id")}if(H&&X&&H!==X)this.sessionCapabilities.delete(X),this.sessionClientContributionHandlers.delete(X),this.disposeSessionSubscription(X);if(H&&W)this.sessionCapabilities.set(H,W);if(H&&j.handlers.size>0)this.sessionClientContributionHandlers.set(H,j.handlers);if(H)this.ensureSessionSubscription(H);let B=Array.isArray(f.payload?.messages)?f.payload.messages:void 0,A=f.payload?.checkpoint;if(!A)throw Error("Hub checkpoint restore returned no checkpoint");return{sessionId:H,startResult:H?{sessionId:H,manifest:Y?XA(Y,Z??{}):jA(H,Z??{},V),manifestPath:"",messagesPath:"",result:void 0}:void 0,messages:B,checkpoint:A}}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 J=await this.client.command("session.pending_prompts",{sessionId:$.sessionId},$.sessionId);return Array.isArray(J.payload?.prompts)?J.payload.prompts:[]}async requestPendingPromptUpdate($){this.ensureSessionSubscription($.sessionId);let J=await this.client.command("session.update_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(J.payload?.prompts)?J.payload.prompts:[],prompt:J.payload?.prompt,updated:J.payload?.updated===!0}}async requestPendingPromptDelete($){this.ensureSessionSubscription($.sessionId);let J=await this.client.command("session.remove_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(J.payload?.prompts)?J.payload.prompts:[],prompt:J.payload?.prompt,removed:J.payload?.removed===!0}}async getAccumulatedUsage($){let J=await this.client.command("session.get",{includeSnapshot:!0},$),Q=S$(J.payload?.snapshot);if(Q){let X=Q.usage?{...Q.usage}:void 0,f=Q.aggregateUsage?{...Q.aggregateUsage}:void 0;return X||f?{usage:X,aggregateUsage:f}:void 0}let Z=J.payload?.session,W=WA(Z?.usage),j=WA(Z?.aggregateUsage);return W||j?{usage:W,aggregateUsage:j}:void 0}async abort($,J){await this.client.command("run.abort",{sessionId:$,reason:fA(J)},$)}async stopSession($){this.sessionCapabilities.delete($),this.disposeSessionSubscription($),await this.client.command("session.detach",{sessionId:$},$)}async dispose(){for(let[$,J]of this.sessionSubscriptions){J();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 J;try{J=await this.client.command("session.get",void 0,$)}catch(Q){if(d1(Q))return;throw Q}return QN(J.payload)}async listSessions($=100){let J=await this.client.command("session.list",{limit:$}),Q=Array.isArray(J.payload?.snapshots)?J.payload.snapshots.flatMap((W)=>{let j=S$(W);return j?[Z9(j)]:[]}):[];if(Q.length>0)return Q;return(J.payload?.sessions??[]).map(YA)}async listSettings($){let J=await this.client.command("settings.list",JA($));if(!J.ok)throw Error(W9(J,"settings.list"));return J.payload?.snapshot}async toggleSetting($){let J=await this.client.command("settings.toggle",JA($));if(!J.ok)throw Error(W9(J,"settings.toggle"));return{snapshot:J.payload?.snapshot,changedTypes:Array.isArray(J.payload?.changedTypes)?J.payload.changedTypes:[]}}async deleteSession($){return this.sessionCapabilities.delete($),this.disposeSessionSubscription($),(await this.client.command("session.delete",{sessionId:$})).payload?.deleted===!0}async updateSession($,J){let Q={...J.metadata??{}};if(typeof J.prompt==="string")Q.prompt=J.prompt;if(typeof J.title==="string")Q.title=J.title;return{updated:(await this.client.command("session.update",{sessionId:$,metadata:Q})).ok}}async readSessionMessages($){let J=$.trim();if(!J)return[];let Q=await this.client.command("session.messages",{sessionId:J},J);if(!Q.ok)throw tB(this.telemetry,{component:"core",operation:"hub.runtime_host.read_session_messages",error:Error(W9(Q,"session.messages")),severity:Q.error?.code==="session_not_found"?"warn":"error",handled:!0,context:{command:"session.messages",sessionId:J,errorCode:Q.error?.code,runtimeAddress:this.runtimeAddress}}),Error(W9(Q,"session.messages"));let Z=Q.payload?.messages;return Array.isArray(Z)?Z:[]}async dispatchHookEvent($){await this.client.command("session.hook",{payload:$})}subscribe($,J){return this.events.subscribe($,J)}ensureSessionSubscription($){let J=$.trim();if(!J||this.sessionSubscriptions.has(J))return;let Q=this.client.subscribe((Z)=>{this.handleHubEvent(Z)},{sessionId:J});this.sessionSubscriptions.set(J,typeof Q==="function"?Q:()=>{})}disposeSessionSubscription($){let J=$.trim();if(!J)return;this.sessionSubscriptions.get(J)?.(),this.sessionSubscriptions.delete(J),this.agentDoneEmittedForCurrentRunBySession.delete(J)}resolveCapabilities($){return z0(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:JN($.payload)}})}handleHubEvent($){let J=$.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(!J)return;switch($.event){case"run.started":{this.agentDoneEmittedForCurrentRunBySession.delete(J);let Q=S$($.payload?.snapshot),Z=$.payload?.session;if(Q)this.events.emit({type:"session_snapshot",payload:{sessionId:J,snapshot:Q}});this.events.emit({type:"status",payload:{sessionId:J,status:Z?.status??"running"}});return}case"iteration.started":{this.events.emit({type:"agent_event",payload:{sessionId:J,event:{type:"iteration_start",iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0}}});return}case"iteration.finished":{this.events.emit({type:"agent_event",payload:{sessionId:J,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:J,event:{type:"content_start",contentType:"text",text:Q}}});return}case"assistant.finished":{this.events.emit({type:"agent_event",payload:{sessionId:J,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:"",Z=$.payload?.redacted===!0;if(!Q&&!Z)return;this.events.emit({type:"agent_event",payload:{sessionId:J,event:{type:"content_start",contentType:"reasoning",reasoning:Q,redacted:Z}}});return}case"reasoning.finished":{this.events.emit({type:"agent_event",payload:{sessionId:J,event:{type:"content_end",contentType:"reasoning",reasoning:typeof $.payload?.reasoning==="string"?$.payload.reasoning:void 0}}});return}case"agent.done":{this.emitAgentDoneIfNeeded({sessionId:J,payload:$.payload});return}case"usage.updated":{let Q=$N($.payload);this.events.emit({type:"agent_event",payload:{sessionId:J,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:J,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:J,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=S$($.payload?.snapshot),Z=$.payload?.session;if(Q)this.events.emit({type:"session_snapshot",payload:{sessionId:J,snapshot:Q}});this.events.emit({type:"status",payload:{sessionId:J,status:Z?.status??"running"}});return}case"session.pending_prompts":{this.events.emit({type:"pending_prompts",payload:{sessionId:J,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:J,id:Q.id,prompt:Q.prompt,delivery:Q.delivery,attachmentCount:Q.attachmentCount}});return}case"run.completed":case"run.failed":case"run.aborted":{let Q=S$($.payload?.snapshot),Z=typeof $.payload?.reason==="string"?$.payload.reason:$.event==="run.aborted"?"aborted":$.event==="run.failed"?"error":"completed";if(this.emitAgentDoneIfNeeded({sessionId:J,payload:{...$.payload,reason:Z}}),Q?.interactive===!0&&X0(Q.status))return;this.events.emit({type:"ended",payload:{sessionId:J,reason:Z,ts:$.timestamp??Date.now()}});return}default:return}}captureDetachedHubEventError($,J,Q){try{tB(this.telemetry,{component:"core",operation:$,error:J,severity:"warn",handled:!0,context:{event:Q.event,sessionId:Q.sessionId,runtimeAddress:this.runtimeAddress}})}catch{}}async handleCapabilityRequest($){let J=$.sessionId?.trim();if(!J)return;let Q=typeof $.payload?.targetClientId==="string"?$.payload.targetClientId:void 0;if(Q&&Q!==this.client.getClientId())return;let Z=typeof $.payload?.requestId==="string"?$.payload.requestId:"",W=typeof $.payload?.capabilityName==="string"?$.payload.capabilityName:"";if(!Z)return;let j=this.sessionClientContributionHandlers.get(J)?.get(W);if(!j){await this.client.command("capability.respond",{requestId:Z,ok:!1,error:`No client contribution handler registered for capability ${W} in session ${J}.`},J).catch(()=>{});return}let X=$.payload?.payload&&typeof $.payload.payload==="object"&&!Array.isArray($.payload.payload)?$.payload.payload:{},f=new AbortController;this.activeCapabilityAbortControllers.set(Z,f);let Y=(V)=>{this.client.command("capability.progress",{requestId:Z,payload:V},J).catch((H)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_progress",H,$)})};try{let V=await j({payload:X,abortSignal:f.signal,progress:Y});if(f.signal.aborted)return;await this.client.command("capability.respond",{requestId:Z,ok:!0,payload:V},J)}catch(V){if(f.signal.aborted)return;await this.client.command("capability.respond",{requestId:Z,ok:!1,error:V instanceof Error?V.message:String(V)},J)}finally{this.activeCapabilityAbortControllers.delete(Z)}}handleCapabilityResolved($){if($.payload?.cancelled!==!0)return;let J=typeof $.payload.requestId==="string"?$.payload.requestId.trim():"";if(!J)return;let Q=this.activeCapabilityAbortControllers.get(J);if(!Q)return;Q.abort(sP($.payload.error))}async handleApprovalRequested($){let J=$.sessionId?.trim();if(!J)return;let Q=this.sessionCapabilities.get(J)?.requestToolApproval??this.defaultCapabilities.requestToolApproval;if(!Q)return;let Z=typeof $.payload?.approvalId==="string"?$.payload.approvalId.trim():"",W=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:"",j=typeof $.payload?.toolName==="string"?$.payload.toolName:"";if(!Z||!W||!j)return;let X=$.payload?.policy&&typeof $.payload.policy==="object"&&!Array.isArray($.payload.policy)?$.payload.policy:{autoApprove:!1},f=oP($.payload?.inputJson);this.pendingApprovalToolCallIds.add(W),this.emitToolCallContentStart({sessionId:J,toolCallId:W,toolName:j,toolInput:f});let Y=await Promise.resolve(Q({sessionId:J,agentId:typeof $.payload?.agentId==="string"?$.payload.agentId:"",conversationId:typeof $.payload?.conversationId==="string"?$.payload.conversationId:J,iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0,toolCallId:W,toolName:j,input:f,policy:X})).catch((V)=>({approved:!1,reason:V instanceof Error?V.message:`Tool approval request failed: ${String(V)}`}));await this.client.command("approval.respond",{approvalId:Z,approved:Y.approved,reason:Y.reason},J).catch(()=>{})}}var HA={};w(HA,{RemoteRuntimeHost:()=>g8});class g8 extends r1{constructor($){super({url:N$($.endpoint),authToken:$.authToken,clientType:$.clientType??"core-remote-runtime",displayName:$.displayName??"core remote runtime",capabilities:$.capabilities},{workspaceRoot:$.workspaceRoot,cwd:$.cwd})}}var BA={};w(BA,{SqliteSessionStore:()=>U1});import{existsSync as ZN,mkdirSync as WN}from"node:fs";import{join as jN}from"node:path";import{asBool as YJ,asOptionalString as D1,asString as i1,ensureSessionSchema as XN,loadSqliteDb as fN,nowIso as j9,toBoolInt as VJ}from"@cline/shared/db";import{resolveDbDataDir as YN}from"@cline/shared/storage";class U1{sessionsDirPath;db;constructor($={}){this.sessionsDirPath=$.sessionsDir??YN()}init(){this.getRawDb()}ensureSessionsDir(){if(!ZN(this.sessionsDirPath))WN(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}sessionDbPath(){return jN(this.ensureSessionsDir(),"sessions.db")}getRawDb(){if(this.db)return this.db;let $=fN(this.sessionDbPath());return XN($,{includeLegacyMigrations:!0}),this.db=$,$}close(){this.db?.close?.(),this.db=void 0}run($,J=[]){return this.getRawDb().prepare($).run(...J)}queryOne($,J=[]){return this.getRawDb().prepare($).get(...J)??void 0}queryAll($,J=[]){return this.getRawDb().prepare($).all(...J)}create($){let J=j9();this.run(`INSERT OR REPLACE INTO sessions (
|
|
503
503
|
session_id, source, pid, started_at, ended_at, exit_code, status, status_lock, interactive,
|
|
504
504
|
provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
|
|
505
505
|
parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
|
|
506
506
|
metadata_json, transcript_path, hook_path, messages_path, updated_at
|
|
507
|
-
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.sessionId,$.source,$.pid,$.startedAt,$.endedAt??null,$.exitCode??null,$.status,0,VJ($.interactive),$.provider,$.model,$.cwd,$.workspaceRoot,$.teamName??null,VJ($.enableTools),VJ($.enableSpawn),VJ($.enableTeams),$.parentSessionId??null,$.parentAgentId??null,$.agentId??null,$.conversationId??null,VJ($.isSubagent),$.prompt??null,$.metadata?JSON.stringify($.metadata):null,"",$.hookPath??"",$.messagesPath??null,J])}update($){let J=[],Q=[];if($.endedAt!==void 0)J.push("ended_at = ?"),Q.push($.endedAt);if($.exitCode!==void 0)J.push("exit_code = ?"),Q.push($.exitCode);if($.status!==void 0)J.push("status = ?"),Q.push($.status);if($.prompt!==void 0)J.push("prompt = ?"),Q.push($.prompt);if($.metadata!==void 0)J.push("metadata_json = ?"),Q.push($.metadata?JSON.stringify($.metadata):null);if($.parentSessionId!==void 0)J.push("parent_session_id = ?"),Q.push($.parentSessionId);if($.parentAgentId!==void 0)J.push("parent_agent_id = ?"),Q.push($.parentAgentId);if($.agentId!==void 0)J.push("agent_id = ?"),Q.push($.agentId);if($.conversationId!==void 0)J.push("conversation_id = ?"),Q.push($.conversationId);if(J.length===0)return;J.push("updated_at = ?"),Q.push(
|
|
507
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.sessionId,$.source,$.pid,$.startedAt,$.endedAt??null,$.exitCode??null,$.status,0,VJ($.interactive),$.provider,$.model,$.cwd,$.workspaceRoot,$.teamName??null,VJ($.enableTools),VJ($.enableSpawn),VJ($.enableTeams),$.parentSessionId??null,$.parentAgentId??null,$.agentId??null,$.conversationId??null,VJ($.isSubagent),$.prompt??null,$.metadata?JSON.stringify($.metadata):null,"",$.hookPath??"",$.messagesPath??null,J])}update($){let J=[],Q=[];if($.endedAt!==void 0)J.push("ended_at = ?"),Q.push($.endedAt);if($.exitCode!==void 0)J.push("exit_code = ?"),Q.push($.exitCode);if($.status!==void 0)J.push("status = ?"),Q.push($.status);if($.prompt!==void 0)J.push("prompt = ?"),Q.push($.prompt);if($.metadata!==void 0)J.push("metadata_json = ?"),Q.push($.metadata?JSON.stringify($.metadata):null);if($.parentSessionId!==void 0)J.push("parent_session_id = ?"),Q.push($.parentSessionId);if($.parentAgentId!==void 0)J.push("parent_agent_id = ?"),Q.push($.parentAgentId);if($.agentId!==void 0)J.push("agent_id = ?"),Q.push($.agentId);if($.conversationId!==void 0)J.push("conversation_id = ?"),Q.push($.conversationId);if(J.length===0)return;J.push("updated_at = ?"),Q.push(j9()),Q.push($.sessionId),this.run(`UPDATE sessions SET ${J.join(", ")} WHERE session_id = ?`,Q)}updateStatus($,J,Q){this.update({sessionId:$,status:J,endedAt:X0(J)?null:j9(),exitCode:X0(J)?null:Q??(J==="failed"?1:0)})}get($){let J=this.queryOne(`SELECT session_id, source, pid, started_at, ended_at, exit_code, status, interactive,
|
|
508
508
|
provider, model, cwd, workspace_root, team_name,
|
|
509
509
|
enable_tools, enable_spawn, enable_teams,
|
|
510
510
|
parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent,
|
|
511
511
|
prompt, metadata_json, hook_path, messages_path, updated_at
|
|
512
|
-
FROM sessions WHERE session_id = ?`,[$]);if(!J)return;return{sessionId:i1(J.session_id),source:i1(J.source),pid:Number(J.pid??0),startedAt:i1(J.started_at),endedAt:J.ended_at??null,exitCode:J.exit_code??null,status:i1(J.status),interactive:YJ(J.interactive),provider:i1(J.provider),model:i1(J.model),cwd:i1(J.cwd),workspaceRoot:i1(J.workspace_root),teamName:D1(J.team_name),enableTools:YJ(J.enable_tools),enableSpawn:YJ(J.enable_spawn),enableTeams:YJ(J.enable_teams),parentSessionId:D1(J.parent_session_id),parentAgentId:D1(J.parent_agent_id),agentId:D1(J.agent_id),conversationId:D1(J.conversation_id),isSubagent:YJ(J.is_subagent),prompt:D1(J.prompt),metadata:(()=>{let Q=D1(J.metadata_json);if(!Q)return;try{let Z=JSON.parse(Q);if(Z&&typeof Z==="object"&&!Array.isArray(Z))return Z}catch{}return})(),hookPath:D1(J.hook_path),messagesPath:D1(J.messages_path),updatedAt:D1(J.updated_at)??
|
|
512
|
+
FROM sessions WHERE session_id = ?`,[$]);if(!J)return;return{sessionId:i1(J.session_id),source:i1(J.source),pid:Number(J.pid??0),startedAt:i1(J.started_at),endedAt:J.ended_at??null,exitCode:J.exit_code??null,status:i1(J.status),interactive:YJ(J.interactive),provider:i1(J.provider),model:i1(J.model),cwd:i1(J.cwd),workspaceRoot:i1(J.workspace_root),teamName:D1(J.team_name),enableTools:YJ(J.enable_tools),enableSpawn:YJ(J.enable_spawn),enableTeams:YJ(J.enable_teams),parentSessionId:D1(J.parent_session_id),parentAgentId:D1(J.parent_agent_id),agentId:D1(J.agent_id),conversationId:D1(J.conversation_id),isSubagent:YJ(J.is_subagent),prompt:D1(J.prompt),metadata:(()=>{let Q=D1(J.metadata_json);if(!Q)return;try{let Z=JSON.parse(Q);if(Z&&typeof Z==="object"&&!Array.isArray(Z))return Z}catch{}return})(),hookPath:D1(J.hook_path),messagesPath:D1(J.messages_path),updatedAt:D1(J.updated_at)??j9()}}list($=200){let J=this.queryAll("SELECT session_id FROM sessions ORDER BY started_at DESC LIMIT ?",[$]),Q=[];for(let Z of J){let W=this.get(i1(Z.session_id));if(W)Q.push(W)}return Q}delete($,J=!1){let Q=this.run("DELETE FROM sessions WHERE session_id = ?",[$]).changes??0;if(J)this.run("DELETE FROM sessions WHERE parent_session_id = ?",[$]);return Q>0}}m8();import{existsSync as J3,mkdirSync as $w,readFileSync as NA,renameSync as Jw,writeFileSync as Qw}from"node:fs";import{join as wA}from"node:path";import{resolveSessionDataDir as Zw}from"@cline/shared/storage";import{dirname as tN}from"node:path";import{nanoid as eN}from"nanoid";import{appendFileSync as _N,existsSync as ON,mkdirSync as AA,readFileSync as TN,writeFileSync as KA}from"node:fs";import{dirname as GA,join as MN}from"node:path";import{ensureHookLogDir as qN}from"@cline/shared/storage";class dW{adapter;messagesArtifactUploader;logger;artifacts;constructor($,J,Q){this.adapter=$;this.messagesArtifactUploader=J;this.logger=Q;this.artifacts=new u7(()=>this.ensureSessionsDir())}ensureSessionsDir(){return this.adapter.ensureSessionsDir()}initializeMessagesFile($,J,Q){lY(J,Q,X7($))}writeSessionManifest($,J){AA(GA($),{recursive:!0}),KA($,`${JSON.stringify(S0.parse(J),null,2)}
|
|
513
513
|
`,"utf8")}readSessionManifest($){return this.readManifestFile($).manifest}readManifestFile($){let J=this.artifacts.sessionManifestPath($,!1);if(!ON(J))return{path:J};try{return{path:J,manifest:S0.parse(JSON.parse(TN(J,"utf8")))}}catch{return{path:J}}}async resolveArtifactPath($,J,Q){let W=(await this.adapter.getSession($))?.[J];return typeof W==="string"&&W.trim().length>0?W:Q($)}async persistSessionMessages($,J,Q){let Z=await this.resolveArtifactPath($,"messagesPath",(X)=>this.artifacts.sessionMessagesPath(X)),W=f7({updatedAt:$0(),context:X7($),messages:J,systemPrompt:Q}),j=`${JSON.stringify(W,null,2)}
|
|
514
514
|
`;if(AA(GA(Z),{recursive:!0}),KA(Z,j,"utf8"),!this.messagesArtifactUploader)return;try{let X=await this.adapter.getSession($);await this.messagesArtifactUploader.uploadMessagesFile({sessionId:$,path:Z,contents:j,row:X})}catch(X){this.logger?.debug("Failed to upload persisted session messages",{sessionId:$,error:X})}}appendStaleSessionHookLog($,J,Q,Z,W){let X=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??MN(qN(),"hooks.jsonl");_N(X,`${JSON.stringify({ts:$,hookName:"session_shutdown",reason:Z,sessionId:J,pid:Q,source:W})}
|
|
515
|
-
`,"utf8")}}import{appendFileSync as PN}from"node:fs";import{join as NN}from"node:path";import{resolveRootSessionId as FA}from"@cline/shared";import{ensureHookLogDir as wN}from"@cline/shared/storage";import{z as lW}from"zod";var SN="subagent",CN=lW.looseObject({task:lW.string().optional(),systemPrompt:lW.string().optional()});class
|
|
516
|
-
`,"utf8")}}import{formatUserInputBlock as oN}from"@cline/shared";var PA={};w(PA,{toTeamProgressLifecycleEvent:()=>d8,sanitizeTeamName:()=>hY,reviveTeamStateDates:()=>E5,parseConfiguredAgentConfig:()=>HJ,loadConfiguredAgentConfigs:()=>v8,createWorkerReviewerTeam:()=>qA,createSpawnAgentTool:()=>A$,createDelegatedAgentConfigProvider:()=>H$,createDelegatedAgent:()=>B$,createConfiguredAgentTools:()=>c8,createAgentTeamsTools:()=>r$,createAgentTeam:()=>iW,buildTeamProgressSummary:()=>u8,buildDelegatedAgentConfig:()=>l$,buildConfiguredAgentToolName:()=>BJ,buildConfiguredAgentToolDescriptors:()=>AJ,bootstrapAgentTeams:()=>Z8,AgentTeamsRuntime:()=>T2,AgentTeam:()=>p8});import{existsSync as yN,readdirSync as EN,readFileSync as bN}from"node:fs";import{basename as DA,extname as hN,join as kN}from"node:path";import{resolveAgentConfigSearchPaths as IN}from"@cline/shared/storage";import RA from"yaml";import{z as P0}from"zod";var LA=P0.object({name:P0.string().trim().min(1),description:P0.string().trim().min(1),tools:P0.union([P0.string(),P0.array(P0.string())]).optional(),skills:P0.union([P0.string(),P0.array(P0.string())]).optional(),providerId:P0.string().trim().min(1).optional(),modelId:P0.string().trim().min(1).optional(),maxIterations:P0.number().int().positive().optional()});function xN($){let J=$.match(/^(---)[^\S\r\n]*(?:\r?\n|$)/);if(!J)throw Error("Missing YAML frontmatter block in agent config file.");let Q=J[0].length,Z=/^---[^\S\r\n]*(?:\r?\n|$)/gm;Z.lastIndex=Q;let W,j=Array.from($.matchAll(Z)).filter((X)=>X.index>=Q);for(let X of j){let f=X.index,Y=$.slice(Q,f);try{let V=RA.parse(Y);if(!V||typeof V!=="object"||Array.isArray(V))continue;LA.parse(V);let H=$.slice(f+X[0].length);W={frontmatter:Y,body:H}}catch{}}if(W)return W;throw Error("Missing closing YAML frontmatter delimiter in agent config file.")}function UA($){if($===void 0)return;let J=Array.isArray($)?$:$.split(",");return Array.from(new Set(J.map((Q)=>Q.trim()).filter((Q)=>Q.length>0)))}function gN($){return $.trim().toLowerCase()}function mN($){let J=hN($).toLowerCase();return J===".yml"||J===".yaml"}function HJ($,J={}){let{frontmatter:Q,body:Z}=xN($),W=RA.parse(Q);if(!W||typeof W!=="object"||Array.isArray(W))throw Error("Agent config frontmatter must be a YAML mapping.");let j=LA.parse(W),X=Z.trim();if(!X)throw Error("Missing system prompt body in agent config file.");return{name:j.name,description:j.description,tools:UA(j.tools),skills:UA(j.skills),providerId:j.providerId,modelId:j.modelId,maxIterations:j.maxIterations,systemPrompt:X,path:J.path}}function v8($){let J=$.searchPaths??IN($.workspaceRoot),Q=new Map,Z=[];for(let j of J.filter(Boolean)){if(!yN(j))continue;let X;try{X=EN(j,{withFileTypes:!0})}catch(f){Z.push({path:j,error:f instanceof Error?f:Error(String(f))});continue}for(let f of X){if(!f.isFile()||!mN(f.name))continue;let Y=kN(j,f.name);try{let V=bN(Y,"utf8"),H=HJ(V,{path:Y}),B=gN(H.name);if(!Q.has(B))Q.set(B,H)}catch(V){Z.push({path:Y,error:V instanceof Error?V:Error(String(V))})}}}return{configs:Array.from(Q.values()).sort((j,X)=>(j.path?DA(j.path):j.name).localeCompare(X.path?DA(X.path):X.name)),errors:Z}}import{createTool as vN,zodToJsonSchema as cN}from"@cline/shared";import{z as zA}from"zod";var pW="subagent_",
|
|
515
|
+
`,"utf8")}}import{appendFileSync as PN}from"node:fs";import{join as NN}from"node:path";import{resolveRootSessionId as FA}from"@cline/shared";import{ensureHookLogDir as wN}from"@cline/shared/storage";import{z as lW}from"zod";var SN="subagent",CN=lW.looseObject({task:lW.string().optional(),systemPrompt:lW.string().optional()});class X9{adapter;manifestStore;toPersistedMessages;heartbeatLogIntervalMs;teamTaskSessionsByAgent=new Map;teamTaskLastHeartbeatBySession=new Map;teamTaskLastProgressLineBySession=new Map;constructor($,J,Q,Z){this.adapter=$;this.manifestStore=J;this.toPersistedMessages=Q;this.heartbeatLogIntervalMs=Z}teamTaskQueueKey($,J){return`${$}::${J}`}activeTeamTaskSessionId($,J){return this.teamTaskSessionsByAgent.get(this.teamTaskQueueKey($,J))?.at(-1)}buildSubsessionRow($,J){return{sessionId:J.sessionId,source:SN,pid:process.ppid,startedAt:J.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:J.parentSessionId,parentAgentId:J.parentAgentId,agentId:J.agentId,conversationId:J.conversationId??null,isSubagent:!0,prompt:J.prompt,metadata:j6({prompt:J.prompt}),hookPath:"",messagesPath:J.messagesPath,updatedAt:J.startedAt}}async queueSpawnRequest($){if($.hookName!=="tool_call"||$.parent_agent_id!==null)return;if($.tool_call?.name!=="spawn_agent")return;let J=FA($.sessionContext);if(!J)return;let Q=CN.safeParse($.tool_call.input);await this.adapter.enqueueSpawnRequest({rootSessionId:J,parentAgentId:$.agent_id,task:Q.success?Q.data.task:void 0,systemPrompt:Q.success?Q.data.systemPrompt:void 0})}async upsertSubagentSession($){let J=$.rootSessionId;if(!J)return;let Q=await this.adapter.getSession(J);if(!Q)return;let Z=W8(J,$.agentId),W=await this.adapter.getSession(Z),j=$0(),X=this.manifestStore.artifacts.subagentArtifactPaths(Z,$.agentId,this.activeTeamTaskSessionId(J,$.parentAgentId)),f=$.prompt??W?.prompt??void 0;if(!f)f=await this.adapter.claimSpawnRequest(J,$.parentAgentId)??`Subagent run by ${$.parentAgentId}`;if(!W)return await this.adapter.upsertSession(this.buildSubsessionRow(Q,{sessionId:Z,parentSessionId:J,parentAgentId:$.parentAgentId,agentId:$.agentId,conversationId:$.conversationId,prompt:f,startedAt:j,...X})),this.manifestStore.initializeMessagesFile(Z,X.messagesPath,j),Z;return await this.adapter.updateSession({sessionId:Z,setRunning:!0,parentSessionId:J,parentAgentId:$.parentAgentId,agentId:$.agentId,conversationId:$.conversationId,prompt:W.prompt??f??null,metadata:j6({metadata:W.metadata??void 0,prompt:W.prompt??f??null}),expectedStatusLock:W.statusLock}),Z}async upsertSubagentSessionFromHook($){if(!$.parent_agent_id)return;let J=FA($.sessionContext);if(!J)return;if($.hookName==="session_shutdown"){let Q=W8(J,$.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:J})}async applySubagentStatus($,J){await this.applySubagentStatusBySessionId($,Q6(J))}async applySubagentStatusBySessionId($,J){let Q=await this.adapter.getSession($);if(!Q)return;let Z=X0(J)?null:$0(),W=X0(J)?null:J==="failed"?1:0;await this.adapter.updateSession({sessionId:$,status:J,endedAt:Z,exitCode:W,expectedStatusLock:Q.statusLock})}async applyStatusToRunningChildSessions($,J){if(!$)return;let Q=await this.adapter.listSessions({limit:2000,parentSessionId:$,status:"running"});for(let Z of Q)await this.applySubagentStatusBySessionId(Z.sessionId,J)}async onTeamTaskStart($,J,Q){let Z=await this.adapter.getSession($);if(!Z)return;let W=$6($,J),j=$0(),{messagesPath:X}=this.manifestStore.artifacts.subagentArtifactPaths(W,J);await this.adapter.upsertSession(this.buildSubsessionRow(Z,{sessionId:W,parentSessionId:$,parentAgentId:"lead",agentId:J,prompt:Q||`Team task for ${J}`,startedAt:j,messagesPath:X})),this.manifestStore.initializeMessagesFile(W,X,j);let f=this.teamTaskQueueKey($,J),Y=this.teamTaskSessionsByAgent.get(f)??[];Y.push(W),this.teamTaskSessionsByAgent.set(f,Y)}async onTeamTaskEnd($,J,Q,Z,W,j){let X=this.teamTaskQueueKey($,J),f=this.teamTaskSessionsByAgent.get(X);if(!f||f.length===0)return;let Y=f.shift();if(f.length===0)this.teamTaskSessionsByAgent.delete(X);if(!Y)return;let V=W?.messages??j,H=this.toPersistedMessages(V,W,j);if(H)await this.manifestStore.persistSessionMessages(Y,H);await this.applySubagentStatusBySessionId(Y,Q),this.teamTaskLastHeartbeatBySession.delete(Y),this.teamTaskLastProgressLineBySession.delete(Y)}async onTeamTaskProgress($,J,Q,Z){let W=this.teamTaskQueueKey($,J),j=this.teamTaskSessionsByAgent.get(W)?.[0];if(!j)return;let X=Q.trim();if(!X)return;let f=Z?.kind??"progress";if(f==="heartbeat"){let V=Date.now(),H=this.teamTaskLastHeartbeatBySession.get(j)??0;if(V-H<this.heartbeatLogIntervalMs)return;this.teamTaskLastHeartbeatBySession.set(j,V)}let Y=f==="heartbeat"?"[progress] heartbeat":f==="text"?`[progress] text: ${X}`:`[progress] ${X}`;if(this.teamTaskLastProgressLineBySession.get(j)===Y)return;this.teamTaskLastProgressLineBySession.set(j,Y)}async handleSubAgentStart($,J){let Q=await this.upsertSubagentSession({agentId:J.subAgentId,parentAgentId:J.parentAgentId,conversationId:J.conversationId,prompt:J.input.task,rootSessionId:$});if(!Q)return;await this.applySubagentStatusBySessionId(Q,"running")}async handleSubAgentEnd($,J){let Q=await this.upsertSubagentSession({agentId:J.subAgentId,parentAgentId:J.parentAgentId,conversationId:J.conversationId,prompt:J.input.task,rootSessionId:$});if(!Q)return;if(J.error){await this.applySubagentStatusBySessionId(Q,"failed");return}let Z=this.toPersistedMessages(J.agentResult?.messages,J.agentResult);if(Z)await this.manifestStore.persistSessionMessages(Q,Z);let W=J.result?.finishReason??"completed";await this.applySubagentStatusBySessionId(Q,W==="aborted"?"cancelled":"completed")}appendSubagentHookAudit($){let Q=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??NN(wN(),"hooks.jsonl");PN(Q,`${JSON.stringify({ts:$0(),...$})}
|
|
516
|
+
`,"utf8")}}import{formatUserInputBlock as oN}from"@cline/shared";var PA={};w(PA,{toTeamProgressLifecycleEvent:()=>d8,sanitizeTeamName:()=>hY,reviveTeamStateDates:()=>E5,parseConfiguredAgentConfig:()=>HJ,loadConfiguredAgentConfigs:()=>v8,createWorkerReviewerTeam:()=>qA,createSpawnAgentTool:()=>A$,createDelegatedAgentConfigProvider:()=>H$,createDelegatedAgent:()=>B$,createConfiguredAgentTools:()=>c8,createAgentTeamsTools:()=>r$,createAgentTeam:()=>iW,buildTeamProgressSummary:()=>u8,buildDelegatedAgentConfig:()=>l$,buildConfiguredAgentToolName:()=>BJ,buildConfiguredAgentToolDescriptors:()=>AJ,bootstrapAgentTeams:()=>Z8,AgentTeamsRuntime:()=>T2,AgentTeam:()=>p8});import{existsSync as yN,readdirSync as EN,readFileSync as bN}from"node:fs";import{basename as DA,extname as hN,join as kN}from"node:path";import{resolveAgentConfigSearchPaths as IN}from"@cline/shared/storage";import RA from"yaml";import{z as P0}from"zod";var LA=P0.object({name:P0.string().trim().min(1),description:P0.string().trim().min(1),tools:P0.union([P0.string(),P0.array(P0.string())]).optional(),skills:P0.union([P0.string(),P0.array(P0.string())]).optional(),providerId:P0.string().trim().min(1).optional(),modelId:P0.string().trim().min(1).optional(),maxIterations:P0.number().int().positive().optional()});function xN($){let J=$.match(/^(---)[^\S\r\n]*(?:\r?\n|$)/);if(!J)throw Error("Missing YAML frontmatter block in agent config file.");let Q=J[0].length,Z=/^---[^\S\r\n]*(?:\r?\n|$)/gm;Z.lastIndex=Q;let W,j=Array.from($.matchAll(Z)).filter((X)=>X.index>=Q);for(let X of j){let f=X.index,Y=$.slice(Q,f);try{let V=RA.parse(Y);if(!V||typeof V!=="object"||Array.isArray(V))continue;LA.parse(V);let H=$.slice(f+X[0].length);W={frontmatter:Y,body:H}}catch{}}if(W)return W;throw Error("Missing closing YAML frontmatter delimiter in agent config file.")}function UA($){if($===void 0)return;let J=Array.isArray($)?$:$.split(",");return Array.from(new Set(J.map((Q)=>Q.trim()).filter((Q)=>Q.length>0)))}function gN($){return $.trim().toLowerCase()}function mN($){let J=hN($).toLowerCase();return J===".yml"||J===".yaml"}function HJ($,J={}){let{frontmatter:Q,body:Z}=xN($),W=RA.parse(Q);if(!W||typeof W!=="object"||Array.isArray(W))throw Error("Agent config frontmatter must be a YAML mapping.");let j=LA.parse(W),X=Z.trim();if(!X)throw Error("Missing system prompt body in agent config file.");return{name:j.name,description:j.description,tools:UA(j.tools),skills:UA(j.skills),providerId:j.providerId,modelId:j.modelId,maxIterations:j.maxIterations,systemPrompt:X,path:J.path}}function v8($){let J=$.searchPaths??IN($.workspaceRoot),Q=new Map,Z=[];for(let j of J.filter(Boolean)){if(!yN(j))continue;let X;try{X=EN(j,{withFileTypes:!0})}catch(f){Z.push({path:j,error:f instanceof Error?f:Error(String(f))});continue}for(let f of X){if(!f.isFile()||!mN(f.name))continue;let Y=kN(j,f.name);try{let V=bN(Y,"utf8"),H=HJ(V,{path:Y}),B=gN(H.name);if(!Q.has(B))Q.set(B,H)}catch(V){Z.push({path:Y,error:V instanceof Error?V:Error(String(V))})}}}return{configs:Array.from(Q.values()).sort((j,X)=>(j.path?DA(j.path):j.name).localeCompare(X.path?DA(X.path):X.name)),errors:Z}}import{createTool as vN,zodToJsonSchema as cN}from"@cline/shared";import{z as zA}from"zod";var pW="subagent_",f9=64,uN=zA.object({prompt:zA.string().trim().min(1).describe("Task for the subagent to perform")});function dN($){let J="",Q=!0;for(let Z of $.trim().toLowerCase()){let W=Z.charCodeAt(0);if(!(W>=97&&W<=122||W>=48&&W<=57||Z==="_")||Z==="_"){if(!Q)J+="_",Q=!0;continue}J+=Z,Q=!1}return Q?J.slice(0,-1):J}function lN($){let J=2166136261;for(let Q=0;Q<$.length;Q++)J^=$.charCodeAt(Q),J=Math.imul(J,16777619);return(J>>>0).toString(36)}function BJ($){let J=dN($)||"agent",Q=lN($).slice(0,6),Z=`${pW}${J}`;if(Z.length<=f9)return Z;let W=f9-pW.length-Q.length-1,j=J.slice(0,Math.max(1,W));return`${pW}${j}_${Q}`.slice(0,f9)}function AJ($){let J=new Set,Q=[];for(let Z of[...$].sort((W,j)=>W.name.localeCompare(j.name))){let W=BJ(Z.name),j=W,X=2;while(J.has(j)){let f=`_${X++}`,Y=Math.max(1,f9-f.length);j=`${W.slice(0,Y)}${f}`}J.add(j),Q.push({toolName:j,config:Z})}return Q}function pN($,J){return{...$,providerId:J.providerId??$.providerId,modelId:J.modelId??$.modelId,maxIterations:J.maxIterations??$.maxIterations}}function c8($){return AJ($.agents).map(({toolName:J,config:Q})=>{return vN({name:J,description:`Use the "${Q.name}" subagent: ${Q.description}`,inputSchema:cN(uN),execute:async(W,j)=>{let X=$.configProvider.getRuntimeConfig(),f=H$(pN(X,Q)),Y=$.createSubAgentTools?await $.createSubAgentTools(Q,W,j):[],V=B$({kind:"subagent",prompt:Q.systemPrompt,configProvider:f,tools:Y,maxIterations:Q.maxIterations,parentAgentId:j.agentId,abortSignal:j.signal,onEvent:$.onSubAgentEvent,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval}),H=V.getAgentId(),B=V.getConversationId(),A=j.agentId,K={systemPrompt:Q.systemPrompt,task:W.prompt};if($.onSubAgentStart)try{await $.onSubAgentStart({subAgentId:H,conversationId:B,parentAgentId:A,input:K})}catch{}try{let G=await V.run(W.prompt),R={text:G.text,iterations:G.iterations,finishReason:G.finishReason,usage:{inputTokens:G.usage.inputTokens,outputTokens:G.usage.outputTokens}};if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:H,conversationId:B,parentAgentId:A,input:K,result:R,agentResult:G})}catch{}return R}catch(G){if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:H,conversationId:B,parentAgentId:A,input:K,error:G instanceof Error?G:Error(String(G))})}catch{}throw G}},timeoutMs:300000,retryable:!1})})}function R1(){return new Date().toISOString()}function _A($,J){if(J<=0)return 0;return Math.round($/J*100)}function rN($,J){let Q=new Set;for(let W of J)if(W.status==="reviewed")Q.add(`${W.outcomeId}:${W.section}`);let Z=new Set;for(let W of $){if(W.status==="finalized")continue;for(let j of W.requiredSections)if(!Q.has(`${W.id}:${j}`))Z.add(`${W.id}:${j}`)}return[...Z].sort((W,j)=>W.localeCompare(j))}function u8($,J){let Q={idle:0,running:0,stopped:0},Z={pending:0,in_progress:0,blocked:0,completed:0},W={queued:0,running:0,completed:0,failed:0,cancelled:0,interrupted:0},j={draft:0,in_review:0,finalized:0},X={draft:0,reviewed:0,rejected:0},f=0,Y=0;for(let D of J.members)if(Q[D.status]+=1,D.role==="lead")f+=1;else Y+=1;let V=[],H=[],B=J.tasks.filter((D)=>D.status==="completed").length,A=new Map(J.tasks.map((D)=>[D.id,D]));for(let D of J.tasks){if(Z[D.status]+=1,D.status==="blocked"){V.push(D.id);continue}if(D.status!=="pending")continue;if(D.dependsOn.every((F)=>{return A.get(F)?.status==="completed"}))H.push(D.id)}let K=[],G,R=0;for(let D of J.runs){if(W[D.status]+=1,D.status==="queued"||D.status==="running")K.push(D.id);let U=D.startedAt.getTime();if(U>=R)R=U,G=D.id}for(let D of J.outcomes)j[D.status]+=1;for(let D of J.outcomeFragments)X[D.status]+=1;return{teamName:$,updatedAt:R1(),members:{total:J.members.length,byStatus:Q,leadCount:f,teammateCount:Y},tasks:{total:J.tasks.length,byStatus:Z,blockedTaskIds:V,readyTaskIds:H,completionPct:_A(B,J.tasks.length)},runs:{total:J.runs.length,byStatus:W,activeRunIds:K,latestRunId:G},outcomes:{total:J.outcomes.length,byStatus:j,finalizedPct:_A(j.finalized,J.outcomes.length),missingRequiredSections:rN(J.outcomes,J.outcomeFragments)},fragments:{total:J.outcomeFragments.length,byStatus:X}}}function d8($){let{event:J}=$;switch(J.type){case"team_task_updated":return{teamName:$.teamName,sessionId:$.sessionId,eventType:J.type,ts:R1(),taskId:J.task.id,agentId:J.task.assignee??J.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:J.type,ts:R1(),runId:J.run.id,taskId:J.run.taskId,agentId:J.run.agentId,message:J.run.error};case"run_progress":return{teamName:$.teamName,sessionId:$.sessionId,eventType:J.type,ts:R1(),runId:J.run.id,taskId:J.run.taskId,agentId:J.run.agentId,message:J.message};case"outcome_created":case"outcome_finalized":return{teamName:$.teamName,sessionId:$.sessionId,eventType:J.type,ts:R1(),outcomeId:J.outcome.id};case"outcome_fragment_attached":case"outcome_fragment_reviewed":return{teamName:$.teamName,sessionId:$.sessionId,eventType:J.type,ts:R1(),outcomeId:J.fragment.outcomeId,fragmentId:J.fragment.id,agentId:J.fragment.sourceAgentId};case"team_message":return{teamName:$.teamName,sessionId:$.sessionId,eventType:J.type,ts:R1(),taskId:J.message.taskId,agentId:J.message.fromAgentId,message:J.message.subject};case"team_mission_log":return{teamName:$.teamName,sessionId:$.sessionId,eventType:J.type,ts:R1(),taskId:J.entry.taskId,agentId:J.entry.agentId,message:J.entry.summary};case"teammate_spawned":case"teammate_shutdown":case"task_start":case"task_end":case"agent_event":return{teamName:$.teamName,sessionId:$.sessionId,eventType:J.type,ts:R1(),agentId:J.agentId}}return{teamName:$.teamName,sessionId:$.sessionId,eventType:J.type,ts:R1()}}import{sanitizeFileName as iN,TeamMessageType as I}from"@cline/shared";import{nanoid as nN}from"nanoid";import{TeamMessageType as Bd}from"@cline/shared";function rW($){if(typeof DOMException<"u"&&$ instanceof DOMException&&$.name==="AbortError")return!0;if(!($ instanceof Error))return!1;return $.name==="AbortError"||$.message.toLowerCase().includes("aborted")}function OA($,J){return $?.status==="stopped"&&rW(J)}var aN=600000,TA="recovered_queued";function sN($){return`This is an automatic recovery of interrupted team run ${$.id}. The previous process stopped before completion. Continue the task safely, inspect the current workspace state before making changes, and avoid duplicating completed work.
|
|
517
517
|
|
|
518
518
|
${$.message}`}class p8{agents=new Map;configs=new Map;onTeamEvent;constructor($,J){if(this.onTeamEvent=J,$)for(let[Q,Z]of Object.entries($))this.addAgent(Q,Z)}addAgent($,J){if(this.agents.has($))throw Error(`Agent with id "${$}" already exists in the team`);let Q={...J,onEvent:(W)=>{J.onEvent?.(W),this.emitEvent({type:I.AgentEvent,agentId:$,event:W})}},Z=new V$(Q);if(Q.onEvent)Z.subscribeEvents(Q.onEvent);this.agents.set($,Z),this.configs.set($,J)}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($,J){let Q=this.agents.get($);if(!Q)throw Error(`Agent "${$}" not found in team`);this.emitEvent({type:I.TaskStart,agentId:$,message:J});try{let Z=await Q.run(J);return this.emitEvent({type:I.TaskEnd,agentId:$,result:Z}),Z}catch(Z){let W=Z instanceof Error?Z:Error(String(Z));throw this.emitEvent({type:I.TaskEnd,agentId:$,error:W,messages:Q.getMessages()}),Z}}async continueTo($,J){let Q=this.agents.get($);if(!Q)throw Error(`Agent "${$}" not found in team`);this.emitEvent({type:I.TaskStart,agentId:$,message:J});try{let Z=await Q.continue(J);return this.emitEvent({type:I.TaskEnd,agentId:$,result:Z}),Z}catch(Z){let W=Z instanceof Error?Z:Error(String(Z));throw this.emitEvent({type:I.TaskEnd,agentId:$,error:W,messages:Q.getMessages()}),Z}}async runParallel($){let J=$.map(async(Q)=>{let Z=this.agents.get(Q.agentId);if(!Z)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 W=await Z.run(Q.message);return this.emitEvent({type:I.TaskEnd,agentId:Q.agentId,result:W}),{agentId:Q.agentId,result:W,metadata:Q.metadata}}catch(W){let j=W instanceof Error?W:Error(String(W));return this.emitEvent({type:I.TaskEnd,agentId:Q.agentId,error:j,messages:Z.getMessages()}),{agentId:Q.agentId,result:void 0,error:j,metadata:Q.metadata}}});return Promise.all(J)}async runSequential($){let J=[];for(let Q of $){let Z=this.agents.get(Q.agentId);if(!Z){J.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 W=await Z.run(Q.message);this.emitEvent({type:I.TaskEnd,agentId:Q.agentId,result:W}),J.push({agentId:Q.agentId,result:W,metadata:Q.metadata})}catch(W){let j=W instanceof Error?W:Error(String(W));this.emitEvent({type:I.TaskEnd,agentId:Q.agentId,error:j,messages:Z.getMessages()}),J.push({agentId:Q.agentId,result:void 0,error:j,metadata:Q.metadata})}}return J}async runPipeline($,J,Q){let Z=[],W=J;for(let j of $){let X=this.agents.get(j);if(!X){Z.push({agentId:j,result:void 0,error:Error(`Agent "${j}" not found in team`)});break}this.emitEvent({type:I.TaskStart,agentId:j,message:W});try{let f=await X.run(W);this.emitEvent({type:I.TaskEnd,agentId:j,result:f}),Z.push({agentId:j,result:f});let Y=$.indexOf(j)+1;if(Y<$.length){let V=$[Y];W=Q?Q(f,V):`Previous agent output:
|
|
519
519
|
${f.text}
|
|
@@ -523,11 +523,11 @@ Please continue from here.`}}catch(f){let Y=f instanceof Error?f:Error(String(f)
|
|
|
523
523
|
${W.text}`);return{workerResult:W,reviewResult:j}},Q}class T2{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_${iN(nN(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 J=$.leadAgentId??"lead";this.members.set(J,{agentId:J,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((J)=>{let Q=this.getUnresolvedDependencies(J);return{...J,blockedBy:Q,isReady:J.status==="pending"&&!J.assignee&&Q.length===0}}).filter((J)=>{if($?.status&&J.status!==$.status)return!1;if($?.assignee&&J.assignee!==$.assignee)return!1;return!0})}listMissionLog($){if(!$||$<=0)return[...this.missionLog];return this.missionLog.slice(Math.max(0,this.missionLog.length-$))}listMailbox($,J){let Q=J?.unreadOnly??!0,Z=J?.markRead??!0,W=J?.limit,j=this.mailbox.filter((f)=>f.toAgentId===$&&(!Q||!f.readAt)),X=typeof W==="number"&&W>0?j.slice(Math.max(0,j.length-W)):j;if(Z){let f=new Date;for(let Y of X)if(!Y.readAt)Y.readAt=f}return X.map((f)=>({...f}))}getSnapshot(){let $={pending:0,in_progress:0,blocked:0,completed:0};for(let Q of this.tasks.values())$[Q.status]++;let J={draft:0,in_review:0,finalized:0};for(let Q of this.outcomes.values())J[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:J}}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 J=Array.from(this.members.values()).filter((Q)=>Q.role==="lead");this.members.clear();for(let Q of J)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,l8($.tasks.map((Q)=>Q.id),"task_")),this.messageCounter=Math.max(this.messageCounter,l8($.mailbox.map((Q)=>Q.id),"msg_")),this.missionCounter=Math.max(this.missionCounter,l8($.missionLog.map((Q)=>Q.id),"log_")),this.runCounter=Math.max(this.runCounter,l8(($.runs??[]).map((Q)=>Q.id),"run_")),this.outcomeCounter=Math.max(this.outcomeCounter,l8(($.outcomes??[]).map((Q)=>Q.id),"out_")),this.outcomeFragmentCounter=Math.max(this.outcomeFragmentCounter,l8(($.outcomeFragments??[]).map((Q)=>Q.id),"frag_"))}isTeammateActive($){let J=this.members.get($);return!!J&&J.role==="teammate"&&!!J.agent}spawnTeammate({agentId:$,config:J}){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 Z={...J,apiTimeoutMs:aN,consumePendingUserMessage:()=>{let X=this.members.get($);if(!X||!X.pendingSteerMessage)return;let f=X.pendingSteerMessage;return X.pendingSteerMessage=void 0,f},onEvent:(X)=>{J.onEvent?.(X),this.emitEvent({type:I.AgentEvent,agentId:$,event:X}),this.trackMeaningfulEvent($,X)}},W=new V$(Z);if(Z.onEvent)W.subscribeEvents(Z.onEvent);let j={agentId:$,role:"teammate",description:J.role,status:"idle",agent:W,runningCount:0,lastMissionStep:0,lastMissionAt:Date.now()};return this.members.set($,j),this.emitEvent({type:I.TeammateSpawned,agentId:$,role:J.role,teammate:{rolePrompt:J.systemPrompt,modelId:J.modelId,maxIterations:J.maxIterations,runtimeAgentId:W.getAgentId(),conversationId:W.getConversationId(),parentAgentId:null}}),{agentId:j.agentId,role:j.role,description:j.description,status:j.status}}shutdownTeammate($,J){let Q=this.members.get($);if(!Q||Q.role!=="teammate")throw Error(`Teammate "${$}" was not found`);try{Q.agent?.abort()}catch(Z){if(!rW(Z))throw Z}Q.status="stopped",this.emitEvent({type:I.TeammateShutdown,agentId:$,reason:J})}updateTeammateConnections($){for(let J of this.members.values()){if(J.role!=="teammate"||!J.agent)continue;J.agent.updateConnection($)}}createTask($){let J=`task_${String(++this.taskCounter).padStart(4,"0")}`,Q=new Date,Z={id:J,title:$.title,description:$.description,status:$.assignee?"in_progress":"pending",createdAt:Q,updatedAt:Q,createdBy:$.createdBy,assignee:$.assignee,dependsOn:$.dependsOn??[]};return this.tasks.set(J,Z),this.emitEvent({type:I.TeamTaskUpdated,task:{...Z}}),{...Z}}claimTask($,J){let Q=this.requireTask($);return this.assertDependenciesResolved(Q),Q.status="in_progress",Q.assignee=J,Q.updatedAt=new Date,this.emitEvent({type:I.TeamTaskUpdated,task:{...Q}}),this.appendMissionLog({agentId:J,taskId:$,kind:"progress",summary:`Claimed task "${Q.title}"`}),{...Q}}blockTask($,J,Q){let Z=this.requireTask($);return Z.status="blocked",Z.updatedAt=new Date,Z.summary=Q,this.emitEvent({type:I.TeamTaskUpdated,task:{...Z}}),this.appendMissionLog({agentId:J,taskId:$,kind:"blocked",summary:Q}),{...Z}}completeTask($,J,Q){let Z=this.requireTask($);if(Z.status="completed",Z.updatedAt=new Date,Z.summary=Q,!Z.assignee)Z.assignee=J;return this.emitEvent({type:I.TeamTaskUpdated,task:{...Z}}),this.appendMissionLog({agentId:J,taskId:$,kind:"done",summary:Q}),{...Z}}async routeToTeammate($,J,Q){let Z=this.members.get($);if(!Z||Z.role!=="teammate"||!Z.agent)throw Error(`Teammate "${$}" was not found`);if(!Z.agent.canStartRun())throw Error("Cannot start a new run while another run is already in progress");Z.runningCount++,Z.status="running",this.emitEvent({type:I.TaskStart,agentId:$,message:J});try{let W=this.listMailbox($,{unreadOnly:!0,markRead:!0}),j=W.length>0?`${this.buildMailboxNotification(W)}
|
|
524
524
|
|
|
525
525
|
${J}`:J,X=Q?.continueConversation?await Z.agent.continue(j):await Z.agent.run(j);return this.emitEvent({type:I.TaskEnd,agentId:$,result:X}),this.recordProgressStep($,`Completed a delegated run (${X.iterations} iterations)`,Q?.taskId,!0),X}catch(W){let j=W instanceof Error?W:Error(String(W));if(this.emitEvent({type:I.TaskEnd,agentId:$,error:j,messages:Z.agent.getMessages()}),!OA(Z,j))this.appendMissionLog({agentId:$,taskId:Q?.taskId,kind:"error",summary:j.message});throw j}finally{if(Z.runningCount--,Z.runningCount<=0&&this.members.get($)?.status!=="stopped")Z.status="idle"}}startTeammateRun($,J,Q){let Z=`run_${String(++this.runCounter).padStart(5,"0")}`,W={id:Z,agentId:$,taskId:Q?.taskId,status:"queued",message:J,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(Z,W),this.runQueue.push(Z),this.emitEvent({type:I.RunQueued,run:{...W}}),this.dispatchQueuedRuns(),{...W}}dispatchQueuedRuns(){this.clearQueuedRunDispatchTimer();let $;while(this.countActiveRuns()<this.maxConcurrentRuns&&this.runQueue.length>0){let J=this.selectNextDispatchableQueuedRun();$=J.nextDelayedAttemptAt;let Q=J.index;if(Q<0){this.scheduleQueuedRunDispatch($);return}let[Z]=this.runQueue.splice(Q,1),W=Z?this.runs.get(Z):void 0;if(!W||W.status!=="queued")continue;this.executeQueuedRun(W)}this.scheduleQueuedRunDispatch($)}selectNextDispatchableQueuedRun(){let $=-1,J=Number.NEGATIVE_INFINITY,Q,Z=Date.now();for(let W=0;W<this.runQueue.length;W++){let j=this.runs.get(this.runQueue[W]);if(!j||j.status!=="queued")continue;if(j.nextAttemptAt&&j.nextAttemptAt.getTime()>Z){if(!Q||j.nextAttemptAt<Q)Q=j.nextAttemptAt;continue}if(j.priority>J)J=j.priority,$=W}return{index:$,nextDelayedAttemptAt:Q}}scheduleQueuedRunDispatch($){if(!$)return;let J=Math.max(0,$.getTime()-Date.now());this.queuedRunDispatchTimer=setTimeout(()=>{this.queuedRunDispatchTimer=void 0,this.dispatchQueuedRuns()},J)}clearQueuedRunDispatchTimer(){if(!this.queuedRunDispatchTimer)return;clearTimeout(this.queuedRunDispatchTimer),this.queuedRunDispatchTimer=void 0}countActiveRuns(){let $=0;for(let J of this.runs.values())if(J.status==="running")$++;return $}async executeQueuedRun($){let J=$.currentActivity===TA;$.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 Z=J?sN($):$.message,W=await this.routeToTeammate($.agentId,Z,{taskId:$.taskId,continueConversation:$.continueConversation});$.status="completed",$.result=W,$.endedAt=new Date,$.currentActivity="completed",this.emitEvent({type:I.RunCompleted,run:{...$}})}catch(Z){let W=Z instanceof Error?Z.message:String(Z??"Unknown error");$.error=W,$.endedAt=new Date;let j=this.members.get($.agentId);if(OA(j,Z))$.status="cancelled",$.currentActivity="cancelled",this.emitEvent({type:I.RunCancelled,run:{...$},reason:W});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 J=$?.includeCompleted??!0;return Array.from(this.runs.values()).filter((Q)=>{if(!J&&!["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 J=this.runs.get($);return J?{...J}:void 0}async awaitRun($,J=250){let Q=this.runs.get($);if(!Q)throw Error(`Run "${$}" was not found`);while(Q.status==="queued"||Q.status==="running")await MA(J);return{...Q}}async awaitAllRuns($=250){while(Array.from(this.runs.values()).some((J)=>["queued","running"].includes(J.status)))await MA($);return this.listRuns()}cancelRun($,J){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=J,Q.endedAt=new Date,Q.currentActivity="cancelled";let Z=this.runQueue.indexOf($);if(Z>=0)this.runQueue.splice(Z,1);return this.emitEvent({type:I.RunCancelled,run:{...Q},reason:J}),{...Q}}recoverActiveRuns($="runtime_recovered"){let J=[];for(let Q of this.runs.values()){if(!["queued","running"].includes(Q.status))continue;let Z=this.members.get(Q.agentId);if(!Z||Z.role!=="teammate"||!Z.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 W=new Date;if(Q.status="queued",Q.error=void 0,Q.endedAt=void 0,Q.heartbeatAt=W,Q.lastProgressAt=W,Q.lastProgressMessage=$,Q.currentActivity=TA,!this.runQueue.includes(Q.id))this.runQueue.push(Q.id);J.push({...Q}),this.emitEvent({type:I.RunQueued,run:{...Q}})}return this.dispatchQueuedRuns(),J}markStaleRunsInterrupted($="runtime_recovered"){let J=[];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",J.push({...Q}),this.emitEvent({type:I.RunInterrupted,run:{...Q},reason:$})}return this.runQueue.length=0,this.clearQueuedRunDispatchTimer(),J}sendMessage($,J,Q,Z,W){if(!this.members.has($))throw Error(`Unknown sender "${$}"`);let j=this.members.get(J);if(!j)throw Error(`Unknown recipient "${J}"`);let X={id:`msg_${String(++this.messageCounter).padStart(5,"0")}`,teamId:this.teamId,fromAgentId:$,toAgentId:J,subject:Q,body:Z,taskId:W,sentAt:new Date};if(this.mailbox.push(X),this.emitEvent({type:I.TeamMessage,message:{...X}}),j.role==="teammate"&&j.runningCount>0&&j.agent)j.pendingSteerMessage=`[MAILBOX] You got a message from ${$}. Subject: "${Q}". Use the team_read_mailbox tool to read it at your convenience.`;return{...X}}broadcast($,J,Q,Z){let W=[];for(let j of this.members.values()){if(j.agentId===$)continue;if(j.role==="lead")continue;W.push(this.sendMessage($,j.agentId,J,Q,Z?.taskId))}return W}appendMissionLog($){if(!this.members.has($.agentId))throw Error(`Unknown team member "${$.agentId}"`);let J={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(J);let Q=this.members.get($.agentId);if(Q)Q.lastMissionAt=Date.now(),Q.lastMissionStep=this.missionStepCounter;return this.emitEvent({type:I.TeamMissionLog,entry:{...J}}),{...J}}createOutcome($){let J={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(J.id,J),this.emitEvent({type:I.OutcomeCreated,outcome:{...J}}),{...J}}listOutcomes(){return Array.from(this.outcomes.values()).map(($)=>({...$}))}attachOutcomeFragment($){let J=this.outcomes.get($.outcomeId);if(!J)throw Error(`Outcome "${$.outcomeId}" was not found`);if(!J.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),J.status==="draft")J.status="in_review";return this.emitEvent({type:I.OutcomeFragmentAttached,fragment:{...Q}}),{...Q}}reviewOutcomeFragment($){let J=this.outcomeFragments.get($.fragmentId);if(!J)throw Error(`Fragment "${$.fragmentId}" was not found`);return J.status=$.approved?"reviewed":"rejected",J.reviewedBy=$.reviewedBy,J.reviewedAt=new Date,this.emitEvent({type:I.OutcomeFragmentReviewed,fragment:{...J}}),{...J}}listOutcomeFragments($){return Array.from(this.outcomeFragments.values()).filter((J)=>J.outcomeId===$).map((J)=>({...J}))}finalizeOutcome($){let J=this.outcomes.get($);if(!J)throw Error(`Outcome "${$}" was not found`);let Q=this.listOutcomeFragments($);for(let Z of J.requiredSections)if(!Q.some((j)=>j.section===Z&&j.status==="reviewed"))throw Error(`Outcome "${$}" cannot be finalized. Section "${Z}" is missing a reviewed fragment.`);return J.status="finalized",J.finalizedAt=new Date,this.emitEvent({type:I.OutcomeFinalized,outcome:{...J}}),{...J}}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(J){if(!rW(J))throw J}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[$,J]of this.members.entries())if(J.role==="teammate")this.members.delete($)}requireTask($){let J=this.tasks.get($);if(!J)throw Error(`Task "${$}" was not found`);return J}assertDependenciesResolved($){let J=this.getUnresolvedDependencies($);if(J.length>0)throw Error(`Task "${$.id}" is blocked by "${J[0]}"`)}getUnresolvedDependencies($){return $.dependsOn.filter((J)=>{let Q=this.tasks.get(J);return!Q||Q.status!=="completed"})}trackMeaningfulEvent($,J){if(this.recordRunActivityFromAgentEvent($,J),J.type==="iteration_end"&&J.hadToolCalls){this.recordProgressStep($,`Completed iteration ${J.iteration} with ${J.toolCallCount} tool call(s)`);return}if(J.type==="content_end"&&J.contentType==="tool"&&!J.error){this.recordProgressStep($,`Finished tool "${J.toolName??"unknown"}"`);return}if(J.type==="done"){this.appendMissionLog({agentId:$,kind:"done",summary:`Completed a delegated run (${J.iterations} iterations)`});return}if(J.type==="error")this.appendMissionLog({agentId:$,kind:"error",summary:J.error.message})}recordRunActivityFromAgentEvent($,J){let Q;switch(J.type){case"iteration_start":Q=`iteration_${J.iteration}_started`;break;case"content_start":if(J.contentType==="tool")Q=`running_tool_${J.toolName??"unknown"}`;break;case"content_end":if(J.contentType==="tool")Q=J.error?this.formatProgressErrorActivity(`tool_${J.toolName??"unknown"}_error`,J.error):`finished_tool_${J.toolName??"unknown"}`;break;case"done":Q="finalizing_response";break;case"error":Q=this.formatProgressErrorActivity("run_error",J.error.message);break;default:break}if(!Q)return;for(let Z of this.runs.values()){if(Z.agentId!==$||Z.status!=="running")continue;this.recordRunProgress(Z,Q)}}recordRunProgress($,J){let Q=new Date;$.heartbeatAt=Q,$.lastProgressAt=Q,$.lastProgressMessage=J,$.currentActivity=J,this.emitEvent({type:I.RunProgress,run:{...$},message:J})}formatProgressErrorActivity($,J){let Q=J.replace(/\s+/g," ").trim();if(Q.length===0)return $;let Z=Q.length>240?`${Q.slice(0,237).trimEnd()}...`:Q;return`${$}: ${Z}`}recordProgressStep($,J,Q,Z=!1){this.missionStepCounter++;let W=this.members.get($);if(!W)return;let j=this.missionStepCounter-W.lastMissionStep,X=Date.now()-W.lastMissionAt;if(!Z&&j<this.missionLogIntervalSteps&&X<this.missionLogIntervalMs)return;this.appendMissionLog({agentId:$,taskId:Q,kind:"progress",summary:J})}buildMailboxNotification($){if($.length===0)return"";let J=[`[MAILBOX] You have ${$.length} unread message(s):`];for(let Q of $)J.push(`--- Message from ${Q.fromAgentId} | subject: ${Q.subject} ---`),J.push(Q.body);return J.push("---"),J.join(`
|
|
526
|
-
`)}emitEvent($){try{this.onTeamEvent?.($)}catch{}}}function MA($){return new Promise((J)=>setTimeout(J,$))}function l8($,J){let Q=0;for(let Z of $){if(!Z.startsWith(J))continue;let W=Number.parseInt(Z.slice(J.length),10);if(Number.isFinite(W))Q=Math.max(Q,W)}return Q}function nW($,J){switch(J.type){case"run_queued":case"run_started":$.activeTeamRunIds.add(J.run.id);break;case"run_completed":case"run_failed":case"run_cancelled":case"run_interrupted":{let Q;if(J.type==="run_failed")Q=J.run.error;else if(J.type==="run_cancelled"||J.type==="run_interrupted")Q=J.run.error??J.reason;$.activeTeamRunIds.delete(J.run.id),$.pendingTeamRunUpdates.push({runId:J.run.id,agentId:J.run.agentId,taskId:J.run.taskId,status:J.type.replace("run_",""),error:Q,iterations:J.run.result?.iterations}),
|
|
526
|
+
`)}emitEvent($){try{this.onTeamEvent?.($)}catch{}}}function MA($){return new Promise((J)=>setTimeout(J,$))}function l8($,J){let Q=0;for(let Z of $){if(!Z.startsWith(J))continue;let W=Number.parseInt(Z.slice(J.length),10);if(Number.isFinite(W))Q=Math.max(Q,W)}return Q}function nW($,J){switch(J.type){case"run_queued":case"run_started":$.activeTeamRunIds.add(J.run.id);break;case"run_completed":case"run_failed":case"run_cancelled":case"run_interrupted":{let Q;if(J.type==="run_failed")Q=J.run.error;else if(J.type==="run_cancelled"||J.type==="run_interrupted")Q=J.run.error??J.reason;$.activeTeamRunIds.delete(J.run.id),$.pendingTeamRunUpdates.push({runId:J.run.id,agentId:J.run.agentId,taskId:J.run.taskId,status:J.type.replace("run_",""),error:Q,iterations:J.run.result?.iterations}),Y9($);break}default:break}}async function aW($,J,Q){switch(J.type){case"run_progress":await Q("onTeamTaskProgress",$,J.run.agentId,J.message,{kind:J.message==="heartbeat"?"heartbeat":"progress"});break;case"agent_event":if(J.event.type==="content_start"&&J.event.contentType==="text"&&typeof J.event.text==="string"){let Z=J.event.text.replace(/\s+/g," ").trim().slice(0,120);if(Z)await Q("onTeamTaskProgress",$,J.agentId,Z,{kind:"text"})}break;case"task_start":await Q("onTeamTaskStart",$,J.agentId,J.message);break;case"task_end":{if(J.error)await Q("onTeamTaskEnd",$,J.agentId,"failed",`[error] ${J.error.message}`,void 0,J.messages);else if(J.result?.finishReason==="aborted")await Q("onTeamTaskEnd",$,J.agentId,"cancelled","[done] aborted",J.result,J.result.messages);else await Q("onTeamTaskEnd",$,J.agentId,"completed",`[done] ${J.result?.finishReason??"completed"}`,J.result,J.result?.messages);break}default:break}}function sW($,J,Q,Z){if(!$.runtime.teamRuntime)return;let W=$.runtime.teamRuntime.getTeamName();Z({type:"team_progress",payload:{sessionId:J,teamName:W,lifecycle:d8({teamName:W,sessionId:J,event:Q}),summary:u8(W,$.runtime.teamRuntime.exportState())}})}function KJ($){return $.activeTeamRunIds.size>0||$.pendingTeamRunUpdates.length>0}function oW($,J){if($.aborting)return!1;if(!(J==="completed"||J==="max_iterations"))return!1;return $.config.enableAgentTeams===!0&&KJ($)}function Y9($){let J=$.teamRunWaiters.splice(0);for(let Q of J)Q()}async function tW($){while(!0){if($.aborting)return[];if($.pendingTeamRunUpdates.length>0){let J=[...$.pendingTeamRunUpdates];return $.pendingTeamRunUpdates.length=0,J}if($.activeTeamRunIds.size===0)return[];await new Promise((J)=>{$.teamRunWaiters.push(J)})}}function eW($,J){let Q=J.map((j)=>{let X=[`- ${j.runId} (${j.agentId}) -> ${j.status}`];if(j.taskId)X.push(` task=${j.taskId}`);if(typeof j.iterations==="number")X.push(` iterations=${j.iterations}`);if(j.error)X.push(` error=${j.error}`);return X.join("")}),Z=$.activeTeamRunIds.size,W=Z>0?`There are still ${Z} 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 GJ(`System-delivered teammate async run updates:
|
|
527
527
|
${Q.join(`
|
|
528
528
|
`)}
|
|
529
529
|
|
|
530
|
-
${W}`,$.config.mode)}function GJ($,J){return oN($,J==="plan"?"plan":J==="yolo"?"yolo":"act")}var $3=4;class n1{adapter;manifestStore;teamChildren;static STALE_REASON="failed_external_process_exit";static STALE_SOURCE="stale_session_reconciler";static TEAM_HEARTBEAT_LOG_INTERVAL_MS=30000;constructor($,J={}){this.adapter=$;this.manifestStore=new dW($,J.messagesArtifactUploader,J.logger),this.teamChildren=new
|
|
530
|
+
${W}`,$.config.mode)}function GJ($,J){return oN($,J==="plan"?"plan":J==="yolo"?"yolo":"act")}var $3=4;class n1{adapter;manifestStore;teamChildren;static STALE_REASON="failed_external_process_exit";static STALE_SOURCE="stale_session_reconciler";static TEAM_HEARTBEAT_LOG_INTERVAL_MS=30000;constructor($,J={}){this.adapter=$;this.manifestStore=new dW($,J.messagesArtifactUploader,J.logger),this.teamChildren=new X9($,this.manifestStore,(Q,Z,W)=>this.toPersistedMessages(Q,Z,W),n1.TEAM_HEARTBEAT_LOG_INTERVAL_MS)}toPersistedMessages($,J,Q){if(!$)return;return J?x5(J.messages,J,Q):I5($)}ensureSessionsDir(){return this.manifestStore.ensureSessionsDir()}writeSessionManifest($,J){this.manifestStore.writeSessionManifest($,J)}readSessionManifest($){return this.manifestStore.readSessionManifest($)}async createRootSessionWithArtifacts($){let J=$.startedAt??$0(),Q=$.sessionId.trim(),Z=Q.length>0?Q:`${Date.now()}_${eN(5)}`,W=this.manifestStore.artifacts.sessionMessagesPath(Z),j=this.manifestStore.artifacts.sessionManifestPath(Z),X=j6({metadata:$.metadata,prompt:$.prompt}),f={version:1,session_id:Z,source:$.source,pid:$.pid,started_at:J,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:X,messages_path:W};return await this.adapter.upsertSession({sessionId:Z,source:$.source,pid:$.pid,startedAt:J,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:f.prompt??null,metadata:K$(f.metadata),hookPath:"",messagesPath:W,updatedAt:$0()}),this.manifestStore.initializeMessagesFile(Z,W,J),this.manifestStore.writeSessionManifest(j,f),{manifestPath:j,messagesPath:W,manifest:f}}async updateSessionStatus($,J,Q){let Z;if((await rY(()=>this.adapter.getSession($),async(j)=>{return Z=X0(J)?void 0:$0(),this.adapter.updateSession({sessionId:$,status:J,endedAt:Z??null,exitCode:X0(J)?null:typeof Q==="number"?Q:null,expectedStatusLock:j.statusLock})},$3)).updated){if(J==="cancelled")await this.teamChildren.applyStatusToRunningChildSessions($,"cancelled");return{updated:!0,endedAt:Z}}return{updated:!1}}async updateSession($){for(let J=0;J<$3;J++){let Q=await this.adapter.getSession($.sessionId);if(!Q)return{updated:!1};let Z=Q.metadata??void 0,W=$.metadata!==void 0?K$($.metadata)??{}:K$(Z)??{},j=s$(typeof Z?.title==="string"?Z.title:void 0),X=$.title!==void 0?s$($.title):j??j7($.prompt);if(X)W.title=X;else delete W.title;let f=$.metadata!==void 0||$.prompt!==void 0||$.title!==void 0;if(!(await this.adapter.updateSession({sessionId:$.sessionId,prompt:$.prompt,metadata:f?Object.keys(W).length>0?W:null:void 0,title:X,expectedStatusLock:Q.statusLock})).updated)continue;let{path:V,manifest:H}=this.manifestStore.readManifestFile($.sessionId);if(H){if($.prompt!==void 0)H.prompt=$.prompt??void 0;let B=$.metadata!==void 0?K$($.metadata)??{}:K$(H.metadata)??{};if(X)B.title=X;H.metadata=Object.keys(B).length>0?B:void 0,this.manifestStore.writeSessionManifest(V,H)}return{updated:!0}}return{updated:!1}}queueSpawnRequest($){return this.teamChildren.queueSpawnRequest($)}upsertSubagentSession($){return this.teamChildren.upsertSubagentSession($)}upsertSubagentSessionFromHook($){return this.teamChildren.upsertSubagentSessionFromHook($)}appendSubagentHookAudit($,J){return this.teamChildren.appendSubagentHookAudit(J),Promise.resolve()}persistSessionMessages($,J,Q){let Z=I5(J);return this.manifestStore.persistSessionMessages($,Z,Q)}applySubagentStatus($,J){return this.teamChildren.applySubagentStatus($,J)}applySubagentStatusBySessionId($,J){return this.teamChildren.applySubagentStatusBySessionId($,J)}applyStatusToRunningChildSessions($,J){return this.teamChildren.applyStatusToRunningChildSessions($,J)}onTeamTaskStart($,J,Q){return this.teamChildren.onTeamTaskStart($,J,Q)}onTeamTaskEnd($,J,Q,Z,W,j){return this.teamChildren.onTeamTaskEnd($,J,Q,Z,W,j)}onTeamTaskProgress($,J,Q,Z){return this.teamChildren.onTeamTaskProgress($,J,Q,Z)}handleSubAgentStart($,J){return this.teamChildren.handleSubAgentStart($,J)}handleSubAgentEnd($,J){return this.teamChildren.handleSubAgentEnd($,J)}isPidAlive($){if(!Number.isFinite($)||$<=0)return!1;try{return process.kill(Math.floor($),0),!0}catch(J){return typeof J==="object"&&J!==null&&"code"in J&&J.code==="EPERM"}}async reconcileDeadRunningSession($){if(X0($.status)===!1||this.isPidAlive($.pid))return $;let J=$0(),Q=n1.STALE_REASON;for(let Z=0;Z<$3;Z++){let W=await this.adapter.getSession($.sessionId);if(!W)return;if(X0(W.status)===!1)return W;let j={...W.metadata??{},terminal_marker:Q,terminal_marker_at:J,terminal_marker_pid:W.pid,terminal_marker_source:n1.STALE_SOURCE},X=await this.adapter.updateSession({sessionId:W.sessionId,status:"failed",endedAt:J,exitCode:1,metadata:j,expectedStatusLock:W.statusLock});if(!X.updated)continue;await this.teamChildren.applyStatusToRunningChildSessions(W.sessionId,"failed");let f=pY(W,{status:"failed",endedAt:J,exitCode:1,metadata:j}),{path:Y}=this.manifestStore.readManifestFile(W.sessionId);return this.manifestStore.writeSessionManifest(Y,f),this.manifestStore.appendStaleSessionHookLog(J,W.sessionId,W.pid,Q,n1.STALE_SOURCE),{...W,status:"failed",endedAt:J,exitCode:1,metadata:j,statusLock:X.statusLock,updatedAt:J}}return await this.adapter.getSession($.sessionId)}async listSessions($=200){let J=Math.max(1,Math.floor($)),Q=Math.min(J*5,2000);return await this.reconcileDeadSessions(Q),(await this.adapter.listSessions({limit:Q})).slice(0,J).map((W)=>{let j=K$(W.metadata??void 0),X=this.manifestStore.readSessionManifest(W.sessionId),f=s$(typeof X?.metadata?.title==="string"?X.metadata.title:void 0),Y=f?{...j??{},title:f}:j;return{...W,metadata:Y}})}async reconcileDeadSessions($=2000){let J=Math.max(1,Math.floor($)),Q=(await Promise.all(["idle","running","pending"].map((W)=>this.adapter.listSessions({limit:J,status:W})))).flat(),Z=0;for(let W of Q){let j=await this.reconcileDeadRunningSession(W);if(j&&j.status!==W.status)Z++}return Z}async deleteSession($){let J=$.trim();if(!J)throw Error("session id is required");let Q=await this.adapter.getSession(J);if(!Q)return{deleted:!1};if(await this.adapter.deleteSession(J,!1),!Q.isSubagent){let Z=await this.adapter.listSessions({limit:2000,parentSessionId:J});await this.adapter.deleteSession(J,!0),await Promise.allSettled(Z.map(async(W)=>{await P7(W.cwd,W.sessionId),M6(W.messagesPath),M6(this.manifestStore.artifacts.sessionManifestPath(W.sessionId,!1)),this.manifestStore.artifacts.removeSessionDirIfEmpty(W.sessionId)}))}if(await P7(Q.cwd,J),M6(Q.messagesPath),M6(this.manifestStore.artifacts.sessionManifestPath(J,!1)),Q.isSubagent)this.manifestStore.artifacts.removeSessionDirIfEmpty(J);else{let Z=new Set([this.manifestStore.artifacts.sessionArtifactsDir(J)]);for(let W of[Q.messagesPath])if(typeof W==="string"&&W.trim().length>0)Z.add(tN(W));for(let W of Z)this.manifestStore.artifacts.removeDir(W)}return{deleted:!0}}}function Q3(){return new Date().toISOString()}function SA($,J){let Q=`${$}.tmp`;Qw(Q,`${JSON.stringify(J,null,2)}
|
|
531
531
|
`,"utf8"),Jw(Q,$)}class CA{sessionsDirPath;constructor($=Zw()){this.sessionsDirPath=$}ensureSessionsDir(){if(!J3(this.sessionsDirPath))$w(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}indexPath(){return wA(this.ensureSessionsDir(),"sessions.index.json")}spawnQueuePath(){return wA(this.ensureSessionsDir(),"subagent-spawn-queue.json")}readIndex(){let $=this.indexPath();if(!J3($))return{version:1,sessions:{}};try{let J=JSON.parse(NA($,"utf8"));if(J?.version===1&&J.sessions)return J}catch{}return{version:1,sessions:{}}}writeIndex($){SA(this.indexPath(),$)}readQueue(){let $=this.spawnQueuePath();if(!J3($))return{version:1,nextId:1,requests:[]};try{let J=JSON.parse(NA($,"utf8"));if(J?.version===1&&typeof J.nextId==="number"&&Array.isArray(J.requests))return J}catch{}return{version:1,nextId:1,requests:[]}}writeQueue($){SA(this.spawnQueuePath(),$)}async upsertSession($){let J=this.readIndex();J.sessions[$.sessionId]=$,this.writeIndex(J)}async getSession($){return this.readIndex().sessions[$]}async listSessions($){return Object.values(this.readIndex().sessions).filter((J)=>$.parentSessionId!==void 0?J.parentSessionId===$.parentSessionId:!0).filter((J)=>$.status!==void 0?J.status===$.status:!0).sort((J,Q)=>Q.startedAt.localeCompare(J.startedAt)).slice(0,$.limit)}async updateSession($){let J=this.readIndex(),Q=J.sessions[$.sessionId];if(!Q)return{updated:!1,statusLock:0};if($.expectedStatusLock!==void 0&&Q.statusLock!==$.expectedStatusLock)return{updated:!1,statusLock:Q.statusLock};let Z=$.expectedStatusLock!==void 0?$.expectedStatusLock+1:Q.statusLock,W={...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:Z,isSubagent:$.setRunning||$.parentSessionId!==void 0?!0:Q.isSubagent,updatedAt:Q3()};if($.setRunning)W.status="running",W.endedAt=null,W.exitCode=null;return J.sessions[$.sessionId]=W,this.writeIndex(J),{updated:!0,statusLock:W.statusLock}}async deleteSession($,J){let Q=this.readIndex();if(!Q.sessions[$])return!1;if(delete Q.sessions[$],J){for(let W of Object.values(Q.sessions))if(W.parentSessionId===$)delete Q.sessions[W.sessionId]}return this.writeIndex(Q),!0}async enqueueSpawnRequest($){let J=this.readQueue();J.requests.push({id:J.nextId,rootSessionId:$.rootSessionId,parentAgentId:$.parentAgentId,task:$.task,systemPrompt:$.systemPrompt,createdAt:Q3()}),J.nextId+=1,this.writeQueue(J)}async claimSpawnRequest($,J){let Q=this.readQueue(),Z=Q.requests.find((W)=>W.rootSessionId===$&&W.parentAgentId===J&&!W.consumedAt);if(!Z)return;return Z.consumedAt=Q3(),this.writeQueue(Q),Z.task}}class Z3 extends n1{constructor($,J={}){super(new CA($),J)}ensureSessionsDir(){return super.ensureSessionsDir()}}var bA={};w(bA,{CoreSessionService:()=>L1});import{existsSync as Ww,mkdirSync as jw}from"node:fs";import{resolveSessionDataDir as Xw}from"@cline/shared/storage";var W3=`
|
|
532
532
|
session_id AS sessionId,
|
|
533
533
|
source,
|
|
@@ -576,10 +576,10 @@ ${W}`,$.config.mode)}function GJ($,J){return oN($,J==="plan"?"plan":J==="yolo"?"
|
|
|
576
576
|
provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
|
|
577
577
|
parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
|
|
578
578
|
metadata_json, transcript_path, hook_path, messages_path, updated_at
|
|
579
|
-
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.sessionId,$.source,$.pid,$.startedAt,null,null,"running",0,$.interactive?1:0,$.provider,$.model,$.cwd,$.workspaceRoot,$.teamName??null,$.enableTools?1:0,$.enableSpawn?1:0,$.enableTeams?1:0,null,null,null,null,0,$.prompt??null,$.metadata?JSON.stringify($.metadata):null,"","",$.messagesPath,$0()])}}function fw($){if($.backendMode)return $.backendMode;if(process.env.CLINE_VCR?.trim())return"local";let J=process.env.CLINE_SESSION_BACKEND_MODE?.trim().toLowerCase();if(J==="local"||J==="hub"||J==="remote")return J;return"auto"}var FJ,DJ;function Yw($,J){if($!=="auto"&&$!=="hub")return;if(J.hub?.endpoint?.trim())return;
|
|
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 J=new Map;for(let Q of this.getReturnedFlagKeys($)){let Z=this.getFeatureFlag(Q);J.set(Q,Z??!1)}this.cache=J}getFeatureFlag($){try{let J=this.cacheInfo.flagsPayload?.featureFlagPayloads?.[$],Q=this.cacheInfo.flagsPayload?.featureFlags?.[$],Z=J??Q??Y3[$]??void 0;if(!this.cache.has($)||this.cache.get($)!==Z)this.telemetry?.capture({event:x.FEATURE_FLAGS.FLAG_CALLED,properties:{$feature_flag:$,$feature_flag_response:Q}});return Z}catch(J){return this.logger?.error?.(`Error checking SDK feature flag ${$}`,{error:J}),Y3[$]??!1}}getBooleanFlagEnabled($){return this.cache.get($)===!0}getFlagPayload($){return this.cache.get($)??Y3[$]}getProvider(){return this.provider}get enabled(){return this.provider.enabled}getSettings(){return this.provider.getSettings()}test($,J){if(process.env.IS_TEST==="true")this.cache.set($,J)}async dispose(){await this.provider.dispose()}}class q2{async getAllFlagsAndPayloads(){return{}}enabled=!1;getSettings(){return{enabled:!1,timeoutMs:1000}}async dispose(){}}m8();class UJ{clientName;runtimeAddress;automation;settings;featureFlags;pendingPrompts;host;prepare;capabilities;logger;telemetry;distinctId;automationService;activeSessionBootstraps=new Map;unsubscribeBootstrapCleanup;constructor($,J,Q,Z,W,j,X,f,Y,V){this.clientName=J,this.runtimeAddress=Q,this.host=$,this.prepare=Z,this.capabilities=W,this.logger=j,this.telemetry=X,this.distinctId=f,this.featureFlags=Y,this.settings=iH($),this.pendingPrompts=nH($),this.automation=new d7(()=>{if(!this.automationService)throw Error("ClineCore automation is not enabled. Pass `automation: true` or automation options to ClineCore.create().");return this.automationService}),this.automationService=V?new $J({workspaceRoot:V.workspaceRoot??process.cwd(),specs:{cronSpecsDir:V.cronSpecsDir??V.cronDir,scope:JH(V.cronScope),workspaceRoot:V.workspaceRoot},runtimeHandlers:QH({host:$,getExtensionContext:()=>
|
|
581
|
-
`).map((j)=>j.trim()).filter(Boolean).filter((j)=>j.startsWith("HOOK_CONTROL\t")).map((j)=>j.slice(13)),W=Z.length>0?Z[Z.length-1]:J;try{return{parsedJson:JSON.parse(W)}}catch(j){return{parseError:j instanceof Error?j.message:"Failed to parse subprocess stdout JSON"}}}function _w($,J){let Q=$ instanceof Error?$:Error(String($)),Z=Q,W=J.join(" ");if(Z.code==="EACCES")return Error(`Failed to execute hook command "${W}" (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 "${W}": ${Q.message}`)}async function Ow($,J){let Q=$.stdin;if(!Q)throw Error("runSubprocessEvent failed to create stdin pipe");await new Promise((Z,W)=>{let j=(X)=>{Q.off("error",j);let f=X.code;if(f==="EPIPE"||f==="ERR_STREAM_DESTROYED"){Z();return}W(X)};Q.once("error",j),Q.end(J,(X)=>{if(Q.off("error",j),X){let f=X.code;if(f==="EPIPE"||f==="ERR_STREAM_DESTROYED"){Z();return}W(X);return}Z()})})}async function i8($,J){let Q=Rw(J.command,{env:J.env,debugRole:"hook"});if(!Array.isArray(Q)||Q.length===0)throw Error("runSubprocessEvent requires a non-empty command");let Z=!!J.detached,W=Uw(Q[0],Q.slice(1),{cwd:J.cwd,env:Lw(J.env),stdio:Z?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:Z,windowsHide:!0}),j=new Promise((A)=>{W.once("spawn",()=>{try{J.onSpawn?.({command:Q,pid:W.pid??void 0,detached:Z})}catch{}A()})}),X=new Promise((A,K)=>{W.once("error",(G)=>{K(_w(G,Q))})});if(await Ow(W,JSON.stringify($)),Z){await Promise.race([j,X]),W.unref();return}if(!W.stdout||!W.stderr)throw Error("runSubprocessEvent failed to create stdout/stderr pipes");let f="",Y="",V=!1,H;W.stdout.on("data",(A)=>{f+=A.toString()}),W.stderr.on("data",(A)=>{Y+=A.toString()});let B=new Promise((A)=>{if((J.timeoutMs??0)>0)H=setTimeout(()=>{V=!0,W.kill("SIGKILL")},J.timeoutMs);W.once("close",(K)=>{if(H)clearTimeout(H);let{parsedJson:G,parseError:R}=zw(f);A({exitCode:K,stdout:f,stderr:Y,parsedJson:G,parseError:R,timedOut:V})})});return await Promise.race([B,X])}var Mw=P2.object({contextModification:P2.string().optional(),cancel:P2.boolean().optional(),review:P2.boolean().optional(),errorMessage:P2.string().optional(),context:P2.string().optional(),overrideInput:P2.unknown().optional()}).passthrough();var qw=["agent","hook"];async function a8($,J={}){let Q=J.command??qw;return await i8($,{command:Q,cwd:J.cwd,env:J.env,detached:J.detached,timeoutMs:J.timeoutMs,onSpawn:J.onSpawn})}function lA($){return $ instanceof Error?$:Error(String($))}function Pw($){if(!$||typeof $!=="object")return;let J=Mw.safeParse($);if(!J.success)return;let Q=J.data;if(!(("cancel"in Q)||("review"in Q)||("context"in Q)||("contextModification"in Q)||("overrideInput"in Q)||("errorMessage"in Q)))return;let W=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:W,overrideInput:Object.hasOwn(Q,"overrideInput")?Q.overrideInput:void 0}}function dA($){if(!$||typeof $!=="object")return{};let J={};for(let[Q,Z]of Object.entries($))if(typeof Z==="string")J[Q]=Z;else J[Q]=JSON.stringify(Z);return J}function a1($,J,Q){let Z=Q.env??process.env,W=Z.CLINE_USER_ID?.trim()||Z.USER?.trim()||"unknown",j=Q.cwd||process.cwd();return{clineVersion:Z.CLINE_VERSION?.trim()||"",hookName:$,timestamp:new Date().toISOString(),taskId:J.conversationId,sessionContext:Tw(Q.sessionContext,{hookName:$,conversationId:J.conversationId,agentId:J.agentId,parentAgentId:J.parentAgentId}),workspaceRoots:j?[j]:[],workspaceInfo:Q.workspaceInfo,userId:W,agent_id:J.agentId,parent_agent_id:J.parentAgentId}}function Nw($){return{name:$.name,message:$.message,stack:$.stack}}function ww($){let J=String($??"").toLowerCase();return J.includes("cancel")||J.includes("abort")||J.includes("interrupt")}function Sw($){return{agentId:$.snapshot.agentId,conversationId:$.snapshot.conversationId??$.snapshot.runId??$.snapshot.agentId,parentAgentId:$.snapshot.parentAgentId??null}}function Cw($){return $.filter((J)=>J.type==="text"&&typeof J.text==="string").map((J)=>J.text).join("")}function yw($){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 Ew($){if(!$)return;let J={};if($.cancel===!0)J.stop=!0;if($.overrideInput!==void 0)J.input=$.overrideInput;return Object.keys(J).length>0?J:void 0}async function N2($,J){try{let Q=await a8($,{command:J.command,cwd:J.cwd,env:J.env,detached:!0,onSpawn:J.onSpawn});J.onDispatch?.({payload:$,result:Q,detached:!0})}catch(Q){J.onDispatchError?.(lA(Q),$)}}function BQ($={}){return{hooks:{beforeRun:async(f)=>{let Y=Sw(f);if(($.env??process.env).CLINE_HOOK_AGENT_RESUME==="1"){let H={...a1("agent_resume",Y,$),hookName:"agent_resume",taskResume:{taskMetadata:{},previousState:{}}};await N2(H,$)}else{let H={...a1("agent_start",Y,$),hookName:"agent_start",taskStart:{taskMetadata:{}}};await N2(H,$)}return},beforeTool:async(f)=>{let Y={agentId:f.snapshot.agentId,conversationId:f.snapshot.conversationId??f.snapshot.runId??f.snapshot.agentId,parentAgentId:f.snapshot.parentAgentId??null},V={...a1("tool_call",Y,$),hookName:"tool_call",iteration:f.snapshot.iteration,tool_call:{id:f.toolCall.toolCallId,name:f.toolCall.toolName,input:f.input},preToolUse:{toolName:f.toolCall.toolName,parameters:dA(f.input)}};try{let H=await a8(V,{command:$.command,cwd:$.cwd,env:$.env,detached:!1,timeoutMs:$.timeoutMs,onSpawn:$.onSpawn});if($.onDispatch?.({payload:V,result:H,detached:!1}),H?.timedOut)throw Error("tool_call hook command timed out");if(H?.parseError)throw Error(`tool_call hook produced invalid control JSON: ${H.parseError}`);return Ew(Pw(H?.parsedJson))}catch(H){$.onDispatchError?.(lA(H),V);return}},afterTool:async(f)=>{let Y=yw(f),V={agentId:f.snapshot.agentId,conversationId:f.snapshot.conversationId??f.snapshot.runId??f.snapshot.agentId,parentAgentId:f.snapshot.parentAgentId??null},H={...a1("tool_result",V,$),hookName:"tool_result",iteration:f.snapshot.iteration,tool_result:Y,postToolUse:{toolName:Y.name,parameters:dA(Y.input),result:typeof Y.output==="string"?Y.output:JSON.stringify(Y.output),success:!Y.error,executionTimeMs:Y.durationMs}};await N2(H,$);return},afterRun:async({snapshot:f,result:Y})=>{let V={agentId:f.agentId,conversationId:f.conversationId??f.runId??f.agentId,parentAgentId:f.parentAgentId??null};if(Y.status==="completed"){let A={...a1("agent_end",V,$),hookName:"agent_end",iteration:Y.iterations,turn:{outputText:Y.outputText,status:Y.status},taskComplete:{taskMetadata:{}}};await N2(A,$);return}let H=Y.status==="aborted"||ww(Y.error?.message)?"agent_abort":"agent_error",B=H==="agent_error"?{...a1(H,V,$),hookName:H,iteration:Y.iterations,error:Nw(Y.error??Error("Agent run failed")),taskCancel:{taskMetadata:{}}}:{...a1(H,V,$),hookName:H,reason:Y.error?.message,taskCancel:{taskMetadata:{}}};await N2(B,$)},onEvent:async(f)=>{if(f.type!=="message-added"||f.message.role!=="user")return;let Y={agentId:f.snapshot.agentId,conversationId:f.snapshot.conversationId??f.snapshot.runId??f.snapshot.agentId,parentAgentId:f.snapshot.parentAgentId??null},V={...a1("prompt_submit",Y,$),hookName:"prompt_submit",userPromptSubmit:{prompt:Cw(f.message.content),attachments:[]}};await N2(V,$)}},shutdown:async({agentId:f,conversationId:Y,parentAgentId:V,reason:H})=>{let B={...a1("session_shutdown",{agentId:f,conversationId:Y,parentAgentId:V},$),hookName:"session_shutdown",reason:H};await N2(B,$)}}}var $G={};w($G,{writeHubDiscovery:()=>a9,withHubStartupLock:()=>s9,verifyHubConnection:()=>G1,truncateNotificationBody:()=>_J,toHubStatusUrl:()=>SW,toHubHealthUrl:()=>o9,stopLocalHubServerGracefully:()=>cW,startHubWebSocketServer:()=>C2,startHubServer:()=>tK,spawnDetachedHubServerWithRetry:()=>k8,spawnDetachedHubServer:()=>kW,sendHubCommand:()=>oA,restartLocalHubIfIdleAfterStartupTimeout:()=>QQ,resolveWorkspaceHubOwnerContext:()=>IB,resolveSharedHubOwnerContext:()=>E0,resolveProductionHubOwnerContext:()=>n0,resolveHubUrl:()=>K3,resolveHubOwnerContext:()=>l1,resolveHubEndpointOptions:()=>i0,resolveHubBuildId:()=>n9,resolveDefaultHubPort:()=>h8,resolveDefaultHubPathname:()=>hW,resolveDefaultHubHost:()=>bW,resolveCompatibleLocalHubUrl:()=>XJ,resolveClineDir:()=>EB,resolveClineDataDir:()=>R2,requestHubShutdown:()=>jJ,rememberRecoverableLocalHubUrl:()=>P$,readHubDiscovery:()=>G0,readBearerToken:()=>_Q,probeHubServer:()=>p1,probeHubConnection:()=>sA,prewarmDetachedHubServer:()=>e9,normalizeHubWebSocketUrl:()=>N$,isHubReconnectableTransportError:()=>mW,isHubCommandTimeoutError:()=>JQ,isDiscoveryFilePresent:()=>hB,ensureHubWebSocketServer:()=>OQ,ensureHubServer:()=>eK,ensureDetachedHubServer:()=>uB,ensureCompatibleLocalHubUrl:()=>_2,createLocalHubScheduleRuntimeHandlers:()=>TQ,createInMemoryHubOwnerContext:()=>bB,createHubServerUrl:()=>j1,createHubAuthToken:()=>i9,createConfiguredTelemetryService:()=>s1,createConfiguredTelemetryHandle:()=>$4,connectToHub:()=>FQ,clearHubDiscovery:()=>y0,NodeHubClient:()=>X1,NativeHubTransportAdapter:()=>PJ,HubUIClient:()=>D3,HubTransportError:()=>q0,HubSessionClient:()=>F3,HubServerTransport:()=>Q4,HubScheduleService:()=>o8,HubScheduleCommandService:()=>s8,HubCommandError:()=>I8,DEFAULT_HUB_PORT:()=>yW,DEFAULT_HUB_PATHNAME:()=>EW,DEFAULT_HUB_HOST:()=>CW,BrowserWebSocketHubAdapter:()=>qJ});import{createSessionId as bw}from"@cline/shared";function a0($,J){return{version:$.version,requestId:$.requestId,ok:!0,payload:J}}function rA($,J,Q){return{version:$.version,requestId:$.requestId??bw("hubreq_"),ok:!1,error:{code:J,message:Q}}}class s8{schedules;constructor($){this.schedules=$}async handleCommand($){try{switch($.command){case"schedule.create":return a0($,{schedule:this.schedules.createSchedule(this.toCreateInput($.payload??{}))});case"schedule.list":return a0($,{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 a0($,{schedule:this.schedules.getSchedule(String($.payload?.scheduleId??""))});case"schedule.update":return a0($,{schedule:this.schedules.updateSchedule(String($.payload?.scheduleId??""),this.toUpdateInput($.payload??{}))});case"schedule.delete":return a0($,{deleted:this.schedules.deleteSchedule(String($.payload?.scheduleId??""))});case"schedule.enable":return a0($,{schedule:this.schedules.resumeSchedule(String($.payload?.scheduleId??""))});case"schedule.disable":return a0($,{schedule:this.schedules.pauseSchedule(String($.payload?.scheduleId??""))});case"schedule.trigger":return a0($,{execution:$.payload?.wait===!1?this.schedules.triggerScheduleNowDetached(String($.payload?.scheduleId??"")):await this.schedules.triggerScheduleNow(String($.payload?.scheduleId??""))});case"schedule.list_executions":return a0($,{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 a0($,{stats:this.schedules.getScheduleStats(String($.payload?.scheduleId??""))});case"schedule.active":return a0($,{executions:this.schedules.getActiveExecutions()});case"schedule.upcoming":return a0($,{runs:this.schedules.getUpcomingRuns(typeof $.payload?.limit==="number"?$.payload.limit:void 0)});default:return rA($,"unsupported_command",`Unsupported hub schedule command: ${$.command}`)}}catch(J){return rA($,"schedule_command_failed",J instanceof Error?J.message:String(J))}}toCreateInput($){let J=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider&&$.model?{providerId:String($.provider),modelId:String($.model)}:void 0;return{...$,modelSelection:J}}toUpdateInput($){let J=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider||$.model?{providerId:typeof $.provider==="string"?$.provider:"",modelId:typeof $.model==="string"?$.model:""}:void 0;return{...$,modelSelection:J}}}function KQ($){return $?new Date($).getTime():void 0}function hw($){let J=$.metadata?{...$.metadata}:void 0;if(J)delete J.__hubScheduleCreatedBy,delete J.__hubScheduleCwd,delete J.__hubRuntimeOptions;return J}function AQ($){let J=$.metadata;return{scheduleId:$.externalId,name:$.title,cronPattern:$.scheduleExpr??"",prompt:$.prompt??"",workspaceRoot:$.workspaceRoot??"",cwd:typeof J?.__hubScheduleCwd==="string"?J.__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:KQ($.nextRunAt),lastRunAt:KQ($.lastRunAt),createdBy:typeof J?.__hubScheduleCreatedBy==="string"?J.__hubScheduleCreatedBy:void 0,tags:$.tags,runtimeOptions:J?.__hubRuntimeOptions&&typeof J.__hubRuntimeOptions==="object"&&!Array.isArray(J.__hubRuntimeOptions)?J.__hubRuntimeOptions:void 0,metadata:hw($)}}function kw($){switch($){case"done":return"success";case"cancelled":return"aborted";case"running":return"running";case"queued":return"pending";default:return"failed"}}function V3($,J){return{executionId:$.runId,scheduleId:J,sessionId:$.sessionId,triggeredAt:new Date($.scheduledFor??$.createdAt).getTime(),startedAt:KQ($.startedAt),endedAt:KQ($.completedAt),status:kw($.status),errorMessage:$.error}}class o8{store;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new e6({dbPath:$.dbPath}),this.materializer=new n6({store:this.store}),this.runner=new a6({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(AW($.cronPattern),!$.workspaceRoot?.trim())throw Error("workspaceRoot is required for schedules");return AQ(this.store.createHubSchedule($))}getSchedule($){let J=this.store.getHubSchedule($);return J?AQ(J):void 0}listSchedules($={}){return this.store.listHubSchedules($).map((J)=>AQ(J))}updateSchedule($,J){if(J.cronPattern!==void 0)AW(J.cronPattern);let Q=this.store.getHubSchedule($);if(!Q)return;let Z=J.workspaceRoot!==void 0?J.workspaceRoot.trim():Q.workspaceRoot;if((J.enabled??Q.enabled)&&!Z)throw Error("workspaceRoot is required for enabled schedules");let j=this.store.updateHubSchedule($,{...J,scheduleId:$});return j?AQ(j):void 0}deleteSchedule($){return this.store.deleteHubSchedule($)}pauseSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!1})}resumeSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!0})}async triggerScheduleNow($){let J=this.store.enqueueHubScheduleRun($,"manual");if(!J)return;await this.runner.tick();let Q=this.store.getRun(J.runId)??J;return V3(Q,$)}triggerScheduleNowDetached($){let J=this.store.enqueueHubScheduleRun($,"manual");if(!J)return;return this.runner.tick().catch(()=>{return}),V3(J,$)}listScheduleExecutions($){let J=$.scheduleId?this.store.getHubSchedule($.scheduleId):void 0,Q={specId:J?.specId,limit:$.limit};return this.store.listRuns(Q).map((W)=>{let j=J??this.store.getSpec(W.specId);if(!j||j.source!=="hub-schedule")return;return V3(W,j.externalId)}).filter((W)=>{if(!W)return!1;return!$.status||W.status===$.status})}getScheduleStats($){let J=this.listScheduleExecutions({scheduleId:$,limit:1e4});if(J.length===0)return{totalRuns:0,successRate:0,avgDurationSeconds:0};let Q=0,Z=0,W=0,j;for(let X of J){if(X.status==="success"||X.status==="completed")Q+=1;if(!j&&X.status!=="success"&&X.status!=="completed")j=X;if(X.startedAt&&X.endedAt)W+=X.endedAt-X.startedAt,Z+=1}return{totalRuns:J.length,successRate:Q/J.length,avgDurationSeconds:Z>0?W/Z/1000:0,lastFailure:j}}getActiveExecutions(){return this.runner.getActiveRuns().flatMap(($)=>{let J=this.store.getSpec($.specId);if(!J||J.source!=="hub-schedule"||!$.sessionId)return[];return[{executionId:$.runId,scheduleId:J.externalId,sessionId:$.sessionId,startedAt:$.startedAt??new Date().toISOString(),timeoutAt:J.timeoutSeconds&&$.startedAt?new Date(new Date($.startedAt).getTime()+J.timeoutSeconds*1000).toISOString():void 0}]})}getUpcomingRuns($=20){let J={triggerKind:"schedule",enabled:!0,limit:$};return this.store.listSpecs(J).flatMap((Q)=>Q.source==="hub-schedule"&&Q.nextRunAt?[{spec:Q,nextRunAt:Q.nextRunAt}]:[]).sort((Q,Z)=>String(Q.nextRunAt).localeCompare(String(Z.nextRunAt))).slice(0,$).map(({spec:Q,nextRunAt:Z})=>({scheduleId:Q.externalId,name:Q.title,nextRunAt:Z}))}}GQ();import{resolveClineBuildEnv as WS}from"@cline/shared";function jS($,J){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 ${J} (${Q} event before socket open).`:`Failed to connect to hub at ${J}.`)}var XS="cline-hub-auth.";function fS($){return $.host!==void 0||$.port!==void 0||$.pathname!==void 0}function YS($,J){let Q=new URL($),Z=new URL(J);return Q.search="",Q.hash="",Z.search="",Z.hash="",Q.toString()===Z.toString()}function aA(){return WS()==="production"?n0():E0()}async function VS($){let J=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),J)return J;let Q=aA(),Z=await G0(Q.discoveryPath);if(Z?.url&&YS($.toString(),Z.url))return Z.authToken;return}async function K3($={}){let J=i0($);if(!fS($)){let Q=aA(),Z=await G0(Q.discoveryPath);if(Z?.url)return Z.url}return j1(J.host,J.port,J.pathname)}async function FQ($){return await new Promise((J,Q)=>{(async()=>{let Z=new URL($),W=await VS(Z);Z.hash="";let j=new WebSocket(Z.toString(),W?[`${XS}${W}`]:void 0),X=new Map,f=0;j.addEventListener("open",()=>{J({send(Y){let V=Y.requestId??`hub-client-${++f}`;return new Promise((H,B)=>{X.set(V,{resolve:H,reject:B});let A={kind:"command",envelope:{...Y,requestId:V}};j.send(JSON.stringify(A))})},close(){j.close()}})}),j.addEventListener("message",(Y)=>{let V=JSON.parse(String(Y.data));if(V.kind==="reply"&&V.envelope.requestId){let H=X.get(V.envelope.requestId);if(H)X.delete(V.envelope.requestId),H.resolve(V.envelope)}}),j.addEventListener("close",()=>{for(let Y of X.values())Y.reject(Error("Hub connection closed"));X.clear()}),j.addEventListener("error",(Y)=>{Q(jS(Y,$))})})().catch(Q)})}async function sA($){try{return(await FQ($)).close(),!0}catch{return!1}}async function oA($,J){let Q=await K3($),Z=await FQ(Q);try{return await Z.send({version:J.version??"v1",clientId:J.clientId??"hub-client",...J})}finally{Z.close()}}function G3($){return $?JSON.parse(JSON.stringify($)):{}}function DQ($){let J=$?.session&&typeof $.session==="object"?$.session:void 0;if(!J)return;let Q=J.metadata&&typeof J.metadata==="object"?G3(J.metadata):void 0;return{sessionId:typeof J.sessionId==="string"?J.sessionId:"",parentSessionId:typeof Q?.parentSessionId==="string"?Q.parentSessionId:void 0,messagesPath:typeof Q?.messagesPath==="string"?Q.messagesPath:void 0,metadata:Q}}function tA($,J){return $.error?.message??`hub command failed: ${J}`}function HS($){let J=G3($);if(typeof J.error==="string"&&J.error.trim())return{...J,error:J.error.trim()};let Q=J.result&&typeof J.result==="object"?J.result:void 0;if(typeof Q?.text==="string"&&Q.text.trim())return{...J,error:Q.text.trim()};let Z=Q?.error&&typeof Q.error==="object"?Q.error:void 0;if(typeof Z?.message==="string"&&Z.message.trim())return{...J,error:Z.message.trim()};return J}function eA($){let J=$?.sessionId;return typeof J==="string"&&J.trim()?J.trim():void 0}function BS($){let J=$?.checkpoint;if(!J||typeof J!=="object"||Array.isArray(J))throw Error("hub checkpoint restore returned no checkpoint");let Q=J;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 AS($){let J=G3($.payload);if($.event==="schedule.execution_completed")return{sessionId:$.sessionId?.trim()||eA(J)||"",eventType:"schedule.execution.completed",payload:J};if($.event==="schedule.execution_failed")return{sessionId:$.sessionId?.trim()||eA(J)||"",eventType:"schedule.execution.failed",payload:J};let Q=$.sessionId?.trim();if(!Q)return;switch($.event){case"iteration.started":return{sessionId:Q,eventType:"runtime.chat.iteration_start",payload:J};case"iteration.finished":return{sessionId:Q,eventType:"runtime.chat.iteration_end",payload:J};case"assistant.delta":return{sessionId:Q,eventType:"runtime.chat.text_delta",payload:J};case"usage.updated":return{sessionId:Q,eventType:"runtime.chat.usage",payload:J};case"tool.started":return{sessionId:Q,eventType:"runtime.chat.tool_call_start",payload:J};case"tool.finished":return{sessionId:Q,eventType:"runtime.chat.tool_call_end",payload:J};case"approval.requested":return{sessionId:Q,eventType:"approval.requested",payload:J};case"run.aborted":return{sessionId:Q,eventType:"runtime.chat.aborted",payload:J};case"run.failed":return{sessionId:Q,eventType:"runtime.chat.failed",payload:HS($.payload)};case"run.completed":return{sessionId:Q,eventType:"runtime.chat.completed",payload:J};default:return}}class F3{options;client;metadataApplied=!1;constructor($){this.options=$;this.client=new X1({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 J=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=DQ(J.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($,J,Q){return await this.ensureMetadataApplied(),{result:(await this.client.command("session.send_input",{prompt:J.prompt,mode:J.config.mode,attachments:J.attachments,delivery:J.delivery,timeoutSeconds:J.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 J;try{J=await this.client.command("session.get",void 0,$)}catch(Q){if(d1(Q))return;throw Q}return DQ(J.payload)}async readMessages($){let J=$.trim();if(!J)return[];await this.ensureMetadataApplied();let Q=await this.client.command("session.messages",{sessionId:J},J);if(!Q.ok)throw Error(tA(Q,"session.messages"));let Z=Q.payload?.messages;return Array.isArray(Z)?Z:[]}async restore($){let J=$.sessionId.trim();if(!J)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 Z=$.config,W=await this.client.command("session.restore",{sessionId:J,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...Z?{workspaceRoot:Z.workspaceRoot,cwd:Z.cwd,sessionConfig:{providerId:Z.provider,modelId:Z.model,apiKey:Z.apiKey,cwd:Z.cwd??Z.workspaceRoot,workspaceRoot:Z.workspaceRoot,systemPrompt:Z.systemPrompt??"",mode:Z.mode??"act",rules:Z.rules,maxIterations:Z.maxIterations,enableTools:Z.enableTools,enableSpawnAgent:Z.enableSpawn!==!1,enableAgentTeams:Z.enableTeams!==!1,disableMcpSettingsTools:Z.disableMcpSettingsTools,missionLogIntervalSteps:Z.missionStepInterval,missionLogIntervalMs:Z.missionTimeIntervalMs},metadata:{source:Z.source??"cli",provider:Z.provider,model:Z.model,enableTools:Z.enableTools,enableSpawn:Z.enableSpawn,enableTeams:Z.enableTeams,prompt:void 0,interactive:Z.interactive!==!1},runtimeOptions:{mode:Z.mode,systemPrompt:Z.systemPrompt,maxIterations:Z.maxIterations,enableTools:Z.enableTools,enableSpawn:Z.enableSpawn,enableTeams:Z.enableTeams,autoApproveTools:Z.autoApproveTools,configExtensions:Z.configExtensions},modelSelection:{provider:Z.provider,model:Z.model,apiKey:Z.apiKey},toolPolicies:Z.toolPolicies}:{}},J);if(!W.ok)throw Error(tA(W,"session.restore"));let j=DQ(W.payload);if(Q&&!j?.sessionId)throw Error("hub checkpoint restore returned no session id");let X=Array.isArray(W.payload?.messages)?W.payload.messages:void 0,f=BS(W.payload);return{sessionId:j?.sessionId,startResult:j?.sessionId?{sessionId:j.sessionId,manifestPath:"",messagesPath:j.messagesPath??""}:void 0,...X?{messages:X}:{},checkpoint:f}}async listSessions($){await this.ensureMetadataApplied();let J=await this.client.command("session.list",{limit:$?.limit??200});return(Array.isArray(J.payload?.sessions)?J.payload?.sessions:[]).map((Z)=>DQ({session:Z})).filter((Z)=>Boolean(Z?.sessionId))}async deleteSession($,J=!0){return await this.ensureMetadataApplied(),(await this.client.command("session.delete",{sessionId:$,deleteCheckpointRefs:J})).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($,J){let Q=new Set(($.sessionIds??[]).map((W)=>W.trim()).filter(Boolean)),Z=this.client.subscribe((W)=>{let j=AS(W);if(!j)return;if(Q.size>0&&!Q.has(j.sessionId))return;J.onEvent?.(j)});return this.ensureMetadataApplied().catch((W)=>{J.onError?.(W instanceof Error?W:Error(String(W)))}),Z}streamTeamProgress($,J){let Q=this.client.subscribe((Z)=>{if(Z.event!=="team.progress"||!Z.payload)return;J.onProjection?.(Z.payload)});return this.ensureMetadataApplied().catch((Z)=>{J.onError?.(Z instanceof Error?Z:Error(String(Z)))}),Q}async createSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.create",$)).payload?.schedule}async listSchedules($){await this.ensureMetadataApplied();let J=await this.client.command("schedule.list");return Array.isArray(J.payload?.schedules)?J.payload?.schedules:[]}async getSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.get",{scheduleId:$})).payload?.schedule}async updateSchedule($,J){return await this.ensureMetadataApplied(),(await this.client.command("schedule.update",{scheduleId:$,...J})).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($,J){await this.ensureMetadataApplied();let Q=await this.client.command("schedule.list_executions",{scheduleId:$,limit:J});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 J=await this.client.command("schedule.upcoming",{limit:$});return Array.isArray(J.payload?.upcoming)?J.payload?.upcoming:[]}}class D3{client;constructor($){this.client=new X1({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 J=await this.client.command("session.list",{limit:$});return Array.isArray(J.payload?.sessions)?J.payload.sessions:[]}subscribeUI($){return this.client.subscribe((J)=>{switch(J.event){case"ui.notify":$.onNotify?.(J.payload);break;case"ui.show_window":$.onShowWindow?.(J.payload);break;case"hub.client.registered":$.onClientRegistered?.(J.payload??{});break;case"hub.client.disconnected":$.onClientDisconnected?.(J.payload??{});break;case"session.created":$.onSessionCreated?.(J.payload??{});break;case"session.updated":$.onSessionUpdated?.(J.payload??{});break;case"session.detached":$.onSessionDetached?.(J.payload??{});break}})}}import{resolveClineBuildEnv as sK}from"@cline/shared";function KS($){if(typeof $==="string")return $.trim()||void 0;if(!Array.isArray($))return;return $.map((Q)=>{if(Q&&typeof Q==="object"&&"type"in Q&&Q.type==="text"&&"text"in Q&&typeof Q.text==="string")return Q.text.trim();return""}).filter(Boolean).join(`
|
|
582
|
-
`).trim()||void 0}var $K=120,U3="...";function _J($){let J=$.trim();if(!J)return"";if(Buffer.byteLength(J,"utf8")<=$K)return J;let Q=$K-Buffer.byteLength(U3,"utf8");if(Q<=0)return U3;let Z="";for(let W of J){if(Buffer.byteLength(Z+W,"utf8")>Q)break;Z+=W}return`${Z}${U3}`}async function JK($){let J=$?.sessionId?.trim()||"unknown",Q=typeof $?.metadata?.messagesPath==="string"?$.metadata.messagesPath:void 0,W=[...await q$(Q)].reverse().find((Y)=>Y.role==="assistant"),j=W?KS(W.content):void 0,X=$?.workspaceRoot?.trim()||"workspace",f=typeof $?.metadata?.prompt==="string"?$.metadata.prompt.trim():X;return{title:`Task completed (${J})`,body:_J(j&&j.length>0?j:f.length>0?f:X),severity:"info"}}import{captureSdkError as zQ,createSessionId as rS}from"@cline/shared";import{createSessionId as US}from"@cline/shared";import{createSessionId as DS}from"@cline/shared";function GS($){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 FS($){let J=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):{};if($.parentSessionId?.trim())J.parentSessionId=$.parentSessionId;if($.parentAgentId?.trim())J.parentAgentId=$.parentAgentId;if($.agentId?.trim())J.agentId=$.agentId;if($.conversationId?.trim())J.conversationId=$.conversationId;if($.messagesPath?.trim())J.messagesPath=$.messagesPath;if($.prompt?.trim())J.prompt=$.prompt;if($.provider?.trim())J.provider=$.provider;if($.model?.trim())J.model=$.model;if($.source?.trim())J.source=$.source;if(typeof $.pid==="number")J.pid=$.pid;return Object.keys(J).length>0?J:void 0}function UQ($,J,Q,Z){return{sessionId:$.sessionId,workspaceRoot:$.workspaceRoot,cwd:$.cwd,createdAt:Date.parse($.startedAt),updatedAt:Date.parse($.updatedAt),createdByClientId:J?.createdByClientId??"hub",status:GS($.status),participants:J?[...J.participants.values()]:[],metadata:FS($),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}}:{},...Z?{aggregateUsage:{...Z}}:{}}}function l($,J){return{version:$.version,requestId:$.requestId,ok:!0,...J!==void 0?{payload:J}:{}}}function v($,J,Q){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:J,message:Q}}}function RQ($){return $&&typeof $==="object"&&!Array.isArray($)?$:void 0}function h0($){if(typeof $.payload?.sessionId==="string")return $.payload.sessionId.trim();return $.sessionId?.trim()??""}function w2($,J,Q){return{version:"v1",event:$,eventId:DS("hevt_"),sessionId:Q,timestamp:Date.now(),payload:J}}async function s0($,J){let Q=await $.sessionHost.getSession(J);if(!Q)return;let Z=await $.sessionHost.getAccumulatedUsage?.(J);return UQ(Q,$.sessionState.get(J),Z?.usage,Z?.aggregateUsage)}async function o0($,J){let Q=await $.sessionHost.getSession(J);if(!Q)return;let[Z,W]=await Promise.all([typeof $.sessionHost.readSessionMessages==="function"?$.sessionHost.readSessionMessages(J):[],$.sessionHost.getAccumulatedUsage?.(J)]);return F1({session:Q,messages:Z,usage:W?.usage,aggregateUsage:W?.aggregateUsage})}function LQ($,J,Q,Z,W={}){let j=$.sessionState.get(J);if(j){if(W.interactive!==void 0)j.interactive=W.interactive;if(!j.participants.has(Q))j.participants.set(Q,{clientId:Q,attachedAt:Date.now(),role:Z});return j}let X={createdByClientId:Q,interactive:W.interactive??!0,participants:new Map([[Q,{clientId:Q,attachedAt:Date.now(),role:Z}]])};return $.sessionState.set(J,X),X}async function R3($,J){let Q=US("approval_"),Z=J.sessionId;if($.sessionState.get(Z)?.interactive===!1)return{approved:!1,reason:"Tool approval requires an interactive session, but this session is non-interactive."};return await new Promise((j)=>{$.pendingApprovals.set(Q,{sessionId:Z,resolve:j}),$.publish($.buildEvent("approval.requested",{approvalId:Q,sessionId:J.sessionId,agentId:J.agentId,conversationId:J.conversationId,iteration:J.iteration,toolCallId:J.toolCallId,toolName:J.toolName,inputJson:JSON.stringify(J.input??null),policy:J.policy},Z))})}function L3($,J,Q){let Z=$.pendingApprovals.get(J);if(!Z)return;return $.pendingApprovals.delete(J),Z.resolve(Q),{sessionId:Z.sessionId}}function z3($,J,Q){let Z=0;for(let[W,j]of[...$.pendingApprovals.entries()]){if(!J({approvalId:W,sessionId:j.sessionId}))continue;$.pendingApprovals.delete(W),j.resolve({approved:!1,reason:Q}),$.publish($.buildEvent("approval.resolved",{approvalId:W,approved:!1,cancelled:!0,reason:Q},j.sessionId)),Z+=1}return Z}async function QK($,J){let Q=typeof J.payload?.approvalId==="string"?J.payload.approvalId.trim():"";if(!$.pendingApprovals.get(Q))return v(J,"approval_not_found",`Unknown approval: ${Q}`);let W=typeof J.payload?.reason==="string"?J.payload.reason:J.payload?.payload&&typeof J.payload.payload==="object"&&!Array.isArray(J.payload.payload)&&typeof J.payload.payload.reason==="string"?J.payload.payload.reason:void 0,j=J.payload?.approved===!0,X=L3($,Q,{approved:j,reason:W});if(!X)return v(J,"approval_not_found",`Unknown approval: ${Q}`);return $.publish($.buildEvent("approval.resolved",{approvalId:Q,approved:j,reason:W},X.sessionId)),l(J,{approvalId:Q,approved:j})}import{createSessionId as zS}from"@cline/shared";function RS($){if($ instanceof Error)return{name:$.name,message:$.message,stack:$.stack};if($===void 0)return;return $}var ZK={debug:10,info:20,warn:30,error:40,silent:50};function LS(){let $=process.env.CLINE_HUB_LOG_LEVEL?.trim().toLowerCase();if($==="debug"||$==="info"||$==="warn"||$==="error"||$==="silent")return $;return process.env.VITEST?"error":"info"}function c($,J,Q={}){if(ZK[$]<ZK[LS()])return;let Z=JSON.stringify({ts:new Date().toISOString(),level:$,component:"hub",message:J,...Object.fromEntries(Object.entries(Q).map(([W,j])=>[W,RS(j)]).filter(([,W])=>W!==void 0))});if($==="error"||$==="warn"){console.error(`[hub] ${Z}`);return}console.log(`[hub] ${Z}`)}function _3($,J){let Q=J instanceof Error?J.stack||J.message:String(J);c("error",$,{error:Q})}async function WK($,J,Q,Z,W,j){let X=zS("capreq_"),f=performance.now();return c("info","capability.request.start",{requestId:X,sessionId:J,capabilityName:Q,targetClientId:W}),await new Promise((Y,V)=>{$.pendingCapabilityRequests.set(X,{sessionId:J,targetClientId:W,capabilityName:Q,onProgress:j,resolve:(H)=>{if(c(H.ok?"info":"warn","capability.request.end",{requestId:X,sessionId:J,capabilityName:Q,targetClientId:W,ok:H.ok,error:H.error,durationMs:Math.round(performance.now()-f)}),!H.ok){V(Error(H.error||`Capability ${Q} was rejected by ${W}.`));return}Y(H.payload)}}),$.publish($.buildEvent("capability.requested",{requestId:X,targetClientId:W,capabilityName:Q,payload:Z},J)),c("info","capability.request.published",{requestId:X,sessionId:J,capabilityName:Q,targetClientId:W})})}function jK($,J){let Q=typeof J.payload?.requestId==="string"?J.payload.requestId.trim():"",Z=$.pendingCapabilityRequests.get(Q);if(!Z)return v(J,"capability_not_found",`Unknown capability request: ${Q}`);if((J.clientId?.trim()||"")!==Z.targetClientId)return v(J,"capability_wrong_client",`Capability request ${Q} is owned by ${Z.targetClientId}`);if(J.sessionId?.trim()&&J.sessionId.trim()!==Z.sessionId)return v(J,"capability_wrong_session",`Capability request ${Q} belongs to session ${Z.sessionId}`);let j=J.payload?.payload&&typeof J.payload.payload==="object"&&!Array.isArray(J.payload.payload)?J.payload.payload:{};return Z.onProgress?.(j),l(J,{requestId:Q})}function C$($,J,Q){let Z=0;for(let[W,j]of[...$.pendingCapabilityRequests.entries()]){if(!J({requestId:W,...j}))continue;$.pendingCapabilityRequests.delete(W),c("warn","capability.request.cancelled",{requestId:W,sessionId:j.sessionId,capabilityName:j.capabilityName,targetClientId:j.targetClientId,reason:Q}),j.resolve({ok:!1,error:Q}),$.publish($.buildEvent("capability.resolved",{requestId:W,capabilityName:j.capabilityName,targetClientId:j.targetClientId,ok:!1,cancelled:!0,error:Q},j.sessionId)),Z+=1}return Z}async function XK($,J){let Q=typeof J.payload?.sessionId==="string"?J.payload.sessionId.trim():J.sessionId?.trim()||"",Z=typeof J.payload?.capabilityName==="string"?J.payload.capabilityName.trim():"",W=typeof J.payload?.targetClientId==="string"?J.payload.targetClientId.trim():"";if(!Q||!Z||!W)return v(J,"invalid_capability_request","capability.request requires sessionId, capabilityName, and targetClientId");try{let j=J.payload?.payload&&typeof J.payload.payload==="object"&&!Array.isArray(J.payload.payload)?J.payload.payload:{},X=await $.requestCapability(Q,Z,j,W);return l(J,X)}catch(j){return v(J,"capability_request_failed",j instanceof Error?j.message:String(j))}}function fK($,J){let Q=typeof J.payload?.requestId==="string"?J.payload.requestId.trim():"",Z=$.pendingCapabilityRequests.get(Q);if(!Z)return v(J,"capability_not_found",`Unknown capability request: ${Q}`);let W=J.clientId?.trim()||"";if(W!==Z.targetClientId)return v(J,"capability_wrong_client",`Capability request ${Q} is owned by ${Z.targetClientId}`);if(J.sessionId?.trim()&&J.sessionId.trim()!==Z.sessionId)return v(J,"capability_wrong_session",`Capability request ${Q} belongs to session ${Z.sessionId}`);$.pendingCapabilityRequests.delete(Q);let j=J.payload?.payload&&typeof J.payload.payload==="object"&&!Array.isArray(J.payload.payload)?J.payload.payload:void 0,X=typeof J.payload?.error==="string"?J.payload.error:void 0,f=J.payload?.ok===!0;return c(f?"info":"warn","capability.respond",{requestId:Q,sessionId:Z.sessionId,capabilityName:Z.capabilityName,targetClientId:Z.targetClientId,respondedByClientId:W,ok:f,error:X}),Z.resolve({ok:f,payload:j,error:X}),$.publish($.buildEvent("capability.resolved",{requestId:Q,capabilityName:Z.capabilityName,targetClientId:Z.targetClientId,respondedByClientId:W,ok:f,payload:j,error:X},Z.sessionId)),l(J,{requestId:Q,ok:f})}import{createSessionId as _S}from"@cline/shared";function YK($,J){let Q=J.payload,Z=Q?.clientId?.trim()||J.clientId?.trim()||_S("client_");return $.clients.set(Z,{clientId:Z,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:Z,clientType:Q?.clientType??"unknown",displayName:Q?.displayName,connectedAt:Date.now()})),l(J,{clientId:Z})}function VK($,J){let Q=J.clientId?.trim(),Z=Q?$.clients.get(Q):void 0;if(!Q||!Z)return v(J,"client_not_found","Client is not registered with this hub.");let W=RQ(J.payload?.metadata);if(Z.lastSeenAt=Date.now(),W)Z.metadata=JSON.parse(JSON.stringify(W));return l(J)}function HK($,J,Q){let Z=J.clientId?.trim();if(Z)$.clients.delete(Z),Q(Z),$.publish($.buildEvent("hub.client.disconnected",{clientId:Z}));return l(J)}function BK($,J){return l(J,{clients:[...$.clients.values()]})}var OS=30000;function TS($){if($==="aborted")return"run.aborted";if($==="error"||$==="failed")return"run.failed";return"run.completed"}function MS($){if($.finishReason!=="error")return;return $.text.trim()||void 0}function qS($,J,Q){let Z=Q instanceof Error&&Q.message.trim()?Q.message:`Unknown session: ${J}`;return v($,G2,Z)}function PS($){return $?$:void 0}function NS($){let J=typeof $.timeoutMs==="number"?$.timeoutMs:typeof $.timeout_ms==="number"?$.timeout_ms:void 0;if(J&&Number.isFinite(J)&&J>0)return Math.floor(J);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 wS($,J,Q,Z){let W=performance.now(),j=!1,X={command:J.command,requestId:J.requestId,clientId:J.clientId,sessionId:Q.sessionId,timeoutMs:Z},f=setInterval(()=>{if(j)return;let H=Math.round(performance.now()-W);c("warn","run.heartbeat",{...X,elapsedMs:H}),$.publish($.buildEvent("run.heartbeat",{requestId:J.requestId,elapsedMs:H,...Z?{timeoutMs:Z}:{}},Q.sessionId))},OS),Y=$.sessionHost.runTurn(Q);Y.then((H)=>{if(!j)return;c("warn","run.late_end",{...X,elapsedMs:Math.round(performance.now()-W),finishReason:H?.finishReason})},(H)=>{if(!j)return;c("error","run.late_error",{...X,elapsedMs:Math.round(performance.now()-W),error:H})});let V;try{if(!Z)return await Y;return await Promise.race([Y,new Promise((H,B)=>{V=setTimeout(()=>{let A=`Hub run ${J.command} timed out after ${Z}ms.`;j=!0,clearInterval(f),B(Error(A)),c("error","run.timeout",{...X,elapsedMs:Math.round(performance.now()-W)}),z3($,(K)=>K.sessionId===Q.sessionId,A),C$($,(K)=>K.sessionId===Q.sessionId,A),$.sessionHost.abort(Q.sessionId,A).catch((K)=>{c("error","run.timeout_abort_failed",{...X,error:K})})},Z)})])}finally{if(j=!0,clearInterval(f),V)clearTimeout(V)}}async function AK($,J){let Q=h0(J),Z=J.payload&&typeof J.payload==="object"?J.payload:{},W=typeof Z.prompt==="string"?Z.prompt:typeof Z.input==="string"?Z.input:"";if(!W.trim())return v(J,"invalid_session_input","session input requires a prompt string");$.publish($.buildEvent("run.started",void 0,Q));let j=Z.attachments&&typeof Z.attachments==="object"&&!Array.isArray(Z.attachments)?Z.attachments:void 0,X=Array.isArray(j?.userFiles)?j.userFiles.filter((H)=>typeof H==="string"):void 0,f=NS(Z);$.suppressNextTerminalEventBySession.set(Q,"run.start.reply");let Y;try{Y=await wS($,J,{sessionId:Q,prompt:W,mode:PS(Z.mode),delivery:Z.delivery==="queue"||Z.delivery==="steer"?Z.delivery:void 0,userImages:Array.isArray(j?.userImages)?j.userImages:void 0,userFiles:X,timeoutMs:f},f)}catch(H){if($.suppressNextTerminalEventBySession.get(Q)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Q);if(d1(H))return qS(J,Q,H);throw $.publish($.buildEvent("run.failed",{reason:"error",error:H instanceof Error?H.message:String(H)},Q)),H}if(Y){let H=await o0($,Q),B=MS(Y);if($.publish($.buildEvent(TS(Y.finishReason),{reason:Y.finishReason,...B?{error:B}:{},result:Y,...H?{snapshot:H}:{}},Q)),$.suppressNextTerminalEventBySession.get(Q)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Q)}else $.suppressNextTerminalEventBySession.delete(Q);let V=await o0($,Q);return l(J,Y||V?{...Y?{result:Y}:{},...V?{snapshot:V}:{}}:void 0)}async function KK($,J){let Q=h0(J),Z=typeof J.payload?.reason==="string"?J.payload.reason:"Run was aborted before pending approval or capability request was resolved.";z3($,(W)=>W.sessionId===Q,Z);try{await $.sessionHost.abort(Q,J.payload?.reason)}catch(W){c("warn","run.abort_failed",{command:J.command,requestId:J.requestId,clientId:J.clientId,sessionId:Q,error:W})}finally{C$($,(W)=>W.sessionId===Q,Z)}return l(J,{applied:!0})}async function GK($,J){let Q=n8(J.payload?.payload);if(!Q)return v(J,"invalid_hook_payload","session.hook requires a valid hook event payload");return await $.sessionHost.dispatchHookEvent(Q),l(J,{applied:!0})}async function FK($,J){switch(J.type){case"chunk":return;case"agent_event":await SS($,J);return;case"hook":if(J.payload.hookEventName==="tool_call")$.publish($.buildEvent("tool.started",{toolName:J.payload.toolName},J.payload.sessionId));else if(J.payload.hookEventName==="tool_result")$.publish($.buildEvent("tool.finished",{toolName:J.payload.toolName},J.payload.sessionId));return;case"team_progress":{let Q={type:"team_progress_projection",version:1,sessionId:J.payload.sessionId,summary:J.payload.summary,lastEvent:J.payload.lifecycle};$.publish($.buildEvent("team.progress",Q,J.payload.sessionId));return}case"pending_prompts":$.publish($.buildEvent("session.pending_prompts",{sessionId:J.payload.sessionId,prompts:J.payload.prompts},J.payload.sessionId));return;case"pending_prompt_submitted":{let Q={id:J.payload.id,prompt:J.payload.prompt,delivery:J.payload.delivery,attachmentCount:J.payload.attachmentCount};$.publish($.buildEvent("session.pending_prompt_submitted",{sessionId:J.payload.sessionId,prompt:Q},J.payload.sessionId));return}case"session_snapshot":$.publish($.buildEvent("session.updated",{sessionId:J.payload.sessionId,snapshot:J.payload.snapshot},J.payload.sessionId));return;case"status":{let[Q,Z]=await Promise.all([s0($,J.payload.sessionId),o0($,J.payload.sessionId)]);if(Q)$.publish($.buildEvent("session.updated",{session:Q,...Z?{snapshot:Z}:{}},J.payload.sessionId));return}case"ended":await CS($,J);return;default:return}}async function SS($,J){let{sessionId:Q,event:Z}=J.payload;if(Z.type==="iteration_start"){$.publish($.buildEvent("iteration.started",{iteration:Z.iteration},Q));return}if(Z.type==="iteration_end"){$.publish($.buildEvent("iteration.finished",{iteration:Z.iteration,hadToolCalls:Z.hadToolCalls,toolCallCount:Z.toolCallCount},Q));return}if(Z.type==="content_start"){if(Z.contentType==="text"&&typeof Z.text==="string"&&Z.text.length>0){$.publish($.buildEvent("assistant.delta",{text:Z.text},Q));return}if(Z.contentType==="reasoning"){if(Z.redacted&&!Z.reasoning){$.publish($.buildEvent("reasoning.delta",{text:"",redacted:!0},Q));return}if(typeof Z.reasoning==="string"&&Z.reasoning.length>0)$.publish($.buildEvent("reasoning.delta",{text:Z.reasoning,redacted:Z.redacted===!0},Q));return}if(Z.contentType==="tool"){$.publish($.buildEvent("tool.started",{toolCallId:Z.toolCallId,toolName:Z.toolName,input:Z.input},Q));return}}if(Z.type==="content_end"){switch(Z.contentType){case"text":$.publish($.buildEvent("assistant.finished",{text:Z.text},Q));break;case"reasoning":$.publish($.buildEvent("reasoning.finished",{reasoning:Z.reasoning},Q));break;case"tool":$.publish($.buildEvent("tool.finished",{toolCallId:Z.toolCallId,toolName:Z.toolName,output:Z.output,error:Z.error},Q));break}return}if(Z.type==="usage"){let W;try{W=await $.sessionHost.getAccumulatedUsage?.(Q)}catch{W=void 0}$.publish($.buildEvent("usage.updated",{sessionId:Q,delta:{inputTokens:Z.inputTokens,outputTokens:Z.outputTokens,cacheReadTokens:Z.cacheReadTokens??0,cacheWriteTokens:Z.cacheWriteTokens??0,totalCost:Z.cost??0},totals:{inputTokens:Z.totalInputTokens,outputTokens:Z.totalOutputTokens,cacheReadTokens:Z.totalCacheReadTokens??0,cacheWriteTokens:Z.totalCacheWriteTokens??0,totalCost:Z.totalCost??0},usage:W?.usage,aggregateUsage:W?.aggregateUsage,agent:{kind:J.payload.teamRole==="teammate"?"teammate":Z.parentAgentId?"subagent":"lead",agentId:Z.agentId,conversationId:Z.conversationId,parentAgentId:Z.parentAgentId,teamAgentId:J.payload.teamAgentId,teamRole:J.payload.teamRole}},Q));return}if(Z.type==="done")$.publish($.buildEvent("agent.done",{reason:Z.reason,text:Z.text,iterations:Z.iterations,usage:Z.usage},Q))}async function CS($,J){let Q=$.suppressNextTerminalEventBySession.get(J.payload.sessionId),Z=Q===J.payload.reason||Q==="run.start.reply";if(Z)$.suppressNextTerminalEventBySession.delete(J.payload.sessionId);let[W,j]=await Promise.all([s0($,J.payload.sessionId),o0($,J.payload.sessionId)]);if(J.payload.reason==="completed"){let X=await JK(W);$.publish($.buildEvent("ui.notify",X,J.payload.sessionId))}if(Z)return;$.publish($.buildEvent(J.payload.reason==="aborted"?"run.aborted":J.payload.reason==="error"||J.payload.reason==="failed"?"run.failed":"run.completed",{reason:J.payload.reason,...j?{snapshot:j}:{}},J.payload.sessionId))}import{createSessionId as OK,parseRuntimeConfigExtensions as TK}from"@cline/shared";var LK={};w(LK,{SessionVersioningService:()=>y$,SessionVersioningError:()=>k0});var RK={};w(RK,{trimMessagesToCheckpoint:()=>UK,trimMessagesBeforeCheckpoint:()=>T3,readSessionCheckpointHistory:()=>OJ,createRestoredCheckpointMetadata:()=>O3,createCheckpointRestorePlan:()=>M3,applyCheckpointToWorktree:()=>q3});import{execFile as yS}from"node:child_process";import{promisify as ES}from"node:util";var J4=ES(yS);function OJ($){let J=$?.metadata?.checkpoint&&typeof $.metadata.checkpoint==="object"&&!Array.isArray($.metadata.checkpoint)?$.metadata.checkpoint:void 0;return(Array.isArray(J?.history)?J.history:[]).filter((Z)=>!!Z&&typeof Z==="object"&&!Array.isArray(Z)).flatMap((Z)=>{let W=String(Z.ref??"").trim(),j=Number(Z.createdAt??0),X=Number(Z.runCount??0);if(W.length===0||!Number.isFinite(j)||!Number.isInteger(X)||X<1)return[];let f=Z.kind==="stash"||Z.kind==="commit"?Z.kind:void 0;return[{ref:W,createdAt:j,runCount:X,...f?{kind:f}:{}}]})}function O3($,J){let Q=OJ($).filter((W)=>W.runCount<=J),Z=Q.at(-1);return Z?{latest:Z,history:Q}:void 0}function bS($,J){return $.reduce((Q,Z)=>{if(Z.runCount>J)return Q;if(!Q||Z.runCount>Q.runCount)return Z;return Q},void 0)}function DK($,J){let Q=0;for(let Z=0;Z<$.length;Z+=1){let W=$[Z];if(W?.role!=="user")continue;if(("metadata"in W&&W.metadata&&typeof W.metadata==="object"?W.metadata:void 0)?.kind==="recovery_notice")continue;if(Q+=1,Q===J)return Z}throw Error(`Could not find user message for checkpoint run ${J}`)}function UK($,J){let Q=DK($,J);return $.slice(0,Q+1)}function T3($,J){let Q=DK($,J);return $.slice(0,Q)}function M3($){let J=$.checkpointRunCount;if(!Number.isInteger(J)||J<1)throw Error("checkpointRunCount must be a positive integer");let Q=bS(OJ($.session),J);if(!Q)throw Error(`No checkpoint found at or before run ${J} in session ${$.session.sessionId}`);let Z=($.cwd?.trim()||$.session.cwd||$.session.workspaceRoot).trim();if(!Z)throw Error("cwd or workspaceRoot is required to restore a checkpoint");return{checkpoint:Q,cwd:Z,...$.restoreMessages!==!1?{messages:UK($.messages??[],J)}:{}}}async function q3($,J){if((await J4("git",["-C",$,"rev-parse","--is-inside-work-tree"],{windowsHide:!0})).stdout.trim()!=="true")throw Error(`${$} is not a git repository`);if(await J4("git",["-C",$,"cat-file","-e",`${J.ref}^{commit}`],{windowsHide:!0}),await J4("git",["-C",$,"reset","--hard"],{windowsHide:!0}),await J4("git",["-C",$,"clean","-fd"],{windowsHide:!0}),J.kind==="commit"){await J4("git",["-C",$,"reset","--hard",J.ref],{windowsHide:!0});return}await J4("git",["-C",$,"stash","apply",J.ref],{windowsHide:!0})}class k0 extends Error{code;constructor($,J){super(J);this.code=$;this.name="SessionVersioningError"}}function hS($){let J=$.sessionId.trim();if(!J)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 J}class y${async restoreCheckpoint($){let J=$.restore?.messages!==!1,Q=$.restore?.workspace!==!1,Z=hS({sessionId:$.sessionId,restoreMessages:J,restoreWorkspace:Q,requiresStart:$.start===void 0,checkpointRunCount:$.checkpointRunCount}),W=await $.getSession(Z);if(!W)throw new k0("session_not_found",`Session ${Z} not found`);let j=J?await $.readMessages(Z):void 0;if(J&&j?.length===0)throw new k0("session_messages_not_found",`No messages found for session ${Z}`);let X=M3({session:W,messages:j,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd,restoreMessages:J});if(Q)await($.applyWorkspaceCheckpoint??q3)(X.cwd,X.checkpoint);let f=F1({session:W,messages:j});if(!J)return{checkpoint:X.checkpoint,sourceSnapshot:f};let Y=O3(W,$.checkpointRunCount),V=$.restore?.omitCheckpointMessageFromSession?T3(j??[],$.checkpointRunCount):X.messages??[],H={sourceSession:W,sourceMessages:j,sourceSnapshot:f,plan:X,restoredCheckpointMetadata:Y,initialMessages:V,restoreMessages:J,restoreWorkspace:Q,checkpointRunCount:$.checkpointRunCount};if(!$.start||!$.startSession)throw new k0("invalid_restore","start is required when restore.messages is true");let B=$.buildStartInput?await $.buildStartInput(H,$.start):$.start,A=await $.startSession(B),K=$.getStartedSessionId?.(A);if(K)await($.retainCheckpointRefs??LV)(X.cwd,K,Y?.history??[]);let G=K&&$.readRestoredSession?await $.readRestoredSession(K):void 0;return{sessionId:K,startResult:A,messages:X.messages,checkpoint:X.checkpoint,sourceSnapshot:f,...G?{restoredSnapshot:F1({session:G,messages:V})}:{}}}}import{HUB_CHECKPOINT_CAPABILITY as tp,HUB_COMPACTION_CAPABILITY as ep,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as $r,HUB_HOOK_CAPABILITY_PREFIX as Jr,HUB_MISTAKE_LIMIT_CAPABILITY as Qr,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as Zr,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as Wr,isHubToolExecutorName as kS}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as Vr,HUB_COMPACTION_CAPABILITY as Hr,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as Br,HUB_HOOK_CAPABILITY_PREFIX as Ar,HUB_MISTAKE_LIMIT_CAPABILITY as Kr,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as Gr,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as Fr}from"@cline/shared";var IS=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function S2($){return $&&typeof $==="object"&&!Array.isArray($)?JSON.parse(JSON.stringify($)):void 0}function xS($,J){let Q=typeof $.name==="string"?$.name.trim():"",Z=typeof $.description==="string"?$.description:"",W=typeof $.capabilityName==="string"?$.capabilityName.trim():"",j=S2($.inputSchema);if(!Q||!Z||!j||!W||J.has(W))return;return J.add(W),{kind:"tool",capabilityName:W,name:Q,description:Z,inputSchema:j,...S2($.lifecycle)?{lifecycle:S2($.lifecycle)}:{}}}function N3($){if(!Array.isArray($))return[];let J=[],Q=new Set;for(let Z of $){if(!Z||typeof Z!=="object"||Array.isArray(Z))continue;let W=Z,j=W.kind,X=typeof W.capabilityName==="string"?W.capabilityName.trim():"";if(!X||Q.has(X))continue;if(j==="tool"){let f=xS(W,Q);if(f)J.push(f);continue}if(j==="toolExecutor"){let f=W.executor;if(!kS(f))continue;Q.add(X),J.push({kind:"toolExecutor",capabilityName:X,executor:f});continue}if(j==="hook"){let f=typeof W.name==="string"?W.name.trim():"";if(!f)continue;Q.add(X),J.push({kind:"hook",capabilityName:X,name:f});continue}if(j==="compaction"){Q.add(X),J.push({kind:"compaction",capabilityName:X,...S2(W.config)?{config:S2(W.config)}:{}});continue}if(j==="checkpoint"){Q.add(X),J.push({kind:"checkpoint",capabilityName:X,...S2(W.config)?{config:S2(W.config)}:{}});continue}if(j==="mistakeLimit"){Q.add(X),J.push({kind:"mistakeLimit",capabilityName:X});continue}if(j==="userInstructionService")Q.add(X),J.push({kind:"userInstructionService",capabilityName:X})}return J}function _K($){return{agentId:$.agentId,conversationId:$.conversationId,iteration:$.iteration,metadata:$.metadata}}function gS($){return Object.hasOwn($,"update")?$.update:$}function TJ($){return $.trim().replace(/^\/+/,"").toLowerCase()}function mS($){let J=($??[]).map(TJ).filter(Boolean);return J.length>0?new Set(J):void 0}function vS($,J,Q){if(!Q)return!0;let Z=TJ($),W=TJ(J),j=Z.includes(":")?Z.split(":").at(-1)??Z:Z,X=W.includes(":")?W.split(":").at(-1)??W:W;return Q.has(Z)||Q.has(W)||Q.has(j)||Q.has(X)}function P3($,J){let Q=mS(J);return $.records.skill.map((Z)=>({id:Z.id,name:Z.item.name,description:"description"in Z.item&&typeof Z.item.description==="string"?Z.item.description:void 0,disabled:Z.item.disabled===!0,skill:Z.item})).filter((Z)=>vS(Z.id,Z.name,Q))}function zK($,J){let Q=async(Z,W)=>{let j=TJ(Z),f=P3($,J).filter((A)=>A.id===j||TJ(A.name)===j||A.id.endsWith(`:${j}`)).filter((A)=>!A.disabled);if(f.length!==1)return f.length>1?`Skill "${Z}" is ambiguous. Use one of: ${f.map((A)=>A.id).join(", ")}`:`Skill "${Z}" not found.`;let Y=f[0].skill,V=W?.trim(),H=V?`
|
|
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,$0()])}}function fw($){if($.backendMode)return $.backendMode;if(process.env.CLINE_VCR?.trim())return"local";let J=process.env.CLINE_SESSION_BACKEND_MODE?.trim().toLowerCase();if(J==="local"||J==="hub"||J==="remote")return J;return"auto"}var FJ,DJ;function Yw($,J){if($!=="auto"&&$!=="hub")return;if(J.hub?.endpoint?.trim())return;eQ(J.hub?.workspaceRoot?.trim()||J.hub?.cwd?.trim()||process.cwd())}async function Vw($){await $.reconcileDeadSessions?.().catch(()=>{})}function IA($){try{let J=new U1;return J.init(),new L1(J,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}catch(J){return $.telemetry?.capture({event:"session_backend_fallback",properties:{requestedBackend:"sqlite",fallbackBackend:"file"}}),kA($.telemetry,{component:"core",operation:"session_backend.sqlite_init",error:J,severity:"warn",handled:!0,context:{requestedBackend:"sqlite",fallbackBackend:"file"}}),new Z3(void 0,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}}function hA($,J,Q){return new z1({sessionService:Q??$.sessionService??IA($),capabilities:$.capabilities,telemetry:$.telemetry,toolPolicies:$.toolPolicies,distinctId:J,fetch:$.fetch})}async function f3($){if(FJ)return FJ;if(DJ)return await DJ;return DJ=(async()=>{return FJ=IA($),await Vw(FJ),FJ})().finally(()=>{DJ=void 0}),await DJ}async function r8($){let J=b0($.distinctId);$.telemetry?.setDistinctId(J);let Q=fw($);if(Yw(Q,$),Q==="remote"){let Z=$.remote?.endpoint?.trim();if(!Z)throw Error("Remote runtime mode requires `remote.endpoint` to be configured.");return $.logger?.log("Using remote runtime host",{endpoint:Z}),new g8({endpoint:Z,authToken:$.remote?.authToken,clientType:$.remote?.clientType,displayName:$.remote?.displayName,workspaceRoot:$.remote?.workspaceRoot,cwd:$.remote?.cwd,capabilities:$.capabilities})}if(Q==="hub"){let Z=$.hub?.endpoint?.trim(),W=Z||await _2({strategy:$.hub?.strategy??"require-hub",workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});if(!W)throw Error("No compatible hub runtime is available.");return $.logger?.log("Using hub runtime host",{url:W,explicitEndpoint:Z||void 0}),new r1({url:W,authToken:$.hub?.authToken,clientType:$.hub?.clientType,displayName:$.hub?.displayName,capabilities:$.capabilities,telemetry:$.telemetry},{workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd})}if(Q==="auto"){let Z=await XJ({endpoint:$.hub?.endpoint,strategy:$.hub?.strategy??"prefer-hub",workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});if(Z){$.logger?.log("Using discovered local hub runtime host",{url:Z});let W=new r1({url:Z,authToken:$.hub?.authToken,clientType:$.hub?.clientType,displayName:$.hub?.displayName,capabilities:$.capabilities,telemetry:$.telemetry},{workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});try{return await W.connect(),W}catch(j){$.logger?.log("Falling back to local runtime host",{reason:"hub_connect_failed",severity:"warn",error:j}),kA($.telemetry,{component:"core",operation:"runtime_host.hub_connect",error:j,severity:"warn",handled:!0,context:{backendMode:"auto",fallbackBackend:"local"}})}}return $.logger?.log("Falling back to local runtime host",{reason:"compatible_hub_unavailable",severity:"warn"}),hA($,J)}return hA($,J)}var vA={};w(vA,{NoOpFeatureFlagsProvider:()=>q2,FeatureFlagsService:()=>M2});import{existsSync as Hw,mkdirSync as Bw,readFileSync as Aw,writeFileSync as Kw}from"node:fs";import{dirname as Gw}from"node:path";import{FEATURE_FLAGS as gA,FeatureFlagDefaultValue as Y3}from"@cline/shared";var Fw=3600000,Dw=604800000,mA=1;class M2{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??Fw,this.cacheFilePath=$.cacheFilePath,this.persistentCacheMaxAgeMs=$.persistentCacheMaxAgeMs??Dw,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 J=$??this.context.userId??null,Q=Date.now();if(Q-this.cacheInfo.updateTime<this.cacheTtlMs){if(this.cacheInfo.userId===J)return}let Z=this.cacheInfo;this.cacheInfo={updateTime:Q,userId:J||null};try{let W=await this.provider.getAllFlagsAndPayloads({flagKeys:gA.length>0?gA:void 0,context:{...this.context,userId:J}});if(this.cacheInfo.userId!==J)return;this.cacheInfo.flagsPayload=W,this.rebuildCacheFromSnapshot(W),this.writePersistentCache()}catch(W){if(this.cacheInfo.userId!==J)return;throw this.cacheInfo=Z.updateTime?Z:{updateTime:0,userId:null},this.logger?.error?.("Error polling SDK feature flags",{error:W}),W}}hydrateFromPersistentCache(){let $=this.readPersistentCache();if($)this.hydrateCache($)}isFeatureFlagPayload($){if($===null||typeof $==="string"||typeof $==="number"||typeof $==="boolean")return!0;if(Array.isArray($))return $.every((J)=>this.isFeatureFlagPayload(J));if(typeof $==="object")return Object.values($).every((J)=>this.isFeatureFlagPayload(J));return!1}readPayloadRecord($){if(!$||typeof $!=="object"||Array.isArray($))return;let J=Object.entries($).filter(([,Z])=>this.isFeatureFlagPayload(Z));if(J.length===0)return;let Q={};for(let[Z,W]of J)Q[Z]=W;return Q}readPersistentCache(){try{if(!this.cacheFilePath||!Hw(this.cacheFilePath))return;let $=JSON.parse(Aw(this.cacheFilePath,"utf8"));if(!$||typeof $!=="object")return;let J=$;if(J.version!==mA||typeof J.updatedAt!=="number"||!Number.isFinite(J.updatedAt)||Date.now()-J.updatedAt>this.persistentCacheMaxAgeMs)return;return{updateTime:J.updatedAt,userId:J.userId??null,flagsPayload:{featureFlags:this.readPayloadRecord(J.flagsPayload?.featureFlags),featureFlagPayloads:this.readPayloadRecord(J.flagsPayload?.featureFlagPayloads)}}}catch($){this.logger?.error?.("Error reading SDK feature flags cache",{error:$});return}}writePersistentCache(){try{if(!this.cacheFilePath)return;Bw(Gw(this.cacheFilePath),{recursive:!0,mode:448});let $=this.getCacheSnapshot(),J={version:mA,updatedAt:$.updateTime,userId:$.userId,flagsPayload:$.flagsPayload};Kw(this.cacheFilePath,`${JSON.stringify(J,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 J=new Map;for(let Q of this.getReturnedFlagKeys($)){let Z=this.getFeatureFlag(Q);J.set(Q,Z??!1)}this.cache=J}getFeatureFlag($){try{let J=this.cacheInfo.flagsPayload?.featureFlagPayloads?.[$],Q=this.cacheInfo.flagsPayload?.featureFlags?.[$],Z=J??Q??Y3[$]??void 0;if(!this.cache.has($)||this.cache.get($)!==Z)this.telemetry?.capture({event:x.FEATURE_FLAGS.FLAG_CALLED,properties:{$feature_flag:$,$feature_flag_response:Q}});return Z}catch(J){return this.logger?.error?.(`Error checking SDK feature flag ${$}`,{error:J}),Y3[$]??!1}}getBooleanFlagEnabled($){return this.cache.get($)===!0}getFlagPayload($){return this.cache.get($)??Y3[$]}getProvider(){return this.provider}get enabled(){return this.provider.enabled}getSettings(){return this.provider.getSettings()}test($,J){if(process.env.IS_TEST==="true")this.cache.set($,J)}async dispose(){await this.provider.dispose()}}class q2{async getAllFlagsAndPayloads(){return{}}enabled=!1;getSettings(){return{enabled:!1,timeoutMs:1000}}async dispose(){}}m8();class UJ{clientName;runtimeAddress;automation;settings;featureFlags;pendingPrompts;host;prepare;capabilities;logger;telemetry;distinctId;automationService;activeSessionBootstraps=new Map;unsubscribeBootstrapCleanup;constructor($,J,Q,Z,W,j,X,f,Y,V){this.clientName=J,this.runtimeAddress=Q,this.host=$,this.prepare=Z,this.capabilities=W,this.logger=j,this.telemetry=X,this.distinctId=f,this.featureFlags=Y,this.settings=iH($),this.pendingPrompts=nH($),this.automation=new d7(()=>{if(!this.automationService)throw Error("ClineCore automation is not enabled. Pass `automation: true` or automation options to ClineCore.create().");return this.automationService}),this.automationService=V?new $J({workspaceRoot:V.workspaceRoot??process.cwd(),specs:{cronSpecsDir:V.cronSpecsDir??V.cronDir,scope:JH(V.cronScope),workspaceRoot:V.workspaceRoot},runtimeHandlers:QH({host:$,getExtensionContext:()=>OQ({automationService:this.automationService,automation:this.automation,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}),dbPath:V.dbPath,logger:V.logger,pollIntervalMs:V.pollIntervalMs,claimLeaseSeconds:V.claimLeaseSeconds,globalMaxConcurrency:V.globalMaxConcurrency,watcherDebounceMs:V.watcherDebounceMs}):void 0,this.unsubscribeBootstrapCleanup=this.host.subscribe((H)=>{if(H.type!=="ended")return;this.disposeSessionBootstrap(H.payload.sessionId)})}static async create($={}){let J=b0($.distinctId),Q=z0($.capabilities),Z={...$,capabilities:Q,distinctId:J},W=await r8(Z),j=$H($.automation),X=$.featureFlags||new M2({provider:new q2,telemetry:$.telemetry,logger:$.logger,context:{distinctId:J,clientName:$.clientName}}),f=new UJ(W,$.clientName,W.runtimeAddress,$.prepare,Q,$.logger,$.telemetry,J,X,j?{...j,logger:$.logger}:void 0);if(j&&j.autoStart!==!1)await f.automation.start();return f}async disposeSessionBootstrap($){let J=this.activeSessionBootstraps.get($);if(!J)return;this.activeSessionBootstraps.delete($),await Promise.resolve(J.dispose?.())}async start($){let J=sH($),Q=await this.prepare?.(J);try{let Z=Q?await Q.applyToStartSessionInput(J):J,W=await this.host.startSession(ZW(Z,{defaultCapabilities:this.capabilities,withExtensionContext:(j)=>OQ({automationService:this.automationService,automation:this.automation,context:j,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}));if(Q)if(await this.host.getSession(W.sessionId))this.activeSessionBootstraps.set(W.sessionId,Q);else await Promise.resolve(Q.dispose?.());return oH({input:Z,sessionId:W.sessionId,telemetry:this.telemetry,clientName:this.clientName,runtimeAddress:this.runtimeAddress}),W}catch(Z){throw await Promise.resolve(Q?.dispose?.()),Z}}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 J=[...this.activeSessionBootstraps.keys()];await Promise.allSettled(J.map((Q)=>this.disposeSessionBootstrap(Q)))}};get=(...$)=>this.host.getSession(...$);listHistory=async($={})=>await rQ(this.host,$);list=async($=200,J={})=>await this.listHistory({...J,limit:$});delete=async($)=>{let J=await this.host.deleteSession($);if(J)await this.disposeSessionBootstrap($);return J};update=(...$)=>this.host.updateSession(...$);readMessages=(...$)=>this.host.readSessionMessages(...$);async restore($){let J=$.start?ZW($.start,{defaultCapabilities:this.capabilities,withExtensionContext:(Q)=>OQ({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:J})}ingestHookEvent=(...$)=>this.host.dispatchHookEvent(...$);subscribe($,J){return this.host.subscribe($,J)}updateSessionModel=(...$)=>{return this.host.updateSessionModel?.(...$)??Promise.resolve()}}var uA={};w(uA,{resolvePluginSkillDirectoriesFromPaths:()=>$2,resolvePluginConfigSearchPaths:()=>B6,resolveAndLoadAgentPlugins:()=>K8,resolveAgentPluginPaths:()=>e$,loadAgentPluginsFromPathsWithDiagnostics:()=>t$,loadAgentPluginsFromPaths:()=>m5,loadAgentPluginFromPath:()=>V6,discoverPluginModulePaths:()=>A6});var pA={};w(pA,{toHookConfigFileName:()=>F6,runSubprocessEvent:()=>i8,runHook:()=>a8,resolveHooksConfigSearchPaths:()=>K6,parseHookEventPayload:()=>n8,mergeAgentHooks:()=>W2,listHookConfigFiles:()=>D$,createSubprocessHooks:()=>B9,createHookConfigFileHooks:()=>D6,createHookConfigFileExtension:()=>U8,createHookAuditHooks:()=>D8,createAgentHooksExtension:()=>G8,HookEventPayloadSchema:()=>H9,HookEventNameSchema:()=>V9,HookConfigFileName:()=>F8,HOOK_CONFIG_FILE_EVENT_MAP:()=>G6,HOOKS_CONFIG_DIRECTORY_NAME:()=>p5});import{HookEventNameSchema as V9,HookEventPayloadSchema as H9,parseHookEventPayload as n8,resolveHookSessionContext as Tw}from"@cline/shared";import{z as P2}from"zod";import{spawn as Uw}from"node:child_process";import{augmentNodeCommandForDebug as Rw,withResolvedClineBuildEnv as Lw}from"@cline/shared";function zw($){let J=$.trim();if(!J)return{};let Z=J.split(`
|
|
581
|
+
`).map((j)=>j.trim()).filter(Boolean).filter((j)=>j.startsWith("HOOK_CONTROL\t")).map((j)=>j.slice(13)),W=Z.length>0?Z[Z.length-1]:J;try{return{parsedJson:JSON.parse(W)}}catch(j){return{parseError:j instanceof Error?j.message:"Failed to parse subprocess stdout JSON"}}}function _w($,J){let Q=$ instanceof Error?$:Error(String($)),Z=Q,W=J.join(" ");if(Z.code==="EACCES")return Error(`Failed to execute hook command "${W}" (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 "${W}": ${Q.message}`)}async function Ow($,J){let Q=$.stdin;if(!Q)throw Error("runSubprocessEvent failed to create stdin pipe");await new Promise((Z,W)=>{let j=(X)=>{Q.off("error",j);let f=X.code;if(f==="EPIPE"||f==="ERR_STREAM_DESTROYED"){Z();return}W(X)};Q.once("error",j),Q.end(J,(X)=>{if(Q.off("error",j),X){let f=X.code;if(f==="EPIPE"||f==="ERR_STREAM_DESTROYED"){Z();return}W(X);return}Z()})})}async function i8($,J){let Q=Rw(J.command,{env:J.env,debugRole:"hook"});if(!Array.isArray(Q)||Q.length===0)throw Error("runSubprocessEvent requires a non-empty command");let Z=!!J.detached,W=Uw(Q[0],Q.slice(1),{cwd:J.cwd,env:Lw(J.env),stdio:Z?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:Z,windowsHide:!0}),j=new Promise((A)=>{W.once("spawn",()=>{try{J.onSpawn?.({command:Q,pid:W.pid??void 0,detached:Z})}catch{}A()})}),X=new Promise((A,K)=>{W.once("error",(G)=>{K(_w(G,Q))})});if(await Ow(W,JSON.stringify($)),Z){await Promise.race([j,X]),W.unref();return}if(!W.stdout||!W.stderr)throw Error("runSubprocessEvent failed to create stdout/stderr pipes");let f="",Y="",V=!1,H;W.stdout.on("data",(A)=>{f+=A.toString()}),W.stderr.on("data",(A)=>{Y+=A.toString()});let B=new Promise((A)=>{if((J.timeoutMs??0)>0)H=setTimeout(()=>{V=!0,W.kill("SIGKILL")},J.timeoutMs);W.once("close",(K)=>{if(H)clearTimeout(H);let{parsedJson:G,parseError:R}=zw(f);A({exitCode:K,stdout:f,stderr:Y,parsedJson:G,parseError:R,timedOut:V})})});return await Promise.race([B,X])}var Mw=P2.object({contextModification:P2.string().optional(),cancel:P2.boolean().optional(),review:P2.boolean().optional(),errorMessage:P2.string().optional(),context:P2.string().optional(),overrideInput:P2.unknown().optional()}).passthrough();var qw=["agent","hook"];async function a8($,J={}){let Q=J.command??qw;return await i8($,{command:Q,cwd:J.cwd,env:J.env,detached:J.detached,timeoutMs:J.timeoutMs,onSpawn:J.onSpawn})}function lA($){return $ instanceof Error?$:Error(String($))}function Pw($){if(!$||typeof $!=="object")return;let J=Mw.safeParse($);if(!J.success)return;let Q=J.data;if(!(("cancel"in Q)||("review"in Q)||("context"in Q)||("contextModification"in Q)||("overrideInput"in Q)||("errorMessage"in Q)))return;let W=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:W,overrideInput:Object.hasOwn(Q,"overrideInput")?Q.overrideInput:void 0}}function dA($){if(!$||typeof $!=="object")return{};let J={};for(let[Q,Z]of Object.entries($))if(typeof Z==="string")J[Q]=Z;else J[Q]=JSON.stringify(Z);return J}function a1($,J,Q){let Z=Q.env??process.env,W=Z.CLINE_USER_ID?.trim()||Z.USER?.trim()||"unknown",j=Q.cwd||process.cwd();return{clineVersion:Z.CLINE_VERSION?.trim()||"",hookName:$,timestamp:new Date().toISOString(),taskId:J.conversationId,sessionContext:Tw(Q.sessionContext,{hookName:$,conversationId:J.conversationId,agentId:J.agentId,parentAgentId:J.parentAgentId}),workspaceRoots:j?[j]:[],workspaceInfo:Q.workspaceInfo,userId:W,agent_id:J.agentId,parent_agent_id:J.parentAgentId}}function Nw($){return{name:$.name,message:$.message,stack:$.stack}}function ww($){let J=String($??"").toLowerCase();return J.includes("cancel")||J.includes("abort")||J.includes("interrupt")}function Sw($){return{agentId:$.snapshot.agentId,conversationId:$.snapshot.conversationId??$.snapshot.runId??$.snapshot.agentId,parentAgentId:$.snapshot.parentAgentId??null}}function Cw($){return $.filter((J)=>J.type==="text"&&typeof J.text==="string").map((J)=>J.text).join("")}function yw($){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 Ew($){if(!$)return;let J={};if($.cancel===!0)J.stop=!0;if($.overrideInput!==void 0)J.input=$.overrideInput;return Object.keys(J).length>0?J:void 0}async function N2($,J){try{let Q=await a8($,{command:J.command,cwd:J.cwd,env:J.env,detached:!0,onSpawn:J.onSpawn});J.onDispatch?.({payload:$,result:Q,detached:!0})}catch(Q){J.onDispatchError?.(lA(Q),$)}}function B9($={}){return{hooks:{beforeRun:async(f)=>{let Y=Sw(f);if(($.env??process.env).CLINE_HOOK_AGENT_RESUME==="1"){let H={...a1("agent_resume",Y,$),hookName:"agent_resume",taskResume:{taskMetadata:{},previousState:{}}};await N2(H,$)}else{let H={...a1("agent_start",Y,$),hookName:"agent_start",taskStart:{taskMetadata:{}}};await N2(H,$)}return},beforeTool:async(f)=>{let Y={agentId:f.snapshot.agentId,conversationId:f.snapshot.conversationId??f.snapshot.runId??f.snapshot.agentId,parentAgentId:f.snapshot.parentAgentId??null},V={...a1("tool_call",Y,$),hookName:"tool_call",iteration:f.snapshot.iteration,tool_call:{id:f.toolCall.toolCallId,name:f.toolCall.toolName,input:f.input},preToolUse:{toolName:f.toolCall.toolName,parameters:dA(f.input)}};try{let H=await a8(V,{command:$.command,cwd:$.cwd,env:$.env,detached:!1,timeoutMs:$.timeoutMs,onSpawn:$.onSpawn});if($.onDispatch?.({payload:V,result:H,detached:!1}),H?.timedOut)throw Error("tool_call hook command timed out");if(H?.parseError)throw Error(`tool_call hook produced invalid control JSON: ${H.parseError}`);return Ew(Pw(H?.parsedJson))}catch(H){$.onDispatchError?.(lA(H),V);return}},afterTool:async(f)=>{let Y=yw(f),V={agentId:f.snapshot.agentId,conversationId:f.snapshot.conversationId??f.snapshot.runId??f.snapshot.agentId,parentAgentId:f.snapshot.parentAgentId??null},H={...a1("tool_result",V,$),hookName:"tool_result",iteration:f.snapshot.iteration,tool_result:Y,postToolUse:{toolName:Y.name,parameters:dA(Y.input),result:typeof Y.output==="string"?Y.output:JSON.stringify(Y.output),success:!Y.error,executionTimeMs:Y.durationMs}};await N2(H,$);return},afterRun:async({snapshot:f,result:Y})=>{let V={agentId:f.agentId,conversationId:f.conversationId??f.runId??f.agentId,parentAgentId:f.parentAgentId??null};if(Y.status==="completed"){let A={...a1("agent_end",V,$),hookName:"agent_end",iteration:Y.iterations,turn:{outputText:Y.outputText,status:Y.status},taskComplete:{taskMetadata:{}}};await N2(A,$);return}let H=Y.status==="aborted"||ww(Y.error?.message)?"agent_abort":"agent_error",B=H==="agent_error"?{...a1(H,V,$),hookName:H,iteration:Y.iterations,error:Nw(Y.error??Error("Agent run failed")),taskCancel:{taskMetadata:{}}}:{...a1(H,V,$),hookName:H,reason:Y.error?.message,taskCancel:{taskMetadata:{}}};await N2(B,$)},onEvent:async(f)=>{if(f.type!=="message-added"||f.message.role!=="user")return;let Y={agentId:f.snapshot.agentId,conversationId:f.snapshot.conversationId??f.snapshot.runId??f.snapshot.agentId,parentAgentId:f.snapshot.parentAgentId??null},V={...a1("prompt_submit",Y,$),hookName:"prompt_submit",userPromptSubmit:{prompt:Cw(f.message.content),attachments:[]}};await N2(V,$)}},shutdown:async({agentId:f,conversationId:Y,parentAgentId:V,reason:H})=>{let B={...a1("session_shutdown",{agentId:f,conversationId:Y,parentAgentId:V},$),hookName:"session_shutdown",reason:H};await N2(B,$)}}}var $G={};w($G,{writeHubDiscovery:()=>aQ,withHubStartupLock:()=>sQ,verifyHubConnection:()=>G1,truncateNotificationBody:()=>_J,toHubStatusUrl:()=>SW,toHubHealthUrl:()=>oQ,stopLocalHubServerGracefully:()=>cW,startHubWebSocketServer:()=>C2,startHubServer:()=>tK,spawnDetachedHubServerWithRetry:()=>k8,spawnDetachedHubServer:()=>kW,sendHubCommand:()=>oA,restartLocalHubIfIdleAfterStartupTimeout:()=>Q9,resolveWorkspaceHubOwnerContext:()=>IB,resolveSharedHubOwnerContext:()=>E0,resolveProductionHubOwnerContext:()=>n0,resolveHubUrl:()=>K3,resolveHubOwnerContext:()=>l1,resolveHubEndpointOptions:()=>i0,resolveHubBuildId:()=>nQ,resolveDefaultHubPort:()=>h8,resolveDefaultHubPathname:()=>hW,resolveDefaultHubHost:()=>bW,resolveCompatibleLocalHubUrl:()=>XJ,resolveClineDir:()=>EB,resolveClineDataDir:()=>R2,requestHubShutdown:()=>jJ,rememberRecoverableLocalHubUrl:()=>P$,readHubDiscovery:()=>G0,readBearerToken:()=>_9,probeHubServer:()=>p1,probeHubConnection:()=>sA,prewarmDetachedHubServer:()=>eQ,normalizeHubWebSocketUrl:()=>N$,isHubReconnectableTransportError:()=>mW,isHubCommandTimeoutError:()=>J9,isDiscoveryFilePresent:()=>hB,ensureHubWebSocketServer:()=>O9,ensureHubServer:()=>eK,ensureDetachedHubServer:()=>uB,ensureCompatibleLocalHubUrl:()=>_2,createLocalHubScheduleRuntimeHandlers:()=>T9,createInMemoryHubOwnerContext:()=>bB,createHubServerUrl:()=>j1,createHubAuthToken:()=>iQ,createConfiguredTelemetryService:()=>s1,createConfiguredTelemetryHandle:()=>$4,connectToHub:()=>F9,clearHubDiscovery:()=>y0,NodeHubClient:()=>X1,NativeHubTransportAdapter:()=>PJ,HubUIClient:()=>D3,HubTransportError:()=>q0,HubSessionClient:()=>F3,HubServerTransport:()=>Q4,HubScheduleService:()=>o8,HubScheduleCommandService:()=>s8,HubCommandError:()=>I8,DEFAULT_HUB_PORT:()=>yW,DEFAULT_HUB_PATHNAME:()=>EW,DEFAULT_HUB_HOST:()=>CW,BrowserWebSocketHubAdapter:()=>qJ});import{createSessionId as bw}from"@cline/shared";function a0($,J){return{version:$.version,requestId:$.requestId,ok:!0,payload:J}}function rA($,J,Q){return{version:$.version,requestId:$.requestId??bw("hubreq_"),ok:!1,error:{code:J,message:Q}}}class s8{schedules;constructor($){this.schedules=$}async handleCommand($){try{switch($.command){case"schedule.create":return a0($,{schedule:this.schedules.createSchedule(this.toCreateInput($.payload??{}))});case"schedule.list":return a0($,{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 a0($,{schedule:this.schedules.getSchedule(String($.payload?.scheduleId??""))});case"schedule.update":return a0($,{schedule:this.schedules.updateSchedule(String($.payload?.scheduleId??""),this.toUpdateInput($.payload??{}))});case"schedule.delete":return a0($,{deleted:this.schedules.deleteSchedule(String($.payload?.scheduleId??""))});case"schedule.enable":return a0($,{schedule:this.schedules.resumeSchedule(String($.payload?.scheduleId??""))});case"schedule.disable":return a0($,{schedule:this.schedules.pauseSchedule(String($.payload?.scheduleId??""))});case"schedule.trigger":return a0($,{execution:$.payload?.wait===!1?this.schedules.triggerScheduleNowDetached(String($.payload?.scheduleId??"")):await this.schedules.triggerScheduleNow(String($.payload?.scheduleId??""))});case"schedule.list_executions":return a0($,{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 a0($,{stats:this.schedules.getScheduleStats(String($.payload?.scheduleId??""))});case"schedule.active":return a0($,{executions:this.schedules.getActiveExecutions()});case"schedule.upcoming":return a0($,{runs:this.schedules.getUpcomingRuns(typeof $.payload?.limit==="number"?$.payload.limit:void 0)});default:return rA($,"unsupported_command",`Unsupported hub schedule command: ${$.command}`)}}catch(J){return rA($,"schedule_command_failed",J instanceof Error?J.message:String(J))}}toCreateInput($){let J=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider&&$.model?{providerId:String($.provider),modelId:String($.model)}:void 0;return{...$,modelSelection:J}}toUpdateInput($){let J=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider||$.model?{providerId:typeof $.provider==="string"?$.provider:"",modelId:typeof $.model==="string"?$.model:""}:void 0;return{...$,modelSelection:J}}}function K9($){return $?new Date($).getTime():void 0}function hw($){let J=$.metadata?{...$.metadata}:void 0;if(J)delete J.__hubScheduleCreatedBy,delete J.__hubScheduleCwd,delete J.__hubRuntimeOptions;return J}function A9($){let J=$.metadata;return{scheduleId:$.externalId,name:$.title,cronPattern:$.scheduleExpr??"",prompt:$.prompt??"",workspaceRoot:$.workspaceRoot??"",cwd:typeof J?.__hubScheduleCwd==="string"?J.__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:K9($.nextRunAt),lastRunAt:K9($.lastRunAt),createdBy:typeof J?.__hubScheduleCreatedBy==="string"?J.__hubScheduleCreatedBy:void 0,tags:$.tags,runtimeOptions:J?.__hubRuntimeOptions&&typeof J.__hubRuntimeOptions==="object"&&!Array.isArray(J.__hubRuntimeOptions)?J.__hubRuntimeOptions:void 0,metadata:hw($)}}function kw($){switch($){case"done":return"success";case"cancelled":return"aborted";case"running":return"running";case"queued":return"pending";default:return"failed"}}function V3($,J){return{executionId:$.runId,scheduleId:J,sessionId:$.sessionId,triggeredAt:new Date($.scheduledFor??$.createdAt).getTime(),startedAt:K9($.startedAt),endedAt:K9($.completedAt),status:kw($.status),errorMessage:$.error}}class o8{store;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new e6({dbPath:$.dbPath}),this.materializer=new n6({store:this.store}),this.runner=new a6({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(AW($.cronPattern),!$.workspaceRoot?.trim())throw Error("workspaceRoot is required for schedules");return A9(this.store.createHubSchedule($))}getSchedule($){let J=this.store.getHubSchedule($);return J?A9(J):void 0}listSchedules($={}){return this.store.listHubSchedules($).map((J)=>A9(J))}updateSchedule($,J){if(J.cronPattern!==void 0)AW(J.cronPattern);let Q=this.store.getHubSchedule($);if(!Q)return;let Z=J.workspaceRoot!==void 0?J.workspaceRoot.trim():Q.workspaceRoot;if((J.enabled??Q.enabled)&&!Z)throw Error("workspaceRoot is required for enabled schedules");let j=this.store.updateHubSchedule($,{...J,scheduleId:$});return j?A9(j):void 0}deleteSchedule($){return this.store.deleteHubSchedule($)}pauseSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!1})}resumeSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!0})}async triggerScheduleNow($){let J=this.store.enqueueHubScheduleRun($,"manual");if(!J)return;await this.runner.tick();let Q=this.store.getRun(J.runId)??J;return V3(Q,$)}triggerScheduleNowDetached($){let J=this.store.enqueueHubScheduleRun($,"manual");if(!J)return;return this.runner.tick().catch(()=>{return}),V3(J,$)}listScheduleExecutions($){let J=$.scheduleId?this.store.getHubSchedule($.scheduleId):void 0,Q={specId:J?.specId,limit:$.limit};return this.store.listRuns(Q).map((W)=>{let j=J??this.store.getSpec(W.specId);if(!j||j.source!=="hub-schedule")return;return V3(W,j.externalId)}).filter((W)=>{if(!W)return!1;return!$.status||W.status===$.status})}getScheduleStats($){let J=this.listScheduleExecutions({scheduleId:$,limit:1e4});if(J.length===0)return{totalRuns:0,successRate:0,avgDurationSeconds:0};let Q=0,Z=0,W=0,j;for(let X of J){if(X.status==="success"||X.status==="completed")Q+=1;if(!j&&X.status!=="success"&&X.status!=="completed")j=X;if(X.startedAt&&X.endedAt)W+=X.endedAt-X.startedAt,Z+=1}return{totalRuns:J.length,successRate:Q/J.length,avgDurationSeconds:Z>0?W/Z/1000:0,lastFailure:j}}getActiveExecutions(){return this.runner.getActiveRuns().flatMap(($)=>{let J=this.store.getSpec($.specId);if(!J||J.source!=="hub-schedule"||!$.sessionId)return[];return[{executionId:$.runId,scheduleId:J.externalId,sessionId:$.sessionId,startedAt:$.startedAt??new Date().toISOString(),timeoutAt:J.timeoutSeconds&&$.startedAt?new Date(new Date($.startedAt).getTime()+J.timeoutSeconds*1000).toISOString():void 0}]})}getUpcomingRuns($=20){let J={triggerKind:"schedule",enabled:!0,limit:$};return this.store.listSpecs(J).flatMap((Q)=>Q.source==="hub-schedule"&&Q.nextRunAt?[{spec:Q,nextRunAt:Q.nextRunAt}]:[]).sort((Q,Z)=>String(Q.nextRunAt).localeCompare(String(Z.nextRunAt))).slice(0,$).map(({spec:Q,nextRunAt:Z})=>({scheduleId:Q.externalId,name:Q.title,nextRunAt:Z}))}}G9();import{resolveClineBuildEnv as WS}from"@cline/shared";function jS($,J){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 ${J} (${Q} event before socket open).`:`Failed to connect to hub at ${J}.`)}var XS="cline-hub-auth.";function fS($){return $.host!==void 0||$.port!==void 0||$.pathname!==void 0}function YS($,J){let Q=new URL($),Z=new URL(J);return Q.search="",Q.hash="",Z.search="",Z.hash="",Q.toString()===Z.toString()}function aA(){return WS()==="production"?n0():E0()}async function VS($){let J=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),J)return J;let Q=aA(),Z=await G0(Q.discoveryPath);if(Z?.url&&YS($.toString(),Z.url))return Z.authToken;return}async function K3($={}){let J=i0($);if(!fS($)){let Q=aA(),Z=await G0(Q.discoveryPath);if(Z?.url)return Z.url}return j1(J.host,J.port,J.pathname)}async function F9($){return await new Promise((J,Q)=>{(async()=>{let Z=new URL($),W=await VS(Z);Z.hash="";let j=new WebSocket(Z.toString(),W?[`${XS}${W}`]:void 0),X=new Map,f=0;j.addEventListener("open",()=>{J({send(Y){let V=Y.requestId??`hub-client-${++f}`;return new Promise((H,B)=>{X.set(V,{resolve:H,reject:B});let A={kind:"command",envelope:{...Y,requestId:V}};j.send(JSON.stringify(A))})},close(){j.close()}})}),j.addEventListener("message",(Y)=>{let V=JSON.parse(String(Y.data));if(V.kind==="reply"&&V.envelope.requestId){let H=X.get(V.envelope.requestId);if(H)X.delete(V.envelope.requestId),H.resolve(V.envelope)}}),j.addEventListener("close",()=>{for(let Y of X.values())Y.reject(Error("Hub connection closed"));X.clear()}),j.addEventListener("error",(Y)=>{Q(jS(Y,$))})})().catch(Q)})}async function sA($){try{return(await F9($)).close(),!0}catch{return!1}}async function oA($,J){let Q=await K3($),Z=await F9(Q);try{return await Z.send({version:J.version??"v1",clientId:J.clientId??"hub-client",...J})}finally{Z.close()}}function G3($){return $?JSON.parse(JSON.stringify($)):{}}function D9($){let J=$?.session&&typeof $.session==="object"?$.session:void 0;if(!J)return;let Q=J.metadata&&typeof J.metadata==="object"?G3(J.metadata):void 0;return{sessionId:typeof J.sessionId==="string"?J.sessionId:"",parentSessionId:typeof Q?.parentSessionId==="string"?Q.parentSessionId:void 0,messagesPath:typeof Q?.messagesPath==="string"?Q.messagesPath:void 0,metadata:Q}}function tA($,J){return $.error?.message??`hub command failed: ${J}`}function HS($){let J=G3($);if(typeof J.error==="string"&&J.error.trim())return{...J,error:J.error.trim()};let Q=J.result&&typeof J.result==="object"?J.result:void 0;if(typeof Q?.text==="string"&&Q.text.trim())return{...J,error:Q.text.trim()};let Z=Q?.error&&typeof Q.error==="object"?Q.error:void 0;if(typeof Z?.message==="string"&&Z.message.trim())return{...J,error:Z.message.trim()};return J}function eA($){let J=$?.sessionId;return typeof J==="string"&&J.trim()?J.trim():void 0}function BS($){let J=$?.checkpoint;if(!J||typeof J!=="object"||Array.isArray(J))throw Error("hub checkpoint restore returned no checkpoint");let Q=J;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 AS($){let J=G3($.payload);if($.event==="schedule.execution_completed")return{sessionId:$.sessionId?.trim()||eA(J)||"",eventType:"schedule.execution.completed",payload:J};if($.event==="schedule.execution_failed")return{sessionId:$.sessionId?.trim()||eA(J)||"",eventType:"schedule.execution.failed",payload:J};let Q=$.sessionId?.trim();if(!Q)return;switch($.event){case"iteration.started":return{sessionId:Q,eventType:"runtime.chat.iteration_start",payload:J};case"iteration.finished":return{sessionId:Q,eventType:"runtime.chat.iteration_end",payload:J};case"assistant.delta":return{sessionId:Q,eventType:"runtime.chat.text_delta",payload:J};case"usage.updated":return{sessionId:Q,eventType:"runtime.chat.usage",payload:J};case"tool.started":return{sessionId:Q,eventType:"runtime.chat.tool_call_start",payload:J};case"tool.finished":return{sessionId:Q,eventType:"runtime.chat.tool_call_end",payload:J};case"approval.requested":return{sessionId:Q,eventType:"approval.requested",payload:J};case"run.aborted":return{sessionId:Q,eventType:"runtime.chat.aborted",payload:J};case"run.failed":return{sessionId:Q,eventType:"runtime.chat.failed",payload:HS($.payload)};case"run.completed":return{sessionId:Q,eventType:"runtime.chat.completed",payload:J};default:return}}class F3{options;client;metadataApplied=!1;constructor($){this.options=$;this.client=new X1({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 J=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=D9(J.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($,J,Q){return await this.ensureMetadataApplied(),{result:(await this.client.command("session.send_input",{prompt:J.prompt,mode:J.config.mode,attachments:J.attachments,delivery:J.delivery,timeoutSeconds:J.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 J;try{J=await this.client.command("session.get",void 0,$)}catch(Q){if(d1(Q))return;throw Q}return D9(J.payload)}async readMessages($){let J=$.trim();if(!J)return[];await this.ensureMetadataApplied();let Q=await this.client.command("session.messages",{sessionId:J},J);if(!Q.ok)throw Error(tA(Q,"session.messages"));let Z=Q.payload?.messages;return Array.isArray(Z)?Z:[]}async restore($){let J=$.sessionId.trim();if(!J)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 Z=$.config,W=await this.client.command("session.restore",{sessionId:J,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...Z?{workspaceRoot:Z.workspaceRoot,cwd:Z.cwd,sessionConfig:{providerId:Z.provider,modelId:Z.model,apiKey:Z.apiKey,cwd:Z.cwd??Z.workspaceRoot,workspaceRoot:Z.workspaceRoot,systemPrompt:Z.systemPrompt??"",mode:Z.mode??"act",rules:Z.rules,maxIterations:Z.maxIterations,enableTools:Z.enableTools,enableSpawnAgent:Z.enableSpawn!==!1,enableAgentTeams:Z.enableTeams!==!1,disableMcpSettingsTools:Z.disableMcpSettingsTools,missionLogIntervalSteps:Z.missionStepInterval,missionLogIntervalMs:Z.missionTimeIntervalMs},metadata:{source:Z.source??"cli",provider:Z.provider,model:Z.model,enableTools:Z.enableTools,enableSpawn:Z.enableSpawn,enableTeams:Z.enableTeams,prompt:void 0,interactive:Z.interactive!==!1},runtimeOptions:{mode:Z.mode,systemPrompt:Z.systemPrompt,maxIterations:Z.maxIterations,enableTools:Z.enableTools,enableSpawn:Z.enableSpawn,enableTeams:Z.enableTeams,autoApproveTools:Z.autoApproveTools,configExtensions:Z.configExtensions},modelSelection:{provider:Z.provider,model:Z.model,apiKey:Z.apiKey},toolPolicies:Z.toolPolicies}:{}},J);if(!W.ok)throw Error(tA(W,"session.restore"));let j=D9(W.payload);if(Q&&!j?.sessionId)throw Error("hub checkpoint restore returned no session id");let X=Array.isArray(W.payload?.messages)?W.payload.messages:void 0,f=BS(W.payload);return{sessionId:j?.sessionId,startResult:j?.sessionId?{sessionId:j.sessionId,manifestPath:"",messagesPath:j.messagesPath??""}:void 0,...X?{messages:X}:{},checkpoint:f}}async listSessions($){await this.ensureMetadataApplied();let J=await this.client.command("session.list",{limit:$?.limit??200});return(Array.isArray(J.payload?.sessions)?J.payload?.sessions:[]).map((Z)=>D9({session:Z})).filter((Z)=>Boolean(Z?.sessionId))}async deleteSession($,J=!0){return await this.ensureMetadataApplied(),(await this.client.command("session.delete",{sessionId:$,deleteCheckpointRefs:J})).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($,J){let Q=new Set(($.sessionIds??[]).map((W)=>W.trim()).filter(Boolean)),Z=this.client.subscribe((W)=>{let j=AS(W);if(!j)return;if(Q.size>0&&!Q.has(j.sessionId))return;J.onEvent?.(j)});return this.ensureMetadataApplied().catch((W)=>{J.onError?.(W instanceof Error?W:Error(String(W)))}),Z}streamTeamProgress($,J){let Q=this.client.subscribe((Z)=>{if(Z.event!=="team.progress"||!Z.payload)return;J.onProjection?.(Z.payload)});return this.ensureMetadataApplied().catch((Z)=>{J.onError?.(Z instanceof Error?Z:Error(String(Z)))}),Q}async createSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.create",$)).payload?.schedule}async listSchedules($){await this.ensureMetadataApplied();let J=await this.client.command("schedule.list");return Array.isArray(J.payload?.schedules)?J.payload?.schedules:[]}async getSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.get",{scheduleId:$})).payload?.schedule}async updateSchedule($,J){return await this.ensureMetadataApplied(),(await this.client.command("schedule.update",{scheduleId:$,...J})).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($,J){await this.ensureMetadataApplied();let Q=await this.client.command("schedule.list_executions",{scheduleId:$,limit:J});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 J=await this.client.command("schedule.upcoming",{limit:$});return Array.isArray(J.payload?.upcoming)?J.payload?.upcoming:[]}}class D3{client;constructor($){this.client=new X1({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 J=await this.client.command("session.list",{limit:$});return Array.isArray(J.payload?.sessions)?J.payload.sessions:[]}subscribeUI($){return this.client.subscribe((J)=>{switch(J.event){case"ui.notify":$.onNotify?.(J.payload);break;case"ui.show_window":$.onShowWindow?.(J.payload);break;case"hub.client.registered":$.onClientRegistered?.(J.payload??{});break;case"hub.client.disconnected":$.onClientDisconnected?.(J.payload??{});break;case"session.created":$.onSessionCreated?.(J.payload??{});break;case"session.updated":$.onSessionUpdated?.(J.payload??{});break;case"session.detached":$.onSessionDetached?.(J.payload??{});break}})}}import{resolveClineBuildEnv as sK}from"@cline/shared";function KS($){if(typeof $==="string")return $.trim()||void 0;if(!Array.isArray($))return;return $.map((Q)=>{if(Q&&typeof Q==="object"&&"type"in Q&&Q.type==="text"&&"text"in Q&&typeof Q.text==="string")return Q.text.trim();return""}).filter(Boolean).join(`
|
|
582
|
+
`).trim()||void 0}var $K=120,U3="...";function _J($){let J=$.trim();if(!J)return"";if(Buffer.byteLength(J,"utf8")<=$K)return J;let Q=$K-Buffer.byteLength(U3,"utf8");if(Q<=0)return U3;let Z="";for(let W of J){if(Buffer.byteLength(Z+W,"utf8")>Q)break;Z+=W}return`${Z}${U3}`}async function JK($){let J=$?.sessionId?.trim()||"unknown",Q=typeof $?.metadata?.messagesPath==="string"?$.metadata.messagesPath:void 0,W=[...await q$(Q)].reverse().find((Y)=>Y.role==="assistant"),j=W?KS(W.content):void 0,X=$?.workspaceRoot?.trim()||"workspace",f=typeof $?.metadata?.prompt==="string"?$.metadata.prompt.trim():X;return{title:`Task completed (${J})`,body:_J(j&&j.length>0?j:f.length>0?f:X),severity:"info"}}import{captureSdkError as z9,createSessionId as rS}from"@cline/shared";import{createSessionId as US}from"@cline/shared";import{createSessionId as DS}from"@cline/shared";function GS($){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 FS($){let J=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):{};if($.parentSessionId?.trim())J.parentSessionId=$.parentSessionId;if($.parentAgentId?.trim())J.parentAgentId=$.parentAgentId;if($.agentId?.trim())J.agentId=$.agentId;if($.conversationId?.trim())J.conversationId=$.conversationId;if($.messagesPath?.trim())J.messagesPath=$.messagesPath;if($.prompt?.trim())J.prompt=$.prompt;if($.provider?.trim())J.provider=$.provider;if($.model?.trim())J.model=$.model;if($.source?.trim())J.source=$.source;if(typeof $.pid==="number")J.pid=$.pid;return Object.keys(J).length>0?J:void 0}function U9($,J,Q,Z){return{sessionId:$.sessionId,workspaceRoot:$.workspaceRoot,cwd:$.cwd,createdAt:Date.parse($.startedAt),updatedAt:Date.parse($.updatedAt),createdByClientId:J?.createdByClientId??"hub",status:GS($.status),participants:J?[...J.participants.values()]:[],metadata:FS($),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}}:{},...Z?{aggregateUsage:{...Z}}:{}}}function l($,J){return{version:$.version,requestId:$.requestId,ok:!0,...J!==void 0?{payload:J}:{}}}function v($,J,Q){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:J,message:Q}}}function R9($){return $&&typeof $==="object"&&!Array.isArray($)?$:void 0}function h0($){if(typeof $.payload?.sessionId==="string")return $.payload.sessionId.trim();return $.sessionId?.trim()??""}function w2($,J,Q){return{version:"v1",event:$,eventId:DS("hevt_"),sessionId:Q,timestamp:Date.now(),payload:J}}async function s0($,J){let Q=await $.sessionHost.getSession(J);if(!Q)return;let Z=await $.sessionHost.getAccumulatedUsage?.(J);return U9(Q,$.sessionState.get(J),Z?.usage,Z?.aggregateUsage)}async function o0($,J){let Q=await $.sessionHost.getSession(J);if(!Q)return;let[Z,W]=await Promise.all([typeof $.sessionHost.readSessionMessages==="function"?$.sessionHost.readSessionMessages(J):[],$.sessionHost.getAccumulatedUsage?.(J)]);return F1({session:Q,messages:Z,usage:W?.usage,aggregateUsage:W?.aggregateUsage})}function L9($,J,Q,Z,W={}){let j=$.sessionState.get(J);if(j){if(W.interactive!==void 0)j.interactive=W.interactive;if(!j.participants.has(Q))j.participants.set(Q,{clientId:Q,attachedAt:Date.now(),role:Z});return j}let X={createdByClientId:Q,interactive:W.interactive??!0,participants:new Map([[Q,{clientId:Q,attachedAt:Date.now(),role:Z}]])};return $.sessionState.set(J,X),X}async function R3($,J){let Q=US("approval_"),Z=J.sessionId;if($.sessionState.get(Z)?.interactive===!1)return{approved:!1,reason:"Tool approval requires an interactive session, but this session is non-interactive."};return await new Promise((j)=>{$.pendingApprovals.set(Q,{sessionId:Z,resolve:j}),$.publish($.buildEvent("approval.requested",{approvalId:Q,sessionId:J.sessionId,agentId:J.agentId,conversationId:J.conversationId,iteration:J.iteration,toolCallId:J.toolCallId,toolName:J.toolName,inputJson:JSON.stringify(J.input??null),policy:J.policy},Z))})}function L3($,J,Q){let Z=$.pendingApprovals.get(J);if(!Z)return;return $.pendingApprovals.delete(J),Z.resolve(Q),{sessionId:Z.sessionId}}function z3($,J,Q){let Z=0;for(let[W,j]of[...$.pendingApprovals.entries()]){if(!J({approvalId:W,sessionId:j.sessionId}))continue;$.pendingApprovals.delete(W),j.resolve({approved:!1,reason:Q}),$.publish($.buildEvent("approval.resolved",{approvalId:W,approved:!1,cancelled:!0,reason:Q},j.sessionId)),Z+=1}return Z}async function QK($,J){let Q=typeof J.payload?.approvalId==="string"?J.payload.approvalId.trim():"";if(!$.pendingApprovals.get(Q))return v(J,"approval_not_found",`Unknown approval: ${Q}`);let W=typeof J.payload?.reason==="string"?J.payload.reason:J.payload?.payload&&typeof J.payload.payload==="object"&&!Array.isArray(J.payload.payload)&&typeof J.payload.payload.reason==="string"?J.payload.payload.reason:void 0,j=J.payload?.approved===!0,X=L3($,Q,{approved:j,reason:W});if(!X)return v(J,"approval_not_found",`Unknown approval: ${Q}`);return $.publish($.buildEvent("approval.resolved",{approvalId:Q,approved:j,reason:W},X.sessionId)),l(J,{approvalId:Q,approved:j})}import{createSessionId as zS}from"@cline/shared";function RS($){if($ instanceof Error)return{name:$.name,message:$.message,stack:$.stack};if($===void 0)return;return $}var ZK={debug:10,info:20,warn:30,error:40,silent:50};function LS(){let $=process.env.CLINE_HUB_LOG_LEVEL?.trim().toLowerCase();if($==="debug"||$==="info"||$==="warn"||$==="error"||$==="silent")return $;return process.env.VITEST?"error":"info"}function c($,J,Q={}){if(ZK[$]<ZK[LS()])return;let Z=JSON.stringify({ts:new Date().toISOString(),level:$,component:"hub",message:J,...Object.fromEntries(Object.entries(Q).map(([W,j])=>[W,RS(j)]).filter(([,W])=>W!==void 0))});if($==="error"||$==="warn"){console.error(`[hub] ${Z}`);return}console.log(`[hub] ${Z}`)}function _3($,J){let Q=J instanceof Error?J.stack||J.message:String(J);c("error",$,{error:Q})}async function WK($,J,Q,Z,W,j){let X=zS("capreq_"),f=performance.now();return c("info","capability.request.start",{requestId:X,sessionId:J,capabilityName:Q,targetClientId:W}),await new Promise((Y,V)=>{$.pendingCapabilityRequests.set(X,{sessionId:J,targetClientId:W,capabilityName:Q,onProgress:j,resolve:(H)=>{if(c(H.ok?"info":"warn","capability.request.end",{requestId:X,sessionId:J,capabilityName:Q,targetClientId:W,ok:H.ok,error:H.error,durationMs:Math.round(performance.now()-f)}),!H.ok){V(Error(H.error||`Capability ${Q} was rejected by ${W}.`));return}Y(H.payload)}}),$.publish($.buildEvent("capability.requested",{requestId:X,targetClientId:W,capabilityName:Q,payload:Z},J)),c("info","capability.request.published",{requestId:X,sessionId:J,capabilityName:Q,targetClientId:W})})}function jK($,J){let Q=typeof J.payload?.requestId==="string"?J.payload.requestId.trim():"",Z=$.pendingCapabilityRequests.get(Q);if(!Z)return v(J,"capability_not_found",`Unknown capability request: ${Q}`);if((J.clientId?.trim()||"")!==Z.targetClientId)return v(J,"capability_wrong_client",`Capability request ${Q} is owned by ${Z.targetClientId}`);if(J.sessionId?.trim()&&J.sessionId.trim()!==Z.sessionId)return v(J,"capability_wrong_session",`Capability request ${Q} belongs to session ${Z.sessionId}`);let j=J.payload?.payload&&typeof J.payload.payload==="object"&&!Array.isArray(J.payload.payload)?J.payload.payload:{};return Z.onProgress?.(j),l(J,{requestId:Q})}function C$($,J,Q){let Z=0;for(let[W,j]of[...$.pendingCapabilityRequests.entries()]){if(!J({requestId:W,...j}))continue;$.pendingCapabilityRequests.delete(W),c("warn","capability.request.cancelled",{requestId:W,sessionId:j.sessionId,capabilityName:j.capabilityName,targetClientId:j.targetClientId,reason:Q}),j.resolve({ok:!1,error:Q}),$.publish($.buildEvent("capability.resolved",{requestId:W,capabilityName:j.capabilityName,targetClientId:j.targetClientId,ok:!1,cancelled:!0,error:Q},j.sessionId)),Z+=1}return Z}async function XK($,J){let Q=typeof J.payload?.sessionId==="string"?J.payload.sessionId.trim():J.sessionId?.trim()||"",Z=typeof J.payload?.capabilityName==="string"?J.payload.capabilityName.trim():"",W=typeof J.payload?.targetClientId==="string"?J.payload.targetClientId.trim():"";if(!Q||!Z||!W)return v(J,"invalid_capability_request","capability.request requires sessionId, capabilityName, and targetClientId");try{let j=J.payload?.payload&&typeof J.payload.payload==="object"&&!Array.isArray(J.payload.payload)?J.payload.payload:{},X=await $.requestCapability(Q,Z,j,W);return l(J,X)}catch(j){return v(J,"capability_request_failed",j instanceof Error?j.message:String(j))}}function fK($,J){let Q=typeof J.payload?.requestId==="string"?J.payload.requestId.trim():"",Z=$.pendingCapabilityRequests.get(Q);if(!Z)return v(J,"capability_not_found",`Unknown capability request: ${Q}`);let W=J.clientId?.trim()||"";if(W!==Z.targetClientId)return v(J,"capability_wrong_client",`Capability request ${Q} is owned by ${Z.targetClientId}`);if(J.sessionId?.trim()&&J.sessionId.trim()!==Z.sessionId)return v(J,"capability_wrong_session",`Capability request ${Q} belongs to session ${Z.sessionId}`);$.pendingCapabilityRequests.delete(Q);let j=J.payload?.payload&&typeof J.payload.payload==="object"&&!Array.isArray(J.payload.payload)?J.payload.payload:void 0,X=typeof J.payload?.error==="string"?J.payload.error:void 0,f=J.payload?.ok===!0;return c(f?"info":"warn","capability.respond",{requestId:Q,sessionId:Z.sessionId,capabilityName:Z.capabilityName,targetClientId:Z.targetClientId,respondedByClientId:W,ok:f,error:X}),Z.resolve({ok:f,payload:j,error:X}),$.publish($.buildEvent("capability.resolved",{requestId:Q,capabilityName:Z.capabilityName,targetClientId:Z.targetClientId,respondedByClientId:W,ok:f,payload:j,error:X},Z.sessionId)),l(J,{requestId:Q,ok:f})}import{createSessionId as _S}from"@cline/shared";function YK($,J){let Q=J.payload,Z=Q?.clientId?.trim()||J.clientId?.trim()||_S("client_");return $.clients.set(Z,{clientId:Z,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:Z,clientType:Q?.clientType??"unknown",displayName:Q?.displayName,connectedAt:Date.now()})),l(J,{clientId:Z})}function VK($,J){let Q=J.clientId?.trim(),Z=Q?$.clients.get(Q):void 0;if(!Q||!Z)return v(J,"client_not_found","Client is not registered with this hub.");let W=R9(J.payload?.metadata);if(Z.lastSeenAt=Date.now(),W)Z.metadata=JSON.parse(JSON.stringify(W));return l(J)}function HK($,J,Q){let Z=J.clientId?.trim();if(Z)$.clients.delete(Z),Q(Z),$.publish($.buildEvent("hub.client.disconnected",{clientId:Z}));return l(J)}function BK($,J){return l(J,{clients:[...$.clients.values()]})}var OS=30000;function TS($){if($==="aborted")return"run.aborted";if($==="error"||$==="failed")return"run.failed";return"run.completed"}function MS($){if($.finishReason!=="error")return;return $.text.trim()||void 0}function qS($,J,Q){let Z=Q instanceof Error&&Q.message.trim()?Q.message:`Unknown session: ${J}`;return v($,G2,Z)}function PS($){return $?$:void 0}function NS($){let J=typeof $.timeoutMs==="number"?$.timeoutMs:typeof $.timeout_ms==="number"?$.timeout_ms:void 0;if(J&&Number.isFinite(J)&&J>0)return Math.floor(J);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 wS($,J,Q,Z){let W=performance.now(),j=!1,X={command:J.command,requestId:J.requestId,clientId:J.clientId,sessionId:Q.sessionId,timeoutMs:Z},f=setInterval(()=>{if(j)return;let H=Math.round(performance.now()-W);c("warn","run.heartbeat",{...X,elapsedMs:H}),$.publish($.buildEvent("run.heartbeat",{requestId:J.requestId,elapsedMs:H,...Z?{timeoutMs:Z}:{}},Q.sessionId))},OS),Y=$.sessionHost.runTurn(Q);Y.then((H)=>{if(!j)return;c("warn","run.late_end",{...X,elapsedMs:Math.round(performance.now()-W),finishReason:H?.finishReason})},(H)=>{if(!j)return;c("error","run.late_error",{...X,elapsedMs:Math.round(performance.now()-W),error:H})});let V;try{if(!Z)return await Y;return await Promise.race([Y,new Promise((H,B)=>{V=setTimeout(()=>{let A=`Hub run ${J.command} timed out after ${Z}ms.`;j=!0,clearInterval(f),B(Error(A)),c("error","run.timeout",{...X,elapsedMs:Math.round(performance.now()-W)}),z3($,(K)=>K.sessionId===Q.sessionId,A),C$($,(K)=>K.sessionId===Q.sessionId,A),$.sessionHost.abort(Q.sessionId,A).catch((K)=>{c("error","run.timeout_abort_failed",{...X,error:K})})},Z)})])}finally{if(j=!0,clearInterval(f),V)clearTimeout(V)}}async function AK($,J){let Q=h0(J),Z=J.payload&&typeof J.payload==="object"?J.payload:{},W=typeof Z.prompt==="string"?Z.prompt:typeof Z.input==="string"?Z.input:"";if(!W.trim())return v(J,"invalid_session_input","session input requires a prompt string");$.publish($.buildEvent("run.started",void 0,Q));let j=Z.attachments&&typeof Z.attachments==="object"&&!Array.isArray(Z.attachments)?Z.attachments:void 0,X=Array.isArray(j?.userFiles)?j.userFiles.filter((H)=>typeof H==="string"):void 0,f=NS(Z);$.suppressNextTerminalEventBySession.set(Q,"run.start.reply");let Y;try{Y=await wS($,J,{sessionId:Q,prompt:W,mode:PS(Z.mode),delivery:Z.delivery==="queue"||Z.delivery==="steer"?Z.delivery:void 0,userImages:Array.isArray(j?.userImages)?j.userImages:void 0,userFiles:X,timeoutMs:f},f)}catch(H){if($.suppressNextTerminalEventBySession.get(Q)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Q);if(d1(H))return qS(J,Q,H);throw $.publish($.buildEvent("run.failed",{reason:"error",error:H instanceof Error?H.message:String(H)},Q)),H}if(Y){let H=await o0($,Q),B=MS(Y);if($.publish($.buildEvent(TS(Y.finishReason),{reason:Y.finishReason,...B?{error:B}:{},result:Y,...H?{snapshot:H}:{}},Q)),$.suppressNextTerminalEventBySession.get(Q)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Q)}else $.suppressNextTerminalEventBySession.delete(Q);let V=await o0($,Q);return l(J,Y||V?{...Y?{result:Y}:{},...V?{snapshot:V}:{}}:void 0)}async function KK($,J){let Q=h0(J),Z=typeof J.payload?.reason==="string"?J.payload.reason:"Run was aborted before pending approval or capability request was resolved.";z3($,(W)=>W.sessionId===Q,Z);try{await $.sessionHost.abort(Q,J.payload?.reason)}catch(W){c("warn","run.abort_failed",{command:J.command,requestId:J.requestId,clientId:J.clientId,sessionId:Q,error:W})}finally{C$($,(W)=>W.sessionId===Q,Z)}return l(J,{applied:!0})}async function GK($,J){let Q=n8(J.payload?.payload);if(!Q)return v(J,"invalid_hook_payload","session.hook requires a valid hook event payload");return await $.sessionHost.dispatchHookEvent(Q),l(J,{applied:!0})}async function FK($,J){switch(J.type){case"chunk":return;case"agent_event":await SS($,J);return;case"hook":if(J.payload.hookEventName==="tool_call")$.publish($.buildEvent("tool.started",{toolName:J.payload.toolName},J.payload.sessionId));else if(J.payload.hookEventName==="tool_result")$.publish($.buildEvent("tool.finished",{toolName:J.payload.toolName},J.payload.sessionId));return;case"team_progress":{let Q={type:"team_progress_projection",version:1,sessionId:J.payload.sessionId,summary:J.payload.summary,lastEvent:J.payload.lifecycle};$.publish($.buildEvent("team.progress",Q,J.payload.sessionId));return}case"pending_prompts":$.publish($.buildEvent("session.pending_prompts",{sessionId:J.payload.sessionId,prompts:J.payload.prompts},J.payload.sessionId));return;case"pending_prompt_submitted":{let Q={id:J.payload.id,prompt:J.payload.prompt,delivery:J.payload.delivery,attachmentCount:J.payload.attachmentCount};$.publish($.buildEvent("session.pending_prompt_submitted",{sessionId:J.payload.sessionId,prompt:Q},J.payload.sessionId));return}case"session_snapshot":$.publish($.buildEvent("session.updated",{sessionId:J.payload.sessionId,snapshot:J.payload.snapshot},J.payload.sessionId));return;case"status":{let[Q,Z]=await Promise.all([s0($,J.payload.sessionId),o0($,J.payload.sessionId)]);if(Q)$.publish($.buildEvent("session.updated",{session:Q,...Z?{snapshot:Z}:{}},J.payload.sessionId));return}case"ended":await CS($,J);return;default:return}}async function SS($,J){let{sessionId:Q,event:Z}=J.payload;if(Z.type==="iteration_start"){$.publish($.buildEvent("iteration.started",{iteration:Z.iteration},Q));return}if(Z.type==="iteration_end"){$.publish($.buildEvent("iteration.finished",{iteration:Z.iteration,hadToolCalls:Z.hadToolCalls,toolCallCount:Z.toolCallCount},Q));return}if(Z.type==="content_start"){if(Z.contentType==="text"&&typeof Z.text==="string"&&Z.text.length>0){$.publish($.buildEvent("assistant.delta",{text:Z.text},Q));return}if(Z.contentType==="reasoning"){if(Z.redacted&&!Z.reasoning){$.publish($.buildEvent("reasoning.delta",{text:"",redacted:!0},Q));return}if(typeof Z.reasoning==="string"&&Z.reasoning.length>0)$.publish($.buildEvent("reasoning.delta",{text:Z.reasoning,redacted:Z.redacted===!0},Q));return}if(Z.contentType==="tool"){$.publish($.buildEvent("tool.started",{toolCallId:Z.toolCallId,toolName:Z.toolName,input:Z.input},Q));return}}if(Z.type==="content_end"){switch(Z.contentType){case"text":$.publish($.buildEvent("assistant.finished",{text:Z.text},Q));break;case"reasoning":$.publish($.buildEvent("reasoning.finished",{reasoning:Z.reasoning},Q));break;case"tool":$.publish($.buildEvent("tool.finished",{toolCallId:Z.toolCallId,toolName:Z.toolName,output:Z.output,error:Z.error},Q));break}return}if(Z.type==="usage"){let W;try{W=await $.sessionHost.getAccumulatedUsage?.(Q)}catch{W=void 0}$.publish($.buildEvent("usage.updated",{sessionId:Q,delta:{inputTokens:Z.inputTokens,outputTokens:Z.outputTokens,cacheReadTokens:Z.cacheReadTokens??0,cacheWriteTokens:Z.cacheWriteTokens??0,totalCost:Z.cost??0},totals:{inputTokens:Z.totalInputTokens,outputTokens:Z.totalOutputTokens,cacheReadTokens:Z.totalCacheReadTokens??0,cacheWriteTokens:Z.totalCacheWriteTokens??0,totalCost:Z.totalCost??0},usage:W?.usage,aggregateUsage:W?.aggregateUsage,agent:{kind:J.payload.teamRole==="teammate"?"teammate":Z.parentAgentId?"subagent":"lead",agentId:Z.agentId,conversationId:Z.conversationId,parentAgentId:Z.parentAgentId,teamAgentId:J.payload.teamAgentId,teamRole:J.payload.teamRole}},Q));return}if(Z.type==="done")$.publish($.buildEvent("agent.done",{reason:Z.reason,text:Z.text,iterations:Z.iterations,usage:Z.usage},Q))}async function CS($,J){let Q=$.suppressNextTerminalEventBySession.get(J.payload.sessionId),Z=Q===J.payload.reason||Q==="run.start.reply";if(Z)$.suppressNextTerminalEventBySession.delete(J.payload.sessionId);let[W,j]=await Promise.all([s0($,J.payload.sessionId),o0($,J.payload.sessionId)]);if(J.payload.reason==="completed"){let X=await JK(W);$.publish($.buildEvent("ui.notify",X,J.payload.sessionId))}if(Z)return;$.publish($.buildEvent(J.payload.reason==="aborted"?"run.aborted":J.payload.reason==="error"||J.payload.reason==="failed"?"run.failed":"run.completed",{reason:J.payload.reason,...j?{snapshot:j}:{}},J.payload.sessionId))}import{createSessionId as OK,parseRuntimeConfigExtensions as TK}from"@cline/shared";var LK={};w(LK,{SessionVersioningService:()=>y$,SessionVersioningError:()=>k0});var RK={};w(RK,{trimMessagesToCheckpoint:()=>UK,trimMessagesBeforeCheckpoint:()=>T3,readSessionCheckpointHistory:()=>OJ,createRestoredCheckpointMetadata:()=>O3,createCheckpointRestorePlan:()=>M3,applyCheckpointToWorktree:()=>q3});import{execFile as yS}from"node:child_process";import{promisify as ES}from"node:util";var J4=ES(yS);function OJ($){let J=$?.metadata?.checkpoint&&typeof $.metadata.checkpoint==="object"&&!Array.isArray($.metadata.checkpoint)?$.metadata.checkpoint:void 0;return(Array.isArray(J?.history)?J.history:[]).filter((Z)=>!!Z&&typeof Z==="object"&&!Array.isArray(Z)).flatMap((Z)=>{let W=String(Z.ref??"").trim(),j=Number(Z.createdAt??0),X=Number(Z.runCount??0);if(W.length===0||!Number.isFinite(j)||!Number.isInteger(X)||X<1)return[];let f=Z.kind==="stash"||Z.kind==="commit"?Z.kind:void 0;return[{ref:W,createdAt:j,runCount:X,...f?{kind:f}:{}}]})}function O3($,J){let Q=OJ($).filter((W)=>W.runCount<=J),Z=Q.at(-1);return Z?{latest:Z,history:Q}:void 0}function bS($,J){return $.reduce((Q,Z)=>{if(Z.runCount>J)return Q;if(!Q||Z.runCount>Q.runCount)return Z;return Q},void 0)}function DK($,J){let Q=0;for(let Z=0;Z<$.length;Z+=1){let W=$[Z];if(W?.role!=="user")continue;if(("metadata"in W&&W.metadata&&typeof W.metadata==="object"?W.metadata:void 0)?.kind==="recovery_notice")continue;if(Q+=1,Q===J)return Z}throw Error(`Could not find user message for checkpoint run ${J}`)}function UK($,J){let Q=DK($,J);return $.slice(0,Q+1)}function T3($,J){let Q=DK($,J);return $.slice(0,Q)}function M3($){let J=$.checkpointRunCount;if(!Number.isInteger(J)||J<1)throw Error("checkpointRunCount must be a positive integer");let Q=bS(OJ($.session),J);if(!Q)throw Error(`No checkpoint found at or before run ${J} in session ${$.session.sessionId}`);let Z=($.cwd?.trim()||$.session.cwd||$.session.workspaceRoot).trim();if(!Z)throw Error("cwd or workspaceRoot is required to restore a checkpoint");return{checkpoint:Q,cwd:Z,...$.restoreMessages!==!1?{messages:UK($.messages??[],J)}:{}}}async function q3($,J){if((await J4("git",["-C",$,"rev-parse","--is-inside-work-tree"],{windowsHide:!0})).stdout.trim()!=="true")throw Error(`${$} is not a git repository`);if(await J4("git",["-C",$,"cat-file","-e",`${J.ref}^{commit}`],{windowsHide:!0}),await J4("git",["-C",$,"reset","--hard"],{windowsHide:!0}),await J4("git",["-C",$,"clean","-fd"],{windowsHide:!0}),J.kind==="commit"){await J4("git",["-C",$,"reset","--hard",J.ref],{windowsHide:!0});return}await J4("git",["-C",$,"stash","apply",J.ref],{windowsHide:!0})}class k0 extends Error{code;constructor($,J){super(J);this.code=$;this.name="SessionVersioningError"}}function hS($){let J=$.sessionId.trim();if(!J)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 J}class y${async restoreCheckpoint($){let J=$.restore?.messages!==!1,Q=$.restore?.workspace!==!1,Z=hS({sessionId:$.sessionId,restoreMessages:J,restoreWorkspace:Q,requiresStart:$.start===void 0,checkpointRunCount:$.checkpointRunCount}),W=await $.getSession(Z);if(!W)throw new k0("session_not_found",`Session ${Z} not found`);let j=J?await $.readMessages(Z):void 0;if(J&&j?.length===0)throw new k0("session_messages_not_found",`No messages found for session ${Z}`);let X=M3({session:W,messages:j,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd,restoreMessages:J});if(Q)await($.applyWorkspaceCheckpoint??q3)(X.cwd,X.checkpoint);let f=F1({session:W,messages:j});if(!J)return{checkpoint:X.checkpoint,sourceSnapshot:f};let Y=O3(W,$.checkpointRunCount),V=$.restore?.omitCheckpointMessageFromSession?T3(j??[],$.checkpointRunCount):X.messages??[],H={sourceSession:W,sourceMessages:j,sourceSnapshot:f,plan:X,restoredCheckpointMetadata:Y,initialMessages:V,restoreMessages:J,restoreWorkspace:Q,checkpointRunCount:$.checkpointRunCount};if(!$.start||!$.startSession)throw new k0("invalid_restore","start is required when restore.messages is true");let B=$.buildStartInput?await $.buildStartInput(H,$.start):$.start,A=await $.startSession(B),K=$.getStartedSessionId?.(A);if(K)await($.retainCheckpointRefs??LV)(X.cwd,K,Y?.history??[]);let G=K&&$.readRestoredSession?await $.readRestoredSession(K):void 0;return{sessionId:K,startResult:A,messages:X.messages,checkpoint:X.checkpoint,sourceSnapshot:f,...G?{restoredSnapshot:F1({session:G,messages:V})}:{}}}}import{HUB_CHECKPOINT_CAPABILITY as tp,HUB_COMPACTION_CAPABILITY as ep,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as $r,HUB_HOOK_CAPABILITY_PREFIX as Jr,HUB_MISTAKE_LIMIT_CAPABILITY as Qr,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as Zr,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as Wr,isHubToolExecutorName as kS}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as Vr,HUB_COMPACTION_CAPABILITY as Hr,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as Br,HUB_HOOK_CAPABILITY_PREFIX as Ar,HUB_MISTAKE_LIMIT_CAPABILITY as Kr,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as Gr,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as Fr}from"@cline/shared";var IS=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function S2($){return $&&typeof $==="object"&&!Array.isArray($)?JSON.parse(JSON.stringify($)):void 0}function xS($,J){let Q=typeof $.name==="string"?$.name.trim():"",Z=typeof $.description==="string"?$.description:"",W=typeof $.capabilityName==="string"?$.capabilityName.trim():"",j=S2($.inputSchema);if(!Q||!Z||!j||!W||J.has(W))return;return J.add(W),{kind:"tool",capabilityName:W,name:Q,description:Z,inputSchema:j,...S2($.lifecycle)?{lifecycle:S2($.lifecycle)}:{}}}function N3($){if(!Array.isArray($))return[];let J=[],Q=new Set;for(let Z of $){if(!Z||typeof Z!=="object"||Array.isArray(Z))continue;let W=Z,j=W.kind,X=typeof W.capabilityName==="string"?W.capabilityName.trim():"";if(!X||Q.has(X))continue;if(j==="tool"){let f=xS(W,Q);if(f)J.push(f);continue}if(j==="toolExecutor"){let f=W.executor;if(!kS(f))continue;Q.add(X),J.push({kind:"toolExecutor",capabilityName:X,executor:f});continue}if(j==="hook"){let f=typeof W.name==="string"?W.name.trim():"";if(!f)continue;Q.add(X),J.push({kind:"hook",capabilityName:X,name:f});continue}if(j==="compaction"){Q.add(X),J.push({kind:"compaction",capabilityName:X,...S2(W.config)?{config:S2(W.config)}:{}});continue}if(j==="checkpoint"){Q.add(X),J.push({kind:"checkpoint",capabilityName:X,...S2(W.config)?{config:S2(W.config)}:{}});continue}if(j==="mistakeLimit"){Q.add(X),J.push({kind:"mistakeLimit",capabilityName:X});continue}if(j==="userInstructionService")Q.add(X),J.push({kind:"userInstructionService",capabilityName:X})}return J}function _K($){return{agentId:$.agentId,conversationId:$.conversationId,iteration:$.iteration,metadata:$.metadata}}function gS($){return Object.hasOwn($,"update")?$.update:$}function TJ($){return $.trim().replace(/^\/+/,"").toLowerCase()}function mS($){let J=($??[]).map(TJ).filter(Boolean);return J.length>0?new Set(J):void 0}function vS($,J,Q){if(!Q)return!0;let Z=TJ($),W=TJ(J),j=Z.includes(":")?Z.split(":").at(-1)??Z:Z,X=W.includes(":")?W.split(":").at(-1)??W:W;return Q.has(Z)||Q.has(W)||Q.has(j)||Q.has(X)}function P3($,J){let Q=mS(J);return $.records.skill.map((Z)=>({id:Z.id,name:Z.item.name,description:"description"in Z.item&&typeof Z.item.description==="string"?Z.item.description:void 0,disabled:Z.item.disabled===!0,skill:Z.item})).filter((Z)=>vS(Z.id,Z.name,Q))}function zK($,J){let Q=async(Z,W)=>{let j=TJ(Z),f=P3($,J).filter((A)=>A.id===j||TJ(A.name)===j||A.id.endsWith(`:${j}`)).filter((A)=>!A.disabled);if(f.length!==1)return f.length>1?`Skill "${Z}" is ambiguous. Use one of: ${f.map((A)=>A.id).join(", ")}`:`Skill "${Z}" not found.`;let Y=f[0].skill,V=W?.trim(),H=V?`
|
|
583
583
|
<command-args>${V}</command-args>`:"",B=Y.description?.trim()?`Description: ${Y.description.trim()}
|
|
584
584
|
|
|
585
585
|
`:"";return`<command-name>${Y.name}</command-name>${H}
|
|
@@ -587,7 +587,7 @@ ${W}`,$.config.mode)}function GJ($,J){return oN($,J==="plan"?"plan":J==="yolo"?"
|
|
|
587
587
|
${B}${Y.instructions}
|
|
588
588
|
</command-instructions>`};return Object.defineProperty(Q,"configuredSkills",{get:()=>P3($,J).map(({skill:Z,...W})=>W),enumerable:!0}),Q}function cS($,J,Q,Z){let W={records:{skill:[],rule:[],workflow:[]},runtimeCommands:[]},j=async()=>{let X=await Z($,Q.capabilityName,{},J);if(X?.snapshot)W=X.snapshot};return{start:j,stop:()=>{},refreshType:async()=>{await j()},listRecords:(X)=>[...W.records[X]],listRuntimeCommands:()=>[...W.runtimeCommands],resolveRuntimeSlashCommand:(X)=>{if(!X.startsWith("/")||X.length<2)return X;let Y=X.match(/^\/(\S+)/)?.[1];if(!Y)return X;let V=W.runtimeCommands.find((H)=>H.name===Y);return V?`${V.instructions}${X.slice(Y.length+1)}`:X},hasConfiguredSkills:(X)=>P3(W,X).some((f)=>!f.disabled),createSkillsExecutor:(X)=>zK(W,X),createExtension:(X)=>({name:"cline-hub-user-instructions",manifest:{capabilities:[X.includeRules?"rules":void 0,X.registerSkillsTool?"tools":void 0,X.includeSkills||X.includeWorkflows?"commands":void 0].filter((f)=>Boolean(f))},setup(f){if(X.includeRules)f.registerRule({id:"cline-hub-user-instructions:rules",source:"hub-user-instructions",content:()=>N8(W.records.rule.map((Y)=>Y.item).filter((Y)=>Y.disabled!==!0))});if(X.registerSkillsTool)f.registerTool(v$(zK(W,X.allowedSkillNames)));for(let Y of W.runtimeCommands.filter((V)=>V.kind==="skill"&&X.includeSkills||V.kind==="workflow"&&X.includeWorkflows))f.registerCommand({name:Y.name,description:Y.description,handler:(V)=>{let H=V.trim();return H?`${Y.instructions}
|
|
589
589
|
|
|
590
|
-
${H}`:Y.instructions}})}})}}function uS($,J,Q,Z){let W=Q.map((j)=>[j.executor,async(...X)=>{let f=X.at(-1),Y=X.slice(0,-1);return(await Z($,j.capabilityName,{executor:j.executor,args:Y,context:_K(f)},J))?.result}]);return W.length>0?Object.fromEntries(W):void 0}function dS($,J,Q,Z){if(Q.length===0)return;return Q.map((W)=>({name:W.name,description:W.description,inputSchema:W.inputSchema,lifecycle:W.lifecycle,async execute(j,X){return(await Z($,W.capabilityName,{toolName:W.name,input:j,context:_K(X)},J,X.emitUpdate?(Y)=>{X.emitUpdate?.(gS(Y))}:void 0))?.result}}))}function lS($,J,Q,Z){let W=new Map(Q.map((X)=>[X.name,X])),j={};for(let X of IS){let f=W.get(X);if(!f)continue;j[X]=async(Y)=>{return(await Z($,f.capabilityName,{context:Y},J))?.control}}return Object.keys(j).length>0?j:void 0}function w3($){let J=$.contributions.filter((Y)=>Y.kind==="toolExecutor"),Q=$.contributions.filter((Y)=>Y.kind==="tool"),Z=$.contributions.filter((Y)=>Y.kind==="hook"),W=$.contributions.find((Y)=>Y.kind==="compaction"),j=$.contributions.find((Y)=>Y.kind==="checkpoint"),X=$.contributions.find((Y)=>Y.kind==="mistakeLimit"),f=$.contributions.find((Y)=>Y.kind==="userInstructionService");return{hasClientContributions:$.contributions.length>0,toolExecutors:uS($.sessionId,$.targetClientId,J,$.requestCapability),localRuntime:{...Z.length>0?{hooks:lS($.sessionId,$.targetClientId,Z,$.requestCapability)}:{},...Q.length>0?{extraTools:dS($.sessionId,$.targetClientId,Q,$.requestCapability)}:{},...W?{compaction:{...$.sessionConfig?.compaction??{},...W.config,compact:async(Y)=>{return(await $.requestCapability($.sessionId,W.capabilityName,{context:Y},$.targetClientId))?.result}}}:{},...j?{checkpoint:{...$.sessionConfig?.checkpoint??{},...j.config,createCheckpoint:async(Y)=>{return(await $.requestCapability($.sessionId,j.capabilityName,{context:Y},$.targetClientId))?.result}}}:{},...X?{onConsecutiveMistakeLimitReached:async(Y)=>{return(await $.requestCapability($.sessionId,X.capabilityName,{context:Y},$.targetClientId))?.result}}:{},...f?{userInstructionService:cS($.sessionId,$.targetClientId,f,$.requestCapability)}:{}}}}var MK="hubCapabilityOwnerClientId";function qK($,J){$[MK]=J}function pS($){let J=$?.[MK];return typeof J==="string"&&J.trim()?J.trim():void 0}async function PK($,J,Q){let Z=performance.now(),W={command:J.command,requestId:J.requestId,clientId:J.clientId,sessionId:J.sessionId};c("info","session.create.begin",W);let j=J.payload&&typeof J.payload==="object"?J.payload:{},X=j.metadata&&typeof j.metadata==="object"?JSON.parse(JSON.stringify(j.metadata)):{},f=j.sessionConfig&&typeof j.sessionConfig==="object"?JSON.parse(JSON.stringify(j.sessionConfig)):void 0,Y=j.runtimeOptions&&typeof j.runtimeOptions==="object"?j.runtimeOptions:{};if(typeof f?.mode==="string")X.mode=f.mode;else if(typeof Y.mode==="string")X.mode=Y.mode;if(typeof f?.systemPrompt==="string")X.systemPrompt=f.systemPrompt;else if(typeof Y.systemPrompt==="string")X.systemPrompt=Y.systemPrompt;if(f?.checkpoint?.enabled===!0)X.checkpointEnabled=!0;else if(Y.checkpointEnabled===!0)X.checkpointEnabled=!0;let V=j.modelSelection&&typeof j.modelSelection==="object"?j.modelSelection:{},H=typeof j.workspaceRoot==="string"&&j.workspaceRoot.trim()?j.workspaceRoot.trim():typeof j.cwd==="string"&&j.cwd.trim()?j.cwd.trim():"";if(!H)return c("warn","session.create.invalid",{...W,reason:"missing_workspace_root"}),v(J,"invalid_session_create","session.create requires workspaceRoot or cwd");let B=J.clientId?.trim()||"hub-client",A=N3(Y.clientContributions);if(c("info","session.create.contributions_parsed",{...W,clientId:B,workspaceRoot:H,cwd:typeof j.cwd==="string"?j.cwd:void 0,contributionCount:A.length}),A.length>0)qK(X,B);let G=(typeof f?.sessionId==="string"?f.sessionId.trim():"")||OK(),R=TK(Y.configExtensions);c("info","session.create.runtime_build.begin",{...W,sessionId:G,configExtensionCount:R?.length??0});let D=w3({sessionId:G,targetClientId:B,contributions:A,sessionConfig:f,requestCapability:$.requestCapability});c("info","session.create.start_session.begin",{...W,sessionId:G,provider:f?.providerId??(typeof V.provider==="string"?V.provider:typeof X.provider==="string"?X.provider:"hub"),model:f?.modelId??(typeof V.model==="string"?V.model:typeof X.model==="string"?X.model:"hub")});let U=await $.sessionHost.startSession({source:typeof X.source==="string"?X.source:void 0,interactive:X.interactive!==!1,sessionMetadata:Object.keys(X).length>0?X:void 0,initialMessages:Array.isArray(j.initialMessages)?j.initialMessages:void 0,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:R,...D.localRuntime},capabilities:{toolExecutors:D.toolExecutors,requestToolApproval:Q},config:{...f??{},sessionId:G,providerId:f?.providerId??(typeof V.provider==="string"?V.provider:typeof X.provider==="string"?X.provider:"hub"),modelId:f?.modelId??(typeof V.model==="string"?V.model:typeof X.model==="string"?X.model:"hub"),apiKey:f?.apiKey??(typeof V.apiKey==="string"?V.apiKey:void 0),cwd:f?.cwd??(typeof j.cwd==="string"&&j.cwd.trim()?j.cwd.trim():H),workspaceRoot:f?.workspaceRoot??H,systemPrompt:f?.systemPrompt??(typeof Y.systemPrompt==="string"?Y.systemPrompt:""),mode:f?.mode??(Y.mode==="plan"||Y.mode==="yolo"?Y.mode:"act"),maxIterations:f?.maxIterations??(typeof Y.maxIterations==="number"?Y.maxIterations:void 0),enableTools:f?.enableTools??Y.enableTools!==!1,enableSpawnAgent:f?.enableSpawnAgent??Y.enableSpawn!==!1,enableAgentTeams:f?.enableAgentTeams??Y.enableTeams!==!1,checkpoint:f?.checkpoint??(Y.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:f?.teamName??(typeof X.teamName==="string"?X.teamName:void 0)},toolPolicies:j.toolPolicies&&typeof j.toolPolicies==="object"&&!Array.isArray(j.toolPolicies)?JSON.parse(JSON.stringify(j.toolPolicies)):Y.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0});c("info","session.create.start_session.end",{...W,sessionId:U.sessionId,elapsedMs:Math.round(performance.now()-Z),hasImmediateResult:!!U.result}),LQ($,U.sessionId,B,"creator",{interactive:X.interactive!==!1}),c("info","session.create.read_records.begin",{...W,sessionId:U.sessionId});let[F,O]=await Promise.all([s0($,U.sessionId),o0($,U.sessionId)]);if(c("info","session.create.read_records.end",{...W,sessionId:U.sessionId,hasSession:!!F,hasSnapshot:!!O,elapsedMs:Math.round(performance.now()-Z)}),F)$.publish($.buildEvent("session.created",{session:F,...O?{snapshot:O}:{}},U.sessionId));return c("info","session.create.reply",{...W,sessionId:U.sessionId,elapsedMs:Math.round(performance.now()-Z)}),l(J,{session:F,...O?{snapshot:O}:{}})}async function NK($,J,Q){let Z=J.payload&&typeof J.payload==="object"?J.payload:{},W=typeof Z.sessionId==="string"?Z.sessionId.trim():J.sessionId?.trim()||"",j=Z.checkpointRunCount;if(!W)return v(J,"invalid_restore","session.restore requires a session id");let X=Z.restore&&typeof Z.restore==="object"?Z.restore:{},f=X.messages!==!1;if(typeof j!=="number")return v(J,"invalid_restore","checkpointRunCount must be a positive integer");try{let Y=Z.sessionConfig&&typeof Z.sessionConfig==="object"?JSON.parse(JSON.stringify(Z.sessionConfig)):void 0;if(f&&!Y)return v(J,"invalid_restore","sessionConfig is required when restore.messages is true");let V=Z.runtimeOptions&&typeof Z.runtimeOptions==="object"?Z.runtimeOptions:{},H=Z.metadata&&typeof Z.metadata==="object"?JSON.parse(JSON.stringify(Z.metadata)):{};if(typeof Y?.mode==="string")H.mode=Y.mode;else if(typeof V.mode==="string")H.mode=V.mode;if(typeof Y?.systemPrompt==="string")H.systemPrompt=Y.systemPrompt;else if(typeof V.systemPrompt==="string")H.systemPrompt=V.systemPrompt;if(Y?.checkpoint?.enabled===!0)H.checkpointEnabled=!0;else if(V.checkpointEnabled===!0)H.checkpointEnabled=!0;let B=Z.modelSelection&&typeof Z.modelSelection==="object"?Z.modelSelection:{},A=J.clientId?.trim()||"hub-client",K=N3(V.clientContributions);if(K.length>0)qK(H,A);let R=(typeof Y?.sessionId==="string"?Y.sessionId.trim():"")||OK(),D=TK(V.configExtensions),U=w3({sessionId:R,targetClientId:A,contributions:K,sessionConfig:Y,requestCapability:$.requestCapability}),O=await new y$().restoreCheckpoint({sessionId:W,checkpointRunCount:j,restore:{messages:X.messages,workspace:X.workspace,omitCheckpointMessageFromSession:X.omitCheckpointMessageFromSession===!0},start:Y,cwd:typeof Y?.cwd==="string"&&Y.cwd.trim()||typeof Y?.workspaceRoot==="string"&&Y.workspaceRoot.trim()||void 0,getSession:(P)=>$.sessionHost.getSession(P),readMessages:(P)=>$.sessionHost.readSessionMessages(P),buildStartInput:(P)=>{if(P.restoredCheckpointMetadata)H.checkpoint=P.restoredCheckpointMetadata;let S=typeof Z.workspaceRoot==="string"&&Z.workspaceRoot.trim()?Z.workspaceRoot.trim():typeof Z.cwd==="string"&&Z.cwd.trim()?Z.cwd.trim():P.sourceSession.workspaceRoot||P.sourceSession.cwd;return{source:typeof H.source==="string"?H.source:void 0,interactive:H.interactive!==!1,sessionMetadata:{...H,restoredFromSessionId:W,restoredCheckpointRunCount:j},initialMessages:P.initialMessages,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:D,...U.localRuntime},capabilities:{toolExecutors:U.toolExecutors,requestToolApproval:Q},config:{...Y??{},sessionId:R,providerId:Y?.providerId??(typeof B.provider==="string"?B.provider:P.sourceSession.provider),modelId:Y?.modelId??(typeof B.model==="string"?B.model:P.sourceSession.model),apiKey:Y?.apiKey??(typeof B.apiKey==="string"?B.apiKey:""),cwd:Y?.cwd??P.plan.cwd,workspaceRoot:Y?.workspaceRoot??S,systemPrompt:Y?.systemPrompt??(typeof V.systemPrompt==="string"?V.systemPrompt:""),mode:Y?.mode??(V.mode==="plan"||V.mode==="yolo"?V.mode:"act"),maxIterations:Y?.maxIterations??(typeof V.maxIterations==="number"?V.maxIterations:void 0),enableTools:Y?.enableTools??V.enableTools!==!1,enableSpawnAgent:Y?.enableSpawnAgent??V.enableSpawn!==!1,enableAgentTeams:Y?.enableAgentTeams??V.enableTeams!==!1,checkpoint:Y?.checkpoint??(V.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:Y?.teamName??(typeof H.teamName==="string"?H.teamName:void 0)},toolPolicies:Z.toolPolicies&&typeof Z.toolPolicies==="object"&&!Array.isArray(Z.toolPolicies)?JSON.parse(JSON.stringify(Z.toolPolicies)):V.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0}},startSession:(P)=>$.sessionHost.startSession(P),getStartedSessionId:(P)=>P.sessionId,readRestoredSession:(P)=>$.sessionHost.getSession(P)});if(!f)return l(J,{checkpoint:O.checkpoint});let T=O.startResult;if(!T)return v(J,"restore_failed","Checkpoint restore did not start a session");LQ($,T.sessionId,A,"creator",{interactive:H.interactive!==!1});let[z,L]=await Promise.all([s0($,T.sessionId),o0($,T.sessionId)]);if(z)$.publish($.buildEvent("session.created",{session:z,...L?{snapshot:L}:{}},T.sessionId));return l(J,{session:z,...L?{snapshot:L}:{},messages:O.messages??[],checkpoint:O.checkpoint})}catch(Y){if(Y instanceof k0)return v(J,Y.code,Y.code==="session_not_found"?`Unknown session: ${W}`:Y.message);return v(J,"restore_failed",Y instanceof Error?Y.message:String(Y))}}async function wK($,J){let Q=h0(J);if(!Q)return v(J,"invalid_session_attach","session.attach requires a session id");LQ($,Q,J.clientId?.trim()||"hub-client","participant");let Z=await s0($,Q);if(Z)$.publish($.buildEvent("session.attached",{session:Z},Q));return Z?l(J,{session:Z}):v(J,"session_not_found",`Unknown session: ${Q}`)}async function SK($,J){let Q=h0(J);if(!Q)return v(J,"invalid_session_detach","session.detach requires a session id");let Z=J.clientId?.trim()||"hub-client",[W]=await Promise.all([s0($,Q)]),j=pS(W?.metadata)??Z,X=$.sessionState.get(Q);if(X){if(X.participants.delete(Z),X.createdByClientId===Z)X.createdByClientId=j;if(X.participants.size===0)$.sessionState.delete(Q)}C$($,(V)=>V.sessionId===Q&&V.targetClientId===Z,`Capability owner client ${Z} detached before request was resolved.`);let[f,Y]=await Promise.all([s0($,Q),o0($,Q)]);return $.publish($.buildEvent("session.detached",f?{session:f,...Y?{snapshot:Y}:{},clientId:Z}:{clientId:Z},Q)),l(J)}async function CK($,J){let Q=h0(J),Z=J.payload?.includeSnapshot===!0,[W,j]=await Promise.all([s0($,Q),Z?o0($,Q):Promise.resolve(void 0)]);return W?l(J,{session:W,...j?{snapshot:j}:{}}):v(J,"session_not_found",`Unknown session: ${Q}`)}async function yK($,J){let Q=h0(J);if(!Q)return v(J,"invalid_session_id","session.messages requires a session id");if(!await s0($,Q))return v(J,"session_not_found",`Unknown session: ${Q}`);let W=await $.sessionHost.readSessionMessages(Q);return l(J,{sessionId:Q,messages:W})}async function EK($,J){let Q=typeof J.payload?.limit==="number"?J.payload.limit:200,W=(await $.sessionHost.listSessions(Q)).map((j)=>UQ(j,$.sessionState.get(j.sessionId)));return l(J,{sessions:W})}async function bK($,J){let Q=h0(J),Z=RQ(J.payload?.metadata),W=await $.sessionHost.updateSession(Q,{metadata:Z}),[j,X]=await Promise.all([s0($,Q),o0($,Q)]);if(j)$.publish($.buildEvent("session.updated",{session:j,...X?{snapshot:X}:{}},Q));return{version:J.version,requestId:J.requestId,ok:W.updated,payload:{updated:W.updated,session:j,...X?{snapshot:X}:{}}}}async function hK($,J){let Q=h0(J),Z=await $.sessionHost.deleteSession(Q);return $.sessionState.delete(Q),l(J,{deleted:Z})}async function kK($,J){let Q=h0(J),Z=$.sessionHost.pendingPrompts;if(!Z)return v(J,"pending_prompts_unavailable","Pending prompt service is not available.");let W=await Z.list({sessionId:Q});return l(J,{sessionId:Q,prompts:W})}async function IK($,J){let Q=h0(J),Z=typeof J.payload?.promptId==="string"?J.payload.promptId.trim():"",W=typeof J.payload?.prompt==="string"?J.payload.prompt:void 0,j=J.payload?.delivery==="queue"||J.payload?.delivery==="steer"?J.payload.delivery:void 0,X=$.sessionHost.pendingPrompts;if(!X)return v(J,"pending_prompts_unavailable","Pending prompt service is not available.");let f=await X.update({sessionId:Q,promptId:Z,prompt:W,delivery:j});return l(J,f)}async function xK($,J){let Q=h0(J),Z=typeof J.payload?.promptId==="string"?J.payload.promptId.trim():"",W=$.sessionHost.pendingPrompts;if(!W)return v(J,"pending_prompts_unavailable","Pending prompt service is not available.");let j=await W.delete({sessionId:Q,promptId:Z});return l(J,j)}function gK($){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 iS=new Set(["skills","workflows","rules","tools","mcp"]);function S3($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function MJ($,J){let Q=$[J];if(Q===void 0)return;if(typeof Q!=="string")throw Error(`settings payload '${J}' must be a string.`);return Q}function nS($,J){let Q=$[J];if(Q===void 0)return;if(typeof Q!=="boolean")throw Error(`settings payload '${J}' must be a boolean.`);return Q}function mK($){if($===void 0)return{};if(!S3($))throw Error("settings.list payload must be an object.");return{cwd:MJ($,"cwd"),workspaceRoot:MJ($,"workspaceRoot"),availabilityContext:S3($.availabilityContext)?$.availabilityContext:void 0}}function aS($){if(!S3($))throw Error("settings.toggle payload must be an object.");let{type:J}=$;if(typeof J!=="string"||!iS.has(J))throw Error("settings.toggle payload 'type' must be one of: skills, workflows, rules, tools, mcp.");return{...mK($),type:J,id:MJ($,"id"),path:MJ($,"path"),name:MJ($,"name"),enabled:nS($,"enabled")}}class Q4{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=rS("hub_");ctx;constructor($){this.options=$;if(this.sessionHost=$.sessionHost??new z1({sessionService:new L1(new U1),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:(J)=>this.publish(J),buildEvent:w2,requestCapability:(J,Q,Z,W,j)=>WK(this.ctx,J,Q,Z,W,j)},this.schedules=new o8({...$.scheduleOptions,runtimeHandlers:$.runtimeHandlers,eventPublisher:(J,Q)=>{let Z=J==="schedule.execution.completed"?"schedule.execution_completed":J==="schedule.execution.failed"?"schedule.execution_failed":void 0;if(!Z)return;this.publish(w2(Z,Q&&typeof Q==="object"?Q:void 0))}}),this.scheduleCommands=new s8(this.schedules),this.settings=$.settingsService??new O$,$.cronOptions)this.cronService=new $J({runtimeHandlers:$.runtimeHandlers,...$.cronOptions});this.sessionHost.subscribe((J)=>{FK(this.ctx,J).catch((Q)=>{_3("session event handling failed",Q),zQ(this.options.telemetry,{component:"core",operation:"hub.session_event_project",error:Q,severity:"error",handled:!0,context:{eventType:J.type,sessionId:J.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())L3(this.ctx,$,{approved:!1,reason:"Hub shutting down before approval was resolved."});if(C$(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 J=await this.dispatchCommand($);return this.captureFailedReply($,J),J}catch(J){throw zQ(this.options.telemetry,{component:"core",operation:"hub.command",error:J,severity:"error",handled:!1,context:this.commandTelemetryContext($)}),J}}async dispatchCommand($){switch($.command){case"client.register":return YK(this.ctx,$);case"client.update":return VK(this.ctx,$);case"client.unregister":return HK(this.ctx,$,(J)=>{this.listeners.delete(J),this.detachClientFromSessions(J)});case"client.list":return BK(this.ctx,$);case"session.create":return await PK(this.ctx,$,(J)=>R3(this.ctx,J));case"session.restore":return await NK(this.ctx,$,(J)=>R3(this.ctx,J));case"session.attach":return await wK(this.ctx,$);case"session.detach":return await SK(this.ctx,$);case"session.get":return await CK(this.ctx,$);case"session.messages":return await yK(this.ctx,$);case"session.list":return await EK(this.ctx,$);case"session.update":return await bK(this.ctx,$);case"session.pending_prompts":return await kK(this.ctx,$);case"session.update_pending_prompt":return await IK(this.ctx,$);case"session.remove_pending_prompt":return await xK(this.ctx,$);case"session.delete":return await hK(this.ctx,$);case"session.hook":return await GK(this.ctx,$);case"run.start":case"session.send_input":return await AK(this.ctx,$);case"run.abort":return await KK(this.ctx,$);case"capability.request":return await XK(this.ctx,$);case"approval.respond":return await QK(this.ctx,$);case"capability.respond":return fK(this.ctx,$);case"capability.progress":return jK(this.ctx,$);case"ui.notify":return this.publish(w2("ui.notify",$.payload??{})),l($);case"ui.show_window":return this.publish(w2("ui.show_window",$.payload??{})),l($);case"settings.list":return await this.handleSettingsList($);case"settings.toggle":return await this.handleSettingsToggle($);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 J=await this.scheduleCommands.handleCommand($);if(J.ok){let Q=gK($.command);if(Q)this.publish(w2(Q,J.payload))}return J}}}captureFailedReply($,J){if(J.ok||!J.error||!sS(J.error.code))return;zQ(this.options.telemetry,{component:"core",operation:"hub.command_reply",error:Error(J.error.message),severity:J.error.code==="session_not_found"?"warn":"error",handled:!0,context:{...this.commandTelemetryContext($),errorCode:J.error.code}})}commandTelemetryContext($){return{command:$.command,requestId:$.requestId,clientId:$.clientId,sessionId:typeof $.payload?.sessionId==="string"?$.payload.sessionId:$.sessionId}}async handleSettingsList($){try{let J=await this.settings.list(mK($.payload));return{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:J}}}catch(J){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_list_failed",message:J instanceof Error?J.message:String(J)}}}}async handleSettingsToggle($){try{let J=await this.settings.toggle(aS($.payload));return this.publish(w2("settings.changed",{types:J.changedTypes,snapshot:J.snapshot})),{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:J.snapshot,changedTypes:J.changedTypes}}}catch(J){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_toggle_failed",message:J instanceof Error?J.message:String(J)}}}}subscribe($,J,Q){let Z=this.listeners.get($)??new Set,W={sessionId:Q?.sessionId,listener:J};return Z.add(W),this.listeners.set($,Z),()=>{let j=this.listeners.get($);if(!j)return;if(j.delete(W),j.size===0)this.listeners.delete($)}}detachClientFromSessions($){for(let[J,Q]of this.sessionState.entries())if(Q.participants.delete($),Q.participants.size===0)this.sessionState.delete(J);C$(this.ctx,(J)=>J.targetClientId===$,`Capability owner client ${$} disconnected before request was resolved.`)}publish($){for(let J of this.listeners.values())for(let Q of J){if(Q.sessionId&&Q.sessionId!==$.sessionId)continue;try{Q.listener($)}catch(Z){_3(`listener threw while publishing ${$.event}`,Z),zQ(this.options.telemetry,{component:"core",operation:"hub.publish",error:Z,severity:"warn",handled:!0,context:{event:$.event,sessionId:$.sessionId}})}}}}function sS($){return $==="session_not_found"||$==="session_messages_not_found"||$==="hub_command_timeout"||$.endsWith("_failed")}import{timingSafeEqual as $C}from"node:crypto";import JC from"node:http";import QC from"node:net";import{URL as uK}from"node:url";import{CURRENT_HUB_PROTOCOL_VERSION as dK,HUB_CAPABILITIES as ZC,isHubProtocolCompatible as WC,MAX_CLIENT_HUB_PROTOCOL_VERSION as lK,MIN_CLIENT_HUB_PROTOCOL_VERSION as pK}from"@cline/shared";import{WebSocketServer as jC}from"ws";import{captureSdkError as vK,HUB_COMMAND_SLOW_LOG_MS as oS,resolveHubCommandTimeoutMs as tS,safeJsonParse as eS}from"@cline/shared";function C3($){return{command:$.envelope.command,requestId:$.envelope.requestId,clientId:$.envelope.clientId,sessionId:$.envelope.sessionId}}function cK($,J,Q){return{version:$.envelope.version,requestId:$.envelope.requestId,ok:!1,error:{code:J,message:Q}}}class qJ{transport;telemetry;constructor($,J){this.transport=$;this.telemetry=J}attach($){let J=new Map,Q=new Set,Z=!1,W=(Y)=>{try{$.send(JSON.stringify(Y))}catch(V){console.error(`[hub] failed to send websocket frame: ${V instanceof Error?V.stack||V.message:String(V)}`)}},j=(Y)=>{W({kind:"event",envelope:Y})},X=async(Y)=>{try{let V=JSON.parse(Y.data);switch(V.kind){case"command":{let H=performance.now(),B=!1,A=C3(V);c("info","command.start",A);let K=setTimeout(()=>{if(B)return;c("warn","command.slow",{...A,elapsedMs:Math.round(performance.now()-H)})},oS),G=this.transport.command(V.envelope);G.then((T)=>{if(!B)return;c(T.ok?"warn":"error","command.late_end",{...A,elapsedMs:Math.round(performance.now()-H),ok:T.ok,errorCode:T.error?.code,errorMessage:T.error?.message})},(T)=>{if(!B)return;c("error","command.late_error",{...A,elapsedMs:Math.round(performance.now()-H),error:T})});let R=!1,D,U,F=tS(V.envelope.command,V.envelope.timeoutMs);try{U=F===null?await G:await Promise.race([G,new Promise((T)=>{D=setTimeout(()=>{R=!0,vK(this.telemetry,{component:"core",operation:"hub.command_timeout",error:Error(`Hub command ${V.envelope.command} did not complete within ${F}ms.`),severity:"error",handled:!0,context:{...A,timeoutMs:F}}),T(cK(V,"hub_command_timeout",`Hub command ${V.envelope.command} did not complete within ${F}ms. Check hub-daemon.log for command.start/command.slow logs with requestId ${V.envelope.requestId}.`))},F)})])}catch(T){if(clearTimeout(K),D)clearTimeout(D);throw T}if(B=R,clearTimeout(K),D)clearTimeout(D);let O=Math.round(performance.now()-H);if(R)c("error","command.timeout",{...A,durationMs:O,timeoutMs:F});else c(U.ok?"info":"warn","command.end",{...A,durationMs:O,ok:U.ok,errorCode:U.error?.code,errorMessage:U.error?.message});if(V.envelope.command==="client.register"&&U.ok){let z=(V.envelope.payload??{}).clientId?.trim()||V.envelope.clientId?.trim();if(z)Q.add(z)}else if(V.envelope.command==="client.unregister"&&U.ok){let T=V.envelope.clientId?.trim();if(T)Q.delete(T)}W({kind:"reply",envelope:U});break}case"stream.subscribe":{let H=`${V.clientId}:${V.sessionId??"*"}`;if(J.has(H))break;let B=await this.transport.subscribe(V.clientId,j,{sessionId:V.sessionId});J.set(H,B);break}case"stream.unsubscribe":{let H=`${V.clientId}:${V.sessionId??"*"}`;J.get(H)?.(),J.delete(H);break}case"reply":case"event":break}}catch(V){let H=typeof Y.data==="string"?eS(Y.data):void 0;if(!H||H.kind!=="command"){c("error","rejected malformed websocket frame",{error:V});return}c("error","command.error",{...C3(H),error:V}),vK(this.telemetry,{component:"core",operation:"hub.websocket_command",error:V,severity:"error",handled:!0,context:C3(H)}),W({kind:"reply",envelope:cK(H,"command_failed",V instanceof Error?V.message:"Unknown hub error")})}},f=()=>{if(Z)return;Z=!0;for(let Y of J.values())Y();J.clear();for(let Y of Q)this.transport.command({version:"v1",command:"client.unregister",clientId:Y});Q.clear(),$.removeEventListener("message",X),$.removeEventListener("close",f)};return $.addEventListener("message",X),$.addEventListener("close",f),f}}class PJ{transport;constructor($){this.transport=$}command($){return this.transport.handleCommand($)}subscribe($,J,Q){return this.transport.subscribe($,J,Q)}}function XC($){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((J)=>Buffer.from(J))).toString();return String($)}function fC($){return{send(J){$.send(J)},addEventListener(J,Q){if(J==="message"){$.on("message",(Z)=>{Q({data:XC(Z)})});return}$.on("close",Q)},removeEventListener(){}}}function YC($){try{$.write(`HTTP/1.1 400 Bad Request\r
|
|
590
|
+
${H}`:Y.instructions}})}})}}function uS($,J,Q,Z){let W=Q.map((j)=>[j.executor,async(...X)=>{let f=X.at(-1),Y=X.slice(0,-1);return(await Z($,j.capabilityName,{executor:j.executor,args:Y,context:_K(f)},J))?.result}]);return W.length>0?Object.fromEntries(W):void 0}function dS($,J,Q,Z){if(Q.length===0)return;return Q.map((W)=>({name:W.name,description:W.description,inputSchema:W.inputSchema,lifecycle:W.lifecycle,async execute(j,X){return(await Z($,W.capabilityName,{toolName:W.name,input:j,context:_K(X)},J,X.emitUpdate?(Y)=>{X.emitUpdate?.(gS(Y))}:void 0))?.result}}))}function lS($,J,Q,Z){let W=new Map(Q.map((X)=>[X.name,X])),j={};for(let X of IS){let f=W.get(X);if(!f)continue;j[X]=async(Y)=>{return(await Z($,f.capabilityName,{context:Y},J))?.control}}return Object.keys(j).length>0?j:void 0}function w3($){let J=$.contributions.filter((Y)=>Y.kind==="toolExecutor"),Q=$.contributions.filter((Y)=>Y.kind==="tool"),Z=$.contributions.filter((Y)=>Y.kind==="hook"),W=$.contributions.find((Y)=>Y.kind==="compaction"),j=$.contributions.find((Y)=>Y.kind==="checkpoint"),X=$.contributions.find((Y)=>Y.kind==="mistakeLimit"),f=$.contributions.find((Y)=>Y.kind==="userInstructionService");return{hasClientContributions:$.contributions.length>0,toolExecutors:uS($.sessionId,$.targetClientId,J,$.requestCapability),localRuntime:{...Z.length>0?{hooks:lS($.sessionId,$.targetClientId,Z,$.requestCapability)}:{},...Q.length>0?{extraTools:dS($.sessionId,$.targetClientId,Q,$.requestCapability)}:{},...W?{compaction:{...$.sessionConfig?.compaction??{},...W.config,compact:async(Y)=>{return(await $.requestCapability($.sessionId,W.capabilityName,{context:Y},$.targetClientId))?.result}}}:{},...j?{checkpoint:{...$.sessionConfig?.checkpoint??{},...j.config,createCheckpoint:async(Y)=>{return(await $.requestCapability($.sessionId,j.capabilityName,{context:Y},$.targetClientId))?.result}}}:{},...X?{onConsecutiveMistakeLimitReached:async(Y)=>{return(await $.requestCapability($.sessionId,X.capabilityName,{context:Y},$.targetClientId))?.result}}:{},...f?{userInstructionService:cS($.sessionId,$.targetClientId,f,$.requestCapability)}:{}}}}var MK="hubCapabilityOwnerClientId";function qK($,J){$[MK]=J}function pS($){let J=$?.[MK];return typeof J==="string"&&J.trim()?J.trim():void 0}async function PK($,J,Q){let Z=performance.now(),W={command:J.command,requestId:J.requestId,clientId:J.clientId,sessionId:J.sessionId};c("info","session.create.begin",W);let j=J.payload&&typeof J.payload==="object"?J.payload:{},X=j.metadata&&typeof j.metadata==="object"?JSON.parse(JSON.stringify(j.metadata)):{},f=j.sessionConfig&&typeof j.sessionConfig==="object"?JSON.parse(JSON.stringify(j.sessionConfig)):void 0,Y=j.runtimeOptions&&typeof j.runtimeOptions==="object"?j.runtimeOptions:{};if(typeof f?.mode==="string")X.mode=f.mode;else if(typeof Y.mode==="string")X.mode=Y.mode;if(typeof f?.systemPrompt==="string")X.systemPrompt=f.systemPrompt;else if(typeof Y.systemPrompt==="string")X.systemPrompt=Y.systemPrompt;if(f?.checkpoint?.enabled===!0)X.checkpointEnabled=!0;else if(Y.checkpointEnabled===!0)X.checkpointEnabled=!0;let V=j.modelSelection&&typeof j.modelSelection==="object"?j.modelSelection:{},H=typeof j.workspaceRoot==="string"&&j.workspaceRoot.trim()?j.workspaceRoot.trim():typeof j.cwd==="string"&&j.cwd.trim()?j.cwd.trim():"";if(!H)return c("warn","session.create.invalid",{...W,reason:"missing_workspace_root"}),v(J,"invalid_session_create","session.create requires workspaceRoot or cwd");let B=J.clientId?.trim()||"hub-client",A=N3(Y.clientContributions);if(c("info","session.create.contributions_parsed",{...W,clientId:B,workspaceRoot:H,cwd:typeof j.cwd==="string"?j.cwd:void 0,contributionCount:A.length}),A.length>0)qK(X,B);let G=(typeof f?.sessionId==="string"?f.sessionId.trim():"")||OK(),R=TK(Y.configExtensions);c("info","session.create.runtime_build.begin",{...W,sessionId:G,configExtensionCount:R?.length??0});let D=w3({sessionId:G,targetClientId:B,contributions:A,sessionConfig:f,requestCapability:$.requestCapability});c("info","session.create.start_session.begin",{...W,sessionId:G,provider:f?.providerId??(typeof V.provider==="string"?V.provider:typeof X.provider==="string"?X.provider:"hub"),model:f?.modelId??(typeof V.model==="string"?V.model:typeof X.model==="string"?X.model:"hub")});let U=await $.sessionHost.startSession({source:typeof X.source==="string"?X.source:void 0,interactive:X.interactive!==!1,sessionMetadata:Object.keys(X).length>0?X:void 0,initialMessages:Array.isArray(j.initialMessages)?j.initialMessages:void 0,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:R,...D.localRuntime},capabilities:{toolExecutors:D.toolExecutors,requestToolApproval:Q},config:{...f??{},sessionId:G,providerId:f?.providerId??(typeof V.provider==="string"?V.provider:typeof X.provider==="string"?X.provider:"hub"),modelId:f?.modelId??(typeof V.model==="string"?V.model:typeof X.model==="string"?X.model:"hub"),apiKey:f?.apiKey??(typeof V.apiKey==="string"?V.apiKey:void 0),cwd:f?.cwd??(typeof j.cwd==="string"&&j.cwd.trim()?j.cwd.trim():H),workspaceRoot:f?.workspaceRoot??H,systemPrompt:f?.systemPrompt??(typeof Y.systemPrompt==="string"?Y.systemPrompt:""),mode:f?.mode??(Y.mode==="plan"||Y.mode==="yolo"?Y.mode:"act"),maxIterations:f?.maxIterations??(typeof Y.maxIterations==="number"?Y.maxIterations:void 0),enableTools:f?.enableTools??Y.enableTools!==!1,enableSpawnAgent:f?.enableSpawnAgent??Y.enableSpawn!==!1,enableAgentTeams:f?.enableAgentTeams??Y.enableTeams!==!1,checkpoint:f?.checkpoint??(Y.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:f?.teamName??(typeof X.teamName==="string"?X.teamName:void 0)},toolPolicies:j.toolPolicies&&typeof j.toolPolicies==="object"&&!Array.isArray(j.toolPolicies)?JSON.parse(JSON.stringify(j.toolPolicies)):Y.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0});c("info","session.create.start_session.end",{...W,sessionId:U.sessionId,elapsedMs:Math.round(performance.now()-Z),hasImmediateResult:!!U.result}),L9($,U.sessionId,B,"creator",{interactive:X.interactive!==!1}),c("info","session.create.read_records.begin",{...W,sessionId:U.sessionId});let[F,O]=await Promise.all([s0($,U.sessionId),o0($,U.sessionId)]);if(c("info","session.create.read_records.end",{...W,sessionId:U.sessionId,hasSession:!!F,hasSnapshot:!!O,elapsedMs:Math.round(performance.now()-Z)}),F)$.publish($.buildEvent("session.created",{session:F,...O?{snapshot:O}:{}},U.sessionId));return c("info","session.create.reply",{...W,sessionId:U.sessionId,elapsedMs:Math.round(performance.now()-Z)}),l(J,{session:F,...O?{snapshot:O}:{}})}async function NK($,J,Q){let Z=J.payload&&typeof J.payload==="object"?J.payload:{},W=typeof Z.sessionId==="string"?Z.sessionId.trim():J.sessionId?.trim()||"",j=Z.checkpointRunCount;if(!W)return v(J,"invalid_restore","session.restore requires a session id");let X=Z.restore&&typeof Z.restore==="object"?Z.restore:{},f=X.messages!==!1;if(typeof j!=="number")return v(J,"invalid_restore","checkpointRunCount must be a positive integer");try{let Y=Z.sessionConfig&&typeof Z.sessionConfig==="object"?JSON.parse(JSON.stringify(Z.sessionConfig)):void 0;if(f&&!Y)return v(J,"invalid_restore","sessionConfig is required when restore.messages is true");let V=Z.runtimeOptions&&typeof Z.runtimeOptions==="object"?Z.runtimeOptions:{},H=Z.metadata&&typeof Z.metadata==="object"?JSON.parse(JSON.stringify(Z.metadata)):{};if(typeof Y?.mode==="string")H.mode=Y.mode;else if(typeof V.mode==="string")H.mode=V.mode;if(typeof Y?.systemPrompt==="string")H.systemPrompt=Y.systemPrompt;else if(typeof V.systemPrompt==="string")H.systemPrompt=V.systemPrompt;if(Y?.checkpoint?.enabled===!0)H.checkpointEnabled=!0;else if(V.checkpointEnabled===!0)H.checkpointEnabled=!0;let B=Z.modelSelection&&typeof Z.modelSelection==="object"?Z.modelSelection:{},A=J.clientId?.trim()||"hub-client",K=N3(V.clientContributions);if(K.length>0)qK(H,A);let R=(typeof Y?.sessionId==="string"?Y.sessionId.trim():"")||OK(),D=TK(V.configExtensions),U=w3({sessionId:R,targetClientId:A,contributions:K,sessionConfig:Y,requestCapability:$.requestCapability}),O=await new y$().restoreCheckpoint({sessionId:W,checkpointRunCount:j,restore:{messages:X.messages,workspace:X.workspace,omitCheckpointMessageFromSession:X.omitCheckpointMessageFromSession===!0},start:Y,cwd:typeof Y?.cwd==="string"&&Y.cwd.trim()||typeof Y?.workspaceRoot==="string"&&Y.workspaceRoot.trim()||void 0,getSession:(P)=>$.sessionHost.getSession(P),readMessages:(P)=>$.sessionHost.readSessionMessages(P),buildStartInput:(P)=>{if(P.restoredCheckpointMetadata)H.checkpoint=P.restoredCheckpointMetadata;let S=typeof Z.workspaceRoot==="string"&&Z.workspaceRoot.trim()?Z.workspaceRoot.trim():typeof Z.cwd==="string"&&Z.cwd.trim()?Z.cwd.trim():P.sourceSession.workspaceRoot||P.sourceSession.cwd;return{source:typeof H.source==="string"?H.source:void 0,interactive:H.interactive!==!1,sessionMetadata:{...H,restoredFromSessionId:W,restoredCheckpointRunCount:j},initialMessages:P.initialMessages,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:D,...U.localRuntime},capabilities:{toolExecutors:U.toolExecutors,requestToolApproval:Q},config:{...Y??{},sessionId:R,providerId:Y?.providerId??(typeof B.provider==="string"?B.provider:P.sourceSession.provider),modelId:Y?.modelId??(typeof B.model==="string"?B.model:P.sourceSession.model),apiKey:Y?.apiKey??(typeof B.apiKey==="string"?B.apiKey:""),cwd:Y?.cwd??P.plan.cwd,workspaceRoot:Y?.workspaceRoot??S,systemPrompt:Y?.systemPrompt??(typeof V.systemPrompt==="string"?V.systemPrompt:""),mode:Y?.mode??(V.mode==="plan"||V.mode==="yolo"?V.mode:"act"),maxIterations:Y?.maxIterations??(typeof V.maxIterations==="number"?V.maxIterations:void 0),enableTools:Y?.enableTools??V.enableTools!==!1,enableSpawnAgent:Y?.enableSpawnAgent??V.enableSpawn!==!1,enableAgentTeams:Y?.enableAgentTeams??V.enableTeams!==!1,checkpoint:Y?.checkpoint??(V.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:Y?.teamName??(typeof H.teamName==="string"?H.teamName:void 0)},toolPolicies:Z.toolPolicies&&typeof Z.toolPolicies==="object"&&!Array.isArray(Z.toolPolicies)?JSON.parse(JSON.stringify(Z.toolPolicies)):V.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0}},startSession:(P)=>$.sessionHost.startSession(P),getStartedSessionId:(P)=>P.sessionId,readRestoredSession:(P)=>$.sessionHost.getSession(P)});if(!f)return l(J,{checkpoint:O.checkpoint});let T=O.startResult;if(!T)return v(J,"restore_failed","Checkpoint restore did not start a session");L9($,T.sessionId,A,"creator",{interactive:H.interactive!==!1});let[z,L]=await Promise.all([s0($,T.sessionId),o0($,T.sessionId)]);if(z)$.publish($.buildEvent("session.created",{session:z,...L?{snapshot:L}:{}},T.sessionId));return l(J,{session:z,...L?{snapshot:L}:{},messages:O.messages??[],checkpoint:O.checkpoint})}catch(Y){if(Y instanceof k0)return v(J,Y.code,Y.code==="session_not_found"?`Unknown session: ${W}`:Y.message);return v(J,"restore_failed",Y instanceof Error?Y.message:String(Y))}}async function wK($,J){let Q=h0(J);if(!Q)return v(J,"invalid_session_attach","session.attach requires a session id");L9($,Q,J.clientId?.trim()||"hub-client","participant");let Z=await s0($,Q);if(Z)$.publish($.buildEvent("session.attached",{session:Z},Q));return Z?l(J,{session:Z}):v(J,"session_not_found",`Unknown session: ${Q}`)}async function SK($,J){let Q=h0(J);if(!Q)return v(J,"invalid_session_detach","session.detach requires a session id");let Z=J.clientId?.trim()||"hub-client",[W]=await Promise.all([s0($,Q)]),j=pS(W?.metadata)??Z,X=$.sessionState.get(Q);if(X){if(X.participants.delete(Z),X.createdByClientId===Z)X.createdByClientId=j;if(X.participants.size===0)$.sessionState.delete(Q)}C$($,(V)=>V.sessionId===Q&&V.targetClientId===Z,`Capability owner client ${Z} detached before request was resolved.`);let[f,Y]=await Promise.all([s0($,Q),o0($,Q)]);return $.publish($.buildEvent("session.detached",f?{session:f,...Y?{snapshot:Y}:{},clientId:Z}:{clientId:Z},Q)),l(J)}async function CK($,J){let Q=h0(J),Z=J.payload?.includeSnapshot===!0,[W,j]=await Promise.all([s0($,Q),Z?o0($,Q):Promise.resolve(void 0)]);return W?l(J,{session:W,...j?{snapshot:j}:{}}):v(J,"session_not_found",`Unknown session: ${Q}`)}async function yK($,J){let Q=h0(J);if(!Q)return v(J,"invalid_session_id","session.messages requires a session id");if(!await s0($,Q))return v(J,"session_not_found",`Unknown session: ${Q}`);let W=await $.sessionHost.readSessionMessages(Q);return l(J,{sessionId:Q,messages:W})}async function EK($,J){let Q=typeof J.payload?.limit==="number"?J.payload.limit:200,W=(await $.sessionHost.listSessions(Q)).map((j)=>U9(j,$.sessionState.get(j.sessionId)));return l(J,{sessions:W})}async function bK($,J){let Q=h0(J),Z=R9(J.payload?.metadata),W=await $.sessionHost.updateSession(Q,{metadata:Z}),[j,X]=await Promise.all([s0($,Q),o0($,Q)]);if(j)$.publish($.buildEvent("session.updated",{session:j,...X?{snapshot:X}:{}},Q));return{version:J.version,requestId:J.requestId,ok:W.updated,payload:{updated:W.updated,session:j,...X?{snapshot:X}:{}}}}async function hK($,J){let Q=h0(J),Z=await $.sessionHost.deleteSession(Q);return $.sessionState.delete(Q),l(J,{deleted:Z})}async function kK($,J){let Q=h0(J),Z=$.sessionHost.pendingPrompts;if(!Z)return v(J,"pending_prompts_unavailable","Pending prompt service is not available.");let W=await Z.list({sessionId:Q});return l(J,{sessionId:Q,prompts:W})}async function IK($,J){let Q=h0(J),Z=typeof J.payload?.promptId==="string"?J.payload.promptId.trim():"",W=typeof J.payload?.prompt==="string"?J.payload.prompt:void 0,j=J.payload?.delivery==="queue"||J.payload?.delivery==="steer"?J.payload.delivery:void 0,X=$.sessionHost.pendingPrompts;if(!X)return v(J,"pending_prompts_unavailable","Pending prompt service is not available.");let f=await X.update({sessionId:Q,promptId:Z,prompt:W,delivery:j});return l(J,f)}async function xK($,J){let Q=h0(J),Z=typeof J.payload?.promptId==="string"?J.payload.promptId.trim():"",W=$.sessionHost.pendingPrompts;if(!W)return v(J,"pending_prompts_unavailable","Pending prompt service is not available.");let j=await W.delete({sessionId:Q,promptId:Z});return l(J,j)}function gK($){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 iS=new Set(["skills","workflows","rules","tools","mcp"]);function S3($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function MJ($,J){let Q=$[J];if(Q===void 0)return;if(typeof Q!=="string")throw Error(`settings payload '${J}' must be a string.`);return Q}function nS($,J){let Q=$[J];if(Q===void 0)return;if(typeof Q!=="boolean")throw Error(`settings payload '${J}' must be a boolean.`);return Q}function mK($){if($===void 0)return{};if(!S3($))throw Error("settings.list payload must be an object.");return{cwd:MJ($,"cwd"),workspaceRoot:MJ($,"workspaceRoot"),availabilityContext:S3($.availabilityContext)?$.availabilityContext:void 0}}function aS($){if(!S3($))throw Error("settings.toggle payload must be an object.");let{type:J}=$;if(typeof J!=="string"||!iS.has(J))throw Error("settings.toggle payload 'type' must be one of: skills, workflows, rules, tools, mcp.");return{...mK($),type:J,id:MJ($,"id"),path:MJ($,"path"),name:MJ($,"name"),enabled:nS($,"enabled")}}class Q4{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=rS("hub_");ctx;constructor($){this.options=$;if(this.sessionHost=$.sessionHost??new z1({sessionService:new L1(new U1),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:(J)=>this.publish(J),buildEvent:w2,requestCapability:(J,Q,Z,W,j)=>WK(this.ctx,J,Q,Z,W,j)},this.schedules=new o8({...$.scheduleOptions,runtimeHandlers:$.runtimeHandlers,eventPublisher:(J,Q)=>{let Z=J==="schedule.execution.completed"?"schedule.execution_completed":J==="schedule.execution.failed"?"schedule.execution_failed":void 0;if(!Z)return;this.publish(w2(Z,Q&&typeof Q==="object"?Q:void 0))}}),this.scheduleCommands=new s8(this.schedules),this.settings=$.settingsService??new O$,$.cronOptions)this.cronService=new $J({runtimeHandlers:$.runtimeHandlers,...$.cronOptions});this.sessionHost.subscribe((J)=>{FK(this.ctx,J).catch((Q)=>{_3("session event handling failed",Q),z9(this.options.telemetry,{component:"core",operation:"hub.session_event_project",error:Q,severity:"error",handled:!0,context:{eventType:J.type,sessionId:J.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())L3(this.ctx,$,{approved:!1,reason:"Hub shutting down before approval was resolved."});if(C$(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 J=await this.dispatchCommand($);return this.captureFailedReply($,J),J}catch(J){throw z9(this.options.telemetry,{component:"core",operation:"hub.command",error:J,severity:"error",handled:!1,context:this.commandTelemetryContext($)}),J}}async dispatchCommand($){switch($.command){case"client.register":return YK(this.ctx,$);case"client.update":return VK(this.ctx,$);case"client.unregister":return HK(this.ctx,$,(J)=>{this.listeners.delete(J),this.detachClientFromSessions(J)});case"client.list":return BK(this.ctx,$);case"session.create":return await PK(this.ctx,$,(J)=>R3(this.ctx,J));case"session.restore":return await NK(this.ctx,$,(J)=>R3(this.ctx,J));case"session.attach":return await wK(this.ctx,$);case"session.detach":return await SK(this.ctx,$);case"session.get":return await CK(this.ctx,$);case"session.messages":return await yK(this.ctx,$);case"session.list":return await EK(this.ctx,$);case"session.update":return await bK(this.ctx,$);case"session.pending_prompts":return await kK(this.ctx,$);case"session.update_pending_prompt":return await IK(this.ctx,$);case"session.remove_pending_prompt":return await xK(this.ctx,$);case"session.delete":return await hK(this.ctx,$);case"session.hook":return await GK(this.ctx,$);case"run.start":case"session.send_input":return await AK(this.ctx,$);case"run.abort":return await KK(this.ctx,$);case"capability.request":return await XK(this.ctx,$);case"approval.respond":return await QK(this.ctx,$);case"capability.respond":return fK(this.ctx,$);case"capability.progress":return jK(this.ctx,$);case"ui.notify":return this.publish(w2("ui.notify",$.payload??{})),l($);case"ui.show_window":return this.publish(w2("ui.show_window",$.payload??{})),l($);case"settings.list":return await this.handleSettingsList($);case"settings.toggle":return await this.handleSettingsToggle($);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 J=await this.scheduleCommands.handleCommand($);if(J.ok){let Q=gK($.command);if(Q)this.publish(w2(Q,J.payload))}return J}}}captureFailedReply($,J){if(J.ok||!J.error||!sS(J.error.code))return;z9(this.options.telemetry,{component:"core",operation:"hub.command_reply",error:Error(J.error.message),severity:J.error.code==="session_not_found"?"warn":"error",handled:!0,context:{...this.commandTelemetryContext($),errorCode:J.error.code}})}commandTelemetryContext($){return{command:$.command,requestId:$.requestId,clientId:$.clientId,sessionId:typeof $.payload?.sessionId==="string"?$.payload.sessionId:$.sessionId}}async handleSettingsList($){try{let J=await this.settings.list(mK($.payload));return{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:J}}}catch(J){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_list_failed",message:J instanceof Error?J.message:String(J)}}}}async handleSettingsToggle($){try{let J=await this.settings.toggle(aS($.payload));return this.publish(w2("settings.changed",{types:J.changedTypes,snapshot:J.snapshot})),{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:J.snapshot,changedTypes:J.changedTypes}}}catch(J){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_toggle_failed",message:J instanceof Error?J.message:String(J)}}}}subscribe($,J,Q){let Z=this.listeners.get($)??new Set,W={sessionId:Q?.sessionId,listener:J};return Z.add(W),this.listeners.set($,Z),()=>{let j=this.listeners.get($);if(!j)return;if(j.delete(W),j.size===0)this.listeners.delete($)}}detachClientFromSessions($){for(let[J,Q]of this.sessionState.entries())if(Q.participants.delete($),Q.participants.size===0)this.sessionState.delete(J);C$(this.ctx,(J)=>J.targetClientId===$,`Capability owner client ${$} disconnected before request was resolved.`)}publish($){for(let J of this.listeners.values())for(let Q of J){if(Q.sessionId&&Q.sessionId!==$.sessionId)continue;try{Q.listener($)}catch(Z){_3(`listener threw while publishing ${$.event}`,Z),z9(this.options.telemetry,{component:"core",operation:"hub.publish",error:Z,severity:"warn",handled:!0,context:{event:$.event,sessionId:$.sessionId}})}}}}function sS($){return $==="session_not_found"||$==="session_messages_not_found"||$==="hub_command_timeout"||$.endsWith("_failed")}import{timingSafeEqual as $C}from"node:crypto";import JC from"node:http";import QC from"node:net";import{URL as uK}from"node:url";import{CURRENT_HUB_PROTOCOL_VERSION as dK,HUB_CAPABILITIES as ZC,isHubProtocolCompatible as WC,MAX_CLIENT_HUB_PROTOCOL_VERSION as lK,MIN_CLIENT_HUB_PROTOCOL_VERSION as pK}from"@cline/shared";import{WebSocketServer as jC}from"ws";import{captureSdkError as vK,HUB_COMMAND_SLOW_LOG_MS as oS,resolveHubCommandTimeoutMs as tS,safeJsonParse as eS}from"@cline/shared";function C3($){return{command:$.envelope.command,requestId:$.envelope.requestId,clientId:$.envelope.clientId,sessionId:$.envelope.sessionId}}function cK($,J,Q){return{version:$.envelope.version,requestId:$.envelope.requestId,ok:!1,error:{code:J,message:Q}}}class qJ{transport;telemetry;constructor($,J){this.transport=$;this.telemetry=J}attach($){let J=new Map,Q=new Set,Z=!1,W=(Y)=>{try{$.send(JSON.stringify(Y))}catch(V){console.error(`[hub] failed to send websocket frame: ${V instanceof Error?V.stack||V.message:String(V)}`)}},j=(Y)=>{W({kind:"event",envelope:Y})},X=async(Y)=>{try{let V=JSON.parse(Y.data);switch(V.kind){case"command":{let H=performance.now(),B=!1,A=C3(V);c("info","command.start",A);let K=setTimeout(()=>{if(B)return;c("warn","command.slow",{...A,elapsedMs:Math.round(performance.now()-H)})},oS),G=this.transport.command(V.envelope);G.then((T)=>{if(!B)return;c(T.ok?"warn":"error","command.late_end",{...A,elapsedMs:Math.round(performance.now()-H),ok:T.ok,errorCode:T.error?.code,errorMessage:T.error?.message})},(T)=>{if(!B)return;c("error","command.late_error",{...A,elapsedMs:Math.round(performance.now()-H),error:T})});let R=!1,D,U,F=tS(V.envelope.command,V.envelope.timeoutMs);try{U=F===null?await G:await Promise.race([G,new Promise((T)=>{D=setTimeout(()=>{R=!0,vK(this.telemetry,{component:"core",operation:"hub.command_timeout",error:Error(`Hub command ${V.envelope.command} did not complete within ${F}ms.`),severity:"error",handled:!0,context:{...A,timeoutMs:F}}),T(cK(V,"hub_command_timeout",`Hub command ${V.envelope.command} did not complete within ${F}ms. Check hub-daemon.log for command.start/command.slow logs with requestId ${V.envelope.requestId}.`))},F)})])}catch(T){if(clearTimeout(K),D)clearTimeout(D);throw T}if(B=R,clearTimeout(K),D)clearTimeout(D);let O=Math.round(performance.now()-H);if(R)c("error","command.timeout",{...A,durationMs:O,timeoutMs:F});else c(U.ok?"info":"warn","command.end",{...A,durationMs:O,ok:U.ok,errorCode:U.error?.code,errorMessage:U.error?.message});if(V.envelope.command==="client.register"&&U.ok){let z=(V.envelope.payload??{}).clientId?.trim()||V.envelope.clientId?.trim();if(z)Q.add(z)}else if(V.envelope.command==="client.unregister"&&U.ok){let T=V.envelope.clientId?.trim();if(T)Q.delete(T)}W({kind:"reply",envelope:U});break}case"stream.subscribe":{let H=`${V.clientId}:${V.sessionId??"*"}`;if(J.has(H))break;let B=await this.transport.subscribe(V.clientId,j,{sessionId:V.sessionId});J.set(H,B);break}case"stream.unsubscribe":{let H=`${V.clientId}:${V.sessionId??"*"}`;J.get(H)?.(),J.delete(H);break}case"reply":case"event":break}}catch(V){let H=typeof Y.data==="string"?eS(Y.data):void 0;if(!H||H.kind!=="command"){c("error","rejected malformed websocket frame",{error:V});return}c("error","command.error",{...C3(H),error:V}),vK(this.telemetry,{component:"core",operation:"hub.websocket_command",error:V,severity:"error",handled:!0,context:C3(H)}),W({kind:"reply",envelope:cK(H,"command_failed",V instanceof Error?V.message:"Unknown hub error")})}},f=()=>{if(Z)return;Z=!0;for(let Y of J.values())Y();J.clear();for(let Y of Q)this.transport.command({version:"v1",command:"client.unregister",clientId:Y});Q.clear(),$.removeEventListener("message",X),$.removeEventListener("close",f)};return $.addEventListener("message",X),$.addEventListener("close",f),f}}class PJ{transport;constructor($){this.transport=$}command($){return this.transport.handleCommand($)}subscribe($,J,Q){return this.transport.subscribe($,J,Q)}}function XC($){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((J)=>Buffer.from(J))).toString();return String($)}function fC($){return{send(J){$.send(J)},addEventListener(J,Q){if(J==="message"){$.on("message",(Z)=>{Q({data:XC(Z)})});return}$.on("close",Q)},removeEventListener(){}}}function YC($){try{$.write(`HTTP/1.1 400 Bad Request\r
|
|
591
591
|
Connection: close\r
|
|
592
592
|
Content-Length: 0\r
|
|
593
593
|
\r
|
|
@@ -596,7 +596,7 @@ Connection: close\r
|
|
|
596
596
|
Content-Length: 0\r
|
|
597
597
|
\r
|
|
598
598
|
`),$.end()}catch{$.destroy()}}function y3($,J){if(!$||!J)return!1;let Q=Buffer.from($,"utf8"),Z=Buffer.from(J,"utf8");return Q.length===Z.length&&$C(Q,Z)}function rK($,J){let Q=$&&typeof $==="object"&&"code"in $&&typeof $.code==="string"?$.code:void 0,Z=$ instanceof Error?$.message:typeof $==="string"?$:"Unknown startup error",W=`Failed to start hub server on ${J.host}:${J.port}${J.pathname}: ${Z}`,j=Error(Q?`${W} (${Q})`:W);if(Q)$.code=Q,j.code=Q;if($ instanceof Error&&$.stack)j.stack=`${j.name}: ${j.message}
|
|
599
|
-
Caused by: ${$.stack}`;return j}async function HC($){return await new Promise((J,Q)=>{let Z=QC.createServer();Z.once("error",Q),Z.listen(0,$,()=>{let W=Z.address();if(!W||typeof W==="string"){Z.close(()=>Q(Error("Failed to resolve free port")));return}let j=W.port;Z.close((X)=>{if(X){Q(X);return}J(j)})})})}function BC($){return $ instanceof Error&&"code"in $&&$.code==="EADDRINUSE"}var E3=new Map,iK="cline-hub-auth.",AC=30000;function aK($){return Array.isArray($)?$.join(","):$??""}function nK($){return $===32||$===9}function
|
|
599
|
+
Caused by: ${$.stack}`;return j}async function HC($){return await new Promise((J,Q)=>{let Z=QC.createServer();Z.once("error",Q),Z.listen(0,$,()=>{let W=Z.address();if(!W||typeof W==="string"){Z.close(()=>Q(Error("Failed to resolve free port")));return}let j=W.port;Z.close((X)=>{if(X){Q(X);return}J(j)})})})}function BC($){return $ instanceof Error&&"code"in $&&$.code==="EADDRINUSE"}var E3=new Map,iK="cline-hub-auth.",AC=30000;function aK($){return Array.isArray($)?$.join(","):$??""}function nK($){return $===32||$===9}function _9($){let J=aK($).trim(),Q="bearer";if(J.length<=6||J.slice(0,6).toLowerCase()!=="bearer"||!nK(J.charCodeAt(6)))return null;let Z=7;while(Z<J.length&&nK(J.charCodeAt(Z)))Z+=1;return J.slice(Z).trim()||null}function KC($){for(let J of aK($).split(",")){let Q=J.trim();if(Q.startsWith(iK))return Q.slice(iK.length).trim()||null}return null}async function C2($){let J=$.owner??l1(),Q=$.host??"127.0.0.1",Z=$.pathname??"/hub",W=$.port??h8(),j=W===0?await HC(Q):W,X=j,f=j1(Q,j,Z),Y=nQ(),V=iQ(),H=new Q4($);await H.start();let B=new qJ(new PJ(H),$.telemetry),A=new Set,K=new Date().toISOString(),G={protocolVersion:dK,minClientProtocolVersion:pK,maxClientProtocolVersion:lK,capabilities:ZC,coreVersion:ZJ.version,buildId:Y,pid:process.pid,startedAt:K},R=new Set,D,U,F=async()=>{if(U)return U;return U=(async()=>{if(D)clearInterval(D),D=void 0;for(let L of R)L.terminate?.();R.clear();for(let L of A)L();if(A.clear(),await new Promise((L,P)=>{T.close((S)=>{if(S){P(S);return}L()})}),await new Promise((L,P)=>{O.close((S)=>{if(S){P(S);return}L()})}),await H.stop(),(await G0(J.discoveryPath))?.url===f)await y0(J.discoveryPath)})(),U},O=JC.createServer((z,L)=>{if((z.url??"/")==="/health"){let S=JSON.stringify({ok:!0,protocolVersion:G.protocolVersion,minClientProtocolVersion:G.minClientProtocolVersion,maxClientProtocolVersion:G.maxClientProtocolVersion,coreVersion:G.coreVersion,host:Q,port:X,url:f});L.statusCode=200,L.setHeader("content-type","application/json"),L.end(S);return}if((z.url??"/")==="/status"){if(!y3(_9(z.headers.authorization),V)){L.statusCode=401,L.end("Unauthorized");return}let S=JSON.stringify({hubId:H.getHubId(),...G,authToken:V,host:Q,port:X,url:f,updatedAt:new Date().toISOString()});L.statusCode=200,L.setHeader("content-type","application/json"),L.end(S);return}if((z.url??"/")==="/version"){L.statusCode=200,L.setHeader("content-type","application/json"),L.end(JSON.stringify(G));return}if(new uK(z.url??"/",`http://${Q}:${X}`).pathname==="/shutdown"&&z.method==="POST"){if(!y3(_9(z.headers.authorization),V)){L.statusCode=401,L.end("Unauthorized");return}L.statusCode=202,L.setHeader("content-type","application/json"),L.end(JSON.stringify({ok:!0})),queueMicrotask(()=>{F()});return}L.statusCode=404,L.end("Not found")}),T=new jC({noServer:!0});D=setInterval(()=>{for(let z of R){if(z.isAlive===!1){try{z.terminate?.()}catch{}R.delete(z);continue}z.isAlive=!1;try{z.ping?.()}catch{try{z.terminate?.()}catch{}R.delete(z)}}},AC),O.on("upgrade",(z,L,P)=>{if(new uK(z.url??"/",`http://${Q}:${X}`).pathname!==Z){L.destroy();return}if(!y3(KC(z.headers["sec-websocket-protocol"]),V)){VC(L);return}try{T.handleUpgrade(z,L,P,(b)=>{let u=b;u.isAlive=!0,u.on("pong",()=>{u.isAlive=!0}),R.add(u);let t=B.attach(fC(b));A.add(t),b.once("close",()=>{R.delete(u),t(),A.delete(t)})})}catch{YC(L)}});try{await new Promise((z,L)=>{O.once("error",(P)=>{L(rK(P,{host:Q,port:j,pathname:Z}))}),O.listen(j,Q,()=>{let P=O.address();if(!P||typeof P==="string"){L(rK(Error("Failed to resolve hub port"),{host:Q,port:j,pathname:Z}));return}X=P.port,f=j1(Q,X,Z),z()})})}catch(z){if(D)clearInterval(D),D=void 0;throw await H.stop().catch(()=>{return}),z}return await aQ(J.discoveryPath,{hubId:H.getHubId(),protocolVersion:dK,minClientProtocolVersion:pK,maxClientProtocolVersion:lK,capabilities:[...G.capabilities],coreVersion:ZJ.version,buildId:Y,authToken:V,host:Q,port:X,url:f,pid:process.pid,startedAt:K,updatedAt:K}),{host:Q,port:X,url:f,authToken:V,close:F}}async function O9($){let J=$.owner??l1(),Q=$.host!==void 0||$.port!==void 0||$.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Z=$.host??"127.0.0.1",W=$.port??h8(),j=$.pathname??"/hub",X=j1(Z,W,j),f=J.discoveryPath,Y=(H)=>{if(!Q)P$(H.url,H.authToken);return H},V=E3.get(f);if(V){let H=await V;if(H.url===X)return Y({server:H,url:H.url,authToken:H.authToken,action:"reuse"})}return await sQ(J.discoveryPath,async()=>{let H=await G0(J.discoveryPath);if(H?.url&&(H.url===X||$.allowPortFallback===!0)){let K=await p1(H.url,{authToken:H.authToken});if(K?.url&&WC(K).compatible&&await G1(K.url,{authToken:H.authToken}))return Y({url:K.url,authToken:H.authToken,action:"reuse"})}if(H?.url)await y0(J.discoveryPath);let A=async(K)=>{let G=C2({...K,owner:J});E3.set(f,G);try{let R=await G;return Y({server:R,url:R.url,authToken:R.authToken,action:"started"})}catch(R){throw E3.delete(f),R}};try{return await A($)}catch(K){if(!$.allowPortFallback||!BC(K))throw K;return await A({...$,port:0})}})}function oK(){return sK()==="production"?n0():E0()}function GC($){return sK()!=="production"&&!$}async function tK($){let J=i0({host:$.host,port:$.port,pathname:$.pathname});return await C2({...$,...J,owner:oK()})}async function eK($){let J=$.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Q=i0({host:$.host,port:$.port,pathname:$.pathname});return await O9({...$,...Q,allowPortFallback:$.allowPortFallback??GC(J),owner:oK()})}M9();var QG={};w(QG,{registerRemoteConfigSessionBlobUpload:()=>N9,readRemoteConfigSessionBlobUploadMetadata:()=>b3,prepareRemoteConfigCoreIntegration:()=>k3,createRemoteConfigSessionMessagesArtifactUploader:()=>h3,buildRemoteConfigSessionBlobUploadMetadata:()=>q9,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY:()=>P9});import{buildRemoteConfigSessionBlobUploadMetadata as q9,clearRemoteConfigSessionBlobUpload as FC,createClineTelemetryServiceConfig as DC,createSessionId as UC,createRemoteConfigSessionMessagesArtifactUploader as RC,prepareRemoteConfigRuntime as LC,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY as P9,readRemoteConfigSessionBlobUploadMetadata as b3,registerRemoteConfigSessionBlobUpload as N9}from"@cline/shared";function zC($,J){let Q=$.telemetry||J.telemetryService?{...J.telemetryService??{},...$.telemetry??{}}:void 0;if(!Q)return;return s1(DC(Q)).telemetry}function h3(){let $=RC();return{async uploadMessagesFile(J){await $.uploadMessagesFile(J)}}}async function k3($){let J=await LC($),Q=zC(J,$),Z=[J.pluginDefinition],W=J.claims?.subject,j=q9(J.bundle?.remoteConfig,W),X;return{prepared:J,extensions:Z,telemetry:Q,applyToStartSessionInput(f){let Y=f.config.extensions??[],V=f.config.telemetry,H=j?f.config.sessionId?.trim()||UC():f.config.sessionId;if(H&&j)X=H;let B=H&&j?N9(H,J.bundle?.remoteConfig,W):void 0,A=B?{...f.sessionMetadata??{},[P9]:B}:f.sessionMetadata;return{...f,...A?{sessionMetadata:A}:{},config:{...f.config,...H?{sessionId:H}:{},extensions:[...Y,...Z],telemetry:Q??V}}},async dispose(){if(X)FC(X)}}}var VG={};w(VG,{createTeamName:()=>C9,DefaultRuntimeBuilder:()=>j4});import{hasRuntimeConfigExtension as hC}from"@cline/shared";import{nanoid as kC}from"nanoid";W1();var YG={};w(YG,{createLocalTeamStore:()=>m3,SqliteTeamStore:()=>y2,FileTeamStore:()=>NJ});import{appendFileSync as _C,existsSync as Z4,mkdirSync as ZG,readdirSync as OC,readFileSync as WG,renameSync as TC,writeFileSync as MC}from"node:fs";import{join as I3}from"node:path";import{resolveTeamDataDir as qC}from"@cline/shared/storage";function jG(){return new Date().toISOString()}function x3($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function XG($){return{...$,tasks:$.tasks.map((J)=>({...J,createdAt:new Date(J.createdAt),updatedAt:new Date(J.updatedAt)})),mailbox:$.mailbox.map((J)=>({...J,sentAt:new Date(J.sentAt),readAt:J.readAt?new Date(J.readAt):void 0})),missionLog:$.missionLog.map((J)=>({...J,ts:new Date(J.ts)})),runs:($.runs??[]).map((J)=>({...J,startedAt:new Date(J.startedAt),endedAt:J.endedAt?new Date(J.endedAt):void 0,nextAttemptAt:J.nextAttemptAt?new Date(J.nextAttemptAt):void 0,heartbeatAt:J.heartbeatAt?new Date(J.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((J)=>({...J,createdAt:new Date(J.createdAt),finalizedAt:J.finalizedAt?new Date(J.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((J)=>({...J,createdAt:new Date(J.createdAt),reviewedAt:J.reviewedAt?new Date(J.reviewedAt):void 0}))}}class NJ{teamDirPath;constructor($={}){this.teamDirPath=$.teamDir??qC()}init(){this.ensureTeamDir()}listTeamNames(){if(!Z4(this.teamDirPath))return[];return OC(this.teamDirPath,{withFileTypes:!0}).filter(($)=>$.isDirectory()).filter(($)=>Z4(this.statePath($.name))).map(($)=>$.name).sort()}readState($){let J=this.readEnvelope($);return J?.teamState?XG(J.teamState):void 0}readHistory($,J=200){let Q=this.historyPath($);if(!Z4(Q))return[];return WG(Q,"utf8").split(`
|
|
600
600
|
`).map((Z)=>Z.trim()).filter(Boolean).map((Z)=>{try{return JSON.parse(Z)}catch{return}}).filter((Z)=>Z!==void 0).reverse().slice(0,J)}loadRuntime($){let J=this.readEnvelope($);return{state:J?.teamState?XG(J.teamState):void 0,teammates:J?.teammates??[],interruptedRunIds:[]}}handleTeamEvent($,J){this.ensureTeamSubdir($),_C(this.historyPath($),`${JSON.stringify({ts:jG(),eventType:J.type,payload:J})}
|
|
601
601
|
`,"utf8")}persistRuntime($,J,Q){this.ensureTeamSubdir($);let Z={version:1,updatedAt:jG(),teamState:J,teammates:Q},W=this.statePath($),j=`${W}.tmp`;MC(j,`${JSON.stringify(Z,null,2)}
|
|
602
602
|
`,"utf8"),TC(j,W)}markInProgressRunsInterrupted($,J){let Q=this.readEnvelope($);if(!Q?.teamState?.runs?.length)return[];let Z=Q.teamState.runs.filter((j)=>j.status==="queued"||j.status==="running").map((j)=>j.id);if(Z.length===0)return[];let W=new Date;return Q.teamState={...Q.teamState,runs:Q.teamState.runs.map((j)=>j.status==="queued"||j.status==="running"?{...j,status:"interrupted",error:J,endedAt:W}:j)},this.persistRuntime($,Q.teamState,Q.teammates),Z}ensureTeamDir(){if(!Z4(this.teamDirPath))ZG(this.teamDirPath,{recursive:!0});return this.teamDirPath}ensureTeamSubdir($){let J=I3(this.ensureTeamDir(),x3($));if(!Z4(J))ZG(J,{recursive:!0});return J}statePath($){return I3(this.ensureTeamDir(),x3($),"state.json")}historyPath($){return I3(this.ensureTeamDir(),x3($),"task-history.jsonl")}readEnvelope($){let J=this.statePath($);if(!Z4(J))return;try{let Q=JSON.parse(WG(J,"utf8"));if(Q?.version===1&&Q.teamState)return Q}catch{}return}}import{existsSync as PC,mkdirSync as NC}from"node:fs";import{join as wC}from"node:path";import{safeJsonParse as fG}from"@cline/shared";import{loadSqliteDb as SC,nowIso as g3}from"@cline/shared/db";import{resolveDbDataDir as CC}from"@cline/shared/storage";function yC(){return CC()}function W4($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function EC($){let J=fG($);if(!Array.isArray(J))return[];let Q=[];for(let Z of J){if(!Z||typeof Z!=="object")continue;let W=Z,j=W.agentId,X=W.rolePrompt;if(typeof j!=="string"||!j.trim())continue;if(typeof X!=="string"||!X.trim())continue;let f={agentId:j.trim(),rolePrompt:X};if(typeof W.modelId==="string"&&W.modelId.trim())f.modelId=W.modelId.trim();if(typeof W.maxIterations==="number"&&Number.isFinite(W.maxIterations))f.maxIterations=Math.max(1,Math.floor(W.maxIterations));Q.push(f)}return Q}function bC($){return{...$,tasks:$.tasks.map((J)=>({...J,createdAt:new Date(J.createdAt),updatedAt:new Date(J.updatedAt)})),mailbox:$.mailbox.map((J)=>({...J,sentAt:new Date(J.sentAt),readAt:J.readAt?new Date(J.readAt):void 0})),missionLog:$.missionLog.map((J)=>({...J,ts:new Date(J.ts)})),runs:($.runs??[]).map((J)=>({...J,startedAt:new Date(J.startedAt),endedAt:J.endedAt?new Date(J.endedAt):void 0,nextAttemptAt:J.nextAttemptAt?new Date(J.nextAttemptAt):void 0,heartbeatAt:J.heartbeatAt?new Date(J.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((J)=>({...J,createdAt:new Date(J.createdAt),finalizedAt:J.finalizedAt?new Date(J.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((J)=>({...J,createdAt:new Date(J.createdAt),reviewedAt:J.reviewedAt?new Date(J.reviewedAt):void 0}))}}class y2{teamDirPath;db;constructor($={}){this.teamDirPath=$.teamDir??yC()}init(){this.getRawDb()}ensureTeamDir(){if(!PC(this.teamDirPath))NC(this.teamDirPath,{recursive:!0});return this.teamDirPath}dbPath(){return wC(this.ensureTeamDir(),"teams.db")}getRawDb(){if(this.db)return this.db;let $=SC(this.dbPath());return this.ensureSchema($),this.db=$,$}ensureSchema($){if($.exec("PRAGMA journal_mode = WAL;"),$.exec("PRAGMA busy_timeout = 5000;"),$.exec(`
|
|
@@ -730,15 +730,15 @@ Caused by: ${$.stack}`;return j}async function HC($){return await new Promise((J
|
|
|
730
730
|
reviewed_by = excluded.reviewed_by,
|
|
731
731
|
reviewed_at = excluded.reviewed_at,
|
|
732
732
|
version = team_outcome_fragments.version + 1`,[Z,j.outcomeId,j.id,j.section,j.sourceAgentId,j.sourceRunId??null,j.content,j.status,j.reviewedBy??null,j.reviewedAt?j.reviewedAt.toISOString():null])})}markInProgressRunsInterrupted($,J){let Q=W4($),Z=this.queryAll("SELECT run_id FROM team_runs WHERE team_name = ? AND status IN ('queued', 'running')",[Q]);if(Z.length===0)return[];let W=g3();return this.run(`UPDATE team_runs SET status = 'interrupted', error = ?, ended_at = ?, version = version + 1
|
|
733
|
-
WHERE team_name = ? AND status IN ('queued', 'running')`,[J,W,Q]),Z.map((j)=>j.run_id)}handleTeamEvent($,J){this.appendTeamEvent($,J.type,J)}}function m3($={}){try{let J=new y2($);return J.init(),J}catch{let J=new NJ({teamDir:$.teamDir});return J.init(),J}}function
|
|
734
|
-
`,"utf8");let Y=J.timeoutMs??300000,V=J.pollIntervalMs??200,H=Date.now();while(Date.now()-H<Y){try{let B=await nC(X,"utf8"),A=JSON.parse(B),K={approved:A.approved===!0,reason:typeof A.reason==="string"?A.reason:void 0};return await Promise.all([c3(X),c3(j)]),K}catch{}await tC(V)}return await c3(j),{approved:!1,reason:"Tool approval request timed out"}}W1();var FG={};w(FG,{syncPluginMcpServersToSettings:()=>r3,removePluginMcpServersFromSettings:()=>wJ,disablePluginMcpServersInSettings:()=>i3});import{existsSync as eC,mkdirSync as $y,readFileSync as Jy,writeFileSync as Qy}from"node:fs";import{dirname as KG,isAbsolute as Zy,relative as Wy,resolve as AG}from"node:path";function E2($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function
|
|
735
|
-
`,"utf8")}function GG($){return{pluginPaths:[...new Set(($.pluginPaths??[]).map((J)=>J.trim()).filter((J)=>J.length>0))],pluginNames:[...new Set(($.pluginNames??[]).map((J)=>J.trim()).filter((J)=>J.length>0))]}}function bQ($){if(!E2($))return;let J=$.metadata;return E2(J)?J:void 0}function EQ($,J){let Q=bQ($);if(!Q||Q.source!=="plugin")return!1;let Z=typeof Q.pluginName==="string"?Q.pluginName:typeof Q.plugin==="string"?Q.plugin:void 0,W=typeof Q.pluginPath==="string"?Q.pluginPath:void 0;if(J.pluginName&&Z===J.pluginName){if(!J.pluginPath||W===J.pluginPath)return!0}if(W&&J.pluginPath&&(W===J.pluginPath||yQ(J.pluginPath,W)||yQ(W,J.pluginPath)))return!0;if(Z&&J.pluginNames?.some((j)=>j===Z))return!0;if(W&&J.pluginPaths?.some((j)=>W===j||yQ(j,W)||yQ(W,j)))return!0;return!1}function jy($){let J=E2($.existing?.oauth)?{oauth:$.existing.oauth}:{};return{transport:$.registration.transport.type==="stdio"&&$.registration.transport.cwd===void 0?{...$.registration.transport,cwd:KG($.pluginPath)}:$.registration.transport,...$.disabled?{disabled:!0}:{},...J,metadata:{...$.registration.metadata??{},source:"plugin",pluginName:$.pluginName,pluginPath:$.pluginPath}}}async function Xy($){if($.pluginPaths.length===0)return{plugins:[],servers:[],failures:[]};let J=await A8({pluginPaths:[...$.pluginPaths],cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,workspaceInfo:$.workspacePath?{rootPath:$.workspacePath}:void 0});try{let Q=[],Z=[],W=(J.failures??[]).map((j)=>({pluginPath:j.pluginPath,pluginName:j.pluginName,message:j.message}));for(let j of J.extensions??[]){let X=j.__clinePluginPath;if(!X)continue;if(!j.setup){Q.push({pluginName:j.name,pluginPath:X});continue}let f=[],Y={registerTool:(V)=>{},registerCommand:()=>{},registerMessageBuilder:()=>{},registerRule:()=>{},registerProvider:()=>{},registerAutomationEventType:()=>{},registerMcpServer:(V)=>{if(!j.manifest.capabilities.includes("mcp"))throw Error('registerMcpServer requires the "mcp" capability');f.push(V)}};try{await j.setup(Y,{workspaceInfo:$.workspacePath?{rootPath:$.workspacePath}:void 0})}catch(V){W.push({pluginPath:X,pluginName:j.name,message:V instanceof Error?V.message:String(V)});continue}Q.push({pluginName:j.name,pluginPath:X});for(let V of f)Z.push({pluginName:j.name,pluginPath:X,server:{...V,metadata:{...V.metadata??{},source:"plugin",pluginName:j.name,pluginPath:X}}})}return{plugins:Q,servers:Z,failures:W}}finally{await J.shutdown().catch(()=>{})}}async function r3($){let J=$.settingsPath??K0(),Q={mutations:[],failures:[]},Z;try{Z=await Xy($)}catch(V){for(let H of $.pluginPaths)Q.failures.push({pluginPath:H,message:V instanceof Error?V.message:String(V)});return Q}Q.failures.push(...Z.failures);let W;try{W=d3(J)}catch(V){for(let H of $.pluginPaths)Q.failures.push({pluginPath:H,message:V instanceof Error?V.message:String(V)});return Q}let j=l3(W),X=new Map,f=new Map;for(let V of Z.plugins)X.set(V.pluginPath,new Set),f.set(V.pluginPath,V.pluginName);let Y=I9(Z.servers.map((V)=>({server:V.server,owner:V,ownerLabel:V.pluginName})));for(let V of Y){let H=V.owner;if(!X.has(H.pluginPath))X.set(H.pluginPath,new Set);if(V.name)X.get(H.pluginPath)?.add(V.name);if(!V.registration){Q.mutations.push({name:V.name,pluginName:H.pluginName,pluginPath:H.pluginPath,action:"skipped",reason:V.loadError??"invalid MCP server registration"});continue}let B=j[V.registration.name];if(B!==void 0){if(!EQ(B,{pluginName:H.pluginName,pluginPath:H.pluginPath})){Q.mutations.push({name:V.registration.name,pluginName:H.pluginName,pluginPath:H.pluginPath,action:"skipped",reason:"MCP server name is already configured"});continue}}j[V.registration.name]=jy({registration:V.registration,pluginName:H.pluginName,pluginPath:H.pluginPath,existing:E2(B)?B:void 0}),Q.mutations.push({name:V.registration.name,pluginName:H.pluginName,pluginPath:H.pluginPath,action:B===void 0?"created":"updated"})}for(let[V,H]of Object.entries(j)){let B=bQ(H),A=typeof B?.pluginPath==="string"?B.pluginPath:"",K=X.get(A);if(K&&EQ(H,{pluginPath:A})&&!K.has(V))delete j[V],Q.mutations.push({name:V,pluginName:typeof B?.pluginName==="string"?B.pluginName:f.get(A)??"plugin",pluginPath:A,action:"removed",reason:"plugin no longer declares this MCP server"})}if(Q.mutations.some((V)=>V.action!=="skipped"))try{p3(J,W,j)}catch(V){for(let H of $.pluginPaths)Q.failures.push({pluginPath:H,message:V instanceof Error?V.message:String(V)})}return Q}function i3($){let J=$.settingsPath??K0(),Q;try{Q=d3(J)}catch{return[]}let Z=l3(Q),W=GG($),j=[];for(let[X,f]of Object.entries(Z)){if(!E2(f)||!EQ(f,W))continue;let Y=bQ(f);Z[X]={...f,disabled:!0},j.push({name:X,pluginName:typeof Y?.pluginName==="string"?Y.pluginName:"plugin",pluginPath:typeof Y?.pluginPath==="string"?Y.pluginPath:"",action:"disabled"})}if(j.length>0)p3(J,Q,Z);return j}function wJ($){let J=$.settingsPath??K0(),Q;try{Q=d3(J)}catch{return[]}let Z=l3(Q),W=GG($),j=[];for(let[X,f]of Object.entries(Z)){if(!EQ(f,W))continue;let Y=bQ(f);delete Z[X],j.push({name:X,pluginName:typeof Y?.pluginName==="string"?Y.pluginName:"plugin",pluginPath:typeof Y?.pluginPath==="string"?Y.pluginPath:"",action:"removed"})}if(j.length>0)p3(J,Q,Z);return j}W1();var LG={};w(LG,{uninstallPlugin:()=>Jj});import{existsSync as f4,readdirSync as fy,readFileSync as Yy,rmdirSync as Vy,rmSync as Hy,statSync as By}from"node:fs";import{basename as t0,dirname as E$,extname as Ay,isAbsolute as Ky,join as o1,relative as Gy,resolve as X4,sep as n3}from"node:path";import{discoverPluginModulePaths as Fy,resolvePluginConfigSearchPaths as Dy}from"@cline/shared/storage";var e3="_installed",Uy="package",Ry=new Map([["git",2],["local",1],["npm",1],["official",1],["remote",1]]);function a3($){return $.trim().toLowerCase()}function f1($,J){let Q=J?.trim();if(!Q)return;$.add(Q)}function Ly($){return $.replace(/-[0-9a-f]{12}$/i,"")}function s3($){let J=Ay($);return J?$.slice(0,-J.length):$}function o3($){if(!f4($))return;try{let J=JSON.parse(Yy($,"utf8"));return typeof J.name==="string"?J.name.trim():void 0}catch{return}}function $j($,J){let Q=Gy(J,$);return Q===""||!Q.startsWith("..")&&!Ky(Q)}function DG($){let Q=X4($).split(n3),Z=Q.lastIndexOf(e3);if(Z<0)return;let W=Q[Z+1];if(!W)return;let j=Ry.get(W)??1,X=Z+2+j;if(Q.length<X)return;let f=Q.slice(0,X).join(n3)||n3;return f4(f)?f:void 0}function hQ($){try{return fy($,{withFileTypes:!0})}catch{return[]}}function zy($){let J=o1($,e3);if(!f4(J))return[];let Q=[];for(let Z of hQ(J)){if(!Z.isDirectory())continue;let W=o1(J,Z.name);if(Z.name==="git"){for(let j of hQ(W)){if(!j.isDirectory())continue;let X=o1(W,j.name);for(let f of hQ(X))if(f.isDirectory())Q.push(o1(X,f.name))}continue}for(let j of hQ(W))if(j.isDirectory())Q.push(o1(W,j.name))}return Q.sort((Z,W)=>Z.localeCompare(W))}function UG($){try{return Fy($)}catch{return[]}}function t3($){let J=UG($),Q=new Set;f1(Q,t0($)),f1(Q,Ly(t0($))),f1(Q,o3(o1($,"package.json"))),f1(Q,o3(o1($,Uy,"package.json")));for(let Z of J)f1(Q,t0(Z)),f1(Q,s3(t0(Z)));return{installPath:$,entryPaths:J,names:[...Q].sort((Z,W)=>Z.localeCompare(W)),installed:!0}}function _y($,J){let Q=X4($),Z=J.find((X)=>$j(Q,X));if(!Z)return;let W=E$(Q);while(W!==Z&&W!==E$(W)){if(f4(o1(W,"package.json")))return W;W=E$(W)}let j=t0(Q);if((j==="index.ts"||j==="index.js")&&E$(Q)!==Z)return E$(Q);return Q}function RG($,J){let Q=_y($,J);if(!Q)return;let Z=new Set;return f1(Z,t0($)),f1(Z,s3(t0($))),f1(Z,t0(Q)),f1(Z,s3(t0(Q))),f1(Z,o3(o1(Q,"package.json"))),{installPath:Q,entryPaths:[$],names:[...Z].sort((W,j)=>W.localeCompare(j)),installed:!1}}function Oy($){let J=$.workspaceRoot?.trim()||$.cwd?.trim()||process.cwd();return Dy(J).filter((Q)=>f4(Q))}function Ty($){let J=new Map;for(let Q of $){for(let Z of zy(Q))J.set(Z,t3(Z));for(let Z of UG(Q)){let W=DG(Z);if(W){if(!J.has(W))J.set(W,t3(W));continue}let j=RG(Z,$);if(j)J.set(j.installPath,j)}}return[...J.values()].sort((Q,Z)=>Q.installPath.localeCompare(Z.installPath))}function My($,J){let Q=a3(J);if(!Q)return!1;if(a3($.installPath)===Q)return!0;return $.names.some((Z)=>a3(Z)===Q)}function qy($,J,Q){let Z=X4($);for(let j of J){if($j(Z,j.installPath))return j;if(j.entryPaths.some((X)=>X4(X)===Z))return j}let W=DG(Z);if(W)return t3(W);if(f4(Z))return RG(Z,Q);return}function Py($){let J=M0(),Q=J.disabledPlugins;if(!Q?.length)return;let Z=Q.filter((W)=>{let j=X4(W);if($j(j,$.installPath))return!1;return!$.entryPaths.some((X)=>X4(X)===j)});if(Z.length===Q.length)return;k1({...J,disabledPlugins:Z})}function Ny($){let J=E$($);while(J!==E$(J)&&t0(J)!==e3){try{Vy(J)}catch{return}J=E$(J)}}function wy($){return`${$.names[0]??t0($.installPath)} at ${$.installPath}`}async function Jj($){let J=Oy($),Q=Ty(J),Z=$.path?.trim(),W=$.name?.trim(),j;if(Z){if(j=qy(Z,Q,J),!j)throw Error(`No plugin found at ${Z}`)}else{if(!W)throw Error("plugin uninstall requires a plugin name");let f=Q.filter((Y)=>My(Y,W));if(f.length===0)throw Error(`No plugin found matching "${W}"`);if(f.length>1)throw Error(`Multiple plugins match "${W}": ${f.map(wy).join(", ")}`);j=f[0]}let X=By(j.installPath,{throwIfNoEntry:!1});if(!X)throw Error(`Plugin install path does not exist: ${j.installPath}`);if(wJ({pluginPaths:[j.installPath,...j.entryPaths],pluginNames:j.names}),Hy(j.installPath,{recursive:X.isDirectory(),force:!0}),Py(j),j.installed)Ny(j.installPath);return{name:W||j.names[0]||t0(j.installPath),installPath:j.installPath,removedPaths:[j.installPath],entryPaths:j.entryPaths}}var mG={};w(mG,{updateLocalProvider:()=>uQ,saveLocalProviderSettings:()=>Vj,saveLocalProviderOAuthCredentials:()=>Kj,resolveLocalClineAuthToken:()=>Fj,refreshProviderModelsFromSource:()=>Hj,normalizeOAuthProvider:()=>Bj,loginLocalProvider:()=>Aj,loginAndSaveLocalProviderOAuthCredentials:()=>Gj,listLocalProviders:()=>fj,getLocalProviderModels:()=>Yj,ensureCustomProvidersLoaded:()=>mQ,deleteLocalProvider:()=>dQ,addLocalProvider:()=>Xj});import*as N0 from"@cline/llms";import{existsSync as Sy,mkdirSync as Cy,readFileSync as yy,writeFileSync as Ey}from"node:fs";import{mkdir as by,readFile as hy,writeFile as ky}from"node:fs/promises";import{dirname as Qj,join as Iy}from"node:path";import*as I0 from"@cline/llms";import{ModelCapabilitySchema as xy,ProviderCapabilitySchema as gy,ProviderClientSchema as my,ProviderProtocolSchema as vy}from"@cline/shared";import{z as n}from"zod";var cy=n.object({id:n.string().optional(),name:n.string().optional(),maxTokens:n.number().optional(),contextWindow:n.number().optional(),maxInputTokens:n.number().optional(),capabilities:n.array(xy).optional(),supportsVision:n.boolean().optional(),supportsAttachments:n.boolean().optional(),supportsReasoning:n.boolean().optional()}).passthrough(),uy=n.object({name:n.string(),baseUrl:n.string(),defaultModelId:n.string().optional(),protocol:vy.optional(),client:my.optional(),capabilities:n.array(gy).optional(),modelsSourceUrl:n.string().optional()}).passthrough(),zG=n.object({provider:uy.optional(),models:n.record(n.string(),cy).optional()}).passthrough(),_G=n.object({version:n.literal(1),providers:n.record(n.string(),zG)}),dy=n.object({version:n.literal(1),providers:n.record(n.string(),n.unknown())}),kQ=new Set;function OG($){return $.split(/[-_]/).filter(Boolean).map((J)=>J.charAt(0).toUpperCase()+J.slice(1)).join(" ")}function b2($){return Iy(Qj($.getFilePath()),"models.json")}function IQ(){return{version:1,providers:{}}}function TG($){let J=dy.safeParse($);if(!J.success)return IQ();let Q={};for(let[Z,W]of Object.entries(J.data.providers)){let j=zG.safeParse(W);if(j.success)Q[Z]=j.data}return{version:1,providers:Q}}function Zj($){if(!Sy($))return IQ();try{let J=yy($,"utf8");return TG(JSON.parse(J))}catch{}return IQ()}async function Y4($){try{let J=await hy($,"utf8");return TG(JSON.parse(J))}catch{}return IQ()}function MG($,J){Cy(Qj($),{recursive:!0});let Q=_G.parse(J);Ey($,`${JSON.stringify(Q,null,2)}
|
|
736
|
-
`,"utf8")}async function
|
|
737
|
-
`,"utf8")}function qG($,J){return{id:$,name:J.name??$,supportsAttachments:J.capabilities?.includes("files"),supportsVision:J.capabilities?.includes("images"),supportsReasoning:J.capabilities?.includes("reasoning")||J.thinkingConfig!=null}}function PG($){if(!$||$.length===0)return;let J=new Set;if($.includes("reasoning"))J.add("reasoning");if($.includes("prompt-cache"))J.add("prompt-cache");if($.includes("tools"))J.add("tools");return J.size>0?[...J]:void 0}function NG($){let J=new Set;if(!$||$.length===0)return[...J];if($.includes("streaming"))J.add("streaming");if($.includes("tools"))J.add("tools");if($.includes("reasoning"))J.add("reasoning");if($.includes("prompt-cache"))J.add("prompt-cache");if($.includes("vision"))J.add("images"),J.add("files");return[...J]}function ly($){return $!=null&&typeof $.name==="string"&&typeof $.baseUrl==="string"}function wG($,J){return $??J??"openai-chat"}function SG($,J,Q){return $??Q??(J==="openai-responses"?"openai":"openai-compatible")}function CG($,J,Q){let Z=new Set(J?.capabilities??Q??[]);if(J?.supportsVision)Z.add("images");if(J?.supportsAttachments)Z.add("files");if(J?.supportsReasoning)Z.add("reasoning");return{id:$,name:J?.name??$,maxTokens:J?.maxTokens,contextWindow:J?.contextWindow,maxInputTokens:J?.maxInputTokens,capabilities:Z.size>0?[...Z]:void 0}}function py($,J){for(let[Q,Z]of Object.entries(J??{})){let W=Z.id?.trim()||Q.trim();if(!W)continue;I0.registerModel($,W,CG(W,Z))}}function ry($,J,Q){return{...J??{},id:$,name:J?.name??$,capabilities:J?.capabilities??Q}}function iy($){return Object.assign({},...I0.resolveProviderModelCatalogKeys($).map((Q)=>I0.getGeneratedModelsForProvider(Q)))}function ny($){let J=$.provider.trim();if(!J||I0.isBuiltInProviderId(J))return;let Q=$.baseUrl?.trim();if(!Q)return;let Z=I0.MODEL_COLLECTIONS_BY_PROVIDER_ID[J],W=iy(J),j=NG($.capabilities),X=j.length>0?j:void 0,f=$.model?.trim(),Y={...W,...Z?.models??{}};if(f)Y[f]=ry(f,Y[f],X);let V=Object.keys(Y).filter(Boolean),H=f||V[0];if(!H)return;let B=wG($.protocol,Z?.provider.protocol),A=SG($.client,B,Z?.provider.client);I0.registerProvider({provider:{id:J,name:Z?.provider.name??OG(J),description:Z?.provider.description,protocol:B,client:A,baseUrl:Q,modelsSourceUrl:Z?.provider.modelsSourceUrl,defaultModelId:H,capabilities:PG($.capabilities)??Z?.provider.capabilities,source:"file"},models:Y})}function gQ($){for(let J of Object.values($.providers))ny(J.settings)}function SJ($,J){let Q=J.models??{};if(!ly(J.provider)){py($,Q);return}let Z=NG(J.provider.capabilities),W=Object.entries(Q).map(([V,H])=>({id:H.id?.trim()||V.trim(),model:H})).filter(({id:V})=>V.length>0),j=J.provider.defaultModelId?.trim()||W[0]?.id||"default",X=wG(J.provider.protocol,void 0),f=SG(J.provider.client,X,void 0),Y=Object.fromEntries(W.map(({id:V,model:H})=>[V,{...CG(V,H,Z.length>0?Z:void 0),status:"active"}]));I0.registerProvider({provider:{id:$,name:J.provider.name.trim()||OG($),protocol:X,client:f,baseUrl:J.provider.baseUrl,modelsSourceUrl:J.provider.modelsSourceUrl,defaultModelId:j,capabilities:PG(J.provider.capabilities),source:"file"},models:Y})}function yG($){let J=b2($);if(kQ.has(J))return;let Q=Zj(J);for(let[Z,W]of Object.entries(Q.providers))SJ(Z,W);kQ.add(J)}async function mQ($){let J=b2($);if(kQ.has(J))return;let Q=await Y4(J);for(let[Z,W]of Object.entries(Q.providers))SJ(Z,W);kQ.add(J)}var ay="cline-pass";function sy($){return $.apiKey??$.auth?.apiKey}function oy($){return($.auth?.accessToken?.trim()??"").length>0}function bG($){return $.split(/[-_]/).filter(Boolean).map((J)=>J.charAt(0).toUpperCase()+J.slice(1)).join(" ")}function ty($){let J=$.split(/\s+/).filter(Boolean);if(J.length===0)return"?";if(J.length===1)return J[0].slice(0,2).toUpperCase();return`${J[0][0]}${J[1][0]}`.toUpperCase()}function ey($){let J=["#c4956a","#6b8aad","#e8963a","#5b9bd5","#6bbd7b","#9b7dd4","#d07f68","#57a6a1"],Q=0;for(let Z of $)Q=Q*31+Z.charCodeAt(0)>>>0;return J[Q%J.length]}function hG($){return Object.entries($).sort(([J],[Q])=>J.localeCompare(Q)).map(([J,Q])=>qG(J,Q))}async function $E($,J){let Q=await N0.getModelsForProvider($);if(!J)return Q;let Z=await L6($,{loadPrivateOnAuth:!0,failOnError:!1},J);return Z?.knownModels?{...Q,...Z.knownModels}:Q}function Wj($){return[...new Set(($??[]).map((J)=>J.trim()).filter(Boolean))]}function JE($){if(!$?.length)return;return[...new Set($)]}function QE($,J){return JE([...$??[],...J??[]])}function ZE($){let J=$?.popularRank;return typeof J==="number"&&Number.isFinite(J)?J:Number.MAX_SAFE_INTEGER}function WE($){if(!$||typeof $!=="object")return!1;let J=$;return typeof J.path==="string"&&J.path.trim().length>0&&typeof J.label==="string"&&J.label.trim().length>0&&["text","password","url","number","select","boolean"].includes(String(J.type))}function jE($){let J=$?.configFields;if(!Array.isArray(J))return;return J.filter(WE)}var vQ={path:"apiKey",label:"API Key",type:"password",placeholder:"Enter API key...",description:"API key issued by the provider.",secret:!0},EG={path:"baseUrl",label:"Base URL",type:"url",placeholder:"https://...",description:"Base endpoint used for provider requests."};function XE($){if(!$)return[vQ];if($.source!=="system")return $.baseUrl?[vQ,EG]:[vQ];let J=[];if($.env?.length)J.push(vQ);if($.baseUrl)J.push(EG);return J}function fE($,J){return J.split(".").reduce((Q,Z)=>{if(!Q||typeof Q!=="object")return;return Q[Z]},$)}function YE($){if(typeof $==="string"||typeof $==="number"||typeof $==="boolean"||$===null)return $;return}function VE($,J,Q){if(!$?.length)return;let Z={};for(let W of $){let X=YE(W.path==="baseUrl"&&J?.baseUrl===void 0?Q?.baseUrl:fE(J,W.path))??W.defaultValue;if(X!==void 0)Z[W.path]=X}return Z}function kG($){let J=Object.entries($??{}).filter(([Q])=>Q.trim().length>0);return J.length>0?Object.fromEntries(J):void 0}function jj($,J){let Q=J?.includes("vision")??!1,Z=J?.includes("reasoning")??!1;return Object.fromEntries($.map((W)=>[W,{id:W,name:W,supportsVision:Q,supportsAttachments:Q,supportsReasoning:Z}]))}async function IG($){if(!$.shouldRecompute)return $.fallbackModelIds??[];let J=$.modelsSourceUrl?await n5($.modelsSourceUrl,$.providerId):[];return[...new Set([...$.explicitModels??[],...J])]}function xG($,J){let Q=$.read(),Z=!1;if(Q.providers[J])delete Q.providers[J],Z=!0;if(Q.lastUsedProvider===J)delete Q.lastUsedProvider,Z=!0;if(Z)$.write(Q);N0.unregisterProvider(J)}async function Xj($,J){let Q=J.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let Z=J.baseUrl.trim(),W=J.apiKey?.trim()??"";if(!Z&&!W){let G=b2($);if((await Y4(G)).providers[Q]){let D=await dQ($,{providerId:Q});return{providerId:Q,settingsPath:D.settingsPath,modelsPath:D.modelsPath,modelsCount:0}}return xG($,Q),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:G,modelsCount:0}}if(N0.hasProvider(Q))throw Error(`provider "${Q}" already exists`);let j=J.name.trim();if(!j)throw Error("name is required");if(!Z)throw Error("baseUrl is required");let X=Wj(J.models),f=J.modelsSourceUrl?.trim(),Y=await IG({providerId:Q,explicitModels:X,modelsSourceUrl:f,shouldRecompute:!0});if(Y.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let V=J.defaultModelId?.trim()&&Y.includes(J.defaultModelId.trim())?J.defaultModelId.trim():Y[0],H=J.capabilities?.length?[...new Set(J.capabilities)]:void 0,B=kG(J.headers);$.saveProviderSettings({provider:Q,apiKey:W||void 0,baseUrl:Z,headers:B,timeout:J.timeoutMs,model:V,protocol:J.protocol,client:J.client},{setLastUsed:!1});let A=b2($),K=await Y4(A);return K.providers[Q]={provider:{name:j,baseUrl:Z,defaultModelId:V,protocol:J.protocol,client:J.client,capabilities:H,modelsSourceUrl:f},models:jj(Y,H)},await xQ(A,K),SJ(Q,K.providers[Q]),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:A,modelsCount:Y.length}}async function uQ($,J){let Q=J.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let Z=b2($),W=await Y4(Z),j=W.providers[Q];if(!j){let T=$.getProviderSettings(Q);if(!T)throw Error(`provider "${Q}" does not exist`);let z=J.modelsSourceUrl?.trim(),L=Wj(J.models)[0]??T.model?.trim();if(!L&&!z)throw Error(`provider "${Q}" cannot be updated because no model is configured`);j={provider:{name:J.name?.trim()||bG(Q),baseUrl:J.baseUrl?.trim()??T.baseUrl?.trim()??"",defaultModelId:L,protocol:T.protocol,client:T.client,capabilities:T.capabilities},models:L?jj([L],T.capabilities):{}}}if(!j.provider)throw Error(`provider "${Q}" cannot be updated because it is a model overlay (no provider metadata)`);let X=J.name?.trim()??j.provider.name.trim();if(!X)throw Error("name is required");let f=J.baseUrl?.trim()??j.provider.baseUrl.trim();if(!f)throw Error("baseUrl is required");let Y=J.capabilities===void 0?j.provider.capabilities:J.capabilities===null?void 0:[...new Set(J.capabilities)],V=J.protocol===void 0?j.provider.protocol:J.protocol??void 0,H=J.client===void 0?j.provider.client:J.client??void 0,B=Wj(J.models),A=J.modelsSourceUrl===void 0?j.provider.modelsSourceUrl:J.modelsSourceUrl?.trim()||void 0,K=J.models!==void 0||J.modelsSourceUrl!==void 0&&!!A,G=Object.keys(j.models??{}).map((T)=>T.trim()).filter(Boolean),R=await IG({providerId:Q,explicitModels:B,modelsSourceUrl:A,fallbackModelIds:G,shouldRecompute:K});if(R.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let D=J.defaultModelId===void 0?j.provider.defaultModelId?.trim():J.defaultModelId?.trim(),U=D&&R.includes(D)?D:R[0],O={...$.getProviderSettings(Q)??{},provider:Q,baseUrl:f,model:U};if(V)O.protocol=V;else delete O.protocol;if(H)O.client=H;else delete O.client;if(J.apiKey!==void 0){let T=J.apiKey?.trim()??"";if(T)O.apiKey=T;else delete O.apiKey}if(J.headers!==void 0){let T=kG(J.headers);if(T)O.headers=T;else delete O.headers}if(J.timeoutMs!==void 0)if(typeof J.timeoutMs==="number")O.timeout=J.timeoutMs;else delete O.timeout;return $.saveProviderSettings(O,{setLastUsed:!1}),W.providers[Q]={provider:{name:X,baseUrl:f,defaultModelId:U,protocol:V,client:H,capabilities:Y,modelsSourceUrl:A},models:jj(R,Y)},await xQ(Z,W),SJ(Q,W.providers[Q]),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:Z,modelsCount:R.length}}async function dQ($,J){let Q=J.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let Z=b2($),W=await Y4(Z);if(!W.providers[Q])throw Error(`provider "${Q}" does not exist`);return delete W.providers[Q],await xQ(Z,W),N0.unregisterProvider(Q),xG($,Q),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:Z}}async function fj($,J={}){let Q=$.read(),Z=N0.getProviderIds(),W=await Promise.all(Z.map(async(X)=>{let[f,Y]=await Promise.all([N0.getProvider(X),N0.getModelsForProvider(X)]),V=hG(Y),H=Q.providers[X]?.settings,B=f?.name??bG(X),A=QE(f?.capabilities,H?.capabilities),K=jE(f?.metadata)??XE(f);return{provider:{id:X,name:B,models:V.length,color:ey(X),letter:ty(B),enabled:Boolean(H),apiKey:H?sy(H):void 0,oauthAccessTokenPresent:H?oy(H):void 0,baseUrl:H?.baseUrl??f?.baseUrl,defaultModelId:f?.defaultModelId,protocol:H?.protocol??f?.protocol,client:H?.client??f?.client,capabilities:A,authDescription:"This provider uses API keys for authentication.",baseUrlDescription:"The base endpoint to use for provider requests.",configFields:K,configValues:VE(K,H,f),modelList:V},rank:ZE(f?.metadata)}}));W.sort((X,f)=>{if(X.rank!==f.rank)return X.rank-f.rank;return X.provider.name.localeCompare(f.provider.name)||X.provider.id.localeCompare(f.provider.id)});let j=W.map((X)=>X.provider);if(J.isClinePassEnabled!==!0)j=j.filter((X)=>X.id!==ay);return{providers:j,settingsPath:$.getFilePath()}}async function Yj($,J){let Q=$.trim(),Z=await $E(Q,J),W=hG(Z);return{providerId:Q,models:W}}function cQ($){return $!=null&&typeof $==="object"&&!Array.isArray($)}function gG($,J){if(!cQ(J))return cQ($)?{...$}:void 0;let Q=cQ($)?{...$}:{};for(let[Z,W]of Object.entries(J)){if(W==null||W===""){delete Q[Z];continue}if(cQ(W)){let j=gG(Q[Z],W);if(j&&Object.keys(j).length>0)Q[Z]=j;else delete Q[Z];continue}Q[Z]=W}return Object.keys(Q).length>0?Q:void 0}function Vj($,J){let Q=J.providerId.trim();if(J.enabled===!1){let j=$.read();if(delete j.providers[Q],j.lastUsedProvider===Q)delete j.lastUsedProvider;return $.write(j),{providerId:Q,enabled:!1,settingsPath:$.getFilePath()}}let W={...$.getProviderSettings(Q)??{},provider:Q};for(let j of["apiKey","baseUrl","model","region"])if(Object.hasOwn(J,j)&&typeof J[j]==="string")if(J[j].trim().length===0)delete W[j];else W[j]=J[j];for(let j of["maxTokens","contextWindow","timeout","apiLine","protocol","client","routingProviderId","capabilities"])if(Object.hasOwn(J,j))W[j]=J[j];for(let j of["auth","headers","reasoning","aws","gcp","azure","sap","oca"])if(Object.hasOwn(J,j)&&J[j]!=null){let X=gG(W[j],J[j]);if(X)W[j]=X;else delete W[j]}return $.saveProviderSettings(W,{setLastUsed:!1}),{providerId:Q,enabled:!0,settingsPath:$.getFilePath()}}async function Hj($,J){let Q=J.trim(),Z=$.getProviderSettings(Q),j=N0.MODEL_COLLECTIONS_BY_PROVIDER_ID[Q]?.provider,X=Z?.baseUrl?.trim()||j?.baseUrl?.trim(),f=a5(X,j?.baseUrl,j?.modelsSourceUrl);if(!Z||!j||!X||!f)return{providerId:Q,refreshed:!1};let Y=await uQ($,{providerId:Q,name:j.name,baseUrl:X,apiKey:Z.apiKey,headers:Z.headers??null,timeoutMs:Z.timeout??null,modelsSourceUrl:f,protocol:Z.protocol??j.protocol??null,client:Z.client??j.client??null,capabilities:Z.capabilities??null});return{providerId:Q,refreshed:!0,modelsCount:Y.modelsCount}}function Bj($){let J=$.trim().toLowerCase(),Q=W0(J);if(Q)return Q.providerId;throw Error(`provider "${$}" does not support OAuth login`)}async function Aj($,J,Q,Z){let W=W0($);if(!W)throw Error(`provider "${$}" does not support OAuth login`);let j=M8({onPrompt:async(X)=>X.defaultValue??"",openUrl:Q,onOpenUrlError:({error:X})=>{throw X instanceof Error?X:Error(String(X))}});return W.login({settings:J,callbacks:j,telemetry:Z})}function Kj($,J,Q,Z,W){return x$({manager:$,providerId:J,settings:Q,credentials:Z,setLastUsed:W?.setLastUsed})}async function Gj($,J,Q,Z){let W=M8({onPrompt:async(j)=>j.defaultValue??"",openUrl:Q,onOpenUrlError:({error:j})=>{throw j instanceof Error?j:Error(String(j))}});return z4($,J,{callbacks:W,telemetry:Z})}function Fj($){let J=$?.auth?.accessToken?.trim()||$?.apiKey?.trim();return J&&J.length>0?J:void 0}var vG={};w(vG,{getProviderConfigFields:()=>Dj});import*as lQ from"@cline/llms";var HE=["apiKey","baseUrl","azureApiVersion","awsRegion","awsProfile","gcpProjectId","gcpRegion","sapClientId","sapClientSecret","sapTokenUrl","sapResourceGroup","sapDeploymentId"],BE={"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 AE($,J){let Q={};for(let Z of HE){let W=$[Z],j=J[Z];if(W||j)Q[Z]={...W,...j}}return Q}function KE($){let J=BE[$.providerId];if(!J)return $;return{...$,description:J.description??$.description,fields:J.mode==="replace"?J.fields:AE($.fields,J.fields)}}var GE=new Set(["ollama","lmstudio","litellm","openai-compatible"]);function FE($,J){if(!J?.provider.baseUrl)return!1;if(J.provider.source!=="system")return!0;return GE.has($)}function Dj($){let J=lQ.normalizeProviderId($);if(I$(J))return{providerId:J,authMethod:"oauth",fields:{}};let Q=lQ.MODEL_COLLECTIONS_BY_PROVIDER_ID[J];if(Q?.provider.capabilities?.includes("local-auth"))return{providerId:J,authMethod:"local",fields:{}};let Z=Q?.provider.baseUrl,W={apiKey:{}};if(FE(J,Q))W.baseUrl={defaultValue:Z};return KE({providerId:J,authMethod:"api-key",fields:W})}var lG={};w(lG,{resolveLegacyClineAuth:()=>Lj,migrateLegacyProviderSettings:()=>CJ});import{existsSync as DE,readFileSync as UE}from"node:fs";import{dirname as RE,join as Uj}from"node:path";import*as rQ from"@cline/llms";import{resolveClineDataDir as LE}from"@cline/shared/storage";var pQ="openai",dG=rQ.BUILT_IN_PROVIDER.OPENAI_COMPATIBLE,cG=128000;function Lj($){let J=$?.trim();if(!J)return;try{let Q=JSON.parse(J);if(!Q)return;let Z=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:Z,accountId:Q.userInfo?.id}}catch{return}}function E($){let J=$?.trim();return J?J:void 0}function uG($){if(!DE($))return;try{let J=UE($,"utf8"),Q=JSON.parse(J);if(Q&&typeof Q==="object"&&!Array.isArray(Q))return Q}catch{}return}function zE($){let J=$.dataDir??LE(),Q=$.globalStatePath??Uj(J,"globalState.json"),Z=$.secretsPath??Uj(J,"secrets.json"),W=uG(Q),j=uG(Z);if(!W&&!j)return;return{globalState:W??{},secrets:j??{}}}function Rj($){if($===pQ)return dG;return $}function _E($,J,Q,Z){let W=Q==="plan"?"planMode":"actMode",j=J===Z?E(Q==="plan"?$.planModeApiModelId:$.actModeApiModelId):void 0,f={openrouter:`${W}OpenRouterModelId`,cline:`${W}ClineModelId`,openai:`${W}OpenAiModelId`,ollama:`${W}OllamaModelId`,lmstudio:`${W}LmStudioModelId`,litellm:`${W}LiteLlmModelId`,requesty:`${W}RequestyModelId`,together:`${W}TogetherModelId`,fireworks:`${W}FireworksModelId`,sapaicore:`${W}SapAiCoreModelId`,groq:`${W}GroqModelId`,baseten:`${W}BasetenModelId`,huggingface:`${W}HuggingFaceModelId`,"huawei-cloud-maas":`${W}HuaweiCloudMaasModelId`,oca:`${W}OcaModelId`,aihubmix:`${W}AihubmixModelId`,hicap:`${W}HicapModelId`,nousResearch:`${W}NousResearchModelId`,"vercel-ai-gateway":`${W}VercelAiGatewayModelId`}[J];return(f?E(typeof $[f]==="string"?$[f]:void 0):void 0)??j}function OE($,J,Q){let Z=Q==="plan"?$.planModeReasoningEffort:$.actModeReasoningEffort,W=Q==="plan"?$.geminiPlanModeThinkingLevel:$.geminiActModeThinkingLevel,j=Q==="plan"?$.planModeThinkingBudgetTokens:$.actModeThinkingBudgetTokens,X=(J==="gemini"?W:void 0)??Z,f=X==="none"||X==="low"||X==="medium"||X==="high"?X:void 0,Y=typeof j==="number"&&Number.isInteger(j)&&j>0?j:void 0;if(!f&&Y===void 0)return;return{...f?{effort:f}:{},...Y!==void 0?{budgetTokens:Y}:{}}}function TE($){let J=$["openai-codex-oauth-credentials"];if(!J)return;try{let Q=JSON.parse(J),Z=E(Q.access_token),W=E(Q.refresh_token),j=E(Q.accountId);if(!Z&&!W&&!j)return;return{...Z?{apiKey:Z}:{},auth:{...Z?{accessToken:Z}:{},...W?{refreshToken:W}:{},...j?{accountId:j}:{}}}}catch{return}}function ME($){let J=rQ.getGeneratedModelsForProvider($);return Object.keys(J)[0]??void 0}function qE($,J,Q,Z){let W=Rj($),j=E(Z==="plan"?J.planModeApiProvider:J.actModeApiProvider),X=_E(J,$,Z,j)??ME(W),f=OE(J,W,Z),Y=typeof J.requestTimeoutMs==="number"&&Number.isInteger(J.requestTimeoutMs)&&J.requestTimeoutMs>0?J.requestTimeoutMs:void 0,V={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},H={};if($==="openai-codex")Object.assign(H,TE(Q));if($==="cline")try{let U=E(Q["cline:clineAccountId"]);if(U)H.auth={...H.auth??{},...Lj(U)}}catch{}if($===pQ&&J.openAiHeaders)H.headers=J.openAiHeaders;if($==="bedrock"){let U=J.awsAuthentication==="profile"||J.awsUseProfile===!0;H.aws={accessKey:E(Q.awsAccessKey),secretKey:E(Q.awsSecretKey),sessionToken:E(Q.awsSessionToken),region:E(J.awsRegion),authentication:J.awsAuthentication,profile:U?E(J.awsProfile):void 0,usePromptCache:J.awsBedrockUsePromptCache,useCrossRegionInference:J.awsUseCrossRegionInference,useGlobalInference:J.awsUseGlobalInference,endpoint:E(J.awsBedrockEndpoint),customModelBaseId:E(Z==="plan"?J.planModeAwsBedrockCustomModelBaseId:J.actModeAwsBedrockCustomModelBaseId)}}if($==="vertex")H.gcp={projectId:E(J.vertexProjectId),region:E(J.vertexRegion)};if($===pQ&&(J.azureApiVersion||J.azureIdentity!==void 0))H.azure={apiVersion:E(J.azureApiVersion),useIdentity:J.azureIdentity};if($==="sapaicore")H.sap={clientId:E(Q.sapAiCoreClientId),clientSecret:E(Q.sapAiCoreClientSecret),tokenUrl:E(J.sapAiCoreTokenUrl),resourceGroup:E(J.sapAiResourceGroup),deploymentId:E(Z==="plan"?J.planModeSapAiCoreDeploymentId:J.actModeSapAiCoreDeploymentId),useOrchestrationMode:J.sapAiCoreUseOrchestrationMode};if($==="oca"){H.oca={mode:J.ocaMode};let U=E(Q.ocaRefreshToken);if(U)H.auth={...H.auth??{},refreshToken:U}}if($==="qwen")H.apiLine=J.qwenApiLine;if($==="moonshot")H.apiLine=J.moonshotApiLine;if($==="zai")H.apiLine=J.zaiApiLine;if($==="minimax")H.apiLine=J.minimaxApiLine;let B={anthropic:J.anthropicBaseUrl,openai:J.openAiBaseUrl,ollama:J.ollamaBaseUrl,lmstudio:J.lmStudioBaseUrl,litellm:J.liteLlmBaseUrl,gemini:J.geminiBaseUrl,requesty:J.requestyBaseUrl,asksage:J.asksageApiUrl,dify:J.difyBaseUrl,oca:J.ocaBaseUrl,aihubmix:J.aihubmixBaseUrl,sapaicore:J.sapAiCoreBaseUrl},A=E(V[$]),K=E(B[$]),G={provider:W,...A?{apiKey:A}:{},...X?{model:X}:{},...K?{baseUrl:K}:{},...f?{reasoning:f}:{},...Y?{timeout:Y}:{},...H},R=z8.safeParse(G);if(!R.success)return;return Object.keys(G).filter((U)=>U!=="provider").length>0?R.data:void 0}function PE($,J){if($!==dG)return;if(!J.baseUrl||!J.model)return;return{provider:{name:"OpenAI Compatible",baseUrl:J.baseUrl,defaultModelId:J.model},models:{[J.model]:{id:J.model,name:J.model,contextWindow:cG,maxInputTokens:cG,capabilities:["streaming","tools","images"]}}}}function NE($,J){let Q=new Set;for(let W of[$.actModeApiProvider,$.planModeApiProvider]){let j=E(W);if(j)Q.add(j)}if(E(J.apiKey))Q.add("anthropic");if(E(J.openRouterApiKey))Q.add("openrouter");if(E(J.openAiApiKey))Q.add(pQ);if(E(J.openAiNativeApiKey))Q.add("openai-native");if(E(J["openai-codex-oauth-credentials"]))Q.add("openai-codex");if(E(J.geminiApiKey))Q.add("gemini");if(E(J.ollamaApiKey))Q.add("ollama");if(E(J.awsAccessKey)||E(J.awsBedrockApiKey)||$.awsAuthentication!==void 0||$.awsUseProfile===!0||E($.awsProfile))Q.add("bedrock");if(E($.vertexProjectId)||E($.vertexRegion))Q.add("vertex");if(E(J.clineApiKey))Q.add("cline");let Z=Lj(E(J["cline:clineAccountId"]));if(Z?.accessToken||Z?.refreshToken||Z?.accountId)Q.add("cline");if(E(J.ocaApiKey))Q.add("oca");if(E(J.sapAiCoreClientId)||E(J.sapAiCoreClientSecret)||E($.sapAiCoreTokenUrl)||E($.sapAiCoreBaseUrl)||E($.sapAiResourceGroup)||$.sapAiCoreUseOrchestrationMode!==void 0)Q.add("sapaicore");return Q}function CJ($){let J=$.providerSettingsManager.read(),Q=zE($);if(!Q)return{migrated:!1,providerCount:Object.keys(J.providers).length,lastUsedProvider:J.lastUsedProvider};let{globalState:Z,secrets:W}=Q,j=Z.mode==="plan"?"plan":"act",X=NE(Z,W),f=z$();f.providers={...J.providers},f.lastUsedProvider=J.lastUsedProvider;let Y=new Date().toISOString(),V=0,H=Uj(RE($.providerSettingsManager.getFilePath()),"models.json"),B=Zj(H),A=0;for(let R of X){let D=Rj(R);if(f.providers[D])continue;let U=qE(R,Z,W,j);if(!U)continue;f.providers[D]={settings:U,updatedAt:Y,tokenSource:"migration"},V+=1;let F=PE(D,U);if(F&&!B.providers[D])B.providers[D]=F,A+=1}if(V===0&&A===0)return{migrated:!1,providerCount:Object.keys(J.providers).length,lastUsedProvider:J.lastUsedProvider};let K=E(j==="plan"?Z.planModeApiProvider:Z.actModeApiProvider),G=K?Rj(K):void 0;if(f.lastUsedProvider=J.lastUsedProvider??(G&&f.providers[G]?G:Object.keys(f.providers)[0]),$.providerSettingsManager.write(f),A>0)MG(H,B);return{migrated:V>0||A>0,providerCount:Object.keys(f.providers).length,lastUsedProvider:f.lastUsedProvider}}MQ();O0();GQ();var pG={};w(pG,{FileTeamPersistenceStore:()=>iQ});import{appendFileSync as wE,existsSync as zj,mkdirSync as SE,readFileSync as CE,renameSync as yE,unlinkSync as EE,writeFileSync as bE}from"node:fs";import{join as _j}from"node:path";import{resolveTeamDataDir as hE}from"@cline/shared/storage";function kE($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}class iQ{dirPath;statePath;taskHistoryPath;teammateSpecs=new Map;constructor($){let J=kE($.teamName),Q=$.baseDir?.trim()||hE();this.dirPath=_j(Q,J),this.statePath=_j(this.dirPath,"state.json"),this.taskHistoryPath=_j(this.dirPath,"task-history.jsonl")}loadState(){if(!zj(this.statePath))return;try{let $=CE(this.statePath,"utf8"),J=JSON.parse($);if(J.version!==1||!J.teamState)return;for(let Q of J.teammates??[])this.teammateSpecs.set(Q.agentId,Q);return yA(J.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 J={version:1,updatedAt:new Date().toISOString(),teamState:$.exportState(),teammates:Array.from(this.teammateSpecs.values())},Q=`${this.statePath}.tmp`;bE(Q,`${JSON.stringify(J,null,2)}
|
|
733
|
+
WHERE team_name = ? AND status IN ('queued', 'running')`,[J,W,Q]),Z.map((j)=>j.run_id)}handleTeamEvent($,J){this.appendTeamEvent($,J.type,J)}}function m3($={}){try{let J=new y2($);return J.init(),J}catch{let J=new NJ({teamDir:$.teamDir});return J.init(),J}}function w9($,J){return hC($,J)}function IC($,J){let Q=J?.["*"]??{},Z=J?.[$]??{};return{...Q,...Z}.enabled!==!1}function xC($,J){return $.filter((Q)=>IC(Q.name,J))}function v3($,J){return I1(xC($,J))}var gC={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 mC($){let J=$.trim().toLowerCase();return gC[J]??J}function vC($,J){if(J.tools===void 0)return $;let Q=new Set(J.tools.map(mC));if(J.skills!==void 0)Q.add("skills");return $.filter((Z)=>Q.has(Z.name))}function C9(){return`team-${kC(5)}`}function S9($,J,Q,Z,W,j,X,f){let Y=c0[h1({mode:Q})],V=t2(J,Z,Q,W??o2);return v3(n$({cwd:$,...Y,enableSkills:!!X,...V,executors:{...X?{skills:X}:{},...f??{}}}),j)}function cC($){return S9($.cwd,$.providerId,$.mode,$.modelId,$.toolRoutingRules,$.toolPolicies,uC,$.toolExecutors).some((J)=>J.name==="skills")}var uC=async()=>"";async function dC($){let J=K0();if(!c1({filePath:J}))return{tools:[]};let Q=new A2({clientFactory:C8({settingsPath:J})}),Z;try{Z=await B2(Q,{filePath:J})}catch(f){await Q.dispose().catch(()=>{});let Y=f instanceof Error?f.message:String(f);return $?.log(`[mcp] Failed to load MCP settings, skipping MCP tools: ${Y}`),{tools:[]}}let W=Z.filter((f)=>f.disabled!==!0),j=await Promise.allSettled(W.map((f)=>E8({serverName:f.name,provider:Q}))),X=[];for(let[f,Y]of j.entries())if(Y.status==="fulfilled")X.push(...Y.value);else{let V=Y.reason instanceof Error?Y.reason.message:String(Y.reason);$?.log(`[mcp] Failed to load tools from MCP server "${W[f].name}", skipping: ${V}`)}return{tools:X,shutdown:async()=>{await Q.dispose()}}}function lC($,J){if(!$)return;for(let Q of $.getTeammateIds())try{$.shutdownTeammate(Q,J)}catch{}}function pC($){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 rC($){let J=c0[h1({mode:$.mode})];return{sessionId:$.sessionId||"",mode:$.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act",enableTools:$.enableTools!==!1,enableSpawnAgent:$.enableSpawnAgent??J.enableSpawnAgent??!0,enableAgentTeams:$.enableAgentTeams??J.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 j4{teamRuntimeEntries=new Map;async build($){let{config:J,hooks:Q,extensions:Z,logger:W,telemetry:j,createSpawnTool:X,onTeamRestored:f,userInstructionService:Y,configExtensions:V,toolExecutors:H}=$,B=$.onTeamEvent??(()=>{}),A=rC(J),K=J.workspaceRoot??J.cwd,G=$.toolPolicies??J.toolPolicies,R=B1(),D=[],U=J.teamName?.trim()||C9(),F=J.sessionId?.trim()||U,O=A.enableSpawnAgent?v8({workspaceRoot:K}):{configs:[],errors:[]},T=O.configs.some((m)=>m.skills!==void 0),z=w9(V,"rules"),L=w9(V,"skills"),P=L||T,S=w9(V,"workflows"),b=w9(V,"plugins"),u=z||L||S,t=!1,Q0=Boolean(Y),e=Y,$1;for(let m of O.errors)(W??J.logger)?.log?.(`[agents] Failed to load agent config at ${m.path}: ${m.error.message}`);if(!e&&(u||T))e=_$({skills:P?{workspacePath:K,includePluginSkills:b,pluginSkillDirectories:b?$.pluginSkillDirectories:void 0,pluginPaths:J.pluginPaths,cwd:J.cwd}:{workspacePath:K},rules:{workspacePath:J.cwd},workflows:{workspacePath:J.cwd}});if(e)await e.start().catch(()=>{});let b$=A.enableTools&&L&&Boolean(e)&&e?.hasConfiguredSkills(J.skills)===!0&&cC({cwd:J.cwd,providerId:J.providerId,mode:A.mode,modelId:J.modelId,toolRoutingRules:J.toolRoutingRules,toolPolicies:G,toolExecutors:H}),r=e&&u?e.createExtension({includeRules:z,includeSkills:L,includeWorkflows:S,registerSkillsTool:b$,allowedSkillNames:J.skills}):void 0,O1=r?[...Z??J.extensions??[],r]:Z??J.extensions;if(A.enableTools){if(D.push(...S9(J.cwd,J.providerId,A.mode,J.modelId,J.toolRoutingRules,G,void 0,H)),!A.disableMcpSettingsTools){let m=await dC(J.logger);D.push(...m.tools),$1=m.shutdown}}let C,f0=A.enableAgentTeams?m3():void 0,Y0=f0?.loadRuntime(F),w0=Y0?.state,k2=Y0?.teammates??[],T1=new Map(k2.map((m)=>[m.agentId,m])),Y1=J.sessionId||U,V4,I2=[],bJ=!1,M1=H$({providerId:J.providerId,modelId:J.modelId,cwd:J.cwd,apiKey:J.apiKey??"",baseUrl:J.baseUrl,headers:J.headers,providerConfig:J.providerConfig,knownModels:J.knownModels,thinking:J.thinking,maxIterations:J.maxIterations,hooks:Q,extensions:O1,logger:W??J.logger,telemetry:$.telemetry??J.telemetry,workspaceMetadata:J.workspaceMetadata});if(A.enableSpawnAgent){if(O.configs.length>0)D.push(...v3(c8({configProvider:M1,agents:O.configs,createSubAgentTools:(m)=>A.enableTools?vC(S9(J.cwd,m.providerId??J.providerId,A.mode,m.modelId??J.modelId,J.toolRoutingRules,G,m.skills!==void 0&&e?.createSkillsExecutor?e.createSkillsExecutor(m.skills):void 0,H),m):[],hookErrorMode:J.hookErrorMode,toolPolicies:G,requestToolApproval:$.requestToolApproval,onSubAgentEvent:$.onSubAgentEvent,onSubAgentStart:$.onSubAgentStart,onSubAgentEnd:$.onSubAgentEnd}),G))}if(!this.teamRuntimeEntries.has(Y1))this.teamRuntimeEntries.set(Y1,{delegatedAgentConfigProvider:M1});let hJ=()=>{if(!A.enableAgentTeams)return;let m=this.teamRuntimeEntries.get(Y1)??{delegatedAgentConfigProvider:M1};if(this.teamRuntimeEntries.set(Y1,m),C=m.runtime,!C){if(C=new T2({teamName:U,leadAgentId:J.sessionId||"lead",missionLogIntervalSteps:A.missionLogIntervalSteps,missionLogIntervalMs:A.missionLogIntervalMs,onTeamEvent:(Z0)=>{if(B(Z0),C&&f0){if(Z0.type==="teammate_spawned"&&Z0.teammate?.rolePrompt){let q1={agentId:Z0.agentId,rolePrompt:Z0.teammate.rolePrompt,modelId:Z0.teammate.modelId,maxIterations:Z0.teammate.maxIterations};T1.set(q1.agentId,q1)}if(Z0.type==="teammate_shutdown"&&!pC(Z0.reason))T1.delete(Z0.agentId);f0.handleTeamEvent(F,Z0),f0.persistRuntime(F,C.exportState(),Array.from(T1.values()))}}}),w0)C.hydrateState(w0),bJ=!0;m.runtime=C}if(!t){if(!C)return;t=!0;let Z0=Z8({runtime:C,leadAgentId:J.sessionId||"lead",restoredFromPersistence:Boolean(w0),restoredTeammates:k2,includeLeadSpawnTool:!0,includeLeadManagementTools:!0,onLeadToolsUnlocked:(q1)=>{I2=q1,V4?.addTools(q1)},createBaseTools:A.enableTools?()=>S9(J.cwd,J.providerId,A.mode,J.modelId,J.toolRoutingRules,G,void 0,H):void 0,teammateConfigProvider:M1});if(bJ)C.recoverActiveRuns("runtime_recovered");if(Z0.restoredFromPersistence)f?.();D.push(...Z0.tools)}return C};if(A.enableSpawnAgent&&X){let m=X();D.push({...m,execute:async(Z0,q1)=>{return hJ(),m.execute(Z0,q1)}})}if(A.enableAgentTeams)hJ();let x2=v3(D,G),QZ=x2.some((m)=>m.name==="submit_and_exit"&&m.lifecycle?.completesRun===!0),kJ=A.enableAgentTeams?()=>{let m=this.teamRuntimeEntries.get(Y1)?.runtime;if(!m)return;let Z0=m.listTasks(),q1=Z0.some((t1)=>t1.status==="in_progress"||t1.status==="pending"),cj=m.listRuns({}),GF=cj.some((t1)=>t1.status==="running"||t1.status==="queued");if(q1||GF){let t1=Z0.filter((x0)=>x0.status==="in_progress"||x0.status==="pending").map((x0)=>`${x0.id} (${x0.status}): ${x0.title}`).join(", "),uj=cj.filter((x0)=>x0.status==="running"||x0.status==="queued").map((x0)=>`${x0.id} (${x0.status})`).join(", "),ZZ=[];if(t1)ZZ.push(`Unfinished tasks: ${t1}`);if(uj)ZZ.push(`Active runs: ${uj}`);return`[SYSTEM] You still have team obligations. ${ZZ.join(". ")}. Use team_run_task to delegate work, or team_task with action=complete to mark tasks done, or team_await_runs to wait for active runs. Do NOT stop until all tasks are completed.`}return}:void 0,KF=QZ?{requireCompletionTool:!0,...kJ?{completionGuard:kJ}:{}}:kJ?{completionGuard:kJ}:void 0;return{tools:x2,logger:W??J.logger,telemetry:j??J.telemetry,teamRuntime:C,teamRestoredFromPersistence:Boolean(w0),delegatedAgentConfigProvider:this.teamRuntimeEntries.get(Y1)?.delegatedAgentConfigProvider??M1,extensions:O1,completionPolicy:KF,registerLeadAgent:(m)=>{if(V4=m,I2.length>0)m.addTools(I1(I2,[...R]))},shutdown:async(m)=>{if(lC(C,m),this.teamRuntimeEntries.delete(Y1),await $1?.(),!Q0)e?.stop()}}}}var BG={};w(BG,{requestDesktopToolApproval:()=>u3});import{mkdir as iC,readFile as nC,unlink as aC,writeFile as sC}from"node:fs/promises";import{join as HG}from"node:path";function oC($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function tC($){return new Promise((J)=>setTimeout(J,$))}async function c3($){try{await aC($)}catch{}}async function u3($,J={}){let Q=J.approvalDir?.trim(),Z=J.sessionId?.trim();if(!Q||!Z)return{approved:!1,reason:"Desktop tool approval IPC is not configured"};await iC(Q,{recursive:!0});let W=oC(`${$.toolCallId}`),j=HG(Q,`${Z}.request.${W}.json`),X=HG(Q,`${Z}.decision.${W}.json`),f=J.nowIso??(()=>new Date().toISOString());await sC(j,`${JSON.stringify({requestId:W,sessionId:Z,createdAt:f(),toolCallId:$.toolCallId,toolName:$.toolName,input:$.input,iteration:$.iteration,agentId:$.agentId,conversationId:$.conversationId},null,2)}
|
|
734
|
+
`,"utf8");let Y=J.timeoutMs??300000,V=J.pollIntervalMs??200,H=Date.now();while(Date.now()-H<Y){try{let B=await nC(X,"utf8"),A=JSON.parse(B),K={approved:A.approved===!0,reason:typeof A.reason==="string"?A.reason:void 0};return await Promise.all([c3(X),c3(j)]),K}catch{}await tC(V)}return await c3(j),{approved:!1,reason:"Tool approval request timed out"}}W1();var FG={};w(FG,{syncPluginMcpServersToSettings:()=>r3,removePluginMcpServersFromSettings:()=>wJ,disablePluginMcpServersInSettings:()=>i3});import{existsSync as eC,mkdirSync as $y,readFileSync as Jy,writeFileSync as Qy}from"node:fs";import{dirname as KG,isAbsolute as Zy,relative as Wy,resolve as AG}from"node:path";function E2($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function y9($,J){let Q=Wy(AG($),AG(J));return Q===""||!Q.startsWith("..")&&!Zy(Q)}function d3($){if(!eC($))return{mcpServers:{}};try{let J=JSON.parse(Jy($,"utf8"));if(E2(J))return J}catch(J){throw Error(`Invalid MCP settings at "${$}": ${J instanceof Error?J.message:String(J)}`)}throw Error(`Invalid MCP settings at "${$}": expected an object`)}function l3($){if(E2($.mcpServers))return{...$.mcpServers};return{}}function p3($,J,Q){$y(KG($),{recursive:!0}),Qy($,`${JSON.stringify({...J,mcpServers:Q},null,2)}
|
|
735
|
+
`,"utf8")}function GG($){return{pluginPaths:[...new Set(($.pluginPaths??[]).map((J)=>J.trim()).filter((J)=>J.length>0))],pluginNames:[...new Set(($.pluginNames??[]).map((J)=>J.trim()).filter((J)=>J.length>0))]}}function b9($){if(!E2($))return;let J=$.metadata;return E2(J)?J:void 0}function E9($,J){let Q=b9($);if(!Q||Q.source!=="plugin")return!1;let Z=typeof Q.pluginName==="string"?Q.pluginName:typeof Q.plugin==="string"?Q.plugin:void 0,W=typeof Q.pluginPath==="string"?Q.pluginPath:void 0;if(J.pluginName&&Z===J.pluginName){if(!J.pluginPath||W===J.pluginPath)return!0}if(W&&J.pluginPath&&(W===J.pluginPath||y9(J.pluginPath,W)||y9(W,J.pluginPath)))return!0;if(Z&&J.pluginNames?.some((j)=>j===Z))return!0;if(W&&J.pluginPaths?.some((j)=>W===j||y9(j,W)||y9(W,j)))return!0;return!1}function jy($){let J=E2($.existing?.oauth)?{oauth:$.existing.oauth}:{};return{transport:$.registration.transport.type==="stdio"&&$.registration.transport.cwd===void 0?{...$.registration.transport,cwd:KG($.pluginPath)}:$.registration.transport,...$.disabled?{disabled:!0}:{},...J,metadata:{...$.registration.metadata??{},source:"plugin",pluginName:$.pluginName,pluginPath:$.pluginPath}}}async function Xy($){if($.pluginPaths.length===0)return{plugins:[],servers:[],failures:[]};let J=await A8({pluginPaths:[...$.pluginPaths],cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,workspaceInfo:$.workspacePath?{rootPath:$.workspacePath}:void 0});try{let Q=[],Z=[],W=(J.failures??[]).map((j)=>({pluginPath:j.pluginPath,pluginName:j.pluginName,message:j.message}));for(let j of J.extensions??[]){let X=j.__clinePluginPath;if(!X)continue;if(!j.setup){Q.push({pluginName:j.name,pluginPath:X});continue}let f=[],Y={registerTool:(V)=>{},registerCommand:()=>{},registerMessageBuilder:()=>{},registerRule:()=>{},registerProvider:()=>{},registerAutomationEventType:()=>{},registerMcpServer:(V)=>{if(!j.manifest.capabilities.includes("mcp"))throw Error('registerMcpServer requires the "mcp" capability');f.push(V)}};try{await j.setup(Y,{workspaceInfo:$.workspacePath?{rootPath:$.workspacePath}:void 0})}catch(V){W.push({pluginPath:X,pluginName:j.name,message:V instanceof Error?V.message:String(V)});continue}Q.push({pluginName:j.name,pluginPath:X});for(let V of f)Z.push({pluginName:j.name,pluginPath:X,server:{...V,metadata:{...V.metadata??{},source:"plugin",pluginName:j.name,pluginPath:X}}})}return{plugins:Q,servers:Z,failures:W}}finally{await J.shutdown().catch(()=>{})}}async function r3($){let J=$.settingsPath??K0(),Q={mutations:[],failures:[]},Z;try{Z=await Xy($)}catch(V){for(let H of $.pluginPaths)Q.failures.push({pluginPath:H,message:V instanceof Error?V.message:String(V)});return Q}Q.failures.push(...Z.failures);let W;try{W=d3(J)}catch(V){for(let H of $.pluginPaths)Q.failures.push({pluginPath:H,message:V instanceof Error?V.message:String(V)});return Q}let j=l3(W),X=new Map,f=new Map;for(let V of Z.plugins)X.set(V.pluginPath,new Set),f.set(V.pluginPath,V.pluginName);let Y=IQ(Z.servers.map((V)=>({server:V.server,owner:V,ownerLabel:V.pluginName})));for(let V of Y){let H=V.owner;if(!X.has(H.pluginPath))X.set(H.pluginPath,new Set);if(V.name)X.get(H.pluginPath)?.add(V.name);if(!V.registration){Q.mutations.push({name:V.name,pluginName:H.pluginName,pluginPath:H.pluginPath,action:"skipped",reason:V.loadError??"invalid MCP server registration"});continue}let B=j[V.registration.name];if(B!==void 0){if(!E9(B,{pluginName:H.pluginName,pluginPath:H.pluginPath})){Q.mutations.push({name:V.registration.name,pluginName:H.pluginName,pluginPath:H.pluginPath,action:"skipped",reason:"MCP server name is already configured"});continue}}j[V.registration.name]=jy({registration:V.registration,pluginName:H.pluginName,pluginPath:H.pluginPath,existing:E2(B)?B:void 0}),Q.mutations.push({name:V.registration.name,pluginName:H.pluginName,pluginPath:H.pluginPath,action:B===void 0?"created":"updated"})}for(let[V,H]of Object.entries(j)){let B=b9(H),A=typeof B?.pluginPath==="string"?B.pluginPath:"",K=X.get(A);if(K&&E9(H,{pluginPath:A})&&!K.has(V))delete j[V],Q.mutations.push({name:V,pluginName:typeof B?.pluginName==="string"?B.pluginName:f.get(A)??"plugin",pluginPath:A,action:"removed",reason:"plugin no longer declares this MCP server"})}if(Q.mutations.some((V)=>V.action!=="skipped"))try{p3(J,W,j)}catch(V){for(let H of $.pluginPaths)Q.failures.push({pluginPath:H,message:V instanceof Error?V.message:String(V)})}return Q}function i3($){let J=$.settingsPath??K0(),Q;try{Q=d3(J)}catch{return[]}let Z=l3(Q),W=GG($),j=[];for(let[X,f]of Object.entries(Z)){if(!E2(f)||!E9(f,W))continue;let Y=b9(f);Z[X]={...f,disabled:!0},j.push({name:X,pluginName:typeof Y?.pluginName==="string"?Y.pluginName:"plugin",pluginPath:typeof Y?.pluginPath==="string"?Y.pluginPath:"",action:"disabled"})}if(j.length>0)p3(J,Q,Z);return j}function wJ($){let J=$.settingsPath??K0(),Q;try{Q=d3(J)}catch{return[]}let Z=l3(Q),W=GG($),j=[];for(let[X,f]of Object.entries(Z)){if(!E9(f,W))continue;let Y=b9(f);delete Z[X],j.push({name:X,pluginName:typeof Y?.pluginName==="string"?Y.pluginName:"plugin",pluginPath:typeof Y?.pluginPath==="string"?Y.pluginPath:"",action:"removed"})}if(j.length>0)p3(J,Q,Z);return j}W1();var LG={};w(LG,{uninstallPlugin:()=>Jj});import{existsSync as f4,readdirSync as fy,readFileSync as Yy,rmdirSync as Vy,rmSync as Hy,statSync as By}from"node:fs";import{basename as t0,dirname as E$,extname as Ay,isAbsolute as Ky,join as o1,relative as Gy,resolve as X4,sep as n3}from"node:path";import{discoverPluginModulePaths as Fy,resolvePluginConfigSearchPaths as Dy}from"@cline/shared/storage";var e3="_installed",Uy="package",Ry=new Map([["git",2],["local",1],["npm",1],["official",1],["remote",1]]);function a3($){return $.trim().toLowerCase()}function f1($,J){let Q=J?.trim();if(!Q)return;$.add(Q)}function Ly($){return $.replace(/-[0-9a-f]{12}$/i,"")}function s3($){let J=Ay($);return J?$.slice(0,-J.length):$}function o3($){if(!f4($))return;try{let J=JSON.parse(Yy($,"utf8"));return typeof J.name==="string"?J.name.trim():void 0}catch{return}}function $j($,J){let Q=Gy(J,$);return Q===""||!Q.startsWith("..")&&!Ky(Q)}function DG($){let Q=X4($).split(n3),Z=Q.lastIndexOf(e3);if(Z<0)return;let W=Q[Z+1];if(!W)return;let j=Ry.get(W)??1,X=Z+2+j;if(Q.length<X)return;let f=Q.slice(0,X).join(n3)||n3;return f4(f)?f:void 0}function h9($){try{return fy($,{withFileTypes:!0})}catch{return[]}}function zy($){let J=o1($,e3);if(!f4(J))return[];let Q=[];for(let Z of h9(J)){if(!Z.isDirectory())continue;let W=o1(J,Z.name);if(Z.name==="git"){for(let j of h9(W)){if(!j.isDirectory())continue;let X=o1(W,j.name);for(let f of h9(X))if(f.isDirectory())Q.push(o1(X,f.name))}continue}for(let j of h9(W))if(j.isDirectory())Q.push(o1(W,j.name))}return Q.sort((Z,W)=>Z.localeCompare(W))}function UG($){try{return Fy($)}catch{return[]}}function t3($){let J=UG($),Q=new Set;f1(Q,t0($)),f1(Q,Ly(t0($))),f1(Q,o3(o1($,"package.json"))),f1(Q,o3(o1($,Uy,"package.json")));for(let Z of J)f1(Q,t0(Z)),f1(Q,s3(t0(Z)));return{installPath:$,entryPaths:J,names:[...Q].sort((Z,W)=>Z.localeCompare(W)),installed:!0}}function _y($,J){let Q=X4($),Z=J.find((X)=>$j(Q,X));if(!Z)return;let W=E$(Q);while(W!==Z&&W!==E$(W)){if(f4(o1(W,"package.json")))return W;W=E$(W)}let j=t0(Q);if((j==="index.ts"||j==="index.js")&&E$(Q)!==Z)return E$(Q);return Q}function RG($,J){let Q=_y($,J);if(!Q)return;let Z=new Set;return f1(Z,t0($)),f1(Z,s3(t0($))),f1(Z,t0(Q)),f1(Z,s3(t0(Q))),f1(Z,o3(o1(Q,"package.json"))),{installPath:Q,entryPaths:[$],names:[...Z].sort((W,j)=>W.localeCompare(j)),installed:!1}}function Oy($){let J=$.workspaceRoot?.trim()||$.cwd?.trim()||process.cwd();return Dy(J).filter((Q)=>f4(Q))}function Ty($){let J=new Map;for(let Q of $){for(let Z of zy(Q))J.set(Z,t3(Z));for(let Z of UG(Q)){let W=DG(Z);if(W){if(!J.has(W))J.set(W,t3(W));continue}let j=RG(Z,$);if(j)J.set(j.installPath,j)}}return[...J.values()].sort((Q,Z)=>Q.installPath.localeCompare(Z.installPath))}function My($,J){let Q=a3(J);if(!Q)return!1;if(a3($.installPath)===Q)return!0;return $.names.some((Z)=>a3(Z)===Q)}function qy($,J,Q){let Z=X4($);for(let j of J){if($j(Z,j.installPath))return j;if(j.entryPaths.some((X)=>X4(X)===Z))return j}let W=DG(Z);if(W)return t3(W);if(f4(Z))return RG(Z,Q);return}function Py($){let J=M0(),Q=J.disabledPlugins;if(!Q?.length)return;let Z=Q.filter((W)=>{let j=X4(W);if($j(j,$.installPath))return!1;return!$.entryPaths.some((X)=>X4(X)===j)});if(Z.length===Q.length)return;k1({...J,disabledPlugins:Z})}function Ny($){let J=E$($);while(J!==E$(J)&&t0(J)!==e3){try{Vy(J)}catch{return}J=E$(J)}}function wy($){return`${$.names[0]??t0($.installPath)} at ${$.installPath}`}async function Jj($){let J=Oy($),Q=Ty(J),Z=$.path?.trim(),W=$.name?.trim(),j;if(Z){if(j=qy(Z,Q,J),!j)throw Error(`No plugin found at ${Z}`)}else{if(!W)throw Error("plugin uninstall requires a plugin name");let f=Q.filter((Y)=>My(Y,W));if(f.length===0)throw Error(`No plugin found matching "${W}"`);if(f.length>1)throw Error(`Multiple plugins match "${W}": ${f.map(wy).join(", ")}`);j=f[0]}let X=By(j.installPath,{throwIfNoEntry:!1});if(!X)throw Error(`Plugin install path does not exist: ${j.installPath}`);if(wJ({pluginPaths:[j.installPath,...j.entryPaths],pluginNames:j.names}),Hy(j.installPath,{recursive:X.isDirectory(),force:!0}),Py(j),j.installed)Ny(j.installPath);return{name:W||j.names[0]||t0(j.installPath),installPath:j.installPath,removedPaths:[j.installPath],entryPaths:j.entryPaths}}var mG={};w(mG,{updateLocalProvider:()=>u9,saveLocalProviderSettings:()=>Vj,saveLocalProviderOAuthCredentials:()=>Kj,resolveLocalClineAuthToken:()=>Fj,refreshProviderModelsFromSource:()=>Hj,normalizeOAuthProvider:()=>Bj,loginLocalProvider:()=>Aj,loginAndSaveLocalProviderOAuthCredentials:()=>Gj,listLocalProviders:()=>fj,getLocalProviderModels:()=>Yj,ensureCustomProvidersLoaded:()=>m9,deleteLocalProvider:()=>d9,addLocalProvider:()=>Xj});import*as N0 from"@cline/llms";import{existsSync as Sy,mkdirSync as Cy,readFileSync as yy,writeFileSync as Ey}from"node:fs";import{mkdir as by,readFile as hy,writeFile as ky}from"node:fs/promises";import{dirname as Qj,join as Iy}from"node:path";import*as I0 from"@cline/llms";import{ModelCapabilitySchema as xy,ProviderCapabilitySchema as gy,ProviderClientSchema as my,ProviderProtocolSchema as vy}from"@cline/shared";import{z as n}from"zod";var cy=n.object({id:n.string().optional(),name:n.string().optional(),maxTokens:n.number().optional(),contextWindow:n.number().optional(),maxInputTokens:n.number().optional(),capabilities:n.array(xy).optional(),supportsVision:n.boolean().optional(),supportsAttachments:n.boolean().optional(),supportsReasoning:n.boolean().optional()}).passthrough(),uy=n.object({name:n.string(),baseUrl:n.string(),defaultModelId:n.string().optional(),protocol:vy.optional(),client:my.optional(),capabilities:n.array(gy).optional(),modelsSourceUrl:n.string().optional()}).passthrough(),zG=n.object({provider:uy.optional(),models:n.record(n.string(),cy).optional()}).passthrough(),_G=n.object({version:n.literal(1),providers:n.record(n.string(),zG)}),dy=n.object({version:n.literal(1),providers:n.record(n.string(),n.unknown())}),k9=new Set;function OG($){return $.split(/[-_]/).filter(Boolean).map((J)=>J.charAt(0).toUpperCase()+J.slice(1)).join(" ")}function b2($){return Iy(Qj($.getFilePath()),"models.json")}function I9(){return{version:1,providers:{}}}function TG($){let J=dy.safeParse($);if(!J.success)return I9();let Q={};for(let[Z,W]of Object.entries(J.data.providers)){let j=zG.safeParse(W);if(j.success)Q[Z]=j.data}return{version:1,providers:Q}}function Zj($){if(!Sy($))return I9();try{let J=yy($,"utf8");return TG(JSON.parse(J))}catch{}return I9()}async function Y4($){try{let J=await hy($,"utf8");return TG(JSON.parse(J))}catch{}return I9()}function MG($,J){Cy(Qj($),{recursive:!0});let Q=_G.parse(J);Ey($,`${JSON.stringify(Q,null,2)}
|
|
736
|
+
`,"utf8")}async function x9($,J){await by(Qj($),{recursive:!0});let Q=_G.parse(J);await ky($,`${JSON.stringify(Q,null,2)}
|
|
737
|
+
`,"utf8")}function qG($,J){return{id:$,name:J.name??$,supportsAttachments:J.capabilities?.includes("files"),supportsVision:J.capabilities?.includes("images"),supportsReasoning:J.capabilities?.includes("reasoning")||J.thinkingConfig!=null}}function PG($){if(!$||$.length===0)return;let J=new Set;if($.includes("reasoning"))J.add("reasoning");if($.includes("prompt-cache"))J.add("prompt-cache");if($.includes("tools"))J.add("tools");return J.size>0?[...J]:void 0}function NG($){let J=new Set;if(!$||$.length===0)return[...J];if($.includes("streaming"))J.add("streaming");if($.includes("tools"))J.add("tools");if($.includes("reasoning"))J.add("reasoning");if($.includes("prompt-cache"))J.add("prompt-cache");if($.includes("vision"))J.add("images"),J.add("files");return[...J]}function ly($){return $!=null&&typeof $.name==="string"&&typeof $.baseUrl==="string"}function wG($,J){return $??J??"openai-chat"}function SG($,J,Q){return $??Q??(J==="openai-responses"?"openai":"openai-compatible")}function CG($,J,Q){let Z=new Set(J?.capabilities??Q??[]);if(J?.supportsVision)Z.add("images");if(J?.supportsAttachments)Z.add("files");if(J?.supportsReasoning)Z.add("reasoning");return{id:$,name:J?.name??$,maxTokens:J?.maxTokens,contextWindow:J?.contextWindow,maxInputTokens:J?.maxInputTokens,capabilities:Z.size>0?[...Z]:void 0}}function py($,J){for(let[Q,Z]of Object.entries(J??{})){let W=Z.id?.trim()||Q.trim();if(!W)continue;I0.registerModel($,W,CG(W,Z))}}function ry($,J,Q){return{...J??{},id:$,name:J?.name??$,capabilities:J?.capabilities??Q}}function iy($){return Object.assign({},...I0.resolveProviderModelCatalogKeys($).map((Q)=>I0.getGeneratedModelsForProvider(Q)))}function ny($){let J=$.provider.trim();if(!J||I0.isBuiltInProviderId(J))return;let Q=$.baseUrl?.trim();if(!Q)return;let Z=I0.MODEL_COLLECTIONS_BY_PROVIDER_ID[J],W=iy(J),j=NG($.capabilities),X=j.length>0?j:void 0,f=$.model?.trim(),Y={...W,...Z?.models??{}};if(f)Y[f]=ry(f,Y[f],X);let V=Object.keys(Y).filter(Boolean),H=f||V[0];if(!H)return;let B=wG($.protocol,Z?.provider.protocol),A=SG($.client,B,Z?.provider.client);I0.registerProvider({provider:{id:J,name:Z?.provider.name??OG(J),description:Z?.provider.description,protocol:B,client:A,baseUrl:Q,modelsSourceUrl:Z?.provider.modelsSourceUrl,defaultModelId:H,capabilities:PG($.capabilities)??Z?.provider.capabilities,source:"file"},models:Y})}function g9($){for(let J of Object.values($.providers))ny(J.settings)}function SJ($,J){let Q=J.models??{};if(!ly(J.provider)){py($,Q);return}let Z=NG(J.provider.capabilities),W=Object.entries(Q).map(([V,H])=>({id:H.id?.trim()||V.trim(),model:H})).filter(({id:V})=>V.length>0),j=J.provider.defaultModelId?.trim()||W[0]?.id||"default",X=wG(J.provider.protocol,void 0),f=SG(J.provider.client,X,void 0),Y=Object.fromEntries(W.map(({id:V,model:H})=>[V,{...CG(V,H,Z.length>0?Z:void 0),status:"active"}]));I0.registerProvider({provider:{id:$,name:J.provider.name.trim()||OG($),protocol:X,client:f,baseUrl:J.provider.baseUrl,modelsSourceUrl:J.provider.modelsSourceUrl,defaultModelId:j,capabilities:PG(J.provider.capabilities),source:"file"},models:Y})}function yG($){let J=b2($);if(k9.has(J))return;let Q=Zj(J);for(let[Z,W]of Object.entries(Q.providers))SJ(Z,W);k9.add(J)}async function m9($){let J=b2($);if(k9.has(J))return;let Q=await Y4(J);for(let[Z,W]of Object.entries(Q.providers))SJ(Z,W);k9.add(J)}var ay="cline-pass";function sy($){return $.apiKey??$.auth?.apiKey}function oy($){return($.auth?.accessToken?.trim()??"").length>0}function bG($){return $.split(/[-_]/).filter(Boolean).map((J)=>J.charAt(0).toUpperCase()+J.slice(1)).join(" ")}function ty($){let J=$.split(/\s+/).filter(Boolean);if(J.length===0)return"?";if(J.length===1)return J[0].slice(0,2).toUpperCase();return`${J[0][0]}${J[1][0]}`.toUpperCase()}function ey($){let J=["#c4956a","#6b8aad","#e8963a","#5b9bd5","#6bbd7b","#9b7dd4","#d07f68","#57a6a1"],Q=0;for(let Z of $)Q=Q*31+Z.charCodeAt(0)>>>0;return J[Q%J.length]}function hG($){return Object.entries($).sort(([J],[Q])=>J.localeCompare(Q)).map(([J,Q])=>qG(J,Q))}async function $E($,J){let Q=await N0.getModelsForProvider($);if(!J)return Q;let Z=await L6($,{loadPrivateOnAuth:!0,failOnError:!1},J);return Z?.knownModels?{...Q,...Z.knownModels}:Q}function Wj($){return[...new Set(($??[]).map((J)=>J.trim()).filter(Boolean))]}function JE($){if(!$?.length)return;return[...new Set($)]}function QE($,J){return JE([...$??[],...J??[]])}function ZE($){let J=$?.popularRank;return typeof J==="number"&&Number.isFinite(J)?J:Number.MAX_SAFE_INTEGER}function WE($){if(!$||typeof $!=="object")return!1;let J=$;return typeof J.path==="string"&&J.path.trim().length>0&&typeof J.label==="string"&&J.label.trim().length>0&&["text","password","url","number","select","boolean"].includes(String(J.type))}function jE($){let J=$?.configFields;if(!Array.isArray(J))return;return J.filter(WE)}var v9={path:"apiKey",label:"API Key",type:"password",placeholder:"Enter API key...",description:"API key issued by the provider.",secret:!0},EG={path:"baseUrl",label:"Base URL",type:"url",placeholder:"https://...",description:"Base endpoint used for provider requests."};function XE($){if(!$)return[v9];if($.source!=="system")return $.baseUrl?[v9,EG]:[v9];let J=[];if($.env?.length)J.push(v9);if($.baseUrl)J.push(EG);return J}function fE($,J){return J.split(".").reduce((Q,Z)=>{if(!Q||typeof Q!=="object")return;return Q[Z]},$)}function YE($){if(typeof $==="string"||typeof $==="number"||typeof $==="boolean"||$===null)return $;return}function VE($,J,Q){if(!$?.length)return;let Z={};for(let W of $){let X=YE(W.path==="baseUrl"&&J?.baseUrl===void 0?Q?.baseUrl:fE(J,W.path))??W.defaultValue;if(X!==void 0)Z[W.path]=X}return Z}function kG($){let J=Object.entries($??{}).filter(([Q])=>Q.trim().length>0);return J.length>0?Object.fromEntries(J):void 0}function jj($,J){let Q=J?.includes("vision")??!1,Z=J?.includes("reasoning")??!1;return Object.fromEntries($.map((W)=>[W,{id:W,name:W,supportsVision:Q,supportsAttachments:Q,supportsReasoning:Z}]))}async function IG($){if(!$.shouldRecompute)return $.fallbackModelIds??[];let J=$.modelsSourceUrl?await n5($.modelsSourceUrl,$.providerId):[];return[...new Set([...$.explicitModels??[],...J])]}function xG($,J){let Q=$.read(),Z=!1;if(Q.providers[J])delete Q.providers[J],Z=!0;if(Q.lastUsedProvider===J)delete Q.lastUsedProvider,Z=!0;if(Z)$.write(Q);N0.unregisterProvider(J)}async function Xj($,J){let Q=J.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let Z=J.baseUrl.trim(),W=J.apiKey?.trim()??"";if(!Z&&!W){let G=b2($);if((await Y4(G)).providers[Q]){let D=await d9($,{providerId:Q});return{providerId:Q,settingsPath:D.settingsPath,modelsPath:D.modelsPath,modelsCount:0}}return xG($,Q),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:G,modelsCount:0}}if(N0.hasProvider(Q))throw Error(`provider "${Q}" already exists`);let j=J.name.trim();if(!j)throw Error("name is required");if(!Z)throw Error("baseUrl is required");let X=Wj(J.models),f=J.modelsSourceUrl?.trim(),Y=await IG({providerId:Q,explicitModels:X,modelsSourceUrl:f,shouldRecompute:!0});if(Y.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let V=J.defaultModelId?.trim()&&Y.includes(J.defaultModelId.trim())?J.defaultModelId.trim():Y[0],H=J.capabilities?.length?[...new Set(J.capabilities)]:void 0,B=kG(J.headers);$.saveProviderSettings({provider:Q,apiKey:W||void 0,baseUrl:Z,headers:B,timeout:J.timeoutMs,model:V,protocol:J.protocol,client:J.client},{setLastUsed:!1});let A=b2($),K=await Y4(A);return K.providers[Q]={provider:{name:j,baseUrl:Z,defaultModelId:V,protocol:J.protocol,client:J.client,capabilities:H,modelsSourceUrl:f},models:jj(Y,H)},await x9(A,K),SJ(Q,K.providers[Q]),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:A,modelsCount:Y.length}}async function u9($,J){let Q=J.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let Z=b2($),W=await Y4(Z),j=W.providers[Q];if(!j){let T=$.getProviderSettings(Q);if(!T)throw Error(`provider "${Q}" does not exist`);let z=J.modelsSourceUrl?.trim(),L=Wj(J.models)[0]??T.model?.trim();if(!L&&!z)throw Error(`provider "${Q}" cannot be updated because no model is configured`);j={provider:{name:J.name?.trim()||bG(Q),baseUrl:J.baseUrl?.trim()??T.baseUrl?.trim()??"",defaultModelId:L,protocol:T.protocol,client:T.client,capabilities:T.capabilities},models:L?jj([L],T.capabilities):{}}}if(!j.provider)throw Error(`provider "${Q}" cannot be updated because it is a model overlay (no provider metadata)`);let X=J.name?.trim()??j.provider.name.trim();if(!X)throw Error("name is required");let f=J.baseUrl?.trim()??j.provider.baseUrl.trim();if(!f)throw Error("baseUrl is required");let Y=J.capabilities===void 0?j.provider.capabilities:J.capabilities===null?void 0:[...new Set(J.capabilities)],V=J.protocol===void 0?j.provider.protocol:J.protocol??void 0,H=J.client===void 0?j.provider.client:J.client??void 0,B=Wj(J.models),A=J.modelsSourceUrl===void 0?j.provider.modelsSourceUrl:J.modelsSourceUrl?.trim()||void 0,K=J.models!==void 0||J.modelsSourceUrl!==void 0&&!!A,G=Object.keys(j.models??{}).map((T)=>T.trim()).filter(Boolean),R=await IG({providerId:Q,explicitModels:B,modelsSourceUrl:A,fallbackModelIds:G,shouldRecompute:K});if(R.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let D=J.defaultModelId===void 0?j.provider.defaultModelId?.trim():J.defaultModelId?.trim(),U=D&&R.includes(D)?D:R[0],O={...$.getProviderSettings(Q)??{},provider:Q,baseUrl:f,model:U};if(V)O.protocol=V;else delete O.protocol;if(H)O.client=H;else delete O.client;if(J.apiKey!==void 0){let T=J.apiKey?.trim()??"";if(T)O.apiKey=T;else delete O.apiKey}if(J.headers!==void 0){let T=kG(J.headers);if(T)O.headers=T;else delete O.headers}if(J.timeoutMs!==void 0)if(typeof J.timeoutMs==="number")O.timeout=J.timeoutMs;else delete O.timeout;return $.saveProviderSettings(O,{setLastUsed:!1}),W.providers[Q]={provider:{name:X,baseUrl:f,defaultModelId:U,protocol:V,client:H,capabilities:Y,modelsSourceUrl:A},models:jj(R,Y)},await x9(Z,W),SJ(Q,W.providers[Q]),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:Z,modelsCount:R.length}}async function d9($,J){let Q=J.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let Z=b2($),W=await Y4(Z);if(!W.providers[Q])throw Error(`provider "${Q}" does not exist`);return delete W.providers[Q],await x9(Z,W),N0.unregisterProvider(Q),xG($,Q),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:Z}}async function fj($,J={}){let Q=$.read(),Z=N0.getProviderIds(),W=await Promise.all(Z.map(async(X)=>{let[f,Y]=await Promise.all([N0.getProvider(X),N0.getModelsForProvider(X)]),V=hG(Y),H=Q.providers[X]?.settings,B=f?.name??bG(X),A=QE(f?.capabilities,H?.capabilities),K=jE(f?.metadata)??XE(f);return{provider:{id:X,name:B,models:V.length,color:ey(X),letter:ty(B),enabled:Boolean(H),apiKey:H?sy(H):void 0,oauthAccessTokenPresent:H?oy(H):void 0,baseUrl:H?.baseUrl??f?.baseUrl,defaultModelId:f?.defaultModelId,protocol:H?.protocol??f?.protocol,client:H?.client??f?.client,capabilities:A,authDescription:"This provider uses API keys for authentication.",baseUrlDescription:"The base endpoint to use for provider requests.",configFields:K,configValues:VE(K,H,f),modelList:V},rank:ZE(f?.metadata)}}));W.sort((X,f)=>{if(X.rank!==f.rank)return X.rank-f.rank;return X.provider.name.localeCompare(f.provider.name)||X.provider.id.localeCompare(f.provider.id)});let j=W.map((X)=>X.provider);if(J.isClinePassEnabled!==!0)j=j.filter((X)=>X.id!==ay);return{providers:j,settingsPath:$.getFilePath()}}async function Yj($,J){let Q=$.trim(),Z=await $E(Q,J),W=hG(Z);return{providerId:Q,models:W}}function c9($){return $!=null&&typeof $==="object"&&!Array.isArray($)}function gG($,J){if(!c9(J))return c9($)?{...$}:void 0;let Q=c9($)?{...$}:{};for(let[Z,W]of Object.entries(J)){if(W==null||W===""){delete Q[Z];continue}if(c9(W)){let j=gG(Q[Z],W);if(j&&Object.keys(j).length>0)Q[Z]=j;else delete Q[Z];continue}Q[Z]=W}return Object.keys(Q).length>0?Q:void 0}function Vj($,J){let Q=J.providerId.trim();if(J.enabled===!1){let j=$.read();if(delete j.providers[Q],j.lastUsedProvider===Q)delete j.lastUsedProvider;return $.write(j),{providerId:Q,enabled:!1,settingsPath:$.getFilePath()}}let W={...$.getProviderSettings(Q)??{},provider:Q};for(let j of["apiKey","baseUrl","model","region"])if(Object.hasOwn(J,j)&&typeof J[j]==="string")if(J[j].trim().length===0)delete W[j];else W[j]=J[j];for(let j of["maxTokens","contextWindow","timeout","apiLine","protocol","client","routingProviderId","capabilities"])if(Object.hasOwn(J,j))W[j]=J[j];for(let j of["auth","headers","reasoning","aws","gcp","azure","sap","oca"])if(Object.hasOwn(J,j)&&J[j]!=null){let X=gG(W[j],J[j]);if(X)W[j]=X;else delete W[j]}return $.saveProviderSettings(W,{setLastUsed:!1}),{providerId:Q,enabled:!0,settingsPath:$.getFilePath()}}async function Hj($,J){let Q=J.trim(),Z=$.getProviderSettings(Q),j=N0.MODEL_COLLECTIONS_BY_PROVIDER_ID[Q]?.provider,X=Z?.baseUrl?.trim()||j?.baseUrl?.trim(),f=a5(X,j?.baseUrl,j?.modelsSourceUrl);if(!Z||!j||!X||!f)return{providerId:Q,refreshed:!1};let Y=await u9($,{providerId:Q,name:j.name,baseUrl:X,apiKey:Z.apiKey,headers:Z.headers??null,timeoutMs:Z.timeout??null,modelsSourceUrl:f,protocol:Z.protocol??j.protocol??null,client:Z.client??j.client??null,capabilities:Z.capabilities??null});return{providerId:Q,refreshed:!0,modelsCount:Y.modelsCount}}function Bj($){let J=$.trim().toLowerCase(),Q=W0(J);if(Q)return Q.providerId;throw Error(`provider "${$}" does not support OAuth login`)}async function Aj($,J,Q,Z){let W=W0($);if(!W)throw Error(`provider "${$}" does not support OAuth login`);let j=M8({onPrompt:async(X)=>X.defaultValue??"",openUrl:Q,onOpenUrlError:({error:X})=>{throw X instanceof Error?X:Error(String(X))}});return W.login({settings:J,callbacks:j,telemetry:Z})}function Kj($,J,Q,Z,W){return x$({manager:$,providerId:J,settings:Q,credentials:Z,setLastUsed:W?.setLastUsed})}async function Gj($,J,Q,Z){let W=M8({onPrompt:async(j)=>j.defaultValue??"",openUrl:Q,onOpenUrlError:({error:j})=>{throw j instanceof Error?j:Error(String(j))}});return z4($,J,{callbacks:W,telemetry:Z})}function Fj($){let J=$?.auth?.accessToken?.trim()||$?.apiKey?.trim();return J&&J.length>0?J:void 0}var vG={};w(vG,{getProviderConfigFields:()=>Dj});import*as l9 from"@cline/llms";var HE=["apiKey","baseUrl","azureApiVersion","awsRegion","awsProfile","gcpProjectId","gcpRegion","sapClientId","sapClientSecret","sapTokenUrl","sapResourceGroup","sapDeploymentId"],BE={"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 AE($,J){let Q={};for(let Z of HE){let W=$[Z],j=J[Z];if(W||j)Q[Z]={...W,...j}}return Q}function KE($){let J=BE[$.providerId];if(!J)return $;return{...$,description:J.description??$.description,fields:J.mode==="replace"?J.fields:AE($.fields,J.fields)}}var GE=new Set(["ollama","lmstudio","litellm","openai-compatible"]);function FE($,J){if(!J?.provider.baseUrl)return!1;if(J.provider.source!=="system")return!0;return GE.has($)}function Dj($){let J=l9.normalizeProviderId($);if(I$(J))return{providerId:J,authMethod:"oauth",fields:{}};let Q=l9.MODEL_COLLECTIONS_BY_PROVIDER_ID[J];if(Q?.provider.capabilities?.includes("local-auth"))return{providerId:J,authMethod:"local",fields:{}};let Z=Q?.provider.baseUrl,W={apiKey:{}};if(FE(J,Q))W.baseUrl={defaultValue:Z};return KE({providerId:J,authMethod:"api-key",fields:W})}var lG={};w(lG,{resolveLegacyClineAuth:()=>Lj,migrateLegacyProviderSettings:()=>CJ});import{existsSync as DE,readFileSync as UE}from"node:fs";import{dirname as RE,join as Uj}from"node:path";import*as r9 from"@cline/llms";import{resolveClineDataDir as LE}from"@cline/shared/storage";var p9="openai",dG=r9.BUILT_IN_PROVIDER.OPENAI_COMPATIBLE,cG=128000;function Lj($){let J=$?.trim();if(!J)return;try{let Q=JSON.parse(J);if(!Q)return;let Z=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:Z,accountId:Q.userInfo?.id}}catch{return}}function E($){let J=$?.trim();return J?J:void 0}function uG($){if(!DE($))return;try{let J=UE($,"utf8"),Q=JSON.parse(J);if(Q&&typeof Q==="object"&&!Array.isArray(Q))return Q}catch{}return}function zE($){let J=$.dataDir??LE(),Q=$.globalStatePath??Uj(J,"globalState.json"),Z=$.secretsPath??Uj(J,"secrets.json"),W=uG(Q),j=uG(Z);if(!W&&!j)return;return{globalState:W??{},secrets:j??{}}}function Rj($){if($===p9)return dG;return $}function _E($,J,Q,Z){let W=Q==="plan"?"planMode":"actMode",j=J===Z?E(Q==="plan"?$.planModeApiModelId:$.actModeApiModelId):void 0,f={openrouter:`${W}OpenRouterModelId`,cline:`${W}ClineModelId`,openai:`${W}OpenAiModelId`,ollama:`${W}OllamaModelId`,lmstudio:`${W}LmStudioModelId`,litellm:`${W}LiteLlmModelId`,requesty:`${W}RequestyModelId`,together:`${W}TogetherModelId`,fireworks:`${W}FireworksModelId`,sapaicore:`${W}SapAiCoreModelId`,groq:`${W}GroqModelId`,baseten:`${W}BasetenModelId`,huggingface:`${W}HuggingFaceModelId`,"huawei-cloud-maas":`${W}HuaweiCloudMaasModelId`,oca:`${W}OcaModelId`,aihubmix:`${W}AihubmixModelId`,hicap:`${W}HicapModelId`,nousResearch:`${W}NousResearchModelId`,"vercel-ai-gateway":`${W}VercelAiGatewayModelId`}[J];return(f?E(typeof $[f]==="string"?$[f]:void 0):void 0)??j}function OE($,J,Q){let Z=Q==="plan"?$.planModeReasoningEffort:$.actModeReasoningEffort,W=Q==="plan"?$.geminiPlanModeThinkingLevel:$.geminiActModeThinkingLevel,j=Q==="plan"?$.planModeThinkingBudgetTokens:$.actModeThinkingBudgetTokens,X=(J==="gemini"?W:void 0)??Z,f=X==="none"||X==="low"||X==="medium"||X==="high"?X:void 0,Y=typeof j==="number"&&Number.isInteger(j)&&j>0?j:void 0;if(!f&&Y===void 0)return;return{...f?{effort:f}:{},...Y!==void 0?{budgetTokens:Y}:{}}}function TE($){let J=$["openai-codex-oauth-credentials"];if(!J)return;try{let Q=JSON.parse(J),Z=E(Q.access_token),W=E(Q.refresh_token),j=E(Q.accountId);if(!Z&&!W&&!j)return;return{...Z?{apiKey:Z}:{},auth:{...Z?{accessToken:Z}:{},...W?{refreshToken:W}:{},...j?{accountId:j}:{}}}}catch{return}}function ME($){let J=r9.getGeneratedModelsForProvider($);return Object.keys(J)[0]??void 0}function qE($,J,Q,Z){let W=Rj($),j=E(Z==="plan"?J.planModeApiProvider:J.actModeApiProvider),X=_E(J,$,Z,j)??ME(W),f=OE(J,W,Z),Y=typeof J.requestTimeoutMs==="number"&&Number.isInteger(J.requestTimeoutMs)&&J.requestTimeoutMs>0?J.requestTimeoutMs:void 0,V={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},H={};if($==="openai-codex")Object.assign(H,TE(Q));if($==="cline")try{let U=E(Q["cline:clineAccountId"]);if(U)H.auth={...H.auth??{},...Lj(U)}}catch{}if($===p9&&J.openAiHeaders)H.headers=J.openAiHeaders;if($==="bedrock"){let U=J.awsAuthentication==="profile"||J.awsUseProfile===!0;H.aws={accessKey:E(Q.awsAccessKey),secretKey:E(Q.awsSecretKey),sessionToken:E(Q.awsSessionToken),region:E(J.awsRegion),authentication:J.awsAuthentication,profile:U?E(J.awsProfile):void 0,usePromptCache:J.awsBedrockUsePromptCache,useCrossRegionInference:J.awsUseCrossRegionInference,useGlobalInference:J.awsUseGlobalInference,endpoint:E(J.awsBedrockEndpoint),customModelBaseId:E(Z==="plan"?J.planModeAwsBedrockCustomModelBaseId:J.actModeAwsBedrockCustomModelBaseId)}}if($==="vertex")H.gcp={projectId:E(J.vertexProjectId),region:E(J.vertexRegion)};if($===p9&&(J.azureApiVersion||J.azureIdentity!==void 0))H.azure={apiVersion:E(J.azureApiVersion),useIdentity:J.azureIdentity};if($==="sapaicore")H.sap={clientId:E(Q.sapAiCoreClientId),clientSecret:E(Q.sapAiCoreClientSecret),tokenUrl:E(J.sapAiCoreTokenUrl),resourceGroup:E(J.sapAiResourceGroup),deploymentId:E(Z==="plan"?J.planModeSapAiCoreDeploymentId:J.actModeSapAiCoreDeploymentId),useOrchestrationMode:J.sapAiCoreUseOrchestrationMode};if($==="oca"){H.oca={mode:J.ocaMode};let U=E(Q.ocaRefreshToken);if(U)H.auth={...H.auth??{},refreshToken:U}}if($==="qwen")H.apiLine=J.qwenApiLine;if($==="moonshot")H.apiLine=J.moonshotApiLine;if($==="zai")H.apiLine=J.zaiApiLine;if($==="minimax")H.apiLine=J.minimaxApiLine;let B={anthropic:J.anthropicBaseUrl,openai:J.openAiBaseUrl,ollama:J.ollamaBaseUrl,lmstudio:J.lmStudioBaseUrl,litellm:J.liteLlmBaseUrl,gemini:J.geminiBaseUrl,requesty:J.requestyBaseUrl,asksage:J.asksageApiUrl,dify:J.difyBaseUrl,oca:J.ocaBaseUrl,aihubmix:J.aihubmixBaseUrl,sapaicore:J.sapAiCoreBaseUrl},A=E(V[$]),K=E(B[$]),G={provider:W,...A?{apiKey:A}:{},...X?{model:X}:{},...K?{baseUrl:K}:{},...f?{reasoning:f}:{},...Y?{timeout:Y}:{},...H},R=z8.safeParse(G);if(!R.success)return;return Object.keys(G).filter((U)=>U!=="provider").length>0?R.data:void 0}function PE($,J){if($!==dG)return;if(!J.baseUrl||!J.model)return;return{provider:{name:"OpenAI Compatible",baseUrl:J.baseUrl,defaultModelId:J.model},models:{[J.model]:{id:J.model,name:J.model,contextWindow:cG,maxInputTokens:cG,capabilities:["streaming","tools","images"]}}}}function NE($,J){let Q=new Set;for(let W of[$.actModeApiProvider,$.planModeApiProvider]){let j=E(W);if(j)Q.add(j)}if(E(J.apiKey))Q.add("anthropic");if(E(J.openRouterApiKey))Q.add("openrouter");if(E(J.openAiApiKey))Q.add(p9);if(E(J.openAiNativeApiKey))Q.add("openai-native");if(E(J["openai-codex-oauth-credentials"]))Q.add("openai-codex");if(E(J.geminiApiKey))Q.add("gemini");if(E(J.ollamaApiKey))Q.add("ollama");if(E(J.awsAccessKey)||E(J.awsBedrockApiKey)||$.awsAuthentication!==void 0||$.awsUseProfile===!0||E($.awsProfile))Q.add("bedrock");if(E($.vertexProjectId)||E($.vertexRegion))Q.add("vertex");if(E(J.clineApiKey))Q.add("cline");let Z=Lj(E(J["cline:clineAccountId"]));if(Z?.accessToken||Z?.refreshToken||Z?.accountId)Q.add("cline");if(E(J.ocaApiKey))Q.add("oca");if(E(J.sapAiCoreClientId)||E(J.sapAiCoreClientSecret)||E($.sapAiCoreTokenUrl)||E($.sapAiCoreBaseUrl)||E($.sapAiResourceGroup)||$.sapAiCoreUseOrchestrationMode!==void 0)Q.add("sapaicore");return Q}function CJ($){let J=$.providerSettingsManager.read(),Q=zE($);if(!Q)return{migrated:!1,providerCount:Object.keys(J.providers).length,lastUsedProvider:J.lastUsedProvider};let{globalState:Z,secrets:W}=Q,j=Z.mode==="plan"?"plan":"act",X=NE(Z,W),f=z$();f.providers={...J.providers},f.lastUsedProvider=J.lastUsedProvider;let Y=new Date().toISOString(),V=0,H=Uj(RE($.providerSettingsManager.getFilePath()),"models.json"),B=Zj(H),A=0;for(let R of X){let D=Rj(R);if(f.providers[D])continue;let U=qE(R,Z,W,j);if(!U)continue;f.providers[D]={settings:U,updatedAt:Y,tokenSource:"migration"},V+=1;let F=PE(D,U);if(F&&!B.providers[D])B.providers[D]=F,A+=1}if(V===0&&A===0)return{migrated:!1,providerCount:Object.keys(J.providers).length,lastUsedProvider:J.lastUsedProvider};let K=E(j==="plan"?Z.planModeApiProvider:Z.actModeApiProvider),G=K?Rj(K):void 0;if(f.lastUsedProvider=J.lastUsedProvider??(G&&f.providers[G]?G:Object.keys(f.providers)[0]),$.providerSettingsManager.write(f),A>0)MG(H,B);return{migrated:V>0||A>0,providerCount:Object.keys(f.providers).length,lastUsedProvider:f.lastUsedProvider}}M9();O0();G9();var pG={};w(pG,{FileTeamPersistenceStore:()=>i9});import{appendFileSync as wE,existsSync as zj,mkdirSync as SE,readFileSync as CE,renameSync as yE,unlinkSync as EE,writeFileSync as bE}from"node:fs";import{join as _j}from"node:path";import{resolveTeamDataDir as hE}from"@cline/shared/storage";function kE($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}class i9{dirPath;statePath;taskHistoryPath;teammateSpecs=new Map;constructor($){let J=kE($.teamName),Q=$.baseDir?.trim()||hE();this.dirPath=_j(Q,J),this.statePath=_j(this.dirPath,"state.json"),this.taskHistoryPath=_j(this.dirPath,"task-history.jsonl")}loadState(){if(!zj(this.statePath))return;try{let $=CE(this.statePath,"utf8"),J=JSON.parse($);if(J.version!==1||!J.teamState)return;for(let Q of J.teammates??[])this.teammateSpecs.set(Q.agentId,Q);return yA(J.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 J={version:1,updatedAt:new Date().toISOString(),teamState:$.exportState(),teammates:Array.from(this.teammateSpecs.values())},Q=`${this.statePath}.tmp`;bE(Q,`${JSON.stringify(J,null,2)}
|
|
738
738
|
`,"utf8"),yE(Q,this.statePath)}appendTaskHistory($){let J={};switch($.type){case"team_task_updated":J=$.task;break;case"team_message":J={agentId:$.message.fromAgentId,toAgentId:$.message.toAgentId,subject:$.message.subject,taskId:$.message.taskId};break;case"team_mission_log":J={agentId:$.entry.agentId,kind:$.entry.kind,summary:$.entry.summary,taskId:$.entry.taskId};break;case"teammate_spawned":case"teammate_shutdown":case"task_start":J={agentId:$.agentId,message:"message"in $?$.message:void 0};break;case"task_end":J={agentId:$.agentId,finishReason:$.result?.finishReason,error:$.error?.message};break;case"agent_event":J={agentId:$.agentId,eventType:$.event.type};break}this.ensureDir(),wE(this.taskHistoryPath,`${JSON.stringify({ts:new Date().toISOString(),type:$.type,task:J})}
|
|
739
|
-
`,"utf8")}ensureDir(){if(!zj(this.dirPath))SE(this.dirPath,{recursive:!0})}hasPersistableState($){let J=$.exportState();if(this.teammateSpecs.size>0)return!0;if(J.members.some((Q)=>Q.role==="teammate"))return!0;return J.tasks.length>0||J.mailbox.length>0||J.missionLog.length>0}clearPersistedState(){if(zj(this.statePath))EE(this.statePath)}}var rG={};w(rG,{ChatViewStateSchema:()=>Oj,ChatSummarySchema:()=>tQ,ChatSessionStatusSchema:()=>aQ,ChatSessionConfigSchema:()=>nQ,ChatMessageSchema:()=>oQ,ChatMessageRoleSchema:()=>sQ});import{z as h}from"zod";var nQ=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()}),aQ=h.enum(["idle","starting","running","pending","stopping","completed","cancelled","failed","error"]),sQ=h.enum(["user","assistant","tool","system","status","error"]),oQ=h.object({id:h.string().min(1),sessionId:h.string().nullable(),role:sQ,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()}),tQ=h.object({toolCalls:h.number().int().nonnegative(),tokensIn:h.number().int().nonnegative(),tokensOut:h.number().int().nonnegative()}),Oj=h.object({sessionId:h.string().nullable(),status:aQ,config:nQ,messages:h.array(oQ),rawTranscript:h.string(),error:h.string().nullable(),summary:tQ});var iG={};w(iG,{CORE_BUILD_VERSION:()=>Tj});var Tj=PB;import{Agent as Mb,createAgentRuntime as qb}from"@cline/agents";var aG={};w(aG,{fetchClineRecommendedModels:()=>Mj,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>eQ});import{getClineEnvironmentConfig as IE}from"@cline/shared";var xE=5000,eQ={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"]}]};function gE($){return{recommended:$.recommended.map((J)=>({...J,tags:[...J.tags]})),free:$.free.map((J)=>({...J,tags:[...J.tags]}))}}function nG($){if(!$||typeof $!=="object")return null;let J=$;if(typeof J.id!=="string"||J.id.length===0)return null;return{id:J.id,name:typeof J.name==="string"&&J.name.length>0?J.name:J.id,description:typeof J.description==="string"?J.description:"",tags:Array.isArray(J.tags)?J.tags.filter((Q)=>typeof Q==="string"):[]}}function mE($){if(!$||typeof $!=="object")return null;let J=$,Q=Array.isArray(J.recommended)?J.recommended:[],Z=Array.isArray(J.free)?J.free:[],W=Q.map(nG).filter((X)=>X!==null),j=Z.map(nG).filter((X)=>X!==null);if(W.length===0&&j.length===0)return null;return{recommended:W,free:j}}function vE($){let J=$.baseUrl?.trim();if(J)return J;let Q=IE().apiBaseUrl;try{return($.providerSettingsManager??new _1).getProviderSettings("cline")?.baseUrl?.trim()||Q}catch{return Q}}async function cE($,J,Q){let Z=new AbortController,W=setTimeout(()=>Z.abort(),Q);try{return await $(J,{signal:Z.signal})}finally{clearTimeout(W)}}async function Mj($={}){try{let J=vE($),Q=$.fetchImpl??fetch,Z=await cE(Q,`${J}/api/v1/ai/cline/recommended-models`,$.timeoutMs??xE);if(!Z.ok)throw Error(`HTTP ${Z.status}`);let W=await Z.json(),j=mE(W);if(j)return j}catch{}return gE(eQ)}var sG={};w(sG,{loadLlmsConfigFromFile:()=>Pj,defineLlmsConfig:()=>qj});import{readFile as uE}from"node:fs/promises";import dE from"node:path";function qj($){return $}async function Pj($){let J=dE.resolve($),Q=await uE(J,"utf8"),Z;try{Z=JSON.parse(Q)}catch(W){let j=W instanceof Error?W.message:String(W);throw Error(`Failed to parse JSON config at "${J}": ${j}`)}return lE(Z,J)}function lE($,J){if(!$||typeof $!=="object")throw Error(`Invalid llms config in "${J}": expected an object.`);let Z=$.providers;if(!Array.isArray(Z))throw Error(`Invalid llms config in "${J}": "providers" must be an array.`);if(!Z.length)throw Error(`Invalid llms config in "${J}": "providers" cannot be empty.`);return $}var QF={};w(QF,{createLlmsSdk:()=>wj,DefaultLlmsSdk:()=>yJ});import{BUILT_IN_PROVIDER_IDS as eG,createHandler as iE,createHandlerAsync as nE,getProviderCollection as aE,hasProvider as $F,registerAsyncHandler as sE,registerHandler as oE,registerModel as tE,registerProvider as JF}from"@cline/llms";function oG($){return $?{...$}:{}}function pE($,J){if($)return $;if(!J)return;let Q=globalThis.process;if(!Q?.env)return;return Q.env[J]}function rE($,J){if(!J.length)throw Error(`Provider "${$}" must include at least one model.`)}function tG($){let J=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:J,defaultModel:$.collection.provider.defaultModelId,modelCount:J.length}}class Nj{providers=new Map;register($){rE($.id,$.models);let J=$.defaultModel??$.models[0];if(!J)throw Error(`Provider "${$.id}" must define a default model.`);if(!$.models.includes(J))throw Error(`Default model "${J}" 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:J,defaults:{...Q?.defaults??{},...oG($.defaults)}})}registerSelectionConfig($){this.register({id:$.id,models:$.models,defaultModel:$.defaultModel,defaults:{apiKey:pE($.apiKey,$.apiKeyEnv),routingProviderId:$.builtinProviderId,baseUrl:$.baseUrl,headers:$.headers,timeoutMs:$.timeoutMs,capabilities:$.capabilities,...oG($.settings)}})}registerModel($,J){let Q=this.providers.get($);if(!Q){this.providers.set($,{id:$,models:new Set([J]),defaultModel:J,defaults:{}});return}Q.models.add(J)}createHandlerConfig($){let J=this.require($.providerId),Q=$.modelId??J.defaultModel;if(!J.models.has(Q))throw Error(`Model "${Q}" is not configured for provider "${$.providerId}".`);return{providerId:$.providerId,modelId:Q,...J.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($,J){return this.providers.get($)?.models.has(J)??!1}require($){let J=this.providers.get($);if(!J)throw Error(`Provider "${$}" is not configured in this SDK instance.`);return J}}class yJ{configuredProviders=new Nj;constructor($){this.applyConfig($)}createHandler($){return iE(this.configuredProviders.createHandlerConfig($))}async createHandlerAsync($){return nE(this.configuredProviders.createHandlerConfig($))}registerProvider($){if(JF($.collection),$.handlerFactory&&$.asyncHandlerFactory)throw Error(`Provider "${$.collection.provider.id}" cannot register both sync and async handlers.`);if($.handlerFactory)oE($.collection.provider.id,$.handlerFactory);if($.asyncHandlerFactory)sE($.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 J=$.exposeModels??Object.keys($.models),Q=$.defaultModel??J[0];if(!Q)throw Error(`Provider "${$.id}" must define a default model.`);JF({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:J,defaultModel:Q,defaults:{routingProviderId:$.builtinProviderId,...$.defaults??{}}})}registerModel($){tE($.providerId,$.modelId,$.info),this.configuredProviders.registerModel($.providerId,$.modelId)}getProviders(){return this.configuredProviders.list()}getBuiltInProviderIds(){return[...eG]}async getBuiltInProviders(){return(await Promise.all(eG.map((J)=>aE(J)))).filter((J)=>J!==void 0).map((J)=>tG({collection:J}))}getModels($){return this.configuredProviders.getModels($)}isProviderConfigured($){return this.configuredProviders.hasProvider($)}isModelConfigured($,J){return this.configuredProviders.hasModel($,J)}applyConfig($){for(let J of $.providers)this.configuredProviders.registerSelectionConfig(J);for(let J of $.models??[])this.registerModel(J);for(let J of $.customProviders??[])this.registerProvider(J);for(let J of this.configuredProviders.list()){let Q=$F(J.id),Z=this.configuredProviders.createHandlerConfig({providerId:J.id,modelId:J.defaultModel}).routingProviderId,W=typeof Z==="string"&&$F(Z);if(!Q&&!W)throw Error(`Provider "${J.id}" is not known. Register it through customProviders/registerProvider, registerBuiltinProvider, or use a built-in provider ID.`)}}}function wj($){return new yJ($)}H3();async function eE(){return Promise.resolve().then(() => (MQ(),JG))}function Cb(){return new Date().toISOString()}var yb="cline",Eb="cline-pass";function bb($){if(XF($)!=="providers.json")return;let J=Cj($);if(XF(J)!=="settings")return;return Cj(J)}class _1{filePath;dataDir;constructor($={}){if(this.filePath=$.filePath??Sb(),this.dataDir=$.dataDir??bb(this.filePath),this.dataDir||!$.filePath)CJ({providerSettingsManager:this,dataDir:this.dataDir});if(yG(this),gQ(this.read()),Sj(this.filePath))try{jF(this.filePath,384)}catch{}}getFilePath(){return this.filePath}read(){if(!Sj(this.filePath))return z$();try{let $=Nb(this.filePath,"utf8"),J=JSON.parse($),Q=_8.safeParse(J);if(Q.success)return gQ(Q.data),Q.data}catch{}return z$()}write($){let J=_8.parse($),Q=Cj(this.filePath);if(!Sj(Q))Pb(Q,{recursive:!0,mode:448});wb(this.filePath,`${JSON.stringify(J,null,2)}
|
|
740
|
-
`,"utf8");try{jF(this.filePath,384)}catch{}gQ(J)}saveProviderSettings($,J={}){let Q=z8.parse($),Z=this.read(),W=Q.provider,j=J.setLastUsed!==!1,X=Z.providers[W],f=J.tokenSource??X?.tokenSource??"manual",Y={...Z,providers:{...Z.providers,[W]:{settings:Q,updatedAt:Cb(),tokenSource:f}},lastUsedProvider:j?W:Z.lastUsedProvider};return this.write(Y),Y}resolveProviderSettings($,J){let Q=$.providers[J]?.settings,W=W0(J)?.storageProviderId;if(!W||W===J)return Q;let j=$.providers[W]?.settings;if(!j)return Q;return z8.parse({...j.auth?{auth:j.auth}:{},...j.apiKey?{apiKey:j.apiKey}:{},...j.baseUrl?{baseUrl:j.baseUrl}:{},...Q??{},provider:J})}getProviderSettings($){let J=this.read();return this.resolveProviderSettings(J,$)}resolveLastUsedProviderId($,J){let Q=$.lastUsedProvider;if(Q===Eb&&J.isClinePassEnabled===!1)return yb;return Q}getLastUsedProviderSettings($={}){let J=this.read(),Q=this.resolveLastUsedProviderId(J,$);if(!Q)return;return this.resolveProviderSettings(J,Q)}getProviderConfig($,J){let Q=this.getProviderSettings($);if(!Q)return;return d0(Q,J)}getLastUsedProviderConfig($={}){let J=this.getLastUsedProviderSettings($);if(!J)return;return d0(J,$)}async refreshCatalog(){try{await R8({})}catch{}}}O0();m8();function hb($,J){let Q=$?.expiresAt,Z=J?.expiresAt;return $?.accessToken===J?.accessToken&&$?.refreshToken===J?.refreshToken&&$?.accountId===J?.accountId&&Q===Z}class $Z 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 yj{providerSettingsManager;telemetry;refreshInFlight=new Map;constructor($){this.providerSettingsManager=$?.providerSettingsManager??new _1,this.telemetry=$?.telemetry}async resolveProviderApiKey($){let J=W0($.providerId);if(!J)return null;return this.resolveWithSingleFlight(J.providerId,J.storageProviderId,$.forceRefresh)}async resolveWithSingleFlight($,J,Q=!1){let Z=this.refreshInFlight.get(J);if(Z)return Z;let W=this.resolveProviderApiKeyInternal($,J,Q).catch((j)=>{throw j}).finally(()=>{this.refreshInFlight.delete(J)});return this.refreshInFlight.set(J,W),W}async resolveProviderApiKeyInternal($,J,Q){let Z=W0($);if(!Z)return null;let W=this.providerSettingsManager.getProviderSettings(J);if(!W)return null;let j=_4($,W);if(!j)return null;let X=await Z.refresh({settings:W,credentials:j,forceRefresh:Q,telemetry:this.telemetry});if(!X)throw new $Z($);let f=x$({manager:this.providerSettingsManager,providerId:$,settings:W,credentials:X,setLastUsed:!1,save:!1}),Y=!hb(W.auth,f.auth);if(Y)this.providerSettingsManager.saveProviderSettings(f,{setLastUsed:!1,tokenSource:"oauth"});return{apiKey:Z.getApiKey(f)??X.access,accountId:X.accountId,refreshed:Y}}}import{normalizeUserInput as kb}from"@cline/shared";import{nanoid as Ib}from"nanoid";class fF{list($){return $?e0($):[]}update($,J){if(!$)return{sessionId:J.sessionId,prompts:[],updated:!1};let Q=J.promptId.trim(),Z=$.pendingPrompts.findIndex((Y)=>Y.id===Q);if(Z<0)return{sessionId:J.sessionId,prompts:e0($),updated:!1};let W=$.pendingPrompts[Z];if(!W)return{sessionId:J.sessionId,prompts:e0($),updated:!1};let j=J.prompt===void 0?W.prompt:kb(J.prompt).trim();if(!j)throw Error("prompt cannot be empty");let X=J.delivery??W.delivery,f={...W,prompt:j,mode:J.mode??W.mode,delivery:X};return $.pendingPrompts.splice(Z,1),xb($,f,Z,W.delivery),{sessionId:J.sessionId,prompts:e0($),prompt:JZ(f),updated:!0}}delete($,J){if(!$)return{sessionId:J.sessionId,prompts:[],removed:!1};let Q=J.promptId.trim(),Z=$.pendingPrompts.findIndex((j)=>j.id===Q);if(Z<0)return{sessionId:J.sessionId,prompts:e0($),removed:!1};let[W]=$.pendingPrompts.splice(Z,1);return{sessionId:J.sessionId,prompts:e0($),prompt:W?JZ(W):void 0,removed:!0}}enqueue($,J){let{prompt:Q,mode:Z,delivery:W,userImages:j,userFiles:X}=J,f=$.pendingPrompts.findIndex((Y)=>Y.prompt===Q);if(f>=0){let[Y]=$.pendingPrompts.splice(f,1),V={...Y,prompt:Q,mode:Z??Y.mode,userImages:j??Y.userImages,userFiles:X??Y.userFiles};if(W==="steer"||Y.delivery==="steer")$.pendingPrompts.unshift({...V,delivery:"steer"});else $.pendingPrompts.push(V)}else{let Y={id:`pending_${Date.now()}_${Ib(5)}`,prompt:Q,mode:Z,delivery:W,userImages:j,userFiles:X};if(W==="steer")$.pendingPrompts.unshift(Y);else $.pendingPrompts.push(Y)}return e0($)}consumeSteer($){let J=$.pendingPrompts.findIndex((Z)=>Z.delivery==="steer");if(J<0)return{prompts:e0($)};let[Q]=$.pendingPrompts.splice(J,1);return{entry:Q,prompts:e0($)}}shiftNext($){return{entry:$.pendingPrompts.shift(),prompts:e0($)}}requeueFront($,J){return $.pendingPrompts.unshift(J),e0($)}clear($){return $.pendingPrompts.length=0,[]}}class Ej{deps;service=new fF;constructor($){this.deps=$}list($){return this.service.list(this.deps.getSession($))}update($){let J=this.deps.getSession($.sessionId);if(!J||J.aborting)return{sessionId:$.sessionId,prompts:[],updated:!1};let Q=this.service.update(J,$);return this.emitPrompts(J),this.scheduleDrain($.sessionId,J),Q}delete($){let J=this.deps.getSession($.sessionId);if(!J||J.aborting)return{sessionId:$.sessionId,prompts:[],removed:!1};let Q=this.service.delete(J,$);return this.emitPrompts(J),this.scheduleDrain($.sessionId,J),Q}enqueue($,J){let Q=this.deps.getSession($);if(!Q||Q.aborting)return;this.service.enqueue(Q,J),this.emitPrompts(Q),this.scheduleDrain($,Q)}consumeSteer($){let J=this.deps.getSession($);if(!J)return;let{entry:Q}=this.service.consumeSteer(J);if(!Q)return;return this.emitPrompts(J),this.emitSubmitted(J,Q),Q}clearAborted($){if($.pendingPrompts.length===0)return;this.service.clear($),this.emitPrompts($)}emitPrompts($){this.deps.emit({type:"pending_prompts",payload:{sessionId:$.sessionId,prompts:e0($)}})}scheduleDrain($,J){if(J.pendingPrompts.length===0||J.aborting||J.drainingPendingPrompts||!J.agent.canStartRun())return;queueMicrotask(()=>{this.drain($)})}async drain($){let J=this.deps.getSession($);if(!J)return;if(J.aborting||J.drainingPendingPrompts)return;if(!J.agent.canStartRun())return;let{entry:Q}=this.service.shiftNext(J);if(!Q)return;this.emitPrompts(J),this.emitSubmitted(J,Q),J.drainingPendingPrompts=!0;let Z=!0;try{await this.deps.send({sessionId:$,prompt:Q.prompt,...Q.mode?{mode:Q.mode}:{},userImages:Q.userImages,userFiles:Q.userFiles})}catch{Z=!1,this.service.requeueFront(J,Q),this.emitPrompts(J)}finally{if(J.drainingPendingPrompts=!1,Z&&J.pendingPrompts.length>0&&J.status!=="failed"&&J.status!=="cancelled")queueMicrotask(()=>{this.drain($)})}}emitSubmitted($,J){let Q=JZ(J);this.deps.emit({type:"pending_prompt_submitted",payload:{sessionId:$.sessionId,id:Q.id,prompt:Q.prompt,delivery:Q.delivery,attachmentCount:Q.attachmentCount}})}}function JZ($){return{id:$.id,prompt:$.prompt,delivery:$.delivery,attachmentCount:($.userImages?.length??0)+($.userFiles?.length??0)}}function e0($){return $.pendingPrompts.map(JZ)}function xb($,J,Q,Z){if(J.delivery==="steer")$.pendingPrompts.unshift(J);else if(Z==="steer")$.pendingPrompts.push(J);else $.pendingPrompts.splice(Q,0,J)}O0();class hj{deps;constructor($){this.deps=$}dispatchAgentEvent($,J,Q){let Z=this.deps.getSession($),W={sessionId:$,config:J,liveSession:Z,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit},j=V7(Q),X=!!Z&&(!j.agentId||j.agentId===bj(Z.agent));H7(W,Q,X?{isPrimaryAgentEvent:!0,agentId:bj(Z.agent),conversationId:Z.agent.getConversationId(),...Z?.runtime.teamRuntime?{teamRole:"lead"}:{}}:{isPrimaryAgentEvent:!1})}async handleTeamEvent($,J){let Q=this.deps.getSession($);if(Q){if(nW(Q,J),J.type==="agent_event"){let Z={sessionId:$,config:Q.config,liveSession:Q,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit};H7(Z,J.event,{agentId:J.agentId,teamRole:"teammate",teamAgentId:J.agentId,isPrimaryAgentEvent:!1})}if(J.type==="teammate_spawned"){let Z=g1({agentId:J.teammate.runtimeAgentId??J.agentId,conversationId:J.teammate.conversationId,parentAgentId:J.teammate.parentAgentId,createdByAgentId:bj(Q.agent),teamId:Q.runtime.teamRuntime?.getTeamId(),teamName:Q.runtime.teamRuntime?.getTeamName(),teamRole:"teammate",teamAgentId:J.agentId});if(Z)$$(Q.config.telemetry,{ulid:$,modelId:J.teammate.modelId??Q.config.modelId,provider:Q.config.providerId,...Z})}}if(await aW($,J,this.deps.invokeBackendOptional),Q)sW(Q,$,J,this.deps.emit)}async handlePluginEvent($,J,Q){if(J.name==="plugin_log"){this.handlePluginLog($,J.payload);return}if(J.name==="automation_event"){let Y=this.deps.getSession($)?.config.extensionContext?.automation??Q;if(!Y)return;let V=J.payload&&typeof J.payload==="object"?J.payload:void 0;if(!V)return;await Y.ingestEvent(V);return}if(J.name!=="steer_message"&&J.name!=="queue_message"&&J.name!=="pending_prompt")return;let Z=J.payload&&typeof J.payload==="object"?J.payload:void 0,W=typeof Z?.sessionId==="string"&&Z.sessionId.trim().length>0?Z.sessionId.trim():$,j=typeof Z?.prompt==="string"?Z.prompt.trim():"";if(!j)return;let X=J.name==="steer_message"?"steer":J.name==="queue_message"?"queue":Z?.delivery==="steer"?"steer":"queue";this.deps.enqueuePendingPrompt(W,{prompt:j,delivery:X})}handlePluginLog($,J,Q){let Z=this.deps.getSession($),W=Q??Z?.config.extensionContext?.logger??Z?.config.logger;if(!W||!J||typeof J!=="object")return;let j=J,X=typeof j.message==="string"?j.message:"";if(!X)return;let f=j.metadata&&typeof j.metadata==="object"?{...j.metadata}:{};if(f.sessionId??=$,typeof j.pluginName==="string"&&j.pluginName)f.pluginName=j.pluginName;if(j.level==="debug"){W.debug(X,f);return}if(j.level==="error"){if(W.error)W.error(X,f);else W.log(X,{...f,severity:"error"});return}W.log(X,f)}}function bj($){return $.getAgentId()}function kj($){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:G$($.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 Ij($,J){let Q=$[J];return typeof Q==="function"?Q:null}async function YF($,J,...Q){let Z=Ij($,J);if(!Z)throw Error(`session service method not available: ${J}`);return Promise.resolve(Z.apply($,Q))}async function VF($,J,...Q){let Z=Ij($,J);if(!Z)return;await Promise.resolve(Z.apply($,Q))}async function HF($,J,...Q){let Z=Ij($,J);if(!Z)return;return await Promise.resolve(Z.apply($,Q))}W1();O0();function xj($,J,Q){return{onSubAgentEvent:(Z)=>$.onAgentEvent(Q,J,Z),onSubAgentStart:(Z)=>{let W=$.getSession(Q)?.runtime.teamRuntime;$.subAgentStarts.set(Z.subAgentId,{startedAt:Date.now(),rootSessionId:Q});let j=g1({agentId:Z.subAgentId,conversationId:Z.conversationId,parentAgentId:Z.parentAgentId,teamId:W?.getTeamId(),teamName:W?.getTeamName(),createdByAgentId:Z.parentAgentId});if(j)$$(J.telemetry,{ulid:Q,modelId:J.modelId,provider:J.providerId,...j});A4(J.telemetry,{event:"started",ulid:Q,durationMs:0,parentId:Z.parentAgentId,agentId:Z.subAgentId,...j}),$.invokeBackendOptional("handleSubAgentStart",Q,Z)},onSubAgentEnd:(Z)=>{let W=$.getSession(Q)?.runtime.teamRuntime,j=$.subAgentStarts.get(Z.subAgentId),X=j?Date.now()-j.startedAt:0,f=Z.result?.text?Z.result.text.split(`
|
|
741
|
-
`).length:0;A4(J.telemetry,{event:"ended",ulid:Q,durationMs:X,outputLines:f,errorMessage:Z.error?String(Z.error):void 0,agentId:Z.subAgentId,parentId:Z.parentAgentId,...g1({agentId:Z.subAgentId,conversationId:Z.conversationId,parentAgentId:Z.parentAgentId,teamId:W?.getTeamId(),teamName:W?.getTeamName(),createdByAgentId:Z.parentAgentId})}),$.subAgentStarts.delete(Z.subAgentId),$.invokeBackendOptional("handleSubAgentEnd",Q,Z)}}}function gj($,J,Q,Z){let W=xj($,J,Q);return A$({configProvider:{getRuntimeConfig:()=>$.getSession(Q)?.runtime.delegatedAgentConfigProvider?.getRuntimeConfig()??{providerId:J.providerId,modelId:J.modelId,cwd:J.cwd,apiKey:J.apiKey,baseUrl:J.baseUrl,headers:J.headers,providerConfig:J.providerConfig,knownModels:J.knownModels,thinking:J.thinking,maxIterations:J.maxIterations,hooks:J.hooks,extensions:J.extensions,logger:J.logger,telemetry:J.telemetry},getConnectionConfig:()=>$.getSession(Q)?.runtime.delegatedAgentConfigProvider?.getConnectionConfig()??{providerId:J.providerId,modelId:J.modelId,apiKey:J.apiKey,baseUrl:J.baseUrl,headers:J.headers,providerConfig:J.providerConfig,knownModels:J.knownModels,thinking:J.thinking},updateConnectionDefaults:()=>{}},createSubAgentTools:()=>{let X=J.enableTools?n$({cwd:J.cwd,...c0[h1({mode:J.mode})],executors:Z}):[];if(J.enableSpawnAgent)X.push(gj($,J,Q,Z));return I1(X)},...W})}import{readFile as gb,stat as mb}from"node:fs/promises";var vb=20480000;async function BF($){let J=await mb($);if(!J.isFile())throw Error("Path is not a file");if(J.size>vb)throw Error("File is too large to read into context.");let Q=await gb($,"utf8");if(Q.includes("\x00"))throw Error("Cannot read binary file into context.");return Q}var AF=5000;function EJ($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function nb($){if(!$||typeof $!=="object"||Array.isArray($))return;let J=$,Q=EJ(J.inputTokens),Z=EJ(J.outputTokens),W=EJ(J.cacheReadTokens),j=EJ(J.cacheWriteTokens),X=EJ(J.totalCost);if(Q===void 0||Z===void 0||W===void 0||j===void 0||X===void 0)return;return{inputTokens:Q,outputTokens:Z,cacheReadTokens:W,cacheWriteTokens:j,totalCost:X}}function ab($,J){return{inputTokens:Math.max($.inputTokens,J.inputTokens),outputTokens:Math.max($.outputTokens,J.outputTokens),cacheReadTokens:Math.max($.cacheReadTokens,J.cacheReadTokens),cacheWriteTokens:Math.max($.cacheWriteTokens,J.cacheWriteTokens),totalCost:Math.max($.totalCost,J.totalCost)}}class z1{runtimeAddress=void 0;pendingPrompts;sessionService;runtimeBuilder;createAgentInstance;toolExecutors;defaultCapabilities;defaultToolPolicies;providerSettingsManager;oauthTokenManager;defaultTelemetry;defaultFetch;events=new JJ;sessions=new Map;usageBySession=new Map;aggregateUsageBySession=new Map;subAgentStarts=new Map;pendingPromptsController;eventBridge;sessionVersioning=new y$;constructor($){let J=ub();if(J)ib(J);let Q=b0($.distinctId);this.sessionService=$.sessionService,this.runtimeBuilder=$.runtimeBuilder??new j4,this.createAgentInstance=$.createAgent??((Z)=>new V$(Z)),this.defaultCapabilities=z0($.capabilities),this.toolExecutors=this.defaultCapabilities?.toolExecutors,this.defaultToolPolicies=$.toolPolicies,this.providerSettingsManager=$.providerSettingsManager??new _1,this.oauthTokenManager=$.oauthTokenManager??new yj({providerSettingsManager:this.providerSettingsManager,telemetry:$.telemetry}),this.defaultTelemetry=$.telemetry,this.defaultTelemetry?.setDistinctId(Q),this.defaultFetch=$.fetch,this.pendingPromptsController=new Ej({getSession:(Z)=>this.sessions.get(Z),emit:(Z)=>this.emit(Z),send:(Z)=>this.runTurn(Z)}),this.pendingPrompts={list:async(Z)=>this.pendingPromptsController.list(Z.sessionId),update:async(Z)=>this.pendingPromptsController.update(Z),delete:async(Z)=>this.pendingPromptsController.delete(Z)},this.eventBridge=new hj({getSession:(Z)=>this.sessions.get(Z),usageBySession:this.usageBySession,aggregateUsageBySession:this.aggregateUsageBySession,emit:(Z)=>this.emit(Z),persistMessages:(Z,W,j)=>{this.invoke("persistSessionMessages",Z,W,j)},enqueuePendingPrompt:(Z,W)=>this.pendingPromptsController.enqueue(Z,W),invokeBackendOptional:(Z,...W)=>this.invokeOptional(Z,...W)})}async applyInitialOAuthCredentials($){if($.config.apiKey?.trim())return $;let J=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId});if(!J?.apiKey)return $;return{...$,config:{...$.config,apiKey:J.apiKey}}}async startSession($){let J=$.source??U0.CLI,Q=$0(),Z=$.config.sessionId?.trim()??"",W=Z||lb(),j=await this.applyInitialOAuthCredentials($),X=j.initialMessages??[],f=X.length>0?f8(X):D0(),Y=await this.invokeOptionalValue("ensureSessionsDir")??"";if(!Y)throw Error("session service method not available: ensureSessionsDir");let V=mj(Y,W),H=mj(V,`${W}.messages.json`),B=mj(V,`${W}.json`),A=G$($.config),K=S0.parse({version:1,session_id:W,source:J,pid:process.pid,started_at:Q,status:"running",interactive:$.interactive===!0,provider:j.config.providerId,model:j.config.modelId,cwd:j.config.cwd,workspace_root:A,team_name:j.config.teamName,enable_tools:j.config.enableTools,enable_spawn:j.config.enableSpawnAgent,enable_teams:j.config.enableAgentTeams,prompt:j.prompt?.trim()||void 0,messages_path:H}),G;if(Z.length>0&&X.length>0&&!j.prompt?.trim()){let C=await this.invokeOptionalValue("readSessionManifest",W);if(C)K=C,G={manifestPath:B,messagesPath:C.messages_path||H,manifest:C}}let D=await this.seedAggregateUsageFromArtifacts({initialUsage:f,sessionDir:V,rootMessagesPath:G?.messagesPath??H,manifest:K});this.usageBySession.set(W,f),this.aggregateUsageBySession.set(W,D);let U=z0(this.defaultCapabilities,$.capabilities),F=U?.toolExecutors??this.toolExecutors,O=$.localRuntime,T=O?.extensionContext?.logger??O?.logger,z=O?.extensionContext?.automation,L,P={getSession:(C)=>this.sessions.get(C),subAgentStarts:this.subAgentStarts,onAgentEvent:(C,f0,Y0)=>this.eventBridge.dispatchAgentEvent(C,f0,Y0),invokeBackendOptional:(C,...f0)=>this.invokeOptional(C,...f0)};L=await iV({input:j,localRuntime:$.localRuntime,sessionId:W,providerSettingsManager:this.providerSettingsManager,defaultTelemetry:this.defaultTelemetry,defaultCapabilities:U,defaultToolPolicies:this.defaultToolPolicies,defaultFetch:this.defaultFetch,onPluginEvent:(C)=>{if(C.name==="plugin_log"){this.eventBridge.handlePluginLog(W,C.payload,T);return}this.eventBridge.handlePluginEvent(W,C,z)},onTeamEvent:(C)=>{this.eventBridge.handleTeamEvent(W,C),L.config.onTeamEvent?.(C)},createSpawnTool:()=>gj(P,L.config,W,F),createSubAgentLifecycleCallbacks:(C)=>xj(P,C,W),readSessionMetadata:async()=>(await this.getSession(W))?.metadata,writeSessionMetadata:async(C)=>{await this.persistSessionMetadata(W,()=>C)}});let S=await this.runtimeBuilder.build(L.runtimeBuilderInput),b=L.config,u=L.providerConfig;if(S.teamRuntime&&!b.teamName?.trim())b.teamName=S.teamRuntime.getTeamName();let t=[...S.tools,...b.extraTools??[]],Q0=S.extensions??L.extensions,e={sessionId:W,providerId:u.providerId,modelId:u.modelId,apiKey:u.apiKey,baseUrl:u.baseUrl,headers:u.headers,knownModels:u.knownModels,providerConfig:u,thinking:b.thinking,reasoningEffort:b.reasoningEffort??u.reasoningEffort,systemPrompt:b.systemPrompt,maxIterations:b.maxIterations,execution:b.execution,prepareTurn:N4(b),tools:t,hooks:L.hooks,extensions:Q0,hookErrorMode:b.hookErrorMode,initialMessages:L.effectiveInput.initialMessages,userFileContentLoader:BF,toolPolicies:L.toolPolicies,requestToolApproval:L.requestToolApproval?async(C)=>{let f0=L.requestToolApproval,Y0=this.sessions.get(W);if(Y0)await this.markTurnPending(Y0);try{if(!f0)return{approved:!1,reason:"Tool approval callback is not configured."};return await f0(C)}finally{let w0=this.sessions.get(W);if(w0?.status==="pending")await this.markTurnRunning(w0)}}:void 0,telemetry:b.telemetry,onConsecutiveMistakeLimitReached:b.onConsecutiveMistakeLimitReached,completionPolicy:S.completionPolicy,consumePendingUserMessage:()=>{let C=this.pendingPromptsController.consumeSteer(W);return C?GJ(C.prompt,C.mode??b.mode):void 0},logger:S.logger??b.logger,extensionContext:b.extensionContext,onEvent:(C)=>this.eventBridge.dispatchAgentEvent(W,b,C)};e.hooks={...e.hooks,onEvent:async(C)=>{if(await L.hooks?.onEvent?.(C),C.type!=="assistant-message")return;let f0=this.sessions.get(W);if(!f0)return;let Y0=f0.agent.getMessages();try{await this.invoke("persistSessionMessages",W,Y0,b.systemPrompt)}catch(w0){b.logger?.error?.("Failed to persist session messages after assistant response",{sessionId:W,error:w0}),h2(b.telemetry,{component:"core",operation:"session.persist_messages_after_assistant_response",error:w0,severity:"warn",handled:!0,context:{sessionId:W,providerId:b.providerId,modelId:b.modelId}})}}};let $1=this.createAgentInstance(e);if(e.onEvent)$1.subscribeEvents(e.onEvent);S.registerLeadAgent?.($1);let b$=g1({agentId:$1.getAgentId(),conversationId:$1.getConversationId(),teamId:S.teamRuntime?.getTeamId(),teamName:S.teamRuntime?.getTeamName(),teamRole:S.teamRuntime?"lead":void 0});if(aV(b,W,Z.length>0,A,b$),b$)$$(b.telemetry,{ulid:W,modelId:b.modelId,provider:b.providerId,...b$});if(S.teamRuntime)aJ(b.telemetry,{ulid:W,teamId:S.teamRuntime.getTeamId(),teamName:S.teamRuntime.getTeamName(),leadAgentId:$1.getAgentId(),restoredFromPersistence:S.teamRestoredFromPersistence===!0});let r={sessionId:W,config:b,sessionMetadata:j.sessionMetadata,...G?{artifacts:G}:{},source:J,startedAt:G?.manifest.started_at??Q,updatedAt:G?.manifest.ended_at??G?.manifest.started_at??Q,pendingPrompt:K.prompt,runtime:S,agent:$1,started:!1,status:G?.manifest.status??"running",aborting:!1,interactive:$.interactive===!0,persistedMessages:X,activeTeamRunIds:new Set,pendingTeamRunUpdates:[],teamRunWaiters:[],pendingPrompts:[],drainingPendingPrompts:!1,pluginSandboxShutdown:L.pluginSandboxShutdown,submitAndExitObserved:!1,lastInteractiveTurnFinishReason:void 0};if(this.sessions.set(W,r),this.emitStatus(W,"running"),X.length>0&&!G){if(await this.ensureSessionPersisted(r),await this.invoke("persistSessionMessages",r.sessionId,X,r.config.systemPrompt),!j.prompt?.trim())await this.updateStatus(r,"completed",0)}let O1;try{if(j.prompt?.trim())if(O1=await this.executeTurn(r,{prompt:j.prompt,userImages:j.userImages,userFiles:j.userFiles}),!r.interactive)await this.finalizeSingleRun(r,O1.finishReason);else await this.completeInteractiveTurn(r,O1.finishReason)}catch(C){if(r.interactive&&r.aborting)O1=await this.completeAbortedInteractiveTurn(r);else{h2(r.config.telemetry,{component:"core",operation:"session.start",error:C,severity:"error",handled:!1,context:{sessionId:r.sessionId,providerId:r.config.providerId,modelId:r.config.modelId}});try{await this.failSession(r)}catch(f0){r.config.logger?.error?.("Session failure cleanup threw",{sessionId:r.sessionId,error:f0})}throw C}}return{sessionId:W,manifest:K,manifestPath:B,messagesPath:H,result:O1}}async restoreSession($){return this.sessionVersioning.restoreCheckpoint({...$,getSession:(J)=>this.getSession(J),readMessages:(J)=>this.readSessionMessages(J),buildStartInput:(J,Q)=>{let Z=J.restoredCheckpointMetadata?{...Q.sessionMetadata??{},checkpoint:J.restoredCheckpointMetadata}:Q.sessionMetadata;return{...Q,...Z?{sessionMetadata:Z}:{},initialMessages:J.initialMessages}},startSession:(J)=>this.startSession(J),getStartedSessionId:(J)=>J.sessionId,readRestoredSession:(J)=>this.getSession(J)})}async runTurn($){let J=this.getSessionOrThrow($.sessionId),Q=J.agent.canStartRun(),Z=$.delivery??(J.interactive&&!Q?"queue":void 0);if(J.config.telemetry?.capture({event:"session.input_sent",properties:{sessionId:$.sessionId,promptLength:$.prompt.length,userImageCount:$.userImages?.length??0,userFileCount:$.userFiles?.length??0,delivery:Z??"immediate"}}),Z==="queue"||Z==="steer"){this.pendingPromptsController.enqueue($.sessionId,{prompt:$.prompt,mode:$.mode,delivery:Z,userImages:$.userImages,userFiles:$.userFiles});return}try{let W=await this.executeTurn(J,{prompt:$.prompt,mode:$.mode,userImages:$.userImages,userFiles:$.userFiles});if(!J.interactive)await this.finalizeSingleRun(J,W.finishReason);else await this.completeInteractiveTurn(J,W.finishReason);if(W.finishReason==="error"||W.finishReason==="aborted")return W;return queueMicrotask(()=>{this.pendingPromptsController.drain($.sessionId)}),W}catch(W){if(J.interactive&&J.aborting)return await this.completeAbortedInteractiveTurn(J);throw h2(J.config.telemetry,{component:"core",operation:"session.submit",error:W,severity:"error",handled:!1,context:{sessionId:J.sessionId,providerId:J.config.providerId,modelId:J.config.modelId}}),await this.failSession(J),W}}async getAccumulatedUsage($){let J=OW(this.usageBySession.get($)),Q=OW(this.aggregateUsageBySession.get($));return J||Q?{usage:J,aggregateUsage:Q}:void 0}async abort($,J){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(J)}async stopSession($){let J=this.sessions.get($);if(!J)return;if(J.config.telemetry?.capture({event:"session.stopped",properties:{sessionId:$}}),J.interactive&&!X0(J.status)){await this.releaseSessionRuntime(J,"session_stop");return}if(J.interactive&&J.agent.canStartRun()){await this.shutdownSession(J,{status:this.resolveInteractiveStopStatus(J),exitCode:this.resolveInteractiveStopExitCode(J),shutdownReason:"session_stop",endReason:"stopped"});return}J.aborting=!0,J.agent.abort(Error("session_stop")),await this.shutdownSession(J,{status:"cancelled",exitCode:0,shutdownReason:"session_stop",endReason:"stopped"})}async dispose($="session_manager_dispose"){let J=[...this.sessions.values()];if(J.length===0)return;await Promise.allSettled(J.map((Q)=>Q.interactive&&!X0(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 J=this.sessions.get($);if(J)return kj(J);let Q=$.trim();if(!Q)return;let Z=await this.getRow(Q);if(Z)return W6(Z);let W=await this.readManifest(Q);return W?p9(W):void 0}async listSessions($=200){let Q=(await this.listRows($)).map(W6),Z=new Set(Q.map((W)=>W.sessionId));for(let W of this.sessions.values()){if(Z.has(W.sessionId))continue;Q.unshift(kj(W))}return Q.slice(0,$)}async deleteSession($){if(this.sessions.has($))await this.stopSession($);let J=await this.invoke("deleteSession",$);if(J.deleted)this.usageBySession.delete($),this.aggregateUsageBySession.delete($);return J.deleted}async updateSession($,J){return{updated:(await this.invokeOptionalValue("updateSession",{sessionId:$,prompt:J.prompt,metadata:J.metadata,title:J.title}))?.updated===!0}}async readSessionMessages($){let J=$.trim();if(!J)return[];let Q=await this.getRow(J);if(Q?.messagesPath)return q$(Q.messagesPath);let Z=await this.readManifest(J);return q$(Z?.messages_path)}async dispatchHookEvent($){await RB($,{queueSpawnRequest:(J)=>this.invokeOptional("queueSpawnRequest",J),upsertSubagentSessionFromHook:(J)=>this.invokeOptionalValue("upsertSubagentSessionFromHook",J),appendSubagentHookAudit:(J,Q)=>this.invokeOptional("appendSubagentHookAudit",J,Q),applySubagentStatus:(J,Q)=>this.invokeOptional("applySubagentStatus",J,Q)})}subscribe($,J){return this.events.subscribe($,J)}async updateSessionModel($,J){let Q=this.getSessionOrThrow($);Q.config.modelId=J,Q.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({modelId:J}),Q.agent.updateConnection({modelId:J})}handlePluginEvent($,J,Q){return this.eventBridge.handlePluginEvent($,J,Q)}async executeTurn($,J){let Q=await this.prepareTurnInput($,J),Z=Q.prompt.trim();if(!Z)throw Error("prompt cannot be empty");if(!$.artifacts&&!$.pendingPrompt)$.pendingPrompt=Z;await this.ensureSessionPersisted($),await this.syncOAuthCredentials($),await this.markTurnRunning($);let W=await this.executeAgentTurn($,Z,Q.userImages,Q.userFiles);while(oW($,W.finishReason)){let j=await tW($);if(j.length===0)break;let X=eW($,j);W=await this.executeAgentTurn($,X)}return W}async completeInteractiveTurn($,J){if(KJ($))return;$.lastInteractiveTurnFinishReason=J,await this.markTurnIdle($),$.aborting=!1}resolveInteractiveStopStatus($){let J=$.lastInteractiveTurnFinishReason;if(!J)return"cancelled";switch(J){case"completed":return"completed";case"error":return"failed";case"aborted":case"max_iterations":case"mistake_limit":return"cancelled"}return J}resolveInteractiveStopExitCode($){return $.lastInteractiveTurnFinishReason==="error"?1:0}async completeAbortedInteractiveTurn($){let J=new Date,Q=$.agent.getMessages(),Z=D0();return $.persistedMessages=Q,$.started=$.started||Q.length>0,this.eventBridge.dispatchAgentEvent($.sessionId,$.config,{type:"done",reason:"aborted",text:"",iterations:0,usage:Z}),await this.completeInteractiveTurn($,"aborted"),{text:"",usage:Z,messages:Q,toolCalls:[],iterations:0,finishReason:"aborted",model:{id:$.config.modelId,provider:$.config.providerId},startedAt:J,endedAt:J,durationMs:0}}async executeAgentTurn($,J,Q,Z){let W=$.started||$.agent.getMessages().length>0,j=$.persistedMessages??$.agent.getMessages(),X=this.usageBySession.get($.sessionId)??D0(),f=this.aggregateUsageBySession.get($.sessionId)??X;$.turnUsageBaseline=X,$.turnAggregateUsageBaseline=f,$.turnPrimaryUsage=D0(),$.turnUsageByAgent=new Map,uJ($.config.telemetry,$.sessionId,$.config.mode),g2($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,model:$.config.modelId,source:"user",mode:$.config.mode,...this.getSessionAgentTelemetryIdentity($)});try{let Y=W?()=>$.agent.continue(J,Q,Z):()=>$.agent.run(J,Q,Z),V=await this.runWithAuthRetry($,Y,j);$.started=!0;let H=x5(V.messages,V,j);$.persistedMessages=H;let B=X6($.turnUsageByAgent?.values()??[]),A=A0(X,V.usage),K=A0(A0(D0(),V.usage),B),G=A0(f,K);return this.usageBySession.set($.sessionId,A),this.aggregateUsageBySession.set($.sessionId,G),await this.persistSessionMetadata($.sessionId,(R)=>({...R??{},totalCost:A.totalCost,aggregatedAgentsCost:G.totalCost,usage:A,aggregateUsage:G})),await this.invoke("persistSessionMessages",$.sessionId,H,$.config.systemPrompt),this.observeTaskCompletionTool($,V),V}catch(Y){throw h2($.config.telemetry,{component:"core",operation:"session.turn",error:Y,severity:"error",handled:!1,context:{sessionId:$.sessionId,providerId:$.config.providerId,modelId:$.config.modelId}}),await this.invoke("persistSessionMessages",$.sessionId,$.agent.getMessages(),$.config.systemPrompt),Y}finally{$.turnUsageBaseline=void 0,$.turnAggregateUsageBaseline=void 0,$.turnPrimaryUsage=void 0,$.turnUsageByAgent=void 0}}observeTaskCompletionTool($,J){if($.submitAndExitObserved)return;if(!J.toolCalls.some((Z)=>Z.name===F0.SUBMIT_AND_EXIT&&Z.error===void 0))return;$.submitAndExitObserved=!0,H4($.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($,J){let Q=G$($.config),Z=rb(J.prompt).trim();if(!Z)return{prompt:"",userImages:J.userImages,userFiles:this.resolveAbsoluteFilePaths($.config.cwd,J.userFiles)};let W=await a2(Z,Q);sV($.config.telemetry,W);let j=GJ(W.prompt,J.mode??$.config.mode),X=this.resolveAbsoluteFilePaths($.config.cwd,J.userFiles),f=this.resolveAbsoluteFilePaths(Q,W.matchedFiles),Y=Array.from(new Set([...X,...f]));return{prompt:j,userImages:J.userImages,userFiles:Y.length>0?Y:void 0}}async ensureSessionPersisted($){if($.artifacts)return;let J=G$($.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:J,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($,J){let Q=this.sessions.get($),Z=await this.invokeOptionalValue("readSessionManifest",$)??Q?.artifacts?.manifest,W=J(Z?.metadata);if(!Q?.artifacts)return;if((await this.invokeOptionalValue("updateSession",{sessionId:$,metadata:W}))?.updated===!1)return;Q.sessionMetadata=W,Q.artifacts.manifest.metadata=W}async finalizeSingleRun($,J){if(KJ($))return;let Q=J==="aborted"||$.aborting,Z=J==="error";await this.shutdownSession($,{status:Q?"cancelled":Z?"failed":"completed",exitCode:Z?1:0,shutdownReason:Z?"session_error":"session_complete",endReason:J})}async failSession($){await this.shutdownSession($,{status:"failed",exitCode:1,shutdownReason:"session_error",endReason:"error"})}async shutdownSession($,J){if(J.status==="completed"&&!$.submitAndExitObserved)H4($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"shutdown",...this.getSessionAgentTelemetryIdentity($)});YQ($);let Q=[],Z=(W,j)=>{Q.push(j),$.config.logger?.log("Session shutdown cleanup failed",{sessionId:$.sessionId,stage:W,error:j,severity:"warn"}),h2($.config.telemetry,{component:"core",operation:"session.shutdown_cleanup",error:j,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:W,status:J.status,shutdownReason:J.shutdownReason,providerId:$.config.providerId,modelId:$.config.modelId}})};if($.artifacts){try{await this.updateStatus($,J.status,J.exitCode)}catch(W){Z("update_status",W)}try{await $.agent.shutdown(J.shutdownReason)}catch(W){Z("agent_shutdown",W)}}try{await Promise.resolve($.runtime.shutdown(J.shutdownReason))}catch(W){Z("runtime_shutdown",W)}try{await $.pluginSandboxShutdown?.()}catch(W){Z("plugin_sandbox_shutdown",W)}if(this.sessions.delete($.sessionId),this.emit({type:"ended",payload:{sessionId:$.sessionId,reason:J.endReason,ts:Date.now()}}),Q.length>0&&J.status==="failed")throw Q[0]}async releaseSessionRuntime($,J){let Q=[],Z=(W,j)=>{Q.push(j),$.config.logger?.log("Session runtime cleanup failed",{sessionId:$.sessionId,stage:W,error:j,severity:"warn"}),h2($.config.telemetry,{component:"core",operation:"session.runtime_cleanup",error:j,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:W,reason:J,providerId:$.config.providerId,modelId:$.config.modelId}})};try{await $.agent.shutdown(J)}catch(W){Z("agent_shutdown",W)}try{await Promise.resolve($.runtime.shutdown(J))}catch(W){Z("runtime_shutdown",W)}try{await $.pluginSandboxShutdown?.()}catch(W){Z("plugin_sandbox_shutdown",W)}if(this.sessions.delete($.sessionId),Q.length>0)throw Q[0]}async updateStatus($,J,Q){if(!$.artifacts)return;let Z=await this.invoke("updateSessionStatus",$.sessionId,J,Q);if(!Z.updated)return;let W=await this.invokeOptionalValue("readSessionManifest",$.sessionId)??$.artifacts.manifest;if(W.status=J,X0(J))delete W.ended_at,W.exit_code=null;else W.ended_at=Z.endedAt??$0(),W.exit_code=typeof Q==="number"?Q:null;$.artifacts.manifest=W,$.status=J,$.updatedAt=Z.endedAt??$0(),$.endedAt=X0(J)?null:W.ended_at,$.exitCode=W.exit_code,await this.invoke("writeSessionManifest",$.artifacts.manifestPath,W),this.emitStatus($.sessionId,J)}async runWithAuthRetry($,J,Q){try{return await J()}catch(Z){if(!I$($.config.providerId)||!pb(Z))throw Z;return await this.syncOAuthCredentials($,{forceRefresh:!0}),$.agent.restore(Q),J()}}async syncOAuthCredentials($,J){let Q=null;try{Q=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId,forceRefresh:J?.forceRefresh})}catch(Z){if(Z instanceof $Z)throw Error(`${Z.providerId} requires re-authentication.`);throw Z}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 J=this.sessions.get($);if(!J){let Q=new u1($);throw h2(this.defaultTelemetry,{component:"core",operation:"session.active_lookup",error:Q,severity:"warn",handled:!0,context:{sessionId:$,activeSessionCount:this.sessions.size}}),Q}return J}resolveAbsoluteFilePaths($,J){if(!J||J.length===0)return[];let Q=J.map((Z)=>Z.trim()).filter((Z)=>Z.length>0).map((Z)=>db(Z)?Z:vj($,Z));return Array.from(new Set(Q))}getSessionAgentTelemetryIdentity($){return g1({agentId:$.agent.getAgentId(),conversationId:$.agent.getConversationId(),teamId:$.runtime.teamRuntime?.getTeamId(),teamName:$.runtime.teamRuntime?.getTeamName(),teamRole:$.runtime.teamRuntime?"lead":void 0})}async seedAggregateUsageFromArtifacts($){let J=await this.summarizePersistedTeammateUsage($.sessionDir,$.rootMessagesPath,$.manifest.session_id),Q=A0($.initialUsage,J);return this.withPersistedAggregateUsageFloor(Q,$.manifest)}async summarizePersistedTeammateUsage($,J,Q){let Z=vj(J),W=`${Q}.messages.json`,j;try{j=cb($)}catch{return D0()}let X=D0();for(let f of j){if(!f.endsWith(".messages.json"))continue;if(f===W)continue;let Y=vj($,f);if(Y===Z)continue;let V=await q$(Y);if(V.length===0)continue;X=A0(X,f8(V))}return X}withPersistedAggregateUsageFloor($,J){let Q=nb(J.metadata?.aggregateUsage);if(Q)return ab($,Q);let Z=J.metadata?.aggregatedAgentsCost;if(typeof Z!=="number"||!Number.isFinite(Z)||Z<=$.totalCost)return $;return{...$,totalCost:Z}}emitStatus($,J){this.emitSessionSnapshot($),this.emit({type:"status",payload:{sessionId:$,status:J}})}async emitSessionSnapshot($){let J=await this.getSession($);if(!J)return;this.emit({type:"session_snapshot",payload:{sessionId:$,snapshot:F1({session:J,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($)),AF))}async getRow($){let J=$.trim();if(!J)return;return(await this.listRows(AF)).find((Z)=>Z.sessionId===J)}async readManifest($){let J=$.trim();if(!J)return;return await this.invokeOptionalValue("readSessionManifest",J)}invoke($,...J){return YF(this.sessionService,$,...J)}invokeOptional($,...J){return VF(this.sessionService,$,...J)}invokeOptionalValue($,...J){return HF(this.sessionService,$,...J)}}function ob($){return{text:$.text,usage:$.usage,inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,iterations:$.iterations,finishReason:$.finishReason,toolCalls:$.toolCalls.map((J)=>({name:J.name,input:J.input,output:J.output,error:J.error,durationMs:J.durationMs}))}}function tb($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}function TQ($={}){let J=new z1({sessionService:new L1(new U1),fetch:$.fetch,telemetry:$.telemetry});return{async startSession(Q){let Z=(Q.cwd?.trim()||Q.workspaceRoot).trim(),W=await J.startSession({source:Q.source?.trim()||U0.CLI,interactive:!1,config:{providerId:sb(Q.provider),modelId:Q.model,apiKey:Q.apiKey?.trim()||void 0,cwd:Z,workspaceRoot:Q.workspaceRoot,systemPrompt:Q.systemPrompt??"",mode:tb(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:W.sessionId,startResult:{sessionId:W.sessionId,manifestPath:W.manifestPath,messagesPath:W.messagesPath}}},async sendSession(Q,Z){let W=await J.runTurn({sessionId:Q,prompt:Z.prompt,userImages:Z.attachments?.userImages,userFiles:Z.attachments?.userFiles?.map((j)=>j.content)});if(!W)throw Error("local hub schedule runtime returned no turn result");return{result:ob(W)}},async abortSession(Q){return await J.abort(Q,Error("hub schedule abort")),{applied:!0}},async stopSession(Q){return await J.stopSession(Q),{applied:!0}}}}$h(process.env.CLINE_VCR);function Qh($){let J=process.cwd(),Q,Z,W;for(let j=0;j<$.length;j+=1){let X=$[j],f=$[j+1];if(X==="--cwd"&&f){J=f,j+=1;continue}if(X==="--host"&&f){Q=f,j+=1;continue}if(X==="--port"&&f){let Y=Number(f);if(Number.isFinite(Y))Z=Y;j+=1;continue}if(X==="--pathname"&&f)W=f,j+=1}return{cwd:J,host:Q,port:Z,pathname:W}}async function Zh(){let $=Qh(process.argv.slice(2));process.chdir($.cwd);let J=i0({host:$.host,port:$.port,pathname:$.pathname}),Q=await C2({host:J.host,port:J.port,pathname:J.pathname,owner:Jh()==="production"?n0():E0(),runtimeHandlers:TQ(),cronOptions:{workspaceRoot:$.cwd}}),Z=async()=>{await Q.close(),process.exit(0)},W=!1,j=(X,f)=>{if(W)return;W=!0;let Y=f instanceof Error?f.stack||f.message:String(f);process.stderr.write(`[hub-daemon] ${X}: ${Y}
|
|
739
|
+
`,"utf8")}ensureDir(){if(!zj(this.dirPath))SE(this.dirPath,{recursive:!0})}hasPersistableState($){let J=$.exportState();if(this.teammateSpecs.size>0)return!0;if(J.members.some((Q)=>Q.role==="teammate"))return!0;return J.tasks.length>0||J.mailbox.length>0||J.missionLog.length>0}clearPersistedState(){if(zj(this.statePath))EE(this.statePath)}}var rG={};w(rG,{ChatViewStateSchema:()=>Oj,ChatSummarySchema:()=>t9,ChatSessionStatusSchema:()=>a9,ChatSessionConfigSchema:()=>n9,ChatMessageSchema:()=>o9,ChatMessageRoleSchema:()=>s9});import{z as h}from"zod";var n9=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()}),a9=h.enum(["idle","starting","running","pending","stopping","completed","cancelled","failed","error"]),s9=h.enum(["user","assistant","tool","system","status","error"]),o9=h.object({id:h.string().min(1),sessionId:h.string().nullable(),role:s9,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()}),t9=h.object({toolCalls:h.number().int().nonnegative(),tokensIn:h.number().int().nonnegative(),tokensOut:h.number().int().nonnegative()}),Oj=h.object({sessionId:h.string().nullable(),status:a9,config:n9,messages:h.array(o9),rawTranscript:h.string(),error:h.string().nullable(),summary:t9});var iG={};w(iG,{CORE_BUILD_VERSION:()=>Tj});var Tj=PB;import{Agent as Mb,createAgentRuntime as qb}from"@cline/agents";var aG={};w(aG,{fetchClineRecommendedModels:()=>Mj,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>e9});import{getClineEnvironmentConfig as IE}from"@cline/shared";var xE=5000,e9={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"]}]};function gE($){return{recommended:$.recommended.map((J)=>({...J,tags:[...J.tags]})),free:$.free.map((J)=>({...J,tags:[...J.tags]}))}}function nG($){if(!$||typeof $!=="object")return null;let J=$;if(typeof J.id!=="string"||J.id.length===0)return null;return{id:J.id,name:typeof J.name==="string"&&J.name.length>0?J.name:J.id,description:typeof J.description==="string"?J.description:"",tags:Array.isArray(J.tags)?J.tags.filter((Q)=>typeof Q==="string"):[]}}function mE($){if(!$||typeof $!=="object")return null;let J=$,Q=Array.isArray(J.recommended)?J.recommended:[],Z=Array.isArray(J.free)?J.free:[],W=Q.map(nG).filter((X)=>X!==null),j=Z.map(nG).filter((X)=>X!==null);if(W.length===0&&j.length===0)return null;return{recommended:W,free:j}}function vE($){let J=$.baseUrl?.trim();if(J)return J;let Q=IE().apiBaseUrl;try{return($.providerSettingsManager??new _1).getProviderSettings("cline")?.baseUrl?.trim()||Q}catch{return Q}}async function cE($,J,Q){let Z=new AbortController,W=setTimeout(()=>Z.abort(),Q);try{return await $(J,{signal:Z.signal})}finally{clearTimeout(W)}}async function Mj($={}){try{let J=vE($),Q=$.fetchImpl??fetch,Z=await cE(Q,`${J}/api/v1/ai/cline/recommended-models`,$.timeoutMs??xE);if(!Z.ok)throw Error(`HTTP ${Z.status}`);let W=await Z.json(),j=mE(W);if(j)return j}catch{}return gE(e9)}var sG={};w(sG,{loadLlmsConfigFromFile:()=>Pj,defineLlmsConfig:()=>qj});import{readFile as uE}from"node:fs/promises";import dE from"node:path";function qj($){return $}async function Pj($){let J=dE.resolve($),Q=await uE(J,"utf8"),Z;try{Z=JSON.parse(Q)}catch(W){let j=W instanceof Error?W.message:String(W);throw Error(`Failed to parse JSON config at "${J}": ${j}`)}return lE(Z,J)}function lE($,J){if(!$||typeof $!=="object")throw Error(`Invalid llms config in "${J}": expected an object.`);let Z=$.providers;if(!Array.isArray(Z))throw Error(`Invalid llms config in "${J}": "providers" must be an array.`);if(!Z.length)throw Error(`Invalid llms config in "${J}": "providers" cannot be empty.`);return $}var QF={};w(QF,{createLlmsSdk:()=>wj,DefaultLlmsSdk:()=>yJ});import{BUILT_IN_PROVIDER_IDS as eG,createHandler as iE,createHandlerAsync as nE,getProviderCollection as aE,hasProvider as $F,registerAsyncHandler as sE,registerHandler as oE,registerModel as tE,registerProvider as JF}from"@cline/llms";function oG($){return $?{...$}:{}}function pE($,J){if($)return $;if(!J)return;let Q=globalThis.process;if(!Q?.env)return;return Q.env[J]}function rE($,J){if(!J.length)throw Error(`Provider "${$}" must include at least one model.`)}function tG($){let J=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:J,defaultModel:$.collection.provider.defaultModelId,modelCount:J.length}}class Nj{providers=new Map;register($){rE($.id,$.models);let J=$.defaultModel??$.models[0];if(!J)throw Error(`Provider "${$.id}" must define a default model.`);if(!$.models.includes(J))throw Error(`Default model "${J}" 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:J,defaults:{...Q?.defaults??{},...oG($.defaults)}})}registerSelectionConfig($){this.register({id:$.id,models:$.models,defaultModel:$.defaultModel,defaults:{apiKey:pE($.apiKey,$.apiKeyEnv),routingProviderId:$.builtinProviderId,baseUrl:$.baseUrl,headers:$.headers,timeoutMs:$.timeoutMs,capabilities:$.capabilities,...oG($.settings)}})}registerModel($,J){let Q=this.providers.get($);if(!Q){this.providers.set($,{id:$,models:new Set([J]),defaultModel:J,defaults:{}});return}Q.models.add(J)}createHandlerConfig($){let J=this.require($.providerId),Q=$.modelId??J.defaultModel;if(!J.models.has(Q))throw Error(`Model "${Q}" is not configured for provider "${$.providerId}".`);return{providerId:$.providerId,modelId:Q,...J.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($,J){return this.providers.get($)?.models.has(J)??!1}require($){let J=this.providers.get($);if(!J)throw Error(`Provider "${$}" is not configured in this SDK instance.`);return J}}class yJ{configuredProviders=new Nj;constructor($){this.applyConfig($)}createHandler($){return iE(this.configuredProviders.createHandlerConfig($))}async createHandlerAsync($){return nE(this.configuredProviders.createHandlerConfig($))}registerProvider($){if(JF($.collection),$.handlerFactory&&$.asyncHandlerFactory)throw Error(`Provider "${$.collection.provider.id}" cannot register both sync and async handlers.`);if($.handlerFactory)oE($.collection.provider.id,$.handlerFactory);if($.asyncHandlerFactory)sE($.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 J=$.exposeModels??Object.keys($.models),Q=$.defaultModel??J[0];if(!Q)throw Error(`Provider "${$.id}" must define a default model.`);JF({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:J,defaultModel:Q,defaults:{routingProviderId:$.builtinProviderId,...$.defaults??{}}})}registerModel($){tE($.providerId,$.modelId,$.info),this.configuredProviders.registerModel($.providerId,$.modelId)}getProviders(){return this.configuredProviders.list()}getBuiltInProviderIds(){return[...eG]}async getBuiltInProviders(){return(await Promise.all(eG.map((J)=>aE(J)))).filter((J)=>J!==void 0).map((J)=>tG({collection:J}))}getModels($){return this.configuredProviders.getModels($)}isProviderConfigured($){return this.configuredProviders.hasProvider($)}isModelConfigured($,J){return this.configuredProviders.hasModel($,J)}applyConfig($){for(let J of $.providers)this.configuredProviders.registerSelectionConfig(J);for(let J of $.models??[])this.registerModel(J);for(let J of $.customProviders??[])this.registerProvider(J);for(let J of this.configuredProviders.list()){let Q=$F(J.id),Z=this.configuredProviders.createHandlerConfig({providerId:J.id,modelId:J.defaultModel}).routingProviderId,W=typeof Z==="string"&&$F(Z);if(!Q&&!W)throw Error(`Provider "${J.id}" is not known. Register it through customProviders/registerProvider, registerBuiltinProvider, or use a built-in provider ID.`)}}}function wj($){return new yJ($)}H3();async function eE(){return Promise.resolve().then(() => (M9(),JG))}function Cb(){return new Date().toISOString()}var yb="cline",Eb="cline-pass";function bb($){if(XF($)!=="providers.json")return;let J=Cj($);if(XF(J)!=="settings")return;return Cj(J)}class _1{filePath;dataDir;constructor($={}){if(this.filePath=$.filePath??Sb(),this.dataDir=$.dataDir??bb(this.filePath),this.dataDir||!$.filePath)CJ({providerSettingsManager:this,dataDir:this.dataDir});if(yG(this),g9(this.read()),Sj(this.filePath))try{jF(this.filePath,384)}catch{}}getFilePath(){return this.filePath}read(){if(!Sj(this.filePath))return z$();try{let $=Nb(this.filePath,"utf8"),J=JSON.parse($),Q=_8.safeParse(J);if(Q.success)return g9(Q.data),Q.data}catch{}return z$()}write($){let J=_8.parse($),Q=Cj(this.filePath);if(!Sj(Q))Pb(Q,{recursive:!0,mode:448});wb(this.filePath,`${JSON.stringify(J,null,2)}
|
|
740
|
+
`,"utf8");try{jF(this.filePath,384)}catch{}g9(J)}saveProviderSettings($,J={}){let Q=z8.parse($),Z=this.read(),W=Q.provider,j=J.setLastUsed!==!1,X=Z.providers[W],f=J.tokenSource??X?.tokenSource??"manual",Y={...Z,providers:{...Z.providers,[W]:{settings:Q,updatedAt:Cb(),tokenSource:f}},lastUsedProvider:j?W:Z.lastUsedProvider};return this.write(Y),Y}resolveProviderSettings($,J){let Q=$.providers[J]?.settings,W=W0(J)?.storageProviderId;if(!W||W===J)return Q;let j=$.providers[W]?.settings;if(!j)return Q;return z8.parse({...j.auth?{auth:j.auth}:{},...j.apiKey?{apiKey:j.apiKey}:{},...j.baseUrl?{baseUrl:j.baseUrl}:{},...Q??{},provider:J})}getProviderSettings($){let J=this.read();return this.resolveProviderSettings(J,$)}resolveLastUsedProviderId($,J){let Q=$.lastUsedProvider;if(Q===Eb&&J.isClinePassEnabled===!1)return yb;return Q}getLastUsedProviderSettings($={}){let J=this.read(),Q=this.resolveLastUsedProviderId(J,$);if(!Q)return;return this.resolveProviderSettings(J,Q)}getProviderConfig($,J){let Q=this.getProviderSettings($);if(!Q)return;return d0(Q,J)}getLastUsedProviderConfig($={}){let J=this.getLastUsedProviderSettings($);if(!J)return;return d0(J,$)}async refreshCatalog(){try{await R8({})}catch{}}}O0();m8();function hb($,J){let Q=$?.expiresAt,Z=J?.expiresAt;return $?.accessToken===J?.accessToken&&$?.refreshToken===J?.refreshToken&&$?.accountId===J?.accountId&&Q===Z}class $Z 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 yj{providerSettingsManager;telemetry;refreshInFlight=new Map;constructor($){this.providerSettingsManager=$?.providerSettingsManager??new _1,this.telemetry=$?.telemetry}async resolveProviderApiKey($){let J=W0($.providerId);if(!J)return null;return this.resolveWithSingleFlight(J.providerId,J.storageProviderId,$.forceRefresh)}async resolveWithSingleFlight($,J,Q=!1){let Z=this.refreshInFlight.get(J);if(Z)return Z;let W=this.resolveProviderApiKeyInternal($,J,Q).catch((j)=>{throw j}).finally(()=>{this.refreshInFlight.delete(J)});return this.refreshInFlight.set(J,W),W}async resolveProviderApiKeyInternal($,J,Q){let Z=W0($);if(!Z)return null;let W=this.providerSettingsManager.getProviderSettings(J);if(!W)return null;let j=_4($,W);if(!j)return null;let X=await Z.refresh({settings:W,credentials:j,forceRefresh:Q,telemetry:this.telemetry});if(!X)throw new $Z($);let f=x$({manager:this.providerSettingsManager,providerId:$,settings:W,credentials:X,setLastUsed:!1,save:!1}),Y=!hb(W.auth,f.auth);if(Y)this.providerSettingsManager.saveProviderSettings(f,{setLastUsed:!1,tokenSource:"oauth"});return{apiKey:Z.getApiKey(f)??X.access,accountId:X.accountId,refreshed:Y}}}import{normalizeUserInput as kb}from"@cline/shared";import{nanoid as Ib}from"nanoid";class fF{list($){return $?e0($):[]}update($,J){if(!$)return{sessionId:J.sessionId,prompts:[],updated:!1};let Q=J.promptId.trim(),Z=$.pendingPrompts.findIndex((Y)=>Y.id===Q);if(Z<0)return{sessionId:J.sessionId,prompts:e0($),updated:!1};let W=$.pendingPrompts[Z];if(!W)return{sessionId:J.sessionId,prompts:e0($),updated:!1};let j=J.prompt===void 0?W.prompt:kb(J.prompt).trim();if(!j)throw Error("prompt cannot be empty");let X=J.delivery??W.delivery,f={...W,prompt:j,mode:J.mode??W.mode,delivery:X};return $.pendingPrompts.splice(Z,1),xb($,f,Z,W.delivery),{sessionId:J.sessionId,prompts:e0($),prompt:JZ(f),updated:!0}}delete($,J){if(!$)return{sessionId:J.sessionId,prompts:[],removed:!1};let Q=J.promptId.trim(),Z=$.pendingPrompts.findIndex((j)=>j.id===Q);if(Z<0)return{sessionId:J.sessionId,prompts:e0($),removed:!1};let[W]=$.pendingPrompts.splice(Z,1);return{sessionId:J.sessionId,prompts:e0($),prompt:W?JZ(W):void 0,removed:!0}}enqueue($,J){let{prompt:Q,mode:Z,delivery:W,userImages:j,userFiles:X}=J,f=$.pendingPrompts.findIndex((Y)=>Y.prompt===Q);if(f>=0){let[Y]=$.pendingPrompts.splice(f,1),V={...Y,prompt:Q,mode:Z??Y.mode,userImages:j??Y.userImages,userFiles:X??Y.userFiles};if(W==="steer"||Y.delivery==="steer")$.pendingPrompts.unshift({...V,delivery:"steer"});else $.pendingPrompts.push(V)}else{let Y={id:`pending_${Date.now()}_${Ib(5)}`,prompt:Q,mode:Z,delivery:W,userImages:j,userFiles:X};if(W==="steer")$.pendingPrompts.unshift(Y);else $.pendingPrompts.push(Y)}return e0($)}consumeSteer($){let J=$.pendingPrompts.findIndex((Z)=>Z.delivery==="steer");if(J<0)return{prompts:e0($)};let[Q]=$.pendingPrompts.splice(J,1);return{entry:Q,prompts:e0($)}}shiftNext($){return{entry:$.pendingPrompts.shift(),prompts:e0($)}}requeueFront($,J){return $.pendingPrompts.unshift(J),e0($)}clear($){return $.pendingPrompts.length=0,[]}}class Ej{deps;service=new fF;constructor($){this.deps=$}list($){return this.service.list(this.deps.getSession($))}update($){let J=this.deps.getSession($.sessionId);if(!J||J.aborting)return{sessionId:$.sessionId,prompts:[],updated:!1};let Q=this.service.update(J,$);return this.emitPrompts(J),this.scheduleDrain($.sessionId,J),Q}delete($){let J=this.deps.getSession($.sessionId);if(!J||J.aborting)return{sessionId:$.sessionId,prompts:[],removed:!1};let Q=this.service.delete(J,$);return this.emitPrompts(J),this.scheduleDrain($.sessionId,J),Q}enqueue($,J){let Q=this.deps.getSession($);if(!Q||Q.aborting)return;this.service.enqueue(Q,J),this.emitPrompts(Q),this.scheduleDrain($,Q)}consumeSteer($){let J=this.deps.getSession($);if(!J)return;let{entry:Q}=this.service.consumeSteer(J);if(!Q)return;return this.emitPrompts(J),this.emitSubmitted(J,Q),Q}clearAborted($){if($.pendingPrompts.length===0)return;this.service.clear($),this.emitPrompts($)}emitPrompts($){this.deps.emit({type:"pending_prompts",payload:{sessionId:$.sessionId,prompts:e0($)}})}scheduleDrain($,J){if(J.pendingPrompts.length===0||J.aborting||J.drainingPendingPrompts||!J.agent.canStartRun())return;queueMicrotask(()=>{this.drain($)})}async drain($){let J=this.deps.getSession($);if(!J)return;if(J.aborting||J.drainingPendingPrompts)return;if(!J.agent.canStartRun())return;let{entry:Q}=this.service.shiftNext(J);if(!Q)return;this.emitPrompts(J),this.emitSubmitted(J,Q),J.drainingPendingPrompts=!0;let Z=!0;try{await this.deps.send({sessionId:$,prompt:Q.prompt,...Q.mode?{mode:Q.mode}:{},userImages:Q.userImages,userFiles:Q.userFiles})}catch{Z=!1,this.service.requeueFront(J,Q),this.emitPrompts(J)}finally{if(J.drainingPendingPrompts=!1,Z&&J.pendingPrompts.length>0&&J.status!=="failed"&&J.status!=="cancelled")queueMicrotask(()=>{this.drain($)})}}emitSubmitted($,J){let Q=JZ(J);this.deps.emit({type:"pending_prompt_submitted",payload:{sessionId:$.sessionId,id:Q.id,prompt:Q.prompt,delivery:Q.delivery,attachmentCount:Q.attachmentCount}})}}function JZ($){return{id:$.id,prompt:$.prompt,delivery:$.delivery,attachmentCount:($.userImages?.length??0)+($.userFiles?.length??0)}}function e0($){return $.pendingPrompts.map(JZ)}function xb($,J,Q,Z){if(J.delivery==="steer")$.pendingPrompts.unshift(J);else if(Z==="steer")$.pendingPrompts.push(J);else $.pendingPrompts.splice(Q,0,J)}O0();class hj{deps;constructor($){this.deps=$}dispatchAgentEvent($,J,Q){let Z=this.deps.getSession($),W={sessionId:$,config:J,liveSession:Z,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit},j=V7(Q),X=!!Z&&(!j.agentId||j.agentId===bj(Z.agent));H7(W,Q,X?{isPrimaryAgentEvent:!0,agentId:bj(Z.agent),conversationId:Z.agent.getConversationId(),...Z?.runtime.teamRuntime?{teamRole:"lead"}:{}}:{isPrimaryAgentEvent:!1})}async handleTeamEvent($,J){let Q=this.deps.getSession($);if(Q){if(nW(Q,J),J.type==="agent_event"){let Z={sessionId:$,config:Q.config,liveSession:Q,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit};H7(Z,J.event,{agentId:J.agentId,teamRole:"teammate",teamAgentId:J.agentId,isPrimaryAgentEvent:!1})}if(J.type==="teammate_spawned"){let Z=g1({agentId:J.teammate.runtimeAgentId??J.agentId,conversationId:J.teammate.conversationId,parentAgentId:J.teammate.parentAgentId,createdByAgentId:bj(Q.agent),teamId:Q.runtime.teamRuntime?.getTeamId(),teamName:Q.runtime.teamRuntime?.getTeamName(),teamRole:"teammate",teamAgentId:J.agentId});if(Z)$$(Q.config.telemetry,{ulid:$,modelId:J.teammate.modelId??Q.config.modelId,provider:Q.config.providerId,...Z})}}if(await aW($,J,this.deps.invokeBackendOptional),Q)sW(Q,$,J,this.deps.emit)}async handlePluginEvent($,J,Q){if(J.name==="plugin_log"){this.handlePluginLog($,J.payload);return}if(J.name==="automation_event"){let Y=this.deps.getSession($)?.config.extensionContext?.automation??Q;if(!Y)return;let V=J.payload&&typeof J.payload==="object"?J.payload:void 0;if(!V)return;await Y.ingestEvent(V);return}if(J.name!=="steer_message"&&J.name!=="queue_message"&&J.name!=="pending_prompt")return;let Z=J.payload&&typeof J.payload==="object"?J.payload:void 0,W=typeof Z?.sessionId==="string"&&Z.sessionId.trim().length>0?Z.sessionId.trim():$,j=typeof Z?.prompt==="string"?Z.prompt.trim():"";if(!j)return;let X=J.name==="steer_message"?"steer":J.name==="queue_message"?"queue":Z?.delivery==="steer"?"steer":"queue";this.deps.enqueuePendingPrompt(W,{prompt:j,delivery:X})}handlePluginLog($,J,Q){let Z=this.deps.getSession($),W=Q??Z?.config.extensionContext?.logger??Z?.config.logger;if(!W||!J||typeof J!=="object")return;let j=J,X=typeof j.message==="string"?j.message:"";if(!X)return;let f=j.metadata&&typeof j.metadata==="object"?{...j.metadata}:{};if(f.sessionId??=$,typeof j.pluginName==="string"&&j.pluginName)f.pluginName=j.pluginName;if(j.level==="debug"){W.debug(X,f);return}if(j.level==="error"){if(W.error)W.error(X,f);else W.log(X,{...f,severity:"error"});return}W.log(X,f)}}function bj($){return $.getAgentId()}function kj($){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:G$($.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 Ij($,J){let Q=$[J];return typeof Q==="function"?Q:null}async function YF($,J,...Q){let Z=Ij($,J);if(!Z)throw Error(`session service method not available: ${J}`);return Promise.resolve(Z.apply($,Q))}async function VF($,J,...Q){let Z=Ij($,J);if(!Z)return;await Promise.resolve(Z.apply($,Q))}async function HF($,J,...Q){let Z=Ij($,J);if(!Z)return;return await Promise.resolve(Z.apply($,Q))}W1();O0();function xj($,J,Q){return{onSubAgentEvent:(Z)=>$.onAgentEvent(Q,J,Z),onSubAgentStart:(Z)=>{let W=$.getSession(Q)?.runtime.teamRuntime;$.subAgentStarts.set(Z.subAgentId,{startedAt:Date.now(),rootSessionId:Q});let j=g1({agentId:Z.subAgentId,conversationId:Z.conversationId,parentAgentId:Z.parentAgentId,teamId:W?.getTeamId(),teamName:W?.getTeamName(),createdByAgentId:Z.parentAgentId});if(j)$$(J.telemetry,{ulid:Q,modelId:J.modelId,provider:J.providerId,...j});A4(J.telemetry,{event:"started",ulid:Q,durationMs:0,parentId:Z.parentAgentId,agentId:Z.subAgentId,...j}),$.invokeBackendOptional("handleSubAgentStart",Q,Z)},onSubAgentEnd:(Z)=>{let W=$.getSession(Q)?.runtime.teamRuntime,j=$.subAgentStarts.get(Z.subAgentId),X=j?Date.now()-j.startedAt:0,f=Z.result?.text?Z.result.text.split(`
|
|
741
|
+
`).length:0;A4(J.telemetry,{event:"ended",ulid:Q,durationMs:X,outputLines:f,errorMessage:Z.error?String(Z.error):void 0,agentId:Z.subAgentId,parentId:Z.parentAgentId,...g1({agentId:Z.subAgentId,conversationId:Z.conversationId,parentAgentId:Z.parentAgentId,teamId:W?.getTeamId(),teamName:W?.getTeamName(),createdByAgentId:Z.parentAgentId})}),$.subAgentStarts.delete(Z.subAgentId),$.invokeBackendOptional("handleSubAgentEnd",Q,Z)}}}function gj($,J,Q,Z){let W=xj($,J,Q);return A$({configProvider:{getRuntimeConfig:()=>$.getSession(Q)?.runtime.delegatedAgentConfigProvider?.getRuntimeConfig()??{providerId:J.providerId,modelId:J.modelId,cwd:J.cwd,apiKey:J.apiKey,baseUrl:J.baseUrl,headers:J.headers,providerConfig:J.providerConfig,knownModels:J.knownModels,thinking:J.thinking,maxIterations:J.maxIterations,hooks:J.hooks,extensions:J.extensions,logger:J.logger,telemetry:J.telemetry},getConnectionConfig:()=>$.getSession(Q)?.runtime.delegatedAgentConfigProvider?.getConnectionConfig()??{providerId:J.providerId,modelId:J.modelId,apiKey:J.apiKey,baseUrl:J.baseUrl,headers:J.headers,providerConfig:J.providerConfig,knownModels:J.knownModels,thinking:J.thinking},updateConnectionDefaults:()=>{}},createSubAgentTools:()=>{let X=J.enableTools?n$({cwd:J.cwd,...c0[h1({mode:J.mode})],executors:Z}):[];if(J.enableSpawnAgent)X.push(gj($,J,Q,Z));return I1(X)},...W})}import{readFile as gb,stat as mb}from"node:fs/promises";var vb=20480000;async function BF($){let J=await mb($);if(!J.isFile())throw Error("Path is not a file");if(J.size>vb)throw Error("File is too large to read into context.");let Q=await gb($,"utf8");if(Q.includes("\x00"))throw Error("Cannot read binary file into context.");return Q}var AF=5000;function EJ($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function nb($){if(!$||typeof $!=="object"||Array.isArray($))return;let J=$,Q=EJ(J.inputTokens),Z=EJ(J.outputTokens),W=EJ(J.cacheReadTokens),j=EJ(J.cacheWriteTokens),X=EJ(J.totalCost);if(Q===void 0||Z===void 0||W===void 0||j===void 0||X===void 0)return;return{inputTokens:Q,outputTokens:Z,cacheReadTokens:W,cacheWriteTokens:j,totalCost:X}}function ab($,J){return{inputTokens:Math.max($.inputTokens,J.inputTokens),outputTokens:Math.max($.outputTokens,J.outputTokens),cacheReadTokens:Math.max($.cacheReadTokens,J.cacheReadTokens),cacheWriteTokens:Math.max($.cacheWriteTokens,J.cacheWriteTokens),totalCost:Math.max($.totalCost,J.totalCost)}}class z1{runtimeAddress=void 0;pendingPrompts;sessionService;runtimeBuilder;createAgentInstance;toolExecutors;defaultCapabilities;defaultToolPolicies;providerSettingsManager;oauthTokenManager;defaultTelemetry;defaultFetch;events=new JJ;sessions=new Map;usageBySession=new Map;aggregateUsageBySession=new Map;subAgentStarts=new Map;pendingPromptsController;eventBridge;sessionVersioning=new y$;constructor($){let J=ub();if(J)ib(J);let Q=b0($.distinctId);this.sessionService=$.sessionService,this.runtimeBuilder=$.runtimeBuilder??new j4,this.createAgentInstance=$.createAgent??((Z)=>new V$(Z)),this.defaultCapabilities=z0($.capabilities),this.toolExecutors=this.defaultCapabilities?.toolExecutors,this.defaultToolPolicies=$.toolPolicies,this.providerSettingsManager=$.providerSettingsManager??new _1,this.oauthTokenManager=$.oauthTokenManager??new yj({providerSettingsManager:this.providerSettingsManager,telemetry:$.telemetry}),this.defaultTelemetry=$.telemetry,this.defaultTelemetry?.setDistinctId(Q),this.defaultFetch=$.fetch,this.pendingPromptsController=new Ej({getSession:(Z)=>this.sessions.get(Z),emit:(Z)=>this.emit(Z),send:(Z)=>this.runTurn(Z)}),this.pendingPrompts={list:async(Z)=>this.pendingPromptsController.list(Z.sessionId),update:async(Z)=>this.pendingPromptsController.update(Z),delete:async(Z)=>this.pendingPromptsController.delete(Z)},this.eventBridge=new hj({getSession:(Z)=>this.sessions.get(Z),usageBySession:this.usageBySession,aggregateUsageBySession:this.aggregateUsageBySession,emit:(Z)=>this.emit(Z),persistMessages:(Z,W,j)=>{this.invoke("persistSessionMessages",Z,W,j)},enqueuePendingPrompt:(Z,W)=>this.pendingPromptsController.enqueue(Z,W),invokeBackendOptional:(Z,...W)=>this.invokeOptional(Z,...W)})}async applyInitialOAuthCredentials($){if($.config.apiKey?.trim())return $;let J=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId});if(!J?.apiKey)return $;return{...$,config:{...$.config,apiKey:J.apiKey}}}async startSession($){let J=$.source??U0.CLI,Q=$0(),Z=$.config.sessionId?.trim()??"",W=Z||lb(),j=await this.applyInitialOAuthCredentials($),X=j.initialMessages??[],f=X.length>0?f8(X):D0(),Y=await this.invokeOptionalValue("ensureSessionsDir")??"";if(!Y)throw Error("session service method not available: ensureSessionsDir");let V=mj(Y,W),H=mj(V,`${W}.messages.json`),B=mj(V,`${W}.json`),A=G$($.config),K=S0.parse({version:1,session_id:W,source:J,pid:process.pid,started_at:Q,status:"running",interactive:$.interactive===!0,provider:j.config.providerId,model:j.config.modelId,cwd:j.config.cwd,workspace_root:A,team_name:j.config.teamName,enable_tools:j.config.enableTools,enable_spawn:j.config.enableSpawnAgent,enable_teams:j.config.enableAgentTeams,prompt:j.prompt?.trim()||void 0,messages_path:H}),G;if(Z.length>0&&X.length>0&&!j.prompt?.trim()){let C=await this.invokeOptionalValue("readSessionManifest",W);if(C)K=C,G={manifestPath:B,messagesPath:C.messages_path||H,manifest:C}}let D=await this.seedAggregateUsageFromArtifacts({initialUsage:f,sessionDir:V,rootMessagesPath:G?.messagesPath??H,manifest:K});this.usageBySession.set(W,f),this.aggregateUsageBySession.set(W,D);let U=z0(this.defaultCapabilities,$.capabilities),F=U?.toolExecutors??this.toolExecutors,O=$.localRuntime,T=O?.extensionContext?.logger??O?.logger,z=O?.extensionContext?.automation,L,P={getSession:(C)=>this.sessions.get(C),subAgentStarts:this.subAgentStarts,onAgentEvent:(C,f0,Y0)=>this.eventBridge.dispatchAgentEvent(C,f0,Y0),invokeBackendOptional:(C,...f0)=>this.invokeOptional(C,...f0)};L=await iV({input:j,localRuntime:$.localRuntime,sessionId:W,providerSettingsManager:this.providerSettingsManager,defaultTelemetry:this.defaultTelemetry,defaultCapabilities:U,defaultToolPolicies:this.defaultToolPolicies,defaultFetch:this.defaultFetch,onPluginEvent:(C)=>{if(C.name==="plugin_log"){this.eventBridge.handlePluginLog(W,C.payload,T);return}this.eventBridge.handlePluginEvent(W,C,z)},onTeamEvent:(C)=>{this.eventBridge.handleTeamEvent(W,C),L.config.onTeamEvent?.(C)},createSpawnTool:()=>gj(P,L.config,W,F),createSubAgentLifecycleCallbacks:(C)=>xj(P,C,W),readSessionMetadata:async()=>(await this.getSession(W))?.metadata,writeSessionMetadata:async(C)=>{await this.persistSessionMetadata(W,()=>C)}});let S=await this.runtimeBuilder.build(L.runtimeBuilderInput),b=L.config,u=L.providerConfig;if(S.teamRuntime&&!b.teamName?.trim())b.teamName=S.teamRuntime.getTeamName();let t=[...S.tools,...b.extraTools??[]],Q0=S.extensions??L.extensions,e={sessionId:W,providerId:u.providerId,modelId:u.modelId,apiKey:u.apiKey,baseUrl:u.baseUrl,headers:u.headers,knownModels:u.knownModels,providerConfig:u,thinking:b.thinking,reasoningEffort:b.reasoningEffort??u.reasoningEffort,systemPrompt:b.systemPrompt,maxIterations:b.maxIterations,execution:b.execution,prepareTurn:N4(b),tools:t,hooks:L.hooks,extensions:Q0,hookErrorMode:b.hookErrorMode,initialMessages:L.effectiveInput.initialMessages,userFileContentLoader:BF,toolPolicies:L.toolPolicies,requestToolApproval:L.requestToolApproval?async(C)=>{let f0=L.requestToolApproval,Y0=this.sessions.get(W);if(Y0)await this.markTurnPending(Y0);try{if(!f0)return{approved:!1,reason:"Tool approval callback is not configured."};return await f0(C)}finally{let w0=this.sessions.get(W);if(w0?.status==="pending")await this.markTurnRunning(w0)}}:void 0,telemetry:b.telemetry,onConsecutiveMistakeLimitReached:b.onConsecutiveMistakeLimitReached,completionPolicy:S.completionPolicy,consumePendingUserMessage:()=>{let C=this.pendingPromptsController.consumeSteer(W);return C?GJ(C.prompt,C.mode??b.mode):void 0},logger:S.logger??b.logger,extensionContext:b.extensionContext,onEvent:(C)=>this.eventBridge.dispatchAgentEvent(W,b,C)};e.hooks={...e.hooks,onEvent:async(C)=>{if(await L.hooks?.onEvent?.(C),C.type!=="assistant-message")return;let f0=this.sessions.get(W);if(!f0)return;let Y0=f0.agent.getMessages();try{await this.invoke("persistSessionMessages",W,Y0,b.systemPrompt)}catch(w0){b.logger?.error?.("Failed to persist session messages after assistant response",{sessionId:W,error:w0}),h2(b.telemetry,{component:"core",operation:"session.persist_messages_after_assistant_response",error:w0,severity:"warn",handled:!0,context:{sessionId:W,providerId:b.providerId,modelId:b.modelId}})}}};let $1=this.createAgentInstance(e);if(e.onEvent)$1.subscribeEvents(e.onEvent);S.registerLeadAgent?.($1);let b$=g1({agentId:$1.getAgentId(),conversationId:$1.getConversationId(),teamId:S.teamRuntime?.getTeamId(),teamName:S.teamRuntime?.getTeamName(),teamRole:S.teamRuntime?"lead":void 0});if(aV(b,W,Z.length>0,A,b$),b$)$$(b.telemetry,{ulid:W,modelId:b.modelId,provider:b.providerId,...b$});if(S.teamRuntime)aJ(b.telemetry,{ulid:W,teamId:S.teamRuntime.getTeamId(),teamName:S.teamRuntime.getTeamName(),leadAgentId:$1.getAgentId(),restoredFromPersistence:S.teamRestoredFromPersistence===!0});let r={sessionId:W,config:b,sessionMetadata:j.sessionMetadata,...G?{artifacts:G}:{},source:J,startedAt:G?.manifest.started_at??Q,updatedAt:G?.manifest.ended_at??G?.manifest.started_at??Q,pendingPrompt:K.prompt,runtime:S,agent:$1,started:!1,status:G?.manifest.status??"running",aborting:!1,interactive:$.interactive===!0,persistedMessages:X,activeTeamRunIds:new Set,pendingTeamRunUpdates:[],teamRunWaiters:[],pendingPrompts:[],drainingPendingPrompts:!1,pluginSandboxShutdown:L.pluginSandboxShutdown,submitAndExitObserved:!1,lastInteractiveTurnFinishReason:void 0};if(this.sessions.set(W,r),this.emitStatus(W,"running"),X.length>0&&!G){if(await this.ensureSessionPersisted(r),await this.invoke("persistSessionMessages",r.sessionId,X,r.config.systemPrompt),!j.prompt?.trim())await this.updateStatus(r,"completed",0)}let O1;try{if(j.prompt?.trim())if(O1=await this.executeTurn(r,{prompt:j.prompt,userImages:j.userImages,userFiles:j.userFiles}),!r.interactive)await this.finalizeSingleRun(r,O1.finishReason);else await this.completeInteractiveTurn(r,O1.finishReason)}catch(C){if(r.interactive&&r.aborting)O1=await this.completeAbortedInteractiveTurn(r);else{h2(r.config.telemetry,{component:"core",operation:"session.start",error:C,severity:"error",handled:!1,context:{sessionId:r.sessionId,providerId:r.config.providerId,modelId:r.config.modelId}});try{await this.failSession(r)}catch(f0){r.config.logger?.error?.("Session failure cleanup threw",{sessionId:r.sessionId,error:f0})}throw C}}return{sessionId:W,manifest:K,manifestPath:B,messagesPath:H,result:O1}}async restoreSession($){return this.sessionVersioning.restoreCheckpoint({...$,getSession:(J)=>this.getSession(J),readMessages:(J)=>this.readSessionMessages(J),buildStartInput:(J,Q)=>{let Z=J.restoredCheckpointMetadata?{...Q.sessionMetadata??{},checkpoint:J.restoredCheckpointMetadata}:Q.sessionMetadata;return{...Q,...Z?{sessionMetadata:Z}:{},initialMessages:J.initialMessages}},startSession:(J)=>this.startSession(J),getStartedSessionId:(J)=>J.sessionId,readRestoredSession:(J)=>this.getSession(J)})}async runTurn($){let J=this.getSessionOrThrow($.sessionId),Q=J.agent.canStartRun(),Z=$.delivery??(J.interactive&&!Q?"queue":void 0);if(J.config.telemetry?.capture({event:"session.input_sent",properties:{sessionId:$.sessionId,promptLength:$.prompt.length,userImageCount:$.userImages?.length??0,userFileCount:$.userFiles?.length??0,delivery:Z??"immediate"}}),Z==="queue"||Z==="steer"){this.pendingPromptsController.enqueue($.sessionId,{prompt:$.prompt,mode:$.mode,delivery:Z,userImages:$.userImages,userFiles:$.userFiles});return}try{let W=await this.executeTurn(J,{prompt:$.prompt,mode:$.mode,userImages:$.userImages,userFiles:$.userFiles});if(!J.interactive)await this.finalizeSingleRun(J,W.finishReason);else await this.completeInteractiveTurn(J,W.finishReason);if(W.finishReason==="error"||W.finishReason==="aborted")return W;return queueMicrotask(()=>{this.pendingPromptsController.drain($.sessionId)}),W}catch(W){if(J.interactive&&J.aborting)return await this.completeAbortedInteractiveTurn(J);throw h2(J.config.telemetry,{component:"core",operation:"session.submit",error:W,severity:"error",handled:!1,context:{sessionId:J.sessionId,providerId:J.config.providerId,modelId:J.config.modelId}}),await this.failSession(J),W}}async getAccumulatedUsage($){let J=OW(this.usageBySession.get($)),Q=OW(this.aggregateUsageBySession.get($));return J||Q?{usage:J,aggregateUsage:Q}:void 0}async abort($,J){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(J)}async stopSession($){let J=this.sessions.get($);if(!J)return;if(J.config.telemetry?.capture({event:"session.stopped",properties:{sessionId:$}}),J.interactive&&!X0(J.status)){await this.releaseSessionRuntime(J,"session_stop");return}if(J.interactive&&J.agent.canStartRun()){await this.shutdownSession(J,{status:this.resolveInteractiveStopStatus(J),exitCode:this.resolveInteractiveStopExitCode(J),shutdownReason:"session_stop",endReason:"stopped"});return}J.aborting=!0,J.agent.abort(Error("session_stop")),await this.shutdownSession(J,{status:"cancelled",exitCode:0,shutdownReason:"session_stop",endReason:"stopped"})}async dispose($="session_manager_dispose"){let J=[...this.sessions.values()];if(J.length===0)return;await Promise.allSettled(J.map((Q)=>Q.interactive&&!X0(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 J=this.sessions.get($);if(J)return kj(J);let Q=$.trim();if(!Q)return;let Z=await this.getRow(Q);if(Z)return W6(Z);let W=await this.readManifest(Q);return W?pQ(W):void 0}async listSessions($=200){let Q=(await this.listRows($)).map(W6),Z=new Set(Q.map((W)=>W.sessionId));for(let W of this.sessions.values()){if(Z.has(W.sessionId))continue;Q.unshift(kj(W))}return Q.slice(0,$)}async deleteSession($){if(this.sessions.has($))await this.stopSession($);let J=await this.invoke("deleteSession",$);if(J.deleted)this.usageBySession.delete($),this.aggregateUsageBySession.delete($);return J.deleted}async updateSession($,J){return{updated:(await this.invokeOptionalValue("updateSession",{sessionId:$,prompt:J.prompt,metadata:J.metadata,title:J.title}))?.updated===!0}}async readSessionMessages($){let J=$.trim();if(!J)return[];let Q=await this.getRow(J);if(Q?.messagesPath)return q$(Q.messagesPath);let Z=await this.readManifest(J);return q$(Z?.messages_path)}async dispatchHookEvent($){await RB($,{queueSpawnRequest:(J)=>this.invokeOptional("queueSpawnRequest",J),upsertSubagentSessionFromHook:(J)=>this.invokeOptionalValue("upsertSubagentSessionFromHook",J),appendSubagentHookAudit:(J,Q)=>this.invokeOptional("appendSubagentHookAudit",J,Q),applySubagentStatus:(J,Q)=>this.invokeOptional("applySubagentStatus",J,Q)})}subscribe($,J){return this.events.subscribe($,J)}async updateSessionModel($,J){let Q=this.getSessionOrThrow($);Q.config.modelId=J,Q.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({modelId:J}),Q.agent.updateConnection({modelId:J})}handlePluginEvent($,J,Q){return this.eventBridge.handlePluginEvent($,J,Q)}async executeTurn($,J){let Q=await this.prepareTurnInput($,J),Z=Q.prompt.trim();if(!Z)throw Error("prompt cannot be empty");if(!$.artifacts&&!$.pendingPrompt)$.pendingPrompt=Z;await this.ensureSessionPersisted($),await this.syncOAuthCredentials($),await this.markTurnRunning($);let W=await this.executeAgentTurn($,Z,Q.userImages,Q.userFiles);while(oW($,W.finishReason)){let j=await tW($);if(j.length===0)break;let X=eW($,j);W=await this.executeAgentTurn($,X)}return W}async completeInteractiveTurn($,J){if(KJ($))return;$.lastInteractiveTurnFinishReason=J,await this.markTurnIdle($),$.aborting=!1}resolveInteractiveStopStatus($){let J=$.lastInteractiveTurnFinishReason;if(!J)return"cancelled";switch(J){case"completed":return"completed";case"error":return"failed";case"aborted":case"max_iterations":case"mistake_limit":return"cancelled"}return J}resolveInteractiveStopExitCode($){return $.lastInteractiveTurnFinishReason==="error"?1:0}async completeAbortedInteractiveTurn($){let J=new Date,Q=$.agent.getMessages(),Z=D0();return $.persistedMessages=Q,$.started=$.started||Q.length>0,this.eventBridge.dispatchAgentEvent($.sessionId,$.config,{type:"done",reason:"aborted",text:"",iterations:0,usage:Z}),await this.completeInteractiveTurn($,"aborted"),{text:"",usage:Z,messages:Q,toolCalls:[],iterations:0,finishReason:"aborted",model:{id:$.config.modelId,provider:$.config.providerId},startedAt:J,endedAt:J,durationMs:0}}async executeAgentTurn($,J,Q,Z){let W=$.started||$.agent.getMessages().length>0,j=$.persistedMessages??$.agent.getMessages(),X=this.usageBySession.get($.sessionId)??D0(),f=this.aggregateUsageBySession.get($.sessionId)??X;$.turnUsageBaseline=X,$.turnAggregateUsageBaseline=f,$.turnPrimaryUsage=D0(),$.turnUsageByAgent=new Map,uJ($.config.telemetry,$.sessionId,$.config.mode),g2($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,model:$.config.modelId,source:"user",mode:$.config.mode,...this.getSessionAgentTelemetryIdentity($)});try{let Y=W?()=>$.agent.continue(J,Q,Z):()=>$.agent.run(J,Q,Z),V=await this.runWithAuthRetry($,Y,j);$.started=!0;let H=x5(V.messages,V,j);$.persistedMessages=H;let B=X6($.turnUsageByAgent?.values()??[]),A=A0(X,V.usage),K=A0(A0(D0(),V.usage),B),G=A0(f,K);return this.usageBySession.set($.sessionId,A),this.aggregateUsageBySession.set($.sessionId,G),await this.persistSessionMetadata($.sessionId,(R)=>({...R??{},totalCost:A.totalCost,aggregatedAgentsCost:G.totalCost,usage:A,aggregateUsage:G})),await this.invoke("persistSessionMessages",$.sessionId,H,$.config.systemPrompt),this.observeTaskCompletionTool($,V),V}catch(Y){throw h2($.config.telemetry,{component:"core",operation:"session.turn",error:Y,severity:"error",handled:!1,context:{sessionId:$.sessionId,providerId:$.config.providerId,modelId:$.config.modelId}}),await this.invoke("persistSessionMessages",$.sessionId,$.agent.getMessages(),$.config.systemPrompt),Y}finally{$.turnUsageBaseline=void 0,$.turnAggregateUsageBaseline=void 0,$.turnPrimaryUsage=void 0,$.turnUsageByAgent=void 0}}observeTaskCompletionTool($,J){if($.submitAndExitObserved)return;if(!J.toolCalls.some((Z)=>Z.name===F0.SUBMIT_AND_EXIT&&Z.error===void 0))return;$.submitAndExitObserved=!0,H4($.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($,J){let Q=G$($.config),Z=rb(J.prompt).trim();if(!Z)return{prompt:"",userImages:J.userImages,userFiles:this.resolveAbsoluteFilePaths($.config.cwd,J.userFiles)};let W=await a2(Z,Q);sV($.config.telemetry,W);let j=GJ(W.prompt,J.mode??$.config.mode),X=this.resolveAbsoluteFilePaths($.config.cwd,J.userFiles),f=this.resolveAbsoluteFilePaths(Q,W.matchedFiles),Y=Array.from(new Set([...X,...f]));return{prompt:j,userImages:J.userImages,userFiles:Y.length>0?Y:void 0}}async ensureSessionPersisted($){if($.artifacts)return;let J=G$($.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:J,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($,J){let Q=this.sessions.get($),Z=await this.invokeOptionalValue("readSessionManifest",$)??Q?.artifacts?.manifest,W=J(Z?.metadata);if(!Q?.artifacts)return;if((await this.invokeOptionalValue("updateSession",{sessionId:$,metadata:W}))?.updated===!1)return;Q.sessionMetadata=W,Q.artifacts.manifest.metadata=W}async finalizeSingleRun($,J){if(KJ($))return;let Q=J==="aborted"||$.aborting,Z=J==="error";await this.shutdownSession($,{status:Q?"cancelled":Z?"failed":"completed",exitCode:Z?1:0,shutdownReason:Z?"session_error":"session_complete",endReason:J})}async failSession($){await this.shutdownSession($,{status:"failed",exitCode:1,shutdownReason:"session_error",endReason:"error"})}async shutdownSession($,J){if(J.status==="completed"&&!$.submitAndExitObserved)H4($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"shutdown",...this.getSessionAgentTelemetryIdentity($)});Y9($);let Q=[],Z=(W,j)=>{Q.push(j),$.config.logger?.log("Session shutdown cleanup failed",{sessionId:$.sessionId,stage:W,error:j,severity:"warn"}),h2($.config.telemetry,{component:"core",operation:"session.shutdown_cleanup",error:j,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:W,status:J.status,shutdownReason:J.shutdownReason,providerId:$.config.providerId,modelId:$.config.modelId}})};if($.artifacts){try{await this.updateStatus($,J.status,J.exitCode)}catch(W){Z("update_status",W)}try{await $.agent.shutdown(J.shutdownReason)}catch(W){Z("agent_shutdown",W)}}try{await Promise.resolve($.runtime.shutdown(J.shutdownReason))}catch(W){Z("runtime_shutdown",W)}try{await $.pluginSandboxShutdown?.()}catch(W){Z("plugin_sandbox_shutdown",W)}if(this.sessions.delete($.sessionId),this.emit({type:"ended",payload:{sessionId:$.sessionId,reason:J.endReason,ts:Date.now()}}),Q.length>0&&J.status==="failed")throw Q[0]}async releaseSessionRuntime($,J){let Q=[],Z=(W,j)=>{Q.push(j),$.config.logger?.log("Session runtime cleanup failed",{sessionId:$.sessionId,stage:W,error:j,severity:"warn"}),h2($.config.telemetry,{component:"core",operation:"session.runtime_cleanup",error:j,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:W,reason:J,providerId:$.config.providerId,modelId:$.config.modelId}})};try{await $.agent.shutdown(J)}catch(W){Z("agent_shutdown",W)}try{await Promise.resolve($.runtime.shutdown(J))}catch(W){Z("runtime_shutdown",W)}try{await $.pluginSandboxShutdown?.()}catch(W){Z("plugin_sandbox_shutdown",W)}if(this.sessions.delete($.sessionId),Q.length>0)throw Q[0]}async updateStatus($,J,Q){if(!$.artifacts)return;let Z=await this.invoke("updateSessionStatus",$.sessionId,J,Q);if(!Z.updated)return;let W=await this.invokeOptionalValue("readSessionManifest",$.sessionId)??$.artifacts.manifest;if(W.status=J,X0(J))delete W.ended_at,W.exit_code=null;else W.ended_at=Z.endedAt??$0(),W.exit_code=typeof Q==="number"?Q:null;$.artifacts.manifest=W,$.status=J,$.updatedAt=Z.endedAt??$0(),$.endedAt=X0(J)?null:W.ended_at,$.exitCode=W.exit_code,await this.invoke("writeSessionManifest",$.artifacts.manifestPath,W),this.emitStatus($.sessionId,J)}async runWithAuthRetry($,J,Q){try{return await J()}catch(Z){if(!I$($.config.providerId)||!pb(Z))throw Z;return await this.syncOAuthCredentials($,{forceRefresh:!0}),$.agent.restore(Q),J()}}async syncOAuthCredentials($,J){let Q=null;try{Q=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId,forceRefresh:J?.forceRefresh})}catch(Z){if(Z instanceof $Z)throw Error(`${Z.providerId} requires re-authentication.`);throw Z}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 J=this.sessions.get($);if(!J){let Q=new u1($);throw h2(this.defaultTelemetry,{component:"core",operation:"session.active_lookup",error:Q,severity:"warn",handled:!0,context:{sessionId:$,activeSessionCount:this.sessions.size}}),Q}return J}resolveAbsoluteFilePaths($,J){if(!J||J.length===0)return[];let Q=J.map((Z)=>Z.trim()).filter((Z)=>Z.length>0).map((Z)=>db(Z)?Z:vj($,Z));return Array.from(new Set(Q))}getSessionAgentTelemetryIdentity($){return g1({agentId:$.agent.getAgentId(),conversationId:$.agent.getConversationId(),teamId:$.runtime.teamRuntime?.getTeamId(),teamName:$.runtime.teamRuntime?.getTeamName(),teamRole:$.runtime.teamRuntime?"lead":void 0})}async seedAggregateUsageFromArtifacts($){let J=await this.summarizePersistedTeammateUsage($.sessionDir,$.rootMessagesPath,$.manifest.session_id),Q=A0($.initialUsage,J);return this.withPersistedAggregateUsageFloor(Q,$.manifest)}async summarizePersistedTeammateUsage($,J,Q){let Z=vj(J),W=`${Q}.messages.json`,j;try{j=cb($)}catch{return D0()}let X=D0();for(let f of j){if(!f.endsWith(".messages.json"))continue;if(f===W)continue;let Y=vj($,f);if(Y===Z)continue;let V=await q$(Y);if(V.length===0)continue;X=A0(X,f8(V))}return X}withPersistedAggregateUsageFloor($,J){let Q=nb(J.metadata?.aggregateUsage);if(Q)return ab($,Q);let Z=J.metadata?.aggregatedAgentsCost;if(typeof Z!=="number"||!Number.isFinite(Z)||Z<=$.totalCost)return $;return{...$,totalCost:Z}}emitStatus($,J){this.emitSessionSnapshot($),this.emit({type:"status",payload:{sessionId:$,status:J}})}async emitSessionSnapshot($){let J=await this.getSession($);if(!J)return;this.emit({type:"session_snapshot",payload:{sessionId:$,snapshot:F1({session:J,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($)),AF))}async getRow($){let J=$.trim();if(!J)return;return(await this.listRows(AF)).find((Z)=>Z.sessionId===J)}async readManifest($){let J=$.trim();if(!J)return;return await this.invokeOptionalValue("readSessionManifest",J)}invoke($,...J){return YF(this.sessionService,$,...J)}invokeOptional($,...J){return VF(this.sessionService,$,...J)}invokeOptionalValue($,...J){return HF(this.sessionService,$,...J)}}function ob($){return{text:$.text,usage:$.usage,inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,iterations:$.iterations,finishReason:$.finishReason,toolCalls:$.toolCalls.map((J)=>({name:J.name,input:J.input,output:J.output,error:J.error,durationMs:J.durationMs}))}}function tb($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}function T9($={}){let J=new z1({sessionService:new L1(new U1),fetch:$.fetch,telemetry:$.telemetry});return{async startSession(Q){let Z=(Q.cwd?.trim()||Q.workspaceRoot).trim(),W=await J.startSession({source:Q.source?.trim()||U0.CLI,interactive:!1,config:{providerId:sb(Q.provider),modelId:Q.model,apiKey:Q.apiKey?.trim()||void 0,cwd:Z,workspaceRoot:Q.workspaceRoot,systemPrompt:Q.systemPrompt??"",mode:tb(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:W.sessionId,startResult:{sessionId:W.sessionId,manifestPath:W.manifestPath,messagesPath:W.messagesPath}}},async sendSession(Q,Z){let W=await J.runTurn({sessionId:Q,prompt:Z.prompt,userImages:Z.attachments?.userImages,userFiles:Z.attachments?.userFiles?.map((j)=>j.content)});if(!W)throw Error("local hub schedule runtime returned no turn result");return{result:ob(W)}},async abortSession(Q){return await J.abort(Q,Error("hub schedule abort")),{applied:!0}},async stopSession(Q){return await J.stopSession(Q),{applied:!0}}}}$h(process.env.CLINE_VCR);function Qh($){let J=process.cwd(),Q,Z,W;for(let j=0;j<$.length;j+=1){let X=$[j],f=$[j+1];if(X==="--cwd"&&f){J=f,j+=1;continue}if(X==="--host"&&f){Q=f,j+=1;continue}if(X==="--port"&&f){let Y=Number(f);if(Number.isFinite(Y))Z=Y;j+=1;continue}if(X==="--pathname"&&f)W=f,j+=1}return{cwd:J,host:Q,port:Z,pathname:W}}async function Zh(){let $=Qh(process.argv.slice(2));process.chdir($.cwd);let J=i0({host:$.host,port:$.port,pathname:$.pathname}),Q=await C2({host:J.host,port:J.port,pathname:J.pathname,owner:Jh()==="production"?n0():E0(),runtimeHandlers:T9(),cronOptions:{workspaceRoot:$.cwd}}),Z=async()=>{await Q.close(),process.exit(0)},W=!1,j=(X,f)=>{if(W)return;W=!0;let Y=f instanceof Error?f.stack||f.message:String(f);process.stderr.write(`[hub-daemon] ${X}: ${Y}
|
|
742
742
|
`),Q.close().catch((V)=>{let H=V instanceof Error?V.stack||V.message:String(V);process.stderr.write(`[hub-daemon] shutdown after ${X} failed: ${H}
|
|
743
743
|
`)}).finally(()=>{process.exit(1)})};process.on("SIGINT",()=>{Z()}),process.on("SIGTERM",()=>{Z()}),process.on("uncaughtException",(X)=>{j("uncaughtException",X)}),process.on("unhandledRejection",(X)=>{if(X instanceof eb){process.stderr.write(`[hub-daemon] ignored agent runtime abort rejection: ${X.message}
|
|
744
744
|
`);return}j("unhandledRejection",X)}),await new Promise(()=>{})}Zh().catch(($)=>{let J=$ instanceof Error?$.stack||$.message:String($);process.stderr.write(`[hub-daemon] fatal: ${J}
|