@cline/core 0.0.54-nightly.1782962319 → 0.0.55

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/index.js CHANGED
@@ -1,19 +1,19 @@
1
- import{createRequire as OD}from"node:module";var{defineProperty:ZW,getOwnPropertyNames:_D}=Object;var Wj=Object.prototype.hasOwnProperty;function Jj($){return this[$]}var R=($,Z,Q)=>{var W=_D(Z);for(let J of W)if(!Wj.call($,J)&&J!=="default")ZW($,J,{get:Jj.bind(Z,J),enumerable:!0});if(Q){for(let J of W)if(!Wj.call(Q,J)&&J!=="default")ZW(Q,J,{get:Jj.bind(Z,J),enumerable:!0});return Q}};var zD=($)=>$;function TD($,Z){this[$]=zD.bind(null,Z)}var N=($,Z)=>{for(var Q in Z)ZW($,Q,{get:Z[Q],enumerable:!0,configurable:!0,set:TD.bind(Z,Q)})};var p$=($,Z)=>()=>($&&(Z=$($=0)),Z);var Xj=OD(import.meta.url);import{AGENT_UNEXPECTED_REASONING_TOKENS_EVENT as XL,captureAgentUnexpectedReasoningTokens as Rj,SDK_ERROR_TELEMETRY_EVENT as YL}from"@cline/shared";function i($,Z,Q){$?.capture({event:Z,properties:Q})}function z9($){if(!$)return;return $.substring(0,jL)}function VL($){if(typeof $==="string")return"Error";return $.name?.trim()||$.constructor?.name||"Error"}function HL($){return typeof $==="string"?$:$.message}function Mj($,Z){return $.some((Q)=>Z.has(Q.trim().toLowerCase()))}function Ej($){i($,m.CLIENT.EXTENSION_ACTIVATED)}function T9($,Z){let Q=[...Z.vcs_types],W={root_count:Z.root_count,vcs_types:Q,is_multi_root:Z.root_count>1,has_git:Mj(Q,new Set(["git"])),has_mercurial:Mj(Q,new Set(["mercurial","hg"]))};if(Z.init_duration_ms!==void 0)W.init_duration_ms=Z.init_duration_ms;if(Z.feature_flag_enabled!==void 0)W.feature_flag_enabled=Z.feature_flag_enabled;if(Z.is_remote_workspace!==void 0)W.is_remote_workspace=Z.is_remote_workspace;i($,m.WORKSPACE.INITIALIZED,W)}function O9($,Z,Q){i($,m.WORKSPACE.INIT_ERROR,{error_type:VL(Z),error_message:z9(HL(Z)),fallback_to_single_root:Q.fallback_to_single_root,workspace_count:Q.workspace_count??0})}function Nj($,Z){i($,m.WORKSPACE.PATH_RESOLVED,{...Z})}function w1($,Z){i($,m.USER.AUTH_STARTED,{provider:Z})}function C1($,Z){i($,m.USER.AUTH_SUCCEEDED,{provider:Z})}function P1($,Z,Q){i($,m.USER.AUTH_FAILED,{provider:Z,errorMessage:z9(Q)})}function V$($,Z,Q){i($,m.USER.AUTH_LOGGED_OUT,{provider:Z,reason:Q})}function wj($,Z){i($,m.USER.PROVIDER_CONFIGURED,{provider:Z})}function Cj($,Z){$?.captureRequired(m.USER.TELEMETRY_OPT_OUT,Z)}function S1($,Z){let Q=Z.id?.trim();if(Q)$?.setDistinctId(Q);$?.updateCommonProperties({account_id:Z.id,account_email:Z.email,provider:Z.provider,organization_id:Z.organizationId,organization_name:Z.organizationName,member_id:Z.memberId})}function q9($,Z){i($,m.TASK.CREATED,Z)}function M9($,Z){i($,m.TASK.RESTARTED,Z)}function g4($,Z){i($,m.TASK.COMPLETED,Z)}function Z8($,Z){i($,m.TASK.CONVERSATION_TURN,{...Z,timestamp:new Date().toISOString()})}function R9($,Z){i($,m.TASK.TOKEN_USAGE,Z)}function E9($,Z,Q){i($,m.TASK.MODE_SWITCH,{ulid:Z,mode:Q})}function Q8($,Z){i($,m.TASK.TOOL_USED,Z)}function N9($,Z){i($,m.TASK.SKILL_USED,Z)}function w9($,Z){i($,m.TASK.DIFF_EDIT_FAILED,Z)}function m4($,Z){i($,m.TASK.PROVIDER_API_ERROR,{...Z,errorMessage:z9(Z.errorMessage)??"unknown",timestamp:new Date().toISOString()})}function Pj($,Z){i($,m.SDK.TOOL_TIMEOUT,BL(Z))}function BL($){let Z={};for(let[Q,W]of Object.entries($))if(W!==void 0)Z[Q]=W;return Z}function C9($,Z,Q){i($,m.TASK.MENTION_USED,{mentionType:Z,contentLength:Q,timestamp:new Date().toISOString()})}function P9($,Z,Q,W){i($,m.TASK.MENTION_FAILED,{mentionType:Z,errorType:Q,errorMessage:z9(W),timestamp:new Date().toISOString()})}function S9($,Z,Q,W,J){i($,m.TASK.MENTION_SEARCH_RESULTS,{queryLength:Z.length,resultCount:Q,searchType:W,isEmpty:J,timestamp:new Date().toISOString()})}function H$($,Z){i($,m.TASK.AGENT_CREATED,{...Z,timestamp:new Date().toISOString()})}function b9($,Z){i($,m.TASK.AGENT_TEAM_CREATED,{...Z,timestamp:new Date().toISOString()})}function v4($,Z){i($,Z.event==="ended"?m.TASK.SUBAGENT_COMPLETED:m.TASK.SUBAGENT_STARTED,{...Z,timestamp:new Date().toISOString()})}function y9($,Z,Q,W){i($,m.HOOKS.DISCOVERY_COMPLETED,{hookName:Z,globalCount:Q,workspaceCount:W,totalCount:Q+W,timestamp:new Date().toISOString()})}function h9($,Z){i($,m.TASK.COMPACTION_EXECUTED,{...Z,timestamp:new Date().toISOString()})}function k9($,Z){i($,m.TASK.COMPACTION_SKIPPED,{...Z,timestamp:new Date().toISOString()})}var jL=500,m;var _0=p$(()=>{m={CLIENT:{EXTENSION_ACTIVATED:"user.extension_activated"},SESSION:{STARTED:"session.started",ENDED:"session.ended"},AGENT:{UNEXPECTED_REASONING_TOKENS:XL},USER:{AUTH_STARTED:"user.auth_started",AUTH_SUCCEEDED:"user.auth_succeeded",AUTH_FAILED:"user.auth_failed",AUTH_LOGGED_OUT:"user.auth_logged_out",PROVIDER_CONFIGURED:"user.provider_configured",TELEMETRY_OPT_OUT:"user.opt_out"},TASK:{CREATED:"task.created",RESTARTED:"task.restarted",COMPLETED:"task.completed",CONVERSATION_TURN:"task.conversation_turn",TOKEN_USAGE:"task.tokens",MODE_SWITCH:"task.mode",TOOL_USED:"task.tool_used",SKILL_USED:"task.skill_used",DIFF_EDIT_FAILED:"task.diff_edit_failed",PROVIDER_API_ERROR:"task.provider_api_error",MENTION_USED:"task.mention_used",MENTION_FAILED:"task.mention_failed",MENTION_SEARCH_RESULTS:"task.mention_search_results",AGENT_CREATED:"task.agent_created",AGENT_TEAM_CREATED:"task.agent_team_created",SUBAGENT_STARTED:"task.subagent_started",SUBAGENT_COMPLETED:"task.subagent_completed",COMPACTION_EXECUTED:"task.compaction_executed",COMPACTION_SKIPPED:"task.compaction_skipped"},HOOKS:{DISCOVERY_COMPLETED:"hooks.discovery_completed"},WORKSPACE:{INITIALIZED:"workspace.initialized",INIT_ERROR:"workspace.init_error",PATH_RESOLVED:"workspace.path_resolved"},SDK:{ERROR:YL,TOOL_TIMEOUT:"sdk.tool_timeout"},FEATURE_FLAGS:{FLAG_CALLED:"$feature_flag_called"}}});import{mkdirSync as GL,readFileSync as KL,statSync as FL,writeFileSync as AL}from"node:fs";import{dirname as fL}from"node:path";import{resolveGlobalSettingsPath as bj}from"@cline/shared/storage";import{z as W8}from"zod";function I9(){return c4.parse({})}function UL(){x9=void 0}function DL($){if($.disabledTools)Object.freeze($.disabledTools);if($.disabledPlugins)Object.freeze($.disabledPlugins);return Object.freeze($)}function LL($){let Z;try{Z=KL($,"utf8")}catch{return I9()}try{let Q=c4.safeParse(JSON.parse(Z));return Q.success?Q.data:I9()}catch{return I9()}}function _L(){let $=bj(),Z=FL($,{throwIfNoEntry:!1}),Q=Z?.mtimeMs??0,W=Z?.size??0,J=x9;if(J&&J.path===$&&J.mtimeMs===Q&&J.size===W)return J;let X=DL(Z?LL($):I9());return x9={path:$,mtimeMs:Q,size:W,value:X},x9}function M0(){return _L().value}function b1($,Z={}){let Q=bj(),W=M0();GL(fL(Q),{recursive:!0});let J=c4.parse($);if(!W.telemetryOptOut&&J.telemetryOptOut)Cj(Z.telemetry);AL(Q,`${JSON.stringify(J,null,2)}
2
- `,"utf8"),UL()}function g9(){return M0().telemetryOptOut}function yj($,Z={}){b1({...M0(),telemetryOptOut:$},Z)}function hj(){return M0().autoUpdateEnabled}function kj($,Z={}){b1({...M0(),autoUpdateEnabled:$},Z)}function B1($){return new Set($??M0().disabledTools??[])}function u4($){return new Set($??M0().disabledPlugins??[])}function Ij($){return B1().has($)}function m9($){let Z=M0(),Q=new Set(Z.disabledTools??[]),W=Q.has($);if(W)Q.delete($);else Q.add($);return b1({...Z,disabledTools:[...Q]}),!W}function AW($,Z){let Q=[...new Set($.map((X)=>X.trim()).filter(Boolean))];if(Q.length===0)return;let W=M0(),J=B1(W.disabledTools);for(let X of Q)if(Z)J.add(X);else J.delete(X);b1({...W,disabledTools:[...J]})}function xj($,Z){return AW([$],Z),Z}function gj($){return u4().has($)}function mj($,Z){let Q=$.trim();if(!Q)return;let W=M0(),J=u4(W.disabledPlugins);if(Z)J.add(Q);else J.delete(Q);b1({...W,disabledPlugins:[...J]})}function v9($,Z){let Q=u4(Z);if(Q.size===0)return[...$];return $.filter((W)=>!Q.has(W))}function y1($,Z){let Q=B1(Z);if(Q.size===0)return[...$];return $.filter((W)=>!Q.has(W.name))}function c9($,Z){if(!$||$.length===0)return $;let Q=B1(Z);if(Q.size===0)return $;return $.map((W)=>{if(!W.setup)return W;return{...W,setup:(J,X)=>W.setup?.({...J,registerTool:(Y)=>{if(!Q.has(Y.name))J.registerTool(Y)}},X)}})}var Sj,c4,x9;var $1=p$(()=>{_0();Sj=W8.preprocess(($)=>Array.isArray($)?$.filter((Z)=>typeof Z==="string").map((Z)=>Z.trim()).filter(Boolean):void 0,W8.array(W8.string()).optional()).transform(($)=>{if(!$)return;let Z=[...new Set($)].sort((Q,W)=>Q.localeCompare(W));return Z.length>0?Z:void 0}),c4=W8.object({telemetryOptOut:W8.boolean().default(!1).catch(!1),autoUpdateEnabled:W8.boolean().default(!0).catch(!0),disabledTools:Sj.optional(),disabledPlugins:Sj.optional()}).strip().transform(($)=>{let Z={autoUpdateEnabled:$.autoUpdateEnabled,telemetryOptOut:$.telemetryOptOut};if($.disabledTools?.length)Z.disabledTools=$.disabledTools;if($.disabledPlugins?.length)Z.disabledPlugins=$.disabledPlugins;return Z})});import{existsSync as zL,mkdirSync as TL,readFileSync as OL,writeFileSync as qL}from"node:fs";import{resolve as ML}from"node:path";import{resolveSessionDataDir as RL}from"@cline/shared/storage";import{nanoid as EL}from"nanoid";import*as NL from"node-machine-id";function P0($){let Z=$?.trim();if(Z)return Z;let Q=PL();if(Q)return Q;return SL()}function CL(){let $=NL;return $.machineIdSync??$.default?.machineIdSync}function PL(){try{let $=CL();if(!$)return;return $().trim()||void 0}catch{return}}function SL(){let $=RL(),Z=ML($,wL);try{if(zL(Z)){let W=OL(Z,"utf8").trim();if(W.length>0)return W}}catch{}let Q=`cl-${EL()}`;try{TL($,{recursive:!0}),qL(Z,Q,"utf8")}catch{}return Q}var wL="machine-id";var J8=()=>{};class l4{name;metadata;meter;logger;enabled;distinctId;commonProperties;counters=new Map;histograms=new Map;gauges=new Map;gaugeValues=new Map;meterProvider;loggerProvider;constructor($){this.name=$.name??"OpenTelemetryAdapter",this.metadata={...$.metadata},this.meterProvider=$.meterProvider,this.loggerProvider=$.loggerProvider,this.meter=$.meterProvider?.getMeter("cline")??null,this.logger=$.loggerProvider?.getLogger("cline")??null,this.enabled=$.enabled??!0,this.distinctId=$.distinctId,this.commonProperties=$.commonProperties?{...$.commonProperties}:{}}emit($,Z){if(!this.isEnabled())return;this.emitLog($,Z,!1)}emitRequired($,Z){this.emitLog($,Z,!0)}recordCounter($,Z,Q,W,J=!1){if(!this.meter||!J&&!this.isEnabled())return;let X=this.counters.get($);if(!X)X=this.meter.createCounter($,W?{description:W}:void 0),this.counters.set($,X);X.add(Z,this.flattenProperties(this.buildAttributes(Q)))}recordHistogram($,Z,Q,W,J=!1){if(!this.meter||!J&&!this.isEnabled())return;let X=this.histograms.get($);if(!X)X=this.meter.createHistogram($,W?{description:W}:void 0),this.histograms.set($,X);X.record(Z,this.flattenProperties(this.buildAttributes(Q)))}recordGauge($,Z,Q,W,J=!1){if(!this.meter||!J&&!this.isEnabled())return;let X=this.buildAttributes(Q),Y=JSON.stringify(X),j=this.gaugeValues.get($);if(Z===null){if(j){if(j.delete(Y),j.size===0)this.gaugeValues.delete($),this.gauges.delete($)}return}let V=j;if(!V)V=new Map,this.gaugeValues.set($,V);if(!this.gauges.has($)){let H=this.meter.createObservableGauge($,W?{description:W}:void 0);H.addCallback((B)=>{for(let G of this.snapshotGaugeSeries($))B.observe(G.value,this.flattenProperties(G.attributes))}),this.gauges.set($,H)}V.set(Y,{value:Z,attributes:X})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}setDistinctId($){this.distinctId=$}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}async flush(){await Promise.all([this.meterProvider?.forceFlush?.(),this.loggerProvider?.forceFlush?.()])}async dispose(){await Promise.all([this.meterProvider?.shutdown?.(),this.loggerProvider?.shutdown?.()])}emitLog($,Z,Q){if(!this.logger)return;let W=this.flattenProperties(this.buildAttributes(Z,Q));this.logger.emit({severityText:"INFO",body:$,attributes:W})}buildAttributes($,Z=!1){return{...this.commonProperties,...this.metadata,...$,...this.distinctId?{distinct_id:this.distinctId}:{},...Z?{_required:!0}:{}}}snapshotGaugeSeries($){let Z=this.gaugeValues.get($);if(!Z)return[];return Array.from(Z.values(),(Q)=>({value:Q.value,attributes:Q.attributes?{...Q.attributes}:void 0}))}flattenProperties($,Z="",Q=new WeakSet,W=0){if(!$)return{};let J={},X=100,Y=10;for(let[j,V]of Object.entries($)){if(j==="__proto__"||j==="constructor"||j==="prototype")continue;let H=Z?`${Z}.${j}`:j;if(V===null||V===void 0){J[H]=String(V);continue}if(Array.isArray(V)){let B=V.length>X?V.slice(0,X):V;try{J[H]=JSON.stringify(B)}catch{J[H]="[UnserializableArray]"}if(V.length>X)J[`${H}_truncated`]=!0,J[`${H}_original_length`]=V.length;continue}if(typeof V==="object"){if(V instanceof Date){J[H]=V.toISOString();continue}if(V instanceof Error){J[H]=V.message;continue}if(Q.has(V)){J[H]="[Circular]";continue}if(W>=Y){J[H]="[MaxDepthExceeded]";continue}Q.add(V),Object.assign(J,this.flattenProperties(V,H,Q,W+1));continue}if(bL(V)){J[H]=V;continue}try{J[H]=JSON.stringify(V)}catch{J[H]=String(V)}}return J}}function bL($){return typeof $==="string"||typeof $==="number"||typeof $==="boolean"}class p4{name;logger;enabled;constructor($={}){this.name=$.name??"TelemetryLoggerSink",this.logger=$.logger,this.enabled=$.enabled??!0}emit($,Z){if(!this.isEnabled())return;this.logger?.log("telemetry.event",{telemetrySink:this.name,event:$,properties:Z})}emitRequired($,Z){this.logger?.log("telemetry.required_event",{telemetrySink:this.name,severity:"warn",event:$,properties:Z})}recordCounter($,Z,Q,W,J){if(!J&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"counter",name:$,value:Z,attributes:Q,description:W,required:J===!0})}recordHistogram($,Z,Q,W,J){if(!J&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"histogram",name:$,value:Z,attributes:Q,description:W,required:J===!0})}recordGauge($,Z,Q,W,J){if(!J&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"gauge",name:$,value:Z,attributes:Q,description:W,required:J===!0})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}async flush(){}async dispose(){}}class X8{adapters;metadata;distinctId;commonProperties;constructor($={}){if(this.adapters=[...$.adapters??[]],$.logger)this.adapters.push(new p4({logger:$.logger}));this.metadata={...$.metadata??{}},this.distinctId=$.distinctId,this.commonProperties={...$.commonProperties??{}}}addAdapter($){this.adapters.push($)}setDistinctId($){this.distinctId=$}setMetadata($){this.metadata={...$}}updateMetadata($){this.metadata={...this.metadata,...$}}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}isEnabled(){return this.adapters.some(($)=>$.isEnabled())}capture($){let Z=this.buildAttributes($.properties);for(let Q of this.adapters)Q.emit($.event,Z)}captureRequired($,Z){let Q=this.buildAttributes(Z);for(let W of this.adapters)W.emitRequired($,Q)}recordCounter($,Z,Q,W,J=!1){let X=this.buildAttributes(Q);for(let Y of this.adapters)Y.recordCounter($,Z,X,W,J)}recordHistogram($,Z,Q,W,J=!1){let X=this.buildAttributes(Q);for(let Y of this.adapters)Y.recordHistogram($,Z,X,W,J)}recordGauge($,Z,Q,W,J=!1){let X=this.buildAttributes(Q);for(let Y of this.adapters)Y.recordGauge($,Z,X,W,J)}async flush(){await Promise.all(this.adapters.map(($)=>$.flush()))}async dispose(){await Promise.all(this.adapters.map(($)=>$.dispose()))}buildAttributes($){return{...this.commonProperties,...$,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{}}}}var fW=()=>{};import{metrics as yL,trace as hL}from"@opentelemetry/api";import{logs as kL}from"@opentelemetry/api-logs";import{OTLPLogExporter as IL}from"@opentelemetry/exporter-logs-otlp-http";import{OTLPMetricExporter as xL}from"@opentelemetry/exporter-metrics-otlp-http";import{OTLPTraceExporter as gL}from"@opentelemetry/exporter-trace-otlp-http";import{resourceFromAttributes as mL}from"@opentelemetry/resources";import{BatchLogRecordProcessor as vL,ConsoleLogRecordExporter as cL,LoggerProvider as uL}from"@opentelemetry/sdk-logs";import{ConsoleMetricExporter as dL,MeterProvider as lL,PeriodicExportingMetricReader as vj}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as pL,ConsoleSpanExporter as rL,SimpleSpanProcessor as iL}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as nL}from"@opentelemetry/sdk-trace-node";import{ATTR_SERVICE_NAME as aL,ATTR_SERVICE_VERSION as sL}from"@opentelemetry/semantic-conventions";class cj{distinctId;metadata;commonProperties;constructor($={}){this.distinctId=$.distinctId,this.metadata={...$.metadata??{}},this.commonProperties={...$.commonProperties??{}}}setDistinctId($){this.distinctId=$}setMetadata($){this.metadata={...$}}updateMetadata($){this.metadata={...this.metadata,...$}}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}isEnabled(){return!1}capture($){this.resolveProperties($.properties)}captureRequired($,Z){this.resolveProperties(Z)}recordCounter(){}recordHistogram(){}recordGauge(){}async flush(){}async dispose(){}resolveProperties($){return{...this.commonProperties,...$,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{}}}}class Y8{meterProvider;loggerProvider;tracerProvider;options;constructor($={}){this.options=$;let Z=mL({[aL]:$.serviceName??"cline",...$.serviceVersion?{[sL]:$.serviceVersion}:{}});if(this.meterProvider=this.createMeterProvider(Z),this.loggerProvider=this.createLoggerProvider(Z),this.tracerProvider=this.createTracerProvider(Z),this.meterProvider)yL.setGlobalMeterProvider(this.meterProvider);if(this.loggerProvider)kL.setGlobalLoggerProvider(this.loggerProvider);if(this.tracerProvider)this.tracerProvider.register()}getTracer($="cline",Z){return hL.getTracer($,Z??this.options.serviceVersion)}createAdapter($){return new l4({...$,meterProvider:this.meterProvider,loggerProvider:this.loggerProvider})}createTelemetryService($){let Z=this.createAdapter({name:$.name,enabled:this.options.enabled,metadata:$.metadata});return new X8({...$,adapters:[Z],distinctId:P0($.distinctId)})}async forceFlush(){await Promise.all([this.meterProvider?.forceFlush?.(),this.loggerProvider?.forceFlush?.(),this.tracerProvider?.forceFlush?.()])}async dispose(){await Promise.all([this.meterProvider?.shutdown?.(),this.loggerProvider?.shutdown?.(),this.tracerProvider?.shutdown?.()])}createMeterProvider($){let Z=UW(this.options.metricsExporter);if(Z.length===0)return null;let Q=Math.max(1000,this.options.metricExportIntervalMs??this.options.metricExportInterval??60000),W=Math.min(30000,Math.floor(Q*0.8)),J=Z.map((X)=>eL(X,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json",interval:Q,timeout:W})).filter((X)=>X!==null);if(J.length===0)return null;return new lL({resource:$,readers:J})}createTracerProvider($){let Z=UW(this.options.tracesExporter);if(Z.length===0)return null;let Q=this.options.otlpTracesEndpoint??this.options.otlpEndpoint,W=this.options.otlpTracesHeaders??this.options.otlpHeaders,J=[];for(let X of Z){let Y=tL(X,{endpoint:Q,headers:W,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(Y)J.push(Y)}if(J.length===0)return null;return new nL({resource:$,spanProcessors:J})}createLoggerProvider($){let Z=UW(this.options.logsExporter);if(Z.length===0)return null;let Q=Z.map((W)=>{let J=oL(W,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(!J)return null;return new vL(J,{maxQueueSize:this.options.logMaxQueueSize??2048,maxExportBatchSize:this.options.logBatchSize??512,scheduledDelayMillis:this.options.logBatchTimeoutMs??this.options.logBatchTimeout??5000})}).filter((W)=>W!==null);if(Q.length===0)return null;return new uL({resource:$,processors:Q})}}function r4($){let Z=new Y8($),Q=Z.createTelemetryService($);return Q.captureRequired("telemetry.provider_created",{provider:"opentelemetry",enabled:$.enabled??!0,logsExporter:Array.isArray($.logsExporter)?$.logsExporter.join(","):$.logsExporter,metricsExporter:Array.isArray($.metricsExporter)?$.metricsExporter.join(","):$.metricsExporter,tracesExporter:Array.isArray($.tracesExporter)?$.tracesExporter.join(","):$.tracesExporter,otlpProtocol:$.otlpProtocol,hasOtlpEndpoint:Boolean($.otlpEndpoint),serviceName:$.serviceName,serviceVersion:$.serviceVersion}),{provider:Z,telemetry:Q}}function h1($){if(g9())return{telemetry:new cj($)};if($.enabled!==!0)return{telemetry:new X8({...$,distinctId:P0($.distinctId)})};return r4($)}function j8($){let{telemetry:Z,provider:Q}=h1($);return{telemetry:Z,provider:Q,flush:async()=>{let X=Q;if(X&&typeof X.forceFlush==="function")try{await X.forceFlush()}catch{}},dispose:async()=>{await Promise.allSettled([Z.dispose(),Q?.dispose()])}}}function UW($){if(!$)return[];return(Array.isArray($)?$:$.split(",")).map((Q)=>Q.trim()).filter((Q)=>Q==="console"||Q==="otlp")}function oL($,Z){if($==="console")return new cL;if(!Z.endpoint)return null;let Q=DW(Z.endpoint,"/v1/logs");return new IL({url:Q,headers:Z.headers})}function tL($,Z){if($==="console")return new iL(new rL);if(!Z.endpoint)return null;let Q=DW(Z.endpoint,"/v1/traces");return new pL(new gL({url:Q,headers:Z.headers}))}function eL($,Z){if($==="console")return new vj({exporter:new dL,exportIntervalMillis:Z.interval,exportTimeoutMillis:Z.timeout});if(!Z.endpoint)return null;let Q=DW(Z.endpoint,"/v1/metrics");return new vj({exporter:new xL({url:Q,headers:Z.headers}),exportIntervalMillis:Z.interval,exportTimeoutMillis:Z.timeout})}function DW($,Z){let Q=new URL($),W=Q.pathname.endsWith("/")?Q.pathname.slice(0,-1):Q.pathname;return Q.pathname=W.endsWith(Z)?W:`${W}${Z}`,Q.toString()}var u9=p$(()=>{$1();J8();fW()});var DB={};N(DB,{normalizeUserMessage:()=>lq,buildInitialUserContent:()=>dq});async function dq($,Z,Q,W){let J=pq(Z),X=await iq(Q,W);if(J.length===0&&!X)return $;let Y=[{type:"text",text:$},...J];if(X)Y.push(...X);return Y}function lq($){if($==null)return"";if(typeof $==="string")return $;let Z=$.content;if(typeof Z==="string")return Z;if(!Array.isArray(Z))return"";let Q=[];for(let W of Z)if(W&&typeof W==="object"&&W.type==="text"){let J=W.text;if(typeof J==="string")Q.push(J)}return Q.join(`
3
- `)}function pq($){if(!$||$.length===0)return[];let Z=[];for(let Q of $){let W=rq(Q);if(W)Z.push(W)}return Z}function rq($){let Z=$.trim();if(!Z)return;let Q=Z.match(/^data:([^;,]+);base64,(.+)$/);if(Q){let W=Q[1],J=Q[2];if(!W||!J)return;return{type:"image",mediaType:W,data:J}}return{type:"image",mediaType:"image/png",data:Z}}async function iq($,Z){if(!$||$.length===0)return;let Q=Z??(async()=>{throw Error("File loading is not configured in this runtime. Provide userFileContentLoader to enable userFiles support.")}),W=await Promise.all($.map(async(J)=>{let X=J.replace(/\\/g,"/");try{let Y=await Q(J);return{type:"file",path:X,content:Y}}catch(Y){let j=Y instanceof Error?Y.message:String(Y);return{type:"file",path:X,content:`Error fetching content: ${j}`}}}));if(W.length===0)return;return W}var dK={};N(dK,{updateMcpSettingsFileSync:()=>j1,updateMcpSettingsFile:()=>t8,updateMcpServerOAuthStateAsync:()=>O5,updateMcpServerOAuthState:()=>C2,setMcpServerDisabled:()=>N2,resolveMcpServerRegistrations:()=>p0,resolveDefaultMcpSettingsPath:()=>Z0,registerMcpServersFromSettingsFile:()=>P2,normalizeMcpServerOAuthState:()=>e8,loadMcpSettingsFile:()=>E2,listMcpServerOAuthStatuses:()=>q5,hasMcpSettingsFile:()=>s1,getMcpServerOAuthState:()=>w2,McpSettingsUpdateSkippedError:()=>o8,McpSettingsMutatorPurityError:()=>y$,McpSettingsLockTimeoutError:()=>h$});import{existsSync as wK,mkdirSync as qJ,readFileSync as CK,renameSync as EJ,rmdirSync as lN,rmSync as MJ,statSync as pN,unlinkSync as PK,writeFileSync as SK}from"node:fs";import{randomUUID as rN}from"node:crypto";import{dirname as bK,join as NK}from"node:path";import{setTimeout as iN}from"node:timers/promises";import{resolveMcpSettingsPath as nN}from"@cline/shared/storage";import{z as S}from"zod";function RJ($){if(!$)return;if($==="http")return"streamableHttp";return $}function Z0(){return nN()}function Xw($,Z){qJ(bK($),{recursive:!0});let Q=`${$}.tmp.${process.pid}.${Date.now()}.${Math.random().toString(36).slice(2)}`;try{SK(Q,Z,{encoding:"utf8",flag:"wx"}),EJ(Q,$)}catch(W){try{PK(Q)}catch{}throw W}}function jw($){Atomics.wait(Yw,0,0,$)}function Vw($){return`${$}.lock`}function IK(){return`${process.pid}.${Date.now()}.${rN()}`}function xK($,Z){qJ(bK($),{recursive:!0});let Q=`${$}.tmp.${Z}`;MJ(Q,{recursive:!0,force:!0}),qJ(Q,{recursive:!0}),SK(NK(Q,`owner.${Z}`),Z,{encoding:"utf8",flag:"wx"});try{return EJ(Q,$),{lockDir:$,ownerFile:NK($,`owner.${Z}`)}}catch(W){if(MJ(Q,{recursive:!0,force:!0}),wK($))return;throw W}}function gK($,Z){let Q;try{Q=Date.now()-pN($).mtimeMs}catch(J){if(J.code==="ENOENT")return;throw J}if(Q<wJ)return;Z.logger?.log(`[mcp-settings] Stale lock directory at ${$} (age ${Q}ms); reclaiming.`,{severity:"warn"});let W=`${$}.stale.${IK()}`;try{EJ($,W)}catch(J){if(J.code==="ENOENT")return;throw J}MJ(W,{recursive:!0,force:!0})}function Hw($){try{PK($.ownerFile)}catch(Z){if(Z.code!=="ENOENT")throw Z}try{lN($.lockDir)}catch(Z){let Q=Z.code;if(Q!=="ENOENT"&&Q!=="ENOTEMPTY"&&Q!=="EEXIST")throw Z}}function mK($){let Z=Vw($);if(NQ.has(Z))throw Error(`Reentrant MCP settings update for ${$}. Keep mutators pure: compute values up front and do not call back into the settings API.`);return{lockDir:Z,token:IK()}}function Bw($,Z){let{lockDir:Q,token:W}=mK($),J=Z.timeoutMs??wJ,X=Date.now();while(!0){let Y=xK(Q,W);if(Y)return NQ.add(Q),Y;if(Date.now()-X>J)throw new h$(`Timed out waiting for MCP settings lock at ${Q} after ${J}ms.`);gK(Q,Z),jw(kK)}}async function Gw($,Z){let{lockDir:Q,token:W}=mK($),J=Z.timeoutMs??wJ,X=Date.now();while(!0){let Y=xK(Q,W);if(Y)return NQ.add(Q),Y;if(Date.now()-X>J)throw new h$(`Timed out waiting for MCP settings lock at ${Q} after ${J}ms.`);gK(Q,Z),await iN(kK)}}function vK($,Z,Q){try{let W=Kw(Z),J=Fw(W,Q);return Xw(Z,`${JSON.stringify(W,null,2)}
4
- `),J}finally{NQ.delete($.lockDir),Hw($)}}function j1($,Z,Q={}){let W=Bw($,Q);return vK(W,$,Z)}async function t8($,Z,Q={}){let W=await Gw($,Q);return vK(W,$,Z)}function Kw($){let Z=fw($);if(!Z.mcpServers||typeof Z.mcpServers!=="object"||Array.isArray(Z.mcpServers))Z.mcpServers={};return Z}function Fw($,Z){let Q=JSON.stringify($),W=JSON.parse(Q),J=Z(W),X=JSON.stringify(W),Y=Z($);if(JSON.stringify($)!==X)throw new y$("MCP settings mutator must be deterministic and free of side effects; repeated calls produced different settings.");if(JSON.stringify(Y)!==JSON.stringify(J))throw new y$("MCP settings mutator must be deterministic and free of side effects; repeated calls produced different return values.");return Y}function Aw($){let Z=CK($,"utf8"),Q;try{Q=JSON.parse(Z)}catch(W){let J=W instanceof Error?W.message:String(W);throw Error(`Failed to parse MCP settings JSON at "${$}": ${J}`)}if(!Q||typeof Q!=="object"||Array.isArray(Q))throw Error(`Invalid MCP settings at "${$}": expected object.`);return Q}function fw($){try{return Aw($)}catch(Z){if(Z.code==="ENOENT")return{};throw Z}}function cK($,Z){if(!Object.hasOwn($,Z))return;let Q=$[Z];if(!Q||typeof Q!=="object"||Array.isArray(Q))return;return Q}function Uw($,Z,Q){Object.defineProperty($,Z,{value:Q,enumerable:!0,configurable:!0,writable:!0})}function E2($={}){let Z=$.filePath??Z0(),Q=CK(Z,"utf8"),W;try{W=JSON.parse(Q)}catch(X){let Y=X instanceof Error?X.message:String(X);throw Error(`Failed to parse MCP settings JSON at "${Z}": ${Y}`)}let J=Jw.safeParse(W);if(!J.success){let X=J.error.issues.map((Y)=>{let j=Y.path.join(".");return j?`${j}: ${Y.message}`:Y.message}).join("; ");throw Error(`Invalid MCP settings at "${Z}": ${X}`)}return J.data}function e8($){if(!$)return;let Z={...$.clientInformation?{clientInformation:$.clientInformation}:{},...$.tokens?{tokens:$.tokens}:{},...$.codeVerifier?{codeVerifier:$.codeVerifier}:{},...$.discoveryState?{discoveryState:$.discoveryState}:{},...$.redirectUrl?{redirectUrl:$.redirectUrl}:{},...$.lastError?{lastError:$.lastError}:{},...$.lastAuthenticatedAt?{lastAuthenticatedAt:$.lastAuthenticatedAt}:{}};return Object.keys(Z).length>0?Z:void 0}function Dw($){if($===void 0)return;let Z=NJ.safeParse($);if(!Z.success)return;return e8(Z.data)}function s1($={}){let Z=$.filePath??Z0();return wK(Z)}function p0($={}){let Z=E2($);return Object.entries(Z.mcpServers).map(([Q,W])=>({name:Q,transport:W.transport,disabled:W.disabled,metadata:W.metadata,oauth:W.oauth}))}function N2($){let Z=$.filePath??Z0(),Q=$.name.trim();if(!Q)throw Error("MCP server settings toggle requires a server name.");j1(Z,(W)=>{let J=W.mcpServers;if(!J||typeof J!=="object"||Array.isArray(J))throw Error(`Invalid MCP settings at "${Z}": mcpServers must be an object.`);let X={...J},Y=cK(X,Q);if(!Y)throw Error(`Unknown MCP server: ${Q}`);let j={...Y};if($.disabled)j.disabled=!0;else delete j.disabled;Uw(X,Q,j),W.mcpServers=X})}function w2($,Z={}){let Q=E2(Z);if(!Object.hasOwn(Q.mcpServers,$))return;return e8(Q.mcpServers[$]?.oauth)}function uK($,Z){return(Q)=>{let W=Q.mcpServers,J=cK(W,$);if(!J)throw Error(`Unknown MCP server: ${$}`);let X=Dw(J.oauth)??{},Y=e8(Z(X));if(Y)J.oauth=Y;else delete J.oauth;return Y??{}}}function C2($,Z,Q={}){let W=Q.filePath??Z0();return j1(W,uK($,Z))}async function O5($,Z,Q={}){let W=Q.filePath??Z0();return t8(W,uK($,Z))}function q5($={}){return p0($).map((Q)=>{let W=Q.transport.type!=="stdio",J=Q.oauth?.tokens?.access_token;return{serverName:Q.name,oauthSupported:W,oauthConfigured:W&&typeof J==="string"&&J.trim().length>0,lastError:Q.oauth?.lastError,lastAuthenticatedAt:Q.oauth?.lastAuthenticatedAt}}).sort((Q,W)=>Q.serverName.localeCompare(W.serverName))}async function P2($,Z={}){let Q=p0(Z);for(let W of Q)await $.registerServer(W);return Q}var T5,yK,NJ,aN,sN,oN,tN,eN,$w,hK,Zw,Qw,Ww,Jw,o8,h$,y$,wJ=1e4,kK=25,Yw,NQ;var wQ=p$(()=>{T5=S.record(S.string(),S.string()),yK=S.record(S.string(),S.unknown()),NJ=S.object({clientInformation:S.record(S.string(),S.unknown()).optional(),tokens:S.record(S.string(),S.unknown()).optional(),codeVerifier:S.string().optional(),discoveryState:S.record(S.string(),S.unknown()).optional(),redirectUrl:S.string().url().optional(),lastError:S.string().optional(),lastAuthenticatedAt:S.number().int().positive().optional()}).strip(),aN=S.object({type:S.literal("stdio"),command:S.string().min(1),args:S.array(S.string()).optional(),cwd:S.string().min(1).optional(),env:T5.optional()}),sN=S.object({type:S.literal("sse"),url:S.string().url(),headers:T5.optional()}),oN=S.object({type:S.literal("streamableHttp"),url:S.string().url(),headers:T5.optional()}),tN=S.discriminatedUnion("type",[aN,sN,oN]),eN=S.object({transport:tN,disabled:S.boolean().optional(),metadata:yK.optional(),oauth:NJ.optional()}),$w=S.enum(["stdio","sse","http","streamableHttp"]).optional(),hK=S.object({type:S.enum(["stdio","sse","streamableHttp"]).optional(),transportType:$w,disabled:S.boolean().optional(),metadata:yK.optional(),oauth:NJ.optional()});Zw=hK.extend({command:S.string().min(1),args:S.array(S.string()).optional(),cwd:S.string().min(1).optional(),env:T5.optional()}).superRefine(($,Z)=>{let Q=$.type??RJ($.transportType);if(Q&&Q!=="stdio")Z.addIssue({code:S.ZodIssueCode.custom,message:'Expected type "stdio" for command-based MCP server',path:["type"]})}).transform(($)=>({transport:{type:"stdio",command:$.command,args:$.args,cwd:$.cwd,env:$.env},disabled:$.disabled,metadata:$.metadata,oauth:$.oauth})),Qw=hK.extend({url:S.string().url(),headers:T5.optional()}).superRefine(($,Z)=>{let Q=$.type??RJ($.transportType)??"sse";if(Q!=="sse"&&Q!=="streamableHttp")Z.addIssue({code:S.ZodIssueCode.custom,message:'Expected type "sse" or "streamableHttp" for URL-based MCP server',path:["type"]})}).transform(($)=>{if(($.type??RJ($.transportType)??"sse")==="streamableHttp")return{transport:{type:"streamableHttp",url:$.url,headers:$.headers},disabled:$.disabled,metadata:$.metadata,oauth:$.oauth};return{transport:{type:"sse",url:$.url,headers:$.headers},disabled:$.disabled,metadata:$.metadata,oauth:$.oauth}}),Ww=S.union([eN,Zw,Qw]),Jw=S.object({mcpServers:S.record(S.string(),Ww)}).passthrough();o8=class o8 extends Error{constructor($){super($);this.name="McpSettingsUpdateSkippedError"}};h$=class h$ extends Error{constructor($){super($);this.name="McpSettingsLockTimeoutError"}};y$=class y$ extends Error{constructor($){super($);this.name="McpSettingsMutatorPurityError"}};Yw=new Int32Array(new SharedArrayBuffer(4)),NQ=new Set});var hA={};N(hA,{resolveCoreDistinctId:()=>P0,createOpenTelemetryTelemetryService:()=>r4,createConfiguredTelemetryService:()=>h1,createConfiguredTelemetryHandle:()=>j8,OpenTelemetryProvider:()=>Y8,OpenTelemetryAdapter:()=>l4});var eQ=p$(()=>{J8();u9()});var HU={};N(HU,{writeHubDiscovery:()=>p9,withHubStartupLock:()=>r9,verifyHubConnection:()=>F1,truncateNotificationBody:()=>J9,toHubStatusUrl:()=>TW,toHubHealthUrl:()=>i9,stopLocalHubServerGracefully:()=>yW,startHubWebSocketServer:()=>j9,startHubServer:()=>jU,spawnDetachedHubServerWithRetry:()=>H8,spawnDetachedHubServer:()=>NW,sendHubCommand:()=>DV,restartLocalHubIfIdleAfterStartupTimeout:()=>t9,resolveWorkspaceHubOwnerContext:()=>$V,resolveSharedHubOwnerContext:()=>Q1,resolveProductionHubOwnerContext:()=>K1,resolveHubUrl:()=>hW,resolveHubOwnerContext:()=>x1,resolveHubEndpointOptions:()=>G1,resolveHubBuildId:()=>l9,resolveDefaultHubPort:()=>V8,resolveDefaultHubPathname:()=>EW,resolveDefaultHubHost:()=>RW,resolveCompatibleLocalHubUrl:()=>o4,resolveClineDir:()=>sj,resolveClineDataDir:()=>s$,requestHubShutdown:()=>s4,rememberRecoverableLocalHubUrl:()=>B$,readHubDiscovery:()=>K0,readBearerToken:()=>d7,probeHubServer:()=>g1,probeHubConnection:()=>UV,prewarmDetachedHubServer:()=>a9,normalizeHubWebSocketUrl:()=>G$,isLocalHubOrigin:()=>MY,isLocalHubHostName:()=>l7,isHubReconnectableTransportError:()=>SW,isHubCommandTimeoutError:()=>o9,isDiscoveryFilePresent:()=>tj,ensureHubWebSocketServer:()=>p7,ensureHubServer:()=>VU,ensureDetachedHubServer:()=>YV,ensureCompatibleLocalHubUrl:()=>e$,createLocalHubScheduleRuntimeHandlers:()=>YU,createInMemoryHubOwnerContext:()=>oj,createHubServerUrl:()=>Z1,createHubAuthToken:()=>d9,createConfiguredTelemetryService:()=>h1,createConfiguredTelemetryHandle:()=>j8,connectToHub:()=>e9,clearHubDiscovery:()=>S0,NodeHubClient:()=>W1,NativeHubTransportAdapter:()=>Y9,HubUIClient:()=>xW,HubTransportError:()=>R0,HubSessionClient:()=>IW,HubServerTransport:()=>w4,HubScheduleService:()=>$8,HubScheduleCommandService:()=>s2,HubCommandError:()=>B8,DEFAULT_HUB_PORT:()=>qW,DEFAULT_HUB_PATHNAME:()=>MW,DEFAULT_HUB_HOST:()=>OW,BrowserWebSocketHubAdapter:()=>X9});import{createSessionId as qD}from"@cline/shared";function g0($,Z){return{version:$.version,requestId:$.requestId,ok:!0,payload:Z}}function Yj($,Z,Q){return{version:$.version,requestId:$.requestId??qD("hubreq_"),ok:!1,error:{code:Z,message:Q}}}class s2{schedules;constructor($){this.schedules=$}async handleCommand($){try{switch($.command){case"schedule.create":return g0($,{schedule:this.schedules.createSchedule(this.toCreateInput($.payload??{}))});case"schedule.list":return g0($,{schedules:this.schedules.listSchedules({enabled:typeof $.payload?.enabled==="boolean"?$.payload.enabled:void 0,limit:typeof $.payload?.limit==="number"?$.payload.limit:void 0,tags:Array.isArray($.payload?.tags)?$.payload?.tags:void 0})});case"schedule.get":return g0($,{schedule:this.schedules.getSchedule(String($.payload?.scheduleId??""))});case"schedule.update":return g0($,{schedule:this.schedules.updateSchedule(String($.payload?.scheduleId??""),this.toUpdateInput($.payload??{}))});case"schedule.delete":return g0($,{deleted:this.schedules.deleteSchedule(String($.payload?.scheduleId??""))});case"schedule.enable":return g0($,{schedule:this.schedules.resumeSchedule(String($.payload?.scheduleId??""))});case"schedule.disable":return g0($,{schedule:this.schedules.pauseSchedule(String($.payload?.scheduleId??""))});case"schedule.trigger":return g0($,{execution:$.payload?.wait===!1?this.schedules.triggerScheduleNowDetached(String($.payload?.scheduleId??"")):await this.schedules.triggerScheduleNow(String($.payload?.scheduleId??""))});case"schedule.list_executions":return g0($,{executions:this.schedules.listScheduleExecutions({scheduleId:typeof $.payload?.scheduleId==="string"?$.payload.scheduleId:void 0,status:typeof $.payload?.status==="string"?$.payload.status:void 0,limit:typeof $.payload?.limit==="number"?$.payload.limit:void 0})});case"schedule.stats":return g0($,{stats:this.schedules.getScheduleStats(String($.payload?.scheduleId??""))});case"schedule.active":return g0($,{executions:this.schedules.getActiveExecutions()});case"schedule.upcoming":return g0($,{runs:this.schedules.getUpcomingRuns(typeof $.payload?.limit==="number"?$.payload.limit:void 0)});default:return Yj($,"unsupported_command",`Unsupported hub schedule command: ${$.command}`)}}catch(Z){return Yj($,"schedule_command_failed",Z instanceof Error?Z.message:String(Z))}}toCreateInput($){let Z=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider&&$.model?{providerId:String($.provider),modelId:String($.model)}:void 0;return{...$,modelSelection:Z}}toUpdateInput($){let Z=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider||$.model?{providerId:typeof $.provider==="string"?$.provider:"",modelId:typeof $.model==="string"?$.model:""}:void 0;return{...$,modelSelection:Z}}}class P4{store;nowFn;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now())}materializeAll(){let $={oneOffQueued:0,scheduleQueued:0},Z=this.store.listSpecs({triggerKind:"one_off",enabled:!0,parseStatus:"valid"});for(let W of Z)if(this.materializeOneOff(W))$.oneOffQueued+=1;let Q=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let W of Q)try{if(this.materializeSchedule(W))$.scheduleQueued+=1}catch{}return $}materializeOneOff($){if($.triggerKind!=="one_off")return!1;if(!$.enabled||$.removed)return!1;if(this.store.hasOneOffRunForRevision($.specId,$.revision))return!1;return this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"one_off",scheduledFor:new Date(this.nowFn()).toISOString()}),!0}materializeSchedule($){if($.triggerKind!=="schedule")return!1;if(!$.enabled||$.removed)return!1;if(!$.scheduleExpr)return!1;return this.store.materializeDueScheduleRun({specId:$.specId,nowMs:this.nowFn()}).queued}}import{basename as yD}from"node:path";import{buildClineSystemPrompt as hD}from"@cline/shared";import{nowIso as Kj}from"@cline/shared/db";var U0={READ_FILES:"read_files",SEARCH_CODEBASE:"search_codebase",RUN_COMMANDS:"run_commands",FETCH_WEB_CONTENT:"fetch_web_content",APPLY_PATCH:"apply_patch",EDITOR:"editor",SKILLS:"skills",ASK:"ask_question",SUBMIT_AND_EXIT:"submit_and_exit"},X$=[U0.READ_FILES,U0.SEARCH_CODEBASE,U0.RUN_COMMANDS,U0.FETCH_WEB_CONTENT,U0.APPLY_PATCH,U0.EDITOR,U0.SKILLS,U0.ASK,U0.SUBMIT_AND_EXIT];var Vj={};N(Vj,{mergeRulesForSystemPrompt:()=>t2,loadRulesForSystemPromptFromWatcher:()=>QW,listEnabledRulesFromWatcher:()=>jj,isRuleEnabled:()=>f9,formatRulesForSystemPrompt:()=>o2});function f9($){return $.disabled!==!0}function o2($){if($.length===0)return"";return`
1
+ import{createRequire as MD}from"node:module";var{defineProperty:QW,getOwnPropertyNames:TD}=Object;var Wj=Object.prototype.hasOwnProperty;function Jj($){return this[$]}var R=($,Z,Q)=>{var W=TD(Z);for(let J of W)if(!Wj.call($,J)&&J!=="default")QW($,J,{get:Jj.bind(Z,J),enumerable:!0});if(Q){for(let J of W)if(!Wj.call(Q,J)&&J!=="default")QW(Q,J,{get:Jj.bind(Z,J),enumerable:!0});return Q}};var OD=($)=>$;function qD($,Z){this[$]=OD.bind(null,Z)}var N=($,Z)=>{for(var Q in Z)QW($,Q,{get:Z[Q],enumerable:!0,configurable:!0,set:qD.bind(Z,Q)})};var p$=($,Z)=>()=>($&&(Z=$($=0)),Z);var Xj=MD(import.meta.url);import{AGENT_UNEXPECTED_REASONING_TOKENS_EVENT as jL,captureAgentUnexpectedReasoningTokens as Rj,SDK_ERROR_TELEMETRY_EVENT as VL}from"@cline/shared";function i($,Z,Q){$?.capture({event:Z,properties:Q})}function z9($){if(!$)return;return $.substring(0,HL)}function BL($){if(typeof $==="string")return"Error";return $.name?.trim()||$.constructor?.name||"Error"}function GL($){return typeof $==="string"?$:$.message}function Mj($,Z){return $.some((Q)=>Z.has(Q.trim().toLowerCase()))}function Ej($){i($,m.CLIENT.EXTENSION_ACTIVATED)}function T9($,Z){let Q=[...Z.vcs_types],W={root_count:Z.root_count,vcs_types:Q,is_multi_root:Z.root_count>1,has_git:Mj(Q,new Set(["git"])),has_mercurial:Mj(Q,new Set(["mercurial","hg"]))};if(Z.init_duration_ms!==void 0)W.init_duration_ms=Z.init_duration_ms;if(Z.feature_flag_enabled!==void 0)W.feature_flag_enabled=Z.feature_flag_enabled;if(Z.is_remote_workspace!==void 0)W.is_remote_workspace=Z.is_remote_workspace;i($,m.WORKSPACE.INITIALIZED,W)}function O9($,Z,Q){i($,m.WORKSPACE.INIT_ERROR,{error_type:BL(Z),error_message:z9(GL(Z)),fallback_to_single_root:Q.fallback_to_single_root,workspace_count:Q.workspace_count??0})}function Nj($,Z){i($,m.WORKSPACE.PATH_RESOLVED,{...Z})}function C1($,Z){i($,m.USER.AUTH_STARTED,{provider:Z})}function P1($,Z){i($,m.USER.AUTH_SUCCEEDED,{provider:Z})}function S1($,Z,Q){i($,m.USER.AUTH_FAILED,{provider:Z,errorMessage:z9(Q)})}function V$($,Z,Q){i($,m.USER.AUTH_LOGGED_OUT,{provider:Z,reason:Q})}function wj($,Z){i($,m.USER.PROVIDER_CONFIGURED,{provider:Z})}function Cj($,Z){$?.captureRequired(m.USER.TELEMETRY_OPT_OUT,Z)}function b1($,Z){let Q=Z.id?.trim();if(Q)$?.setDistinctId(Q);$?.updateCommonProperties({account_id:Z.id,account_email:Z.email,provider:Z.provider,organization_id:Z.organizationId,organization_name:Z.organizationName,member_id:Z.memberId})}function q9($,Z){i($,m.TASK.CREATED,Z)}function M9($,Z){i($,m.TASK.RESTARTED,Z)}function g4($,Z){i($,m.TASK.COMPLETED,Z)}function Q8($,Z){i($,m.TASK.CONVERSATION_TURN,{...Z,timestamp:new Date().toISOString()})}function R9($,Z){i($,m.TASK.TOKEN_USAGE,Z)}function E9($,Z,Q){i($,m.TASK.MODE_SWITCH,{ulid:Z,mode:Q})}function W8($,Z){i($,m.TASK.TOOL_USED,Z)}function N9($,Z){i($,m.TASK.SKILL_USED,Z)}function w9($,Z){i($,m.TASK.DIFF_EDIT_FAILED,Z)}function m4($,Z){i($,m.TASK.PROVIDER_API_ERROR,{...Z,errorMessage:z9(Z.errorMessage)??"unknown",timestamp:new Date().toISOString()})}function Pj($,Z){i($,m.SDK.TOOL_TIMEOUT,KL(Z))}function KL($){let Z={};for(let[Q,W]of Object.entries($))if(W!==void 0)Z[Q]=W;return Z}function C9($,Z,Q){i($,m.TASK.MENTION_USED,{mentionType:Z,contentLength:Q,timestamp:new Date().toISOString()})}function P9($,Z,Q,W){i($,m.TASK.MENTION_FAILED,{mentionType:Z,errorType:Q,errorMessage:z9(W),timestamp:new Date().toISOString()})}function S9($,Z,Q,W,J){i($,m.TASK.MENTION_SEARCH_RESULTS,{queryLength:Z.length,resultCount:Q,searchType:W,isEmpty:J,timestamp:new Date().toISOString()})}function H$($,Z){i($,m.TASK.AGENT_CREATED,{...Z,timestamp:new Date().toISOString()})}function b9($,Z){i($,m.TASK.AGENT_TEAM_CREATED,{...Z,timestamp:new Date().toISOString()})}function v4($,Z){i($,Z.event==="ended"?m.TASK.SUBAGENT_COMPLETED:m.TASK.SUBAGENT_STARTED,{...Z,timestamp:new Date().toISOString()})}function y9($,Z,Q,W){i($,m.HOOKS.DISCOVERY_COMPLETED,{hookName:Z,globalCount:Q,workspaceCount:W,totalCount:Q+W,timestamp:new Date().toISOString()})}function h9($,Z){i($,m.TASK.COMPACTION_EXECUTED,{...Z,timestamp:new Date().toISOString()})}function k9($,Z){i($,m.TASK.COMPACTION_SKIPPED,{...Z,timestamp:new Date().toISOString()})}var HL=500,m;var _0=p$(()=>{m={CLIENT:{EXTENSION_ACTIVATED:"user.extension_activated"},SESSION:{STARTED:"session.started",ENDED:"session.ended"},AGENT:{UNEXPECTED_REASONING_TOKENS:jL},USER:{AUTH_STARTED:"user.auth_started",AUTH_SUCCEEDED:"user.auth_succeeded",AUTH_FAILED:"user.auth_failed",AUTH_LOGGED_OUT:"user.auth_logged_out",PROVIDER_CONFIGURED:"user.provider_configured",TELEMETRY_OPT_OUT:"user.opt_out"},TASK:{CREATED:"task.created",RESTARTED:"task.restarted",COMPLETED:"task.completed",CONVERSATION_TURN:"task.conversation_turn",TOKEN_USAGE:"task.tokens",MODE_SWITCH:"task.mode",TOOL_USED:"task.tool_used",SKILL_USED:"task.skill_used",DIFF_EDIT_FAILED:"task.diff_edit_failed",PROVIDER_API_ERROR:"task.provider_api_error",MENTION_USED:"task.mention_used",MENTION_FAILED:"task.mention_failed",MENTION_SEARCH_RESULTS:"task.mention_search_results",AGENT_CREATED:"task.agent_created",AGENT_TEAM_CREATED:"task.agent_team_created",SUBAGENT_STARTED:"task.subagent_started",SUBAGENT_COMPLETED:"task.subagent_completed",COMPACTION_EXECUTED:"task.compaction_executed",COMPACTION_SKIPPED:"task.compaction_skipped"},HOOKS:{DISCOVERY_COMPLETED:"hooks.discovery_completed"},WORKSPACE:{INITIALIZED:"workspace.initialized",INIT_ERROR:"workspace.init_error",PATH_RESOLVED:"workspace.path_resolved"},SDK:{ERROR:VL,TOOL_TIMEOUT:"sdk.tool_timeout"},FEATURE_FLAGS:{FLAG_CALLED:"$feature_flag_called"}}});import{mkdirSync as FL,readFileSync as AL,statSync as fL,writeFileSync as UL}from"node:fs";import{dirname as DL}from"node:path";import{resolveGlobalSettingsPath as bj}from"@cline/shared/storage";import{z as a$}from"zod";function I9(){return c4.parse({})}function _L(){x9=void 0}function zL($){if($.disabledTools)Object.freeze($.disabledTools);if($.disabledPlugins)Object.freeze($.disabledPlugins);return Object.freeze($)}function TL($){let Z;try{Z=AL($,"utf8")}catch{return I9()}try{let Q=c4.safeParse(JSON.parse(Z));return Q.success?Q.data:I9()}catch{return I9()}}function OL(){let $=bj(),Z=fL($,{throwIfNoEntry:!1}),Q=Z?.mtimeMs??0,W=Z?.size??0,J=x9;if(J&&J.path===$&&J.mtimeMs===Q&&J.size===W)return J;let X=zL(Z?TL($):I9());return x9={path:$,mtimeMs:Q,size:W,value:X},x9}function z0(){return OL().value}function B1($,Z={}){let Q=bj(),W=z0();FL(DL(Q),{recursive:!0});let J=c4.parse($);if(!W.telemetryOptOut&&J.telemetryOptOut)Cj(Z.telemetry);UL(Q,`${JSON.stringify(J,null,2)}
2
+ `,"utf8"),_L()}function g9(){return z0().telemetryOptOut}function yj($,Z={}){B1({...z0(),telemetryOptOut:$},Z)}function hj(){return z0().autoUpdateEnabled}function kj($,Z={}){B1({...z0(),autoUpdateEnabled:$},Z)}function Ij(){return z0().compactionStrategy??"basic"}function xj($){B1({...z0(),compactionStrategy:$})}function G1($){return new Set($??z0().disabledTools??[])}function u4($){return new Set($??z0().disabledPlugins??[])}function gj($){return G1().has($)}function m9($){let Z=z0(),Q=new Set(Z.disabledTools??[]),W=Q.has($);if(W)Q.delete($);else Q.add($);return B1({...Z,disabledTools:[...Q]}),!W}function fW($,Z){let Q=[...new Set($.map((X)=>X.trim()).filter(Boolean))];if(Q.length===0)return;let W=z0(),J=G1(W.disabledTools);for(let X of Q)if(Z)J.add(X);else J.delete(X);B1({...W,disabledTools:[...J]})}function mj($,Z){return fW([$],Z),Z}function vj($){return u4().has($)}function cj($,Z){let Q=$.trim();if(!Q)return;let W=z0(),J=u4(W.disabledPlugins);if(Z)J.add(Q);else J.delete(Q);B1({...W,disabledPlugins:[...J]})}function v9($,Z){let Q=u4(Z);if(Q.size===0)return[...$];return $.filter((W)=>!Q.has(W))}function y1($,Z){let Q=G1(Z);if(Q.size===0)return[...$];return $.filter((W)=>!Q.has(W.name))}function c9($,Z){if(!$||$.length===0)return $;let Q=G1(Z);if(Q.size===0)return $;return $.map((W)=>{if(!W.setup)return W;return{...W,setup:(J,X)=>W.setup?.({...J,registerTool:(Y)=>{if(!Q.has(Y.name))J.registerTool(Y)}},X)}})}var Sj,LL,c4,x9;var $1=p$(()=>{_0();Sj=a$.preprocess(($)=>Array.isArray($)?$.filter((Z)=>typeof Z==="string").map((Z)=>Z.trim()).filter(Boolean):void 0,a$.array(a$.string()).optional()).transform(($)=>{if(!$)return;let Z=[...new Set($)].sort((Q,W)=>Q.localeCompare(W));return Z.length>0?Z:void 0}),LL=a$.enum(["basic","agentic"]).catch("basic"),c4=a$.object({telemetryOptOut:a$.boolean().default(!1).catch(!1),autoUpdateEnabled:a$.boolean().default(!0).catch(!0),compactionStrategy:LL.optional(),disabledTools:Sj.optional(),disabledPlugins:Sj.optional()}).strip().transform(($)=>{let Z={autoUpdateEnabled:$.autoUpdateEnabled,telemetryOptOut:$.telemetryOptOut};if($.compactionStrategy)Z.compactionStrategy=$.compactionStrategy;if($.disabledTools?.length)Z.disabledTools=$.disabledTools;if($.disabledPlugins?.length)Z.disabledPlugins=$.disabledPlugins;return Z})});import{existsSync as qL,mkdirSync as ML,readFileSync as RL,writeFileSync as EL}from"node:fs";import{resolve as NL}from"node:path";import{resolveSessionDataDir as wL}from"@cline/shared/storage";import{nanoid as CL}from"nanoid";import*as PL from"node-machine-id";function P0($){let Z=$?.trim();if(Z)return Z;let Q=yL();if(Q)return Q;return hL()}function bL(){let $=PL;return $.machineIdSync??$.default?.machineIdSync}function yL(){try{let $=bL();if(!$)return;return $().trim()||void 0}catch{return}}function hL(){let $=wL(),Z=NL($,SL);try{if(qL(Z)){let W=RL(Z,"utf8").trim();if(W.length>0)return W}}catch{}let Q=`cl-${CL()}`;try{ML($,{recursive:!0}),EL(Z,Q,"utf8")}catch{}return Q}var SL="machine-id";var J8=()=>{};class l4{name;metadata;meter;logger;enabled;distinctId;commonProperties;counters=new Map;histograms=new Map;gauges=new Map;gaugeValues=new Map;meterProvider;loggerProvider;constructor($){this.name=$.name??"OpenTelemetryAdapter",this.metadata={...$.metadata},this.meterProvider=$.meterProvider,this.loggerProvider=$.loggerProvider,this.meter=$.meterProvider?.getMeter("cline")??null,this.logger=$.loggerProvider?.getLogger("cline")??null,this.enabled=$.enabled??!0,this.distinctId=$.distinctId,this.commonProperties=$.commonProperties?{...$.commonProperties}:{}}emit($,Z){if(!this.isEnabled())return;this.emitLog($,Z,!1)}emitRequired($,Z){this.emitLog($,Z,!0)}recordCounter($,Z,Q,W,J=!1){if(!this.meter||!J&&!this.isEnabled())return;let X=this.counters.get($);if(!X)X=this.meter.createCounter($,W?{description:W}:void 0),this.counters.set($,X);X.add(Z,this.flattenProperties(this.buildAttributes(Q)))}recordHistogram($,Z,Q,W,J=!1){if(!this.meter||!J&&!this.isEnabled())return;let X=this.histograms.get($);if(!X)X=this.meter.createHistogram($,W?{description:W}:void 0),this.histograms.set($,X);X.record(Z,this.flattenProperties(this.buildAttributes(Q)))}recordGauge($,Z,Q,W,J=!1){if(!this.meter||!J&&!this.isEnabled())return;let X=this.buildAttributes(Q),Y=JSON.stringify(X),j=this.gaugeValues.get($);if(Z===null){if(j){if(j.delete(Y),j.size===0)this.gaugeValues.delete($),this.gauges.delete($)}return}let V=j;if(!V)V=new Map,this.gaugeValues.set($,V);if(!this.gauges.has($)){let H=this.meter.createObservableGauge($,W?{description:W}:void 0);H.addCallback((B)=>{for(let G of this.snapshotGaugeSeries($))B.observe(G.value,this.flattenProperties(G.attributes))}),this.gauges.set($,H)}V.set(Y,{value:Z,attributes:X})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}setDistinctId($){this.distinctId=$}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}async flush(){await Promise.all([this.meterProvider?.forceFlush?.(),this.loggerProvider?.forceFlush?.()])}async dispose(){await Promise.all([this.meterProvider?.shutdown?.(),this.loggerProvider?.shutdown?.()])}emitLog($,Z,Q){if(!this.logger)return;let W=this.flattenProperties(this.buildAttributes(Z,Q));this.logger.emit({severityText:"INFO",body:$,attributes:W})}buildAttributes($,Z=!1){return{...this.commonProperties,...this.metadata,...$,...this.distinctId?{distinct_id:this.distinctId}:{},...Z?{_required:!0}:{}}}snapshotGaugeSeries($){let Z=this.gaugeValues.get($);if(!Z)return[];return Array.from(Z.values(),(Q)=>({value:Q.value,attributes:Q.attributes?{...Q.attributes}:void 0}))}flattenProperties($,Z="",Q=new WeakSet,W=0){if(!$)return{};let J={},X=100,Y=10;for(let[j,V]of Object.entries($)){if(j==="__proto__"||j==="constructor"||j==="prototype")continue;let H=Z?`${Z}.${j}`:j;if(V===null||V===void 0){J[H]=String(V);continue}if(Array.isArray(V)){let B=V.length>X?V.slice(0,X):V;try{J[H]=JSON.stringify(B)}catch{J[H]="[UnserializableArray]"}if(V.length>X)J[`${H}_truncated`]=!0,J[`${H}_original_length`]=V.length;continue}if(typeof V==="object"){if(V instanceof Date){J[H]=V.toISOString();continue}if(V instanceof Error){J[H]=V.message;continue}if(Q.has(V)){J[H]="[Circular]";continue}if(W>=Y){J[H]="[MaxDepthExceeded]";continue}Q.add(V),Object.assign(J,this.flattenProperties(V,H,Q,W+1));continue}if(kL(V)){J[H]=V;continue}try{J[H]=JSON.stringify(V)}catch{J[H]=String(V)}}return J}}function kL($){return typeof $==="string"||typeof $==="number"||typeof $==="boolean"}class p4{name;logger;enabled;constructor($={}){this.name=$.name??"TelemetryLoggerSink",this.logger=$.logger,this.enabled=$.enabled??!0}emit($,Z){if(!this.isEnabled())return;this.logger?.log("telemetry.event",{telemetrySink:this.name,event:$,properties:Z})}emitRequired($,Z){this.logger?.log("telemetry.required_event",{telemetrySink:this.name,severity:"warn",event:$,properties:Z})}recordCounter($,Z,Q,W,J){if(!J&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"counter",name:$,value:Z,attributes:Q,description:W,required:J===!0})}recordHistogram($,Z,Q,W,J){if(!J&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"histogram",name:$,value:Z,attributes:Q,description:W,required:J===!0})}recordGauge($,Z,Q,W,J){if(!J&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"gauge",name:$,value:Z,attributes:Q,description:W,required:J===!0})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}async flush(){}async dispose(){}}class X8{adapters;metadata;distinctId;commonProperties;constructor($={}){if(this.adapters=[...$.adapters??[]],$.logger)this.adapters.push(new p4({logger:$.logger}));this.metadata={...$.metadata??{}},this.distinctId=$.distinctId,this.commonProperties={...$.commonProperties??{}}}addAdapter($){this.adapters.push($)}setDistinctId($){this.distinctId=$}setMetadata($){this.metadata={...$}}updateMetadata($){this.metadata={...this.metadata,...$}}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}isEnabled(){return this.adapters.some(($)=>$.isEnabled())}capture($){let Z=this.buildAttributes($.properties);for(let Q of this.adapters)Q.emit($.event,Z)}captureRequired($,Z){let Q=this.buildAttributes(Z);for(let W of this.adapters)W.emitRequired($,Q)}recordCounter($,Z,Q,W,J=!1){let X=this.buildAttributes(Q);for(let Y of this.adapters)Y.recordCounter($,Z,X,W,J)}recordHistogram($,Z,Q,W,J=!1){let X=this.buildAttributes(Q);for(let Y of this.adapters)Y.recordHistogram($,Z,X,W,J)}recordGauge($,Z,Q,W,J=!1){let X=this.buildAttributes(Q);for(let Y of this.adapters)Y.recordGauge($,Z,X,W,J)}async flush(){await Promise.all(this.adapters.map(($)=>$.flush()))}async dispose(){await Promise.all(this.adapters.map(($)=>$.dispose()))}buildAttributes($){return{...this.commonProperties,...$,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{}}}}var UW=()=>{};import{metrics as IL,trace as xL}from"@opentelemetry/api";import{logs as gL}from"@opentelemetry/api-logs";import{OTLPLogExporter as mL}from"@opentelemetry/exporter-logs-otlp-http";import{OTLPMetricExporter as vL}from"@opentelemetry/exporter-metrics-otlp-http";import{OTLPTraceExporter as cL}from"@opentelemetry/exporter-trace-otlp-http";import{resourceFromAttributes as uL}from"@opentelemetry/resources";import{BatchLogRecordProcessor as dL,ConsoleLogRecordExporter as lL,LoggerProvider as pL}from"@opentelemetry/sdk-logs";import{ConsoleMetricExporter as rL,MeterProvider as iL,PeriodicExportingMetricReader as uj}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as nL,ConsoleSpanExporter as aL,SimpleSpanProcessor as sL}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as oL}from"@opentelemetry/sdk-trace-node";import{ATTR_SERVICE_NAME as tL,ATTR_SERVICE_VERSION as eL}from"@opentelemetry/semantic-conventions";class dj{distinctId;metadata;commonProperties;constructor($={}){this.distinctId=$.distinctId,this.metadata={...$.metadata??{}},this.commonProperties={...$.commonProperties??{}}}setDistinctId($){this.distinctId=$}setMetadata($){this.metadata={...$}}updateMetadata($){this.metadata={...this.metadata,...$}}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}isEnabled(){return!1}capture($){this.resolveProperties($.properties)}captureRequired($,Z){this.resolveProperties(Z)}recordCounter(){}recordHistogram(){}recordGauge(){}async flush(){}async dispose(){}resolveProperties($){return{...this.commonProperties,...$,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{}}}}class Y8{meterProvider;loggerProvider;tracerProvider;options;constructor($={}){this.options=$;let Z=uL({[tL]:$.serviceName??"cline",...$.serviceVersion?{[eL]:$.serviceVersion}:{}});if(this.meterProvider=this.createMeterProvider(Z),this.loggerProvider=this.createLoggerProvider(Z),this.tracerProvider=this.createTracerProvider(Z),this.meterProvider)IL.setGlobalMeterProvider(this.meterProvider);if(this.loggerProvider)gL.setGlobalLoggerProvider(this.loggerProvider);if(this.tracerProvider)this.tracerProvider.register()}getTracer($="cline",Z){return xL.getTracer($,Z??this.options.serviceVersion)}createAdapter($){return new l4({...$,meterProvider:this.meterProvider,loggerProvider:this.loggerProvider})}createTelemetryService($){let Z=this.createAdapter({name:$.name,enabled:this.options.enabled,metadata:$.metadata});return new X8({...$,adapters:[Z],distinctId:P0($.distinctId)})}async forceFlush(){await Promise.all([this.meterProvider?.forceFlush?.(),this.loggerProvider?.forceFlush?.(),this.tracerProvider?.forceFlush?.()])}async dispose(){await Promise.all([this.meterProvider?.shutdown?.(),this.loggerProvider?.shutdown?.(),this.tracerProvider?.shutdown?.()])}createMeterProvider($){let Z=DW(this.options.metricsExporter);if(Z.length===0)return null;let Q=Math.max(1000,this.options.metricExportIntervalMs??this.options.metricExportInterval??60000),W=Math.min(30000,Math.floor(Q*0.8)),J=Z.map((X)=>Q_(X,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json",interval:Q,timeout:W})).filter((X)=>X!==null);if(J.length===0)return null;return new iL({resource:$,readers:J})}createTracerProvider($){let Z=DW(this.options.tracesExporter);if(Z.length===0)return null;let Q=this.options.otlpTracesEndpoint??this.options.otlpEndpoint,W=this.options.otlpTracesHeaders??this.options.otlpHeaders,J=[];for(let X of Z){let Y=Z_(X,{endpoint:Q,headers:W,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(Y)J.push(Y)}if(J.length===0)return null;return new oL({resource:$,spanProcessors:J})}createLoggerProvider($){let Z=DW(this.options.logsExporter);if(Z.length===0)return null;let Q=Z.map((W)=>{let J=$_(W,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(!J)return null;return new dL(J,{maxQueueSize:this.options.logMaxQueueSize??2048,maxExportBatchSize:this.options.logBatchSize??512,scheduledDelayMillis:this.options.logBatchTimeoutMs??this.options.logBatchTimeout??5000})}).filter((W)=>W!==null);if(Q.length===0)return null;return new pL({resource:$,processors:Q})}}function r4($){let Z=new Y8($),Q=Z.createTelemetryService($);return Q.captureRequired("telemetry.provider_created",{provider:"opentelemetry",enabled:$.enabled??!0,logsExporter:Array.isArray($.logsExporter)?$.logsExporter.join(","):$.logsExporter,metricsExporter:Array.isArray($.metricsExporter)?$.metricsExporter.join(","):$.metricsExporter,tracesExporter:Array.isArray($.tracesExporter)?$.tracesExporter.join(","):$.tracesExporter,otlpProtocol:$.otlpProtocol,hasOtlpEndpoint:Boolean($.otlpEndpoint),serviceName:$.serviceName,serviceVersion:$.serviceVersion}),{provider:Z,telemetry:Q}}function h1($){if(g9())return{telemetry:new dj($)};if($.enabled!==!0)return{telemetry:new X8({...$,distinctId:P0($.distinctId)})};return r4($)}function j8($){let{telemetry:Z,provider:Q}=h1($);return{telemetry:Z,provider:Q,flush:async()=>{let X=Q;if(X&&typeof X.forceFlush==="function")try{await X.forceFlush()}catch{}},dispose:async()=>{await Promise.allSettled([Z.dispose(),Q?.dispose()])}}}function DW($){if(!$)return[];return(Array.isArray($)?$:$.split(",")).map((Q)=>Q.trim()).filter((Q)=>Q==="console"||Q==="otlp")}function $_($,Z){if($==="console")return new lL;if(!Z.endpoint)return null;let Q=LW(Z.endpoint,"/v1/logs");return new mL({url:Q,headers:Z.headers})}function Z_($,Z){if($==="console")return new sL(new aL);if(!Z.endpoint)return null;let Q=LW(Z.endpoint,"/v1/traces");return new nL(new cL({url:Q,headers:Z.headers}))}function Q_($,Z){if($==="console")return new uj({exporter:new rL,exportIntervalMillis:Z.interval,exportTimeoutMillis:Z.timeout});if(!Z.endpoint)return null;let Q=LW(Z.endpoint,"/v1/metrics");return new uj({exporter:new vL({url:Q,headers:Z.headers}),exportIntervalMillis:Z.interval,exportTimeoutMillis:Z.timeout})}function LW($,Z){let Q=new URL($),W=Q.pathname.endsWith("/")?Q.pathname.slice(0,-1):Q.pathname;return Q.pathname=W.endsWith(Z)?W:`${W}${Z}`,Q.toString()}var u9=p$(()=>{$1();J8();UW()});var _B={};N(_B,{normalizeUserMessage:()=>nq,buildInitialUserContent:()=>iq});async function iq($,Z,Q,W){let J=aq(Z),X=await oq(Q,W);if(J.length===0&&!X)return $;let Y=[{type:"text",text:$},...J];if(X)Y.push(...X);return Y}function nq($){if($==null)return"";if(typeof $==="string")return $;let Z=$.content;if(typeof Z==="string")return Z;if(!Array.isArray(Z))return"";let Q=[];for(let W of Z)if(W&&typeof W==="object"&&W.type==="text"){let J=W.text;if(typeof J==="string")Q.push(J)}return Q.join(`
3
+ `)}function aq($){if(!$||$.length===0)return[];let Z=[];for(let Q of $){let W=sq(Q);if(W)Z.push(W)}return Z}function sq($){let Z=$.trim();if(!Z)return;let Q=Z.match(/^data:([^;,]+);base64,(.+)$/);if(Q){let W=Q[1],J=Q[2];if(!W||!J)return;return{type:"image",mediaType:W,data:J}}return{type:"image",mediaType:"image/png",data:Z}}async function oq($,Z){if(!$||$.length===0)return;let Q=Z??(async()=>{throw Error("File loading is not configured in this runtime. Provide userFileContentLoader to enable userFiles support.")}),W=await Promise.all($.map(async(J)=>{let X=J.replace(/\\/g,"/");try{let Y=await Q(J);return{type:"file",path:X,content:Y}}catch(Y){let j=Y instanceof Error?Y.message:String(Y);return{type:"file",path:X,content:`Error fetching content: ${j}`}}}));if(W.length===0)return;return W}var pK={};N(pK,{updateMcpSettingsFileSync:()=>j1,updateMcpSettingsFile:()=>t8,updateMcpServerOAuthStateAsync:()=>O5,updateMcpServerOAuthState:()=>P2,setMcpServerDisabled:()=>w2,resolveMcpServerRegistrations:()=>p0,resolveDefaultMcpSettingsPath:()=>Z0,registerMcpServersFromSettingsFile:()=>S2,normalizeMcpServerOAuthState:()=>e8,loadMcpSettingsFile:()=>N2,listMcpServerOAuthStatuses:()=>q5,hasMcpSettingsFile:()=>s1,getMcpServerOAuthState:()=>C2,McpSettingsUpdateSkippedError:()=>o8,McpSettingsMutatorPurityError:()=>y$,McpSettingsLockTimeoutError:()=>h$});import{existsSync as PK,mkdirSync as qJ,readFileSync as SK,renameSync as EJ,rmdirSync as nN,rmSync as MJ,statSync as aN,unlinkSync as bK,writeFileSync as yK}from"node:fs";import{randomUUID as sN}from"node:crypto";import{dirname as hK,join as CK}from"node:path";import{setTimeout as oN}from"node:timers/promises";import{resolveMcpSettingsPath as tN}from"@cline/shared/storage";import{z as S}from"zod";function RJ($){if(!$)return;if($==="http")return"streamableHttp";return $}function Z0(){return tN()}function Hw($,Z){qJ(hK($),{recursive:!0});let Q=`${$}.tmp.${process.pid}.${Date.now()}.${Math.random().toString(36).slice(2)}`;try{yK(Q,Z,{encoding:"utf8",flag:"wx"}),EJ(Q,$)}catch(W){try{bK(Q)}catch{}throw W}}function Gw($){Atomics.wait(Bw,0,0,$)}function Kw($){return`${$}.lock`}function gK(){return`${process.pid}.${Date.now()}.${sN()}`}function mK($,Z){qJ(hK($),{recursive:!0});let Q=`${$}.tmp.${Z}`;MJ(Q,{recursive:!0,force:!0}),qJ(Q,{recursive:!0}),yK(CK(Q,`owner.${Z}`),Z,{encoding:"utf8",flag:"wx"});try{return EJ(Q,$),{lockDir:$,ownerFile:CK($,`owner.${Z}`)}}catch(W){if(MJ(Q,{recursive:!0,force:!0}),PK($))return;throw W}}function vK($,Z){let Q;try{Q=Date.now()-aN($).mtimeMs}catch(J){if(J.code==="ENOENT")return;throw J}if(Q<wJ)return;Z.logger?.log(`[mcp-settings] Stale lock directory at ${$} (age ${Q}ms); reclaiming.`,{severity:"warn"});let W=`${$}.stale.${gK()}`;try{EJ($,W)}catch(J){if(J.code==="ENOENT")return;throw J}MJ(W,{recursive:!0,force:!0})}function Fw($){try{bK($.ownerFile)}catch(Z){if(Z.code!=="ENOENT")throw Z}try{nN($.lockDir)}catch(Z){let Q=Z.code;if(Q!=="ENOENT"&&Q!=="ENOTEMPTY"&&Q!=="EEXIST")throw Z}}function cK($){let Z=Kw($);if(wQ.has(Z))throw Error(`Reentrant MCP settings update for ${$}. Keep mutators pure: compute values up front and do not call back into the settings API.`);return{lockDir:Z,token:gK()}}function Aw($,Z){let{lockDir:Q,token:W}=cK($),J=Z.timeoutMs??wJ,X=Date.now();while(!0){let Y=mK(Q,W);if(Y)return wQ.add(Q),Y;if(Date.now()-X>J)throw new h$(`Timed out waiting for MCP settings lock at ${Q} after ${J}ms.`);vK(Q,Z),Gw(xK)}}async function fw($,Z){let{lockDir:Q,token:W}=cK($),J=Z.timeoutMs??wJ,X=Date.now();while(!0){let Y=mK(Q,W);if(Y)return wQ.add(Q),Y;if(Date.now()-X>J)throw new h$(`Timed out waiting for MCP settings lock at ${Q} after ${J}ms.`);vK(Q,Z),await oN(xK)}}function uK($,Z,Q){try{let W=Uw(Z),J=Dw(W,Q);return Hw(Z,`${JSON.stringify(W,null,2)}
4
+ `),J}finally{wQ.delete($.lockDir),Fw($)}}function j1($,Z,Q={}){let W=Aw($,Q);return uK(W,$,Z)}async function t8($,Z,Q={}){let W=await fw($,Q);return uK(W,$,Z)}function Uw($){let Z=_w($);if(!Z.mcpServers||typeof Z.mcpServers!=="object"||Array.isArray(Z.mcpServers))Z.mcpServers={};return Z}function Dw($,Z){let Q=JSON.stringify($),W=JSON.parse(Q),J=Z(W),X=JSON.stringify(W),Y=Z($);if(JSON.stringify($)!==X)throw new y$("MCP settings mutator must be deterministic and free of side effects; repeated calls produced different settings.");if(JSON.stringify(Y)!==JSON.stringify(J))throw new y$("MCP settings mutator must be deterministic and free of side effects; repeated calls produced different return values.");return Y}function Lw($){let Z=SK($,"utf8"),Q;try{Q=JSON.parse(Z)}catch(W){let J=W instanceof Error?W.message:String(W);throw Error(`Failed to parse MCP settings JSON at "${$}": ${J}`)}if(!Q||typeof Q!=="object"||Array.isArray(Q))throw Error(`Invalid MCP settings at "${$}": expected object.`);return Q}function _w($){try{return Lw($)}catch(Z){if(Z.code==="ENOENT")return{};throw Z}}function dK($,Z){if(!Object.hasOwn($,Z))return;let Q=$[Z];if(!Q||typeof Q!=="object"||Array.isArray(Q))return;return Q}function zw($,Z,Q){Object.defineProperty($,Z,{value:Q,enumerable:!0,configurable:!0,writable:!0})}function N2($={}){let Z=$.filePath??Z0(),Q=SK(Z,"utf8"),W;try{W=JSON.parse(Q)}catch(X){let Y=X instanceof Error?X.message:String(X);throw Error(`Failed to parse MCP settings JSON at "${Z}": ${Y}`)}let J=Vw.safeParse(W);if(!J.success){let X=J.error.issues.map((Y)=>{let j=Y.path.join(".");return j?`${j}: ${Y.message}`:Y.message}).join("; ");throw Error(`Invalid MCP settings at "${Z}": ${X}`)}return J.data}function e8($){if(!$)return;let Z={...$.clientInformation?{clientInformation:$.clientInformation}:{},...$.tokens?{tokens:$.tokens}:{},...$.codeVerifier?{codeVerifier:$.codeVerifier}:{},...$.discoveryState?{discoveryState:$.discoveryState}:{},...$.redirectUrl?{redirectUrl:$.redirectUrl}:{},...$.lastError?{lastError:$.lastError}:{},...$.lastAuthenticatedAt?{lastAuthenticatedAt:$.lastAuthenticatedAt}:{}};return Object.keys(Z).length>0?Z:void 0}function Tw($){if($===void 0)return;let Z=NJ.safeParse($);if(!Z.success)return;return e8(Z.data)}function s1($={}){let Z=$.filePath??Z0();return PK(Z)}function p0($={}){let Z=N2($);return Object.entries(Z.mcpServers).map(([Q,W])=>({name:Q,transport:W.transport,disabled:W.disabled,metadata:W.metadata,oauth:W.oauth}))}function w2($){let Z=$.filePath??Z0(),Q=$.name.trim();if(!Q)throw Error("MCP server settings toggle requires a server name.");j1(Z,(W)=>{let J=W.mcpServers;if(!J||typeof J!=="object"||Array.isArray(J))throw Error(`Invalid MCP settings at "${Z}": mcpServers must be an object.`);let X={...J},Y=dK(X,Q);if(!Y)throw Error(`Unknown MCP server: ${Q}`);let j={...Y};if($.disabled)j.disabled=!0;else delete j.disabled;zw(X,Q,j),W.mcpServers=X})}function C2($,Z={}){let Q=N2(Z);if(!Object.hasOwn(Q.mcpServers,$))return;return e8(Q.mcpServers[$]?.oauth)}function lK($,Z){return(Q)=>{let W=Q.mcpServers,J=dK(W,$);if(!J)throw Error(`Unknown MCP server: ${$}`);let X=Tw(J.oauth)??{},Y=e8(Z(X));if(Y)J.oauth=Y;else delete J.oauth;return Y??{}}}function P2($,Z,Q={}){let W=Q.filePath??Z0();return j1(W,lK($,Z))}async function O5($,Z,Q={}){let W=Q.filePath??Z0();return t8(W,lK($,Z))}function q5($={}){return p0($).map((Q)=>{let W=Q.transport.type!=="stdio",J=Q.oauth?.tokens?.access_token;return{serverName:Q.name,oauthSupported:W,oauthConfigured:W&&typeof J==="string"&&J.trim().length>0,lastError:Q.oauth?.lastError,lastAuthenticatedAt:Q.oauth?.lastAuthenticatedAt}}).sort((Q,W)=>Q.serverName.localeCompare(W.serverName))}async function S2($,Z={}){let Q=p0(Z);for(let W of Q)await $.registerServer(W);return Q}var T5,kK,NJ,eN,$w,Zw,Qw,Ww,Jw,IK,Xw,Yw,jw,Vw,o8,h$,y$,wJ=1e4,xK=25,Bw,wQ;var CQ=p$(()=>{T5=S.record(S.string(),S.string()),kK=S.record(S.string(),S.unknown()),NJ=S.object({clientInformation:S.record(S.string(),S.unknown()).optional(),tokens:S.record(S.string(),S.unknown()).optional(),codeVerifier:S.string().optional(),discoveryState:S.record(S.string(),S.unknown()).optional(),redirectUrl:S.string().url().optional(),lastError:S.string().optional(),lastAuthenticatedAt:S.number().int().positive().optional()}).strip(),eN=S.object({type:S.literal("stdio"),command:S.string().min(1),args:S.array(S.string()).optional(),cwd:S.string().min(1).optional(),env:T5.optional()}),$w=S.object({type:S.literal("sse"),url:S.string().url(),headers:T5.optional()}),Zw=S.object({type:S.literal("streamableHttp"),url:S.string().url(),headers:T5.optional()}),Qw=S.discriminatedUnion("type",[eN,$w,Zw]),Ww=S.object({transport:Qw,disabled:S.boolean().optional(),metadata:kK.optional(),oauth:NJ.optional()}),Jw=S.enum(["stdio","sse","http","streamableHttp"]).optional(),IK=S.object({type:S.enum(["stdio","sse","streamableHttp"]).optional(),transportType:Jw,disabled:S.boolean().optional(),metadata:kK.optional(),oauth:NJ.optional()});Xw=IK.extend({command:S.string().min(1),args:S.array(S.string()).optional(),cwd:S.string().min(1).optional(),env:T5.optional()}).superRefine(($,Z)=>{let Q=$.type??RJ($.transportType);if(Q&&Q!=="stdio")Z.addIssue({code:S.ZodIssueCode.custom,message:'Expected type "stdio" for command-based MCP server',path:["type"]})}).transform(($)=>({transport:{type:"stdio",command:$.command,args:$.args,cwd:$.cwd,env:$.env},disabled:$.disabled,metadata:$.metadata,oauth:$.oauth})),Yw=IK.extend({url:S.string().url(),headers:T5.optional()}).superRefine(($,Z)=>{let Q=$.type??RJ($.transportType)??"sse";if(Q!=="sse"&&Q!=="streamableHttp")Z.addIssue({code:S.ZodIssueCode.custom,message:'Expected type "sse" or "streamableHttp" for URL-based MCP server',path:["type"]})}).transform(($)=>{if(($.type??RJ($.transportType)??"sse")==="streamableHttp")return{transport:{type:"streamableHttp",url:$.url,headers:$.headers},disabled:$.disabled,metadata:$.metadata,oauth:$.oauth};return{transport:{type:"sse",url:$.url,headers:$.headers},disabled:$.disabled,metadata:$.metadata,oauth:$.oauth}}),jw=S.union([Ww,Xw,Yw]),Vw=S.object({mcpServers:S.record(S.string(),jw)}).passthrough();o8=class o8 extends Error{constructor($){super($);this.name="McpSettingsUpdateSkippedError"}};h$=class h$ extends Error{constructor($){super($);this.name="McpSettingsLockTimeoutError"}};y$=class y$ extends Error{constructor($){super($);this.name="McpSettingsMutatorPurityError"}};Bw=new Int32Array(new SharedArrayBuffer(4)),wQ=new Set});var IA={};N(IA,{resolveCoreDistinctId:()=>P0,createOpenTelemetryTelemetryService:()=>r4,createConfiguredTelemetryService:()=>h1,createConfiguredTelemetryHandle:()=>j8,OpenTelemetryProvider:()=>Y8,OpenTelemetryAdapter:()=>l4});var $7=p$(()=>{J8();u9()});var GU={};N(GU,{writeHubDiscovery:()=>p9,withHubStartupLock:()=>r9,verifyHubConnection:()=>A1,truncateNotificationBody:()=>J9,toHubStatusUrl:()=>OW,toHubHealthUrl:()=>i9,stopLocalHubServerGracefully:()=>hW,startHubWebSocketServer:()=>j9,startHubServer:()=>HU,spawnDetachedHubServerWithRetry:()=>H8,spawnDetachedHubServer:()=>wW,sendHubCommand:()=>_V,restartLocalHubIfIdleAfterStartupTimeout:()=>t9,resolveWorkspaceHubOwnerContext:()=>QV,resolveSharedHubOwnerContext:()=>Q1,resolveProductionHubOwnerContext:()=>F1,resolveHubUrl:()=>kW,resolveHubOwnerContext:()=>x1,resolveHubEndpointOptions:()=>K1,resolveHubBuildId:()=>l9,resolveDefaultHubPort:()=>V8,resolveDefaultHubPathname:()=>NW,resolveDefaultHubHost:()=>EW,resolveCompatibleLocalHubUrl:()=>o4,resolveClineDir:()=>tj,resolveClineDataDir:()=>o$,requestHubShutdown:()=>s4,rememberRecoverableLocalHubUrl:()=>B$,readHubDiscovery:()=>K0,readBearerToken:()=>l7,probeHubServer:()=>g1,probeHubConnection:()=>LV,prewarmDetachedHubServer:()=>a9,normalizeHubWebSocketUrl:()=>G$,isLocalHubOrigin:()=>MY,isLocalHubHostName:()=>p7,isHubReconnectableTransportError:()=>bW,isHubCommandTimeoutError:()=>o9,isDiscoveryFilePresent:()=>$V,ensureHubWebSocketServer:()=>r7,ensureHubServer:()=>BU,ensureDetachedHubServer:()=>VV,ensureCompatibleLocalHubUrl:()=>$2,createLocalHubScheduleRuntimeHandlers:()=>VU,createInMemoryHubOwnerContext:()=>ej,createHubServerUrl:()=>Z1,createHubAuthToken:()=>d9,createConfiguredTelemetryService:()=>h1,createConfiguredTelemetryHandle:()=>j8,connectToHub:()=>e9,clearHubDiscovery:()=>S0,NodeHubClient:()=>W1,NativeHubTransportAdapter:()=>Y9,HubUIClient:()=>gW,HubTransportError:()=>R0,HubSessionClient:()=>xW,HubServerTransport:()=>w4,HubScheduleService:()=>Z8,HubScheduleCommandService:()=>o2,HubCommandError:()=>B8,DEFAULT_HUB_PORT:()=>MW,DEFAULT_HUB_PATHNAME:()=>RW,DEFAULT_HUB_HOST:()=>qW,BrowserWebSocketHubAdapter:()=>X9});import{createSessionId as RD}from"@cline/shared";function g0($,Z){return{version:$.version,requestId:$.requestId,ok:!0,payload:Z}}function Yj($,Z,Q){return{version:$.version,requestId:$.requestId??RD("hubreq_"),ok:!1,error:{code:Z,message:Q}}}class o2{schedules;constructor($){this.schedules=$}async handleCommand($){try{switch($.command){case"schedule.create":return g0($,{schedule:this.schedules.createSchedule(this.toCreateInput($.payload??{}))});case"schedule.list":return g0($,{schedules:this.schedules.listSchedules({enabled:typeof $.payload?.enabled==="boolean"?$.payload.enabled:void 0,limit:typeof $.payload?.limit==="number"?$.payload.limit:void 0,tags:Array.isArray($.payload?.tags)?$.payload?.tags:void 0})});case"schedule.get":return g0($,{schedule:this.schedules.getSchedule(String($.payload?.scheduleId??""))});case"schedule.update":return g0($,{schedule:this.schedules.updateSchedule(String($.payload?.scheduleId??""),this.toUpdateInput($.payload??{}))});case"schedule.delete":return g0($,{deleted:this.schedules.deleteSchedule(String($.payload?.scheduleId??""))});case"schedule.enable":return g0($,{schedule:this.schedules.resumeSchedule(String($.payload?.scheduleId??""))});case"schedule.disable":return g0($,{schedule:this.schedules.pauseSchedule(String($.payload?.scheduleId??""))});case"schedule.trigger":return g0($,{execution:$.payload?.wait===!1?this.schedules.triggerScheduleNowDetached(String($.payload?.scheduleId??"")):await this.schedules.triggerScheduleNow(String($.payload?.scheduleId??""))});case"schedule.list_executions":return g0($,{executions:this.schedules.listScheduleExecutions({scheduleId:typeof $.payload?.scheduleId==="string"?$.payload.scheduleId:void 0,status:typeof $.payload?.status==="string"?$.payload.status:void 0,limit:typeof $.payload?.limit==="number"?$.payload.limit:void 0})});case"schedule.stats":return g0($,{stats:this.schedules.getScheduleStats(String($.payload?.scheduleId??""))});case"schedule.active":return g0($,{executions:this.schedules.getActiveExecutions()});case"schedule.upcoming":return g0($,{runs:this.schedules.getUpcomingRuns(typeof $.payload?.limit==="number"?$.payload.limit:void 0)});default:return Yj($,"unsupported_command",`Unsupported hub schedule command: ${$.command}`)}}catch(Z){return Yj($,"schedule_command_failed",Z instanceof Error?Z.message:String(Z))}}toCreateInput($){let Z=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider&&$.model?{providerId:String($.provider),modelId:String($.model)}:void 0;return{...$,modelSelection:Z}}toUpdateInput($){let Z=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider||$.model?{providerId:typeof $.provider==="string"?$.provider:"",modelId:typeof $.model==="string"?$.model:""}:void 0;return{...$,modelSelection:Z}}}class P4{store;nowFn;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now())}materializeAll(){let $={oneOffQueued:0,scheduleQueued:0},Z=this.store.listSpecs({triggerKind:"one_off",enabled:!0,parseStatus:"valid"});for(let W of Z)if(this.materializeOneOff(W))$.oneOffQueued+=1;let Q=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let W of Q)try{if(this.materializeSchedule(W))$.scheduleQueued+=1}catch{}return $}materializeOneOff($){if($.triggerKind!=="one_off")return!1;if(!$.enabled||$.removed)return!1;if(this.store.hasOneOffRunForRevision($.specId,$.revision))return!1;return this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"one_off",scheduledFor:new Date(this.nowFn()).toISOString()}),!0}materializeSchedule($){if($.triggerKind!=="schedule")return!1;if(!$.enabled||$.removed)return!1;if(!$.scheduleExpr)return!1;return this.store.materializeDueScheduleRun({specId:$.specId,nowMs:this.nowFn()}).queued}}import{basename as kD}from"node:path";import{buildClineSystemPrompt as ID}from"@cline/shared";import{nowIso as Kj}from"@cline/shared/db";var U0={READ_FILES:"read_files",SEARCH_CODEBASE:"search_codebase",RUN_COMMANDS:"run_commands",FETCH_WEB_CONTENT:"fetch_web_content",APPLY_PATCH:"apply_patch",EDITOR:"editor",SKILLS:"skills",ASK:"ask_question",SUBMIT_AND_EXIT:"submit_and_exit"},X$=[U0.READ_FILES,U0.SEARCH_CODEBASE,U0.RUN_COMMANDS,U0.FETCH_WEB_CONTENT,U0.APPLY_PATCH,U0.EDITOR,U0.SKILLS,U0.ASK,U0.SUBMIT_AND_EXIT];var Vj={};N(Vj,{mergeRulesForSystemPrompt:()=>e2,loadRulesForSystemPromptFromWatcher:()=>WW,listEnabledRulesFromWatcher:()=>jj,isRuleEnabled:()=>f9,formatRulesForSystemPrompt:()=>t2});function f9($){return $.disabled!==!0}function t2($){if($.length===0)return"";return`
5
5
 
6
6
  # Rules
7
7
  ${$.map((Q)=>`## ${Q.name}
8
8
  ${Q.instructions}`).join(`
9
9
 
10
- `)}`}function t2($,Z){let Q=$?.trim(),W=Z?.trim();if(Q&&W)return`${Q}
10
+ `)}`}function e2($,Z){let Q=$?.trim(),W=Z?.trim();if(Q&&W)return`${Q}
11
11
 
12
- ${W}`;return Q||W||void 0}function jj($){return[...$.getSnapshot("rule").values()].map((Q)=>Q.item).filter(f9).sort((Q,W)=>Q.name.localeCompare(W.name))}function QW($){return o2(jj($))}var Gj={};N(Gj,{normalizeWorkspacePath:()=>N1,generateWorkspaceInfoWithDiagnostics:()=>S4,generateWorkspaceInfo:()=>e2,buildWorkspaceMetadataWithInfo:()=>WW,buildWorkspaceMetadata:()=>b4});import{basename as MD,resolve as RD}from"node:path";import{performance as Hj}from"node:perf_hooks";import{processWorkspaceInfo as Bj}from"@cline/shared";import ED from"simple-git";function N1($){return RD($)}async function e2($){return(await S4($)).info}function U9($){if($ instanceof Error)return{errorType:$.name?.trim()||$.constructor.name||"Error",message:$.message};return{errorType:"Error",message:String($)}}async function S4($){let Z=N1($),Q={rootPath:Z,hint:MD(Z)},W;try{let J=ED({baseDir:Z});if(!await J.checkIsRepo())return{info:Q,vcsType:"none"};try{let Y=await J.getRemotes(!0);if(Y.length>0){let j=Y.map((V)=>{let H=V.refs.fetch||V.refs.push;return`${V.name}: ${H}`});Q.associatedRemoteUrls=j}}catch(Y){W??=U9(Y)}try{let Y=(await J.revparse(["HEAD"])).trim();if(Y.length>0)Q.latestGitCommitHash=Y}catch(Y){W??=U9(Y)}try{let Y=(await J.branch()).current.trim();if(Y.length>0)Q.latestGitBranchName=Y}catch(Y){W??=U9(Y)}return{info:Q,vcsType:"git",error:W}}catch(J){return{info:Q,vcsType:"none",error:U9(J)}}}async function b4($){let Z=await e2($);return Bj(Z)}async function WW($){let Z=Hj.now(),Q=await S4($),W=Hj.now()-Z,J=Q.info;return{workspaceInfo:J,workspaceMetadata:Bj(J),durationMs:W,vcsType:Q.vcsType,initError:Q.error}}import{mkdirSync as ND,writeFileSync as wD}from"node:fs";import{join as CD}from"node:path";import{resolveCronReportsDir as PD}from"@cline/shared/storage";function Y$($){if(/[:#\n]/.test($)||$.includes('"'))return JSON.stringify($);return $}function r$($,Z){if(Z===void 0||Z===null)return;return`${$}: ${Y$(Z)}`}function SD($,Z,Q){let W=[`runId: ${Y$($.runId)}`,`specId: ${Y$(Z.specId)}`,`externalId: ${Y$(Z.externalId)}`,`title: ${Y$(Z.title)}`,`triggerKind: ${Y$($.triggerKind)}`,`status: ${Y$($.status)}`,`sourcePath: ${Y$(Z.sourcePath)}`],J=[r$("sessionId",$.sessionId),r$("startedAt",$.startedAt),r$("completedAt",$.completedAt),r$("triggerEventId",$.triggerEventId),r$("triggerEventType",Q?.eventType),r$("triggerEventSource",Q?.source),r$("triggerEventSubject",Q?.subject)];for(let X of J)if(X)W.push(X);return`---
12
+ ${W}`;return Q||W||void 0}function jj($){return[...$.getSnapshot("rule").values()].map((Q)=>Q.item).filter(f9).sort((Q,W)=>Q.name.localeCompare(W.name))}function WW($){return t2(jj($))}var Gj={};N(Gj,{normalizeWorkspacePath:()=>w1,generateWorkspaceInfoWithDiagnostics:()=>S4,generateWorkspaceInfo:()=>$8,buildWorkspaceMetadataWithInfo:()=>JW,buildWorkspaceMetadata:()=>b4});import{basename as ED,resolve as ND}from"node:path";import{performance as Hj}from"node:perf_hooks";import{processWorkspaceInfo as Bj}from"@cline/shared";import wD from"simple-git";function w1($){return ND($)}async function $8($){return(await S4($)).info}function U9($){if($ instanceof Error)return{errorType:$.name?.trim()||$.constructor.name||"Error",message:$.message};return{errorType:"Error",message:String($)}}async function S4($){let Z=w1($),Q={rootPath:Z,hint:ED(Z)},W;try{let J=wD({baseDir:Z});if(!await J.checkIsRepo())return{info:Q,vcsType:"none"};try{let Y=await J.getRemotes(!0);if(Y.length>0){let j=Y.map((V)=>{let H=V.refs.fetch||V.refs.push;return`${V.name}: ${H}`});Q.associatedRemoteUrls=j}}catch(Y){W??=U9(Y)}try{let Y=(await J.revparse(["HEAD"])).trim();if(Y.length>0)Q.latestGitCommitHash=Y}catch(Y){W??=U9(Y)}try{let Y=(await J.branch()).current.trim();if(Y.length>0)Q.latestGitBranchName=Y}catch(Y){W??=U9(Y)}return{info:Q,vcsType:"git",error:W}}catch(J){return{info:Q,vcsType:"none",error:U9(J)}}}async function b4($){let Z=await $8($);return Bj(Z)}async function JW($){let Z=Hj.now(),Q=await S4($),W=Hj.now()-Z,J=Q.info;return{workspaceInfo:J,workspaceMetadata:Bj(J),durationMs:W,vcsType:Q.vcsType,initError:Q.error}}import{mkdirSync as CD,writeFileSync as PD}from"node:fs";import{join as SD}from"node:path";import{resolveCronReportsDir as bD}from"@cline/shared/storage";function Y$($){if(/[:#\n]/.test($)||$.includes('"'))return JSON.stringify($);return $}function r$($,Z){if(Z===void 0||Z===null)return;return`${$}: ${Y$(Z)}`}function yD($,Z,Q){let W=[`runId: ${Y$($.runId)}`,`specId: ${Y$(Z.specId)}`,`externalId: ${Y$(Z.externalId)}`,`title: ${Y$(Z.title)}`,`triggerKind: ${Y$($.triggerKind)}`,`status: ${Y$($.status)}`,`sourcePath: ${Y$(Z.sourcePath)}`],J=[r$("sessionId",$.sessionId),r$("startedAt",$.startedAt),r$("completedAt",$.completedAt),r$("triggerEventId",$.triggerEventId),r$("triggerEventType",Q?.eventType),r$("triggerEventSource",Q?.source),r$("triggerEventSubject",Q?.subject)];for(let X of J)if(X)W.push(X);return`---
13
13
  ${W.join(`
14
14
  `)}
15
15
  ---
16
- `}function bD($){let Z=[];if($.triggerEvent){let Q=$.triggerEvent,W=[`- eventId: ${Q.eventId}`,`- eventType: ${Q.eventType}`,`- source: ${Q.source}`,Q.subject?`- subject: ${Q.subject}`:"",`- occurredAt: ${Q.occurredAt}`,Q.dedupeKey?`- dedupeKey: ${Q.dedupeKey}`:"",Q.attributes?`- attributes: ${JSON.stringify(Q.attributes)}`:""].filter((J)=>J.length>0);Z.push(`## Trigger Event
16
+ `}function hD($){let Z=[];if($.triggerEvent){let Q=$.triggerEvent,W=[`- eventId: ${Q.eventId}`,`- eventType: ${Q.eventType}`,`- source: ${Q.source}`,Q.subject?`- subject: ${Q.subject}`:"",`- occurredAt: ${Q.occurredAt}`,Q.dedupeKey?`- dedupeKey: ${Q.dedupeKey}`:"",Q.attributes?`- attributes: ${JSON.stringify(Q.attributes)}`:""].filter((J)=>J.length>0);Z.push(`## Trigger Event
17
17
 
18
18
  ${W.join(`
19
19
  `)}
@@ -32,12 +32,12 @@ ${W.join(`
32
32
  ${Q.join(`
33
33
  `)}
34
34
  `)}return Z.join(`
35
- `)}function JW($){let Z=PD($.specs);ND(Z,{recursive:!0});let Q=CD(Z,`${$.run.runId}.md`),W=`${SD($.run,$.spec,$.data.triggerEvent)}
36
- ${bD($.data)}`;return wD(Q,W,"utf8"),Q}class XW{globalMaxConcurrency;activeExecutions=new Map;constructor($){this.globalMaxConcurrency=Math.max(1,Math.floor($))}acquire($,Z,Q){if(this.getGlobalActiveCount()>=this.globalMaxConcurrency)return!1;let W=Math.max(1,Math.floor(Q)),J=this.activeExecutions.get($)??new Set;if(J.size>=W)return!1;return J.add(Z),this.activeExecutions.set($,J),!0}release($,Z){let Q=this.activeExecutions.get($);if(!Q)return;if(Q.delete(Z),Q.size===0)this.activeExecutions.delete($)}getGlobalActiveCount(){let $=0;for(let Z of this.activeExecutions.values())$+=Z.size;return $}}var kD=15000,ID=90,Fj=["rules","skills","plugins"];function xD($,Z){return new Set($.extensions??Fj).has(Z)}function gD($,Z){if($.tools===void 0)return{"*":{autoApprove:!0}};let Q={"*":{enabled:!1,autoApprove:!0}};for(let W of $.tools)Q[W]={enabled:!0,autoApprove:!0};if(Z==="yolo")Q[U0.SUBMIT_AND_EXIT]={enabled:!0,autoApprove:!0};return Q}function mD($){let Z=$?.trim();if(!Z)return;return["# Notes Directory",`Use ${Z} for durable notes related to this automation.`,"Before starting, inspect relevant existing notes there when useful. During or after the run, write concise notes there when they would help future runs continue with context."].join(`
37
- `)}class YW extends Error{constructor($){super($);this.name="TimeoutError"}}async function vD($,Z){if(Z<=0)return $;let Q,W=new Promise((J,X)=>{Q=setTimeout(()=>{X(new YW("cron run timed out"))},Z)});try{return await Promise.race([$,W])}finally{if(Q)clearTimeout(Q)}}class y4{store;materializer;options;limiter;claimLeaseMs;timer;started=!1;ticking=!1;disposed=!1;stopping=!1;activeRuns=new Map;constructor($){this.store=$.store,this.materializer=$.materializer,this.options=$,this.limiter=new XW($.globalMaxConcurrency??10),this.claimLeaseMs=Math.max(5000,($.claimLeaseSeconds??ID)*1000)}async start(){if(this.disposed)throw Error("CronRunner disposed");if(this.started)return;this.stopping=!1,this.started=!0;let $=Math.max(2000,this.options.pollIntervalMs??kD);await this.tick(),this.timer=setInterval(()=>void this.tick(),$)}async stop(){let $=this.started;if(this.started=!1,this.stopping=!0,this.timer)clearInterval(this.timer),this.timer=void 0;if(!$)return;let Z=[...this.activeRuns.entries()];await Promise.all(Z.map(async([Q,W])=>{if(W.sessionId)try{await this.options.runtimeHandlers.abortSession(W.sessionId)}catch{}try{this.store.requeueRun({runId:Q,claimToken:W.claimToken,error:"runner stopped before completion"})}catch{}}))}async dispose(){if(this.disposed)return;this.disposed=!0,await this.stop()}async tick(){if(this.ticking)return;this.ticking=!0;try{this.materializer.materializeAll();let $=this.store.claimDueRuns({nowIso:Kj(),leaseMs:this.claimLeaseMs});await Promise.allSettled($.map((Z)=>this.executeClaim(Z)))}catch($){let Z=this.options.logger;if(Z)if(Z.error)Z.error("cron.runner.tick.failed",{error:$});else Z.log("cron.runner.tick.failed",{error:$})}finally{this.ticking=!1}}getActiveRuns(){return[...this.activeRuns.entries()].flatMap(([$,Z])=>{let Q=this.store.getRun($);return Q?[{...Q,...Z}]:[]})}async executeClaim($){let Z=$.run,Q=this.store.getSpec(Z.specId);if(!Q){this.store.completeRun(Z.runId,{status:"failed",error:"spec not found",claimToken:$.claimToken});return}if(!Q.enabled||Q.removed){this.store.completeRun(Z.runId,{status:"cancelled",error:"spec disabled or removed",claimToken:$.claimToken});return}let W=Q.maxParallel&&Q.maxParallel>0?Q.maxParallel:1;if(!this.limiter.acquire(Q.specId,Z.runId,W)){this.store.requeueRun({runId:Z.runId,claimToken:$.claimToken,error:"concurrency limit reached"});return}if(this.stopping){this.limiter.release(Q.specId,Z.runId),this.store.requeueRun({runId:Z.runId,claimToken:$.claimToken,error:"runner stopped before execution"});return}this.activeRuns.set(Z.runId,{claimToken:$.claimToken});let X=Z.triggerEventId?this.store.getEventLog(Z.triggerEventId):void 0,Y,j,V=Date.now(),H;if(Q.timeoutSeconds&&Q.timeoutSeconds>0)H=V+Q.timeoutSeconds*1000;try{j=this.startClaimLeaseHeartbeat($);let B=await this.buildStartRequest(Q);if(Y=(await this.options.runtimeHandlers.startSession(B)).sessionId.trim(),!Y)throw Error("runtime returned empty sessionId");this.activeRuns.set(Z.runId,{claimToken:$.claimToken,sessionId:Y}),this.store.attachSessionIdToRun(Z.runId,Y);let K={config:B,prompt:this.buildPrompt(Q,X)},F=this.options.runtimeHandlers.sendSession(Y,K),A=H?Math.max(1,H-Date.now()):0,f=(await vD(F,A)).result,D=Date.now(),U=JW({specs:this.options.specs,workspaceRoot:this.options.workspaceRoot,run:{...Z,sessionId:Y,status:"done"},spec:Q,data:{finalText:f.text,usage:f.usage,toolCalls:f.toolCalls,durationMs:D-V,triggerEvent:X}});this.store.completeRun(Z.runId,{status:"done",sessionId:Y,reportPath:U,claimToken:$.claimToken}),this.publishScheduleExecutionEvent("schedule.execution.completed",Q,Z.runId),this.store.updateSpecLastRunAt(Q.specId,Kj())}catch(B){let G=B instanceof YW;if(Y&&G)try{await this.options.runtimeHandlers.abortSession(Y)}catch{}let K=B instanceof Error?B.message:String(B),F=Date.now(),A=JW({specs:this.options.specs,workspaceRoot:this.options.workspaceRoot,run:{...Z,sessionId:Y,status:"failed"},spec:Q,data:{error:K,durationMs:F-V,triggerEvent:X}});this.store.completeRun(Z.runId,{status:"failed",sessionId:Y,reportPath:A,error:K,claimToken:$.claimToken}),this.publishScheduleExecutionEvent("schedule.execution.failed",Q,Z.runId)}finally{if(j?.(),Y)try{await this.options.runtimeHandlers.stopSession(Y)}catch{}this.activeRuns.delete(Z.runId),this.limiter.release(Q.specId,Z.runId)}}publishScheduleExecutionEvent($,Z,Q){if(Z.source!=="hub-schedule"||!this.options.eventPublisher)return;let W=this.store.getRun(Q);if(!W)return;let J=W.status==="done"?"success":W.status==="cancelled"?"aborted":W.status==="running"?"running":W.status==="queued"?"pending":"failed";this.options.eventPublisher($,{scheduleId:Z.externalId,executionId:W.runId,sessionId:W.sessionId,triggeredAt:new Date(W.scheduledFor??W.createdAt).getTime(),startedAt:W.startedAt?new Date(W.startedAt).getTime():void 0,endedAt:W.completedAt?new Date(W.completedAt).getTime():void 0,status:J,errorMessage:W.error})}buildPrompt($,Z){let Q=$.prompt??"";if(!Z)return Q;let W={eventId:Z.eventId,eventType:Z.eventType,source:Z.source,subject:Z.subject,occurredAt:Z.occurredAt,workspaceRoot:Z.workspaceRoot,dedupeKey:Z.dedupeKey,attributes:Z.attributes,payload:Z.payload};return`${Q}
35
+ `)}function XW($){let Z=bD($.specs);CD(Z,{recursive:!0});let Q=SD(Z,`${$.run.runId}.md`),W=`${yD($.run,$.spec,$.data.triggerEvent)}
36
+ ${hD($.data)}`;return PD(Q,W,"utf8"),Q}class YW{globalMaxConcurrency;activeExecutions=new Map;constructor($){this.globalMaxConcurrency=Math.max(1,Math.floor($))}acquire($,Z,Q){if(this.getGlobalActiveCount()>=this.globalMaxConcurrency)return!1;let W=Math.max(1,Math.floor(Q)),J=this.activeExecutions.get($)??new Set;if(J.size>=W)return!1;return J.add(Z),this.activeExecutions.set($,J),!0}release($,Z){let Q=this.activeExecutions.get($);if(!Q)return;if(Q.delete(Z),Q.size===0)this.activeExecutions.delete($)}getGlobalActiveCount(){let $=0;for(let Z of this.activeExecutions.values())$+=Z.size;return $}}var xD=15000,gD=90,Fj=["rules","skills","plugins"];function mD($,Z){return new Set($.extensions??Fj).has(Z)}function vD($,Z){if($.tools===void 0)return{"*":{autoApprove:!0}};let Q={"*":{enabled:!1,autoApprove:!0}};for(let W of $.tools)Q[W]={enabled:!0,autoApprove:!0};if(Z==="yolo")Q[U0.SUBMIT_AND_EXIT]={enabled:!0,autoApprove:!0};return Q}function cD($){let Z=$?.trim();if(!Z)return;return["# Notes Directory",`Use ${Z} for durable notes related to this automation.`,"Before starting, inspect relevant existing notes there when useful. During or after the run, write concise notes there when they would help future runs continue with context."].join(`
37
+ `)}class jW extends Error{constructor($){super($);this.name="TimeoutError"}}async function uD($,Z){if(Z<=0)return $;let Q,W=new Promise((J,X)=>{Q=setTimeout(()=>{X(new jW("cron run timed out"))},Z)});try{return await Promise.race([$,W])}finally{if(Q)clearTimeout(Q)}}class y4{store;materializer;options;limiter;claimLeaseMs;timer;started=!1;ticking=!1;disposed=!1;stopping=!1;activeRuns=new Map;constructor($){this.store=$.store,this.materializer=$.materializer,this.options=$,this.limiter=new YW($.globalMaxConcurrency??10),this.claimLeaseMs=Math.max(5000,($.claimLeaseSeconds??gD)*1000)}async start(){if(this.disposed)throw Error("CronRunner disposed");if(this.started)return;this.stopping=!1,this.started=!0;let $=Math.max(2000,this.options.pollIntervalMs??xD);await this.tick(),this.timer=setInterval(()=>void this.tick(),$)}async stop(){let $=this.started;if(this.started=!1,this.stopping=!0,this.timer)clearInterval(this.timer),this.timer=void 0;if(!$)return;let Z=[...this.activeRuns.entries()];await Promise.all(Z.map(async([Q,W])=>{if(W.sessionId)try{await this.options.runtimeHandlers.abortSession(W.sessionId)}catch{}try{this.store.requeueRun({runId:Q,claimToken:W.claimToken,error:"runner stopped before completion"})}catch{}}))}async dispose(){if(this.disposed)return;this.disposed=!0,await this.stop()}async tick(){if(this.ticking)return;this.ticking=!0;try{this.materializer.materializeAll();let $=this.store.claimDueRuns({nowIso:Kj(),leaseMs:this.claimLeaseMs});await Promise.allSettled($.map((Z)=>this.executeClaim(Z)))}catch($){let Z=this.options.logger;if(Z)if(Z.error)Z.error("cron.runner.tick.failed",{error:$});else Z.log("cron.runner.tick.failed",{error:$})}finally{this.ticking=!1}}getActiveRuns(){return[...this.activeRuns.entries()].flatMap(([$,Z])=>{let Q=this.store.getRun($);return Q?[{...Q,...Z}]:[]})}async executeClaim($){let Z=$.run,Q=this.store.getSpec(Z.specId);if(!Q){this.store.completeRun(Z.runId,{status:"failed",error:"spec not found",claimToken:$.claimToken});return}if(!Q.enabled||Q.removed){this.store.completeRun(Z.runId,{status:"cancelled",error:"spec disabled or removed",claimToken:$.claimToken});return}let W=Q.maxParallel&&Q.maxParallel>0?Q.maxParallel:1;if(!this.limiter.acquire(Q.specId,Z.runId,W)){this.store.requeueRun({runId:Z.runId,claimToken:$.claimToken,error:"concurrency limit reached"});return}if(this.stopping){this.limiter.release(Q.specId,Z.runId),this.store.requeueRun({runId:Z.runId,claimToken:$.claimToken,error:"runner stopped before execution"});return}this.activeRuns.set(Z.runId,{claimToken:$.claimToken});let X=Z.triggerEventId?this.store.getEventLog(Z.triggerEventId):void 0,Y,j,V=Date.now(),H;if(Q.timeoutSeconds&&Q.timeoutSeconds>0)H=V+Q.timeoutSeconds*1000;try{j=this.startClaimLeaseHeartbeat($);let B=await this.buildStartRequest(Q);if(Y=(await this.options.runtimeHandlers.startSession(B)).sessionId.trim(),!Y)throw Error("runtime returned empty sessionId");this.activeRuns.set(Z.runId,{claimToken:$.claimToken,sessionId:Y}),this.store.attachSessionIdToRun(Z.runId,Y);let K={config:B,prompt:this.buildPrompt(Q,X)},F=this.options.runtimeHandlers.sendSession(Y,K),A=H?Math.max(1,H-Date.now()):0,f=(await uD(F,A)).result,D=Date.now(),U=XW({specs:this.options.specs,workspaceRoot:this.options.workspaceRoot,run:{...Z,sessionId:Y,status:"done"},spec:Q,data:{finalText:f.text,usage:f.usage,toolCalls:f.toolCalls,durationMs:D-V,triggerEvent:X}});this.store.completeRun(Z.runId,{status:"done",sessionId:Y,reportPath:U,claimToken:$.claimToken}),this.publishScheduleExecutionEvent("schedule.execution.completed",Q,Z.runId),this.store.updateSpecLastRunAt(Q.specId,Kj())}catch(B){let G=B instanceof jW;if(Y&&G)try{await this.options.runtimeHandlers.abortSession(Y)}catch{}let K=B instanceof Error?B.message:String(B),F=Date.now(),A=XW({specs:this.options.specs,workspaceRoot:this.options.workspaceRoot,run:{...Z,sessionId:Y,status:"failed"},spec:Q,data:{error:K,durationMs:F-V,triggerEvent:X}});this.store.completeRun(Z.runId,{status:"failed",sessionId:Y,reportPath:A,error:K,claimToken:$.claimToken}),this.publishScheduleExecutionEvent("schedule.execution.failed",Q,Z.runId)}finally{if(j?.(),Y)try{await this.options.runtimeHandlers.stopSession(Y)}catch{}this.activeRuns.delete(Z.runId),this.limiter.release(Q.specId,Z.runId)}}publishScheduleExecutionEvent($,Z,Q){if(Z.source!=="hub-schedule"||!this.options.eventPublisher)return;let W=this.store.getRun(Q);if(!W)return;let J=W.status==="done"?"success":W.status==="cancelled"?"aborted":W.status==="running"?"running":W.status==="queued"?"pending":"failed";this.options.eventPublisher($,{scheduleId:Z.externalId,executionId:W.runId,sessionId:W.sessionId,triggeredAt:new Date(W.scheduledFor??W.createdAt).getTime(),startedAt:W.startedAt?new Date(W.startedAt).getTime():void 0,endedAt:W.completedAt?new Date(W.completedAt).getTime():void 0,status:J,errorMessage:W.error})}buildPrompt($,Z){let Q=$.prompt??"";if(!Z)return Q;let W={eventId:Z.eventId,eventType:Z.eventType,source:Z.source,subject:Z.subject,occurredAt:Z.occurredAt,workspaceRoot:Z.workspaceRoot,dedupeKey:Z.dedupeKey,attributes:Z.attributes,payload:Z.payload};return`${Q}
38
38
 
39
39
  Trigger event:
40
- ${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Math.floor(this.claimLeaseMs/2)),Q=setInterval(()=>{let W=new Date(Date.now()+this.claimLeaseMs).toISOString();if(!this.store.renewClaim($.run.runId,$.claimToken,W))clearInterval(Q)},Z);return()=>clearInterval(Q)}async buildSystemPrompt($,Z,Q,W){let J=mD($.notesDirectory),X=t2(void 0,J),Y=await b4(Z),j=hD({ide:"Cline Cron",workspaceRoot:Z,workspaceName:yD(Z),metadata:Y,rules:$.systemPrompt?void 0:X,mode:Q,providerId:W,overridePrompt:$.systemPrompt,platform:typeof process<"u"&&process?.platform||"unknown"});return $.systemPrompt?t2(j,X)??j:j}async buildStartRequest($){let Z=($.workspaceRoot??"").trim(),Q=($.providerId??"").trim(),W=($.modelId??"").trim(),J=$.metadata?.__hubRuntimeOptions&&typeof $.metadata.__hubRuntimeOptions==="object"&&!Array.isArray($.metadata.__hubRuntimeOptions)?$.metadata.__hubRuntimeOptions:void 0,X=typeof $.metadata?.__hubScheduleCwd==="string"&&$.metadata.__hubScheduleCwd.trim()?$.metadata.__hubScheduleCwd.trim():Z;if(!Z)throw Error("cron spec requires workspaceRoot");let Y=$.mode==="plan"?"plan":$.mode==="act"?"act":"yolo";return{workspaceRoot:Z,cwd:X,provider:Q,model:W,mode:Y,source:$.source?.trim()||"user",systemPrompt:await this.buildSystemPrompt($,Z,Y,Q),maxIterations:$.maxIterations,enableTools:J?.enableTools??!0,enableSpawn:J?.enableSpawn??!0,enableTeams:J?.enableTeams??!0,autoApproveTools:J?.autoApproveTools??!0,toolPolicies:gD($,Y),configExtensions:Fj.filter((j)=>xD($,j))}}}function h4($,Z,Q,W){let J=new Set;function X(Y){let j=Y.toLowerCase();if(W){let H=W.indexOf(j);if(H!==-1)return H+Z}let V=Number(Y);if(!Number.isInteger(V)||V<Z||V>Q)throw Error(`Invalid cron value "${Y}" for range [${Z}-${Q}]`);return V}for(let Y of $.split(",")){if(Y==="*"){for(let H=Z;H<=Q;H+=1)J.add(H);continue}let j=Y.indexOf("/");if(j!==-1){let H=Y.slice(0,j),B=Number(Y.slice(j+1));if(!Number.isInteger(B)||B<1)throw Error(`Invalid step "${Y.slice(j+1)}"`);let G=Z,K=Q;if(H!=="*"){let F=H.indexOf("-");if(F!==-1)G=X(H.slice(0,F)),K=X(H.slice(F+1));else G=X(H)}if(G>K)throw Error(`Invalid cron range "${H}"`);for(let F=G;F<=K;F+=B)J.add(F);continue}let V=Y.indexOf("-");if(V!==-1){let H=X(Y.slice(0,V)),B=X(Y.slice(V+1));if(H>B)throw Error(`Invalid cron range "${Y}"`);for(let G=H;G<=B;G+=1)J.add(G);continue}J.add(X(Y))}return[...J].sort((Y,j)=>Y-j)}var cD=["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"],fj=["sun","mon","tue","wed","thu","fri","sat"];function k4($,Z,Q){let W=$[Z];if(typeof W!=="string")throw Error(`Invalid cron pattern "${Q}": missing field ${Z+1}`);return W}function jW($,Z){let Q=$[0];if(typeof Q!=="number")throw Error(`Invalid cron pattern: no values parsed for ${Z}`);return Q}function VW($){let Z=$.trim().split(/\s+/);if(Z.length!==5)throw Error(`Invalid cron pattern "${$}": expected 5 fields, got ${Z.length}`);return{minutes:h4(k4(Z,0,$),0,59),hours:h4(k4(Z,1,$),0,23),daysOfMonth:h4(k4(Z,2,$),1,31),months:h4(k4(Z,3,$),1,12,cD),daysOfWeek:h4(k4(Z,4,$),0,6,fj)}}function HW($){VW($)}function Uj($,Z,Q=Date.now()){i$($,Q,Z)}var Aj=new Map,uD=new Map(fj.map(($,Z)=>[$,Z]));function Dj($){let Z=$?.trim();return Z?Z:void 0}function Lj($){let Z=Aj.get($);if(Z)return Z;let Q=new Intl.DateTimeFormat("en-US",{timeZone:$,calendar:"gregory",numberingSystem:"latn",year:"numeric",month:"2-digit",day:"2-digit",weekday:"short",hour:"2-digit",minute:"2-digit",hourCycle:"h23"});return Aj.set($,Q),Q}function dD($){let Z=Dj($);if(!Z)return;Lj(Z).format(new Date)}function lD($,Z){let Q=Lj(Z).formatToParts(new Date($)),W=new Map(Q.map((Y)=>[Y.type,Y.value])),J=W.get("weekday")?.toLowerCase().slice(0,3)??"",X=uD.get(J);if(X===void 0)throw Error(`Unable to resolve weekday for timezone "${Z}"`);return{month:Number(W.get("month")),dayOfMonth:Number(W.get("day")),dayOfWeek:X,hour:Number(W.get("hour")),minute:Number(W.get("minute"))}}function pD($){let Z=new Date($);return{month:Z.getMonth()+1,dayOfMonth:Z.getDate(),dayOfWeek:Z.getDay(),hour:Z.getHours(),minute:Z.getMinutes()}}function rD($,Z){return $.months.includes(Z.month)&&$.daysOfMonth.includes(Z.dayOfMonth)&&$.daysOfWeek.includes(Z.dayOfWeek)&&$.hours.includes(Z.hour)&&$.minutes.includes(Z.minute)}function iD($,Z,Q){let W=VW($),J=new Date(Z);J.setSeconds(0,0);let X=J.getTime()+60000,Y=new Date(Z);Y.setFullYear(Y.getFullYear()+4);let j=Y.getTime();while(X<=j){if(rD(W,lD(X,Q)))return X;X+=60000}throw Error(`No cron occurrence found within 4 years for pattern "${$}" in timezone "${Q}"`)}function i$($,Z,Q){let W=Dj(Q);if(W)return dD(W),iD($,Z,W);let J=VW($),X=new Date(Z);X.setSeconds(0,0),X=new Date(X.getTime()+60000);let Y=new Date(Z);Y.setFullYear(Y.getFullYear()+4);while(X<=Y){let{month:j,dayOfMonth:V,dayOfWeek:H,hour:B,minute:G}=pD(X.getTime());if(!J.months.includes(j)){let K=J.months.find((A)=>A>j)??jW(J.months,"months"),F=K<=j?1:0;X=new Date(X.getFullYear()+F,K-1,1,0,0,0,0);continue}if(!J.daysOfMonth.includes(V)||!J.daysOfWeek.includes(H)){X=new Date(X.getFullYear(),X.getMonth(),V+1,0,0,0,0);continue}if(!J.hours.includes(B)){let K=J.hours.find((A)=>A>B)??jW(J.hours,"hours"),F=K<=B?1:0;X=new Date(X.getFullYear(),X.getMonth(),X.getDate()+F,K,0,0,0);continue}if(!J.minutes.includes(G)){let K=J.minutes.find((A)=>A>G)??jW(J.minutes,"minutes"),F=K<=G?1:0;X=new Date(X.getFullYear(),X.getMonth(),X.getDate(),X.getHours()+F,K,0,0);continue}return X.getTime()}throw Error(`No cron occurrence found within 4 years for pattern "${$}"`)}import{randomUUID as I4}from"node:crypto";import{asOptionalString as g,asString as e,loadSqliteDb as aD,nowIso as L0}from"@cline/shared/db";import{resolveCronDbPath as sD}from"@cline/shared/storage";var nD=[`CREATE TABLE IF NOT EXISTS cron_specs (
40
+ ${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Math.floor(this.claimLeaseMs/2)),Q=setInterval(()=>{let W=new Date(Date.now()+this.claimLeaseMs).toISOString();if(!this.store.renewClaim($.run.runId,$.claimToken,W))clearInterval(Q)},Z);return()=>clearInterval(Q)}async buildSystemPrompt($,Z,Q,W){let J=cD($.notesDirectory),X=e2(void 0,J),Y=await b4(Z),j=ID({ide:"Cline Cron",workspaceRoot:Z,workspaceName:kD(Z),metadata:Y,rules:$.systemPrompt?void 0:X,mode:Q,providerId:W,overridePrompt:$.systemPrompt,platform:typeof process<"u"&&process?.platform||"unknown"});return $.systemPrompt?e2(j,X)??j:j}async buildStartRequest($){let Z=($.workspaceRoot??"").trim(),Q=($.providerId??"").trim(),W=($.modelId??"").trim(),J=$.metadata?.__hubRuntimeOptions&&typeof $.metadata.__hubRuntimeOptions==="object"&&!Array.isArray($.metadata.__hubRuntimeOptions)?$.metadata.__hubRuntimeOptions:void 0,X=typeof $.metadata?.__hubScheduleCwd==="string"&&$.metadata.__hubScheduleCwd.trim()?$.metadata.__hubScheduleCwd.trim():Z;if(!Z)throw Error("cron spec requires workspaceRoot");let Y=$.mode==="plan"?"plan":$.mode==="act"?"act":"yolo";return{workspaceRoot:Z,cwd:X,provider:Q,model:W,mode:Y,source:$.source?.trim()||"user",systemPrompt:await this.buildSystemPrompt($,Z,Y,Q),maxIterations:$.maxIterations,enableTools:J?.enableTools??!0,enableSpawn:J?.enableSpawn??!0,enableTeams:J?.enableTeams??!0,autoApproveTools:J?.autoApproveTools??!0,toolPolicies:vD($,Y),configExtensions:Fj.filter((j)=>mD($,j))}}}function h4($,Z,Q,W){let J=new Set;function X(Y){let j=Y.toLowerCase();if(W){let H=W.indexOf(j);if(H!==-1)return H+Z}let V=Number(Y);if(!Number.isInteger(V)||V<Z||V>Q)throw Error(`Invalid cron value "${Y}" for range [${Z}-${Q}]`);return V}for(let Y of $.split(",")){if(Y==="*"){for(let H=Z;H<=Q;H+=1)J.add(H);continue}let j=Y.indexOf("/");if(j!==-1){let H=Y.slice(0,j),B=Number(Y.slice(j+1));if(!Number.isInteger(B)||B<1)throw Error(`Invalid step "${Y.slice(j+1)}"`);let G=Z,K=Q;if(H!=="*"){let F=H.indexOf("-");if(F!==-1)G=X(H.slice(0,F)),K=X(H.slice(F+1));else G=X(H)}if(G>K)throw Error(`Invalid cron range "${H}"`);for(let F=G;F<=K;F+=B)J.add(F);continue}let V=Y.indexOf("-");if(V!==-1){let H=X(Y.slice(0,V)),B=X(Y.slice(V+1));if(H>B)throw Error(`Invalid cron range "${Y}"`);for(let G=H;G<=B;G+=1)J.add(G);continue}J.add(X(Y))}return[...J].sort((Y,j)=>Y-j)}var dD=["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"],fj=["sun","mon","tue","wed","thu","fri","sat"];function k4($,Z,Q){let W=$[Z];if(typeof W!=="string")throw Error(`Invalid cron pattern "${Q}": missing field ${Z+1}`);return W}function VW($,Z){let Q=$[0];if(typeof Q!=="number")throw Error(`Invalid cron pattern: no values parsed for ${Z}`);return Q}function HW($){let Z=$.trim().split(/\s+/);if(Z.length!==5)throw Error(`Invalid cron pattern "${$}": expected 5 fields, got ${Z.length}`);return{minutes:h4(k4(Z,0,$),0,59),hours:h4(k4(Z,1,$),0,23),daysOfMonth:h4(k4(Z,2,$),1,31),months:h4(k4(Z,3,$),1,12,dD),daysOfWeek:h4(k4(Z,4,$),0,6,fj)}}function BW($){HW($)}function Uj($,Z,Q=Date.now()){i$($,Q,Z)}var Aj=new Map,lD=new Map(fj.map(($,Z)=>[$,Z]));function Dj($){let Z=$?.trim();return Z?Z:void 0}function Lj($){let Z=Aj.get($);if(Z)return Z;let Q=new Intl.DateTimeFormat("en-US",{timeZone:$,calendar:"gregory",numberingSystem:"latn",year:"numeric",month:"2-digit",day:"2-digit",weekday:"short",hour:"2-digit",minute:"2-digit",hourCycle:"h23"});return Aj.set($,Q),Q}function pD($){let Z=Dj($);if(!Z)return;Lj(Z).format(new Date)}function rD($,Z){let Q=Lj(Z).formatToParts(new Date($)),W=new Map(Q.map((Y)=>[Y.type,Y.value])),J=W.get("weekday")?.toLowerCase().slice(0,3)??"",X=lD.get(J);if(X===void 0)throw Error(`Unable to resolve weekday for timezone "${Z}"`);return{month:Number(W.get("month")),dayOfMonth:Number(W.get("day")),dayOfWeek:X,hour:Number(W.get("hour")),minute:Number(W.get("minute"))}}function iD($){let Z=new Date($);return{month:Z.getMonth()+1,dayOfMonth:Z.getDate(),dayOfWeek:Z.getDay(),hour:Z.getHours(),minute:Z.getMinutes()}}function nD($,Z){return $.months.includes(Z.month)&&$.daysOfMonth.includes(Z.dayOfMonth)&&$.daysOfWeek.includes(Z.dayOfWeek)&&$.hours.includes(Z.hour)&&$.minutes.includes(Z.minute)}function aD($,Z,Q){let W=HW($),J=new Date(Z);J.setSeconds(0,0);let X=J.getTime()+60000,Y=new Date(Z);Y.setFullYear(Y.getFullYear()+4);let j=Y.getTime();while(X<=j){if(nD(W,rD(X,Q)))return X;X+=60000}throw Error(`No cron occurrence found within 4 years for pattern "${$}" in timezone "${Q}"`)}function i$($,Z,Q){let W=Dj(Q);if(W)return pD(W),aD($,Z,W);let J=HW($),X=new Date(Z);X.setSeconds(0,0),X=new Date(X.getTime()+60000);let Y=new Date(Z);Y.setFullYear(Y.getFullYear()+4);while(X<=Y){let{month:j,dayOfMonth:V,dayOfWeek:H,hour:B,minute:G}=iD(X.getTime());if(!J.months.includes(j)){let K=J.months.find((A)=>A>j)??VW(J.months,"months"),F=K<=j?1:0;X=new Date(X.getFullYear()+F,K-1,1,0,0,0,0);continue}if(!J.daysOfMonth.includes(V)||!J.daysOfWeek.includes(H)){X=new Date(X.getFullYear(),X.getMonth(),V+1,0,0,0,0);continue}if(!J.hours.includes(B)){let K=J.hours.find((A)=>A>B)??VW(J.hours,"hours"),F=K<=B?1:0;X=new Date(X.getFullYear(),X.getMonth(),X.getDate()+F,K,0,0,0);continue}if(!J.minutes.includes(G)){let K=J.minutes.find((A)=>A>G)??VW(J.minutes,"minutes"),F=K<=G?1:0;X=new Date(X.getFullYear(),X.getMonth(),X.getDate(),X.getHours()+F,K,0,0);continue}return X.getTime()}throw Error(`No cron occurrence found within 4 years for pattern "${$}"`)}import{randomUUID as I4}from"node:crypto";import{asOptionalString as g,asString as e,loadSqliteDb as oD,nowIso as L0}from"@cline/shared/db";import{resolveCronDbPath as tD}from"@cline/shared/storage";var sD=[`CREATE TABLE IF NOT EXISTS cron_specs (
41
41
  spec_id TEXT PRIMARY KEY,
42
42
  external_id TEXT NOT NULL,
43
43
  source_path TEXT NOT NULL UNIQUE,
@@ -128,17 +128,17 @@ ${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
128
128
  ON cron_specs(trigger_kind, enabled, next_run_at);`,`CREATE INDEX IF NOT EXISTS cron_specs_event_match_idx
129
129
  ON cron_specs(trigger_kind, event_type, enabled);`,`CREATE INDEX IF NOT EXISTS cron_specs_parse_status_idx
130
130
  ON cron_specs(parse_status, updated_at DESC);`,`CREATE INDEX IF NOT EXISTS cron_specs_source_path_idx
131
- ON cron_specs(source_path);`];function _j($){$.exec("PRAGMA journal_mode = WAL;"),$.exec("PRAGMA busy_timeout = 5000;"),$.exec("PRAGMA foreign_keys = ON;");for(let Z of nD)$.exec(Z)}function D9($){if(!$)return;try{let Z=JSON.parse($);if(Z&&typeof Z==="object"&&!Array.isArray(Z))return Z}catch{}return}function BW($,Z={}){if(!$)return;try{let Q=JSON.parse($);if(!Array.isArray(Q))return;let W=Q.map((J)=>typeof J==="string"?J.trim():"").filter((J)=>J.length>0);if(Z.preserveEmpty)return W;return W.length>0?W:void 0}catch{return}}function n$($){if(typeof $==="number"&&Number.isFinite($))return $;if(typeof $==="bigint")return Number($);return}function j$($){return{specId:e($.spec_id),externalId:e($.external_id),sourcePath:e($.source_path),triggerKind:e($.trigger_kind),sourceMtimeMs:n$($.source_mtime_ms),sourceHash:g($.source_hash),parseStatus:e($.parse_status)==="invalid"?"invalid":"valid",parseError:g($.parse_error),enabled:Number($.enabled??0)===1,removed:Number($.removed??0)===1,title:e($.title),prompt:g($.prompt),workspaceRoot:g($.workspace_root),scheduleExpr:g($.schedule_expr),timezone:g($.timezone),eventType:g($.event_type),filters:D9(g($.filters_json)),debounceSeconds:n$($.debounce_seconds),dedupeWindowSeconds:n$($.dedupe_window_seconds),cooldownSeconds:n$($.cooldown_seconds),mode:g($.mode),systemPrompt:g($.system_prompt),providerId:g($.provider_id),modelId:g($.model_id),maxIterations:n$($.max_iterations),timeoutSeconds:n$($.timeout_seconds),maxParallel:n$($.max_parallel),tools:BW(g($.tools_json),{preserveEmpty:!0}),notesDirectory:g($.notes_directory),extensions:BW(g($.extensions_json),{preserveEmpty:!0}),source:g($.source),tags:BW(g($.tags_json)),metadata:D9(g($.metadata_json)),revision:Number($.revision??1),lastMaterializedRunId:g($.last_materialized_run_id),lastRunAt:g($.last_run_at),nextRunAt:g($.next_run_at),createdAt:e($.created_at),updatedAt:e($.updated_at)}}function GW($){return{runId:e($.run_id),specId:e($.spec_id),specRevision:Number($.spec_revision??1),triggerKind:e($.trigger_kind),status:e($.status),claimToken:g($.claim_token),claimStartedAt:g($.claim_started_at),claimUntilAt:g($.claim_until_at),scheduledFor:g($.scheduled_for),triggerEventId:g($.trigger_event_id),startedAt:g($.started_at),completedAt:g($.completed_at),sessionId:g($.session_id),reportPath:g($.report_path),error:g($.error),attemptCount:Number($.attempt_count??0),createdAt:e($.created_at),updatedAt:e($.updated_at)}}function zj($){return{eventId:e($.event_id),eventType:e($.event_type),source:e($.source),subject:g($.subject),occurredAt:e($.occurred_at),receivedAt:e($.received_at),workspaceRoot:g($.workspace_root),dedupeKey:g($.dedupe_key),payload:D9(g($.payload_json)),attributes:D9(g($.attributes_json)),processingStatus:e($.processing_status),matchedSpecCount:Number($.matched_spec_count??0),queuedRunCount:Number($.queued_run_count??0),suppressedCount:Number($.suppressed_count??0),error:g($.error),createdAt:e($.created_at),updatedAt:e($.updated_at)}}function Tj($){return $?JSON.stringify($):null}var oD=["prompt","workspaceRoot","mode","systemPrompt","providerId","modelId","maxIterations","timeoutSeconds","maxParallel","tools","notesDirectory","extensions","source","scheduleExpr","timezone","eventType","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds"];function Oj($){if($===void 0)return null;if($&&typeof $==="object")return JSON.stringify($);return $}function tD($,Z,Q,W){for(let J of oD){let X=$[J],Y=Z[J];if(Oj(X)!==Oj(Y))return!0}if(Q===!1&&W===!0)return!0;return!1}function eD($){return($.split("/").pop()??$).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}function $L($){return`hub/schedules/${$}.cron.md`}function ZL($){let Z={...$.metadata??{},...$.createdBy?{__hubScheduleCreatedBy:$.createdBy}:{},...$.cwd?{__hubScheduleCwd:$.cwd}:{},...$.runtimeOptions?{__hubRuntimeOptions:$.runtimeOptions}:{}};return Object.keys(Z).length>0?Z:void 0}function KW($){return{triggerKind:"schedule",title:$.name.trim(),prompt:$.prompt,workspaceRoot:$.workspaceRoot.trim(),schedule:$.cronPattern.trim(),mode:$.mode??"act",systemPrompt:$.systemPrompt,modelSelection:$.modelSelection?JSON.parse(JSON.stringify($.modelSelection)):void 0,maxIterations:typeof $.maxIterations==="number"?Math.floor($.maxIterations):void 0,timeoutSeconds:typeof $.timeoutSeconds==="number"?Math.floor($.timeoutSeconds):void 0,maxParallel:typeof $.maxParallel==="number"?Math.max(1,Math.floor($.maxParallel)):1,source:"hub-schedule",tags:$.tags?.filter((Z)=>Z.trim().length>0),enabled:$.enabled!==!1,metadata:ZL($)}}function qj($){return JSON.stringify(KW($))}function QL($,Z){let Q=$.metadata?{...$.metadata}:{},W=Z.createdBy===null?void 0:Z.createdBy!==void 0?Z.createdBy:typeof Q.__hubScheduleCreatedBy==="string"?Q.__hubScheduleCreatedBy:void 0,J=Z.cwd!==void 0?Z.cwd:typeof Q.__hubScheduleCwd==="string"?Q.__hubScheduleCwd:void 0,X=Z.runtimeOptions!==void 0?Z.runtimeOptions:Q.__hubRuntimeOptions&&typeof Q.__hubRuntimeOptions==="object"&&!Array.isArray(Q.__hubRuntimeOptions)?Q.__hubRuntimeOptions:void 0;return delete Q.__hubScheduleCreatedBy,delete Q.__hubScheduleCwd,delete Q.__hubRuntimeOptions,{name:Z.name??$.title,cronPattern:Z.cronPattern??$.scheduleExpr??"",prompt:Z.prompt??$.prompt??"",workspaceRoot:Z.workspaceRoot??$.workspaceRoot??"",cwd:J,modelSelection:Z.modelSelection!==void 0?Z.modelSelection:$.providerId||$.modelId?{providerId:$.providerId??"",modelId:$.modelId??""}:void 0,enabled:Z.enabled??$.enabled,mode:Z.mode??($.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"),systemPrompt:Z.systemPrompt===null?void 0:Z.systemPrompt!==void 0?Z.systemPrompt:$.systemPrompt,maxIterations:Z.maxIterations===null?void 0:Z.maxIterations!==void 0?Z.maxIterations:$.maxIterations,timeoutSeconds:Z.timeoutSeconds===null?void 0:Z.timeoutSeconds!==void 0?Z.timeoutSeconds:$.timeoutSeconds,maxParallel:Z.maxParallel??$.maxParallel??1,createdBy:W,tags:Z.tags??$.tags,runtimeOptions:X,metadata:Z.metadata!==void 0?Z.metadata:Object.keys(Q).length>0?Q:void 0}}class x4{db;constructor($={}){let Z=$.dbPath??sD();this.db=aD(Z),_j(this.db)}close(){this.db.close?.()}getSpecBySourcePath($){let Z=this.db.prepare("SELECT * FROM cron_specs WHERE source_path = ?").get($);return Z?j$(Z):void 0}getSpec($){let Z=this.db.prepare("SELECT * FROM cron_specs WHERE spec_id = ?").get($);return Z?j$(Z):void 0}getSpecByExternalId($){let Z=this.db.prepare("SELECT * FROM cron_specs WHERE external_id = ? ORDER BY created_at ASC LIMIT 1").get($);return Z?j$(Z):void 0}listSpecs($={}){let Z=[],Q=[];if($.triggerKind)Z.push("trigger_kind = ?"),Q.push($.triggerKind);if(typeof $.enabled==="boolean")Z.push("enabled = ?"),Q.push($.enabled?1:0);if($.parseStatus)Z.push("parse_status = ?"),Q.push($.parseStatus);if(!$.includeRemoved)Z.push("removed = 0");let W=Z.length>0?`WHERE ${Z.join(" AND ")}`:"",J=Math.max(1,Math.floor($.limit??500));return this.db.prepare(`SELECT * FROM cron_specs ${W} ORDER BY created_at DESC LIMIT ?`).all(...Q,J).map((Y)=>j$(Y))}createHubSchedule($){let Z=`sched_${I4()}`,Q=this.upsertSpec({externalId:Z,sourcePath:$L(Z),triggerKind:"schedule",sourceHash:qj($),parseStatus:"valid",spec:KW($)});this.initializeScheduleNextRun(Q.record.specId);let W=this.getSpec(Q.record.specId);if(!W)throw Error("failed to create hub schedule");return W}getHubSchedule($){let Z=this.db.prepare(`SELECT * FROM cron_specs
131
+ ON cron_specs(source_path);`];function _j($){$.exec("PRAGMA journal_mode = WAL;"),$.exec("PRAGMA busy_timeout = 5000;"),$.exec("PRAGMA foreign_keys = ON;");for(let Z of sD)$.exec(Z)}function D9($){if(!$)return;try{let Z=JSON.parse($);if(Z&&typeof Z==="object"&&!Array.isArray(Z))return Z}catch{}return}function GW($,Z={}){if(!$)return;try{let Q=JSON.parse($);if(!Array.isArray(Q))return;let W=Q.map((J)=>typeof J==="string"?J.trim():"").filter((J)=>J.length>0);if(Z.preserveEmpty)return W;return W.length>0?W:void 0}catch{return}}function n$($){if(typeof $==="number"&&Number.isFinite($))return $;if(typeof $==="bigint")return Number($);return}function j$($){return{specId:e($.spec_id),externalId:e($.external_id),sourcePath:e($.source_path),triggerKind:e($.trigger_kind),sourceMtimeMs:n$($.source_mtime_ms),sourceHash:g($.source_hash),parseStatus:e($.parse_status)==="invalid"?"invalid":"valid",parseError:g($.parse_error),enabled:Number($.enabled??0)===1,removed:Number($.removed??0)===1,title:e($.title),prompt:g($.prompt),workspaceRoot:g($.workspace_root),scheduleExpr:g($.schedule_expr),timezone:g($.timezone),eventType:g($.event_type),filters:D9(g($.filters_json)),debounceSeconds:n$($.debounce_seconds),dedupeWindowSeconds:n$($.dedupe_window_seconds),cooldownSeconds:n$($.cooldown_seconds),mode:g($.mode),systemPrompt:g($.system_prompt),providerId:g($.provider_id),modelId:g($.model_id),maxIterations:n$($.max_iterations),timeoutSeconds:n$($.timeout_seconds),maxParallel:n$($.max_parallel),tools:GW(g($.tools_json),{preserveEmpty:!0}),notesDirectory:g($.notes_directory),extensions:GW(g($.extensions_json),{preserveEmpty:!0}),source:g($.source),tags:GW(g($.tags_json)),metadata:D9(g($.metadata_json)),revision:Number($.revision??1),lastMaterializedRunId:g($.last_materialized_run_id),lastRunAt:g($.last_run_at),nextRunAt:g($.next_run_at),createdAt:e($.created_at),updatedAt:e($.updated_at)}}function KW($){return{runId:e($.run_id),specId:e($.spec_id),specRevision:Number($.spec_revision??1),triggerKind:e($.trigger_kind),status:e($.status),claimToken:g($.claim_token),claimStartedAt:g($.claim_started_at),claimUntilAt:g($.claim_until_at),scheduledFor:g($.scheduled_for),triggerEventId:g($.trigger_event_id),startedAt:g($.started_at),completedAt:g($.completed_at),sessionId:g($.session_id),reportPath:g($.report_path),error:g($.error),attemptCount:Number($.attempt_count??0),createdAt:e($.created_at),updatedAt:e($.updated_at)}}function zj($){return{eventId:e($.event_id),eventType:e($.event_type),source:e($.source),subject:g($.subject),occurredAt:e($.occurred_at),receivedAt:e($.received_at),workspaceRoot:g($.workspace_root),dedupeKey:g($.dedupe_key),payload:D9(g($.payload_json)),attributes:D9(g($.attributes_json)),processingStatus:e($.processing_status),matchedSpecCount:Number($.matched_spec_count??0),queuedRunCount:Number($.queued_run_count??0),suppressedCount:Number($.suppressed_count??0),error:g($.error),createdAt:e($.created_at),updatedAt:e($.updated_at)}}function Tj($){return $?JSON.stringify($):null}var eD=["prompt","workspaceRoot","mode","systemPrompt","providerId","modelId","maxIterations","timeoutSeconds","maxParallel","tools","notesDirectory","extensions","source","scheduleExpr","timezone","eventType","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds"];function Oj($){if($===void 0)return null;if($&&typeof $==="object")return JSON.stringify($);return $}function $L($,Z,Q,W){for(let J of eD){let X=$[J],Y=Z[J];if(Oj(X)!==Oj(Y))return!0}if(Q===!1&&W===!0)return!0;return!1}function ZL($){return($.split("/").pop()??$).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}function QL($){return`hub/schedules/${$}.cron.md`}function WL($){let Z={...$.metadata??{},...$.createdBy?{__hubScheduleCreatedBy:$.createdBy}:{},...$.cwd?{__hubScheduleCwd:$.cwd}:{},...$.runtimeOptions?{__hubRuntimeOptions:$.runtimeOptions}:{}};return Object.keys(Z).length>0?Z:void 0}function FW($){return{triggerKind:"schedule",title:$.name.trim(),prompt:$.prompt,workspaceRoot:$.workspaceRoot.trim(),schedule:$.cronPattern.trim(),mode:$.mode??"act",systemPrompt:$.systemPrompt,modelSelection:$.modelSelection?JSON.parse(JSON.stringify($.modelSelection)):void 0,maxIterations:typeof $.maxIterations==="number"?Math.floor($.maxIterations):void 0,timeoutSeconds:typeof $.timeoutSeconds==="number"?Math.floor($.timeoutSeconds):void 0,maxParallel:typeof $.maxParallel==="number"?Math.max(1,Math.floor($.maxParallel)):1,source:"hub-schedule",tags:$.tags?.filter((Z)=>Z.trim().length>0),enabled:$.enabled!==!1,metadata:WL($)}}function qj($){return JSON.stringify(FW($))}function JL($,Z){let Q=$.metadata?{...$.metadata}:{},W=Z.createdBy===null?void 0:Z.createdBy!==void 0?Z.createdBy:typeof Q.__hubScheduleCreatedBy==="string"?Q.__hubScheduleCreatedBy:void 0,J=Z.cwd!==void 0?Z.cwd:typeof Q.__hubScheduleCwd==="string"?Q.__hubScheduleCwd:void 0,X=Z.runtimeOptions!==void 0?Z.runtimeOptions:Q.__hubRuntimeOptions&&typeof Q.__hubRuntimeOptions==="object"&&!Array.isArray(Q.__hubRuntimeOptions)?Q.__hubRuntimeOptions:void 0;return delete Q.__hubScheduleCreatedBy,delete Q.__hubScheduleCwd,delete Q.__hubRuntimeOptions,{name:Z.name??$.title,cronPattern:Z.cronPattern??$.scheduleExpr??"",prompt:Z.prompt??$.prompt??"",workspaceRoot:Z.workspaceRoot??$.workspaceRoot??"",cwd:J,modelSelection:Z.modelSelection!==void 0?Z.modelSelection:$.providerId||$.modelId?{providerId:$.providerId??"",modelId:$.modelId??""}:void 0,enabled:Z.enabled??$.enabled,mode:Z.mode??($.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"),systemPrompt:Z.systemPrompt===null?void 0:Z.systemPrompt!==void 0?Z.systemPrompt:$.systemPrompt,maxIterations:Z.maxIterations===null?void 0:Z.maxIterations!==void 0?Z.maxIterations:$.maxIterations,timeoutSeconds:Z.timeoutSeconds===null?void 0:Z.timeoutSeconds!==void 0?Z.timeoutSeconds:$.timeoutSeconds,maxParallel:Z.maxParallel??$.maxParallel??1,createdBy:W,tags:Z.tags??$.tags,runtimeOptions:X,metadata:Z.metadata!==void 0?Z.metadata:Object.keys(Q).length>0?Q:void 0}}class x4{db;constructor($={}){let Z=$.dbPath??tD();this.db=oD(Z),_j(this.db)}close(){this.db.close?.()}getSpecBySourcePath($){let Z=this.db.prepare("SELECT * FROM cron_specs WHERE source_path = ?").get($);return Z?j$(Z):void 0}getSpec($){let Z=this.db.prepare("SELECT * FROM cron_specs WHERE spec_id = ?").get($);return Z?j$(Z):void 0}getSpecByExternalId($){let Z=this.db.prepare("SELECT * FROM cron_specs WHERE external_id = ? ORDER BY created_at ASC LIMIT 1").get($);return Z?j$(Z):void 0}listSpecs($={}){let Z=[],Q=[];if($.triggerKind)Z.push("trigger_kind = ?"),Q.push($.triggerKind);if(typeof $.enabled==="boolean")Z.push("enabled = ?"),Q.push($.enabled?1:0);if($.parseStatus)Z.push("parse_status = ?"),Q.push($.parseStatus);if(!$.includeRemoved)Z.push("removed = 0");let W=Z.length>0?`WHERE ${Z.join(" AND ")}`:"",J=Math.max(1,Math.floor($.limit??500));return this.db.prepare(`SELECT * FROM cron_specs ${W} ORDER BY created_at DESC LIMIT ?`).all(...Q,J).map((Y)=>j$(Y))}createHubSchedule($){let Z=`sched_${I4()}`,Q=this.upsertSpec({externalId:Z,sourcePath:QL(Z),triggerKind:"schedule",sourceHash:qj($),parseStatus:"valid",spec:FW($)});this.initializeScheduleNextRun(Q.record.specId);let W=this.getSpec(Q.record.specId);if(!W)throw Error("failed to create hub schedule");return W}getHubSchedule($){let Z=this.db.prepare(`SELECT * FROM cron_specs
132
132
  WHERE external_id = ? AND source = 'hub-schedule' AND removed = 0
133
133
  ORDER BY created_at ASC LIMIT 1`).get($);return Z?j$(Z):void 0}listHubSchedules($={}){let Z=["source = 'hub-schedule'","trigger_kind = 'schedule'","removed = 0"],Q=[];if(typeof $.enabled==="boolean")Z.push("enabled = ?"),Q.push($.enabled?1:0);if($.tags&&$.tags.length>0)for(let X of $.tags)Z.push("tags_json LIKE ?"),Q.push(`%"${X.trim()}"%`);let W=Math.max(1,Math.floor($.limit??200));return this.db.prepare(`SELECT * FROM cron_specs
134
134
  WHERE ${Z.join(" AND ")}
135
- ORDER BY created_at DESC LIMIT ?`).all(...Q,W).map((X)=>j$(X))}updateHubSchedule($,Z){let Q=this.getHubSchedule($);if(!Q)return;let W=QL(Q,Z),J=this.upsertSpec({externalId:$,sourcePath:Q.sourcePath,triggerKind:"schedule",sourceHash:qj(W),parseStatus:"valid",spec:KW(W)});if(Z.cronPattern!==void 0||Z.enabled!==void 0)this.initializeScheduleNextRun(J.record.specId);return this.getSpec(J.record.specId)}deleteHubSchedule($){let Z=this.getHubSchedule($);if(!Z)return!1;return this.markSpecRemoved(Z.specId),this.cancelQueuedRunsForSpec(Z.specId),!0}enqueueHubScheduleRun($,Z="manual"){let Q=this.getHubSchedule($);if(!Q||!Q.enabled||Q.removed||Q.parseStatus!=="valid")return;return this.enqueueRun({specId:Q.specId,specRevision:Q.revision,triggerKind:Z,scheduledFor:L0()})}listEventSpecsForType($){return this.db.prepare(`SELECT * FROM cron_specs
135
+ ORDER BY created_at DESC LIMIT ?`).all(...Q,W).map((X)=>j$(X))}updateHubSchedule($,Z){let Q=this.getHubSchedule($);if(!Q)return;let W=JL(Q,Z),J=this.upsertSpec({externalId:$,sourcePath:Q.sourcePath,triggerKind:"schedule",sourceHash:qj(W),parseStatus:"valid",spec:FW(W)});if(Z.cronPattern!==void 0||Z.enabled!==void 0)this.initializeScheduleNextRun(J.record.specId);return this.getSpec(J.record.specId)}deleteHubSchedule($){let Z=this.getHubSchedule($);if(!Z)return!1;return this.markSpecRemoved(Z.specId),this.cancelQueuedRunsForSpec(Z.specId),!0}enqueueHubScheduleRun($,Z="manual"){let Q=this.getHubSchedule($);if(!Q||!Q.enabled||Q.removed||Q.parseStatus!=="valid")return;return this.enqueueRun({specId:Q.specId,specRevision:Q.revision,triggerKind:Z,scheduledFor:L0()})}listEventSpecsForType($){return this.db.prepare(`SELECT * FROM cron_specs
136
136
  WHERE trigger_kind = 'event'
137
137
  AND event_type = ?
138
138
  AND enabled = 1
139
139
  AND removed = 0
140
140
  AND parse_status = 'valid'
141
- ORDER BY created_at ASC`).all($).map((Q)=>j$(Q))}upsertSpec($){let Z=L0(),Q=this.getSpecBySourcePath($.sourcePath),W=$.spec,J={title:W?.title??Q?.title??eD($.sourcePath),prompt:W?.prompt,workspaceRoot:W?.workspaceRoot,scheduleExpr:W?.triggerKind==="schedule"?W.schedule:void 0,timezone:W?.triggerKind==="schedule"?W.timezone:void 0,eventType:W?.triggerKind==="event"?W.event:void 0,filters:W?.triggerKind==="event"?W.filters:void 0,debounceSeconds:W?.triggerKind==="event"?W.debounceSeconds:void 0,dedupeWindowSeconds:W?.triggerKind==="event"?W.dedupeWindowSeconds:void 0,cooldownSeconds:W?.triggerKind==="event"?W.cooldownSeconds:void 0,mode:W?.mode,systemPrompt:W?.systemPrompt,providerId:W?.modelSelection?.providerId,modelId:W?.modelSelection?.modelId,maxIterations:W?.maxIterations,timeoutSeconds:W?.timeoutSeconds,maxParallel:W&&"maxParallel"in W?W.maxParallel:void 0,tools:W?.tools,notesDirectory:W?.notesDirectory,extensions:W?.extensions,source:W?.source},X=$.parseStatus==="valid"&&(W?.enabled??!0);if(!Q){let B=`cspec_${I4()}`;this.insertSpecRow(B,$,J,X,Z);let G=this.getSpec(B);if(!G)throw Error("failed to insert cron_spec row");return{record:G,created:!0,revisionChanged:!0}}let j=Q.sourceHash!==$.sourceHash&&tD(Q,J,Q.enabled,X),V=j?Q.revision+1:Q.revision;this.updateSpecRow(Q.specId,$,J,X,V,Z);let H=this.getSpec(Q.specId);if(!H)throw Error("failed to reload cron_spec after update");return{record:H,created:!1,revisionChanged:j}}insertSpecRow($,Z,Q,W,J){let X=Z.spec;this.db.prepare(`INSERT INTO cron_specs (
141
+ ORDER BY created_at ASC`).all($).map((Q)=>j$(Q))}upsertSpec($){let Z=L0(),Q=this.getSpecBySourcePath($.sourcePath),W=$.spec,J={title:W?.title??Q?.title??ZL($.sourcePath),prompt:W?.prompt,workspaceRoot:W?.workspaceRoot,scheduleExpr:W?.triggerKind==="schedule"?W.schedule:void 0,timezone:W?.triggerKind==="schedule"?W.timezone:void 0,eventType:W?.triggerKind==="event"?W.event:void 0,filters:W?.triggerKind==="event"?W.filters:void 0,debounceSeconds:W?.triggerKind==="event"?W.debounceSeconds:void 0,dedupeWindowSeconds:W?.triggerKind==="event"?W.dedupeWindowSeconds:void 0,cooldownSeconds:W?.triggerKind==="event"?W.cooldownSeconds:void 0,mode:W?.mode,systemPrompt:W?.systemPrompt,providerId:W?.modelSelection?.providerId,modelId:W?.modelSelection?.modelId,maxIterations:W?.maxIterations,timeoutSeconds:W?.timeoutSeconds,maxParallel:W&&"maxParallel"in W?W.maxParallel:void 0,tools:W?.tools,notesDirectory:W?.notesDirectory,extensions:W?.extensions,source:W?.source},X=$.parseStatus==="valid"&&(W?.enabled??!0);if(!Q){let B=`cspec_${I4()}`;this.insertSpecRow(B,$,J,X,Z);let G=this.getSpec(B);if(!G)throw Error("failed to insert cron_spec row");return{record:G,created:!0,revisionChanged:!0}}let j=Q.sourceHash!==$.sourceHash&&$L(Q,J,Q.enabled,X),V=j?Q.revision+1:Q.revision;this.updateSpecRow(Q.specId,$,J,X,V,Z);let H=this.getSpec(Q.specId);if(!H)throw Error("failed to reload cron_spec after update");return{record:H,created:!1,revisionChanged:j}}insertSpecRow($,Z,Q,W,J){let X=Z.spec;this.db.prepare(`INSERT INTO cron_specs (
142
142
  spec_id, external_id, source_path, trigger_kind,
143
143
  source_mtime_ms, source_hash, parse_status, parse_error,
144
144
  enabled, removed, title, prompt, workspace_root,
@@ -170,7 +170,7 @@ ${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
170
170
  last_run_at = ?,
171
171
  next_run_at = ?,
172
172
  updated_at = ?
173
- WHERE spec_id = ?`).run(Y,Q,j??null,Q,J.specId),this.db.exec("COMMIT;"),{queued:!0,run:this.getRun(Y),nextRunAt:j}}catch(W){throw this.db.exec("ROLLBACK;"),W}}getRun($){let Z=this.db.prepare("SELECT * FROM cron_runs WHERE run_id = ?").get($);return Z?GW(Z):void 0}insertEventLog($,Z={}){let Q=L0(),W=Z.receivedAtIso??Q,J=$.eventId.trim();if(!J)throw Error("automation event requires eventId");let X=$.eventType.trim();if(!X)throw Error("automation event requires eventType");let Y=$.source.trim();if(!Y)throw Error("automation event requires source");let j=$.occurredAt.trim()||W,V=this.db.prepare(`INSERT OR IGNORE INTO cron_event_log (
173
+ WHERE spec_id = ?`).run(Y,Q,j??null,Q,J.specId),this.db.exec("COMMIT;"),{queued:!0,run:this.getRun(Y),nextRunAt:j}}catch(W){throw this.db.exec("ROLLBACK;"),W}}getRun($){let Z=this.db.prepare("SELECT * FROM cron_runs WHERE run_id = ?").get($);return Z?KW(Z):void 0}insertEventLog($,Z={}){let Q=L0(),W=Z.receivedAtIso??Q,J=$.eventId.trim();if(!J)throw Error("automation event requires eventId");let X=$.eventType.trim();if(!X)throw Error("automation event requires eventType");let Y=$.source.trim();if(!Y)throw Error("automation event requires source");let j=$.occurredAt.trim()||W,V=this.db.prepare(`INSERT OR IGNORE INTO cron_event_log (
174
174
  event_id, event_type, source, subject,
175
175
  occurred_at, received_at, workspace_root, dedupe_key,
176
176
  payload_json, attributes_json, processing_status,
@@ -185,7 +185,7 @@ ${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
185
185
  suppressed_count = COALESCE(?, suppressed_count),
186
186
  error = ?,
187
187
  updated_at = ?
188
- WHERE event_id = ?`).run(Z.status,Z.matchedSpecCount??null,Z.queuedRunCount??null,Z.suppressedCount??null,Z.error??null,L0(),$).changes??0)===1}listRuns($={}){let Z=[],Q=[];if($.specId)Z.push("spec_id = ?"),Q.push($.specId);if($.status){let Y=Array.isArray($.status)?$.status:[$.status];if(Y.length>0){let j=Y.map(()=>"?").join(",");Z.push(`status IN (${j})`);for(let V of Y)Q.push(V)}}let W=Z.length>0?`WHERE ${Z.join(" AND ")}`:"",J=Math.max(1,Math.floor($.limit??200));return this.db.prepare(`SELECT * FROM cron_runs ${W} ORDER BY created_at DESC LIMIT ?`).all(...Q,J).map((Y)=>GW(Y))}hasRecentEventRunForDedupe($){return!!this.db.prepare(`SELECT r.run_id FROM cron_runs r
188
+ WHERE event_id = ?`).run(Z.status,Z.matchedSpecCount??null,Z.queuedRunCount??null,Z.suppressedCount??null,Z.error??null,L0(),$).changes??0)===1}listRuns($={}){let Z=[],Q=[];if($.specId)Z.push("spec_id = ?"),Q.push($.specId);if($.status){let Y=Array.isArray($.status)?$.status:[$.status];if(Y.length>0){let j=Y.map(()=>"?").join(",");Z.push(`status IN (${j})`);for(let V of Y)Q.push(V)}}let W=Z.length>0?`WHERE ${Z.join(" AND ")}`:"",J=Math.max(1,Math.floor($.limit??200));return this.db.prepare(`SELECT * FROM cron_runs ${W} ORDER BY created_at DESC LIMIT ?`).all(...Q,J).map((Y)=>KW(Y))}hasRecentEventRunForDedupe($){return!!this.db.prepare(`SELECT r.run_id FROM cron_runs r
189
189
  INNER JOIN cron_event_log e ON e.event_id = r.trigger_event_id
190
190
  WHERE r.spec_id = ?
191
191
  AND r.trigger_kind = 'event'
@@ -203,7 +203,7 @@ ${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
203
203
  AND r.status = 'queued'
204
204
  AND e.dedupe_key = ?
205
205
  ORDER BY COALESCE(r.scheduled_for, r.created_at) DESC
206
- LIMIT 1`).get($.specId,$.dedupeKey);return Z?GW(Z):void 0}updateQueuedEventRunForDebounce($){let Z=L0();if((this.db.prepare(`UPDATE cron_runs SET
206
+ LIMIT 1`).get($.specId,$.dedupeKey);return Z?KW(Z):void 0}updateQueuedEventRunForDebounce($){let Z=L0();if((this.db.prepare(`UPDATE cron_runs SET
207
207
  trigger_event_id = ?,
208
208
  scheduled_for = ?,
209
209
  updated_at = ?
@@ -273,9 +273,9 @@ ${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
273
273
  error = ?,
274
274
  scheduled_for = COALESCE(?, scheduled_for),
275
275
  updated_at = ?
276
- WHERE run_id = ? AND claim_token = ?`).run($.error??null,$.scheduledFor??null,Z,$.runId,$.claimToken).changes??0)>0}attachSessionIdToRun($,Z){this.db.prepare("UPDATE cron_runs SET session_id = ?, updated_at = ? WHERE run_id = ?").run(Z,L0(),$)}attachReportPathToRun($,Z){this.db.prepare("UPDATE cron_runs SET report_path = ?, updated_at = ? WHERE run_id = ?").run(Z,L0(),$)}}function _9($){return $?new Date($).getTime():void 0}function WL($){let Z=$.metadata?{...$.metadata}:void 0;if(Z)delete Z.__hubScheduleCreatedBy,delete Z.__hubScheduleCwd,delete Z.__hubRuntimeOptions;return Z}function L9($){let Z=$.metadata;return{scheduleId:$.externalId,name:$.title,cronPattern:$.scheduleExpr??"",prompt:$.prompt??"",workspaceRoot:$.workspaceRoot??"",cwd:typeof Z?.__hubScheduleCwd==="string"?Z.__hubScheduleCwd:void 0,modelSelection:$.providerId||$.modelId?{providerId:$.providerId??"",modelId:$.modelId??""}:void 0,enabled:$.enabled&&!$.removed&&$.parseStatus==="valid",mode:$.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act",systemPrompt:$.systemPrompt,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,maxParallel:$.maxParallel??1,createdAt:new Date($.createdAt).getTime(),updatedAt:new Date($.updatedAt).getTime(),nextRunAt:_9($.nextRunAt),lastRunAt:_9($.lastRunAt),createdBy:typeof Z?.__hubScheduleCreatedBy==="string"?Z.__hubScheduleCreatedBy:void 0,tags:$.tags,runtimeOptions:Z?.__hubRuntimeOptions&&typeof Z.__hubRuntimeOptions==="object"&&!Array.isArray(Z.__hubRuntimeOptions)?Z.__hubRuntimeOptions:void 0,metadata:WL($)}}function JL($){switch($){case"done":return"success";case"cancelled":return"aborted";case"running":return"running";case"queued":return"pending";default:return"failed"}}function FW($,Z){return{executionId:$.runId,scheduleId:Z,sessionId:$.sessionId,triggeredAt:new Date($.scheduledFor??$.createdAt).getTime(),startedAt:_9($.startedAt),endedAt:_9($.completedAt),status:JL($.status),errorMessage:$.error}}class $8{store;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new x4({dbPath:$.dbPath}),this.materializer=new P4({store:this.store}),this.runner=new y4({store:this.store,materializer:this.materializer,runtimeHandlers:$.runtimeHandlers,eventPublisher:$.eventPublisher,workspaceRoot:"",logger:$.logger,pollIntervalMs:$.pollIntervalMs,claimLeaseSeconds:$.claimLeaseSeconds,globalMaxConcurrency:$.globalMaxConcurrency})}async start(){if(this.disposed)throw Error("HubScheduleService has been disposed");if(this.started)return;this.started=!0,await this.runner.start()}async stop(){await this.runner.stop(),this.started=!1}async dispose(){if(this.disposed)return;this.disposed=!0,await this.runner.dispose(),this.store.close()}createSchedule($){if(HW($.cronPattern),!$.workspaceRoot?.trim())throw Error("workspaceRoot is required for schedules");return L9(this.store.createHubSchedule($))}getSchedule($){let Z=this.store.getHubSchedule($);return Z?L9(Z):void 0}listSchedules($={}){return this.store.listHubSchedules($).map((Z)=>L9(Z))}updateSchedule($,Z){if(Z.cronPattern!==void 0)HW(Z.cronPattern);let Q=this.store.getHubSchedule($);if(!Q)return;let W=Z.workspaceRoot!==void 0?Z.workspaceRoot.trim():Q.workspaceRoot;if((Z.enabled??Q.enabled)&&!W)throw Error("workspaceRoot is required for enabled schedules");let X=this.store.updateHubSchedule($,{...Z,scheduleId:$});return X?L9(X):void 0}deleteSchedule($){return this.store.deleteHubSchedule($)}pauseSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!1})}resumeSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!0})}async triggerScheduleNow($){let Z=this.store.enqueueHubScheduleRun($,"manual");if(!Z)return;await this.runner.tick();let Q=this.store.getRun(Z.runId)??Z;return FW(Q,$)}triggerScheduleNowDetached($){let Z=this.store.enqueueHubScheduleRun($,"manual");if(!Z)return;return this.runner.tick().catch(()=>{return}),FW(Z,$)}listScheduleExecutions($){let Z=$.scheduleId?this.store.getHubSchedule($.scheduleId):void 0,Q={specId:Z?.specId,limit:$.limit};return this.store.listRuns(Q).map((J)=>{let X=Z??this.store.getSpec(J.specId);if(!X||X.source!=="hub-schedule")return;return FW(J,X.externalId)}).filter((J)=>{if(!J)return!1;return!$.status||J.status===$.status})}getScheduleStats($){let Z=this.listScheduleExecutions({scheduleId:$,limit:1e4});if(Z.length===0)return{totalRuns:0,successRate:0,avgDurationSeconds:0};let Q=0,W=0,J=0,X;for(let Y of Z){if(Y.status==="success"||Y.status==="completed")Q+=1;if(!X&&Y.status!=="success"&&Y.status!=="completed")X=Y;if(Y.startedAt&&Y.endedAt)J+=Y.endedAt-Y.startedAt,W+=1}return{totalRuns:Z.length,successRate:Q/Z.length,avgDurationSeconds:W>0?J/W/1000:0,lastFailure:X}}getActiveExecutions(){return this.runner.getActiveRuns().flatMap(($)=>{let Z=this.store.getSpec($.specId);if(!Z||Z.source!=="hub-schedule"||!$.sessionId)return[];return[{executionId:$.runId,scheduleId:Z.externalId,sessionId:$.sessionId,startedAt:$.startedAt??new Date().toISOString(),timeoutAt:Z.timeoutSeconds&&$.startedAt?new Date(new Date($.startedAt).getTime()+Z.timeoutSeconds*1000).toISOString():void 0}]})}getUpcomingRuns($=20){let Z={triggerKind:"schedule",enabled:!0,limit:$};return this.store.listSpecs(Z).flatMap((Q)=>Q.source==="hub-schedule"&&Q.nextRunAt?[{spec:Q,nextRunAt:Q.nextRunAt}]:[]).sort((Q,W)=>String(Q.nextRunAt).localeCompare(String(W.nextRunAt))).slice(0,$).map(({spec:Q,nextRunAt:W})=>({scheduleId:Q.externalId,name:Q.title,nextRunAt:W}))}}u9();import{createSessionId as i_,isHubProtocolCompatible as n_,resolveClineBuildEnv as a_,resolveHubCommandTimeoutMs as s_}from"@cline/shared";var uj={};N(uj,{splitCoreSessionConfig:()=>i4,isSessionNotFoundError:()=>I1,SessionNotFoundError:()=>k1,SESSION_NOT_FOUND_ERROR_CODE:()=>a$});var a$="session_not_found";class k1 extends Error{sessionId;code="session_not_found";constructor($,Z){super(Z??($?`session not found: ${$}`:"session not found"));this.sessionId=$;this.name="SessionNotFoundError"}}function I1($){return $ instanceof k1||typeof $==="object"&&$!==null&&"code"in $&&$.code==="session_not_found"}function i4($){let{hooks:Z,logger:Q,telemetry:W,extensionContext:J,extraTools:X,extensions:Y,onTeamEvent:j,onConsecutiveMistakeLimitReached:V,checkpoint:H,compaction:B,...G}=$,K={};if(Z)K.hooks=Z;if(Q)K.logger=Q;if(W)K.telemetry=W;if(J)K.extensionContext=J;if(X)K.extraTools=X;if(Y)K.extensions=Y;if(j)K.onTeamEvent=j;if(V)K.onConsecutiveMistakeLimitReached=V;if(H?.createCheckpoint)K.checkpoint=H;if(B?.compact)K.compaction=B;let F=Object.keys(K).length>0?K:void 0;return{config:{...G,...H?{checkpoint:{enabled:H.enabled}}:{},...B?{compaction:{enabled:B.enabled,strategy:B.strategy,thresholdRatio:B.thresholdRatio,reserveTokens:B.reserveTokens,preserveRecentTokens:B.preserveRecentTokens,maxInputTokens:B.maxInputTokens,summarizer:B.summarizer}}:{}},...F?{localRuntime:F}:{}}}import{spawn as M_}from"node:child_process";import{closeSync as R_,mkdirSync as E_,openSync as N_}from"node:fs";import{basename as w_,dirname as C_,join as P_}from"node:path";import{fileURLToPath as S_}from"node:url";import{CLINE_RUN_AS_HUB_DAEMON_ENV as b_,isHubDaemonProcess as QV,isHubProtocolCompatible as y_,resolveClineBuildEnv as WV,withResolvedClineBuildEnv as h_}from"@cline/shared";import{createHash as $_,randomBytes as Z_}from"node:crypto";import{existsSync as Q_}from"node:fs";import{chmod as W_,mkdir as LW,readFile as ij,rm as _W,writeFile as nj}from"node:fs/promises";import{dirname as aj,join as zW}from"node:path";import{resolveClineDataDir as s$,resolveClineDir as sj}from"@cline/shared/storage";var lj="0.0.54-nightly.1782962319";var n4={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:lj,repository:{type:"git",url:"https://github.com/cline/cline",directory:"sdk/packages/core"},type:"module",types:"./dist/index.d.ts",main:"./dist/index.js",private:!1,publishConfig:{access:"public"},exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.js"},"./hub":{types:"./dist/hub/index.d.ts",import:"./dist/hub/index.js"},"./hub/daemon-entry":{types:"./dist/hub/daemon/entry.d.ts",import:"./dist/hub/daemon/entry.js"},"./telemetry":{types:"./dist/services/telemetry/index.d.ts",import:"./dist/services/telemetry/index.js"},"./services/feature-flags/posthog":{types:"./dist/services/feature-flags/posthog.d.ts",import:"./dist/services/feature-flags/posthog.js"}},scripts:{build:"bun run ./bun.mts && bun tsc -p tsconfig.build.json",typecheck:"bun tsc -p tsconfig.dev.json --noEmit && bun run typecheck:smoke","typecheck:smoke":"bun tsc -p tsconfig.smoke.json --noEmit",test:"bun run test:unit && bun run test:e2e","test:live":"vitest run --config vitest.config.ts src/extensions/context/compaction.live.test.ts","test:unit":"vitest run --config vitest.config.ts","test:e2e":"vitest run --config vitest.e2e.config.ts","verify:routines":"zsh -lc 'bunx vitest run src/cron/schedule-service.test.ts --config vitest.config.ts'","test:watch":"vitest --config vitest.config.ts"},dependencies:{"@cline/agents":"workspace:*","@cline/shared":"workspace:*","@cline/llms":"workspace:*","@modelcontextprotocol/sdk":"^1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.214.0","@opentelemetry/exporter-logs-otlp-http":"^0.214.0","@opentelemetry/exporter-metrics-otlp-http":"^0.214.0","@opentelemetry/exporter-trace-otlp-http":"^0.214.0","@opentelemetry/resources":"^2.6.1","@opentelemetry/sdk-logs":"^0.214.0","@opentelemetry/sdk-metrics":"^2.6.1","@opentelemetry/sdk-trace-base":"^2.6.1","@opentelemetry/sdk-trace-node":"^2.6.1","@opentelemetry/semantic-conventions":"^1.40.0",jiti:"^2.7.0","node-machine-id":"^1.1.12",nanoid:"^5.1.7","simple-git":"3.36.0",ws:"^8.20.0",yaml:"^2.8.2",zod:"^4.3.6"},peerDependencies:{"posthog-node":"^5.8.0"},peerDependenciesMeta:{"posthog-node":{optional:!0}},devDependencies:{"@types/ws":"^8.18.1","posthog-node":"^5.8.0"},engines:{node:">=22"},files:["dist","!dist/**/*.d.ts.map"]};var J_="CLINE_HUB_DISCOVERY_PATH",X_="CLINE_HUB_BUILD_ID",pj=30000,Y_=15000,j_=100;function V_($){return $.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function H_($){return $_("sha256").update($).digest("hex").slice(0,12)}function B_($){if(!Number.isInteger($)||!$||$<=0)return!1;try{return process.kill($,0),!0}catch(Z){return Z instanceof Error&&"code"in Z?String(Z.code)==="EPERM":!1}}function d9(){return Z_(32).toString("hex")}function G_($){return new Promise((Z)=>setTimeout(Z,$))}function K_($){return`${$}.lock`}async function F_($){try{let Z=JSON.parse(await ij(zW($,"owner.json"),"utf8"));if(typeof Z.pid!=="number"||typeof Z.acquiredAt!=="string")return;return{pid:Z.pid,acquiredAt:Z.acquiredAt}}catch{return}}async function rj($){await _W($,{recursive:!0,force:!0}).catch(()=>{return})}function l9(){return process.env[X_]?.trim()||String(n4.version)}function x1($=process.argv[1]?.trim()||process.cwd()){let Z=`hub-${H_($)}`,Q=process.env[J_]?.trim()||zW(s$(),"locks","hub","owners",`${V_(Z)}.json`);return{ownerId:Z,discoveryPath:Q}}function oj($=`hub-${Date.now().toString(36)}`){return x1($)}async function K0($){try{let Z=JSON.parse(await ij($,"utf8"));if(typeof Z.hubId!=="string"||typeof Z.protocolVersion!=="string"||typeof Z.authToken!=="string"||typeof Z.host!=="string"||typeof Z.port!=="number"||typeof Z.url!=="string"||typeof Z.startedAt!=="string"||typeof Z.updatedAt!=="string")return;return{hubId:Z.hubId,protocolVersion:Z.protocolVersion,minClientProtocolVersion:typeof Z.minClientProtocolVersion==="string"?Z.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof Z.maxClientProtocolVersion==="string"?Z.maxClientProtocolVersion:void 0,capabilities:Array.isArray(Z.capabilities)?Z.capabilities.filter((Q)=>typeof Q==="string"):void 0,coreVersion:typeof Z.coreVersion==="string"?Z.coreVersion:void 0,buildId:typeof Z.buildId==="string"?Z.buildId:void 0,authToken:Z.authToken,host:Z.host,port:Z.port,url:Z.url,pid:typeof Z.pid==="number"?Z.pid:void 0,startedAt:Z.startedAt,updatedAt:Z.updatedAt}}catch{return}}async function p9($,Z){await LW(aj($),{recursive:!0}),await _W($,{force:!0}).catch(()=>{return}),await nj($,`${JSON.stringify(Z,null,2)}
277
- `,{encoding:"utf8",mode:384}),await W_($,384)}async function S0($){await _W($,{force:!0}).catch(()=>{return})}async function r9($,Z){let Q=K_($);await LW(aj(Q),{recursive:!0});let W=Date.now()+Y_;while(!0)try{await LW(Q,{recursive:!1}),await nj(zW(Q,"owner.json"),`${JSON.stringify({pid:process.pid,acquiredAt:new Date().toISOString()},null,2)}
278
- `,"utf8");try{return await Z()}finally{await rj(Q)}}catch(J){if((J instanceof Error&&"code"in J?String(J.code):"")!=="EEXIST")throw J;let Y=await F_(Q),j=Y?Date.now()-Date.parse(Y.acquiredAt):pj+1;if(!Y||!B_(Y.pid)||j>pj){await rj(Q);continue}if(Date.now()>=W)throw Error(`Timed out waiting for hub startup lock ${Q}`);await G_(j_)}}async function g1($,Z){try{let Q=await fetch(Z?.authToken?TW($):i9($),{headers:Z?.authToken?{authorization:`Bearer ${Z.authToken}`}:void 0});if(!Q.ok)return;let W=await Q.json();if(typeof W.protocolVersion!=="string"||typeof W.host!=="string"||typeof W.port!=="number"||typeof W.url!=="string")return;return{protocolVersion:W.protocolVersion,minClientProtocolVersion:typeof W.minClientProtocolVersion==="string"?W.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof W.maxClientProtocolVersion==="string"?W.maxClientProtocolVersion:void 0,capabilities:Array.isArray(W.capabilities)?W.capabilities.filter((J)=>typeof J==="string"):void 0,coreVersion:typeof W.coreVersion==="string"?W.coreVersion:void 0,buildId:typeof W.buildId==="string"?W.buildId:void 0,host:W.host,port:W.port,url:W.url,hubId:typeof W.hubId==="string"?W.hubId:void 0,authToken:typeof W.authToken==="string"?W.authToken:void 0,pid:typeof W.pid==="number"?W.pid:void 0,startedAt:typeof W.startedAt==="string"?W.startedAt:void 0,updatedAt:typeof W.updatedAt==="string"?W.updatedAt:void 0}}catch{return}}function Z1($,Z,Q="/hub"){return new URL(`ws://${$}:${Z}${Q}`).toString()}function i9($){let Z=new URL($);return Z.protocol=Z.protocol==="wss:"?"https:":"http:",Z.pathname="/health",Z.search="",Z.toString()}function TW($){let Z=new URL(i9($));return Z.pathname="/status",Z.toString()}function tj($){return Q_($)}import{CLINE_HUB_DEV_PORT as A_,CLINE_HUB_PORT as f_,resolveClineBuildEnv as U_}from"@cline/shared";var D_="CLINE_HUB_HOST",L_="CLINE_HUB_PORT",__="CLINE_HUB_PATHNAME",OW="127.0.0.1",qW=f_,MW="/hub";function ej($){return U_($)==="development"?A_:qW}function RW($={}){return($.env??process.env)[D_]?.trim()||OW}function V8($={}){let Q=($.env??process.env)[L_]?.trim();if(!Q)return ej($);let W=Number.parseInt(Q,10);if(!Number.isInteger(W)||W<1||W>65535)return ej($);return W}function EW($={}){return($.env??process.env)[__]?.trim()||MW}function G1($={},Z={}){return{host:$.host??RW(Z),port:$.port??V8(Z),pathname:$.pathname??EW(Z)}}import{join as z_}from"node:path";var T_="shared:cline",O_="CLINE_HUB_DISCOVERY_PATH",q_="hub-production";function $V($){let Z=N1($.trim());return x1(`workspace:${Z||$.trim()}`)}function Q1($=T_){return x1($)}function K1(){return{ownerId:q_,discoveryPath:process.env[O_]?.trim()||z_(s$(),"locks","hub","production.json")}}var k_=8000,I_=200,x_=3000,g_=100,m_=[100,250,500,1000,2000],v_="--cline-hub-daemon";function c_($){return[...$.host?["--host",$.host]:[],...typeof $.port==="number"?["--port",String($.port)]:[],...$.pathname?["--pathname",$.pathname]:[]]}function u_(){try{let $=P_(s$(),"logs","hub-daemon.log");return E_(C_($),{recursive:!0}),{fd:N_($,"a"),logPath:$}}catch{return}}function JV(){return WV()==="production"?K1():Q1()}function o$($){return y_($).compatible}function ZV($,Z,Q){if(!Z||Z.url!==Q)return $;return{...$,authToken:$.authToken??Z.authToken,pid:$.pid??Z.pid}}async function t$($,Z){try{return await g1($,{authToken:Z})}catch{return}}async function d_($,Z){let Q=Date.now()+Z;while(Date.now()<Q){if(!(await t$($))?.url)return!0;await new Promise((J)=>setTimeout(J,g_))}return!1}async function n9($,Z){if(await s4($.url,$.authToken).catch(()=>!1),$.pid)try{process.kill($.pid,"SIGTERM")}catch{}let Q=await d_($.url,x_);return await S0(Z).catch(()=>{return}),Q}async function a4($,Z){if(o$($))return!0;return n9($,Z)}async function XV($){if(WV()!=="production")return;let Z=Q1();if(Z.discoveryPath===$.discoveryPath)return;let Q=await K0(Z.discoveryPath);if(Q?.url)await n9(Q,Z.discoveryPath);else await S0(Z.discoveryPath).catch(()=>{return})}function l_(){let $=import.meta.url.endsWith(".ts")?"ts":"js";return S_(new URL(`./entry.${$}`,import.meta.url))}function p_($,Z){let Q=l_(),W=process.execPath?.trim();if(!W)throw Error("unable to resolve runtime executable for hub daemon");let J=w_(W).toLowerCase().includes("bun"),X=Q.startsWith("/$bunfs/"),Y=J&&Q.toLowerCase().endsWith(".ts"),j=X?[v_]:[...Y?["--conditions=development"]:[],Q];return{launcher:W,args:[...j,"--cwd",$,...c_(Z)],cwd:$,env:{...h_(process.env),CLINE_NO_INTERACTIVE:"1",[b_]:"1"}}}function r_($){if(!$||typeof $!=="object")return!1;if(("code"in $?$.code:void 0)==="ETXTBSY")return!0;let Q="message"in $?$.message:void 0;return typeof Q==="string"&&Q.includes("ETXTBSY")}function NW($,Z={}){if(QV())return;let Q=p_($,Z),W=u_();try{M_(Q.launcher,Q.args,{detached:!0,stdio:W?["ignore",W.fd,W.fd]:"ignore",env:Q.env,cwd:Q.cwd,windowsHide:!0}).unref()}finally{if(W)R_(W.fd)}}async function H8($,Z={}){for(let Q=0;;Q++)try{NW($,Z);return}catch(W){let J=m_[Q];if(!r_(W)||J===void 0)throw W;await new Promise((X)=>setTimeout(X,J))}}function a9($,Z={}){if(QV())return;let Q=JV(),W=G1(Z),J=Z1(W.host,W.port,W.pathname),X=Z.allowPortFallback===!0&&W.port!==0;XV(Q).catch(()=>{return}).then(()=>K0(Q.discoveryPath)).then(async(Y)=>{let j=!1;if(Y?.url)if(!Y.authToken){if(j=!0,!await n9(Y,Q.discoveryPath)&&!X)return}else{let B=await t$(Y.url,Y.authToken);if(B?.url&&o$(B)&&await F1(B.url,{authToken:Y.authToken}))return;if(B?.url)await a4({...B,authToken:Y.authToken},Q.discoveryPath);else await S0(Q.discoveryPath).catch(()=>{return})}let V=await t$(J);if(V?.url){if(o$(V)){if(!X||!j)return}else if(!await a4({...V,authToken:void 0},Q.discoveryPath)&&!X)return}let H=X?{...W,port:0}:W;await H8($,H)}).catch(()=>{})}async function YV($,Z={}){let Q=JV(),W=Z.host!==void 0||Z.port!==void 0||Z.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),J=G1(Z),X=Z1(J.host,J.port,J.pathname),Y=(F)=>{if(!W)B$(F.url,F.authToken);return F};await XV(Q).catch(()=>{return});let j=await K0(Q.discoveryPath),V=!1;if(j?.url){let F=j.authToken;if(!F)V=!0,await n9(j,Q.discoveryPath);else{let A=await t$(j.url,F);if(A?.url&&o$(A)&&await F1(A.url,{authToken:F}))return Y({url:A.url,authToken:F});if(A?.url)await a4({...A,authToken:F},Q.discoveryPath);else await S0(Q.discoveryPath).catch(()=>{return})}}let H=await t$(X);if(H?.url){let F=ZV(H,j,X);if(o$(H))throw Error(`A compatible Cline Hub is already running at ${X}, but its discovery record is missing or unreadable. Run 'cline doctor fix' to repair local hub discovery.${V?" This can happen immediately after upgrading from a build that wrote an empty hub auth token; run 'cline doctor fix' to stop the old daemon and repair local hub discovery.":""}`);if(!await a4(F,Q.discoveryPath)&&Z.allowPortFallback!==!0&&J.port!==0)throw Error(`An incompatible Cline Hub is already running at ${X} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}let G=Z.allowPortFallback===!0&&J.port!==0?{...J,port:0}:J;await H8($,G);let K=Date.now()+k_;while(Date.now()<K){let F=await K0(Q.discoveryPath);if(F?.url&&F.authToken){let L=await t$(F.url,F.authToken);if(L?.url&&o$(L)&&await F1(L.url,{authToken:F.authToken}))return Y({url:L.url,authToken:F.authToken})}let A=await t$(X);if(A?.url&&!o$(A)){let L=ZV(A,F,X);if(!await a4(L,Q.discoveryPath)&&Z.allowPortFallback!==!0&&J.port!==0)throw Error(`An incompatible Cline Hub is still running at ${X} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}await new Promise((L)=>setTimeout(L,I_))}throw Error("Timed out waiting for detached hub startup.")}function s9(){return a_()==="production"?K1():Q1()}function o_(){let $=globalThis.WebSocket;if(!$)throw Error("Global WebSocket is not available in this runtime. Node 22+ is required for hub mode.");return $}function GV($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString();if($ instanceof ArrayBuffer)return Buffer.from($).toString();if(Array.isArray($))return Buffer.concat($.map((Z)=>Buffer.from(Z))).toString();if($&&typeof $==="object"&&"data"in $&&typeof $.data<"u")return GV($.data);return String($)}function t_($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString("utf8");if($ instanceof ArrayBuffer)return Buffer.from($).toString("utf8");return""}function jV($){let Z=$,Q=t_(Z.reason);return new R0("hub_connection_closed",Z.code||Q?`Hub connection closed (code=${Z.code??0}${Q?`, reason=${Q}`:""})`:wW,{closeCode:Z.code,closeReason:Q||void 0})}function e_($,Z){if($ instanceof R0)return $;if($ instanceof Error)return new R0("hub_connect_failed",$.message);if($&&typeof $==="object"&&"error"in $&&$.error instanceof Error)return new R0("hub_connect_failed",$.error.message);let Q=$&&typeof $==="object"&&"message"in $&&typeof $.message==="string"?$.message.trim():"";if(Q)return new R0("hub_connect_failed",Q);let W=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return new R0("hub_connect_failed",W?`Failed to connect to hub at ${Z.toString()} (${W} event before socket open).`:`Failed to connect to hub at ${Z.toString()}.`)}var $z=8000,Zz=200,VV="*",HV=8000,Qz="cline-hub-auth.",KV=new Map,FV=new Set,Wz=3000,Jz=3000,Xz=100,wW="Hub connection closed",Yz=250,jz=5000,BV=0.5;class R0 extends Error{code;details;constructor($,Z,Q){super(Z);this.code=$;this.details=Q;this.name="HubTransportError"}}function SW($){return $ instanceof R0}class B8 extends Error{command;code;constructor($,Z,Q){super(Q);this.command=$;this.code=Z;this.name="HubCommandError"}}function o9($,Z){return $ instanceof B8&&$.code==="hub_command_timeout"&&(Z===void 0||$.command===Z)}function AV($){let Z=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),Z)return Z;let Q=bW($.toString());return Q?KV.get(Q):void 0}function Vz($){try{let Q=new URL($).hostname.toLowerCase().replace(/^\[|\]$/g,"");return Q==="localhost"||Q==="127.0.0.1"||Q==="::1"}catch{return!1}}function bW($){if(!Vz($))return;let Z=new URL(G$($));return Z.search="",Z.hash="",Z.toString()}function CW($){let Z=bW($);return!!Z&&FV.has(Z)}function B$($,Z){let Q=bW($);if(Q){if(FV.add(Q),Z?.trim())KV.set(Q,Z)}return $}class W1{options;socket;connectPromise;clientId;currentUrl;recoveryPromise;pendingReplies=new Map;listeners=new Set;subscriptionCounts=new Map;reconnectTimer;reconnectAttempt=0;closedByClient=!1;lastCloseError=new R0("hub_connection_closed",wW);sawSocketClose=!1;registered=!1;constructor($){this.options=$;this.clientId=$.clientId??`core-${Math.random().toString(36).slice(2,10)}-${Date.now().toString(36)}`,this.currentUrl=$.url}getClientId(){return this.clientId}getUrl(){return this.currentUrl}async connect(){if(this.socket&&(this.socket.readyState===1||this.socket.readyState===0))return this.connectPromise??Promise.resolve();this.closedByClient=!1,this.clearReconnectTimer();let $=new URL(this.currentUrl),Z=this.options.authToken?.trim()||AV($);$.hash="";let W=new(o_())($.toString(),Z?[`${Qz}${Z}`]:void 0);this.socket=W;let J=!1;this.connectPromise=new Promise((X,Y)=>{let j=!1,V=setTimeout(()=>{if(j)return;j=!0,J=!0,this.lastCloseError=new R0("hub_connect_timeout",`Timed out connecting to hub after ${HV}ms`),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0;try{W.close()}catch{}Y(this.lastCloseError)},HV);W.addEventListener("open",()=>{if(j)return;j=!0,clearTimeout(V),X()}),W.addEventListener("error",(H)=>{if(j)return;j=!0,clearTimeout(V),this.lastCloseError=e_(H,$),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0,Y(this.lastCloseError)}),W.addEventListener("close",(H)=>{if(j)return;if(j=!0,clearTimeout(V),!J)this.lastCloseError=jV(H),this.sawSocketClose=!0;this.connectPromise=void 0,this.socket=void 0,Y(this.lastCloseError)})}),W.addEventListener("message",(X)=>{this.handleFrame(JSON.parse(GV(X)))}),W.addEventListener("close",(X)=>{if(this.socket!==W)return;if(!J)this.lastCloseError=jV(X),this.sawSocketClose=!0;this.registered=!1;for(let Y of this.pendingReplies.values())Y.reject(this.lastCloseError);if(this.pendingReplies.clear(),this.connectPromise=void 0,this.socket=void 0,!this.closedByClient&&this.hasActiveSubscriptions())this.scheduleReconnect()}),await this.connectPromise,await this.command("client.register",{clientId:this.clientId,clientType:this.options.clientType??"core",displayName:this.options.displayName??"core",transport:"native",actorKind:"client",workspaceContext:{workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}}),this.registered=!0;for(let X of this.subscriptionCounts.keys())this.sendSubscriptionFrame("stream.subscribe",this.subscriptionSessionIdFromKey(X));this.reconnectAttempt=0}subscribe($,Z){let Q=Z?.sessionId?.trim()||void 0,W={listener:$,sessionId:Q};return this.listeners.add(W),this.adjustSubscriptionCount(Q,1),()=>{if(!this.listeners.delete(W))return;this.adjustSubscriptionCount(Q,-1)}}async command($,Z,Q,W){let J=0,X=$!=="client.register"&&$!=="client.unregister";while(!0)try{return await this.commandOnce($,Z,Q,W)}catch(Y){if(!X||J>=1||!await this.recoverLocalHubTransport(Y))throw Y;J+=1}}async commandOnce($,Z,Q,W){await this.connect();let J=i_("hubreq_"),X=s_($,W?.timeoutMs),Y=new Promise((V,H)=>{let B=X===null?void 0:setTimeout(()=>{if(!this.pendingReplies.delete(J))return;H(new B8($,"hub_command_timeout",`Hub command ${$} timed out after ${X}ms (hub=${this.currentUrl}, requestId=${J}, clientId=${this.clientId}). Check hub-daemon.log for matching command.start/command.slow entries, or run 'cline doctor fix' to restart the hub.`))},X);this.pendingReplies.set(J,{resolve:(G)=>{if(B)clearTimeout(B);V(G)},reject:(G)=>{if(B)clearTimeout(B);H(G)}})});try{this.sendFrame({kind:"command",envelope:{version:"v1",command:$,requestId:J,clientId:this.clientId,sessionId:Q,timeoutMs:X,payload:Z}})}catch(V){throw this.pendingReplies.delete(J),V}let j=await Y;if(!j.ok){if(j.error?.code===a$){let V=Q??(typeof Z?.sessionId==="string"?Z.sessionId:void 0);throw new k1(V,j.error.message)}throw new B8($,j.error?.code,j.error?.message??`Hub command ${$} failed`)}return j}async recoverLocalHubTransport($){if(!CW(this.currentUrl)||!SW($))return!1;if(this.recoveryPromise)return await this.recoveryPromise;return this.recoveryPromise=(async()=>{let Z=await e$({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}).catch(()=>{return});if(!Z)return!1;return this.currentUrl=Z,this.close(),!0})().finally(()=>{this.recoveryPromise=void 0}),await this.recoveryPromise}hasActiveSubscriptions(){return this.subscriptionCounts.size>0}clearReconnectTimer(){if(!this.reconnectTimer)return;clearTimeout(this.reconnectTimer),this.reconnectTimer=void 0}scheduleReconnect(){if(this.reconnectTimer||this.closedByClient||!this.hasActiveSubscriptions())return;let $=Math.min(Yz*2**this.reconnectAttempt,jz),Z=Math.round($*(1-BV)+Math.random()*$*BV);this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=void 0,this.reconnectSubscribedTransport()},Z)}async reconnectSubscribedTransport(){if(this.closedByClient||!this.hasActiveSubscriptions())return;try{await this.connect(),this.reconnectAttempt=0}catch{if(!CW(this.currentUrl)){this.reconnectAttempt+=1,this.scheduleReconnect();return}try{let $=await e$({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd});if($){this.currentUrl=$,await this.connect(),this.reconnectAttempt=0;return}}catch{}this.reconnectAttempt+=1,this.scheduleReconnect()}}close(){let $=this.socket;if(this.closedByClient=!0,this.clearReconnectTimer(),this.registered=!1,!$)return;this.lastCloseError=new R0("hub_connection_closed",wW),this.sawSocketClose=!1;for(let Z of this.pendingReplies.values())Z.reject(this.lastCloseError);this.pendingReplies.clear(),this.connectPromise=void 0,this.socket=void 0;try{$.close()}catch{}}async dispose(){if(this.socket?.readyState===1&&this.registered)try{await this.command("client.unregister",void 0,void 0,{timeoutMs:2000})}catch{}this.close()}sendFrame($){if(!this.socket||this.socket.readyState!==1){if(this.lastCloseError.code==="hub_connection_closed"&&!this.sawSocketClose)throw new R0("hub_connection_not_open","Hub connection is not open.");throw this.lastCloseError}this.socket.send(JSON.stringify($))}sendSubscriptionFrame($,Z){this.sendFrame({kind:$,clientId:this.clientId,...Z?{sessionId:Z}:{}})}adjustSubscriptionCount($,Z){let Q=this.subscriptionKeyForSessionId($),W=(this.subscriptionCounts.get(Q)??0)+Z;if(W<=0){if(this.subscriptionCounts.delete(Q),!this.hasActiveSubscriptions())this.clearReconnectTimer();if(Z<0&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.unsubscribe",$);return}if(this.subscriptionCounts.set(Q,W),Z>0&&W===1&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.subscribe",$)}subscriptionKeyForSessionId($){return $??VV}subscriptionSessionIdFromKey($){return $===VV?void 0:$}handleFrame($){switch($.kind){case"reply":{let Z=$.envelope.requestId;if(!Z)return;let Q=this.pendingReplies.get(Z);if(!Q)return;this.pendingReplies.delete(Z),Q.resolve($.envelope);return}case"event":for(let Z of this.listeners){if(Z.sessionId&&Z.sessionId!==$.envelope.sessionId?.trim())continue;Z.listener($.envelope)}return;case"command":case"stream.subscribe":case"stream.unsubscribe":return}}}function G$($){let Z=new URL($);if(Z.protocol==="http:")Z.protocol="ws:";else if(Z.protocol==="https:")Z.protocol="wss:";return Z.toString()}async function F1($,Z){let Q=new W1({url:$,authToken:Z?.authToken,clientType:"hub-healthcheck",displayName:"hub healthcheck",workspaceRoot:Z?.workspaceRoot,cwd:Z?.cwd});try{return await Q.connect(),!0}catch{return!1}finally{Q.close()}}async function PW($,Z){let Q=G$($),W=await g1(Q,{authToken:Z?.authToken});if(!W)return{status:"unreachable",url:Q};if(!n_(W).compatible)return{status:"protocol_mismatch",url:Q};if(Z?.verifyConnection===!0&&!await F1(Q,{workspaceRoot:Z.workspaceRoot,cwd:Z.cwd,authToken:Z.authToken}))return{status:"unreachable",url:Q};return{status:"compatible",url:Q}}async function Hz($){let Z=Date.now()+$z;while(Date.now()<Z){let Q=await K0($.discoveryPath);if(Q?.url){let W=await PW(Q.url,{verifyConnection:!0,authToken:Q.authToken});if(W.status==="compatible")return B$(W.url,Q.authToken)}await new Promise((W)=>setTimeout(W,Zz))}return}async function Bz($){let Z=Date.now()+Jz;while(Date.now()<Z){if(!(await g1($).catch(()=>{return}))?.url)return!0;await new Promise((W)=>setTimeout(W,Xz))}return!1}function Gz($,Z){try{return G$($)===G$(Z)}catch{return!1}}function Kz($){return($&&typeof $==="object"&&Array.isArray($.sessions)?$.sessions:[]).some((Q)=>{if(!Q||typeof Q!=="object")return!1;let W=Q;if(W.status==="running"||W.status==="idle"||W.status==="pending")return!0;return Array.isArray(W.participants)&&W.participants.length>0})}async function Fz($,Z,Q){let W=new W1({url:$,authToken:Z,clientType:"hub-recovery-check",displayName:"hub recovery check",workspaceRoot:Q?.workspaceRoot,cwd:Q?.cwd});try{let J=await W.command("session.list",{limit:500},void 0,{timeoutMs:Wz});return!Kz(J.payload)}catch{return!1}finally{await W.dispose().catch(()=>{return})}}async function o4($={}){if($.endpoint?.trim()){let J=await PW($.endpoint);return J.status==="compatible"?J.url:void 0}let Z=s9(),Q=await K0(Z.discoveryPath);if(!Q?.url)return;let W=await PW(Q.url,{authToken:Q.authToken});if(W.status==="compatible")return B$(W.url,Q.authToken);if(W.status==="protocol_mismatch")await S0(Z.discoveryPath).catch(()=>{return});return}async function e$($={}){let Z=await o4($);if(Z&&await F1(Z,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return Z;if($.endpoint?.trim())return;let Q=s9();return await H8($.workspaceRoot??process.cwd()),await Hz(Q)}async function s4($,Z){let Q=new URL($),W=Z?.trim()||AV(Q);if(Q.protocol==="ws:")Q.protocol="http:";else if(Q.protocol==="wss:")Q.protocol="https:";return Q.pathname="/shutdown",Q.hash="",(await fetch(Q,{method:"POST",headers:W?{authorization:`Bearer ${W}`}:void 0})).ok}async function yW($=s9()){let Z=await K0($.discoveryPath);if(!Z?.url)return!1;try{if(await s4(Z.url,Z.authToken))return!0}catch{}return!1}async function t9($){if(!CW($.url))return;let Z=s9(),Q=await K0(Z.discoveryPath);if(!Q?.url||!Gz(Q.url,$.url))return;if(!await Fz(Q.url,Q.authToken,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return;if(!await yW())return;if(!await Bz(Q.url))return;return await S0(Z.discoveryPath).catch(()=>{return}),await e$({workspaceRoot:$.workspaceRoot,cwd:$.cwd})}import{resolveClineBuildEnv as Az}from"@cline/shared";function fz($,Z){if($ instanceof Error)return $;if($&&typeof $==="object"&&"message"in $&&typeof $.message==="string"&&$.message.trim())return Error($.message.trim());let Q=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return Error(Q?`Failed to connect to hub at ${Z} (${Q} event before socket open).`:`Failed to connect to hub at ${Z}.`)}var Uz="cline-hub-auth.";function Dz($){return $.host!==void 0||$.port!==void 0||$.pathname!==void 0}function Lz($,Z){let Q=new URL($),W=new URL(Z);return Q.search="",Q.hash="",W.search="",W.hash="",Q.toString()===W.toString()}function fV(){return Az()==="production"?K1():Q1()}async function _z($){let Z=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),Z)return Z;let Q=fV(),W=await K0(Q.discoveryPath);if(W?.url&&Lz($.toString(),W.url))return W.authToken;return}async function hW($={}){let Z=G1($);if(!Dz($)){let Q=fV(),W=await K0(Q.discoveryPath);if(W?.url)return W.url}return Z1(Z.host,Z.port,Z.pathname)}async function e9($){return await new Promise((Z,Q)=>{(async()=>{let W=new URL($),J=await _z(W);W.hash="";let X=new WebSocket(W.toString(),J?[`${Uz}${J}`]:void 0),Y=new Map,j=0;X.addEventListener("open",()=>{Z({send(V){let H=V.requestId??`hub-client-${++j}`;return new Promise((B,G)=>{Y.set(H,{resolve:B,reject:G});let K={kind:"command",envelope:{...V,requestId:H}};X.send(JSON.stringify(K))})},close(){X.close()}})}),X.addEventListener("message",(V)=>{let H=JSON.parse(String(V.data));if(H.kind==="reply"&&H.envelope.requestId){let B=Y.get(H.envelope.requestId);if(B)Y.delete(H.envelope.requestId),B.resolve(H.envelope)}}),X.addEventListener("close",()=>{for(let V of Y.values())V.reject(Error("Hub connection closed"));Y.clear()}),X.addEventListener("error",(V)=>{Q(fz(V,$))})})().catch(Q)})}async function UV($){try{return(await e9($)).close(),!0}catch{return!1}}async function DV($,Z){let Q=await hW($),W=await e9(Q);try{return await W.send({version:Z.version??"v1",clientId:Z.clientId??"hub-client",...Z})}finally{W.close()}}function kW($){return $?JSON.parse(JSON.stringify($)):{}}function $Z($){let Z=$?.session&&typeof $.session==="object"?$.session:void 0;if(!Z)return;let Q=Z.metadata&&typeof Z.metadata==="object"?kW(Z.metadata):void 0;return{sessionId:typeof Z.sessionId==="string"?Z.sessionId:"",parentSessionId:typeof Q?.parentSessionId==="string"?Q.parentSessionId:void 0,messagesPath:typeof Q?.messagesPath==="string"?Q.messagesPath:void 0,metadata:Q}}function LV($,Z){return $.error?.message??`hub command failed: ${Z}`}function zz($){let Z=kW($);if(typeof Z.error==="string"&&Z.error.trim())return{...Z,error:Z.error.trim()};let Q=Z.result&&typeof Z.result==="object"?Z.result:void 0;if(typeof Q?.text==="string"&&Q.text.trim())return{...Z,error:Q.text.trim()};let W=Q?.error&&typeof Q.error==="object"?Q.error:void 0;if(typeof W?.message==="string"&&W.message.trim())return{...Z,error:W.message.trim()};return Z}function _V($){let Z=$?.sessionId;return typeof Z==="string"&&Z.trim()?Z.trim():void 0}function Tz($){let Z=$?.checkpoint;if(!Z||typeof Z!=="object"||Array.isArray(Z))throw Error("hub checkpoint restore returned no checkpoint");let Q=Z;if(typeof Q.ref!=="string"||typeof Q.createdAt!=="number"||typeof Q.runCount!=="number")throw Error("hub checkpoint restore returned an invalid checkpoint");return Q}function Oz($){let Z=kW($.payload);if($.event==="schedule.execution_completed")return{sessionId:$.sessionId?.trim()||_V(Z)||"",eventType:"schedule.execution.completed",payload:Z};if($.event==="schedule.execution_failed")return{sessionId:$.sessionId?.trim()||_V(Z)||"",eventType:"schedule.execution.failed",payload:Z};let Q=$.sessionId?.trim();if(!Q)return;switch($.event){case"iteration.started":return{sessionId:Q,eventType:"runtime.chat.iteration_start",payload:Z};case"iteration.finished":return{sessionId:Q,eventType:"runtime.chat.iteration_end",payload:Z};case"assistant.delta":return{sessionId:Q,eventType:"runtime.chat.text_delta",payload:Z};case"usage.updated":return{sessionId:Q,eventType:"runtime.chat.usage",payload:Z};case"tool.started":return{sessionId:Q,eventType:"runtime.chat.tool_call_start",payload:Z};case"tool.finished":return{sessionId:Q,eventType:"runtime.chat.tool_call_end",payload:Z};case"approval.requested":return{sessionId:Q,eventType:"approval.requested",payload:Z};case"run.aborted":return{sessionId:Q,eventType:"runtime.chat.aborted",payload:Z};case"run.failed":return{sessionId:Q,eventType:"runtime.chat.failed",payload:zz($.payload)};case"run.completed":return{sessionId:Q,eventType:"runtime.chat.completed",payload:Z};default:return}}class IW{options;client;metadataApplied=!1;constructor($){this.options=$;this.client=new W1({url:$.address,authToken:$.authToken,clientId:$.clientId,clientType:$.clientType??"hub-session-client",displayName:$.displayName??"hub session client",workspaceRoot:$.workspaceRoot,cwd:$.cwd})}async ensureMetadataApplied(){if(this.metadataApplied||!this.options.metadata){if(!this.options.metadata)await this.client.connect();return}await this.client.connect(),await this.client.command("client.update",{metadata:this.options.metadata}),this.metadataApplied=!0}async connect(){await this.ensureMetadataApplied()}close(){this.client.close()}async dispose(){await this.client.dispose()}async startRuntimeSession($){await this.ensureMetadataApplied();let Z=await this.client.command("session.create",{workspaceRoot:$.workspaceRoot,cwd:$.cwd,sessionConfig:{providerId:$.provider,modelId:$.model,apiKey:$.apiKey,cwd:$.cwd??$.workspaceRoot,workspaceRoot:$.workspaceRoot,systemPrompt:$.systemPrompt??"",mode:$.mode??"act",rules:$.rules,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,enableTools:$.enableTools,enableSpawnAgent:$.enableSpawn!==!1,enableAgentTeams:$.enableTeams!==!1,disableMcpSettingsTools:$.disableMcpSettingsTools,missionLogIntervalSteps:$.missionStepInterval,missionLogIntervalMs:$.missionTimeIntervalMs},metadata:{source:$.source??"cli",provider:$.provider,model:$.model,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,prompt:void 0,interactive:$.interactive!==!1},runtimeOptions:{mode:$.mode,systemPrompt:$.systemPrompt,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,autoApproveTools:$.autoApproveTools,toolExecutors:$.toolExecutors,configExtensions:$.configExtensions},modelSelection:{provider:$.provider,model:$.model,apiKey:$.apiKey},toolPolicies:$.toolPolicies}),Q=$Z(Z.payload);if(!Q?.sessionId)throw Error("hub session create returned no session id");return{sessionId:Q.sessionId,startResult:{sessionId:Q.sessionId,manifestPath:"",messagesPath:Q.messagesPath??""}}}async sendRuntimeSession($,Z,Q){return await this.ensureMetadataApplied(),{result:(await this.client.command("session.send_input",{prompt:Z.prompt,mode:Z.config.mode,attachments:Z.attachments,delivery:Z.delivery,timeoutSeconds:Z.config.timeoutSeconds},$,Q)).payload?.result}}async stopRuntimeSession($){return await this.ensureMetadataApplied(),await this.client.command("session.detach",{sessionId:$},$),{applied:!0}}async abortRuntimeSession($){return await this.ensureMetadataApplied(),await this.client.command("run.abort",{sessionId:$},$),{applied:!0}}async updateSession($){return await this.ensureMetadataApplied(),await this.client.command("session.update",{sessionId:$.sessionId,metadata:$.metadata},$.sessionId),{updated:!0}}async getSession($){await this.ensureMetadataApplied();let Z;try{Z=await this.client.command("session.get",void 0,$)}catch(Q){if(I1(Q))return;throw Q}return $Z(Z.payload)}async readMessages($){let Z=$.trim();if(!Z)return[];await this.ensureMetadataApplied();let Q=await this.client.command("session.messages",{sessionId:Z},Z);if(!Q.ok)throw Error(LV(Q,"session.messages"));let W=Q.payload?.messages;return Array.isArray(W)?W:[]}async restore($){let Z=$.sessionId.trim();if(!Z)throw Error("sessionId is required");let Q=$.restore?.messages!==!1;if(Q&&!$.config)throw Error("config is required when restore.messages is true");await this.ensureMetadataApplied();let W=$.config,J=await this.client.command("session.restore",{sessionId:Z,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...W?{workspaceRoot:W.workspaceRoot,cwd:W.cwd,sessionConfig:{providerId:W.provider,modelId:W.model,apiKey:W.apiKey,cwd:W.cwd??W.workspaceRoot,workspaceRoot:W.workspaceRoot,systemPrompt:W.systemPrompt??"",mode:W.mode??"act",rules:W.rules,maxIterations:W.maxIterations,enableTools:W.enableTools,enableSpawnAgent:W.enableSpawn!==!1,enableAgentTeams:W.enableTeams!==!1,disableMcpSettingsTools:W.disableMcpSettingsTools,missionLogIntervalSteps:W.missionStepInterval,missionLogIntervalMs:W.missionTimeIntervalMs},metadata:{source:W.source??"cli",provider:W.provider,model:W.model,enableTools:W.enableTools,enableSpawn:W.enableSpawn,enableTeams:W.enableTeams,prompt:void 0,interactive:W.interactive!==!1},runtimeOptions:{mode:W.mode,systemPrompt:W.systemPrompt,maxIterations:W.maxIterations,enableTools:W.enableTools,enableSpawn:W.enableSpawn,enableTeams:W.enableTeams,autoApproveTools:W.autoApproveTools,configExtensions:W.configExtensions},modelSelection:{provider:W.provider,model:W.model,apiKey:W.apiKey},toolPolicies:W.toolPolicies}:{}},Z);if(!J.ok)throw Error(LV(J,"session.restore"));let X=$Z(J.payload);if(Q&&!X?.sessionId)throw Error("hub checkpoint restore returned no session id");let Y=Array.isArray(J.payload?.messages)?J.payload.messages:void 0,j=Tz(J.payload);return{sessionId:X?.sessionId,startResult:X?.sessionId?{sessionId:X.sessionId,manifestPath:"",messagesPath:X.messagesPath??""}:void 0,...Y?{messages:Y}:{},checkpoint:j}}async listSessions($){await this.ensureMetadataApplied();let Z=await this.client.command("session.list",{limit:$?.limit??200});return(Array.isArray(Z.payload?.sessions)?Z.payload?.sessions:[]).map((W)=>$Z({session:W})).filter((W)=>Boolean(W?.sessionId))}async deleteSession($,Z=!0){return await this.ensureMetadataApplied(),(await this.client.command("session.delete",{sessionId:$,deleteCheckpointRefs:Z})).payload?.deleted===!0}async respondToolApproval($){await this.ensureMetadataApplied(),await this.client.command("approval.respond",{approvalId:$.approvalId,approved:$.approved,payload:$.reason?{reason:$.reason}:void 0,responderClientId:$.responderClientId})}streamEvents($,Z){let Q=new Set(($.sessionIds??[]).map((J)=>J.trim()).filter(Boolean)),W=this.client.subscribe((J)=>{let X=Oz(J);if(!X)return;if(Q.size>0&&!Q.has(X.sessionId))return;Z.onEvent?.(X)});return this.ensureMetadataApplied().catch((J)=>{Z.onError?.(J instanceof Error?J:Error(String(J)))}),W}streamTeamProgress($,Z){let Q=this.client.subscribe((W)=>{if(W.event!=="team.progress"||!W.payload)return;Z.onProjection?.(W.payload)});return this.ensureMetadataApplied().catch((W)=>{Z.onError?.(W instanceof Error?W:Error(String(W)))}),Q}async createSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.create",$)).payload?.schedule}async listSchedules($){await this.ensureMetadataApplied();let Z=await this.client.command("schedule.list");return Array.isArray(Z.payload?.schedules)?Z.payload?.schedules:[]}async getSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.get",{scheduleId:$})).payload?.schedule}async updateSchedule($,Z){return await this.ensureMetadataApplied(),(await this.client.command("schedule.update",{scheduleId:$,...Z})).payload?.schedule}async pauseSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.disable",{scheduleId:$})).payload?.schedule}async resumeSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.enable",{scheduleId:$})).payload?.schedule}async deleteSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.delete",{scheduleId:$})).payload?.deleted===!0}async triggerScheduleNow($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.trigger",{scheduleId:$})).payload?.execution}async listScheduleExecutions($,Z){await this.ensureMetadataApplied();let Q=await this.client.command("schedule.list_executions",{scheduleId:$,limit:Z});return Array.isArray(Q.payload?.executions)?Q.payload?.executions:[]}async getScheduleStats(){return await this.ensureMetadataApplied(),(await this.client.command("schedule.stats")).payload?.stats}async getActiveScheduledExecutions(){await this.ensureMetadataApplied();let $=await this.client.command("schedule.active");return Array.isArray($.payload?.executions)?$.payload?.executions:[]}async getUpcomingScheduledRuns($){await this.ensureMetadataApplied();let Z=await this.client.command("schedule.upcoming",{limit:$});return Array.isArray(Z.payload?.upcoming)?Z.payload?.upcoming:[]}}class xW{client;constructor($){this.client=new W1({url:$.address,authToken:$.authToken,clientId:$.clientId,clientType:$.clientType??"hub-ui-client",displayName:$.displayName??"hub ui client"})}async connect(){await this.client.connect()}close(){this.client.close()}async dispose(){await this.client.dispose()}getClientId(){return this.client.getClientId()}async sendNotify($){await this.client.command("ui.notify",$)}async sendShowWindow($){await this.client.command("ui.show_window",$??{})}async listClients(){let $=await this.client.command("client.list");return Array.isArray($.payload?.clients)?$.payload.clients:[]}async listSessions($=200){let Z=await this.client.command("session.list",{limit:$});return Array.isArray(Z.payload?.sessions)?Z.payload.sessions:[]}subscribeUI($){return this.client.subscribe((Z)=>{switch(Z.event){case"ui.notify":$.onNotify?.(Z.payload);break;case"ui.show_window":$.onShowWindow?.(Z.payload);break;case"hub.client.registered":$.onClientRegistered?.(Z.payload??{});break;case"hub.client.disconnected":$.onClientDisconnected?.(Z.payload??{});break;case"session.created":$.onSessionCreated?.(Z.payload??{});break;case"session.updated":$.onSessionUpdated?.(Z.payload??{});break;case"session.detached":$.onSessionDetached?.(Z.payload??{});break}})}}import{normalizeProviderId as Wx}from"@cline/llms";var XU={};N(XU,{LocalRuntimeHost:()=>z1});import{readdirSync as nI}from"node:fs";import{homedir as aI}from"node:os";import{isAbsolute as sI,join as kY,resolve as IY}from"node:path";import{captureSdkError as l2,createSessionId as oI,isLikelyAuthError as tI,normalizeUserInput as eI}from"@cline/shared";import{setHomeDirIfUnset as $x}from"@cline/shared/storage";var nV={};N(nV,{saveProviderOAuthCredentials:()=>Q2,resolveProviderApiKeyFromSettings:()=>aW,loginAndSaveProviderOAuthCredentials:()=>X6,isOAuthProvider:()=>Z2,getProviderOAuthCredentialsFromSettings:()=>Y6,getProviderAuthStorageId:()=>nW,getProviderAuthHandler:()=>j0,getPersistedProviderApiKey:()=>U8,formatProviderOAuthApiKey:()=>sW});import{getClineEnvironmentConfig as rV}from"@cline/shared";_0();var CV={};N(CV,{startClineDeviceAuth:()=>dW,refreshClineToken:()=>JZ,loginClineOAuth:()=>t4,getValidClineCredentials:()=>e4,completeClineDeviceAuth:()=>lW});import{getClineEnvironmentConfig as gW}from"@cline/shared";var zV={};N(zV,{startLocalOAuthServer:()=>J1});function qz(){let $;return{promise:new Promise((Q)=>{$=Q}),resolve:$}}async function J1($){let Z=await import("node:http"),Q=$.host??"127.0.0.1",W=$.timeoutMs??300000,J=$.successHtml??Mz,X=qz(),Y=!1,j=null,V=null,H=null,B=(F)=>{if(Y)return;Y=!0,X.resolve(F)},G=()=>{if(j)clearTimeout(j),j=null;let F=H;if(H=null,V)V.close(),V.closeAllConnections?.(),V=null;if(F!==null&&$.onClose)Promise.resolve($.onClose({host:Q,port:F})).catch(()=>{})},K=async()=>{return j=setTimeout(()=>{G(),B(null)},W),X.promise};for(let F of $.ports){let A=Z.createServer((f,D)=>{try{let U=new URL(f.url||"",`http://${Q}:${F}`);if(U.pathname!==$.callbackPath){D.statusCode=404,D.end("Not found");return}let T={url:U,code:U.searchParams.get("code")??void 0,state:U.searchParams.get("state")??void 0,provider:U.searchParams.get("provider")??void 0,error:U.searchParams.get("error")??void 0};if(T.error){D.statusCode=400,D.end(`Authentication failed: ${T.error}`),G(),B(T);return}if(!T.code){D.statusCode=400,D.end("Missing authorization code");return}if($.expectedState&&T.state!==$.expectedState){D.statusCode=400,D.end("State mismatch");return}D.statusCode=200,D.setHeader("Content-Type","text/html; charset=utf-8"),D.end(J),G(),B(T)}catch{D.statusCode=500,D.end("Internal error")}}),L=await new Promise((f)=>{let D=(U)=>{A.off("error",D),f({bound:!1,error:U})};A.once("error",D),A.listen(F,Q,()=>{A.off("error",D),V=A,f({bound:!0})})});if(L.error){if(L.error.code==="EADDRINUSE")continue;throw G(),L.error}if(L.bound){H=F;let f=`http://${Q}:${F}${$.callbackPath}`;if($.onListening)await Promise.resolve($.onListening({host:Q,port:F,callbackUrl:f})).catch(()=>{});return{callbackUrl:f,waitForCallback:K,cancelWait:()=>{G(),B(null)},close:()=>{G(),B(null)}}}}return{callbackUrl:"",waitForCallback:async()=>null,cancelWait:()=>{},close:()=>{}}}var Mz=`<!DOCTYPE html>
276
+ WHERE run_id = ? AND claim_token = ?`).run($.error??null,$.scheduledFor??null,Z,$.runId,$.claimToken).changes??0)>0}attachSessionIdToRun($,Z){this.db.prepare("UPDATE cron_runs SET session_id = ?, updated_at = ? WHERE run_id = ?").run(Z,L0(),$)}attachReportPathToRun($,Z){this.db.prepare("UPDATE cron_runs SET report_path = ?, updated_at = ? WHERE run_id = ?").run(Z,L0(),$)}}function _9($){return $?new Date($).getTime():void 0}function XL($){let Z=$.metadata?{...$.metadata}:void 0;if(Z)delete Z.__hubScheduleCreatedBy,delete Z.__hubScheduleCwd,delete Z.__hubRuntimeOptions;return Z}function L9($){let Z=$.metadata;return{scheduleId:$.externalId,name:$.title,cronPattern:$.scheduleExpr??"",prompt:$.prompt??"",workspaceRoot:$.workspaceRoot??"",cwd:typeof Z?.__hubScheduleCwd==="string"?Z.__hubScheduleCwd:void 0,modelSelection:$.providerId||$.modelId?{providerId:$.providerId??"",modelId:$.modelId??""}:void 0,enabled:$.enabled&&!$.removed&&$.parseStatus==="valid",mode:$.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act",systemPrompt:$.systemPrompt,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,maxParallel:$.maxParallel??1,createdAt:new Date($.createdAt).getTime(),updatedAt:new Date($.updatedAt).getTime(),nextRunAt:_9($.nextRunAt),lastRunAt:_9($.lastRunAt),createdBy:typeof Z?.__hubScheduleCreatedBy==="string"?Z.__hubScheduleCreatedBy:void 0,tags:$.tags,runtimeOptions:Z?.__hubRuntimeOptions&&typeof Z.__hubRuntimeOptions==="object"&&!Array.isArray(Z.__hubRuntimeOptions)?Z.__hubRuntimeOptions:void 0,metadata:XL($)}}function YL($){switch($){case"done":return"success";case"cancelled":return"aborted";case"running":return"running";case"queued":return"pending";default:return"failed"}}function AW($,Z){return{executionId:$.runId,scheduleId:Z,sessionId:$.sessionId,triggeredAt:new Date($.scheduledFor??$.createdAt).getTime(),startedAt:_9($.startedAt),endedAt:_9($.completedAt),status:YL($.status),errorMessage:$.error}}class Z8{store;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new x4({dbPath:$.dbPath}),this.materializer=new P4({store:this.store}),this.runner=new y4({store:this.store,materializer:this.materializer,runtimeHandlers:$.runtimeHandlers,eventPublisher:$.eventPublisher,workspaceRoot:"",logger:$.logger,pollIntervalMs:$.pollIntervalMs,claimLeaseSeconds:$.claimLeaseSeconds,globalMaxConcurrency:$.globalMaxConcurrency})}async start(){if(this.disposed)throw Error("HubScheduleService has been disposed");if(this.started)return;this.started=!0,await this.runner.start()}async stop(){await this.runner.stop(),this.started=!1}async dispose(){if(this.disposed)return;this.disposed=!0,await this.runner.dispose(),this.store.close()}createSchedule($){if(BW($.cronPattern),!$.workspaceRoot?.trim())throw Error("workspaceRoot is required for schedules");return L9(this.store.createHubSchedule($))}getSchedule($){let Z=this.store.getHubSchedule($);return Z?L9(Z):void 0}listSchedules($={}){return this.store.listHubSchedules($).map((Z)=>L9(Z))}updateSchedule($,Z){if(Z.cronPattern!==void 0)BW(Z.cronPattern);let Q=this.store.getHubSchedule($);if(!Q)return;let W=Z.workspaceRoot!==void 0?Z.workspaceRoot.trim():Q.workspaceRoot;if((Z.enabled??Q.enabled)&&!W)throw Error("workspaceRoot is required for enabled schedules");let X=this.store.updateHubSchedule($,{...Z,scheduleId:$});return X?L9(X):void 0}deleteSchedule($){return this.store.deleteHubSchedule($)}pauseSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!1})}resumeSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!0})}async triggerScheduleNow($){let Z=this.store.enqueueHubScheduleRun($,"manual");if(!Z)return;await this.runner.tick();let Q=this.store.getRun(Z.runId)??Z;return AW(Q,$)}triggerScheduleNowDetached($){let Z=this.store.enqueueHubScheduleRun($,"manual");if(!Z)return;return this.runner.tick().catch(()=>{return}),AW(Z,$)}listScheduleExecutions($){let Z=$.scheduleId?this.store.getHubSchedule($.scheduleId):void 0,Q={specId:Z?.specId,limit:$.limit};return this.store.listRuns(Q).map((J)=>{let X=Z??this.store.getSpec(J.specId);if(!X||X.source!=="hub-schedule")return;return AW(J,X.externalId)}).filter((J)=>{if(!J)return!1;return!$.status||J.status===$.status})}getScheduleStats($){let Z=this.listScheduleExecutions({scheduleId:$,limit:1e4});if(Z.length===0)return{totalRuns:0,successRate:0,avgDurationSeconds:0};let Q=0,W=0,J=0,X;for(let Y of Z){if(Y.status==="success"||Y.status==="completed")Q+=1;if(!X&&Y.status!=="success"&&Y.status!=="completed")X=Y;if(Y.startedAt&&Y.endedAt)J+=Y.endedAt-Y.startedAt,W+=1}return{totalRuns:Z.length,successRate:Q/Z.length,avgDurationSeconds:W>0?J/W/1000:0,lastFailure:X}}getActiveExecutions(){return this.runner.getActiveRuns().flatMap(($)=>{let Z=this.store.getSpec($.specId);if(!Z||Z.source!=="hub-schedule"||!$.sessionId)return[];return[{executionId:$.runId,scheduleId:Z.externalId,sessionId:$.sessionId,startedAt:$.startedAt??new Date().toISOString(),timeoutAt:Z.timeoutSeconds&&$.startedAt?new Date(new Date($.startedAt).getTime()+Z.timeoutSeconds*1000).toISOString():void 0}]})}getUpcomingRuns($=20){let Z={triggerKind:"schedule",enabled:!0,limit:$};return this.store.listSpecs(Z).flatMap((Q)=>Q.source==="hub-schedule"&&Q.nextRunAt?[{spec:Q,nextRunAt:Q.nextRunAt}]:[]).sort((Q,W)=>String(Q.nextRunAt).localeCompare(String(W.nextRunAt))).slice(0,$).map(({spec:Q,nextRunAt:W})=>({scheduleId:Q.externalId,name:Q.title,nextRunAt:W}))}}u9();import{createSessionId as s_,isHubProtocolCompatible as o_,resolveClineBuildEnv as t_,resolveHubCommandTimeoutMs as e_}from"@cline/shared";var lj={};N(lj,{splitCoreSessionConfig:()=>i4,isSessionNotFoundError:()=>I1,SessionNotFoundError:()=>k1,SESSION_NOT_FOUND_ERROR_CODE:()=>s$});var s$="session_not_found";class k1 extends Error{sessionId;code="session_not_found";constructor($,Z){super(Z??($?`session not found: ${$}`:"session not found"));this.sessionId=$;this.name="SessionNotFoundError"}}function I1($){return $ instanceof k1||typeof $==="object"&&$!==null&&"code"in $&&$.code==="session_not_found"}function i4($){let{hooks:Z,logger:Q,telemetry:W,extensionContext:J,extraTools:X,extensions:Y,onTeamEvent:j,onConsecutiveMistakeLimitReached:V,checkpoint:H,compaction:B,...G}=$,K={};if(Z)K.hooks=Z;if(Q)K.logger=Q;if(W)K.telemetry=W;if(J)K.extensionContext=J;if(X)K.extraTools=X;if(Y)K.extensions=Y;if(j)K.onTeamEvent=j;if(V)K.onConsecutiveMistakeLimitReached=V;if(H?.createCheckpoint)K.checkpoint=H;if(B?.compact)K.compaction=B;let F=Object.keys(K).length>0?K:void 0;return{config:{...G,...H?{checkpoint:{enabled:H.enabled}}:{},...B?{compaction:{enabled:B.enabled,strategy:B.strategy,thresholdRatio:B.thresholdRatio,reserveTokens:B.reserveTokens,preserveRecentTokens:B.preserveRecentTokens,maxInputTokens:B.maxInputTokens,summarizer:B.summarizer}}:{}},...F?{localRuntime:F}:{}}}import{spawn as N_}from"node:child_process";import{closeSync as w_,mkdirSync as C_,openSync as P_}from"node:fs";import{basename as S_,dirname as b_,join as y_}from"node:path";import{fileURLToPath as h_}from"node:url";import{CLINE_RUN_AS_HUB_DAEMON_ENV as k_,isHubDaemonProcess as JV,isHubProtocolCompatible as I_,resolveClineBuildEnv as XV,withResolvedClineBuildEnv as x_}from"@cline/shared";import{createHash as W_,randomBytes as J_}from"node:crypto";import{existsSync as X_}from"node:fs";import{chmod as Y_,mkdir as _W,readFile as aj,rm as zW,writeFile as sj}from"node:fs/promises";import{dirname as oj,join as TW}from"node:path";import{resolveClineDataDir as o$,resolveClineDir as tj}from"@cline/shared/storage";var rj="0.0.55";var n4={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:rj,repository:{type:"git",url:"https://github.com/cline/cline",directory:"sdk/packages/core"},type:"module",types:"./dist/index.d.ts",main:"./dist/index.js",private:!1,publishConfig:{access:"public"},exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.js"},"./hub":{types:"./dist/hub/index.d.ts",import:"./dist/hub/index.js"},"./hub/daemon-entry":{types:"./dist/hub/daemon/entry.d.ts",import:"./dist/hub/daemon/entry.js"},"./telemetry":{types:"./dist/services/telemetry/index.d.ts",import:"./dist/services/telemetry/index.js"},"./services/feature-flags/posthog":{types:"./dist/services/feature-flags/posthog.d.ts",import:"./dist/services/feature-flags/posthog.js"}},scripts:{build:"bun run ./bun.mts && bun tsc -p tsconfig.build.json",typecheck:"bun tsc -p tsconfig.dev.json --noEmit && bun run typecheck:smoke","typecheck:smoke":"bun tsc -p tsconfig.smoke.json --noEmit",test:"bun run test:unit && bun run test:e2e","test:live":"vitest run --config vitest.config.ts src/extensions/context/compaction.live.test.ts","test:unit":"vitest run --config vitest.config.ts","test:e2e":"vitest run --config vitest.e2e.config.ts","verify:routines":"zsh -lc 'bunx vitest run src/cron/schedule-service.test.ts --config vitest.config.ts'","test:watch":"vitest --config vitest.config.ts"},dependencies:{"@cline/agents":"workspace:*","@cline/shared":"workspace:*","@cline/llms":"workspace:*","@modelcontextprotocol/sdk":"^1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.214.0","@opentelemetry/exporter-logs-otlp-http":"^0.214.0","@opentelemetry/exporter-metrics-otlp-http":"^0.214.0","@opentelemetry/exporter-trace-otlp-http":"^0.214.0","@opentelemetry/resources":"^2.6.1","@opentelemetry/sdk-logs":"^0.214.0","@opentelemetry/sdk-metrics":"^2.6.1","@opentelemetry/sdk-trace-base":"^2.6.1","@opentelemetry/sdk-trace-node":"^2.6.1","@opentelemetry/semantic-conventions":"^1.40.0",jiti:"^2.7.0","node-machine-id":"^1.1.12",nanoid:"^5.1.7","simple-git":"3.36.0",ws:"^8.20.0",yaml:"^2.8.2",zod:"^4.3.6"},peerDependencies:{"posthog-node":"^5.8.0"},peerDependenciesMeta:{"posthog-node":{optional:!0}},devDependencies:{"@types/ws":"^8.18.1","posthog-node":"^5.8.0"},engines:{node:">=22"},files:["dist","!dist/**/*.d.ts.map"]};var j_="CLINE_HUB_DISCOVERY_PATH",V_="CLINE_HUB_BUILD_ID",ij=30000,H_=15000,B_=100;function G_($){return $.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function K_($){return W_("sha256").update($).digest("hex").slice(0,12)}function F_($){if(!Number.isInteger($)||!$||$<=0)return!1;try{return process.kill($,0),!0}catch(Z){return Z instanceof Error&&"code"in Z?String(Z.code)==="EPERM":!1}}function d9(){return J_(32).toString("hex")}function A_($){return new Promise((Z)=>setTimeout(Z,$))}function f_($){return`${$}.lock`}async function U_($){try{let Z=JSON.parse(await aj(TW($,"owner.json"),"utf8"));if(typeof Z.pid!=="number"||typeof Z.acquiredAt!=="string")return;return{pid:Z.pid,acquiredAt:Z.acquiredAt}}catch{return}}async function nj($){await zW($,{recursive:!0,force:!0}).catch(()=>{return})}function l9(){return process.env[V_]?.trim()||String(n4.version)}function x1($=process.argv[1]?.trim()||process.cwd()){let Z=`hub-${K_($)}`,Q=process.env[j_]?.trim()||TW(o$(),"locks","hub","owners",`${G_(Z)}.json`);return{ownerId:Z,discoveryPath:Q}}function ej($=`hub-${Date.now().toString(36)}`){return x1($)}async function K0($){try{let Z=JSON.parse(await aj($,"utf8"));if(typeof Z.hubId!=="string"||typeof Z.protocolVersion!=="string"||typeof Z.authToken!=="string"||typeof Z.host!=="string"||typeof Z.port!=="number"||typeof Z.url!=="string"||typeof Z.startedAt!=="string"||typeof Z.updatedAt!=="string")return;return{hubId:Z.hubId,protocolVersion:Z.protocolVersion,minClientProtocolVersion:typeof Z.minClientProtocolVersion==="string"?Z.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof Z.maxClientProtocolVersion==="string"?Z.maxClientProtocolVersion:void 0,capabilities:Array.isArray(Z.capabilities)?Z.capabilities.filter((Q)=>typeof Q==="string"):void 0,coreVersion:typeof Z.coreVersion==="string"?Z.coreVersion:void 0,buildId:typeof Z.buildId==="string"?Z.buildId:void 0,authToken:Z.authToken,host:Z.host,port:Z.port,url:Z.url,pid:typeof Z.pid==="number"?Z.pid:void 0,startedAt:Z.startedAt,updatedAt:Z.updatedAt}}catch{return}}async function p9($,Z){await _W(oj($),{recursive:!0}),await zW($,{force:!0}).catch(()=>{return}),await sj($,`${JSON.stringify(Z,null,2)}
277
+ `,{encoding:"utf8",mode:384}),await Y_($,384)}async function S0($){await zW($,{force:!0}).catch(()=>{return})}async function r9($,Z){let Q=f_($);await _W(oj(Q),{recursive:!0});let W=Date.now()+H_;while(!0)try{await _W(Q,{recursive:!1}),await sj(TW(Q,"owner.json"),`${JSON.stringify({pid:process.pid,acquiredAt:new Date().toISOString()},null,2)}
278
+ `,"utf8");try{return await Z()}finally{await nj(Q)}}catch(J){if((J instanceof Error&&"code"in J?String(J.code):"")!=="EEXIST")throw J;let Y=await U_(Q),j=Y?Date.now()-Date.parse(Y.acquiredAt):ij+1;if(!Y||!F_(Y.pid)||j>ij){await nj(Q);continue}if(Date.now()>=W)throw Error(`Timed out waiting for hub startup lock ${Q}`);await A_(B_)}}async function g1($,Z){try{let Q=await fetch(Z?.authToken?OW($):i9($),{headers:Z?.authToken?{authorization:`Bearer ${Z.authToken}`}:void 0});if(!Q.ok)return;let W=await Q.json();if(typeof W.protocolVersion!=="string"||typeof W.host!=="string"||typeof W.port!=="number"||typeof W.url!=="string")return;return{protocolVersion:W.protocolVersion,minClientProtocolVersion:typeof W.minClientProtocolVersion==="string"?W.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof W.maxClientProtocolVersion==="string"?W.maxClientProtocolVersion:void 0,capabilities:Array.isArray(W.capabilities)?W.capabilities.filter((J)=>typeof J==="string"):void 0,coreVersion:typeof W.coreVersion==="string"?W.coreVersion:void 0,buildId:typeof W.buildId==="string"?W.buildId:void 0,host:W.host,port:W.port,url:W.url,hubId:typeof W.hubId==="string"?W.hubId:void 0,authToken:typeof W.authToken==="string"?W.authToken:void 0,pid:typeof W.pid==="number"?W.pid:void 0,startedAt:typeof W.startedAt==="string"?W.startedAt:void 0,updatedAt:typeof W.updatedAt==="string"?W.updatedAt:void 0}}catch{return}}function Z1($,Z,Q="/hub"){return new URL(`ws://${$}:${Z}${Q}`).toString()}function i9($){let Z=new URL($);return Z.protocol=Z.protocol==="wss:"?"https:":"http:",Z.pathname="/health",Z.search="",Z.toString()}function OW($){let Z=new URL(i9($));return Z.pathname="/status",Z.toString()}function $V($){return X_($)}import{CLINE_HUB_DEV_PORT as D_,CLINE_HUB_PORT as L_,resolveClineBuildEnv as __}from"@cline/shared";var z_="CLINE_HUB_HOST",T_="CLINE_HUB_PORT",O_="CLINE_HUB_PATHNAME",qW="127.0.0.1",MW=L_,RW="/hub";function ZV($){return __($)==="development"?D_:MW}function EW($={}){return($.env??process.env)[z_]?.trim()||qW}function V8($={}){let Q=($.env??process.env)[T_]?.trim();if(!Q)return ZV($);let W=Number.parseInt(Q,10);if(!Number.isInteger(W)||W<1||W>65535)return ZV($);return W}function NW($={}){return($.env??process.env)[O_]?.trim()||RW}function K1($={},Z={}){return{host:$.host??EW(Z),port:$.port??V8(Z),pathname:$.pathname??NW(Z)}}import{join as q_}from"node:path";var M_="shared:cline",R_="CLINE_HUB_DISCOVERY_PATH",E_="hub-production";function QV($){let Z=w1($.trim());return x1(`workspace:${Z||$.trim()}`)}function Q1($=M_){return x1($)}function F1(){return{ownerId:E_,discoveryPath:process.env[R_]?.trim()||q_(o$(),"locks","hub","production.json")}}var g_=8000,m_=200,v_=3000,c_=100,u_=[100,250,500,1000,2000],d_="--cline-hub-daemon";function l_($){return[...$.host?["--host",$.host]:[],...typeof $.port==="number"?["--port",String($.port)]:[],...$.pathname?["--pathname",$.pathname]:[]]}function p_(){try{let $=y_(o$(),"logs","hub-daemon.log");return C_(b_($),{recursive:!0}),{fd:P_($,"a"),logPath:$}}catch{return}}function YV(){return XV()==="production"?F1():Q1()}function t$($){return I_($).compatible}function WV($,Z,Q){if(!Z||Z.url!==Q)return $;return{...$,authToken:$.authToken??Z.authToken,pid:$.pid??Z.pid}}async function e$($,Z){try{return await g1($,{authToken:Z})}catch{return}}async function r_($,Z){let Q=Date.now()+Z;while(Date.now()<Q){if(!(await e$($))?.url)return!0;await new Promise((J)=>setTimeout(J,c_))}return!1}async function n9($,Z){if(await s4($.url,$.authToken).catch(()=>!1),$.pid)try{process.kill($.pid,"SIGTERM")}catch{}let Q=await r_($.url,v_);return await S0(Z).catch(()=>{return}),Q}async function a4($,Z){if(t$($))return!0;return n9($,Z)}async function jV($){if(XV()!=="production")return;let Z=Q1();if(Z.discoveryPath===$.discoveryPath)return;let Q=await K0(Z.discoveryPath);if(Q?.url)await n9(Q,Z.discoveryPath);else await S0(Z.discoveryPath).catch(()=>{return})}function i_(){let $=import.meta.url.endsWith(".ts")?"ts":"js";return h_(new URL(`./entry.${$}`,import.meta.url))}function n_($,Z){let Q=i_(),W=process.execPath?.trim();if(!W)throw Error("unable to resolve runtime executable for hub daemon");let J=S_(W).toLowerCase().includes("bun"),X=Q.startsWith("/$bunfs/"),Y=J&&Q.toLowerCase().endsWith(".ts"),j=X?[d_]:[...Y?["--conditions=development"]:[],Q];return{launcher:W,args:[...j,"--cwd",$,...l_(Z)],cwd:$,env:{...x_(process.env),CLINE_NO_INTERACTIVE:"1",[k_]:"1"}}}function a_($){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 wW($,Z={}){if(JV())return;let Q=n_($,Z),W=p_();try{N_(Q.launcher,Q.args,{detached:!0,stdio:W?["ignore",W.fd,W.fd]:"ignore",env:Q.env,cwd:Q.cwd,windowsHide:!0}).unref()}finally{if(W)w_(W.fd)}}async function H8($,Z={}){for(let Q=0;;Q++)try{wW($,Z);return}catch(W){let J=u_[Q];if(!a_(W)||J===void 0)throw W;await new Promise((X)=>setTimeout(X,J))}}function a9($,Z={}){if(JV())return;let Q=YV(),W=K1(Z),J=Z1(W.host,W.port,W.pathname),X=Z.allowPortFallback===!0&&W.port!==0;jV(Q).catch(()=>{return}).then(()=>K0(Q.discoveryPath)).then(async(Y)=>{let j=!1;if(Y?.url)if(!Y.authToken){if(j=!0,!await n9(Y,Q.discoveryPath)&&!X)return}else{let B=await e$(Y.url,Y.authToken);if(B?.url&&t$(B)&&await A1(B.url,{authToken:Y.authToken}))return;if(B?.url)await a4({...B,authToken:Y.authToken},Q.discoveryPath);else await S0(Q.discoveryPath).catch(()=>{return})}let V=await e$(J);if(V?.url){if(t$(V)){if(!X||!j)return}else if(!await a4({...V,authToken:void 0},Q.discoveryPath)&&!X)return}let H=X?{...W,port:0}:W;await H8($,H)}).catch(()=>{})}async function VV($,Z={}){let Q=YV(),W=Z.host!==void 0||Z.port!==void 0||Z.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),J=K1(Z),X=Z1(J.host,J.port,J.pathname),Y=(F)=>{if(!W)B$(F.url,F.authToken);return F};await jV(Q).catch(()=>{return});let j=await K0(Q.discoveryPath),V=!1;if(j?.url){let F=j.authToken;if(!F)V=!0,await n9(j,Q.discoveryPath);else{let A=await e$(j.url,F);if(A?.url&&t$(A)&&await A1(A.url,{authToken:F}))return Y({url:A.url,authToken:F});if(A?.url)await a4({...A,authToken:F},Q.discoveryPath);else await S0(Q.discoveryPath).catch(()=>{return})}}let H=await e$(X);if(H?.url){let F=WV(H,j,X);if(t$(H))throw Error(`A compatible Cline Hub is already running at ${X}, but its discovery record is missing or unreadable. Run 'cline doctor fix' to repair local hub discovery.${V?" This can happen immediately after upgrading from a build that wrote an empty hub auth token; run 'cline doctor fix' to stop the old daemon and repair local hub discovery.":""}`);if(!await a4(F,Q.discoveryPath)&&Z.allowPortFallback!==!0&&J.port!==0)throw Error(`An incompatible Cline Hub is already running at ${X} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}let G=Z.allowPortFallback===!0&&J.port!==0?{...J,port:0}:J;await H8($,G);let K=Date.now()+g_;while(Date.now()<K){let F=await K0(Q.discoveryPath);if(F?.url&&F.authToken){let L=await e$(F.url,F.authToken);if(L?.url&&t$(L)&&await A1(L.url,{authToken:F.authToken}))return Y({url:L.url,authToken:F.authToken})}let A=await e$(X);if(A?.url&&!t$(A)){let L=WV(A,F,X);if(!await a4(L,Q.discoveryPath)&&Z.allowPortFallback!==!0&&J.port!==0)throw Error(`An incompatible Cline Hub is still running at ${X} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}await new Promise((L)=>setTimeout(L,m_))}throw Error("Timed out waiting for detached hub startup.")}function s9(){return t_()==="production"?F1():Q1()}function $z(){let $=globalThis.WebSocket;if(!$)throw Error("Global WebSocket is not available in this runtime. Node 22+ is required for hub mode.");return $}function FV($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString();if($ instanceof ArrayBuffer)return Buffer.from($).toString();if(Array.isArray($))return Buffer.concat($.map((Z)=>Buffer.from(Z))).toString();if($&&typeof $==="object"&&"data"in $&&typeof $.data<"u")return FV($.data);return String($)}function Zz($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString("utf8");if($ instanceof ArrayBuffer)return Buffer.from($).toString("utf8");return""}function HV($){let Z=$,Q=Zz(Z.reason);return new R0("hub_connection_closed",Z.code||Q?`Hub connection closed (code=${Z.code??0}${Q?`, reason=${Q}`:""})`:CW,{closeCode:Z.code,closeReason:Q||void 0})}function Qz($,Z){if($ instanceof R0)return $;if($ instanceof Error)return new R0("hub_connect_failed",$.message);if($&&typeof $==="object"&&"error"in $&&$.error instanceof Error)return new R0("hub_connect_failed",$.error.message);let Q=$&&typeof $==="object"&&"message"in $&&typeof $.message==="string"?$.message.trim():"";if(Q)return new R0("hub_connect_failed",Q);let W=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return new R0("hub_connect_failed",W?`Failed to connect to hub at ${Z.toString()} (${W} event before socket open).`:`Failed to connect to hub at ${Z.toString()}.`)}var Wz=8000,Jz=200,BV="*",GV=8000,Xz="cline-hub-auth.",AV=new Map,fV=new Set,Yz=3000,jz=3000,Vz=100,CW="Hub connection closed",Hz=250,Bz=5000,KV=0.5;class R0 extends Error{code;details;constructor($,Z,Q){super(Z);this.code=$;this.details=Q;this.name="HubTransportError"}}function bW($){return $ instanceof R0}class B8 extends Error{command;code;constructor($,Z,Q){super(Q);this.command=$;this.code=Z;this.name="HubCommandError"}}function o9($,Z){return $ instanceof B8&&$.code==="hub_command_timeout"&&(Z===void 0||$.command===Z)}function UV($){let Z=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),Z)return Z;let Q=yW($.toString());return Q?AV.get(Q):void 0}function Gz($){try{let Q=new URL($).hostname.toLowerCase().replace(/^\[|\]$/g,"");return Q==="localhost"||Q==="127.0.0.1"||Q==="::1"}catch{return!1}}function yW($){if(!Gz($))return;let Z=new URL(G$($));return Z.search="",Z.hash="",Z.toString()}function PW($){let Z=yW($);return!!Z&&fV.has(Z)}function B$($,Z){let Q=yW($);if(Q){if(fV.add(Q),Z?.trim())AV.set(Q,Z)}return $}class W1{options;socket;connectPromise;clientId;currentUrl;recoveryPromise;pendingReplies=new Map;listeners=new Set;subscriptionCounts=new Map;reconnectTimer;reconnectAttempt=0;closedByClient=!1;lastCloseError=new R0("hub_connection_closed",CW);sawSocketClose=!1;registered=!1;constructor($){this.options=$;this.clientId=$.clientId??`core-${Math.random().toString(36).slice(2,10)}-${Date.now().toString(36)}`,this.currentUrl=$.url}getClientId(){return this.clientId}getUrl(){return this.currentUrl}async connect(){if(this.socket&&(this.socket.readyState===1||this.socket.readyState===0))return this.connectPromise??Promise.resolve();this.closedByClient=!1,this.clearReconnectTimer();let $=new URL(this.currentUrl),Z=this.options.authToken?.trim()||UV($);$.hash="";let W=new($z())($.toString(),Z?[`${Xz}${Z}`]:void 0);this.socket=W;let J=!1;this.connectPromise=new Promise((X,Y)=>{let j=!1,V=setTimeout(()=>{if(j)return;j=!0,J=!0,this.lastCloseError=new R0("hub_connect_timeout",`Timed out connecting to hub after ${GV}ms`),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0;try{W.close()}catch{}Y(this.lastCloseError)},GV);W.addEventListener("open",()=>{if(j)return;j=!0,clearTimeout(V),X()}),W.addEventListener("error",(H)=>{if(j)return;j=!0,clearTimeout(V),this.lastCloseError=Qz(H,$),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0,Y(this.lastCloseError)}),W.addEventListener("close",(H)=>{if(j)return;if(j=!0,clearTimeout(V),!J)this.lastCloseError=HV(H),this.sawSocketClose=!0;this.connectPromise=void 0,this.socket=void 0,Y(this.lastCloseError)})}),W.addEventListener("message",(X)=>{this.handleFrame(JSON.parse(FV(X)))}),W.addEventListener("close",(X)=>{if(this.socket!==W)return;if(!J)this.lastCloseError=HV(X),this.sawSocketClose=!0;this.registered=!1;for(let Y of this.pendingReplies.values())Y.reject(this.lastCloseError);if(this.pendingReplies.clear(),this.connectPromise=void 0,this.socket=void 0,!this.closedByClient&&this.hasActiveSubscriptions())this.scheduleReconnect()}),await this.connectPromise,await this.command("client.register",{clientId:this.clientId,clientType:this.options.clientType??"core",displayName:this.options.displayName??"core",transport:"native",actorKind:"client",workspaceContext:{workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}}),this.registered=!0;for(let X of this.subscriptionCounts.keys())this.sendSubscriptionFrame("stream.subscribe",this.subscriptionSessionIdFromKey(X));this.reconnectAttempt=0}subscribe($,Z){let Q=Z?.sessionId?.trim()||void 0,W={listener:$,sessionId:Q};return this.listeners.add(W),this.adjustSubscriptionCount(Q,1),()=>{if(!this.listeners.delete(W))return;this.adjustSubscriptionCount(Q,-1)}}async command($,Z,Q,W){let J=0,X=$!=="client.register"&&$!=="client.unregister";while(!0)try{return await this.commandOnce($,Z,Q,W)}catch(Y){if(!X||J>=1||!await this.recoverLocalHubTransport(Y))throw Y;J+=1}}async commandOnce($,Z,Q,W){await this.connect();let J=s_("hubreq_"),X=e_($,W?.timeoutMs),Y=new Promise((V,H)=>{let B=X===null?void 0:setTimeout(()=>{if(!this.pendingReplies.delete(J))return;H(new B8($,"hub_command_timeout",`Hub command ${$} timed out after ${X}ms (hub=${this.currentUrl}, requestId=${J}, clientId=${this.clientId}). Check hub-daemon.log for matching command.start/command.slow entries, or run 'cline doctor fix' to restart the hub.`))},X);this.pendingReplies.set(J,{resolve:(G)=>{if(B)clearTimeout(B);V(G)},reject:(G)=>{if(B)clearTimeout(B);H(G)}})});try{this.sendFrame({kind:"command",envelope:{version:"v1",command:$,requestId:J,clientId:this.clientId,sessionId:Q,timeoutMs:X,payload:Z}})}catch(V){throw this.pendingReplies.delete(J),V}let j=await Y;if(!j.ok){if(j.error?.code===s$){let V=Q??(typeof Z?.sessionId==="string"?Z.sessionId:void 0);throw new k1(V,j.error.message)}throw new B8($,j.error?.code,j.error?.message??`Hub command ${$} failed`)}return j}async recoverLocalHubTransport($){if(!PW(this.currentUrl)||!bW($))return!1;if(this.recoveryPromise)return await this.recoveryPromise;return this.recoveryPromise=(async()=>{let Z=await $2({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}).catch(()=>{return});if(!Z)return!1;return this.currentUrl=Z,this.close(),!0})().finally(()=>{this.recoveryPromise=void 0}),await this.recoveryPromise}hasActiveSubscriptions(){return this.subscriptionCounts.size>0}clearReconnectTimer(){if(!this.reconnectTimer)return;clearTimeout(this.reconnectTimer),this.reconnectTimer=void 0}scheduleReconnect(){if(this.reconnectTimer||this.closedByClient||!this.hasActiveSubscriptions())return;let $=Math.min(Hz*2**this.reconnectAttempt,Bz),Z=Math.round($*(1-KV)+Math.random()*$*KV);this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=void 0,this.reconnectSubscribedTransport()},Z)}async reconnectSubscribedTransport(){if(this.closedByClient||!this.hasActiveSubscriptions())return;try{await this.connect(),this.reconnectAttempt=0}catch{if(!PW(this.currentUrl)){this.reconnectAttempt+=1,this.scheduleReconnect();return}try{let $=await $2({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd});if($){this.currentUrl=$,await this.connect(),this.reconnectAttempt=0;return}}catch{}this.reconnectAttempt+=1,this.scheduleReconnect()}}close(){let $=this.socket;if(this.closedByClient=!0,this.clearReconnectTimer(),this.registered=!1,!$)return;this.lastCloseError=new R0("hub_connection_closed",CW),this.sawSocketClose=!1;for(let Z of this.pendingReplies.values())Z.reject(this.lastCloseError);this.pendingReplies.clear(),this.connectPromise=void 0,this.socket=void 0;try{$.close()}catch{}}async dispose(){if(this.socket?.readyState===1&&this.registered)try{await this.command("client.unregister",void 0,void 0,{timeoutMs:2000})}catch{}this.close()}sendFrame($){if(!this.socket||this.socket.readyState!==1){if(this.lastCloseError.code==="hub_connection_closed"&&!this.sawSocketClose)throw new R0("hub_connection_not_open","Hub connection is not open.");throw this.lastCloseError}this.socket.send(JSON.stringify($))}sendSubscriptionFrame($,Z){this.sendFrame({kind:$,clientId:this.clientId,...Z?{sessionId:Z}:{}})}adjustSubscriptionCount($,Z){let Q=this.subscriptionKeyForSessionId($),W=(this.subscriptionCounts.get(Q)??0)+Z;if(W<=0){if(this.subscriptionCounts.delete(Q),!this.hasActiveSubscriptions())this.clearReconnectTimer();if(Z<0&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.unsubscribe",$);return}if(this.subscriptionCounts.set(Q,W),Z>0&&W===1&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.subscribe",$)}subscriptionKeyForSessionId($){return $??BV}subscriptionSessionIdFromKey($){return $===BV?void 0:$}handleFrame($){switch($.kind){case"reply":{let Z=$.envelope.requestId;if(!Z)return;let Q=this.pendingReplies.get(Z);if(!Q)return;this.pendingReplies.delete(Z),Q.resolve($.envelope);return}case"event":for(let Z of this.listeners){if(Z.sessionId&&Z.sessionId!==$.envelope.sessionId?.trim())continue;Z.listener($.envelope)}return;case"command":case"stream.subscribe":case"stream.unsubscribe":return}}}function G$($){let Z=new URL($);if(Z.protocol==="http:")Z.protocol="ws:";else if(Z.protocol==="https:")Z.protocol="wss:";return Z.toString()}async function A1($,Z){let Q=new W1({url:$,authToken:Z?.authToken,clientType:"hub-healthcheck",displayName:"hub healthcheck",workspaceRoot:Z?.workspaceRoot,cwd:Z?.cwd});try{return await Q.connect(),!0}catch{return!1}finally{Q.close()}}async function SW($,Z){let Q=G$($),W=await g1(Q,{authToken:Z?.authToken});if(!W)return{status:"unreachable",url:Q};if(!o_(W).compatible)return{status:"protocol_mismatch",url:Q};if(Z?.verifyConnection===!0&&!await A1(Q,{workspaceRoot:Z.workspaceRoot,cwd:Z.cwd,authToken:Z.authToken}))return{status:"unreachable",url:Q};return{status:"compatible",url:Q}}async function Kz($){let Z=Date.now()+Wz;while(Date.now()<Z){let Q=await K0($.discoveryPath);if(Q?.url){let W=await SW(Q.url,{verifyConnection:!0,authToken:Q.authToken});if(W.status==="compatible")return B$(W.url,Q.authToken)}await new Promise((W)=>setTimeout(W,Jz))}return}async function Fz($){let Z=Date.now()+jz;while(Date.now()<Z){if(!(await g1($).catch(()=>{return}))?.url)return!0;await new Promise((W)=>setTimeout(W,Vz))}return!1}function Az($,Z){try{return G$($)===G$(Z)}catch{return!1}}function fz($){return($&&typeof $==="object"&&Array.isArray($.sessions)?$.sessions:[]).some((Q)=>{if(!Q||typeof Q!=="object")return!1;let W=Q;if(W.status==="running"||W.status==="idle"||W.status==="pending")return!0;return Array.isArray(W.participants)&&W.participants.length>0})}async function Uz($,Z,Q){let W=new W1({url:$,authToken:Z,clientType:"hub-recovery-check",displayName:"hub recovery check",workspaceRoot:Q?.workspaceRoot,cwd:Q?.cwd});try{let J=await W.command("session.list",{limit:500},void 0,{timeoutMs:Yz});return!fz(J.payload)}catch{return!1}finally{await W.dispose().catch(()=>{return})}}async function o4($={}){if($.endpoint?.trim()){let J=await SW($.endpoint);return J.status==="compatible"?J.url:void 0}let Z=s9(),Q=await K0(Z.discoveryPath);if(!Q?.url)return;let W=await SW(Q.url,{authToken:Q.authToken});if(W.status==="compatible")return B$(W.url,Q.authToken);if(W.status==="protocol_mismatch")await S0(Z.discoveryPath).catch(()=>{return});return}async function $2($={}){let Z=await o4($);if(Z&&await A1(Z,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return Z;if($.endpoint?.trim())return;let Q=s9();return await H8($.workspaceRoot??process.cwd()),await Kz(Q)}async function s4($,Z){let Q=new URL($),W=Z?.trim()||UV(Q);if(Q.protocol==="ws:")Q.protocol="http:";else if(Q.protocol==="wss:")Q.protocol="https:";return Q.pathname="/shutdown",Q.hash="",(await fetch(Q,{method:"POST",headers:W?{authorization:`Bearer ${W}`}:void 0})).ok}async function hW($=s9()){let Z=await K0($.discoveryPath);if(!Z?.url)return!1;try{if(await s4(Z.url,Z.authToken))return!0}catch{}return!1}async function t9($){if(!PW($.url))return;let Z=s9(),Q=await K0(Z.discoveryPath);if(!Q?.url||!Az(Q.url,$.url))return;if(!await Uz(Q.url,Q.authToken,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return;if(!await hW())return;if(!await Fz(Q.url))return;return await S0(Z.discoveryPath).catch(()=>{return}),await $2({workspaceRoot:$.workspaceRoot,cwd:$.cwd})}import{resolveClineBuildEnv as Dz}from"@cline/shared";function Lz($,Z){if($ instanceof Error)return $;if($&&typeof $==="object"&&"message"in $&&typeof $.message==="string"&&$.message.trim())return Error($.message.trim());let Q=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return Error(Q?`Failed to connect to hub at ${Z} (${Q} event before socket open).`:`Failed to connect to hub at ${Z}.`)}var _z="cline-hub-auth.";function zz($){return $.host!==void 0||$.port!==void 0||$.pathname!==void 0}function Tz($,Z){let Q=new URL($),W=new URL(Z);return Q.search="",Q.hash="",W.search="",W.hash="",Q.toString()===W.toString()}function DV(){return Dz()==="production"?F1():Q1()}async function Oz($){let Z=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),Z)return Z;let Q=DV(),W=await K0(Q.discoveryPath);if(W?.url&&Tz($.toString(),W.url))return W.authToken;return}async function kW($={}){let Z=K1($);if(!zz($)){let Q=DV(),W=await K0(Q.discoveryPath);if(W?.url)return W.url}return Z1(Z.host,Z.port,Z.pathname)}async function e9($){return await new Promise((Z,Q)=>{(async()=>{let W=new URL($),J=await Oz(W);W.hash="";let X=new WebSocket(W.toString(),J?[`${_z}${J}`]:void 0),Y=new Map,j=0;X.addEventListener("open",()=>{Z({send(V){let H=V.requestId??`hub-client-${++j}`;return new Promise((B,G)=>{Y.set(H,{resolve:B,reject:G});let K={kind:"command",envelope:{...V,requestId:H}};X.send(JSON.stringify(K))})},close(){X.close()}})}),X.addEventListener("message",(V)=>{let H=JSON.parse(String(V.data));if(H.kind==="reply"&&H.envelope.requestId){let B=Y.get(H.envelope.requestId);if(B)Y.delete(H.envelope.requestId),B.resolve(H.envelope)}}),X.addEventListener("close",()=>{for(let V of Y.values())V.reject(Error("Hub connection closed"));Y.clear()}),X.addEventListener("error",(V)=>{Q(Lz(V,$))})})().catch(Q)})}async function LV($){try{return(await e9($)).close(),!0}catch{return!1}}async function _V($,Z){let Q=await kW($),W=await e9(Q);try{return await W.send({version:Z.version??"v1",clientId:Z.clientId??"hub-client",...Z})}finally{W.close()}}function IW($){return $?JSON.parse(JSON.stringify($)):{}}function $Z($){let Z=$?.session&&typeof $.session==="object"?$.session:void 0;if(!Z)return;let Q=Z.metadata&&typeof Z.metadata==="object"?IW(Z.metadata):void 0;return{sessionId:typeof Z.sessionId==="string"?Z.sessionId:"",parentSessionId:typeof Q?.parentSessionId==="string"?Q.parentSessionId:void 0,messagesPath:typeof Q?.messagesPath==="string"?Q.messagesPath:void 0,metadata:Q}}function zV($,Z){return $.error?.message??`hub command failed: ${Z}`}function qz($){let Z=IW($);if(typeof Z.error==="string"&&Z.error.trim())return{...Z,error:Z.error.trim()};let Q=Z.result&&typeof Z.result==="object"?Z.result:void 0;if(typeof Q?.text==="string"&&Q.text.trim())return{...Z,error:Q.text.trim()};let W=Q?.error&&typeof Q.error==="object"?Q.error:void 0;if(typeof W?.message==="string"&&W.message.trim())return{...Z,error:W.message.trim()};return Z}function TV($){let Z=$?.sessionId;return typeof Z==="string"&&Z.trim()?Z.trim():void 0}function Mz($){let Z=$?.checkpoint;if(!Z||typeof Z!=="object"||Array.isArray(Z))throw Error("hub checkpoint restore returned no checkpoint");let Q=Z;if(typeof Q.ref!=="string"||typeof Q.createdAt!=="number"||typeof Q.runCount!=="number")throw Error("hub checkpoint restore returned an invalid checkpoint");return Q}function Rz($){let Z=IW($.payload);if($.event==="schedule.execution_completed")return{sessionId:$.sessionId?.trim()||TV(Z)||"",eventType:"schedule.execution.completed",payload:Z};if($.event==="schedule.execution_failed")return{sessionId:$.sessionId?.trim()||TV(Z)||"",eventType:"schedule.execution.failed",payload:Z};let Q=$.sessionId?.trim();if(!Q)return;switch($.event){case"iteration.started":return{sessionId:Q,eventType:"runtime.chat.iteration_start",payload:Z};case"iteration.finished":return{sessionId:Q,eventType:"runtime.chat.iteration_end",payload:Z};case"assistant.delta":return{sessionId:Q,eventType:"runtime.chat.text_delta",payload:Z};case"usage.updated":return{sessionId:Q,eventType:"runtime.chat.usage",payload:Z};case"tool.started":return{sessionId:Q,eventType:"runtime.chat.tool_call_start",payload:Z};case"tool.finished":return{sessionId:Q,eventType:"runtime.chat.tool_call_end",payload:Z};case"approval.requested":return{sessionId:Q,eventType:"approval.requested",payload:Z};case"run.aborted":return{sessionId:Q,eventType:"runtime.chat.aborted",payload:Z};case"run.failed":return{sessionId:Q,eventType:"runtime.chat.failed",payload:qz($.payload)};case"run.completed":return{sessionId:Q,eventType:"runtime.chat.completed",payload:Z};default:return}}class xW{options;client;metadataApplied=!1;constructor($){this.options=$;this.client=new W1({url:$.address,authToken:$.authToken,clientId:$.clientId,clientType:$.clientType??"hub-session-client",displayName:$.displayName??"hub session client",workspaceRoot:$.workspaceRoot,cwd:$.cwd})}async ensureMetadataApplied(){if(this.metadataApplied||!this.options.metadata){if(!this.options.metadata)await this.client.connect();return}await this.client.connect(),await this.client.command("client.update",{metadata:this.options.metadata}),this.metadataApplied=!0}async connect(){await this.ensureMetadataApplied()}close(){this.client.close()}async dispose(){await this.client.dispose()}async startRuntimeSession($){await this.ensureMetadataApplied();let Z=await this.client.command("session.create",{workspaceRoot:$.workspaceRoot,cwd:$.cwd,sessionConfig:{providerId:$.provider,modelId:$.model,apiKey:$.apiKey,cwd:$.cwd??$.workspaceRoot,workspaceRoot:$.workspaceRoot,systemPrompt:$.systemPrompt??"",mode:$.mode??"act",rules:$.rules,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,enableTools:$.enableTools,enableSpawnAgent:$.enableSpawn!==!1,enableAgentTeams:$.enableTeams!==!1,disableMcpSettingsTools:$.disableMcpSettingsTools,missionLogIntervalSteps:$.missionStepInterval,missionLogIntervalMs:$.missionTimeIntervalMs},metadata:{source:$.source??"cli",provider:$.provider,model:$.model,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,prompt:void 0,interactive:$.interactive!==!1},runtimeOptions:{mode:$.mode,systemPrompt:$.systemPrompt,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,autoApproveTools:$.autoApproveTools,toolExecutors:$.toolExecutors,configExtensions:$.configExtensions},modelSelection:{provider:$.provider,model:$.model,apiKey:$.apiKey},toolPolicies:$.toolPolicies}),Q=$Z(Z.payload);if(!Q?.sessionId)throw Error("hub session create returned no session id");return{sessionId:Q.sessionId,startResult:{sessionId:Q.sessionId,manifestPath:"",messagesPath:Q.messagesPath??""}}}async sendRuntimeSession($,Z,Q){return await this.ensureMetadataApplied(),{result:(await this.client.command("session.send_input",{prompt:Z.prompt,mode:Z.config.mode,attachments:Z.attachments,delivery:Z.delivery,timeoutSeconds:Z.config.timeoutSeconds},$,Q)).payload?.result}}async stopRuntimeSession($){return await this.ensureMetadataApplied(),await this.client.command("session.detach",{sessionId:$},$),{applied:!0}}async abortRuntimeSession($){return await this.ensureMetadataApplied(),await this.client.command("run.abort",{sessionId:$},$),{applied:!0}}async updateSession($){return await this.ensureMetadataApplied(),await this.client.command("session.update",{sessionId:$.sessionId,metadata:$.metadata},$.sessionId),{updated:!0}}async getSession($){await this.ensureMetadataApplied();let Z;try{Z=await this.client.command("session.get",void 0,$)}catch(Q){if(I1(Q))return;throw Q}return $Z(Z.payload)}async readMessages($){let Z=$.trim();if(!Z)return[];await this.ensureMetadataApplied();let Q=await this.client.command("session.messages",{sessionId:Z},Z);if(!Q.ok)throw Error(zV(Q,"session.messages"));let W=Q.payload?.messages;return Array.isArray(W)?W:[]}async restore($){let Z=$.sessionId.trim();if(!Z)throw Error("sessionId is required");let Q=$.restore?.messages!==!1;if(Q&&!$.config)throw Error("config is required when restore.messages is true");await this.ensureMetadataApplied();let W=$.config,J=await this.client.command("session.restore",{sessionId:Z,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...W?{workspaceRoot:W.workspaceRoot,cwd:W.cwd,sessionConfig:{providerId:W.provider,modelId:W.model,apiKey:W.apiKey,cwd:W.cwd??W.workspaceRoot,workspaceRoot:W.workspaceRoot,systemPrompt:W.systemPrompt??"",mode:W.mode??"act",rules:W.rules,maxIterations:W.maxIterations,enableTools:W.enableTools,enableSpawnAgent:W.enableSpawn!==!1,enableAgentTeams:W.enableTeams!==!1,disableMcpSettingsTools:W.disableMcpSettingsTools,missionLogIntervalSteps:W.missionStepInterval,missionLogIntervalMs:W.missionTimeIntervalMs},metadata:{source:W.source??"cli",provider:W.provider,model:W.model,enableTools:W.enableTools,enableSpawn:W.enableSpawn,enableTeams:W.enableTeams,prompt:void 0,interactive:W.interactive!==!1},runtimeOptions:{mode:W.mode,systemPrompt:W.systemPrompt,maxIterations:W.maxIterations,enableTools:W.enableTools,enableSpawn:W.enableSpawn,enableTeams:W.enableTeams,autoApproveTools:W.autoApproveTools,configExtensions:W.configExtensions},modelSelection:{provider:W.provider,model:W.model,apiKey:W.apiKey},toolPolicies:W.toolPolicies}:{}},Z);if(!J.ok)throw Error(zV(J,"session.restore"));let X=$Z(J.payload);if(Q&&!X?.sessionId)throw Error("hub checkpoint restore returned no session id");let Y=Array.isArray(J.payload?.messages)?J.payload.messages:void 0,j=Mz(J.payload);return{sessionId:X?.sessionId,startResult:X?.sessionId?{sessionId:X.sessionId,manifestPath:"",messagesPath:X.messagesPath??""}:void 0,...Y?{messages:Y}:{},checkpoint:j}}async listSessions($){await this.ensureMetadataApplied();let Z=await this.client.command("session.list",{limit:$?.limit??200});return(Array.isArray(Z.payload?.sessions)?Z.payload?.sessions:[]).map((W)=>$Z({session:W})).filter((W)=>Boolean(W?.sessionId))}async deleteSession($,Z=!0){return await this.ensureMetadataApplied(),(await this.client.command("session.delete",{sessionId:$,deleteCheckpointRefs:Z})).payload?.deleted===!0}async respondToolApproval($){await this.ensureMetadataApplied(),await this.client.command("approval.respond",{approvalId:$.approvalId,approved:$.approved,payload:$.reason?{reason:$.reason}:void 0,responderClientId:$.responderClientId})}streamEvents($,Z){let Q=new Set(($.sessionIds??[]).map((J)=>J.trim()).filter(Boolean)),W=this.client.subscribe((J)=>{let X=Rz(J);if(!X)return;if(Q.size>0&&!Q.has(X.sessionId))return;Z.onEvent?.(X)});return this.ensureMetadataApplied().catch((J)=>{Z.onError?.(J instanceof Error?J:Error(String(J)))}),W}streamTeamProgress($,Z){let Q=this.client.subscribe((W)=>{if(W.event!=="team.progress"||!W.payload)return;Z.onProjection?.(W.payload)});return this.ensureMetadataApplied().catch((W)=>{Z.onError?.(W instanceof Error?W:Error(String(W)))}),Q}async createSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.create",$)).payload?.schedule}async listSchedules($){await this.ensureMetadataApplied();let Z=await this.client.command("schedule.list");return Array.isArray(Z.payload?.schedules)?Z.payload?.schedules:[]}async getSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.get",{scheduleId:$})).payload?.schedule}async updateSchedule($,Z){return await this.ensureMetadataApplied(),(await this.client.command("schedule.update",{scheduleId:$,...Z})).payload?.schedule}async pauseSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.disable",{scheduleId:$})).payload?.schedule}async resumeSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.enable",{scheduleId:$})).payload?.schedule}async deleteSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.delete",{scheduleId:$})).payload?.deleted===!0}async triggerScheduleNow($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.trigger",{scheduleId:$})).payload?.execution}async listScheduleExecutions($,Z){await this.ensureMetadataApplied();let Q=await this.client.command("schedule.list_executions",{scheduleId:$,limit:Z});return Array.isArray(Q.payload?.executions)?Q.payload?.executions:[]}async getScheduleStats(){return await this.ensureMetadataApplied(),(await this.client.command("schedule.stats")).payload?.stats}async getActiveScheduledExecutions(){await this.ensureMetadataApplied();let $=await this.client.command("schedule.active");return Array.isArray($.payload?.executions)?$.payload?.executions:[]}async getUpcomingScheduledRuns($){await this.ensureMetadataApplied();let Z=await this.client.command("schedule.upcoming",{limit:$});return Array.isArray(Z.payload?.upcoming)?Z.payload?.upcoming:[]}}class gW{client;constructor($){this.client=new W1({url:$.address,authToken:$.authToken,clientId:$.clientId,clientType:$.clientType??"hub-ui-client",displayName:$.displayName??"hub ui client"})}async connect(){await this.client.connect()}close(){this.client.close()}async dispose(){await this.client.dispose()}getClientId(){return this.client.getClientId()}async sendNotify($){await this.client.command("ui.notify",$)}async sendShowWindow($){await this.client.command("ui.show_window",$??{})}async listClients(){let $=await this.client.command("client.list");return Array.isArray($.payload?.clients)?$.payload.clients:[]}async listSessions($=200){let Z=await this.client.command("session.list",{limit:$});return Array.isArray(Z.payload?.sessions)?Z.payload.sessions:[]}subscribeUI($){return this.client.subscribe((Z)=>{switch(Z.event){case"ui.notify":$.onNotify?.(Z.payload);break;case"ui.show_window":$.onShowWindow?.(Z.payload);break;case"hub.client.registered":$.onClientRegistered?.(Z.payload??{});break;case"hub.client.disconnected":$.onClientDisconnected?.(Z.payload??{});break;case"session.created":$.onSessionCreated?.(Z.payload??{});break;case"session.updated":$.onSessionUpdated?.(Z.payload??{});break;case"session.detached":$.onSessionDetached?.(Z.payload??{});break}})}}import{normalizeProviderId as jx}from"@cline/llms";var jU={};N(jU,{LocalRuntimeHost:()=>T1});import{readdirSync as tI}from"node:fs";import{homedir as eI}from"node:os";import{isAbsolute as $x,join as kY,resolve as IY}from"node:path";import{captureSdkError as p2,createSessionId as Zx,isLikelyAuthError as Qx,normalizeUserInput as Wx}from"@cline/shared";import{setHomeDirIfUnset as Jx}from"@cline/shared/storage";var sV={};N(sV,{saveProviderOAuthCredentials:()=>W2,resolveProviderApiKeyFromSettings:()=>sW,loginAndSaveProviderOAuthCredentials:()=>X6,isOAuthProvider:()=>Q2,getProviderOAuthCredentialsFromSettings:()=>Y6,getProviderAuthStorageId:()=>aW,getProviderAuthHandler:()=>j0,getPersistedProviderApiKey:()=>U8,formatProviderOAuthApiKey:()=>oW});import{getClineEnvironmentConfig as nV}from"@cline/shared";_0();var SV={};N(SV,{startClineDeviceAuth:()=>lW,refreshClineToken:()=>JZ,loginClineOAuth:()=>t4,getValidClineCredentials:()=>e4,completeClineDeviceAuth:()=>pW});import{getClineEnvironmentConfig as mW}from"@cline/shared";var OV={};N(OV,{startLocalOAuthServer:()=>J1});function Ez(){let $;return{promise:new Promise((Q)=>{$=Q}),resolve:$}}async function J1($){let Z=await import("node:http"),Q=$.host??"127.0.0.1",W=$.timeoutMs??300000,J=$.successHtml??Nz,X=Ez(),Y=!1,j=null,V=null,H=null,B=(F)=>{if(Y)return;Y=!0,X.resolve(F)},G=()=>{if(j)clearTimeout(j),j=null;let F=H;if(H=null,V)V.close(),V.closeAllConnections?.(),V=null;if(F!==null&&$.onClose)Promise.resolve($.onClose({host:Q,port:F})).catch(()=>{})},K=async()=>{return j=setTimeout(()=>{G(),B(null)},W),X.promise};for(let F of $.ports){let A=Z.createServer((f,D)=>{try{let U=new URL(f.url||"",`http://${Q}:${F}`);if(U.pathname!==$.callbackPath){D.statusCode=404,D.end("Not found");return}let T={url:U,code:U.searchParams.get("code")??void 0,state:U.searchParams.get("state")??void 0,provider:U.searchParams.get("provider")??void 0,error:U.searchParams.get("error")??void 0};if(T.error){D.statusCode=400,D.end(`Authentication failed: ${T.error}`),G(),B(T);return}if(!T.code){D.statusCode=400,D.end("Missing authorization code");return}if($.expectedState&&T.state!==$.expectedState){D.statusCode=400,D.end("State mismatch");return}D.statusCode=200,D.setHeader("Content-Type","text/html; charset=utf-8"),D.end(J),G(),B(T)}catch{D.statusCode=500,D.end("Internal error")}}),L=await new Promise((f)=>{let D=(U)=>{A.off("error",D),f({bound:!1,error:U})};A.once("error",D),A.listen(F,Q,()=>{A.off("error",D),V=A,f({bound:!0})})});if(L.error){if(L.error.code==="EADDRINUSE")continue;throw G(),L.error}if(L.bound){H=F;let f=`http://${Q}:${F}${$.callbackPath}`;if($.onListening)await Promise.resolve($.onListening({host:Q,port:F,callbackUrl:f})).catch(()=>{});return{callbackUrl:f,waitForCallback:K,cancelWait:()=>{G(),B(null)},close:()=>{G(),B(null)}}}}return{callbackUrl:"",waitForCallback:async()=>null,cancelWait:()=>{},close:()=>{}}}var Nz=`<!DOCTYPE html>
279
279
  <html lang="en">
280
280
  <head>
281
281
  <meta charset="utf-8">
@@ -316,22 +316,22 @@ ${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
316
316
  </div>
317
317
  <script>setTimeout(() => window.close(), 3000);</script>
318
318
  </body>
319
- </html>`;function TV($){let Z="";for(let Q=0;Q<$.length;Q+=1)Z+=String.fromCharCode($[Q]??0);return btoa(Z).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}async function Rz($){let Q=new TextEncoder().encode($),W=await crypto.subtle.digest("SHA-256",Q);return new Uint8Array(W)}function Ez($=32){let Z=new Uint8Array($);return crypto.getRandomValues(Z),TV(Z)}async function ZZ(){let $=Ez(),Z=TV(await Rz($));return{verifier:$,challenge:Z}}function QZ($){return $.endsWith("/")?$.slice(0,-1):$}function $2($,Z){return new URL(Z,`${QZ($)}/`).toString()}function G8($,Z={}){let Q=$.trim();if(!Q)return{};try{let W=new URL(Q);return{code:W.searchParams.get("code")??void 0,state:W.searchParams.get("state")??void 0,provider:Z.includeProvider?W.searchParams.get("provider")??void 0:void 0}}catch{}if(Z.allowHashCodeState&&Q.includes("#")){let[W,J]=Q.split("#",2);return{code:W||void 0,state:J||void 0}}if(Q.includes("code=")){let W=new URLSearchParams(Q);return{code:W.get("code")??void 0,state:W.get("state")??void 0,provider:Z.includeProvider?W.get("provider")??void 0:void 0}}return{code:Q}}function Nz($){if(typeof atob==="function")try{return atob($)}catch{return null}if(typeof Buffer<"u")try{return Buffer.from($,"base64").toString("utf8")}catch{return null}return null}function E0($){if(!$)return null;try{let Z=$.split(".");if(Z.length!==3)return null;let Q=Z[1];if(!Q)return null;let W=Q.replace(/-/g,"+").replace(/_/g,"/"),J=W.padEnd(W.length+(4-W.length%4)%4,"="),X=Nz(J);if(!X)return null;return JSON.parse(X)}catch{return null}}function K8($){try{let Z=JSON.parse($),Q=Z.error,W=typeof Q==="string"?Q:Q&&typeof Q==="object"&&typeof Q.type==="string"?Q.type:void 0,J=typeof Z.error_description==="string"?Z.error_description:typeof Z.message==="string"?Z.message:Q&&typeof Q==="object"&&typeof Q.message==="string"?Q.message:void 0;return{code:W,message:J}}catch{return{}}}function F8($,Z){return Date.now()>=$.expires-Z}async function A8($){if(!$.onManualCodeInput){let X=await $.waitForCallback();return{code:X?.code,state:X?.state,provider:X?.provider,error:X?.error}}let Z,Q,W=$.onManualCodeInput().then((X)=>{Z=X,$.cancelWait()}).catch((X)=>{Q=X instanceof Error?X:Error(String(X)),$.cancelWait()}),J=await $.waitForCallback();if(Q)throw Q;if(J?.code||J?.error)return{code:J.code,state:J.state,provider:J.provider,error:J.error};if(Z)return G8(Z,$.parseOptions);if(await W,Q)throw Q;if(Z)return G8(Z,$.parseOptions);return{}}var WZ={authorize:"/api/v1/auth/authorize",token:"/api/v1/auth/token",register:"/api/v1/auth/register",refresh:"/api/v1/auth/refresh"},RV={deviceAuthorization:"/user_management/authorize/device",authenticate:"/user_management/authenticate"},mW="https://api.workos.com",wz="/auth",OV=Array.from({length:11},($,Z)=>48801+Z),Cz=300000,Pz=30000,f8=30000,Sz=300,bz=5;class K$ extends Error{status;errorCode;constructor($,Z){super($);this.name="ClineOAuthTokenError",this.status=Z?.status,this.errorCode=Z?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant|invalid_token|unauthorized/i.test(this.errorCode))return!0;if(this.status===400||this.status===401||this.status===403)return/invalid|expired|revoked|unauthorized/i.test(this.message);return!1}}function yz($){let Z=Date.parse($);if(Number.isNaN(Z))throw Error(`Invalid expiresAt value: ${$}`);return Z}function vW($,Z,Q={}){let W=$.userInfo.clineUserId??Q.accountId,J=$.refreshToken??Q.refresh;if(!J)throw Error("Token response did not include a refresh token");return{access:$.accessToken,refresh:J,expires:yz($.expiresAt),accountId:W??void 0,email:$.userInfo.email||Q.email,metadata:{provider:Z,tokenType:$.tokenType,userInfo:$.userInfo}}}async function cW($){if(!$)return{};return typeof $==="function"?await $():$}function qV($,Z){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return Z;return Math.floor($)}async function MV($){await new Promise((Z)=>setTimeout(Z,$))}function uW($,Z){if(!$.success||!$.data?.accessToken)throw Error(Z);return $.data}async function EV($,Z){let Q=await fetch($2(mW,RV.deviceAuthorization),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({client_id:$}),signal:AbortSignal.timeout(Z?.requestTimeoutMs??f8)}),W=await Q.json().catch(()=>({}));if(!Q.ok)throw new K$(`Device authorization failed: ${Q.status}${W.error_description?` - ${W.error_description}`:""}`,{status:Q.status,errorCode:W.error});if(!W.device_code||!W.user_code||!W.verification_uri)throw Error("Invalid WorkOS device authorization response");return{deviceCode:W.device_code,userCode:W.user_code,verificationUri:W.verification_uri,verificationUriComplete:W.verification_uri_complete,expiresInSeconds:qV(W.expires_in,Sz),pollIntervalSeconds:qV(W.interval,bz)}}async function NV($){let Z=Date.now()+$.expiresInSeconds*1000,Q=Math.max(1,$.initialPollIntervalSeconds);while(Date.now()<=Z){let W=await fetch($2($.workosApiBaseUrl,RV.authenticate),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"urn:ietf:params:oauth:grant-type:device_code",device_code:$.deviceCode,client_id:$.clientId}),signal:AbortSignal.timeout($.requestTimeoutMs)}),J=await W.json().catch(()=>({}));if(W.ok){if(!J.access_token||!J.refresh_token)throw Error("Invalid WorkOS token response");return{accessToken:J.access_token,refreshToken:J.refresh_token,tokenType:J.token_type??"Bearer"}}switch(J.error){case"authorization_pending":{await MV(Q*1000);break}case"slow_down":{Q+=1,await MV(Q*1000);break}case"access_denied":case"expired_token":case"invalid_grant":throw new K$(J.error_description||"WorkOS authorization failed",{status:W.status,errorCode:J.error});default:throw new K$(`WorkOS token polling failed: ${W.status}${J.error_description?` - ${J.error_description}`:""}`,{status:W.status,errorCode:J.error})}$.onProgress?.("Waiting for browser authentication confirmation...")}throw Error("WorkOS device authorization timed out")}async function wV($,Z,Q){let W={accessToken:$.accessToken,refreshToken:$.refreshToken},J=await fetch($2(Z.apiBaseUrl,WZ.register),{method:"POST",headers:{"Content-Type":"application/json",...await cW(Z.headers)},body:JSON.stringify(W),signal:AbortSignal.timeout(Z.requestTimeoutMs??f8)});if(!J.ok){let Y=await J.text().catch(()=>""),j=K8(Y);throw new K$(`Token registration failed: ${J.status}${j.message?` - ${j.message}`:""}`,{status:J.status,errorCode:j.code})}let X=await J.json();return vW(uW(X,"Invalid token exchange response"),Q??Z.provider)}async function hz($,Z,Q,W){let J={grant_type:"authorization_code",code:$,client_type:"extension",redirect_uri:Z,provider:W??Q.provider},X=await fetch($2(Q.apiBaseUrl,WZ.token),{method:"POST",headers:{"Content-Type":"application/json",...await cW(Q.headers)},body:JSON.stringify(J),signal:AbortSignal.timeout(Q.requestTimeoutMs??f8)});if(!X.ok){let j=await X.text().catch(()=>""),V=K8(j);throw new K$(`Token exchange failed: ${X.status}${V.message?` - ${V.message}`:""}`,{status:X.status,errorCode:V.code})}let Y=await X.json();return vW(uW(Y,"Invalid token exchange response"),W??Q.provider)}async function t4($){w1($.telemetry,$.provider??"cline");let Z=$.useWorkOSDeviceAuth??!0,Q=$.callbackPorts?.length?$.callbackPorts:OV,W=$.callbackPath??wz,J=Z?null:await J1({ports:Q,callbackPath:W,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),X=J?.callbackUrl||`http://127.0.0.1:${Q[0]??OV[0]}${W}`;try{let Y;if(Z){let j=gW().workOsClientId,V=await EV(j,$);$.callbacks.onAuth({url:V.verificationUriComplete??V.verificationUri,instructions:`Enter this code in your browser: ${V.userCode}`});let H=await NV({clientId:j,deviceCode:V.deviceCode,expiresInSeconds:V.expiresInSeconds,initialPollIntervalSeconds:V.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??f8,workosApiBaseUrl:mW,onProgress:$.callbacks.onProgress});Y=await wV(H,$,$.provider)}else{let j=new URL($2($.apiBaseUrl,WZ.authorize));j.searchParams.set("client_type","extension"),j.searchParams.set("callback_url",X),j.searchParams.set("redirect_uri",X),$.callbacks.onAuth({url:j.toString(),instructions:"Continue the authentication process in your browser."});let V,H=$.provider,B=await A8({waitForCallback:J?.waitForCallback??(async()=>null),cancelWait:J?.cancelWait??(()=>{}),onManualCodeInput:$.callbacks.onManualCodeInput,parseOptions:{includeProvider:!0}});if(B.error)throw Error(`OAuth error: ${B.error}`);if(V=B.code,H=B.provider??H,!V){let G=await $.callbacks.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),K=G8(G,{includeProvider:!0});V=K.code,H=K.provider??H}if(!V)throw Error("Missing authorization code");Y=await hz(V,X,$,H)}return C1($.telemetry,$.provider??"cline"),S1($.telemetry,{id:Y.accountId,email:Y.email,provider:$.provider??"cline"}),Y}catch(Y){throw P1($.telemetry,$.provider??"cline",Y instanceof Error?Y.message:String(Y)),Y}finally{J?.close()}}async function dW($){return await EV(gW().workOsClientId,$)}async function lW($){let Z=$.provider??"cline";w1($.telemetry,Z);try{let Q=await NV({clientId:gW().workOsClientId,deviceCode:$.deviceCode,expiresInSeconds:$.expiresInSeconds,initialPollIntervalSeconds:$.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??f8,workosApiBaseUrl:mW}),W=await wV(Q,{apiBaseUrl:$.apiBaseUrl,headers:$.headers,requestTimeoutMs:$.requestTimeoutMs,provider:$.provider},$.provider);return C1($.telemetry,Z),S1($.telemetry,{id:W.accountId,email:W.email,provider:Z}),W}catch(Q){throw P1($.telemetry,Z,Q instanceof Error?Q.message:String(Q)),Q}}async function JZ($,Z){let Q=await fetch($2(Z.apiBaseUrl,WZ.refresh),{method:"POST",headers:{"Content-Type":"application/json",...await cW(Z.headers)},body:JSON.stringify({refreshToken:$.refresh,grantType:"refresh_token"}),signal:AbortSignal.timeout(Z.requestTimeoutMs??f8)});if(!Q.ok){let X=await Q.text().catch(()=>""),Y=K8(X);throw new K$(`Token refresh failed: ${Q.status}${Y.message?` - ${Y.message}`:""}`,{status:Q.status,errorCode:Y.code})}let W=await Q.json(),J=$.metadata?.provider??Z.provider;return vW(uW(W,"Invalid token refresh response"),J,$)}async function e4($,Z,Q){if(!$)return null;let W=Q?.refreshBufferMs??Cz,J=Q?.retryableTokenGraceMs??Pz;if(Q?.forceRefresh!==!0&&!F8($,W))return $;try{return await JZ($,Z)}catch(Y){if(Y instanceof K$&&Y.isLikelyInvalidGrant())return V$(Z.telemetry,Z.provider??"cline","invalid_grant"),null;if($.expires-Date.now()>J)return $;return null}}_0();var SV={};N(SV,{refreshOpenAICodexToken:()=>YZ,loginOpenAICodex:()=>$6,getValidOpenAICodexCredentials:()=>Z6,OPENAI_CODEX_OAUTH_CONFIG:()=>X0});import{nanoid as kz}from"nanoid";var X0={authorizationEndpoint:"https://auth.openai.com/oauth/authorize",tokenEndpoint:"https://auth.openai.com/oauth/token",clientId:"app_EMoamEEZ73f0CkXaXp7hrann",redirectUri:"http://localhost:1455/auth/callback",scopes:"openid profile email offline_access",callbackPort:1455,jwtClaimPath:"https://api.openai.com/auth",refreshBufferMs:300000,retryableTokenGraceMs:30000,httpTimeoutMs:30000};class XZ extends Error{status;errorCode;constructor($,Z){super($);this.name="OpenAICodexOAuthTokenError",this.status=Z?.status,this.errorCode=Z?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant/i.test(this.errorCode))return!0;if(this.status===400||this.status===401||this.status===403)return/invalid_grant|revoked|expired|invalid refresh/i.test(this.message);return!1}}async function Iz($,Z,Q=X0.redirectUri){let W=await fetch(X0.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"authorization_code",client_id:X0.clientId,code:$,code_verifier:Z,redirect_uri:Q}),signal:AbortSignal.timeout(X0.httpTimeoutMs)});if(!W.ok)return{type:"failed"};let J=await W.json();if(!J.access_token||!J.refresh_token||typeof J.expires_in!=="number")return{type:"failed"};return{type:"success",access:J.access_token,refresh:J.refresh_token,expires:Date.now()+J.expires_in*1000,email:J.email,idToken:J.id_token}}async function xz($){try{let Z=await fetch(X0.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:$,client_id:X0.clientId}),signal:AbortSignal.timeout(X0.httpTimeoutMs)});if(!Z.ok){let W=await Z.text().catch(()=>""),J=K8(W);throw new XZ(`Token refresh failed: ${Z.status}${J.message?` - ${J.message}`:""}`,{status:Z.status,errorCode:J.code})}let Q=await Z.json();if(!Q.access_token||!Q.refresh_token||typeof Q.expires_in!=="number")return{type:"failed"};return{type:"success",access:Q.access_token,refresh:Q.refresh_token,expires:Date.now()+Q.expires_in*1000,email:Q.email,idToken:Q.id_token}}catch(Z){if(Z instanceof XZ)throw Z;return{type:"failed"}}}async function gz($="pi"){let{verifier:Z,challenge:Q}=await ZZ(),W=kz(32),J=new URL(X0.authorizationEndpoint);return J.searchParams.set("response_type","code"),J.searchParams.set("client_id",X0.clientId),J.searchParams.set("redirect_uri",X0.redirectUri),J.searchParams.set("scope",X0.scopes),J.searchParams.set("code_challenge",Q),J.searchParams.set("code_challenge_method","S256"),J.searchParams.set("state",W),J.searchParams.set("id_token_add_organizations","true"),J.searchParams.set("codex_cli_simplified_flow","true"),J.searchParams.set("originator",$),{verifier:Z,state:W,url:J.toString()}}function mz(){try{let $=new URL(X0.redirectUri),Z=$.port.length>0?Number.parseInt($.port,10):X0.callbackPort;return{host:$.hostname||"localhost",port:Number.isFinite(Z)?Z:X0.callbackPort,callbackPath:$.pathname||"/auth/callback",redirectUri:$.toString()}}catch{return{host:"localhost",port:X0.callbackPort,callbackPath:"/auth/callback",redirectUri:X0.redirectUri}}}function vz($,Z){let Q=Z?E0(Z):E0($),W=Q?Q:E0($),X=W?.[X0.jwtClaimPath]?.chatgpt_account_id;if(typeof X==="string"&&X.length>0)return X;let Y=W?.organizations;if(Array.isArray(Y)&&Y.length>0){let V=Y[0];if(typeof V?.id==="string"&&V.id.length>0)return V.id}let j=W?.chatgpt_account_id;if(typeof j==="string"&&j.length>0)return j;return null}function PV($,Z){let Q=vz($.access,$.idToken)??Z?.accountId;if(!Q)throw Error("Failed to extract accountId from token");return{access:$.access,refresh:$.refresh||Z?.refresh||"",expires:$.expires,accountId:Q,email:$.email??Z?.email,metadata:{...Z?.metadata??{},provider:"openai-codex"}}}async function $6($){w1($.telemetry,"openai-codex");let Z=mz(),{verifier:Q,state:W,url:J}=await gz($.originator),X=await J1({host:Z.host,ports:[Z.port],callbackPath:Z.callbackPath,expectedState:W});$.onAuth({url:J,instructions:"Continue the authentication process in your browser."});let Y;try{let j=await A8({waitForCallback:X.waitForCallback,cancelWait:X.cancelWait,onManualCodeInput:$.onManualCodeInput,parseOptions:{allowHashCodeState:!0}});if(j.state&&j.state!==W)throw Error("State mismatch");if(Y=j.code,!Y){let B=await $.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),G=G8(B,{allowHashCodeState:!0});if(G.state&&G.state!==W)throw Error("State mismatch");Y=G.code}if(!Y)throw Error("Missing authorization code");let V=await Iz(Y,Q,Z.redirectUri);if(V.type!=="success")throw Error("Token exchange failed");let H=PV(V);return C1($.telemetry,"openai-codex"),S1($.telemetry,{id:H.accountId,email:H.email,provider:"openai-codex"}),H}catch(j){throw P1($.telemetry,"openai-codex",j instanceof Error?j.message:String(j)),j}finally{X.close()}}async function YZ($,Z){let Q=await xz($);if(Q.type!=="success")throw Error("Failed to refresh OpenAI Codex token");let W=PV(Q,Z);if(!W.refresh)throw Error("Failed to refresh OpenAI Codex token: missing refresh token");return W}async function Z6($,Z){if(!$)return null;let Q=Z?.refreshBufferMs??X0.refreshBufferMs,W=Z?.retryableTokenGraceMs??X0.retryableTokenGraceMs;if(Z?.forceRefresh!==!0&&!F8($,Q))return $;try{return await YZ($.refresh,$)}catch(X){if(X instanceof XZ&&X.isLikelyInvalidGrant())return V$(Z?.telemetry,"openai-codex","invalid_grant"),null;if($.expires-Date.now()>W)return $;return null}}_0();var pV={};N(pV,{refreshOcaToken:()=>BZ,loginOcaOAuth:()=>W6,getValidOcaCredentials:()=>J6,OCI_HEADER_OPC_REQUEST_ID:()=>cz,DEFAULT_INTERNAL_OCA_BASE_URL:()=>jZ,DEFAULT_INTERNAL_IDCS_URL:()=>hV,DEFAULT_INTERNAL_IDCS_SCOPES:()=>kV,DEFAULT_INTERNAL_IDCS_CLIENT_ID:()=>yV,DEFAULT_EXTERNAL_OCA_BASE_URL:()=>VZ,DEFAULT_EXTERNAL_IDCS_URL:()=>xV,DEFAULT_EXTERNAL_IDCS_SCOPES:()=>gV,DEFAULT_EXTERNAL_IDCS_CLIENT_ID:()=>IV});import{nanoid as bV}from"nanoid";class pW{ttlMs;maxEntries;entries=new Map;constructor($,Z){this.ttlMs=$;this.maxEntries=Z}get($,Z=Date.now()){this.pruneExpired(Z);let Q=this.entries.get($);if(!Q)return;return this.entries.delete($),this.entries.set($,Q),Q.value}set($,Z,Q=Date.now(),W=this.ttlMs){this.pruneExpired(Q),this.entries.delete($);while(this.entries.size>=this.maxEntries){let J=this.entries.keys().next().value;if(J===void 0)break;this.entries.delete(J)}this.entries.set($,{value:Z,expiresAt:Q+W})}pruneExpired($){for(let[Z,Q]of this.entries)if(Q.expiresAt<=$)this.entries.delete(Z)}}var yV="a8331954c0cf48ba99b5dd223a14c6ea",hV="https://idcs-9dc693e80d9b469480d7afe00e743931.identity.oraclecloud.com",kV="openid offline_access",jZ="https://code-internal.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",IV="c1aba3deed5740659981a752714eba33",xV="https://login-ext.identity.oraclecloud.com",gV="openid offline_access",VZ="https://code.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",cz="opc-request-id",uz="/auth/oca",dz=Array.from({length:11},($,Z)=>48801+Z),lz=300000,pz=30000,mV=30000,rz=600000;class HZ extends Error{status;errorCode;constructor($,Z){super($);this.name="OcaOAuthTokenError",this.status=Z?.status,this.errorCode=Z?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant|invalid_token|unauthorized/i.test(this.errorCode))return!0;return this.status===400||this.status===401||this.status===403}}var F$={internal:{clientId:yV,idcsUrl:hV,scopes:kV,baseUrl:jZ},external:{clientId:IV,idcsUrl:xV,scopes:gV,baseUrl:VZ}},Q6=new Map,iz=86400000,nz=300000,az=32,rW=new pW(iz,az);function vV($){if(typeof $==="function")return $();return $??"internal"}function cV($){return{internal:{clientId:$?.internal?.clientId??F$.internal.clientId,idcsUrl:$?.internal?.idcsUrl??F$.internal.idcsUrl,scopes:$?.internal?.scopes??F$.internal.scopes,baseUrl:$?.internal?.baseUrl??F$.internal.baseUrl},external:{clientId:$?.external?.clientId??F$.external.clientId,idcsUrl:$?.external?.idcsUrl??F$.external.idcsUrl,scopes:$?.external?.scopes??F$.external.scopes,baseUrl:$?.external?.baseUrl??F$.external.baseUrl}}}function sz($=Date.now()){let Z=$-rz;for(let[Q,W]of Q6.entries())if(W.createdAt<Z)Q6.delete(Q)}function oz($,Z,Q){if(typeof $.expires_in==="number"&&$.expires_in>0)return Date.now()+$.expires_in*1000;let J=E0(Z)?.exp;if(typeof J==="number"&&J>0)return J*1000;let Y=E0(Q)?.exp;if(typeof Y==="number"&&Y>0)return Y*1000;return Date.now()+3600000}function uV($,Z,Q){let W=$.access_token;if(!W)throw Error("Token response did not include an access token");let J=$.refresh_token??Q?.refresh;if(!J)throw Error("Token response did not include a refresh token");let X=E0($.id_token),Y=E0(W),j=X?.sub??Y?.sub,V=X?.email??Y?.email;return{access:W,refresh:J,expires:oz($,W,$.id_token),accountId:j??Q?.accountId,email:V??Q?.email,metadata:{...Q?.metadata??{},provider:"oca",mode:Z,subject:j,idToken:$.id_token}}}async function dV($,Z){let Q=QZ($),W=rW.get(Q);if(W)return W;let J=`${Q}/.well-known/openid-configuration`,X=await fetch(J,{method:"GET",signal:AbortSignal.timeout(Z)});if(!X.ok){let V=`${Q}/oauth2/v1/token`;return rW.set(Q,V,Date.now(),nz),V}let j=(await X.json()).token_endpoint||`${Q}/oauth2/v1/token`;return rW.set(Q,j),j}function lV($){return{code:$.error,message:$.error_description}}async function tz($){let Z=Q6.get($.state);if(!Z)throw Error("No PKCE verifier found for this state");Q6.delete($.state);let Q=$.mode==="external"?$.config.external:$.config.internal,W=await dV(Q.idcsUrl,$.requestTimeoutMs),J=new URLSearchParams({grant_type:"authorization_code",code:$.code,redirect_uri:Z.redirectUri,client_id:Q.clientId,code_verifier:Z.verifier}),X=await fetch(W,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:J,signal:AbortSignal.timeout($.requestTimeoutMs)}),Y=await X.json();if(!X.ok){let V=lV(Y);throw new HZ(`Token exchange failed: ${X.status}${V.message?` - ${V.message}`:""}`,{status:X.status,errorCode:V.code})}let j=E0(Y.id_token);if(!Y.id_token||!j)throw Error("No ID token received from OCA");if(j.nonce!==Z.nonce)throw Error("OIDC nonce verification failed");return uV(Y,$.mode)}function ez($){let Z=$.mode==="external"?$.config.external:$.config.internal,Q=new URL(`${QZ(Z.idcsUrl)}/oauth2/v1/authorize`);return Q.searchParams.set("client_id",Z.clientId),Q.searchParams.set("response_type","code"),Q.searchParams.set("scope",Z.scopes),Q.searchParams.set("code_challenge",$.challenge),Q.searchParams.set("code_challenge_method","S256"),Q.searchParams.set("redirect_uri",$.callbackUrl),Q.searchParams.set("state",$.state),Q.searchParams.set("nonce",$.nonce),Q.toString()}async function W6($){w1($.telemetry,"oca");let Z=cV($.config),Q=vV($.mode),W=$.callbackPorts?.length?$.callbackPorts:dz,J=$.callbackPath??uz,X=$.requestTimeoutMs??mV,Y=await J1({ports:W,callbackPath:J,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),j=Y.callbackUrl;if(!j)throw Error("Unable to bind local OAuth callback server");let V=bV(16),H=bV(16),{verifier:B,challenge:G}=await ZZ();sz(),Q6.set(V,{verifier:B,nonce:H,mode:Q,redirectUri:j,createdAt:Date.now()});let K=ez({callbackUrl:j,mode:Q,state:V,nonce:H,challenge:G,config:Z});$.callbacks.onAuth({url:K,instructions:"Continue the authentication process in your browser."});try{let F=await A8({waitForCallback:Y.waitForCallback,cancelWait:Y.cancelWait,onManualCodeInput:$.callbacks.onManualCodeInput}),A=F.code,L=F.state;if(F.error)throw Error(`OAuth error: ${F.error}`);if(!A){if(!$.callbacks.onManualCodeInput)throw Error("Timed out waiting for OCA callback");throw Error("Missing authorization code")}if(!L||L!==V)throw Error("State mismatch");let f=await tz({code:A,state:L,mode:Q,config:Z,requestTimeoutMs:X});return C1($.telemetry,"oca"),S1($.telemetry,{id:f.accountId,email:f.email,provider:"oca"}),f}catch(F){throw P1($.telemetry,"oca",F instanceof Error?F.message:String(F)),F}finally{Y.close()}}async function BZ($,Z={}){let Q=cV(Z.config),W=Z.requestTimeoutMs??mV,J=$.metadata?.mode,X=J==="internal"||J==="external"?J:vV(Z.mode),Y=X==="external"?Q.external:Q.internal,j=await dV(Y.idcsUrl,W),V=new URLSearchParams({grant_type:"refresh_token",refresh_token:$.refresh,client_id:Y.clientId}),H=await fetch(j,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:V,signal:AbortSignal.timeout(W)}),B=await H.json();if(!H.ok){let G=lV(B);throw new HZ(`Token refresh failed: ${H.status}${G.message?` - ${G.message}`:""}`,{status:H.status,errorCode:G.code})}return uV(B,X,$)}async function J6($,Z,Q){if(!$)return null;let W=Z?.refreshBufferMs??Q?.refreshBufferMs??lz,J=Z?.retryableTokenGraceMs??Q?.retryableTokenGraceMs??pz;if(Z?.forceRefresh!==!0&&!F8($,W))return $;try{return await BZ($,Q)}catch(Y){if(Y instanceof HZ&&Y.isLikelyInvalidGrant())return V$(Q?.telemetry,"oca","invalid_grant"),null;if($.expires-Date.now()>J)return $;return null}}var GZ="workos:";function $T($){let Z=$.trim();return Z.toLowerCase().startsWith(GZ)?Z:`${GZ}${Z}`}function ZT($){let Z=$.trim();return Z.toLowerCase().startsWith(GZ)?Z.slice(GZ.length):Z}function QT($){let Q=E0($)?.exp;if(typeof Q==="number"&&Q>0)return Q*1000;return null}function WT($,Z){let Q=$.auth?.expiresAt;if(typeof Q==="number"&&Number.isFinite(Q)&&Q>0)return Q;let W=QT(Z);if(W)return W;return Date.now()-1}function JT($,Z){let Q=$.auth?.accessToken?.trim(),W=$.auth?.refreshToken?.trim();if(!Q||!W)return null;let J=Z?.normalizeAccessToken?.(Q)??Q;if(!J)return null;return{access:J,refresh:W,expires:WT($,J),accountId:$.auth?.accountId}}function XT($){let Z=$.formatAccessToken?.($.credentials.access)??$.credentials.access,Q={...$.settings?.auth??{},accessToken:Z,refreshToken:$.credentials.refresh,accountId:$.credentials.accountId,expiresAt:$.credentials.expires},W={...$.settings??{provider:$.storageProviderId},provider:$.storageProviderId,auth:Q};if($.save!==!1)$.manager.saveProviderSettings(W,{...$.setLastUsed===void 0?{}:{setLastUsed:$.setLastUsed},tokenSource:"oauth"});return W}function iW($){let Z=$.storageProviderId??$.providerId;return{providerId:$.providerId,storageProviderId:Z,getApiKey(Q){let W=Q?.auth?.accessToken?.trim();if(W)return $.formatAccessToken?.(W)??W;return Q?.apiKey?.trim()||Q?.auth?.apiKey?.trim()||void 0},login:$.login,refresh:$.refresh,saveCredentials(Q){return XT({...Q,storageProviderId:Z,formatAccessToken:$.formatAccessToken})},isConfigured(Q){return!!Q?.auth?.accessToken},normalizeStoredAccessToken:$.normalizeStoredAccessToken}}function iV($){return iW({providerId:$.providerId,storageProviderId:$.storageProviderId,formatAccessToken:$T,normalizeStoredAccessToken:ZT,login:({settings:Z,callbacks:Q,telemetry:W})=>t4({apiBaseUrl:Z?.baseUrl?.trim()||rV().apiBaseUrl,useWorkOSDeviceAuth:!0,callbacks:Q,telemetry:W}),refresh:({settings:Z,credentials:Q,forceRefresh:W,telemetry:J})=>e4(Q,{apiBaseUrl:Z.baseUrl?.trim()||rV().apiBaseUrl,telemetry:J},{forceRefresh:W})})}var YT=[iV({providerId:"cline"}),iV({providerId:"cline-pass",storageProviderId:"cline"}),iW({providerId:"oca",login:({settings:$,callbacks:Z,telemetry:Q})=>W6({mode:$?.oca?.mode,callbacks:Z,telemetry:Q}),refresh:({settings:$,credentials:Z,forceRefresh:Q,telemetry:W})=>J6(Z,{forceRefresh:Q,telemetry:W},{mode:$.oca?.mode,telemetry:W})}),iW({providerId:"openai-codex",login:({callbacks:$,telemetry:Z})=>$6({onAuth:$.onAuth,onPrompt:$.onPrompt,onProgress:$.onProgress,onManualCodeInput:$.onManualCodeInput,telemetry:Z}),refresh:({credentials:$,forceRefresh:Z,telemetry:Q})=>Z6($,{forceRefresh:Z,telemetry:Q})})],jT=new Map(YT.map(($)=>[$.providerId,$]));function j0($){return jT.get($.trim().toLowerCase())}function Z2($){return j0($)!==void 0}function nW($){return j0($)?.storageProviderId}function aW($,Z){let Q=j0(Z),W=Q?.storageProviderId??Z,J=$.getProviderSettings(W);return Q?.getApiKey(J)??U8(Z,J)}async function X6($,Z,Q){let W=j0(Z);if(!W)throw Error(`Provider "${Z}" does not support OAuth login`);let J=$.getProviderSettings(W.storageProviderId),X=await W.login({settings:J,callbacks:Q.callbacks,telemetry:Q.telemetry});return W.saveCredentials({manager:$,settings:J,credentials:X})}function Y6($,Z){let Q=j0($);if(!Q)return null;return JT(Z,{normalizeAccessToken:Q.normalizeStoredAccessToken})}function Q2($){let Z=j0($.providerId);if(!Z)throw Error(`Provider "${$.providerId}" does not support OAuth credentials`);return Z.saveCredentials({manager:$.manager,settings:$.settings,credentials:$.credentials,setLastUsed:$.setLastUsed,save:$.save})}function U8($,Z){let Q=j0($);if(Q)return Q.getApiKey(Z);return Z?.auth?.accessToken?.trim()||Z?.apiKey?.trim()||Z?.auth?.apiKey?.trim()||void 0}function sW($,Z){let Q=j0($);if(!Q)return Z.access;return Q.getApiKey({provider:Q.storageProviderId,auth:{accessToken:Z.access}})??Z.access}_0();var TH={};N(TH,{createContextCompactionPrepareTurn:()=>F6});import{createHandlerAsync as KT}from"@cline/llms";import{CHARS_PER_TOKEN as sv,estimateTokens as oW}from"@cline/shared";var oV=200000,tV=0.9,KZ=0.7,eV=16384,tW=20000,aV=1024,sV=2000,$H=2000,ZH=8;function H6($,Z){if($.length<=Z)return $;return`${$.slice(0,Z)}
320
- ...[truncated ${$.length-Z} chars]`}function VT($){let Z=eW($);if(typeof Z==="string")return Z;return Z.map((Q)=>{switch(Q.type){case"text":return Q.text;case"file":return`<file path="${Q.path}">
319
+ </html>`;function qV($){let Z="";for(let Q=0;Q<$.length;Q+=1)Z+=String.fromCharCode($[Q]??0);return btoa(Z).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}async function wz($){let Q=new TextEncoder().encode($),W=await crypto.subtle.digest("SHA-256",Q);return new Uint8Array(W)}function Cz($=32){let Z=new Uint8Array($);return crypto.getRandomValues(Z),qV(Z)}async function ZZ(){let $=Cz(),Z=qV(await wz($));return{verifier:$,challenge:Z}}function QZ($){return $.endsWith("/")?$.slice(0,-1):$}function Z2($,Z){return new URL(Z,`${QZ($)}/`).toString()}function G8($,Z={}){let Q=$.trim();if(!Q)return{};try{let W=new URL(Q);return{code:W.searchParams.get("code")??void 0,state:W.searchParams.get("state")??void 0,provider:Z.includeProvider?W.searchParams.get("provider")??void 0:void 0}}catch{}if(Z.allowHashCodeState&&Q.includes("#")){let[W,J]=Q.split("#",2);return{code:W||void 0,state:J||void 0}}if(Q.includes("code=")){let W=new URLSearchParams(Q);return{code:W.get("code")??void 0,state:W.get("state")??void 0,provider:Z.includeProvider?W.get("provider")??void 0:void 0}}return{code:Q}}function Pz($){if(typeof atob==="function")try{return atob($)}catch{return null}if(typeof Buffer<"u")try{return Buffer.from($,"base64").toString("utf8")}catch{return null}return null}function E0($){if(!$)return null;try{let Z=$.split(".");if(Z.length!==3)return null;let Q=Z[1];if(!Q)return null;let W=Q.replace(/-/g,"+").replace(/_/g,"/"),J=W.padEnd(W.length+(4-W.length%4)%4,"="),X=Pz(J);if(!X)return null;return JSON.parse(X)}catch{return null}}function K8($){try{let Z=JSON.parse($),Q=Z.error,W=typeof Q==="string"?Q:Q&&typeof Q==="object"&&typeof Q.type==="string"?Q.type:void 0,J=typeof Z.error_description==="string"?Z.error_description:typeof Z.message==="string"?Z.message:Q&&typeof Q==="object"&&typeof Q.message==="string"?Q.message:void 0;return{code:W,message:J}}catch{return{}}}function F8($,Z){return Date.now()>=$.expires-Z}async function A8($){if(!$.onManualCodeInput){let X=await $.waitForCallback();return{code:X?.code,state:X?.state,provider:X?.provider,error:X?.error}}let Z,Q,W=$.onManualCodeInput().then((X)=>{Z=X,$.cancelWait()}).catch((X)=>{Q=X instanceof Error?X:Error(String(X)),$.cancelWait()}),J=await $.waitForCallback();if(Q)throw Q;if(J?.code||J?.error)return{code:J.code,state:J.state,provider:J.provider,error:J.error};if(Z)return G8(Z,$.parseOptions);if(await W,Q)throw Q;if(Z)return G8(Z,$.parseOptions);return{}}var WZ={authorize:"/api/v1/auth/authorize",token:"/api/v1/auth/token",register:"/api/v1/auth/register",refresh:"/api/v1/auth/refresh"},NV={deviceAuthorization:"/user_management/authorize/device",authenticate:"/user_management/authenticate"},vW="https://api.workos.com",Sz="/auth",MV=Array.from({length:11},($,Z)=>48801+Z),bz=300000,yz=30000,f8=30000,hz=300,kz=5;class K$ extends Error{status;errorCode;constructor($,Z){super($);this.name="ClineOAuthTokenError",this.status=Z?.status,this.errorCode=Z?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant|invalid_token|unauthorized/i.test(this.errorCode))return!0;if(this.status===400||this.status===401||this.status===403)return/invalid|expired|revoked|unauthorized/i.test(this.message);return!1}}function Iz($){let Z=Date.parse($);if(Number.isNaN(Z))throw Error(`Invalid expiresAt value: ${$}`);return Z}function cW($,Z,Q={}){let W=$.userInfo.clineUserId??Q.accountId,J=$.refreshToken??Q.refresh;if(!J)throw Error("Token response did not include a refresh token");return{access:$.accessToken,refresh:J,expires:Iz($.expiresAt),accountId:W??void 0,email:$.userInfo.email||Q.email,metadata:{provider:Z,tokenType:$.tokenType,userInfo:$.userInfo}}}async function uW($){if(!$)return{};return typeof $==="function"?await $():$}function RV($,Z){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return Z;return Math.floor($)}async function EV($){await new Promise((Z)=>setTimeout(Z,$))}function dW($,Z){if(!$.success||!$.data?.accessToken)throw Error(Z);return $.data}async function wV($,Z){let Q=await fetch(Z2(vW,NV.deviceAuthorization),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({client_id:$}),signal:AbortSignal.timeout(Z?.requestTimeoutMs??f8)}),W=await Q.json().catch(()=>({}));if(!Q.ok)throw new K$(`Device authorization failed: ${Q.status}${W.error_description?` - ${W.error_description}`:""}`,{status:Q.status,errorCode:W.error});if(!W.device_code||!W.user_code||!W.verification_uri)throw Error("Invalid WorkOS device authorization response");return{deviceCode:W.device_code,userCode:W.user_code,verificationUri:W.verification_uri,verificationUriComplete:W.verification_uri_complete,expiresInSeconds:RV(W.expires_in,hz),pollIntervalSeconds:RV(W.interval,kz)}}async function CV($){let Z=Date.now()+$.expiresInSeconds*1000,Q=Math.max(1,$.initialPollIntervalSeconds);while(Date.now()<=Z){let W=await fetch(Z2($.workosApiBaseUrl,NV.authenticate),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"urn:ietf:params:oauth:grant-type:device_code",device_code:$.deviceCode,client_id:$.clientId}),signal:AbortSignal.timeout($.requestTimeoutMs)}),J=await W.json().catch(()=>({}));if(W.ok){if(!J.access_token||!J.refresh_token)throw Error("Invalid WorkOS token response");return{accessToken:J.access_token,refreshToken:J.refresh_token,tokenType:J.token_type??"Bearer"}}switch(J.error){case"authorization_pending":{await EV(Q*1000);break}case"slow_down":{Q+=1,await EV(Q*1000);break}case"access_denied":case"expired_token":case"invalid_grant":throw new K$(J.error_description||"WorkOS authorization failed",{status:W.status,errorCode:J.error});default:throw new K$(`WorkOS token polling failed: ${W.status}${J.error_description?` - ${J.error_description}`:""}`,{status:W.status,errorCode:J.error})}$.onProgress?.("Waiting for browser authentication confirmation...")}throw Error("WorkOS device authorization timed out")}async function PV($,Z,Q){let W={accessToken:$.accessToken,refreshToken:$.refreshToken},J=await fetch(Z2(Z.apiBaseUrl,WZ.register),{method:"POST",headers:{"Content-Type":"application/json",...await uW(Z.headers)},body:JSON.stringify(W),signal:AbortSignal.timeout(Z.requestTimeoutMs??f8)});if(!J.ok){let Y=await J.text().catch(()=>""),j=K8(Y);throw new K$(`Token registration failed: ${J.status}${j.message?` - ${j.message}`:""}`,{status:J.status,errorCode:j.code})}let X=await J.json();return cW(dW(X,"Invalid token exchange response"),Q??Z.provider)}async function xz($,Z,Q,W){let J={grant_type:"authorization_code",code:$,client_type:"extension",redirect_uri:Z,provider:W??Q.provider},X=await fetch(Z2(Q.apiBaseUrl,WZ.token),{method:"POST",headers:{"Content-Type":"application/json",...await uW(Q.headers)},body:JSON.stringify(J),signal:AbortSignal.timeout(Q.requestTimeoutMs??f8)});if(!X.ok){let j=await X.text().catch(()=>""),V=K8(j);throw new K$(`Token exchange failed: ${X.status}${V.message?` - ${V.message}`:""}`,{status:X.status,errorCode:V.code})}let Y=await X.json();return cW(dW(Y,"Invalid token exchange response"),W??Q.provider)}async function t4($){C1($.telemetry,$.provider??"cline");let Z=$.useWorkOSDeviceAuth??!0,Q=$.callbackPorts?.length?$.callbackPorts:MV,W=$.callbackPath??Sz,J=Z?null:await J1({ports:Q,callbackPath:W,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),X=J?.callbackUrl||`http://127.0.0.1:${Q[0]??MV[0]}${W}`;try{let Y;if(Z){let j=mW().workOsClientId,V=await wV(j,$);$.callbacks.onAuth({url:V.verificationUriComplete??V.verificationUri,instructions:`Enter this code in your browser: ${V.userCode}`});let H=await CV({clientId:j,deviceCode:V.deviceCode,expiresInSeconds:V.expiresInSeconds,initialPollIntervalSeconds:V.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??f8,workosApiBaseUrl:vW,onProgress:$.callbacks.onProgress});Y=await PV(H,$,$.provider)}else{let j=new URL(Z2($.apiBaseUrl,WZ.authorize));j.searchParams.set("client_type","extension"),j.searchParams.set("callback_url",X),j.searchParams.set("redirect_uri",X),$.callbacks.onAuth({url:j.toString(),instructions:"Continue the authentication process in your browser."});let V,H=$.provider,B=await A8({waitForCallback:J?.waitForCallback??(async()=>null),cancelWait:J?.cancelWait??(()=>{}),onManualCodeInput:$.callbacks.onManualCodeInput,parseOptions:{includeProvider:!0}});if(B.error)throw Error(`OAuth error: ${B.error}`);if(V=B.code,H=B.provider??H,!V){let G=await $.callbacks.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),K=G8(G,{includeProvider:!0});V=K.code,H=K.provider??H}if(!V)throw Error("Missing authorization code");Y=await xz(V,X,$,H)}return P1($.telemetry,$.provider??"cline"),b1($.telemetry,{id:Y.accountId,email:Y.email,provider:$.provider??"cline"}),Y}catch(Y){throw S1($.telemetry,$.provider??"cline",Y instanceof Error?Y.message:String(Y)),Y}finally{J?.close()}}async function lW($){return await wV(mW().workOsClientId,$)}async function pW($){let Z=$.provider??"cline";C1($.telemetry,Z);try{let Q=await CV({clientId:mW().workOsClientId,deviceCode:$.deviceCode,expiresInSeconds:$.expiresInSeconds,initialPollIntervalSeconds:$.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??f8,workosApiBaseUrl:vW}),W=await PV(Q,{apiBaseUrl:$.apiBaseUrl,headers:$.headers,requestTimeoutMs:$.requestTimeoutMs,provider:$.provider},$.provider);return P1($.telemetry,Z),b1($.telemetry,{id:W.accountId,email:W.email,provider:Z}),W}catch(Q){throw S1($.telemetry,Z,Q instanceof Error?Q.message:String(Q)),Q}}async function JZ($,Z){let Q=await fetch(Z2(Z.apiBaseUrl,WZ.refresh),{method:"POST",headers:{"Content-Type":"application/json",...await uW(Z.headers)},body:JSON.stringify({refreshToken:$.refresh,grantType:"refresh_token"}),signal:AbortSignal.timeout(Z.requestTimeoutMs??f8)});if(!Q.ok){let X=await Q.text().catch(()=>""),Y=K8(X);throw new K$(`Token refresh failed: ${Q.status}${Y.message?` - ${Y.message}`:""}`,{status:Q.status,errorCode:Y.code})}let W=await Q.json(),J=$.metadata?.provider??Z.provider;return cW(dW(W,"Invalid token refresh response"),J,$)}async function e4($,Z,Q){if(!$)return null;let W=Q?.refreshBufferMs??bz,J=Q?.retryableTokenGraceMs??yz;if(Q?.forceRefresh!==!0&&!F8($,W))return $;try{return await JZ($,Z)}catch(Y){if(Y instanceof K$&&Y.isLikelyInvalidGrant())return V$(Z.telemetry,Z.provider??"cline","invalid_grant"),null;if($.expires-Date.now()>J)return $;return null}}_0();var yV={};N(yV,{refreshOpenAICodexToken:()=>YZ,loginOpenAICodex:()=>$6,getValidOpenAICodexCredentials:()=>Z6,OPENAI_CODEX_OAUTH_CONFIG:()=>X0});import{nanoid as gz}from"nanoid";var X0={authorizationEndpoint:"https://auth.openai.com/oauth/authorize",tokenEndpoint:"https://auth.openai.com/oauth/token",clientId:"app_EMoamEEZ73f0CkXaXp7hrann",redirectUri:"http://localhost:1455/auth/callback",scopes:"openid profile email offline_access",callbackPort:1455,jwtClaimPath:"https://api.openai.com/auth",refreshBufferMs:300000,retryableTokenGraceMs:30000,httpTimeoutMs:30000};class XZ extends Error{status;errorCode;constructor($,Z){super($);this.name="OpenAICodexOAuthTokenError",this.status=Z?.status,this.errorCode=Z?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant/i.test(this.errorCode))return!0;if(this.status===400||this.status===401||this.status===403)return/invalid_grant|revoked|expired|invalid refresh/i.test(this.message);return!1}}async function mz($,Z,Q=X0.redirectUri){let W=await fetch(X0.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"authorization_code",client_id:X0.clientId,code:$,code_verifier:Z,redirect_uri:Q}),signal:AbortSignal.timeout(X0.httpTimeoutMs)});if(!W.ok)return{type:"failed"};let J=await W.json();if(!J.access_token||!J.refresh_token||typeof J.expires_in!=="number")return{type:"failed"};return{type:"success",access:J.access_token,refresh:J.refresh_token,expires:Date.now()+J.expires_in*1000,email:J.email,idToken:J.id_token}}async function vz($){try{let Z=await fetch(X0.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:$,client_id:X0.clientId}),signal:AbortSignal.timeout(X0.httpTimeoutMs)});if(!Z.ok){let W=await Z.text().catch(()=>""),J=K8(W);throw new XZ(`Token refresh failed: ${Z.status}${J.message?` - ${J.message}`:""}`,{status:Z.status,errorCode:J.code})}let Q=await Z.json();if(!Q.access_token||!Q.refresh_token||typeof Q.expires_in!=="number")return{type:"failed"};return{type:"success",access:Q.access_token,refresh:Q.refresh_token,expires:Date.now()+Q.expires_in*1000,email:Q.email,idToken:Q.id_token}}catch(Z){if(Z instanceof XZ)throw Z;return{type:"failed"}}}async function cz($="pi"){let{verifier:Z,challenge:Q}=await ZZ(),W=gz(32),J=new URL(X0.authorizationEndpoint);return J.searchParams.set("response_type","code"),J.searchParams.set("client_id",X0.clientId),J.searchParams.set("redirect_uri",X0.redirectUri),J.searchParams.set("scope",X0.scopes),J.searchParams.set("code_challenge",Q),J.searchParams.set("code_challenge_method","S256"),J.searchParams.set("state",W),J.searchParams.set("id_token_add_organizations","true"),J.searchParams.set("codex_cli_simplified_flow","true"),J.searchParams.set("originator",$),{verifier:Z,state:W,url:J.toString()}}function uz(){try{let $=new URL(X0.redirectUri),Z=$.port.length>0?Number.parseInt($.port,10):X0.callbackPort;return{host:$.hostname||"localhost",port:Number.isFinite(Z)?Z:X0.callbackPort,callbackPath:$.pathname||"/auth/callback",redirectUri:$.toString()}}catch{return{host:"localhost",port:X0.callbackPort,callbackPath:"/auth/callback",redirectUri:X0.redirectUri}}}function dz($,Z){let Q=Z?E0(Z):E0($),W=Q?Q:E0($),X=W?.[X0.jwtClaimPath]?.chatgpt_account_id;if(typeof X==="string"&&X.length>0)return X;let Y=W?.organizations;if(Array.isArray(Y)&&Y.length>0){let V=Y[0];if(typeof V?.id==="string"&&V.id.length>0)return V.id}let j=W?.chatgpt_account_id;if(typeof j==="string"&&j.length>0)return j;return null}function bV($,Z){let Q=dz($.access,$.idToken)??Z?.accountId;if(!Q)throw Error("Failed to extract accountId from token");return{access:$.access,refresh:$.refresh||Z?.refresh||"",expires:$.expires,accountId:Q,email:$.email??Z?.email,metadata:{...Z?.metadata??{},provider:"openai-codex"}}}async function $6($){C1($.telemetry,"openai-codex");let Z=uz(),{verifier:Q,state:W,url:J}=await cz($.originator),X=await J1({host:Z.host,ports:[Z.port],callbackPath:Z.callbackPath,expectedState:W});$.onAuth({url:J,instructions:"Continue the authentication process in your browser."});let Y;try{let j=await A8({waitForCallback:X.waitForCallback,cancelWait:X.cancelWait,onManualCodeInput:$.onManualCodeInput,parseOptions:{allowHashCodeState:!0}});if(j.state&&j.state!==W)throw Error("State mismatch");if(Y=j.code,!Y){let B=await $.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),G=G8(B,{allowHashCodeState:!0});if(G.state&&G.state!==W)throw Error("State mismatch");Y=G.code}if(!Y)throw Error("Missing authorization code");let V=await mz(Y,Q,Z.redirectUri);if(V.type!=="success")throw Error("Token exchange failed");let H=bV(V);return P1($.telemetry,"openai-codex"),b1($.telemetry,{id:H.accountId,email:H.email,provider:"openai-codex"}),H}catch(j){throw S1($.telemetry,"openai-codex",j instanceof Error?j.message:String(j)),j}finally{X.close()}}async function YZ($,Z){let Q=await vz($);if(Q.type!=="success")throw Error("Failed to refresh OpenAI Codex token");let W=bV(Q,Z);if(!W.refresh)throw Error("Failed to refresh OpenAI Codex token: missing refresh token");return W}async function Z6($,Z){if(!$)return null;let Q=Z?.refreshBufferMs??X0.refreshBufferMs,W=Z?.retryableTokenGraceMs??X0.retryableTokenGraceMs;if(Z?.forceRefresh!==!0&&!F8($,Q))return $;try{return await YZ($.refresh,$)}catch(X){if(X instanceof XZ&&X.isLikelyInvalidGrant())return V$(Z?.telemetry,"openai-codex","invalid_grant"),null;if($.expires-Date.now()>W)return $;return null}}_0();var iV={};N(iV,{refreshOcaToken:()=>BZ,loginOcaOAuth:()=>W6,getValidOcaCredentials:()=>J6,OCI_HEADER_OPC_REQUEST_ID:()=>lz,DEFAULT_INTERNAL_OCA_BASE_URL:()=>jZ,DEFAULT_INTERNAL_IDCS_URL:()=>IV,DEFAULT_INTERNAL_IDCS_SCOPES:()=>xV,DEFAULT_INTERNAL_IDCS_CLIENT_ID:()=>kV,DEFAULT_EXTERNAL_OCA_BASE_URL:()=>VZ,DEFAULT_EXTERNAL_IDCS_URL:()=>mV,DEFAULT_EXTERNAL_IDCS_SCOPES:()=>vV,DEFAULT_EXTERNAL_IDCS_CLIENT_ID:()=>gV});import{nanoid as hV}from"nanoid";class rW{ttlMs;maxEntries;entries=new Map;constructor($,Z){this.ttlMs=$;this.maxEntries=Z}get($,Z=Date.now()){this.pruneExpired(Z);let Q=this.entries.get($);if(!Q)return;return this.entries.delete($),this.entries.set($,Q),Q.value}set($,Z,Q=Date.now(),W=this.ttlMs){this.pruneExpired(Q),this.entries.delete($);while(this.entries.size>=this.maxEntries){let J=this.entries.keys().next().value;if(J===void 0)break;this.entries.delete(J)}this.entries.set($,{value:Z,expiresAt:Q+W})}pruneExpired($){for(let[Z,Q]of this.entries)if(Q.expiresAt<=$)this.entries.delete(Z)}}var kV="a8331954c0cf48ba99b5dd223a14c6ea",IV="https://idcs-9dc693e80d9b469480d7afe00e743931.identity.oraclecloud.com",xV="openid offline_access",jZ="https://code-internal.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",gV="c1aba3deed5740659981a752714eba33",mV="https://login-ext.identity.oraclecloud.com",vV="openid offline_access",VZ="https://code.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",lz="opc-request-id",pz="/auth/oca",rz=Array.from({length:11},($,Z)=>48801+Z),iz=300000,nz=30000,cV=30000,az=600000;class HZ extends Error{status;errorCode;constructor($,Z){super($);this.name="OcaOAuthTokenError",this.status=Z?.status,this.errorCode=Z?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant|invalid_token|unauthorized/i.test(this.errorCode))return!0;return this.status===400||this.status===401||this.status===403}}var F$={internal:{clientId:kV,idcsUrl:IV,scopes:xV,baseUrl:jZ},external:{clientId:gV,idcsUrl:mV,scopes:vV,baseUrl:VZ}},Q6=new Map,sz=86400000,oz=300000,tz=32,iW=new rW(sz,tz);function uV($){if(typeof $==="function")return $();return $??"internal"}function dV($){return{internal:{clientId:$?.internal?.clientId??F$.internal.clientId,idcsUrl:$?.internal?.idcsUrl??F$.internal.idcsUrl,scopes:$?.internal?.scopes??F$.internal.scopes,baseUrl:$?.internal?.baseUrl??F$.internal.baseUrl},external:{clientId:$?.external?.clientId??F$.external.clientId,idcsUrl:$?.external?.idcsUrl??F$.external.idcsUrl,scopes:$?.external?.scopes??F$.external.scopes,baseUrl:$?.external?.baseUrl??F$.external.baseUrl}}}function ez($=Date.now()){let Z=$-az;for(let[Q,W]of Q6.entries())if(W.createdAt<Z)Q6.delete(Q)}function $T($,Z,Q){if(typeof $.expires_in==="number"&&$.expires_in>0)return Date.now()+$.expires_in*1000;let J=E0(Z)?.exp;if(typeof J==="number"&&J>0)return J*1000;let Y=E0(Q)?.exp;if(typeof Y==="number"&&Y>0)return Y*1000;return Date.now()+3600000}function lV($,Z,Q){let W=$.access_token;if(!W)throw Error("Token response did not include an access token");let J=$.refresh_token??Q?.refresh;if(!J)throw Error("Token response did not include a refresh token");let X=E0($.id_token),Y=E0(W),j=X?.sub??Y?.sub,V=X?.email??Y?.email;return{access:W,refresh:J,expires:$T($,W,$.id_token),accountId:j??Q?.accountId,email:V??Q?.email,metadata:{...Q?.metadata??{},provider:"oca",mode:Z,subject:j,idToken:$.id_token}}}async function pV($,Z){let Q=QZ($),W=iW.get(Q);if(W)return W;let J=`${Q}/.well-known/openid-configuration`,X=await fetch(J,{method:"GET",signal:AbortSignal.timeout(Z)});if(!X.ok){let V=`${Q}/oauth2/v1/token`;return iW.set(Q,V,Date.now(),oz),V}let j=(await X.json()).token_endpoint||`${Q}/oauth2/v1/token`;return iW.set(Q,j),j}function rV($){return{code:$.error,message:$.error_description}}async function ZT($){let Z=Q6.get($.state);if(!Z)throw Error("No PKCE verifier found for this state");Q6.delete($.state);let Q=$.mode==="external"?$.config.external:$.config.internal,W=await pV(Q.idcsUrl,$.requestTimeoutMs),J=new URLSearchParams({grant_type:"authorization_code",code:$.code,redirect_uri:Z.redirectUri,client_id:Q.clientId,code_verifier:Z.verifier}),X=await fetch(W,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:J,signal:AbortSignal.timeout($.requestTimeoutMs)}),Y=await X.json();if(!X.ok){let V=rV(Y);throw new HZ(`Token exchange failed: ${X.status}${V.message?` - ${V.message}`:""}`,{status:X.status,errorCode:V.code})}let j=E0(Y.id_token);if(!Y.id_token||!j)throw Error("No ID token received from OCA");if(j.nonce!==Z.nonce)throw Error("OIDC nonce verification failed");return lV(Y,$.mode)}function QT($){let Z=$.mode==="external"?$.config.external:$.config.internal,Q=new URL(`${QZ(Z.idcsUrl)}/oauth2/v1/authorize`);return Q.searchParams.set("client_id",Z.clientId),Q.searchParams.set("response_type","code"),Q.searchParams.set("scope",Z.scopes),Q.searchParams.set("code_challenge",$.challenge),Q.searchParams.set("code_challenge_method","S256"),Q.searchParams.set("redirect_uri",$.callbackUrl),Q.searchParams.set("state",$.state),Q.searchParams.set("nonce",$.nonce),Q.toString()}async function W6($){C1($.telemetry,"oca");let Z=dV($.config),Q=uV($.mode),W=$.callbackPorts?.length?$.callbackPorts:rz,J=$.callbackPath??pz,X=$.requestTimeoutMs??cV,Y=await J1({ports:W,callbackPath:J,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),j=Y.callbackUrl;if(!j)throw Error("Unable to bind local OAuth callback server");let V=hV(16),H=hV(16),{verifier:B,challenge:G}=await ZZ();ez(),Q6.set(V,{verifier:B,nonce:H,mode:Q,redirectUri:j,createdAt:Date.now()});let K=QT({callbackUrl:j,mode:Q,state:V,nonce:H,challenge:G,config:Z});$.callbacks.onAuth({url:K,instructions:"Continue the authentication process in your browser."});try{let F=await A8({waitForCallback:Y.waitForCallback,cancelWait:Y.cancelWait,onManualCodeInput:$.callbacks.onManualCodeInput}),A=F.code,L=F.state;if(F.error)throw Error(`OAuth error: ${F.error}`);if(!A){if(!$.callbacks.onManualCodeInput)throw Error("Timed out waiting for OCA callback");throw Error("Missing authorization code")}if(!L||L!==V)throw Error("State mismatch");let f=await ZT({code:A,state:L,mode:Q,config:Z,requestTimeoutMs:X});return P1($.telemetry,"oca"),b1($.telemetry,{id:f.accountId,email:f.email,provider:"oca"}),f}catch(F){throw S1($.telemetry,"oca",F instanceof Error?F.message:String(F)),F}finally{Y.close()}}async function BZ($,Z={}){let Q=dV(Z.config),W=Z.requestTimeoutMs??cV,J=$.metadata?.mode,X=J==="internal"||J==="external"?J:uV(Z.mode),Y=X==="external"?Q.external:Q.internal,j=await pV(Y.idcsUrl,W),V=new URLSearchParams({grant_type:"refresh_token",refresh_token:$.refresh,client_id:Y.clientId}),H=await fetch(j,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:V,signal:AbortSignal.timeout(W)}),B=await H.json();if(!H.ok){let G=rV(B);throw new HZ(`Token refresh failed: ${H.status}${G.message?` - ${G.message}`:""}`,{status:H.status,errorCode:G.code})}return lV(B,X,$)}async function J6($,Z,Q){if(!$)return null;let W=Z?.refreshBufferMs??Q?.refreshBufferMs??iz,J=Z?.retryableTokenGraceMs??Q?.retryableTokenGraceMs??nz;if(Z?.forceRefresh!==!0&&!F8($,W))return $;try{return await BZ($,Q)}catch(Y){if(Y instanceof HZ&&Y.isLikelyInvalidGrant())return V$(Q?.telemetry,"oca","invalid_grant"),null;if($.expires-Date.now()>J)return $;return null}}var GZ="workos:";function WT($){let Z=$.trim();return Z.toLowerCase().startsWith(GZ)?Z:`${GZ}${Z}`}function JT($){let Z=$.trim();return Z.toLowerCase().startsWith(GZ)?Z.slice(GZ.length):Z}function XT($){let Q=E0($)?.exp;if(typeof Q==="number"&&Q>0)return Q*1000;return null}function YT($,Z){let Q=$.auth?.expiresAt;if(typeof Q==="number"&&Number.isFinite(Q)&&Q>0)return Q;let W=XT(Z);if(W)return W;return Date.now()-1}function jT($,Z){let Q=$.auth?.accessToken?.trim(),W=$.auth?.refreshToken?.trim();if(!Q||!W)return null;let J=Z?.normalizeAccessToken?.(Q)??Q;if(!J)return null;return{access:J,refresh:W,expires:YT($,J),accountId:$.auth?.accountId}}function VT($){let Z=$.formatAccessToken?.($.credentials.access)??$.credentials.access,Q={...$.settings?.auth??{},accessToken:Z,refreshToken:$.credentials.refresh,accountId:$.credentials.accountId,expiresAt:$.credentials.expires},W={...$.settings??{provider:$.storageProviderId},provider:$.storageProviderId,auth:Q};if($.save!==!1)$.manager.saveProviderSettings(W,{...$.setLastUsed===void 0?{}:{setLastUsed:$.setLastUsed},tokenSource:"oauth"});return W}function nW($){let Z=$.storageProviderId??$.providerId;return{providerId:$.providerId,storageProviderId:Z,getApiKey(Q){let W=Q?.auth?.accessToken?.trim();if(W)return $.formatAccessToken?.(W)??W;return Q?.apiKey?.trim()||Q?.auth?.apiKey?.trim()||void 0},login:$.login,refresh:$.refresh,saveCredentials(Q){return VT({...Q,storageProviderId:Z,formatAccessToken:$.formatAccessToken})},isConfigured(Q){return!!Q?.auth?.accessToken},normalizeStoredAccessToken:$.normalizeStoredAccessToken}}function aV($){return nW({providerId:$.providerId,storageProviderId:$.storageProviderId,formatAccessToken:WT,normalizeStoredAccessToken:JT,login:({settings:Z,callbacks:Q,telemetry:W})=>t4({apiBaseUrl:Z?.baseUrl?.trim()||nV().apiBaseUrl,useWorkOSDeviceAuth:!0,callbacks:Q,telemetry:W}),refresh:({settings:Z,credentials:Q,forceRefresh:W,telemetry:J})=>e4(Q,{apiBaseUrl:Z.baseUrl?.trim()||nV().apiBaseUrl,telemetry:J},{forceRefresh:W})})}var HT=[aV({providerId:"cline"}),aV({providerId:"cline-pass",storageProviderId:"cline"}),nW({providerId:"oca",login:({settings:$,callbacks:Z,telemetry:Q})=>W6({mode:$?.oca?.mode,callbacks:Z,telemetry:Q}),refresh:({settings:$,credentials:Z,forceRefresh:Q,telemetry:W})=>J6(Z,{forceRefresh:Q,telemetry:W},{mode:$.oca?.mode,telemetry:W})}),nW({providerId:"openai-codex",login:({callbacks:$,telemetry:Z})=>$6({onAuth:$.onAuth,onPrompt:$.onPrompt,onProgress:$.onProgress,onManualCodeInput:$.onManualCodeInput,telemetry:Z}),refresh:({credentials:$,forceRefresh:Z,telemetry:Q})=>Z6($,{forceRefresh:Z,telemetry:Q})})],BT=new Map(HT.map(($)=>[$.providerId,$]));function j0($){return BT.get($.trim().toLowerCase())}function Q2($){return j0($)!==void 0}function aW($){return j0($)?.storageProviderId}function sW($,Z){let Q=j0(Z),W=Q?.storageProviderId??Z,J=$.getProviderSettings(W);return Q?.getApiKey(J)??U8(Z,J)}async function X6($,Z,Q){let W=j0(Z);if(!W)throw Error(`Provider "${Z}" does not support OAuth login`);let J=$.getProviderSettings(W.storageProviderId),X=await W.login({settings:J,callbacks:Q.callbacks,telemetry:Q.telemetry});return W.saveCredentials({manager:$,settings:J,credentials:X})}function Y6($,Z){let Q=j0($);if(!Q)return null;return jT(Z,{normalizeAccessToken:Q.normalizeStoredAccessToken})}function W2($){let Z=j0($.providerId);if(!Z)throw Error(`Provider "${$.providerId}" does not support OAuth credentials`);return Z.saveCredentials({manager:$.manager,settings:$.settings,credentials:$.credentials,setLastUsed:$.setLastUsed,save:$.save})}function U8($,Z){let Q=j0($);if(Q)return Q.getApiKey(Z);return Z?.auth?.accessToken?.trim()||Z?.apiKey?.trim()||Z?.auth?.apiKey?.trim()||void 0}function oW($,Z){let Q=j0($);if(!Q)return Z.access;return Q.getApiKey({provider:Q.storageProviderId,auth:{accessToken:Z.access}})??Z.access}_0();var qH={};N(qH,{createContextCompactionPrepareTurn:()=>F6});import{createHandlerAsync as fT}from"@cline/llms";import{CHARS_PER_TOKEN as $c,estimateTokens as tW}from"@cline/shared";var eV=200000,$H=0.9,KZ=0.7,ZH=16384,eW=20000,oV=1024,tV=2000,QH=2000,WH=8;function H6($,Z){if($.length<=Z)return $;return`${$.slice(0,Z)}
320
+ ...[truncated ${$.length-Z} chars]`}function GT($){let Z=$3($);if(typeof Z==="string")return Z;return Z.map((Q)=>{switch(Q.type){case"text":return Q.text;case"file":return`<file path="${Q.path}">
321
321
  ${Q.content}
322
322
  </file>`;case"image":return`[image:${Q.mediaType}]`;default:return""}}).join(`
323
- `)}function eW($){if(typeof $==="string")return H6($,sV);return $.map((Z)=>{switch(Z.type){case"text":return{...Z,text:H6(Z.text,sV)};case"file":return{...Z,content:H6(Z.content,$H)};case"image":return Z;default:return Z}})}function HT($){return Object.entries($).map(([Z,Q])=>`${Z}=${JSON.stringify(Q)}`).join(", ")}function QH($){if(typeof $.content==="string")return`[${$.role==="user"?"User":"Bot"}]: ${$.content}`;let Z=[];for(let Q of $.content)switch(Q.type){case"text":Z.push(`[${$.role==="user"?"User":"Bot"}]: ${Q.text}`);break;case"thinking":Z.push(`[Bot thinking]: ${H6(Q.thinking,2000)}`);break;case"redacted_thinking":Z.push("[Bot thinking]: [redacted]");break;case"tool_use":Z.push(`[Bot tool calls]: ${Q.name}(${HT(Q.input)})`);break;case"tool_result":Z.push(`[Tool result]: ${VT(Q.content)}`);break;case"file":Z.push(`[${$.role==="user"?"User":"Bot"} file ${Q.path}]: ${H6(Q.content,$H)}`);break;case"image":Z.push(`[${$.role==="user"?"User":"Bot"} image]: ${Q.mediaType}`);break}return Z.join(`
324
- `)}function WH($){return $.map(QH).join(`
323
+ `)}function $3($){if(typeof $==="string")return H6($,tV);return $.map((Z)=>{switch(Z.type){case"text":return{...Z,text:H6(Z.text,tV)};case"file":return{...Z,content:H6(Z.content,QH)};case"image":return Z;default:return Z}})}function KT($){return Object.entries($).map(([Z,Q])=>`${Z}=${JSON.stringify(Q)}`).join(", ")}function JH($){if(typeof $.content==="string")return`[${$.role==="user"?"User":"Bot"}]: ${$.content}`;let Z=[];for(let Q of $.content)switch(Q.type){case"text":Z.push(`[${$.role==="user"?"User":"Bot"}]: ${Q.text}`);break;case"thinking":Z.push(`[Bot thinking]: ${H6(Q.thinking,2000)}`);break;case"redacted_thinking":Z.push("[Bot thinking]: [redacted]");break;case"tool_use":Z.push(`[Bot tool calls]: ${Q.name}(${KT(Q.input)})`);break;case"tool_result":Z.push(`[Tool result]: ${GT(Q.content)}`);break;case"file":Z.push(`[${$.role==="user"?"User":"Bot"} file ${Q.path}]: ${H6(Q.content,QH)}`);break;case"image":Z.push(`[${$.role==="user"?"User":"Bot"} image]: ${Q.mediaType}`);break}return Z.join(`
324
+ `)}function XH($){return $.map(JH).join(`
325
325
 
326
- `).trim()}function JH(){let $=new WeakMap;return(Z)=>{let Q=Z,W=$.get(Q);if(typeof W==="number")return W;let J;try{J=JSON.stringify(Z)}catch{J=QH(Z)}let X=oW(J.length);return $.set(Q,X),X}}function B6($){return $.metadata?.kind==="compaction_summary"}function $3($){if(!B6($))return;let Z=$.metadata;if(!Z)return;let Q=Z.details;return{kind:"compaction_summary",summary:String(Z.summary??""),details:{readFiles:Array.isArray(Q?.readFiles)?Q.readFiles.filter((W)=>typeof W==="string").map((W)=>W.trim()).filter((W)=>W.length>0):[],modifiedFiles:Array.isArray(Q?.modifiedFiles)?Q.modifiedFiles.filter((W)=>typeof W==="string").map((W)=>W.trim()).filter((W)=>W.length>0):[]},tokensBefore:Number(Z.tokensBefore??0),generatedAt:Number(Z.generatedAt??0)}}function BT($){if($.role!=="user"||!Array.isArray($.content))return!1;return $.content.length>0&&$.content.every((Z)=>Z.type==="tool_result")}function G6($){return $.role==="user"&&!BT($)&&!B6($)}function XH($){for(let Z=0;Z<$.length;Z+=1)if(G6($[Z]))return Z;return-1}function FZ($){for(let Z=$.length-1;Z>=0;Z-=1)if(G6($[Z]))return Z;return 0}function YH($){for(let Z=$.length-1;Z>=0;Z-=1)if($[Z].role==="assistant")return Z;return-1}function jH($){for(let Z=$.length-1;Z>=0;Z-=1)if(B6($[Z]))return Z;return-1}function VH($,Z,Q){let W=FZ($);if(W<=0)return 0;let J=0,X=$.length;for(let j=$.length-1;j>=0;j-=1)if(J+=Q($[j]),X=j,J>=Z)break;if(X<=0)return 0;let Y=Math.min(X,W);while(Y>0&&!G6($[Y]))Y-=1;return Y}function V6($){if(typeof $==="string"&&$.trim().length>0)return[$];if(Array.isArray($))return $.flatMap((Z)=>V6(Z));if($&&typeof $==="object"){let Z=$,Q=[];for(let W of["path","file_path","target_file","new_file_path","old_file_path"])Q.push(...V6(Z[W]));if(Array.isArray(Z.files)){for(let W of Z.files)if(W&&typeof W==="object")Q.push(...V6(W.path))}if(Array.isArray(Z.file_paths))Q.push(...V6(Z.file_paths));return Q}return[]}function j6($,Z){let Q=new Set($);for(let W of Z){let J=W.trim();if(!J)continue;Q.add(J)}return[...Q].sort((W,J)=>W.localeCompare(J))}function HH($){let Z=[],Q=[];for(let W of $){let J=$3(W);if(J){Z=j6(Z,J.details.readFiles),Q=j6(Q,J.details.modifiedFiles);continue}if(!Array.isArray(W.content))continue;for(let X of W.content){if(X.type==="file"){Z=j6(Z,[X.path]);continue}if(X.type!=="tool_use")continue;let Y=V6(X.input);if(X.name==="read_files"){Z=j6(Z,Y);continue}if(X.name==="editor"||X.name==="apply_patch")Q=j6(Q,Y)}}return{readFiles:Z,modifiedFiles:Q}}function GT($){let Z=$.readFiles.length>0?$.readFiles.map((W)=>`- ${W}`).join(`
326
+ `).trim()}function YH(){let $=new WeakMap;return(Z)=>{let Q=Z,W=$.get(Q);if(typeof W==="number")return W;let J;try{J=JSON.stringify(Z)}catch{J=JH(Z)}let X=tW(J.length);return $.set(Q,X),X}}function B6($){return $.metadata?.kind==="compaction_summary"}function Z3($){if(!B6($))return;let Z=$.metadata;if(!Z)return;let Q=Z.details;return{kind:"compaction_summary",summary:String(Z.summary??""),details:{readFiles:Array.isArray(Q?.readFiles)?Q.readFiles.filter((W)=>typeof W==="string").map((W)=>W.trim()).filter((W)=>W.length>0):[],modifiedFiles:Array.isArray(Q?.modifiedFiles)?Q.modifiedFiles.filter((W)=>typeof W==="string").map((W)=>W.trim()).filter((W)=>W.length>0):[]},tokensBefore:Number(Z.tokensBefore??0),generatedAt:Number(Z.generatedAt??0)}}function FT($){if($.role!=="user"||!Array.isArray($.content))return!1;return $.content.length>0&&$.content.every((Z)=>Z.type==="tool_result")}function G6($){return $.role==="user"&&!FT($)&&!B6($)}function jH($){for(let Z=0;Z<$.length;Z+=1)if(G6($[Z]))return Z;return-1}function FZ($){for(let Z=$.length-1;Z>=0;Z-=1)if(G6($[Z]))return Z;return 0}function VH($){for(let Z=$.length-1;Z>=0;Z-=1)if($[Z].role==="assistant")return Z;return-1}function HH($){for(let Z=$.length-1;Z>=0;Z-=1)if(B6($[Z]))return Z;return-1}function BH($,Z,Q){let W=FZ($);if(W<=0)return 0;let J=0,X=$.length;for(let j=$.length-1;j>=0;j-=1)if(J+=Q($[j]),X=j,J>=Z)break;if(X<=0)return 0;let Y=Math.min(X,W);while(Y>0&&!G6($[Y]))Y-=1;return Y}function V6($){if(typeof $==="string"&&$.trim().length>0)return[$];if(Array.isArray($))return $.flatMap((Z)=>V6(Z));if($&&typeof $==="object"){let Z=$,Q=[];for(let W of["path","file_path","target_file","new_file_path","old_file_path"])Q.push(...V6(Z[W]));if(Array.isArray(Z.files)){for(let W of Z.files)if(W&&typeof W==="object")Q.push(...V6(W.path))}if(Array.isArray(Z.file_paths))Q.push(...V6(Z.file_paths));return Q}return[]}function j6($,Z){let Q=new Set($);for(let W of Z){let J=W.trim();if(!J)continue;Q.add(J)}return[...Q].sort((W,J)=>W.localeCompare(J))}function GH($){let Z=[],Q=[];for(let W of $){let J=Z3(W);if(J){Z=j6(Z,J.details.readFiles),Q=j6(Q,J.details.modifiedFiles);continue}if(!Array.isArray(W.content))continue;for(let X of W.content){if(X.type==="file"){Z=j6(Z,[X.path]);continue}if(X.type!=="tool_use")continue;let Y=V6(X.input);if(X.name==="read_files"){Z=j6(Z,Y);continue}if(X.name==="editor"||X.name==="apply_patch")Q=j6(Q,Y)}}return{readFiles:Z,modifiedFiles:Q}}function AT($){let Z=$.readFiles.length>0?$.readFiles.map((W)=>`- ${W}`).join(`
327
327
  `):"- none",Q=$.modifiedFiles.length>0?$.modifiedFiles.map((W)=>`- ${W}`).join(`
328
328
  `):"- none";return`## Files
329
329
  Read:
330
330
  ${Z}
331
331
  Modified:
332
- ${Q}`}function BH($,Z){if(/^## Files$/im.test($))return $.trim();return`${$.trim()}
332
+ ${Q}`}function KH($,Z){if(/^## Files$/im.test($))return $.trim();return`${$.trim()}
333
333
 
334
- ${GT(Z)}`.trim()}function GH($){let Z=[`Summarize this session for continuation. Be concise and factual.
334
+ ${AT(Z)}`.trim()}function FH($){let Z=[`Summarize this session for continuation. Be concise and factual.
335
335
 
336
336
  ## Goal
337
337
  One sentence: what is being built or fixed.
@@ -353,20 +353,20 @@ Edited: ${$.fileOps.modifiedFiles.join(", ")||"none"}`];if($.previousSummary?.tr
353
353
  ${$.previousSummary.trim()}`);return Z.push(`Conversation:
354
354
  ${$.conversationText||"(empty)"}`),Z.join(`
355
355
 
356
- `)}function KH($){let Z=$.summarizer,Q=(J)=>{if(J.providerId==="openai-codex"){let{maxOutputTokens:X,...Y}=J;return{...Y,thinking:!1}}return{...J,maxOutputTokens:J.maxOutputTokens??aV,thinking:!1}};if(!Z)return Q($.activeProviderConfig);let W=Z.providerConfig?.providerId===Z.providerId?Z.providerConfig:void 0;return Q({...W??{},providerId:Z.providerId,modelId:Z.modelId,apiKey:Z.apiKey??W?.apiKey,baseUrl:Z.baseUrl??W?.baseUrl,headers:Z.headers??W?.headers,knownModels:Z.knownModels??W?.knownModels,maxOutputTokens:Z.maxOutputTokens??aV})}function FH($){return{role:"user",content:`Context summary:
356
+ `)}function AH($){let Z=$.summarizer,Q=(J)=>{if(J.providerId==="openai-codex"){let{maxOutputTokens:X,...Y}=J;return{...Y,thinking:!1}}return{...J,maxOutputTokens:J.maxOutputTokens??oV,thinking:!1}};if(!Z)return Q($.activeProviderConfig);let W=Z.providerConfig?.providerId===Z.providerId?Z.providerConfig:void 0;return Q({...W??{},providerId:Z.providerId,modelId:Z.modelId,apiKey:Z.apiKey??W?.apiKey,baseUrl:Z.baseUrl??W?.baseUrl,headers:Z.headers??W?.headers,knownModels:Z.knownModels??W?.knownModels,maxOutputTokens:Z.maxOutputTokens??oV})}function fH($){return{role:"user",content:`Context summary:
357
357
 
358
- ${$.summary}`,metadata:{kind:"compaction_summary",summary:$.summary,details:$.fileOps,tokensBefore:$.tokensBefore,generatedAt:Date.now()}}}async function FT($){let Z=await KT($.providerConfig),Q="";for await(let W of Z.createMessage("Summarize the provided coding session into a concise continuation note with detailed next steps.",[{role:"user",content:$.request}])){if(W.type==="text"){Q+=W.text;continue}if(W.type==="done"&&!W.success&&W.error)throw Error(W.error)}return $.logger?.debug("Generated compaction summary",{outputChars:Q.length,modelId:$.providerConfig.modelId,providerId:$.providerConfig.providerId}),Q.trim()}function AT($){try{return JSON.stringify($).length}catch{return String($).length}}async function AH($){let Z=$.context.messages;if(Z.length<2)return;let Q=VH(Z,$.preserveRecentTokens,$.estimateMessageTokens);if(Q<=0||Q>=Z.length)return;let W=Z.slice(0,Q),J=jH(W),X=J>=0?$3(W[J])?.summary:void 0,Y=J>=0?W.slice(J+1):W;if(Y.length===0)return;let j=HH(W),V=WH(Y),H=GH({previousSummary:X,conversationText:V,fileOps:j});$.logger?.debug("Agentic compaction summarizer diagnostics",{messagesToSummarize:W.length,newMessagesToFold:Y.length,preservedMessages:Z.length-Q,previousSummaryChars:X?.length??0,conversationTextChars:V.length,summaryRequestChars:H.length,summaryRequestEstimatedTokens:oW(H.length),newMessagesJsonChars:AT(Y),maxInputTokens:$.context.maxInputTokens,triggerTokens:$.context.triggerTokens});let B=await FT({providerConfig:KH({activeProviderConfig:$.providerConfig,summarizer:$.summarizer}),request:H,logger:$.logger});if(!B.trim())return;let G=BH(B,j),K=Z.reduce((L,f)=>L+$.estimateMessageTokens(f),0),F=[FH({summary:G,fileOps:j,tokensBefore:K}),...Z.slice(Q)],A=F.reduce((L,f)=>L+$.estimateMessageTokens(f),0);return $.logger?.debug("Performed agentic compaction",{messagesBefore:Z.length,messagesAfter:F.length,messagesSummarized:Q,messagesPreserved:Z.length-Q,tokensBefore:K,tokensAfter:A,maxInputTokens:$.context.maxInputTokens}),{messages:F}}import{CHARS_PER_TOKEN as fT}from"@cline/shared";function UT($){if(B6($))return;if(typeof $.content==="string"){let Q=$.content.trim();return Q?{...$,content:Q}:void 0}let Z=$.content.filter((Q)=>Q.type!=="text"||Q.text.trim());if(Z.length===0)return;return{...$,content:Z.map((Q)=>Q.type==="text"?{...Q,text:Q.text.trim()}:Q.type==="tool_result"?{...Q,content:eW(Q.content)}:Q)}}function DT($,Z){return $.reduce((Q,W)=>Q+Z(W),0)}function fH($,Z){if($.length<=Z)return $;let Q=`
359
- ...`,W=Math.max(1,Z-Q.length);return`${$.slice(0,W)}${Q}`}function UH($,Z){let Q=Number.isFinite(Z)?Math.max(1,Z):1,W=Math.max(16,Q*fT);if(typeof $.content==="string"){let Y=fH($.content,W).trim();return{...$,content:Y||"..."}}let J=W,X=$.content.map((Y)=>{if(Y.type!=="text"||J<=0)return Y;let j=fH(Y.text,J).trim();return J-=j.length,{...Y,text:j||"..."}});return{...$,content:X}}function LT($,Z){let Q=XH($),W=FZ($),J=YH($),X=[],Y=0;for(let j=0;j<$.length;j+=1){let V=UT($[j]);if(!V)continue;let H=Z(V);Y+=H,X.push({index:j,message:V,estimatedTokens:H,toolPairIds:LH(V),isFirstUser:j===Q,isLastUser:j===W,isLastAssistant:j===J})}return{candidates:X,totalTokens:Y}}function DH($,Z,Q,W){let J=$[Z],X=J.estimatedTokens;return J.message=Q,J.estimatedTokens=W(Q),J.toolPairIds=LH(Q),J.estimatedTokens-X}function LH($){if(!Array.isArray($.content))return[];let Z=[];for(let Q of $.content)if(Q.type==="tool_use")Z.push(Q.id);else if(Q.type==="tool_result")Z.push(Q.tool_use_id);return Z}function _T($){let Z=new Map;for(let Q of $)for(let W of Q.toolPairIds){let J=Z.get(W);if(J)J.add(Q);else Z.set(W,new Set([Q]))}return Z}function zT($,Z,Q){let W=new Set,J=[Q],X=0;while(X<J.length){let Y=J[X];if(X+=1,Y===void 0||!$.has(Y)||W.has(Y))continue;W.add(Y);for(let j of Y.toolPairIds)for(let V of Z.get(j)??[])if(!W.has(V))J.push(V)}return W}function TT($,Z){let Q=0;for(let W of $){if(Z.has(W))continue;$[Q]=W,Q+=1}$.length=Q}function AZ($,Z,Q,W){let J=new Set($),X=_T($);for(let Y=0;Y<$.length&&W>Q;){if(!Z($[Y])){Y+=1;continue}let j=zT(J,X,$[Y]);if(j.size===0){Y+=1;continue}let V=0;for(let H of j)V+=H.estimatedTokens,J.delete(H);W-=V,TT($,j)}return W}function OT($,Z,Q,W,J){if(Q<=Z)return Q;for(let Y=$.length-1;Y>=0&&Q>Z;Y-=1){let j=$[Y];if(j.isFirstUser)continue;let V=Math.max(ZH,j.estimatedTokens-(Q-Z));if(V>=j.estimatedTokens)continue;Q+=DH($,Y,UH(j.message,V),J)}if(Q<=Z)return Q;let X=$.findIndex((Y)=>Y.isFirstUser);if(X>=0){if($[X].estimatedTokens<=W)return Q;while(Q>Z){let j=$[X],V=Math.max(1,j.estimatedTokens-(Q-Z));if(V>=j.estimatedTokens)break;let H=j.estimatedTokens;if(Q+=DH($,X,UH(j.message,V),J),j.estimatedTokens>=H)break}}return Q}function qT($,Z){return JSON.stringify($)!==JSON.stringify(Z)}function MT($){let Z=FZ($);if(Z<0||Z===0&&!G6($[0]))return{compactable:$,protectedTail:[]};return{compactable:$.slice(0,Z),protectedTail:$.slice(Z)}}function _H($){let Z=Math.max(1,Math.min($.context.targetTokens??Math.floor($.context.triggerTokens*KZ),$.context.maxInputTokens)),{compactable:Q,protectedTail:W}=MT($.context.messages);if(Q.length===0)return;let J=DT(W,$.estimateMessageTokens),X=Math.max(1,Z-J),Y=LT(Q,$.estimateMessageTokens),{candidates:j}=Y;if(j.length===0)return;let V=Y.totalTokens,H=V;H=AZ(j,(F)=>F.message.role==="assistant"&&!F.isLastAssistant,X,H),H=AZ(j,(F)=>F.message.role==="user"&&!F.isFirstUser&&!F.isLastUser,X,H),H=AZ(j,(F)=>F.message.role==="assistant"&&F.isLastAssistant,X,H),H=AZ(j,(F)=>F.message.role==="user"&&F.isLastUser&&!F.isFirstUser,X,H),H=OT(j,X,H,$.context.triggerTokens,$.estimateMessageTokens);let B=[...j.map((F)=>F.message),...W];if(!qT($.context.messages,B))return;let G=V+J,K=H+J;return $.logger?.debug("Performed basic compaction",{messagesBefore:$.context.messages.length,messagesAfter:B.length,messagesRemoved:$.context.messages.length-B.length,tokensBefore:G,tokensAfter:K,targetTokens:Z,maxInputTokens:$.context.maxInputTokens}),{messages:B}}var RT=0.5,ET=0.5;function zH($){try{return JSON.stringify($).length}catch{return String($).length}}function K6($){return typeof $==="number"&&Number.isFinite($)&&$>0}function NT($){let Z=[];if(K6($.configMaxInputTokens))Z.push($.configMaxInputTokens);if(K6($.modelMaxInputTokens))Z.push($.modelMaxInputTokens);if(K6($.contextWindow)){Z.push($.contextWindow);let Q=K6($.modelMaxTokens)?$.contextWindow-$.modelMaxTokens:void 0;if(K6(Q)&&Q>=$.contextWindow*RT)Z.push(Q)}return Z.length>0?Math.min(...Z):oV}function wT($){let Z=0,Q=0,W=0;for(let J of $){if(!Array.isArray(J.content))continue;for(let X of J.content){if(X.type!=="tool_result")continue;let Y=zH(X.content);Z+=1,Q+=Y,W=Math.max(W,Y)}}return{toolResultCount:Z,toolResultSerializedChars:Q,maxToolResultSerializedChars:W}}var CT={basic:({context:$,estimateMessageTokens:Z,logger:Q})=>_H({context:$,estimateMessageTokens:Z,logger:Q}),agentic:({context:$,providerConfig:Z,compaction:Q,mode:W,estimateMessageTokens:J,logger:X})=>AH({context:$,providerConfig:Z,summarizer:Q?.summarizer,preserveRecentTokens:W==="manual"?Math.min(Q?.preserveRecentTokens??tW,$.triggerTokens):Q?.preserveRecentTokens??tW,estimateMessageTokens:J,logger:X})};function PT($){if(typeof $.config.reserveTokens==="number"){let Q=Math.max(0,$.config.reserveTokens),W=Math.max(0,$.maxInputTokens-Q);return{shouldCompact:$.inputTokens>W,triggerTokens:W,thresholdRatio:$.maxInputTokens>0?W/$.maxInputTokens:0}}if(typeof $.config.thresholdRatio==="number"){let Q=$.config.thresholdRatio,W=$.maxInputTokens*Q;return{shouldCompact:$.inputTokens>W,triggerTokens:W,thresholdRatio:Q}}let Z=Math.max(0,Math.min($.maxInputTokens-eV,$.maxInputTokens*tV));return{shouldCompact:$.inputTokens>Z,triggerTokens:Z,thresholdRatio:$.maxInputTokens>0?Z/$.maxInputTokens:0}}function ST($){let Z=typeof $.manualTargetRatio==="number"&&Number.isFinite($.manualTargetRatio)?$.manualTargetRatio:0.5,Q=Math.min(0.95,Math.max(0.05,Z)),W=Math.max(1,Math.floor(Math.min($.autoTriggerTokens,$.inputTokens*Q)));return{triggerTokens:W,thresholdRatio:$.maxInputTokens>0?W/$.maxInputTokens:0}}function bT($){let Z=$.messagePairCount>=5&&typeof $.modelMaxTokens==="number"&&Number.isFinite($.modelMaxTokens)&&$.modelMaxTokens<$.maxInputTokens?Math.floor($.maxInputTokens*ET):Math.floor($.triggerTokens*KZ),Q=Math.max(1,$.triggerTokens-1);return Math.max(1,Math.min(Z,$.maxInputTokens,Q))}function yT($){let Z=0,Q=!1;for(let W of $)if(W.role==="user")Q=!0;else if(W.role==="assistant"&&Q)Z+=1,Q=!1;return Z}function F6($,Z={}){let Q=$.compaction;if(Q?.enabled!==!0)return;let W=$.providerConfig??{providerId:$.providerId,modelId:$.modelId},J=JH(),X=Q?.strategy??"basic",Y=CT[X],j=Z.mode??"auto",V=Q?.compact?"custom":X;return async(H)=>{let B=H.apiMessages.reduce((E,C)=>E+J(C),0),G=NT({configMaxInputTokens:Q?.maxInputTokens,modelMaxInputTokens:H.model.info?.maxInputTokens,contextWindow:H.model.info?.contextWindow,modelMaxTokens:H.model.info?.maxTokens}),K=PT({inputTokens:B,maxInputTokens:G,config:{maxInputTokens:Q?.maxInputTokens,reserveTokens:Q?.reserveTokens,thresholdRatio:Q?.thresholdRatio}});if($.logger?.debug("Context compaction diagnostics",{mode:j,strategy:X,iteration:H.iteration,providerId:$.providerId,modelId:$.modelId,inputTokens:B,maxInputTokens:G,triggerTokens:K.triggerTokens,thresholdRatio:K.thresholdRatio,shouldCompact:K.shouldCompact,messageCount:H.messages.length,apiMessageCount:H.apiMessages.length,apiMessagesJsonChars:zH(H.apiMessages),...wT(H.apiMessages)}),j==="auto"&&!K.shouldCompact)return;let F=j==="manual"?ST({inputTokens:B,maxInputTokens:G,autoTriggerTokens:K.triggerTokens,manualTargetRatio:Z.manualTargetRatio}):K,A=j==="auto"?bT({maxInputTokens:G,modelMaxTokens:H.model.info?.maxTokens,triggerTokens:F.triggerTokens,messagePairCount:yT(H.messages)}):void 0,L={agentId:H.agentId,conversationId:H.conversationId,parentAgentId:H.parentAgentId,iteration:H.iteration,messages:H.messages,model:H.model,maxInputTokens:G,triggerTokens:F.triggerTokens,targetTokens:A,thresholdRatio:F.thresholdRatio,utilizationRatio:G>0?B/G:0},f=j==="manual"?"manual_compaction":"auto_compaction";H.emitStatusNotice?.(j==="manual"?"compacting":"auto-compacting",{kind:f,reason:f,iteration:H.iteration,triggerTokens:F.triggerTokens,maxInputTokens:G});let D=H.messages.length,U=Date.now(),T=Q?.compact?await Q.compact(L):await Y({context:L,providerConfig:{...W,abortSignal:H.abortSignal},compaction:Q,mode:j,estimateMessageTokens:J,logger:$.logger}),O=Date.now()-U,z=$.sessionId??H.conversationId,_={agentId:H.agentId,conversationId:H.conversationId,parentAgentId:H.parentAgentId??void 0};if(T?.messages){let E=T.messages.reduce((C,y)=>C+J(y),0);$.logger?.log("Context compaction completed",{severity:"info",strategy:X,maxInputTokens:G,inputTokens:B,afterTokens:E,tokensSaved:B-E,utilizationBefore:`${(B/G*100).toFixed(1)}%`,utilizationAfter:`${(E/G*100).toFixed(1)}%`,thresholdTrigger:`${(F.thresholdRatio*100).toFixed(1)}%`,messagesBefore:D,messagesAfter:T.messages.length,messagesRemoved:D-T.messages.length}),h9($.telemetry,{ulid:z,strategy:V,mode:j,messagesBefore:D,messagesAfter:T.messages.length,messagesRemoved:D-T.messages.length,tokensBefore:B,tokensAfter:E,tokensSaved:B-E,triggerTokens:F.triggerTokens,maxInputTokens:G,thresholdRatio:F.thresholdRatio,durationMs:O,provider:$.providerId,modelId:$.modelId,..._})}else k9($.telemetry,{ulid:z,strategy:V,mode:j,reason:"no_result",tokensBefore:B,triggerTokens:F.triggerTokens,maxInputTokens:G,thresholdRatio:F.thresholdRatio,durationMs:O,provider:$.providerId,modelId:$.modelId,..._});return T}}var nB={};N(nB,{zodToJsonSchema:()=>PM,validateWithZod:()=>CM,truncateCommandOutput:()=>X2,resolveToolRoutingConfig:()=>M8,resolveToolPresetName:()=>l1,resolveCoreSelectedToolIds:()=>bZ,getCoreHeadlessToolNames:()=>k6,getCoreDefaultEnabledToolIds:()=>SZ,getCoreBuiltinToolCatalog:()=>A2,getCoreAcpToolNames:()=>yZ,createWebFetchTool:()=>j3,createWebFetchExecutor:()=>C6,createToolPoliciesWithPreset:()=>OZ,createSubmitAndExitTool:()=>G3,createSkillsTool:()=>j2,createShellTool:()=>M6,createShellExecutor:()=>Y2,createSearchTool:()=>Y3,createSearchExecutor:()=>w6,createReadFilesTool:()=>X3,createFileReadExecutor:()=>N6,createEditorTool:()=>H3,createEditorExecutor:()=>E6,createDefaultToolsWithPreset:()=>qZ,createDefaultTools:()=>D$,createDefaultShellExecutor:()=>P6,createDefaultExecutors:()=>O8,createBuiltinTools:()=>f2,createAskQuestionTool:()=>B3,createApplyPatchTool:()=>V3,createApplyPatchExecutor:()=>R6,WebFetchRequestSchema:()=>Q3,ToolPresets:()=>u0,TEAM_TOOL_NAMES:()=>N8,SubmitInputSchema:()=>q6,StructuredCommandInputSchema:()=>W2,SkillsInputSchema:()=>T6,SearchCodebaseInputSchema:()=>U6,RunCommandsInputSchema:()=>D6,ReadFilesInputSchema:()=>f6,ReadFileRequestSchema:()=>m1,MAX_COMMAND_OUTPUT_CHARS:()=>c1,FetchWebContentInputSchema:()=>L6,EditFileInputSchema:()=>_6,DefaultToolNames:()=>U0,DEFAULT_MODEL_TOOL_ROUTING_RULES:()=>q8,AskQuestionInputSchema:()=>O6,ApplyPatchInputSchema:()=>z6,ALL_DEFAULT_TOOL_NAMES:()=>X$});import{validateWithZod as CM,zodToJsonSchema as PM}from"@cline/shared";_0();import{createTool as f$,validateWithZod as U$,zodToJsonSchema as u1}from"@cline/shared";var OH="__clineInternalTelemetry";function qH($){let Z=$?.__clineInternalTelemetry;return Z&&typeof Z==="object"&&"capture"in Z&&typeof Z.capture==="function"?Z:void 0}import{spawn as hH}from"node:child_process";import{StringDecoder as IT}from"node:string_decoder";import{getDefaultShell as xT,getShellArgs as gT}from"@cline/shared";import{validateWithZod as hT}from"@cline/shared";import{z as q}from"zod";var A$=6000,A6=q.string().describe("The absolute file path of a text file to read content from"),MH=q.object({start_line:q.number().int().positive().nullable().optional().describe("Optional one-based starting line number to read from; use null or omit for the start of the file"),end_line:q.number().int().positive().nullable().optional().describe("Optional one-based ending line number to read through; use null or omit to read to the end of the file or the read cap, whichever comes first")}).describe("Optional inclusive one-based file line range"),m1=q.object({path:A6,start_line:MH.shape.start_line,end_line:MH.shape.end_line}).describe("A file read request with optional inclusive one-based line bounds"),f6=q.object({files:q.array(m1).describe("Array of file read requests. Omit start_line/end_line or set them to null to read from the start; provide integers to return only that inclusive one-based line range. Reads are capped, so page through long files with start_line/end_line. Prefer this tool over running terminal command to get file content for better performance and reliability.")}),RH=q.union([f6,m1,q.array(m1),q.array(q.string()),q.string(),q.object({files:q.array(q.union([A6,m1]))}),q.object({files:m1}),q.object({files:A6}),q.object({file_paths:q.array(A6)}),q.object({file_paths:q.string()}),q.object({paths:q.array(q.union([A6,m1]))}),q.object({paths:m1}),q.object({paths:q.string()})]),U6=q.object({queries:q.array(q.string()).describe("Array of regex search queries to execute")}),EH=q.union([U6,q.array(q.string()),q.string(),q.object({queries:q.string()})]),Z3=q.string().describe(`The non-interactive shell command to execute - MUST keep input short and concise (within ${A$*2} characters) to avoid timeouts.`),W2=q.object({command:q.string().min(1).describe("The executable to run directly without shell parsing."),args:q.array(q.string()).optional().describe("Optional argv list passed directly to the executable.")}),NH=q.union([Z3,W2]),D6=q.object({commands:q.array(NH).describe("Array of commands to execute. Prefer structured { command, args } entries for portability; plain strings are still supported and are interpreted by the active shell.")}),wH=q.union([D6,q.object({commands:NH}),q.array(W2),W2,q.object({command:Z3}),q.object({cmd:Z3}),q.array(q.string()),q.string()]),Q3=q.object({url:q.string().describe("The URL to fetch"),prompt:q.string().min(2).describe("Analysis prompt for the fetched content")}),L6=q.object({requests:q.array(Q3).describe("Array of the URLs for the web fetch requests")}),_6=q.object({path:q.string().min(1).describe("The absolute file path for the action to be performed on"),old_text:q.string().nullable().optional().describe(`Exact text to replace (must match exactly once). Omit this when creating a missing file or inserting via insert_line. Keep this at or below ${A$} characters when possible; larger payloads should be split across multiple tool calls to avoid timeouts.`),new_text:q.string().describe(`The new content to write when creating a missing file, the replacement text for edits, or the inserted text when insert_line is provided. Keep this at or below ${A$} characters when possible; for large edits, use multiple calls with small chunks of old_text and new_text to iteratively edit the file.`),insert_line:q.number().int().nullable().optional().describe("Optional positive one-based boundary line. When provided, the tool inserts new_text before that line instead of performing a replacement edit; use line_count + 1 to append at EOF.")}).describe("Edit a text file by replacing old_text with new_text, create the file with new_text if it does not exist, or insert new_text at insert_line when insert_line is provided. Prefer using this tool for file edits over shell commands. IMPORTANT: large edits can time out, so use small chunks and multiple calls when possible."),z6=q.object({input:q.string().min(1).describe("The freeform apply_patch payload in the canonical patch grammar (e.g *** Begin Patch, *** Update File:, @@, and *** End Patch).")}).describe("Modify or create a text file by applying patches using the canonical apply_patch diff grammar. Prefer sending the patch body directly rather than wrapping it in shell syntax. IMPORTANT: large patches can time out, so use small chunks and multiple calls when possible."),CH=q.union([z6,q.string()]),T6=q.object({skill:q.string().min(1).describe("Name of the skill to execute."),args:q.string().nullable().optional().describe("Arguments for the skill; use null when omitted")}),O6=q.object({question:q.string().min(1).describe('The single question to ask the user. E.g. "How can I help you?"'),options:q.array(q.string().min(1)).min(2).max(5).describe("Array of 2-5 user-selectable answer options for the single question")}),q6=q.object({summary:q.string().min(10).describe("Summarization of the investigation, steps taken, and resolution status to submit at the end of the session. Before submitting, read the problem again along with any provided test's assertions carefully and confirm your fix produces the expected output."),verified:q.boolean().describe(`Have you verified that the issue is resolved to the best of your knowledge, including updating and creating all the requested files and items? 'True' if you have completed the investigation and taken all necessary steps to resolve the issue.
358
+ ${$.summary}`,metadata:{kind:"compaction_summary",summary:$.summary,details:$.fileOps,tokensBefore:$.tokensBefore,generatedAt:Date.now()}}}async function UT($){let Z=await fT($.providerConfig),Q="";for await(let W of Z.createMessage("Summarize the provided coding session into a concise continuation note with detailed next steps.",[{role:"user",content:$.request}])){if(W.type==="text"){Q+=W.text;continue}if(W.type==="done"&&!W.success&&W.error)throw Error(W.error)}return $.logger?.debug("Generated compaction summary",{outputChars:Q.length,modelId:$.providerConfig.modelId,providerId:$.providerConfig.providerId}),Q.trim()}function DT($){try{return JSON.stringify($).length}catch{return String($).length}}async function UH($){let Z=$.context.messages;if(Z.length<2)return;let Q=BH(Z,$.preserveRecentTokens,$.estimateMessageTokens);if(Q<=0||Q>=Z.length)return;let W=Z.slice(0,Q),J=HH(W),X=J>=0?Z3(W[J])?.summary:void 0,Y=J>=0?W.slice(J+1):W;if(Y.length===0)return;let j=GH(W),V=XH(Y),H=FH({previousSummary:X,conversationText:V,fileOps:j});$.logger?.debug("Agentic compaction summarizer diagnostics",{messagesToSummarize:W.length,newMessagesToFold:Y.length,preservedMessages:Z.length-Q,previousSummaryChars:X?.length??0,conversationTextChars:V.length,summaryRequestChars:H.length,summaryRequestEstimatedTokens:tW(H.length),newMessagesJsonChars:DT(Y),maxInputTokens:$.context.maxInputTokens,triggerTokens:$.context.triggerTokens});let B=await UT({providerConfig:AH({activeProviderConfig:$.providerConfig,summarizer:$.summarizer}),request:H,logger:$.logger});if(!B.trim())return;let G=KH(B,j),K=Z.reduce((L,f)=>L+$.estimateMessageTokens(f),0),F=[fH({summary:G,fileOps:j,tokensBefore:K}),...Z.slice(Q)],A=F.reduce((L,f)=>L+$.estimateMessageTokens(f),0);return $.logger?.debug("Performed agentic compaction",{messagesBefore:Z.length,messagesAfter:F.length,messagesSummarized:Q,messagesPreserved:Z.length-Q,tokensBefore:K,tokensAfter:A,maxInputTokens:$.context.maxInputTokens}),{messages:F}}import{CHARS_PER_TOKEN as LT}from"@cline/shared";function _T($){if(B6($))return;if(typeof $.content==="string"){let Q=$.content.trim();return Q?{...$,content:Q}:void 0}let Z=$.content.filter((Q)=>Q.type!=="text"||Q.text.trim());if(Z.length===0)return;return{...$,content:Z.map((Q)=>Q.type==="text"?{...Q,text:Q.text.trim()}:Q.type==="tool_result"?{...Q,content:$3(Q.content)}:Q)}}function zT($,Z){return $.reduce((Q,W)=>Q+Z(W),0)}function DH($,Z){if($.length<=Z)return $;let Q=`
359
+ ...`,W=Math.max(1,Z-Q.length);return`${$.slice(0,W)}${Q}`}function LH($,Z){let Q=Number.isFinite(Z)?Math.max(1,Z):1,W=Math.max(16,Q*LT);if(typeof $.content==="string"){let Y=DH($.content,W).trim();return{...$,content:Y||"..."}}let J=W,X=$.content.map((Y)=>{if(Y.type!=="text"||J<=0)return Y;let j=DH(Y.text,J).trim();return J-=j.length,{...Y,text:j||"..."}});return{...$,content:X}}function TT($,Z){let Q=jH($),W=FZ($),J=VH($),X=[],Y=0;for(let j=0;j<$.length;j+=1){let V=_T($[j]);if(!V)continue;let H=Z(V);Y+=H,X.push({index:j,message:V,estimatedTokens:H,toolPairIds:zH(V),isFirstUser:j===Q,isLastUser:j===W,isLastAssistant:j===J})}return{candidates:X,totalTokens:Y}}function _H($,Z,Q,W){let J=$[Z],X=J.estimatedTokens;return J.message=Q,J.estimatedTokens=W(Q),J.toolPairIds=zH(Q),J.estimatedTokens-X}function zH($){if(!Array.isArray($.content))return[];let Z=[];for(let Q of $.content)if(Q.type==="tool_use")Z.push(Q.id);else if(Q.type==="tool_result")Z.push(Q.tool_use_id);return Z}function OT($){let Z=new Map;for(let Q of $)for(let W of Q.toolPairIds){let J=Z.get(W);if(J)J.add(Q);else Z.set(W,new Set([Q]))}return Z}function qT($,Z,Q){let W=new Set,J=[Q],X=0;while(X<J.length){let Y=J[X];if(X+=1,Y===void 0||!$.has(Y)||W.has(Y))continue;W.add(Y);for(let j of Y.toolPairIds)for(let V of Z.get(j)??[])if(!W.has(V))J.push(V)}return W}function MT($,Z){let Q=0;for(let W of $){if(Z.has(W))continue;$[Q]=W,Q+=1}$.length=Q}function AZ($,Z,Q,W){let J=new Set($),X=OT($);for(let Y=0;Y<$.length&&W>Q;){if(!Z($[Y])){Y+=1;continue}let j=qT(J,X,$[Y]);if(j.size===0){Y+=1;continue}let V=0;for(let H of j)V+=H.estimatedTokens,J.delete(H);W-=V,MT($,j)}return W}function RT($,Z,Q,W,J){if(Q<=Z)return Q;for(let Y=$.length-1;Y>=0&&Q>Z;Y-=1){let j=$[Y];if(j.isFirstUser)continue;let V=Math.max(WH,j.estimatedTokens-(Q-Z));if(V>=j.estimatedTokens)continue;Q+=_H($,Y,LH(j.message,V),J)}if(Q<=Z)return Q;let X=$.findIndex((Y)=>Y.isFirstUser);if(X>=0){if($[X].estimatedTokens<=W)return Q;while(Q>Z){let j=$[X],V=Math.max(1,j.estimatedTokens-(Q-Z));if(V>=j.estimatedTokens)break;let H=j.estimatedTokens;if(Q+=_H($,X,LH(j.message,V),J),j.estimatedTokens>=H)break}}return Q}function ET($,Z){return JSON.stringify($)!==JSON.stringify(Z)}function NT($){let Z=FZ($);if(Z<0||Z===0&&!G6($[0]))return{compactable:$,protectedTail:[]};return{compactable:$.slice(0,Z),protectedTail:$.slice(Z)}}function TH($){let Z=Math.max(1,Math.min($.context.targetTokens??Math.floor($.context.triggerTokens*KZ),$.context.maxInputTokens)),{compactable:Q,protectedTail:W}=NT($.context.messages);if(Q.length===0)return;let J=zT(W,$.estimateMessageTokens),X=Math.max(1,Z-J),Y=TT(Q,$.estimateMessageTokens),{candidates:j}=Y;if(j.length===0)return;let V=Y.totalTokens,H=V;H=AZ(j,(F)=>F.message.role==="assistant"&&!F.isLastAssistant,X,H),H=AZ(j,(F)=>F.message.role==="user"&&!F.isFirstUser&&!F.isLastUser,X,H),H=AZ(j,(F)=>F.message.role==="assistant"&&F.isLastAssistant,X,H),H=AZ(j,(F)=>F.message.role==="user"&&F.isLastUser&&!F.isFirstUser,X,H),H=RT(j,X,H,$.context.triggerTokens,$.estimateMessageTokens);let B=[...j.map((F)=>F.message),...W];if(!ET($.context.messages,B))return;let G=V+J,K=H+J;return $.logger?.debug("Performed basic compaction",{messagesBefore:$.context.messages.length,messagesAfter:B.length,messagesRemoved:$.context.messages.length-B.length,tokensBefore:G,tokensAfter:K,targetTokens:Z,maxInputTokens:$.context.maxInputTokens}),{messages:B}}var wT=0.5,CT=0.5;function OH($){try{return JSON.stringify($).length}catch{return String($).length}}function K6($){return typeof $==="number"&&Number.isFinite($)&&$>0}function PT($){let Z=[];if(K6($.configMaxInputTokens))Z.push($.configMaxInputTokens);if(K6($.modelMaxInputTokens))Z.push($.modelMaxInputTokens);if(K6($.contextWindow)){Z.push($.contextWindow);let Q=K6($.modelMaxTokens)?$.contextWindow-$.modelMaxTokens:void 0;if(K6(Q)&&Q>=$.contextWindow*wT)Z.push(Q)}return Z.length>0?Math.min(...Z):eV}function ST($){let Z=0,Q=0,W=0;for(let J of $){if(!Array.isArray(J.content))continue;for(let X of J.content){if(X.type!=="tool_result")continue;let Y=OH(X.content);Z+=1,Q+=Y,W=Math.max(W,Y)}}return{toolResultCount:Z,toolResultSerializedChars:Q,maxToolResultSerializedChars:W}}var bT={basic:({context:$,estimateMessageTokens:Z,logger:Q})=>TH({context:$,estimateMessageTokens:Z,logger:Q}),agentic:({context:$,providerConfig:Z,compaction:Q,mode:W,estimateMessageTokens:J,logger:X})=>UH({context:$,providerConfig:Z,summarizer:Q?.summarizer,preserveRecentTokens:W==="manual"?Math.min(Q?.preserveRecentTokens??eW,$.triggerTokens):Q?.preserveRecentTokens??eW,estimateMessageTokens:J,logger:X})};function yT($){if(typeof $.config.reserveTokens==="number"){let Q=Math.max(0,$.config.reserveTokens),W=Math.max(0,$.maxInputTokens-Q);return{shouldCompact:$.inputTokens>W,triggerTokens:W,thresholdRatio:$.maxInputTokens>0?W/$.maxInputTokens:0}}if(typeof $.config.thresholdRatio==="number"){let Q=$.config.thresholdRatio,W=$.maxInputTokens*Q;return{shouldCompact:$.inputTokens>W,triggerTokens:W,thresholdRatio:Q}}let Z=Math.max(0,Math.min($.maxInputTokens-ZH,$.maxInputTokens*$H));return{shouldCompact:$.inputTokens>Z,triggerTokens:Z,thresholdRatio:$.maxInputTokens>0?Z/$.maxInputTokens:0}}function hT($){let Z=typeof $.manualTargetRatio==="number"&&Number.isFinite($.manualTargetRatio)?$.manualTargetRatio:0.5,Q=Math.min(0.95,Math.max(0.05,Z)),W=Math.max(1,Math.floor(Math.min($.autoTriggerTokens,$.inputTokens*Q)));return{triggerTokens:W,thresholdRatio:$.maxInputTokens>0?W/$.maxInputTokens:0}}function kT($){let Z=$.messagePairCount>=5&&typeof $.modelMaxTokens==="number"&&Number.isFinite($.modelMaxTokens)&&$.modelMaxTokens<$.maxInputTokens?Math.floor($.maxInputTokens*CT):Math.floor($.triggerTokens*KZ),Q=Math.max(1,$.triggerTokens-1);return Math.max(1,Math.min(Z,$.maxInputTokens,Q))}function IT($){let Z=0,Q=!1;for(let W of $)if(W.role==="user")Q=!0;else if(W.role==="assistant"&&Q)Z+=1,Q=!1;return Z}function F6($,Z={}){let Q=$.compaction;if(Q?.enabled!==!0)return;let W=$.providerConfig??{providerId:$.providerId,modelId:$.modelId},J=YH(),X=Q?.strategy??"basic",Y=bT[X],j=Z.mode??"auto",V=Q?.compact?"custom":X;return async(H)=>{let B=H.apiMessages.reduce((E,C)=>E+J(C),0),G=PT({configMaxInputTokens:Q?.maxInputTokens,modelMaxInputTokens:H.model.info?.maxInputTokens,contextWindow:H.model.info?.contextWindow,modelMaxTokens:H.model.info?.maxTokens}),K=yT({inputTokens:B,maxInputTokens:G,config:{maxInputTokens:Q?.maxInputTokens,reserveTokens:Q?.reserveTokens,thresholdRatio:Q?.thresholdRatio}});if($.logger?.debug("Context compaction diagnostics",{mode:j,strategy:X,iteration:H.iteration,providerId:$.providerId,modelId:$.modelId,inputTokens:B,maxInputTokens:G,triggerTokens:K.triggerTokens,thresholdRatio:K.thresholdRatio,shouldCompact:K.shouldCompact,messageCount:H.messages.length,apiMessageCount:H.apiMessages.length,apiMessagesJsonChars:OH(H.apiMessages),...ST(H.apiMessages)}),j==="auto"&&!K.shouldCompact)return;let F=j==="manual"?hT({inputTokens:B,maxInputTokens:G,autoTriggerTokens:K.triggerTokens,manualTargetRatio:Z.manualTargetRatio}):K,A=j==="auto"?kT({maxInputTokens:G,modelMaxTokens:H.model.info?.maxTokens,triggerTokens:F.triggerTokens,messagePairCount:IT(H.messages)}):void 0,L={agentId:H.agentId,conversationId:H.conversationId,parentAgentId:H.parentAgentId,iteration:H.iteration,messages:H.messages,model:H.model,maxInputTokens:G,triggerTokens:F.triggerTokens,targetTokens:A,thresholdRatio:F.thresholdRatio,utilizationRatio:G>0?B/G:0},f=j==="manual"?"manual_compaction":"auto_compaction";H.emitStatusNotice?.(j==="manual"?"compacting":"auto-compacting",{kind:f,reason:f,iteration:H.iteration,triggerTokens:F.triggerTokens,maxInputTokens:G});let D=H.messages.length,U=Date.now(),T=Q?.compact?await Q.compact(L):await Y({context:L,providerConfig:{...W,abortSignal:H.abortSignal},compaction:Q,mode:j,estimateMessageTokens:J,logger:$.logger}),q=Date.now()-U,z=$.sessionId??H.conversationId,_={agentId:H.agentId,conversationId:H.conversationId,parentAgentId:H.parentAgentId??void 0};if(T?.messages){let E=T.messages.reduce((C,y)=>C+J(y),0);$.logger?.log("Context compaction completed",{severity:"info",strategy:X,maxInputTokens:G,inputTokens:B,afterTokens:E,tokensSaved:B-E,utilizationBefore:`${(B/G*100).toFixed(1)}%`,utilizationAfter:`${(E/G*100).toFixed(1)}%`,thresholdTrigger:`${(F.thresholdRatio*100).toFixed(1)}%`,messagesBefore:D,messagesAfter:T.messages.length,messagesRemoved:D-T.messages.length}),h9($.telemetry,{ulid:z,strategy:V,mode:j,messagesBefore:D,messagesAfter:T.messages.length,messagesRemoved:D-T.messages.length,tokensBefore:B,tokensAfter:E,tokensSaved:B-E,triggerTokens:F.triggerTokens,maxInputTokens:G,thresholdRatio:F.thresholdRatio,durationMs:q,provider:$.providerId,modelId:$.modelId,..._})}else k9($.telemetry,{ulid:z,strategy:V,mode:j,reason:"no_result",tokensBefore:B,triggerTokens:F.triggerTokens,maxInputTokens:G,thresholdRatio:F.thresholdRatio,durationMs:q,provider:$.providerId,modelId:$.modelId,..._});return T}}var sB={};N(sB,{zodToJsonSchema:()=>hM,validateWithZod:()=>yM,truncateCommandOutput:()=>Y2,resolveToolRoutingConfig:()=>M8,resolveToolPresetName:()=>l1,resolveCoreSelectedToolIds:()=>yZ,getCoreHeadlessToolNames:()=>k6,getCoreDefaultEnabledToolIds:()=>bZ,getCoreBuiltinToolCatalog:()=>f2,getCoreAcpToolNames:()=>hZ,createWebFetchTool:()=>j3,createWebFetchExecutor:()=>C6,createToolPoliciesWithPreset:()=>qZ,createSubmitAndExitTool:()=>G3,createSkillsTool:()=>V2,createShellTool:()=>M6,createShellExecutor:()=>j2,createSearchTool:()=>Y3,createSearchExecutor:()=>w6,createReadFilesTool:()=>X3,createFileReadExecutor:()=>N6,createEditorTool:()=>H3,createEditorExecutor:()=>E6,createDefaultToolsWithPreset:()=>MZ,createDefaultTools:()=>D$,createDefaultShellExecutor:()=>P6,createDefaultExecutors:()=>O8,createBuiltinTools:()=>U2,createAskQuestionTool:()=>B3,createApplyPatchTool:()=>V3,createApplyPatchExecutor:()=>R6,WebFetchRequestSchema:()=>Q3,ToolPresets:()=>u0,TEAM_TOOL_NAMES:()=>N8,SubmitInputSchema:()=>q6,StructuredCommandInputSchema:()=>J2,SkillsInputSchema:()=>T6,SearchCodebaseInputSchema:()=>U6,RunCommandsInputSchema:()=>D6,ReadFilesInputSchema:()=>f6,ReadFileRequestSchema:()=>m1,MAX_COMMAND_OUTPUT_CHARS:()=>c1,FetchWebContentInputSchema:()=>L6,EditFileInputSchema:()=>_6,DefaultToolNames:()=>U0,DEFAULT_MODEL_TOOL_ROUTING_RULES:()=>q8,AskQuestionInputSchema:()=>O6,ApplyPatchInputSchema:()=>z6,ALL_DEFAULT_TOOL_NAMES:()=>X$});import{validateWithZod as yM,zodToJsonSchema as hM}from"@cline/shared";_0();import{createTool as f$,validateWithZod as U$,zodToJsonSchema as u1}from"@cline/shared";var MH="__clineInternalTelemetry";function RH($){let Z=$?.__clineInternalTelemetry;return Z&&typeof Z==="object"&&"capture"in Z&&typeof Z.capture==="function"?Z:void 0}import{spawn as IH}from"node:child_process";import{StringDecoder as vT}from"node:string_decoder";import{getDefaultShell as cT,getShellArgs as uT}from"@cline/shared";import{validateWithZod as gT}from"@cline/shared";import{z as O}from"zod";var A$=6000,A6=O.string().describe("The absolute file path of a text file to read content from"),EH=O.object({start_line:O.number().int().positive().nullable().optional().describe("Optional one-based starting line number to read from; use null or omit for the start of the file"),end_line:O.number().int().positive().nullable().optional().describe("Optional one-based ending line number to read through; use null or omit to read to the end of the file or the read cap, whichever comes first")}).describe("Optional inclusive one-based file line range"),m1=O.object({path:A6,start_line:EH.shape.start_line,end_line:EH.shape.end_line}).describe("A file read request with optional inclusive one-based line bounds"),f6=O.object({files:O.array(m1).describe("Array of file read requests. Omit start_line/end_line or set them to null to read from the start; provide integers to return only that inclusive one-based line range. Reads are capped, so page through long files with start_line/end_line. Prefer this tool over running terminal command to get file content for better performance and reliability.")}),NH=O.union([f6,m1,O.array(m1),O.array(O.string()),O.string(),O.object({files:O.array(O.union([A6,m1]))}),O.object({files:m1}),O.object({files:A6}),O.object({file_paths:O.array(A6)}),O.object({file_paths:O.string()}),O.object({paths:O.array(O.union([A6,m1]))}),O.object({paths:m1}),O.object({paths:O.string()})]),U6=O.object({queries:O.array(O.string()).describe("Array of regex search queries to execute")}),wH=O.union([U6,O.array(O.string()),O.string(),O.object({queries:O.string()})]),fZ=O.string().describe(`The non-interactive shell command to execute - MUST keep input short and concise (within ${A$*2} characters) to avoid timeouts.`),J2=O.object({command:O.string().min(1).describe("The executable to run directly without shell parsing."),args:O.array(O.string()).optional().describe("Optional argv list passed directly to the executable.")}),CH=O.union([fZ,J2]),D6=O.object({commands:O.array(fZ).describe("Array of complete shell command strings to execute.")}),xT=O.object({commands:O.array(CH)}),PH=O.union([D6,xT,O.object({commands:CH}),O.array(J2),J2,O.object({command:fZ}),O.object({cmd:fZ}),O.array(O.string()),O.string()]),Q3=O.object({url:O.string().describe("The URL to fetch"),prompt:O.string().min(2).describe("Analysis prompt for the fetched content")}),L6=O.object({requests:O.array(Q3).describe("Array of the URLs for the web fetch requests")}),_6=O.object({path:O.string().min(1).describe("The absolute file path for the action to be performed on"),old_text:O.string().nullable().optional().describe(`Exact text to replace (must match exactly once). Omit this when creating a missing file or inserting via insert_line. Keep this at or below ${A$} characters when possible; larger payloads should be split across multiple tool calls to avoid timeouts.`),new_text:O.string().describe(`The new content to write when creating a missing file, the replacement text for edits, or the inserted text when insert_line is provided. Keep this at or below ${A$} characters when possible; for large edits, use multiple calls with small chunks of old_text and new_text to iteratively edit the file.`),insert_line:O.number().int().nullable().optional().describe("Optional positive one-based boundary line. When provided, the tool inserts new_text before that line instead of performing a replacement edit; use line_count + 1 to append at EOF.")}).describe("Edit a text file by replacing old_text with new_text, create the file with new_text if it does not exist, or insert new_text at insert_line when insert_line is provided. Prefer using this tool for file edits over shell commands. IMPORTANT: large edits can time out, so use small chunks and multiple calls when possible."),z6=O.object({input:O.string().min(1).describe("The freeform apply_patch payload in the canonical patch grammar (e.g *** Begin Patch, *** Update File:, @@, and *** End Patch).")}).describe("Modify or create a text file by applying patches using the canonical apply_patch diff grammar. Prefer sending the patch body directly rather than wrapping it in shell syntax. IMPORTANT: large patches can time out, so use small chunks and multiple calls when possible."),SH=O.union([z6,O.string()]),T6=O.object({skill:O.string().min(1).describe("Name of the skill to execute."),args:O.string().nullable().optional().describe("Arguments for the skill; use null when omitted")}),O6=O.object({question:O.string().min(1).describe('The single question to ask the user. E.g. "How can I help you?"'),options:O.array(O.string().min(1)).min(2).max(5).describe("Array of 2-5 user-selectable answer options for the single question")}),q6=O.object({summary:O.string().min(10).describe("Summarization of the investigation, steps taken, and resolution status to submit at the end of the session. Before submitting, read the problem again along with any provided test's assertions carefully and confirm your fix produces the expected output."),verified:O.boolean().describe(`Have you verified that the issue is resolved to the best of your knowledge, including updating and creating all the requested files and items? 'True' if you have completed the investigation and taken all necessary steps to resolve the issue.
360
360
  'False' if you have done all you can but cannot resolve the issue or if you are stuck and cannot proceed further. =
361
- IMPORTANT: You must run the specific failing test(s) mentioned in the issue or test patch and include the test output in your reasoning. If the test still fails after your fix, you must revise. Do NOT submit with 'true' unless the test output shows the test passing.`)});function J2($){if($ instanceof Error)return $.message;return String($)}function PH($){if(typeof $.old_text==="string"&&$.old_text.length>A$)return`Editor input too large: old_text was ${$.old_text.length} characters, exceeding the recommended limit of ${A$}. Split the edit into smaller tool calls so later tool calls are less likely to be truncated or time out.`;if($.new_text.length>A$)return`Editor input too large: new_text was ${$.new_text.length} characters, exceeding the recommended limit of ${A$}. Split the edit into smaller tool calls so later tool calls are less likely to be truncated or time out.`;return null}class D8 extends Error{timeoutMs;constructor($,Z){super($);this.name="TimeoutError",this.timeoutMs=Z}}function v1($,Z,Q){return Promise.race([$,new Promise((W,J)=>{setTimeout(()=>J(new D8(Q,Z)),Z)})])}function fZ($){let{path:Z,start_line:Q,end_line:W}=$;if(Q==null&&W==null)return Z;return`${Z}:${Q??1}-${W??"EOF"}`}function SH($){let{start_line:Z,end_line:Q}=$;if(Z==null||Q==null||Z<=Q)return null;return`start_line must be less than or equal to end_line (received start_line: ${Z}, end_line: ${Q})`}function bH($){let Z=hT(wH,$);if(typeof Z==="string")return[Z];if(Array.isArray(Z))return Z;if("commands"in Z)return Array.isArray(Z.commands)?Z.commands:[Z.commands];if("command"in Z)return"args"in Z?[Z]:[Z.command];if("cmd"in Z)return[Z.cmd];return[Z]}function kT($){if(typeof $==="string")return $;let Z=$.args??[];if(Z.length===0)return $.command;let Q=Z.map((W)=>/[\s"]/u.test(W)?JSON.stringify(W):W);return`${$.command} ${Q.join(" ")}`}var W3=200;function yH($){let Z=kT($);if(Z.length<=W3)return Z;let Q=Z.length-W3;return`${Z.slice(0,W3)} ... [command truncated: ${Q} more chars; full command is in the tool call input]`}var c1=48000;function X2($,Z={}){let Q=Z.maxChars??48000,W=Z.totalChars??$.length;if($.length<=Q&&W<=Q)return $;let J=Math.ceil(Q/2),X=Math.max(1,Q-J);return`${$.slice(0,J)}
361
+ IMPORTANT: You must run the specific failing test(s) mentioned in the issue or test patch and include the test output in your reasoning. If the test still fails after your fix, you must revise. Do NOT submit with 'true' unless the test output shows the test passing.`)});function X2($){if($ instanceof Error)return $.message;return String($)}function bH($){if(typeof $.old_text==="string"&&$.old_text.length>A$)return`Editor input too large: old_text was ${$.old_text.length} characters, exceeding the recommended limit of ${A$}. Split the edit into smaller tool calls so later tool calls are less likely to be truncated or time out.`;if($.new_text.length>A$)return`Editor input too large: new_text was ${$.new_text.length} characters, exceeding the recommended limit of ${A$}. Split the edit into smaller tool calls so later tool calls are less likely to be truncated or time out.`;return null}class D8 extends Error{timeoutMs;constructor($,Z){super($);this.name="TimeoutError",this.timeoutMs=Z}}function v1($,Z,Q){return Promise.race([$,new Promise((W,J)=>{setTimeout(()=>J(new D8(Q,Z)),Z)})])}function UZ($){let{path:Z,start_line:Q,end_line:W}=$;if(Q==null&&W==null)return Z;return`${Z}:${Q??1}-${W??"EOF"}`}function yH($){let{start_line:Z,end_line:Q}=$;if(Z==null||Q==null||Z<=Q)return null;return`start_line must be less than or equal to end_line (received start_line: ${Z}, end_line: ${Q})`}function hH($){let Z=gT(PH,$);if(typeof Z==="string")return[Z];if(Array.isArray(Z))return Z;if("commands"in Z)return Array.isArray(Z.commands)?Z.commands:[Z.commands];if("command"in Z)return"args"in Z?[Z]:[Z.command];if("cmd"in Z)return[Z.cmd];return[Z]}function mT($){if(typeof $==="string")return $;let Z=$.args??[];if(Z.length===0)return $.command;let Q=Z.map((W)=>/[\s"]/u.test(W)?JSON.stringify(W):W);return`${$.command} ${Q.join(" ")}`}var W3=200;function kH($){let Z=mT($);if(Z.length<=W3)return Z;let Q=Z.length-W3;return`${Z.slice(0,W3)} ... [command truncated: ${Q} more chars; full command is in the tool call input]`}var c1=48000;function Y2($,Z={}){let Q=Z.maxChars??48000,W=Z.totalChars??$.length;if($.length<=Q&&W<=Q)return $;let J=Math.ceil(Q/2),X=Math.max(1,Q-J);return`${$.slice(0,J)}
362
362
  [... output truncated: ${W} chars total. Refine the command (grep, head, tail) to view the elided middle ...]
363
- `+$.slice(-X)}var L8=2000,J3=2000,UZ=48000,_8=48000;class DZ extends Error{exitCode;output;constructor($,Z){super(`Command exited with code ${$}`);this.exitCode=$;this.output=Z;this.name="CommandExitError"}}function kH($){let Z=Math.ceil($/2),Q=Math.max(1,$-Z),W=new IT("utf8"),J="",X="",Y=0,j=(V)=>{if(!V)return;Y+=V.length;let H=Z-J.length;if(H>0){J+=V.slice(0,H),X=(X+V.slice(H)).slice(-Q);return}X=(X+V).slice(-Q)};return{append(V){j(W.write(V))},snapshot(){return j(W.end()),{text:J+X,totalChars:Y,dropped:Y>J.length+X.length}}}}function mT($,Z,Q,W,J){return new Promise((X,Y)=>{let j=process.platform==="win32",V=hH($.executable,$.args,{cwd:$.cwd,env:{...process.env,...$.env},stdio:["pipe","pipe","pipe"],detached:!j,windowsHide:!0}),H=V.pid,B=kH(W),G=kH(W),K=!1,F=!1,A=(O)=>{if(F)return;F=!0,O()},L=()=>{if(!H)return;if(j){hH("taskkill",["/pid",String(H),"/T","/F"],{stdio:"ignore",shell:!0,windowsHide:!0}).unref();return}try{process.kill(-H,"SIGKILL")}catch{V.kill("SIGKILL")}},f=(O)=>{K=!0,L(),A(()=>Y(O))},D=setTimeout(()=>f(new D8(`Command timed out after ${Q}ms`,Q)),Q),U=()=>f(Error("Command was aborted"));if(Z.signal)Z.signal.addEventListener("abort",U);let T=()=>{clearTimeout(D),Z.signal?.removeEventListener("abort",U)};V.stdout?.on("data",(O)=>{B.append(O)}),V.stderr?.on("data",(O)=>{G.append(O)}),V.on("close",(O)=>{if(T(),K)return;let z=B.snapshot(),_=G.snapshot();if(O!==0){let E=O??1,C=J?z.text+(_.text?`
363
+ `+$.slice(-X)}var L8=2000,J3=2000,DZ=48000,_8=48000;class LZ extends Error{exitCode;output;constructor($,Z){super(`Command exited with code ${$}`);this.exitCode=$;this.output=Z;this.name="CommandExitError"}}function xH($){let Z=Math.ceil($/2),Q=Math.max(1,$-Z),W=new vT("utf8"),J="",X="",Y=0,j=(V)=>{if(!V)return;Y+=V.length;let H=Z-J.length;if(H>0){J+=V.slice(0,H),X=(X+V.slice(H)).slice(-Q);return}X=(X+V).slice(-Q)};return{append(V){j(W.write(V))},snapshot(){return j(W.end()),{text:J+X,totalChars:Y,dropped:Y>J.length+X.length}}}}function dT($,Z,Q,W,J){return new Promise((X,Y)=>{let j=process.platform==="win32",V=IH($.executable,$.args,{cwd:$.cwd,env:{...process.env,...$.env},stdio:["pipe","pipe","pipe"],detached:!j,windowsHide:!0}),H=V.pid,B=xH(W),G=xH(W),K=!1,F=!1,A=(q)=>{if(F)return;F=!0,q()},L=()=>{if(!H)return;if(j){IH("taskkill",["/pid",String(H),"/T","/F"],{stdio:"ignore",shell:!0,windowsHide:!0}).unref();return}try{process.kill(-H,"SIGKILL")}catch{V.kill("SIGKILL")}},f=(q)=>{K=!0,L(),A(()=>Y(q))},D=setTimeout(()=>f(new D8(`Command timed out after ${Q}ms`,Q)),Q),U=()=>f(Error("Command was aborted"));if(Z.signal)Z.signal.addEventListener("abort",U);let T=()=>{clearTimeout(D),Z.signal?.removeEventListener("abort",U)};V.stdout?.on("data",(q)=>{B.append(q)}),V.stderr?.on("data",(q)=>{G.append(q)}),V.on("close",(q)=>{if(T(),K)return;let z=B.snapshot(),_=G.snapshot();if(q!==0){let E=q??1,C=J?z.text+(_.text?`
364
364
  [stderr]
365
- ${_.text}`:""):z.text,y=z.dropped||J&&_.dropped,l=J?z.totalChars+_.totalChars:z.totalChars;if(y||C.length>W)C=X2(C,{maxChars:W,totalChars:l});let o=C.length>0?`[Command exited with code ${E}]
366
- ${C}`:`[Command exited with code ${E}]`;A(()=>Y(new DZ(E,o)))}else{let E=J?z.text+(_.text?`
365
+ ${_.text}`:""):z.text,y=z.dropped||J&&_.dropped,l=J?z.totalChars+_.totalChars:z.totalChars;if(y||C.length>W)C=Y2(C,{maxChars:W,totalChars:l});let o=C.length>0?`[Command exited with code ${E}]
366
+ ${C}`:`[Command exited with code ${E}]`;A(()=>Y(new LZ(E,o)))}else{let E=J?z.text+(_.text?`
367
367
  [stderr]
368
- ${_.text}`:""):z.text;if(z.dropped||J&&_.dropped||E.length>W){let y=J?z.totalChars+_.totalChars:z.totalChars;E=X2(E,{maxChars:W,totalChars:y})}A(()=>X(E))}}),V.on("error",(O)=>{T(),A(()=>Y(Error(`Failed to execute command: ${O.message}`)))})})}function Y2($={}){let{shell:Z=xT(process.platform),timeoutMs:Q=30000,env:W={},combineOutput:J=!0}=$,X=$.maxOutputChars??$.maxOutputBytes??c1;return(Y,j,V)=>{let H=typeof Y!=="string";return mT({executable:H?Y.command:Z,args:H?Y.args??[]:gT(Z,Y),cwd:j,env:W},V,Q,X,J)}}function IH($,Z){let Q=$.metadata?.[Z];return typeof Q==="string"?Q:void 0}function vT($,Z){Pj(qH($.metadata),{tool_name:"run_commands",effective_timeout_ms:Z.effectiveTimeoutMs,timeout_source:Z.timeoutSource,command_count:Z.commandCount,duration_ms:Z.durationMs,ulid:$.sessionId,mode:IH($,"mode"),source:IH($,"source"),session_id:$.sessionId,agent_id:$.agentId,conversation_id:$.conversationId,run_id:$.runId,iteration:$.iteration,tool_call_id:$.toolCallId})}function cT($){let Z=$.match(/(?<![<])<<-?\s*(?:"([^"]+)"|'([^']+)'|([A-Za-z0-9_./-]+))/);return Z?.[1]??Z?.[2]??Z?.[3]}function uT($){let Z=[];for(let Q=0;Q<$.length;Q+=1){let W=$[Q],J=cT(W);if(!J){Z.push(W);continue}let X=$.findIndex((j,V)=>V>Q&&j.trim()===J);if(X===-1){Z.push(W);continue}let Y=[W];while(Q<X){Q+=1;let j=$[Q];Y.push(j)}Z.push(Y.join(`
369
- `))}return Z}function dT($){let Z=[],Q=[],W=()=>{if(Q.length>0)Z.push(...uT(Q)),Q=[]};for(let J of $){if(typeof J==="string"){Q.push(J);continue}W(),Z.push(J)}return W(),Z}async function lT($,Z){let{executor:Q,cwd:W,context:J,timeoutMs:X,timeoutSource:Y}=Z;return Promise.all($.map(async(j)=>{let V=Date.now(),H=yH(j);try{let B=await v1(Q(j,W,J),X,`Command timed out after ${X}ms`);return{query:H,result:B,success:!0}}catch(B){if(B instanceof D8)vT(J,{effectiveTimeoutMs:B.timeoutMs,timeoutSource:Y,commandCount:$.length,durationMs:Date.now()-V});if(B instanceof DZ)return{query:H,result:B.output,error:B.message,success:!1};let G=J2(B);return{query:H,result:"",error:`Command failed: ${G}`,success:!1}}}))}function X3($,Z={}){let Q=Z.fileReadTimeoutMs??1e4;return f$({name:"read_files",description:`Read the content of text or image files at the provided absolute paths, or return only an inclusive one-based line range when start_line/end_line are provided. When you already know multiple files you need, read them together in one call, and call this tool in the same response as other independent tool calls. Each read returns at most ${L8} lines / ~${Math.round(UZ/1024)}k characters; longer files report their total line count, page through them with start_line/end_line. Binary files that are not image and large files are not supported. Returns file contents or error messages for each path. `,inputSchema:u1(f6),timeoutMs:Q*2,retryable:!0,maxRetries:1,execute:async(W,J)=>{let X=U$(RH,W),Y;if(typeof X==="string")Y=[{path:X}];else if(Array.isArray(X))Y=X.map((j)=>typeof j==="string"?{path:j}:j);else if("files"in X)Y=(Array.isArray(X.files)?X.files:[X.files]).map((V)=>typeof V==="string"?{path:V}:V);else if("file_paths"in X)Y=(Array.isArray(X.file_paths)?X.file_paths:[X.file_paths]).map((V)=>({path:V}));else if("paths"in X)Y=(Array.isArray(X.paths)?X.paths:[X.paths]).map((V)=>typeof V==="string"?{path:V}:V);else Y=[X];return Promise.all(Y.map(async(j)=>{let V=SH(j);if(V)return{query:fZ(j),result:"",error:`Invalid file range: ${V}`,success:!1};try{let H=await v1($(j,J),Q,`File read timed out after ${Q}ms`);return{query:fZ(j),result:H,success:!0}}catch(H){let B=J2(H);return{query:fZ(j),result:"",error:`Error reading file: ${B}`,success:!1}}}))}})}function Y3($,Z={}){let Q=Z.searchTimeoutMs??30000,W=Z.cwd??process.cwd();return f$({name:"search_codebase",description:`Perform regex pattern searches across the codebase. Supports multiple parallel searches. When several search patterns could be useful and do not depend on each other, run them together in one call, and call this tool in the same response as other independent tool calls. Use for finding code patterns, function definitions, class names, imports, etc. Output beyond ~${Math.round(_8/1000)}k characters per query is middle-truncated; narrow patterns beat broad ones.`,inputSchema:u1(U6),timeoutMs:Q*2,retryable:!0,maxRetries:1,execute:async(J,X)=>{let Y=U$(EH,J),j=Array.isArray(Y)?Y:typeof Y==="object"?Array.isArray(Y.queries)?Y.queries:[Y.queries]:[Y];return Promise.all(j.map(async(V)=>{try{let H=await v1($(V,W,X),Q,`Search timed out after ${Q}ms`);return{query:V,result:H,success:!0}}catch(H){let B=J2(H);return{query:V,result:"",error:`Search failed: ${B}`,success:!1}}}))}})}var xH="Use for listing files, checking git status, running builds, executing tests, etc. Commands must be non-interactive. Commands that require follow-up input like pagers should be skipped or used with supported flags/env (e.g. git --no-pager, --non-interactive) to bypass the interaction steps. ";function M6($,Z={}){let Q=Z.bashTimeoutMs??30000,W=Z.bashTimeoutMs===void 0?"default_setting":"configured_setting",J=Z.cwd??process.cwd(),X=process.platform==="win32";return f$({name:"run_commands",description:X?"Run non-interactive shell commands from the root of the workspace in Windows environment. "+xH+`Output beyond ~${Math.round(c1/1000)}k characters is middle-truncated (start and end preserved); filter output when you need specific sections. Prefer structured { command, args } entries for portability; plain string commands should be properly shell-escaped. Include multiple commands in the same call when they are independent and safe to run concurrently. When independent reads, searches, or edits are also needed, call those tools in the same response.`:"Run non-interactive shell commands from the root of the workspace. "+xH+`Commands should be properly shell-escaped and targeted to avoid error or timeout. Include multiple commands in the same call when they are independent complete shell commands and safe to run concurrently; multiline scripts and heredocs must be a single command string. When independent reads, searches, or edits are also needed, call those tools in the same response. Output beyond ~${Math.round(c1/1000)}k characters is middle-truncated (start and end preserved); pipe through grep/head/tail when you need specific sections of large output. For long-running commands, run them in background and redirect output to a tmp file that you can read from later.`,inputSchema:u1(D6),timeoutMs:Q*2,retryable:!1,maxRetries:0,execute:async(Y,j)=>{let V=dT(bH(Y));return lT(V,{executor:$,cwd:J,context:j,timeoutMs:Q,timeoutSource:W})}})}function j3($,Z={}){let Q=Z.webFetchTimeoutMs??30000;return f$({name:"fetch_web_content",description:"Fetch content from URLs and analyze them using the provided prompts. Use for retrieving documentation, API references, or any web content. Each request includes a URL and a prompt describing what information to extract. Fetch independent URLs together in one call, and call this tool in the same response as other independent tool calls.",inputSchema:u1(L6),timeoutMs:Q*2,retryable:!0,maxRetries:2,execute:async(W,J)=>{let X=U$(L6,W);return Promise.all(X.requests.map(async(Y)=>{try{let j=await v1($(Y.url,Y.prompt,J),Q,`Web fetch timed out after ${Q}ms`);return{query:Y.url,result:j,success:!0}}catch(j){let V=J2(j);return{query:Y.url,result:"",error:`Error fetching web content: ${V}`,success:!1}}}))}})}var pT=`Use \`apply_patch\` to edit files with the canonical freeform patch grammar. Pass the patch text directly as the \`input\` string. Prefer the exact format below:
368
+ ${_.text}`:""):z.text;if(z.dropped||J&&_.dropped||E.length>W){let y=J?z.totalChars+_.totalChars:z.totalChars;E=Y2(E,{maxChars:W,totalChars:y})}A(()=>X(E))}}),V.on("error",(q)=>{T(),A(()=>Y(Error(`Failed to execute command: ${q.message}`)))})})}function j2($={}){let{shell:Z=cT(process.platform),timeoutMs:Q=30000,env:W={},combineOutput:J=!0}=$,X=$.maxOutputChars??$.maxOutputBytes??c1;return(Y,j,V)=>{let H=typeof Y!=="string";return dT({executable:H?Y.command:Z,args:H?Y.args??[]:uT(Z,Y),cwd:j,env:W},V,Q,X,J)}}function gH($,Z){let Q=$.metadata?.[Z];return typeof Q==="string"?Q:void 0}function lT($,Z){Pj(RH($.metadata),{tool_name:"run_commands",effective_timeout_ms:Z.effectiveTimeoutMs,timeout_source:Z.timeoutSource,command_count:Z.commandCount,duration_ms:Z.durationMs,ulid:$.sessionId,mode:gH($,"mode"),source:gH($,"source"),session_id:$.sessionId,agent_id:$.agentId,conversation_id:$.conversationId,run_id:$.runId,iteration:$.iteration,tool_call_id:$.toolCallId})}function pT($){let Z=$.match(/(?<![<])<<-?\s*(?:"([^"]+)"|'([^']+)'|([A-Za-z0-9_./-]+))/);return Z?.[1]??Z?.[2]??Z?.[3]}function rT($){let Z=[];for(let Q=0;Q<$.length;Q+=1){let W=$[Q],J=pT(W);if(!J){Z.push(W);continue}let X=$.findIndex((j,V)=>V>Q&&j.trim()===J);if(X===-1){Z.push(W);continue}let Y=[W];while(Q<X){Q+=1;let j=$[Q];Y.push(j)}Z.push(Y.join(`
369
+ `))}return Z}function iT($){let Z=[],Q=[],W=()=>{if(Q.length>0)Z.push(...rT(Q)),Q=[]};for(let J of $){if(typeof J==="string"){Q.push(J);continue}W(),Z.push(J)}return W(),Z}async function nT($,Z){let{executor:Q,cwd:W,context:J,timeoutMs:X,timeoutSource:Y}=Z;return Promise.all($.map(async(j)=>{let V=Date.now(),H=kH(j);try{let B=await v1(Q(j,W,J),X,`Command timed out after ${X}ms`);return{query:H,result:B,success:!0}}catch(B){if(B instanceof D8)lT(J,{effectiveTimeoutMs:B.timeoutMs,timeoutSource:Y,commandCount:$.length,durationMs:Date.now()-V});if(B instanceof LZ)return{query:H,result:B.output,error:B.message,success:!1};let G=X2(B);return{query:H,result:"",error:`Command failed: ${G}`,success:!1}}}))}function X3($,Z={}){let Q=Z.fileReadTimeoutMs??1e4;return f$({name:"read_files",description:`Read the content of text or image files at the provided absolute paths, or return only an inclusive one-based line range when start_line/end_line are provided. When you already know multiple files you need, read them together in one call, and call this tool in the same response as other independent tool calls. Each read returns at most ${L8} lines / ~${Math.round(DZ/1024)}k characters; longer files report their total line count, page through them with start_line/end_line. Binary files that are not image and large files are not supported. Returns file contents or error messages for each path. `,inputSchema:u1(f6),timeoutMs:Q*2,retryable:!0,maxRetries:1,execute:async(W,J)=>{let X=U$(NH,W),Y;if(typeof X==="string")Y=[{path:X}];else if(Array.isArray(X))Y=X.map((j)=>typeof j==="string"?{path:j}:j);else if("files"in X)Y=(Array.isArray(X.files)?X.files:[X.files]).map((V)=>typeof V==="string"?{path:V}:V);else if("file_paths"in X)Y=(Array.isArray(X.file_paths)?X.file_paths:[X.file_paths]).map((V)=>({path:V}));else if("paths"in X)Y=(Array.isArray(X.paths)?X.paths:[X.paths]).map((V)=>typeof V==="string"?{path:V}:V);else Y=[X];return Promise.all(Y.map(async(j)=>{let V=yH(j);if(V)return{query:UZ(j),result:"",error:`Invalid file range: ${V}`,success:!1};try{let H=await v1($(j,J),Q,`File read timed out after ${Q}ms`);return{query:UZ(j),result:H,success:!0}}catch(H){let B=X2(H);return{query:UZ(j),result:"",error:`Error reading file: ${B}`,success:!1}}}))}})}function Y3($,Z={}){let Q=Z.searchTimeoutMs??30000,W=Z.cwd??process.cwd();return f$({name:"search_codebase",description:`Perform regex pattern searches across the codebase. Supports multiple parallel searches. When several search patterns could be useful and do not depend on each other, run them together in one call, and call this tool in the same response as other independent tool calls. Use for finding code patterns, function definitions, class names, imports, etc. Output beyond ~${Math.round(_8/1000)}k characters per query is middle-truncated; narrow patterns beat broad ones.`,inputSchema:u1(U6),timeoutMs:Q*2,retryable:!0,maxRetries:1,execute:async(J,X)=>{let Y=U$(wH,J),j=Array.isArray(Y)?Y:typeof Y==="object"?Array.isArray(Y.queries)?Y.queries:[Y.queries]:[Y];return Promise.all(j.map(async(V)=>{try{let H=await v1($(V,W,X),Q,`Search timed out after ${Q}ms`);return{query:V,result:H,success:!0}}catch(H){let B=X2(H);return{query:V,result:"",error:`Search failed: ${B}`,success:!1}}}))}})}var mH="Use for listing files, checking git status, running builds, executing tests, etc. Commands must be non-interactive. Commands that require follow-up input like pagers should be skipped or used with supported flags/env (e.g. git --no-pager, --non-interactive) to bypass the interaction steps. ";function M6($,Z={}){let Q=Z.bashTimeoutMs??30000,W=Z.bashTimeoutMs===void 0?"default_setting":"configured_setting",J=Z.cwd??process.cwd(),X=process.platform==="win32";return f$({name:"run_commands",description:X?"Run non-interactive shell commands from the root of the workspace in Windows environment. "+mH+`Output beyond ~${Math.round(c1/1000)}k characters is middle-truncated (start and end preserved); filter output when you need specific sections. Commands run through PowerShell; quote paths and arguments for PowerShell and use ';' to sequence commands. Include multiple commands in the same call when they are independent and safe to run concurrently. When independent reads, searches, or edits are also needed, call those tools in the same response.`:"Run non-interactive shell commands from the root of the workspace. "+mH+`Commands should be properly shell-escaped and targeted to avoid error or timeout. Include multiple commands in the same call when they are independent complete shell commands and safe to run concurrently; multiline scripts and heredocs must be a single command string. When independent reads, searches, or edits are also needed, call those tools in the same response. Output beyond ~${Math.round(c1/1000)}k characters is middle-truncated (start and end preserved); pipe through grep/head/tail when you need specific sections of large output. For long-running commands, run them in background and redirect output to a tmp file that you can read from later.`,inputSchema:u1(D6),timeoutMs:Q*2,retryable:!1,maxRetries:0,execute:async(Y,j)=>{let V=iT(hH(Y));return nT(V,{executor:$,cwd:J,context:j,timeoutMs:Q,timeoutSource:W})}})}function j3($,Z={}){let Q=Z.webFetchTimeoutMs??30000;return f$({name:"fetch_web_content",description:"Fetch content from URLs and analyze them using the provided prompts. Use for retrieving documentation, API references, or any web content. Each request includes a URL and a prompt describing what information to extract. Fetch independent URLs together in one call, and call this tool in the same response as other independent tool calls.",inputSchema:u1(L6),timeoutMs:Q*2,retryable:!0,maxRetries:2,execute:async(W,J)=>{let X=U$(L6,W);return Promise.all(X.requests.map(async(Y)=>{try{let j=await v1($(Y.url,Y.prompt,J),Q,`Web fetch timed out after ${Q}ms`);return{query:Y.url,result:j,success:!0}}catch(j){let V=X2(j);return{query:Y.url,result:"",error:`Error fetching web content: ${V}`,success:!1}}}))}})}var aT=`Use \`apply_patch\` to edit files with the canonical freeform patch grammar. Pass the patch text directly as the \`input\` string. Prefer the exact format below:
370
370
 
371
371
  *** Begin Patch
372
372
  *** Update File: path/to/file.ts
@@ -402,48 +402,48 @@ Example:
402
402
  </div>
403
403
  );
404
404
  }
405
- *** End Patch`;function V3($,Z={}){let Q=Z.applyPatchTimeoutMs??30000,W=Z.cwd??process.cwd();return f$({name:"apply_patch",description:pT,inputSchema:u1(z6),timeoutMs:Q,retryable:!1,maxRetries:0,execute:async(J,X)=>{let Y=U$(CH,J),j=typeof Y==="string"?Y:Y.input;try{return{query:"apply_patch",result:await v1($({input:j},W,X),Q,`apply_patch timed out after ${Q}ms`),success:!0}}catch(V){return{query:"apply_patch",result:"",error:`apply_patch failed: ${J2(V)}`,success:!1}}}})}function H3($,Z={}){let Q=Z.editorTimeoutMs??30000,W=Z.cwd??process.cwd();return f$({name:"editor",description:"An editor for controlled filesystem edits on the text file at the provided path. Provide `insert_line` to insert `new_text` at a specific line number. Otherwise, the tool replaces `old_text` with `new_text`, or creates the file with `new_text` if file does not exist. Use this tool for making small, precise edits to existing files or creating new files over shell commands. If several edits to different files or non-overlapping regions are already known, emit multiple editor tool calls in the same response instead of serializing them across turns.",inputSchema:u1(_6),timeoutMs:Q,retryable:!1,maxRetries:0,execute:async(J,X)=>{let Y=U$(_6,J),j=Y.insert_line==null?"edit":"insert",V=PH(Y);if(V)return{query:`${j}:${Y.path}`,result:"",error:V,success:!1};try{let H=await v1($(Y,W,X),Q,`Editor operation timed out after ${Q}ms`);return{query:`${j}:${Y.path}`,result:H,success:!0}}catch(H){let B=J2(H);return{query:`${j}:${Y.path}`,result:"",error:`Editor operation failed: ${B}`,success:!1}}}})}function j2($,Z={}){let Q=Z.skillsTimeoutMs??15000,W='Execute a skill within the main conversation. When users ask you to perform tasks, check if any available skills match. When users reference a slash command, invoke it with this tool. Input: `skill` (required) and optional `args`. Example: `skill: "pdf"`, `skill: "commit", args: "-m \\"Fix bug\\""`, `skill: "review-pr", args: "123"`, `skill: "ms-office-suite:pdf"`. When a skill matches the user\'s request, invoking this tool is a blocking requirement before any other response. Never mention a skill without invoking this tool.',J=f$({name:"skills",description:W,inputSchema:u1(T6),timeoutMs:Q,retryable:!1,maxRetries:0,execute:async(X,Y)=>{let j=U$(T6,X);return v1($(j.skill,j.args||void 0,Y),Q,`Skills operation timed out after ${Q}ms`)}});return Object.defineProperty(J,"description",{get(){let X=$.configuredSkills?.filter((Y)=>!Y.disabled).map((Y)=>Y.name);if(X&&X.length>0)return`${W} Available skills: ${X.join(", ")}.`;return W},enumerable:!0,configurable:!0}),J}function B3($){return{name:"ask_question",description:"Ask user a question for clarifying or gathering information needed to complete the task. For example, ask the user clarifying questions about a key implementation decision. You should only ask one question. Provide an array of 2-5 options for the user to choose from. Never include an option to toggle to Act mode.",inputSchema:u1(O6),retryable:!1,maxRetries:0,execute:async(Z,Q)=>{let W=U$(O6,Z);return $(W.question,W.options,Q)}}}function G3($,Z={}){let Q=Z.submitTimeoutMs??15000;return f$({name:"submit_and_exit",description:"Submit the final answer and exit the conversation. For example, submit a summary of the investigation and confirm the issue is resolved. You should only submit once all necessary steps are completed. Make sure to verify your output matches the expected format, data types, and file locations specified. Provide a summary of the investigation and confirm the issue is resolved.",inputSchema:u1(q6),lifecycle:{completesRun:!0},timeoutMs:Q,retryable:!1,maxRetries:0,execute:async(W,J)=>{let X=U$(q6,W);return v1($(X.summary,X.verified,J),Q,`submit_and_exit timed out after ${Q}ms`)}})}function D$($){let{executors:Z,enableReadFiles:Q=!0,enableSearch:W=!0,enableBash:J=!0,enableWebFetch:X=!0,enableApplyPatch:Y=!1,enableEditor:j=!0,enableSkills:V=!0,enableAskQuestion:H=!0,enableSubmitAndExit:B=!1,...G}=$,K=[];if(Q&&Z.readFile)K.push(X3(Z.readFile,G));if(W&&Z.search)K.push(Y3(Z.search,G));if(J&&Z.bash)K.push(M6(Z.bash,G));if(X&&Z.webFetch)K.push(j3(Z.webFetch,G));if(j&&Z.editor)K.push(H3(Z.editor,G));else if(Y&&Z.applyPatch)K.push(V3(Z.applyPatch,G));if(V&&Z.skills)K.push(j2(Z.skills,G));let F=B?Z.submit:void 0;if(H&&Z.askQuestion&&!F)K.push(B3(Z.askQuestion));if(F)K.push(G3(F,G));return K}import*as v0 from"node:fs/promises";import*as c0 from"node:path";var d={BEGIN:"*** Begin Patch",END:"*** End Patch",ADD:"*** Add File: ",UPDATE:"*** Update File: ",DELETE:"*** Delete File: ",MOVE:"*** Move to: ",SECTION:"@@",END_FILE:"*** End of File"},mH=["%%bash","apply_patch","EOF","```"];class V0 extends Error{constructor($){super($);this.name="DiffError"}}function m0($){let Z={"‐":"-","‑":"-","‒":"-","–":"-","—":"-","−":"-","“":'"',"”":'"',"„":'"',"«":'"',"»":'"',"‘":"'","’":"'","‛":"'"," ":" "," ":" "};return $.normalize("NFC").replace(/./gu,(Q)=>Z[Q]??Q).replace(/\\`/g,"`").replace(/\\'/g,"'").replace(/\\"/g,'"')}class K3{lines;currentFiles;patch={actions:{},warnings:[]};index=0;fuzz=0;currentPath;constructor($,Z){this.lines=$;this.currentFiles=Z}parse(){this.skipBeginSentinel();while(this.hasMoreLines()&&!this.isEndMarker())this.parseNextAction();if(this.patch.warnings?.length===0)delete this.patch.warnings;return{patch:this.patch,fuzz:this.fuzz}}addWarning($){if(!this.patch.warnings)this.patch.warnings=[];this.patch.warnings.push($)}skipBeginSentinel(){if(this.lines[this.index]?.startsWith(d.BEGIN))this.index++}hasMoreLines(){return this.index<this.lines.length}isEndMarker(){return this.lines[this.index]?.startsWith(d.END)??!1}parseNextAction(){let $=this.lines[this.index];if($?.startsWith(d.UPDATE)){this.parseUpdate($.substring(d.UPDATE.length).trim());return}if($?.startsWith(d.DELETE)){this.parseDelete($.substring(d.DELETE.length).trim());return}if($?.startsWith(d.ADD)){this.parseAdd($.substring(d.ADD.length).trim());return}throw new V0(`Unknown line while parsing: ${$}`)}checkDuplicate($,Z){if($ in this.patch.actions)throw new V0(`Duplicate ${Z} for file: ${$}`)}parseUpdate($){this.checkDuplicate($,"update"),this.currentPath=$,this.index++;let Z=this.lines[this.index]?.startsWith(d.MOVE)?(this.lines[this.index++]??"").substring(d.MOVE.length).trim():void 0;if(!($ in this.currentFiles))throw new V0(`Update File Error: Missing File: ${$}`);let Q=this.currentFiles[$]??"",W=this.parseUpdateFile(Q,$);W.movePath=Z,this.patch.actions[$]=W,this.currentPath=void 0}parseUpdateFile($,Z){let Q={type:"update",chunks:[]},W=$.split(`
405
+ *** End Patch`;function V3($,Z={}){let Q=Z.applyPatchTimeoutMs??30000,W=Z.cwd??process.cwd();return f$({name:"apply_patch",description:aT,inputSchema:u1(z6),timeoutMs:Q,retryable:!1,maxRetries:0,execute:async(J,X)=>{let Y=U$(SH,J),j=typeof Y==="string"?Y:Y.input;try{return{query:"apply_patch",result:await v1($({input:j},W,X),Q,`apply_patch timed out after ${Q}ms`),success:!0}}catch(V){return{query:"apply_patch",result:"",error:`apply_patch failed: ${X2(V)}`,success:!1}}}})}function H3($,Z={}){let Q=Z.editorTimeoutMs??30000,W=Z.cwd??process.cwd();return f$({name:"editor",description:"An editor for controlled filesystem edits on the text file at the provided path. Provide `insert_line` to insert `new_text` at a specific line number. Otherwise, the tool replaces `old_text` with `new_text`, or creates the file with `new_text` if file does not exist. Use this tool for making small, precise edits to existing files or creating new files over shell commands. If several edits to different files or non-overlapping regions are already known, emit multiple editor tool calls in the same response instead of serializing them across turns.",inputSchema:u1(_6),timeoutMs:Q,retryable:!1,maxRetries:0,execute:async(J,X)=>{let Y=U$(_6,J),j=Y.insert_line==null?"edit":"insert",V=bH(Y);if(V)return{query:`${j}:${Y.path}`,result:"",error:V,success:!1};try{let H=await v1($(Y,W,X),Q,`Editor operation timed out after ${Q}ms`);return{query:`${j}:${Y.path}`,result:H,success:!0}}catch(H){let B=X2(H);return{query:`${j}:${Y.path}`,result:"",error:`Editor operation failed: ${B}`,success:!1}}}})}function V2($,Z={}){let Q=Z.skillsTimeoutMs??15000,W='Execute a skill within the main conversation. When users ask you to perform tasks, check if any available skills match. When users reference a slash command, invoke it with this tool. Input: `skill` (required) and optional `args`. Example: `skill: "pdf"`, `skill: "commit", args: "-m \\"Fix bug\\""`, `skill: "review-pr", args: "123"`, `skill: "ms-office-suite:pdf"`. When a skill matches the user\'s request, invoking this tool is a blocking requirement before any other response. Never mention a skill without invoking this tool.',J=f$({name:"skills",description:W,inputSchema:u1(T6),timeoutMs:Q,retryable:!1,maxRetries:0,execute:async(X,Y)=>{let j=U$(T6,X);return v1($(j.skill,j.args||void 0,Y),Q,`Skills operation timed out after ${Q}ms`)}});return Object.defineProperty(J,"description",{get(){let X=$.configuredSkills?.filter((Y)=>!Y.disabled).map((Y)=>Y.name);if(X&&X.length>0)return`${W} Available skills: ${X.join(", ")}.`;return W},enumerable:!0,configurable:!0}),J}function B3($){return{name:"ask_question",description:"Ask user a question for clarifying or gathering information needed to complete the task. For example, ask the user clarifying questions about a key implementation decision. You should only ask one question. Provide an array of 2-5 options for the user to choose from. Never include an option to toggle to Act mode.",inputSchema:u1(O6),retryable:!1,maxRetries:0,execute:async(Z,Q)=>{let W=U$(O6,Z);return $(W.question,W.options,Q)}}}function G3($,Z={}){let Q=Z.submitTimeoutMs??15000;return f$({name:"submit_and_exit",description:"Submit the final answer and exit the conversation. For example, submit a summary of the investigation and confirm the issue is resolved. You should only submit once all necessary steps are completed. Make sure to verify your output matches the expected format, data types, and file locations specified. Provide a summary of the investigation and confirm the issue is resolved.",inputSchema:u1(q6),lifecycle:{completesRun:!0},timeoutMs:Q,retryable:!1,maxRetries:0,execute:async(W,J)=>{let X=U$(q6,W);return v1($(X.summary,X.verified,J),Q,`submit_and_exit timed out after ${Q}ms`)}})}function D$($){let{executors:Z,enableReadFiles:Q=!0,enableSearch:W=!0,enableBash:J=!0,enableWebFetch:X=!0,enableApplyPatch:Y=!1,enableEditor:j=!0,enableSkills:V=!0,enableAskQuestion:H=!0,enableSubmitAndExit:B=!1,...G}=$,K=[];if(Q&&Z.readFile)K.push(X3(Z.readFile,G));if(W&&Z.search)K.push(Y3(Z.search,G));if(J&&Z.bash)K.push(M6(Z.bash,G));if(X&&Z.webFetch)K.push(j3(Z.webFetch,G));if(j&&Z.editor)K.push(H3(Z.editor,G));else if(Y&&Z.applyPatch)K.push(V3(Z.applyPatch,G));if(V&&Z.skills)K.push(V2(Z.skills,G));let F=B?Z.submit:void 0;if(H&&Z.askQuestion&&!F)K.push(B3(Z.askQuestion));if(F)K.push(G3(F,G));return K}import*as v0 from"node:fs/promises";import*as c0 from"node:path";var d={BEGIN:"*** Begin Patch",END:"*** End Patch",ADD:"*** Add File: ",UPDATE:"*** Update File: ",DELETE:"*** Delete File: ",MOVE:"*** Move to: ",SECTION:"@@",END_FILE:"*** End of File"},cH=["%%bash","apply_patch","EOF","```"];class V0 extends Error{constructor($){super($);this.name="DiffError"}}function m0($){let Z={"‐":"-","‑":"-","‒":"-","–":"-","—":"-","−":"-","“":'"',"”":'"',"„":'"',"«":'"',"»":'"',"‘":"'","’":"'","‛":"'"," ":" "," ":" "};return $.normalize("NFC").replace(/./gu,(Q)=>Z[Q]??Q).replace(/\\`/g,"`").replace(/\\'/g,"'").replace(/\\"/g,'"')}class K3{lines;currentFiles;patch={actions:{},warnings:[]};index=0;fuzz=0;currentPath;constructor($,Z){this.lines=$;this.currentFiles=Z}parse(){this.skipBeginSentinel();while(this.hasMoreLines()&&!this.isEndMarker())this.parseNextAction();if(this.patch.warnings?.length===0)delete this.patch.warnings;return{patch:this.patch,fuzz:this.fuzz}}addWarning($){if(!this.patch.warnings)this.patch.warnings=[];this.patch.warnings.push($)}skipBeginSentinel(){if(this.lines[this.index]?.startsWith(d.BEGIN))this.index++}hasMoreLines(){return this.index<this.lines.length}isEndMarker(){return this.lines[this.index]?.startsWith(d.END)??!1}parseNextAction(){let $=this.lines[this.index];if($?.startsWith(d.UPDATE)){this.parseUpdate($.substring(d.UPDATE.length).trim());return}if($?.startsWith(d.DELETE)){this.parseDelete($.substring(d.DELETE.length).trim());return}if($?.startsWith(d.ADD)){this.parseAdd($.substring(d.ADD.length).trim());return}throw new V0(`Unknown line while parsing: ${$}`)}checkDuplicate($,Z){if($ in this.patch.actions)throw new V0(`Duplicate ${Z} for file: ${$}`)}parseUpdate($){this.checkDuplicate($,"update"),this.currentPath=$,this.index++;let Z=this.lines[this.index]?.startsWith(d.MOVE)?(this.lines[this.index++]??"").substring(d.MOVE.length).trim():void 0;if(!($ in this.currentFiles))throw new V0(`Update File Error: Missing File: ${$}`);let Q=this.currentFiles[$]??"",W=this.parseUpdateFile(Q,$);W.movePath=Z,this.patch.actions[$]=W,this.currentPath=void 0}parseUpdateFile($,Z){let Q={type:"update",chunks:[]},W=$.split(`
406
406
  `),J=0,X=[d.END,d.UPDATE,d.DELETE,d.ADD,d.END_FILE];while(!X.some((Y)=>this.lines[this.index]?.startsWith(Y.trim()))){let Y=this.lines[this.index],j=Y?.startsWith("@@ ")?Y.substring(3):void 0;if(j!==void 0||(Y==="@@"?Y:void 0)!==void 0)this.index++;else if(J!==0)throw new V0(`Invalid Line:
407
- ${this.lines[this.index]}`);if(j?.trim()){let f=m0(j.trim());for(let D=J;D<W.length;D++){let U=W[D];if(U&&(m0(U)===f||m0(U.trim())===f)){if(J=D+1,m0(U.trim())===f&&m0(U)!==f)this.fuzz++;break}}}let[H,B,G,K]=nT(this.lines,this.index),[F,A,L]=iT(W,H,J,K);if(F===-1){let f=H.join(`
407
+ ${this.lines[this.index]}`);if(j?.trim()){let f=m0(j.trim());for(let D=J;D<W.length;D++){let U=W[D];if(U&&(m0(U)===f||m0(U.trim())===f)){if(J=D+1,m0(U.trim())===f&&m0(U)!==f)this.fuzz++;break}}}let[H,B,G,K]=tT(this.lines,this.index),[F,A,L]=oT(W,H,J,K);if(F===-1){let f=H.join(`
408
408
  `);this.addWarning({path:this.currentPath||Z,chunkIndex:Q.chunks.length,message:`Could not find matching context (similarity: ${L.toFixed(2)}). Chunk skipped.`,context:f.length>200?`${f.substring(0,200)}...`:f}),this.index=G}else{this.fuzz+=A;for(let f of B)f.origIndex+=F,Q.chunks.push(f);J=F+H.length,this.index=G}}return Q}parseDelete($){if(this.checkDuplicate($,"delete"),!($ in this.currentFiles))throw new V0(`Delete File Error: Missing File: ${$}`);this.patch.actions[$]={type:"delete",chunks:[]},this.index++}parseAdd($){if(this.checkDuplicate($,"add"),$ in this.currentFiles)throw new V0(`Add File Error: File already exists: ${$}`);this.index++;let Z=[],Q=[d.END,d.UPDATE,d.DELETE,d.ADD];while(this.hasMoreLines()&&!Q.some((W)=>this.lines[this.index]?.startsWith(W.trim()))){let W=this.lines[this.index++];if(W===void 0)break;if(!W.startsWith("+"))throw new V0(`Invalid Add File line (missing '+'): ${W}`);Z.push(W.substring(1))}this.patch.actions[$]={type:"add",newFile:Z.join(`
409
- `),chunks:[]}}}function gH($,Z){let Q=$.length>Z.length?$:Z,W=$.length>Z.length?Z:$;if(Q.length===0)return 1;let J=rT(W,Q);return(Q.length-J)/Q.length}function rT($,Z){let Q=Z.length+1,W=$.length+1,J=Array(Q*W).fill(0),X=(j,V)=>J[j*W+V]??0,Y=(j,V,H)=>{J[j*W+V]=H};for(let j=0;j<=Z.length;j++)Y(j,0,j);for(let j=0;j<=$.length;j++)Y(0,j,j);for(let j=1;j<=Z.length;j++)for(let V=1;V<=$.length;V++)if(Z[j-1]===$[V-1])Y(j,V,X(j-1,V-1));else Y(j,V,1+Math.min(X(j-1,V-1),X(j,V-1),X(j-1,V)));return X(Z.length,$.length)}function iT($,Z,Q,W){if(Z.length===0)return[Q,0,1];let J=0,X=(Y)=>{let j=m0(Z.join(`
409
+ `),chunks:[]}}}function vH($,Z){let Q=$.length>Z.length?$:Z,W=$.length>Z.length?Z:$;if(Q.length===0)return 1;let J=sT(W,Q);return(Q.length-J)/Q.length}function sT($,Z){let Q=Z.length+1,W=$.length+1,J=Array(Q*W).fill(0),X=(j,V)=>J[j*W+V]??0,Y=(j,V,H)=>{J[j*W+V]=H};for(let j=0;j<=Z.length;j++)Y(j,0,j);for(let j=0;j<=$.length;j++)Y(0,j,j);for(let j=1;j<=Z.length;j++)for(let V=1;V<=$.length;V++)if(Z[j-1]===$[V-1])Y(j,V,X(j-1,V-1));else Y(j,V,1+Math.min(X(j-1,V-1),X(j,V-1),X(j-1,V)));return X(Z.length,$.length)}function oT($,Z,Q,W){if(Z.length===0)return[Q,0,1];let J=0,X=(Y)=>{let j=m0(Z.join(`
410
410
  `));for(let H=Y;H<$.length;H++){let B=m0($.slice(H,H+Z.length).join(`
411
- `));if(B===j)return[H,0,1];let G=gH(B,j);if(G>J)J=G}for(let H=Y;H<$.length;H++){let B=m0($.slice(H,H+Z.length).map((K)=>K.trimEnd()).join(`
411
+ `));if(B===j)return[H,0,1];let G=vH(B,j);if(G>J)J=G}for(let H=Y;H<$.length;H++){let B=m0($.slice(H,H+Z.length).map((K)=>K.trimEnd()).join(`
412
412
  `)),G=m0(Z.map((K)=>K.trimEnd()).join(`
413
413
  `));if(B===G)return[H,1,1]}for(let H=Y;H<$.length;H++){let B=m0($.slice(H,H+Z.length).map((K)=>K.trim()).join(`
414
414
  `)),G=m0(Z.map((K)=>K.trim()).join(`
415
415
  `));if(B===G)return[H,100,1]}let V=0.66;for(let H=Y;H<$.length;H++){let B=m0($.slice(H,H+Z.length).join(`
416
- `)),G=gH(B,j);if(G>=V)return[H,1000,G];if(G>J)J=G}return[-1,0,J]};if(W){let[Y,j,V]=X($.length-Z.length);if(Y!==-1)return[Y,j,V];return[Y,j,V]=X(Q),[Y,j+1e4,V]}return X(Q)}function nT($,Z){let Q=Z,W=[],J=[],X=[],Y=[],j="keep",V=["@@",d.END,d.UPDATE,d.DELETE,d.ADD,d.END_FILE];while(Q<$.length){let H=$[Q];if(!H||V.some((K)=>H.startsWith(K.trim())))break;if(H==="***")break;if(H.startsWith("***"))throw new V0(`Invalid line: ${H}`);Q++;let B=j,G=H;if(G[0]==="+")j="add";else if(G[0]==="-")j="delete";else if(G[0]===" ")j="keep";else j="keep",G=` ${G}`;if(G=G.slice(1),j==="keep"&&B!==j){if(X.length||J.length)Y.push({origIndex:W.length-J.length,delLines:J,insLines:X});J=[],X=[]}if(j==="delete")J.push(G),W.push(G);else if(j==="add")X.push(G);else W.push(G)}if(X.length||J.length)Y.push({origIndex:W.length-J.length,delLines:J,insLines:X});if(Q<$.length&&$[Q]===d.END_FILE)return Q++,[W,Y,Q,!0];return[W,Y,Q,!1]}function F3($,Z,Q){let W=c0.isAbsolute(Z),J=W?c0.normalize(Z):c0.resolve($,Z);if(!Q||W)return J;let X=c0.relative($,J);if(X.startsWith("..")||c0.isAbsolute(X))throw new V0(`Path must stay within cwd: ${Z}`);return J}function aT($){return $.split(`
417
- `).map((Z)=>Z.replace(/\r$/,""))}function vH($){if($.trim()==="")return!1;return mH.some((Z)=>$.startsWith(Z))}function sT($){let Z=0,Q=$.length;while(Z<Q&&vH($[Z]??""))Z++;while(Q>Z&&vH($[Q-1]??""))Q--;return $.slice(Z,Q)}function oT($){let Z=aT($),Q=Z.findIndex((Y)=>Y.startsWith(d.BEGIN)),W=-1;for(let Y=Z.length-1;Y>=0;Y--)if(Z[Y]?.startsWith(d.END)){W=Y;break}if(Q!==-1||W!==-1){if(Q===-1||W===-1||W<Q)throw new V0("Invalid patch text - incomplete sentinels. Try breaking it into smaller patches.");return{lines:Z.slice(Q,W+1)}}let J=sT(Z);while(J.length>0&&J[0]==="")J.shift();while(J.length>0&&J[J.length-1]==="")J.pop();return{lines:[d.BEGIN,...J,d.END]}}function tT($,Z){let Q=new Set;for(let W of $)for(let J of Z)if(W.startsWith(J)){Q.add(W.substring(J.length).trim());break}return[...Q]}function eT($,Z,Q){if(Z.length===0)return $;let W=$.split(`
416
+ `)),G=vH(B,j);if(G>=V)return[H,1000,G];if(G>J)J=G}return[-1,0,J]};if(W){let[Y,j,V]=X($.length-Z.length);if(Y!==-1)return[Y,j,V];return[Y,j,V]=X(Q),[Y,j+1e4,V]}return X(Q)}function tT($,Z){let Q=Z,W=[],J=[],X=[],Y=[],j="keep",V=["@@",d.END,d.UPDATE,d.DELETE,d.ADD,d.END_FILE];while(Q<$.length){let H=$[Q];if(!H||V.some((K)=>H.startsWith(K.trim())))break;if(H==="***")break;if(H.startsWith("***"))throw new V0(`Invalid line: ${H}`);Q++;let B=j,G=H;if(G[0]==="+")j="add";else if(G[0]==="-")j="delete";else if(G[0]===" ")j="keep";else j="keep",G=` ${G}`;if(G=G.slice(1),j==="keep"&&B!==j){if(X.length||J.length)Y.push({origIndex:W.length-J.length,delLines:J,insLines:X});J=[],X=[]}if(j==="delete")J.push(G),W.push(G);else if(j==="add")X.push(G);else W.push(G)}if(X.length||J.length)Y.push({origIndex:W.length-J.length,delLines:J,insLines:X});if(Q<$.length&&$[Q]===d.END_FILE)return Q++,[W,Y,Q,!0];return[W,Y,Q,!1]}function F3($,Z,Q){let W=c0.isAbsolute(Z),J=W?c0.normalize(Z):c0.resolve($,Z);if(!Q||W)return J;let X=c0.relative($,J);if(X.startsWith("..")||c0.isAbsolute(X))throw new V0(`Path must stay within cwd: ${Z}`);return J}function eT($){return $.split(`
417
+ `).map((Z)=>Z.replace(/\r$/,""))}function uH($){if($.trim()==="")return!1;return cH.some((Z)=>$.startsWith(Z))}function $O($){let Z=0,Q=$.length;while(Z<Q&&uH($[Z]??""))Z++;while(Q>Z&&uH($[Q-1]??""))Q--;return $.slice(Z,Q)}function ZO($){let Z=eT($),Q=Z.findIndex((Y)=>Y.startsWith(d.BEGIN)),W=-1;for(let Y=Z.length-1;Y>=0;Y--)if(Z[Y]?.startsWith(d.END)){W=Y;break}if(Q!==-1||W!==-1){if(Q===-1||W===-1||W<Q)throw new V0("Invalid patch text - incomplete sentinels. Try breaking it into smaller patches.");return{lines:Z.slice(Q,W+1)}}let J=$O(Z);while(J.length>0&&J[0]==="")J.shift();while(J.length>0&&J[J.length-1]==="")J.pop();return{lines:[d.BEGIN,...J,d.END]}}function QO($,Z){let Q=new Set;for(let W of $)for(let J of Z)if(W.startsWith(J)){Q.add(W.substring(J.length).trim());break}return[...Q]}function WO($,Z,Q){if(Z.length===0)return $;let W=$.split(`
418
418
  `),J=[],X=0;for(let Y of Z){if(Y.origIndex>W.length)throw new V0(`${Q}: chunk.origIndex ${Y.origIndex} > lines.length ${W.length}`);if(X>Y.origIndex)throw new V0(`${Q}: currentIndex ${X} > chunk.origIndex ${Y.origIndex}`);J.push(...W.slice(X,Y.origIndex)),J.push(...Y.insLines),X=Y.origIndex+Y.delLines.length}return J.push(...W.slice(X)),J.join(`
419
- `)}async function $O($,Z,Q,W){let J=tT($,[d.UPDATE,d.DELETE]),X={};for(let Y of J){let j=F3(Z,Y,W),V;try{V=await v0.readFile(j,Q)}catch{throw new V0(`File not found: ${Y}`)}X[Y]=V.replace(/\r\n/g,`
420
- `)}return X}function ZO($,Z){let Q={};for(let[W,J]of Object.entries($.actions))switch(J.type){case"delete":Q[W]={type:"delete",oldContent:Z[W]};break;case"add":if(J.newFile===void 0)throw new V0("ADD action without file content");Q[W]={type:"add",newContent:J.newFile};break;case"update":Q[W]={type:"update",oldContent:Z[W],newContent:eT(Z[W]??"",J.chunks,W),movePath:J.movePath};break}return Q}function QO($){let Z=[`Patch could not be applied because ${$.length} hunk${$.length===1?"":"s"} did not match the current file content.`];for(let Q of $){let W=Q.chunkIndex===void 0?"unknown":String(Q.chunkIndex+1);if(Z.push(`${Q.path}: hunk ${W}: ${Q.message}`),Q.context)Z.push(`Context:
419
+ `)}async function JO($,Z,Q,W){let J=QO($,[d.UPDATE,d.DELETE]),X={};for(let Y of J){let j=F3(Z,Y,W),V;try{V=await v0.readFile(j,Q)}catch{throw new V0(`File not found: ${Y}`)}X[Y]=V.replace(/\r\n/g,`
420
+ `)}return X}function XO($,Z){let Q={};for(let[W,J]of Object.entries($.actions))switch(J.type){case"delete":Q[W]={type:"delete",oldContent:Z[W]};break;case"add":if(J.newFile===void 0)throw new V0("ADD action without file content");Q[W]={type:"add",newContent:J.newFile};break;case"update":Q[W]={type:"update",oldContent:Z[W],newContent:WO(Z[W]??"",J.chunks,W),movePath:J.movePath};break}return Q}function YO($){let Z=[`Patch could not be applied because ${$.length} hunk${$.length===1?"":"s"} did not match the current file content.`];for(let Q of $){let W=Q.chunkIndex===void 0?"unknown":String(Q.chunkIndex+1);if(Z.push(`${Q.path}: hunk ${W}: ${Q.message}`),Q.context)Z.push(`Context:
421
421
  ${Q.context}`)}return Z.join(`
422
- `)}async function WO($,Z,Q,W){let J=[];for(let[X,Y]of Object.entries($)){let j=F3(Z,X,W);switch(Y.type){case"delete":await v0.rm(j,{force:!0}),J.push(`${X}: [deleted]`);break;case"add":if(Y.newContent===void 0)throw new V0(`Cannot create ${X} with no content`);await v0.mkdir(c0.dirname(j),{recursive:!0}),await v0.writeFile(j,Y.newContent,{encoding:Q}),J.push(X);break;case"update":{if(Y.newContent===void 0)throw new V0(`UPDATE change for ${X} has no new content`);if(Y.movePath){let V=F3(Z,Y.movePath,W);await v0.mkdir(c0.dirname(V),{recursive:!0}),await v0.writeFile(V,Y.newContent,{encoding:Q}),await v0.rm(j,{force:!0}),J.push(`${X} -> ${Y.movePath}`)}else await v0.writeFile(j,Y.newContent,{encoding:Q}),J.push(X);break}}}return J}function R6($={}){let{encoding:Z="utf-8",restrictToCwd:Q=!0}=$;return async(W,J,X)=>{let Y=oT(W.input),j=await $O(Y.lines,J,Z,Q),V=new K3(Y.lines,j),{patch:H,fuzz:B}=V.parse();if(H.warnings&&H.warnings.length>0)throw new V0(QO(H.warnings));let G=ZO(H,j),K=await WO(G,J,Z,Q),F=["Successfully applied patch to the following files:"];for(let A of K)F.push(A);if(B>0)F.push(`Note: Patch applied with fuzz factor ${B}`);return F.join(`
423
- `)}}import*as Y1 from"node:fs/promises";import*as X1 from"node:path";function JO($,Z,Q){let W=X1.isAbsolute(Z),J=W?X1.normalize(Z):X1.resolve($,Z);if(!Q)return J;if(W)return J;let X=X1.relative($,J);if(X.startsWith("..")||X1.isAbsolute(X))throw Error(`Path must stay within cwd: ${Z}`);return J}function XO($,Z){if(Z.length===0)return 0;return $.split(Z).length-1}function YO($,Z,Q){let W=$.split(`
422
+ `)}async function jO($,Z,Q,W){let J=[];for(let[X,Y]of Object.entries($)){let j=F3(Z,X,W);switch(Y.type){case"delete":await v0.rm(j,{force:!0}),J.push(`${X}: [deleted]`);break;case"add":if(Y.newContent===void 0)throw new V0(`Cannot create ${X} with no content`);await v0.mkdir(c0.dirname(j),{recursive:!0}),await v0.writeFile(j,Y.newContent,{encoding:Q}),J.push(X);break;case"update":{if(Y.newContent===void 0)throw new V0(`UPDATE change for ${X} has no new content`);if(Y.movePath){let V=F3(Z,Y.movePath,W);await v0.mkdir(c0.dirname(V),{recursive:!0}),await v0.writeFile(V,Y.newContent,{encoding:Q}),await v0.rm(j,{force:!0}),J.push(`${X} -> ${Y.movePath}`)}else await v0.writeFile(j,Y.newContent,{encoding:Q}),J.push(X);break}}}return J}function R6($={}){let{encoding:Z="utf-8",restrictToCwd:Q=!0}=$;return async(W,J,X)=>{let Y=ZO(W.input),j=await JO(Y.lines,J,Z,Q),V=new K3(Y.lines,j),{patch:H,fuzz:B}=V.parse();if(H.warnings&&H.warnings.length>0)throw new V0(YO(H.warnings));let G=XO(H,j),K=await jO(G,J,Z,Q),F=["Successfully applied patch to the following files:"];for(let A of K)F.push(A);if(B>0)F.push(`Note: Patch applied with fuzz factor ${B}`);return F.join(`
423
+ `)}}import*as Y1 from"node:fs/promises";import*as X1 from"node:path";function VO($,Z,Q){let W=X1.isAbsolute(Z),J=W?X1.normalize(Z):X1.resolve($,Z);if(!Q)return J;if(W)return J;let X=X1.relative($,J);if(X.startsWith("..")||X1.isAbsolute(X))throw Error(`Path must stay within cwd: ${Z}`);return J}function HO($,Z){if(Z.length===0)return 0;return $.split(Z).length-1}function BO($,Z,Q){let W=$.split(`
424
424
  `),J=Z.split(`
425
425
  `),X=Math.max(W.length,J.length),Y=["```diff"],j=0;for(let V=0;V<X;V++){if(j>=Q){Y.push("... diff truncated ...");break}let H=W[V],B=J[V];if(H===B)continue;let G=V+1;if(H!==void 0)Y.push(`-${G}: ${H}`),j++;if(B!==void 0&&j<Q)Y.push(`+${G}: ${B}`),j++}return Y.push("```"),Y.join(`
426
- `)}async function jO($,Z,Q){return await Y1.mkdir(X1.dirname($),{recursive:!0}),await Y1.writeFile($,Z,{encoding:Q}),`File created successfully at: ${$}`}async function VO($){try{return await Y1.access($),!0}catch{return!1}}async function HO($,Z,Q,W,J){let X=await Y1.readFile($,W),Y=XO(X,Z);if(Y===0)throw Error(`No replacement performed: text not found in ${$}.`);if(Y>1)throw Error(`No replacement performed: multiple occurrences of text found in ${$}.`);let j=X.replace(Z,Q??"");await Y1.writeFile($,j,{encoding:W});let V=YO(X,j,J);return`Edited ${$}
427
- ${V}`}async function BO($,Z,Q,W){let X=(await Y1.readFile($,W)).split(`
426
+ `)}async function GO($,Z,Q){return await Y1.mkdir(X1.dirname($),{recursive:!0}),await Y1.writeFile($,Z,{encoding:Q}),`File created successfully at: ${$}`}async function KO($){try{return await Y1.access($),!0}catch{return!1}}async function FO($,Z,Q,W,J){let X=await Y1.readFile($,W),Y=HO(X,Z);if(Y===0)throw Error(`No replacement performed: text not found in ${$}.`);if(Y>1)throw Error(`No replacement performed: multiple occurrences of text found in ${$}.`);let j=X.replace(Z,Q??"");await Y1.writeFile($,j,{encoding:W});let V=BO(X,j,J);return`Edited ${$}
427
+ ${V}`}async function AO($,Z,Q,W){let X=(await Y1.readFile($,W)).split(`
428
428
  `),Y=X.length+1;if(Z<1||Z>Y)throw Error(`Invalid insert_line: ${Z}. insert_line must be a positive one-based boundary line in the range 1-${Y}. Use ${Y} to append at EOF.`);let j=Z-1;return X.splice(j,0,...Q.split(`
429
429
  `)),await Y1.writeFile($,X.join(`
430
- `),{encoding:W}),`Inserted content at line ${Z} in ${$}.`}function E6($={}){let{encoding:Z="utf-8",restrictToCwd:Q=!0,maxDiffLines:W=200}=$;return async(J,X,Y)=>{let j=JO(X,J.path,Q);if(J.insert_line!=null)return BO(j,J.insert_line,J.new_text,Z);if(!await VO(j))return jO(j,J.new_text,Z);if(J.old_text==null)throw Error("Parameter `old_text` is required when editing an existing file without `insert_line`");return HO(j,J.old_text,J.new_text,Z,W)}}import{createReadStream as GO}from"node:fs";import*as LZ from"node:fs/promises";import*as L$ from"node:path";import{createInterface as KO}from"node:readline";import{resolveExistingFilePath as FO}from"@cline/shared/storage";var AO=new Map([[".gif","image/gif"],[".png","image/png"],[".jpg","image/jpeg"],[".jpeg","image/jpeg"],[".webp","image/webp"]]),fO={maxFileSizeBytes:1e7,encoding:"utf-8",includeLineNumbers:!0},cH=1e8,UO=50000;function uH($){let{reason:Z}=$;if(Z instanceof Error)return Z;if(Z!==void 0)return Error(String(Z));return Error("File read was aborted")}async function DO($,Z,Q,W,J,X){if(X?.aborted)throw uH(X);let Y=Math.max(W??1,1),j=J??Number.POSITIVE_INFINITY,V=Number.isFinite(j),H=V?j:Y+UO-1,B=[],G=0,K=0,F=!1,A=!1,L=Number.isFinite(j)?Math.min(j,Y+L8-1):Y+L8-1,f=Q?String(L).length+3:0,D=GO($,{encoding:Z}),U=KO({input:D,crlfDelay:Number.POSITIVE_INFINITY}),T=X?()=>D.destroy(uH(X)):void 0;if(X&&T)X.addEventListener("abort",T,{once:!0});try{for await(let y of U){if(K+=1,K>j){K=j;break}if(!V&&F&&K>=H){A=!0;break}if(K<Y||F)continue;if(B.length>=L8){F=!0;continue}let l=y;if(l.length>J3)l=`${l.slice(0,J3)} [line truncated]`;let o=G+l.length+f+1;if(o>UZ&&B.length>0){F=!0;continue}B.push({lineNumber:K,text:l}),G=o}}finally{if(X&&T)X.removeEventListener("abort",T);U.close(),D.destroy()}let O=String(B[B.length-1]?.lineNumber??K).length,z=B.map(({lineNumber:y,text:l})=>Q?`${String(y).padStart(O," ")} | ${l}`:l).join(`
430
+ `),{encoding:W}),`Inserted content at line ${Z} in ${$}.`}function E6($={}){let{encoding:Z="utf-8",restrictToCwd:Q=!0,maxDiffLines:W=200}=$;return async(J,X,Y)=>{let j=VO(X,J.path,Q);if(J.insert_line!=null)return AO(j,J.insert_line,J.new_text,Z);if(!await KO(j))return GO(j,J.new_text,Z);if(J.old_text==null)throw Error("Parameter `old_text` is required when editing an existing file without `insert_line`");return FO(j,J.old_text,J.new_text,Z,W)}}import{createReadStream as fO}from"node:fs";import*as _Z from"node:fs/promises";import*as L$ from"node:path";import{createInterface as UO}from"node:readline";import{resolveExistingFilePath as DO}from"@cline/shared/storage";var LO=new Map([[".gif","image/gif"],[".png","image/png"],[".jpg","image/jpeg"],[".jpeg","image/jpeg"],[".webp","image/webp"]]),_O={maxFileSizeBytes:1e7,encoding:"utf-8",includeLineNumbers:!0},dH=1e8,zO=50000;function lH($){let{reason:Z}=$;if(Z instanceof Error)return Z;if(Z!==void 0)return Error(String(Z));return Error("File read was aborted")}async function TO($,Z,Q,W,J,X){if(X?.aborted)throw lH(X);let Y=Math.max(W??1,1),j=J??Number.POSITIVE_INFINITY,V=Number.isFinite(j),H=V?j:Y+zO-1,B=[],G=0,K=0,F=!1,A=!1,L=Number.isFinite(j)?Math.min(j,Y+L8-1):Y+L8-1,f=Q?String(L).length+3:0,D=fO($,{encoding:Z}),U=UO({input:D,crlfDelay:Number.POSITIVE_INFINITY}),T=X?()=>D.destroy(lH(X)):void 0;if(X&&T)X.addEventListener("abort",T,{once:!0});try{for await(let y of U){if(K+=1,K>j){K=j;break}if(!V&&F&&K>=H){A=!0;break}if(K<Y||F)continue;if(B.length>=L8){F=!0;continue}let l=y;if(l.length>J3)l=`${l.slice(0,J3)} [line truncated]`;let o=G+l.length+f+1;if(o>DZ&&B.length>0){F=!0;continue}B.push({lineNumber:K,text:l}),G=o}}finally{if(X&&T)X.removeEventListener("abort",T);U.close(),D.destroy()}let q=String(B[B.length-1]?.lineNumber??K).length,z=B.map(({lineNumber:y,text:l})=>Q?`${String(y).padStart(q," ")} | ${l}`:l).join(`
431
431
  `),_=B[B.length-1]?.lineNumber;if(_===void 0)return z;let E=Math.min(j,K);if(_>=E)return z;let C=A?`${K}+ lines`:E;return`${z}
432
432
 
433
- [Showing lines ${Y}-${_} of ${C}. Use start_line/end_line to read other sections.]`}function N6($={}){let{maxFileSizeBytes:Z,encoding:Q,includeLineNumbers:W}={...fO,...$};return async(J,X)=>{let{path:Y,start_line:j,end_line:V}=J,H=L$.isAbsolute(Y)?L$.normalize(Y):L$.resolve(process.cwd(),Y),B=FO(H)??H,G=L$.extname(B).toLowerCase(),K=AO.get(G),F=await LZ.stat(B);if(!F.isFile())throw Error(`Path is not a file: ${B}`);if(K){if(F.size>Z)throw Error(`Image file too large: ${F.size} bytes (max: ${Z} bytes).`);if(X.metadata?.modelSupportsImages!==!0)throw Error("Current model does not support image input");let A=await LZ.readFile(B);return[{type:"text",text:"Successfully read image"},{type:"image",data:A.toString("base64"),mediaType:K}]}if(F.size>cH)throw Error(`Text file too large to stream safely: ${F.size} bytes (max: ${cH} bytes). Use a targeted command such as sed, grep, head, or tail to inspect specific sections.`);return DO(B,Q,W,j,V,X.signal)}}import{spawn as sH}from"node:child_process";import*as oH from"node:fs/promises";import*as TZ from"node:path";var nH={};N(nH,{prewarmFileIndex:()=>zZ,getFileIndex:()=>d1,enrichPromptWithMentions:()=>T8});import{spawn as LO}from"node:child_process";import{readdir as _O}from"node:fs/promises";import f3 from"node:path";import{isMainThread as pH,parentPort as dH,Worker as zO}from"node:worker_threads";var TO=15000,OO=600000,qO=1000,MO=new Set([".git","node_modules","dist","build",".next","coverage",".turbo",".cache","target","out"]);function lH($){let Z=$&&typeof $==="object"&&"code"in $?String($.code??""):"";return Z==="EACCES"||Z==="EPERM"||Z==="ENOENT"}var z8=new Map;function RO(){if(!pH)return!1;return!0}function EO($){if(z8.size<=1)return;for(let[Z,Q]of z8.entries()){if(Q.pending)continue;if($-Q.lastAccessedAt>OO)z8.delete(Z)}}function NO($,Z){return f3.relative($,Z).split(f3.sep).join("/")}async function wO($){let Q=(await new Promise((W,J)=>{let X=LO("rg",["--files","--hidden","-g","!.git"],{cwd:$,stdio:["ignore","pipe","pipe"],windowsHide:!0}),Y="",j="";X.stdout.on("data",(V)=>{Y+=V.toString()}),X.stderr.on("data",(V)=>{j+=V.toString()}),X.on("error",J),X.on("close",(V)=>{if(V===0){W(Y);return}J(Error(j||`rg exited with code ${V}`))})})).split(/\r?\n/).map((W)=>W.trim()).filter((W)=>W.length>0).map((W)=>W.replace(/\\/g,"/"));return new Set(Q)}async function rH($,Z,Q){let W;try{W=await _O(Z,{withFileTypes:!0})}catch(J){if(lH(J))return;throw J}for(let J of W){let X=f3.join(Z,J.name);if(J.isDirectory()){if(MO.has(J.name))continue;try{await rH($,X,Q)}catch(Y){if(lH(Y))continue;throw Y}continue}if(J.isFile())Q.add(NO($,X))}}async function CO($){let Z=new Set;return await rH($,$,Z),Z}async function _Z($){try{return await wO($)}catch{return CO($)}}function PO(){if(pH||!dH)return;let $=dH;$.on("message",(Z)=>{if(Z.type!=="index")return;_Z(Z.cwd).then((Q)=>{let W={type:"indexResult",requestId:Z.requestId,files:Array.from(Q)};$.postMessage(W)}).catch((Q)=>{let W={type:"indexResult",requestId:Z.requestId,error:Q instanceof Error?Q.message:"Failed to build file index"};$.postMessage(W)})})}class iH{worker=new zO(new URL(import.meta.url));nextRequestId=0;pending=new Map;constructor(){this.worker.unref(),this.worker.on("message",($)=>{if($.type!=="indexResult")return;let Z=this.pending.get($.requestId);if(!Z)return;if(this.pending.delete($.requestId),$.error){Z.reject(Error($.error));return}Z.resolve($.files??[])}),this.worker.on("error",($)=>{this.flushPending($)}),this.worker.on("exit",($)=>{if($!==0)this.flushPending(Error(`File index worker exited with code ${$}`))})}requestIndex($){let Z=++this.nextRequestId,Q=new Promise((J,X)=>{let Y=setTimeout(()=>{this.pending.delete(Z),J(null)},qO);Y.unref(),this.pending.set(Z,{resolve:(j)=>{clearTimeout(Y),J(j)},reject:(j)=>{clearTimeout(Y),X(j)}})}),W={type:"index",requestId:Z,cwd:$};return this.worker.postMessage(W),Q}flushPending($){for(let[Z,Q]of this.pending.entries())Q.reject($),this.pending.delete(Z)}}PO();var A3;function SO(){if(!RO())return null;if(A3===void 0)A3=new iH;return A3}async function bO($){let Z=SO();if(!Z)return _Z($);try{let Q=await Z.requestIndex($);if(Q===null)return _Z($);return new Set(Q)}catch{return _Z($)}}async function d1($,Z={}){let Q=Z.ttlMs??TO,W=Date.now();EO(W);let J=z8.get($);if(J&&Q>0&&W-J.lastBuiltAt<=Q&&J.files.size>0)return J.lastAccessedAt=W,J.files;if(J?.pending)return J.lastAccessedAt=W,J.pending;let X=bO($).then((Y)=>{return z8.set($,{files:Y,lastBuiltAt:Date.now(),lastAccessedAt:Date.now(),pending:null}),Y});return z8.set($,{files:J?.files??new Set,lastBuiltAt:J?.lastBuiltAt??0,lastAccessedAt:W,pending:X}),X}async function zZ($,Z={}){await d1($,{...Z,ttlMs:0})}import{stat as yO}from"node:fs/promises";import V2 from"node:path";var hO=/[),.:;!?`'"]+$/,kO=/^[(`'"]+/;function IO($){let Z=$.matchAll(/(^|[\s])@([^\s]+)/g),Q=[];for(let W of Z){let J=(W[2]??"").trim();if(J.length===0)continue;let X=J.replace(kO,"").replace(hO,"");if(X.length===0||X.includes("@"))continue;Q.push(X)}return Array.from(new Set(Q))}function xO($,Z){let Q=$.replace(/\\/g,"/"),W=V2.isAbsolute(Q)?V2.resolve(Q):V2.resolve(Z,Q),J=V2.relative(Z,W);if(J.startsWith("..")||V2.isAbsolute(J))return;return J.split(V2.sep).join("/")}async function T8($,Z,Q={}){let W=IO($);if(W.length===0)return{prompt:$,mentions:[],matchedFiles:[],ignoredMentions:[]};let{maxFiles:J,maxFileBytes:X,maxTotalBytes:Y}=Q,j=await d1(Z,{ttlMs:Q.ttlMs}),V=[],H=[],B=[],G=0;for(let K of W){if(J&&B.length>=J){H.push(K);continue}let F=xO(K,Z);if(!F||!j.has(F)){H.push(K);continue}if(!X||!Y){V.push(F);continue}let A=V2.join(Z,F);try{if(!(await yO(A)).isFile()){H.push(K);continue}let f=G+X;if(f>Y){H.push(K);continue}G=f,V.push(F)}catch{H.push(K)}}return{prompt:$,mentions:W,matchedFiles:V,ignoredMentions:H}}var gO=["ts","tsx","js","jsx","mjs","cjs","json","md","mdx","txt","yaml","yml","toml","py","rb","go","rs","java","kt","swift","c","cpp","h","hpp","css","scss","less","html","vue","svelte","sql","sh","bash","zsh","fish","ps1","env","gitignore","dockerignore","editorconfig"],mO=["node_modules",".git","dist","build",".next","coverage","__pycache__",".venv","venv",".cache",".turbo",".output","out","target","bin","obj"],H2=null;function vO(){if(H2!==null)return Promise.resolve(H2);return new Promise(($)=>{let Z=sH("rg",["--version"],{stdio:["ignore","pipe","pipe"],windowsHide:!0});Z.on("close",(Q)=>{H2=Q===0,$(H2)}),Z.on("error",()=>{H2=!1,$(!1)}),setTimeout(()=>{if(!Z.killed)Z.kill("SIGTERM");if(H2===null)H2=!1,$(!1)},1000)})}function cO($,Z,Q,W,J=5000,X){return new Promise((Y)=>{let j=sH("rg",["--json",`--context=${W}`,"--max-count=1","-i",$],{cwd:Z,stdio:["ignore","pipe","pipe"],windowsHide:!0}),V="",H=!1,B=()=>{if(!j.killed)j.kill("SIGTERM")},G=setTimeout(()=>{if(!H)H=!0,B(),Y(null)},J),K=(F)=>{if(!H)H=!0,clearTimeout(G),B(),Y(F)};if(X?.aborted){B(),Y(null);return}X?.addEventListener("abort",()=>{K(null)}),j.stdout.on("data",(F)=>{V+=F.toString()}),j.stderr.on("data",()=>{}),j.on("close",(F)=>{if(F===0||F===1){try{let A=[],L=V.split(`
434
- `).filter((f)=>f.trim());for(let f of L){if(A.length>=Q)break;let D=JSON.parse(f);if(D.type==="match"){let U=D.data,T=[];if(D.data.submatches&&D.data.submatches.length>0){let O=D.data.submatches[0];A.push({file:U.path.text,line:U.line_number,column:(O?.start??0)+1,match:O?.match?.text??"",context:T})}}else if(D.type==="context"&&A.length>0){let U=A[A.length-1],T=D.data.line_number===U.line?">":" ";U.context.push(`${T} ${D.data.line_number}: ${D.data.lines?.text??D.data.line?.text??""}`)}}K(A.length>0?A:null)}catch{K(null)}return}K(null)}),j.on("error",()=>{K(null)})})}function uO($,Z,Q,W){let J=$.split("/"),X=J[J.length-1]??"";if(J.length-1>W)return!1;for(let V=0;V<J.length-1;V++)if(Z.has(J[V]??""))return!1;let j=TZ.posix.extname(X).slice(1).toLowerCase();return Q.has(j)||!j&&!X.startsWith(".")}function w6($={}){let{includeExtensions:Z=gO,excludeDirs:Q=mO,maxResults:W=100,contextLines:J=2,maxDepth:X=20}=$,Y=new Set(Q),j=new Set(Z.map((V)=>V.toLowerCase()));return async(V,H,B)=>{if(B.signal?.aborted)throw Error("Search operation aborted");let G=await vO(),K=null;if(G)K=await cO(V,H,W,J,5000,B.signal);if(K){let U=[`Found ${K.length} result${K.length===1?"":"s"} for pattern: ${V}`,""];for(let T of K)U.push(`${T.file}:${T.line}:${T.column}`),U.push(...T.context),U.push("");if(K.length>=W)U.push(`(Showing first ${W} results. Refine your search for more specific results.)`);return aH(U.join(`
435
- `))}let F;try{F=new RegExp(V,"gim")}catch(U){throw Error(`Invalid regex pattern: ${V}. ${U instanceof Error?U.message:""}`)}let A=[],L=0,f=await d1(H);for(let U of f){if(B.signal?.aborted)throw Error("Search operation aborted");if(!uO(U,Y,j,X))continue;if(A.length>=W)break;L++;let T=TZ.join(H,U);try{let z=(await oH.readFile(T,"utf-8")).split(`
433
+ [Showing lines ${Y}-${_} of ${C}. Use start_line/end_line to read other sections.]`}function N6($={}){let{maxFileSizeBytes:Z,encoding:Q,includeLineNumbers:W}={..._O,...$};return async(J,X)=>{let{path:Y,start_line:j,end_line:V}=J,H=L$.isAbsolute(Y)?L$.normalize(Y):L$.resolve(process.cwd(),Y),B=DO(H)??H,G=L$.extname(B).toLowerCase(),K=LO.get(G),F=await _Z.stat(B);if(!F.isFile())throw Error(`Path is not a file: ${B}`);if(K){if(F.size>Z)throw Error(`Image file too large: ${F.size} bytes (max: ${Z} bytes).`);if(X.metadata?.modelSupportsImages!==!0)throw Error("Current model does not support image input");let A=await _Z.readFile(B);return[{type:"text",text:"Successfully read image"},{type:"image",data:A.toString("base64"),mediaType:K}]}if(F.size>dH)throw Error(`Text file too large to stream safely: ${F.size} bytes (max: ${dH} bytes). Use a targeted command such as sed, grep, head, or tail to inspect specific sections.`);return TO(B,Q,W,j,V,X.signal)}}import{spawn as tH}from"node:child_process";import*as eH from"node:fs/promises";import*as OZ from"node:path";var sH={};N(sH,{prewarmFileIndex:()=>TZ,getFileIndex:()=>d1,enrichPromptWithMentions:()=>T8});import{spawn as OO}from"node:child_process";import{readdir as qO}from"node:fs/promises";import f3 from"node:path";import{isMainThread as iH,parentPort as pH,Worker as MO}from"node:worker_threads";var RO=15000,EO=600000,NO=1000,wO=new Set([".git","node_modules","dist","build",".next","coverage",".turbo",".cache","target","out"]);function rH($){let Z=$&&typeof $==="object"&&"code"in $?String($.code??""):"";return Z==="EACCES"||Z==="EPERM"||Z==="ENOENT"}var z8=new Map;function CO(){if(!iH)return!1;return!0}function PO($){if(z8.size<=1)return;for(let[Z,Q]of z8.entries()){if(Q.pending)continue;if($-Q.lastAccessedAt>EO)z8.delete(Z)}}function SO($,Z){return f3.relative($,Z).split(f3.sep).join("/")}async function bO($){let Q=(await new Promise((W,J)=>{let X=OO("rg",["--files","--hidden","-g","!.git"],{cwd:$,stdio:["ignore","pipe","pipe"],windowsHide:!0}),Y="",j="";X.stdout.on("data",(V)=>{Y+=V.toString()}),X.stderr.on("data",(V)=>{j+=V.toString()}),X.on("error",J),X.on("close",(V)=>{if(V===0){W(Y);return}J(Error(j||`rg exited with code ${V}`))})})).split(/\r?\n/).map((W)=>W.trim()).filter((W)=>W.length>0).map((W)=>W.replace(/\\/g,"/"));return new Set(Q)}async function nH($,Z,Q){let W;try{W=await qO(Z,{withFileTypes:!0})}catch(J){if(rH(J))return;throw J}for(let J of W){let X=f3.join(Z,J.name);if(J.isDirectory()){if(wO.has(J.name))continue;try{await nH($,X,Q)}catch(Y){if(rH(Y))continue;throw Y}continue}if(J.isFile())Q.add(SO($,X))}}async function yO($){let Z=new Set;return await nH($,$,Z),Z}async function zZ($){try{return await bO($)}catch{return yO($)}}function hO(){if(iH||!pH)return;let $=pH;$.on("message",(Z)=>{if(Z.type!=="index")return;zZ(Z.cwd).then((Q)=>{let W={type:"indexResult",requestId:Z.requestId,files:Array.from(Q)};$.postMessage(W)}).catch((Q)=>{let W={type:"indexResult",requestId:Z.requestId,error:Q instanceof Error?Q.message:"Failed to build file index"};$.postMessage(W)})})}class aH{worker=new MO(new URL(import.meta.url));nextRequestId=0;pending=new Map;constructor(){this.worker.unref(),this.worker.on("message",($)=>{if($.type!=="indexResult")return;let Z=this.pending.get($.requestId);if(!Z)return;if(this.pending.delete($.requestId),$.error){Z.reject(Error($.error));return}Z.resolve($.files??[])}),this.worker.on("error",($)=>{this.flushPending($)}),this.worker.on("exit",($)=>{if($!==0)this.flushPending(Error(`File index worker exited with code ${$}`))})}requestIndex($){let Z=++this.nextRequestId,Q=new Promise((J,X)=>{let Y=setTimeout(()=>{this.pending.delete(Z),J(null)},NO);Y.unref(),this.pending.set(Z,{resolve:(j)=>{clearTimeout(Y),J(j)},reject:(j)=>{clearTimeout(Y),X(j)}})}),W={type:"index",requestId:Z,cwd:$};return this.worker.postMessage(W),Q}flushPending($){for(let[Z,Q]of this.pending.entries())Q.reject($),this.pending.delete(Z)}}hO();var A3;function kO(){if(!CO())return null;if(A3===void 0)A3=new aH;return A3}async function IO($){let Z=kO();if(!Z)return zZ($);try{let Q=await Z.requestIndex($);if(Q===null)return zZ($);return new Set(Q)}catch{return zZ($)}}async function d1($,Z={}){let Q=Z.ttlMs??RO,W=Date.now();PO(W);let J=z8.get($);if(J&&Q>0&&W-J.lastBuiltAt<=Q&&J.files.size>0)return J.lastAccessedAt=W,J.files;if(J?.pending)return J.lastAccessedAt=W,J.pending;let X=IO($).then((Y)=>{return z8.set($,{files:Y,lastBuiltAt:Date.now(),lastAccessedAt:Date.now(),pending:null}),Y});return z8.set($,{files:J?.files??new Set,lastBuiltAt:J?.lastBuiltAt??0,lastAccessedAt:W,pending:X}),X}async function TZ($,Z={}){await d1($,{...Z,ttlMs:0})}import{stat as xO}from"node:fs/promises";import H2 from"node:path";var gO=/[),.:;!?`'"]+$/,mO=/^[(`'"]+/;function vO($){let Z=$.matchAll(/(^|[\s])@([^\s]+)/g),Q=[];for(let W of Z){let J=(W[2]??"").trim();if(J.length===0)continue;let X=J.replace(mO,"").replace(gO,"");if(X.length===0||X.includes("@"))continue;Q.push(X)}return Array.from(new Set(Q))}function cO($,Z){let Q=$.replace(/\\/g,"/"),W=H2.isAbsolute(Q)?H2.resolve(Q):H2.resolve(Z,Q),J=H2.relative(Z,W);if(J.startsWith("..")||H2.isAbsolute(J))return;return J.split(H2.sep).join("/")}async function T8($,Z,Q={}){let W=vO($);if(W.length===0)return{prompt:$,mentions:[],matchedFiles:[],ignoredMentions:[]};let{maxFiles:J,maxFileBytes:X,maxTotalBytes:Y}=Q,j=await d1(Z,{ttlMs:Q.ttlMs}),V=[],H=[],B=[],G=0;for(let K of W){if(J&&B.length>=J){H.push(K);continue}let F=cO(K,Z);if(!F||!j.has(F)){H.push(K);continue}if(!X||!Y){V.push(F);continue}let A=H2.join(Z,F);try{if(!(await xO(A)).isFile()){H.push(K);continue}let f=G+X;if(f>Y){H.push(K);continue}G=f,V.push(F)}catch{H.push(K)}}return{prompt:$,mentions:W,matchedFiles:V,ignoredMentions:H}}var uO=["ts","tsx","js","jsx","mjs","cjs","json","md","mdx","txt","yaml","yml","toml","py","rb","go","rs","java","kt","swift","c","cpp","h","hpp","css","scss","less","html","vue","svelte","sql","sh","bash","zsh","fish","ps1","env","gitignore","dockerignore","editorconfig"],dO=["node_modules",".git","dist","build",".next","coverage","__pycache__",".venv","venv",".cache",".turbo",".output","out","target","bin","obj"],B2=null;function lO(){if(B2!==null)return Promise.resolve(B2);return new Promise(($)=>{let Z=tH("rg",["--version"],{stdio:["ignore","pipe","pipe"],windowsHide:!0});Z.on("close",(Q)=>{B2=Q===0,$(B2)}),Z.on("error",()=>{B2=!1,$(!1)}),setTimeout(()=>{if(!Z.killed)Z.kill("SIGTERM");if(B2===null)B2=!1,$(!1)},1000)})}function pO($,Z,Q,W,J=5000,X){return new Promise((Y)=>{let j=tH("rg",["--json",`--context=${W}`,"--max-count=1","-i",$],{cwd:Z,stdio:["ignore","pipe","pipe"],windowsHide:!0}),V="",H=!1,B=()=>{if(!j.killed)j.kill("SIGTERM")},G=setTimeout(()=>{if(!H)H=!0,B(),Y(null)},J),K=(F)=>{if(!H)H=!0,clearTimeout(G),B(),Y(F)};if(X?.aborted){B(),Y(null);return}X?.addEventListener("abort",()=>{K(null)}),j.stdout.on("data",(F)=>{V+=F.toString()}),j.stderr.on("data",()=>{}),j.on("close",(F)=>{if(F===0||F===1){try{let A=[],L=V.split(`
434
+ `).filter((f)=>f.trim());for(let f of L){if(A.length>=Q)break;let D=JSON.parse(f);if(D.type==="match"){let U=D.data,T=[];if(D.data.submatches&&D.data.submatches.length>0){let q=D.data.submatches[0];A.push({file:U.path.text,line:U.line_number,column:(q?.start??0)+1,match:q?.match?.text??"",context:T})}}else if(D.type==="context"&&A.length>0){let U=A[A.length-1],T=D.data.line_number===U.line?">":" ";U.context.push(`${T} ${D.data.line_number}: ${D.data.lines?.text??D.data.line?.text??""}`)}}K(A.length>0?A:null)}catch{K(null)}return}K(null)}),j.on("error",()=>{K(null)})})}function rO($,Z,Q,W){let J=$.split("/"),X=J[J.length-1]??"";if(J.length-1>W)return!1;for(let V=0;V<J.length-1;V++)if(Z.has(J[V]??""))return!1;let j=OZ.posix.extname(X).slice(1).toLowerCase();return Q.has(j)||!j&&!X.startsWith(".")}function w6($={}){let{includeExtensions:Z=uO,excludeDirs:Q=dO,maxResults:W=100,contextLines:J=2,maxDepth:X=20}=$,Y=new Set(Q),j=new Set(Z.map((V)=>V.toLowerCase()));return async(V,H,B)=>{if(B.signal?.aborted)throw Error("Search operation aborted");let G=await lO(),K=null;if(G)K=await pO(V,H,W,J,5000,B.signal);if(K){let U=[`Found ${K.length} result${K.length===1?"":"s"} for pattern: ${V}`,""];for(let T of K)U.push(`${T.file}:${T.line}:${T.column}`),U.push(...T.context),U.push("");if(K.length>=W)U.push(`(Showing first ${W} results. Refine your search for more specific results.)`);return oH(U.join(`
435
+ `))}let F;try{F=new RegExp(V,"gim")}catch(U){throw Error(`Invalid regex pattern: ${V}. ${U instanceof Error?U.message:""}`)}let A=[],L=0,f=await d1(H);for(let U of f){if(B.signal?.aborted)throw Error("Search operation aborted");if(!rO(U,Y,j,X))continue;if(A.length>=W)break;L++;let T=OZ.join(H,U);try{let z=(await eH.readFile(T,"utf-8")).split(`
436
436
  `);for(let _=0;_<z.length;_++){let E=z[_];F.lastIndex=0;let C=F.exec(E);while(C!==null){if(A.length>=W)break;let y=Math.max(0,_-J),l=Math.min(z.length-1,_+J),o=[];for(let t=y;t<=l;t++){let Q0=t===_?">":" ";o.push(`${Q0} ${t+1}: ${z[t]}`)}if(A.push({file:U,line:_+1,column:C.index+1,match:C[0],context:o}),C.index===F.lastIndex)F.lastIndex++;C=F.exec(E)}}}catch{}}if(A.length===0)return`No results found for pattern: ${V}
437
- Searched ${L} files.`;let D=[`Found ${A.length} result${A.length===1?"":"s"} for pattern: ${V}`,`Searched ${L} files.`,""];for(let U of A)D.push(`${U.file}:${U.line}:${U.column}`),D.push(...U.context),D.push("");if(A.length>=W)D.push(`(Showing first ${W} results. Refine your search for more specific results.)`);return aH(D.join(`
438
- `))}}function aH($){if($.length<=_8)return $;let Z=Math.ceil(_8/2),Q=Math.max(1,_8-Z);return`${$.slice(0,Z)}
437
+ Searched ${L} files.`;let D=[`Found ${A.length} result${A.length===1?"":"s"} for pattern: ${V}`,`Searched ${L} files.`,""];for(let U of A)D.push(`${U.file}:${U.line}:${U.column}`),D.push(...U.context),D.push("");if(A.length>=W)D.push(`(Showing first ${W} results. Refine your search for more specific results.)`);return oH(D.join(`
438
+ `))}}function oH($){if($.length<=_8)return $;let Z=Math.ceil(_8/2),Q=Math.max(1,_8-Z);return`${$.slice(0,Z)}
439
439
  [... search output truncated: ${$.length} chars total. Narrow the pattern or scope to view the elided matches ...]
440
- `+$.slice(-Q)}function dO($){return $.replace(/<script[^>]*>[\s\S]*?<\/script>/gi,"").replace(/<style[^>]*>[\s\S]*?<\/style>/gi,"").replace(/<!--[\s\S]*?-->/g,"").replace(/<(p|div|br|hr|h[1-6]|li|tr)[^>]*>/gi,`
440
+ `+$.slice(-Q)}function iO($){return $.replace(/<script[^>]*>[\s\S]*?<\/script>/gi,"").replace(/<style[^>]*>[\s\S]*?<\/style>/gi,"").replace(/<!--[\s\S]*?-->/g,"").replace(/<(p|div|br|hr|h[1-6]|li|tr)[^>]*>/gi,`
441
441
  `).replace(/<[^>]+>/g," ").replace(/&nbsp;/g," ").replace(/&amp;/g,"&").replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,'"').replace(/&#(\d+);/g,(Z,Q)=>String.fromCharCode(parseInt(Q,10))).replace(/\s+/g," ").replace(/\n\s+/g,`
442
442
  `).replace(/\n{3,}/g,`
443
443
 
444
- `).trim()}function C6($={}){let{timeoutMs:Z=30000,maxResponseBytes:Q=5000000,userAgent:W="Mozilla/5.0 (compatible; AgentBot/1.0)",headers:J={},followRedirects:X=!0}=$;return async(Y,j,V)=>{let H;try{H=new URL(Y)}catch{throw Error(`Invalid URL: ${Y}`)}if(!["http:","https:"].includes(H.protocol))throw Error(`Invalid protocol: ${H.protocol}. Only http and https are supported.`);let B=new AbortController,G=setTimeout(()=>B.abort(),Z),K;if(V.signal)K=()=>B.abort(),V.signal.addEventListener("abort",K);try{let F=await fetch(Y,{method:"GET",headers:{"User-Agent":W,Accept:"text/html,application/xhtml+xml,application/xml;q=0.9,text/plain;q=0.8,*/*;q=0.7","Accept-Language":"en-US,en;q=0.9",...J},redirect:X?"follow":"manual",signal:B.signal});if(clearTimeout(G),!X&&F.status>=300&&F.status<400)return`Redirect to: ${F.headers.get("location")}`;if(!F.ok)throw Error(`HTTP ${F.status}: ${F.statusText}`);let A=F.headers.get("content-type")||"",L=F.body?.getReader();if(!L)throw Error("Failed to read response body");let f=[],D=0;while(!0){let{done:E,value:C}=await L.read();if(E)break;if(D+=C.length,D>Q)throw L.cancel(),Error(`Response too large: exceeded ${Q} bytes`);f.push(C)}let U=new Uint8Array(D),T=0;for(let E of f)U.set(E,T),T+=E.length;let O=new TextDecoder("utf-8").decode(U),z;if(A.includes("text/html")||A.includes("application/xhtml"))z=dO(O);else if(A.includes("application/json"))try{let E=JSON.parse(O);z=JSON.stringify(E,null,2)}catch{z=O}else z=O;let _=[`URL: ${Y}`,`Content-Type: ${A}`,`Size: ${D} bytes`,"","--- Content ---",z.slice(0,50000)];if(z.length>50000)_.push(`
444
+ `).trim()}function C6($={}){let{timeoutMs:Z=30000,maxResponseBytes:Q=5000000,userAgent:W="Mozilla/5.0 (compatible; AgentBot/1.0)",headers:J={},followRedirects:X=!0}=$;return async(Y,j,V)=>{let H;try{H=new URL(Y)}catch{throw Error(`Invalid URL: ${Y}`)}if(!["http:","https:"].includes(H.protocol))throw Error(`Invalid protocol: ${H.protocol}. Only http and https are supported.`);let B=new AbortController,G=setTimeout(()=>B.abort(),Z),K;if(V.signal)K=()=>B.abort(),V.signal.addEventListener("abort",K);try{let F=await fetch(Y,{method:"GET",headers:{"User-Agent":W,Accept:"text/html,application/xhtml+xml,application/xml;q=0.9,text/plain;q=0.8,*/*;q=0.7","Accept-Language":"en-US,en;q=0.9",...J},redirect:X?"follow":"manual",signal:B.signal});if(clearTimeout(G),!X&&F.status>=300&&F.status<400)return`Redirect to: ${F.headers.get("location")}`;if(!F.ok)throw Error(`HTTP ${F.status}: ${F.statusText}`);let A=F.headers.get("content-type")||"",L=F.body?.getReader();if(!L)throw Error("Failed to read response body");let f=[],D=0;while(!0){let{done:E,value:C}=await L.read();if(E)break;if(D+=C.length,D>Q)throw L.cancel(),Error(`Response too large: exceeded ${Q} bytes`);f.push(C)}let U=new Uint8Array(D),T=0;for(let E of f)U.set(E,T),T+=E.length;let q=new TextDecoder("utf-8").decode(U),z;if(A.includes("text/html")||A.includes("application/xhtml"))z=iO(q);else if(A.includes("application/json"))try{let E=JSON.parse(q);z=JSON.stringify(E,null,2)}catch{z=q}else z=q;let _=[`URL: ${Y}`,`Content-Type: ${A}`,`Size: ${D} bytes`,"","--- Content ---",z.slice(0,50000)];if(z.length>50000)_.push(`
445
445
  [Content truncated: showing first 50000 of ${z.length} characters]`);return _.push("","--- Analysis Request ---",`Prompt: ${j}`),_.join(`
446
- `)}catch(F){if(clearTimeout(G),F instanceof Error){if(F.name==="AbortError")throw Error(`Request timed out after ${Z}ms`);throw F}throw Error(`Fetch failed: ${String(F)}`)}finally{if(V.signal&&K)V.signal.removeEventListener("abort",K)}}}function P6($={}){return Y2($)}function O8($={}){return{readFile:N6($.fileRead),search:w6($.search),bash:P6($.bash),webFetch:C6($.webFetch),applyPatch:R6($.applyPatch),editor:E6($.editor)}}var lO={read_files:"enableReadFiles",search_codebase:"enableSearch",run_commands:"enableBash",fetch_web_content:"enableWebFetch",apply_patch:"enableApplyPatch",editor:"enableEditor",skills:"enableSkills",ask_question:"enableAskQuestion",submit_and_exit:"enableSubmitAndExit"},q8=[{name:"openai-native-use-apply-patch",mode:"act",providerIdIncludes:["openai-native"],enableTools:["apply_patch"],disableTools:["editor"]},{name:"codex-and-gpt-use-apply-patch",mode:"act",modelIdIncludes:["codex","gpt"],enableTools:["apply_patch"],disableTools:["editor"]}];function tH($,Z){if(!Z||Z.length===0)return!0;let Q=$.toLowerCase();return Z.some((W)=>Q.includes(W.toLowerCase()))}function pO($,Z,Q,W){if($.mode&&$.mode!=="any"&&$.mode!==W)return!1;return tH(Z,$.providerIdIncludes)&&tH(Q,$.modelIdIncludes)}function M8($,Z,Q,W){if(!W||W.length===0)return{};let J=new Map;for(let Y of W){if(!pO(Y,$,Z,Q))continue;for(let j of Y.disableTools??[])J.set(j,!1);for(let j of Y.enableTools??[])J.set(j,!0)}let X={};for(let[Y,j]of J.entries())X[lO[Y]]=j;return X}var u0={act:{enableReadFiles:!0,enableSearch:!0,enableBash:!0,enableWebFetch:!0,enableApplyPatch:!1,enableEditor:!0,enableSkills:!0,enableAskQuestion:!0,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!0},plan:{enableReadFiles:!0,enableSearch:!0,enableBash:!0,enableWebFetch:!0,enableApplyPatch:!1,enableEditor:!1,enableSkills:!0,enableAskQuestion:!0,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!0},search:{enableReadFiles:!0,enableSearch:!0,enableBash:!1,enableWebFetch:!1,enableApplyPatch:!1,enableEditor:!1,enableSkills:!1,enableAskQuestion:!1,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!0},minimal:{enableReadFiles:!1,enableSearch:!1,enableBash:!0,enableWebFetch:!1,enableApplyPatch:!1,enableEditor:!1,enableSkills:!1,enableAskQuestion:!1,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!1},yolo:{enableReadFiles:!0,enableSearch:!1,enableBash:!0,enableWebFetch:!1,enableApplyPatch:!1,enableEditor:!0,enableSkills:!1,enableAskQuestion:!1,enableSubmitAndExit:!0,enableSpawnAgent:!1,enableAgentTeams:!1}};function l1($){if($.mode==="plan")return"plan";if($.mode==="yolo")return"yolo";return"act"}function OZ($){if($!=="yolo")return{};let Z={enabled:!0,autoApprove:!0},Q={"*":Z};for(let W of X$)Q[W]=Z;return Q}function qZ($,Z){let Q=u0[$],{enableSpawnAgent:W,enableAgentTeams:J,...X}=Q;return D$({...X,...Z})}import{createTool as YM,zodToJsonSchema as jM}from"@cline/shared";import{z as N3}from"zod";$1();import{createAgentRuntime as nq}from"@cline/agents";import{createContributionRegistry as aq,mergeModelOptions as LB}from"@cline/shared";import{createGateway as Zq,createHandlerAsync as Qq,hasRegisteredHandler as Wq,MODEL_COLLECTIONS_BY_PROVIDER_ID as Jq,normalizeProviderId as Xq}from"@cline/llms";import{EMPTY_CONTENT_TEXT as rO}from"@cline/shared";function iO($){let Z=aO($.content),Q=[],W=$.id??tO(),J=0,X=[],Y=()=>{if(X.length===0)return;let j=J===0?W:`${W}_part_${J}`;J+=1,Q.push({id:j,role:$.role,content:X.map(sO),createdAt:$.ts??Date.now(),metadata:$.metadata,modelInfo:$.modelInfo,metrics:eH($.metrics)}),X=[]};if(Z.length===0)return Q.push({id:W,role:$.role,content:[{type:"text",text:rO}],createdAt:$.ts??Date.now(),metadata:$.metadata,modelInfo:$.modelInfo,metrics:eH($.metrics)}),Q;for(let j of Z){if(j.type!=="tool_result"){X.push(j);continue}Y(),Q.push({id:`${W}_tool_${j.tool_use_id}`,role:"tool",content:[ZB(j)],createdAt:$.ts??Date.now(),metadata:$.metadata})}return Y(),Q}function MZ($){return $.flatMap(iO)}function nO($){let Z=$.content.map(QB).filter((Q)=>Q!==void 0);return{id:$.id,role:$.role==="tool"?"user":$.role,content:Z,ts:$.createdAt,metadata:$.metadata,modelInfo:$.modelInfo,metrics:oO($.metrics)}}function R8($){return $.map(nO)}function RZ($){let Z=[];for(let Q of $){let W=Q.content.map(QB).filter((Y)=>Y!==void 0),J=Q.role==="tool"?"user":Q.role,X=Z[Z.length-1];if(J==="user"&&W.length>0&&W.every((Y)=>Y.type==="tool_result")&&X?.role==="user"&&Array.isArray(X.content)&&X.content.every((Y)=>Y.type==="tool_result")){X.content.push(...W);continue}Z.push({role:J,content:W})}return Z}function aO($){if(typeof $==="string")return $.trim().length>0?[{type:"text",text:$}]:[];return[...$]}function sO($){switch($.type){case"text":return{type:"text",text:$.text};case"thinking":return{type:"reasoning",text:$.thinking,metadata:$.signature?{signature:$.signature,details:$.details}:$.details?{details:$.details}:void 0};case"redacted_thinking":return{type:"reasoning",text:"",redacted:!0,metadata:{data:$.data}};case"image":return{type:"image",image:$.data,mediaType:$.mediaType};case"file":return{type:"file",path:$.path,content:$.content};case"tool_use":return{type:"tool-call",toolCallId:$.id,toolName:$.name,input:$.input,metadata:$.signature?{signature:$.signature}:void 0};case"tool_result":return ZB($)}}function ZB($){return{type:"tool-result",toolCallId:$.tool_use_id,toolName:$.name,output:$.content,isError:$.is_error}}function QB($){switch($.type){case"text":return{type:"text",text:$.text};case"reasoning":{if($.redacted===!0)return{type:"redacted_thinking",data:$.metadata?.data??""};let Z=$.metadata;return{type:"thinking",thinking:$.text,signature:Z?.signature,details:Z?.details}}case"image":return typeof $.image==="string"?{type:"image",data:$.image,mediaType:$.mediaType??"image/png"}:void 0;case"file":return{type:"file",path:$.path,content:$.content};case"tool-call":{let Z=$.metadata;return{type:"tool_use",id:$.toolCallId,name:$.toolName,input:$.input??{},signature:Z?.thoughtSignature??Z?.signature}}case"tool-result":{let Z=$.output,Q=typeof Z==="string"?Z:Array.isArray(Z)?Z:JSON.stringify(Z);return{type:"tool_result",tool_use_id:$.toolCallId,name:$.toolName,content:Q,is_error:$.isError}}}}function eH($){if(!$)return;return{inputTokens:$.inputTokens??0,outputTokens:$.outputTokens??0,cacheReadTokens:$.cacheReadTokens??0,cacheWriteTokens:$.cacheWriteTokens??0,cost:$.cost}}function oO($){if(!$)return;return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,cost:$.cost}}var $B=0;function tO(){return $B+=1,`msg_${Date.now().toString(36)}_${$B.toString(36)}`}function eO($){switch($.type){case"text":return[{type:"text-delta",text:$.text}];case"reasoning":return[{type:"reasoning-delta",text:$.reasoning,metadata:$.signature?{thoughtSignature:$.signature,details:$.details}:{details:$.details}}];case"tool_calls":{let Z=$.tool_call.function,Q=Z.arguments;return[{type:"tool-call-delta",toolCallId:$.tool_call.call_id??Z.id,toolName:Z.name,inputText:typeof Q==="string"?Q:void 0,input:typeof Q==="string"?void 0:Q,...$.signature?{metadata:{thoughtSignature:$.signature}}:{}}]}case"usage":return[{type:"usage",usage:{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,reasoningTokenCount:$.thoughtsTokenCount,totalCost:$.totalCost}}];case"done":return[{type:"finish",reason:$q($),error:$.error}];default:return[]}}function $q($){if($.success===!1)return"error";if($.incompleteReason==="max_output_tokens"||$.incompleteReason==="max-tokens")return"max-tokens";return"stop"}function WB($){return{async*stream(Z){let Q=!1,W=!1;try{let J=typeof $==="function"?await $():$;J.setAbortSignal?.(Z.signal);let X=RZ(Z.messages),Y=Z.tools.map((j)=>({name:j.name,description:j.description,inputSchema:j.inputSchema}));for await(let j of J.createMessage(Z.systemPrompt??"",X,Y))for(let V of eO(j)){if(V.type==="finish")Q=!0;else if(V.type==="tool-call-delta")W=!0;yield V}if(!Q)yield{type:"finish",reason:W?"tool-calls":"stop"}}catch(J){if(!Q)yield{type:"finish",reason:Z.signal?.aborted?"aborted":"error",error:J instanceof Error?J.message:String(J)}}}}}function Yq($){let Z=Object.fromEntries(Object.entries($).filter(([,Q])=>Q!==void 0));return Object.keys(Z).length>0?Z:void 0}function jq($){return $.providerId==="openai-compatible"||$.clientType==="openai-compatible"}function Vq($){let Z={region:$.region,apiLine:$.apiLine,openRouterProviderSorting:$.openRouterProviderSorting,modelCatalog:$.modelCatalog};if(jq($))Object.assign(Z,{apiVersion:$.azure?.apiVersion,useIdentity:$.azure?.useIdentity});if($.providerId==="bedrock")Object.assign(Z,{authentication:$.aws?.authentication,profile:$.aws?.profile,accessKeyId:$.aws?.accessKey,secretAccessKey:$.aws?.secretKey,sessionToken:$.aws?.sessionToken,usePromptCache:$.aws?.usePromptCache,useCrossRegionInference:$.useCrossRegionInference,useGlobalInference:$.useGlobalInference,endpoint:$.aws?.endpoint,customModelBaseId:$.aws?.customModelBaseId});if($.providerId==="vertex"){let Q=$.gcp?.region??$.region;Object.assign(Z,{project:$.gcp?.projectId,projectId:$.gcp?.projectId,location:Q,region:Q})}if($.providerId==="sapaicore")Object.assign(Z,$.sap);return Yq(Z)}function U3($){let Z=$.providerConfig;if(Z?.knownModels)return Z.knownModels;if($.knownModels)return $.knownModels;return Jq[$.providerId]?.models??void 0}function Hq($){if(!$?.length)return;let Z=new Set;for(let Q of $)switch(Q){case"tools":case"reasoning":case"prompt-cache":case"images":Z.add(Q);break;case"structured_output":Z.add("structured-output");break;default:Z.add("text")}return Z.add("text"),[...Z]}function Bq($,Z){return{id:$,name:Z.name??$,description:Z.description,contextWindow:Z.contextWindow,maxInputTokens:Z.maxInputTokens,maxOutputTokens:Z.maxTokens,capabilities:Hq(Z.capabilities),metadata:{family:Z.family,pricing:Z.pricing,status:Z.status,releaseDate:Z.releaseDate}}}function JB($,Z,Q){let W=$.providerConfig,J=W?.providerId===$.providerId?W:void 0,X={...J??{},providerId:$.providerId,modelId:$.modelId,apiKey:$.apiKey??J?.apiKey,baseUrl:$.baseUrl??J?.baseUrl,headers:$.headers??J?.headers,knownModels:U3($),maxOutputTokens:$.maxTokensPerTurn,reasoningEffort:$.reasoningEffort,thinkingBudgetTokens:$.thinkingBudgetTokens,thinking:$.thinking,logger:Z,extensionContext:$.extensionContext};if(Wq(Xq(X.providerId)))return WB(()=>Qq(X));return Zq({fetch:X.fetch,providerConfigs:[{providerId:X.providerId,apiKey:X.apiKey,baseUrl:X.baseUrl,headers:X.headers,fetch:X.fetch,options:Vq(X),models:X.knownModels?Object.entries(X.knownModels).map(([Y,j])=>Bq(Y,j)):void 0}],logger:Z,telemetry:Q??$.telemetry??$.extensionContext?.telemetry}).createAgentModel({providerId:X.providerId,modelId:X.modelId},{maxTokens:X.maxOutputTokens})}import{createMediaBudgetState as Gq,IMAGE_OMITTED_PLACEHOLDER as XB,normalizeUserInput as YB,resolveMediaBudget as Kq,validateAndReserveImageMedia as Fq}from"@cline/shared";var Aq=8000,fq=50000,Uq=6000000,Dq=200000,Lq=12000,_q=65536,b6=2000,jB=40000,zq=8,D3={maxToolResultChars:"CLINE_MESSAGE_BUILDER_MAX_TOOL_RESULT_CHARS",maxTotalTextBytes:"CLINE_MESSAGE_BUILDER_MAX_TOTAL_TEXT_BYTES",minOutdatedRewriteBytes:"CLINE_MESSAGE_BUILDER_MIN_OUTDATED_REWRITE_BYTES"},Tq=new Set(["read","read_files"]),B2="[outdated - see the latest file content]",VB="Tool execution was interrupted before a result was produced.",HB=($)=>`
446
+ `)}catch(F){if(clearTimeout(G),F instanceof Error){if(F.name==="AbortError")throw Error(`Request timed out after ${Z}ms`);throw F}throw Error(`Fetch failed: ${String(F)}`)}finally{if(V.signal&&K)V.signal.removeEventListener("abort",K)}}}function P6($={}){return j2($)}function O8($={}){return{readFile:N6($.fileRead),search:w6($.search),bash:P6($.bash),webFetch:C6($.webFetch),applyPatch:R6($.applyPatch),editor:E6($.editor)}}var nO={read_files:"enableReadFiles",search_codebase:"enableSearch",run_commands:"enableBash",fetch_web_content:"enableWebFetch",apply_patch:"enableApplyPatch",editor:"enableEditor",skills:"enableSkills",ask_question:"enableAskQuestion",submit_and_exit:"enableSubmitAndExit"},q8=[{name:"openai-native-use-apply-patch",mode:"act",providerIdIncludes:["openai-native"],enableTools:["apply_patch"],disableTools:["editor"]},{name:"codex-and-gpt-use-apply-patch",mode:"act",modelIdIncludes:["codex","gpt"],enableTools:["apply_patch"],disableTools:["editor"]}];function $B($,Z){if(!Z||Z.length===0)return!0;let Q=$.toLowerCase();return Z.some((W)=>Q.includes(W.toLowerCase()))}function aO($,Z,Q,W){if($.mode&&$.mode!=="any"&&$.mode!==W)return!1;return $B(Z,$.providerIdIncludes)&&$B(Q,$.modelIdIncludes)}function M8($,Z,Q,W){if(!W||W.length===0)return{};let J=new Map;for(let Y of W){if(!aO(Y,$,Z,Q))continue;for(let j of Y.disableTools??[])J.set(j,!1);for(let j of Y.enableTools??[])J.set(j,!0)}let X={};for(let[Y,j]of J.entries())X[nO[Y]]=j;return X}var u0={act:{enableReadFiles:!0,enableSearch:!0,enableBash:!0,enableWebFetch:!0,enableApplyPatch:!1,enableEditor:!0,enableSkills:!0,enableAskQuestion:!0,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!0},plan:{enableReadFiles:!0,enableSearch:!0,enableBash:!0,enableWebFetch:!0,enableApplyPatch:!1,enableEditor:!1,enableSkills:!0,enableAskQuestion:!0,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!0},search:{enableReadFiles:!0,enableSearch:!0,enableBash:!1,enableWebFetch:!1,enableApplyPatch:!1,enableEditor:!1,enableSkills:!1,enableAskQuestion:!1,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!0},minimal:{enableReadFiles:!1,enableSearch:!1,enableBash:!0,enableWebFetch:!1,enableApplyPatch:!1,enableEditor:!1,enableSkills:!1,enableAskQuestion:!1,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!1},yolo:{enableReadFiles:!0,enableSearch:!1,enableBash:!0,enableWebFetch:!1,enableApplyPatch:!1,enableEditor:!0,enableSkills:!1,enableAskQuestion:!1,enableSubmitAndExit:!0,enableSpawnAgent:!1,enableAgentTeams:!1}};function l1($){if($.mode==="plan")return"plan";if($.mode==="yolo")return"yolo";return"act"}function qZ($){if($!=="yolo")return{};let Z={enabled:!0,autoApprove:!0},Q={"*":Z};for(let W of X$)Q[W]=Z;return Q}function MZ($,Z){let Q=u0[$],{enableSpawnAgent:W,enableAgentTeams:J,...X}=Q;return D$({...X,...Z})}import{createTool as BM,zodToJsonSchema as GM}from"@cline/shared";import{z as N3}from"zod";$1();import{createAgentRuntime as tq}from"@cline/agents";import{createContributionRegistry as eq,mergeModelOptions as zB}from"@cline/shared";import{createGateway as Xq,createHandlerAsync as Yq,hasRegisteredHandler as jq,MODEL_COLLECTIONS_BY_PROVIDER_ID as Vq,normalizeProviderId as Hq}from"@cline/llms";import{EMPTY_CONTENT_TEXT as sO}from"@cline/shared";function oO($){let Z=eO($.content),Q=[],W=$.id??Qq(),J=0,X=[],Y=()=>{if(X.length===0)return;let j=J===0?W:`${W}_part_${J}`;J+=1,Q.push({id:j,role:$.role,content:X.map($q),createdAt:$.ts??Date.now(),metadata:$.metadata,modelInfo:$.modelInfo,metrics:ZB($.metrics)}),X=[]};if(Z.length===0)return Q.push({id:W,role:$.role,content:[{type:"text",text:sO}],createdAt:$.ts??Date.now(),metadata:$.metadata,modelInfo:$.modelInfo,metrics:ZB($.metrics)}),Q;for(let j of Z){if(j.type!=="tool_result"){X.push(j);continue}Y(),Q.push({id:`${W}_tool_${j.tool_use_id}`,role:"tool",content:[WB(j)],createdAt:$.ts??Date.now(),metadata:$.metadata})}return Y(),Q}function RZ($){return $.flatMap(oO)}function tO($){let Z=$.content.map(JB).filter((Q)=>Q!==void 0);return{id:$.id,role:$.role==="tool"?"user":$.role,content:Z,ts:$.createdAt,metadata:$.metadata,modelInfo:$.modelInfo,metrics:Zq($.metrics)}}function R8($){return $.map(tO)}function EZ($){let Z=[];for(let Q of $){let W=Q.content.map(JB).filter((Y)=>Y!==void 0),J=Q.role==="tool"?"user":Q.role,X=Z[Z.length-1];if(J==="user"&&W.length>0&&W.every((Y)=>Y.type==="tool_result")&&X?.role==="user"&&Array.isArray(X.content)&&X.content.every((Y)=>Y.type==="tool_result")){X.content.push(...W);continue}Z.push({role:J,content:W})}return Z}function eO($){if(typeof $==="string")return $.trim().length>0?[{type:"text",text:$}]:[];return[...$]}function $q($){switch($.type){case"text":return{type:"text",text:$.text};case"thinking":return{type:"reasoning",text:$.thinking,metadata:$.signature?{signature:$.signature,details:$.details}:$.details?{details:$.details}:void 0};case"redacted_thinking":return{type:"reasoning",text:"",redacted:!0,metadata:{data:$.data}};case"image":return{type:"image",image:$.data,mediaType:$.mediaType};case"file":return{type:"file",path:$.path,content:$.content};case"tool_use":return{type:"tool-call",toolCallId:$.id,toolName:$.name,input:$.input,metadata:$.signature?{signature:$.signature}:void 0};case"tool_result":return WB($)}}function WB($){return{type:"tool-result",toolCallId:$.tool_use_id,toolName:$.name,output:$.content,isError:$.is_error}}function JB($){switch($.type){case"text":return{type:"text",text:$.text};case"reasoning":{if($.redacted===!0)return{type:"redacted_thinking",data:$.metadata?.data??""};let Z=$.metadata;return{type:"thinking",thinking:$.text,signature:Z?.signature,details:Z?.details}}case"image":return typeof $.image==="string"?{type:"image",data:$.image,mediaType:$.mediaType??"image/png"}:void 0;case"file":return{type:"file",path:$.path,content:$.content};case"tool-call":{let Z=$.metadata;return{type:"tool_use",id:$.toolCallId,name:$.toolName,input:$.input??{},signature:Z?.thoughtSignature??Z?.signature}}case"tool-result":{let Z=$.output,Q=typeof Z==="string"?Z:Array.isArray(Z)?Z:JSON.stringify(Z);return{type:"tool_result",tool_use_id:$.toolCallId,name:$.toolName,content:Q,is_error:$.isError}}}}function ZB($){if(!$)return;return{inputTokens:$.inputTokens??0,outputTokens:$.outputTokens??0,cacheReadTokens:$.cacheReadTokens??0,cacheWriteTokens:$.cacheWriteTokens??0,cost:$.cost}}function Zq($){if(!$)return;return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,cost:$.cost}}var QB=0;function Qq(){return QB+=1,`msg_${Date.now().toString(36)}_${QB.toString(36)}`}function Wq($){switch($.type){case"text":return[{type:"text-delta",text:$.text}];case"reasoning":return[{type:"reasoning-delta",text:$.reasoning,metadata:$.signature?{thoughtSignature:$.signature,details:$.details}:{details:$.details}}];case"tool_calls":{let Z=$.tool_call.function,Q=Z.arguments;return[{type:"tool-call-delta",toolCallId:$.tool_call.call_id??Z.id,toolName:Z.name,inputText:typeof Q==="string"?Q:void 0,input:typeof Q==="string"?void 0:Q,...$.signature?{metadata:{thoughtSignature:$.signature}}:{}}]}case"usage":return[{type:"usage",usage:{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,reasoningTokenCount:$.thoughtsTokenCount,totalCost:$.totalCost}}];case"done":return[{type:"finish",reason:Jq($),error:$.error}];default:return[]}}function Jq($){if($.success===!1)return"error";if($.incompleteReason==="max_output_tokens"||$.incompleteReason==="max-tokens")return"max-tokens";return"stop"}function XB($){return{async*stream(Z){let Q=!1,W=!1;try{let J=typeof $==="function"?await $():$;J.setAbortSignal?.(Z.signal);let X=EZ(Z.messages),Y=Z.tools.map((j)=>({name:j.name,description:j.description,inputSchema:j.inputSchema}));for await(let j of J.createMessage(Z.systemPrompt??"",X,Y))for(let V of Wq(j)){if(V.type==="finish")Q=!0;else if(V.type==="tool-call-delta")W=!0;yield V}if(!Q)yield{type:"finish",reason:W?"tool-calls":"stop"}}catch(J){if(!Q)yield{type:"finish",reason:Z.signal?.aborted?"aborted":"error",error:J instanceof Error?J.message:String(J)}}}}}function Bq($){let Z=Object.fromEntries(Object.entries($).filter(([,Q])=>Q!==void 0));return Object.keys(Z).length>0?Z:void 0}function Gq($){return $.providerId==="openai-compatible"||$.clientType==="openai-compatible"}function Kq($){let Z={region:$.region,apiLine:$.apiLine,openRouterProviderSorting:$.openRouterProviderSorting,modelCatalog:$.modelCatalog};if(Gq($))Object.assign(Z,{apiVersion:$.azure?.apiVersion,useIdentity:$.azure?.useIdentity});if($.providerId==="bedrock")Object.assign(Z,{authentication:$.aws?.authentication,profile:$.aws?.profile,accessKeyId:$.aws?.accessKey,secretAccessKey:$.aws?.secretKey,sessionToken:$.aws?.sessionToken,usePromptCache:$.aws?.usePromptCache,useCrossRegionInference:$.useCrossRegionInference,useGlobalInference:$.useGlobalInference,endpoint:$.aws?.endpoint,customModelBaseId:$.aws?.customModelBaseId});if($.providerId==="vertex"){let Q=$.gcp?.region??$.region;Object.assign(Z,{project:$.gcp?.projectId,projectId:$.gcp?.projectId,location:Q,region:Q})}if($.providerId==="sapaicore")Object.assign(Z,$.sap);return Bq(Z)}function U3($){let Z=$.providerConfig;if(Z?.knownModels)return Z.knownModels;if($.knownModels)return $.knownModels;return Vq[$.providerId]?.models??void 0}function Fq($){if(!$?.length)return;let Z=new Set;for(let Q of $)switch(Q){case"tools":case"reasoning":case"prompt-cache":case"images":Z.add(Q);break;case"structured_output":Z.add("structured-output");break;default:Z.add("text")}return Z.add("text"),[...Z]}function Aq($,Z){return{id:$,name:Z.name??$,description:Z.description,contextWindow:Z.contextWindow,maxInputTokens:Z.maxInputTokens,maxOutputTokens:Z.maxTokens,capabilities:Fq(Z.capabilities),metadata:{family:Z.family,pricing:Z.pricing,status:Z.status,releaseDate:Z.releaseDate}}}function YB($,Z,Q){let W=$.providerConfig,J=W?.providerId===$.providerId?W:void 0,X={...J??{},providerId:$.providerId,modelId:$.modelId,apiKey:$.apiKey??J?.apiKey,baseUrl:$.baseUrl??J?.baseUrl,headers:$.headers??J?.headers,knownModels:U3($),maxOutputTokens:$.maxTokensPerTurn,reasoningEffort:$.reasoningEffort,thinkingBudgetTokens:$.thinkingBudgetTokens,thinking:$.thinking,logger:Z,extensionContext:$.extensionContext};if(jq(Hq(X.providerId)))return XB(()=>Yq(X));return Xq({fetch:X.fetch,providerConfigs:[{providerId:X.providerId,apiKey:X.apiKey,baseUrl:X.baseUrl,headers:X.headers,fetch:X.fetch,options:Kq(X),models:X.knownModels?Object.entries(X.knownModels).map(([Y,j])=>Aq(Y,j)):void 0}],logger:Z,telemetry:Q??$.telemetry??$.extensionContext?.telemetry}).createAgentModel({providerId:X.providerId,modelId:X.modelId},{maxTokens:X.maxOutputTokens})}import{createMediaBudgetState as fq,IMAGE_OMITTED_PLACEHOLDER as jB,normalizeUserInput as VB,resolveMediaBudget as Uq,validateAndReserveImageMedia as Dq}from"@cline/shared";var Lq=8000,_q=50000,zq=6000000,Tq=200000,Oq=12000,qq=65536,b6=2000,HB=40000,Mq=8,D3={maxToolResultChars:"CLINE_MESSAGE_BUILDER_MAX_TOOL_RESULT_CHARS",maxTotalTextBytes:"CLINE_MESSAGE_BUILDER_MAX_TOTAL_TEXT_BYTES",minOutdatedRewriteBytes:"CLINE_MESSAGE_BUILDER_MIN_OUTDATED_REWRITE_BYTES"},Rq=new Set(["read","read_files"]),G2="[outdated - see the latest file content]",BB="Tool execution was interrupted before a result was produced.",GB=($)=>`
447
447
 
448
448
  ...[truncated ${$} chars]...
449
449
 
@@ -451,84 +451,84 @@ Searched ${L} files.`;let D=[`Found ${A.length} result${A.length===1?"":"s"} for
451
451
 
452
452
  ...[truncated ${$} chars to fit provider request budget]...
453
453
 
454
- `,Oq=($)=>`
454
+ `,Eq=($)=>`
455
455
 
456
456
  ...[assistant text truncated: omitted ${$} chars]...
457
457
 
458
- `,BB=($)=>`
458
+ `,KB=($)=>`
459
459
 
460
460
  ...[assistant text truncated: omitted ${$} chars to fit provider request budget]...
461
461
 
462
- `,qq=($)=>`
462
+ `,Nq=($)=>`
463
463
 
464
464
  ...[assistant text truncated: omitted ${$} chars due to repeated tool-call markup]...
465
465
 
466
- `;function FB($=process.env){return{maxToolResultChars:KB($[D3.maxToolResultChars]),maxTotalTextBytes:KB($[D3.maxTotalTextBytes]),minOutdatedRewriteBytes:Rq($[D3.minOutdatedRewriteBytes])}}class _3{indexedMessageCount=0;indexedTailRef;toolNameByIdCache=new Map;readLocatorsByToolUseIdCache=new Map;latestReadToolUseByLocatorCache=new Map;latestFullContentOwnerByPathCache=new Map;readResultLocatorCache=new WeakMap;maxToolResultChars;maxFileContentChars;maxTotalTextBytes;mediaBudget;maxAssistantTextChars;maxAssistantToolMarkupChars;minOutdatedRewriteBytes;committedOutdatedRewrites=new Map;constructor($={}){this.maxToolResultChars=S6($.maxToolResultChars,Aq),this.maxFileContentChars=S6($.maxFileContentChars,fq),this.maxTotalTextBytes=S6($.maxTotalTextBytes,Uq),this.mediaBudget=$.mediaBudget??{},this.maxAssistantTextChars=S6($.maxAssistantTextChars,Dq),this.maxAssistantToolMarkupChars=S6($.maxAssistantToolMarkupChars,Lq),this.minOutdatedRewriteBytes=Eq($.minOutdatedRewriteBytes,_q)}resetConversationState(){this.resetIndexes(),this.committedOutdatedRewrites.clear()}buildForApi($){this.reindex($),this.commitOutdatedRewrites($);let Q=this.addMissingToolResults($).map((J)=>{if(!Array.isArray(J.content)){if(J.role==="user"&&typeof J.content==="string"){let j=YB(J.content);if(j!==J.content)return{...J,content:j}}if(J.role==="assistant"&&typeof J.content==="string"){let j=this.truncateAssistantText(J.content);if(j!==J.content)return{...J,content:j}}return J}let X=!1,Y=J.content.map((j)=>{let V=this.transformBlock(j,J.role);if(V!==j)X=!0;return V});return X?{...J,content:Y}:J}),W=this.applyMediaBudget(Q);return this.truncateToTotalTextBudget(W)}transformBlock($,Z){if(Z==="user"&&$.type==="text"&&typeof $.text==="string"){let J=YB($.text);if(J!==$.text)return{...$,text:J};return $}if(Z==="assistant"&&$.type==="text"&&typeof $.text==="string"){let J=this.truncateAssistantText($.text);return J===$.text?$:{...$,text:J}}if($.type==="file"){let J=E8($.content,this.maxFileContentChars,HB);return J===$.content?$:{...$,content:J}}if($.type!=="tool_result")return $;let Q=this.resolveToolName($),W=$.content;if(this.isReadTool(Q)&&$.is_error!==!0){let J=this.committedOutdatedRewrites.get($.tool_use_id);if(J&&J.size>0){let Y=this.getReadLocators($).filter((j)=>J.has(this.toReadLocatorKey(j))&&this.isOutdatedReadLocator(j,$.tool_use_id));if(Y.length>0)W=this.replaceOutdatedReadContent(W,Y)}}return W=this.truncateToolResultContent(W),W===$.content?$:{...$,content:W}}reindex($){let Z=this.indexedMessageCount===0||$.length>=this.indexedMessageCount&&$[this.indexedMessageCount-1]===this.indexedTailRef;if($.length<this.indexedMessageCount||!Z)this.resetIndexes();for(let Q=this.indexedMessageCount;Q<$.length;Q++){let W=$[Q];if(!Array.isArray(W.content))continue;for(let J=0;J<W.content.length;J++){let X=W.content[J];if(X.type==="file")this.latestFullContentOwnerByPathCache.set(X.path,`file:${Q}:${J}`);else if(X.type==="tool_use"){let Y=X.name.toLowerCase();if(this.toolNameByIdCache.set(X.id,Y),this.isReadTool(Y)){let j=this.extractLocatorsFromReadToolInput(X.input);if(j.length>0)this.readLocatorsByToolUseIdCache.set(X.id,j)}}else if(X.type==="tool_result"){let Y=this.resolveToolName(X);if(!this.isReadTool(Y)||X.is_error===!0)continue;let j=this.getReadLocators(X);for(let V of j)if(this.latestReadToolUseByLocatorCache.set(this.toReadLocatorKey(V),X.tool_use_id),this.isFullFileRead(V))this.latestFullContentOwnerByPathCache.set(V.path,X.tool_use_id)}}}this.indexedMessageCount=$.length,this.indexedTailRef=$.length>0?$[$.length-1]:void 0}commitOutdatedRewrites($){let Z=new Map,Q=new Set,W=0;for(let J of $){if(!Array.isArray(J.content))continue;for(let X of J.content){if(X.type!=="tool_result"||X.is_error===!0)continue;let Y=this.resolveToolName(X);if(!this.isReadTool(Y))continue;Q.add(X.tool_use_id);let j=this.committedOutdatedRewrites.get(X.tool_use_id),V=new Set,H=new Set;for(let G of this.getReadLocators(X)){let K=this.toReadLocatorKey(G);if(!this.isOutdatedReadLocator(G,X.tool_use_id))continue;if(H.add(K),!j?.has(K))V.add(K)}if(j){for(let G of j)if(!H.has(G))j.delete(G);if(j.size===0)this.committedOutdatedRewrites.delete(X.tool_use_id)}if(V.size===0)continue;let B=Z.get(X.tool_use_id);if(!B)B=new Set,Z.set(X.tool_use_id,B);for(let G of V)B.add(G);W+=this.estimateOutdatedReclaimBytes(X.content,V)}}for(let J of this.committedOutdatedRewrites.keys())if(!Q.has(J))this.committedOutdatedRewrites.delete(J);if(Z.size===0||W<this.minOutdatedRewriteBytes)return;for(let[J,X]of Z){let Y=this.committedOutdatedRewrites.get(J);if(!Y)Y=new Set,this.committedOutdatedRewrites.set(J,Y);for(let j of X)Y.add(j)}}estimateOutdatedReclaimBytes($,Z){let Q=this.extractReadLocatorsFromToolResultContent($),W=Q.length>0&&Q.every((V)=>Z.has(this.toReadLocatorKey(V))),J=(V)=>{let H;try{H=JSON.parse(V)}catch{return W||Q.length===0?W0(this.truncateMiddle(V)):0}let B=Array.isArray(H)?H:[H],G=0;for(let K of B){let F=this.extractLocatorFromResultEntry(K);if(F&&Z.has(this.toReadLocatorKey(F)))G+=this.providerBoundEntryBytes(K)}return G};if(typeof $==="string")return J($);let X=new Set(Z),Y=0;for(let V of $)if(V.type==="text")Y+=this.countOutdatedImageEntries(V.text,X);let j=0;for(let V of $)if(V.type==="text")j+=J(V.text);else if(V.type==="image"){if(Y>0)Y-=1,j+=W0(V.data)}else if(_$(V)){let H=this.extractLocatorFromResultEntry(V);if(H&&Z.has(this.toReadLocatorKey(H)))j+=this.providerBoundEntryBytes(V)}else if(V.type==="file"){if(Z.has(this.toReadLocatorKey({path:V.path,startLine:null,endLine:null})))j+=W0(this.truncateMiddle(V.content))}return j}providerBoundEntryBytes($){let Z=this.truncateNestedStrings($);return W0(JSON.stringify(Z))}addMissingToolResults($){let Z=this.collectToolResultIds($),Q=[],W=new Map,J=!1,X=()=>{if(W.size===0)return;Y(this.createMissingToolResultMessage(W)),W.clear(),J=!0},Y=(j)=>{let V=Q.at(-1);if(this.shouldMergeUserAfterToolResults(V,j)){Q[Q.length-1]={...V,content:[...V.content,...this.contentBlocksForUserMerge(j.content)]},J=!0;return}Q.push(j)};for(let j of $){if(this.isToolResultOnlyMessage(j)){if(Y(this.appendMissingToolResults(j,W)),W.size>0)W.clear(),J=!0;continue}if(Array.isArray(j.content)){let V=j.content.filter((B)=>B.type==="tool_result"),H=j.content.filter((B)=>B.type!=="tool_result");if(V.length>0){let B=this.appendMissingToolResults({...j,role:"user",content:V},W);if(Y(B),W.size>0)W.clear();J=!0}if(H.length>0||V.length===0){if(V.length===0)X();let B=V.length>0?{...j,content:H}:j;if(Y(B),B.role==="assistant")this.trackMissingToolCalls(B,Z,W)}continue}X(),Y(j)}return X(),J?Q:$}appendMissingToolResults($,Z){if(Z.size===0||!Array.isArray($.content))return $;return{...$,role:"user",content:[...$.content,...this.createMissingToolResultBlocks(Z)]}}shouldMergeUserAfterToolResults($,Z){return $?.role==="user"&&Z.role==="user"&&this.isToolResultOnlyMessage($)&&this.contentBlocksForUserMerge(Z.content).length>0}contentBlocksForUserMerge($){return typeof $==="string"?$.length>0?[{type:"text",text:$}]:[]:$}collectToolResultIds($){let Z=new Set;for(let Q of $){if(!Array.isArray(Q.content))continue;for(let W of Q.content)if(W.type==="tool_result")Z.add(W.tool_use_id)}return Z}isToolResultOnlyMessage($){return $.role==="user"&&Array.isArray($.content)&&$.content.length>0&&$.content.every((Z)=>Z.type==="tool_result")}trackMissingToolCalls($,Z,Q){if(!Array.isArray($.content))return;for(let W of $.content){if(W.type!=="tool_use"||Z.has(W.id))continue;Q.set(W.id,W.name)}}createMissingToolResultMessage($){return{role:"user",content:this.createMissingToolResultBlocks($)}}createMissingToolResultBlocks($){return Array.from($,([Z,Q])=>({type:"tool_result",tool_use_id:Z,name:Q,content:[{type:"text",text:this.formatMissingToolResultText(Q)}],is_error:!0}))}formatMissingToolResultText($){return $?`${VB} Tool: ${$}.`:VB}resetIndexes(){this.indexedMessageCount=0,this.indexedTailRef=void 0,this.toolNameByIdCache.clear(),this.readLocatorsByToolUseIdCache.clear(),this.latestReadToolUseByLocatorCache.clear(),this.latestFullContentOwnerByPathCache.clear(),this.readResultLocatorCache=new WeakMap}getReadLocators($){let Z=$,Q=this.readResultLocatorCache.get(Z);if(Q===void 0)Q=this.extractReadLocatorsFromToolResultContent($.content),this.readResultLocatorCache.set(Z,Q);if(Q.length>0)return Q;return this.readLocatorsByToolUseIdCache.get($.tool_use_id)??[]}extractLocatorsFromReadToolInput($){if(!$||typeof $!=="object")return[];let Z=$,Q=[],W=this.extractLocatorFromReadRequest(Z);if(W)Q.push(W);if(Array.isArray(Z.files))for(let J of Z.files){let X=this.extractLocatorFromReadRequest(J);if(X)Q.push(X)}if(Array.isArray(Z.file_paths)){for(let J of Z.file_paths)if(typeof J==="string"&&J.length>0)Q.push({path:J,startLine:null,endLine:null})}return this.dedupeReadLocators(Q)}extractReadLocatorsFromToolResultContent($){if(typeof $==="string")return this.tryParseReadLocators($);let Z=[];for(let Q of $){if(Q.type==="text"){Z.push(...this.tryParseReadLocators(Q.text));continue}if(_$(Q)){let W=this.extractLocatorFromResultEntry(Q);if(W)Z.push(W)}}return this.dedupeReadLocators(Z)}tryParseReadLocators($){try{return this.extractLocatorsFromParsedReadResult(JSON.parse($))}catch{return[]}}extractLocatorsFromParsedReadResult($){if(Array.isArray($)){let Q=[];for(let W of $){let J=this.extractLocatorFromResultEntry(W);if(J)Q.push(J)}return this.dedupeReadLocators(Q)}let Z=this.extractLocatorFromResultEntry($);return Z?[Z]:[]}extractLocatorFromReadRequest($){if(!$||typeof $!=="object")return;let Z=$,Q=this.extractPath(Z);if(!Q)return;return{path:Q,startLine:this.extractLineNumber(Z.start_line),endLine:this.extractLineNumber(Z.end_line)}}extractLocatorFromResultEntry($){if(!$||typeof $!=="object")return;let Z=$,Q=this.extractPath(Z);if(Q)return{path:Q,startLine:this.extractLineNumber(Z.start_line),endLine:this.extractLineNumber(Z.end_line)};if(typeof Z.query==="string"&&Z.query.length>0)return this.parseReadQuery(Z.query);return}extractPath($){let Z=[$.path,$.file_path,$.filePath];for(let Q of Z)if(typeof Q==="string"&&Q.length>0)return Q;return}extractLineNumber($){return typeof $==="number"&&Number.isInteger($)?$:null}parseReadQuery($){let Z=/^(.*):(\d+)-(EOF|\d+)$/.exec($);if(!Z)return{path:$,startLine:null,endLine:null};return{path:Z[1],startLine:Number(Z[2]),endLine:Z[3]==="EOF"?null:Number(Z[3])}}dedupeReadLocators($){let Z=new Map;for(let Q of $)Z.set(this.toReadLocatorKey(Q),Q);return Array.from(Z.values())}toReadLocatorKey($){if(this.isFullFileRead($))return $.path;return`${$.path}:${$.startLine??1}-${$.endLine??"EOF"}`}isFullFileRead($){return $.startLine==null&&$.endLine==null}isOutdatedReadLocator($,Z){let Q=this.latestFullContentOwnerByPathCache.get($.path);if(Q&&Q!==Z)return!0;return this.latestReadToolUseByLocatorCache.get(this.toReadLocatorKey($))!==Z}replaceOutdatedReadContent($,Z){let Q=new Set(Z.map((X)=>this.toReadLocatorKey(X))),W=new Set(Z.map((X)=>X.path));if(typeof $==="string")return this.replaceOutdatedInString($,Q)??B2;let J=0;for(let X of $)if(X.type==="text")J+=this.countOutdatedImageEntries(X.text,Q);return $.map((X)=>{if(X.type==="file"){if(!W.has(X.path))return X;return{...X,content:B2}}if(X.type==="image"){if(J===0)return X;return J-=1,{type:"text",text:B2}}if(_$(X))return this.replaceOutdatedReadEntry(X,Q);if(X.type!=="text")return X;let Y=this.replaceOutdatedInString(X.text,Q);if(Y===null)return{...X,text:B2};return Y===X.text?X:{...X,text:Y}})}countOutdatedImageEntries($,Z){let Q;try{Q=JSON.parse($)}catch{return 0}let W=Array.isArray(Q)?Q:[Q],J=0;for(let X of W){if(!X||typeof X!=="object")continue;let Y=X,j=this.extractLocatorFromResultEntry(Y);if(!j)continue;if(!Z.has(this.toReadLocatorKey(j)))continue;if(Y.result==="Successfully read image"||Y.content==="Successfully read image")J+=1}return J}replaceOutdatedInString($,Z){let Q;try{Q=JSON.parse($)}catch{return null}let W=Array.isArray(Q)?Q.map((J)=>this.replaceOutdatedReadEntry(J,Z)):this.replaceOutdatedReadEntry(Q,Z);return JSON.stringify(W)}replaceOutdatedReadEntry($,Z){if(!$||typeof $!=="object")return $;let Q=this.extractLocatorFromResultEntry($);if(!Q||!Z.has(this.toReadLocatorKey(Q)))return $;let W={...$};if(typeof W.result==="string")W.result=B2;else if(typeof W.content==="string")W.content=B2;else W.result=B2;return W}isReadTool($){return!!$&&Tq.has($)}resolveToolName($){let Z=this.toolNameByIdCache.get($.tool_use_id);if(Z!==void 0)return Z;return typeof $.name==="string"&&$.name.length>0?$.name.toLowerCase():void 0}truncateToolResultContent($){if(typeof $==="string")return this.truncateMiddle($);return $.map((Z)=>{if(Z.type==="file"){let Q=this.truncateMiddle(Z.content);return Q===Z.content?Z:{...Z,content:Q}}if(Z.type==="text"){let Q=this.truncateMiddle(Z.text);return Q===Z.text?Z:{...Z,text:Q}}if(_$(Z))return this.truncateNestedStrings(Z);return Z})}truncateNestedStrings($){if(typeof $==="string")return this.truncateMiddle($);if(Array.isArray($)){let Z=!1,Q=$.map((W)=>{let J=this.truncateNestedStrings(W);if(J!==W)Z=!0;return J});return Z?Q:$}if($!==null&&typeof $==="object"){if(z3($))return $;let Z=!1,Q={};for(let[W,J]of Object.entries($)){let X=this.truncateNestedStrings(J);if(X!==J)Z=!0;Q[W]=X}return Z?Q:$}return $}truncateMiddle($){return E8($,this.maxToolResultChars,HB)}truncateAssistantText($){if(this.hasRepeatedToolCallMarkup($))return E8($,this.maxAssistantToolMarkupChars,qq);return E8($,this.maxAssistantTextChars,Oq)}hasRepeatedToolCallMarkup($){if($.length<=this.maxAssistantToolMarkupChars)return!1;let Z=0;for(let Q of $.matchAll(Mq))if(Z+=1,Z>=zq)return!0;return!1}truncateToTotalTextBudget($){let Z=this.countMessageTextBytes($);if(Z<=this.maxTotalTextBytes)return $;let Q=$.map((J)=>{if(!Array.isArray(J.content))return{...J};return{...J,content:J.content.map((X)=>wq(X))}}),W=this.collectTruncationCandidates(Q);for(let J of W){if(Z<=this.maxTotalTextBytes)break;let X=J.byteLength;if(X<=J.minBytes)continue;let Y=Z-this.maxTotalTextBytes,j=Math.max(J.minBytes,X-Y),V=Nq(J.get(),j,J.makeMarker);J.set(V),Z-=X-W0(V)}return Q}countMessageTextBytes($){let Z=0;for(let Q of $){if(typeof Q.content==="string"){Z+=W0(Q.content);continue}for(let W of Q.content)if(W.type==="text")Z+=W0(W.text);else if(W.type==="thinking")Z+=W0(W.thinking);else if(W.type==="file")Z+=W0(W.content);else if(W.type==="tool_use")Z+=EZ(W.input);else if(W.type==="tool_result"){if(typeof W.content==="string")Z+=W0(W.content);else for(let J of W.content)if(J.type==="text")Z+=W0(J.text);else if(J.type==="file")Z+=W0(J.content);else if(_$(J))Z+=EZ(J)}}return Z}collectTruncationCandidates($){let Z=[],Q=[];for(let W of $){if(W.role==="assistant"&&typeof W.content==="string"){Z.push({byteLength:W0(W.content),minBytes:jB,makeMarker:BB,get:()=>W.content,set:(J)=>{W.content=J}});continue}if(!Array.isArray(W.content))continue;for(let J of W.content){if(J.type==="tool_use"){NZ(J.input,Q);continue}if(W.role==="assistant"&&J.type==="text"){Z.push({byteLength:W0(J.text),minBytes:jB,makeMarker:BB,get:()=>J.text,set:(X)=>{J.text=X}});continue}if(J.type!=="tool_result")continue;if(typeof J.content==="string"){Z.push({byteLength:W0(J.content),minBytes:b6,makeMarker:y6,get:()=>J.content,set:(X)=>{J.content=X}});continue}for(let X of J.content)if(X.type==="text")Z.push({byteLength:W0(X.text),minBytes:b6,makeMarker:y6,get:()=>X.text,set:(Y)=>{X.text=Y}});else if(X.type==="file")Z.push({byteLength:W0(X.content),minBytes:b6,makeMarker:y6,get:()=>X.content,set:(Y)=>{X.content=Y}});else if(_$(X))NZ(X,Z)}}return Z.sort((W,J)=>J.byteLength-W.byteLength),Q.sort((W,J)=>J.byteLength-W.byteLength),[...Z,...Q]}applyMediaBudget($){let Z=this.resolveMediaBudget();if(Z.maxImageEncodedBytes===Number.POSITIVE_INFINITY&&Z.maxImageDecodedBytes===Number.POSITIVE_INFINITY&&Z.maxTotalMediaBytes===Number.POSITIVE_INFINITY)return $;let Q=Gq(),W=!1,J=$.map((X)=>{if(!Array.isArray(X.content))return X;let Y=!1,j=X.content.map((V)=>{let H=this.applyMediaBudgetToBlock(V,Z,Q);if(H!==V)Y=!0;return H});if(!Y)return X;return W=!0,{...X,content:j}});return W?J:$}resolveMediaBudget(){return Kq(this.mediaBudget)}applyMediaBudgetToBlock($,Z,Q){if(L3($))return this.limitImageContent($,Z,Q);if($.type!=="tool_result"||typeof $.content==="string")return $;let W=!1,J=$.content.map((X)=>{let Y=this.applyMediaBudgetToToolResultEntry(X,Z,Q);if(Y!==X)W=!0;return Y});return W?{...$,content:J}:$}applyMediaBudgetToToolResultEntry($,Z,Q){if(L3($))return this.limitImageContent($,Z,Q);if(_$($))return this.limitNestedMedia($,Z,Q);return $}limitNestedMedia($,Z,Q){if(L3($)){let W=this.limitImageContent($,Z,Q);return W.type==="text"?W.text:W}if(Array.isArray($)){let W=!1,J=$.map((X)=>{let Y=this.limitNestedMedia(X,Z,Q);if(Y!==X)W=!0;return Y});return W?J:$}if($!==null&&typeof $==="object"){let W=!1,J={};for(let[X,Y]of Object.entries($)){let j=this.limitNestedMedia(Y,Z,Q);if(j!==Y)W=!0;J[X]=j}return W?J:$}return $}limitImageContent($,Z,Q){if(!AB($))return{type:"text",text:XB};let W=Fq($.mediaType,$.data,{maxImageEncodedBytes:Z.maxImageEncodedBytes,maxImageDecodedBytes:Z.maxImageDecodedBytes,maxTotalMediaBytes:Z.maxTotalMediaBytes},Q);if(!W.ok)return{type:"text",text:XB};return{...$,data:W.base64,mediaType:W.mediaType}}}var GB=String.raw`[\|\uFF5C]`,Mq=new RegExp(String.raw`<\s*(?:${GB}\s*)?DSML\s*(?:${GB}\s*)?(?:tool_calls|invoke)\b[^>]*>|<\s*/?\s*(?:tool_calls?|tool_call|function_calls?|function_call|invoke)\b[^>]*>`,"gi");function W0($){return Buffer.byteLength($,"utf8")}function KB($){if($===void 0)return;let Z=Number.parseInt($,10);return Number.isFinite(Z)&&Z>0?Z:void 0}function Rq($){if($===void 0)return;let Z=$.trim().toLowerCase();if(Z==="infinity"||Z==="disable")return Number.POSITIVE_INFINITY;let Q=Number.parseInt($,10);return Number.isFinite(Q)&&Q>=0?Q:void 0}function S6($,Z){return typeof $==="number"&&Number.isFinite($)&&$>0?Math.floor($):Z}function Eq($,Z){if(typeof $!=="number"||Number.isNaN($)||$<0)return Z;return Number.isFinite($)?Math.floor($):$}function E8($,Z,Q){if($.length<=Z)return $;let W=Q($.length-Z),J=Math.max(0,Math.floor((Z-W.length)/2)),X=Math.max(0,$.length-J*2),Y=Q(X),j=Math.max(0,Math.floor((Z-Y.length)/2)),V=$.slice(0,j),H=j>0?$.slice(-j):"";return`${V}${Y}${H}`}function Nq($,Z,Q){if(W0($)<=Z)return $;let W=0,J=$.length,X=E8($,0,Q);while(W<=J){let Y=W+J>>>1,j=E8($,Y,Q);if(W0(j)<=Z)X=j,W=Y+1;else J=Y-1}return X}function wq($){if($.type==="tool_use")return{...$,input:wZ($.input)};if($.type!=="tool_result"||typeof $.content==="string")return{...$};return{...$,content:$.content.map((Z)=>_$(Z)?wZ(Z):{...Z})}}function _$($){if($===null||typeof $!=="object")return!1;let Z=$.type;return Z!=="text"&&Z!=="image"&&Z!=="file"}function L3($){return $!==null&&typeof $==="object"&&$.type==="image"}function AB($){return $!==null&&typeof $==="object"&&$.type==="image"&&typeof $.data==="string"&&typeof $.mediaType==="string"}function z3($){return AB($)}function EZ($){if(typeof $==="string")return W0($);if(Array.isArray($)){let Z=0;for(let Q of $)Z+=EZ(Q);return Z}if($!==null&&typeof $==="object"){if(z3($))return 0;let Z=0;for(let Q of Object.values($))Z+=EZ(Q);return Z}return 0}function NZ($,Z){if(Array.isArray($)){$.forEach((Q,W)=>{if(typeof Q==="string")Z.push({byteLength:W0(Q),minBytes:b6,makeMarker:y6,get:()=>$[W],set:(J)=>{$[W]=J}});else NZ(Q,Z)});return}if($!==null&&typeof $==="object"){if(z3($))return;let Q=$;for(let W of Object.keys(Q)){let J=Q[W];if(typeof J==="string")Z.push({byteLength:W0(J),minBytes:b6,makeMarker:y6,get:()=>Q[W],set:(X)=>{Q[W]=X}});else NZ(J,Z)}}}function wZ($){if(Array.isArray($))return $.map(wZ);if($!==null&&typeof $==="object"){let Z={};for(let[Q,W]of Object.entries($))Z[Q]=wZ(W);return Z}return $}function T3(){return`conv_${Date.now()}_${Math.random().toString(36).slice(2,9)}`}class O3{messages=[];conversationId=T3();sessionStarted=!1;constructor($){if(($?.length??0)>0)this.restore($??[])}getConversationId(){return this.conversationId}getMessages(){return[...this.messages]}appendMessage($){this.messages.push($)}appendMessages($){if($.length===0)return;this.messages.push(...$)}replaceMessages($){this.messages=[...$]}resetForRun(){this.messages=[],this.conversationId=T3(),this.sessionStarted=!1}clearHistory(){this.messages=[],this.conversationId=T3(),this.sessionStarted=!1}restore($){this.messages=[...$],this.sessionStarted=!1}isSessionStarted(){return this.sessionStarted}markSessionStarted(){this.sessionStarted=!0}}function fB($){let{agentConfig:Z}=$,Q=Cq(Z),W=Pq(Z),J=$.hooks,X=Sq(Z.maxParallelToolCalls);return{sessionId:$.sessionId??Z.sessionId,agentId:$.agentId,conversationId:$.conversationId,parentAgentId:$.parentAgentId,agentRole:$.agentRole,systemPrompt:$.systemPrompt??Z.systemPrompt,messageModelInfo:W,model:$.model,modelOptions:Q,tools:$.tools,hooks:J,prepareTurn:$.prepareTurn,consumePendingUserMessage:Z.consumePendingUserMessage,plugins:$.plugins,logger:$.logger??Z.logger,telemetry:$.telemetry??Z.telemetry,initialMessages:$.initialMessages,completionPolicy:Z.completionPolicy,maxIterations:Z.maxIterations,toolExecution:X,toolPolicies:Z.toolPolicies,toolContextMetadata:$.toolContextMetadata,requestToolApproval:Z.requestToolApproval}}function Cq($){let Z={};if($.thinking!==void 0)Z.thinking=$.thinking;if($.reasoningEffort!==void 0)Z.reasoningEffort=$.reasoningEffort;if($.thinkingBudgetTokens!==void 0)Z.thinkingBudgetTokens=$.thinkingBudgetTokens;if($.maxTokensPerTurn!==void 0)Z.maxTokensPerTurn=$.maxTokensPerTurn;if($.apiTimeoutMs!==void 0)Z.apiTimeoutMs=$.apiTimeoutMs;return Object.keys(Z).length>0?Z:void 0}function Pq($){let Z=$.providerConfig?.family;return{id:$.modelId,provider:$.providerId,family:Z}}function Sq($){if($===void 0)return;return $>=2?"parallel":"sequential"}function bq(){return{lastToolName:"",lastToolSignature:"",consecutiveIdenticalCount:0}}function yq($){$.lastToolName="",$.lastToolSignature="",$.consecutiveIdenticalCount=0}function q3($){if($==null||typeof $!=="object")return $;if(Array.isArray($))return $.map(q3);let Z={};for(let Q of Object.keys($).sort())Z[Q]=q3($[Q]);return Z}function hq($){if($==null)return"null";if(typeof $==="string")return $;if(typeof $!=="object")return String($);try{return JSON.stringify(q3($))}catch{return String($)}}function kq($,Z,Q,W){if(Z===$.lastToolName&&Q===$.lastToolSignature)$.consecutiveIdenticalCount++;else $.consecutiveIdenticalCount=1;return $.lastToolName=Z,$.lastToolSignature=Q,{softWarning:$.consecutiveIdenticalCount===W.softThreshold,hardEscalation:$.consecutiveIdenticalCount>=W.hardThreshold}}var UB={softThreshold:3,hardThreshold:5};class M3{config;state=bq();constructor($){this.config={softThreshold:$?.softThreshold??UB.softThreshold,hardThreshold:$?.hardThreshold??UB.hardThreshold}}inspect($){let Z=hq($.input),Q=kq(this.state,$.name,Z,this.config);if(Q.hardEscalation)return{kind:"hard",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${$.name}\`; stopping to avoid a loop.`};if(Q.softWarning)return{kind:"soft",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${$.name}\`; consider trying a different approach.`};return{kind:"ok"}}reset(){yq(this.state)}}class R3{consecutiveMistakes=0;options;constructor($){this.options=$}async record($){let Z=this.options.maxConsecutiveMistakes,Q=$.forceAtLimit&&Z?Z:this.consecutiveMistakes+1;this.consecutiveMistakes=Q;let W=$.details?.trim()||`consecutive mistake (${$.reason})`;if(this.options.emit({type:"error",error:Error(W),recoverable:!0,iteration:$.iteration}),this.options.log("warn","Recorded consecutive mistake",{agentId:this.options.agentId,conversationId:this.options.getConversationId(),runId:this.options.getActiveRunId(),iteration:$.iteration,reason:$.reason,details:$.details,consecutiveMistakes:Q,maxConsecutiveMistakes:this.options.maxConsecutiveMistakes}),!Z||Q<Z)return{action:"continue"};let J=await xq({iteration:$.iteration,consecutiveMistakes:Q,maxConsecutiveMistakes:Z,reason:$.reason,details:$.details},this.options.onLimitReached);if(J.action==="continue"){let X=J.guidance?.trim();if(X)this.options.appendRecoveryNotice(X,$.reason);return this.consecutiveMistakes=0,{action:"continue",guidance:X}}return{action:"stop",reason:J.reason?.trim()||void 0,message:Iq({iteration:$.iteration,consecutiveMistakes:Q,maxConsecutiveMistakes:Z,reason:$.reason,details:$.details,stopReason:J.reason})}}reset(){this.consecutiveMistakes=0}get value(){return this.consecutiveMistakes}}function Iq($){let Z=[`Stopped after ${$.consecutiveMistakes}/${$.maxConsecutiveMistakes} consecutive mistakes (${$.reason}) at iteration ${$.iteration}.`],Q=$.details?.trim();if(Q)Z.push(`Error: ${Q}`);let W=$.stopReason?.trim();if(W)Z.push(`Decision: ${W}`);return Z.push("Session state was preserved. Send a new prompt to resume from the latest state."),Z.join(" ")}async function xq($,Z){if(!Z)return{action:"stop",reason:`maximum consecutive mistakes reached (${$.maxConsecutiveMistakes})`};try{return await Z($)}catch(Q){return{action:"stop",reason:Q instanceof Error?Q.message:`maximum consecutive mistakes reached (${$.maxConsecutiveMistakes})`}}}function gq($){let Z=$.content.filter((Q)=>Q.type==="text");if(Z.length===0)return;return Z.map((Q)=>Q.text).join("")}function mq($){let Z=$.content.filter((Q)=>Q.type==="reasoning");if(Z.length===0)return;return{reasoning:Z.map((Q)=>Q.text).join(""),redacted:Z.some((Q)=>Q.redacted===!0)}}function vq($){return $.content.find((Z)=>Z.type==="tool-result")}function cq($){switch($){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}function uq($){if(!$||$.isError!==!0)return;if(typeof $.output==="string")return $.output;if($.output instanceof Error)return $.output.message;try{return JSON.stringify($.output)}catch{return String($.output)}}class E3{lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0};toolStartedAt=new Map;translate($){switch($.type){case"run-started":return[];case"message-added":return[];case"turn-started":return[{type:"iteration_start",iteration:$.iteration}];case"turn-finished":return[{type:"iteration_end",iteration:$.iteration,hadToolCalls:$.toolCallCount>0,toolCallCount:$.toolCallCount}];case"assistant-text-delta":return[{type:"content_start",contentType:"text",text:$.text,accumulated:$.accumulatedText}];case"assistant-reasoning-delta":return[{type:"content_start",contentType:"reasoning",reasoning:$.text,redacted:$.redacted===!0}];case"assistant-message":return this.translateAssistantMessage($.message);case"tool-started":return this.translateToolStarted($);case"tool-updated":return[{type:"content_update",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,update:$.update}];case"tool-finished":return this.translateToolFinished($);case"usage-updated":return this.translateUsage($.usage);case"status-notice":return[{type:"notice",noticeType:"status",displayRole:"status",message:$.message,reason:$.metadata?.reason==="auto_compaction"?"auto_compaction":void 0,metadata:$.metadata}];case"run-finished":return this.translateRunFinished($.result);case"run-failed":return[{type:"error",error:$.error,recoverable:!1,iteration:$.snapshot.iteration}];default:return $}}reset(){this.lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0},this.toolStartedAt.clear()}translateAssistantMessage($){let Z=[],Q=gq($);if(Q!==void 0)Z.push({type:"content_end",contentType:"text",text:Q});let W=mq($);if(W!==void 0)Z.push({type:"content_end",contentType:"reasoning",reasoning:W.reasoning});return Z}translateToolStarted($){return this.toolStartedAt.set($.toolCall.toolCallId,Date.now()),[{type:"content_start",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,input:$.toolCall.input}]}translateToolFinished($){let Z=this.toolStartedAt.get($.toolCall.toolCallId),Q=Z===void 0?void 0:Date.now()-Z;this.toolStartedAt.delete($.toolCall.toolCallId);let W=vq($.message),J=W?.output,X=uq(W);return[{type:"content_end",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,output:J,error:X,durationMs:Q}]}translateUsage($){let Z=$.inputTokens-this.lastUsage.inputTokens,Q=$.outputTokens-this.lastUsage.outputTokens,W=$.cacheReadTokens-this.lastUsage.cacheReadTokens,J=$.cacheWriteTokens-this.lastUsage.cacheWriteTokens,X=this.lastUsage.totalCost??0,j=($.totalCost??0)-X;return this.lastUsage={inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,totalCost:$.totalCost},[{type:"usage",inputTokens:Math.max(0,Z),outputTokens:Math.max(0,Q),cacheReadTokens:W===0?void 0:Math.max(0,W),cacheWriteTokens:J===0?void 0:Math.max(0,J),cost:j===0?void 0:j,totalInputTokens:$.inputTokens,totalOutputTokens:$.outputTokens,totalCacheReadTokens:$.cacheReadTokens===0?void 0:$.cacheReadTokens,totalCacheWriteTokens:$.cacheWriteTokens===0?void 0:$.cacheWriteTokens,totalCost:$.totalCost}]}translateRunFinished($){let Z={inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens===0?void 0:$.usage.cacheReadTokens,cacheWriteTokens:$.usage.cacheWriteTokens===0?void 0:$.usage.cacheWriteTokens,totalCost:$.usage.totalCost};return[{type:"done",reason:cq($.status),text:$.outputText,iterations:$.iterations,usage:Z}]}}function sq($){if(typeof $==="string")return $;if($ instanceof Error)return $.message;try{return JSON.stringify($)}catch{return String($)}}async function oq($){let Q=(typeof $.content==="function"?await $.content():$.content).trim();return Q.length>0?Q:void 0}function tq($,Z){let Q=$.trim(),W=Z.map((J)=>J.trim()).filter(Boolean).join(`
466
+ `;function fB($=process.env){return{maxToolResultChars:AB($[D3.maxToolResultChars]),maxTotalTextBytes:AB($[D3.maxTotalTextBytes]),minOutdatedRewriteBytes:Cq($[D3.minOutdatedRewriteBytes])}}class _3{indexedMessageCount=0;indexedTailRef;toolNameByIdCache=new Map;readLocatorsByToolUseIdCache=new Map;latestReadToolUseByLocatorCache=new Map;latestFullContentOwnerByPathCache=new Map;readResultLocatorCache=new WeakMap;maxToolResultChars;maxFileContentChars;maxTotalTextBytes;mediaBudget;maxAssistantTextChars;maxAssistantToolMarkupChars;minOutdatedRewriteBytes;committedOutdatedRewrites=new Map;constructor($={}){this.maxToolResultChars=S6($.maxToolResultChars,Lq),this.maxFileContentChars=S6($.maxFileContentChars,_q),this.maxTotalTextBytes=S6($.maxTotalTextBytes,zq),this.mediaBudget=$.mediaBudget??{},this.maxAssistantTextChars=S6($.maxAssistantTextChars,Tq),this.maxAssistantToolMarkupChars=S6($.maxAssistantToolMarkupChars,Oq),this.minOutdatedRewriteBytes=Pq($.minOutdatedRewriteBytes,qq)}resetConversationState(){this.resetIndexes(),this.committedOutdatedRewrites.clear()}buildForApi($){this.reindex($),this.commitOutdatedRewrites($);let Q=this.addMissingToolResults($).map((J)=>{if(!Array.isArray(J.content)){if(J.role==="user"&&typeof J.content==="string"){let j=VB(J.content);if(j!==J.content)return{...J,content:j}}if(J.role==="assistant"&&typeof J.content==="string"){let j=this.truncateAssistantText(J.content);if(j!==J.content)return{...J,content:j}}return J}let X=!1,Y=J.content.map((j)=>{let V=this.transformBlock(j,J.role);if(V!==j)X=!0;return V});return X?{...J,content:Y}:J}),W=this.applyMediaBudget(Q);return this.truncateToTotalTextBudget(W)}transformBlock($,Z){if(Z==="user"&&$.type==="text"&&typeof $.text==="string"){let J=VB($.text);if(J!==$.text)return{...$,text:J};return $}if(Z==="assistant"&&$.type==="text"&&typeof $.text==="string"){let J=this.truncateAssistantText($.text);return J===$.text?$:{...$,text:J}}if($.type==="file"){let J=E8($.content,this.maxFileContentChars,GB);return J===$.content?$:{...$,content:J}}if($.type!=="tool_result")return $;let Q=this.resolveToolName($),W=$.content;if(this.isReadTool(Q)&&$.is_error!==!0){let J=this.committedOutdatedRewrites.get($.tool_use_id);if(J&&J.size>0){let Y=this.getReadLocators($).filter((j)=>J.has(this.toReadLocatorKey(j))&&this.isOutdatedReadLocator(j,$.tool_use_id));if(Y.length>0)W=this.replaceOutdatedReadContent(W,Y)}}return W=this.truncateToolResultContent(W),W===$.content?$:{...$,content:W}}reindex($){let Z=this.indexedMessageCount===0||$.length>=this.indexedMessageCount&&$[this.indexedMessageCount-1]===this.indexedTailRef;if($.length<this.indexedMessageCount||!Z)this.resetIndexes();for(let Q=this.indexedMessageCount;Q<$.length;Q++){let W=$[Q];if(!Array.isArray(W.content))continue;for(let J=0;J<W.content.length;J++){let X=W.content[J];if(X.type==="file")this.latestFullContentOwnerByPathCache.set(X.path,`file:${Q}:${J}`);else if(X.type==="tool_use"){let Y=X.name.toLowerCase();if(this.toolNameByIdCache.set(X.id,Y),this.isReadTool(Y)){let j=this.extractLocatorsFromReadToolInput(X.input);if(j.length>0)this.readLocatorsByToolUseIdCache.set(X.id,j)}}else if(X.type==="tool_result"){let Y=this.resolveToolName(X);if(!this.isReadTool(Y)||X.is_error===!0)continue;let j=this.getReadLocators(X);for(let V of j)if(this.latestReadToolUseByLocatorCache.set(this.toReadLocatorKey(V),X.tool_use_id),this.isFullFileRead(V))this.latestFullContentOwnerByPathCache.set(V.path,X.tool_use_id)}}}this.indexedMessageCount=$.length,this.indexedTailRef=$.length>0?$[$.length-1]:void 0}commitOutdatedRewrites($){let Z=new Map,Q=new Set,W=0;for(let J of $){if(!Array.isArray(J.content))continue;for(let X of J.content){if(X.type!=="tool_result"||X.is_error===!0)continue;let Y=this.resolveToolName(X);if(!this.isReadTool(Y))continue;Q.add(X.tool_use_id);let j=this.committedOutdatedRewrites.get(X.tool_use_id),V=new Set,H=new Set;for(let G of this.getReadLocators(X)){let K=this.toReadLocatorKey(G);if(!this.isOutdatedReadLocator(G,X.tool_use_id))continue;if(H.add(K),!j?.has(K))V.add(K)}if(j){for(let G of j)if(!H.has(G))j.delete(G);if(j.size===0)this.committedOutdatedRewrites.delete(X.tool_use_id)}if(V.size===0)continue;let B=Z.get(X.tool_use_id);if(!B)B=new Set,Z.set(X.tool_use_id,B);for(let G of V)B.add(G);W+=this.estimateOutdatedReclaimBytes(X.content,V)}}for(let J of this.committedOutdatedRewrites.keys())if(!Q.has(J))this.committedOutdatedRewrites.delete(J);if(Z.size===0||W<this.minOutdatedRewriteBytes)return;for(let[J,X]of Z){let Y=this.committedOutdatedRewrites.get(J);if(!Y)Y=new Set,this.committedOutdatedRewrites.set(J,Y);for(let j of X)Y.add(j)}}estimateOutdatedReclaimBytes($,Z){let Q=this.extractReadLocatorsFromToolResultContent($),W=Q.length>0&&Q.every((V)=>Z.has(this.toReadLocatorKey(V))),J=(V)=>{let H;try{H=JSON.parse(V)}catch{return W||Q.length===0?W0(this.truncateMiddle(V)):0}let B=Array.isArray(H)?H:[H],G=0;for(let K of B){let F=this.extractLocatorFromResultEntry(K);if(F&&Z.has(this.toReadLocatorKey(F)))G+=this.providerBoundEntryBytes(K)}return G};if(typeof $==="string")return J($);let X=new Set(Z),Y=0;for(let V of $)if(V.type==="text")Y+=this.countOutdatedImageEntries(V.text,X);let j=0;for(let V of $)if(V.type==="text")j+=J(V.text);else if(V.type==="image"){if(Y>0)Y-=1,j+=W0(V.data)}else if(_$(V)){let H=this.extractLocatorFromResultEntry(V);if(H&&Z.has(this.toReadLocatorKey(H)))j+=this.providerBoundEntryBytes(V)}else if(V.type==="file"){if(Z.has(this.toReadLocatorKey({path:V.path,startLine:null,endLine:null})))j+=W0(this.truncateMiddle(V.content))}return j}providerBoundEntryBytes($){let Z=this.truncateNestedStrings($);return W0(JSON.stringify(Z))}addMissingToolResults($){let Z=this.collectToolResultIds($),Q=[],W=new Map,J=!1,X=()=>{if(W.size===0)return;Y(this.createMissingToolResultMessage(W)),W.clear(),J=!0},Y=(j)=>{let V=Q.at(-1);if(this.shouldMergeUserAfterToolResults(V,j)){Q[Q.length-1]={...V,content:[...V.content,...this.contentBlocksForUserMerge(j.content)]},J=!0;return}Q.push(j)};for(let j of $){if(this.isToolResultOnlyMessage(j)){if(Y(this.appendMissingToolResults(j,W)),W.size>0)W.clear(),J=!0;continue}if(Array.isArray(j.content)){let V=j.content.filter((B)=>B.type==="tool_result"),H=j.content.filter((B)=>B.type!=="tool_result");if(V.length>0){let B=this.appendMissingToolResults({...j,role:"user",content:V},W);if(Y(B),W.size>0)W.clear();J=!0}if(H.length>0||V.length===0){if(V.length===0)X();let B=V.length>0?{...j,content:H}:j;if(Y(B),B.role==="assistant")this.trackMissingToolCalls(B,Z,W)}continue}X(),Y(j)}return X(),J?Q:$}appendMissingToolResults($,Z){if(Z.size===0||!Array.isArray($.content))return $;return{...$,role:"user",content:[...$.content,...this.createMissingToolResultBlocks(Z)]}}shouldMergeUserAfterToolResults($,Z){return $?.role==="user"&&Z.role==="user"&&this.isToolResultOnlyMessage($)&&this.contentBlocksForUserMerge(Z.content).length>0}contentBlocksForUserMerge($){return typeof $==="string"?$.length>0?[{type:"text",text:$}]:[]:$}collectToolResultIds($){let Z=new Set;for(let Q of $){if(!Array.isArray(Q.content))continue;for(let W of Q.content)if(W.type==="tool_result")Z.add(W.tool_use_id)}return Z}isToolResultOnlyMessage($){return $.role==="user"&&Array.isArray($.content)&&$.content.length>0&&$.content.every((Z)=>Z.type==="tool_result")}trackMissingToolCalls($,Z,Q){if(!Array.isArray($.content))return;for(let W of $.content){if(W.type!=="tool_use"||Z.has(W.id))continue;Q.set(W.id,W.name)}}createMissingToolResultMessage($){return{role:"user",content:this.createMissingToolResultBlocks($)}}createMissingToolResultBlocks($){return Array.from($,([Z,Q])=>({type:"tool_result",tool_use_id:Z,name:Q,content:[{type:"text",text:this.formatMissingToolResultText(Q)}],is_error:!0}))}formatMissingToolResultText($){return $?`${BB} Tool: ${$}.`:BB}resetIndexes(){this.indexedMessageCount=0,this.indexedTailRef=void 0,this.toolNameByIdCache.clear(),this.readLocatorsByToolUseIdCache.clear(),this.latestReadToolUseByLocatorCache.clear(),this.latestFullContentOwnerByPathCache.clear(),this.readResultLocatorCache=new WeakMap}getReadLocators($){let Z=$,Q=this.readResultLocatorCache.get(Z);if(Q===void 0)Q=this.extractReadLocatorsFromToolResultContent($.content),this.readResultLocatorCache.set(Z,Q);if(Q.length>0)return Q;return this.readLocatorsByToolUseIdCache.get($.tool_use_id)??[]}extractLocatorsFromReadToolInput($){if(!$||typeof $!=="object")return[];let Z=$,Q=[],W=this.extractLocatorFromReadRequest(Z);if(W)Q.push(W);if(Array.isArray(Z.files))for(let J of Z.files){let X=this.extractLocatorFromReadRequest(J);if(X)Q.push(X)}if(Array.isArray(Z.file_paths)){for(let J of Z.file_paths)if(typeof J==="string"&&J.length>0)Q.push({path:J,startLine:null,endLine:null})}return this.dedupeReadLocators(Q)}extractReadLocatorsFromToolResultContent($){if(typeof $==="string")return this.tryParseReadLocators($);let Z=[];for(let Q of $){if(Q.type==="text"){Z.push(...this.tryParseReadLocators(Q.text));continue}if(_$(Q)){let W=this.extractLocatorFromResultEntry(Q);if(W)Z.push(W)}}return this.dedupeReadLocators(Z)}tryParseReadLocators($){try{return this.extractLocatorsFromParsedReadResult(JSON.parse($))}catch{return[]}}extractLocatorsFromParsedReadResult($){if(Array.isArray($)){let Q=[];for(let W of $){let J=this.extractLocatorFromResultEntry(W);if(J)Q.push(J)}return this.dedupeReadLocators(Q)}let Z=this.extractLocatorFromResultEntry($);return Z?[Z]:[]}extractLocatorFromReadRequest($){if(!$||typeof $!=="object")return;let Z=$,Q=this.extractPath(Z);if(!Q)return;return{path:Q,startLine:this.extractLineNumber(Z.start_line),endLine:this.extractLineNumber(Z.end_line)}}extractLocatorFromResultEntry($){if(!$||typeof $!=="object")return;let Z=$,Q=this.extractPath(Z);if(Q)return{path:Q,startLine:this.extractLineNumber(Z.start_line),endLine:this.extractLineNumber(Z.end_line)};if(typeof Z.query==="string"&&Z.query.length>0)return this.parseReadQuery(Z.query);return}extractPath($){let Z=[$.path,$.file_path,$.filePath];for(let Q of Z)if(typeof Q==="string"&&Q.length>0)return Q;return}extractLineNumber($){return typeof $==="number"&&Number.isInteger($)?$:null}parseReadQuery($){let Z=/^(.*):(\d+)-(EOF|\d+)$/.exec($);if(!Z)return{path:$,startLine:null,endLine:null};return{path:Z[1],startLine:Number(Z[2]),endLine:Z[3]==="EOF"?null:Number(Z[3])}}dedupeReadLocators($){let Z=new Map;for(let Q of $)Z.set(this.toReadLocatorKey(Q),Q);return Array.from(Z.values())}toReadLocatorKey($){if(this.isFullFileRead($))return $.path;return`${$.path}:${$.startLine??1}-${$.endLine??"EOF"}`}isFullFileRead($){return $.startLine==null&&$.endLine==null}isOutdatedReadLocator($,Z){let Q=this.latestFullContentOwnerByPathCache.get($.path);if(Q&&Q!==Z)return!0;return this.latestReadToolUseByLocatorCache.get(this.toReadLocatorKey($))!==Z}replaceOutdatedReadContent($,Z){let Q=new Set(Z.map((X)=>this.toReadLocatorKey(X))),W=new Set(Z.map((X)=>X.path));if(typeof $==="string")return this.replaceOutdatedInString($,Q)??G2;let J=0;for(let X of $)if(X.type==="text")J+=this.countOutdatedImageEntries(X.text,Q);return $.map((X)=>{if(X.type==="file"){if(!W.has(X.path))return X;return{...X,content:G2}}if(X.type==="image"){if(J===0)return X;return J-=1,{type:"text",text:G2}}if(_$(X))return this.replaceOutdatedReadEntry(X,Q);if(X.type!=="text")return X;let Y=this.replaceOutdatedInString(X.text,Q);if(Y===null)return{...X,text:G2};return Y===X.text?X:{...X,text:Y}})}countOutdatedImageEntries($,Z){let Q;try{Q=JSON.parse($)}catch{return 0}let W=Array.isArray(Q)?Q:[Q],J=0;for(let X of W){if(!X||typeof X!=="object")continue;let Y=X,j=this.extractLocatorFromResultEntry(Y);if(!j)continue;if(!Z.has(this.toReadLocatorKey(j)))continue;if(Y.result==="Successfully read image"||Y.content==="Successfully read image")J+=1}return J}replaceOutdatedInString($,Z){let Q;try{Q=JSON.parse($)}catch{return null}let W=Array.isArray(Q)?Q.map((J)=>this.replaceOutdatedReadEntry(J,Z)):this.replaceOutdatedReadEntry(Q,Z);return JSON.stringify(W)}replaceOutdatedReadEntry($,Z){if(!$||typeof $!=="object")return $;let Q=this.extractLocatorFromResultEntry($);if(!Q||!Z.has(this.toReadLocatorKey(Q)))return $;let W={...$};if(typeof W.result==="string")W.result=G2;else if(typeof W.content==="string")W.content=G2;else W.result=G2;return W}isReadTool($){return!!$&&Rq.has($)}resolveToolName($){let Z=this.toolNameByIdCache.get($.tool_use_id);if(Z!==void 0)return Z;return typeof $.name==="string"&&$.name.length>0?$.name.toLowerCase():void 0}truncateToolResultContent($){if(typeof $==="string")return this.truncateMiddle($);return $.map((Z)=>{if(Z.type==="file"){let Q=this.truncateMiddle(Z.content);return Q===Z.content?Z:{...Z,content:Q}}if(Z.type==="text"){let Q=this.truncateMiddle(Z.text);return Q===Z.text?Z:{...Z,text:Q}}if(_$(Z))return this.truncateNestedStrings(Z);return Z})}truncateNestedStrings($){if(typeof $==="string")return this.truncateMiddle($);if(Array.isArray($)){let Z=!1,Q=$.map((W)=>{let J=this.truncateNestedStrings(W);if(J!==W)Z=!0;return J});return Z?Q:$}if($!==null&&typeof $==="object"){if(z3($))return $;let Z=!1,Q={};for(let[W,J]of Object.entries($)){let X=this.truncateNestedStrings(J);if(X!==J)Z=!0;Q[W]=X}return Z?Q:$}return $}truncateMiddle($){return E8($,this.maxToolResultChars,GB)}truncateAssistantText($){if(this.hasRepeatedToolCallMarkup($))return E8($,this.maxAssistantToolMarkupChars,Nq);return E8($,this.maxAssistantTextChars,Eq)}hasRepeatedToolCallMarkup($){if($.length<=this.maxAssistantToolMarkupChars)return!1;let Z=0;for(let Q of $.matchAll(wq))if(Z+=1,Z>=Mq)return!0;return!1}truncateToTotalTextBudget($){let Z=this.countMessageTextBytes($);if(Z<=this.maxTotalTextBytes)return $;let Q=$.map((J)=>{if(!Array.isArray(J.content))return{...J};return{...J,content:J.content.map((X)=>bq(X))}}),W=this.collectTruncationCandidates(Q);for(let J of W){if(Z<=this.maxTotalTextBytes)break;let X=J.byteLength;if(X<=J.minBytes)continue;let Y=Z-this.maxTotalTextBytes,j=Math.max(J.minBytes,X-Y),V=Sq(J.get(),j,J.makeMarker);J.set(V),Z-=X-W0(V)}return Q}countMessageTextBytes($){let Z=0;for(let Q of $){if(typeof Q.content==="string"){Z+=W0(Q.content);continue}for(let W of Q.content)if(W.type==="text")Z+=W0(W.text);else if(W.type==="thinking")Z+=W0(W.thinking);else if(W.type==="file")Z+=W0(W.content);else if(W.type==="tool_use")Z+=NZ(W.input);else if(W.type==="tool_result"){if(typeof W.content==="string")Z+=W0(W.content);else for(let J of W.content)if(J.type==="text")Z+=W0(J.text);else if(J.type==="file")Z+=W0(J.content);else if(_$(J))Z+=NZ(J)}}return Z}collectTruncationCandidates($){let Z=[],Q=[];for(let W of $){if(W.role==="assistant"&&typeof W.content==="string"){Z.push({byteLength:W0(W.content),minBytes:HB,makeMarker:KB,get:()=>W.content,set:(J)=>{W.content=J}});continue}if(!Array.isArray(W.content))continue;for(let J of W.content){if(J.type==="tool_use"){wZ(J.input,Q);continue}if(W.role==="assistant"&&J.type==="text"){Z.push({byteLength:W0(J.text),minBytes:HB,makeMarker:KB,get:()=>J.text,set:(X)=>{J.text=X}});continue}if(J.type!=="tool_result")continue;if(typeof J.content==="string"){Z.push({byteLength:W0(J.content),minBytes:b6,makeMarker:y6,get:()=>J.content,set:(X)=>{J.content=X}});continue}for(let X of J.content)if(X.type==="text")Z.push({byteLength:W0(X.text),minBytes:b6,makeMarker:y6,get:()=>X.text,set:(Y)=>{X.text=Y}});else if(X.type==="file")Z.push({byteLength:W0(X.content),minBytes:b6,makeMarker:y6,get:()=>X.content,set:(Y)=>{X.content=Y}});else if(_$(X))wZ(X,Z)}}return Z.sort((W,J)=>J.byteLength-W.byteLength),Q.sort((W,J)=>J.byteLength-W.byteLength),[...Z,...Q]}applyMediaBudget($){let Z=this.resolveMediaBudget();if(Z.maxImageEncodedBytes===Number.POSITIVE_INFINITY&&Z.maxImageDecodedBytes===Number.POSITIVE_INFINITY&&Z.maxTotalMediaBytes===Number.POSITIVE_INFINITY)return $;let Q=fq(),W=!1,J=$.map((X)=>{if(!Array.isArray(X.content))return X;let Y=!1,j=X.content.map((V)=>{let H=this.applyMediaBudgetToBlock(V,Z,Q);if(H!==V)Y=!0;return H});if(!Y)return X;return W=!0,{...X,content:j}});return W?J:$}resolveMediaBudget(){return Uq(this.mediaBudget)}applyMediaBudgetToBlock($,Z,Q){if(L3($))return this.limitImageContent($,Z,Q);if($.type!=="tool_result"||typeof $.content==="string")return $;let W=!1,J=$.content.map((X)=>{let Y=this.applyMediaBudgetToToolResultEntry(X,Z,Q);if(Y!==X)W=!0;return Y});return W?{...$,content:J}:$}applyMediaBudgetToToolResultEntry($,Z,Q){if(L3($))return this.limitImageContent($,Z,Q);if(_$($))return this.limitNestedMedia($,Z,Q);return $}limitNestedMedia($,Z,Q){if(L3($)){let W=this.limitImageContent($,Z,Q);return W.type==="text"?W.text:W}if(Array.isArray($)){let W=!1,J=$.map((X)=>{let Y=this.limitNestedMedia(X,Z,Q);if(Y!==X)W=!0;return Y});return W?J:$}if($!==null&&typeof $==="object"){let W=!1,J={};for(let[X,Y]of Object.entries($)){let j=this.limitNestedMedia(Y,Z,Q);if(j!==Y)W=!0;J[X]=j}return W?J:$}return $}limitImageContent($,Z,Q){if(!UB($))return{type:"text",text:jB};let W=Dq($.mediaType,$.data,{maxImageEncodedBytes:Z.maxImageEncodedBytes,maxImageDecodedBytes:Z.maxImageDecodedBytes,maxTotalMediaBytes:Z.maxTotalMediaBytes},Q);if(!W.ok)return{type:"text",text:jB};return{...$,data:W.base64,mediaType:W.mediaType}}}var FB=String.raw`[\|\uFF5C]`,wq=new RegExp(String.raw`<\s*(?:${FB}\s*)?DSML\s*(?:${FB}\s*)?(?:tool_calls|invoke)\b[^>]*>|<\s*/?\s*(?:tool_calls?|tool_call|function_calls?|function_call|invoke)\b[^>]*>`,"gi");function W0($){return Buffer.byteLength($,"utf8")}function AB($){if($===void 0)return;let Z=Number.parseInt($,10);return Number.isFinite(Z)&&Z>0?Z:void 0}function Cq($){if($===void 0)return;let Z=$.trim().toLowerCase();if(Z==="infinity"||Z==="disable")return Number.POSITIVE_INFINITY;let Q=Number.parseInt($,10);return Number.isFinite(Q)&&Q>=0?Q:void 0}function S6($,Z){return typeof $==="number"&&Number.isFinite($)&&$>0?Math.floor($):Z}function Pq($,Z){if(typeof $!=="number"||Number.isNaN($)||$<0)return Z;return Number.isFinite($)?Math.floor($):$}function E8($,Z,Q){if($.length<=Z)return $;let W=Q($.length-Z),J=Math.max(0,Math.floor((Z-W.length)/2)),X=Math.max(0,$.length-J*2),Y=Q(X),j=Math.max(0,Math.floor((Z-Y.length)/2)),V=$.slice(0,j),H=j>0?$.slice(-j):"";return`${V}${Y}${H}`}function Sq($,Z,Q){if(W0($)<=Z)return $;let W=0,J=$.length,X=E8($,0,Q);while(W<=J){let Y=W+J>>>1,j=E8($,Y,Q);if(W0(j)<=Z)X=j,W=Y+1;else J=Y-1}return X}function bq($){if($.type==="tool_use")return{...$,input:CZ($.input)};if($.type!=="tool_result"||typeof $.content==="string")return{...$};return{...$,content:$.content.map((Z)=>_$(Z)?CZ(Z):{...Z})}}function _$($){if($===null||typeof $!=="object")return!1;let Z=$.type;return Z!=="text"&&Z!=="image"&&Z!=="file"}function L3($){return $!==null&&typeof $==="object"&&$.type==="image"}function UB($){return $!==null&&typeof $==="object"&&$.type==="image"&&typeof $.data==="string"&&typeof $.mediaType==="string"}function z3($){return UB($)}function NZ($){if(typeof $==="string")return W0($);if(Array.isArray($)){let Z=0;for(let Q of $)Z+=NZ(Q);return Z}if($!==null&&typeof $==="object"){if(z3($))return 0;let Z=0;for(let Q of Object.values($))Z+=NZ(Q);return Z}return 0}function wZ($,Z){if(Array.isArray($)){$.forEach((Q,W)=>{if(typeof Q==="string")Z.push({byteLength:W0(Q),minBytes:b6,makeMarker:y6,get:()=>$[W],set:(J)=>{$[W]=J}});else wZ(Q,Z)});return}if($!==null&&typeof $==="object"){if(z3($))return;let Q=$;for(let W of Object.keys(Q)){let J=Q[W];if(typeof J==="string")Z.push({byteLength:W0(J),minBytes:b6,makeMarker:y6,get:()=>Q[W],set:(X)=>{Q[W]=X}});else wZ(J,Z)}}}function CZ($){if(Array.isArray($))return $.map(CZ);if($!==null&&typeof $==="object"){let Z={};for(let[Q,W]of Object.entries($))Z[Q]=CZ(W);return Z}return $}function T3(){return`conv_${Date.now()}_${Math.random().toString(36).slice(2,9)}`}class O3{messages=[];conversationId=T3();sessionStarted=!1;constructor($){if(($?.length??0)>0)this.restore($??[])}getConversationId(){return this.conversationId}getMessages(){return[...this.messages]}appendMessage($){this.messages.push($)}appendMessages($){if($.length===0)return;this.messages.push(...$)}replaceMessages($){this.messages=[...$]}resetForRun(){this.messages=[],this.conversationId=T3(),this.sessionStarted=!1}clearHistory(){this.messages=[],this.conversationId=T3(),this.sessionStarted=!1}restore($){this.messages=[...$],this.sessionStarted=!1}isSessionStarted(){return this.sessionStarted}markSessionStarted(){this.sessionStarted=!0}}function DB($){let{agentConfig:Z}=$,Q=yq(Z),W=hq(Z),J=$.hooks,X=kq(Z.maxParallelToolCalls);return{sessionId:$.sessionId??Z.sessionId,agentId:$.agentId,conversationId:$.conversationId,parentAgentId:$.parentAgentId,agentRole:$.agentRole,systemPrompt:$.systemPrompt??Z.systemPrompt,messageModelInfo:W,model:$.model,modelOptions:Q,tools:$.tools,hooks:J,prepareTurn:$.prepareTurn,consumePendingUserMessage:Z.consumePendingUserMessage,plugins:$.plugins,logger:$.logger??Z.logger,telemetry:$.telemetry??Z.telemetry,initialMessages:$.initialMessages,completionPolicy:Z.completionPolicy,maxIterations:Z.maxIterations,toolExecution:X,toolPolicies:Z.toolPolicies,toolContextMetadata:$.toolContextMetadata,requestToolApproval:Z.requestToolApproval}}function yq($){let Z={};if($.thinking!==void 0)Z.thinking=$.thinking;if($.reasoningEffort!==void 0)Z.reasoningEffort=$.reasoningEffort;if($.thinkingBudgetTokens!==void 0)Z.thinkingBudgetTokens=$.thinkingBudgetTokens;if($.maxTokensPerTurn!==void 0)Z.maxTokensPerTurn=$.maxTokensPerTurn;if($.apiTimeoutMs!==void 0)Z.apiTimeoutMs=$.apiTimeoutMs;return Object.keys(Z).length>0?Z:void 0}function hq($){let Z=$.providerConfig?.family;return{id:$.modelId,provider:$.providerId,family:Z}}function kq($){if($===void 0)return;return $>=2?"parallel":"sequential"}function Iq(){return{lastToolName:"",lastToolSignature:"",consecutiveIdenticalCount:0}}function xq($){$.lastToolName="",$.lastToolSignature="",$.consecutiveIdenticalCount=0}function q3($){if($==null||typeof $!=="object")return $;if(Array.isArray($))return $.map(q3);let Z={};for(let Q of Object.keys($).sort())Z[Q]=q3($[Q]);return Z}function gq($){if($==null)return"null";if(typeof $==="string")return $;if(typeof $!=="object")return String($);try{return JSON.stringify(q3($))}catch{return String($)}}function mq($,Z,Q,W){if(Z===$.lastToolName&&Q===$.lastToolSignature)$.consecutiveIdenticalCount++;else $.consecutiveIdenticalCount=1;return $.lastToolName=Z,$.lastToolSignature=Q,{softWarning:$.consecutiveIdenticalCount===W.softThreshold,hardEscalation:$.consecutiveIdenticalCount>=W.hardThreshold}}var LB={softThreshold:3,hardThreshold:5};class M3{config;state=Iq();constructor($){this.config={softThreshold:$?.softThreshold??LB.softThreshold,hardThreshold:$?.hardThreshold??LB.hardThreshold}}inspect($){let Z=gq($.input),Q=mq(this.state,$.name,Z,this.config);if(Q.hardEscalation)return{kind:"hard",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${$.name}\`; stopping to avoid a loop.`};if(Q.softWarning)return{kind:"soft",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${$.name}\`; consider trying a different approach.`};return{kind:"ok"}}reset(){xq(this.state)}}class R3{consecutiveMistakes=0;options;constructor($){this.options=$}async record($){let Z=this.options.maxConsecutiveMistakes,Q=$.forceAtLimit&&Z?Z:this.consecutiveMistakes+1;this.consecutiveMistakes=Q;let W=$.details?.trim()||`consecutive mistake (${$.reason})`;if(this.options.emit({type:"error",error:Error(W),recoverable:!0,iteration:$.iteration}),this.options.log("warn","Recorded consecutive mistake",{agentId:this.options.agentId,conversationId:this.options.getConversationId(),runId:this.options.getActiveRunId(),iteration:$.iteration,reason:$.reason,details:$.details,consecutiveMistakes:Q,maxConsecutiveMistakes:this.options.maxConsecutiveMistakes}),!Z||Q<Z)return{action:"continue"};let J=await cq({iteration:$.iteration,consecutiveMistakes:Q,maxConsecutiveMistakes:Z,reason:$.reason,details:$.details},this.options.onLimitReached);if(J.action==="continue"){let X=J.guidance?.trim();if(X)this.options.appendRecoveryNotice(X,$.reason);return this.consecutiveMistakes=0,{action:"continue",guidance:X}}return{action:"stop",reason:J.reason?.trim()||void 0,message:vq({iteration:$.iteration,consecutiveMistakes:Q,maxConsecutiveMistakes:Z,reason:$.reason,details:$.details,stopReason:J.reason})}}reset(){this.consecutiveMistakes=0}get value(){return this.consecutiveMistakes}}function vq($){let Z=[`Stopped after ${$.consecutiveMistakes}/${$.maxConsecutiveMistakes} consecutive mistakes (${$.reason}) at iteration ${$.iteration}.`],Q=$.details?.trim();if(Q)Z.push(`Error: ${Q}`);let W=$.stopReason?.trim();if(W)Z.push(`Decision: ${W}`);return Z.push("Session state was preserved. Send a new prompt to resume from the latest state."),Z.join(" ")}async function cq($,Z){if(!Z)return{action:"stop",reason:`maximum consecutive mistakes reached (${$.maxConsecutiveMistakes})`};try{return await Z($)}catch(Q){return{action:"stop",reason:Q instanceof Error?Q.message:`maximum consecutive mistakes reached (${$.maxConsecutiveMistakes})`}}}function uq($){let Z=$.content.filter((Q)=>Q.type==="text");if(Z.length===0)return;return Z.map((Q)=>Q.text).join("")}function dq($){let Z=$.content.filter((Q)=>Q.type==="reasoning");if(Z.length===0)return;return{reasoning:Z.map((Q)=>Q.text).join(""),redacted:Z.some((Q)=>Q.redacted===!0)}}function lq($){return $.content.find((Z)=>Z.type==="tool-result")}function pq($){switch($){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}function rq($){if(!$||$.isError!==!0)return;if(typeof $.output==="string")return $.output;if($.output instanceof Error)return $.output.message;try{return JSON.stringify($.output)}catch{return String($.output)}}class E3{lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0};toolStartedAt=new Map;translate($){switch($.type){case"run-started":return[];case"message-added":return[];case"turn-started":return[{type:"iteration_start",iteration:$.iteration}];case"turn-finished":return[{type:"iteration_end",iteration:$.iteration,hadToolCalls:$.toolCallCount>0,toolCallCount:$.toolCallCount}];case"assistant-text-delta":return[{type:"content_start",contentType:"text",text:$.text,accumulated:$.accumulatedText}];case"assistant-reasoning-delta":return[{type:"content_start",contentType:"reasoning",reasoning:$.text,redacted:$.redacted===!0}];case"assistant-message":return this.translateAssistantMessage($.message);case"tool-started":return this.translateToolStarted($);case"tool-updated":return[{type:"content_update",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,update:$.update}];case"tool-finished":return this.translateToolFinished($);case"usage-updated":return this.translateUsage($.usage);case"status-notice":return[{type:"notice",noticeType:"status",displayRole:"status",message:$.message,reason:$.metadata?.reason==="auto_compaction"?"auto_compaction":void 0,metadata:$.metadata}];case"run-finished":return this.translateRunFinished($.result);case"run-failed":return[{type:"error",error:$.error,recoverable:!1,iteration:$.snapshot.iteration}];default:return $}}reset(){this.lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0},this.toolStartedAt.clear()}translateAssistantMessage($){let Z=[],Q=uq($);if(Q!==void 0)Z.push({type:"content_end",contentType:"text",text:Q});let W=dq($);if(W!==void 0)Z.push({type:"content_end",contentType:"reasoning",reasoning:W.reasoning});return Z}translateToolStarted($){return this.toolStartedAt.set($.toolCall.toolCallId,Date.now()),[{type:"content_start",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,input:$.toolCall.input}]}translateToolFinished($){let Z=this.toolStartedAt.get($.toolCall.toolCallId),Q=Z===void 0?void 0:Date.now()-Z;this.toolStartedAt.delete($.toolCall.toolCallId);let W=lq($.message),J=W?.output,X=rq(W);return[{type:"content_end",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,output:J,error:X,durationMs:Q}]}translateUsage($){let Z=$.inputTokens-this.lastUsage.inputTokens,Q=$.outputTokens-this.lastUsage.outputTokens,W=$.cacheReadTokens-this.lastUsage.cacheReadTokens,J=$.cacheWriteTokens-this.lastUsage.cacheWriteTokens,X=this.lastUsage.totalCost??0,j=($.totalCost??0)-X;return this.lastUsage={inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,totalCost:$.totalCost},[{type:"usage",inputTokens:Math.max(0,Z),outputTokens:Math.max(0,Q),cacheReadTokens:W===0?void 0:Math.max(0,W),cacheWriteTokens:J===0?void 0:Math.max(0,J),cost:j===0?void 0:j,totalInputTokens:$.inputTokens,totalOutputTokens:$.outputTokens,totalCacheReadTokens:$.cacheReadTokens===0?void 0:$.cacheReadTokens,totalCacheWriteTokens:$.cacheWriteTokens===0?void 0:$.cacheWriteTokens,totalCost:$.totalCost}]}translateRunFinished($){let Z={inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens===0?void 0:$.usage.cacheReadTokens,cacheWriteTokens:$.usage.cacheWriteTokens===0?void 0:$.usage.cacheWriteTokens,totalCost:$.usage.totalCost};return[{type:"done",reason:pq($.status),text:$.outputText,iterations:$.iterations,usage:Z}]}}function $M($){if(typeof $==="string")return $;if($ instanceof Error)return $.message;try{return JSON.stringify($)}catch{return String($)}}async function ZM($){let Q=(typeof $.content==="function"?await $.content():$.content).trim();return Q.length>0?Q:void 0}function QM($,Z){let Q=$.trim(),W=Z.map((J)=>J.trim()).filter(Boolean).join(`
467
467
 
468
468
  `);if(Q&&W)return`${Q}
469
469
 
470
- ${W}`;return Q||W}function eq($,Z){let Q=Z?.["*"]??{},W=Z?.[$]??{};return{...Q,...W}.enabled!==!1}function $M($,Z){return $.filter((Q)=>eq(Q.name,Z))}function ZM($,Z){return y1($M($,Z))}function QM($){let Z=$.filter((Q)=>Q!==void 0);if(Z.length===0)return{};return{beforeRun:async(Q)=>{for(let W of Z){let J=await W.beforeRun?.(Q);if(J?.stop)return J}return},afterRun:async(Q)=>{for(let W of Z)await W.afterRun?.(Q)},beforeModel:async(Q)=>{let W=Q.request,J;for(let X of Z){let Y=await X.beforeModel?.({...Q,request:W});if(!Y)continue;if(Y.stop)return Y;J={...J,...Y,options:LB(J?.options,Y.options)},W={...W,...Y.messages?{messages:Y.messages}:{},...Y.tools?{tools:Y.tools}:{},...Y.options?{options:LB(W.options,Y.options)}:{}}}return J},afterModel:async(Q)=>{for(let W of Z){let J=await W.afterModel?.(Q);if(J?.stop)return J}return},beforeTool:async(Q)=>{let W=Q.input,J;for(let X of Z){let Y=await X.beforeTool?.({...Q,input:W});if(!Y)continue;if(Y.stop||Y.skip)return Y;if(J={...J,...Y},Object.hasOwn(Y,"input"))W=Y.input}return J},afterTool:async(Q)=>{let W=Q.result,J;for(let X of Z){let Y=await X.afterTool?.({...Q,result:W});if(!Y)continue;if(Y.stop)return Y;if(J={...J,...Y},Y.result)W=Y.result}return J},onEvent:async(Q)=>{for(let W of Z)await W.onEvent?.(Q)}}}class z${config;agentId;parentAgentId;logger;telemetry;conversation;mistakeTracker;loopTracker;loopDetectionDisabled;messageBuilder;contributionRegistry;extensionsInitialized=!1;listeners=new Set;createAgentRuntimeImpl;activeRunId=null;running=!1;abortRequested=!1;abortReason;activeRuntime=null;activeRunPromise=null;eventAdapter=new E3;shutdownCalled=!1;currentRunToolCalls=[];currentRunUsage={inputTokens:0,outputTokens:0};toolStartedAt=new Map;toolInputs=new Map;currentTurnSuccessfulTools=0;currentTurnFailedTools=0;currentTurnFailureDetails=[];activeTrackerWork=Promise.resolve();trackerAbortInFlight=!1;constructor($,Z={}){this.config=$,this.agentId=`agent_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,this.parentAgentId=$.parentAgentId,this.logger=Z.logger??$.logger,this.telemetry=Z.telemetry??$.telemetry,this.createAgentRuntimeImpl=Z.createAgentRuntimeImpl??nq,this.conversation=new O3($.initialMessages),this.messageBuilder=new _3(FB()),this.contributionRegistry=aq({extensions:$.extensions?[...$.extensions]:[],setupContext:{session:$.extensionContext?.session,client:$.extensionContext?.client,user:$.extensionContext?.user,workspaceInfo:$.extensionContext?.workspace,automation:$.extensionContext?.automation,logger:$.extensionContext?.logger??this.logger,telemetry:$.extensionContext?.telemetry??this.telemetry}}),this.contributionRegistry.resolve(),this.contributionRegistry.validate();let Q=$.execution?.maxConsecutiveMistakes??6;this.mistakeTracker=new R3({maxConsecutiveMistakes:Q,onLimitReached:$.onConsecutiveMistakeLimitReached,emit:(X)=>this.emitLegacyEvent(X),log:(X,Y,j)=>WM(this.logger,X,Y,j),agentId:this.agentId,getConversationId:()=>this.conversation.getConversationId(),getActiveRunId:()=>this.activeRunId??"",appendRecoveryNotice:(X,Y)=>{this.conversation.appendMessage({role:"user",content:[{type:"text",text:X}]})}});let W=$.execution?.loopDetection;this.loopDetectionDisabled=W===!1;let J=W===!1||W===void 0?void 0:W;this.loopTracker=new M3(J)}getAgentId(){return this.agentId}getConversationId(){return this.conversation.getConversationId()}getMessages(){return this.conversation.getMessages()}canStartRun(){return!this.running&&!this.shutdownCalled}getExtensionRegistry(){return this.contributionRegistry.getRegistrySnapshot()}addTools($){if($.length===0)return;let Z=new Set(this.config.tools.map((W)=>W.name)),Q=[...this.config.tools];for(let W of $)if(!Z.has(W.name))Q.push(W),Z.add(W.name);this.config={...this.config,tools:Q}}updateConnection($){let Z={...this.config};if($.providerId!==void 0)Z.providerId=$.providerId;if($.modelId!==void 0)Z.modelId=$.modelId;if($.apiKey!==void 0)Z.apiKey=$.apiKey;if($.baseUrl!==void 0)Z.baseUrl=$.baseUrl;if($.headers!==void 0)Z.headers=$.headers;if($.providerConfig!==void 0)Z.providerConfig=$.providerConfig;if($.reasoningEffort!==void 0)Z.reasoningEffort=$.reasoningEffort;if($.thinking!==void 0)Z.thinking=$.thinking;if($.thinkingBudgetTokens!==void 0)Z.thinkingBudgetTokens=$.thinkingBudgetTokens;this.config=Z}clearHistory(){this.conversation.clearHistory(),this.resetConversationBoundaryTrackers()}restore($){this.conversation.restore($),this.resetConversationBoundaryTrackers()}resetConversationBoundaryTrackers(){this.messageBuilder.resetConversationState(),this.mistakeTracker.reset(),this.loopTracker.reset()}subscribeEvents($){return this.listeners.add($),()=>{this.listeners.delete($)}}abort($){let Z=typeof $==="string"?$:$ instanceof Error?$.message:$===void 0?void 0:String($);if(this.abortRequested=!0,this.abortReason=Z,this.activeRunPromise)this.activeRunPromise.catch(()=>{});this.activeRuntime?.abort(Z)}async shutdown($,Z){if(this.running){if(!this.abortRequested||!this.activeRunPromise)throw Error(`SessionRuntime.shutdown called while a run is in progress (agentId=${this.agentId})`);await this.activeRunPromise}if(this.shutdownCalled)return;this.shutdownCalled=!0}run($,Z,Q){return this.conversation.resetForRun(),this.resetConversationBoundaryTrackers(),this.executeRun({userMessage:$,userImages:Z,userFiles:Q,isContinue:!1})}continue($,Z,Q){return this.executeRun({userMessage:$,userImages:Z,userFiles:Q,isContinue:!0})}async composeSystemPrompt(){let $=[];for(let Z of this.contributionRegistry.getRegisteredRules()){let Q=await oq(Z);if(Q)$.push(Q)}return tq(this.config.systemPrompt,$)}executeRun($){let Z;return Z=this.executeRunInternal($).finally(()=>{if(this.activeRunPromise===Z)this.activeRunPromise=null}),this.activeRunPromise=Z,Z}async executeRunInternal($){if(this.shutdownCalled)throw Error(`SessionRuntime.run called after shutdown (agentId=${this.agentId})`);if(this.running)throw Error(`SessionRuntime state is "running"; call canStartRun() first (agentId=${this.agentId})`);this.running=!0,this.abortRequested=!1,this.abortReason=void 0,this.activeRunId=`run_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,await this.ensureExtensionsInitialized(),this.eventAdapter.reset(),this.currentRunToolCalls=[],this.currentRunUsage={inputTokens:0,outputTokens:0},this.toolStartedAt.clear(),this.toolInputs.clear(),this.currentTurnSuccessfulTools=0,this.currentTurnFailedTools=0,this.currentTurnFailureDetails=[],this.activeTrackerWork=Promise.resolve(),this.trackerAbortInFlight=!1;let Z=new Date,Q=$.userMessage;if(Q!==void 0){let U=await XM(Q,$.userImages,$.userFiles,this.config.userFileContentLoader);this.conversation.appendMessage({role:"user",content:U})}let W=await this.composeSystemPrompt(),J=JB(this.config,this.logger,this.telemetry),X=new Map;for(let U of this.contributionRegistry.getRegisteredTools())X.set(U.name,U);let Y=ZM([...X.values()],this.config.toolPolicies),j=new Map;for(let U of Y)j.set(U.name,U);for(let U of this.config.tools)j.set(U.name,U);let V=this.conversation.getConversationId(),H=_B(this.config),B=Array.from(j.values()),G=MZ(this.conversation.getMessages()),K=fB({agentConfig:this.config,sessionId:this.config.sessionId,agentId:this.agentId,conversationId:V,parentAgentId:this.parentAgentId,model:J,logger:this.logger,telemetry:this.telemetry,tools:B,toolContextMetadata:{modelSupportsImages:H?.capabilities?.includes("images")??!0,...this.config.toolContextMetadata,[OH]:this.telemetry},hooks:this.createRuntimeHooks(),prepareTurn:this.createRuntimePrepareTurn(H,B),initialMessages:G,systemPrompt:W}),F=this.createAgentRuntimeImpl(K);if(this.activeRuntime=F,this.abortRequested)F.abort(this.abortReason);let A=F.subscribe((U)=>{this.handleRuntimeEvent(U)}),L,f;try{if($.isContinue)L=await F.continue(void 0);else L=await F.run("")}catch(U){f=U instanceof Error?U:Error(String(U))}finally{A();try{await this.activeTrackerWork}catch(U){this.logger?.error?.("SessionRuntime tracker work failed during drain",{agentId:this.agentId,error:U})}this.activeRuntime=null,this.running=!1,this.abortRequested=!1,this.abortReason=void 0}if(L&&L.messages.length>0){let U=R8(L.messages);this.conversation.replaceMessages(U)}let D=new Date;try{return this.buildLegacyResult({runResult:L,thrownError:f,startedAt:Z,endedAt:D})}finally{this.activeRunId=null}}async ensureExtensionsInitialized(){if(this.extensionsInitialized)return;try{await this.contributionRegistry.initialize({tolerateSetupErrors:this.config.hookErrorMode!=="throw"})}catch($){if(this.config.hookErrorMode==="throw")throw $;this.emitLegacyEvent({type:"error",error:$ instanceof Error?$:Error(String($)),recoverable:!0,iteration:0})}this.extensionsInitialized=!0}createRuntimeHooks(){let $=QM([this.config.hooks,...this.contributionRegistry.getValidatedExtensions().map((Z)=>Z.hooks)]);return{...$,beforeModel:async(Z)=>{let Q=await $.beforeModel?.(Z);if(Q?.stop)return Q;let W=Q?.messages??Z.request.messages,J=await this.prepareMessagesForModelRequest(W);return{...Q,messages:J}}}}createRuntimePrepareTurn($,Z){let Q=this.config.prepareTurn;if(!Q)return;return async(W)=>{let J=R8(W.messages),X=await this.prepareProviderMessagesForApi(J),Y=await Q({agentId:W.agentId,conversationId:W.conversationId??this.conversation.getConversationId(),parentAgentId:W.parentAgentId??null,iteration:W.iteration,messages:J,apiMessages:X,abortSignal:W.signal??new AbortController().signal,systemPrompt:W.systemPrompt??"",tools:Z,model:{id:this.config.modelId,provider:this.config.providerId,info:$},emitStatusNotice:W.emitStatusNotice});if(!Y)return;return{...Y.messages?{messages:MZ(Y.messages)}:{},...Y.systemPrompt!==void 0?{systemPrompt:Y.systemPrompt}:{}}}}async prepareMessagesForModelRequest($){let Z=await this.prepareProviderMessagesForApi(RZ($));return MZ(Z)}async prepareProviderMessagesForApi($){let Z=$,Q=this.contributionRegistry.getRegistrySnapshot().messageBuilder;for(let W of Q)Z=await W.build(Z);return this.messageBuilder.buildForApi(Z)}handleRuntimeEvent($){switch($.type){case"message-added":case"assistant-message":{this.syncConversationFromRuntimeMessage($.snapshot.messages,[$.message]);break}case"turn-started":{this.currentTurnSuccessfulTools=0,this.currentTurnFailedTools=0,this.currentTurnFailureDetails=[];break}case"tool-started":{this.toolStartedAt.set($.toolCall.toolCallId,new Date),this.toolInputs.set($.toolCall.toolCallId,$.toolCall.input),this.inspectLoopForToolCall($.toolCall.toolName,$.toolCall.input,$.iteration);break}case"tool-finished":{let Z=this.toolStartedAt.get($.toolCall.toolCallId),Q=new Date,W=this.toolInputs.get($.toolCall.toolCallId);this.toolStartedAt.delete($.toolCall.toolCallId),this.toolInputs.delete($.toolCall.toolCallId);let J=$.message.content.find((V)=>V.type==="tool-result"),X=J?.type==="tool-result"&&J.isError===!0,Y=X?sq(J?.type==="tool-result"?J.output:void 0):void 0,j={id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:W,output:J?.type==="tool-result"?J.output:void 0,error:Y,durationMs:Z===void 0?0:Q.getTime()-Z.getTime(),startedAt:Z??Q,endedAt:Q};if(this.currentRunToolCalls.push(j),X){if(this.currentTurnFailedTools+=1,Y)this.currentTurnFailureDetails.push(`[${$.toolCall.toolName}] ${Y}`)}else this.currentTurnSuccessfulTools+=1;break}case"turn-finished":{let Z=this.currentTurnFailedTools,Q=this.currentTurnSuccessfulTools;if(Z>0&&Q===0){let W=this.currentTurnFailureDetails.join("; ");this.enqueueMistakeRecord({iteration:$.iteration,reason:"tool_execution_failed",details:`${Z} tool call(s) failed${W?`: ${W}`:""}`})}else if(Q>0)this.mistakeTracker.reset();break}case"usage-updated":{this.currentRunUsage={inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens>0?$.usage.cacheReadTokens:void 0,cacheWriteTokens:$.usage.cacheWriteTokens>0?$.usage.cacheWriteTokens:void 0,totalCost:$.usage.totalCost};break}default:break}for(let Z of this.eventAdapter.translate($))this.emitLegacyEvent(Z)}syncConversationFromRuntimeMessage($,Z){if($.length>0){this.conversation.replaceMessages(R8($));return}if(Z.length===0)return;let Q=new Set(this.conversation.getMessages().map((J)=>J.id).filter((J)=>typeof J==="string")),W=R8(Z).filter((J)=>!J.id||!Q.has(J.id));if(W.length===0)return;this.conversation.replaceMessages([...this.conversation.getMessages(),...W])}emitLegacyEvent($){for(let Z of this.listeners)try{Z($)}catch(Q){this.logger?.error?.("SessionRuntime event listener threw",{agentId:this.agentId,error:Q})}}inspectLoopForToolCall($,Z,Q){if(this.trackerAbortInFlight||this.loopDetectionDisabled)return;let W=this.loopTracker.inspect({name:$,input:Z});if(W.kind==="ok")return;if(W.kind==="soft"){if(W.message)this.conversation.appendMessage({role:"user",content:[{type:"text",text:W.message}]});return}this.enqueueMistakeRecord({iteration:Q,reason:"tool_execution_failed",forceAtLimit:!0,details:W.message??`Detected repeated tool calls to \`${$}\`; stopping to avoid a loop.`})}enqueueMistakeRecord($){if(this.trackerAbortInFlight)return;this.activeTrackerWork=this.activeTrackerWork.then(async()=>{if(this.trackerAbortInFlight)return;let Z=await this.mistakeTracker.record($);if(Z.action==="stop")this.trackerAbortInFlight=!0,this.conversation.appendMessage({role:"user",content:[{type:"text",text:Z.message}]}),this.activeRuntime?.abort(Z.reason??Z.message)})}buildLegacyResult($){let{runResult:Z,thrownError:Q,startedAt:W,endedAt:J}=$,X=J.getTime()-W.getTime(),Y=Q?"error":JM(Z),j=(Z?.status==="failed"?Z.error?.message:void 0)||Z?.outputText||"",V=Z?{inputTokens:Z.usage.inputTokens,outputTokens:Z.usage.outputTokens,cacheReadTokens:Z.usage.cacheReadTokens>0?Z.usage.cacheReadTokens:void 0,cacheWriteTokens:Z.usage.cacheWriteTokens>0?Z.usage.cacheWriteTokens:void 0,totalCost:Z.usage.totalCost}:this.currentRunUsage,H=Z?R8(Z.messages):this.conversation.getMessages(),B=_B(this.config);if(Q)throw Q;return{text:j,usage:V,messages:H,toolCalls:this.currentRunToolCalls,iterations:Z?.iterations??0,finishReason:Y,model:{id:this.config.modelId,provider:this.config.providerId,info:B},startedAt:W,endedAt:J,durationMs:X}}}function WM($,Z,Q,W){if(!$)return;if(Z==="debug"){$.debug(Q,W);return}if(Z==="error"&&$.error){$.error(Q,W);return}let J=Z==="warn"?"warn":Z==="error"?"error":"info";$.log(Q,{...W,severity:J})}function JM($){if(!$)return"error";switch($.status){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}async function XM($,Z,Q,W){let{buildInitialUserContent:J}=await Promise.resolve().then(() => DB);return J($,Z,Q,W)}function _B($){if($.knownModels?.[$.modelId])return $.knownModels[$.modelId];let Z=U3($);if(Z?.[$.modelId])return Z[$.modelId];return}import{buildClineSystemPrompt as zB}from"@cline/shared";function TB($,Z){let Q=$.trim();if(Z.providerId.toLowerCase()!=="cline")return Q;return zB({ide:Z.clineIdeName?.trim()||"Terminal",workspaceRoot:Z.cwd?.trim()||"/",providerId:Z.providerId,rules:`# Team Teammate Role
471
- ${Q}`,platform:Z.clinePlatform,metadata:Z.workspaceMetadata})}function OB($,Z){let Q=$.trim();if(Z.providerId.toLowerCase()!=="cline")return Q;return zB({ide:Z.clineIdeName||"Terminal",workspaceRoot:Z.cwd?.trim()||"/",providerId:Z.providerId,overridePrompt:Q,metadata:Z.workspaceMetadata,platform:Z.clinePlatform})}function T$($){let Z={...$};return{getRuntimeConfig:()=>Z,getConnectionConfig:()=>({providerId:Z.providerId,modelId:Z.modelId,apiKey:Z.apiKey,baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking,maxTokensPerTurn:Z.maxTokensPerTurn}),updateConnectionDefaults:(Q)=>{Z={...Z,...Q}}}}function G2($){let Z=$.configProvider.getRuntimeConfig(),Q=$.kind==="teammate"?TB($.prompt,Z):OB($.prompt,Z);return{...$.configProvider.getConnectionConfig(),systemPrompt:Q,tools:$.tools,maxIterations:$.maxIterations??Z.maxIterations,parentAgentId:$.parentAgentId,abortSignal:$.abortSignal,onEvent:$.onEvent,hooks:Z.hooks,extensions:Z.extensions,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval,logger:Z.logger,role:$.role}}function O$($){let Z=G2($),Q=new z$(Z);if(Z.onEvent)Q.subscribeEvents(Z.onEvent);return Q}var VM=N3.object({systemPrompt:N3.string().describe("System prompt defining the sub-agent's behavior"),task:N3.string().describe("Task for the sub-agent to complete")});function q$($){return YM({name:"spawn_agent",description:"Spawn a sub-agent with a custom system prompt for specialized tasks. Use when delegating work that benefits from focused expertise.",inputSchema:jM(VM),execute:async(Z,Q)=>{let W=$.createSubAgentTools?await $.createSubAgentTools(Z,Q):$.subAgentTools??[],J=O$({kind:"subagent",prompt:Z.systemPrompt,configProvider:$.configProvider,tools:W,maxIterations:$.defaultMaxIterations,parentAgentId:Q.agentId,abortSignal:Q.signal,onEvent:$.onSubAgentEvent,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval}),X=J.getAgentId(),Y=J.getConversationId(),j=Q.agentId;if($.onSubAgentStart)try{await $.onSubAgentStart({subAgentId:X,conversationId:Y,parentAgentId:j,input:Z})}catch{}try{let V=await J.run(Z.task),H={text:V.text,iterations:V.iterations,finishReason:V.finishReason,usage:{inputTokens:V.usage.inputTokens,outputTokens:V.usage.outputTokens}};if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:X,conversationId:Y,parentAgentId:j,input:Z,result:H,agentResult:V})}catch{}return H}catch(V){if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:X,conversationId:Y,parentAgentId:j,input:Z,error:V instanceof Error?V:Error(String(V))})}catch{}throw V}},timeoutMs:300000,retryable:!1})}import{createTool as F0,TEAM_AWAIT_TIMEOUT_MS as HM,TEAM_RUN_MESSAGE_PREVIEW_LIMIT as BM,TEAM_RUN_TEXT_PREVIEW_LIMIT as GM,TEAM_TASK_IGNORED_FIELDS_BY_ACTION as KM,TeamAttachOutcomeFragmentInputSchema as qB,TeamAwaitRunsInputSchema as MB,TeamBroadcastInputSchema as RB,TeamBroadcastToolResultSchema as FM,TeamCancelRunInputSchema as EB,TeamCancelRunToolResultSchema as AM,TeamCleanupInputSchema as NB,TeamCleanupToolResultSchema as fM,TeamCreateOutcomeInputSchema as wB,TeamCreateOutcomeToolResultSchema as UM,TeamFinalizeOutcomeInputSchema as CB,TeamFinalizeOutcomeToolResultSchema as DM,TeamListOutcomesInputSchema as PB,TeamListRunsInputSchema as SB,TeamMailboxMessageToolResultSchema as LM,TeamMissionLogInputSchema as bB,TeamMissionLogToolResultSchema as _M,TeamOutcomeFragmentToolResultSchema as yB,TeamOutcomeToolResultSchema as zM,TeamReadMailboxInputSchema as hB,TeamReviewOutcomeFragmentInputSchema as kB,TeamRunTaskInputSchema as IB,TeamRunTaskToolResultSchema as w3,TeamRunToolSummarySchema as C3,TeamSendMessageInputSchema as xB,TeamSendMessageToolResultSchema as TM,TeamShutdownTeammateInputSchema as gB,TeamSimpleAgentStatusToolResultSchema as mB,TeamSpawnTeammateInputSchema as vB,TeamStatusInputSchema as cB,TeamStatusToolResultSchema as OM,TeamTaskInputSchema as uB,TeamTaskToolResultSchema as h6,validateWithZod as k,zodToJsonSchema as A0}from"@cline/shared";function dB($,Z){let Q=$.replace(/\s+/g," ").trim();if(Q.length<=Z)return Q;return`${Q.slice(0,Math.max(0,Z-3)).trimEnd()}...`}function K2($,Z){if($===void 0)throw Error(`Missing required field: ${Z}`);return $}function qM($){let Z=$.result;if(!Z)return;return{textPreview:dB(Z.text,GM),iterations:Z.iterations,finishReason:Z.finishReason,durationMs:Z.durationMs,usage:{inputTokens:Z.usage.inputTokens,outputTokens:Z.usage.outputTokens,cacheReadTokens:Z.usage.cacheReadTokens,cacheWriteTokens:Z.usage.cacheWriteTokens,totalCost:Z.usage.totalCost}}}function CZ($){return $?.toISOString()}function P3($){return{id:$.id,agentId:$.agentId,taskId:$.taskId,status:$.status,messagePreview:dB($.message,BM),priority:$.priority,retryCount:$.retryCount,maxRetries:$.maxRetries,nextAttemptAt:CZ($.nextAttemptAt),continueConversation:$.continueConversation,startedAt:$.startedAt.toISOString(),endedAt:CZ($.endedAt),leaseOwner:$.leaseOwner,heartbeatAt:CZ($.heartbeatAt),lastProgressAt:CZ($.lastProgressAt),lastProgressMessage:$.lastProgressMessage,currentActivity:$.currentActivity,error:$.error,resultSummary:qM($)}}function MM($){if($.status==="failed")throw Error(`Run "${$.id}" failed${$.error?`: ${$.error}`:""}`);if($.status==="cancelled")throw Error(`Run "${$.id}" was cancelled${$.error?`: ${$.error}`:""}`);if($.status==="interrupted")throw Error(`Run "${$.id}" was interrupted${$.error?`: ${$.error}`:""}`)}var N8=["team_spawn_teammate","team_shutdown_teammate","team_status","team_task","team_run_task","team_cancel_run","team_list_runs","team_await_runs","team_send_message","team_broadcast","team_read_mailbox","team_mission_log","team_cleanup","team_create_outcome","team_attach_outcome_fragment","team_review_outcome_fragment","team_finalize_outcome","team_list_outcomes"];function lB($){let Z=[];if($.createBaseTools)Z.push(...$.createBaseTools());Z.push(...F2({runtime:$.runtime,requesterId:$.spec.agentId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!1})),$.runtime.spawnTeammate({agentId:$.spec.agentId,config:G2({kind:"teammate",prompt:$.spec.rolePrompt,role:$.spec.rolePrompt,configProvider:$.teammateConfigProvider,tools:Z,maxIterations:$.spec.maxIterations,cwd:$.teammateConfigProvider.getRuntimeConfig().cwd})})}function w8($){let Z=$.leadAgentId??"lead",Q=$.restoredFromPersistence===!0,W=F2({runtime:$.runtime,requesterId:Z,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!0,includeSpawnTool:$.includeLeadSpawnTool,includeManagementTools:$.includeLeadManagementTools,onLeadToolsUnlocked:$.onLeadToolsUnlocked}),J=[];for(let X of $.restoredTeammates??[]){if($.runtime.isTeammateActive(X.agentId))continue;lB({runtime:$.runtime,requesterId:Z,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:X}),J.push(X.agentId)}return{tools:W,restoredFromPersistence:Q,restoredTeammates:J}}function F2($){let Z=$.allowSpawn??!0,Q=$.includeSpawnTool??!0,W=$.includeManagementTools??!0,J=[];if(Q)J.push(F0({name:"team_spawn_teammate",description:"Spawn a teammate with a required agentId and rolePrompt.",inputSchema:A0(vB),execute:async(Y)=>{let j=k(vB,Y);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");if(!Z)throw Error("Spawning teammates is disabled in this context.");let V={agentId:j.agentId,rolePrompt:j.rolePrompt};if(lB({runtime:$.runtime,requesterId:$.requesterId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:V}),!W)$.onLeadToolsUnlocked?.(F2({...$,includeSpawnTool:!1,includeManagementTools:!0,onLeadToolsUnlocked:void 0}));return k(mB,{agentId:j.agentId,status:"spawned"})}}));if(!W)return J;J.push(F0({name:"team_shutdown_teammate",description:"Shutdown a teammate by agentId.",inputSchema:A0(gB),execute:async(Y)=>{let j=k(gB,Y);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");return $.runtime.shutdownTeammate(j.agentId,j.reason),k(mB,{agentId:j.agentId,status:"stopped"})}})),J.push(F0({name:"team_status",description:"Return a snapshot of team members, task counts, mailbox, and mission log stats.",inputSchema:A0(cB),execute:async(Y)=>{return k(cB,Y),k(OM,$.runtime.getSnapshot())}})),J.push(F0({name:"team_task",description:"Manage shared team tasks with action-specific payloads. create requires title and description, with optional dependsOn and assignee. list accepts optional status, assignee. claim requires taskId. complete requires taskId and summary. block requires taskId and reason. Do not include fields from other actions.",inputSchema:A0(uB),execute:async(Y)=>{let j=k(uB,Y);switch(j.action){case"create":{let V=new Set(KM.create??[]),H=Object.entries(Y).filter(([G,K])=>V.has(G)&&K!=null).map(([G])=>G),B=$.runtime.createTask({title:K2(j.title,"title"),description:K2(j.description,"description"),dependsOn:j.dependsOn,assignee:j.assignee,createdBy:$.requesterId});return k(h6,{action:"create",taskId:B.id,status:B.status,...H.length>0?{ignoredFields:H,note:`Ignored fields for action=create: ${H.join(", ")}`}:{}})}case"list":return k(h6,{action:"list",tasks:$.runtime.listTaskItems({status:j.status,assignee:j.assignee})});case"claim":{let V=$.runtime.claimTask(K2(j.taskId,"taskId"),$.requesterId);return k(h6,{action:"claim",taskId:V.id,status:V.status,nextStep:"Task is now in_progress. Execute the work using team_run_task or your own tools, then call team_task with action=complete when done."})}case"complete":{let V=$.runtime.completeTask(K2(j.taskId,"taskId"),$.requesterId,K2(j.summary,"summary"));return k(h6,{action:"complete",taskId:V.id,status:V.status})}case"block":{let V=$.runtime.blockTask(K2(j.taskId,"taskId"),$.requesterId,K2(j.reason,"reason"));return k(h6,{action:"block",taskId:V.id,status:V.status})}}}}));let X=new Map;return J.push(F0({name:"team_run_task",description:"Route a delegated task to a teammate. Choose sync (wait) or async (run in background).",inputSchema:A0(IB),execute:async(Y)=>{let j=k(IB,Y);if(j.runMode==="async"){let B=$.runtime.startTeammateRun(j.agentId,j.task,{taskId:j.taskId||void 0,fromAgentId:$.requesterId,continueConversation:j.continueConversation||void 0});return k(w3,{agentId:j.agentId,mode:"async",status:"queued",dispatched:!0,message:`Task dispatched to ${j.agentId} and queued as ${B.id}.`,runId:B.id})}let V=X.get(j.agentId);if(V){let B=await V;return k(w3,{...B,status:"joined",deduped:!0,message:`Task for ${j.agentId} was already dispatched in this tool batch; joined the existing in-flight run.`})}let H=$.runtime.routeToTeammate(j.agentId,j.task,{taskId:j.taskId||void 0,fromAgentId:$.requesterId,continueConversation:j.continueConversation||void 0}).then((B)=>k(w3,{agentId:j.agentId,mode:"sync",status:"running",dispatched:!0,message:`Task dispatched to ${j.agentId} and completed in sync mode.`,text:B.text,iterations:B.iterations})).finally(()=>{X.delete(j.agentId)});return X.set(j.agentId,H),await H}})),J.push(F0({name:"team_cancel_run",description:"Cancel one async teammate run.",inputSchema:A0(EB),execute:async(Y)=>{let j=k(EB,Y),V=$.runtime.cancelRun(j.runId,j.reason);return k(AM,{runId:V.id,status:V.status})}})),J.push(F0({name:"team_list_runs",description:"List teammate runs started with team_run_task in async mode, including live activity/progress fields when available.",inputSchema:A0(SB),execute:async(Y)=>k(C3.array(),$.runtime.listRuns(k(SB,Y)).map(P3))})),J.push(F0({name:"team_await_runs",description:"Wait for async teammate runs. Provide runId to wait for one run, or omit it to wait for all active async runs. Uses a long timeout for legitimate teammate work.",inputSchema:A0(MB),timeoutMs:HM,execute:async(Y)=>{let j=k(MB,Y);if(j.runId){let B=await $.runtime.awaitRun(j.runId);return MM(B),k(C3,P3(B))}let V=await $.runtime.awaitAllRuns(),H=V.filter((B)=>["failed","cancelled","interrupted"].includes(B.status));if(H.length>0){let B=H.map((G)=>`${G.id}:${G.status}${G.error?`(${G.error})`:""}`).join(", ");throw Error(`One or more runs did not complete successfully: ${B}`)}return k(C3.array(),V.map(P3))}})),J.push(F0({name:"team_send_message",description:"Send a mailbox message to a specific teammate.",inputSchema:A0(xB),execute:async(Y)=>{let j=k(xB,Y),V=$.runtime.sendMessage($.requesterId,j.toAgentId,j.subject,j.body,j.taskId??void 0);return k(TM,{id:V.id,toAgentId:V.toAgentId})}})),J.push(F0({name:"team_broadcast",description:"Broadcast a message to all teammates.",inputSchema:A0(RB),execute:async(Y)=>{let j=k(RB,Y),V=$.runtime.broadcast($.requesterId,j.subject,j.body,{taskId:j.taskId??void 0});return k(FM,{delivered:V.length})}})),J.push(F0({name:"team_read_mailbox",description:"Read the current agent mailbox.",inputSchema:A0(hB),execute:async(Y)=>{let j=k(hB,Y);return k(LM.array(),$.runtime.listMailbox($.requesterId,{unreadOnly:j.unreadOnly,markRead:!0}))}})),J.push(F0({name:"team_mission_log",description:"Append a mission log update for your team.",inputSchema:A0(bB),execute:async(Y)=>{let j=k(bB,Y),V=$.runtime.appendMissionLog({agentId:$.requesterId,taskId:j.taskId||void 0,kind:j.kind,summary:j.summary,evidence:j.evidence?.length?j.evidence:void 0,nextAction:j.nextAction||void 0});return k(_M,{id:V.id})}})),J.push(F0({name:"team_cleanup",description:"Clean up the team runtime. Fails if teammates are still running.",inputSchema:A0(NB),execute:async(Y)=>{if(k(NB,Y),$.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can run cleanup.");return $.runtime.cleanup(),k(fM,{status:"cleaned"})}})),J.push(F0({name:"team_create_outcome",description:"Create a converged team outcome.",inputSchema:A0(wB),execute:async(Y)=>{let j=k(wB,Y),V=$.runtime.createOutcome({title:j.title,requiredSections:j.requiredSections,createdBy:$.requesterId});return k(UM,{outcomeId:V.id,status:V.status,requiredSections:V.requiredSections})}})),J.push(F0({name:"team_attach_outcome_fragment",description:"Attach a fragment to an outcome section.",inputSchema:A0(qB),execute:async(Y)=>{let j=k(qB,Y),V=$.runtime.attachOutcomeFragment({outcomeId:j.outcomeId,section:j.section,sourceAgentId:$.requesterId,sourceRunId:j.sourceRunId||void 0,content:j.content});return k(yB,{fragmentId:V.id,status:V.status})}})),J.push(F0({name:"team_review_outcome_fragment",description:"Review one outcome fragment.",inputSchema:A0(kB),execute:async(Y)=>{let j=k(kB,Y),V=$.runtime.reviewOutcomeFragment({fragmentId:j.fragmentId,reviewedBy:$.requesterId,approved:j.approved});return k(yB,{fragmentId:V.id,status:V.status})}})),J.push(F0({name:"team_finalize_outcome",description:"Finalize one outcome.",inputSchema:A0(CB),execute:async(Y)=>{let j=k(CB,Y),V=$.runtime.finalizeOutcome(j.outcomeId);return k(DM,{outcomeId:V.id,status:V.status})}})),J.push(F0({name:"team_list_outcomes",description:"List team outcomes.",inputSchema:A0(PB),execute:async(Y)=>{return k(PB,Y),k(zM.array(),$.runtime.listOutcomes())}})),J}function PZ($){return{...$,tasks:$.tasks.map((Z)=>({...Z,createdAt:new Date(Z.createdAt),updatedAt:new Date(Z.updatedAt)})),mailbox:$.mailbox.map((Z)=>({...Z,sentAt:new Date(Z.sentAt),readAt:Z.readAt?new Date(Z.readAt):void 0})),missionLog:$.missionLog.map((Z)=>({...Z,ts:new Date(Z.ts)})),runs:($.runs??[]).map((Z)=>({...Z,startedAt:new Date(Z.startedAt),endedAt:Z.endedAt?new Date(Z.endedAt):void 0,nextAttemptAt:Z.nextAttemptAt?new Date(Z.nextAttemptAt):void 0,heartbeatAt:Z.heartbeatAt?new Date(Z.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),finalizedAt:Z.finalizedAt?new Date(Z.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),reviewedAt:Z.reviewedAt?new Date(Z.reviewedAt):void 0}))}}function pB($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}var RM=[{id:"read_files",description:"Read the content of text or image files at the provided absolute paths, or return only an inclusive one-based line range when start_line/end_line are provided. Long files are windowed; page with start_line/end_line.",headlessToolNames:["read_files"]},{id:"search_codebase",description:"Perform regex pattern searches across the codebase for code patterns, definitions, imports, and other text matches.",headlessToolNames:["search_codebase"]},{id:"run_commands",description:"Run shell commands from the root of the workspace for listing files, checking git status, builds, tests, and similar tasks.",headlessToolNames:["run_commands"]},{id:"editor",description:"Make controlled filesystem edits on text files with create, replace, and insert operations.",headlessToolNames:["editor"]},{id:"fetch_web_content",description:"Fetch URL content and analyze it with a prompt describing what to extract.",headlessToolNames:["fetch_web_content"]},{id:"skills",description:"Execute a configured skill within the main conversation when a matching skill exists for the task.",headlessToolNames:["skills"]},{id:"ask_question",description:"Ask the user a single clarifying question with 2-5 selectable options.",headlessToolNames:["ask_question"]},{id:"spawn_agent",description:q$({configProvider:{}}).description,headlessToolNames:["spawn_agent"]},{id:"teams",description:"Enable team collaboration tools for teammate management, task coordination, mailbox messaging, mission logs, and outcomes.",headlessToolNames:[...N8]}],EM={read_files:"enableReadFiles",search_codebase:"enableSearch",run_commands:"enableBash",fetch_web_content:"enableWebFetch",apply_patch:"enableApplyPatch",editor:"enableEditor",skills:"enableSkills",ask_question:"enableAskQuestion"};function NM($){return $==="plan"||$==="yolo"?$:"act"}function iB($){let Z=NM($.mode),Q=u0[l1({mode:Z})],W=M8($.providerId??"",$.modelId??"",Z,q8);return{mode:Z,flags:{...Q,...W,...typeof $.enableSpawnAgent==="boolean"?{enableSpawnAgent:$.enableSpawnAgent}:{},...typeof $.enableAgentTeams==="boolean"?{enableAgentTeams:$.enableAgentTeams}:{}}}}function rB($,Z){if(Z.disabledToolIds?.has($))return!1;let{flags:Q}=iB(Z);if($==="spawn_agent")return Q.enableSpawnAgent===!0;if($==="teams")return Q.enableAgentTeams===!0;if($==="editor")return Q.enableEditor===!0||Q.enableApplyPatch===!0;let W=EM[$];return W?Q[W]===!0:!1}function wM($,Z){if($.id==="editor"){let{flags:Q}=iB(Z),W=Q.enableApplyPatch===!0&&Q.enableEditor!==!0;return{...$,defaultEnabled:rB($.id,Z),headlessToolNames:[W?"apply_patch":"editor"]}}return{...$,defaultEnabled:rB($.id,Z)}}function A2($={}){return RM.map((Z)=>wM(Z,$))}function SZ($={}){return A2($).filter((Z)=>Z.defaultEnabled).map((Z)=>Z.id)}function bZ($){if(!$.enabled)return new Set;let Z=A2($.availabilityContext),Q=new Set(Z.map((W)=>W.id));if(!$.allowlist||$.allowlist.length===0)return new Set(Z.filter((W)=>W.defaultEnabled).map((W)=>W.id));for(let W of $.allowlist)if(!Q.has(W))throw Error(`Unknown tool "${W}". Available tools: ${Z.map((J)=>J.id).join(", ")}`);return new Set($.allowlist)}function k6($,Z={}){return A2(Z).filter((Q)=>$.has(Q.id)).flatMap((Q)=>Q.headlessToolNames)}function yZ($,Z={}){return k6($,Z)}function f2($={}){let{executorOptions:Z={},executors:Q,...W}=$,J={...O8(Z),...Q??{}};return D$({...W,executors:J})}import{mkdirSync as hM,writeFileSync as kM}from"node:fs";import{dirname as IM}from"node:path";import{normalizeUserInput as xM}from"@cline/shared";import{nanoid as gM}from"nanoid";var aB={};N(aB,{sanitizeSessionToken:()=>U2,parseTeamTaskSubSessionId:()=>P8,parseSubSessionId:()=>x6,makeTeamTaskSubSessionId:()=>I6,makeSubSessionId:()=>C8,deriveSubsessionStatus:()=>g6});import{nanoid as SM}from"nanoid";function U2($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function C8($,Z){let Q=U2($),W=U2(Z),J=`${Q}__${W}`;return J.length>180?J.slice(0,180):J}function I6($,Z){let Q=U2($),W=U2(Z);return`${Q}__teamtask__${W}__${SM(6)}`}function P8($){let Q=$.indexOf("__teamtask__");if(Q<=0)return null;let W=$.slice(0,Q),J=$.slice(Q+12),X=J.lastIndexOf("__");if(X<=0)return null;let Y=J.slice(0,X),j=J.slice(X+2);if(!W||!Y||!j)return null;return{rootSessionId:W,agentId:Y,teamTaskId:j}}function x6($){if(P8($))return null;let Z="__",Q=$.indexOf(Z);if(Q<=0)return null;let W=$.slice(0,Q),J=$.slice(Q+Z.length);if(!W||!J)return null;return{rootSessionId:W,agentId:J}}function g6($){switch($.hookName){case"agent_end":return"completed";case"agent_error":return"failed";case"session_shutdown":{let Z=String($.reason??"").toLowerCase();if(Z.includes("cancel")||Z.includes("abort")||Z.includes("interrupt"))return"cancelled";if(Z.includes("fail")||Z.includes("error"))return"failed";return"completed"}default:return"running"}}import{z as $0}from"zod";var tB={};N(tB,{isTerminalSessionStatus:()=>oB,isNonTerminalSessionStatus:()=>H0,SessionSource:()=>z0,SESSION_STATUSES:()=>m6,NON_TERMINAL_SESSION_STATUSES:()=>sB});import{SESSION_STATUS_VALUES as bM}from"@cline/shared";var m6=bM,sB=["idle","running","pending"];function oB($){return!sB.includes($)}function H0($){return!oB($)}var z0={CORE:"core",CLI:"cli",SUBAGENT:"subagent",DESKTOP:"desktop",KANBAN:"kanban",API:"api",WEB:"web",VSCODE:"vscode",ENTERPRISE:"enterprise",IDE:"ide",JETBRAINS:"jetbrains",NEOVIM:"neovim",UNKNOWN:"unknown"};var yM=$0.enum(m6),b0=$0.object({version:$0.literal(1),session_id:$0.string().min(1),source:$0.string().min(1),pid:$0.number().int(),started_at:$0.string().min(1),ended_at:$0.string().min(1).optional(),exit_code:$0.number().int().nullable().optional(),status:yM,interactive:$0.boolean(),provider:$0.string().min(1),model:$0.string().min(1),cwd:$0.string().min(1),workspace_root:$0.string().min(1),team_name:$0.string().min(1).optional(),enable_tools:$0.boolean(),enable_spawn:$0.boolean(),enable_teams:$0.boolean(),prompt:$0.string().optional(),metadata:$0.record($0.string(),$0.unknown()).optional(),messages_path:$0.string().min(1).optional()});function eB($){if(!$)return!1;return Object.values($).some((Z)=>typeof Z==="function")}function b3($,Z){let Q=[...$??[],...Z??[]];if(Q.length===0)return;let W=[],J=new Set;for(let X of Q){if(J.has(X.name))continue;J.add(X.name),W.push(X)}return W}function $G($){return JSON.stringify($,(Z,Q)=>{if(Q instanceof Error)return{name:Q.name,message:Q.message,stack:Q.stack};return Q})}function p1($){return typeof $==="string"&&$.trim()?$.trim():void 0}function S3($,Z){let Q={...$};Q.id=p1(Q.id)??gM();let W=Q.modelInfo&&typeof Q.modelInfo==="object"?{...Q.modelInfo}:void 0,J={id:p1(W?.id)??p1(Q.modelId)??p1(Z?.id),provider:p1(W?.provider)??p1(Q.providerId)??p1(Z?.provider),family:p1(W?.family)??p1(Z?.family)};if(delete Q.providerId,delete Q.modelId,J.id&&J.provider)Q.modelInfo={id:J.id,provider:J.provider,...J.family?{family:J.family}:{}};else delete Q.modelInfo;return Q}function hZ($){return $.map((Z)=>S3(Z))}function kZ($,Z,Q=[]){let W=$.map((V,H)=>{let B=Q[H],K=B?.role===V.role&&JSON.stringify(B.content)===JSON.stringify(V.content)?{...B,...V}:{...V};return S3(K)}),J=Q.length,X=[];for(let V=J;V<W.length;V+=1)if(W[V]?.role==="assistant")X.push(V);if(X.length===0){let V=[...W].reverse().findIndex((H)=>H.role==="assistant");if(V===-1)return W;X.push(W.length-1-V)}let Y=X[X.length-1],j=X.some((V)=>W[V]?.metrics);for(let V of X){let H=W[V],B=H.metrics;if(!B&&V===Y&&!j){let G=Z.usage;B={inputTokens:G.inputTokens,outputTokens:G.outputTokens,cacheReadTokens:G.cacheReadTokens??0,cacheWriteTokens:G.cacheWriteTokens??0,cost:G.totalCost}}W[V]={...S3(H,{id:Z.model.id,provider:Z.model.provider,family:Z.model.info?.family}),...B?{metrics:B}:{},ts:H.ts??Z.endedAt.getTime()}}return W}function v6($){return{sessionId:$.sessionId,source:$.source,pid:$.pid,startedAt:$.startedAt,endedAt:$.endedAt??null,exitCode:$.exitCode??null,status:$.status,interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspaceRoot:$.workspaceRoot,teamName:$.teamName??void 0,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,parentSessionId:$.parentSessionId??void 0,parentAgentId:$.parentAgentId??void 0,agentId:$.agentId??void 0,conversationId:$.conversationId??void 0,isSubagent:$.isSubagent,prompt:$.prompt??void 0,metadata:$.metadata??void 0,messagesPath:$.messagesPath??void 0,updatedAt:$.updatedAt}}var mM=120;function D2($){let Z=$?.trim();return Z?Z.slice(0,mM):void 0}function y3($){let Z=xM($??"").trim();if(!Z)return;return D2(Z.split(`
472
- `)[0]?.trim())}function M$($){if(!$)return;let Z={...$},Q=D2(typeof Z.title==="string"?Z.title:void 0);if(Q)Z.title=Q;else delete Z.title;return Object.keys(Z).length>0?Z:void 0}function c6($){let Z=M$($.metadata)??{},Q=$.title!==void 0?D2($.title):y3($.prompt);if(Q)Z.title=Q;return Object.keys(Z).length>0?Z:void 0}function h3($){let Z=P8($);if(Z)return{agent:"teammate",sessionId:Z.rootSessionId,taskType:"team"};let Q=x6($);if(Q)return{agent:"subagent",sessionId:Q.rootSessionId,taskType:"subagent_task"};return{agent:"lead",sessionId:$}}function k3($){return{version:1,updated_at:$.updatedAt,agent:$.context.agent,sessionId:$.context.sessionId,...$.context.taskType?{taskType:$.context.taskType}:{},messages:hZ($.messages),...$.systemPrompt?{system_prompt:$.systemPrompt}:{}}}function ZG($,Z,Q){hM(IM($),{recursive:!0}),kM($,`${JSON.stringify(k3({updatedAt:Z,context:Q,messages:[]}),null,2)}
473
- `,"utf8")}function QG($,Z){return b0.parse({version:1,session_id:$.sessionId,source:$.source,pid:$.pid,started_at:$.startedAt,ended_at:Z?.endedAt??$.endedAt??void 0,exit_code:Z?.exitCode??$.exitCode??void 0,status:Z?.status??$.status,interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspace_root:$.workspaceRoot,team_name:$.teamName??void 0,enable_tools:$.enableTools,enable_spawn:$.enableSpawn,enable_teams:$.enableTeams,prompt:$.prompt??void 0,metadata:Z?.metadata??$.metadata??void 0,messages_path:$.messagesPath??void 0})}async function WG($,Z,Q){let W=0;while(!0){let J=await $();if(J===void 0)return{updated:!1};let X=await Z(J);if(typeof X==="object"&&X!==null&&"updated"in X&&X.updated===!1){if(W+=1,W>=Q)return X;continue}return X}}_0();var JG={};N(JG,{summarizeUsageFromMessages:()=>b8,sumUsageTotals:()=>u6,getCurrentContextSize:()=>I3,createInitialAccumulatedUsage:()=>D0,accumulateUsageTotals:()=>f0});function D0(){return{inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0}}function f0($,Z){return{inputTokens:$.inputTokens+Math.max(0,Z.inputTokens??0),outputTokens:$.outputTokens+Math.max(0,Z.outputTokens??0),cacheReadTokens:$.cacheReadTokens+Math.max(0,Z.cacheReadTokens??0),cacheWriteTokens:$.cacheWriteTokens+Math.max(0,Z.cacheWriteTokens??0),totalCost:$.totalCost+Math.max(0,Z.totalCost??0)}}function u6($){let Z=D0();for(let Q of $)Z=f0(Z,Q);return Z}function S8($){return typeof $==="number"&&Number.isFinite($)?$:0}function b8($){let Z=D0();for(let Q of $){let W=Q.metrics;if(!W)continue;Z=f0(Z,{inputTokens:S8(W.inputTokens),outputTokens:S8(W.outputTokens),cacheReadTokens:S8(W.cacheReadTokens),cacheWriteTokens:S8(W.cacheWriteTokens),totalCost:S8(W.cost)})}return Z}function I3($){for(let Z=$.length-1;Z>=0;Z-=1){let Q=$[Z];if(Q?.role!=="assistant")continue;let W=S8(Q.metrics?.inputTokens);return W>0?W:void 0}return}function vM($){if(!$||typeof $!=="object")return;let Z=$,Q=Z.skill??Z.skill_name??Z.skillName;if(typeof Q!=="string")return;let W=Q.trim();return W.length>0?W:void 0}function x3($){if(!$||typeof $!=="object")return{};let Z=$;return{agentId:typeof Z.agentId==="string"?Z.agentId:void 0,conversationId:typeof Z.conversationId==="string"?Z.conversationId:void 0,parentAgentId:typeof Z.parentAgentId==="string"?Z.parentAgentId:void 0}}function r1($){let Z=$.agentId?.trim();if(!Z)return;let Q=$.parentAgentId?.trim()||void 0,W=$.teamRole,J="root";if(W==="teammate")J="team_teammate";else if(W==="lead")J="team_lead";else if(Q)J="subagent";return{agentId:Z,agentKind:J,conversationId:$.conversationId?.trim()||void 0,parentAgentId:Q,createdByAgentId:$.createdByAgentId?.trim()||Q||void 0,isSubagent:Boolean(Q),teamId:$.teamId?.trim()||void 0,teamName:$.teamName?.trim()||void 0,teamRole:W,teamAgentId:$.teamAgentId?.trim()||void 0}}function cM($){return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheWriteTokens:$.cacheWriteTokens,cacheReadTokens:$.cacheReadTokens,totalCost:$.cost}}function uM($){let Z=$.isPrimaryAgentEvent?[$.overrides?.agentId,$.eventMetadata.agentId,$.overrides?.teamAgentId]:[$.overrides?.teamAgentId,$.overrides?.agentId,$.eventMetadata.agentId,$.eventMetadata.conversationId];for(let Q of Z){let W=Q?.trim();if(W)return W}return $.isPrimaryAgentEvent?"root":"unknown"}function g3($,Z,Q){let{sessionId:W,config:J,liveSession:X,emit:Y}=$,j=J.telemetry,V=X?.runtime.teamRuntime,H=Q?.isPrimaryAgentEvent??!0,B=x3(Z),G=r1({agentId:Q?.agentId??B.agentId,conversationId:Q?.conversationId??B.conversationId,parentAgentId:Q?.parentAgentId??B.parentAgentId,createdByAgentId:Q?.createdByAgentId,teamId:Q?.teamId??V?.getTeamId(),teamName:Q?.teamName??V?.getTeamName(),teamRole:Q?.teamRole,teamAgentId:Q?.teamAgentId});if(Z.type==="content_start"&&Z.contentType==="tool"&&Z.toolName==="skills"){let K=vM(Z.input);if(K)N9(j,{ulid:W,skillName:K,skillSource:"project",skillsAvailableGlobal:0,skillsAvailableProject:0,provider:J.providerId,modelId:J.modelId,...G})}if(Z.type==="content_end"&&Z.contentType==="tool"){let K=Z.toolName??"unknown",F=!Z.error;if(Q8(j,{ulid:W,tool:K,autoApproved:void 0,success:F,modelId:J.modelId,provider:J.providerId,...G}),!F&&(K==="editor"||K==="apply_patch"))w9(j,{ulid:W,modelId:J.modelId,provider:J.providerId,errorType:Z.error,...G})}if(Z.type==="notice"&&Z.reason==="api_error")m4(j,{ulid:W,model:J.modelId,provider:J.providerId,errorMessage:Z.message,...G});if(Z.type==="error")m4(j,{ulid:W,model:J.modelId,provider:J.providerId,errorMessage:Z.error?.message??"unknown error",...G});if(Z.type==="usage"&&X?.turnUsageBaseline){let K=cM(Z);if(H){X.turnPrimaryUsage=f0(X.turnPrimaryUsage??D0(),K);let A=f0(X.turnUsageBaseline,X.turnPrimaryUsage);$.usageBySession.set(W,A),Z8(j,{ulid:W,provider:J.providerId,model:J.modelId,source:"assistant",mode:J.mode,...G}),R9(j,{ulid:W,tokensIn:Z.inputTokens,tokensOut:Z.outputTokens,cacheWriteTokens:Z.cacheWriteTokens,cacheReadTokens:Z.cacheReadTokens,totalCost:Z.cost,model:J.modelId,...G})}else{let A=uM({isPrimaryAgentEvent:H,overrides:Q,eventMetadata:B}),L=X.turnUsageByAgent??new Map;X.turnUsageByAgent=L,L.set(A,f0(L.get(A)??D0(),K))}let F=f0(X.turnPrimaryUsage??D0(),u6(X.turnUsageByAgent?.values()??[]));$.aggregateUsageBySession.set(W,f0(X.turnAggregateUsageBaseline??X.turnUsageBaseline,F))}if(Z.type==="iteration_end"&&H)$.persistMessages(W,X?.agent.getMessages()??[],X?.config.systemPrompt);Y({type:"agent_event",payload:{sessionId:W,event:Z,teamAgentId:Q?.teamAgentId,teamRole:Q!==void 0?Q.teamRole??(H?"lead":void 0):void 0}}),Y({type:"chunk",payload:{sessionId:W,stream:"agent",chunk:$G(Z),ts:Date.now()}})}function R$($){return $.workspaceRoot??$.cwd}import{hasRuntimeConfigExtension as sE}from"@cline/shared";$1();import{existsSync as cZ,readFileSync as CR,statSync as PR}from"node:fs";import{basename as SR,dirname as mZ,join as uZ,resolve as vZ}from"node:path";import{discoverPluginModulePaths as bR,resolveConfiguredPluginModulePaths as RG,resolvePluginConfigSearchPaths as yR,SKILLS_CONFIG_DIRECTORY_NAME as hR}from"@cline/shared/storage";import{resolve as VR}from"node:path";import{normalizePluginManifest as HR}from"@cline/shared";import{existsSync as T0,readFileSync as h8}from"node:fs";import{builtinModules as dM,createRequire as u3}from"node:module";import{dirname as E$,extname as l6,isAbsolute as lM,resolve as p}from"node:path";import{fileURLToPath as YG}from"node:url";import{PLUGIN_FILE_EXTENSIONS as pM}from"@cline/shared";var jG=E$(YG(import.meta.url)),rM=u3(import.meta.url),iM=p(jG,"..","..","..","..",".."),m3=sM(iM),nM=["@cline/sdk","@cline/agents","@cline/core","@cline/core/hub","@cline/core/hub/daemon-entry","@cline/core/telemetry","@cline/llms","@cline/llms/browser","@cline/shared","@cline/shared/automation","@cline/shared/browser","@cline/shared/storage","@cline/shared/db","@cline/shared/types"],d3=new Set(dM.flatMap(($)=>[$,$.replace(/^node:/,"")])),d6=new Set(pM),aM=["development","node","import","require","default"];function sM($){let Z={},Q={"@cline/sdk":p($,"packages/sdk/src/index.ts"),"@cline/agents":p($,"packages/agents/src/index.ts"),"@cline/core":p($,"packages/core/src/index.ts"),"@cline/llms":p($,"packages/llms/src/index.ts"),"@cline/shared":p($,"packages/shared/src/index.ts"),"@cline/shared/storage":p($,"packages/shared/src/storage/index.ts"),"@cline/shared/db":p($,"packages/shared/src/db/index.ts")};for(let[W,J]of Object.entries(Q))if(T0(J))Z[W]=J;for(let W of["agents","core","llms","shared"]){let J=p($,"packages",W),X=p(J,"package.json");if(!T0(X))continue;try{let Y=JSON.parse(h8(X,"utf8"));if(typeof Y.name!=="string"||!Y.exports)continue;if(typeof Y.exports==="string"){let j=p(J,Y.exports);if(T0(j))Z[Y.name]=j;continue}if(typeof Y.exports!=="object")continue;for(let[j,V]of Object.entries(Y.exports)){let H=oM(J,V);if(!H)continue;let B=j==="."?Y.name:`${Y.name}/${j.replace(/^\.\//,"")}`;Z[B]=H}}catch{}}return Z}function oM($,Z){let Q=l3(Z);if(!Q)return null;let W=VG($,Q);for(let J of W)if(T0(J))return J;return null}function l3($,Z=new Set){if(typeof $==="string")return $;if(!$||typeof $!=="object")return null;if(Z.has($))return null;Z.add($);let Q=$;for(let W of aM){let J=l3(Q[W],Z);if(J)return J}return null}function VG($,Z){let Q=Z.replace(/^\.\//,""),W=[p($,Z)];if(Q.startsWith("dist/")){let J=Q.replace(/^dist\//,"src/").replace(/\.(mjs|cjs|js)$/,"");return[p($,`${J}.ts`),p($,`${J}.tsx`),p($,`${J}.mts`),p($,`${J}.cts`),...W]}return W}function tM($){return Object.fromEntries(Object.entries($).sort(([Z],[Q])=>Q.length-Z.length))}function IZ($){return!($.startsWith(".")||$.startsWith("/")||$.startsWith("file:")||$.startsWith("data:")||$.startsWith("http:")||$.startsWith("https:"))}function y8($){if($.startsWith("@")){let[Z,Q]=$.split("/",3);return Q?`${Z}/${Q}`:$}return $.split("/",1)[0]??$}function eM($){let Z=y8($);if($===Z)return".";return`.${$.slice(Z.length)}`}function HG($){return y8($).startsWith("@cline/")}function v3($,Z){let Q=y8(Z),W=E$($);while(!0){let J=p(W,"node_modules",Q);if(T0(J)||T0(p(J,"package.json")))return!0;let X=p(W,"..");if(X===W)return!1;W=X}}function XG($){return c3($)!==null}function c3($){try{return rM.resolve($)}catch{}return $R($)}function $R($){let Z=y8($),Q=BG(Z);if(!Q)return null;let W=p(Q,"package.json");try{let J=JSON.parse(h8(W,"utf8")),X=eM($),Y=X==="."&&typeof J.exports==="string"?J.exports:J.exports&&typeof J.exports==="object"&&Object.hasOwn(J.exports,X)?J.exports[X]:void 0,j=l3(Y)??(X==="."&&typeof J.main==="string"?J.main:null);if(!j)return null;let V=p(Q,j),H=[V,...VG(Q,j).filter((B)=>B!==V)];for(let B of H)if(T0(B))return B;return null}catch{return null}}function ZR(){let $=[jG],Z=process.env.CLINE_WRAPPER_PATH?.trim();if(Z)$.push(E$(E$(Z)));let Q=process.execPath?.trim();if(Q)$.push(E$(Q));return[...new Set($.map((W)=>p(W)))]}function QR($,Z){let Q=$;while(!0){let W=p(Q,"package.json");if(T0(W))try{if(JSON.parse(h8(W,"utf8")).name===Z)return Q}catch{}let J=p(Q,"node_modules",Z,"package.json");if(T0(J))return E$(J);let X=p(Q,"..");if(X===Q)return null;Q=X}}function BG($){for(let Z of ZR()){let Q=QR(Z,$);if(Q)return Q}return null}function WR($){let Q=E$($);for(let W=0;W<4;W++){let J=p(Q,"package.json");if(T0(J))try{let Y=JSON.parse(h8(J,"utf8"));return Y!=null&&typeof Y==="object"&&"cline"in Y}catch{return!1}let X=p(Q,"..");if(X===Q)return!1;Q=X}return!1}function GG($,Z){let Q=Z.startsWith("file:")?YG(Z):lM(Z)?Z:p(E$($),Z);if(T0(Q)&&d6.has(l6(Q)))return Q;for(let W of d6){let J=`${Q}${W}`;if(T0(J))return J}for(let W of d6){let J=p(Q,`index${W}`);if(T0(J))return J}return null}function KG($){let Z=new Set,Q=[/\bimport\s+(?:type\s+)?[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bexport\s+[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bimport\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g,/\brequire\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g];for(let W of Q)for(let J of $.matchAll(W)){let X=J[1];if(X)Z.add(X)}return[...Z]}function JR($){return l6($)!==".ts"}function FG($,Z,Q=new Set){if(Q.has($)||!T0($))return;if(Q.add($),!d6.has(l6($)))return;let W=h8($,"utf8"),J=JR($);for(let X of KG(W)){if(X.startsWith("node:")||d3.has(X))continue;if(IZ(X)){if(!J)continue;if(Object.hasOwn(m3,X)||Object.hasOwn(m3,y8(X))||v3($,X)||HG(X)&&XG(X)||Z&&XG(X))continue;throw Error(`Cannot find module '${y8(X)}'`)}let Y=GG($,X);if(Y)FG(Y,Z,Q)}}function AG($,Z=new Set,Q=new Set){if(Z.has($)||!T0($))return Q;if(Z.add($),!d6.has(l6($)))return Q;let W=h8($,"utf8");for(let J of KG(W)){if(Q.add(J),IZ(J))continue;let X=GG($,J);if(X)AG(X,Z,Q)}return Q}function XR($,Z){let Q=u3($),W={},J=AG($),X=new Set(nM);for(let[Y,j]of Object.entries(m3)){try{Q.resolve(Y);continue}catch{}W[Y]=j}for(let Y of J)if(IZ(Y)&&(HG(Y)||Z))X.add(Y);for(let Y of X){if(Object.hasOwn(W,Y)||v3($,Y))continue;let j=c3(Y);if(j)W[Y]=j}if(!Z)return W;for(let Y of J){if(!IZ(Y)||Object.hasOwn(W,Y)||v3($,Y)||Y.startsWith("node:")||d3.has(Y))continue;let j=c3(Y);if(j)W[Y]=j}return W}function YR($){let Z=l6($);return Z===".ts"||Z===".tsx"||Z===".mts"||Z===".cts"}var L2;function jR(){if(L2!==void 0)return L2;let $=BG("jiti");if(!$)return L2=null,null;let Z=p($,"dist","babel.cjs");if(!T0(Z))return L2=null,null;try{let W=u3(Z)(Z);L2=typeof W==="function"?W:null}catch{L2=null}return L2}async function fG($,Z={}){let Q=!WR($);FG($,Q);let W=XR($,Q),J=tM(W),X=await import("jiti"),Y=typeof X==="function"?X:typeof X.default==="function"?X.default:void 0;if(!Y)throw Error("Unable to load jiti");let j=Object.entries(J).filter(([,G])=>YR(G)).map(([G])=>G),V=jR(),H=V?(G)=>V({...G,interopDefault:!0}):void 0;return await Y($,{alias:J,cache:Z.useCache,requireCache:Z.useCache,esmResolve:!0,interopDefault:!1,nativeModules:[...d3],transformModules:j,tryNative:!1,...H?{transform:H}:{}}).import($,{})}function UG($,Z){if(!$)return!0;if($.providerIds?.length){if(!Z?.providerId||!$.providerIds.includes(Z.providerId))return!1}if($.modelIds?.length){if(!Z?.modelId||!$.modelIds.includes(Z.modelId))return!1}return!0}function DG($){return typeof $==="object"&&$!==null}function p3($){return Array.isArray($)&&$.every((Z)=>typeof Z==="string")}function BR($,Z){if(!DG($.manifest))throw Error(`Invalid plugin module at ${Z}: missing required "manifest"`);if(!p3($.manifest.capabilities))throw Error(`Invalid plugin module at ${Z}: manifest.capabilities must be a string array`);if($.manifest.capabilities.length===0)throw Error(`Invalid plugin module at ${Z}: manifest.capabilities cannot be empty`);if(Object.hasOwn($.manifest,"providerIds")&&!p3($.manifest.providerIds))throw Error(`Invalid plugin module at ${Z}: manifest.providerIds must be a string array when provided`);if(Object.hasOwn($.manifest,"modelIds")&&!p3($.manifest.modelIds))throw Error(`Invalid plugin module at ${Z}: manifest.modelIds must be a string array when provided`)}function GR($,Z){if(!DG($))throw Error(`Invalid plugin module at ${Z}: expected object export`);if(typeof $.name!=="string"||$.name.length===0)throw Error(`Invalid plugin module at ${Z}: expected non-empty "name"`);if(!Object.hasOwn($,"manifest"))throw Error(`Invalid plugin module at ${Z}: missing required "manifest"`);BR($,Z)}async function p6($,Z={}){let Q=VR(Z.cwd??process.cwd(),$),W=await fG(Q,{useCache:Z.useCache}),J=Z.exportName??"plugin",X=W.default??W[J];GR(X,Q);let Y=X,j=Y.setup,V=j?(H,B)=>{let G={...Z.session,...B.session},K={...B,session:Object.keys(G).length>0?G:void 0,client:Z.client??B.client,user:Z.user??B.user,workspaceInfo:Z.workspaceInfo??B.workspaceInfo,automation:Z.automation??B.automation,logger:Z.logger??B.logger,telemetry:Z.telemetry??B.telemetry};return j(H,K)}:void 0;return{...Y,manifest:HR(Y.manifest),setup:V}}async function xZ($,Z={}){return(await _2($,Z)).plugins}async function _2($,Z={}){let Q=[],W=[],J=new Map,X=0;for(let j of $)try{let V=await p6(j,Z);if(!UG(V.manifest,Z))continue;let H=J.get(V.name);if(H)W.push({type:"duplicate_plugin_override",pluginName:V.name,pluginPath:j,overriddenPluginPath:H.pluginPath,message:`Plugin "${V.name}" from ${j} overrides ${H.pluginPath}`});J.set(V.name,{plugin:V,pluginPath:j,order:X++})}catch(V){let H=V instanceof Error?V.message:String(V);Q.push({pluginPath:j,phase:"load",message:H,stack:V instanceof Error?V.stack:void 0})}let Y=[...J.values()].sort((j,V)=>j.order-V.order);return{plugins:Y.map((j)=>j.plugin),pluginPaths:Y.map((j)=>j.pluginPath),failures:Q,warnings:W}}import{existsSync as a3}from"node:fs";import{createRequire as MG}from"node:module";import{dirname as gZ,join as I8}from"node:path";import{fileURLToPath as UR}from"node:url";var OG={};N(OG,{resolveSubprocessRuntimeExecutable:()=>r3,buildSubprocessSandboxCommand:()=>TG,SubprocessSandbox:()=>k8,CLINE_JS_RUNTIME_PATH_ENV:()=>zG});import{spawn as KR}from"node:child_process";import{basename as FR}from"node:path";import{augmentNodeCommandForDebug as AR,withResolvedClineBuildEnv as fR}from"@cline/shared";function LG($){if($ instanceof Error)return $;return Error(String($))}var zG="CLINE_JS_RUNTIME_PATH";function _G($){let Z=$?.trim();if(!Z)return!1;let Q=FR(Z).toLowerCase();return Q==="node"||Q==="node.exe"||Q==="bun"||Q==="bun.exe"}function r3($={}){let Z=$.env??process.env,Q=$.runtimeExecutable?.trim()||Z[zG]?.trim();if(Q)return Q;let W=$.execPath?.trim()||process.execPath;if(_G(W))return W;for(let J of[Z.BUN_EXEC_PATH,Z.npm_node_execpath,Z.NODE]){let X=J?.trim();if(X&&_G(X))return X}return"node"}function TG($,Z={}){let Q=r3({env:Z.env,execPath:Z.execPath,runtimeExecutable:Z.runtimeExecutable});return AR([Q,...$],{env:Z.env,execArgv:Z.execArgv,debugRole:Z.name==="plugin-sandbox"?"plugin-sandbox":"sandbox"})}class k8{options;process=null;requestCounter=0;pending=new Map;constructor($){this.options=$}get processLabel(){return this.options.name??"sandbox"}clearPendingRequest($){let Z=this.pending.get($);if(!Z)return;if(this.pending.delete($),Z.timeout)clearTimeout(Z.timeout);return Z}start(){if(this.process&&this.process.exitCode===null)return;let $=this.options.bootstrapFile?[this.options.bootstrapFile]:["-e",this.options.bootstrapScript??""],Z=TG($,{name:this.options.name,runtimeExecutable:this.options.runtimeExecutable}),Q=KR(Z[0]??r3(this.options),Z.slice(1),{stdio:["ignore","ignore","pipe","ipc"],env:fR(process.env),windowsHide:!0});this.process=Q;let W="",J=(X)=>{let Y=W+X;W=Y.length>4000?Y.slice(-4000):Y};Q.stderr?.setEncoding("utf8"),Q.stderr?.on("data",(X)=>{J(X)}),Q.on("message",(X)=>{this.onMessage(X)}),Q.on("error",(X)=>{this.failPending(Error(`${this.processLabel} process error: ${LG(X).message}`))}),Q.on("exit",(X,Y)=>{this.process=null;let j=W.trim();this.failPending(Error(`${this.options.name??"sandbox"} process exited (code=${String(X)}, signal=${String(Y)})${j?`: ${j}`:""}`))})}async call($,Z,Q={}){this.start();let W=this.process;if(!W||W.exitCode!==null)throw Error(`${this.processLabel} process is not available`);let J=`req_${++this.requestCounter}`,X={type:"call",id:J,method:$,args:Z};return await new Promise((Y,j)=>{let V={resolve:(H)=>Y(H),reject:j};if((Q.timeoutMs??0)>0)V.timeout=setTimeout(()=>{this.clearPendingRequest(J),this.shutdown().catch(()=>{}),j(Error(`${this.processLabel} call timed out after ${Q.timeoutMs}ms: ${$}`))},Q.timeoutMs);this.pending.set(J,V),W.send(X,(H)=>{if(!H)return;let B=this.clearPendingRequest(J);if(!B)return;B.reject(Error(`${this.processLabel} failed to send call "${$}": ${LG(H).message}`))})})}async shutdown(){let $=this.process;if(this.process=null,!$||$.exitCode!==null){this.failPending(Error(`${this.processLabel} shutdown`));return}await new Promise((Z)=>{let Q=setTimeout(()=>{try{$.kill("SIGKILL")}catch{}Z()},300);$.once("exit",()=>{clearTimeout(Q),Z()});try{$.kill("SIGTERM")}catch{clearTimeout(Q),Z()}}),this.failPending(Error(`${this.processLabel} shutdown`))}onMessage($){if(!$)return;if($.type==="event"){if(typeof $.name==="string"&&$.name.length>0)this.options.onEvent?.({name:$.name,payload:$.payload});return}if($.type!=="response"||!$.id)return;let Z=this.clearPendingRequest($.id);if(!Z)return;if($.ok){Z.resolve($.result);return}Z.reject(Error($.error?.message||`${this.processLabel} call failed`))}failPending($){for(let[Z,Q]of this.pending.entries()){if(this.pending.delete(Z),Q.timeout)clearTimeout(Q.timeout);Q.reject($)}}}function DR($){return{...$,contributions:{tools:$.contributions?.tools??[],commands:$.contributions?.commands??[],rules:$.contributions?.rules??[],messageBuilders:$.contributions?.messageBuilders??[],providers:$.contributions?.providers??[],automationEventTypes:$.contributions?.automationEventTypes??[],mcpServers:$.contributions?.mcpServers??[],shortcuts:$.contributions?.shortcuts??[],flags:$.contributions?.flags??[]}}}function r6($){return($ instanceof Error?$.message:String($)).includes("Unknown sandbox plugin id:")}function LR(){return`@cline/cli-${process.platform==="win32"?"windows":process.platform}-${process.arch}`}function _R(){let $=process.env.CLINE_WRAPPER_PATH?.trim();if(!$)return;try{let Q=MG($).resolve(`${LR()}/package.json`),W=I8(gZ(Q),"extensions","plugin-sandbox-bootstrap.js");return a3(W)?W:void 0}catch{return}}function zR(){let $=process.execPath?.trim();if(!$)return;let Z=I8(gZ(gZ($)),"extensions","plugin-sandbox-bootstrap.js");return a3(Z)?Z:void 0}function TR(){let $=gZ(UR(import.meta.url)),Z=MG(import.meta.url),Q=[I8($,"plugin-sandbox-bootstrap.js"),I8($,"extensions","plugin-sandbox-bootstrap.js"),I8($,"agents","plugin-sandbox-bootstrap.js"),_R(),zR()];for(let X of Q.filter((Y)=>typeof Y==="string"))if(a3(X))return{file:X};let W=I8($,"plugin-sandbox-bootstrap.ts"),J="jiti";try{J=Z.resolve("jiti")}catch{}return{script:[`const createJiti = require(${JSON.stringify(J)});`,`const jiti = createJiti(${JSON.stringify(W)}, { cache: false, requireCache: false, esmResolve: true, interopDefault: false });`,`Promise.resolve(jiti.import(${JSON.stringify(W)}, {})).catch((error) => {`," console.error(error);"," process.exitCode = 1;","});"].join(`
474
- `)}}var i3=TR();function n3($,Z,Q){if(typeof $==="number"&&$>0)return $;if(Q){let W=process.env[Q];if(W){let J=Number(W);if(Number.isInteger(J)&&J>0)return J}}return Z}async function x8($){let Z=new k8({name:"plugin-sandbox",..."file"in i3?{bootstrapFile:i3.file}:{bootstrapScript:i3.script},onEvent:$.onEvent}),Q=n3($.importTimeoutMs,4000,"CLINE_PLUGIN_IMPORT_TIMEOUT_MS"),W=n3($.hookTimeoutMs,3000),J=n3($.contributionTimeoutMs,60000),X={pluginPaths:$.pluginPaths,exportName:$.exportName,providerId:$.providerId,modelId:$.modelId,cwd:$.cwd,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,loggerEnabled:Boolean($.logger)},Y,j=()=>{return Y??=Z.call("initialize",X,{timeoutMs:Q}).finally(()=>{Y=void 0}),Y},V;try{V=await Z.call("initialize",X,{timeoutMs:Q})}catch(G){throw await Z.shutdown().catch(()=>{}),G}let H=V.plugins.map(DR);return{extensions:H.map((G)=>{let K={name:G.name,__clinePluginPath:G.pluginPath,manifest:G.manifest,setup:(F)=>{OR(F,Z,G,J,j),qR(F,Z,G,J,j),MR(F,Z,G,J,j),ER(F,Z,G,J,j),RR(F,G)}};return K.hooks=wR(Z,G,W,j),K}),failures:V.failures,pluginPaths:H.map((G)=>G.pluginPath),shutdown:async()=>{await Z.shutdown()},warnings:V.warnings}}function OR($,Z,Q,W,J){for(let X of Q.contributions?.tools??[]){let Y={name:X.name,description:X.description??"",inputSchema:X.inputSchema??{type:"object",properties:{}},timeoutMs:X.timeoutMs,retryable:X.retryable,execute:async(j,V)=>{try{return await Z.call("executeTool",{pluginId:Q.pluginId,contributionId:X.id,input:j,context:V},{timeoutMs:W})}catch(H){if(!r6(H))throw H;return await J(),await Z.call("executeTool",{pluginId:Q.pluginId,contributionId:X.id,input:j,context:V},{timeoutMs:W})}}};$.registerTool(Y)}}function qR($,Z,Q,W,J){for(let X of Q.contributions?.commands??[])$.registerCommand({name:X.name,description:X.description,handler:async(Y)=>{try{return await Z.call("executeCommand",{pluginId:Q.pluginId,contributionId:X.id,input:Y},{timeoutMs:W})}catch(j){if(!r6(j))throw j;return await J(),await Z.call("executeCommand",{pluginId:Q.pluginId,contributionId:X.id,input:Y},{timeoutMs:W})}}})}function MR($,Z,Q,W,J){for(let X of Q.contributions?.rules??[])$.registerRule({id:X.ruleId,source:X.source,content:X.hasContentHandler===!0?async()=>{try{return await Z.call("resolveRuleContent",{pluginId:Q.pluginId,contributionId:X.id},{timeoutMs:W})}catch(Y){if(!r6(Y))throw Y;return await J(),await Z.call("resolveRuleContent",{pluginId:Q.pluginId,contributionId:X.id},{timeoutMs:W})}}:X.content??""})}function RR($,Z){for(let Q of Z.contributions?.providers??[])$.registerProvider({name:Q.name,description:Q.description,metadata:Q.metadata});for(let Q of Z.contributions?.automationEventTypes??[])$.registerAutomationEventType({eventType:Q.eventType,source:Q.source,description:Q.description,attributesSchema:Q.attributesSchema,payloadSchema:Q.payloadSchema,examples:Q.examples,metadata:Q.metadata});for(let Q of Z.contributions?.mcpServers??[])$.registerMcpServer(Q)}function ER($,Z,Q,W,J){for(let X of Q.contributions?.messageBuilders??[])$.registerMessageBuilder({name:X.name,async build(Y){try{let j=await Z.call("buildMessages",{pluginId:Q.pluginId,contributionId:X.id,messages:Y},{timeoutMs:W});return qG(j)?j:Y}catch(j){if(!r6(j))throw j;await J();let V=await Z.call("buildMessages",{pluginId:Q.pluginId,contributionId:X.id,messages:Y},{timeoutMs:W});return qG(V)?V:Y}}})}function qG($){return Array.isArray($)&&$.every((Z)=>typeof Z==="object"&&Z!==null&&("role"in Z)&&("content"in Z))}function NR($,Z,Q,W,J){return async(X)=>{try{return await $.call("invokeHook",{pluginId:Z,hookName:Q,payload:X},{timeoutMs:W})}catch(Y){if(!r6(Y))throw Y;return await J(),await $.call("invokeHook",{pluginId:Z,hookName:Q,payload:X},{timeoutMs:W})}}}function wR($,Z,Q,W){let J={};for(let X of Z.hooks??[])J[X]=NR($,Z.pluginId,X,Q,W);return Object.keys(J).length>0?J:void 0}var o3="package.json",kR="package";function i6($){return yR($)}function n6($){return bR($)}function IR($){try{return cZ($)&&PR($).isDirectory()}catch{return!1}}function t3($){let Z=[],Q=new Set;for(let W of $){let J=vZ(W);if(Q.has(J))continue;Q.add(J),Z.push(J)}return Z}function EG($){let Z=t3($);return v9(Z)}function NG($){return i6($).flatMap((Z)=>n6(Z)).filter((Z)=>cZ(Z))}function xR($,Z){let Q=[];for(let W of $)try{Q.push(...RG([W],Z))}catch{}return Q}function s3($){return typeof $==="object"&&$!==null}function gR($){try{let Z=JSON.parse(CR(uZ($,o3),"utf8"));if(!s3(Z)||!s3(Z.cline))return[];let Q=Z.cline.plugins;if(!Array.isArray(Q))return[];let W=[];for(let J of Q){if(typeof J==="string"){W.push(J);continue}if(!s3(J)||!Array.isArray(J.paths))continue;for(let X of J.paths)if(typeof X==="string")W.push(X)}return W}catch{return[]}}function wG($,Z){let Q=vZ(Z);return gR($).some((W)=>vZ($,W)===Q)}function mR($,Z){return SR($)===kR&&cZ(uZ(mZ($),o3))&&wG(mZ($),Z)}function vR($){let Z=vZ($),Q=[],W=mZ(Z);while(!0){if(mR(W,Z)){Q.push(W);break}if(cZ(uZ(W,o3))){if(wG(W,Z))Q.push(W);break}let J=mZ(W);if(J===W)break;W=J}return t3(Q)}function i1($={}){let Z=$.cwd??process.cwd(),Q=NG($.workspacePath),W=RG($.pluginPaths??[],Z);return EG([...W,...Q])}function cR($={}){let Z=$.cwd??process.cwd(),Q=NG($.workspacePath),W=xR($.pluginPaths??[],Z);return EG([...W,...Q])}function n1($){let Z=[];for(let Q of $)for(let W of vR(Q)){let J=uZ(W,hR);if(IR(J))Z.push(J)}return t3(Z)}function CG($={}){return n1(cR($))}async function g8($={}){let Z=i1($);if(Z.length===0)return{extensions:[],failures:[],warnings:[],pluginPaths:[]};if($.mode==="in_process"){let W=await _2(Z,{cwd:$.cwd,exportName:$.exportName,providerId:$.providerId,modelId:$.modelId,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,automation:$.automation,logger:$.logger,telemetry:$.telemetry});return{extensions:W.plugins,failures:W.failures,pluginPaths:W.pluginPaths,warnings:W.warnings}}let Q=await x8({pluginPaths:Z,exportName:$.exportName,importTimeoutMs:$.importTimeoutMs,hookTimeoutMs:$.hookTimeoutMs,contributionTimeoutMs:$.contributionTimeoutMs,onEvent:$.onEvent,providerId:$.providerId,modelId:$.modelId,cwd:$.cwd,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,logger:$.logger});return{extensions:Q.extensions??[],shutdown:Q.shutdown,failures:Q.failures,pluginPaths:Q.pluginPaths,warnings:Q.warnings}}import{execFile as uR}from"node:child_process";import{promisify as dR}from"node:util";var lR=dR(uR);function e3($,Z){$?.log(Z,{severity:"warn"})}function pR($){let Z=$?.checkpoint;if(!Z||typeof Z!=="object"||Array.isArray(Z))return;let Q=Z;if(!Q.latest||!Array.isArray(Q.history))return;let W=Q.latest,J=Q.history.filter((X)=>!!X&&typeof X==="object"&&typeof X.ref==="string"&&typeof X.createdAt==="number"&&typeof X.runCount==="number");if(typeof W.ref!=="string"||typeof W.createdAt!=="number"||typeof W.runCount!=="number")return;return{latest:W,history:J}}async function z2($,Z){let Q=await lR("git",["-C",$,...Z],{windowsHide:!0});return{stdout:Q.stdout.trim(),stderr:Q.stderr.trim()}}async function $J($,Z){if(!$)return;let Q=`refs/cline/checkpoints/${Z}/`;try{let{stdout:W}=await z2($,["for-each-ref","--format=%(refname)",Q]),J=W.trim().split(`
475
- `).filter(Boolean);await Promise.allSettled(J.map((X)=>z2($,["update-ref","-d",X])))}catch{}}async function PG($,Z,Q){if(!$||Q.length===0)return;await Promise.allSettled(Q.map((W)=>z2($,["update-ref",`refs/cline/checkpoints/${Z}/${W.runCount}`,W.ref])))}function rR($,Z){let Q=$.findIndex((W)=>W.runCount===Z.runCount);if(Q<0)return[...$,Z];return $.map((W,J)=>J===Q?Z:W)}function SG($){let Z=$.initialRunCount??0,Q,W=async()=>{if(Q!==void 0)return Q;try{Q=(await z2($.cwd,["rev-parse","--is-inside-work-tree"])).stdout==="true"}catch{Q=!1}return Q},J=async()=>{if($.createCheckpoint)return await $.createCheckpoint({cwd:$.cwd,sessionId:$.sessionId,runCount:Z});if(!await W())return;let X=async(H)=>{try{let G=(await z2($.cwd,["rev-parse","HEAD"])).stdout.trim();if(!G)return;return{ref:G,createdAt:Date.now(),runCount:Z,kind:"commit"}}catch(B){e3($.logger,`${H}: ${B instanceof Error?B.message:String(B)}`);return}},Y=`cline checkpoint session=${$.sessionId} run=${Z}`,j="";try{j=(await z2($.cwd,["stash","create",Y])).stdout.trim()}catch(H){return e3($.logger,`Checkpoint snapshot failed: ${H instanceof Error?H.message:String(H)}`),X("Checkpoint HEAD fallback failed")}if(!j)return X("Checkpoint HEAD fallback failed");let V=`refs/cline/checkpoints/${$.sessionId}/${Z}`;try{await z2($.cwd,["update-ref",V,j])}catch(H){e3($.logger,`Checkpoint store failed: ${H instanceof Error?H.message:String(H)}`);return}return{ref:j,createdAt:Date.now(),runCount:Z,kind:"stash"}};return{beforeRun:async({snapshot:X})=>{if(X.parentAgentId!=null)return;Z+=1;return},beforeModel:async({snapshot:X})=>{if(X.parentAgentId!=null||X.iteration!==1||Z<1)return;let Y=await J();if(!Y)return;let j=await $.readSessionMetadata(),V=pR(j);if(V?.latest.ref===Y.ref)return;let H=rR(V?.history??[],Y);await $.writeSessionMetadata({...j??{},checkpoint:{latest:Y,history:H}});return}}}import{spawn as ZE}from"node:child_process";import{appendFileSync as QE,readFileSync as WE}from"node:fs";import{join as JE}from"node:path";import{augmentNodeCommandForDebug as hG,withResolvedClineBuildEnv as WJ}from"@cline/shared";import{ensureHookLogDir as bG}from"@cline/shared/storage";function m8($,Z){if(!Z)return;return{name:$,manifest:{capabilities:["hooks"]},hooks:Z}}import{existsSync as iR,readdirSync as nR}from"node:fs";import{basename as aR,extname as sR,join as oR}from"node:path";import{HOOKS_CONFIG_DIRECTORY_NAME as dZ,resolveHooksConfigSearchPaths as tR}from"@cline/shared/storage";function a6($){return tR($)}var v8;((B)=>{B.TaskStart="TaskStart";B.TaskResume="TaskResume";B.TaskCancel="TaskCancel";B.TaskComplete="TaskComplete";B.TaskError="TaskError";B.PreToolUse="PreToolUse";B.PostToolUse="PostToolUse";B.UserPromptSubmit="UserPromptSubmit";B.PreCompact="PreCompact";B.SessionShutdown="SessionShutdown"})(v8||={});var s6={["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"},eR=new Map(Object.values(v8).map(($)=>[$.toLowerCase(),$])),$E=new Set(["",".sh",".bash",".zsh",".js",".mjs",".cjs",".ts",".mts",".cts",".py",".ps1"]);function o6($){let Z=sR($).toLowerCase();if(!$E.has(Z))return;let Q=aR($,Z).trim().toLowerCase();return eR.get(Q)}function N$($){let Z=[],Q=new Set,W=a6($).filter((J)=>iR(J));for(let J of W)try{for(let X of nR(J,{withFileTypes:!0})){if(!X.isFile())continue;let Y=o6(X.name);if(!Y)continue;let j=oR(J,X.name);if(Q.has(j))continue;Q.add(j),Z.push({fileName:Y,hookEventName:s6[Y],path:j})}}catch{}return Z.sort((J,X)=>J.path.localeCompare(X.path))}function pZ($){if(!$||typeof $!=="object")return{};let Z={};for(let[Q,W]of Object.entries($))Z[Q]=typeof W==="string"?W:JSON.stringify(W);return Z}function lZ($,Z,Q){let W=Q instanceof Error?`: ${Q.message}`:"",J=`${Z}${W}`;if($){try{$.log(J,{severity:"warn",...Q!==void 0?{error:Q}:{}})}catch{}return}console.warn(J)}function XE($,Z){if(!Z)return $;if(!$)return{...Z};let Q=[$.context,Z.context].filter((J)=>typeof J==="string"&&J.length>0).join(`
476
- `),W=[...$.appendMessages??[],...Z.appendMessages??[]];return{cancel:$.cancel===!0||Z.cancel===!0?!0:void 0,review:$.review===!0||Z.review===!0?!0:void 0,context:Q||void 0,overrideInput:Z.overrideInput!==void 0?Z.overrideInput:$.overrideInput,systemPrompt:Z.systemPrompt!==void 0?Z.systemPrompt:$.systemPrompt,appendMessages:W.length>0?W:void 0}}function YE($){if(!$||typeof $!=="object")return;let Z=$,Q=typeof Z.context==="string"?Z.context:typeof Z.contextModification==="string"?Z.contextModification:typeof Z.errorMessage==="string"?Z.errorMessage:void 0;return{cancel:typeof Z.cancel==="boolean"?Z.cancel:void 0,review:typeof Z.review==="boolean"?Z.review:void 0,context:Q,overrideInput:Object.hasOwn(Z,"overrideInput")?Z.overrideInput:void 0}}function ZJ($){let Z=String($??"").toLowerCase();return Z.includes("cancel")||Z.includes("abort")||Z.includes("interrupt")}function O0($,Z){let Q=process.env.CLINE_USER_ID?.trim()||process.env.USER?.trim()||"unknown",W={rootSessionId:Z.rootSessionId||$.conversationId};return{clineVersion:process.env.CLINE_VERSION?.trim()||"",timestamp:new Date().toISOString(),taskId:$.conversationId,sessionContext:W,workspaceRoots:Z.workspacePath?[Z.workspacePath]:[],workspaceInfo:Z.workspaceInfo,userId:Q,agent_id:$.agentId,parent_agent_id:$.parentAgentId}}function jE($){let Z=$.trim();if(!Z)return{};let W=Z.split(`
477
- `).map((X)=>X.trim()).filter(Boolean).filter((X)=>X.startsWith("HOOK_CONTROL\t")).map((X)=>X.slice(13)),J=W.length>0?W[W.length-1]:Z;try{return{parsedJson:JSON.parse(J)}}catch(X){return{parseError:X instanceof Error?X.message:"Failed to parse hook stdout JSON"}}}async function VE($,Z){let Q=$.stdin;if(!Q)throw Error("hook command failed to create stdin");await new Promise((W,J)=>{let X=!1,Y=()=>{Q.off("error",V),Q.off("finish",H),$.off("close",B)},j=(G)=>{if(X)return;if(X=!0,Y(),G){let K=G.code;if(K==="EPIPE"||K==="ERR_STREAM_DESTROYED"){W();return}J(G);return}W()},V=(G)=>j(G),H=()=>j(),B=()=>j();Q.on("error",V),Q.once("finish",H),$.once("close",B);try{Q.end(Z)}catch(G){j(G)}})}async function kG($,Z){if(Z.command.length===0)throw Error("runHookCommand requires non-empty command");try{return await yG($,Z)}catch(Q){let W=GE(Z.command,process.platform,Q);if(!W)throw Q;return await yG($,{...Z,command:W})}}async function yG($,Z){let Q=hG(Z.command,{env:Z.env,debugRole:"hook"}),W=ZE(Q[0],Q.slice(1),{cwd:Z.cwd,env:WJ(Z.env),stdio:Z.detached?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:Z.detached,windowsHide:!0}),J=new Promise((K)=>{W.once("spawn",()=>K())}),X=new Promise((K,F)=>{W.once("error",(A)=>F(A))}),Y=JSON.stringify($);if(await Promise.race([J,X]),await VE(W,Y),Z.detached){W.unref();return}if(!W.stdout||!W.stderr)throw Error("hook command failed to create stdout/stderr");let j="",V="",H=!1,B;W.stdout.on("data",(K)=>{j+=K.toString()}),W.stderr.on("data",(K)=>{V+=K.toString()});let G=new Promise((K)=>{if((Z.timeoutMs??0)>0)B=setTimeout(()=>{H=!0,W.kill("SIGKILL")},Z.timeoutMs);W.once("close",(F)=>{if(B)clearTimeout(B);let{parsedJson:A,parseError:L}=jE(j);K({exitCode:F,stdout:j,stderr:V,parsedJson:A,parseError:L,timedOut:H})})});return await Promise.race([G,X])}function HE($){try{let Q=WE($,"utf8").split(/\r?\n/,1)[0]?.trim();if(!Q?.startsWith("#!"))return;let W=Q.slice(2).trim();if(!W)return;let J=W.split(/\s+/).filter(Boolean);return J.length>0?J:void 0}catch{return}}function BE($){return!!($&&typeof $==="object"&&("code"in $)&&$.code==="ENOENT")}function GE($,Z=process.platform,Q){if(Z!=="win32"||!BE(Q))return;if($[0]!=="py"||$[1]!=="-3")return;return["python",...$.slice(2)]}function IG($){if($.length===0)return;let[Z,...Q]=$,W=Z.replace(/\\/g,"/").toLowerCase(),J=W.split("/").at(-1)??W;if(J==="env")return IG(Q);if(J==="bash"||J==="sh"||J==="zsh")return[J,...Q];if(J==="python3"||J==="python")return process.platform==="win32"?["py","-3",...Q]:[J,...Q];return $}function KE($){let Z=HE($);if(Z&&Z.length>0)return[...IG(Z)??Z,$];let Q=$.toLowerCase();if(Q.endsWith(".sh")||Q.endsWith(".bash")||Q.endsWith(".zsh"))return["bash",$];if(Q.endsWith(".js")||Q.endsWith(".mjs")||Q.endsWith(".cjs"))return hG(["node",$],{debugRole:"hook"});if(Q.endsWith(".ts")||Q.endsWith(".mts")||Q.endsWith(".cts"))return["bun","run",$];if(Q.endsWith(".py"))return process.platform==="win32"?["py","-3",$]:["python3",$];if(Q.endsWith(".ps1"))return[process.platform==="win32"?"powershell":"pwsh","-File",$];return["bash",$]}function FE($){let Z={};for(let Q of N$($)){if(!Q.hookEventName)continue;let W=Q.hookEventName,J=Z[W]??[];J.push(KE(Q.path)),Z[W]=J}return Z}async function AE($){let Z;for(let Q of $.commands){let W=Q.join(" ");try{let J=await kG($.payload,{command:Q,cwd:$.cwd,env:WJ(process.env),detached:!1,timeoutMs:$.timeoutMs});if(J?.timedOut){lZ($.logger,`hook command timed out: ${W}`);continue}if(J?.parseError){lZ($.logger,`hook command returned invalid JSON control output: ${W} (${J.parseError})`);continue}Z=XE(Z,YE(J?.parsedJson))}catch(J){lZ($.logger,`hook command failed: ${W}`,J)}}return Z}function T2($){for(let Z of $.commands){let Q=Z.join(" ");kG($.payload,{command:Z,cwd:$.cwd,env:WJ(process.env),detached:!0}).catch((W)=>{lZ($.logger,`hook command failed: ${Q}`,W)})}}function w$($){return{agentId:$.agentId,conversationId:$.conversationId??$.runId??$.agentId,parentAgentId:$.parentAgentId??null}}function QJ($,Z){return{...w$($.snapshot),userMessage:Z}}function xG($){return{...w$($.snapshot),iteration:$.snapshot.iteration,call:{id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:$.input}}}function gG($){return{...w$($.snapshot),iteration:$.snapshot.iteration,record:{id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:$.input,output:$.result.output,error:$.result.isError?String($.result.output):void 0,durationMs:$.durationMs,startedAt:$.startedAt,endedAt:$.endedAt}}}function mG($){return $.filter((Z)=>Z.type==="text"&&typeof Z.text==="string").map((Z)=>Z.text).join("")}function fE($){if(!$)return;let Z={};if($.cancel===!0)Z.stop=!0;if($.overrideInput!==void 0)Z.input=$.overrideInput;return Object.keys(Z).length>0?Z:void 0}function c8($){let Z={cwd:$.workspacePath,workspacePath:$.workspacePath,rootSessionId:$.rootSessionId,workspaceInfo:$.workspaceInfo},Q=(W)=>{let J=`${JSON.stringify({ts:new Date().toISOString(),...W})}
478
- `,Y=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??JE(bG(),"hooks.jsonl");bG(Y),QE(Y,J,"utf8")};return{beforeRun:async(W)=>{let J=QJ(W,"");Q({...O0(J,Z),hookName:"agent_start",taskStart:{taskMetadata:{}}});return},beforeTool:async(W)=>{let J=xG(W);Q({...O0(J,Z),hookName:"tool_call",iteration:J.iteration,tool_call:{id:J.call.id,name:J.call.name,input:J.call.input},preToolUse:{toolName:J.call.name,parameters:pZ(J.call.input)}});return},afterTool:async(W)=>{let J=gG(W);Q({...O0(J,Z),hookName:"tool_result",iteration:J.iteration,tool_result:J.record,postToolUse:{toolName:J.record.name,parameters:pZ(J.record.input),result:typeof J.record.output==="string"?J.record.output:JSON.stringify(J.record.output),success:!J.record.error,executionTimeMs:J.record.durationMs}});return},afterRun:async({snapshot:W,result:J})=>{let X=w$(W);if(J.status==="completed"){Q({...O0(X,Z),hookName:"agent_end",iteration:J.iterations,turn:{outputText:J.outputText,status:J.status},taskComplete:{taskMetadata:{}}});return}if(J.status==="aborted"||ZJ(J.error?.message)){Q({...O0(X,Z),hookName:"agent_abort",reason:J.error?.message,taskCancel:{taskMetadata:{}}});return}if(J.error)Q({...O0(X,Z),hookName:"agent_error",iteration:J.iterations,error:{name:J.error.name,message:J.error.message,stack:J.error.stack}})},onEvent:async(W)=>{if(W.type!=="message-added"||W.message.role!=="user")return;let J=QJ({snapshot:W.snapshot},mG(W.message.content));Q({...O0(J,Z),hookName:"prompt_submit",userPromptSubmit:{prompt:J.userMessage,attachments:[]}})}}}function t6($){let Z=FE($.workspacePath);if(!Object.values(Z).some((G)=>G.length>0))return;let W=async(G,K)=>{let F=Z[K]??[];if(F.length===0)return;T2({commands:F,cwd:$.cwd,logger:$.logger,payload:K==="agent_resume"?{...O0(G,$),hookName:K,taskResume:{taskMetadata:{},previousState:{}}}:{...O0(G,$),hookName:K,taskStart:{taskMetadata:{}}}})},J=async(G)=>{let K=Z.prompt_submit??[];if(K.length>0)T2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...O0(G,$),hookName:"prompt_submit",userPromptSubmit:{prompt:G.userMessage,attachments:[]}}})},X=async(G)=>{let K=Z.tool_call??[];if(K.length===0)return;return AE({commands:K,cwd:$.cwd,logger:$.logger,timeoutMs:$.toolCallTimeoutMs??120000,payload:{...O0(G,$),hookName:"tool_call",iteration:G.iteration,tool_call:{id:G.call.id,name:G.call.name,input:G.call.input},preToolUse:{toolName:G.call.name,parameters:pZ(G.call.input)}}})},Y=async(G)=>{let K=Z.tool_result??[];if(K.length===0)return;T2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...O0(G,$),hookName:"tool_result",iteration:G.iteration,tool_result:G.record,postToolUse:{toolName:G.record.name,parameters:pZ(G.record.input),result:typeof G.record.output==="string"?G.record.output:JSON.stringify(G.record.output),success:!G.record.error,executionTimeMs:G.record.durationMs}}})},j=async(G)=>{let K=Z.agent_end??[];if(K.length===0)return;T2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...O0(G,$),hookName:"agent_end",iteration:G.iteration,turn:G.turn,taskComplete:{taskMetadata:{}}}})},V=async(G)=>{let K=Z.agent_error??[];if(K.length===0)return;T2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...O0(G,$),hookName:"agent_error",iteration:G.iteration,error:{name:G.error.name,message:G.error.message,stack:G.error.stack}}})},H=async(G)=>{if(ZJ(G.reason)){let F=Z.agent_abort??[];if(F.length>0)T2({commands:F,cwd:$.cwd,logger:$.logger,payload:{...O0(G,$),hookName:"agent_abort",reason:G.reason,taskCancel:{taskMetadata:{}}}})}let K=Z.session_shutdown??[];if(K.length===0)return;T2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...O0(G,$),hookName:"session_shutdown",reason:G.reason}})},B={};if((Z.agent_start?.length??0)>0||(Z.agent_resume?.length??0)>0||(Z.prompt_submit?.length??0)>0){if((Z.agent_start?.length??0)>0||(Z.agent_resume?.length??0)>0)B.beforeRun=async(G)=>{let K=process.env.CLINE_HOOK_AGENT_RESUME==="1"?"agent_resume":"agent_start";await W(w$(G.snapshot),K);return};if((Z.prompt_submit?.length??0)>0)B.onEvent=async(G)=>{if(G.type!=="message-added"||G.message.role!=="user")return;await J(QJ({snapshot:G.snapshot},mG(G.message.content)))}}if((Z.tool_call?.length??0)>0)B.beforeTool=async(G)=>{let K=await X(xG(G));return fE(K)};if((Z.tool_result?.length??0)>0)B.afterTool=async(G)=>{await Y(gG(G));return};if((Z.agent_end?.length??0)>0)B.afterRun=async({snapshot:G,result:K})=>{if(K.status!=="completed")return;await j({...w$(G),iteration:K.iterations,turn:{outputText:K.outputText,status:K.status}})};if((Z.agent_error?.length??0)>0||(Z.agent_abort?.length??0)>0||(Z.session_shutdown?.length??0)>0){let G=B.afterRun;B.afterRun=async(K)=>{await G?.(K);let{snapshot:F,result:A}=K;if(A.status==="aborted"||ZJ(A.error?.message)){await H({...w$(F),reason:A.error?.message});return}if(A.error)await V({...w$(F),iteration:A.iterations,error:A.error})}}return B}function u8($){return m8("core.hook_config_files",t6($))}function O2($,Z){let Q=$.map((W)=>W[Z]).filter((W)=>typeof W==="function");if(Q.length===0)return;return async(W)=>{let J;for(let X of Q){let Y=await X(W);if(!Y||typeof Y!=="object")continue;let j=Y;J={...J??{},...j,stop:J?.stop===!0||j.stop===!0?!0:j.stop,options:J?.options||j.options?{...J?.options??{},...j.options??{}}:void 0}}return J}}function q2($){let Z=$.filter((Q)=>Q!==void 0);if(Z.length===0)return;return{beforeRun:O2(Z,"beforeRun"),afterRun:O2(Z,"afterRun"),beforeModel:O2(Z,"beforeModel"),afterModel:O2(Z,"afterModel"),beforeTool:O2(Z,"beforeTool"),afterTool:O2(Z,"afterTool"),onEvent:O2(Z,"onEvent")}}var vG={};N(vG,{normalizeRuntimeCapabilities:()=>q0});function q0(...$){let Z,Q;for(let J of $){if(!J)continue;if(J.toolExecutors)Z={...Z??{},...J.toolExecutors};if(J.requestToolApproval)Q=J.requestToolApproval}let W=Z&&Object.keys(Z).length>0;if(!W&&!Q)return;return{...W?{toolExecutors:Z}:{},...Q?{requestToolApproval:Q}:{}}}var aG={};N(aG,{toProviderConfig:()=>l0,emptyStoredProviderSettings:()=>S$,StoredProviderSettingsSchema:()=>r8,StoredProviderSettingsEntrySchema:()=>AQ,ProviderSettingsSchemaTyped:()=>p8});import{z as P$}from"zod";var nG={};N(nG,{toProviderConfig:()=>l0,safeParseSettings:()=>FQ,safeCreateProviderConfig:()=>FJ,parseSettings:()=>KQ,normalizeProviderId:()=>l8,isBuiltInProviderId:()=>GJ,createProviderConfig:()=>KJ,SapSettingsSchema:()=>HQ,ReasoningSettingsSchema:()=>XQ,ProviderSettingsSchema:()=>C$,ProviderProtocolSchema:()=>QQ,ProviderIdSchema:()=>W5,ProviderClientSchema:()=>WQ,OcaSettingsSchema:()=>BQ,ModelCatalogSettingsSchema:()=>GQ,GcpSettingsSchema:()=>jQ,BUILT_IN_PROVIDER_IDS:()=>BJ,BUILT_IN_PROVIDER:()=>Q5,AzureSettingsSchema:()=>VQ,AwsSettingsSchema:()=>YQ,AuthSettingsSchema:()=>JQ});import*as d0 from"@cline/llms";import{z as w}from"zod";var iG={};N(iG,{resolveProviderConfig:()=>Z5,getProviderConfig:()=>ZQ,getLiveModelsCatalog:()=>d8,clearPublicModelsCatalogCache:()=>gE,clearPrivateModelsCatalogCache:()=>HJ,clearLiveModelsCatalogCache:()=>VJ,OPENAI_COMPATIBLE_PROVIDERS:()=>$5,DEFAULT_MODELS_CATALOG_URL:()=>oZ});import*as s from"@cline/llms";function JJ($){if(!Array.isArray($))return[];return $.map((Z)=>{if(typeof Z==="string")return Z.trim();if(Z&&typeof Z==="object"){let Q=Z;for(let W of[Q.id,Q.name,Q.model])if(typeof W==="string"&&W.trim())return W.trim()}return""}).filter((Z)=>Z.length>0)}function UE($,Z){let Q=JJ($);if(Q.length>0)return Q;if(!$||typeof $!=="object")return[];let W=$,J=JJ(W.data??W.models);if(J.length>0)return J;if(W.models&&typeof W.models==="object"&&!Array.isArray(W.models)){let Y=Object.keys(W.models).filter((j)=>j.trim().length>0);if(Y.length>0)return Y}let X=W.providers?.[Z];if(X&&typeof X==="object"){let j=JJ(X.models??X);if(j.length>0)return j}return[]}async function rZ($,Z){let Q=await fetch($,{method:"GET"});if(!Q.ok)throw Error(`failed to fetch models from ${$}: HTTP ${Q.status}`);return UE(await Q.json(),Z)}function cG($){return $.replace(/\/+$/,"")}function iZ($,Z,Q){let W=Q?.trim();if(!W)return;let J=$?.trim();if(!J||!Z?.trim())return W;try{let X=new URL(W),Y=new URL(Z),j=new URL(J);if(X.origin!==Y.origin)return W;let V=cG(Y.pathname),H=cG(j.pathname);if(V&&X.pathname.startsWith(`${V}/`)){let B=X.pathname.slice(V.length);j.pathname=`${H}${B}`}else j.pathname=X.pathname;return j.search=X.search,j.hash=X.hash,j.toString()}catch{return W}}function DE($){return Object.fromEntries(Object.entries($).map(([Z,Q])=>[Z,{...Q}]))}function LE($){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 _E=Object.values(s.MODEL_COLLECTIONS_BY_PROVIDER_ID).map(($)=>({id:$.provider.id,baseUrl:$.provider.baseUrl??"",modelsSourceUrl:$.provider.modelsSourceUrl,modelId:$.provider.defaultModelId,knownModels:DE($.models),capabilities:$.provider.capabilities?[...$.provider.capabilities]:void 0,env:$.provider.env?[...$.provider.env]:void 0,client:$.provider.client,protocol:$.provider.protocol})),dG=Object.fromEntries(_E.map(($)=>[$.id,$]));function zE($){return dG[$]}function TE(){return Object.fromEntries(Object.entries(dG).filter(([,$])=>LE($)))}function lG($=[]){let Z=$.flatMap((Q)=>{switch(Q){case"reasoning":case"prompt-cache":case"tools":case"oauth":return[Q];default:return[]}});return Z.length>0?Z:void 0}var oZ="https://models.dev/api.json",OE=600000,pG=300000,qE=5000,sZ=new Map,e6=new Map,XJ=new Map,nZ=new Map;async function ME(){return s.getGeneratedProviderModels()}async function RE($,Z={},Q={},W={},J={},X={}){if($==="litellm")return s.sortModelsByReleaseDate(W);let Y=await ME(),j=s.resolveProviderModelCatalogKeys($),V=Object.assign({},...j.map((K)=>Y[K]??{})),H=Boolean(s.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl),B=Object.keys(J).length>0;if(H&&B)return s.sortModelsByReleaseDate({...J,...X});if($==="openai-codex")return s.sortModelsByReleaseDate({...Z,...s.filterOpenAICodexModels(Q),...J,...X});if($==="cline-pass"&&Object.keys(Q).length>0)return s.sortModelsByReleaseDate({...Q,...X});let G=s.sortModelsByReleaseDate({...V,...Z,...Q,...W,...J});if($==="cline")return s.sortModelsByReleaseDate({...s.preferCanonicalModelIds(G,s.VERCEL_OPENROUTER_MODEL_ID_ALIAS_RULES),...X});return s.sortModelsByReleaseDate({...G,...X})}function EE($,Z){let Q=s.resolveProviderModelCatalogKeys($);return Object.assign({},...Q.map((W)=>Z[W]??{}))}function tZ($){let Z=$?.trim();return Z&&Z.length>0?Z:""}function jJ($){let Z=$.apiKey?.trim()||$.accessToken?.trim();return Z&&Z.length>0?Z:void 0}function NE($){let Z=2166136261;for(let Q=0;Q<$.length;Q+=1)Z^=$.charCodeAt(Q),Z+=(Z<<1)+(Z<<4)+(Z<<7)+(Z<<8)+(Z<<24);return(Z>>>0).toString(16)}function wE($,Z){return`${$}:${tZ(Z.baseUrl)}:${NE(jJ(Z)??"")}`}async function eZ($,Z,Q=qE){let W=new AbortController,J=setTimeout(()=>W.abort(),Q);try{return await fetch($,{...Z,signal:W.signal})}finally{clearTimeout(J)}}function M2($,Z,Q){if(Q&&!$.includes(Z))$.push(Z)}function $Q($,Z){let Q=["streaming","tools"];return M2(Q,"images",Boolean(Z.supportsImages)),M2(Q,"prompt-cache",Boolean(Z.supportsPromptCache)),M2(Q,"reasoning",Boolean(Z.supportsReasoning)),{id:$,name:Z.name??$,contextWindow:Z.contextWindow,maxInputTokens:Z.maxInputTokens,maxTokens:Z.maxTokens,capabilities:Q,releaseDate:Z.releaseDate,status:"active"}}async function CE($,Z){let Q=await eZ("https://inference.baseten.co/v1/models",{method:"GET",headers:{Authorization:`Bearer ${Z}`,"Content-Type":"application/json"}});if(!Q.ok)throw Error(`Baseten model refresh failed: HTTP ${Q.status}`);let J=(await Q.json())?.data??[],X={};for(let Y of J){let j=Y.id?.trim();if(!j)continue;if(j.includes("whisper")||j.includes("tts")||j.includes("embedding"))continue;let V=Y.supported_features??[];X[j]=$Q(j,{name:j,contextWindow:Y.context_length,maxInputTokens:Y.context_length,maxTokens:Y.max_completion_tokens,supportsReasoning:V.includes("reasoning")||V.includes("reasoning_effort"),supportsImages:!1})}return X}function uG($){if(typeof $==="number")return Number.isFinite($)?$:void 0;if(typeof $==="string"){let Z=Number($);return Number.isFinite(Z)?Z:void 0}return}async function PE($,Z){let Q=await eZ("https://api.hicap.ai/v2/openai/models",{method:"GET",headers:{"api-key":Z}});if(!Q.ok)throw Error(`Hicap model refresh failed: HTTP ${Q.status}`);let J=(await Q.json())?.data??[],X={};for(let Y of J){let j=Y.id?.trim();if(!j)continue;X[j]=$Q(j,{name:j,maxInputTokens:128000,supportsImages:!0,supportsPromptCache:!0})}return X}async function SE($,Z){let W=`${(tZ($.baseUrl)||"https://inference.poolside.ai/v1").replace(/\/+$/,"")}/models`,J=await eZ(W,{method:"GET",headers:{Authorization:`Bearer ${Z}`,accept:"application/json"}});if(!J.ok)throw Error(`Poolside model refresh failed: HTTP ${J.status}`);let Y=(await J.json())?.data??[],j={};for(let V of Y){let H=V.id?.trim();if(!H)continue;let B=V.supported_features??[],G=V.supported_sampling_parameters??[],K=V.input_modalities??[],F=["streaming"];M2(F,"tools",B.includes("tools")),M2(F,"reasoning",B.includes("reasoning")),M2(F,"temperature",G.includes("temperature")),M2(F,"images",K.includes("image"));let A={input:uG(V.pricing?.prompt),output:uG(V.pricing?.completion)};j[H]={id:H,name:V.name??H,description:V.description,contextWindow:V.context_length,maxInputTokens:V.context_length,maxTokens:V.max_completion_tokens,capabilities:F,pricing:A.input!==void 0||A.output!==void 0?A:void 0,status:"active"}}return j}function bE($){let Z=tZ($).replace(/\/+$/,"");if(!Z)return"http://localhost:4000";return Z.endsWith("/v1")?Z.slice(0,-3):Z}function yE($){return[`${$}/v1/model/info`,`${$}/model/info`]}async function hE($){let Z=(await $.text().catch(()=>"")).replace(/\s+/g," ").trim(),Q=500,W=Z?`: ${Z.slice(0,500)}${Z.length>500?"...":""}`:"";return`HTTP ${$.status}${W}`}async function kE($,Z){let Q=bE($.baseUrl),W=[],J=[["x-litellm-api-key",{"x-litellm-api-key":Z}],["Authorization",{Authorization:`Bearer ${Z}`}]];for(let X of yE(Q))for(let[Y,j]of J)try{let V=await eZ(X,{method:"GET",headers:{accept:"application/json",...j}});if(V.ok){let B=(await V.json())?.data??[],G={};for(let K of B){let F=K.model_name?.trim(),L=K.litellm_params?.model?.trim()||F;if(!L)continue;let f=K.model_info,D=$Q(L,{name:F??L,maxTokens:f?.max_output_tokens??f?.max_tokens,maxInputTokens:f?.max_input_tokens??f?.max_tokens,supportsImages:f?.supports_vision,supportsPromptCache:f?.supports_prompt_caching,supportsReasoning:f?.supports_reasoning});if(G[L]=D,F)G[F]={...D,id:F,name:F}}return G}W.push(`${new URL(X).pathname} (${Y}): ${await hE(V)}`)}catch(V){let H=V instanceof Error?V.message:String(V);W.push(`${new URL(X).pathname} (${Y}): ${H}`)}throw Error(`LiteLLM model refresh failed. Attempts: ${W.join("; ")}`)}var rG={baseten:CE,hicap:PE,litellm:kE,poolside:SE},YJ=new Map,aZ=new Map;function IE($,Z){return`${$}:${tZ(Z.baseUrl)}`}async function xE($,Z,Q){let W=s.MODEL_COLLECTIONS_BY_PROVIDER_ID[$],J=iZ(Q.baseUrl,W?.provider.baseUrl,W?.provider.modelsSourceUrl);if(!J)return{};let X=Z?.cacheTtlMs??pG,Y=IE($,Q),j=Date.now(),V=YJ.get(Y);if(V&&V.expiresAt>j)return V.data;let H=aZ.get(Y);if(H)return H;let B=rZ(J,$).then((G)=>{let K=Object.fromEntries(G.map((F)=>[F,$Q(F,{name:F})]));return YJ.set(Y,{data:K,expiresAt:j+X}),K}).finally(()=>{aZ.delete(Y)});return aZ.set(Y,B),B}function gE(){YJ.clear(),aZ.clear()}async function mE($,Z){let Q=jJ(Z);if(!Q)return{};let W=rG[$];if(!W)return{};return W(Z,Q)}function vE($,Z,Q){if(!Q)return!1;if(!rG[$])return!1;if(Z?.loadPrivateOnAuth===!1)return!1;return Boolean(jJ(Q))}async function cE($,Z,Q){let W=Z?.cacheTtlMs??pG,J=wE($,Q),X=Date.now(),Y=XJ.get(J);if(Y&&Y.expiresAt>X)return Y.data;let j=nZ.get(J);if(j)return j;let V=mE($,Q).then((H)=>{return XJ.set(J,{data:H,expiresAt:X+W}),H}).finally(()=>{nZ.delete(J)});return nZ.set(J,V),V}async function uE($){return s.fetchLiveProviderModels($,globalThis.fetch)}async function d8($={}){let Z=$.url??oZ,Q=$.cacheTtlMs??OE,W=Date.now(),J=sZ.get(Z);if(J&&J.expiresAt>W)return J.data;let X=e6.get(Z);if(X)return X;let Y=uE(Z).then((j)=>{return sZ.set(Z,{data:j,expiresAt:W+Q}),j}).finally(()=>{e6.delete(Z)});return e6.set(Z,Y),Y}function VJ($){if($){sZ.delete($),e6.delete($);return}sZ.clear(),e6.clear()}function HJ(){XJ.clear(),nZ.clear()}function dE($){return Object.fromEntries(Object.entries($).map(([Z,Q])=>[Z,{baseUrl:Q.baseUrl,modelId:Q.modelId,capabilities:lG(Q.capabilities)}]))}var $5=dE(TE());function ZQ($){let Z=zE($);if(!Z)return;return{baseUrl:Z.baseUrl||void 0,modelId:Z.modelId,knownModels:Z.knownModels,capabilities:lG(Z.capabilities)}}async function Z5($,Z,Q){let W=ZQ($);if(!W)return;try{let J=Z?.loadLatestOnInit?await d8(Z):void 0,X=J?EE($,J):{},Y=Q&&vE($,Z,Q)?await cE($,Z,Q):{},V=Boolean(s.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl)?Q??{providerId:$,modelId:W.modelId,baseUrl:W.baseUrl}:Q,H=V?await xE($,Z,V).catch(()=>({})):{},B=await RE($,W.knownModels,X,Y,H,Q?.knownModels);return{...W,knownModels:B}}catch(J){if(Z?.failOnError)throw J;if($==="litellm")return{...W,knownModels:{}};return W}}var Q5=d0.BUILT_IN_PROVIDER,BJ=d0.BUILT_IN_PROVIDER_IDS,GJ=d0.isBuiltInProviderId,l8=d0.normalizeProviderId,W5=w.string().min(1).regex(/^[a-z0-9][a-z0-9-]*$/i),QQ=w.enum(["anthropic","gemini","openai-chat","openai-responses","openai-r1","ai-sdk"]),WQ=w.enum(["anthropic","ai-sdk","ai-sdk-community","openai","openai-compatible","openai-r1","gemini","bedrock","custom","fetch","vertex"]),JQ=w.object({apiKey:w.string().optional(),accessToken:w.string().optional(),refreshToken:w.string().optional(),expiresAt:w.number().int().positive().optional(),accountId:w.string().optional()}),lE=w.enum(["none","low","medium","high","xhigh"]),XQ=w.object({enabled:w.boolean().optional(),effort:lE.optional(),budgetTokens:w.number().int().positive().optional()}),YQ=w.object({accessKey:w.string().optional(),secretKey:w.string().optional(),sessionToken:w.string().optional(),region:w.string().optional(),profile:w.string().optional(),authentication:w.enum(["iam","api-key","apikey","profile"]).optional(),usePromptCache:w.boolean().optional(),useCrossRegionInference:w.boolean().optional(),useGlobalInference:w.boolean().optional(),endpoint:w.string().url().optional(),customModelBaseId:w.string().optional()}),jQ=w.object({projectId:w.string().optional(),region:w.string().optional()}),VQ=w.object({apiVersion:w.string().optional(),useIdentity:w.boolean().optional()}),HQ=w.object({clientId:w.string().optional(),clientSecret:w.string().optional(),tokenUrl:w.string().url().optional(),resourceGroup:w.string().optional(),deploymentId:w.string().optional(),useOrchestrationMode:w.boolean().optional(),api:w.enum(["orchestration","foundation-models"]).optional(),defaultSettings:w.record(w.string(),w.unknown()).optional()}),BQ=w.object({mode:w.enum(["internal","external"]).optional(),usePromptCache:w.boolean().optional()}),GQ=w.object({loadLatestOnInit:w.boolean().optional(),loadPrivateOnAuth:w.boolean().optional(),url:w.string().url().optional(),cacheTtlMs:w.number().int().positive().optional(),failOnError:w.boolean().optional()}),C$=w.object({provider:W5,apiKey:w.string().optional(),auth:JQ.optional(),model:w.string().optional(),protocol:QQ.optional(),client:WQ.optional(),routingProviderId:W5.optional(),maxTokens:w.number().int().positive().optional(),contextWindow:w.number().int().positive().optional(),baseUrl:w.string().url().optional(),headers:w.record(w.string(),w.string()).optional(),timeout:w.number().int().positive().optional(),reasoning:XQ.optional(),aws:YQ.optional(),gcp:jQ.optional(),azure:VQ.optional(),sap:HQ.optional(),oca:BQ.optional(),region:w.string().optional(),apiLine:w.enum(["china","international"]).optional(),capabilities:w.array(w.enum(["reasoning","prompt-cache","streaming","tools","vision","computer-use","oauth","popular"])).optional(),modelCatalog:GQ.optional()});function KQ($){return C$.parse($)}function FQ($){return C$.safeParse($)}function pE($){return $.protocol==="openai-responses"||$.client==="openai"}function l0($,Z={}){let Q=$.provider,W=l8(Q),J=Z.includeKnownModels!==!1,X=$.reasoning?.effort||"none",Y=X==="none"?void 0:X,j=$5[W],V=Object.assign({},...d0.resolveProviderModelCatalogKeys(W).map((L)=>d0.getGeneratedModelsForProvider(L))),H=Object.keys(V)[0],B=U8(W,$),G=$.baseUrl??(W==="oca"?$.oca?.mode==="internal"?jZ:VZ:j?.baseUrl),K=$.routingProviderId??(pE($)&&W!==Q5.OPENAI_NATIVE?Q5.OPENAI_NATIVE:void 0),F=J?j?.knownModels??(Object.keys(V).length>0?V:void 0):void 0,A={providerId:Q,clientType:$.client,routingProviderId:K,modelId:$.model??j?.modelId??H??"default",...J?{knownModels:F}:{},apiKey:B,accessToken:$.auth?.accessToken,refreshToken:$.auth?.refreshToken,accountId:$.auth?.accountId,baseUrl:G,headers:$.headers,timeoutMs:$.timeout,maxOutputTokens:$.maxTokens,maxInputTokens:$.contextWindow,thinking:$.reasoning?.enabled,reasoningEffort:Y,thinkingBudgetTokens:$.reasoning?.budgetTokens,region:$.region??$.aws?.region??$.gcp?.region,apiLine:$.apiLine,useCrossRegionInference:$.aws?.useCrossRegionInference,useGlobalInference:$.aws?.useGlobalInference,aws:$.aws?{accessKey:$.aws.accessKey,secretKey:$.aws.secretKey,sessionToken:$.aws.sessionToken,authentication:$.aws.authentication,profile:$.aws.profile,usePromptCache:$.aws.usePromptCache,endpoint:$.aws.endpoint,customModelBaseId:$.aws.customModelBaseId}:void 0,gcp:$.gcp?{projectId:$.gcp.projectId,region:$.gcp.region}:void 0,azure:$.azure,sap:$.sap,oca:$.oca,capabilities:$.capabilities??j?.capabilities,modelCatalog:$.modelCatalog?{loadLatestOnInit:$.modelCatalog.loadLatestOnInit,loadPrivateOnAuth:$.modelCatalog.loadPrivateOnAuth,url:$.modelCatalog.url,cacheTtlMs:$.modelCatalog.cacheTtlMs,failOnError:$.modelCatalog.failOnError}:void 0};return Object.fromEntries(Object.entries(A).filter(([L,f])=>f!==void 0))}function KJ($){let Z=KQ($);return l0(Z)}function FJ($){let Z=FQ($);if(Z.success)return{success:!0,config:l0(Z.data)};return{success:!1,error:Z.error}}var p8=C$;var AQ=P$.object({settings:C$,updatedAt:P$.string().datetime(),tokenSource:P$.enum(["manual","oauth","migration"]).default("manual")}),r8=P$.object({version:P$.literal(1),lastUsedProvider:P$.string().min(1).optional(),providers:P$.record(P$.string(),AQ)});function S$(){return{version:1,providers:{}}}$1();var sG={};N(sG,{InMemoryWorkspaceManager:()=>i8});import{upsertWorkspaceInfo as rE,WorkspaceManifestSchema as AJ}from"@cline/shared";class i8{manifest;listeners=new Set;constructor($){this.manifest=AJ.parse($??{workspaces:{}})}async addWorkspacePath($){let Z=await e2($);return this.manifest=rE(this.manifest,Z),this.emit({type:"workspace_added",workspace:Z}),Z}async switchWorkspace($){let Z=N1($),Q=this.manifest.workspaces[Z];if(Q)return this.manifest=AJ.parse({...this.manifest,currentWorkspacePath:Z}),this.emit({type:"workspace_switched",workspace:Q}),Q;let W=await this.addWorkspacePath(Z);return this.manifest=AJ.parse({...this.manifest,currentWorkspacePath:W.rootPath}),this.emit({type:"workspace_switched",workspace:W}),W}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}getCurrentWorkspace(){let $=this.manifest.currentWorkspacePath;if(!$)return;return this.manifest.workspaces[$]}getWorkspace($){let Z=N1($);return this.manifest.workspaces[Z]}listWorkspaces(){return Object.values(this.manifest.workspaces)}getManifest(){return this.manifest}emit($){for(let Z of this.listeners)Z($)}}_0();import{createHash as iE}from"node:crypto";var oG=new Set,tG=new Set;function nE($){return iE("sha256").update($).digest("hex")}function aE($){if($.vcsTypes&&$.vcsTypes.length>0)return $.vcsTypes;return[$.vcsType==="git"?"git":"none"]}function eG($){if(!$.telemetry)return;let Z=nE($.rootPath),Q=$.rootCount??1;if(!oG.has(Z))oG.add(Z),T9($.telemetry,{root_count:Q,vcs_types:aE($),init_duration_ms:$.durationMs,feature_flag_enabled:$.featureFlagEnabled??!0,is_remote_workspace:$.isRemoteWorkspace});if($.initError&&!tG.has(Z)){tG.add(Z);let W=Error($.initError.message);W.name=$.initError.errorType||"Error",O9($.telemetry,W,{fallback_to_single_root:!0,workspace_count:Q})}}function oE($){return`${$.pluginName??$.pluginPath}: ${$.message}`}function tE($,Z,Q){if(Z.length>0)for(let X of Z)Q?.log(X.message,{severity:"warn"});if($.length===0)return;let W=$.slice(0,3).map(oE).join("; "),J=$.length>3?`; and ${$.length-3} more`:"";Q?.log(`Some plugins failed to initialize. ${W}${J}. Use --verbose for more details.`,{severity:"warn"});for(let X of $)Q?.log(`Plugin initialization failed (${X.phase}) for ${X.pluginPath}`,{severity:"warn",stack:X.stack,pluginPath:X.pluginPath,pluginName:X.pluginName})}function eE($,Z){let Q=typeof $.thinking==="boolean",W=typeof $.reasoningEffort==="string";if(!Q&&!W)return Z;return{...Z??{},...Q?{enabled:$.thinking}:{},...W?{effort:$.reasoningEffort}:{}}}function $K($,Z){return sE($,Z)}function $N($){let Z=0;for(let Q of $??[]){if(Q.role!=="user")continue;if(("metadata"in Q&&Q.metadata&&typeof Q.metadata==="object"&&!Array.isArray(Q.metadata)?Q.metadata:void 0)?.kind==="recovery_notice")continue;Z+=1}return Z}function ZN($){let Z={...$.storedHeaders??{},...$.configHeaders??{}},Q=$.accountId?.trim()||QN($.accessToken);if(Z.originator="cline",Z.session_id=$.sessionId,Z["User-Agent"]=`Cline/${process.env.npm_package_version||"1.0.0"}`,Q)Z["ChatGPT-Account-Id"]=Q;return Z}function QN($){let Z=$?.trim();if(!Z)return;let Q=E0(Z),W=Q?.["https://api.openai.com/auth"]?.chatgpt_account_id;if(typeof W==="string"&&W.length>0)return W;let J=Q?.organizations?.[0]?.id;if(typeof J==="string"&&J.length>0)return J;let X=Q?.chatgpt_account_id;if(typeof X==="string"&&X.length>0)return X;return}function WN($,Z,Q,W,J){let X=Q.getProviderSettings($.providerId),Y=W||X?.modelCatalog?{...W??{},...X?.modelCatalog??{}}:void 0,j=$.providerConfig?.providerId===$.providerId?$.providerConfig:void 0,V={...X??{},provider:$.providerId,model:$.modelId,apiKey:$.apiKey??X?.apiKey,baseUrl:$.baseUrl??X?.baseUrl,headers:$.providerId==="openai-codex"?ZN({sessionId:Z,configHeaders:$.headers,storedHeaders:X?.headers,accountId:X?.auth?.accountId,accessToken:$.apiKey??X?.auth?.accessToken??X?.apiKey}):$.headers??X?.headers,reasoning:eE($,X?.reasoning),modelCatalog:Y},H={...l0(V),...j??{}};if($.knownModels)H.knownModels=$.knownModels;if($.extensionContext)H.extensionContext=$.extensionContext;let G=$.fetch??H.fetch??J;if(G)H.fetch=G;return H}async function ZK($){let{input:Z,sessionId:Q,providerSettingsManager:W,defaultTelemetry:J,defaultCapabilities:X,defaultToolPolicies:Y,defaultFetch:j,onPluginEvent:V,onTeamEvent:H,createSubAgentLifecycleCallbacks:B,createSpawnTool:G,localRuntime:K,readSessionMetadata:F,writeSessionMetadata:A}=$,L=R$(Z.config),{modelCatalogDefaults:f,userInstructionService:D,configExtensions:U,onTeamRestored:T,...O}=K??{},z=Object.keys(O).length>0?O:void 0,{workspaceInfo:_,workspaceMetadata:E,durationMs:C,vcsType:y,initError:l}=await WW(L),o=z?.extensionContext,t={...o??{},workspace:{..._,...o?.workspace??{}},session:{...o?.session??{},sessionId:Q},logger:o?.logger??z?.logger,telemetry:o?.telemetry??z?.telemetry??J};eG({telemetry:t.telemetry,rootPath:_.rootPath,workspaceInfo:_,rootCount:1,vcsType:y,durationMs:C,initError:l,featureFlagEnabled:!0});let Q0=u8({cwd:Z.config.cwd,workspacePath:L,rootSessionId:Q,logger:z?.logger,workspaceInfo:_}),e0=eB(z?.hooks)?void 0:c8({rootSessionId:Q,workspacePath:L,workspaceInfo:_}),l$=q2([z?.hooks,e0]),r;if($K(U,"plugins"))try{r=await g8({pluginPaths:z?.pluginPaths,workspacePath:L,cwd:Z.config.cwd,onEvent:V,providerId:Z.config.providerId,modelId:Z.config.modelId,workspaceInfo:_,session:t.session,client:t.client,user:t.user,logger:t.logger,telemetry:t.telemetry,automation:t.automation}),tE(r.failures,r.warnings,z?.logger)}catch(a2){let e7=a2 instanceof Error?a2.message:String(a2);z?.logger?.log?.(`plugin loading failed; continuing without plugins (${e7})`)}let P=b3(Q0?[Q0]:void 0,b3(z?.extensions,c9(r?.extensions))),B0=$K(U,"plugins")?n1(r?.pluginPaths??[]):void 0,G0={...Z.config,...z??{},sessionId:Q,hooks:l$,extensions:P,extensionContext:t,telemetry:t.telemetry},C0=WN(G0,Q,W,f,j),i2=q2([G0.hooks,G0.checkpoint?.enabled===!0?SG({cwd:G0.cwd,sessionId:Q,logger:G0.logger,createCheckpoint:G0.checkpoint?.createCheckpoint,initialRunCount:$N(Z.initialMessages),readSessionMetadata:F,writeSessionMetadata:A}):void 0]),M1={...G0,providerConfig:C0,workspaceMetadata:E,hooks:i2},H1=Z.toolPolicies??G0.toolPolicies??Y,C4=q0(X,Z.capabilities),n2=C4?.requestToolApproval,K9=C4?.toolExecutors,R1=B?.(M1),F9=new i8({currentWorkspacePath:_.rootPath,workspaces:{[_.rootPath]:_}});return{effectiveInput:Z,config:M1,providerConfig:C0,workspaceMetadata:E,workspaceInfo:_,extensions:P,hooks:i2,toolPolicies:H1,requestToolApproval:n2,pluginSandboxShutdown:r?.shutdown,runtimeBuilderInput:{config:M1,hooks:i2,extensions:P,onTeamEvent:H,createSpawnTool:G,onTeamRestored:T,onSubAgentEvent:R1?.onSubAgentEvent,onSubAgentStart:R1?.onSubAgentStart,onSubAgentEnd:R1?.onSubAgentEnd,userInstructionService:D,pluginSkillDirectories:B0,configExtensions:U,toolExecutors:K9,toolPolicies:H1,workspaceManager:F9,logger:M1.logger,telemetry:M1.telemetry,requestToolApproval:n2}}}import{existsSync as UQ,mkdirSync as JN,readdirSync as XN,rmdirSync as YN,rmSync as jN,unlinkSync as VN}from"node:fs";import{dirname as QK,join as fQ}from"node:path";function J0(){return new Date().toISOString()}function J5($){if(!$||!UQ($))return;try{VN($)}catch{}}function HN($){let Z=P8($);if(Z)return{rootSessionId:Z.rootSessionId,fileStem:`${Z.agentId}__${Z.teamTaskId}`};let Q=x6($);if(Q)return{rootSessionId:Q.rootSessionId,fileStem:Q.agentId};return{rootSessionId:$,fileStem:$}}class fJ{ensureSessionsDir;constructor($){this.ensureSessionsDir=$}sessionArtifactsDir($){return fQ(this.ensureSessionsDir(),$)}ensureSessionArtifactsDir($){let Z=this.sessionArtifactsDir($);if(!UQ(Z))JN(Z,{recursive:!0});return Z}sessionMessagesPath($){return fQ(this.sessionArtifactsDir($),`${$}.messages.json`)}sessionManifestPath($,Z=!1){let Q=Z?this.ensureSessionArtifactsDir($):this.sessionArtifactsDir($);return fQ(Q,`${$}.json`)}removeSessionDirIfEmpty($){let Z=this.sessionArtifactsDir($),Q=this.ensureSessionsDir();while(Z.startsWith(Q)&&Z!==Q){if(!UQ(Z)){Z=QK(Z);continue}try{if(XN(Z).length>0)break;YN(Z)}catch{break}Z=QK(Z)}}removeSessionDir($){this.removeDir(this.sessionArtifactsDir($))}removeDir($){if(!UQ($))return;try{jN($,{recursive:!0,force:!0})}catch{}}subagentArtifactPaths($,Z,Q){let{rootSessionId:W,fileStem:J}=HN($),X=this.sessionArtifactsDir(W);return{messagesPath:fQ(X,`${J}.messages.json`)}}}import{resolveDocumentsExtensionPath as BN}from"@cline/shared/storage";_0();function WK($,Z,Q,W,J){if(Q)M9($.telemetry,{ulid:Z,apiProvider:$.providerId,...J});else q9($.telemetry,{ulid:Z,apiProvider:$.providerId,...J});GN($.telemetry,{workspacePath:W})}function GN($,Z){let Q=BN("Hooks"),W=N$(Z.workspacePath),J=new Map;for(let X of W){let Y=X.hookEventName??"unknown",j=J.get(Y)??{global:0,workspace:0};if(X.path===Q||X.path.startsWith(`${Q}/`))j.global+=1;else j.workspace+=1;J.set(Y,j)}for(let[X,Y]of J.entries())y9($,X,Y.global,Y.workspace)}function JK($,Z){for(let Q of Z.mentions)S9($,Q,Z.matchedFiles.includes(Q)?1:0,"file",!Z.matchedFiles.includes(Q));for(let Q of Z.matchedFiles)C9($,"file",Q.length);for(let Q of Z.ignoredMentions)P9($,"file","not_found",Q)}var JU={};N(JU,{ProviderSettingsManager:()=>O1});import{chmodSync as BU,existsSync as RY,mkdirSync as yI,readFileSync as hI,writeFileSync as kI}from"node:fs";import{basename as GU,dirname as EY}from"node:path";import{resolveProviderSettingsPath as II}from"@cline/shared/storage";var M={};N(M,{writeHubDiscovery:()=>p9,writeGlobalSettings:()=>b1,withHubStartupLock:()=>r9,verifyHubConnection:()=>F1,updateMcpSettingsFileSync:()=>j1,updateMcpSettingsFile:()=>t8,updateMcpServerOAuthStateAsync:()=>O5,updateMcpServerOAuthState:()=>C2,updateLocalProvider:()=>b7,uninstallPlugin:()=>a5,uninstallMarketplaceSkill:()=>F7,uninstallMarketplacePlugin:()=>A7,uninstallMarketplaceMcpServerFromSettings:()=>G7,uninstallMarketplaceEntry:()=>dX,truncateNotificationBody:()=>J9,truncateCommandOutput:()=>X2,toggleDisabledTool:()=>m9,toTeamProgressLifecycleEvent:()=>H4,toProviderConfig:()=>l0,toHubStatusUrl:()=>TW,toHubHealthUrl:()=>i9,toHookConfigFileName:()=>o6,syncPluginMcpServersToSettings:()=>i5,summarizeUsageFromMessages:()=>b8,stopLocalHubServerGracefully:()=>yW,startLocalOAuthServer:()=>J1,startHubWebSocketServer:()=>j9,startHubServer:()=>jU,startClineDeviceAuth:()=>dW,splitCoreSessionConfig:()=>i4,spawnDetachedHubServerWithRetry:()=>H8,spawnDetachedHubServer:()=>NW,setTelemetryOptOutGlobally:()=>yj,setMcpServerDisabled:()=>N2,setDisabledTools:()=>AW,setDisabledPlugin:()=>mj,setAutoUpdateEnabledGlobally:()=>kj,sendHubCommand:()=>DV,saveProviderOAuthCredentials:()=>Q2,saveLocalProviderSettings:()=>WY,saveLocalProviderOAuthCredentials:()=>jY,sanitizeSessionToken:()=>U2,safeParseSettings:()=>FQ,safeCreateProviderConfig:()=>FJ,runSubprocessEvent:()=>U4,runHook:()=>L4,reviveTeamStateDates:()=>PZ,restartLocalHubIfIdleAfterStartupTimeout:()=>t9,resolveWorkspaceHubOwnerContext:()=>$V,resolveWorkflowsConfigSearchPaths:()=>f5,resolveSkillsConfigSearchPaths:()=>F5,resolveSharedHubOwnerContext:()=>Q1,resolveSessionBackend:()=>KX,resolveRulesConfigSearchPaths:()=>A5,resolveProviderConfig:()=>Z5,resolveProviderApiKeyFromSettings:()=>aW,resolveProductionHubOwnerContext:()=>K1,resolvePluginSkillDirectoriesFromPaths:()=>n1,resolvePluginConfigSearchPaths:()=>i6,resolveMcpServerRegistrations:()=>p0,resolveMarketplaceMcpServerName:()=>o5,resolveLocalClineAuthToken:()=>HY,resolveHubUrl:()=>hW,resolveHubOwnerContext:()=>x1,resolveHubEndpointOptions:()=>G1,resolveHubBuildId:()=>l9,resolveHooksConfigSearchPaths:()=>a6,resolveDisabledToolNames:()=>B1,resolveDisabledPluginPaths:()=>u4,resolveDefaultMcpSettingsPath:()=>Z0,resolveDefaultHubPort:()=>V8,resolveDefaultHubPathname:()=>EW,resolveDefaultHubHost:()=>RW,resolveCoreSelectedToolIds:()=>bZ,resolveCoreDistinctId:()=>P0,resolveCompatibleLocalHubUrl:()=>o4,resolveClineDir:()=>sj,resolveClineDataDir:()=>s$,resolveAndLoadAgentPlugins:()=>g8,resolveAgentPluginPaths:()=>i1,requestHubShutdown:()=>s4,requestDesktopToolApproval:()=>NX,removePluginMcpServersFromSettings:()=>n5,rememberRecoverableLocalHubUrl:()=>B$,registerRemoteConfigSessionBlobUpload:()=>Q7,registerMcpServersFromSettingsFile:()=>P2,registerDisposable:()=>CI,refreshProviderModelsFromSource:()=>JY,refreshOpenAICodexToken:()=>YZ,refreshOcaToken:()=>BZ,refreshClineToken:()=>JZ,readSessionCheckpointHistory:()=>k2,readRemoteConfigSessionBlobUploadMetadata:()=>LX,readHubDiscovery:()=>K0,readGlobalSettings:()=>M0,readBearerToken:()=>d7,probeHubServer:()=>g1,probeHubConnection:()=>UV,prewarmFileIndex:()=>zZ,prewarmDetachedHubServer:()=>a9,prepareRemoteConfigCoreIntegration:()=>zX,parseWorkflowConfigFromMarkdown:()=>K5,parseUserCommandEnvelope:()=>wI,parseSkillConfigFromMarkdown:()=>B5,parseSettings:()=>KQ,parseRuleConfigFromMarkdown:()=>G5,parsePluginSource:()=>q7,parseMcpInstallArgs:()=>r5,parseHookEventPayload:()=>D4,parseConfiguredAgentConfig:()=>I5,normalizeWorkspacePath:()=>N1,normalizeUserInput:()=>NI,normalizeSdkError:()=>EI,normalizeRuntimeCapabilities:()=>q0,normalizeProviderId:()=>l8,normalizeOAuthProvider:()=>XY,normalizeHubWebSocketUrl:()=>G$,noopBasicLogger:()=>RI,migrateLegacyProviderSettings:()=>Q9,mergeRulesForSystemPrompt:()=>t2,mergeAgentHooks:()=>q2,marketplaceEntryKey:()=>uX,makeTeamTaskSubSessionId:()=>I6,makeSubSessionId:()=>C8,loginOpenAICodex:()=>$6,loginOcaOAuth:()=>W6,loginLocalProvider:()=>YY,loginClineOAuth:()=>t4,loginAndSaveProviderOAuthCredentials:()=>X6,loginAndSaveLocalProviderOAuthCredentials:()=>VY,loadOpenTelemetryAdapter:()=>QI,loadMcpSettingsFile:()=>E2,loadLlmsConfigFromFile:()=>TY,loadConfiguredAgentConfigs:()=>Y4,loadAgentPluginsFromPathsWithDiagnostics:()=>_2,loadAgentPluginsFromPaths:()=>xZ,loadAgentPluginFromPath:()=>p6,listSessionHistoryFromBackend:()=>rJ,listPluginToolsWithDiagnostics:()=>IQ,listPluginTools:()=>R5,listMcpServerOAuthStatuses:()=>q5,listLocalProviders:()=>ZY,listHookConfigFiles:()=>N$,isToolDisabledGlobally:()=>Ij,isTelemetryOptedOutGlobally:()=>g9,isSessionNotFoundError:()=>I1,isRuleEnabled:()=>f9,isPluginDisabledGlobally:()=>gj,isOfficialPluginSlug:()=>O7,isOAuthProvider:()=>Z2,isMarketplaceSkillInstalled:()=>K7,isLocalHubOrigin:()=>MY,isLocalHubHostName:()=>l7,isHubReconnectableTransportError:()=>SW,isHubCommandTimeoutError:()=>o9,isDiscoveryFilePresent:()=>tj,isClineOrgIndividualInferenceSubscriptionMessage:()=>KI,isClineOrgIndividualInferenceSubscriptionError:()=>GI,isClineNotSubscribedMessage:()=>BI,isClineNotSubscribedError:()=>HI,isClineAccountActionRequest:()=>DQ,isBuiltInProviderId:()=>GJ,isAutoUpdateEnabledGlobally:()=>hj,installPlugin:()=>aX,installMcpServer:()=>wX,identifyAccount:()=>S1,hasMcpSettingsFile:()=>s1,getValidOpenAICodexCredentials:()=>Z6,getValidOcaCredentials:()=>J6,getValidClineCredentials:()=>e4,getProviderOAuthCredentialsFromSettings:()=>Y6,getProviderConfigFields:()=>BY,getProviderConfig:()=>ZQ,getProviderAuthStorageId:()=>nW,getProviderAuthHandler:()=>j0,getPersistedProviderApiKey:()=>U8,getMcpServerOAuthState:()=>w2,getMarketplaceSkillCandidates:()=>t5,getLocalProviderModels:()=>QY,getLiveModelsCatalog:()=>d8,getGlobalMarketplaceSkillPaths:()=>e5,getFileIndex:()=>d1,getCurrentContextSize:()=>I3,getCoreHeadlessToolNames:()=>k6,getCoreDefaultEnabledToolIds:()=>SZ,getCoreBuiltinToolCatalog:()=>A2,getCoreAcpToolNames:()=>yZ,getClinePassSubscriptionUrl:()=>VI,getClineOrgIndividualInferenceSubscriptionMessage:()=>YI,getClineNotSubscribedMessage:()=>jI,getClineDefaultSystemPrompt:()=>FI,generateWorkspaceInfoWithDiagnostics:()=>S4,generateWorkspaceInfo:()=>e2,formatRulesForSystemPrompt:()=>o2,formatProviderOAuthApiKey:()=>sW,formatDisplayUserInput:()=>MI,findInstalledGlobalMarketplaceSkillName:()=>$9,findCheckpointForRun:()=>A4,filterExtensionToolRegistrations:()=>c9,filterDisabledTools:()=>y1,filterDisabledPluginPaths:()=>v9,fetchClineRecommendedModels:()=>_Y,executeClineAccountAction:()=>LQ,ensureHubWebSocketServer:()=>p7,ensureHubServer:()=>VU,ensureDetachedHubServer:()=>YV,ensureCustomProvidersLoaded:()=>C7,ensureCompatibleLocalHubUrl:()=>e$,enrichPromptWithMentions:()=>T8,emptyWorkspaceManifest:()=>TI,emptyStoredProviderSettings:()=>S$,discoverPluginModulePaths:()=>n6,disablePluginMcpServersInSettings:()=>bX,deriveSubsessionStatus:()=>g6,deleteLocalProvider:()=>y7,defineLlmsConfig:()=>zY,createWorkflowsConfigDefinition:()=>L5,createUserInstructionConfigService:()=>b$,createToolPoliciesWithPreset:()=>OZ,createTool:()=>zI,createTeamName:()=>X7,createSubprocessHooks:()=>tQ,createSpawnAgentTool:()=>q$,createSkillsConfigDefinition:()=>U5,createShellTool:()=>M6,createShellExecutor:()=>Y2,createSessionHost:()=>K4,createRuntimeHost:()=>K4,createRulesConfigDefinition:()=>D5,createRemoteConfigSessionMessagesArtifactUploader:()=>_X,createProviderConfig:()=>KJ,createOpenTelemetryTelemetryService:()=>r4,createOAuthClientCallbacks:()=>n8,createMcpTools:()=>Q4,createLocalHubScheduleRuntimeHandlers:()=>YU,createLlmsSdk:()=>qY,createInitialAccumulatedUsage:()=>D0,createInMemoryHubOwnerContext:()=>oj,createHubServerUrl:()=>Z1,createHubAuthToken:()=>d9,createHookConfigFileHooks:()=>t6,createHookConfigFileExtension:()=>u8,createHookAuditHooks:()=>c8,createDisabledMcpToolPolicy:()=>M5,createDisabledMcpToolPolicies:()=>kQ,createDelegatedAgentConfigProvider:()=>T$,createDelegatedAgent:()=>O$,createDefaultToolsWithPreset:()=>qZ,createDefaultTools:()=>D$,createDefaultShellExecutor:()=>P6,createDefaultMcpServerClientFactory:()=>$4,createDefaultExecutors:()=>O8,createCoreSettingsService:()=>b2,createCoreSessionSnapshot:()=>f1,createContributionRegistry:()=>_I,createContextCompactionPrepareTurn:()=>F6,createConfiguredTelemetryService:()=>h1,createConfiguredTelemetryHandle:()=>j8,createConfiguredAgentTools:()=>j4,createClineTelemetryServiceMetadata:()=>LI,createClineTelemetryServiceConfig:()=>DI,createCheckpointComparePlan:()=>nQ,createBuiltinTools:()=>f2,createAgentTeamsTools:()=>F2,createAgentRuntime:()=>bI,createAgentHooksExtension:()=>m8,connectToHub:()=>e9,completeClineDeviceAuth:()=>lW,compareCheckpointToWorkspace:()=>d5,collectPluginMcpOAuthCandidates:()=>M7,clearPrivateModelsCatalogCache:()=>HJ,clearLiveModelsCatalogCache:()=>VJ,clearHubDiscovery:()=>S0,captureWorkspacePathResolved:()=>Nj,captureWorkspaceInitialized:()=>T9,captureWorkspaceInitError:()=>O9,captureToolUsage:()=>Q8,captureTokenUsage:()=>R9,captureTaskRestarted:()=>M9,captureTaskCreated:()=>q9,captureTaskCompleted:()=>g4,captureSubagentExecution:()=>v4,captureSkillUsed:()=>N9,captureSdkError:()=>UI,captureProviderConfigured:()=>wj,captureProviderApiError:()=>m4,captureModeSwitch:()=>E9,captureMentionUsed:()=>C9,captureMentionSearchResults:()=>S9,captureMentionFailed:()=>P9,captureHookDiscovery:()=>y9,captureExtensionActivated:()=>Ej,captureDiffEditFailure:()=>w9,captureConversationTurnEvent:()=>Z8,captureCompactionSkipped:()=>k9,captureCompactionExecuted:()=>h9,captureAuthSucceeded:()=>C1,captureAuthStarted:()=>w1,captureAuthLoggedOut:()=>V$,captureAuthFailed:()=>P1,captureAgentUnexpectedReasoningTokens:()=>Rj,captureAgentTeamCreated:()=>b9,captureAgentCreated:()=>H$,buildWorkspaceMetadata:()=>b4,buildTeamProgressSummary:()=>V4,buildSdkErrorProperties:()=>AI,buildRemoteConfigSessionBlobUploadMetadata:()=>$7,buildMcpInstallTransport:()=>Y7,buildDelegatedAgentConfig:()=>G2,buildConfiguredAgentToolName:()=>x5,buildConfiguredAgentToolDescriptors:()=>g5,buildCheckpointWorkspaceDiff:()=>aQ,bootstrapAgentTeams:()=>w8,authorizeMcpServerOAuth:()=>SQ,addLocalProvider:()=>$Y,accumulateUsageTotals:()=>f0,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>H5,UnifiedConfigFileWatcher:()=>R2,ToolPresets:()=>u0,TelemetryService:()=>X8,TelemetryLoggerSink:()=>p4,TEAM_TOOL_NAMES:()=>N8,SubprocessSandbox:()=>k8,StructuredCommandInputSchema:()=>W2,StoredProviderSettingsSchema:()=>r8,StoredProviderSettingsEntrySchema:()=>AQ,SqliteTeamStore:()=>v2,SqliteSessionStore:()=>D1,SessionVersioningService:()=>c$,SessionVersioningError:()=>k0,SessionSource:()=>z0,SessionNotFoundError:()=>k1,SapSettingsSchema:()=>HQ,SKILLS_CONFIG_DIRECTORY_NAME:()=>V5,SESSION_STATUSES:()=>m6,SESSION_NOT_FOUND_ERROR_CODE:()=>a$,SDK_ERROR_TELEMETRY_EVENT:()=>PI,RpcClineAccountService:()=>Y5,RemoteRuntimeHost:()=>X4,ReasoningSettingsSchema:()=>XQ,RULES_CONFIG_DIRECTORY_NAME:()=>RQ,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY:()=>Z7,ProviderSettingsSchema:()=>C$,ProviderSettingsManager:()=>O1,ProviderProtocolSchema:()=>QQ,ProviderIdSchema:()=>W5,ProviderClientSchema:()=>WQ,OpenTelemetryProvider:()=>Y8,OcaSettingsSchema:()=>BQ,OPENAI_COMPATIBLE_PROVIDERS:()=>$5,NodeHubClient:()=>W1,NoOpFeatureFlagsProvider:()=>x2,NativeHubTransportAdapter:()=>Y9,ModelCatalogSettingsSchema:()=>GQ,McpSettingsUpdateSkippedError:()=>o8,McpSettingsMutatorPurityError:()=>y$,McpSettingsLockTimeoutError:()=>h$,MAX_COMMAND_OUTPUT_CHARS:()=>c1,LocalRuntimeHost:()=>z1,Llms:()=>WI,InMemoryWorkspaceManager:()=>i8,InMemoryMcpManager:()=>S2,HubUIClient:()=>xW,HubTransportError:()=>R0,HubSessionClient:()=>IW,HubServerTransport:()=>w4,HubScheduleService:()=>$8,HubScheduleCommandService:()=>s2,HubRuntimeHost:()=>o1,HubCommandError:()=>B8,HookEventPayloadSchema:()=>oQ,HookEventNameSchema:()=>sQ,HookConfigFileName:()=>v8,HOOK_CONFIG_FILE_EVENT_MAP:()=>s6,HOOKS_CONFIG_DIRECTORY_NAME:()=>dZ,GlobalSettingsSchema:()=>c4,GcpSettingsSchema:()=>jQ,FileTeamPersistenceStore:()=>I7,FeatureFlagsService:()=>I2,FeatureFlagDefaultValue:()=>qI,FEATURE_FLAGS:()=>OI,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>u7,DefaultToolNames:()=>U0,DefaultRuntimeBuilder:()=>T4,DefaultLlmsSdk:()=>W9,DEFAULT_MODELS_CATALOG_URL:()=>oZ,DEFAULT_HUB_PORT:()=>qW,DEFAULT_HUB_PATHNAME:()=>MW,DEFAULT_HUB_HOST:()=>OW,CoreSettingsService:()=>k$,CoreSessionService:()=>_1,ContributionRegistry:()=>fI,ClineOrgIndividualInferenceSubscriptionError:()=>XI,ClineNotSubscribedError:()=>JI,ClineCore:()=>l5,ClineAccountService:()=>X5,ChatViewStateSchema:()=>UY,ChatSummarySchema:()=>c7,ChatSessionStatusSchema:()=>g7,ChatSessionConfigSchema:()=>x7,ChatMessageSchema:()=>v7,ChatMessageRoleSchema:()=>m7,CORE_TELEMETRY_EVENTS:()=>m,CORE_BUILD_VERSION:()=>DY,BrowserWebSocketHubAdapter:()=>X9,BUILT_IN_PROVIDER_IDS:()=>BJ,BUILT_IN_PROVIDER:()=>Q5,AzureSettingsSchema:()=>VQ,AwsSettingsSchema:()=>YQ,AuthSettingsSchema:()=>JQ,AgentTeamsRuntime:()=>h2,AgentTeam:()=>G4,Agent:()=>SI,ALL_DEFAULT_TOOL_NAMES:()=>X$});R(M,vo);import*as WI from"@cline/llms";import{ClineNotSubscribedError as JI,ClineOrgIndividualInferenceSubscriptionError as XI,getClineOrgIndividualInferenceSubscriptionMessage as YI,getClineNotSubscribedMessage as jI,getClinePassSubscriptionUrl as VI,isClineNotSubscribedError as HI,isClineNotSubscribedMessage as BI,isClineOrgIndividualInferenceSubscriptionError as GI,isClineOrgIndividualInferenceSubscriptionMessage as KI}from"@cline/llms";import{buildClineSystemPrompt as FI,buildSdkErrorProperties as AI,ContributionRegistry as fI,captureSdkError as UI,createClineTelemetryServiceConfig as DI,createClineTelemetryServiceMetadata as LI,createContributionRegistry as _I,createTool as zI,emptyWorkspaceManifest as TI,FEATURE_FLAGS as OI,FeatureFlagDefaultValue as qI,formatDisplayUserInput as MI,noopBasicLogger as RI,normalizeSdkError as EI,normalizeUserInput as NI,parseUserCommandEnvelope as wI,registerDisposable as CI,SDK_ERROR_TELEMETRY_EVENT as PI}from"@cline/shared";import"@cline/shared/storage";var YK={};N(YK,{isClineAccountActionRequest:()=>DQ,executeClineAccountAction:()=>LQ,RpcClineAccountService:()=>Y5,ClineAccountService:()=>X5});function KN($){if(typeof $!=="object"||$===null||!("error"in $))return;let Z=$.error;return typeof Z==="string"&&Z.trim()?Z:void 0}function XK($,Z,Q){let W=KN(Q);if(W)return W;let J=Z.trim();if(J){let X=J.length>200?`${J.slice(0,200)}...`:J;return`Cline account request failed with status ${$}: ${X}`}return`Cline account request failed with status ${$}`}class X5{apiBaseUrl;getAuthTokenFn;getCurrentUserIdFn;getOrganizationMemberIdFn;getHeadersFn;requestTimeoutMs;fetchImpl;constructor($){let Z=$.apiBaseUrl.trim();if(!Z)throw Error("apiBaseUrl is required");this.apiBaseUrl=Z,this.getAuthTokenFn=$.getAuthToken,this.getCurrentUserIdFn=$.getCurrentUserId,this.getOrganizationMemberIdFn=$.getOrganizationMemberId,this.getHeadersFn=$.getHeaders,this.requestTimeoutMs=$.requestTimeoutMs??30000,this.fetchImpl=$.fetchImpl??fetch}async fetchMe(){return this.request("/api/v1/users/me")}async fetchRemoteConfig(){return this.request("/api/v1/users/me/remote-config")}async fetchFeaturebaseToken(){try{return await this.request("/api/v1/users/me/featurebase-token")}catch{return}}async fetchBalance($){let Z=await this.resolveUserId($);return this.request(`/api/v1/users/${encodeURIComponent(Z)}/balance`)}async fetchUsageTransactions($){let Z=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(Z)}/usages`)).items??[]}async fetchPaymentTransactions($){let Z=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(Z)}/payments`)).paymentTransactions??[]}async fetchUserOrganizations(){return(await this.fetchMe()).organizations??[]}async fetchAvailableSubscriptionPlans($){let Z=new URL("/api/v1/plans",this.apiBaseUrl);if($?.type)Z.searchParams.set("type",$.type);return this.request(`${Z.pathname}${Z.search}`)}async fetchCurrentUserPlan(){return this.request("/api/v1/users/me/plan")}async fetchOrganization($){let Z=$.trim();if(!Z)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(Z)}`)}async fetchOrganizationBalance($){let Z=$.trim();if(!Z)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(Z)}/balance`)}async fetchOrganizationUsageTransactions($){let Z=$.organizationId.trim();if(!Z)throw Error("organizationId is required");let Q=await this.resolveOrganizationMemberId(Z,$.memberId);return(await this.request(`/api/v1/organizations/${encodeURIComponent(Z)}/members/${encodeURIComponent(Q)}/usages`)).items??[]}async switchAccount($){await this.request("/api/v1/users/active-account",{method:"PUT",body:{organizationId:$?.trim()||null},expectNoContent:!0})}async resolveUserId($){let Z=$?.trim();if(Z)return Z;let W=(this.getCurrentUserIdFn?await this.getCurrentUserIdFn():void 0)?.trim();if(W)return W;let J=await this.fetchMe();if(!J.id?.trim())throw Error("Unable to resolve current user id");return J.id}async resolveOrganizationMemberId($,Z){let Q=Z?.trim();if(Q)return Q;let J=(this.getOrganizationMemberIdFn?await this.getOrganizationMemberIdFn($):void 0)?.trim();if(J)return J;let Y=(await this.fetchUserOrganizations()).find((j)=>j.organizationId===$)?.memberId;if(!Y?.trim())throw Error(`Unable to resolve memberId for organization ${$}`);return Y}async request($,Z){let Q=(await this.getAuthTokenFn())?.trim();if(!Q)throw Error("No Cline account auth token found");let W=this.getHeadersFn?await this.getHeadersFn():{},J=new AbortController,X=setTimeout(()=>J.abort(),this.requestTimeoutMs);try{let Y=await this.fetchImpl(new URL($,this.apiBaseUrl),{method:Z?.method??"GET",headers:{Authorization:`Bearer ${Q}`,"Content-Type":"application/json",...W??{}},body:Z?.body!==void 0?JSON.stringify(Z.body):void 0,signal:J.signal});if(Y.status===204||Z?.expectNoContent){if(!Y.ok)throw Error(`Cline account request failed with status ${Y.status}`);return}let j=await Y.text(),V;if(j.trim())try{V=JSON.parse(j)}catch{if(!Y.ok)throw Error(XK(Y.status,j,void 0));throw Error("Cline account response was not valid JSON")}if(!Y.ok)throw Error(XK(Y.status,j,V));if(typeof V==="object"&&V!==null){let H=V;if(typeof H.success==="boolean"){if(!H.success)throw Error(H.error||"Cline account request failed");return H.data}}if(V===void 0||V===null)throw Error("Cline account response payload was empty");return V}finally{clearTimeout(X)}}}function DQ($){return $.action==="clineAccount"}async function LQ($,Z){switch($.operation){case"fetchMe":return Z.fetchMe();case"fetchBalance":return Z.fetchBalance($.userId);case"fetchUsageTransactions":return Z.fetchUsageTransactions($.userId);case"fetchPaymentTransactions":return Z.fetchPaymentTransactions($.userId);case"fetchUserOrganizations":return Z.fetchUserOrganizations();case"fetchOrganizationBalance":return Z.fetchOrganizationBalance($.organizationId);case"fetchOrganizationUsageTransactions":return Z.fetchOrganizationUsageTransactions({organizationId:$.organizationId,memberId:$.memberId});case"switchAccount":return await Z.switchAccount($.organizationId),{updated:!0};case"fetchFeaturebaseToken":return Z.fetchFeaturebaseToken?.();default:throw Error(`Unsupported Cline account operation: ${String($)}`)}}class Y5{executor;constructor($){this.executor=$}async fetchMe(){return this.request({action:"clineAccount",operation:"fetchMe"})}async fetchBalance($){return this.request({action:"clineAccount",operation:"fetchBalance",...$?.trim()?{userId:$.trim()}:{}})}async fetchUsageTransactions($){return this.request({action:"clineAccount",operation:"fetchUsageTransactions",...$?.trim()?{userId:$.trim()}:{}})}async fetchPaymentTransactions($){return this.request({action:"clineAccount",operation:"fetchPaymentTransactions",...$?.trim()?{userId:$.trim()}:{}})}async fetchUserOrganizations(){return this.request({action:"clineAccount",operation:"fetchUserOrganizations"})}async fetchOrganizationBalance($){let Z=$.trim();if(!Z)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationBalance",organizationId:Z})}async fetchOrganizationUsageTransactions($){let Z=$.organizationId.trim();if(!Z)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationUsageTransactions",organizationId:Z,...$.memberId?.trim()?{memberId:$.memberId.trim()}:{}})}async switchAccount($){await this.request({action:"clineAccount",operation:"switchAccount",organizationId:$?.trim()||null})}async fetchFeaturebaseToken(){return this.request({action:"clineAccount",operation:"fetchFeaturebaseToken"})}async request($){return(await this.executor.runProviderAction($)).result}}var jK={};N(jK,{createOAuthClientCallbacks:()=>n8});function n8($){return{onAuth:({url:Z,instructions:Q})=>{if($.onOutput?.(Q??"Complete sign-in in your browser."),$.openUrl)try{Promise.resolve($.openUrl(Z)).catch((W)=>{$.onOpenUrlError?.({url:Z,error:W})})}catch(W){$.onOpenUrlError?.({url:Z,error:W})}$.onOutput?.(Z)},onPrompt:$.onPrompt,onServerListening:$.onServerListening,onServerClose:$.onServerClose}}var CA={};N(CA,{ClineCore:()=>l5});function VK($){if($===!0)return{};if(!$)return;return $}function HK($){if($==="user")return"global";return $}class UJ{getService;constructor($){this.getService=$}async start(){await this.getService().start()}async stop(){await this.getService().stop()}async reconcileNow(){await this.getService().reconcileNow()}ingestEvent($){let Z=this.getService().ingestEvent($);return{event:Z.event,duplicate:Z.duplicate,matchedSpecIds:Z.matchedSpecs.map((Q)=>Q.specId),queuedRuns:Z.queuedRuns,suppressions:Z.suppressions}}listEvents($){return this.getService().listEventLogs($)}getEvent($){return this.getService().getEventLog($)}listSpecs($){return this.getService().listSpecs($)}listRuns($){return this.getService().listRuns($)}}function BK($){let{host:Z}=$;return{async startSession(Q){let W=(Q.cwd?.trim()||Q.workspaceRoot).trim(),J=await Z.startSession({source:Q.source?.trim()||z0.CLI,interactive:!1,config:{providerId:l8(Q.provider),modelId:Q.model,apiKey:Q.apiKey?.trim()||void 0,cwd:W,workspaceRoot:Q.workspaceRoot,systemPrompt:Q.systemPrompt??"",mode:fN(Q),maxIterations:Q.maxIterations,enableTools:Q.enableTools!==!1,enableSpawnAgent:Q.enableSpawn!==!1,enableAgentTeams:Q.enableTeams!==!1,disableMcpSettingsTools:Q.disableMcpSettingsTools,missionLogIntervalSteps:Q.missionStepInterval,missionLogIntervalMs:Q.missionTimeIntervalMs},toolPolicies:Q.toolPolicies??{"*":{autoApprove:Q.autoApproveTools!==!1}},localRuntime:{extensionContext:$.getExtensionContext(),configExtensions:Q.configExtensions}});return{sessionId:J.sessionId,startResult:{sessionId:J.sessionId,manifestPath:J.manifestPath,messagesPath:J.messagesPath}}},async sendSession(Q,W){let J=await Z.runTurn({sessionId:Q,prompt:W.prompt,userImages:W.attachments?.userImages,userFiles:W.attachments?.userFiles?.map((X)=>X.content),delivery:W.delivery});if(!J)throw Error("ClineCore automation runtime returned no result");return{result:AN(J)}},async abortSession(Q){return await Z.abort(Q,Error("ClineCore automation abort")),{applied:!0}},async stopSession(Q){return await Z.stopSession(Q),{applied:!0}}}}function _Q($){let Z=FN($.automationService,$.automation),Q=$.context?.client??($.clientName?{name:$.clientName}:void 0),W=$.context?.user??($.distinctId?{distinctId:$.distinctId}:void 0),J=$.context?.logger??$.logger,X=$.context?.telemetry??$.telemetry;if(!Z&&!Q&&!W&&!J&&!X)return $.context;return{...$.context??{},...Q?{client:Q}:{},...W?{user:W}:{},...J?{logger:J}:{},...X?{telemetry:X}:{},...Z?{automation:Z}:{}}}function FN($,Z){if(!$)return;return{ingestEvent:(Q)=>{Z.ingestEvent(Q)}}}function AN($){return{text:$.text,usage:{inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens,cacheWriteTokens:$.usage.cacheWriteTokens,totalCost:$.usage.totalCost},inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,iterations:$.iterations,finishReason:$.finishReason,toolCalls:$.toolCalls.map((Z)=>({name:Z.name,input:Z.input,output:Z.output,error:Z.error,durationMs:Z.durationMs}))}}function fN($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}var KF={};N(KF,{createCoreSettingsService:()=>b2,CoreSettingsService:()=>k$});import{existsSync as N5,readFileSync as $C}from"node:fs";import{basename as bJ,dirname as XF,extname as ZC,isAbsolute as VF,join as QC,relative as HF,resolve as YF}from"node:path";var qK={};N(qK,{resolveWorkflowsConfigSearchPaths:()=>f5,resolveSkillsConfigSearchPaths:()=>F5,resolveRulesConfigSearchPaths:()=>A5,parseWorkflowConfigFromMarkdown:()=>K5,parseSkillConfigFromMarkdown:()=>B5,parseRuleConfigFromMarkdown:()=>G5,createWorkflowsConfigDefinition:()=>L5,createUserInstructionConfigService:()=>b$,createSkillsConfigDefinition:()=>U5,createRulesConfigDefinition:()=>D5,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>H5,UnifiedConfigFileWatcher:()=>R2,SKILLS_CONFIG_DIRECTORY_NAME:()=>V5,RULES_CONFIG_DIRECTORY_NAME:()=>RQ});import{createHash as UN}from"node:crypto";import{watch as DN}from"node:fs";import{readdir as LN,readFile as _N}from"node:fs/promises";import{join as zN}from"node:path";function TN($){return UN("sha1").update($).digest("hex")}function FK($){return Boolean($&&typeof $==="object"&&"code"in $)}function GK($){return FK($)&&$.code==="ENOENT"}function KK($){return FK($)&&($.code==="EACCES"||$.code==="EPERM")}class R2{definitions;debounceMs;emitParseErrors;listeners=new Set;recordsByType=new Map;watchersByDirectory=new Map;baseTypesByDirectory=new Map;watchedTypesByDirectory=new Map;discoveredDirectoriesByType=new Map;definitionsByType=new Map;pendingTypes=new Set;flushTimer;refreshQueue=Promise.resolve();started=!1;constructor($,Z){if($.length===0)throw Error("UnifiedConfigFileWatcher requires at least one definition.");this.definitions=$,this.debounceMs=Z?.debounceMs??75,this.emitParseErrors=Z?.emitParseErrors??!1;for(let Q of $){if(this.definitionsByType.has(Q.type))throw Error(`Duplicate unified config definition type '${Q.type}'.`);this.definitionsByType.set(Q.type,Q),this.recordsByType.set(Q.type,new Map),this.discoveredDirectoriesByType.set(Q.type,new Set);for(let W of Q.directories){let J=this.baseTypesByDirectory.get(W);if(J)J.add(Q.type);else this.baseTypesByDirectory.set(W,new Set([Q.type]))}}}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}async start(){if(this.started)return;this.started=!0,await this.refreshAll(),this.startDirectoryWatchers()}stop(){if(this.started=!1,this.flushTimer)clearTimeout(this.flushTimer),this.flushTimer=void 0;this.pendingTypes.clear();for(let $ of this.watchersByDirectory.values())$.close();this.watchersByDirectory.clear(),this.watchedTypesByDirectory=new Map}async refreshAll(){await this.enqueueRefresh(async()=>{for(let $ of this.definitions)await this.refreshTypeInternal($)})}async refreshType($){let Z=this.definitionsByType.get($);if(!Z)throw Error(`Unknown unified config type '${$}'.`);await this.enqueueRefresh(async()=>{await this.refreshTypeInternal(Z)})}getSnapshot($){let Z=this.recordsByType.get($);return new Map([...Z?.entries()??[]].map(([Q,W])=>[Q,{...W}]))}getAllSnapshots(){let $=new Map;for(let[Z,Q]of this.recordsByType.entries())$.set(Z,new Map([...Q.entries()].map(([W,J])=>[W,{...J}])));return $}emit($){for(let Z of this.listeners)Z($)}enqueueRefresh($){return this.refreshQueue=this.refreshQueue.then($,$),this.refreshQueue}startDirectoryWatchers(){this.syncDirectoryWatchers()}syncDirectoryWatchers(){let $=this.buildDesiredTypesByDirectory();for(let[Z,Q]of this.watchersByDirectory.entries()){if($.has(Z))continue;Q.close(),this.watchersByDirectory.delete(Z)}this.watchedTypesByDirectory=$;for(let Z of $.keys()){if(this.watchersByDirectory.has(Z))continue;try{let Q=DN(Z,()=>{let W=this.watchedTypesByDirectory.get(Z);if(!W)return;for(let J of W)this.pendingTypes.add(J);this.scheduleFlush()});this.watchersByDirectory.set(Z,Q),Q.on("error",(W)=>{let J=this.watchedTypesByDirectory.get(Z);if(!J)return;for(let X of J)this.emit({kind:"error",type:X,error:W,filePath:Z})})}catch(Q){if(!GK(Q)&&!KK(Q)){let W=$.get(Z);if(!W)continue;for(let J of W)this.emit({kind:"error",type:J,error:Q,filePath:Z})}}}}scheduleFlush(){if(this.flushTimer)clearTimeout(this.flushTimer);this.flushTimer=setTimeout(()=>{this.flushTimer=void 0;let $=[...this.pendingTypes];this.pendingTypes.clear(),this.enqueueRefresh(async()=>{for(let Z of $){let Q=this.definitionsByType.get(Z);if(!Q)continue;await this.refreshTypeInternal(Q)}})},this.debounceMs)}async refreshTypeInternal($){let{records:Z,discoveredDirectories:Q}=await this.loadDefinition($),W=this.recordsByType.get($.type)??new Map;for(let[J,X]of W.entries()){if(Z.has(J))continue;this.emit({kind:"remove",type:$.type,id:J,filePath:X.filePath})}for(let[J,X]of Z.entries()){let Y=W.get(J);if(Y&&Y.filePath===X.filePath&&Y.fingerprint===X.fingerprint)continue;this.emit({kind:"upsert",record:{type:X.type,id:J,item:X.item,filePath:X.filePath}})}if(this.recordsByType.set($.type,Z),this.discoveredDirectoriesByType.set($.type,Q),this.started)this.syncDirectoryWatchers()}async loadDefinition($){let Z=new Map,Q=new Set;for(let W of $.directories){Q.add(W);let J=$.discoverFiles?await $.discoverFiles(W):await this.readDirectoryFileCandidates(W);for(let X of J){let{fileName:Y,filePath:j}=X;if(Q.add(X.directoryPath),$.includeFile&&!$.includeFile(Y,j))continue;try{let V=await _N(j,"utf8"),H={type:$.type,directoryPath:X.directoryPath,fileName:Y,filePath:j,content:V},B=$.parseFile(H),G=$.resolveId(B,H).trim();if(!G)continue;Z.set(G,{type:$.type,id:G,item:B,filePath:j,fingerprint:TN(V)})}catch(V){if(this.emitParseErrors)this.emit({kind:"error",type:$.type,error:V,filePath:j})}}}return{records:Z,discoveredDirectories:Q}}buildDesiredTypesByDirectory(){let $=new Map;for(let[Z,Q]of this.baseTypesByDirectory.entries())$.set(Z,new Set(Q));for(let[Z,Q]of this.discoveredDirectoriesByType.entries())for(let W of Q){let J=$.get(W);if(J)J.add(Z);else $.set(W,new Set([Z]))}return $}async readDirectoryFileCandidates($){try{return(await LN($,{withFileTypes:!0})).filter((Q)=>Q.isFile()).map((Q)=>({directoryPath:$,fileName:Q.name,filePath:zN($,Q.name)})).sort((Q,W)=>Q.fileName.localeCompare(W.fileName))}catch(Z){if(GK(Z)||KK(Z))return[];throw Z}}}import{readdir as LJ,readFile as ON,stat as DJ}from"node:fs/promises";import{basename as a1,dirname as qN,extname as TQ,join as y0,resolve as j5}from"node:path";import{AGENTS_RULES_FILE_NAME as AK,RULES_CONFIG_DIRECTORY_NAME as RQ,resolveGlobalAgentsRulesPath as MN,resolveRulesConfigSearchPaths as RN,resolveSkillsConfigSearchPaths as EN,resolveWorkflowsConfigSearchPaths as NN,SKILLS_CONFIG_DIRECTORY_NAME as V5,WORKFLOWS_CONFIG_DIRECTORY_NAME as H5}from"@cline/shared/storage";import wN from"yaml";var zQ="SKILL.md",CN="managed.json",PN=new Set([".md",".markdown",".txt"]);function _J($){return $.trim().toLowerCase()}function a8($){let Z=$;return Z?.code==="ENOENT"||Z?.code==="EACCES"||Z?.code==="EPERM"||Z?.code==="ELOOP"}function OQ($){return PN.has(TQ($).toLowerCase())}function fK($){let Z=[],Q=new Set;for(let W of $){let J=j5(W);if(Q.has(J))continue;Q.add(J),Z.push(W)}return Z}function SN($){let Z=[...$?.directories??F5($?.workspacePath)];if($?.pluginSkillDirectories)Z.push(...$.pluginSkillDirectories);else if($?.includePluginSkills)Z.push(...CG({pluginPaths:$.pluginPaths,workspacePath:$.workspacePath,cwd:$.cwd??$.workspacePath}));return fK(Z)}async function zJ($){try{let Z=await LJ($,{withFileTypes:!0}),Q=[];for(let W of Z){if(!W.isDirectory())continue;let J=y0($,W.name),X=y0(J,CN);try{let Y=await ON(X,"utf8"),j=JSON.parse(Y);if(j&&typeof j==="object")Q.push(J)}catch(Y){if(a8(Y))continue;if(Y?.name==="SyntaxError")continue;throw Y}}return Q.sort((W,J)=>W.localeCompare(J))}catch(Z){if(a8(Z))return[];throw Z}}function TJ($){let Z=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,Q=$.match(Z);if(!Q)return{data:{},body:$,hadFrontmatter:!1};let[,W,J]=Q;try{let X=wN.parse(W);return{data:X&&typeof X==="object"&&!Array.isArray(X)?X:{},body:J,hadFrontmatter:!0}}catch(X){let Y=X instanceof Error?X.message:String(X);return{data:{},body:$,hadFrontmatter:!0,parseError:Y}}}function qQ($,Z,Q){if($===void 0||$===null){if(Q)throw Error(`Missing required frontmatter field '${Z}'.`);return}if(typeof $!=="string")throw Error(`Frontmatter field '${Z}' must be a string.`);let W=$.trim();if(!W&&Q)throw Error(`Frontmatter field '${Z}' cannot be empty.`);return W||void 0}function s8($,Z){if($===void 0||$===null)return;if(typeof $!=="boolean")throw Error(`Frontmatter field '${Z}' must be a boolean.`);return $}function bN($,Z){if(a1($.filePath).toLowerCase()!==AK.toLowerCase())return a1($.filePath,TQ($.filePath));if(Z&&j5($.filePath)===j5(Z,AK))return"Workspace AGENTS.md";if(j5($.filePath)===j5(MN()))return"Global AGENTS.md";return a1($.filePath,TQ($.filePath))}function B5($,Z){let{data:Q,body:W,parseError:J}=TJ($);if(J)throw Error(`Failed to parse YAML frontmatter: ${J}`);let X=W.trim();if(!X)throw Error("Missing instructions body in skill file.");let j=qQ(Q.name,"name",!1)??Z.trim();if(!j)throw Error("Missing skill name.");return{name:j,description:qQ(Q.description,"description",!1),disabled:s8(Q.disabled,"disabled")??(s8(Q.enabled,"enabled")===!1?!0:void 0),instructions:X,frontmatter:Q}}function G5($,Z){let{data:Q,body:W,parseError:J}=TJ($);if(J)throw Error(`Failed to parse YAML frontmatter: ${J}`);let X=W.trim();if(!X)throw Error("Missing instructions body in rule file.");let Y=qQ(Q.name,"name",!1)??Z.trim();if(!Y)throw Error("Missing rule name.");return{name:Y,disabled:s8(Q.disabled,"disabled")??(s8(Q.enabled,"enabled")===!1?!0:void 0),instructions:X,frontmatter:Q}}function K5($,Z){let{data:Q,body:W,parseError:J}=TJ($);if(J)throw Error(`Failed to parse YAML frontmatter: ${J}`);let X=W.trim();if(!X)throw Error("Missing instructions body in workflow file.");let Y=qQ(Q.name,"name",!1)??Z.trim();if(!Y)throw Error("Missing workflow name.");return{name:Y,disabled:s8(Q.disabled,"disabled")??(s8(Q.enabled,"enabled")===!1?!0:void 0),instructions:X,frontmatter:Q}}function F5($){return EN($)}function A5($){return RN($)}function f5($){return NN($)}async function UK($){if(a1($)===".cline"){let Z=await zJ($);return(await Promise.all(Z.map((W)=>UK(y0(W,V5))))).flat()}try{let Z=await LJ($,{withFileTypes:!0}),Q=[];for(let W of Z){if(W.isFile()&&W.name===zQ){Q.push({directoryPath:$,fileName:W.name,filePath:y0($,W.name)});continue}let J=y0($,W.name);if(W.isDirectory()||W.isSymbolicLink()&&await DJ(J).then((Y)=>Y.isDirectory()).catch((Y)=>{if(a8(Y))return!1;throw Y}))Q.push({directoryPath:J,fileName:zQ,filePath:y0(J,zQ)})}return Q}catch(Z){if(a8(Z))return[];throw Z}}async function MQ($){if(a1($)===".cline"){let Z=await zJ($);return(await Promise.all(Z.map((W)=>MQ(y0(W,"rules.md"))))).flat()}try{if((await DJ($)).isFile())return[{directoryPath:qN($),fileName:a1($),filePath:$}]}catch(Z){if(!a8(Z))throw Z}try{let Q=(await LJ($,{withFileTypes:!0})).filter((J)=>J.isFile()&&OQ(J.name)).map((J)=>({directoryPath:$,fileName:J.name,filePath:y0($,J.name)})),W=y0($,"AGENTS.md");try{if((await DJ(W)).isFile()){if(!Q.some((Y)=>Y.fileName==="AGENTS.md"))Q.push({directoryPath:$,fileName:"AGENTS.md",filePath:W})}}catch{}return Q}catch(Z){if(a8(Z))return[];throw Z}}async function yN($){if(a1($)===".cline"){let Z=await zJ($);return(await Promise.all(Z.map((W)=>MQ(y0(W,H5))))).flat()}return MQ($)}function U5($){let Z=SN($),Q=$?.workspacePath?y0($.workspacePath,".cline"):void 0;return{type:"skill",directories:Q?fK([...Z,Q]):Z,discoverFiles:UK,includeFile:(W)=>W===zQ,parseFile:(W)=>B5(W.content,a1(W.directoryPath)),resolveId:(W)=>_J(W.name)}}function D5($){let Z=$?.directories??A5($?.workspacePath),Q=$?.workspacePath?y0($.workspacePath,".cline"):void 0;return{type:"rule",directories:Q?[...Z,Q]:Z,discoverFiles:MQ,includeFile:(W,J)=>W===".clinerules"||OQ(W)||OQ(J),parseFile:(W)=>G5(W.content,bN(W,$?.workspacePath)),resolveId:(W)=>_J(W.name)}}function L5($){let Z=$?.directories??f5($?.workspacePath),Q=$?.workspacePath?y0($.workspacePath,".cline"):void 0;return{type:"workflow",directories:Q?[...Z,Q]:Z,discoverFiles:yN,includeFile:(W)=>OQ(W),parseFile:(W)=>K5(W.content,a1(W.filePath,TQ(W.filePath))),resolveId:(W)=>_J(W.name)}}function DK($){let Z=[U5($?.skills),D5($?.rules),L5($?.workflows)];return new R2(Z,{debounceMs:$?.debounceMs,emitParseErrors:$?.emitParseErrors})}import{truncateSplit as LK}from"@cline/shared";function hN($,Z){if($.description?.trim())return LK($.description,".");if(Z==="workflow")return;return LK($.instructions,".")}function kN($){return $.disabled!==!0}function _K($,Z){return[...$.getSnapshot(Z).entries()].map(([Q,W])=>({id:Q,record:W})).filter(({record:Q})=>kN(Q.item)).map(({id:Q,record:W})=>({id:Q,name:W.item.name,instructions:W.item.instructions,description:hN(W.item,Z),kind:Z})).sort((Q,W)=>Q.name.localeCompare(W.name))}function _5($){let Z=new Map;for(let Q of[..._K($,"workflow"),..._K($,"skill")])if(!Z.has(Q.name))Z.set(Q.name,Q);return[...Z.values()].sort((Q,W)=>Q.name.localeCompare(W.name))}function zK($,Z){if(!$.startsWith("/")||$.length<2)return $;let Q=$.match(/^\/(\S+)/);if(!Q)return $;let W=Q[1];if(!W)return $;let J=W.length+1,X=$.slice(J),Y=_5(Z).find((j)=>j.name===W);return Y?`${Y.instructions}${X}`:$}function EQ($){return $.trim().replace(/^\/+/,"").toLowerCase()}function IN($){if(!$||$.length===0)return;let Z=$.map(EQ).filter((Q)=>Q.length>0);return Z.length>0?new Set(Z):void 0}function xN($,Z,Q){if(!Q)return!0;let W=EQ($),J=EQ(Z),X=W.includes(":")?W.split(":").at(-1)??W:W,Y=J.includes(":")?J.split(":").at(-1)??J:J;return Q.has(W)||Q.has(J)||Q.has(X)||Q.has(Y)}function z5($,Z){let Q=IN(Z);return[...$.getSnapshot("skill").entries()].map(([J,X])=>{let Y=X.item;return{id:J,name:Y.name.trim(),description:Y.description?.trim(),disabled:Y.disabled===!0,skill:Y}}).filter((J)=>xN(J.id,J.name,Q))}function gN($,Z){return z5($,Z).filter((Q)=>!Q.disabled).map((Q)=>Q.name.trim()).filter((Q)=>Q.length>0).sort((Q,W)=>Q.localeCompare(W))}function mN($,Z,Q){let W=EQ(Z);if(!W)return{error:"Missing skill name."};let J=z5($,Q),X=J.find((B)=>B.id===W);if(X){let{skill:B}=X;if(B.disabled===!0)return{error:`Skill "${B.name}" is configured but disabled.`};return{id:X.id,skill:B}}let Y=W.includes(":")?W.split(":").at(-1)??W:W,j=J.filter(({id:B})=>{if(B===Y)return!0;return B.endsWith(`:${Y}`)}),V=j.filter(({skill:B})=>B.disabled!==!0);if(V.length===1){let{id:B,skill:G}=V[0];return{id:B,skill:G}}if(V.length>1)return{error:`Skill "${Z}" is ambiguous. Use one of: ${V.map(({id:B})=>B).join(", ")}`};if(j.length===1){let{skill:B}=j[0];return{error:`Skill "${B.name}" is configured but disabled.`}}if(j.length>1)return{error:`Skill "${Z}" is ambiguous, and all matches are disabled: ${j.map(({id:B})=>B).join(", ")}`};let H=gN($,Q);return{error:H.length>0?`Skill "${Z}" not found. Available skills: ${H.join(", ")}`:"No skills are currently available."}}function OJ($,Z=Promise.resolve(),Q){let W=new Set,J=async(X,Y)=>{await Z;let j=mN($,X,Q);if("error"in j)return j.error;let{id:V,skill:H}=j;if(W.has(V))return`Skill "${H.name}" is already running.`;W.add(V);try{let B=Y?.trim(),G=B?`
470
+ ${W}`;return Q||W}function WM($,Z){let Q=Z?.["*"]??{},W=Z?.[$]??{};return{...Q,...W}.enabled!==!1}function JM($,Z){return $.filter((Q)=>WM(Q.name,Z))}function XM($,Z){return y1(JM($,Z))}function YM($){let Z=$.filter((Q)=>Q!==void 0);if(Z.length===0)return{};return{beforeRun:async(Q)=>{for(let W of Z){let J=await W.beforeRun?.(Q);if(J?.stop)return J}return},afterRun:async(Q)=>{for(let W of Z)await W.afterRun?.(Q)},beforeModel:async(Q)=>{let W=Q.request,J;for(let X of Z){let Y=await X.beforeModel?.({...Q,request:W});if(!Y)continue;if(Y.stop)return Y;J={...J,...Y,options:zB(J?.options,Y.options)},W={...W,...Y.messages?{messages:Y.messages}:{},...Y.tools?{tools:Y.tools}:{},...Y.options?{options:zB(W.options,Y.options)}:{}}}return J},afterModel:async(Q)=>{for(let W of Z){let J=await W.afterModel?.(Q);if(J?.stop)return J}return},beforeTool:async(Q)=>{let W=Q.input,J;for(let X of Z){let Y=await X.beforeTool?.({...Q,input:W});if(!Y)continue;if(Y.stop||Y.skip)return Y;if(J={...J,...Y},Object.hasOwn(Y,"input"))W=Y.input}return J},afterTool:async(Q)=>{let W=Q.result,J;for(let X of Z){let Y=await X.afterTool?.({...Q,result:W});if(!Y)continue;if(Y.stop)return Y;if(J={...J,...Y},Y.result)W=Y.result}return J},onEvent:async(Q)=>{for(let W of Z)await W.onEvent?.(Q)}}}class z${config;agentId;parentAgentId;logger;telemetry;conversation;mistakeTracker;loopTracker;loopDetectionDisabled;messageBuilder;contributionRegistry;extensionsInitialized=!1;listeners=new Set;createAgentRuntimeImpl;activeRunId=null;running=!1;abortRequested=!1;abortReason;activeRuntime=null;activeRunPromise=null;eventAdapter=new E3;shutdownCalled=!1;currentRunToolCalls=[];currentRunUsage={inputTokens:0,outputTokens:0};toolStartedAt=new Map;toolInputs=new Map;currentTurnSuccessfulTools=0;currentTurnFailedTools=0;currentTurnFailureDetails=[];activeTrackerWork=Promise.resolve();trackerAbortInFlight=!1;constructor($,Z={}){this.config=$,this.agentId=`agent_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,this.parentAgentId=$.parentAgentId,this.logger=Z.logger??$.logger,this.telemetry=Z.telemetry??$.telemetry,this.createAgentRuntimeImpl=Z.createAgentRuntimeImpl??tq,this.conversation=new O3($.initialMessages),this.messageBuilder=new _3(fB()),this.contributionRegistry=eq({extensions:$.extensions?[...$.extensions]:[],setupContext:{session:$.extensionContext?.session,client:$.extensionContext?.client,user:$.extensionContext?.user,workspaceInfo:$.extensionContext?.workspace,automation:$.extensionContext?.automation,logger:$.extensionContext?.logger??this.logger,telemetry:$.extensionContext?.telemetry??this.telemetry}}),this.contributionRegistry.resolve(),this.contributionRegistry.validate();let Q=$.execution?.maxConsecutiveMistakes??6;this.mistakeTracker=new R3({maxConsecutiveMistakes:Q,onLimitReached:$.onConsecutiveMistakeLimitReached,emit:(X)=>this.emitLegacyEvent(X),log:(X,Y,j)=>jM(this.logger,X,Y,j),agentId:this.agentId,getConversationId:()=>this.conversation.getConversationId(),getActiveRunId:()=>this.activeRunId??"",appendRecoveryNotice:(X,Y)=>{this.conversation.appendMessage({role:"user",content:[{type:"text",text:X}]})}});let W=$.execution?.loopDetection;this.loopDetectionDisabled=W===!1;let J=W===!1||W===void 0?void 0:W;this.loopTracker=new M3(J)}getAgentId(){return this.agentId}getConversationId(){return this.conversation.getConversationId()}getMessages(){return this.conversation.getMessages()}canStartRun(){return!this.running&&!this.shutdownCalled}getExtensionRegistry(){return this.contributionRegistry.getRegistrySnapshot()}addTools($){if($.length===0)return;let Z=new Set(this.config.tools.map((W)=>W.name)),Q=[...this.config.tools];for(let W of $)if(!Z.has(W.name))Q.push(W),Z.add(W.name);this.config={...this.config,tools:Q}}updateConnection($){let Z={...this.config};if($.providerId!==void 0)Z.providerId=$.providerId;if($.modelId!==void 0)Z.modelId=$.modelId;if($.apiKey!==void 0)Z.apiKey=$.apiKey;if($.baseUrl!==void 0)Z.baseUrl=$.baseUrl;if($.headers!==void 0)Z.headers=$.headers;if($.providerConfig!==void 0)Z.providerConfig=$.providerConfig;if($.reasoningEffort!==void 0)Z.reasoningEffort=$.reasoningEffort;if($.thinking!==void 0)Z.thinking=$.thinking;if($.thinkingBudgetTokens!==void 0)Z.thinkingBudgetTokens=$.thinkingBudgetTokens;this.config=Z}clearHistory(){this.conversation.clearHistory(),this.resetConversationBoundaryTrackers()}restore($){this.conversation.restore($),this.resetConversationBoundaryTrackers()}resetConversationBoundaryTrackers(){this.messageBuilder.resetConversationState(),this.mistakeTracker.reset(),this.loopTracker.reset()}subscribeEvents($){return this.listeners.add($),()=>{this.listeners.delete($)}}abort($){let Z=typeof $==="string"?$:$ instanceof Error?$.message:$===void 0?void 0:String($);if(this.abortRequested=!0,this.abortReason=Z,this.activeRunPromise)this.activeRunPromise.catch(()=>{});this.activeRuntime?.abort(Z)}async shutdown($,Z){if(this.running){if(!this.abortRequested||!this.activeRunPromise)throw Error(`SessionRuntime.shutdown called while a run is in progress (agentId=${this.agentId})`);await this.activeRunPromise}if(this.shutdownCalled)return;this.shutdownCalled=!0}run($,Z,Q){return this.conversation.resetForRun(),this.resetConversationBoundaryTrackers(),this.executeRun({userMessage:$,userImages:Z,userFiles:Q,isContinue:!1})}continue($,Z,Q){return this.executeRun({userMessage:$,userImages:Z,userFiles:Q,isContinue:!0})}async composeSystemPrompt(){let $=[];for(let Z of this.contributionRegistry.getRegisteredRules()){let Q=await ZM(Z);if(Q)$.push(Q)}return QM(this.config.systemPrompt,$)}executeRun($){let Z;return Z=this.executeRunInternal($).finally(()=>{if(this.activeRunPromise===Z)this.activeRunPromise=null}),this.activeRunPromise=Z,Z}async executeRunInternal($){if(this.shutdownCalled)throw Error(`SessionRuntime.run called after shutdown (agentId=${this.agentId})`);if(this.running)throw Error(`SessionRuntime state is "running"; call canStartRun() first (agentId=${this.agentId})`);this.running=!0,this.abortRequested=!1,this.abortReason=void 0,this.activeRunId=`run_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,await this.ensureExtensionsInitialized(),this.eventAdapter.reset(),this.currentRunToolCalls=[],this.currentRunUsage={inputTokens:0,outputTokens:0},this.toolStartedAt.clear(),this.toolInputs.clear(),this.currentTurnSuccessfulTools=0,this.currentTurnFailedTools=0,this.currentTurnFailureDetails=[],this.activeTrackerWork=Promise.resolve(),this.trackerAbortInFlight=!1;let Z=new Date,Q=$.userMessage;if(Q!==void 0){let U=await HM(Q,$.userImages,$.userFiles,this.config.userFileContentLoader);this.conversation.appendMessage({role:"user",content:U})}let W=await this.composeSystemPrompt(),J=YB(this.config,this.logger,this.telemetry),X=new Map;for(let U of this.contributionRegistry.getRegisteredTools())X.set(U.name,U);let Y=XM([...X.values()],this.config.toolPolicies),j=new Map;for(let U of Y)j.set(U.name,U);for(let U of this.config.tools)j.set(U.name,U);let V=this.conversation.getConversationId(),H=TB(this.config),B=Array.from(j.values()),G=RZ(this.conversation.getMessages()),K=DB({agentConfig:this.config,sessionId:this.config.sessionId,agentId:this.agentId,conversationId:V,parentAgentId:this.parentAgentId,model:J,logger:this.logger,telemetry:this.telemetry,tools:B,toolContextMetadata:{modelSupportsImages:H?.capabilities?.includes("images")??!0,...this.config.toolContextMetadata,[MH]:this.telemetry},hooks:this.createRuntimeHooks(),prepareTurn:this.createRuntimePrepareTurn(H,B),initialMessages:G,systemPrompt:W}),F=this.createAgentRuntimeImpl(K);if(this.activeRuntime=F,this.abortRequested)F.abort(this.abortReason);let A=F.subscribe((U)=>{this.handleRuntimeEvent(U)}),L,f;try{if($.isContinue)L=await F.continue(void 0);else L=await F.run("")}catch(U){f=U instanceof Error?U:Error(String(U))}finally{A();try{await this.activeTrackerWork}catch(U){this.logger?.error?.("SessionRuntime tracker work failed during drain",{agentId:this.agentId,error:U})}this.activeRuntime=null,this.running=!1,this.abortRequested=!1,this.abortReason=void 0}if(L&&L.messages.length>0){let U=R8(L.messages);this.conversation.replaceMessages(U)}let D=new Date;try{return this.buildLegacyResult({runResult:L,thrownError:f,startedAt:Z,endedAt:D})}finally{this.activeRunId=null}}async ensureExtensionsInitialized(){if(this.extensionsInitialized)return;try{await this.contributionRegistry.initialize({tolerateSetupErrors:this.config.hookErrorMode!=="throw"})}catch($){if(this.config.hookErrorMode==="throw")throw $;this.emitLegacyEvent({type:"error",error:$ instanceof Error?$:Error(String($)),recoverable:!0,iteration:0})}this.extensionsInitialized=!0}createRuntimeHooks(){let $=YM([this.config.hooks,...this.contributionRegistry.getValidatedExtensions().map((Z)=>Z.hooks)]);return{...$,beforeModel:async(Z)=>{let Q=await $.beforeModel?.(Z);if(Q?.stop)return Q;let W=Q?.messages??Z.request.messages,J=await this.prepareMessagesForModelRequest(W);return{...Q,messages:J}}}}createRuntimePrepareTurn($,Z){let Q=this.config.prepareTurn;if(!Q)return;return async(W)=>{let J=R8(W.messages),X=await this.prepareProviderMessagesForApi(J),Y=await Q({agentId:W.agentId,conversationId:W.conversationId??this.conversation.getConversationId(),parentAgentId:W.parentAgentId??null,iteration:W.iteration,messages:J,apiMessages:X,abortSignal:W.signal??new AbortController().signal,systemPrompt:W.systemPrompt??"",tools:Z,model:{id:this.config.modelId,provider:this.config.providerId,info:$},emitStatusNotice:W.emitStatusNotice});if(!Y)return;return{...Y.messages?{messages:RZ(Y.messages)}:{},...Y.systemPrompt!==void 0?{systemPrompt:Y.systemPrompt}:{}}}}async prepareMessagesForModelRequest($){let Z=await this.prepareProviderMessagesForApi(EZ($));return RZ(Z)}async prepareProviderMessagesForApi($){let Z=$,Q=this.contributionRegistry.getRegistrySnapshot().messageBuilder;for(let W of Q)Z=await W.build(Z);return this.messageBuilder.buildForApi(Z)}handleRuntimeEvent($){switch($.type){case"message-added":case"assistant-message":{this.syncConversationFromRuntimeMessage($.snapshot.messages,[$.message]);break}case"turn-started":{this.currentTurnSuccessfulTools=0,this.currentTurnFailedTools=0,this.currentTurnFailureDetails=[];break}case"tool-started":{this.toolStartedAt.set($.toolCall.toolCallId,new Date),this.toolInputs.set($.toolCall.toolCallId,$.toolCall.input),this.inspectLoopForToolCall($.toolCall.toolName,$.toolCall.input,$.iteration);break}case"tool-finished":{let Z=this.toolStartedAt.get($.toolCall.toolCallId),Q=new Date,W=this.toolInputs.get($.toolCall.toolCallId);this.toolStartedAt.delete($.toolCall.toolCallId),this.toolInputs.delete($.toolCall.toolCallId);let J=$.message.content.find((V)=>V.type==="tool-result"),X=J?.type==="tool-result"&&J.isError===!0,Y=X?$M(J?.type==="tool-result"?J.output:void 0):void 0,j={id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:W,output:J?.type==="tool-result"?J.output:void 0,error:Y,durationMs:Z===void 0?0:Q.getTime()-Z.getTime(),startedAt:Z??Q,endedAt:Q};if(this.currentRunToolCalls.push(j),X){if(this.currentTurnFailedTools+=1,Y)this.currentTurnFailureDetails.push(`[${$.toolCall.toolName}] ${Y}`)}else this.currentTurnSuccessfulTools+=1;break}case"turn-finished":{let Z=this.currentTurnFailedTools,Q=this.currentTurnSuccessfulTools;if(Z>0&&Q===0){let W=this.currentTurnFailureDetails.join("; ");this.enqueueMistakeRecord({iteration:$.iteration,reason:"tool_execution_failed",details:`${Z} tool call(s) failed${W?`: ${W}`:""}`})}else if(Q>0)this.mistakeTracker.reset();break}case"usage-updated":{this.currentRunUsage={inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens>0?$.usage.cacheReadTokens:void 0,cacheWriteTokens:$.usage.cacheWriteTokens>0?$.usage.cacheWriteTokens:void 0,totalCost:$.usage.totalCost};break}default:break}for(let Z of this.eventAdapter.translate($))this.emitLegacyEvent(Z)}syncConversationFromRuntimeMessage($,Z){if($.length>0){this.conversation.replaceMessages(R8($));return}if(Z.length===0)return;let Q=new Set(this.conversation.getMessages().map((J)=>J.id).filter((J)=>typeof J==="string")),W=R8(Z).filter((J)=>!J.id||!Q.has(J.id));if(W.length===0)return;this.conversation.replaceMessages([...this.conversation.getMessages(),...W])}emitLegacyEvent($){for(let Z of this.listeners)try{Z($)}catch(Q){this.logger?.error?.("SessionRuntime event listener threw",{agentId:this.agentId,error:Q})}}inspectLoopForToolCall($,Z,Q){if(this.trackerAbortInFlight||this.loopDetectionDisabled)return;let W=this.loopTracker.inspect({name:$,input:Z});if(W.kind==="ok")return;if(W.kind==="soft"){if(W.message)this.conversation.appendMessage({role:"user",content:[{type:"text",text:W.message}]});return}this.enqueueMistakeRecord({iteration:Q,reason:"tool_execution_failed",forceAtLimit:!0,details:W.message??`Detected repeated tool calls to \`${$}\`; stopping to avoid a loop.`})}enqueueMistakeRecord($){if(this.trackerAbortInFlight)return;this.activeTrackerWork=this.activeTrackerWork.then(async()=>{if(this.trackerAbortInFlight)return;let Z=await this.mistakeTracker.record($);if(Z.action==="stop")this.trackerAbortInFlight=!0,this.conversation.appendMessage({role:"user",content:[{type:"text",text:Z.message}]}),this.activeRuntime?.abort(Z.reason??Z.message)})}buildLegacyResult($){let{runResult:Z,thrownError:Q,startedAt:W,endedAt:J}=$,X=J.getTime()-W.getTime(),Y=Q?"error":VM(Z),j=(Z?.status==="failed"?Z.error?.message:void 0)||Z?.outputText||"",V=Z?{inputTokens:Z.usage.inputTokens,outputTokens:Z.usage.outputTokens,cacheReadTokens:Z.usage.cacheReadTokens>0?Z.usage.cacheReadTokens:void 0,cacheWriteTokens:Z.usage.cacheWriteTokens>0?Z.usage.cacheWriteTokens:void 0,totalCost:Z.usage.totalCost}:this.currentRunUsage,H=Z?R8(Z.messages):this.conversation.getMessages(),B=TB(this.config);if(Q)throw Q;return{text:j,usage:V,messages:H,toolCalls:this.currentRunToolCalls,iterations:Z?.iterations??0,finishReason:Y,model:{id:this.config.modelId,provider:this.config.providerId,info:B},startedAt:W,endedAt:J,durationMs:X}}}function jM($,Z,Q,W){if(!$)return;if(Z==="debug"){$.debug(Q,W);return}if(Z==="error"&&$.error){$.error(Q,W);return}let J=Z==="warn"?"warn":Z==="error"?"error":"info";$.log(Q,{...W,severity:J})}function VM($){if(!$)return"error";switch($.status){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}async function HM($,Z,Q,W){let{buildInitialUserContent:J}=await Promise.resolve().then(() => _B);return J($,Z,Q,W)}function TB($){if($.knownModels?.[$.modelId])return $.knownModels[$.modelId];let Z=U3($);if(Z?.[$.modelId])return Z[$.modelId];return}import{buildClineSystemPrompt as OB}from"@cline/shared";function qB($,Z){let Q=$.trim();if(Z.providerId.toLowerCase()!=="cline")return Q;return OB({ide:Z.clineIdeName?.trim()||"Terminal",workspaceRoot:Z.cwd?.trim()||"/",providerId:Z.providerId,rules:`# Team Teammate Role
471
+ ${Q}`,platform:Z.clinePlatform,metadata:Z.workspaceMetadata})}function MB($,Z){let Q=$.trim();if(Z.providerId.toLowerCase()!=="cline")return Q;return OB({ide:Z.clineIdeName||"Terminal",workspaceRoot:Z.cwd?.trim()||"/",providerId:Z.providerId,overridePrompt:Q,metadata:Z.workspaceMetadata,platform:Z.clinePlatform})}function T$($){let Z={...$};return{getRuntimeConfig:()=>Z,getConnectionConfig:()=>({providerId:Z.providerId,modelId:Z.modelId,apiKey:Z.apiKey,baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking,maxTokensPerTurn:Z.maxTokensPerTurn}),updateConnectionDefaults:(Q)=>{Z={...Z,...Q}}}}function K2($){let Z=$.configProvider.getRuntimeConfig(),Q=$.kind==="teammate"?qB($.prompt,Z):MB($.prompt,Z);return{...$.configProvider.getConnectionConfig(),systemPrompt:Q,tools:$.tools,maxIterations:$.maxIterations??Z.maxIterations,parentAgentId:$.parentAgentId,abortSignal:$.abortSignal,onEvent:$.onEvent,hooks:Z.hooks,extensions:Z.extensions,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval,logger:Z.logger,role:$.role}}function O$($){let Z=K2($),Q=new z$(Z);if(Z.onEvent)Q.subscribeEvents(Z.onEvent);return Q}var KM=N3.object({systemPrompt:N3.string().describe("System prompt defining the sub-agent's behavior"),task:N3.string().describe("Task for the sub-agent to complete")});function q$($){return BM({name:"spawn_agent",description:"Spawn a sub-agent with a custom system prompt for specialized tasks. Use when delegating work that benefits from focused expertise.",inputSchema:GM(KM),execute:async(Z,Q)=>{let W=$.createSubAgentTools?await $.createSubAgentTools(Z,Q):$.subAgentTools??[],J=O$({kind:"subagent",prompt:Z.systemPrompt,configProvider:$.configProvider,tools:W,maxIterations:$.defaultMaxIterations,parentAgentId:Q.agentId,abortSignal:Q.signal,onEvent:$.onSubAgentEvent,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval}),X=J.getAgentId(),Y=J.getConversationId(),j=Q.agentId;if($.onSubAgentStart)try{await $.onSubAgentStart({subAgentId:X,conversationId:Y,parentAgentId:j,input:Z})}catch{}try{let V=await J.run(Z.task),H={text:V.text,iterations:V.iterations,finishReason:V.finishReason,usage:{inputTokens:V.usage.inputTokens,outputTokens:V.usage.outputTokens}};if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:X,conversationId:Y,parentAgentId:j,input:Z,result:H,agentResult:V})}catch{}return H}catch(V){if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:X,conversationId:Y,parentAgentId:j,input:Z,error:V instanceof Error?V:Error(String(V))})}catch{}throw V}},timeoutMs:300000,retryable:!1})}import{createTool as F0,TEAM_AWAIT_TIMEOUT_MS as FM,TEAM_RUN_MESSAGE_PREVIEW_LIMIT as AM,TEAM_RUN_TEXT_PREVIEW_LIMIT as fM,TEAM_TASK_IGNORED_FIELDS_BY_ACTION as UM,TeamAttachOutcomeFragmentInputSchema as RB,TeamAwaitRunsInputSchema as EB,TeamBroadcastInputSchema as NB,TeamBroadcastToolResultSchema as DM,TeamCancelRunInputSchema as wB,TeamCancelRunToolResultSchema as LM,TeamCleanupInputSchema as CB,TeamCleanupToolResultSchema as _M,TeamCreateOutcomeInputSchema as PB,TeamCreateOutcomeToolResultSchema as zM,TeamFinalizeOutcomeInputSchema as SB,TeamFinalizeOutcomeToolResultSchema as TM,TeamListOutcomesInputSchema as bB,TeamListRunsInputSchema as yB,TeamMailboxMessageToolResultSchema as OM,TeamMissionLogInputSchema as hB,TeamMissionLogToolResultSchema as qM,TeamOutcomeFragmentToolResultSchema as kB,TeamOutcomeToolResultSchema as MM,TeamReadMailboxInputSchema as IB,TeamReviewOutcomeFragmentInputSchema as xB,TeamRunTaskInputSchema as gB,TeamRunTaskToolResultSchema as w3,TeamRunToolSummarySchema as C3,TeamSendMessageInputSchema as mB,TeamSendMessageToolResultSchema as RM,TeamShutdownTeammateInputSchema as vB,TeamSimpleAgentStatusToolResultSchema as cB,TeamSpawnTeammateInputSchema as uB,TeamStatusInputSchema as dB,TeamStatusToolResultSchema as EM,TeamTaskInputSchema as lB,TeamTaskToolResultSchema as h6,validateWithZod as k,zodToJsonSchema as A0}from"@cline/shared";function pB($,Z){let Q=$.replace(/\s+/g," ").trim();if(Q.length<=Z)return Q;return`${Q.slice(0,Math.max(0,Z-3)).trimEnd()}...`}function F2($,Z){if($===void 0)throw Error(`Missing required field: ${Z}`);return $}function NM($){let Z=$.result;if(!Z)return;return{textPreview:pB(Z.text,fM),iterations:Z.iterations,finishReason:Z.finishReason,durationMs:Z.durationMs,usage:{inputTokens:Z.usage.inputTokens,outputTokens:Z.usage.outputTokens,cacheReadTokens:Z.usage.cacheReadTokens,cacheWriteTokens:Z.usage.cacheWriteTokens,totalCost:Z.usage.totalCost}}}function PZ($){return $?.toISOString()}function P3($){return{id:$.id,agentId:$.agentId,taskId:$.taskId,status:$.status,messagePreview:pB($.message,AM),priority:$.priority,retryCount:$.retryCount,maxRetries:$.maxRetries,nextAttemptAt:PZ($.nextAttemptAt),continueConversation:$.continueConversation,startedAt:$.startedAt.toISOString(),endedAt:PZ($.endedAt),leaseOwner:$.leaseOwner,heartbeatAt:PZ($.heartbeatAt),lastProgressAt:PZ($.lastProgressAt),lastProgressMessage:$.lastProgressMessage,currentActivity:$.currentActivity,error:$.error,resultSummary:NM($)}}function wM($){if($.status==="failed")throw Error(`Run "${$.id}" failed${$.error?`: ${$.error}`:""}`);if($.status==="cancelled")throw Error(`Run "${$.id}" was cancelled${$.error?`: ${$.error}`:""}`);if($.status==="interrupted")throw Error(`Run "${$.id}" was interrupted${$.error?`: ${$.error}`:""}`)}var N8=["team_spawn_teammate","team_shutdown_teammate","team_status","team_task","team_run_task","team_cancel_run","team_list_runs","team_await_runs","team_send_message","team_broadcast","team_read_mailbox","team_mission_log","team_cleanup","team_create_outcome","team_attach_outcome_fragment","team_review_outcome_fragment","team_finalize_outcome","team_list_outcomes"];function rB($){let Z=[];if($.createBaseTools)Z.push(...$.createBaseTools());Z.push(...A2({runtime:$.runtime,requesterId:$.spec.agentId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!1})),$.runtime.spawnTeammate({agentId:$.spec.agentId,config:K2({kind:"teammate",prompt:$.spec.rolePrompt,role:$.spec.rolePrompt,configProvider:$.teammateConfigProvider,tools:Z,maxIterations:$.spec.maxIterations,cwd:$.teammateConfigProvider.getRuntimeConfig().cwd})})}function w8($){let Z=$.leadAgentId??"lead",Q=$.restoredFromPersistence===!0,W=A2({runtime:$.runtime,requesterId:Z,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!0,includeSpawnTool:$.includeLeadSpawnTool,includeManagementTools:$.includeLeadManagementTools,onLeadToolsUnlocked:$.onLeadToolsUnlocked}),J=[];for(let X of $.restoredTeammates??[]){if($.runtime.isTeammateActive(X.agentId))continue;rB({runtime:$.runtime,requesterId:Z,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:X}),J.push(X.agentId)}return{tools:W,restoredFromPersistence:Q,restoredTeammates:J}}function A2($){let Z=$.allowSpawn??!0,Q=$.includeSpawnTool??!0,W=$.includeManagementTools??!0,J=[];if(Q)J.push(F0({name:"team_spawn_teammate",description:"Spawn a teammate with a required agentId and rolePrompt.",inputSchema:A0(uB),execute:async(Y)=>{let j=k(uB,Y);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");if(!Z)throw Error("Spawning teammates is disabled in this context.");let V={agentId:j.agentId,rolePrompt:j.rolePrompt};if(rB({runtime:$.runtime,requesterId:$.requesterId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:V}),!W)$.onLeadToolsUnlocked?.(A2({...$,includeSpawnTool:!1,includeManagementTools:!0,onLeadToolsUnlocked:void 0}));return k(cB,{agentId:j.agentId,status:"spawned"})}}));if(!W)return J;J.push(F0({name:"team_shutdown_teammate",description:"Shutdown a teammate by agentId.",inputSchema:A0(vB),execute:async(Y)=>{let j=k(vB,Y);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");return $.runtime.shutdownTeammate(j.agentId,j.reason),k(cB,{agentId:j.agentId,status:"stopped"})}})),J.push(F0({name:"team_status",description:"Return a snapshot of team members, task counts, mailbox, and mission log stats.",inputSchema:A0(dB),execute:async(Y)=>{return k(dB,Y),k(EM,$.runtime.getSnapshot())}})),J.push(F0({name:"team_task",description:"Manage shared team tasks with action-specific payloads. create requires title and description, with optional dependsOn and assignee. list accepts optional status, assignee. claim requires taskId. complete requires taskId and summary. block requires taskId and reason. Do not include fields from other actions.",inputSchema:A0(lB),execute:async(Y)=>{let j=k(lB,Y);switch(j.action){case"create":{let V=new Set(UM.create??[]),H=Object.entries(Y).filter(([G,K])=>V.has(G)&&K!=null).map(([G])=>G),B=$.runtime.createTask({title:F2(j.title,"title"),description:F2(j.description,"description"),dependsOn:j.dependsOn,assignee:j.assignee,createdBy:$.requesterId});return k(h6,{action:"create",taskId:B.id,status:B.status,...H.length>0?{ignoredFields:H,note:`Ignored fields for action=create: ${H.join(", ")}`}:{}})}case"list":return k(h6,{action:"list",tasks:$.runtime.listTaskItems({status:j.status,assignee:j.assignee})});case"claim":{let V=$.runtime.claimTask(F2(j.taskId,"taskId"),$.requesterId);return k(h6,{action:"claim",taskId:V.id,status:V.status,nextStep:"Task is now in_progress. Execute the work using team_run_task or your own tools, then call team_task with action=complete when done."})}case"complete":{let V=$.runtime.completeTask(F2(j.taskId,"taskId"),$.requesterId,F2(j.summary,"summary"));return k(h6,{action:"complete",taskId:V.id,status:V.status})}case"block":{let V=$.runtime.blockTask(F2(j.taskId,"taskId"),$.requesterId,F2(j.reason,"reason"));return k(h6,{action:"block",taskId:V.id,status:V.status})}}}}));let X=new Map;return J.push(F0({name:"team_run_task",description:"Route a delegated task to a teammate. Choose sync (wait) or async (run in background).",inputSchema:A0(gB),execute:async(Y)=>{let j=k(gB,Y);if(j.runMode==="async"){let B=$.runtime.startTeammateRun(j.agentId,j.task,{taskId:j.taskId||void 0,fromAgentId:$.requesterId,continueConversation:j.continueConversation||void 0});return k(w3,{agentId:j.agentId,mode:"async",status:"queued",dispatched:!0,message:`Task dispatched to ${j.agentId} and queued as ${B.id}.`,runId:B.id})}let V=X.get(j.agentId);if(V){let B=await V;return k(w3,{...B,status:"joined",deduped:!0,message:`Task for ${j.agentId} was already dispatched in this tool batch; joined the existing in-flight run.`})}let H=$.runtime.routeToTeammate(j.agentId,j.task,{taskId:j.taskId||void 0,fromAgentId:$.requesterId,continueConversation:j.continueConversation||void 0}).then((B)=>k(w3,{agentId:j.agentId,mode:"sync",status:"running",dispatched:!0,message:`Task dispatched to ${j.agentId} and completed in sync mode.`,text:B.text,iterations:B.iterations})).finally(()=>{X.delete(j.agentId)});return X.set(j.agentId,H),await H}})),J.push(F0({name:"team_cancel_run",description:"Cancel one async teammate run.",inputSchema:A0(wB),execute:async(Y)=>{let j=k(wB,Y),V=$.runtime.cancelRun(j.runId,j.reason);return k(LM,{runId:V.id,status:V.status})}})),J.push(F0({name:"team_list_runs",description:"List teammate runs started with team_run_task in async mode, including live activity/progress fields when available.",inputSchema:A0(yB),execute:async(Y)=>k(C3.array(),$.runtime.listRuns(k(yB,Y)).map(P3))})),J.push(F0({name:"team_await_runs",description:"Wait for async teammate runs. Provide runId to wait for one run, or omit it to wait for all active async runs. Uses a long timeout for legitimate teammate work.",inputSchema:A0(EB),timeoutMs:FM,execute:async(Y)=>{let j=k(EB,Y);if(j.runId){let B=await $.runtime.awaitRun(j.runId);return wM(B),k(C3,P3(B))}let V=await $.runtime.awaitAllRuns(),H=V.filter((B)=>["failed","cancelled","interrupted"].includes(B.status));if(H.length>0){let B=H.map((G)=>`${G.id}:${G.status}${G.error?`(${G.error})`:""}`).join(", ");throw Error(`One or more runs did not complete successfully: ${B}`)}return k(C3.array(),V.map(P3))}})),J.push(F0({name:"team_send_message",description:"Send a mailbox message to a specific teammate.",inputSchema:A0(mB),execute:async(Y)=>{let j=k(mB,Y),V=$.runtime.sendMessage($.requesterId,j.toAgentId,j.subject,j.body,j.taskId??void 0);return k(RM,{id:V.id,toAgentId:V.toAgentId})}})),J.push(F0({name:"team_broadcast",description:"Broadcast a message to all teammates.",inputSchema:A0(NB),execute:async(Y)=>{let j=k(NB,Y),V=$.runtime.broadcast($.requesterId,j.subject,j.body,{taskId:j.taskId??void 0});return k(DM,{delivered:V.length})}})),J.push(F0({name:"team_read_mailbox",description:"Read the current agent mailbox.",inputSchema:A0(IB),execute:async(Y)=>{let j=k(IB,Y);return k(OM.array(),$.runtime.listMailbox($.requesterId,{unreadOnly:j.unreadOnly,markRead:!0}))}})),J.push(F0({name:"team_mission_log",description:"Append a mission log update for your team.",inputSchema:A0(hB),execute:async(Y)=>{let j=k(hB,Y),V=$.runtime.appendMissionLog({agentId:$.requesterId,taskId:j.taskId||void 0,kind:j.kind,summary:j.summary,evidence:j.evidence?.length?j.evidence:void 0,nextAction:j.nextAction||void 0});return k(qM,{id:V.id})}})),J.push(F0({name:"team_cleanup",description:"Clean up the team runtime. Fails if teammates are still running.",inputSchema:A0(CB),execute:async(Y)=>{if(k(CB,Y),$.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can run cleanup.");return $.runtime.cleanup(),k(_M,{status:"cleaned"})}})),J.push(F0({name:"team_create_outcome",description:"Create a converged team outcome.",inputSchema:A0(PB),execute:async(Y)=>{let j=k(PB,Y),V=$.runtime.createOutcome({title:j.title,requiredSections:j.requiredSections,createdBy:$.requesterId});return k(zM,{outcomeId:V.id,status:V.status,requiredSections:V.requiredSections})}})),J.push(F0({name:"team_attach_outcome_fragment",description:"Attach a fragment to an outcome section.",inputSchema:A0(RB),execute:async(Y)=>{let j=k(RB,Y),V=$.runtime.attachOutcomeFragment({outcomeId:j.outcomeId,section:j.section,sourceAgentId:$.requesterId,sourceRunId:j.sourceRunId||void 0,content:j.content});return k(kB,{fragmentId:V.id,status:V.status})}})),J.push(F0({name:"team_review_outcome_fragment",description:"Review one outcome fragment.",inputSchema:A0(xB),execute:async(Y)=>{let j=k(xB,Y),V=$.runtime.reviewOutcomeFragment({fragmentId:j.fragmentId,reviewedBy:$.requesterId,approved:j.approved});return k(kB,{fragmentId:V.id,status:V.status})}})),J.push(F0({name:"team_finalize_outcome",description:"Finalize one outcome.",inputSchema:A0(SB),execute:async(Y)=>{let j=k(SB,Y),V=$.runtime.finalizeOutcome(j.outcomeId);return k(TM,{outcomeId:V.id,status:V.status})}})),J.push(F0({name:"team_list_outcomes",description:"List team outcomes.",inputSchema:A0(bB),execute:async(Y)=>{return k(bB,Y),k(MM.array(),$.runtime.listOutcomes())}})),J}function SZ($){return{...$,tasks:$.tasks.map((Z)=>({...Z,createdAt:new Date(Z.createdAt),updatedAt:new Date(Z.updatedAt)})),mailbox:$.mailbox.map((Z)=>({...Z,sentAt:new Date(Z.sentAt),readAt:Z.readAt?new Date(Z.readAt):void 0})),missionLog:$.missionLog.map((Z)=>({...Z,ts:new Date(Z.ts)})),runs:($.runs??[]).map((Z)=>({...Z,startedAt:new Date(Z.startedAt),endedAt:Z.endedAt?new Date(Z.endedAt):void 0,nextAttemptAt:Z.nextAttemptAt?new Date(Z.nextAttemptAt):void 0,heartbeatAt:Z.heartbeatAt?new Date(Z.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),finalizedAt:Z.finalizedAt?new Date(Z.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),reviewedAt:Z.reviewedAt?new Date(Z.reviewedAt):void 0}))}}function iB($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}var CM=[{id:"read_files",description:"Read the content of text or image files at the provided absolute paths, or return only an inclusive one-based line range when start_line/end_line are provided. Long files are windowed; page with start_line/end_line.",headlessToolNames:["read_files"]},{id:"search_codebase",description:"Perform regex pattern searches across the codebase for code patterns, definitions, imports, and other text matches.",headlessToolNames:["search_codebase"]},{id:"run_commands",description:"Run shell commands from the root of the workspace for listing files, checking git status, builds, tests, and similar tasks.",headlessToolNames:["run_commands"]},{id:"editor",description:"Make controlled filesystem edits on text files with create, replace, and insert operations.",headlessToolNames:["editor"]},{id:"fetch_web_content",description:"Fetch URL content and analyze it with a prompt describing what to extract.",headlessToolNames:["fetch_web_content"]},{id:"skills",description:"Execute a configured skill within the main conversation when a matching skill exists for the task.",headlessToolNames:["skills"]},{id:"ask_question",description:"Ask the user a single clarifying question with 2-5 selectable options.",headlessToolNames:["ask_question"]},{id:"spawn_agent",description:q$({configProvider:{}}).description,headlessToolNames:["spawn_agent"]},{id:"teams",description:"Enable team collaboration tools for teammate management, task coordination, mailbox messaging, mission logs, and outcomes.",headlessToolNames:[...N8]}],PM={read_files:"enableReadFiles",search_codebase:"enableSearch",run_commands:"enableBash",fetch_web_content:"enableWebFetch",apply_patch:"enableApplyPatch",editor:"enableEditor",skills:"enableSkills",ask_question:"enableAskQuestion"};function SM($){return $==="plan"||$==="yolo"?$:"act"}function aB($){let Z=SM($.mode),Q=u0[l1({mode:Z})],W=M8($.providerId??"",$.modelId??"",Z,q8);return{mode:Z,flags:{...Q,...W,...typeof $.enableSpawnAgent==="boolean"?{enableSpawnAgent:$.enableSpawnAgent}:{},...typeof $.enableAgentTeams==="boolean"?{enableAgentTeams:$.enableAgentTeams}:{}}}}function nB($,Z){if(Z.disabledToolIds?.has($))return!1;let{flags:Q}=aB(Z);if($==="spawn_agent")return Q.enableSpawnAgent===!0;if($==="teams")return Q.enableAgentTeams===!0;if($==="editor")return Q.enableEditor===!0||Q.enableApplyPatch===!0;let W=PM[$];return W?Q[W]===!0:!1}function bM($,Z){if($.id==="editor"){let{flags:Q}=aB(Z),W=Q.enableApplyPatch===!0&&Q.enableEditor!==!0;return{...$,defaultEnabled:nB($.id,Z),headlessToolNames:[W?"apply_patch":"editor"]}}return{...$,defaultEnabled:nB($.id,Z)}}function f2($={}){return CM.map((Z)=>bM(Z,$))}function bZ($={}){return f2($).filter((Z)=>Z.defaultEnabled).map((Z)=>Z.id)}function yZ($){if(!$.enabled)return new Set;let Z=f2($.availabilityContext),Q=new Set(Z.map((W)=>W.id));if(!$.allowlist||$.allowlist.length===0)return new Set(Z.filter((W)=>W.defaultEnabled).map((W)=>W.id));for(let W of $.allowlist)if(!Q.has(W))throw Error(`Unknown tool "${W}". Available tools: ${Z.map((J)=>J.id).join(", ")}`);return new Set($.allowlist)}function k6($,Z={}){return f2(Z).filter((Q)=>$.has(Q.id)).flatMap((Q)=>Q.headlessToolNames)}function hZ($,Z={}){return k6($,Z)}function U2($={}){let{executorOptions:Z={},executors:Q,...W}=$,J={...O8(Z),...Q??{}};return D$({...W,executors:J})}import{mkdirSync as gM,writeFileSync as mM}from"node:fs";import{dirname as vM}from"node:path";import{normalizeUserInput as cM}from"@cline/shared";import{nanoid as uM}from"nanoid";var oB={};N(oB,{sanitizeSessionToken:()=>D2,parseTeamTaskSubSessionId:()=>P8,parseSubSessionId:()=>x6,makeTeamTaskSubSessionId:()=>I6,makeSubSessionId:()=>C8,deriveSubsessionStatus:()=>g6});import{nanoid as kM}from"nanoid";function D2($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function C8($,Z){let Q=D2($),W=D2(Z),J=`${Q}__${W}`;return J.length>180?J.slice(0,180):J}function I6($,Z){let Q=D2($),W=D2(Z);return`${Q}__teamtask__${W}__${kM(6)}`}function P8($){let Q=$.indexOf("__teamtask__");if(Q<=0)return null;let W=$.slice(0,Q),J=$.slice(Q+12),X=J.lastIndexOf("__");if(X<=0)return null;let Y=J.slice(0,X),j=J.slice(X+2);if(!W||!Y||!j)return null;return{rootSessionId:W,agentId:Y,teamTaskId:j}}function x6($){if(P8($))return null;let Z="__",Q=$.indexOf(Z);if(Q<=0)return null;let W=$.slice(0,Q),J=$.slice(Q+Z.length);if(!W||!J)return null;return{rootSessionId:W,agentId:J}}function g6($){switch($.hookName){case"agent_end":return"completed";case"agent_error":return"failed";case"session_shutdown":{let Z=String($.reason??"").toLowerCase();if(Z.includes("cancel")||Z.includes("abort")||Z.includes("interrupt"))return"cancelled";if(Z.includes("fail")||Z.includes("error"))return"failed";return"completed"}default:return"running"}}import{z as $0}from"zod";var $G={};N($G,{isTerminalSessionStatus:()=>eB,isNonTerminalSessionStatus:()=>H0,SessionSource:()=>T0,SESSION_STATUSES:()=>m6,NON_TERMINAL_SESSION_STATUSES:()=>tB});import{SESSION_STATUS_VALUES as IM}from"@cline/shared";var m6=IM,tB=["idle","running","pending"];function eB($){return!tB.includes($)}function H0($){return!eB($)}var T0={CORE:"core",CLI:"cli",SUBAGENT:"subagent",DESKTOP:"desktop",KANBAN:"kanban",API:"api",WEB:"web",VSCODE:"vscode",ENTERPRISE:"enterprise",IDE:"ide",JETBRAINS:"jetbrains",NEOVIM:"neovim",UNKNOWN:"unknown"};var xM=$0.enum(m6),b0=$0.object({version:$0.literal(1),session_id:$0.string().min(1),source:$0.string().min(1),pid:$0.number().int(),started_at:$0.string().min(1),ended_at:$0.string().min(1).optional(),exit_code:$0.number().int().nullable().optional(),status:xM,interactive:$0.boolean(),provider:$0.string().min(1),model:$0.string().min(1),cwd:$0.string().min(1),workspace_root:$0.string().min(1),team_name:$0.string().min(1).optional(),enable_tools:$0.boolean(),enable_spawn:$0.boolean(),enable_teams:$0.boolean(),prompt:$0.string().optional(),metadata:$0.record($0.string(),$0.unknown()).optional(),messages_path:$0.string().min(1).optional()});function ZG($){if(!$)return!1;return Object.values($).some((Z)=>typeof Z==="function")}function b3($,Z){let Q=[...$??[],...Z??[]];if(Q.length===0)return;let W=[],J=new Set;for(let X of Q){if(J.has(X.name))continue;J.add(X.name),W.push(X)}return W}function QG($){return JSON.stringify($,(Z,Q)=>{if(Q instanceof Error)return{name:Q.name,message:Q.message,stack:Q.stack};return Q})}function p1($){return typeof $==="string"&&$.trim()?$.trim():void 0}function S3($,Z){let Q={...$};Q.id=p1(Q.id)??uM();let W=Q.modelInfo&&typeof Q.modelInfo==="object"?{...Q.modelInfo}:void 0,J={id:p1(W?.id)??p1(Q.modelId)??p1(Z?.id),provider:p1(W?.provider)??p1(Q.providerId)??p1(Z?.provider),family:p1(W?.family)??p1(Z?.family)};if(delete Q.providerId,delete Q.modelId,J.id&&J.provider)Q.modelInfo={id:J.id,provider:J.provider,...J.family?{family:J.family}:{}};else delete Q.modelInfo;return Q}function kZ($){return $.map((Z)=>S3(Z))}function IZ($,Z,Q=[]){let W=$.map((V,H)=>{let B=Q[H],K=B?.role===V.role&&JSON.stringify(B.content)===JSON.stringify(V.content)?{...B,...V}:{...V};return S3(K)}),J=Q.length,X=[];for(let V=J;V<W.length;V+=1)if(W[V]?.role==="assistant")X.push(V);if(X.length===0){let V=[...W].reverse().findIndex((H)=>H.role==="assistant");if(V===-1)return W;X.push(W.length-1-V)}let Y=X[X.length-1],j=X.some((V)=>W[V]?.metrics);for(let V of X){let H=W[V],B=H.metrics;if(!B&&V===Y&&!j){let G=Z.usage;B={inputTokens:G.inputTokens,outputTokens:G.outputTokens,cacheReadTokens:G.cacheReadTokens??0,cacheWriteTokens:G.cacheWriteTokens??0,cost:G.totalCost}}W[V]={...S3(H,{id:Z.model.id,provider:Z.model.provider,family:Z.model.info?.family}),...B?{metrics:B}:{},ts:H.ts??Z.endedAt.getTime()}}return W}function v6($){return{sessionId:$.sessionId,source:$.source,pid:$.pid,startedAt:$.startedAt,endedAt:$.endedAt??null,exitCode:$.exitCode??null,status:$.status,interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspaceRoot:$.workspaceRoot,teamName:$.teamName??void 0,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,parentSessionId:$.parentSessionId??void 0,parentAgentId:$.parentAgentId??void 0,agentId:$.agentId??void 0,conversationId:$.conversationId??void 0,isSubagent:$.isSubagent,prompt:$.prompt??void 0,metadata:$.metadata??void 0,messagesPath:$.messagesPath??void 0,updatedAt:$.updatedAt}}var dM=120;function L2($){let Z=$?.trim();return Z?Z.slice(0,dM):void 0}function y3($){let Z=cM($??"").trim();if(!Z)return;return L2(Z.split(`
472
+ `)[0]?.trim())}function M$($){if(!$)return;let Z={...$},Q=L2(typeof Z.title==="string"?Z.title:void 0);if(Q)Z.title=Q;else delete Z.title;return Object.keys(Z).length>0?Z:void 0}function c6($){let Z=M$($.metadata)??{},Q=$.title!==void 0?L2($.title):y3($.prompt);if(Q)Z.title=Q;return Object.keys(Z).length>0?Z:void 0}function h3($){let Z=P8($);if(Z)return{agent:"teammate",sessionId:Z.rootSessionId,taskType:"team"};let Q=x6($);if(Q)return{agent:"subagent",sessionId:Q.rootSessionId,taskType:"subagent_task"};return{agent:"lead",sessionId:$}}function k3($){return{version:1,updated_at:$.updatedAt,agent:$.context.agent,sessionId:$.context.sessionId,...$.context.taskType?{taskType:$.context.taskType}:{},messages:kZ($.messages),...$.systemPrompt?{system_prompt:$.systemPrompt}:{}}}function WG($,Z,Q){gM(vM($),{recursive:!0}),mM($,`${JSON.stringify(k3({updatedAt:Z,context:Q,messages:[]}),null,2)}
473
+ `,"utf8")}function JG($,Z){return b0.parse({version:1,session_id:$.sessionId,source:$.source,pid:$.pid,started_at:$.startedAt,ended_at:Z?.endedAt??$.endedAt??void 0,exit_code:Z?.exitCode??$.exitCode??void 0,status:Z?.status??$.status,interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspace_root:$.workspaceRoot,team_name:$.teamName??void 0,enable_tools:$.enableTools,enable_spawn:$.enableSpawn,enable_teams:$.enableTeams,prompt:$.prompt??void 0,metadata:Z?.metadata??$.metadata??void 0,messages_path:$.messagesPath??void 0})}async function XG($,Z,Q){let W=0;while(!0){let J=await $();if(J===void 0)return{updated:!1};let X=await Z(J);if(typeof X==="object"&&X!==null&&"updated"in X&&X.updated===!1){if(W+=1,W>=Q)return X;continue}return X}}_0();var YG={};N(YG,{summarizeUsageFromMessages:()=>b8,sumUsageTotals:()=>u6,getCurrentContextSize:()=>I3,createInitialAccumulatedUsage:()=>D0,accumulateUsageTotals:()=>f0});function D0(){return{inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0}}function f0($,Z){return{inputTokens:$.inputTokens+Math.max(0,Z.inputTokens??0),outputTokens:$.outputTokens+Math.max(0,Z.outputTokens??0),cacheReadTokens:$.cacheReadTokens+Math.max(0,Z.cacheReadTokens??0),cacheWriteTokens:$.cacheWriteTokens+Math.max(0,Z.cacheWriteTokens??0),totalCost:$.totalCost+Math.max(0,Z.totalCost??0)}}function u6($){let Z=D0();for(let Q of $)Z=f0(Z,Q);return Z}function S8($){return typeof $==="number"&&Number.isFinite($)?$:0}function b8($){let Z=D0();for(let Q of $){let W=Q.metrics;if(!W)continue;Z=f0(Z,{inputTokens:S8(W.inputTokens),outputTokens:S8(W.outputTokens),cacheReadTokens:S8(W.cacheReadTokens),cacheWriteTokens:S8(W.cacheWriteTokens),totalCost:S8(W.cost)})}return Z}function I3($){for(let Z=$.length-1;Z>=0;Z-=1){let Q=$[Z];if(Q?.role!=="assistant")continue;let W=S8(Q.metrics?.inputTokens);return W>0?W:void 0}return}function lM($){if(!$||typeof $!=="object")return;let Z=$,Q=Z.skill??Z.skill_name??Z.skillName;if(typeof Q!=="string")return;let W=Q.trim();return W.length>0?W:void 0}function x3($){if(!$||typeof $!=="object")return{};let Z=$;return{agentId:typeof Z.agentId==="string"?Z.agentId:void 0,conversationId:typeof Z.conversationId==="string"?Z.conversationId:void 0,parentAgentId:typeof Z.parentAgentId==="string"?Z.parentAgentId:void 0}}function r1($){let Z=$.agentId?.trim();if(!Z)return;let Q=$.parentAgentId?.trim()||void 0,W=$.teamRole,J="root";if(W==="teammate")J="team_teammate";else if(W==="lead")J="team_lead";else if(Q)J="subagent";return{agentId:Z,agentKind:J,conversationId:$.conversationId?.trim()||void 0,parentAgentId:Q,createdByAgentId:$.createdByAgentId?.trim()||Q||void 0,isSubagent:Boolean(Q),teamId:$.teamId?.trim()||void 0,teamName:$.teamName?.trim()||void 0,teamRole:W,teamAgentId:$.teamAgentId?.trim()||void 0}}function pM($){return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheWriteTokens:$.cacheWriteTokens,cacheReadTokens:$.cacheReadTokens,totalCost:$.cost}}function rM($){let Z=$.isPrimaryAgentEvent?[$.overrides?.agentId,$.eventMetadata.agentId,$.overrides?.teamAgentId]:[$.overrides?.teamAgentId,$.overrides?.agentId,$.eventMetadata.agentId,$.eventMetadata.conversationId];for(let Q of Z){let W=Q?.trim();if(W)return W}return $.isPrimaryAgentEvent?"root":"unknown"}function g3($,Z,Q){let{sessionId:W,config:J,liveSession:X,emit:Y}=$,j=J.telemetry,V=X?.runtime.teamRuntime,H=Q?.isPrimaryAgentEvent??!0,B=x3(Z),G=r1({agentId:Q?.agentId??B.agentId,conversationId:Q?.conversationId??B.conversationId,parentAgentId:Q?.parentAgentId??B.parentAgentId,createdByAgentId:Q?.createdByAgentId,teamId:Q?.teamId??V?.getTeamId(),teamName:Q?.teamName??V?.getTeamName(),teamRole:Q?.teamRole,teamAgentId:Q?.teamAgentId});if(Z.type==="content_start"&&Z.contentType==="tool"&&Z.toolName==="skills"){let K=lM(Z.input);if(K)N9(j,{ulid:W,skillName:K,skillSource:"project",skillsAvailableGlobal:0,skillsAvailableProject:0,provider:J.providerId,modelId:J.modelId,...G})}if(Z.type==="content_end"&&Z.contentType==="tool"){let K=Z.toolName??"unknown",F=!Z.error;if(W8(j,{ulid:W,tool:K,autoApproved:void 0,success:F,modelId:J.modelId,provider:J.providerId,...G}),!F&&(K==="editor"||K==="apply_patch"))w9(j,{ulid:W,modelId:J.modelId,provider:J.providerId,errorType:Z.error,...G})}if(Z.type==="notice"&&Z.reason==="api_error")m4(j,{ulid:W,model:J.modelId,provider:J.providerId,errorMessage:Z.message,...G});if(Z.type==="error")m4(j,{ulid:W,model:J.modelId,provider:J.providerId,errorMessage:Z.error?.message??"unknown error",...G});if(Z.type==="usage"&&X?.turnUsageBaseline){let K=pM(Z);if(H){X.turnPrimaryUsage=f0(X.turnPrimaryUsage??D0(),K);let A=f0(X.turnUsageBaseline,X.turnPrimaryUsage);$.usageBySession.set(W,A),Q8(j,{ulid:W,provider:J.providerId,model:J.modelId,source:"assistant",mode:J.mode,...G}),R9(j,{ulid:W,tokensIn:Z.inputTokens,tokensOut:Z.outputTokens,cacheWriteTokens:Z.cacheWriteTokens,cacheReadTokens:Z.cacheReadTokens,totalCost:Z.cost,model:J.modelId,...G})}else{let A=rM({isPrimaryAgentEvent:H,overrides:Q,eventMetadata:B}),L=X.turnUsageByAgent??new Map;X.turnUsageByAgent=L,L.set(A,f0(L.get(A)??D0(),K))}let F=f0(X.turnPrimaryUsage??D0(),u6(X.turnUsageByAgent?.values()??[]));$.aggregateUsageBySession.set(W,f0(X.turnAggregateUsageBaseline??X.turnUsageBaseline,F))}if(Z.type==="iteration_end"&&H)$.persistMessages(W,X?.agent.getMessages()??[],X?.config.systemPrompt);Y({type:"agent_event",payload:{sessionId:W,event:Z,teamAgentId:Q?.teamAgentId,teamRole:Q!==void 0?Q.teamRole??(H?"lead":void 0):void 0}}),Y({type:"chunk",payload:{sessionId:W,stream:"agent",chunk:QG(Z),ts:Date.now()}})}function R$($){return $.workspaceRoot??$.cwd}import{hasRuntimeConfigExtension as $N}from"@cline/shared";$1();import{existsSync as uZ,readFileSync as yR,statSync as hR}from"node:fs";import{basename as kR,dirname as vZ,join as dZ,resolve as cZ}from"node:path";import{discoverPluginModulePaths as IR,resolveConfiguredPluginModulePaths as NG,resolvePluginConfigSearchPaths as xR,SKILLS_CONFIG_DIRECTORY_NAME as gR}from"@cline/shared/storage";import{resolve as KR}from"node:path";import{normalizePluginManifest as FR}from"@cline/shared";import{existsSync as O0,readFileSync as h8}from"node:fs";import{builtinModules as iM,createRequire as u3}from"node:module";import{dirname as E$,extname as l6,isAbsolute as nM,resolve as p}from"node:path";import{fileURLToPath as VG}from"node:url";import{PLUGIN_FILE_EXTENSIONS as aM}from"@cline/shared";var HG=E$(VG(import.meta.url)),sM=u3(import.meta.url),oM=p(HG,"..","..","..","..",".."),m3=$R(oM),tM=["@cline/sdk","@cline/agents","@cline/core","@cline/core/hub","@cline/core/hub/daemon-entry","@cline/core/telemetry","@cline/llms","@cline/llms/browser","@cline/shared","@cline/shared/automation","@cline/shared/browser","@cline/shared/storage","@cline/shared/db","@cline/shared/types"],d3=new Set(iM.flatMap(($)=>[$,$.replace(/^node:/,"")])),d6=new Set(aM),eM=["development","node","import","require","default"];function $R($){let Z={},Q={"@cline/sdk":p($,"packages/sdk/src/index.ts"),"@cline/agents":p($,"packages/agents/src/index.ts"),"@cline/core":p($,"packages/core/src/index.ts"),"@cline/llms":p($,"packages/llms/src/index.ts"),"@cline/shared":p($,"packages/shared/src/index.ts"),"@cline/shared/storage":p($,"packages/shared/src/storage/index.ts"),"@cline/shared/db":p($,"packages/shared/src/db/index.ts")};for(let[W,J]of Object.entries(Q))if(O0(J))Z[W]=J;for(let W of["agents","core","llms","shared"]){let J=p($,"packages",W),X=p(J,"package.json");if(!O0(X))continue;try{let Y=JSON.parse(h8(X,"utf8"));if(typeof Y.name!=="string"||!Y.exports)continue;if(typeof Y.exports==="string"){let j=p(J,Y.exports);if(O0(j))Z[Y.name]=j;continue}if(typeof Y.exports!=="object")continue;for(let[j,V]of Object.entries(Y.exports)){let H=ZR(J,V);if(!H)continue;let B=j==="."?Y.name:`${Y.name}/${j.replace(/^\.\//,"")}`;Z[B]=H}}catch{}}return Z}function ZR($,Z){let Q=l3(Z);if(!Q)return null;let W=BG($,Q);for(let J of W)if(O0(J))return J;return null}function l3($,Z=new Set){if(typeof $==="string")return $;if(!$||typeof $!=="object")return null;if(Z.has($))return null;Z.add($);let Q=$;for(let W of eM){let J=l3(Q[W],Z);if(J)return J}return null}function BG($,Z){let Q=Z.replace(/^\.\//,""),W=[p($,Z)];if(Q.startsWith("dist/")){let J=Q.replace(/^dist\//,"src/").replace(/\.(mjs|cjs|js)$/,"");return[p($,`${J}.ts`),p($,`${J}.tsx`),p($,`${J}.mts`),p($,`${J}.cts`),...W]}return W}function QR($){return Object.fromEntries(Object.entries($).sort(([Z],[Q])=>Q.length-Z.length))}function xZ($){return!($.startsWith(".")||$.startsWith("/")||$.startsWith("file:")||$.startsWith("data:")||$.startsWith("http:")||$.startsWith("https:"))}function y8($){if($.startsWith("@")){let[Z,Q]=$.split("/",3);return Q?`${Z}/${Q}`:$}return $.split("/",1)[0]??$}function WR($){let Z=y8($);if($===Z)return".";return`.${$.slice(Z.length)}`}function GG($){return y8($).startsWith("@cline/")}function v3($,Z){let Q=y8(Z),W=E$($);while(!0){let J=p(W,"node_modules",Q);if(O0(J)||O0(p(J,"package.json")))return!0;let X=p(W,"..");if(X===W)return!1;W=X}}function jG($){return c3($)!==null}function c3($){try{return sM.resolve($)}catch{}return JR($)}function JR($){let Z=y8($),Q=KG(Z);if(!Q)return null;let W=p(Q,"package.json");try{let J=JSON.parse(h8(W,"utf8")),X=WR($),Y=X==="."&&typeof J.exports==="string"?J.exports:J.exports&&typeof J.exports==="object"&&Object.hasOwn(J.exports,X)?J.exports[X]:void 0,j=l3(Y)??(X==="."&&typeof J.main==="string"?J.main:null);if(!j)return null;let V=p(Q,j),H=[V,...BG(Q,j).filter((B)=>B!==V)];for(let B of H)if(O0(B))return B;return null}catch{return null}}function XR(){let $=[HG],Z=process.env.CLINE_WRAPPER_PATH?.trim();if(Z)$.push(E$(E$(Z)));let Q=process.execPath?.trim();if(Q)$.push(E$(Q));return[...new Set($.map((W)=>p(W)))]}function YR($,Z){let Q=$;while(!0){let W=p(Q,"package.json");if(O0(W))try{if(JSON.parse(h8(W,"utf8")).name===Z)return Q}catch{}let J=p(Q,"node_modules",Z,"package.json");if(O0(J))return E$(J);let X=p(Q,"..");if(X===Q)return null;Q=X}}function KG($){for(let Z of XR()){let Q=YR(Z,$);if(Q)return Q}return null}function jR($){let Q=E$($);for(let W=0;W<4;W++){let J=p(Q,"package.json");if(O0(J))try{let Y=JSON.parse(h8(J,"utf8"));return Y!=null&&typeof Y==="object"&&"cline"in Y}catch{return!1}let X=p(Q,"..");if(X===Q)return!1;Q=X}return!1}function FG($,Z){let Q=Z.startsWith("file:")?VG(Z):nM(Z)?Z:p(E$($),Z);if(O0(Q)&&d6.has(l6(Q)))return Q;for(let W of d6){let J=`${Q}${W}`;if(O0(J))return J}for(let W of d6){let J=p(Q,`index${W}`);if(O0(J))return J}return null}function AG($){let Z=new Set,Q=[/\bimport\s+(?:type\s+)?[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bexport\s+[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bimport\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g,/\brequire\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g];for(let W of Q)for(let J of $.matchAll(W)){let X=J[1];if(X)Z.add(X)}return[...Z]}function VR($){return l6($)!==".ts"}function fG($,Z,Q=new Set){if(Q.has($)||!O0($))return;if(Q.add($),!d6.has(l6($)))return;let W=h8($,"utf8"),J=VR($);for(let X of AG(W)){if(X.startsWith("node:")||d3.has(X))continue;if(xZ(X)){if(!J)continue;if(Object.hasOwn(m3,X)||Object.hasOwn(m3,y8(X))||v3($,X)||GG(X)&&jG(X)||Z&&jG(X))continue;throw Error(`Cannot find module '${y8(X)}'`)}let Y=FG($,X);if(Y)fG(Y,Z,Q)}}function UG($,Z=new Set,Q=new Set){if(Z.has($)||!O0($))return Q;if(Z.add($),!d6.has(l6($)))return Q;let W=h8($,"utf8");for(let J of AG(W)){if(Q.add(J),xZ(J))continue;let X=FG($,J);if(X)UG(X,Z,Q)}return Q}function HR($,Z){let Q=u3($),W={},J=UG($),X=new Set(tM);for(let[Y,j]of Object.entries(m3)){try{Q.resolve(Y);continue}catch{}W[Y]=j}for(let Y of J)if(xZ(Y)&&(GG(Y)||Z))X.add(Y);for(let Y of X){if(Object.hasOwn(W,Y)||v3($,Y))continue;let j=c3(Y);if(j)W[Y]=j}if(!Z)return W;for(let Y of J){if(!xZ(Y)||Object.hasOwn(W,Y)||v3($,Y)||Y.startsWith("node:")||d3.has(Y))continue;let j=c3(Y);if(j)W[Y]=j}return W}function BR($){let Z=l6($);return Z===".ts"||Z===".tsx"||Z===".mts"||Z===".cts"}var _2;function GR(){if(_2!==void 0)return _2;let $=KG("jiti");if(!$)return _2=null,null;let Z=p($,"dist","babel.cjs");if(!O0(Z))return _2=null,null;try{let W=u3(Z)(Z);_2=typeof W==="function"?W:null}catch{_2=null}return _2}async function DG($,Z={}){let Q=!jR($);fG($,Q);let W=HR($,Q),J=QR(W),X=await import("jiti"),Y=typeof X==="function"?X:typeof X.default==="function"?X.default:void 0;if(!Y)throw Error("Unable to load jiti");let j=Object.entries(J).filter(([,G])=>BR(G)).map(([G])=>G),V=GR(),H=V?(G)=>V({...G,interopDefault:!0}):void 0;return await Y($,{alias:J,cache:Z.useCache,requireCache:Z.useCache,esmResolve:!0,interopDefault:!1,nativeModules:[...d3],transformModules:j,tryNative:!1,...H?{transform:H}:{}}).import($,{})}function LG($,Z){if(!$)return!0;if($.providerIds?.length){if(!Z?.providerId||!$.providerIds.includes(Z.providerId))return!1}if($.modelIds?.length){if(!Z?.modelId||!$.modelIds.includes(Z.modelId))return!1}return!0}function _G($){return typeof $==="object"&&$!==null}function p3($){return Array.isArray($)&&$.every((Z)=>typeof Z==="string")}function AR($,Z){if(!_G($.manifest))throw Error(`Invalid plugin module at ${Z}: missing required "manifest"`);if(!p3($.manifest.capabilities))throw Error(`Invalid plugin module at ${Z}: manifest.capabilities must be a string array`);if($.manifest.capabilities.length===0)throw Error(`Invalid plugin module at ${Z}: manifest.capabilities cannot be empty`);if(Object.hasOwn($.manifest,"providerIds")&&!p3($.manifest.providerIds))throw Error(`Invalid plugin module at ${Z}: manifest.providerIds must be a string array when provided`);if(Object.hasOwn($.manifest,"modelIds")&&!p3($.manifest.modelIds))throw Error(`Invalid plugin module at ${Z}: manifest.modelIds must be a string array when provided`)}function fR($,Z){if(!_G($))throw Error(`Invalid plugin module at ${Z}: expected object export`);if(typeof $.name!=="string"||$.name.length===0)throw Error(`Invalid plugin module at ${Z}: expected non-empty "name"`);if(!Object.hasOwn($,"manifest"))throw Error(`Invalid plugin module at ${Z}: missing required "manifest"`);AR($,Z)}async function p6($,Z={}){let Q=KR(Z.cwd??process.cwd(),$),W=await DG(Q,{useCache:Z.useCache}),J=Z.exportName??"plugin",X=W.default??W[J];fR(X,Q);let Y=X,j=Y.setup,V=j?(H,B)=>{let G={...Z.session,...B.session},K={...B,session:Object.keys(G).length>0?G:void 0,client:Z.client??B.client,user:Z.user??B.user,workspaceInfo:Z.workspaceInfo??B.workspaceInfo,automation:Z.automation??B.automation,logger:Z.logger??B.logger,telemetry:Z.telemetry??B.telemetry};return j(H,K)}:void 0;return{...Y,manifest:FR(Y.manifest),setup:V}}async function gZ($,Z={}){return(await z2($,Z)).plugins}async function z2($,Z={}){let Q=[],W=[],J=new Map,X=0;for(let j of $)try{let V=await p6(j,Z);if(!LG(V.manifest,Z))continue;let H=J.get(V.name);if(H)W.push({type:"duplicate_plugin_override",pluginName:V.name,pluginPath:j,overriddenPluginPath:H.pluginPath,message:`Plugin "${V.name}" from ${j} overrides ${H.pluginPath}`});J.set(V.name,{plugin:V,pluginPath:j,order:X++})}catch(V){let H=V instanceof Error?V.message:String(V);Q.push({pluginPath:j,phase:"load",message:H,stack:V instanceof Error?V.stack:void 0})}let Y=[...J.values()].sort((j,V)=>j.order-V.order);return{plugins:Y.map((j)=>j.plugin),pluginPaths:Y.map((j)=>j.pluginPath),failures:Q,warnings:W}}import{existsSync as a3}from"node:fs";import{createRequire as EG}from"node:module";import{dirname as mZ,join as I8}from"node:path";import{fileURLToPath as zR}from"node:url";var MG={};N(MG,{resolveSubprocessRuntimeExecutable:()=>r3,buildSubprocessSandboxCommand:()=>qG,SubprocessSandbox:()=>k8,CLINE_JS_RUNTIME_PATH_ENV:()=>OG});import{spawn as UR}from"node:child_process";import{basename as DR}from"node:path";import{augmentNodeCommandForDebug as LR,withResolvedClineBuildEnv as _R}from"@cline/shared";function zG($){if($ instanceof Error)return $;return Error(String($))}var OG="CLINE_JS_RUNTIME_PATH";function TG($){let Z=$?.trim();if(!Z)return!1;let Q=DR(Z).toLowerCase();return Q==="node"||Q==="node.exe"||Q==="bun"||Q==="bun.exe"}function r3($={}){let Z=$.env??process.env,Q=$.runtimeExecutable?.trim()||Z[OG]?.trim();if(Q)return Q;let W=$.execPath?.trim()||process.execPath;if(TG(W))return W;for(let J of[Z.BUN_EXEC_PATH,Z.npm_node_execpath,Z.NODE]){let X=J?.trim();if(X&&TG(X))return X}return"node"}function qG($,Z={}){let Q=r3({env:Z.env,execPath:Z.execPath,runtimeExecutable:Z.runtimeExecutable});return LR([Q,...$],{env:Z.env,execArgv:Z.execArgv,debugRole:Z.name==="plugin-sandbox"?"plugin-sandbox":"sandbox"})}class k8{options;process=null;requestCounter=0;pending=new Map;constructor($){this.options=$}get processLabel(){return this.options.name??"sandbox"}clearPendingRequest($){let Z=this.pending.get($);if(!Z)return;if(this.pending.delete($),Z.timeout)clearTimeout(Z.timeout);return Z}start(){if(this.process&&this.process.exitCode===null)return;let $=this.options.bootstrapFile?[this.options.bootstrapFile]:["-e",this.options.bootstrapScript??""],Z=qG($,{name:this.options.name,runtimeExecutable:this.options.runtimeExecutable}),Q=UR(Z[0]??r3(this.options),Z.slice(1),{stdio:["ignore","ignore","pipe","ipc"],env:_R(process.env),windowsHide:!0});this.process=Q;let W="",J=(X)=>{let Y=W+X;W=Y.length>4000?Y.slice(-4000):Y};Q.stderr?.setEncoding("utf8"),Q.stderr?.on("data",(X)=>{J(X)}),Q.on("message",(X)=>{this.onMessage(X)}),Q.on("error",(X)=>{this.failPending(Error(`${this.processLabel} process error: ${zG(X).message}`))}),Q.on("exit",(X,Y)=>{this.process=null;let j=W.trim();this.failPending(Error(`${this.options.name??"sandbox"} process exited (code=${String(X)}, signal=${String(Y)})${j?`: ${j}`:""}`))})}async call($,Z,Q={}){this.start();let W=this.process;if(!W||W.exitCode!==null)throw Error(`${this.processLabel} process is not available`);let J=`req_${++this.requestCounter}`,X={type:"call",id:J,method:$,args:Z};return await new Promise((Y,j)=>{let V={resolve:(H)=>Y(H),reject:j};if((Q.timeoutMs??0)>0)V.timeout=setTimeout(()=>{this.clearPendingRequest(J),this.shutdown().catch(()=>{}),j(Error(`${this.processLabel} call timed out after ${Q.timeoutMs}ms: ${$}`))},Q.timeoutMs);this.pending.set(J,V),W.send(X,(H)=>{if(!H)return;let B=this.clearPendingRequest(J);if(!B)return;B.reject(Error(`${this.processLabel} failed to send call "${$}": ${zG(H).message}`))})})}async shutdown(){let $=this.process;if(this.process=null,!$||$.exitCode!==null){this.failPending(Error(`${this.processLabel} shutdown`));return}await new Promise((Z)=>{let Q=setTimeout(()=>{try{$.kill("SIGKILL")}catch{}Z()},300);$.once("exit",()=>{clearTimeout(Q),Z()});try{$.kill("SIGTERM")}catch{clearTimeout(Q),Z()}}),this.failPending(Error(`${this.processLabel} shutdown`))}onMessage($){if(!$)return;if($.type==="event"){if(typeof $.name==="string"&&$.name.length>0)this.options.onEvent?.({name:$.name,payload:$.payload});return}if($.type!=="response"||!$.id)return;let Z=this.clearPendingRequest($.id);if(!Z)return;if($.ok){Z.resolve($.result);return}Z.reject(Error($.error?.message||`${this.processLabel} call failed`))}failPending($){for(let[Z,Q]of this.pending.entries()){if(this.pending.delete(Z),Q.timeout)clearTimeout(Q.timeout);Q.reject($)}}}function TR($){return{...$,contributions:{tools:$.contributions?.tools??[],commands:$.contributions?.commands??[],rules:$.contributions?.rules??[],messageBuilders:$.contributions?.messageBuilders??[],providers:$.contributions?.providers??[],automationEventTypes:$.contributions?.automationEventTypes??[],mcpServers:$.contributions?.mcpServers??[],shortcuts:$.contributions?.shortcuts??[],flags:$.contributions?.flags??[]}}}function r6($){return($ instanceof Error?$.message:String($)).includes("Unknown sandbox plugin id:")}function OR(){return`@cline/cli-${process.platform==="win32"?"windows":process.platform}-${process.arch}`}function qR(){let $=process.env.CLINE_WRAPPER_PATH?.trim();if(!$)return;try{let Q=EG($).resolve(`${OR()}/package.json`),W=I8(mZ(Q),"extensions","plugin-sandbox-bootstrap.js");return a3(W)?W:void 0}catch{return}}function MR(){let $=process.execPath?.trim();if(!$)return;let Z=I8(mZ(mZ($)),"extensions","plugin-sandbox-bootstrap.js");return a3(Z)?Z:void 0}function RR(){let $=mZ(zR(import.meta.url)),Z=EG(import.meta.url),Q=[I8($,"plugin-sandbox-bootstrap.js"),I8($,"extensions","plugin-sandbox-bootstrap.js"),I8($,"agents","plugin-sandbox-bootstrap.js"),qR(),MR()];for(let X of Q.filter((Y)=>typeof Y==="string"))if(a3(X))return{file:X};let W=I8($,"plugin-sandbox-bootstrap.ts"),J="jiti";try{J=Z.resolve("jiti")}catch{}return{script:[`const createJiti = require(${JSON.stringify(J)});`,`const jiti = createJiti(${JSON.stringify(W)}, { cache: false, requireCache: false, esmResolve: true, interopDefault: false });`,`Promise.resolve(jiti.import(${JSON.stringify(W)}, {})).catch((error) => {`," console.error(error);"," process.exitCode = 1;","});"].join(`
474
+ `)}}var i3=RR();function n3($,Z,Q){if(typeof $==="number"&&$>0)return $;if(Q){let W=process.env[Q];if(W){let J=Number(W);if(Number.isInteger(J)&&J>0)return J}}return Z}async function x8($){let Z=new k8({name:"plugin-sandbox",..."file"in i3?{bootstrapFile:i3.file}:{bootstrapScript:i3.script},onEvent:$.onEvent}),Q=n3($.importTimeoutMs,4000,"CLINE_PLUGIN_IMPORT_TIMEOUT_MS"),W=n3($.hookTimeoutMs,3000),J=n3($.contributionTimeoutMs,60000),X={pluginPaths:$.pluginPaths,exportName:$.exportName,providerId:$.providerId,modelId:$.modelId,cwd:$.cwd,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,loggerEnabled:Boolean($.logger)},Y,j=()=>{return Y??=Z.call("initialize",X,{timeoutMs:Q}).finally(()=>{Y=void 0}),Y},V;try{V=await Z.call("initialize",X,{timeoutMs:Q})}catch(G){throw await Z.shutdown().catch(()=>{}),G}let H=V.plugins.map(TR);return{extensions:H.map((G)=>{let K={name:G.name,__clinePluginPath:G.pluginPath,manifest:G.manifest,setup:(F)=>{ER(F,Z,G,J,j),NR(F,Z,G,J,j),wR(F,Z,G,J,j),PR(F,Z,G,J,j),CR(F,G)}};return K.hooks=bR(Z,G,W,j),K}),failures:V.failures,pluginPaths:H.map((G)=>G.pluginPath),shutdown:async()=>{await Z.shutdown()},warnings:V.warnings}}function ER($,Z,Q,W,J){for(let X of Q.contributions?.tools??[]){let Y={name:X.name,description:X.description??"",inputSchema:X.inputSchema??{type:"object",properties:{}},timeoutMs:X.timeoutMs,retryable:X.retryable,execute:async(j,V)=>{try{return await Z.call("executeTool",{pluginId:Q.pluginId,contributionId:X.id,input:j,context:V},{timeoutMs:W})}catch(H){if(!r6(H))throw H;return await J(),await Z.call("executeTool",{pluginId:Q.pluginId,contributionId:X.id,input:j,context:V},{timeoutMs:W})}}};$.registerTool(Y)}}function NR($,Z,Q,W,J){for(let X of Q.contributions?.commands??[])$.registerCommand({name:X.name,description:X.description,handler:async(Y)=>{try{return await Z.call("executeCommand",{pluginId:Q.pluginId,contributionId:X.id,input:Y},{timeoutMs:W})}catch(j){if(!r6(j))throw j;return await J(),await Z.call("executeCommand",{pluginId:Q.pluginId,contributionId:X.id,input:Y},{timeoutMs:W})}}})}function wR($,Z,Q,W,J){for(let X of Q.contributions?.rules??[])$.registerRule({id:X.ruleId,source:X.source,content:X.hasContentHandler===!0?async()=>{try{return await Z.call("resolveRuleContent",{pluginId:Q.pluginId,contributionId:X.id},{timeoutMs:W})}catch(Y){if(!r6(Y))throw Y;return await J(),await Z.call("resolveRuleContent",{pluginId:Q.pluginId,contributionId:X.id},{timeoutMs:W})}}:X.content??""})}function CR($,Z){for(let Q of Z.contributions?.providers??[])$.registerProvider({name:Q.name,description:Q.description,metadata:Q.metadata});for(let Q of Z.contributions?.automationEventTypes??[])$.registerAutomationEventType({eventType:Q.eventType,source:Q.source,description:Q.description,attributesSchema:Q.attributesSchema,payloadSchema:Q.payloadSchema,examples:Q.examples,metadata:Q.metadata});for(let Q of Z.contributions?.mcpServers??[])$.registerMcpServer(Q)}function PR($,Z,Q,W,J){for(let X of Q.contributions?.messageBuilders??[])$.registerMessageBuilder({name:X.name,async build(Y){try{let j=await Z.call("buildMessages",{pluginId:Q.pluginId,contributionId:X.id,messages:Y},{timeoutMs:W});return RG(j)?j:Y}catch(j){if(!r6(j))throw j;await J();let V=await Z.call("buildMessages",{pluginId:Q.pluginId,contributionId:X.id,messages:Y},{timeoutMs:W});return RG(V)?V:Y}}})}function RG($){return Array.isArray($)&&$.every((Z)=>typeof Z==="object"&&Z!==null&&("role"in Z)&&("content"in Z))}function SR($,Z,Q,W,J){return async(X)=>{try{return await $.call("invokeHook",{pluginId:Z,hookName:Q,payload:X},{timeoutMs:W})}catch(Y){if(!r6(Y))throw Y;return await J(),await $.call("invokeHook",{pluginId:Z,hookName:Q,payload:X},{timeoutMs:W})}}}function bR($,Z,Q,W){let J={};for(let X of Z.hooks??[])J[X]=SR($,Z.pluginId,X,Q,W);return Object.keys(J).length>0?J:void 0}var o3="package.json",mR="package";function i6($){return xR($)}function n6($){return IR($)}function vR($){try{return uZ($)&&hR($).isDirectory()}catch{return!1}}function t3($){let Z=[],Q=new Set;for(let W of $){let J=cZ(W);if(Q.has(J))continue;Q.add(J),Z.push(J)}return Z}function wG($){let Z=t3($);return v9(Z)}function CG($){return i6($).flatMap((Z)=>n6(Z)).filter((Z)=>uZ(Z))}function cR($,Z){let Q=[];for(let W of $)try{Q.push(...NG([W],Z))}catch{}return Q}function s3($){return typeof $==="object"&&$!==null}function uR($){try{let Z=JSON.parse(yR(dZ($,o3),"utf8"));if(!s3(Z)||!s3(Z.cline))return[];let Q=Z.cline.plugins;if(!Array.isArray(Q))return[];let W=[];for(let J of Q){if(typeof J==="string"){W.push(J);continue}if(!s3(J)||!Array.isArray(J.paths))continue;for(let X of J.paths)if(typeof X==="string")W.push(X)}return W}catch{return[]}}function PG($,Z){let Q=cZ(Z);return uR($).some((W)=>cZ($,W)===Q)}function dR($,Z){return kR($)===mR&&uZ(dZ(vZ($),o3))&&PG(vZ($),Z)}function lR($){let Z=cZ($),Q=[],W=vZ(Z);while(!0){if(dR(W,Z)){Q.push(W);break}if(uZ(dZ(W,o3))){if(PG(W,Z))Q.push(W);break}let J=vZ(W);if(J===W)break;W=J}return t3(Q)}function i1($={}){let Z=$.cwd??process.cwd(),Q=CG($.workspacePath),W=NG($.pluginPaths??[],Z);return wG([...W,...Q])}function pR($={}){let Z=$.cwd??process.cwd(),Q=CG($.workspacePath),W=cR($.pluginPaths??[],Z);return wG([...W,...Q])}function n1($){let Z=[];for(let Q of $)for(let W of lR(Q)){let J=dZ(W,gR);if(vR(J))Z.push(J)}return t3(Z)}function SG($={}){return n1(pR($))}async function g8($={}){let Z=i1($);if(Z.length===0)return{extensions:[],failures:[],warnings:[],pluginPaths:[]};if($.mode==="in_process"){let W=await z2(Z,{cwd:$.cwd,exportName:$.exportName,providerId:$.providerId,modelId:$.modelId,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,automation:$.automation,logger:$.logger,telemetry:$.telemetry});return{extensions:W.plugins,failures:W.failures,pluginPaths:W.pluginPaths,warnings:W.warnings}}let Q=await x8({pluginPaths:Z,exportName:$.exportName,importTimeoutMs:$.importTimeoutMs,hookTimeoutMs:$.hookTimeoutMs,contributionTimeoutMs:$.contributionTimeoutMs,onEvent:$.onEvent,providerId:$.providerId,modelId:$.modelId,cwd:$.cwd,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,logger:$.logger});return{extensions:Q.extensions??[],shutdown:Q.shutdown,failures:Q.failures,pluginPaths:Q.pluginPaths,warnings:Q.warnings}}import{execFile as rR}from"node:child_process";import{promisify as iR}from"node:util";var nR=iR(rR);function e3($,Z){$?.log(Z,{severity:"warn"})}function aR($){let Z=$?.checkpoint;if(!Z||typeof Z!=="object"||Array.isArray(Z))return;let Q=Z;if(!Q.latest||!Array.isArray(Q.history))return;let W=Q.latest,J=Q.history.filter((X)=>!!X&&typeof X==="object"&&typeof X.ref==="string"&&typeof X.createdAt==="number"&&typeof X.runCount==="number");if(typeof W.ref!=="string"||typeof W.createdAt!=="number"||typeof W.runCount!=="number")return;return{latest:W,history:J}}async function T2($,Z){let Q=await nR("git",["-C",$,...Z],{windowsHide:!0});return{stdout:Q.stdout.trim(),stderr:Q.stderr.trim()}}async function $J($,Z){if(!$)return;let Q=`refs/cline/checkpoints/${Z}/`;try{let{stdout:W}=await T2($,["for-each-ref","--format=%(refname)",Q]),J=W.trim().split(`
475
+ `).filter(Boolean);await Promise.allSettled(J.map((X)=>T2($,["update-ref","-d",X])))}catch{}}async function bG($,Z,Q){if(!$||Q.length===0)return;await Promise.allSettled(Q.map((W)=>T2($,["update-ref",`refs/cline/checkpoints/${Z}/${W.runCount}`,W.ref])))}function sR($,Z){let Q=$.findIndex((W)=>W.runCount===Z.runCount);if(Q<0)return[...$,Z];return $.map((W,J)=>J===Q?Z:W)}function yG($){let Z=$.initialRunCount??0,Q,W=async()=>{if(Q!==void 0)return Q;try{Q=(await T2($.cwd,["rev-parse","--is-inside-work-tree"])).stdout==="true"}catch{Q=!1}return Q},J=async()=>{if($.createCheckpoint)return await $.createCheckpoint({cwd:$.cwd,sessionId:$.sessionId,runCount:Z});if(!await W())return;let X=async(H)=>{try{let G=(await T2($.cwd,["rev-parse","HEAD"])).stdout.trim();if(!G)return;return{ref:G,createdAt:Date.now(),runCount:Z,kind:"commit"}}catch(B){e3($.logger,`${H}: ${B instanceof Error?B.message:String(B)}`);return}},Y=`cline checkpoint session=${$.sessionId} run=${Z}`,j="";try{j=(await T2($.cwd,["stash","create",Y])).stdout.trim()}catch(H){return e3($.logger,`Checkpoint snapshot failed: ${H instanceof Error?H.message:String(H)}`),X("Checkpoint HEAD fallback failed")}if(!j)return X("Checkpoint HEAD fallback failed");let V=`refs/cline/checkpoints/${$.sessionId}/${Z}`;try{await T2($.cwd,["update-ref",V,j])}catch(H){e3($.logger,`Checkpoint store failed: ${H instanceof Error?H.message:String(H)}`);return}return{ref:j,createdAt:Date.now(),runCount:Z,kind:"stash"}};return{beforeRun:async({snapshot:X})=>{if(X.parentAgentId!=null)return;Z+=1;return},beforeModel:async({snapshot:X})=>{if(X.parentAgentId!=null||X.iteration!==1||Z<1)return;let Y=await J();if(!Y)return;let j=await $.readSessionMetadata(),V=aR(j);if(V?.latest.ref===Y.ref)return;let H=sR(V?.history??[],Y);await $.writeSessionMetadata({...j??{},checkpoint:{latest:Y,history:H}});return}}}import{spawn as XE}from"node:child_process";import{appendFileSync as YE,readFileSync as jE}from"node:fs";import{join as VE}from"node:path";import{augmentNodeCommandForDebug as IG,withResolvedClineBuildEnv as WJ}from"@cline/shared";import{ensureHookLogDir as hG}from"@cline/shared/storage";function m8($,Z){if(!Z)return;return{name:$,manifest:{capabilities:["hooks"]},hooks:Z}}import{existsSync as oR,readdirSync as tR}from"node:fs";import{basename as eR,extname as $E,join as ZE}from"node:path";import{HOOKS_CONFIG_DIRECTORY_NAME as lZ,resolveHooksConfigSearchPaths as QE}from"@cline/shared/storage";function a6($){return QE($)}var v8;((B)=>{B.TaskStart="TaskStart";B.TaskResume="TaskResume";B.TaskCancel="TaskCancel";B.TaskComplete="TaskComplete";B.TaskError="TaskError";B.PreToolUse="PreToolUse";B.PostToolUse="PostToolUse";B.UserPromptSubmit="UserPromptSubmit";B.PreCompact="PreCompact";B.SessionShutdown="SessionShutdown"})(v8||={});var s6={["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"},WE=new Map(Object.values(v8).map(($)=>[$.toLowerCase(),$])),JE=new Set(["",".sh",".bash",".zsh",".js",".mjs",".cjs",".ts",".mts",".cts",".py",".ps1"]);function o6($){let Z=$E($).toLowerCase();if(!JE.has(Z))return;let Q=eR($,Z).trim().toLowerCase();return WE.get(Q)}function N$($){let Z=[],Q=new Set,W=a6($).filter((J)=>oR(J));for(let J of W)try{for(let X of tR(J,{withFileTypes:!0})){if(!X.isFile())continue;let Y=o6(X.name);if(!Y)continue;let j=ZE(J,X.name);if(Q.has(j))continue;Q.add(j),Z.push({fileName:Y,hookEventName:s6[Y],path:j})}}catch{}return Z.sort((J,X)=>J.path.localeCompare(X.path))}function rZ($){if(!$||typeof $!=="object")return{};let Z={};for(let[Q,W]of Object.entries($))Z[Q]=typeof W==="string"?W:JSON.stringify(W);return Z}function pZ($,Z,Q){let W=Q instanceof Error?`: ${Q.message}`:"",J=`${Z}${W}`;if($){try{$.log(J,{severity:"warn",...Q!==void 0?{error:Q}:{}})}catch{}return}console.warn(J)}function HE($,Z){if(!Z)return $;if(!$)return{...Z};let Q=[$.context,Z.context].filter((J)=>typeof J==="string"&&J.length>0).join(`
476
+ `),W=[...$.appendMessages??[],...Z.appendMessages??[]];return{cancel:$.cancel===!0||Z.cancel===!0?!0:void 0,review:$.review===!0||Z.review===!0?!0:void 0,context:Q||void 0,overrideInput:Z.overrideInput!==void 0?Z.overrideInput:$.overrideInput,systemPrompt:Z.systemPrompt!==void 0?Z.systemPrompt:$.systemPrompt,appendMessages:W.length>0?W:void 0}}function BE($){if(!$||typeof $!=="object")return;let Z=$,Q=typeof Z.context==="string"?Z.context:typeof Z.contextModification==="string"?Z.contextModification:typeof Z.errorMessage==="string"?Z.errorMessage:void 0;return{cancel:typeof Z.cancel==="boolean"?Z.cancel:void 0,review:typeof Z.review==="boolean"?Z.review:void 0,context:Q,overrideInput:Object.hasOwn(Z,"overrideInput")?Z.overrideInput:void 0}}function ZJ($){let Z=String($??"").toLowerCase();return Z.includes("cancel")||Z.includes("abort")||Z.includes("interrupt")}function q0($,Z){let Q=process.env.CLINE_USER_ID?.trim()||process.env.USER?.trim()||"unknown",W={rootSessionId:Z.rootSessionId||$.conversationId};return{clineVersion:process.env.CLINE_VERSION?.trim()||"",timestamp:new Date().toISOString(),taskId:$.conversationId,sessionContext:W,workspaceRoots:Z.workspacePath?[Z.workspacePath]:[],workspaceInfo:Z.workspaceInfo,userId:Q,agent_id:$.agentId,parent_agent_id:$.parentAgentId}}function GE($){let Z=$.trim();if(!Z)return{};let W=Z.split(`
477
+ `).map((X)=>X.trim()).filter(Boolean).filter((X)=>X.startsWith("HOOK_CONTROL\t")).map((X)=>X.slice(13)),J=W.length>0?W[W.length-1]:Z;try{return{parsedJson:JSON.parse(J)}}catch(X){return{parseError:X instanceof Error?X.message:"Failed to parse hook stdout JSON"}}}async function KE($,Z){let Q=$.stdin;if(!Q)throw Error("hook command failed to create stdin");await new Promise((W,J)=>{let X=!1,Y=()=>{Q.off("error",V),Q.off("finish",H),$.off("close",B)},j=(G)=>{if(X)return;if(X=!0,Y(),G){let K=G.code;if(K==="EPIPE"||K==="ERR_STREAM_DESTROYED"){W();return}J(G);return}W()},V=(G)=>j(G),H=()=>j(),B=()=>j();Q.on("error",V),Q.once("finish",H),$.once("close",B);try{Q.end(Z)}catch(G){j(G)}})}async function xG($,Z){if(Z.command.length===0)throw Error("runHookCommand requires non-empty command");try{return await kG($,Z)}catch(Q){let W=fE(Z.command,process.platform,Q);if(!W)throw Q;return await kG($,{...Z,command:W})}}async function kG($,Z){let Q=IG(Z.command,{env:Z.env,debugRole:"hook"}),W=XE(Q[0],Q.slice(1),{cwd:Z.cwd,env:WJ(Z.env),stdio:Z.detached?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:Z.detached,windowsHide:!0}),J=new Promise((K)=>{W.once("spawn",()=>K())}),X=new Promise((K,F)=>{W.once("error",(A)=>F(A))}),Y=JSON.stringify($);if(await Promise.race([J,X]),await KE(W,Y),Z.detached){W.unref();return}if(!W.stdout||!W.stderr)throw Error("hook command failed to create stdout/stderr");let j="",V="",H=!1,B;W.stdout.on("data",(K)=>{j+=K.toString()}),W.stderr.on("data",(K)=>{V+=K.toString()});let G=new Promise((K)=>{if((Z.timeoutMs??0)>0)B=setTimeout(()=>{H=!0,W.kill("SIGKILL")},Z.timeoutMs);W.once("close",(F)=>{if(B)clearTimeout(B);let{parsedJson:A,parseError:L}=GE(j);K({exitCode:F,stdout:j,stderr:V,parsedJson:A,parseError:L,timedOut:H})})});return await Promise.race([G,X])}function FE($){try{let Q=jE($,"utf8").split(/\r?\n/,1)[0]?.trim();if(!Q?.startsWith("#!"))return;let W=Q.slice(2).trim();if(!W)return;let J=W.split(/\s+/).filter(Boolean);return J.length>0?J:void 0}catch{return}}function AE($){return!!($&&typeof $==="object"&&("code"in $)&&$.code==="ENOENT")}function fE($,Z=process.platform,Q){if(Z!=="win32"||!AE(Q))return;if($[0]!=="py"||$[1]!=="-3")return;return["python",...$.slice(2)]}function gG($){if($.length===0)return;let[Z,...Q]=$,W=Z.replace(/\\/g,"/").toLowerCase(),J=W.split("/").at(-1)??W;if(J==="env")return gG(Q);if(J==="bash"||J==="sh"||J==="zsh")return[J,...Q];if(J==="python3"||J==="python")return process.platform==="win32"?["py","-3",...Q]:[J,...Q];return $}function UE($){let Z=FE($);if(Z&&Z.length>0)return[...gG(Z)??Z,$];let Q=$.toLowerCase();if(Q.endsWith(".sh")||Q.endsWith(".bash")||Q.endsWith(".zsh"))return["bash",$];if(Q.endsWith(".js")||Q.endsWith(".mjs")||Q.endsWith(".cjs"))return IG(["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 DE($){let Z={};for(let Q of N$($)){if(!Q.hookEventName)continue;let W=Q.hookEventName,J=Z[W]??[];J.push(UE(Q.path)),Z[W]=J}return Z}async function LE($){let Z;for(let Q of $.commands){let W=Q.join(" ");try{let J=await xG($.payload,{command:Q,cwd:$.cwd,env:WJ(process.env),detached:!1,timeoutMs:$.timeoutMs});if(J?.timedOut){pZ($.logger,`hook command timed out: ${W}`);continue}if(J?.parseError){pZ($.logger,`hook command returned invalid JSON control output: ${W} (${J.parseError})`);continue}Z=HE(Z,BE(J?.parsedJson))}catch(J){pZ($.logger,`hook command failed: ${W}`,J)}}return Z}function O2($){for(let Z of $.commands){let Q=Z.join(" ");xG($.payload,{command:Z,cwd:$.cwd,env:WJ(process.env),detached:!0}).catch((W)=>{pZ($.logger,`hook command failed: ${Q}`,W)})}}function w$($){return{agentId:$.agentId,conversationId:$.conversationId??$.runId??$.agentId,parentAgentId:$.parentAgentId??null}}function QJ($,Z){return{...w$($.snapshot),userMessage:Z}}function mG($){return{...w$($.snapshot),iteration:$.snapshot.iteration,call:{id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:$.input}}}function vG($){return{...w$($.snapshot),iteration:$.snapshot.iteration,record:{id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:$.input,output:$.result.output,error:$.result.isError?String($.result.output):void 0,durationMs:$.durationMs,startedAt:$.startedAt,endedAt:$.endedAt}}}function cG($){return $.filter((Z)=>Z.type==="text"&&typeof Z.text==="string").map((Z)=>Z.text).join("")}function _E($){if(!$)return;let Z={};if($.cancel===!0)Z.stop=!0;if($.overrideInput!==void 0)Z.input=$.overrideInput;return Object.keys(Z).length>0?Z:void 0}function c8($){let Z={cwd:$.workspacePath,workspacePath:$.workspacePath,rootSessionId:$.rootSessionId,workspaceInfo:$.workspaceInfo},Q=(W)=>{let J=`${JSON.stringify({ts:new Date().toISOString(),...W})}
478
+ `,Y=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??VE(hG(),"hooks.jsonl");hG(Y),YE(Y,J,"utf8")};return{beforeRun:async(W)=>{let J=QJ(W,"");Q({...q0(J,Z),hookName:"agent_start",taskStart:{taskMetadata:{}}});return},beforeTool:async(W)=>{let J=mG(W);Q({...q0(J,Z),hookName:"tool_call",iteration:J.iteration,tool_call:{id:J.call.id,name:J.call.name,input:J.call.input},preToolUse:{toolName:J.call.name,parameters:rZ(J.call.input)}});return},afterTool:async(W)=>{let J=vG(W);Q({...q0(J,Z),hookName:"tool_result",iteration:J.iteration,tool_result:J.record,postToolUse:{toolName:J.record.name,parameters:rZ(J.record.input),result:typeof J.record.output==="string"?J.record.output:JSON.stringify(J.record.output),success:!J.record.error,executionTimeMs:J.record.durationMs}});return},afterRun:async({snapshot:W,result:J})=>{let X=w$(W);if(J.status==="completed"){Q({...q0(X,Z),hookName:"agent_end",iteration:J.iterations,turn:{outputText:J.outputText,status:J.status},taskComplete:{taskMetadata:{}}});return}if(J.status==="aborted"||ZJ(J.error?.message)){Q({...q0(X,Z),hookName:"agent_abort",reason:J.error?.message,taskCancel:{taskMetadata:{}}});return}if(J.error)Q({...q0(X,Z),hookName:"agent_error",iteration:J.iterations,error:{name:J.error.name,message:J.error.message,stack:J.error.stack}})},onEvent:async(W)=>{if(W.type!=="message-added"||W.message.role!=="user")return;let J=QJ({snapshot:W.snapshot},cG(W.message.content));Q({...q0(J,Z),hookName:"prompt_submit",userPromptSubmit:{prompt:J.userMessage,attachments:[]}})}}}function t6($){let Z=DE($.workspacePath);if(!Object.values(Z).some((G)=>G.length>0))return;let W=async(G,K)=>{let F=Z[K]??[];if(F.length===0)return;O2({commands:F,cwd:$.cwd,logger:$.logger,payload:K==="agent_resume"?{...q0(G,$),hookName:K,taskResume:{taskMetadata:{},previousState:{}}}:{...q0(G,$),hookName:K,taskStart:{taskMetadata:{}}}})},J=async(G)=>{let K=Z.prompt_submit??[];if(K.length>0)O2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...q0(G,$),hookName:"prompt_submit",userPromptSubmit:{prompt:G.userMessage,attachments:[]}}})},X=async(G)=>{let K=Z.tool_call??[];if(K.length===0)return;return LE({commands:K,cwd:$.cwd,logger:$.logger,timeoutMs:$.toolCallTimeoutMs??120000,payload:{...q0(G,$),hookName:"tool_call",iteration:G.iteration,tool_call:{id:G.call.id,name:G.call.name,input:G.call.input},preToolUse:{toolName:G.call.name,parameters:rZ(G.call.input)}}})},Y=async(G)=>{let K=Z.tool_result??[];if(K.length===0)return;O2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...q0(G,$),hookName:"tool_result",iteration:G.iteration,tool_result:G.record,postToolUse:{toolName:G.record.name,parameters:rZ(G.record.input),result:typeof G.record.output==="string"?G.record.output:JSON.stringify(G.record.output),success:!G.record.error,executionTimeMs:G.record.durationMs}}})},j=async(G)=>{let K=Z.agent_end??[];if(K.length===0)return;O2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...q0(G,$),hookName:"agent_end",iteration:G.iteration,turn:G.turn,taskComplete:{taskMetadata:{}}}})},V=async(G)=>{let K=Z.agent_error??[];if(K.length===0)return;O2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...q0(G,$),hookName:"agent_error",iteration:G.iteration,error:{name:G.error.name,message:G.error.message,stack:G.error.stack}}})},H=async(G)=>{if(ZJ(G.reason)){let F=Z.agent_abort??[];if(F.length>0)O2({commands:F,cwd:$.cwd,logger:$.logger,payload:{...q0(G,$),hookName:"agent_abort",reason:G.reason,taskCancel:{taskMetadata:{}}}})}let K=Z.session_shutdown??[];if(K.length===0)return;O2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...q0(G,$),hookName:"session_shutdown",reason:G.reason}})},B={};if((Z.agent_start?.length??0)>0||(Z.agent_resume?.length??0)>0||(Z.prompt_submit?.length??0)>0){if((Z.agent_start?.length??0)>0||(Z.agent_resume?.length??0)>0)B.beforeRun=async(G)=>{let K=process.env.CLINE_HOOK_AGENT_RESUME==="1"?"agent_resume":"agent_start";await W(w$(G.snapshot),K);return};if((Z.prompt_submit?.length??0)>0)B.onEvent=async(G)=>{if(G.type!=="message-added"||G.message.role!=="user")return;await J(QJ({snapshot:G.snapshot},cG(G.message.content)))}}if((Z.tool_call?.length??0)>0)B.beforeTool=async(G)=>{let K=await X(mG(G));return _E(K)};if((Z.tool_result?.length??0)>0)B.afterTool=async(G)=>{await Y(vG(G));return};if((Z.agent_end?.length??0)>0)B.afterRun=async({snapshot:G,result:K})=>{if(K.status!=="completed")return;await j({...w$(G),iteration:K.iterations,turn:{outputText:K.outputText,status:K.status}})};if((Z.agent_error?.length??0)>0||(Z.agent_abort?.length??0)>0||(Z.session_shutdown?.length??0)>0){let G=B.afterRun;B.afterRun=async(K)=>{await G?.(K);let{snapshot:F,result:A}=K;if(A.status==="aborted"||ZJ(A.error?.message)){await H({...w$(F),reason:A.error?.message});return}if(A.error)await V({...w$(F),iteration:A.iterations,error:A.error})}}return B}function u8($){return m8("core.hook_config_files",t6($))}function q2($,Z){let Q=$.map((W)=>W[Z]).filter((W)=>typeof W==="function");if(Q.length===0)return;return async(W)=>{let J;for(let X of Q){let Y=await X(W);if(!Y||typeof Y!=="object")continue;let j=Y;J={...J??{},...j,stop:J?.stop===!0||j.stop===!0?!0:j.stop,options:J?.options||j.options?{...J?.options??{},...j.options??{}}:void 0}}return J}}function M2($){let Z=$.filter((Q)=>Q!==void 0);if(Z.length===0)return;return{beforeRun:q2(Z,"beforeRun"),afterRun:q2(Z,"afterRun"),beforeModel:q2(Z,"beforeModel"),afterModel:q2(Z,"afterModel"),beforeTool:q2(Z,"beforeTool"),afterTool:q2(Z,"afterTool"),onEvent:q2(Z,"onEvent")}}var uG={};N(uG,{normalizeRuntimeCapabilities:()=>M0});function M0(...$){let Z,Q;for(let J of $){if(!J)continue;if(J.toolExecutors)Z={...Z??{},...J.toolExecutors};if(J.requestToolApproval)Q=J.requestToolApproval}let W=Z&&Object.keys(Z).length>0;if(!W&&!Q)return;return{...W?{toolExecutors:Z}:{},...Q?{requestToolApproval:Q}:{}}}var oG={};N(oG,{toProviderConfig:()=>l0,emptyStoredProviderSettings:()=>S$,StoredProviderSettingsSchema:()=>r8,StoredProviderSettingsEntrySchema:()=>fQ,ProviderSettingsSchemaTyped:()=>p8});import{z as P$}from"zod";var sG={};N(sG,{toProviderConfig:()=>l0,safeParseSettings:()=>AQ,safeCreateProviderConfig:()=>FJ,parseSettings:()=>FQ,normalizeProviderId:()=>l8,isBuiltInProviderId:()=>GJ,createProviderConfig:()=>KJ,SapSettingsSchema:()=>BQ,ReasoningSettingsSchema:()=>YQ,ProviderSettingsSchema:()=>C$,ProviderProtocolSchema:()=>WQ,ProviderIdSchema:()=>W5,ProviderClientSchema:()=>JQ,OcaSettingsSchema:()=>GQ,ModelCatalogSettingsSchema:()=>KQ,GcpSettingsSchema:()=>VQ,BUILT_IN_PROVIDER_IDS:()=>BJ,BUILT_IN_PROVIDER:()=>Q5,AzureSettingsSchema:()=>HQ,AwsSettingsSchema:()=>jQ,AuthSettingsSchema:()=>XQ});import*as d0 from"@cline/llms";import{z as w}from"zod";var aG={};N(aG,{resolveProviderConfig:()=>Z5,getProviderConfig:()=>QQ,getLiveModelsCatalog:()=>d8,clearPublicModelsCatalogCache:()=>uE,clearPrivateModelsCatalogCache:()=>HJ,clearLiveModelsCatalogCache:()=>VJ,OPENAI_COMPATIBLE_PROVIDERS:()=>$5,DEFAULT_MODELS_CATALOG_URL:()=>tZ});import*as s from"@cline/llms";function JJ($){if(!Array.isArray($))return[];return $.map((Z)=>{if(typeof Z==="string")return Z.trim();if(Z&&typeof Z==="object"){let Q=Z;for(let W of[Q.id,Q.name,Q.model])if(typeof W==="string"&&W.trim())return W.trim()}return""}).filter((Z)=>Z.length>0)}function zE($,Z){let Q=JJ($);if(Q.length>0)return Q;if(!$||typeof $!=="object")return[];let W=$,J=JJ(W.data??W.models);if(J.length>0)return J;if(W.models&&typeof W.models==="object"&&!Array.isArray(W.models)){let Y=Object.keys(W.models).filter((j)=>j.trim().length>0);if(Y.length>0)return Y}let X=W.providers?.[Z];if(X&&typeof X==="object"){let j=JJ(X.models??X);if(j.length>0)return j}return[]}async function iZ($,Z){let Q=await fetch($,{method:"GET"});if(!Q.ok)throw Error(`failed to fetch models from ${$}: HTTP ${Q.status}`);return zE(await Q.json(),Z)}function dG($){return $.replace(/\/+$/,"")}function nZ($,Z,Q){let W=Q?.trim();if(!W)return;let J=$?.trim();if(!J||!Z?.trim())return W;try{let X=new URL(W),Y=new URL(Z),j=new URL(J);if(X.origin!==Y.origin)return W;let V=dG(Y.pathname),H=dG(j.pathname);if(V&&X.pathname.startsWith(`${V}/`)){let B=X.pathname.slice(V.length);j.pathname=`${H}${B}`}else j.pathname=X.pathname;return j.search=X.search,j.hash=X.hash,j.toString()}catch{return W}}function TE($){return Object.fromEntries(Object.entries($).map(([Z,Q])=>[Z,{...Q}]))}function OE($){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 qE=Object.values(s.MODEL_COLLECTIONS_BY_PROVIDER_ID).map(($)=>({id:$.provider.id,baseUrl:$.provider.baseUrl??"",modelsSourceUrl:$.provider.modelsSourceUrl,modelId:$.provider.defaultModelId,knownModels:TE($.models),capabilities:$.provider.capabilities?[...$.provider.capabilities]:void 0,env:$.provider.env?[...$.provider.env]:void 0,client:$.provider.client,protocol:$.provider.protocol})),pG=Object.fromEntries(qE.map(($)=>[$.id,$]));function ME($){return pG[$]}function RE(){return Object.fromEntries(Object.entries(pG).filter(([,$])=>OE($)))}function rG($=[]){let Z=$.flatMap((Q)=>{switch(Q){case"reasoning":case"prompt-cache":case"tools":case"oauth":return[Q];default:return[]}});return Z.length>0?Z:void 0}var tZ="https://models.dev/api.json",EE=600000,iG=300000,NE=5000,oZ=new Map,e6=new Map,XJ=new Map,aZ=new Map;async function wE(){return s.getGeneratedProviderModels()}async function CE($,Z={},Q={},W={},J={},X={}){if($==="litellm")return s.sortModelsByReleaseDate(W);let Y=await wE(),j=s.resolveProviderModelCatalogKeys($),V=Object.assign({},...j.map((K)=>Y[K]??{})),H=Boolean(s.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl),B=Object.keys(J).length>0;if(H&&B)return s.sortModelsByReleaseDate({...J,...X});if($==="openai-codex")return s.sortModelsByReleaseDate({...Z,...s.filterOpenAICodexModels(Q),...J,...X});if($==="cline-pass"&&Object.keys(Q).length>0)return s.sortModelsByReleaseDate({...Q,...X});let G=s.sortModelsByReleaseDate({...V,...Z,...Q,...W,...J});if($==="cline")return s.sortModelsByReleaseDate({...s.preferCanonicalModelIds(G,s.VERCEL_OPENROUTER_MODEL_ID_ALIAS_RULES),...X});return s.sortModelsByReleaseDate({...G,...X})}function PE($,Z){let Q=s.resolveProviderModelCatalogKeys($);return Object.assign({},...Q.map((W)=>Z[W]??{}))}function eZ($){let Z=$?.trim();return Z&&Z.length>0?Z:""}function jJ($){let Z=$.apiKey?.trim()||$.accessToken?.trim();return Z&&Z.length>0?Z:void 0}function SE($){let Z=2166136261;for(let Q=0;Q<$.length;Q+=1)Z^=$.charCodeAt(Q),Z+=(Z<<1)+(Z<<4)+(Z<<7)+(Z<<8)+(Z<<24);return(Z>>>0).toString(16)}function bE($,Z){return`${$}:${eZ(Z.baseUrl)}:${SE(jJ(Z)??"")}`}async function $Q($,Z,Q=NE){let W=new AbortController,J=setTimeout(()=>W.abort(),Q);try{return await fetch($,{...Z,signal:W.signal})}finally{clearTimeout(J)}}function R2($,Z,Q){if(Q&&!$.includes(Z))$.push(Z)}function ZQ($,Z){let Q=["streaming","tools"];return R2(Q,"images",Boolean(Z.supportsImages)),R2(Q,"prompt-cache",Boolean(Z.supportsPromptCache)),R2(Q,"reasoning",Boolean(Z.supportsReasoning)),{id:$,name:Z.name??$,contextWindow:Z.contextWindow,maxInputTokens:Z.maxInputTokens,maxTokens:Z.maxTokens,capabilities:Q,releaseDate:Z.releaseDate,status:"active"}}async function yE($,Z){let Q=await $Q("https://inference.baseten.co/v1/models",{method:"GET",headers:{Authorization:`Bearer ${Z}`,"Content-Type":"application/json"}});if(!Q.ok)throw Error(`Baseten model refresh failed: HTTP ${Q.status}`);let J=(await Q.json())?.data??[],X={};for(let Y of J){let j=Y.id?.trim();if(!j)continue;if(j.includes("whisper")||j.includes("tts")||j.includes("embedding"))continue;let V=Y.supported_features??[];X[j]=ZQ(j,{name:j,contextWindow:Y.context_length,maxInputTokens:Y.context_length,maxTokens:Y.max_completion_tokens,supportsReasoning:V.includes("reasoning")||V.includes("reasoning_effort"),supportsImages:!1})}return X}function lG($){if(typeof $==="number")return Number.isFinite($)?$:void 0;if(typeof $==="string"){let Z=Number($);return Number.isFinite(Z)?Z:void 0}return}async function hE($,Z){let Q=await $Q("https://api.hicap.ai/v2/openai/models",{method:"GET",headers:{"api-key":Z}});if(!Q.ok)throw Error(`Hicap model refresh failed: HTTP ${Q.status}`);let J=(await Q.json())?.data??[],X={};for(let Y of J){let j=Y.id?.trim();if(!j)continue;X[j]=ZQ(j,{name:j,maxInputTokens:128000,supportsImages:!0,supportsPromptCache:!0})}return X}async function kE($,Z){let W=`${(eZ($.baseUrl)||"https://inference.poolside.ai/v1").replace(/\/+$/,"")}/models`,J=await $Q(W,{method:"GET",headers:{Authorization:`Bearer ${Z}`,accept:"application/json"}});if(!J.ok)throw Error(`Poolside model refresh failed: HTTP ${J.status}`);let Y=(await J.json())?.data??[],j={};for(let V of Y){let H=V.id?.trim();if(!H)continue;let B=V.supported_features??[],G=V.supported_sampling_parameters??[],K=V.input_modalities??[],F=["streaming"];R2(F,"tools",B.includes("tools")),R2(F,"reasoning",B.includes("reasoning")),R2(F,"temperature",G.includes("temperature")),R2(F,"images",K.includes("image"));let A={input:lG(V.pricing?.prompt),output:lG(V.pricing?.completion)};j[H]={id:H,name:V.name??H,description:V.description,contextWindow:V.context_length,maxInputTokens:V.context_length,maxTokens:V.max_completion_tokens,capabilities:F,pricing:A.input!==void 0||A.output!==void 0?A:void 0,status:"active"}}return j}function IE($){let Z=eZ($).replace(/\/+$/,"");if(!Z)return"http://localhost:4000";return Z.endsWith("/v1")?Z.slice(0,-3):Z}function xE($){return[`${$}/v1/model/info`,`${$}/model/info`]}async function gE($){let Z=(await $.text().catch(()=>"")).replace(/\s+/g," ").trim(),Q=500,W=Z?`: ${Z.slice(0,500)}${Z.length>500?"...":""}`:"";return`HTTP ${$.status}${W}`}async function mE($,Z){let Q=IE($.baseUrl),W=[],J=[["x-litellm-api-key",{"x-litellm-api-key":Z}],["Authorization",{Authorization:`Bearer ${Z}`}]];for(let X of xE(Q))for(let[Y,j]of J)try{let V=await $Q(X,{method:"GET",headers:{accept:"application/json",...j}});if(V.ok){let B=(await V.json())?.data??[],G={};for(let K of B){let F=K.model_name?.trim(),L=K.litellm_params?.model?.trim()||F;if(!L)continue;let f=K.model_info,D=ZQ(L,{name:F??L,maxTokens:f?.max_output_tokens??f?.max_tokens,maxInputTokens:f?.max_input_tokens??f?.max_tokens,supportsImages:f?.supports_vision,supportsPromptCache:f?.supports_prompt_caching,supportsReasoning:f?.supports_reasoning});if(G[L]=D,F)G[F]={...D,id:F,name:F}}return G}W.push(`${new URL(X).pathname} (${Y}): ${await gE(V)}`)}catch(V){let H=V instanceof Error?V.message:String(V);W.push(`${new URL(X).pathname} (${Y}): ${H}`)}throw Error(`LiteLLM model refresh failed. Attempts: ${W.join("; ")}`)}var nG={baseten:yE,hicap:hE,litellm:mE,poolside:kE},YJ=new Map,sZ=new Map;function vE($,Z){return`${$}:${eZ(Z.baseUrl)}`}async function cE($,Z,Q){let W=s.MODEL_COLLECTIONS_BY_PROVIDER_ID[$],J=nZ(Q.baseUrl,W?.provider.baseUrl,W?.provider.modelsSourceUrl);if(!J)return{};let X=Z?.cacheTtlMs??iG,Y=vE($,Q),j=Date.now(),V=YJ.get(Y);if(V&&V.expiresAt>j)return V.data;let H=sZ.get(Y);if(H)return H;let B=iZ(J,$).then((G)=>{let K=Object.fromEntries(G.map((F)=>[F,ZQ(F,{name:F})]));return YJ.set(Y,{data:K,expiresAt:j+X}),K}).finally(()=>{sZ.delete(Y)});return sZ.set(Y,B),B}function uE(){YJ.clear(),sZ.clear()}async function dE($,Z){let Q=jJ(Z);if(!Q)return{};let W=nG[$];if(!W)return{};return W(Z,Q)}function lE($,Z,Q){if(!Q)return!1;if(!nG[$])return!1;if(Z?.loadPrivateOnAuth===!1)return!1;return Boolean(jJ(Q))}async function pE($,Z,Q){let W=Z?.cacheTtlMs??iG,J=bE($,Q),X=Date.now(),Y=XJ.get(J);if(Y&&Y.expiresAt>X)return Y.data;let j=aZ.get(J);if(j)return j;let V=dE($,Q).then((H)=>{return XJ.set(J,{data:H,expiresAt:X+W}),H}).finally(()=>{aZ.delete(J)});return aZ.set(J,V),V}async function rE($){return s.fetchLiveProviderModels($,globalThis.fetch)}async function d8($={}){let Z=$.url??tZ,Q=$.cacheTtlMs??EE,W=Date.now(),J=oZ.get(Z);if(J&&J.expiresAt>W)return J.data;let X=e6.get(Z);if(X)return X;let Y=rE(Z).then((j)=>{return oZ.set(Z,{data:j,expiresAt:W+Q}),j}).finally(()=>{e6.delete(Z)});return e6.set(Z,Y),Y}function VJ($){if($){oZ.delete($),e6.delete($);return}oZ.clear(),e6.clear()}function HJ(){XJ.clear(),aZ.clear()}function iE($){return Object.fromEntries(Object.entries($).map(([Z,Q])=>[Z,{baseUrl:Q.baseUrl,modelId:Q.modelId,capabilities:rG(Q.capabilities)}]))}var $5=iE(RE());function QQ($){let Z=ME($);if(!Z)return;return{baseUrl:Z.baseUrl||void 0,modelId:Z.modelId,knownModels:Z.knownModels,capabilities:rG(Z.capabilities)}}async function Z5($,Z,Q){let W=QQ($);if(!W)return;try{let J=Z?.loadLatestOnInit?await d8(Z):void 0,X=J?PE($,J):{},Y=Q&&lE($,Z,Q)?await pE($,Z,Q):{},V=Boolean(s.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl)?Q??{providerId:$,modelId:W.modelId,baseUrl:W.baseUrl}:Q,H=V?await cE($,Z,V).catch(()=>({})):{},B=await CE($,W.knownModels,X,Y,H,Q?.knownModels);return{...W,knownModels:B}}catch(J){if(Z?.failOnError)throw J;if($==="litellm")return{...W,knownModels:{}};return W}}var Q5=d0.BUILT_IN_PROVIDER,BJ=d0.BUILT_IN_PROVIDER_IDS,GJ=d0.isBuiltInProviderId,l8=d0.normalizeProviderId,W5=w.string().min(1).regex(/^[a-z0-9][a-z0-9-]*$/i),WQ=w.enum(["anthropic","gemini","openai-chat","openai-responses","openai-r1","ai-sdk"]),JQ=w.enum(["anthropic","ai-sdk","ai-sdk-community","openai","openai-compatible","openai-r1","gemini","bedrock","custom","fetch","vertex"]),XQ=w.object({apiKey:w.string().optional(),accessToken:w.string().optional(),refreshToken:w.string().optional(),expiresAt:w.number().int().positive().optional(),accountId:w.string().optional()}),nE=w.enum(["none","low","medium","high","xhigh"]),YQ=w.object({enabled:w.boolean().optional(),effort:nE.optional(),budgetTokens:w.number().int().positive().optional()}),jQ=w.object({accessKey:w.string().optional(),secretKey:w.string().optional(),sessionToken:w.string().optional(),region:w.string().optional(),profile:w.string().optional(),authentication:w.enum(["iam","api-key","apikey","profile"]).optional(),usePromptCache:w.boolean().optional(),useCrossRegionInference:w.boolean().optional(),useGlobalInference:w.boolean().optional(),endpoint:w.string().url().optional(),customModelBaseId:w.string().optional()}),VQ=w.object({projectId:w.string().optional(),region:w.string().optional()}),HQ=w.object({apiVersion:w.string().optional(),useIdentity:w.boolean().optional()}),BQ=w.object({clientId:w.string().optional(),clientSecret:w.string().optional(),tokenUrl:w.string().url().optional(),resourceGroup:w.string().optional(),deploymentId:w.string().optional(),useOrchestrationMode:w.boolean().optional(),api:w.enum(["orchestration","foundation-models"]).optional(),defaultSettings:w.record(w.string(),w.unknown()).optional()}),GQ=w.object({mode:w.enum(["internal","external"]).optional(),usePromptCache:w.boolean().optional()}),KQ=w.object({loadLatestOnInit:w.boolean().optional(),loadPrivateOnAuth:w.boolean().optional(),url:w.string().url().optional(),cacheTtlMs:w.number().int().positive().optional(),failOnError:w.boolean().optional()}),C$=w.object({provider:W5,apiKey:w.string().optional(),auth:XQ.optional(),model:w.string().optional(),protocol:WQ.optional(),client:JQ.optional(),routingProviderId:W5.optional(),maxTokens:w.number().int().positive().optional(),contextWindow:w.number().int().positive().optional(),baseUrl:w.string().url().optional(),headers:w.record(w.string(),w.string()).optional(),timeout:w.number().int().positive().optional(),reasoning:YQ.optional(),aws:jQ.optional(),gcp:VQ.optional(),azure:HQ.optional(),sap:BQ.optional(),oca:GQ.optional(),region:w.string().optional(),apiLine:w.enum(["china","international"]).optional(),capabilities:w.array(w.enum(["reasoning","prompt-cache","streaming","tools","vision","computer-use","oauth","popular"])).optional(),modelCatalog:KQ.optional()});function FQ($){return C$.parse($)}function AQ($){return C$.safeParse($)}function aE($){return $.protocol==="openai-responses"||$.client==="openai"}function l0($,Z={}){let Q=$.provider,W=l8(Q),J=Z.includeKnownModels!==!1,X=$.reasoning?.effort||"none",Y=X==="none"?void 0:X,j=$5[W],V=Object.assign({},...d0.resolveProviderModelCatalogKeys(W).map((L)=>d0.getGeneratedModelsForProvider(L))),H=Object.keys(V)[0],B=U8(W,$),G=$.baseUrl??(W==="oca"?$.oca?.mode==="internal"?jZ:VZ:j?.baseUrl),K=$.routingProviderId??(aE($)&&W!==Q5.OPENAI_NATIVE?Q5.OPENAI_NATIVE:void 0),F=J?j?.knownModels??(Object.keys(V).length>0?V:void 0):void 0,A={providerId:Q,clientType:$.client,routingProviderId:K,modelId:$.model??j?.modelId??H??"default",...J?{knownModels:F}:{},apiKey:B,accessToken:$.auth?.accessToken,refreshToken:$.auth?.refreshToken,accountId:$.auth?.accountId,baseUrl:G,headers:$.headers,timeoutMs:$.timeout,maxOutputTokens:$.maxTokens,maxInputTokens:$.contextWindow,thinking:$.reasoning?.enabled,reasoningEffort:Y,thinkingBudgetTokens:$.reasoning?.budgetTokens,region:$.region??$.aws?.region??$.gcp?.region,apiLine:$.apiLine,useCrossRegionInference:$.aws?.useCrossRegionInference,useGlobalInference:$.aws?.useGlobalInference,aws:$.aws?{accessKey:$.aws.accessKey,secretKey:$.aws.secretKey,sessionToken:$.aws.sessionToken,authentication:$.aws.authentication,profile:$.aws.profile,usePromptCache:$.aws.usePromptCache,endpoint:$.aws.endpoint,customModelBaseId:$.aws.customModelBaseId}:void 0,gcp:$.gcp?{projectId:$.gcp.projectId,region:$.gcp.region}:void 0,azure:$.azure,sap:$.sap,oca:$.oca,capabilities:$.capabilities??j?.capabilities,modelCatalog:$.modelCatalog?{loadLatestOnInit:$.modelCatalog.loadLatestOnInit,loadPrivateOnAuth:$.modelCatalog.loadPrivateOnAuth,url:$.modelCatalog.url,cacheTtlMs:$.modelCatalog.cacheTtlMs,failOnError:$.modelCatalog.failOnError}:void 0};return Object.fromEntries(Object.entries(A).filter(([L,f])=>f!==void 0))}function KJ($){let Z=FQ($);return l0(Z)}function FJ($){let Z=AQ($);if(Z.success)return{success:!0,config:l0(Z.data)};return{success:!1,error:Z.error}}var p8=C$;var fQ=P$.object({settings:C$,updatedAt:P$.string().datetime(),tokenSource:P$.enum(["manual","oauth","migration"]).default("manual")}),r8=P$.object({version:P$.literal(1),lastUsedProvider:P$.string().min(1).optional(),providers:P$.record(P$.string(),fQ)});function S$(){return{version:1,providers:{}}}$1();var tG={};N(tG,{InMemoryWorkspaceManager:()=>i8});import{upsertWorkspaceInfo as sE,WorkspaceManifestSchema as AJ}from"@cline/shared";class i8{manifest;listeners=new Set;constructor($){this.manifest=AJ.parse($??{workspaces:{}})}async addWorkspacePath($){let Z=await $8($);return this.manifest=sE(this.manifest,Z),this.emit({type:"workspace_added",workspace:Z}),Z}async switchWorkspace($){let Z=w1($),Q=this.manifest.workspaces[Z];if(Q)return this.manifest=AJ.parse({...this.manifest,currentWorkspacePath:Z}),this.emit({type:"workspace_switched",workspace:Q}),Q;let W=await this.addWorkspacePath(Z);return this.manifest=AJ.parse({...this.manifest,currentWorkspacePath:W.rootPath}),this.emit({type:"workspace_switched",workspace:W}),W}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}getCurrentWorkspace(){let $=this.manifest.currentWorkspacePath;if(!$)return;return this.manifest.workspaces[$]}getWorkspace($){let Z=w1($);return this.manifest.workspaces[Z]}listWorkspaces(){return Object.values(this.manifest.workspaces)}getManifest(){return this.manifest}emit($){for(let Z of this.listeners)Z($)}}_0();import{createHash as oE}from"node:crypto";var eG=new Set,$K=new Set;function tE($){return oE("sha256").update($).digest("hex")}function eE($){if($.vcsTypes&&$.vcsTypes.length>0)return $.vcsTypes;return[$.vcsType==="git"?"git":"none"]}function ZK($){if(!$.telemetry)return;let Z=tE($.rootPath),Q=$.rootCount??1;if(!eG.has(Z))eG.add(Z),T9($.telemetry,{root_count:Q,vcs_types:eE($),init_duration_ms:$.durationMs,feature_flag_enabled:$.featureFlagEnabled??!0,is_remote_workspace:$.isRemoteWorkspace});if($.initError&&!$K.has(Z)){$K.add(Z);let W=Error($.initError.message);W.name=$.initError.errorType||"Error",O9($.telemetry,W,{fallback_to_single_root:!0,workspace_count:Q})}}function ZN($){return`${$.pluginName??$.pluginPath}: ${$.message}`}function QN($,Z,Q){if(Z.length>0)for(let X of Z)Q?.log(X.message,{severity:"warn"});if($.length===0)return;let W=$.slice(0,3).map(ZN).join("; "),J=$.length>3?`; and ${$.length-3} more`:"";Q?.log(`Some plugins failed to initialize. ${W}${J}. Use --verbose for more details.`,{severity:"warn"});for(let X of $)Q?.log(`Plugin initialization failed (${X.phase}) for ${X.pluginPath}`,{severity:"warn",stack:X.stack,pluginPath:X.pluginPath,pluginName:X.pluginName})}function WN($,Z){let Q=typeof $.thinking==="boolean",W=typeof $.reasoningEffort==="string";if(!Q&&!W)return Z;return{...Z??{},...Q?{enabled:$.thinking}:{},...W?{effort:$.reasoningEffort}:{}}}function QK($,Z){return $N($,Z)}function JN($){let Z=0;for(let Q of $??[]){if(Q.role!=="user")continue;if(("metadata"in Q&&Q.metadata&&typeof Q.metadata==="object"&&!Array.isArray(Q.metadata)?Q.metadata:void 0)?.kind==="recovery_notice")continue;Z+=1}return Z}function XN($){let Z={...$.storedHeaders??{},...$.configHeaders??{}},Q=$.accountId?.trim()||YN($.accessToken);if(Z.originator="cline",Z.session_id=$.sessionId,Z["User-Agent"]=`Cline/${process.env.npm_package_version||"1.0.0"}`,Q)Z["ChatGPT-Account-Id"]=Q;return Z}function YN($){let Z=$?.trim();if(!Z)return;let Q=E0(Z),W=Q?.["https://api.openai.com/auth"]?.chatgpt_account_id;if(typeof W==="string"&&W.length>0)return W;let J=Q?.organizations?.[0]?.id;if(typeof J==="string"&&J.length>0)return J;let X=Q?.chatgpt_account_id;if(typeof X==="string"&&X.length>0)return X;return}function jN($,Z,Q,W,J){let X=Q.getProviderSettings($.providerId),Y=W||X?.modelCatalog?{...W??{},...X?.modelCatalog??{}}:void 0,j=$.providerConfig?.providerId===$.providerId?$.providerConfig:void 0,V={...X??{},provider:$.providerId,model:$.modelId,apiKey:$.apiKey??X?.apiKey,baseUrl:$.baseUrl??X?.baseUrl,headers:$.providerId==="openai-codex"?XN({sessionId:Z,configHeaders:$.headers,storedHeaders:X?.headers,accountId:X?.auth?.accountId,accessToken:$.apiKey??X?.auth?.accessToken??X?.apiKey}):$.headers??X?.headers,reasoning:WN($,X?.reasoning),modelCatalog:Y},H={...l0(V),...j??{}};if($.knownModels)H.knownModels=$.knownModels;if($.extensionContext)H.extensionContext=$.extensionContext;let G=$.fetch??H.fetch??J;if(G)H.fetch=G;return H}async function WK($){let{input:Z,sessionId:Q,providerSettingsManager:W,defaultTelemetry:J,defaultCapabilities:X,defaultToolPolicies:Y,defaultFetch:j,onPluginEvent:V,onTeamEvent:H,createSubAgentLifecycleCallbacks:B,createSpawnTool:G,localRuntime:K,readSessionMetadata:F,writeSessionMetadata:A}=$,L=R$(Z.config),{modelCatalogDefaults:f,userInstructionService:D,configExtensions:U,onTeamRestored:T,...q}=K??{},z=Object.keys(q).length>0?q:void 0,{workspaceInfo:_,workspaceMetadata:E,durationMs:C,vcsType:y,initError:l}=await JW(L),o=z?.extensionContext,t={...o??{},workspace:{..._,...o?.workspace??{}},session:{...o?.session??{},sessionId:Q},logger:o?.logger??z?.logger,telemetry:o?.telemetry??z?.telemetry??J};ZK({telemetry:t.telemetry,rootPath:_.rootPath,workspaceInfo:_,rootCount:1,vcsType:y,durationMs:C,initError:l,featureFlagEnabled:!0});let Q0=u8({cwd:Z.config.cwd,workspacePath:L,rootSessionId:Q,logger:z?.logger,workspaceInfo:_}),e0=ZG(z?.hooks)?void 0:c8({rootSessionId:Q,workspacePath:L,workspaceInfo:_}),l$=M2([z?.hooks,e0]),r;if(QK(U,"plugins"))try{r=await g8({pluginPaths:z?.pluginPaths,workspacePath:L,cwd:Z.config.cwd,onEvent:V,providerId:Z.config.providerId,modelId:Z.config.modelId,workspaceInfo:_,session:t.session,client:t.client,user:t.user,logger:t.logger,telemetry:t.telemetry,automation:t.automation}),QN(r.failures,r.warnings,z?.logger)}catch(s2){let $W=s2 instanceof Error?s2.message:String(s2);z?.logger?.log?.(`plugin loading failed; continuing without plugins (${$W})`)}let P=b3(Q0?[Q0]:void 0,b3(z?.extensions,c9(r?.extensions))),B0=QK(U,"plugins")?n1(r?.pluginPaths??[]):void 0,G0={...Z.config,...z??{},sessionId:Q,hooks:l$,extensions:P,extensionContext:t,telemetry:t.telemetry},C0=jN(G0,Q,W,f,j),n2=M2([G0.hooks,G0.checkpoint?.enabled===!0?yG({cwd:G0.cwd,sessionId:Q,logger:G0.logger,createCheckpoint:G0.checkpoint?.createCheckpoint,initialRunCount:JN(Z.initialMessages),readSessionMetadata:F,writeSessionMetadata:A}):void 0]),R1={...G0,providerConfig:C0,workspaceMetadata:E,hooks:n2},H1=Z.toolPolicies??G0.toolPolicies??Y,C4=M0(X,Z.capabilities),a2=C4?.requestToolApproval,K9=C4?.toolExecutors,E1=B?.(R1),F9=new i8({currentWorkspacePath:_.rootPath,workspaces:{[_.rootPath]:_}});return{effectiveInput:Z,config:R1,providerConfig:C0,workspaceMetadata:E,workspaceInfo:_,extensions:P,hooks:n2,toolPolicies:H1,requestToolApproval:a2,pluginSandboxShutdown:r?.shutdown,runtimeBuilderInput:{config:R1,hooks:n2,extensions:P,onTeamEvent:H,createSpawnTool:G,onTeamRestored:T,onSubAgentEvent:E1?.onSubAgentEvent,onSubAgentStart:E1?.onSubAgentStart,onSubAgentEnd:E1?.onSubAgentEnd,userInstructionService:D,pluginSkillDirectories:B0,configExtensions:U,toolExecutors:K9,toolPolicies:H1,workspaceManager:F9,logger:R1.logger,telemetry:R1.telemetry,requestToolApproval:a2}}}import{existsSync as DQ,mkdirSync as VN,readdirSync as HN,rmdirSync as BN,rmSync as GN,unlinkSync as KN}from"node:fs";import{dirname as JK,join as UQ}from"node:path";function J0(){return new Date().toISOString()}function J5($){if(!$||!DQ($))return;try{KN($)}catch{}}function FN($){let Z=P8($);if(Z)return{rootSessionId:Z.rootSessionId,fileStem:`${Z.agentId}__${Z.teamTaskId}`};let Q=x6($);if(Q)return{rootSessionId:Q.rootSessionId,fileStem:Q.agentId};return{rootSessionId:$,fileStem:$}}class fJ{ensureSessionsDir;constructor($){this.ensureSessionsDir=$}sessionArtifactsDir($){return UQ(this.ensureSessionsDir(),$)}ensureSessionArtifactsDir($){let Z=this.sessionArtifactsDir($);if(!DQ(Z))VN(Z,{recursive:!0});return Z}sessionMessagesPath($){return UQ(this.sessionArtifactsDir($),`${$}.messages.json`)}sessionManifestPath($,Z=!1){let Q=Z?this.ensureSessionArtifactsDir($):this.sessionArtifactsDir($);return UQ(Q,`${$}.json`)}removeSessionDirIfEmpty($){let Z=this.sessionArtifactsDir($),Q=this.ensureSessionsDir();while(Z.startsWith(Q)&&Z!==Q){if(!DQ(Z)){Z=JK(Z);continue}try{if(HN(Z).length>0)break;BN(Z)}catch{break}Z=JK(Z)}}removeSessionDir($){this.removeDir(this.sessionArtifactsDir($))}removeDir($){if(!DQ($))return;try{GN($,{recursive:!0,force:!0})}catch{}}subagentArtifactPaths($,Z,Q){let{rootSessionId:W,fileStem:J}=FN($),X=this.sessionArtifactsDir(W);return{messagesPath:UQ(X,`${J}.messages.json`)}}}import{resolveDocumentsExtensionPath as AN}from"@cline/shared/storage";_0();function XK($,Z,Q,W,J){if(Q)M9($.telemetry,{ulid:Z,apiProvider:$.providerId,...J});else q9($.telemetry,{ulid:Z,apiProvider:$.providerId,...J});fN($.telemetry,{workspacePath:W})}function fN($,Z){let Q=AN("Hooks"),W=N$(Z.workspacePath),J=new Map;for(let X of W){let Y=X.hookEventName??"unknown",j=J.get(Y)??{global:0,workspace:0};if(X.path===Q||X.path.startsWith(`${Q}/`))j.global+=1;else j.workspace+=1;J.set(Y,j)}for(let[X,Y]of J.entries())y9($,X,Y.global,Y.workspace)}function YK($,Z){for(let Q of Z.mentions)S9($,Q,Z.matchedFiles.includes(Q)?1:0,"file",!Z.matchedFiles.includes(Q));for(let Q of Z.matchedFiles)C9($,"file",Q.length);for(let Q of Z.ignoredMentions)P9($,"file","not_found",Q)}var YU={};N(YU,{ProviderSettingsManager:()=>q1});import{chmodSync as KU,existsSync as RY,mkdirSync as xI,readFileSync as gI,writeFileSync as mI}from"node:fs";import{basename as FU,dirname as EY}from"node:path";import{resolveProviderSettingsPath as vI}from"@cline/shared/storage";var M={};N(M,{writeHubDiscovery:()=>p9,writeGlobalSettings:()=>B1,withHubStartupLock:()=>r9,verifyHubConnection:()=>A1,updateMcpSettingsFileSync:()=>j1,updateMcpSettingsFile:()=>t8,updateMcpServerOAuthStateAsync:()=>O5,updateMcpServerOAuthState:()=>P2,updateLocalProvider:()=>y7,uninstallPlugin:()=>a5,uninstallMarketplaceSkill:()=>A7,uninstallMarketplacePlugin:()=>f7,uninstallMarketplaceMcpServerFromSettings:()=>K7,uninstallMarketplaceEntry:()=>dX,truncateNotificationBody:()=>J9,truncateCommandOutput:()=>Y2,toggleDisabledTool:()=>m9,toTeamProgressLifecycleEvent:()=>H4,toProviderConfig:()=>l0,toHubStatusUrl:()=>OW,toHubHealthUrl:()=>i9,toHookConfigFileName:()=>o6,syncPluginMcpServersToSettings:()=>i5,summarizeUsageFromMessages:()=>b8,stopLocalHubServerGracefully:()=>hW,startLocalOAuthServer:()=>J1,startHubWebSocketServer:()=>j9,startHubServer:()=>HU,startClineDeviceAuth:()=>lW,splitCoreSessionConfig:()=>i4,spawnDetachedHubServerWithRetry:()=>H8,spawnDetachedHubServer:()=>wW,setTelemetryOptOutGlobally:()=>yj,setMcpServerDisabled:()=>w2,setDisabledTools:()=>fW,setDisabledPlugin:()=>cj,setCompactionStrategyGlobally:()=>xj,setAutoUpdateEnabledGlobally:()=>kj,sendHubCommand:()=>_V,saveProviderOAuthCredentials:()=>W2,saveLocalProviderSettings:()=>WY,saveLocalProviderOAuthCredentials:()=>jY,sanitizeSessionToken:()=>D2,safeParseSettings:()=>AQ,safeCreateProviderConfig:()=>FJ,runSubprocessEvent:()=>U4,runHook:()=>L4,reviveTeamStateDates:()=>SZ,restartLocalHubIfIdleAfterStartupTimeout:()=>t9,resolveWorkspaceHubOwnerContext:()=>QV,resolveWorkflowsConfigSearchPaths:()=>f5,resolveSkillsConfigSearchPaths:()=>F5,resolveSharedHubOwnerContext:()=>Q1,resolveSessionBackend:()=>KX,resolveRulesConfigSearchPaths:()=>A5,resolveProviderConfig:()=>Z5,resolveProviderApiKeyFromSettings:()=>sW,resolveProductionHubOwnerContext:()=>F1,resolvePluginSkillDirectoriesFromPaths:()=>n1,resolvePluginConfigSearchPaths:()=>i6,resolveMcpServerRegistrations:()=>p0,resolveMarketplaceMcpServerName:()=>o5,resolveLocalClineAuthToken:()=>HY,resolveHubUrl:()=>kW,resolveHubOwnerContext:()=>x1,resolveHubEndpointOptions:()=>K1,resolveHubBuildId:()=>l9,resolveHooksConfigSearchPaths:()=>a6,resolveDisabledToolNames:()=>G1,resolveDisabledPluginPaths:()=>u4,resolveDefaultMcpSettingsPath:()=>Z0,resolveDefaultHubPort:()=>V8,resolveDefaultHubPathname:()=>NW,resolveDefaultHubHost:()=>EW,resolveCoreSelectedToolIds:()=>yZ,resolveCoreDistinctId:()=>P0,resolveCompatibleLocalHubUrl:()=>o4,resolveClineDir:()=>tj,resolveClineDataDir:()=>o$,resolveAndLoadAgentPlugins:()=>g8,resolveAgentPluginPaths:()=>i1,requestHubShutdown:()=>s4,requestDesktopToolApproval:()=>NX,removePluginMcpServersFromSettings:()=>n5,rememberRecoverableLocalHubUrl:()=>B$,registerRemoteConfigSessionBlobUpload:()=>W7,registerMcpServersFromSettingsFile:()=>S2,registerDisposable:()=>yI,refreshProviderModelsFromSource:()=>JY,refreshOpenAICodexToken:()=>YZ,refreshOcaToken:()=>BZ,refreshClineToken:()=>JZ,readSessionCheckpointHistory:()=>I2,readRemoteConfigSessionBlobUploadMetadata:()=>LX,readHubDiscovery:()=>K0,readGlobalSettings:()=>z0,readCompactionStrategyGlobally:()=>Ij,readBearerToken:()=>l7,probeHubServer:()=>g1,probeHubConnection:()=>LV,prewarmFileIndex:()=>TZ,prewarmDetachedHubServer:()=>a9,prepareRemoteConfigCoreIntegration:()=>zX,parseWorkflowConfigFromMarkdown:()=>K5,parseUserCommandEnvelope:()=>bI,parseSkillConfigFromMarkdown:()=>B5,parseSettings:()=>FQ,parseRuleConfigFromMarkdown:()=>G5,parsePluginSource:()=>M7,parseMcpInstallArgs:()=>r5,parseHookEventPayload:()=>D4,parseConfiguredAgentConfig:()=>I5,normalizeWorkspacePath:()=>w1,normalizeUserInput:()=>SI,normalizeSdkError:()=>PI,normalizeRuntimeCapabilities:()=>M0,normalizeProviderId:()=>l8,normalizeOAuthProvider:()=>XY,normalizeHubWebSocketUrl:()=>G$,noopBasicLogger:()=>CI,migrateLegacyProviderSettings:()=>Q9,mergeRulesForSystemPrompt:()=>e2,mergeAgentHooks:()=>M2,marketplaceEntryKey:()=>uX,makeTeamTaskSubSessionId:()=>I6,makeSubSessionId:()=>C8,loginOpenAICodex:()=>$6,loginOcaOAuth:()=>W6,loginLocalProvider:()=>YY,loginClineOAuth:()=>t4,loginAndSaveProviderOAuthCredentials:()=>X6,loginAndSaveLocalProviderOAuthCredentials:()=>VY,loadOpenTelemetryAdapter:()=>YI,loadMcpSettingsFile:()=>N2,loadLlmsConfigFromFile:()=>TY,loadConfiguredAgentConfigs:()=>Y4,loadAgentPluginsFromPathsWithDiagnostics:()=>z2,loadAgentPluginsFromPaths:()=>gZ,loadAgentPluginFromPath:()=>p6,listSessionHistoryFromBackend:()=>rJ,listPluginToolsWithDiagnostics:()=>xQ,listPluginTools:()=>R5,listMcpServerOAuthStatuses:()=>q5,listLocalProviders:()=>ZY,listHookConfigFiles:()=>N$,isToolDisabledGlobally:()=>gj,isTelemetryOptedOutGlobally:()=>g9,isSessionNotFoundError:()=>I1,isRuleEnabled:()=>f9,isPluginDisabledGlobally:()=>vj,isOfficialPluginSlug:()=>q7,isOAuthProvider:()=>Q2,isMarketplaceSkillInstalled:()=>F7,isLocalHubOrigin:()=>MY,isLocalHubHostName:()=>p7,isHubReconnectableTransportError:()=>bW,isHubCommandTimeoutError:()=>o9,isDiscoveryFilePresent:()=>$V,isClineOrgIndividualInferenceSubscriptionMessage:()=>UI,isClineOrgIndividualInferenceSubscriptionError:()=>fI,isClineNotSubscribedMessage:()=>AI,isClineNotSubscribedError:()=>FI,isClineAccountActionRequest:()=>LQ,isBuiltInProviderId:()=>GJ,isAutoUpdateEnabledGlobally:()=>hj,installPlugin:()=>aX,installMcpServer:()=>wX,identifyAccount:()=>b1,hasMcpSettingsFile:()=>s1,getValidOpenAICodexCredentials:()=>Z6,getValidOcaCredentials:()=>J6,getValidClineCredentials:()=>e4,getProviderOAuthCredentialsFromSettings:()=>Y6,getProviderConfigFields:()=>BY,getProviderConfig:()=>QQ,getProviderAuthStorageId:()=>aW,getProviderAuthHandler:()=>j0,getPersistedProviderApiKey:()=>U8,getMcpServerOAuthState:()=>C2,getMarketplaceSkillCandidates:()=>t5,getLocalProviderModels:()=>QY,getLiveModelsCatalog:()=>d8,getGlobalMarketplaceSkillPaths:()=>e5,getFileIndex:()=>d1,getCurrentContextSize:()=>I3,getCoreHeadlessToolNames:()=>k6,getCoreDefaultEnabledToolIds:()=>bZ,getCoreBuiltinToolCatalog:()=>f2,getCoreAcpToolNames:()=>hZ,getClinePassSubscriptionUrl:()=>KI,getClineOrgIndividualInferenceSubscriptionMessage:()=>BI,getClineNotSubscribedMessage:()=>GI,getClineDefaultSystemPrompt:()=>DI,generateWorkspaceInfoWithDiagnostics:()=>S4,generateWorkspaceInfo:()=>$8,formatRulesForSystemPrompt:()=>t2,formatProviderOAuthApiKey:()=>oW,formatDisplayUserInput:()=>wI,findInstalledGlobalMarketplaceSkillName:()=>$9,findCheckpointForRun:()=>A4,filterExtensionToolRegistrations:()=>c9,filterDisabledTools:()=>y1,filterDisabledPluginPaths:()=>v9,fetchClineRecommendedModels:()=>_Y,executeClineAccountAction:()=>_Q,ensureHubWebSocketServer:()=>r7,ensureHubServer:()=>BU,ensureDetachedHubServer:()=>VV,ensureCustomProvidersLoaded:()=>P7,ensureCompatibleLocalHubUrl:()=>$2,enrichPromptWithMentions:()=>T8,emptyWorkspaceManifest:()=>RI,emptyStoredProviderSettings:()=>S$,discoverPluginModulePaths:()=>n6,disablePluginMcpServersInSettings:()=>bX,deriveSubsessionStatus:()=>g6,deleteLocalProvider:()=>h7,defineLlmsConfig:()=>zY,createWorkflowsConfigDefinition:()=>L5,createUserInstructionConfigService:()=>b$,createToolPoliciesWithPreset:()=>qZ,createTool:()=>MI,createTeamName:()=>Y7,createSubprocessHooks:()=>eQ,createSpawnAgentTool:()=>q$,createSkillsConfigDefinition:()=>U5,createShellTool:()=>M6,createShellExecutor:()=>j2,createSessionHost:()=>K4,createRuntimeHost:()=>K4,createRulesConfigDefinition:()=>D5,createRemoteConfigSessionMessagesArtifactUploader:()=>_X,createProviderConfig:()=>KJ,createOpenTelemetryTelemetryService:()=>r4,createOAuthClientCallbacks:()=>n8,createMcpTools:()=>Q4,createLocalHubScheduleRuntimeHandlers:()=>VU,createLlmsSdk:()=>qY,createInitialAccumulatedUsage:()=>D0,createInMemoryHubOwnerContext:()=>ej,createHubServerUrl:()=>Z1,createHubAuthToken:()=>d9,createHookConfigFileHooks:()=>t6,createHookConfigFileExtension:()=>u8,createHookAuditHooks:()=>c8,createDisabledMcpToolPolicy:()=>M5,createDisabledMcpToolPolicies:()=>IQ,createDelegatedAgentConfigProvider:()=>T$,createDelegatedAgent:()=>O$,createDefaultToolsWithPreset:()=>MZ,createDefaultTools:()=>D$,createDefaultShellExecutor:()=>P6,createDefaultMcpServerClientFactory:()=>$4,createDefaultExecutors:()=>O8,createCoreSettingsService:()=>y2,createCoreSessionSnapshot:()=>U1,createContributionRegistry:()=>qI,createContextCompactionPrepareTurn:()=>F6,createConfiguredTelemetryService:()=>h1,createConfiguredTelemetryHandle:()=>j8,createConfiguredAgentTools:()=>j4,createClineTelemetryServiceMetadata:()=>OI,createClineTelemetryServiceConfig:()=>TI,createCheckpointComparePlan:()=>aQ,createBuiltinTools:()=>U2,createAgentTeamsTools:()=>A2,createAgentRuntime:()=>II,createAgentHooksExtension:()=>m8,connectToHub:()=>e9,completeClineDeviceAuth:()=>pW,compareCheckpointToWorkspace:()=>d5,collectPluginMcpOAuthCandidates:()=>R7,clearPrivateModelsCatalogCache:()=>HJ,clearLiveModelsCatalogCache:()=>VJ,clearHubDiscovery:()=>S0,captureWorkspacePathResolved:()=>Nj,captureWorkspaceInitialized:()=>T9,captureWorkspaceInitError:()=>O9,captureToolUsage:()=>W8,captureTokenUsage:()=>R9,captureTaskRestarted:()=>M9,captureTaskCreated:()=>q9,captureTaskCompleted:()=>g4,captureSubagentExecution:()=>v4,captureSkillUsed:()=>N9,captureSdkError:()=>zI,captureProviderConfigured:()=>wj,captureProviderApiError:()=>m4,captureModeSwitch:()=>E9,captureMentionUsed:()=>C9,captureMentionSearchResults:()=>S9,captureMentionFailed:()=>P9,captureHookDiscovery:()=>y9,captureExtensionActivated:()=>Ej,captureDiffEditFailure:()=>w9,captureConversationTurnEvent:()=>Q8,captureCompactionSkipped:()=>k9,captureCompactionExecuted:()=>h9,captureAuthSucceeded:()=>P1,captureAuthStarted:()=>C1,captureAuthLoggedOut:()=>V$,captureAuthFailed:()=>S1,captureAgentUnexpectedReasoningTokens:()=>Rj,captureAgentTeamCreated:()=>b9,captureAgentCreated:()=>H$,buildWorkspaceMetadata:()=>b4,buildTeamProgressSummary:()=>V4,buildSdkErrorProperties:()=>LI,buildRemoteConfigSessionBlobUploadMetadata:()=>Z7,buildMcpInstallTransport:()=>j7,buildDelegatedAgentConfig:()=>K2,buildConfiguredAgentToolName:()=>x5,buildConfiguredAgentToolDescriptors:()=>g5,buildCheckpointWorkspaceDiff:()=>sQ,bootstrapAgentTeams:()=>w8,authorizeMcpServerOAuth:()=>bQ,addLocalProvider:()=>$Y,accumulateUsageTotals:()=>f0,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>H5,UnifiedConfigFileWatcher:()=>E2,ToolPresets:()=>u0,TelemetryService:()=>X8,TelemetryLoggerSink:()=>p4,TEAM_TOOL_NAMES:()=>N8,SubprocessSandbox:()=>k8,StructuredCommandInputSchema:()=>J2,StoredProviderSettingsSchema:()=>r8,StoredProviderSettingsEntrySchema:()=>fQ,SqliteTeamStore:()=>c2,SqliteSessionStore:()=>L1,SessionVersioningService:()=>c$,SessionVersioningError:()=>k0,SessionSource:()=>T0,SessionNotFoundError:()=>k1,SapSettingsSchema:()=>BQ,SKILLS_CONFIG_DIRECTORY_NAME:()=>V5,SESSION_STATUSES:()=>m6,SESSION_NOT_FOUND_ERROR_CODE:()=>s$,SDK_ERROR_TELEMETRY_EVENT:()=>hI,RpcClineAccountService:()=>Y5,RemoteRuntimeHost:()=>X4,ReasoningSettingsSchema:()=>YQ,RULES_CONFIG_DIRECTORY_NAME:()=>EQ,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY:()=>Q7,ProviderSettingsSchema:()=>C$,ProviderSettingsManager:()=>q1,ProviderProtocolSchema:()=>WQ,ProviderIdSchema:()=>W5,ProviderClientSchema:()=>JQ,OpenTelemetryProvider:()=>Y8,OcaSettingsSchema:()=>GQ,OPENAI_COMPATIBLE_PROVIDERS:()=>$5,NodeHubClient:()=>W1,NoOpFeatureFlagsProvider:()=>g2,NativeHubTransportAdapter:()=>Y9,ModelCatalogSettingsSchema:()=>KQ,McpSettingsUpdateSkippedError:()=>o8,McpSettingsMutatorPurityError:()=>y$,McpSettingsLockTimeoutError:()=>h$,MAX_COMMAND_OUTPUT_CHARS:()=>c1,LocalRuntimeHost:()=>T1,Llms:()=>jI,InMemoryWorkspaceManager:()=>i8,InMemoryMcpManager:()=>b2,HubUIClient:()=>gW,HubTransportError:()=>R0,HubSessionClient:()=>xW,HubServerTransport:()=>w4,HubScheduleService:()=>Z8,HubScheduleCommandService:()=>o2,HubRuntimeHost:()=>o1,HubCommandError:()=>B8,HookEventPayloadSchema:()=>tQ,HookEventNameSchema:()=>oQ,HookConfigFileName:()=>v8,HOOK_CONFIG_FILE_EVENT_MAP:()=>s6,HOOKS_CONFIG_DIRECTORY_NAME:()=>lZ,GlobalSettingsSchema:()=>c4,GcpSettingsSchema:()=>VQ,FileTeamPersistenceStore:()=>x7,FeatureFlagsService:()=>x2,FeatureFlagDefaultValue:()=>NI,FEATURE_FLAGS:()=>EI,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>d7,DefaultToolNames:()=>U0,DefaultRuntimeBuilder:()=>T4,DefaultLlmsSdk:()=>W9,DEFAULT_MODELS_CATALOG_URL:()=>tZ,DEFAULT_HUB_PORT:()=>MW,DEFAULT_HUB_PATHNAME:()=>RW,DEFAULT_HUB_HOST:()=>qW,CoreSettingsService:()=>k$,CoreSessionService:()=>z1,ContributionRegistry:()=>_I,ClineOrgIndividualInferenceSubscriptionError:()=>HI,ClineNotSubscribedError:()=>VI,ClineCore:()=>l5,ClineAccountService:()=>X5,ChatViewStateSchema:()=>UY,ChatSummarySchema:()=>u7,ChatSessionStatusSchema:()=>m7,ChatSessionConfigSchema:()=>g7,ChatMessageSchema:()=>c7,ChatMessageRoleSchema:()=>v7,CORE_TELEMETRY_EVENTS:()=>m,CORE_BUILD_VERSION:()=>DY,BrowserWebSocketHubAdapter:()=>X9,BUILT_IN_PROVIDER_IDS:()=>BJ,BUILT_IN_PROVIDER:()=>Q5,AzureSettingsSchema:()=>HQ,AwsSettingsSchema:()=>jQ,AuthSettingsSchema:()=>XQ,AgentTeamsRuntime:()=>k2,AgentTeam:()=>G4,Agent:()=>kI,ALL_DEFAULT_TOOL_NAMES:()=>X$});R(M,po);import*as jI from"@cline/llms";import{ClineNotSubscribedError as VI,ClineOrgIndividualInferenceSubscriptionError as HI,getClineOrgIndividualInferenceSubscriptionMessage as BI,getClineNotSubscribedMessage as GI,getClinePassSubscriptionUrl as KI,isClineNotSubscribedError as FI,isClineNotSubscribedMessage as AI,isClineOrgIndividualInferenceSubscriptionError as fI,isClineOrgIndividualInferenceSubscriptionMessage as UI}from"@cline/llms";import{buildClineSystemPrompt as DI,buildSdkErrorProperties as LI,ContributionRegistry as _I,captureSdkError as zI,createClineTelemetryServiceConfig as TI,createClineTelemetryServiceMetadata as OI,createContributionRegistry as qI,createTool as MI,emptyWorkspaceManifest as RI,FEATURE_FLAGS as EI,FeatureFlagDefaultValue as NI,formatDisplayUserInput as wI,noopBasicLogger as CI,normalizeSdkError as PI,normalizeUserInput as SI,parseUserCommandEnvelope as bI,registerDisposable as yI,SDK_ERROR_TELEMETRY_EVENT as hI}from"@cline/shared";import"@cline/shared/storage";var VK={};N(VK,{isClineAccountActionRequest:()=>LQ,executeClineAccountAction:()=>_Q,RpcClineAccountService:()=>Y5,ClineAccountService:()=>X5});function UN($){if(typeof $!=="object"||$===null||!("error"in $))return;let Z=$.error;return typeof Z==="string"&&Z.trim()?Z:void 0}function jK($,Z,Q){let W=UN(Q);if(W)return W;let J=Z.trim();if(J){let X=J.length>200?`${J.slice(0,200)}...`:J;return`Cline account request failed with status ${$}: ${X}`}return`Cline account request failed with status ${$}`}class X5{apiBaseUrl;getAuthTokenFn;getCurrentUserIdFn;getOrganizationMemberIdFn;getHeadersFn;requestTimeoutMs;fetchImpl;constructor($){let Z=$.apiBaseUrl.trim();if(!Z)throw Error("apiBaseUrl is required");this.apiBaseUrl=Z,this.getAuthTokenFn=$.getAuthToken,this.getCurrentUserIdFn=$.getCurrentUserId,this.getOrganizationMemberIdFn=$.getOrganizationMemberId,this.getHeadersFn=$.getHeaders,this.requestTimeoutMs=$.requestTimeoutMs??30000,this.fetchImpl=$.fetchImpl??fetch}async fetchMe(){return this.request("/api/v1/users/me")}async fetchRemoteConfig(){return this.request("/api/v1/users/me/remote-config")}async fetchFeaturebaseToken(){try{return await this.request("/api/v1/users/me/featurebase-token")}catch{return}}async fetchBalance($){let Z=await this.resolveUserId($);return this.request(`/api/v1/users/${encodeURIComponent(Z)}/balance`)}async fetchUsageTransactions($){let Z=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(Z)}/usages`)).items??[]}async fetchPaymentTransactions($){let Z=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(Z)}/payments`)).paymentTransactions??[]}async fetchUserOrganizations(){return(await this.fetchMe()).organizations??[]}async fetchAvailableSubscriptionPlans($){let Z=new URL("/api/v1/plans",this.apiBaseUrl);if($?.type)Z.searchParams.set("type",$.type);return this.request(`${Z.pathname}${Z.search}`)}async fetchCurrentUserPlan(){return this.request("/api/v1/users/me/plan")}async fetchOrganization($){let Z=$.trim();if(!Z)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(Z)}`)}async fetchOrganizationBalance($){let Z=$.trim();if(!Z)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(Z)}/balance`)}async fetchOrganizationUsageTransactions($){let Z=$.organizationId.trim();if(!Z)throw Error("organizationId is required");let Q=await this.resolveOrganizationMemberId(Z,$.memberId);return(await this.request(`/api/v1/organizations/${encodeURIComponent(Z)}/members/${encodeURIComponent(Q)}/usages`)).items??[]}async switchAccount($){await this.request("/api/v1/users/active-account",{method:"PUT",body:{organizationId:$?.trim()||null},expectNoContent:!0})}async resolveUserId($){let Z=$?.trim();if(Z)return Z;let W=(this.getCurrentUserIdFn?await this.getCurrentUserIdFn():void 0)?.trim();if(W)return W;let J=await this.fetchMe();if(!J.id?.trim())throw Error("Unable to resolve current user id");return J.id}async resolveOrganizationMemberId($,Z){let Q=Z?.trim();if(Q)return Q;let J=(this.getOrganizationMemberIdFn?await this.getOrganizationMemberIdFn($):void 0)?.trim();if(J)return J;let Y=(await this.fetchUserOrganizations()).find((j)=>j.organizationId===$)?.memberId;if(!Y?.trim())throw Error(`Unable to resolve memberId for organization ${$}`);return Y}async request($,Z){let Q=(await this.getAuthTokenFn())?.trim();if(!Q)throw Error("No Cline account auth token found");let W=this.getHeadersFn?await this.getHeadersFn():{},J=new AbortController,X=setTimeout(()=>J.abort(),this.requestTimeoutMs);try{let Y=await this.fetchImpl(new URL($,this.apiBaseUrl),{method:Z?.method??"GET",headers:{Authorization:`Bearer ${Q}`,"Content-Type":"application/json",...W??{}},body:Z?.body!==void 0?JSON.stringify(Z.body):void 0,signal:J.signal});if(Y.status===204||Z?.expectNoContent){if(!Y.ok)throw Error(`Cline account request failed with status ${Y.status}`);return}let j=await Y.text(),V;if(j.trim())try{V=JSON.parse(j)}catch{if(!Y.ok)throw Error(jK(Y.status,j,void 0));throw Error("Cline account response was not valid JSON")}if(!Y.ok)throw Error(jK(Y.status,j,V));if(typeof V==="object"&&V!==null){let H=V;if(typeof H.success==="boolean"){if(!H.success)throw Error(H.error||"Cline account request failed");return H.data}}if(V===void 0||V===null)throw Error("Cline account response payload was empty");return V}finally{clearTimeout(X)}}}function LQ($){return $.action==="clineAccount"}async function _Q($,Z){switch($.operation){case"fetchMe":return Z.fetchMe();case"fetchBalance":return Z.fetchBalance($.userId);case"fetchUsageTransactions":return Z.fetchUsageTransactions($.userId);case"fetchPaymentTransactions":return Z.fetchPaymentTransactions($.userId);case"fetchUserOrganizations":return Z.fetchUserOrganizations();case"fetchOrganizationBalance":return Z.fetchOrganizationBalance($.organizationId);case"fetchOrganizationUsageTransactions":return Z.fetchOrganizationUsageTransactions({organizationId:$.organizationId,memberId:$.memberId});case"switchAccount":return await Z.switchAccount($.organizationId),{updated:!0};case"fetchFeaturebaseToken":return Z.fetchFeaturebaseToken?.();default:throw Error(`Unsupported Cline account operation: ${String($)}`)}}class Y5{executor;constructor($){this.executor=$}async fetchMe(){return this.request({action:"clineAccount",operation:"fetchMe"})}async fetchBalance($){return this.request({action:"clineAccount",operation:"fetchBalance",...$?.trim()?{userId:$.trim()}:{}})}async fetchUsageTransactions($){return this.request({action:"clineAccount",operation:"fetchUsageTransactions",...$?.trim()?{userId:$.trim()}:{}})}async fetchPaymentTransactions($){return this.request({action:"clineAccount",operation:"fetchPaymentTransactions",...$?.trim()?{userId:$.trim()}:{}})}async fetchUserOrganizations(){return this.request({action:"clineAccount",operation:"fetchUserOrganizations"})}async fetchOrganizationBalance($){let Z=$.trim();if(!Z)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationBalance",organizationId:Z})}async fetchOrganizationUsageTransactions($){let Z=$.organizationId.trim();if(!Z)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationUsageTransactions",organizationId:Z,...$.memberId?.trim()?{memberId:$.memberId.trim()}:{}})}async switchAccount($){await this.request({action:"clineAccount",operation:"switchAccount",organizationId:$?.trim()||null})}async fetchFeaturebaseToken(){return this.request({action:"clineAccount",operation:"fetchFeaturebaseToken"})}async request($){return(await this.executor.runProviderAction($)).result}}var HK={};N(HK,{createOAuthClientCallbacks:()=>n8});function n8($){return{onAuth:({url:Z,instructions:Q})=>{if($.onOutput?.(Q??"Complete sign-in in your browser."),$.openUrl)try{Promise.resolve($.openUrl(Z)).catch((W)=>{$.onOpenUrlError?.({url:Z,error:W})})}catch(W){$.onOpenUrlError?.({url:Z,error:W})}$.onOutput?.(Z)},onPrompt:$.onPrompt,onServerListening:$.onServerListening,onServerClose:$.onServerClose}}var SA={};N(SA,{ClineCore:()=>l5});function BK($){if($===!0)return{};if(!$)return;return $}function GK($){if($==="user")return"global";return $}class UJ{getService;constructor($){this.getService=$}async start(){await this.getService().start()}async stop(){await this.getService().stop()}async reconcileNow(){await this.getService().reconcileNow()}ingestEvent($){let Z=this.getService().ingestEvent($);return{event:Z.event,duplicate:Z.duplicate,matchedSpecIds:Z.matchedSpecs.map((Q)=>Q.specId),queuedRuns:Z.queuedRuns,suppressions:Z.suppressions}}listEvents($){return this.getService().listEventLogs($)}getEvent($){return this.getService().getEventLog($)}listSpecs($){return this.getService().listSpecs($)}listRuns($){return this.getService().listRuns($)}}function KK($){let{host:Z}=$;return{async startSession(Q){let W=(Q.cwd?.trim()||Q.workspaceRoot).trim(),J=await Z.startSession({source:Q.source?.trim()||T0.CLI,interactive:!1,config:{providerId:l8(Q.provider),modelId:Q.model,apiKey:Q.apiKey?.trim()||void 0,cwd:W,workspaceRoot:Q.workspaceRoot,systemPrompt:Q.systemPrompt??"",mode:_N(Q),maxIterations:Q.maxIterations,enableTools:Q.enableTools!==!1,enableSpawnAgent:Q.enableSpawn!==!1,enableAgentTeams:Q.enableTeams!==!1,disableMcpSettingsTools:Q.disableMcpSettingsTools,missionLogIntervalSteps:Q.missionStepInterval,missionLogIntervalMs:Q.missionTimeIntervalMs},toolPolicies:Q.toolPolicies??{"*":{autoApprove:Q.autoApproveTools!==!1}},localRuntime:{extensionContext:$.getExtensionContext(),configExtensions:Q.configExtensions}});return{sessionId:J.sessionId,startResult:{sessionId:J.sessionId,manifestPath:J.manifestPath,messagesPath:J.messagesPath}}},async sendSession(Q,W){let J=await Z.runTurn({sessionId:Q,prompt:W.prompt,userImages:W.attachments?.userImages,userFiles:W.attachments?.userFiles?.map((X)=>X.content),delivery:W.delivery});if(!J)throw Error("ClineCore automation runtime returned no result");return{result:LN(J)}},async abortSession(Q){return await Z.abort(Q,Error("ClineCore automation abort")),{applied:!0}},async stopSession(Q){return await Z.stopSession(Q),{applied:!0}}}}function zQ($){let Z=DN($.automationService,$.automation),Q=$.context?.client??($.clientName?{name:$.clientName}:void 0),W=$.context?.user??($.distinctId?{distinctId:$.distinctId}:void 0),J=$.context?.logger??$.logger,X=$.context?.telemetry??$.telemetry;if(!Z&&!Q&&!W&&!J&&!X)return $.context;return{...$.context??{},...Q?{client:Q}:{},...W?{user:W}:{},...J?{logger:J}:{},...X?{telemetry:X}:{},...Z?{automation:Z}:{}}}function DN($,Z){if(!$)return;return{ingestEvent:(Q)=>{Z.ingestEvent(Q)}}}function LN($){return{text:$.text,usage:{inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens,cacheWriteTokens:$.usage.cacheWriteTokens,totalCost:$.usage.totalCost},inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,iterations:$.iterations,finishReason:$.finishReason,toolCalls:$.toolCalls.map((Z)=>({name:Z.name,input:Z.input,output:Z.output,error:Z.error,durationMs:Z.durationMs}))}}function _N($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}var AF={};N(AF,{createCoreSettingsService:()=>y2,CoreSettingsService:()=>k$});import{existsSync as N5,readFileSync as JC}from"node:fs";import{basename as bJ,dirname as jF,extname as XC,isAbsolute as BF,join as YC,relative as GF,resolve as VF}from"node:path";var RK={};N(RK,{resolveWorkflowsConfigSearchPaths:()=>f5,resolveSkillsConfigSearchPaths:()=>F5,resolveRulesConfigSearchPaths:()=>A5,parseWorkflowConfigFromMarkdown:()=>K5,parseSkillConfigFromMarkdown:()=>B5,parseRuleConfigFromMarkdown:()=>G5,createWorkflowsConfigDefinition:()=>L5,createUserInstructionConfigService:()=>b$,createSkillsConfigDefinition:()=>U5,createRulesConfigDefinition:()=>D5,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>H5,UnifiedConfigFileWatcher:()=>E2,SKILLS_CONFIG_DIRECTORY_NAME:()=>V5,RULES_CONFIG_DIRECTORY_NAME:()=>EQ});import{createHash as zN}from"node:crypto";import{watch as TN}from"node:fs";import{readdir as ON,readFile as qN}from"node:fs/promises";import{join as MN}from"node:path";function RN($){return zN("sha1").update($).digest("hex")}function fK($){return Boolean($&&typeof $==="object"&&"code"in $)}function FK($){return fK($)&&$.code==="ENOENT"}function AK($){return fK($)&&($.code==="EACCES"||$.code==="EPERM")}class E2{definitions;debounceMs;emitParseErrors;listeners=new Set;recordsByType=new Map;watchersByDirectory=new Map;baseTypesByDirectory=new Map;watchedTypesByDirectory=new Map;discoveredDirectoriesByType=new Map;definitionsByType=new Map;pendingTypes=new Set;flushTimer;refreshQueue=Promise.resolve();started=!1;constructor($,Z){if($.length===0)throw Error("UnifiedConfigFileWatcher requires at least one definition.");this.definitions=$,this.debounceMs=Z?.debounceMs??75,this.emitParseErrors=Z?.emitParseErrors??!1;for(let Q of $){if(this.definitionsByType.has(Q.type))throw Error(`Duplicate unified config definition type '${Q.type}'.`);this.definitionsByType.set(Q.type,Q),this.recordsByType.set(Q.type,new Map),this.discoveredDirectoriesByType.set(Q.type,new Set);for(let W of Q.directories){let J=this.baseTypesByDirectory.get(W);if(J)J.add(Q.type);else this.baseTypesByDirectory.set(W,new Set([Q.type]))}}}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}async start(){if(this.started)return;this.started=!0,await this.refreshAll(),this.startDirectoryWatchers()}stop(){if(this.started=!1,this.flushTimer)clearTimeout(this.flushTimer),this.flushTimer=void 0;this.pendingTypes.clear();for(let $ of this.watchersByDirectory.values())$.close();this.watchersByDirectory.clear(),this.watchedTypesByDirectory=new Map}async refreshAll(){await this.enqueueRefresh(async()=>{for(let $ of this.definitions)await this.refreshTypeInternal($)})}async refreshType($){let Z=this.definitionsByType.get($);if(!Z)throw Error(`Unknown unified config type '${$}'.`);await this.enqueueRefresh(async()=>{await this.refreshTypeInternal(Z)})}getSnapshot($){let Z=this.recordsByType.get($);return new Map([...Z?.entries()??[]].map(([Q,W])=>[Q,{...W}]))}getAllSnapshots(){let $=new Map;for(let[Z,Q]of this.recordsByType.entries())$.set(Z,new Map([...Q.entries()].map(([W,J])=>[W,{...J}])));return $}emit($){for(let Z of this.listeners)Z($)}enqueueRefresh($){return this.refreshQueue=this.refreshQueue.then($,$),this.refreshQueue}startDirectoryWatchers(){this.syncDirectoryWatchers()}syncDirectoryWatchers(){let $=this.buildDesiredTypesByDirectory();for(let[Z,Q]of this.watchersByDirectory.entries()){if($.has(Z))continue;Q.close(),this.watchersByDirectory.delete(Z)}this.watchedTypesByDirectory=$;for(let Z of $.keys()){if(this.watchersByDirectory.has(Z))continue;try{let Q=TN(Z,()=>{let W=this.watchedTypesByDirectory.get(Z);if(!W)return;for(let J of W)this.pendingTypes.add(J);this.scheduleFlush()});this.watchersByDirectory.set(Z,Q),Q.on("error",(W)=>{let J=this.watchedTypesByDirectory.get(Z);if(!J)return;for(let X of J)this.emit({kind:"error",type:X,error:W,filePath:Z})})}catch(Q){if(!FK(Q)&&!AK(Q)){let W=$.get(Z);if(!W)continue;for(let J of W)this.emit({kind:"error",type:J,error:Q,filePath:Z})}}}}scheduleFlush(){if(this.flushTimer)clearTimeout(this.flushTimer);this.flushTimer=setTimeout(()=>{this.flushTimer=void 0;let $=[...this.pendingTypes];this.pendingTypes.clear(),this.enqueueRefresh(async()=>{for(let Z of $){let Q=this.definitionsByType.get(Z);if(!Q)continue;await this.refreshTypeInternal(Q)}})},this.debounceMs)}async refreshTypeInternal($){let{records:Z,discoveredDirectories:Q}=await this.loadDefinition($),W=this.recordsByType.get($.type)??new Map;for(let[J,X]of W.entries()){if(Z.has(J))continue;this.emit({kind:"remove",type:$.type,id:J,filePath:X.filePath})}for(let[J,X]of Z.entries()){let Y=W.get(J);if(Y&&Y.filePath===X.filePath&&Y.fingerprint===X.fingerprint)continue;this.emit({kind:"upsert",record:{type:X.type,id:J,item:X.item,filePath:X.filePath}})}if(this.recordsByType.set($.type,Z),this.discoveredDirectoriesByType.set($.type,Q),this.started)this.syncDirectoryWatchers()}async loadDefinition($){let Z=new Map,Q=new Set;for(let W of $.directories){Q.add(W);let J=$.discoverFiles?await $.discoverFiles(W):await this.readDirectoryFileCandidates(W);for(let X of J){let{fileName:Y,filePath:j}=X;if(Q.add(X.directoryPath),$.includeFile&&!$.includeFile(Y,j))continue;try{let V=await qN(j,"utf8"),H={type:$.type,directoryPath:X.directoryPath,fileName:Y,filePath:j,content:V},B=$.parseFile(H),G=$.resolveId(B,H).trim();if(!G)continue;Z.set(G,{type:$.type,id:G,item:B,filePath:j,fingerprint:RN(V)})}catch(V){if(this.emitParseErrors)this.emit({kind:"error",type:$.type,error:V,filePath:j})}}}return{records:Z,discoveredDirectories:Q}}buildDesiredTypesByDirectory(){let $=new Map;for(let[Z,Q]of this.baseTypesByDirectory.entries())$.set(Z,new Set(Q));for(let[Z,Q]of this.discoveredDirectoriesByType.entries())for(let W of Q){let J=$.get(W);if(J)J.add(Z);else $.set(W,new Set([Z]))}return $}async readDirectoryFileCandidates($){try{return(await ON($,{withFileTypes:!0})).filter((Q)=>Q.isFile()).map((Q)=>({directoryPath:$,fileName:Q.name,filePath:MN($,Q.name)})).sort((Q,W)=>Q.fileName.localeCompare(W.fileName))}catch(Z){if(FK(Z)||AK(Z))return[];throw Z}}}import{readdir as LJ,readFile as EN,stat as DJ}from"node:fs/promises";import{basename as a1,dirname as NN,extname as OQ,join as y0,resolve as j5}from"node:path";import{AGENTS_RULES_FILE_NAME as UK,RULES_CONFIG_DIRECTORY_NAME as EQ,resolveGlobalAgentsRulesPath as wN,resolveRulesConfigSearchPaths as CN,resolveSkillsConfigSearchPaths as PN,resolveWorkflowsConfigSearchPaths as SN,SKILLS_CONFIG_DIRECTORY_NAME as V5,WORKFLOWS_CONFIG_DIRECTORY_NAME as H5}from"@cline/shared/storage";import bN from"yaml";var TQ="SKILL.md",yN="managed.json",hN=new Set([".md",".markdown",".txt"]);function _J($){return $.trim().toLowerCase()}function a8($){let Z=$;return Z?.code==="ENOENT"||Z?.code==="EACCES"||Z?.code==="EPERM"||Z?.code==="ELOOP"}function qQ($){return hN.has(OQ($).toLowerCase())}function DK($){let Z=[],Q=new Set;for(let W of $){let J=j5(W);if(Q.has(J))continue;Q.add(J),Z.push(W)}return Z}function kN($){let Z=[...$?.directories??F5($?.workspacePath)];if($?.pluginSkillDirectories)Z.push(...$.pluginSkillDirectories);else if($?.includePluginSkills)Z.push(...SG({pluginPaths:$.pluginPaths,workspacePath:$.workspacePath,cwd:$.cwd??$.workspacePath}));return DK(Z)}async function zJ($){try{let Z=await LJ($,{withFileTypes:!0}),Q=[];for(let W of Z){if(!W.isDirectory())continue;let J=y0($,W.name),X=y0(J,yN);try{let Y=await EN(X,"utf8"),j=JSON.parse(Y);if(j&&typeof j==="object")Q.push(J)}catch(Y){if(a8(Y))continue;if(Y?.name==="SyntaxError")continue;throw Y}}return Q.sort((W,J)=>W.localeCompare(J))}catch(Z){if(a8(Z))return[];throw Z}}function TJ($){let Z=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,Q=$.match(Z);if(!Q)return{data:{},body:$,hadFrontmatter:!1};let[,W,J]=Q;try{let X=bN.parse(W);return{data:X&&typeof X==="object"&&!Array.isArray(X)?X:{},body:J,hadFrontmatter:!0}}catch(X){let Y=X instanceof Error?X.message:String(X);return{data:{},body:$,hadFrontmatter:!0,parseError:Y}}}function MQ($,Z,Q){if($===void 0||$===null){if(Q)throw Error(`Missing required frontmatter field '${Z}'.`);return}if(typeof $!=="string")throw Error(`Frontmatter field '${Z}' must be a string.`);let W=$.trim();if(!W&&Q)throw Error(`Frontmatter field '${Z}' cannot be empty.`);return W||void 0}function s8($,Z){if($===void 0||$===null)return;if(typeof $!=="boolean")throw Error(`Frontmatter field '${Z}' must be a boolean.`);return $}function IN($,Z){if(a1($.filePath).toLowerCase()!==UK.toLowerCase())return a1($.filePath,OQ($.filePath));if(Z&&j5($.filePath)===j5(Z,UK))return"Workspace AGENTS.md";if(j5($.filePath)===j5(wN()))return"Global AGENTS.md";return a1($.filePath,OQ($.filePath))}function B5($,Z){let{data:Q,body:W,parseError:J}=TJ($);if(J)throw Error(`Failed to parse YAML frontmatter: ${J}`);let X=W.trim();if(!X)throw Error("Missing instructions body in skill file.");let j=MQ(Q.name,"name",!1)??Z.trim();if(!j)throw Error("Missing skill name.");return{name:j,description:MQ(Q.description,"description",!1),disabled:s8(Q.disabled,"disabled")??(s8(Q.enabled,"enabled")===!1?!0:void 0),instructions:X,frontmatter:Q}}function G5($,Z){let{data:Q,body:W,parseError:J}=TJ($);if(J)throw Error(`Failed to parse YAML frontmatter: ${J}`);let X=W.trim();if(!X)throw Error("Missing instructions body in rule file.");let Y=MQ(Q.name,"name",!1)??Z.trim();if(!Y)throw Error("Missing rule name.");return{name:Y,disabled:s8(Q.disabled,"disabled")??(s8(Q.enabled,"enabled")===!1?!0:void 0),instructions:X,frontmatter:Q}}function K5($,Z){let{data:Q,body:W,parseError:J}=TJ($);if(J)throw Error(`Failed to parse YAML frontmatter: ${J}`);let X=W.trim();if(!X)throw Error("Missing instructions body in workflow file.");let Y=MQ(Q.name,"name",!1)??Z.trim();if(!Y)throw Error("Missing workflow name.");return{name:Y,disabled:s8(Q.disabled,"disabled")??(s8(Q.enabled,"enabled")===!1?!0:void 0),instructions:X,frontmatter:Q}}function F5($){return PN($)}function A5($){return CN($)}function f5($){return SN($)}async function LK($){if(a1($)===".cline"){let Z=await zJ($);return(await Promise.all(Z.map((W)=>LK(y0(W,V5))))).flat()}try{let Z=await LJ($,{withFileTypes:!0}),Q=[];for(let W of Z){if(W.isFile()&&W.name===TQ){Q.push({directoryPath:$,fileName:W.name,filePath:y0($,W.name)});continue}let J=y0($,W.name);if(W.isDirectory()||W.isSymbolicLink()&&await DJ(J).then((Y)=>Y.isDirectory()).catch((Y)=>{if(a8(Y))return!1;throw Y}))Q.push({directoryPath:J,fileName:TQ,filePath:y0(J,TQ)})}return Q}catch(Z){if(a8(Z))return[];throw Z}}async function RQ($){if(a1($)===".cline"){let Z=await zJ($);return(await Promise.all(Z.map((W)=>RQ(y0(W,"rules.md"))))).flat()}try{if((await DJ($)).isFile())return[{directoryPath:NN($),fileName:a1($),filePath:$}]}catch(Z){if(!a8(Z))throw Z}try{let Q=(await LJ($,{withFileTypes:!0})).filter((J)=>J.isFile()&&qQ(J.name)).map((J)=>({directoryPath:$,fileName:J.name,filePath:y0($,J.name)})),W=y0($,"AGENTS.md");try{if((await DJ(W)).isFile()){if(!Q.some((Y)=>Y.fileName==="AGENTS.md"))Q.push({directoryPath:$,fileName:"AGENTS.md",filePath:W})}}catch{}return Q}catch(Z){if(a8(Z))return[];throw Z}}async function xN($){if(a1($)===".cline"){let Z=await zJ($);return(await Promise.all(Z.map((W)=>RQ(y0(W,H5))))).flat()}return RQ($)}function U5($){let Z=kN($),Q=$?.workspacePath?y0($.workspacePath,".cline"):void 0;return{type:"skill",directories:Q?DK([...Z,Q]):Z,discoverFiles:LK,includeFile:(W)=>W===TQ,parseFile:(W)=>B5(W.content,a1(W.directoryPath)),resolveId:(W)=>_J(W.name)}}function D5($){let Z=$?.directories??A5($?.workspacePath),Q=$?.workspacePath?y0($.workspacePath,".cline"):void 0;return{type:"rule",directories:Q?[...Z,Q]:Z,discoverFiles:RQ,includeFile:(W,J)=>W===".clinerules"||qQ(W)||qQ(J),parseFile:(W)=>G5(W.content,IN(W,$?.workspacePath)),resolveId:(W)=>_J(W.name)}}function L5($){let Z=$?.directories??f5($?.workspacePath),Q=$?.workspacePath?y0($.workspacePath,".cline"):void 0;return{type:"workflow",directories:Q?[...Z,Q]:Z,discoverFiles:xN,includeFile:(W)=>qQ(W),parseFile:(W)=>K5(W.content,a1(W.filePath,OQ(W.filePath))),resolveId:(W)=>_J(W.name)}}function _K($){let Z=[U5($?.skills),D5($?.rules),L5($?.workflows)];return new E2(Z,{debounceMs:$?.debounceMs,emitParseErrors:$?.emitParseErrors})}import{truncateSplit as zK}from"@cline/shared";function gN($,Z){if($.description?.trim())return zK($.description,".");if(Z==="workflow")return;return zK($.instructions,".")}function mN($){return $.disabled!==!0}function TK($,Z){return[...$.getSnapshot(Z).entries()].map(([Q,W])=>({id:Q,record:W})).filter(({record:Q})=>mN(Q.item)).map(({id:Q,record:W})=>({id:Q,name:W.item.name,instructions:W.item.instructions,description:gN(W.item,Z),kind:Z})).sort((Q,W)=>Q.name.localeCompare(W.name))}function _5($){let Z=new Map;for(let Q of[...TK($,"workflow"),...TK($,"skill")])if(!Z.has(Q.name))Z.set(Q.name,Q);return[...Z.values()].sort((Q,W)=>Q.name.localeCompare(W.name))}function OK($,Z){if(!$.startsWith("/")||$.length<2)return $;let Q=$.match(/^\/(\S+)/);if(!Q)return $;let W=Q[1];if(!W)return $;let J=W.length+1,X=$.slice(J),Y=_5(Z).find((j)=>j.name===W);return Y?`${Y.instructions}${X}`:$}function NQ($){return $.trim().replace(/^\/+/,"").toLowerCase()}function vN($){if(!$||$.length===0)return;let Z=$.map(NQ).filter((Q)=>Q.length>0);return Z.length>0?new Set(Z):void 0}function cN($,Z,Q){if(!Q)return!0;let W=NQ($),J=NQ(Z),X=W.includes(":")?W.split(":").at(-1)??W:W,Y=J.includes(":")?J.split(":").at(-1)??J:J;return Q.has(W)||Q.has(J)||Q.has(X)||Q.has(Y)}function z5($,Z){let Q=vN(Z);return[...$.getSnapshot("skill").entries()].map(([J,X])=>{let Y=X.item;return{id:J,name:Y.name.trim(),description:Y.description?.trim(),disabled:Y.disabled===!0,skill:Y}}).filter((J)=>cN(J.id,J.name,Q))}function uN($,Z){return z5($,Z).filter((Q)=>!Q.disabled).map((Q)=>Q.name.trim()).filter((Q)=>Q.length>0).sort((Q,W)=>Q.localeCompare(W))}function dN($,Z,Q){let W=NQ(Z);if(!W)return{error:"Missing skill name."};let J=z5($,Q),X=J.find((B)=>B.id===W);if(X){let{skill:B}=X;if(B.disabled===!0)return{error:`Skill "${B.name}" is configured but disabled.`};return{id:X.id,skill:B}}let Y=W.includes(":")?W.split(":").at(-1)??W:W,j=J.filter(({id:B})=>{if(B===Y)return!0;return B.endsWith(`:${Y}`)}),V=j.filter(({skill:B})=>B.disabled!==!0);if(V.length===1){let{id:B,skill:G}=V[0];return{id:B,skill:G}}if(V.length>1)return{error:`Skill "${Z}" is ambiguous. Use one of: ${V.map(({id:B})=>B).join(", ")}`};if(j.length===1){let{skill:B}=j[0];return{error:`Skill "${B.name}" is configured but disabled.`}}if(j.length>1)return{error:`Skill "${Z}" is ambiguous, and all matches are disabled: ${j.map(({id:B})=>B).join(", ")}`};let H=uN($,Q);return{error:H.length>0?`Skill "${Z}" not found. Available skills: ${H.join(", ")}`:"No skills are currently available."}}function OJ($,Z=Promise.resolve(),Q){let W=new Set,J=async(X,Y)=>{await Z;let j=dN($,X,Q);if("error"in j)return j.error;let{id:V,skill:H}=j;if(W.has(V))return`Skill "${H.name}" is already running.`;W.add(V);try{let B=Y?.trim(),G=B?`
479
479
  <command-args>${B}</command-args>`:"",K=H.description?.trim()?`Description: ${H.description.trim()}
480
480
 
481
481
  `:"";return`<command-name>${H.name}</command-name>${G}
482
482
  <command-instructions>
483
483
  ${K}${H.instructions}
484
- </command-instructions>`}finally{W.delete(V)}};return Object.defineProperty(J,"configuredSkills",{get:()=>z5($,Q).map(({skill:X,...Y})=>Y),enumerable:!0,configurable:!1}),J}function TK($){let Z=$.watcherReady??Promise.resolve();return{name:"cline-user-instructions",manifest:{capabilities:[$.includeRules?"rules":void 0,$.registerSkillsTool?"tools":void 0,$.includeSkills||$.includeWorkflows?"commands":void 0].filter((W)=>Boolean(W))},async setup(W){if(await Z,$.includeRules)W.registerRule({id:"cline-user-instructions:rules",source:"user-instruction-watcher",content:()=>QW($.watcher)});if($.registerSkillsTool)W.registerTool(j2(OJ($.watcher,Z,$.allowedSkillNames)));for(let J of _5($.watcher).filter((X)=>X.kind==="skill"&&$.includeSkills||X.kind==="workflow"&&$.includeWorkflows))W.registerCommand({name:J.name,description:J.description,handler:(X)=>{let Y=X.trim();return Y?`${J.instructions}
484
+ </command-instructions>`}finally{W.delete(V)}};return Object.defineProperty(J,"configuredSkills",{get:()=>z5($,Q).map(({skill:X,...Y})=>Y),enumerable:!0,configurable:!1}),J}function qK($){let Z=$.watcherReady??Promise.resolve();return{name:"cline-user-instructions",manifest:{capabilities:[$.includeRules?"rules":void 0,$.registerSkillsTool?"tools":void 0,$.includeSkills||$.includeWorkflows?"commands":void 0].filter((W)=>Boolean(W))},async setup(W){if(await Z,$.includeRules)W.registerRule({id:"cline-user-instructions:rules",source:"user-instruction-watcher",content:()=>WW($.watcher)});if($.registerSkillsTool)W.registerTool(V2(OJ($.watcher,Z,$.allowedSkillNames)));for(let J of _5($.watcher).filter((X)=>X.kind==="skill"&&$.includeSkills||X.kind==="workflow"&&$.includeWorkflows))W.registerCommand({name:J.name,description:J.description,handler:(X)=>{let Y=X.trim();return Y?`${J.instructions}
485
485
 
486
- ${Y}`:J.instructions}})}}}class OK{watcher;ready;stopped=!1;constructor($){this.watcher=DK($)}start(){if(!this.ready)this.stopped=!1,this.ready=this.watcher.start();return this.ready}stop(){if(this.stopped)return;this.stopped=!0,this.watcher.stop(),this.ready=void 0}async refreshType($){await this.start(),await this.watcher.refreshType($)}listRecords($){return[...this.watcher.getSnapshot($).entries()].map(([Z,Q])=>({type:$,id:Z,filePath:Q.filePath,item:Q.item}))}listRuntimeCommands(){return _5(this.watcher)}resolveRuntimeSlashCommand($){return zK($,this.watcher)}hasConfiguredSkills($){return z5(this.watcher,$).some((Z)=>!Z.disabled)}createSkillsExecutor($){return OJ(this.watcher,(this.ready??Promise.resolve()).catch(()=>{}),$)}createExtension($){return TK({...$,watcher:this.watcher,watcherReady:(this.ready??Promise.resolve()).catch(()=>{})})}}function b$($){return new OK($)}import{readFile as vN,writeFile as cN}from"node:fs/promises";import RK from"yaml";function uN($){let Z=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,Q=$.match(Z);if(!Q)return{data:{},body:$,hadFrontmatter:!1};let[,W,J]=Q,X=RK.parse(W);return{data:X&&typeof X==="object"&&!Array.isArray(X)?X:{},body:J,hadFrontmatter:!0}}function MK($,Z){return`---
487
- ${RK.stringify($).trimEnd()}
486
+ ${Y}`:J.instructions}})}}}class MK{watcher;ready;stopped=!1;constructor($){this.watcher=_K($)}start(){if(!this.ready)this.stopped=!1,this.ready=this.watcher.start();return this.ready}stop(){if(this.stopped)return;this.stopped=!0,this.watcher.stop(),this.ready=void 0}async refreshType($){await this.start(),await this.watcher.refreshType($)}listRecords($){return[...this.watcher.getSnapshot($).entries()].map(([Z,Q])=>({type:$,id:Z,filePath:Q.filePath,item:Q.item}))}listRuntimeCommands(){return _5(this.watcher)}resolveRuntimeSlashCommand($){return OK($,this.watcher)}hasConfiguredSkills($){return z5(this.watcher,$).some((Z)=>!Z.disabled)}createSkillsExecutor($){return OJ(this.watcher,(this.ready??Promise.resolve()).catch(()=>{}),$)}createExtension($){return qK({...$,watcher:this.watcher,watcherReady:(this.ready??Promise.resolve()).catch(()=>{})})}}function b$($){return new MK($)}import{readFile as lN,writeFile as pN}from"node:fs/promises";import NK from"yaml";function rN($){let Z=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,Q=$.match(Z);if(!Q)return{data:{},body:$,hadFrontmatter:!1};let[,W,J]=Q,X=NK.parse(W);return{data:X&&typeof X==="object"&&!Array.isArray(X)?X:{},body:J,hadFrontmatter:!0}}function EK($,Z){return`---
487
+ ${NK.stringify($).trimEnd()}
488
488
  ---
489
- ${Z}`}function dN($,Z){let{data:Q,body:W,hadFrontmatter:J}=uN($);if(!J&&Z)return $;if(Z){if(delete Q.disabled,Q.enabled===!1)delete Q.enabled;if(Object.keys(Q).length===0)return W;return MK(Q,W)}return Q.disabled=!0,MK(Q,W)}async function EK({filePath:$,enabled:Z}){let Q=await vN($,"utf8"),W=dN(Q,Z);return await cN($,W),{filePath:$,enabled:Z,disabled:!Z}}var ZF={};N(ZF,{updateMcpSettingsFileSync:()=>j1,updateMcpSettingsFile:()=>t8,updateMcpServerOAuthStateAsync:()=>O5,updateMcpServerOAuthState:()=>C2,setMcpServerDisabled:()=>N2,resolvePluginMcpServerRegistrations:()=>yQ,resolveMcpServerRegistrations:()=>p0,resolveDefaultMcpSettingsPath:()=>Z0,registerMcpServersFromSettingsFile:()=>P2,normalizePluginMcpServerRegistration:()=>SJ,loadMcpSettingsFile:()=>E2,listMcpServerOAuthStatuses:()=>q5,hasMcpSettingsFile:()=>s1,getMcpServerOAuthState:()=>w2,createMcpTools:()=>Q4,createDisabledMcpToolPolicy:()=>M5,createDisabledMcpToolPolicies:()=>kQ,createDefaultMcpServerClientFactory:()=>$4,authorizeMcpServerOAuth:()=>SQ,McpSettingsUpdateSkippedError:()=>o8,McpSettingsMutatorPurityError:()=>y$,McpSettingsLockTimeoutError:()=>h$,InMemoryMcpManager:()=>S2});import{spawn as ww}from"node:child_process";import{StringDecoder as aK}from"node:string_decoder";import{UnauthorizedError as pK}from"@modelcontextprotocol/sdk/client/auth.js";import{Client as Cw}from"@modelcontextprotocol/sdk/client/index.js";import{randomUUID as Lw}from"node:crypto";import{UnauthorizedError as _w}from"@modelcontextprotocol/sdk/client/auth.js";import{Client as zw}from"@modelcontextprotocol/sdk/client/index.js";import{SSEClientTransport as Tw}from"@modelcontextprotocol/sdk/client/sse.js";import{StreamableHTTPClientTransport as Ow}from"@modelcontextprotocol/sdk/client/streamableHttp.js";wQ();var qw="/mcp/oauth/callback",Mw=[1456,1457,1458],Rw=300000;function Ew($){if($ instanceof Error){let Z=$.message.trim();if(Z.length>0)return Z}return String($)}function Nw($){return{client_name:"Cline",redirect_uris:[$],grant_types:["authorization_code","refresh_token"],response_types:["code"],token_endpoint_auth_method:"none"}}function PQ($){let Z={};try{Z=w2($.serverName,{filePath:$.settingsPath})??{}}catch{Z={}}let Q,W,J=async(Y)=>{let j=e8(Y(Z))??{};try{Z=C2($.serverName,()=>j,{filePath:$.settingsPath})}catch{Z=j}};return{provider:{get redirectUrl(){return Z.redirectUrl??$.redirectUrl},get clientMetadata(){return Nw(Z.redirectUrl??$.redirectUrl)},state:()=>{return W=Lw(),W},clientInformation:()=>Z.clientInformation,saveClientInformation:async(Y)=>{await J((j)=>({...j,clientInformation:Y,redirectUrl:$.redirectUrl,lastError:void 0}))},tokens:()=>Z.tokens,saveTokens:async(Y)=>{let j=Date.now();await J((V)=>({...V,tokens:Y,redirectUrl:$.redirectUrl,lastError:void 0,lastAuthenticatedAt:j}))},redirectToAuthorization:async(Y)=>{Q=Y.toString(),await $.onAuthorizationUrl?.(Q)},saveCodeVerifier:async(Y)=>{await J((j)=>({...j,codeVerifier:Y,redirectUrl:$.redirectUrl}))},codeVerifier:()=>{if(!Z.codeVerifier)throw Error(`Missing OAuth code verifier for MCP server "${$.serverName}".`);return Z.codeVerifier},invalidateCredentials:async(Y)=>{await J((j)=>{if(Y==="all")return{lastError:j.lastError,redirectUrl:j.redirectUrl};return{...j,...Y==="client"?{clientInformation:void 0}:{},...Y==="tokens"?{tokens:void 0,lastAuthenticatedAt:void 0}:{},...Y==="verifier"?{codeVerifier:void 0}:{},...Y==="discovery"?{discoveryState:void 0}:{}}})},saveDiscoveryState:async(Y)=>{await J((j)=>({...j,discoveryState:Y}))},discoveryState:()=>Z.discoveryState},getLastAuthorizationUrl:()=>Q,getLastOAuthState:()=>W,resetInteractiveState:async()=>{await J((Y)=>({...Y,clientInformation:void 0,codeVerifier:void 0,discoveryState:void 0,lastError:void 0,redirectUrl:$.redirectUrl}))},markError:async(Y)=>{await J((j)=>({...j,lastError:Y}))},clearError:async()=>{await J((Y)=>({...Y,lastError:void 0}))}}}function CQ($){let Z=$.registration.transport;if(Z.type==="stdio")throw Error(`MCP server "${$.registration.name}" uses stdio transport and does not support OAuth browser flow.`);let Q=Z.headers?{headers:Z.headers}:void 0;if(Z.type==="sse")return new Tw(new URL(Z.url),{authProvider:$.oauthProvider,requestInit:Q,fetch:$.fetch});return new Ow(new URL(Z.url),{authProvider:$.oauthProvider,requestInit:Q,fetch:$.fetch})}function lK($){return new zw({name:$.clientName?.trim()||"@cline/core",version:$.clientVersion?.trim()||"0.0.0"})}async function SQ($){let Z=$.serverName.trim();if(!Z)throw Error("MCP server name cannot be empty.");let{resolveMcpServerRegistrations:Q}=await Promise.resolve().then(() => (wQ(),dK)),W=Q({filePath:$.filePath}).find((V)=>V.name===Z);if(!W)throw Error(`MCP server "${Z}" is not configured.`);if(W.disabled)throw Error(`MCP server "${Z}" is disabled. Enable it before running OAuth.`);if(W.transport.type==="stdio")throw Error(`MCP server "${Z}" uses stdio transport and does not support OAuth browser flow.`);let J=await J1({host:$.callbackHost,ports:$.callbackPorts?.length?$.callbackPorts:Mw,callbackPath:$.callbackPath??qw,timeoutMs:$.timeoutMs??Rw,successHtml:$.successHtml,onListening:$.onServerListening,onClose:$.onServerClose});if(!J.callbackUrl)throw Error("Unable to bind local MCP OAuth callback server.");let X=PQ({settingsPath:$.filePath,serverName:Z,redirectUrl:J.callbackUrl,onAuthorizationUrl:async(V)=>{await $.openUrl?.(V)}});await X.resetInteractiveState();let Y=lK($),j;try{let V=CQ({registration:W,oauthProvider:X.provider,fetch:$.fetch});try{return await Y.connect(V),await Y.listTools(),await X.clearError(),{serverName:Z,authorized:!0,message:`MCP server "${Z}" is already authorized.`}}catch(H){if(!(H instanceof _w))throw H;if(!X.getLastAuthorizationUrl())throw Error(`MCP server "${Z}" did not provide an authorization URL.`);let G=await J.waitForCallback();if(!G)throw Error("Timed out waiting for MCP OAuth authorization callback.");if(G.error)throw Error(`OAuth authorization failed: ${G.error}`);if(!G.code)throw Error("OAuth callback did not include an authorization code.");let K=X.getLastOAuthState();if(!K)throw Error(`MCP server "${Z}" did not start an OAuth stateful authorization flow.`);if(G.state!==K)throw Error("OAuth authorization failed: state mismatch.");await V.finishAuth(G.code),j=lK($);let F=CQ({registration:W,oauthProvider:X.provider,fetch:$.fetch});return await j.connect(F),await j.listTools(),await X.clearError(),{serverName:Z,authorized:!0,message:`MCP server "${Z}" OAuth authorization completed.`}}}catch(V){let H=Ew(V);throw await X.markError(H),Error(H)}finally{await Y.close().catch(()=>{return}),await j?.close().catch(()=>{return}),J.close()}}var Pw="2024-11-05",Sw=5000,bw=1500,rK="http://127.0.0.1:1456/mcp/oauth/callback";function bQ($){return $ instanceof Error?$.message:String($)}function iK($){let Z=Buffer.from(JSON.stringify($),"utf8"),Q=Buffer.from(`Content-Length: ${Z.byteLength}\r
489
+ ${Z}`}function iN($,Z){let{data:Q,body:W,hadFrontmatter:J}=rN($);if(!J&&Z)return $;if(Z){if(delete Q.disabled,Q.enabled===!1)delete Q.enabled;if(Object.keys(Q).length===0)return W;return EK(Q,W)}return Q.disabled=!0,EK(Q,W)}async function wK({filePath:$,enabled:Z}){let Q=await lN($,"utf8"),W=iN(Q,Z);return await pN($,W),{filePath:$,enabled:Z,disabled:!Z}}var WF={};N(WF,{updateMcpSettingsFileSync:()=>j1,updateMcpSettingsFile:()=>t8,updateMcpServerOAuthStateAsync:()=>O5,updateMcpServerOAuthState:()=>P2,setMcpServerDisabled:()=>w2,resolvePluginMcpServerRegistrations:()=>hQ,resolveMcpServerRegistrations:()=>p0,resolveDefaultMcpSettingsPath:()=>Z0,registerMcpServersFromSettingsFile:()=>S2,normalizePluginMcpServerRegistration:()=>SJ,loadMcpSettingsFile:()=>N2,listMcpServerOAuthStatuses:()=>q5,hasMcpSettingsFile:()=>s1,getMcpServerOAuthState:()=>C2,createMcpTools:()=>Q4,createDisabledMcpToolPolicy:()=>M5,createDisabledMcpToolPolicies:()=>IQ,createDefaultMcpServerClientFactory:()=>$4,authorizeMcpServerOAuth:()=>bQ,McpSettingsUpdateSkippedError:()=>o8,McpSettingsMutatorPurityError:()=>y$,McpSettingsLockTimeoutError:()=>h$,InMemoryMcpManager:()=>b2});import{spawn as bw}from"node:child_process";import{StringDecoder as oK}from"node:string_decoder";import{UnauthorizedError as iK}from"@modelcontextprotocol/sdk/client/auth.js";import{Client as yw}from"@modelcontextprotocol/sdk/client/index.js";import{randomUUID as Ow}from"node:crypto";import{UnauthorizedError as qw}from"@modelcontextprotocol/sdk/client/auth.js";import{Client as Mw}from"@modelcontextprotocol/sdk/client/index.js";import{SSEClientTransport as Rw}from"@modelcontextprotocol/sdk/client/sse.js";import{StreamableHTTPClientTransport as Ew}from"@modelcontextprotocol/sdk/client/streamableHttp.js";CQ();var Nw="/mcp/oauth/callback",ww=[1456,1457,1458],Cw=300000;function Pw($){if($ instanceof Error){let Z=$.message.trim();if(Z.length>0)return Z}return String($)}function Sw($){return{client_name:"Cline",redirect_uris:[$],grant_types:["authorization_code","refresh_token"],response_types:["code"],token_endpoint_auth_method:"none"}}function SQ($){let Z={};try{Z=C2($.serverName,{filePath:$.settingsPath})??{}}catch{Z={}}let Q,W,J=async(Y)=>{let j=e8(Y(Z))??{};try{Z=P2($.serverName,()=>j,{filePath:$.settingsPath})}catch{Z=j}};return{provider:{get redirectUrl(){return Z.redirectUrl??$.redirectUrl},get clientMetadata(){return Sw(Z.redirectUrl??$.redirectUrl)},state:()=>{return W=Ow(),W},clientInformation:()=>Z.clientInformation,saveClientInformation:async(Y)=>{await J((j)=>({...j,clientInformation:Y,redirectUrl:$.redirectUrl,lastError:void 0}))},tokens:()=>Z.tokens,saveTokens:async(Y)=>{let j=Date.now();await J((V)=>({...V,tokens:Y,redirectUrl:$.redirectUrl,lastError:void 0,lastAuthenticatedAt:j}))},redirectToAuthorization:async(Y)=>{Q=Y.toString(),await $.onAuthorizationUrl?.(Q)},saveCodeVerifier:async(Y)=>{await J((j)=>({...j,codeVerifier:Y,redirectUrl:$.redirectUrl}))},codeVerifier:()=>{if(!Z.codeVerifier)throw Error(`Missing OAuth code verifier for MCP server "${$.serverName}".`);return Z.codeVerifier},invalidateCredentials:async(Y)=>{await J((j)=>{if(Y==="all")return{lastError:j.lastError,redirectUrl:j.redirectUrl};return{...j,...Y==="client"?{clientInformation:void 0}:{},...Y==="tokens"?{tokens:void 0,lastAuthenticatedAt:void 0}:{},...Y==="verifier"?{codeVerifier:void 0}:{},...Y==="discovery"?{discoveryState:void 0}:{}}})},saveDiscoveryState:async(Y)=>{await J((j)=>({...j,discoveryState:Y}))},discoveryState:()=>Z.discoveryState},getLastAuthorizationUrl:()=>Q,getLastOAuthState:()=>W,resetInteractiveState:async()=>{await J((Y)=>({...Y,clientInformation:void 0,codeVerifier:void 0,discoveryState:void 0,lastError:void 0,redirectUrl:$.redirectUrl}))},markError:async(Y)=>{await J((j)=>({...j,lastError:Y}))},clearError:async()=>{await J((Y)=>({...Y,lastError:void 0}))}}}function PQ($){let Z=$.registration.transport;if(Z.type==="stdio")throw Error(`MCP server "${$.registration.name}" uses stdio transport and does not support OAuth browser flow.`);let Q=Z.headers?{headers:Z.headers}:void 0;if(Z.type==="sse")return new Rw(new URL(Z.url),{authProvider:$.oauthProvider,requestInit:Q,fetch:$.fetch});return new Ew(new URL(Z.url),{authProvider:$.oauthProvider,requestInit:Q,fetch:$.fetch})}function rK($){return new Mw({name:$.clientName?.trim()||"@cline/core",version:$.clientVersion?.trim()||"0.0.0"})}async function bQ($){let Z=$.serverName.trim();if(!Z)throw Error("MCP server name cannot be empty.");let{resolveMcpServerRegistrations:Q}=await Promise.resolve().then(() => (CQ(),pK)),W=Q({filePath:$.filePath}).find((V)=>V.name===Z);if(!W)throw Error(`MCP server "${Z}" is not configured.`);if(W.disabled)throw Error(`MCP server "${Z}" is disabled. Enable it before running OAuth.`);if(W.transport.type==="stdio")throw Error(`MCP server "${Z}" uses stdio transport and does not support OAuth browser flow.`);let J=await J1({host:$.callbackHost,ports:$.callbackPorts?.length?$.callbackPorts:ww,callbackPath:$.callbackPath??Nw,timeoutMs:$.timeoutMs??Cw,successHtml:$.successHtml,onListening:$.onServerListening,onClose:$.onServerClose});if(!J.callbackUrl)throw Error("Unable to bind local MCP OAuth callback server.");let X=SQ({settingsPath:$.filePath,serverName:Z,redirectUrl:J.callbackUrl,onAuthorizationUrl:async(V)=>{await $.openUrl?.(V)}});await X.resetInteractiveState();let Y=rK($),j;try{let V=PQ({registration:W,oauthProvider:X.provider,fetch:$.fetch});try{return await Y.connect(V),await Y.listTools(),await X.clearError(),{serverName:Z,authorized:!0,message:`MCP server "${Z}" is already authorized.`}}catch(H){if(!(H instanceof qw))throw H;if(!X.getLastAuthorizationUrl())throw Error(`MCP server "${Z}" did not provide an authorization URL.`);let G=await J.waitForCallback();if(!G)throw Error("Timed out waiting for MCP OAuth authorization callback.");if(G.error)throw Error(`OAuth authorization failed: ${G.error}`);if(!G.code)throw Error("OAuth callback did not include an authorization code.");let K=X.getLastOAuthState();if(!K)throw Error(`MCP server "${Z}" did not start an OAuth stateful authorization flow.`);if(G.state!==K)throw Error("OAuth authorization failed: state mismatch.");await V.finishAuth(G.code),j=rK($);let F=PQ({registration:W,oauthProvider:X.provider,fetch:$.fetch});return await j.connect(F),await j.listTools(),await X.clearError(),{serverName:Z,authorized:!0,message:`MCP server "${Z}" OAuth authorization completed.`}}}catch(V){let H=Pw(V);throw await X.markError(H),Error(H)}finally{await Y.close().catch(()=>{return}),await j?.close().catch(()=>{return}),J.close()}}var hw="2024-11-05",kw=5000,Iw=1500,nK="http://127.0.0.1:1456/mcp/oauth/callback";function yQ($){return $ instanceof Error?$.message:String($)}function aK($){let Z=Buffer.from(JSON.stringify($),"utf8"),Q=Buffer.from(`Content-Length: ${Z.byteLength}\r
490
490
  \r
491
- `,"utf8");return Buffer.concat([Q,Z])}function nK($){return Buffer.from(`${JSON.stringify($)}
492
- `,"utf8")}class CJ{buffer="";decoder=new aK("utf8");push($){this.buffer+=this.decoder.write($);let Z=[];while(!0){let Q=this.buffer.indexOf(`\r
491
+ `,"utf8");return Buffer.concat([Q,Z])}function sK($){return Buffer.from(`${JSON.stringify($)}
492
+ `,"utf8")}class CJ{buffer="";decoder=new oK("utf8");push($){this.buffer+=this.decoder.write($);let Z=[];while(!0){let Q=this.buffer.indexOf(`\r
493
493
  \r
494
- `);if(Q<0)break;let J=this.buffer.slice(0,Q).match(/(?:^|\r\n)Content-Length:\s*(\d+)(?:\r\n|$)/i);if(!J)throw Error("Invalid MCP stdio frame: missing Content-Length header.");let X=Number.parseInt(J[1],10),Y=Q+4,j=Y+X;if(this.buffer.length<j)break;Z.push(this.buffer.slice(Y,j)),this.buffer=this.buffer.slice(j)}return Z}}class PJ{buffer="";decoder=new aK("utf8");push($){this.buffer+=this.decoder.write($);let Z=[];while(!0){let Q=this.buffer.indexOf(`
495
- `);if(Q<0)break;let W=this.buffer.slice(0,Q).trim();if(this.buffer=this.buffer.slice(Q+1),W.length>0)Z.push(W)}return Z}}class sK{registration;process;nextRequestId=1;pending=new Map;framedParser=new CJ;newlineParser=new PJ;stderrBuffer="";connected=!1;protocolMode="newline";constructor($){this.registration=$}async connect(){if(this.connected)return;if(this.registration.transport.type!=="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${this.registration.transport.type}`);let $=["newline","framed"],Z;for(let Q of $){await this.disconnect().catch(()=>{}),this.spawnProcess(Q);try{await this.request("initialize",{protocolVersion:Pw,capabilities:{},clientInfo:{name:"@cline/core",version:"0.0.0"}},bw),this.notify("notifications/initialized"),this.connected=!0,this.protocolMode=Q;return}catch(W){Z=W instanceof Error?W:Error(String(W))}}throw Z??Error(`Failed to connect to MCP server "${this.registration.name}".`)}async disconnect(){let $=this.process;if(this.connected=!1,this.process=void 0,this.failAllPending(Error(`Disconnected from MCP server "${this.registration.name}".`)),!$)return;$.kill()}async listTools(){return((await this.request("tools/list")).tools??[]).filter((Z)=>typeof Z?.name==="string"&&typeof Z.inputSchema==="object"&&Z.inputSchema!==null).map((Z)=>({name:Z.name,description:Z.description,inputSchema:Z.inputSchema}))}async callTool($){return this.request("tools/call",{name:$.name,arguments:$.arguments??{}})}spawnProcess($){let Z=this.registration.transport;if(Z.type!=="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${Z.type}`);this.framedParser=new CJ,this.newlineParser=new PJ,this.stderrBuffer="",this.protocolMode=$;let Q=process.platform==="win32"?{windowsHide:!0,shell:!0}:{},W=ww(Z.command,Z.args??[],{cwd:Z.cwd,env:{...process.env,...Z.env??{}},stdio:["pipe","pipe","pipe"],...Q});this.process=W,W.stdout.on("data",(J)=>this.handleStdout(J)),W.stderr.on("data",(J)=>{if(this.process!==W)return;if(this.stderrBuffer+=J.toString("utf8"),this.stderrBuffer.length>16384)this.stderrBuffer=this.stderrBuffer.slice(-16384)}),W.once("error",(J)=>{if(this.process!==W)return;this.failAllPending(Error(`MCP process error: ${bQ(J)}`))}),W.once("exit",(J,X)=>{if(this.process!==W)return;this.connected=!1,this.process=void 0;let Y=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`MCP process exited for "${this.registration.name}" (code=${J??"null"}, signal=${X??"null"}).${Y}`))})}handleStdout($){try{let Z=this.protocolMode==="framed"?this.framedParser.push($):this.newlineParser.push($);for(let Q of Z){let W=JSON.parse(Q);if(typeof W.id!=="number")continue;let J=this.pending.get(W.id);if(!J)continue;if(this.pending.delete(W.id),clearTimeout(J.timeout),W.error){let X=W.error.message||`MCP request failed with code ${W.error.code??"unknown"}`;J.reject(Error(X));continue}J.resolve(W.result)}}catch(Z){this.handleProtocolFailure(Z)}}handleProtocolFailure($){let Z=this.process;if(!Z)return;this.connected=!1,this.process=void 0;let Q=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`Invalid MCP response from "${this.registration.name}": ${bQ($)}.${Q}`)),Z.kill()}async request($,Z,Q=Sw){let W=this.process;if(!W?.stdin.writable)throw Error(`MCP server "${this.registration.name}" is not connected.`);let J=this.nextRequestId++,X={jsonrpc:"2.0",id:J,method:$,...Z?{params:Z}:{}},Y=new Promise((j,V)=>{let H=setTimeout(()=>{this.pending.delete(J),V(Error(`MCP request timed out for "${this.registration.name}" (${$}).`))},Q);this.pending.set(J,{resolve:j,reject:V,timeout:H})});try{W.stdin.write(this.protocolMode==="framed"?iK(X):nK(X))}catch(j){let V=this.pending.get(J);if(V)clearTimeout(V.timeout),this.pending.delete(J);throw j}return Y}notify($,Z){let Q=this.process;if(!Q?.stdin.writable)return;let W={jsonrpc:"2.0",method:$,...Z?{params:Z}:{}};Q.stdin.write(this.protocolMode==="framed"?iK(W):nK(W))}failAllPending($){for(let[Z,Q]of this.pending)clearTimeout(Q.timeout),this.pending.delete(Z),Q.reject($)}}class oK{registration;options;client;authContext;constructor($,Z){this.registration=$;this.options=Z}async connect(){if(this.client)return;if(this.registration.transport.type==="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${this.registration.transport.type}`);let $=PQ({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??rK});this.authContext=$;try{let Z=new Cw({name:this.options.clientName?.trim()||"@cline/core",version:this.options.clientVersion?.trim()||"0.0.0"}),Q=CQ({registration:this.registration,oauthProvider:$.provider,fetch:this.options.fetch});await Z.connect(Q),await $.clearError(),this.client=Z}catch(Z){let Q=Z instanceof pK?this.formatUnauthorizedMessage($.getLastAuthorizationUrl()):bQ(Z);throw await $.markError(Q),Error(Q)}}async disconnect(){let $=this.client;this.client=void 0,await $?.close()}async listTools(){let $=await this.ensureConnectedClient();try{return(await $.listTools()).tools.map((Q)=>({name:Q.name,description:Q.description,inputSchema:Q.inputSchema&&typeof Q.inputSchema==="object"&&!Array.isArray(Q.inputSchema)?Q.inputSchema:{}}))}catch(Z){return await this.handleOperationError(Z)}}async callTool($){let Z=await this.ensureConnectedClient();try{return await Z.callTool({name:$.name,arguments:$.arguments??{}})}catch(Q){return await this.handleOperationError(Q)}}async ensureConnectedClient(){if(!this.client)await this.connect();if(!this.client)throw Error(`MCP server "${this.registration.name}" is not connected.`);return this.client}formatUnauthorizedMessage($){let Z=`MCP server "${this.registration.name}" requires OAuth authorization.`;if(!$)return`${Z} Run authorizeMcpServerOAuth for this server.`;return`${Z} Run authorizeMcpServerOAuth for this server and complete this URL: ${$}`}async handleOperationError($){let Z=this.authContext??PQ({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??rK}),Q=$ instanceof pK?this.formatUnauthorizedMessage(Z.getLastAuthorizationUrl()):bQ($);throw await Z.markError(Q),Error(Q)}}function $4($={}){return(Z)=>Z.transport.type==="stdio"?new sK(Z):new oK(Z,$)}wQ();function r0(){return Date.now()}function yw($){return $.map((Z)=>({name:Z.name,description:Z.description,inputSchema:Z.inputSchema}))}class S2{toolsCacheTtlMs;clientFactory;servers=new Map;operationLocks=new Map;constructor($){this.clientFactory=$.clientFactory,this.toolsCacheTtlMs=$.toolsCacheTtlMs??5000}async registerServer($){await this.runExclusive($.name,async()=>{let Z=this.servers.get($.name);if(!Z){this.servers.set($.name,{registration:{...$},status:"disconnected",updatedAt:r0()});return}let Q=JSON.stringify(Z.registration.transport)!==JSON.stringify($.transport);if(Z.registration={...$},Z.updatedAt=r0(),Q)await this.disconnectState(Z),Z.client=void 0,Z.toolCache=void 0,Z.toolCacheUpdatedAt=void 0})}async unregisterServer($){await this.runExclusive($,async()=>{let Z=this.requireServer($);await this.disconnectState(Z),this.servers.delete($)})}async connectServer($){await this.runExclusive($,async()=>{let Z=this.requireServer($);await this.connectState(Z)})}async disconnectServer($){await this.runExclusive($,async()=>{let Z=this.requireServer($);await this.disconnectState(Z)})}async setServerDisabled($,Z){await this.runExclusive($,async()=>{let Q=this.requireServer($);if(Q.registration={...Q.registration,disabled:Z},Q.updatedAt=r0(),Z)await this.disconnectState(Q)})}listServers(){return[...this.servers.values()].map(($)=>({name:$.registration.name,status:$.status,disabled:$.registration.disabled===!0,lastError:$.lastError,toolCount:$.toolCache?.length??0,updatedAt:$.updatedAt,metadata:$.registration.metadata})).sort(($,Z)=>$.name.localeCompare(Z.name))}async listTools($){let Z=this.requireServer($),Q=Z.toolCacheUpdatedAt??0;if(Z.toolCache&&r0()-Q<=this.toolsCacheTtlMs)return Z.toolCache;return this.refreshTools($)}async refreshTools($){return this.runExclusive($,async()=>{let Z=this.requireServer($),W=await(await this.ensureConnectedClient(Z)).listTools(),J=yw(W);return Z.toolCache=J,Z.toolCacheUpdatedAt=r0(),Z.updatedAt=r0(),J})}async callTool($){return this.runExclusive($.serverName,async()=>{let Z=this.requireServer($.serverName),Q=await this.ensureConnectedClient(Z);return Z.updatedAt=r0(),Q.callTool({name:$.toolName,arguments:$.arguments,context:$.context})})}async dispose(){let $=[...this.servers.keys()];for(let Z of $)await this.unregisterServer(Z)}async ensureConnectedClient($){if(await this.connectState($),!$.client)throw Error(`MCP server "${$.registration.name}" does not have an initialized client.`);return $.client}async connectState($){if($.registration.disabled)throw Error(`MCP server "${$.registration.name}" is disabled and cannot be connected.`);if($.status==="connected"&&$.client)return;$.status="connecting",$.updatedAt=r0();try{let Z=$.client??await this.clientFactory($.registration);await Z.connect(),$.client=Z,$.status="connected",$.lastError=void 0,$.updatedAt=r0()}catch(Z){throw $.status="disconnected",$.lastError=Z instanceof Error?Z.message:String(Z),$.updatedAt=r0(),Z}}async disconnectState($){if(!$.client){$.status="disconnected",$.updatedAt=r0();return}try{await $.client.disconnect()}finally{$.status="disconnected",$.updatedAt=r0()}}requireServer($){let Z=this.servers.get($);if(!Z)throw Error(`Unknown MCP server: ${$}`);return Z}async runExclusive($,Z){let Q=this.operationLocks.get($)??Promise.resolve(),W,J=new Promise((Y)=>{W=Y}),X=Q.catch(()=>{return}).then(()=>J);this.operationLocks.set($,X),await Q.catch(()=>{return});try{return await Z()}finally{if(W?.(),this.operationLocks.get($)===X)this.operationLocks.delete($)}}}function Z4($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function tK($){return Z4($)&&Object.values($).every((Z)=>typeof Z==="string")}function hw($){return Array.isArray($)&&$.every((Z)=>typeof Z==="string")}function kw($){if(!Z4($))return!1;return($.fromEnv===void 0||typeof $.fromEnv==="string")&&($.value===void 0||typeof $.value==="string")&&($.required===void 0||typeof $.required==="boolean")}function Iw($){let Z=$.env?Object.entries($.env):[];if(Z.length===0)return{ok:!0};let Q={};for(let[W,J]of Z){if(typeof J==="string"){Q[W]=J;continue}let X=J.fromEnv?.trim()||W,Y=process.env[X];if(typeof Y==="string"&&Y.length>0){Q[W]=Y;continue}if(typeof J.value==="string"){Q[W]=J.value;continue}if(J.required===!0)return{ok:!1,reason:`required environment variable "${X}" is not set`}}return{ok:!0,env:Object.keys(Q).length>0?Q:void 0}}function SJ($){if(!Z4($))return{name:"",loadError:"invalid MCP server registration"};let Z=typeof $.name==="string"?$.name.trim():"";if(!Z)return{name:Z,loadError:"empty MCP server name"};let Q=$.env,W=Q===void 0?void 0:Q;if(W!==void 0){if(!Z4(W))return{name:Z,loadError:"invalid env"};for(let[V,H]of Object.entries(W))if(typeof H!=="string"&&!kw(H))return{name:Z,loadError:`invalid env "${V}"`}}let J=$.transport;if(!Z4(J))return{name:Z,loadError:"invalid MCP transport"};let X=J.type;if(X!=="stdio"&&X!=="sse"&&X!=="streamableHttp")return{name:Z,loadError:"invalid MCP transport type"};if(X!=="stdio"&&W!==void 0)return{name:Z,loadError:"top-level env is only supported for stdio MCP transports"};let Y=Z4($.metadata)?$.metadata:void 0;if(X==="stdio"){let V=J.command;if(typeof V!=="string"||!V.trim())return{name:Z,loadError:"stdio MCP transport requires command"};let H=J.args;if(H!==void 0&&!hw(H))return{name:Z,loadError:"stdio MCP transport args must be strings"};let B=J.cwd;if(B!==void 0&&typeof B!=="string")return{name:Z,loadError:"stdio MCP transport cwd must be a string"};let G=J.env;if(G!==void 0&&!tK(G))return{name:Z,loadError:"stdio MCP transport env must be strings"};let K=Iw({name:Z,transport:{type:"stdio",command:V,args:H,cwd:B,env:G},env:W,metadata:Y});if(!K.ok)return{name:Z,loadError:K.reason};let F=G||K.env?{...G??{},...K.env??{}}:void 0;return{name:Z,registration:{name:Z,transport:{type:"stdio",command:V,args:H,cwd:B,env:F},metadata:Y}}}if(typeof J.url!=="string"||!J.url.trim())return{name:Z,loadError:`${X} MCP transport requires url`};let j=J.headers;if(j!==void 0&&!tK(j))return{name:Z,loadError:`${X} MCP transport headers must be strings`};return{name:Z,registration:{name:Z,transport:X==="sse"?{type:"sse",url:J.url,headers:j}:{type:"streamableHttp",url:J.url,headers:j},metadata:Y}}}function yQ($){let Z=new Map;return $.map(({server:Q,owner:W,ownerLabel:J})=>{let X=SJ(Q);if(!X.registration)return{owner:W,name:X.name,loadError:X.loadError??"invalid MCP server registration"};let Y=Z.get(X.registration.name);if(Z.has(X.registration.name)){let j=Y?` already registered by ${Y}`:"";return{owner:W,name:X.registration.name,loadError:`duplicate MCP server name "${X.registration.name}"${j}`}}return Z.set(X.registration.name,J),{owner:W,name:X.registration.name,registration:X.registration}})}import{createHash as xw}from"node:crypto";var eK=64,gw=/[^a-zA-Z0-9_-]+/g,$F=8,mw=1,vw="mcp_tool";function cw($){return xw("sha1").update($).digest("hex").slice(0,$F)}function uw($){return $.replace(gw,"_")}var hQ=({serverName:$,toolName:Z})=>{let Q=`${$}__${Z}`,W=uw(Q);if(W===Q&&Q.length<=eK)return Q;let J=cw(Q),X=eK-mw-$F;return`${W.slice(0,X)||vw}_${J}`};function M5($){return{[($.nameTransform??hQ)({serverName:$.serverName,toolName:$.toolName})]:{enabled:!1}}}function kQ($){let Z={};for(let Q of $.toolNames)Object.assign(Z,M5({serverName:$.serverName,toolName:Q,nameTransform:$.nameTransform}));return Z}import{createTool as dw}from"@cline/shared";function lw($,Z){let Q=Z.description?.trim();if(Q)return Q;return`Execute MCP tool "${Z.name}" from server "${$}".`}async function Q4($){let Z=await $.provider.listTools($.serverName),Q=$.nameTransform??hQ;return Z.map((W)=>{let J=Q({serverName:$.serverName,toolName:W.name});return dw({name:J,description:lw($.serverName,W),inputSchema:W.inputSchema,timeoutMs:$.timeoutMs,retryable:$.retryable,maxRetries:$.maxRetries,execute:async(X,Y)=>$.provider.callTool({serverName:$.serverName,toolName:W.name,arguments:X&&typeof X==="object"&&!Array.isArray(X)?X:void 0,context:Y})})})}$1();var JF={};N(JF,{listPluginToolsWithDiagnostics:()=>IQ,listPluginTools:()=>R5});import{stat as pw}from"node:fs/promises";import{isAbsolute as rw,relative as iw,resolve as QF}from"node:path";$1();function nw($,Z){let Q=iw(QF($),QF(Z));return Q===""||!Q.startsWith("..")&&!rw(Q)}var aw=32,W4=new Map;function sw($,Z){if(!W4.has($)&&W4.size>=aw){let Q=W4.keys().next().value;if(Q)W4.delete(Q)}W4.set($,Z)}async function ow($){let Z=await Promise.all($.pluginPaths.map(async(Q)=>{try{let W=await pw(Q);return`${Q}:${W.mtimeMs}:${W.size}`}catch{return`${Q}:missing`}}));return JSON.stringify({workspacePath:$.workspacePath,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,pathStats:Z})}function WF($,Z){return $.map((Q)=>({...Q,enabled:!Z.has(Q.name)}))}function tw($){return $.sort((Z,Q)=>{let W=Z.name.localeCompare(Q.name);if(W!==0)return W;return Z.path.localeCompare(Q.path)})}async function ew($,Z){if(!$.setup)return{tools:[]};let Q=[],W={registerTool:(J)=>Q.push(J),registerCommand:()=>{},registerMessageBuilder:()=>{},registerRule:()=>{},registerProvider:()=>{},registerAutomationEventType:()=>{},registerMcpServer:(J)=>{if(!$.manifest.capabilities.includes("mcp"))throw Error('registerMcpServer requires the "mcp" capability')}};return await $.setup(W,{workspaceInfo:Z}),{tools:Q}}async function IQ($){let Z=i1({workspacePath:$.workspacePath,cwd:$.cwd}),Q=B1($.disabledToolNames);if(Z.length===0)return{tools:[],failures:[],warnings:[]};let W=await ow({pluginPaths:Z,workspacePath:$.workspacePath,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId}),J=W4.get(W);if(J)return{tools:WF(J.tools,Q),failures:J.failures,warnings:J.warnings};let X=[],Y=[],j=[],V;try{V=await x8({pluginPaths:Z,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,workspaceInfo:{rootPath:$.workspacePath}}),Y=[...V.failures],j=[...V.warnings];for(let B of V.extensions??[]){let G=B.__clinePluginPath;if(!G)continue;let K=nw($.workspacePath,G)?"workspace-plugin":"global-plugin",F;try{F=await ew(B,{rootPath:$.workspacePath})}catch(A){Y.push({pluginPath:G,pluginName:B.name,phase:"setup",message:A instanceof Error?A.message:String(A),stack:A instanceof Error?A.stack:void 0});continue}for(let A of F.tools)X.push({name:A.name,pluginName:B.name,path:G,source:K,description:A.description?.trim()||void 0})}}catch(B){Y=Z.map((G)=>({pluginPath:G,phase:"load",message:B instanceof Error?B.message:String(B),stack:B instanceof Error?B.stack:void 0}))}finally{await V?.shutdown().catch(()=>{})}let H=tw(X);return sw(W,{tools:H,failures:Y,warnings:j}),{tools:WF(H,Q),failures:Y,warnings:j}}async function R5($){return(await IQ($)).tools}function w5($,Z){if(!Z)return"global";let Q=HF(Z,$);return!Q.startsWith("..")&&!VF(Q)?"workspace":"global"}function WC($,Z){return w5($,Z)==="workspace"?"workspace-plugin":"global-plugin"}function JC($,Z){let Q=HF(YF($),YF(Z));return Q===""||!Q.startsWith("..")&&!VF(Q)}function XC($){try{let Z=JSON.parse($C($,"utf8"));return typeof Z.name==="string"&&Z.name.trim()?Z.name.trim():void 0}catch{return}}function YC($){let Z=XF($);while(!0){let Q=QC(Z,"package.json");if(N5(Q)){let J=XC(Q);if(J)return J;break}let W=XF(Z);if(W===Z)break;Z=W}return bJ($,ZC($))}function jC($){let Z=[];for(let Q of i1({workspacePath:$.workspaceRoot||void 0,cwd:$.cwd}))for(let W of n1([Q]))Z.push({directory:W,pluginName:YC(Q),pluginPath:Q,source:$.workspaceRoot?WC(Q,$.workspaceRoot):"global-plugin"});return Z.sort((Q,W)=>W.directory.length-Q.directory.length)}function VC($,Z){return Z.find((Q)=>JC(Q.directory,$))}function E5($){return[...$].sort((Z,Q)=>{let W=(J)=>{switch(J){case"workspace":case"workspace-plugin":return 0;case"global":case"global-plugin":return 1;case"builtin":return 2}};if(Z.source!==Q.source)return W(Z.source)-W(Q.source);return Z.name.localeCompare(Q.name)})}function BF($){return $.workspaceRoot?.trim()||$.cwd?.trim()||""}function GF($,Z){return $.cwd?.trim()||Z||process.cwd()}async function jF($,Z){if($.userInstructionService)return await Z($.userInstructionService);let Q=BF($),W=GF($,Q),J=b$({skills:{workspacePath:Q||void 0,includePluginSkills:!0,cwd:W},rules:{workspacePath:Q||void 0},workflows:{workspacePath:Q||void 0}});try{return await J.start(),await Z(J)}finally{J.stop()}}function HC($,Z){if(!$)return;let Q=$.listRecords("skill");if(Z.id){let W=Q.find((J)=>J.id===Z.id);if(W)return W}for(let W of Q)if(W.filePath===Z.path||W.item.name===Z.name||W.id===Z.name)return W;return}class k${async list($={}){return await jF($,async(Z)=>{let Q=BF($),W=jC({workspaceRoot:Q,cwd:GF($,Q)}),J=[],X=[],Y=[],j=[],V=[];if(Z){for(let B of Z.listRecords("workflow")){let G=B.item;J.push({id:B.id,name:G.name,path:B.filePath,enabled:G.disabled!==!0,kind:"workflow",source:w5(B.filePath,Q),description:G.instructions,toggleable:!1})}for(let B of Z.listRecords("rule")){let G=B.item;X.push({id:B.id,name:G.name,path:B.filePath,enabled:G.disabled!==!0,kind:"rule",source:w5(B.filePath,Q),description:G.instructions,toggleable:!1})}for(let B of Z.listRecords("skill")){let G=B.item,K=VC(B.filePath,W);Y.push({id:B.id,name:G.name,path:B.filePath,enabled:G.disabled!==!0,kind:"skill",source:K?.source??w5(B.filePath,Q),description:G.description,pluginName:K?.pluginName,pluginPath:K?.pluginPath,toggleable:!0})}}if(Q)try{for(let B of await R5({workspacePath:Q,cwd:$.cwd,providerId:$.availabilityContext?.providerId,modelId:$.availabilityContext?.modelId}))j.push({id:`${B.pluginName}:${B.name}:${B.path}`,name:B.name,path:B.path,enabled:B.enabled,kind:"tool",source:B.source,description:B.description,toggleable:!0})}catch{}let H=Z0();if(s1({filePath:H}))try{for(let B of p0({filePath:H}))V.push({id:B.name,name:B.name,path:H,enabled:B.disabled!==!0,kind:"mcp",source:w5(H,Q),description:B.transport.type,toggleable:!0})}catch{}return{workflows:E5(J.filter((B)=>N5(B.path))),rules:E5(X.filter((B)=>N5(B.path))),skills:E5(Y.filter((B)=>N5(B.path))),tools:E5(j),mcp:E5(V.filter((B)=>N5(B.path)))}})}async toggle($){if($.type==="skills")return await jF($,async(Z)=>{let Q=HC(Z,$),W=Q?.filePath;if(!W)throw Error(`Unable to resolve skill setting '${$.id??$.name??bJ($.path??"")}'.`);let J=Q?.item&&"disabled"in Q.item?Q.item.disabled!==!0:void 0,X=$.enabled??(J!==void 0?!J:void 0);if(X===void 0)throw Error(`Cannot determine toggle state for skill '${$.id??$.name??bJ($.path??"")}'; provide an explicit enabled value or a resolvable workspace context.`);return await EK({filePath:W,enabled:X}),await Z?.refreshType("skill"),{snapshot:await this.list({...$,userInstructionService:Z}),changedTypes:["skills"]}});if($.type==="tools"){if(!$.name?.trim())throw Error("Tool settings toggle requires a tool name.");if($.enabled===void 0)m9($.name);else xj($.name,!$.enabled);return{snapshot:await this.list($),changedTypes:["tools"]}}if($.type==="mcp"){let Z=$.name?.trim()||$.id?.trim();if(!Z)throw Error("MCP server settings toggle requires a server name.");let Q=$.path?.trim()||Z0(),W=$.enabled;if(W===void 0){let J=p0({filePath:Q}).find((X)=>X.name===Z);if(!J)throw Error(`Unknown MCP server: ${Z}`);W=J.disabled===!0}return N2({filePath:Q,name:Z,disabled:!W}),{snapshot:await this.list($),changedTypes:["mcp"]}}throw Error(`Settings type '${$.type}' does not support toggles.`)}}function b2(){return new k$}function FF($){return{async list(Z){let Q=$;if(Q.listSettings)return await Q.listSettings(Z);return await b2().list(Z)},async toggle(Z){let Q=$;if(Q.toggleSetting)return await Q.toggleSetting(Z);return await b2().toggle(Z)}}}function AF($){function Z(){let Q=$.pendingPrompts;if(!Q)throw Error("Pending prompt service is not available.");return Q}return{list(Q){return Z().list(Q)},update(Q){return Z().update(Q)},delete(Q){return Z().delete(Q)}}}function fF($){let Z=$.config;return"providerId"in Z?{...$,config:{...Z,...BC($.localRuntime)},localRuntime:$.localRuntime}:$}function yJ($,Z={}){let Q=i4($.config),W=q0(Z.defaultCapabilities,$.capabilities),J=GC(Q.localRuntime,$.localRuntime),X=Z.withExtensionContext?.(J?.extensionContext);if(X)J={...J??{},extensionContext:X};return{...$,...Q,...J?{localRuntime:J}:{},...W?{capabilities:W}:{}}}function BC($){if(!$)return{};let{modelCatalogDefaults:Z,userInstructionService:Q,configExtensions:W,onTeamRestored:J,...X}=$;return X}function GC(...$){let Z={};for(let Q of $)if(Q)Object.assign(Z,Q);return Object.keys(Z).length>0?Z:void 0}_0();function UF($){let Z=$.input.config.telemetry??$.telemetry;if(!Z)return;Z.capture({event:m.SESSION.STARTED,properties:{sessionId:$.sessionId,source:$.input.source??z0.CORE,providerId:$.input.config.providerId,modelId:$.input.config.modelId,enableTools:$.input.config.enableTools,enableSpawnAgent:$.input.config.enableSpawnAgent,enableAgentTeams:$.input.config.enableAgentTeams,clientName:$.clientName,runtimeAddress:$.runtimeAddress}})}function C5($){return!!$&&typeof $==="object"&&!Array.isArray($)}function hJ($){let Z=$?.trim();return Z?Z:void 0}function KC($,Z){let Q=$?.trim();if(!Q)return Z;let W=Date.parse(Q);if(!Number.isFinite(W))return Z;return new Date(W).toISOString()}function DF($,Z){return new Date(new Date($).getTime()+Math.max(0,Math.floor(Z))*1000).toISOString()}function LF($,Z){return new Date(new Date($).getTime()-Math.max(0,Math.floor(Z))*1000).toISOString()}function FC($,Z){if(!$)return Z;return new Date($).getTime()>=new Date(Z).getTime()?$:Z}function AC($,Z){let Q=$.eventId.trim(),W=$.eventType.trim(),J=$.source.trim(),X=hJ($.subject),Y=hJ($.dedupeKey)??`${W}:${J}:${X??Q}`;return{eventId:Q,eventType:W,source:J,subject:X,occurredAt:KC($.occurredAt,Z),workspaceRoot:hJ($.workspaceRoot),payload:C5($.payload)?$.payload:void 0,attributes:C5($.attributes)?$.attributes:void 0,dedupeKey:Y}}function kJ($,Z){if(!Z)return;let Q=Z.split("."),W=$;for(let J of Q){if(!C5(W))return;W=W[J]}return W}function fC($,Z){if($.attributes&&Object.hasOwn($.attributes,Z))return $.attributes[Z];if($.payload&&Object.hasOwn($.payload,Z))return $.payload[Z];let Q={eventId:$.eventId,eventType:$.eventType,source:$.source,subject:$.subject,occurredAt:$.occurredAt,workspaceRoot:$.workspaceRoot,dedupeKey:$.dedupeKey,attributes:$.attributes,payload:$.payload},W=kJ(Q,Z);if(W!==void 0)return W;if($.attributes){let J=kJ($.attributes,Z);if(J!==void 0)return J}if($.payload)return kJ($.payload,Z);return}function xQ($,Z){if(Array.isArray(Z))return Z.some((Q)=>xQ($,Q));if(Array.isArray($))return $.some((Q)=>xQ(Q,Z));if(C5(Z)){if(!C5($))return!1;return Object.entries(Z).every(([Q,W])=>xQ($[Q],W))}return Object.is($,Z)}function UC($,Z){if(!Z||Object.keys(Z).length===0)return!0;return Object.entries(Z).every(([Q,W])=>xQ(fC($,Q),W))}class IJ{store;nowFn;logger;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now()),this.logger=$.logger}ingestEvent($){let Z=new Date(this.nowFn()).toISOString(),Q=AC($,Z),W=this.store.insertEventLog(Q,{receivedAtIso:Z});if(!W.created)return this.logger?.debug("cron.event.duplicate",{eventId:W.record.eventId,eventType:W.record.eventType,source:W.record.source}),{event:W.record,duplicate:!0,matchedSpecs:[],queuedRuns:[],suppressions:[{reason:"duplicate_event",dedupeKey:W.record.dedupeKey}]};try{let J=this.store.listEventSpecsForType(Q.eventType),X=[],Y=[],j=[];for(let B of J){if(!UC(Q,B.filters)){X.push({specId:B.specId,externalId:B.externalId,reason:"filter_mismatch",dedupeKey:Q.dedupeKey});continue}Y.push(B);let G=this.materializeForSpec(B,Q,W.record.receivedAt);if(G.run)j.push(G.run);else X.push({specId:B.specId,externalId:B.externalId,reason:G.reason,dedupeKey:Q.dedupeKey})}let V=Y.length===0?"unmatched":j.length>0?"queued":"suppressed";this.store.updateEventLogProcessing(W.record.eventId,{status:V,matchedSpecCount:Y.length,queuedRunCount:j.length,suppressedCount:X.filter((B)=>B.reason!=="filter_mismatch").length});let H=this.store.getEventLog(W.record.eventId);return this.logger?.debug("cron.event.processed",{eventId:W.record.eventId,eventType:W.record.eventType,status:V,matchedSpecCount:Y.length,queuedRunCount:j.length}),{event:H??W.record,duplicate:!1,matchedSpecs:Y,queuedRuns:j,suppressions:X}}catch(J){if(this.store.updateEventLogProcessing(W.record.eventId,{status:"failed",error:J instanceof Error?J.message:String(J)}),this.logger?.error)this.logger.error("cron.event.failed",{eventId:W.record.eventId,eventType:W.record.eventType,error:J});throw J}}materializeForSpec($,Z,Q){let W=Z.dedupeKey??Z.eventId,J=$.debounceSeconds??0;if(J>0){let V=this.store.findQueuedEventRunForDedupe({specId:$.specId,dedupeKey:W});if(V){let H=FC(V.scheduledFor,DF(Q,J)),B=this.store.updateQueuedEventRunForDebounce({runId:V.runId,triggerEventId:Z.eventId,scheduledFor:H});if(B)return{run:B,reason:"dedupe_window"}}}let X=$.dedupeWindowSeconds??0;if(X>0&&this.store.hasRecentEventRunForDedupe({specId:$.specId,dedupeKey:W,sinceIso:LF(Q,X)}))return{reason:"dedupe_window"};let Y=$.cooldownSeconds??0;if(Y>0&&this.store.hasRecentEventRunForSpec({specId:$.specId,sinceIso:LF(Q,Y)}))return{reason:"cooldown"};return{run:this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"event",triggerEventId:Z.eventId,scheduledFor:J>0?DF(Q,J):Q}),reason:"dedupe_window"}}}import{existsSync as bC,readdirSync as yC,readFileSync as hC,statSync as kC}from"node:fs";import{relative as IC}from"node:path";import{resolveCronSpecsDir as xC}from"@cline/shared/storage";import{createHash as DC}from"node:crypto";import LC from"yaml";function _C($){let Z=$.replace(/\\/g,"/");if(Z.startsWith("events/")&&Z.endsWith(".event.md"))return"event";if(Z.endsWith(".cron.md"))return"schedule";return"one_off"}function zC($){let Z=$.replace(/\r\n/g,`
494
+ `);if(Q<0)break;let J=this.buffer.slice(0,Q).match(/(?:^|\r\n)Content-Length:\s*(\d+)(?:\r\n|$)/i);if(!J)throw Error("Invalid MCP stdio frame: missing Content-Length header.");let X=Number.parseInt(J[1],10),Y=Q+4,j=Y+X;if(this.buffer.length<j)break;Z.push(this.buffer.slice(Y,j)),this.buffer=this.buffer.slice(j)}return Z}}class PJ{buffer="";decoder=new oK("utf8");push($){this.buffer+=this.decoder.write($);let Z=[];while(!0){let Q=this.buffer.indexOf(`
495
+ `);if(Q<0)break;let W=this.buffer.slice(0,Q).trim();if(this.buffer=this.buffer.slice(Q+1),W.length>0)Z.push(W)}return Z}}class tK{registration;process;nextRequestId=1;pending=new Map;framedParser=new CJ;newlineParser=new PJ;stderrBuffer="";connected=!1;protocolMode="newline";constructor($){this.registration=$}async connect(){if(this.connected)return;if(this.registration.transport.type!=="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${this.registration.transport.type}`);let $=["newline","framed"],Z;for(let Q of $){await this.disconnect().catch(()=>{}),this.spawnProcess(Q);try{await this.request("initialize",{protocolVersion:hw,capabilities:{},clientInfo:{name:"@cline/core",version:"0.0.0"}},Iw),this.notify("notifications/initialized"),this.connected=!0,this.protocolMode=Q;return}catch(W){Z=W instanceof Error?W:Error(String(W))}}throw Z??Error(`Failed to connect to MCP server "${this.registration.name}".`)}async disconnect(){let $=this.process;if(this.connected=!1,this.process=void 0,this.failAllPending(Error(`Disconnected from MCP server "${this.registration.name}".`)),!$)return;$.kill()}async listTools(){return((await this.request("tools/list")).tools??[]).filter((Z)=>typeof Z?.name==="string"&&typeof Z.inputSchema==="object"&&Z.inputSchema!==null).map((Z)=>({name:Z.name,description:Z.description,inputSchema:Z.inputSchema}))}async callTool($){return this.request("tools/call",{name:$.name,arguments:$.arguments??{}})}spawnProcess($){let Z=this.registration.transport;if(Z.type!=="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${Z.type}`);this.framedParser=new CJ,this.newlineParser=new PJ,this.stderrBuffer="",this.protocolMode=$;let Q=process.platform==="win32"?{windowsHide:!0,shell:!0}:{},W=bw(Z.command,Z.args??[],{cwd:Z.cwd,env:{...process.env,...Z.env??{}},stdio:["pipe","pipe","pipe"],...Q});this.process=W,W.stdout.on("data",(J)=>this.handleStdout(J)),W.stderr.on("data",(J)=>{if(this.process!==W)return;if(this.stderrBuffer+=J.toString("utf8"),this.stderrBuffer.length>16384)this.stderrBuffer=this.stderrBuffer.slice(-16384)}),W.once("error",(J)=>{if(this.process!==W)return;this.failAllPending(Error(`MCP process error: ${yQ(J)}`))}),W.once("exit",(J,X)=>{if(this.process!==W)return;this.connected=!1,this.process=void 0;let Y=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`MCP process exited for "${this.registration.name}" (code=${J??"null"}, signal=${X??"null"}).${Y}`))})}handleStdout($){try{let Z=this.protocolMode==="framed"?this.framedParser.push($):this.newlineParser.push($);for(let Q of Z){let W=JSON.parse(Q);if(typeof W.id!=="number")continue;let J=this.pending.get(W.id);if(!J)continue;if(this.pending.delete(W.id),clearTimeout(J.timeout),W.error){let X=W.error.message||`MCP request failed with code ${W.error.code??"unknown"}`;J.reject(Error(X));continue}J.resolve(W.result)}}catch(Z){this.handleProtocolFailure(Z)}}handleProtocolFailure($){let Z=this.process;if(!Z)return;this.connected=!1,this.process=void 0;let Q=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`Invalid MCP response from "${this.registration.name}": ${yQ($)}.${Q}`)),Z.kill()}async request($,Z,Q=kw){let W=this.process;if(!W?.stdin.writable)throw Error(`MCP server "${this.registration.name}" is not connected.`);let J=this.nextRequestId++,X={jsonrpc:"2.0",id:J,method:$,...Z?{params:Z}:{}},Y=new Promise((j,V)=>{let H=setTimeout(()=>{this.pending.delete(J),V(Error(`MCP request timed out for "${this.registration.name}" (${$}).`))},Q);this.pending.set(J,{resolve:j,reject:V,timeout:H})});try{W.stdin.write(this.protocolMode==="framed"?aK(X):sK(X))}catch(j){let V=this.pending.get(J);if(V)clearTimeout(V.timeout),this.pending.delete(J);throw j}return Y}notify($,Z){let Q=this.process;if(!Q?.stdin.writable)return;let W={jsonrpc:"2.0",method:$,...Z?{params:Z}:{}};Q.stdin.write(this.protocolMode==="framed"?aK(W):sK(W))}failAllPending($){for(let[Z,Q]of this.pending)clearTimeout(Q.timeout),this.pending.delete(Z),Q.reject($)}}class eK{registration;options;client;authContext;constructor($,Z){this.registration=$;this.options=Z}async connect(){if(this.client)return;if(this.registration.transport.type==="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${this.registration.transport.type}`);let $=SQ({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??nK});this.authContext=$;try{let Z=new yw({name:this.options.clientName?.trim()||"@cline/core",version:this.options.clientVersion?.trim()||"0.0.0"}),Q=PQ({registration:this.registration,oauthProvider:$.provider,fetch:this.options.fetch});await Z.connect(Q),await $.clearError(),this.client=Z}catch(Z){let Q=Z instanceof iK?this.formatUnauthorizedMessage($.getLastAuthorizationUrl()):yQ(Z);throw await $.markError(Q),Error(Q)}}async disconnect(){let $=this.client;this.client=void 0,await $?.close()}async listTools(){let $=await this.ensureConnectedClient();try{return(await $.listTools()).tools.map((Q)=>({name:Q.name,description:Q.description,inputSchema:Q.inputSchema&&typeof Q.inputSchema==="object"&&!Array.isArray(Q.inputSchema)?Q.inputSchema:{}}))}catch(Z){return await this.handleOperationError(Z)}}async callTool($){let Z=await this.ensureConnectedClient();try{return await Z.callTool({name:$.name,arguments:$.arguments??{}})}catch(Q){return await this.handleOperationError(Q)}}async ensureConnectedClient(){if(!this.client)await this.connect();if(!this.client)throw Error(`MCP server "${this.registration.name}" is not connected.`);return this.client}formatUnauthorizedMessage($){let Z=`MCP server "${this.registration.name}" requires OAuth authorization.`;if(!$)return`${Z} Run authorizeMcpServerOAuth for this server.`;return`${Z} Run authorizeMcpServerOAuth for this server and complete this URL: ${$}`}async handleOperationError($){let Z=this.authContext??SQ({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??nK}),Q=$ instanceof iK?this.formatUnauthorizedMessage(Z.getLastAuthorizationUrl()):yQ($);throw await Z.markError(Q),Error(Q)}}function $4($={}){return(Z)=>Z.transport.type==="stdio"?new tK(Z):new eK(Z,$)}CQ();function r0(){return Date.now()}function xw($){return $.map((Z)=>({name:Z.name,description:Z.description,inputSchema:Z.inputSchema}))}class b2{toolsCacheTtlMs;clientFactory;servers=new Map;operationLocks=new Map;constructor($){this.clientFactory=$.clientFactory,this.toolsCacheTtlMs=$.toolsCacheTtlMs??5000}async registerServer($){await this.runExclusive($.name,async()=>{let Z=this.servers.get($.name);if(!Z){this.servers.set($.name,{registration:{...$},status:"disconnected",updatedAt:r0()});return}let Q=JSON.stringify(Z.registration.transport)!==JSON.stringify($.transport);if(Z.registration={...$},Z.updatedAt=r0(),Q)await this.disconnectState(Z),Z.client=void 0,Z.toolCache=void 0,Z.toolCacheUpdatedAt=void 0})}async unregisterServer($){await this.runExclusive($,async()=>{let Z=this.requireServer($);await this.disconnectState(Z),this.servers.delete($)})}async connectServer($){await this.runExclusive($,async()=>{let Z=this.requireServer($);await this.connectState(Z)})}async disconnectServer($){await this.runExclusive($,async()=>{let Z=this.requireServer($);await this.disconnectState(Z)})}async setServerDisabled($,Z){await this.runExclusive($,async()=>{let Q=this.requireServer($);if(Q.registration={...Q.registration,disabled:Z},Q.updatedAt=r0(),Z)await this.disconnectState(Q)})}listServers(){return[...this.servers.values()].map(($)=>({name:$.registration.name,status:$.status,disabled:$.registration.disabled===!0,lastError:$.lastError,toolCount:$.toolCache?.length??0,updatedAt:$.updatedAt,metadata:$.registration.metadata})).sort(($,Z)=>$.name.localeCompare(Z.name))}async listTools($){let Z=this.requireServer($),Q=Z.toolCacheUpdatedAt??0;if(Z.toolCache&&r0()-Q<=this.toolsCacheTtlMs)return Z.toolCache;return this.refreshTools($)}async refreshTools($){return this.runExclusive($,async()=>{let Z=this.requireServer($),W=await(await this.ensureConnectedClient(Z)).listTools(),J=xw(W);return Z.toolCache=J,Z.toolCacheUpdatedAt=r0(),Z.updatedAt=r0(),J})}async callTool($){return this.runExclusive($.serverName,async()=>{let Z=this.requireServer($.serverName),Q=await this.ensureConnectedClient(Z);return Z.updatedAt=r0(),Q.callTool({name:$.toolName,arguments:$.arguments,context:$.context})})}async dispose(){let $=[...this.servers.keys()];for(let Z of $)await this.unregisterServer(Z)}async ensureConnectedClient($){if(await this.connectState($),!$.client)throw Error(`MCP server "${$.registration.name}" does not have an initialized client.`);return $.client}async connectState($){if($.registration.disabled)throw Error(`MCP server "${$.registration.name}" is disabled and cannot be connected.`);if($.status==="connected"&&$.client)return;$.status="connecting",$.updatedAt=r0();try{let Z=$.client??await this.clientFactory($.registration);await Z.connect(),$.client=Z,$.status="connected",$.lastError=void 0,$.updatedAt=r0()}catch(Z){throw $.status="disconnected",$.lastError=Z instanceof Error?Z.message:String(Z),$.updatedAt=r0(),Z}}async disconnectState($){if(!$.client){$.status="disconnected",$.updatedAt=r0();return}try{await $.client.disconnect()}finally{$.status="disconnected",$.updatedAt=r0()}}requireServer($){let Z=this.servers.get($);if(!Z)throw Error(`Unknown MCP server: ${$}`);return Z}async runExclusive($,Z){let Q=this.operationLocks.get($)??Promise.resolve(),W,J=new Promise((Y)=>{W=Y}),X=Q.catch(()=>{return}).then(()=>J);this.operationLocks.set($,X),await Q.catch(()=>{return});try{return await Z()}finally{if(W?.(),this.operationLocks.get($)===X)this.operationLocks.delete($)}}}function Z4($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function $F($){return Z4($)&&Object.values($).every((Z)=>typeof Z==="string")}function gw($){return Array.isArray($)&&$.every((Z)=>typeof Z==="string")}function mw($){if(!Z4($))return!1;return($.fromEnv===void 0||typeof $.fromEnv==="string")&&($.value===void 0||typeof $.value==="string")&&($.required===void 0||typeof $.required==="boolean")}function vw($){let Z=$.env?Object.entries($.env):[];if(Z.length===0)return{ok:!0};let Q={};for(let[W,J]of Z){if(typeof J==="string"){Q[W]=J;continue}let X=J.fromEnv?.trim()||W,Y=process.env[X];if(typeof Y==="string"&&Y.length>0){Q[W]=Y;continue}if(typeof J.value==="string"){Q[W]=J.value;continue}if(J.required===!0)return{ok:!1,reason:`required environment variable "${X}" is not set`}}return{ok:!0,env:Object.keys(Q).length>0?Q:void 0}}function SJ($){if(!Z4($))return{name:"",loadError:"invalid MCP server registration"};let Z=typeof $.name==="string"?$.name.trim():"";if(!Z)return{name:Z,loadError:"empty MCP server name"};let Q=$.env,W=Q===void 0?void 0:Q;if(W!==void 0){if(!Z4(W))return{name:Z,loadError:"invalid env"};for(let[V,H]of Object.entries(W))if(typeof H!=="string"&&!mw(H))return{name:Z,loadError:`invalid env "${V}"`}}let J=$.transport;if(!Z4(J))return{name:Z,loadError:"invalid MCP transport"};let X=J.type;if(X!=="stdio"&&X!=="sse"&&X!=="streamableHttp")return{name:Z,loadError:"invalid MCP transport type"};if(X!=="stdio"&&W!==void 0)return{name:Z,loadError:"top-level env is only supported for stdio MCP transports"};let Y=Z4($.metadata)?$.metadata:void 0;if(X==="stdio"){let V=J.command;if(typeof V!=="string"||!V.trim())return{name:Z,loadError:"stdio MCP transport requires command"};let H=J.args;if(H!==void 0&&!gw(H))return{name:Z,loadError:"stdio MCP transport args must be strings"};let B=J.cwd;if(B!==void 0&&typeof B!=="string")return{name:Z,loadError:"stdio MCP transport cwd must be a string"};let G=J.env;if(G!==void 0&&!$F(G))return{name:Z,loadError:"stdio MCP transport env must be strings"};let K=vw({name:Z,transport:{type:"stdio",command:V,args:H,cwd:B,env:G},env:W,metadata:Y});if(!K.ok)return{name:Z,loadError:K.reason};let F=G||K.env?{...G??{},...K.env??{}}:void 0;return{name:Z,registration:{name:Z,transport:{type:"stdio",command:V,args:H,cwd:B,env:F},metadata:Y}}}if(typeof J.url!=="string"||!J.url.trim())return{name:Z,loadError:`${X} MCP transport requires url`};let j=J.headers;if(j!==void 0&&!$F(j))return{name:Z,loadError:`${X} MCP transport headers must be strings`};return{name:Z,registration:{name:Z,transport:X==="sse"?{type:"sse",url:J.url,headers:j}:{type:"streamableHttp",url:J.url,headers:j},metadata:Y}}}function hQ($){let Z=new Map;return $.map(({server:Q,owner:W,ownerLabel:J})=>{let X=SJ(Q);if(!X.registration)return{owner:W,name:X.name,loadError:X.loadError??"invalid MCP server registration"};let Y=Z.get(X.registration.name);if(Z.has(X.registration.name)){let j=Y?` already registered by ${Y}`:"";return{owner:W,name:X.registration.name,loadError:`duplicate MCP server name "${X.registration.name}"${j}`}}return Z.set(X.registration.name,J),{owner:W,name:X.registration.name,registration:X.registration}})}import{createHash as cw}from"node:crypto";var ZF=64,uw=/[^a-zA-Z0-9_-]+/g,QF=8,dw=1,lw="mcp_tool";function pw($){return cw("sha1").update($).digest("hex").slice(0,QF)}function rw($){return $.replace(uw,"_")}var kQ=({serverName:$,toolName:Z})=>{let Q=`${$}__${Z}`,W=rw(Q);if(W===Q&&Q.length<=ZF)return Q;let J=pw(Q),X=ZF-dw-QF;return`${W.slice(0,X)||lw}_${J}`};function M5($){return{[($.nameTransform??kQ)({serverName:$.serverName,toolName:$.toolName})]:{enabled:!1}}}function IQ($){let Z={};for(let Q of $.toolNames)Object.assign(Z,M5({serverName:$.serverName,toolName:Q,nameTransform:$.nameTransform}));return Z}import{createTool as iw}from"@cline/shared";function nw($,Z){let Q=Z.description?.trim();if(Q)return Q;return`Execute MCP tool "${Z.name}" from server "${$}".`}async function Q4($){let Z=await $.provider.listTools($.serverName),Q=$.nameTransform??kQ;return Z.map((W)=>{let J=Q({serverName:$.serverName,toolName:W.name});return iw({name:J,description:nw($.serverName,W),inputSchema:W.inputSchema,timeoutMs:$.timeoutMs,retryable:$.retryable,maxRetries:$.maxRetries,execute:async(X,Y)=>$.provider.callTool({serverName:$.serverName,toolName:W.name,arguments:X&&typeof X==="object"&&!Array.isArray(X)?X:void 0,context:Y})})})}$1();var YF={};N(YF,{listPluginToolsWithDiagnostics:()=>xQ,listPluginTools:()=>R5});import{stat as aw}from"node:fs/promises";import{isAbsolute as sw,relative as ow,resolve as JF}from"node:path";$1();function tw($,Z){let Q=ow(JF($),JF(Z));return Q===""||!Q.startsWith("..")&&!sw(Q)}var ew=32,W4=new Map;function $C($,Z){if(!W4.has($)&&W4.size>=ew){let Q=W4.keys().next().value;if(Q)W4.delete(Q)}W4.set($,Z)}async function ZC($){let Z=await Promise.all($.pluginPaths.map(async(Q)=>{try{let W=await aw(Q);return`${Q}:${W.mtimeMs}:${W.size}`}catch{return`${Q}:missing`}}));return JSON.stringify({workspacePath:$.workspacePath,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,pathStats:Z})}function XF($,Z){return $.map((Q)=>({...Q,enabled:!Z.has(Q.name)}))}function QC($){return $.sort((Z,Q)=>{let W=Z.name.localeCompare(Q.name);if(W!==0)return W;return Z.path.localeCompare(Q.path)})}async function WC($,Z){if(!$.setup)return{tools:[]};let Q=[],W={registerTool:(J)=>Q.push(J),registerCommand:()=>{},registerMessageBuilder:()=>{},registerRule:()=>{},registerProvider:()=>{},registerAutomationEventType:()=>{},registerMcpServer:(J)=>{if(!$.manifest.capabilities.includes("mcp"))throw Error('registerMcpServer requires the "mcp" capability')}};return await $.setup(W,{workspaceInfo:Z}),{tools:Q}}async function xQ($){let Z=i1({workspacePath:$.workspacePath,cwd:$.cwd}),Q=G1($.disabledToolNames);if(Z.length===0)return{tools:[],failures:[],warnings:[]};let W=await ZC({pluginPaths:Z,workspacePath:$.workspacePath,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId}),J=W4.get(W);if(J)return{tools:XF(J.tools,Q),failures:J.failures,warnings:J.warnings};let X=[],Y=[],j=[],V;try{V=await x8({pluginPaths:Z,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,workspaceInfo:{rootPath:$.workspacePath}}),Y=[...V.failures],j=[...V.warnings];for(let B of V.extensions??[]){let G=B.__clinePluginPath;if(!G)continue;let K=tw($.workspacePath,G)?"workspace-plugin":"global-plugin",F;try{F=await WC(B,{rootPath:$.workspacePath})}catch(A){Y.push({pluginPath:G,pluginName:B.name,phase:"setup",message:A instanceof Error?A.message:String(A),stack:A instanceof Error?A.stack:void 0});continue}for(let A of F.tools)X.push({name:A.name,pluginName:B.name,path:G,source:K,description:A.description?.trim()||void 0})}}catch(B){Y=Z.map((G)=>({pluginPath:G,phase:"load",message:B instanceof Error?B.message:String(B),stack:B instanceof Error?B.stack:void 0}))}finally{await V?.shutdown().catch(()=>{})}let H=QC(X);return $C(W,{tools:H,failures:Y,warnings:j}),{tools:XF(H,Q),failures:Y,warnings:j}}async function R5($){return(await xQ($)).tools}function w5($,Z){if(!Z)return"global";let Q=GF(Z,$);return!Q.startsWith("..")&&!BF(Q)?"workspace":"global"}function jC($,Z){return w5($,Z)==="workspace"?"workspace-plugin":"global-plugin"}function VC($,Z){let Q=GF(VF($),VF(Z));return Q===""||!Q.startsWith("..")&&!BF(Q)}function HC($){try{let Z=JSON.parse(JC($,"utf8"));return typeof Z.name==="string"&&Z.name.trim()?Z.name.trim():void 0}catch{return}}function BC($){let Z=jF($);while(!0){let Q=YC(Z,"package.json");if(N5(Q)){let J=HC(Q);if(J)return J;break}let W=jF(Z);if(W===Z)break;Z=W}return bJ($,XC($))}function GC($){let Z=[];for(let Q of i1({workspacePath:$.workspaceRoot||void 0,cwd:$.cwd}))for(let W of n1([Q]))Z.push({directory:W,pluginName:BC(Q),pluginPath:Q,source:$.workspaceRoot?jC(Q,$.workspaceRoot):"global-plugin"});return Z.sort((Q,W)=>W.directory.length-Q.directory.length)}function KC($,Z){return Z.find((Q)=>VC(Q.directory,$))}function E5($){return[...$].sort((Z,Q)=>{let W=(J)=>{switch(J){case"workspace":case"workspace-plugin":return 0;case"global":case"global-plugin":return 1;case"builtin":return 2}};if(Z.source!==Q.source)return W(Z.source)-W(Q.source);return Z.name.localeCompare(Q.name)})}function KF($){return $.workspaceRoot?.trim()||$.cwd?.trim()||""}function FF($,Z){return $.cwd?.trim()||Z||process.cwd()}async function HF($,Z){if($.userInstructionService)return await Z($.userInstructionService);let Q=KF($),W=FF($,Q),J=b$({skills:{workspacePath:Q||void 0,includePluginSkills:!0,cwd:W},rules:{workspacePath:Q||void 0},workflows:{workspacePath:Q||void 0}});try{return await J.start(),await Z(J)}finally{J.stop()}}function FC($,Z){if(!$)return;let Q=$.listRecords("skill");if(Z.id){let W=Q.find((J)=>J.id===Z.id);if(W)return W}for(let W of Q)if(W.filePath===Z.path||W.item.name===Z.name||W.id===Z.name)return W;return}class k${async list($={}){return await HF($,async(Z)=>{let Q=KF($),W=GC({workspaceRoot:Q,cwd:FF($,Q)}),J=[],X=[],Y=[],j=[],V=[];if(Z){for(let B of Z.listRecords("workflow")){let G=B.item;J.push({id:B.id,name:G.name,path:B.filePath,enabled:G.disabled!==!0,kind:"workflow",source:w5(B.filePath,Q),description:G.instructions,toggleable:!1})}for(let B of Z.listRecords("rule")){let G=B.item;X.push({id:B.id,name:G.name,path:B.filePath,enabled:G.disabled!==!0,kind:"rule",source:w5(B.filePath,Q),description:G.instructions,toggleable:!1})}for(let B of Z.listRecords("skill")){let G=B.item,K=KC(B.filePath,W);Y.push({id:B.id,name:G.name,path:B.filePath,enabled:G.disabled!==!0,kind:"skill",source:K?.source??w5(B.filePath,Q),description:G.description,pluginName:K?.pluginName,pluginPath:K?.pluginPath,toggleable:!0})}}if(Q)try{for(let B of await R5({workspacePath:Q,cwd:$.cwd,providerId:$.availabilityContext?.providerId,modelId:$.availabilityContext?.modelId}))j.push({id:`${B.pluginName}:${B.name}:${B.path}`,name:B.name,path:B.path,enabled:B.enabled,kind:"tool",source:B.source,description:B.description,toggleable:!0})}catch{}let H=Z0();if(s1({filePath:H}))try{for(let B of p0({filePath:H}))V.push({id:B.name,name:B.name,path:H,enabled:B.disabled!==!0,kind:"mcp",source:w5(H,Q),description:B.transport.type,toggleable:!0})}catch{}return{workflows:E5(J.filter((B)=>N5(B.path))),rules:E5(X.filter((B)=>N5(B.path))),skills:E5(Y.filter((B)=>N5(B.path))),tools:E5(j),mcp:E5(V.filter((B)=>N5(B.path)))}})}async toggle($){if($.type==="skills")return await HF($,async(Z)=>{let Q=FC(Z,$),W=Q?.filePath;if(!W)throw Error(`Unable to resolve skill setting '${$.id??$.name??bJ($.path??"")}'.`);let J=Q?.item&&"disabled"in Q.item?Q.item.disabled!==!0:void 0,X=$.enabled??(J!==void 0?!J:void 0);if(X===void 0)throw Error(`Cannot determine toggle state for skill '${$.id??$.name??bJ($.path??"")}'; provide an explicit enabled value or a resolvable workspace context.`);return await wK({filePath:W,enabled:X}),await Z?.refreshType("skill"),{snapshot:await this.list({...$,userInstructionService:Z}),changedTypes:["skills"]}});if($.type==="tools"){if(!$.name?.trim())throw Error("Tool settings toggle requires a tool name.");if($.enabled===void 0)m9($.name);else mj($.name,!$.enabled);return{snapshot:await this.list($),changedTypes:["tools"]}}if($.type==="mcp"){let Z=$.name?.trim()||$.id?.trim();if(!Z)throw Error("MCP server settings toggle requires a server name.");let Q=$.path?.trim()||Z0(),W=$.enabled;if(W===void 0){let J=p0({filePath:Q}).find((X)=>X.name===Z);if(!J)throw Error(`Unknown MCP server: ${Z}`);W=J.disabled===!0}return w2({filePath:Q,name:Z,disabled:!W}),{snapshot:await this.list($),changedTypes:["mcp"]}}throw Error(`Settings type '${$.type}' does not support toggles.`)}}function y2(){return new k$}function fF($){return{async list(Z){let Q=$;if(Q.listSettings)return await Q.listSettings(Z);return await y2().list(Z)},async toggle(Z){let Q=$;if(Q.toggleSetting)return await Q.toggleSetting(Z);return await y2().toggle(Z)}}}function UF($){function Z(){let Q=$.pendingPrompts;if(!Q)throw Error("Pending prompt service is not available.");return Q}return{list(Q){return Z().list(Q)},update(Q){return Z().update(Q)},delete(Q){return Z().delete(Q)}}}function DF($){let Z=$.config;return"providerId"in Z?{...$,config:{...Z,...AC($.localRuntime)},localRuntime:$.localRuntime}:$}function yJ($,Z={}){let Q=i4($.config),W=M0(Z.defaultCapabilities,$.capabilities),J=fC(Q.localRuntime,$.localRuntime),X=Z.withExtensionContext?.(J?.extensionContext);if(X)J={...J??{},extensionContext:X};return{...$,...Q,...J?{localRuntime:J}:{},...W?{capabilities:W}:{}}}function AC($){if(!$)return{};let{modelCatalogDefaults:Z,userInstructionService:Q,configExtensions:W,onTeamRestored:J,...X}=$;return X}function fC(...$){let Z={};for(let Q of $)if(Q)Object.assign(Z,Q);return Object.keys(Z).length>0?Z:void 0}_0();function LF($){let Z=$.input.config.telemetry??$.telemetry;if(!Z)return;Z.capture({event:m.SESSION.STARTED,properties:{sessionId:$.sessionId,source:$.input.source??T0.CORE,providerId:$.input.config.providerId,modelId:$.input.config.modelId,enableTools:$.input.config.enableTools,enableSpawnAgent:$.input.config.enableSpawnAgent,enableAgentTeams:$.input.config.enableAgentTeams,clientName:$.clientName,runtimeAddress:$.runtimeAddress}})}function C5($){return!!$&&typeof $==="object"&&!Array.isArray($)}function hJ($){let Z=$?.trim();return Z?Z:void 0}function UC($,Z){let Q=$?.trim();if(!Q)return Z;let W=Date.parse(Q);if(!Number.isFinite(W))return Z;return new Date(W).toISOString()}function _F($,Z){return new Date(new Date($).getTime()+Math.max(0,Math.floor(Z))*1000).toISOString()}function zF($,Z){return new Date(new Date($).getTime()-Math.max(0,Math.floor(Z))*1000).toISOString()}function DC($,Z){if(!$)return Z;return new Date($).getTime()>=new Date(Z).getTime()?$:Z}function LC($,Z){let Q=$.eventId.trim(),W=$.eventType.trim(),J=$.source.trim(),X=hJ($.subject),Y=hJ($.dedupeKey)??`${W}:${J}:${X??Q}`;return{eventId:Q,eventType:W,source:J,subject:X,occurredAt:UC($.occurredAt,Z),workspaceRoot:hJ($.workspaceRoot),payload:C5($.payload)?$.payload:void 0,attributes:C5($.attributes)?$.attributes:void 0,dedupeKey:Y}}function kJ($,Z){if(!Z)return;let Q=Z.split("."),W=$;for(let J of Q){if(!C5(W))return;W=W[J]}return W}function _C($,Z){if($.attributes&&Object.hasOwn($.attributes,Z))return $.attributes[Z];if($.payload&&Object.hasOwn($.payload,Z))return $.payload[Z];let Q={eventId:$.eventId,eventType:$.eventType,source:$.source,subject:$.subject,occurredAt:$.occurredAt,workspaceRoot:$.workspaceRoot,dedupeKey:$.dedupeKey,attributes:$.attributes,payload:$.payload},W=kJ(Q,Z);if(W!==void 0)return W;if($.attributes){let J=kJ($.attributes,Z);if(J!==void 0)return J}if($.payload)return kJ($.payload,Z);return}function gQ($,Z){if(Array.isArray(Z))return Z.some((Q)=>gQ($,Q));if(Array.isArray($))return $.some((Q)=>gQ(Q,Z));if(C5(Z)){if(!C5($))return!1;return Object.entries(Z).every(([Q,W])=>gQ($[Q],W))}return Object.is($,Z)}function zC($,Z){if(!Z||Object.keys(Z).length===0)return!0;return Object.entries(Z).every(([Q,W])=>gQ(_C($,Q),W))}class IJ{store;nowFn;logger;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now()),this.logger=$.logger}ingestEvent($){let Z=new Date(this.nowFn()).toISOString(),Q=LC($,Z),W=this.store.insertEventLog(Q,{receivedAtIso:Z});if(!W.created)return this.logger?.debug("cron.event.duplicate",{eventId:W.record.eventId,eventType:W.record.eventType,source:W.record.source}),{event:W.record,duplicate:!0,matchedSpecs:[],queuedRuns:[],suppressions:[{reason:"duplicate_event",dedupeKey:W.record.dedupeKey}]};try{let J=this.store.listEventSpecsForType(Q.eventType),X=[],Y=[],j=[];for(let B of J){if(!zC(Q,B.filters)){X.push({specId:B.specId,externalId:B.externalId,reason:"filter_mismatch",dedupeKey:Q.dedupeKey});continue}Y.push(B);let G=this.materializeForSpec(B,Q,W.record.receivedAt);if(G.run)j.push(G.run);else X.push({specId:B.specId,externalId:B.externalId,reason:G.reason,dedupeKey:Q.dedupeKey})}let V=Y.length===0?"unmatched":j.length>0?"queued":"suppressed";this.store.updateEventLogProcessing(W.record.eventId,{status:V,matchedSpecCount:Y.length,queuedRunCount:j.length,suppressedCount:X.filter((B)=>B.reason!=="filter_mismatch").length});let H=this.store.getEventLog(W.record.eventId);return this.logger?.debug("cron.event.processed",{eventId:W.record.eventId,eventType:W.record.eventType,status:V,matchedSpecCount:Y.length,queuedRunCount:j.length}),{event:H??W.record,duplicate:!1,matchedSpecs:Y,queuedRuns:j,suppressions:X}}catch(J){if(this.store.updateEventLogProcessing(W.record.eventId,{status:"failed",error:J instanceof Error?J.message:String(J)}),this.logger?.error)this.logger.error("cron.event.failed",{eventId:W.record.eventId,eventType:W.record.eventType,error:J});throw J}}materializeForSpec($,Z,Q){let W=Z.dedupeKey??Z.eventId,J=$.debounceSeconds??0;if(J>0){let V=this.store.findQueuedEventRunForDedupe({specId:$.specId,dedupeKey:W});if(V){let H=DC(V.scheduledFor,_F(Q,J)),B=this.store.updateQueuedEventRunForDebounce({runId:V.runId,triggerEventId:Z.eventId,scheduledFor:H});if(B)return{run:B,reason:"dedupe_window"}}}let X=$.dedupeWindowSeconds??0;if(X>0&&this.store.hasRecentEventRunForDedupe({specId:$.specId,dedupeKey:W,sinceIso:zF(Q,X)}))return{reason:"dedupe_window"};let Y=$.cooldownSeconds??0;if(Y>0&&this.store.hasRecentEventRunForSpec({specId:$.specId,sinceIso:zF(Q,Y)}))return{reason:"cooldown"};return{run:this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"event",triggerEventId:Z.eventId,scheduledFor:J>0?_F(Q,J):Q}),reason:"dedupe_window"}}}import{existsSync as IC,readdirSync as xC,readFileSync as gC,statSync as mC}from"node:fs";import{relative as vC}from"node:path";import{resolveCronSpecsDir as cC}from"@cline/shared/storage";import{createHash as TC}from"node:crypto";import OC from"yaml";function qC($){let Z=$.replace(/\\/g,"/");if(Z.startsWith("events/")&&Z.endsWith(".event.md"))return"event";if(Z.endsWith(".cron.md"))return"schedule";return"one_off"}function MC($){let Z=$.replace(/\r\n/g,`
496
496
  `);if(!Z.startsWith(`---
497
497
  `))return{frontmatter:void 0,body:$};let Q=Z.slice(4),W=Q.indexOf(`
498
498
  ---`);if(W===-1)return{frontmatter:void 0,body:$};let J=Q.slice(0,W),X=Q.slice(W+4);if(X.startsWith(`
499
- `))X=X.slice(1);return{frontmatter:J,body:X}}function i0($){if(typeof $!=="string")return;let Z=$.trim();return Z.length>0?Z:void 0}function TC($){if(!Array.isArray($))return;let Z=$.map((Q)=>typeof Q==="string"?Q.trim():"").filter((Q)=>Q.length>0);return Z.length>0?Z:void 0}function mJ($){if(!$||typeof $!=="object"||Array.isArray($))return;return $}function OC($){let Z=mJ($);if(!Z)return;let Q=i0(Z.providerId),W=i0(Z.modelId);if(Q===void 0&&W===void 0)return;return{providerId:Q,modelId:W}}function qC($){if(typeof $!=="string")return;let Z=$.trim().toLowerCase();if(Z==="act"||Z==="plan"||Z==="yolo")return Z;return}function zF($,Z={}){let Q=Array.isArray($)?$:typeof $==="string"?$.split(","):void 0;if(!Q)return;let W=[...new Set(Q.map((J)=>typeof J==="string"?J.trim():"").filter((J)=>J.length>0))];if(Array.isArray($)&&Z.preserveEmptyArray)return W;return W.length>0?W:void 0}var MC=new Set(X$);function RC($){let Z=zF($,{preserveEmptyArray:!0});if(!Z)return;let Q=Z.filter((W)=>!MC.has(W));if(Q.length>0)throw Error(`unknown tool(s): ${Q.join(", ")}`);return Z}var EC=new Set(["rules","skills","plugins"]);function NC($){let Z=zF($,{preserveEmptyArray:!0});if(!Z)return;let Q=Z.filter((W)=>!EC.has(W));if(Q.length>0)throw Error(`unknown extension(s): ${Q.join(", ")}`);return Z}function xJ($){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return;return Math.floor($)}function gJ($){if(typeof $!=="number"||!Number.isFinite($)||$<0)return;return Math.floor($)}function vJ($){if($===null||typeof $!=="object")return JSON.stringify($??null);if(Array.isArray($))return`[${$.map((Q)=>vJ(Q)).join(",")}]`;let Z=Object.entries($).filter(([,Q])=>Q!==void 0);return Z.sort(([Q],[W])=>Q<W?-1:Q>W?1:0),`{${Z.map(([Q,W])=>`${JSON.stringify(Q)}:${vJ(W)}`).join(",")}}`}function TF($,Z){let Q=DC("sha256");return Q.update(vJ($)),Q.update(`
500
- `),Q.update(Z),Q.digest("hex")}function wC($){return($.split("/").pop()??$).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}var CC=["schedule","timezone"],PC=["event","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds","maxParallel"],SC=["cwd"];function _F($,Z,Q,W,J){return{externalId:$,relativePath:$,triggerKind:Z,body:Q,contentHash:TF(W,Q),error:J}}function A1($,Z,Q,W,J,X){return{externalId:$,relativePath:Z,triggerKind:Q,body:W,contentHash:J,error:X}}function OF($){let Z=$.relativePath.replace(/\\/g,"/"),Q=_C(Z),{frontmatter:W,body:J}=zC($.raw),X={};if(W!==void 0&&W.trim().length>0)try{let U=LC.parse(W);if(U&&typeof U==="object"&&!Array.isArray(U))X=U;else if(U!==null&&U!==void 0)return _F(Z,Q,J,{},"frontmatter must be a YAML mapping")}catch(U){return _F(Z,Q,J,{},U instanceof Error?`failed to parse frontmatter: ${U.message}`:"failed to parse frontmatter")}let Y=TF(X,J),j=i0(X.id),V=j??Z;if(Q!=="schedule"){for(let U of CC)if(X[U]!==void 0)return A1(V,Z,Q,J,Y,`field "${U}" is only allowed on *.cron.md specs`)}for(let U of SC)if(X[U]!==void 0)return A1(V,Z,Q,J,Y,`field "${U}" is no longer supported; cron specs use workspaceRoot as cwd`);if(Q!=="event"){for(let U of PC)if(X[U]!==void 0)return A1(V,Z,Q,J,Y,`field "${U}" is only allowed on .event.md specs`)}let H=i0(X.prompt),B=J.trim(),G=H??(B.length>0?B:void 0);if(!G)return A1(V,Z,Q,J,Y,"prompt is required (frontmatter `prompt` or markdown body)");let K=i0(X.workspaceRoot);if(!K)return A1(V,Z,Q,J,Y,"workspaceRoot is required");let F,A;try{F=RC(X.tools),A=NC(X.extensions)}catch(U){return A1(V,Z,Q,J,Y,U instanceof Error?U.message:String(U))}let L=qC(X.mode);if(X.mode!==void 0&&L===void 0)return A1(V,Z,Q,J,Y,"mode must be one of: act, plan, yolo");let f={id:j,title:i0(X.title)??j??wC(Z),prompt:G,workspaceRoot:K,mode:L??"yolo",systemPrompt:i0(X.systemPrompt),modelSelection:OC(X.modelSelection),maxIterations:xJ(X.maxIterations),timeoutSeconds:xJ(X.timeoutSeconds),tools:F,notesDirectory:i0(X.notesDirectory),extensions:A,source:i0(X.source)??"user",tags:TC(X.tags),enabled:typeof X.enabled==="boolean"?X.enabled:!0,metadata:mJ(X.metadata)},D;if(Q==="schedule"){let U=i0(X.schedule);if(!U)return A1(V,Z,Q,J,Y,"schedule is required for *.cron.md specs");let T=i0(X.timezone);try{Uj(U,T)}catch(z){return A1(V,Z,Q,J,Y,z instanceof Error?z.message:String(z))}D={...f,triggerKind:"schedule",schedule:U,timezone:T}}else if(Q==="event"){let U=i0(X.event);if(!U)return A1(V,Z,Q,J,Y,"event is required for .event.md specs");D={...f,triggerKind:"event",event:U,filters:mJ(X.filters),debounceSeconds:gJ(X.debounceSeconds),dedupeWindowSeconds:gJ(X.dedupeWindowSeconds),cooldownSeconds:gJ(X.cooldownSeconds),maxParallel:xJ(X.maxParallel)}}else D={...f,triggerKind:"one_off"};return{externalId:V,relativePath:Z,triggerKind:Q,body:J,contentHash:Y,spec:D}}function gC($,Z){return IC($,Z).replace(/\\/g,"/")}function mC($){if(!bC($))return[];let Z=[],Q=[$];while(Q.length>0){let W=Q.pop();if(!W)continue;let J;try{J=yC(W,{withFileTypes:!0})}catch{continue}for(let X of J){let Y=`${W}/${X.name}`;if(X.isDirectory()){if(X.name==="reports")continue;Q.push(Y);continue}if(!X.isFile())continue;if(!X.name.endsWith(".md"))continue;Z.push(Y)}}return Z}class cJ{store;cronDir;constructor($){this.store=$.store,this.cronDir=xC($.specs??($.workspaceRoot?{scope:"workspace",workspaceRoot:$.workspaceRoot}:void 0))}getCronDir(){return this.cronDir}async reconcileAll(){let $={scanned:0,upserted:0,invalidParses:0,removed:0,changes:[]},Z=mC(this.cronDir),Q=new Set;for(let J of Z){let X=gC(this.cronDir,J);Q.add(X),$.scanned+=1;let Y=await this.reconcileFile(X,J);if(Y){if($.changes.push(Y),$.upserted+=1,Y.parse.error)$.invalidParses+=1}}let W=this.store.listSpecs({includeRemoved:!1,limit:1e4});for(let J of W)if(!Q.has(J.sourcePath))this.handleFileDeleted(J),$.removed+=1;return this.refreshScheduleNextRunAt(),$}async reconcileFile($,Z){let Q=this.store.getSpecBySourcePath($),W,J;try{W=hC(Z,"utf8"),J=kC(Z).mtimeMs}catch{return}let Y=OF({relativePath:$,raw:W}),j=this.store.upsertSpec({externalId:Y.externalId,sourcePath:$,triggerKind:Y.triggerKind,sourceMtimeMs:J,sourceHash:Y.contentHash,parseStatus:Y.error?"invalid":"valid",parseError:Y.error,spec:Y.spec});if(!Y.error&&Y.triggerKind==="schedule"&&j.record.enabled)this.applyScheduleNextRunAt(j.record,{forceReset:!Q||Q.removed||!Q.enabled||Q.scheduleExpr!==j.record.scheduleExpr||Q.timezone!==j.record.timezone});return{relativePath:$,result:j,parse:Y}}handleFileDeleted($){this.store.markSpecRemoved($.specId),this.store.cancelQueuedRunsForSpec($.specId)}refreshScheduleNextRunAt(){let $=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let Z of $)this.applyScheduleNextRunAt(Z,{forceReset:!1})}applyScheduleNextRunAt($,Z){if(!$.scheduleExpr)return;if(!Z.forceReset&&$.nextRunAt)return;try{let Q=Date.now(),W=$.lastRunAt?Math.max(Q,new Date($.lastRunAt).getTime()):Q,J=i$($.scheduleExpr,W,$.timezone),X=new Date(J).toISOString();if($.nextRunAt!==X)this.store.updateSpecNextRunAt($.specId,X)}catch{}}}import{existsSync as vC,mkdirSync as cC,watch as uC}from"node:fs";import{relative as dC,resolve as lC}from"node:path";var pC=250;class uJ{reconciler;debounceMs;onError;onReconciled;watcher;pending=new Map;disposed=!1;constructor($){this.reconciler=$.reconciler,this.debounceMs=Math.max(0,$.debounceMs??pC),this.onError=$.onError??(()=>{}),this.onReconciled=$.onReconciled??(()=>{})}start(){if(this.disposed)throw Error("CronWatcher disposed");if(this.watcher)return;let $=this.reconciler.getCronDir();try{cC($,{recursive:!0}),this.watcher=uC($,{recursive:!0},(Z,Q)=>{if(!Q)return;let W=String(Q).replace(/\\/g,"/");if(!W.endsWith(".md"))return;if(W.startsWith("reports/"))return;this.scheduleReconcile(W)}),this.watcher.on("error",this.onError)}catch(Z){this.onError(Z)}}stop(){for(let $ of this.pending.values())clearTimeout($);this.pending.clear(),this.watcher?.close(),this.watcher=void 0}dispose(){this.disposed=!0,this.stop()}scheduleReconcile($){let Z=this.pending.get($);if(Z)clearTimeout(Z);let Q=setTimeout(()=>{this.pending.delete($),this.reconcileNow($)},this.debounceMs);this.pending.set($,Q)}async reconcileNow($){try{let Z=lC(this.reconciler.getCronDir(),$);if(!vC(Z)){await this.reconciler.reconcileAll(),await this.onReconciled();return}let Q=dC(this.reconciler.getCronDir(),Z).replace(/\\/g,"/");await this.reconciler.reconcileFile(Q,Z),await this.onReconciled()}catch(Z){this.onError(Z)}}}class P5{store;reconciler;watcher;eventIngress;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new x4({dbPath:$.dbPath});let Z=$.specs;this.reconciler=new cJ({store:this.store,specs:Z}),this.materializer=new P4({store:this.store}),this.eventIngress=new IJ({store:this.store,logger:$.logger}),this.runner=new y4({store:this.store,materializer:this.materializer,runtimeHandlers:$.runtimeHandlers,workspaceRoot:$.workspaceRoot,specs:Z,logger:$.logger,pollIntervalMs:$.pollIntervalMs,claimLeaseSeconds:$.claimLeaseSeconds,globalMaxConcurrency:$.globalMaxConcurrency}),this.watcher=new uJ({reconciler:this.reconciler,debounceMs:$.watcherDebounceMs,onReconciled:()=>{this.materializer.materializeAll()},onError:(Q)=>{let W=$.logger;if(W)if(W.error)W.error("cron.watcher.failed",{error:Q});else W.log("cron.watcher.failed",{error:Q})}})}async start(){if(this.disposed)throw Error("CronService disposed");if(this.started)return;this.started=!0,await this.reconciler.reconcileAll(),this.materializer.materializeAll(),this.watcher.start(),await this.runner.start()}async stop(){this.watcher.stop(),await this.runner.stop(),this.started=!1}async dispose(){if(this.disposed)return;this.disposed=!0,this.watcher.dispose(),await this.runner.dispose(),this.store.close()}listSpecs($){return this.store.listSpecs($)}getSpec($){return this.store.getSpec($)}listRuns($){return this.store.listRuns($)}getRun($){return this.store.getRun($)}listActiveRuns(){return this.store.listRuns({status:"running",limit:200})}listUpcomingRuns($=20){return this.store.listRuns({status:"queued",limit:$})}async reconcileNow(){await this.reconciler.reconcileAll(),this.materializer.materializeAll()}ingestEvent($){return this.eventIngress.ingestEvent($)}listEventLogs($){return this.store.listEventLogs($)}getEventLog($){return this.store.getEventLog($)}}var SF={};N(SF,{manifestToSessionRecord:()=>mQ,listSessionHistoryFromBackend:()=>rJ,listSessionHistory:()=>vQ,hydrateSessionHistory:()=>PF});import{readdir as aC,readFile as NF}from"node:fs/promises";import{join as wF}from"node:path";import{formatDisplayUserInput as sC,normalizeUserInput as oC}from"@cline/shared";import{resolveSessionDataDir as CF}from"@cline/shared/storage";import{existsSync as rC}from"node:fs";import{readFile as iC}from"node:fs/promises";import{formatDisplayUserInput as qF}from"@cline/shared";class S5{listeners=new Set;subscribe($,Z){let Q={listener:$,sessionId:Z?.sessionId?.trim()||void 0};return this.listeners.add(Q),()=>{this.listeners.delete(Q)}}emit($){let Z=$.payload.sessionId?.trim();for(let Q of this.listeners){if(Q.sessionId&&Q.sessionId!==Z)continue;Q.listener($)}}get size(){return this.listeners.size}}async function I$($){let Z=$?.trim();if(!Z||!rC(Z))return[];try{let Q=(await iC(Z,"utf8")).trim();if(!Q)return[];let W=JSON.parse(Q);if(Array.isArray(W))return MF(W);if(W&&typeof W==="object"&&!Array.isArray(W)){let J=W.messages;if(Array.isArray(J))return MF(J)}return[]}catch{return[]}}function nC($){if($.role!=="user")return $;if(typeof $.content==="string")return{...$,content:qF($.content)};return{...$,content:$.content.map((Z)=>{if(Z.type!=="text"||typeof Z.text!=="string")return Z;return{...Z,text:qF(Z.text)}})}}function MF($){return $.map(nC)}function dJ($){return $?{...$}:void 0}async function RF($,Z){if(!($.hookName==="tool_call"||!!$.parent_agent_id))return;await Z.queueSpawnRequest($);let W=await Z.upsertSubagentSessionFromHook($);if(!W)return;await Z.appendSubagentHookAudit(W,$),await Z.applySubagentStatus(W,$)}function b5($){if(typeof $!=="string")return;let Z=$.trim();return Z.length>0?Z:void 0}function n0($){let Z=b5($);if(!Z)return;return Z.toLowerCase()==="unknown"?void 0:Z}function gQ($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function tC($){if(!$||typeof $!=="object"||Array.isArray($))return;return{...$}}function pJ($){let Z=$??200;return Number.isFinite(Z)?Math.max(0,Math.floor(Z)):200}function eC($){if($===0)return 0;return Math.min(Math.max($*2,20),2000)}function $P($){return $.isSubagent!==!0&&!b5($.parentSessionId)}function ZP($){let Z=$.match(/\d{13,}/g);if(!Z||Z.length===0)return 0;let Q=0;for(let W of Z){let J=Number.parseInt(W,10);if(Number.isFinite(J)&&J>Q)Q=J}return Q}function mQ($){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 QP($){let Z=pJ($);if(Z===0)return[];let Q=CF(),J=(await aC(Q,{withFileTypes:!0}).catch(()=>[])).filter((Y)=>Y.isDirectory()).map((Y)=>({entry:Y,recency:ZP(Y.name.trim())})).sort((Y,j)=>j.recency-Y.recency||j.entry.name.localeCompare(Y.entry.name));return(await Promise.all(J.map(async({entry:Y})=>{let j=Y.name.trim();if(!j)return;let V=wF(Q,j,`${j}.json`),H=await NF(V,"utf8").catch(()=>{return});if(!H)return;let B;try{B=JSON.parse(H)}catch{return}let G=b0.safeParse(B);if(!G.success)return;return mQ(G.data)}))).filter((Y)=>Boolean(Y)).sort((Y,j)=>j.startedAt.localeCompare(Y.startedAt)).slice(0,Z)}async function WP($,Z,Q){let W=pJ(Z);if(W===0)return await $.listSessions(0),[];let J=Q.includeSubagents?W:eC(W),X=await $.listSessions(J);return(Q.includeSubagents?X:X.filter($P)).slice(0,W)}function JP($){if(typeof $==="string")return $.trim();let Z=[];for(let Q of $){if(!Q||typeof Q!=="object")continue;let W=Q;if(W.type!=="text")continue;let J=W.text?.trim();if(J)Z.push(J)}return Z.join(`
501
- `).trim()}function EF($){return $.replace(/\s+/g," ").trim()}function XP($,Z){if($.length<=Z)return $;return`${$.slice(0,Math.max(0,Z-3)).trimEnd()}...`}function YP($){for(let Z of["user","assistant"])for(let Q of $){if(Q.role!==Z)continue;let W=EF(JP(Q.content));if(!W)continue;let J=Z==="user"?EF(sC(W)):W,X=oC(J.split(`
502
- `)[0]??J);return XP(X,50)}return}function jP($){let Z=0;for(let Q of $)Z+=gQ(Q.metrics?.cost)??0;return Z}function VP($){let Z,Q;for(let W=$.length-1;W>=0;W-=1){let J=$[W];if(!Z)Z=n0(J.modelInfo?.provider);if(!Q)Q=n0(J.modelInfo?.id);if(Z&&Q)break}return{provider:Z,model:Q}}function HP($){return n0($?.provider)??n0($?.provider&&typeof $.provider==="object"&&!Array.isArray($.provider)?$.provider.id:void 0)}function BP($){return n0($?.model)??n0($?.model&&typeof $.model==="object"&&!Array.isArray($.model)?$.model.id:void 0)}function lJ($,Z){let Q=tC($.metadata),W=b5(Z?.title)??b5(Q?.title),J=gQ(Z?.totalCost)??gQ(Q?.totalCost),X=Q||W!==void 0||J!==void 0?{...Q??{},...W!==void 0?{title:W}:{},...J!==void 0?{totalCost:J}:{}}:void 0;return{...$,provider:n0(Z?.provider)??n0($.provider)??HP(Q)??"",model:n0(Z?.model)??n0($.model)??BP(Q)??"",metadata:X}}function GP($){let Z=$.content;if(!Array.isArray(Z))return!1;return Z.some((Q)=>!!Q&&typeof Q==="object"&&Q.type==="tool-call")}function KP($,Z){if($.status!=="running"||$.interactive!==!0)return!1;let Q=Z.at(-1);return Q?.role==="assistant"&&!GP(Q)}async function FP($,Z){return await Promise.all(Z.map(async(Q)=>{if(Q.status!=="running"||Q.interactive!==!0)return Q;let W=await $.readSessionMessages(Q.sessionId);return KP(Q,W)?{...Q,status:"idle"}:Q}))}async function PF($,Z){return await Promise.all(Z.map(async(Q)=>{let W=lJ(Q),J=Boolean(b5(W.metadata?.title)),X=Boolean(n0(W.provider)),Y=Boolean(n0(W.model)),j=gQ(W.metadata?.totalCost),V=j!==void 0&&j>0;if(J&&X&&Y&&V)return W;let H=await $.readSessionMessages(Q.sessionId);if(H.length===0)return W;let B=VP(H),G=jP(H);return lJ(Q,{title:J?void 0:YP(H),provider:X?void 0:B.provider,model:Y?void 0:B.model,totalCost:V||G<=0?void 0:G})}))}async function vQ($,Z={}){let Q=pJ(Z.limit),W=Z.includeSubagents===!0,J=await WP($,Q,{includeSubagents:W}),X=Z.includeManifestFallback===!0&&J.length<Q?await QP(Math.min(Math.max(Q*2,100),500)):[],Y=new Map;for(let H of[...J,...X]){if(Y.has(H.sessionId))continue;Y.set(H.sessionId,H)}let j=X.length===0?J:Array.from(Y.values()).sort((H,B)=>B.startedAt.localeCompare(H.startedAt)).slice(0,Q),V=await FP($,j);if(Z.hydrate===!1)return V.map((H)=>lJ(H));return await PF($,V)}async function AP($){let Z=$.trim();if(!Z)return;let Q=wF(CF(),Z,`${Z}.json`),W=await NF(Q,"utf8").catch(()=>{return});if(!W)return;try{let J=b0.safeParse(JSON.parse(W));return J.success?J.data.messages_path:void 0}catch{return}}async function rJ($,Z={}){let Q=new Map;return await vQ({listSessions:async(J)=>{let X=await $.listSessions(J);Q.clear();for(let Y of X)Q.set(Y.sessionId,Y);return X.map(v6)},readSessionMessages:async(J)=>{let X=Q.get(J)?.messagesPath??await AP(J);return await I$(X)}},Z)}var LA={};N(LA,{resolveSessionBackend:()=>KX,createRuntimeHost:()=>K4});import{captureSdkError as UA}from"@cline/shared";var lF={};N(lF,{HubRuntimeHost:()=>o1});import{captureSdkError as yF,createSessionId as hF,HUB_CHECKPOINT_CAPABILITY as LP,HUB_COMPACTION_CAPABILITY as _P,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as zP,HUB_HOOK_CAPABILITY_PREFIX as TP,HUB_MISTAKE_LIMIT_CAPABILITY as OP,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as qP,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as MP,isHubToolExecutorName as RP}from"@cline/shared";var bF={};N(bF,{createCoreSessionSnapshot:()=>f1,coreSessionSnapshotToRecord:()=>cQ});function fP($){return $?JSON.parse(JSON.stringify($)):void 0}function UP($){return $?JSON.parse(JSON.stringify($)):void 0}function DP($){let Z=$?.checkpoint&&typeof $.checkpoint==="object"&&!Array.isArray($.checkpoint)?$.checkpoint:void 0,W=(Array.isArray(Z?.history)?Z.history:[]).filter((Y)=>!!Y&&typeof Y==="object"&&!Array.isArray(Y)).flatMap((Y)=>{let j=typeof Y.ref==="string"?Y.ref.trim():"",V=Number(Y.createdAt),H=Number(Y.runCount);if(!j||!Number.isFinite(V)||!Number.isInteger(H))return[];return[{ref:j,createdAt:V,runCount:H,...Y.kind==="stash"||Y.kind==="commit"?{kind:Y.kind}:{}}]}),J=W.at(-1),X=$?.checkpointEnabled===!0?!0:void 0;if(!X&&W.length===0)return;return{...X?{enabled:X}:{},...J?{latest:J}:{},history:W}}function f1($){let{session:Z}=$,Q=fP(Z.metadata);return{version:1,sessionId:Z.sessionId,source:Z.source,status:Z.status,createdAt:Z.startedAt,updatedAt:Z.updatedAt,endedAt:Z.endedAt??null,exitCode:Z.exitCode??null,interactive:Z.interactive,workspace:{cwd:Z.cwd,root:Z.workspaceRoot},model:{providerId:Z.provider,modelId:Z.model},capabilities:{enableTools:Z.enableTools,enableSpawn:Z.enableSpawn,enableTeams:Z.enableTeams},lineage:{...Z.parentSessionId?{parentSessionId:Z.parentSessionId}:{},...Z.parentAgentId?{parentAgentId:Z.parentAgentId}:{},...Z.agentId?{agentId:Z.agentId}:{},...Z.conversationId?{conversationId:Z.conversationId}:{},isSubagent:Z.isSubagent},...Z.teamName?{team:{name:Z.teamName}}:{},...Z.prompt?{prompt:Z.prompt}:{},...Q?{metadata:Q}:{},...Z.messagesPath?{artifacts:{messagesPath:Z.messagesPath}}:{},...$.messages?{messages:UP($.messages)}:{},...$.usage?{usage:{...$.usage}}:{},...$.aggregateUsage?{aggregateUsage:{...$.aggregateUsage}}:{},...(()=>{let W=DP(Q);return W?{checkpoint:W}:{}})()}}function cQ($){return{sessionId:$.sessionId,parentSessionId:$.lineage.parentSessionId,agentId:$.lineage.agentId,parentAgentId:$.lineage.parentAgentId,conversationId:$.lineage.conversationId,isSubagent:$.lineage.isSubagent,source:$.source,startedAt:$.createdAt,endedAt:$.endedAt??void 0,exitCode:$.exitCode??void 0,status:$.status,interactive:$.interactive,provider:$.model.providerId,model:$.model.modelId,cwd:$.workspace.cwd,workspaceRoot:$.workspace.root,teamName:$.team?.name,enableTools:$.capabilities.enableTools,enableSpawn:$.capabilities.enableSpawn,enableTeams:$.capabilities.enableTeams,prompt:$.prompt,metadata:$.metadata,updatedAt:$.updatedAt,messagesPath:$.artifacts?.messagesPath}}function J4($){if(!$)return;return JSON.parse(JSON.stringify($))}var EP=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function kF($){if(!$||typeof $!=="object"||Array.isArray($))return;return JSON.parse(JSON.stringify($))}function IF($){if(!$)return;let{userInstructionService:Z,...Q}=$;return JSON.parse(JSON.stringify(Q))}function xF($){let Z=$&&typeof $==="object"&&!Array.isArray($)?$:{};return{agentId:typeof Z.agentId==="string"?Z.agentId:"",conversationId:typeof Z.conversationId==="string"?Z.conversationId:"",iteration:typeof Z.iteration==="number"?Z.iteration:0,metadata:Z.metadata&&typeof Z.metadata==="object"&&!Array.isArray(Z.metadata)?Z.metadata:void 0}}function y2($,Z,Q){$.manifest.push(Z),$.handlers.set(Z.capabilityName,Q)}function gF($,Z){let Q={manifest:[],handlers:new Map};for(let J of Object.keys(Z.toolExecutors??{}).filter(RP)){let X=Z.toolExecutors?.[J];if(typeof X!=="function")continue;y2(Q,{kind:"toolExecutor",executor:J,capabilityName:`${qP}${J}`},async({payload:Y,abortSignal:j})=>{let V=Array.isArray(Y.args)?[...Y.args]:[],H={...xF(Y.context),signal:j};return{result:await X(...V,H)}})}for(let J of $?.extraTools??[])y2(Q,{kind:"tool",name:J.name,description:J.description,inputSchema:J4(J.inputSchema)??{},...J.lifecycle?{lifecycle:J4(J.lifecycle)}:{},capabilityName:`${zP}${J.name}`},async({payload:X,abortSignal:Y,progress:j})=>{let V={...xF(X.context),signal:Y};return{result:await J.execute(X.input,{...V,emitUpdate:(B)=>{j({update:B})}})}});let W=$?.hooks;if(W)for(let J of EP){let X=W[J];if(typeof X!=="function")continue;y2(Q,{kind:"hook",name:J,capabilityName:`${TP}${J}`},async({payload:Y})=>({control:await X(Y.context)}))}if($?.compaction?.compact){let J=$.compaction.compact;y2(Q,{kind:"compaction",capabilityName:_P,config:kF($.compaction)},async({payload:X})=>({result:await J(X.context)}))}if($?.checkpoint?.createCheckpoint){let J=$.checkpoint.createCheckpoint;y2(Q,{kind:"checkpoint",capabilityName:LP,config:kF($.checkpoint)},async({payload:X})=>({result:await J(X.context)}))}if($?.onConsecutiveMistakeLimitReached){let J=$.onConsecutiveMistakeLimitReached;y2(Q,{kind:"mistakeLimit",capabilityName:OP},async({payload:X})=>({result:await J(X.context)}))}if($?.userInstructionService){let J=$.userInstructionService;y2(Q,{kind:"userInstructionService",capabilityName:MP},async()=>{return await J.start().catch(()=>{}),{snapshot:{records:{skill:J.listRecords("skill"),rule:J.listRecords("rule"),workflow:J.listRecords("workflow")},runtimeCommands:J.listRuntimeCommands()}}})}return Q}function uF($){if(typeof $==="string"&&$.trim())return $.trim();if($ instanceof Error)return $.message.trim()||void 0;if($&&typeof $==="object"&&"message"in $){let Z=$.message;if(typeof Z==="string"&&Z.trim())return Z.trim()}return}function NP($){return uF($)??"Capability request was cancelled."}function wP($){if(typeof $!=="string")return $;try{return JSON.parse($)}catch{return $}}function CP($){return $==="completed"||$==="max_iterations"||$==="aborted"||$==="mistake_limit"||$==="error"}function PP($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$,Q=typeof Z.inputTokens==="number"?Z.inputTokens:void 0,W=typeof Z.outputTokens==="number"?Z.outputTokens:void 0;if(Q===void 0||W===void 0)return;return{inputTokens:Q,outputTokens:W,cacheReadTokens:typeof Z.cacheReadTokens==="number"?Z.cacheReadTokens:0,cacheWriteTokens:typeof Z.cacheWriteTokens==="number"?Z.cacheWriteTokens:0,totalCost:typeof Z.totalCost==="number"?Z.totalCost:0}}function mF($){if(!$)return;return{inputTokens:typeof $.inputTokens==="number"?$.inputTokens:0,outputTokens:typeof $.outputTokens==="number"?$.outputTokens:0,cacheReadTokens:typeof $.cacheReadTokens==="number"?$.cacheReadTokens:0,cacheWriteTokens:typeof $.cacheWriteTokens==="number"?$.cacheWriteTokens:0,totalCost:typeof $.totalCost==="number"?$.totalCost:0}}function iJ($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function x$($,Z){return iJ($?.[Z])??0}function SP($){let Z=$?.delta&&typeof $.delta==="object"?$.delta:void 0,Q=$?.totals&&typeof $.totals==="object"?$.totals:void 0,W=$?.agent&&typeof $.agent==="object"?$.agent:void 0,J=W?.teamRole==="teammate"||W?.teamRole==="lead"?W.teamRole:void 0;return{event:{type:"usage",agentId:typeof W?.agentId==="string"?W.agentId:void 0,conversationId:typeof W?.conversationId==="string"?W.conversationId:void 0,parentAgentId:typeof W?.parentAgentId==="string"?W.parentAgentId:void 0,inputTokens:x$(Z,"inputTokens"),outputTokens:x$(Z,"outputTokens"),cacheReadTokens:x$(Z,"cacheReadTokens"),cacheWriteTokens:x$(Z,"cacheWriteTokens"),cost:iJ(Z?.totalCost),totalInputTokens:x$(Q,"inputTokens"),totalOutputTokens:x$(Q,"outputTokens"),totalCacheReadTokens:x$(Q,"cacheReadTokens"),totalCacheWriteTokens:x$(Q,"cacheWriteTokens"),totalCost:iJ(Q?.totalCost)},teamAgentId:typeof W?.teamAgentId==="string"?W.teamAgentId:void 0,teamRole:J}}function bP($){let Z=$?.result&&typeof $.result==="object"&&!Array.isArray($.result)?$.result:void 0,Q=$?.reason??Z?.finishReason,W=CP(Q)?Q:Q==="failed"?"error":"completed",J=PP($?.usage??Z?.usage);return{type:"done",reason:W,text:typeof $?.text==="string"?$.text:typeof Z?.text==="string"?Z.text:"",iterations:typeof $?.iterations==="number"?$.iterations:typeof Z?.iterations==="number"?Z.iterations:0,usage:J}}function uQ($,Z){return $.error?.message??`hub command failed: ${Z}`}function y5($){switch($){case"idle":case"completed":return"completed";case"failed":return"failed";case"aborted":return"cancelled";default:return"running"}}function dF($){let Z=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):void 0;return{sessionId:$.sessionId,parentSessionId:typeof Z?.parentSessionId==="string"?Z.parentSessionId:void 0,agentId:$.runtimeSession?.agentId||(typeof Z?.agentId==="string"?Z.agentId:void 0),parentAgentId:typeof Z?.parentAgentId==="string"?Z.parentAgentId:void 0,conversationId:typeof Z?.conversationId==="string"?Z.conversationId:void 0,isSubagent:typeof Z?.isSubagent==="boolean"?Z.isSubagent:!1,source:typeof Z?.source==="string"?Z.source:z0.CORE,pid:typeof Z?.pid==="number"?Z.pid:void 0,startedAt:new Date($.createdAt).toISOString(),endedAt:y5($.status)==="running"?void 0:new Date($.updatedAt).toISOString(),exitCode:y5($.status)==="completed"?0:y5($.status)==="failed"?1:void 0,status:y5($.status),interactive:Z?.interactive===!0,provider:typeof Z?.provider==="string"?Z.provider:"hub",model:typeof Z?.model==="string"?Z.model:"hub",cwd:$.cwd?.trim()||$.workspaceRoot,workspaceRoot:$.workspaceRoot,teamName:typeof Z?.teamName==="string"?Z.teamName:void 0,enableTools:$.runtimeOptions?.enableTools??Z?.enableTools===!0,enableSpawn:$.runtimeOptions?.enableSpawn??Z?.enableSpawn===!0,enableTeams:$.runtimeOptions?.enableTeams??Z?.enableTeams===!0,prompt:typeof Z?.prompt==="string"?Z.prompt:void 0,metadata:Z,updatedAt:new Date($.updatedAt).toISOString(),messagesPath:typeof Z?.messagesPath==="string"?Z.messagesPath:void 0,hookPath:typeof Z?.hookPath==="string"?Z.hookPath:void 0}}function g$($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$;return Z.version===1&&typeof Z.sessionId==="string"?JSON.parse(JSON.stringify(Z)):void 0}function yP($){let Z=g$($?.snapshot);if(Z)return cQ(Z);let Q=$?.session;return Q?dF(Q):void 0}function vF($,Z,Q){let W=Q?.workspaceRoot?.trim()||Z.config.workspaceRoot||Z.config.cwd;return b0.parse({version:1,session_id:$,source:Z.source??z0.CORE,pid:process.pid,started_at:new Date(Q?.createdAt??Date.now()).toISOString(),status:y5(Q?.status),interactive:Z.interactive===!0,provider:Z.config.providerId,model:Z.config.modelId,cwd:Q?.cwd?.trim()||Z.config.cwd,workspace_root:W,team_name:Z.config.teamName,enable_tools:Z.config.enableTools,enable_spawn:Z.config.enableSpawnAgent,enable_teams:Z.config.enableAgentTeams,prompt:Z.prompt?.trim()||void 0,metadata:Z.sessionMetadata&&Object.keys(Z.sessionMetadata).length>0?Z.sessionMetadata:void 0})}function cF($,Z){return b0.parse({version:1,session_id:$.sessionId,source:$.source,pid:process.pid,started_at:$.createdAt,status:$.status,interactive:$.interactive,provider:$.model.providerId,model:$.model.modelId,cwd:$.workspace.cwd,workspace_root:$.workspace.root,team_name:$.team?.name,enable_tools:$.capabilities.enableTools,enable_spawn:$.capabilities.enableSpawn,enable_teams:$.capabilities.enableTeams,prompt:($.prompt??Z.prompt?.trim())||void 0,metadata:$.metadata,messages_path:$.artifacts?.messagesPath})}class o1{runtimeAddress;pendingPrompts;client;clientOptions;clientContext;events=new S5;sessionCapabilities=new Map;sessionClientContributionHandlers=new Map;sessionSubscriptions=new Map;pendingApprovalToolCallIds=new Set;agentDoneEmittedForCurrentRunBySession=new Set;activeCapabilityAbortControllers=new Map;defaultCapabilities;telemetry;constructor($,Z){this.clientContext=Z,this.clientOptions={authToken:$.authToken,clientType:$.clientType??"core-hub-runtime",displayName:$.displayName??"core hub runtime",workspaceRoot:Z?.workspaceRoot,cwd:Z?.cwd},this.defaultCapabilities=q0($.capabilities)??{},this.telemetry=$.telemetry,this.runtimeAddress=$.url,this.pendingPrompts={list:(Q)=>this.requestPendingPromptsList(Q),update:(Q)=>this.requestPendingPromptUpdate(Q),delete:(Q)=>this.requestPendingPromptDelete(Q)},this.client=this.createClient($.url)}createClient($){return new W1({...this.clientOptions,url:$})}async replaceClient($){let Z=this.client;this.client=this.createClient($),this.runtimeAddress=$,await Promise.resolve(Z.dispose()).catch(()=>{return})}async recoverLocalHubStartupDeadlock($){if(!o9($,"session.create"))return!1;let Z=await t9({url:this.client.getUrl(),workspaceRoot:this.clientContext?.workspaceRoot,cwd:this.clientContext?.cwd}).catch(()=>{return});if(!Z)return!1;return await this.replaceClient(Z),!0}registerPlannedSession($,Z,Q){if(this.sessionCapabilities.set($,Z),Q.size>0)this.sessionClientContributionHandlers.set($,Q);this.ensureSessionSubscription($)}cleanupPlannedSession($){this.sessionCapabilities.delete($),this.sessionClientContributionHandlers.delete($),this.disposeSessionSubscription($)}async connect(){await this.client.connect()}async startSession($){let Z=this.resolveCapabilities($),Q=gF($.localRuntime,Z),W=$.config.sessionId?.trim()||hF(),J=()=>this.client.command("session.create",{workspaceRoot:$.config.workspaceRoot?.trim()||$.config.cwd,cwd:$.config.cwd,sessionConfig:J4({...$.config,sessionId:W}),metadata:{...$.sessionMetadata??{},source:$.source??z0.CORE,provider:$.config.providerId,model:$.config.modelId,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,teamName:$.config.teamName,prompt:$.prompt,interactive:$.interactive===!0},runtimeOptions:{...Q.manifest.length>0?{clientContributions:Q.manifest}:{},...$.localRuntime?.configExtensions?{configExtensions:$.localRuntime.configExtensions}:{}},toolPolicies:J4($.toolPolicies),initialMessages:$.initialMessages});this.registerPlannedSession(W,Z,Q.handlers);let X;try{X=await J()}catch(H){if(this.cleanupPlannedSession(W),await this.recoverLocalHubStartupDeadlock(H)){this.registerPlannedSession(W,Z,Q.handlers);try{X=await J()}catch(B){throw this.cleanupPlannedSession(W),B}}else throw H}let Y=g$(X.payload?.snapshot),j=X.payload?.session,V=(Y?.sessionId??j?.sessionId)?.trim();if(!V)throw this.cleanupPlannedSession(W),Error("Hub runtime did not return a session id.");if(V!==W)this.cleanupPlannedSession(W),this.registerPlannedSession(V,Z,Q.handlers);return{sessionId:V,manifest:Y?cF(Y,$):vF(V,$,j),manifestPath:"",messagesPath:"",result:void 0}}async restoreSession($){let Z=$.sessionId.trim();if(!Z)throw Error("sessionId is required");let Q=$.restore?.messages!==!1;if(Q&&!$.start)throw Error("start is required when restore.messages is true");let W=$.start,J=W?this.resolveCapabilities(W):void 0,X=W?gF(W.localRuntime,J??{}):{manifest:[],handlers:new Map},Y=W?W.config.sessionId?.trim()||hF():void 0;if(Y&&J)this.sessionCapabilities.set(Y,J);if(Y&&X.handlers.size>0)this.sessionClientContributionHandlers.set(Y,X.handlers),this.ensureSessionSubscription(Y);let j;try{j=await this.client.command("session.restore",{sessionId:Z,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...W?{workspaceRoot:W.config.workspaceRoot?.trim()||W.config.cwd,cwd:W.config.cwd??$.cwd,sessionConfig:J4({...W.config,sessionId:Y}),metadata:{...W.sessionMetadata??{},source:W.source??z0.CORE,provider:W.config.providerId,model:W.config.modelId,enableTools:W.config.enableTools,enableSpawn:W.config.enableSpawnAgent,enableTeams:W.config.enableAgentTeams,teamName:W.config.teamName,prompt:W.prompt,interactive:W.interactive===!0},runtimeOptions:{...X.manifest.length>0?{clientContributions:X.manifest}:{},...W.localRuntime?.configExtensions?{configExtensions:W.localRuntime.configExtensions}:{}},toolPolicies:J4(W.toolPolicies)}:{}},Z)}catch(F){if(Y)this.sessionCapabilities.delete(Y),this.sessionClientContributionHandlers.delete(Y),this.disposeSessionSubscription(Y);throw F}if(!j.ok){let F=typeof j.payload?.error==="string"?j.payload.error:"session.restore failed";if(Y)this.sessionCapabilities.delete(Y),this.sessionClientContributionHandlers.delete(Y),this.disposeSessionSubscription(Y);throw Error(F)}let V=g$(j.payload?.snapshot),H=j.payload?.session,B=(V?.sessionId??H?.sessionId)?.trim();if(Q&&!B){if(Y)this.sessionCapabilities.delete(Y),this.sessionClientContributionHandlers.delete(Y),this.disposeSessionSubscription(Y);throw Error("Hub checkpoint restore returned no session id")}if(B&&Y&&B!==Y)this.sessionCapabilities.delete(Y),this.sessionClientContributionHandlers.delete(Y),this.disposeSessionSubscription(Y);if(B&&J)this.sessionCapabilities.set(B,J);if(B&&X.handlers.size>0)this.sessionClientContributionHandlers.set(B,X.handlers);if(B)this.ensureSessionSubscription(B);let G=Array.isArray(j.payload?.messages)?j.payload.messages:void 0,K=j.payload?.checkpoint;if(!K)throw Error("Hub checkpoint restore returned no checkpoint");return{sessionId:B,startResult:B?{sessionId:B,manifest:V?cF(V,W??{}):vF(B,W??{},H),manifestPath:"",messagesPath:"",result:void 0}:void 0,messages:G,checkpoint:K}}async runTurn($){return this.ensureSessionSubscription($.sessionId),(await this.client.command("run.start",{sessionId:$.sessionId,input:$.prompt,mode:$.mode,attachments:($.userImages?.length??0)>0||($.userFiles?.length??0)>0?{...$.userImages?.length?{userImages:$.userImages}:{},...$.userFiles?.length?{userFiles:$.userFiles}:{}}:void 0,delivery:$.delivery,timeoutMs:$.timeoutMs},$.sessionId,{timeoutMs:null})).payload?.result}async requestPendingPromptsList($){this.ensureSessionSubscription($.sessionId);let Z=await this.client.command("session.pending_prompts",{sessionId:$.sessionId},$.sessionId);return Array.isArray(Z.payload?.prompts)?Z.payload.prompts:[]}async requestPendingPromptUpdate($){this.ensureSessionSubscription($.sessionId);let Z=await this.client.command("session.update_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(Z.payload?.prompts)?Z.payload.prompts:[],prompt:Z.payload?.prompt,updated:Z.payload?.updated===!0}}async requestPendingPromptDelete($){this.ensureSessionSubscription($.sessionId);let Z=await this.client.command("session.remove_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(Z.payload?.prompts)?Z.payload.prompts:[],prompt:Z.payload?.prompt,removed:Z.payload?.removed===!0}}async getAccumulatedUsage($){let Z=await this.client.command("session.get",{includeSnapshot:!0},$),Q=g$(Z.payload?.snapshot);if(Q){let Y=Q.usage?{...Q.usage}:void 0,j=Q.aggregateUsage?{...Q.aggregateUsage}:void 0;return Y||j?{usage:Y,aggregateUsage:j}:void 0}let W=Z.payload?.session,J=mF(W?.usage),X=mF(W?.aggregateUsage);return J||X?{usage:J,aggregateUsage:X}:void 0}async abort($,Z){await this.client.command("run.abort",{sessionId:$,reason:uF(Z)},$)}async stopSession($){this.sessionCapabilities.delete($),this.disposeSessionSubscription($),await this.client.command("session.detach",{sessionId:$},$)}async dispose(){for(let[$,Z]of this.sessionSubscriptions){Z();try{await this.client.command("session.detach",{sessionId:$},$)}catch{}}this.sessionSubscriptions.clear(),this.sessionCapabilities.clear(),this.agentDoneEmittedForCurrentRunBySession.clear();for(let $ of this.activeCapabilityAbortControllers.values())$.abort("Hub runtime host disposed.");this.activeCapabilityAbortControllers.clear(),await this.client.dispose()}async getSession($){let Z;try{Z=await this.client.command("session.get",void 0,$)}catch(Q){if(I1(Q))return;throw Q}return yP(Z.payload)}async listSessions($=100){let Z=await this.client.command("session.list",{limit:$}),Q=Array.isArray(Z.payload?.snapshots)?Z.payload.snapshots.flatMap((J)=>{let X=g$(J);return X?[cQ(X)]:[]}):[];if(Q.length>0)return Q;return(Z.payload?.sessions??[]).map(dF)}async listSettings($){let Z=await this.client.command("settings.list",IF($));if(!Z.ok)throw Error(uQ(Z,"settings.list"));return Z.payload?.snapshot}async toggleSetting($){let Z=await this.client.command("settings.toggle",IF($));if(!Z.ok)throw Error(uQ(Z,"settings.toggle"));return{snapshot:Z.payload?.snapshot,changedTypes:Array.isArray(Z.payload?.changedTypes)?Z.payload.changedTypes:[]}}async deleteSession($){return this.sessionCapabilities.delete($),this.disposeSessionSubscription($),(await this.client.command("session.delete",{sessionId:$})).payload?.deleted===!0}async updateSession($,Z){let Q={...Z.metadata??{}};if(typeof Z.prompt==="string")Q.prompt=Z.prompt;if(typeof Z.title==="string")Q.title=Z.title;return{updated:(await this.client.command("session.update",{sessionId:$,metadata:Q})).ok}}async readSessionMessages($){let Z=$.trim();if(!Z)return[];let Q=await this.client.command("session.messages",{sessionId:Z},Z);if(!Q.ok)throw yF(this.telemetry,{component:"core",operation:"hub.runtime_host.read_session_messages",error:Error(uQ(Q,"session.messages")),severity:Q.error?.code==="session_not_found"?"warn":"error",handled:!0,context:{command:"session.messages",sessionId:Z,errorCode:Q.error?.code,runtimeAddress:this.runtimeAddress}}),Error(uQ(Q,"session.messages"));let W=Q.payload?.messages;return Array.isArray(W)?W:[]}async dispatchHookEvent($){await this.client.command("session.hook",{payload:$})}subscribe($,Z){return this.events.subscribe($,Z)}ensureSessionSubscription($){let Z=$.trim();if(!Z||this.sessionSubscriptions.has(Z))return;let Q=this.client.subscribe((W)=>{this.handleHubEvent(W)},{sessionId:Z});this.sessionSubscriptions.set(Z,typeof Q==="function"?Q:()=>{})}disposeSessionSubscription($){let Z=$.trim();if(!Z)return;this.sessionSubscriptions.get(Z)?.(),this.sessionSubscriptions.delete(Z),this.agentDoneEmittedForCurrentRunBySession.delete(Z)}resolveCapabilities($){return q0(this.defaultCapabilities,$.capabilities)??{}}emitToolCallContentStart($){this.events.emit({type:"agent_event",payload:{sessionId:$.sessionId,event:{type:"content_start",contentType:"tool",toolCallId:$.toolCallId,toolName:$.toolName,input:$.toolInput}}})}emitAgentDoneIfNeeded($){if(this.agentDoneEmittedForCurrentRunBySession.has($.sessionId))return;this.agentDoneEmittedForCurrentRunBySession.add($.sessionId),this.events.emit({type:"agent_event",payload:{sessionId:$.sessionId,event:bP($.payload)}})}handleHubEvent($){let Z=$.sessionId?.trim();if($.event==="capability.requested"){this.handleCapabilityRequest($).catch((Q)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_request",Q,$)});return}if($.event==="capability.resolved"){this.handleCapabilityResolved($);return}if($.event==="approval.requested"){this.handleApprovalRequested($).catch((Q)=>{this.captureDetachedHubEventError("hub.runtime_host.approval_request",Q,$)});return}if(!Z)return;switch($.event){case"run.started":{this.agentDoneEmittedForCurrentRunBySession.delete(Z);let Q=g$($.payload?.snapshot),W=$.payload?.session;if(Q)this.events.emit({type:"session_snapshot",payload:{sessionId:Z,snapshot:Q}});this.events.emit({type:"status",payload:{sessionId:Z,status:W?.status??"running"}});return}case"iteration.started":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"iteration_start",iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0}}});return}case"iteration.finished":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"iteration_end",iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0,hadToolCalls:$.payload?.hadToolCalls===!0,toolCallCount:typeof $.payload?.toolCallCount==="number"?$.payload.toolCallCount:0}}});return}case"assistant.delta":{let Q=typeof $.payload?.text==="string"?$.payload.text:"";if(!Q)return;this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_start",contentType:"text",text:Q}}});return}case"assistant.finished":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_end",contentType:"text",text:typeof $.payload?.text==="string"?$.payload.text:void 0}}});return}case"reasoning.delta":{let Q=typeof $.payload?.text==="string"?$.payload.text:"",W=$.payload?.redacted===!0;if(!Q&&!W)return;this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_start",contentType:"reasoning",reasoning:Q,redacted:W}}});return}case"reasoning.finished":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_end",contentType:"reasoning",reasoning:typeof $.payload?.reasoning==="string"?$.payload.reasoning:void 0}}});return}case"agent.done":{this.emitAgentDoneIfNeeded({sessionId:Z,payload:$.payload});return}case"usage.updated":{let Q=SP($.payload);this.events.emit({type:"agent_event",payload:{sessionId:Z,event:Q.event,teamAgentId:Q.teamAgentId,teamRole:Q.teamRole}});return}case"tool.started":{let Q=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(Q&&this.pendingApprovalToolCallIds.delete(Q))return;this.emitToolCallContentStart({sessionId:Z,toolCallId:Q,toolName:typeof $.payload?.toolName==="string"?$.payload.toolName:void 0,toolInput:$.payload?.input});return}case"tool.finished":{let Q=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(Q)this.pendingApprovalToolCallIds.delete(Q);this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_end",contentType:"tool",toolCallId:Q,toolName:typeof $.payload?.toolName==="string"?$.payload.toolName:void 0,output:$.payload?.output,error:typeof $.payload?.error==="string"?$.payload.error:void 0}}});return}case"session.created":case"session.updated":case"session.attached":case"session.detached":{let Q=g$($.payload?.snapshot),W=$.payload?.session;if(Q)this.events.emit({type:"session_snapshot",payload:{sessionId:Z,snapshot:Q}});this.events.emit({type:"status",payload:{sessionId:Z,status:W?.status??"running"}});return}case"session.pending_prompts":{this.events.emit({type:"pending_prompts",payload:{sessionId:Z,prompts:Array.isArray($.payload?.prompts)?$.payload.prompts:[]}});return}case"session.pending_prompt_submitted":{let Q=$.payload?.prompt;if(!Q)return;this.events.emit({type:"pending_prompt_submitted",payload:{sessionId:Z,id:Q.id,prompt:Q.prompt,delivery:Q.delivery,attachmentCount:Q.attachmentCount,userImages:Q.userImages,userFiles:Q.userFiles}});return}case"run.completed":case"run.failed":case"run.aborted":{let Q=g$($.payload?.snapshot),W=typeof $.payload?.reason==="string"?$.payload.reason:$.event==="run.aborted"?"aborted":$.event==="run.failed"?"error":"completed";if(this.emitAgentDoneIfNeeded({sessionId:Z,payload:{...$.payload,reason:W}}),Q?.interactive===!0&&H0(Q.status))return;this.events.emit({type:"ended",payload:{sessionId:Z,reason:W,ts:$.timestamp??Date.now()}});return}default:return}}captureDetachedHubEventError($,Z,Q){try{yF(this.telemetry,{component:"core",operation:$,error:Z,severity:"warn",handled:!0,context:{event:Q.event,sessionId:Q.sessionId,runtimeAddress:this.runtimeAddress}})}catch{}}async handleCapabilityRequest($){let Z=$.sessionId?.trim();if(!Z)return;let Q=typeof $.payload?.targetClientId==="string"?$.payload.targetClientId:void 0;if(Q&&Q!==this.client.getClientId())return;let W=typeof $.payload?.requestId==="string"?$.payload.requestId:"",J=typeof $.payload?.capabilityName==="string"?$.payload.capabilityName:"";if(!W)return;let X=this.sessionClientContributionHandlers.get(Z)?.get(J);if(!X){await this.client.command("capability.respond",{requestId:W,ok:!1,error:`No client contribution handler registered for capability ${J} in session ${Z}.`},Z).catch(()=>{});return}let Y=$.payload?.payload&&typeof $.payload.payload==="object"&&!Array.isArray($.payload.payload)?$.payload.payload:{},j=new AbortController;this.activeCapabilityAbortControllers.set(W,j);let V=(H)=>{this.client.command("capability.progress",{requestId:W,payload:H},Z).catch((B)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_progress",B,$)})};try{let H=await X({payload:Y,abortSignal:j.signal,progress:V});if(j.signal.aborted)return;await this.client.command("capability.respond",{requestId:W,ok:!0,payload:H},Z)}catch(H){if(j.signal.aborted)return;await this.client.command("capability.respond",{requestId:W,ok:!1,error:H instanceof Error?H.message:String(H)},Z)}finally{this.activeCapabilityAbortControllers.delete(W)}}handleCapabilityResolved($){if($.payload?.cancelled!==!0)return;let Z=typeof $.payload.requestId==="string"?$.payload.requestId.trim():"";if(!Z)return;let Q=this.activeCapabilityAbortControllers.get(Z);if(!Q)return;Q.abort(NP($.payload.error))}async handleApprovalRequested($){let Z=$.sessionId?.trim();if(!Z)return;let Q=this.sessionCapabilities.get(Z)?.requestToolApproval??this.defaultCapabilities.requestToolApproval;if(!Q)return;let W=typeof $.payload?.approvalId==="string"?$.payload.approvalId.trim():"",J=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:"",X=typeof $.payload?.toolName==="string"?$.payload.toolName:"";if(!W||!J||!X)return;let Y=$.payload?.policy&&typeof $.payload.policy==="object"&&!Array.isArray($.payload.policy)?$.payload.policy:{autoApprove:!1},j=wP($.payload?.inputJson);this.pendingApprovalToolCallIds.add(J),this.emitToolCallContentStart({sessionId:Z,toolCallId:J,toolName:X,toolInput:j});let V=await Promise.resolve(Q({sessionId:Z,agentId:typeof $.payload?.agentId==="string"?$.payload.agentId:"",conversationId:typeof $.payload?.conversationId==="string"?$.payload.conversationId:Z,iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0,toolCallId:J,toolName:X,input:j,policy:Y})).catch((H)=>({approved:!1,reason:H instanceof Error?H.message:`Tool approval request failed: ${String(H)}`}));await this.client.command("approval.respond",{approvalId:W,approved:V.approved,reason:V.reason},Z).catch(()=>{})}}var pF={};N(pF,{RemoteRuntimeHost:()=>X4});class X4 extends o1{constructor($){super({url:G$($.endpoint),authToken:$.authToken,clientType:$.clientType??"core-remote-runtime",displayName:$.displayName??"core remote runtime",capabilities:$.capabilities},{workspaceRoot:$.workspaceRoot,cwd:$.cwd})}}var rF={};N(rF,{SqliteSessionStore:()=>D1});import{existsSync as hP,mkdirSync as kP}from"node:fs";import{join as IP}from"node:path";import{asBool as h5,asOptionalString as U1,asString as t1,ensureSessionSchema as xP,loadSqliteDb as gP,nowIso as dQ,toBoolInt as k5}from"@cline/shared/db";import{resolveDbDataDir as mP}from"@cline/shared/storage";class D1{sessionsDirPath;db;constructor($={}){this.sessionsDirPath=$.sessionsDir??mP()}init(){this.getRawDb()}ensureSessionsDir(){if(!hP(this.sessionsDirPath))kP(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}sessionDbPath(){return IP(this.ensureSessionsDir(),"sessions.db")}getRawDb(){if(this.db)return this.db;let $=gP(this.sessionDbPath());return xP($,{includeLegacyMigrations:!0}),this.db=$,$}close(){this.db?.close?.(),this.db=void 0}run($,Z=[]){return this.getRawDb().prepare($).run(...Z)}queryOne($,Z=[]){return this.getRawDb().prepare($).get(...Z)??void 0}queryAll($,Z=[]){return this.getRawDb().prepare($).all(...Z)}create($){let Z=dQ();this.run(`INSERT OR REPLACE INTO sessions (
499
+ `))X=X.slice(1);return{frontmatter:J,body:X}}function i0($){if(typeof $!=="string")return;let Z=$.trim();return Z.length>0?Z:void 0}function RC($){if(!Array.isArray($))return;let Z=$.map((Q)=>typeof Q==="string"?Q.trim():"").filter((Q)=>Q.length>0);return Z.length>0?Z:void 0}function mJ($){if(!$||typeof $!=="object"||Array.isArray($))return;return $}function EC($){let Z=mJ($);if(!Z)return;let Q=i0(Z.providerId),W=i0(Z.modelId);if(Q===void 0&&W===void 0)return;return{providerId:Q,modelId:W}}function NC($){if(typeof $!=="string")return;let Z=$.trim().toLowerCase();if(Z==="act"||Z==="plan"||Z==="yolo")return Z;return}function OF($,Z={}){let Q=Array.isArray($)?$:typeof $==="string"?$.split(","):void 0;if(!Q)return;let W=[...new Set(Q.map((J)=>typeof J==="string"?J.trim():"").filter((J)=>J.length>0))];if(Array.isArray($)&&Z.preserveEmptyArray)return W;return W.length>0?W:void 0}var wC=new Set(X$);function CC($){let Z=OF($,{preserveEmptyArray:!0});if(!Z)return;let Q=Z.filter((W)=>!wC.has(W));if(Q.length>0)throw Error(`unknown tool(s): ${Q.join(", ")}`);return Z}var PC=new Set(["rules","skills","plugins"]);function SC($){let Z=OF($,{preserveEmptyArray:!0});if(!Z)return;let Q=Z.filter((W)=>!PC.has(W));if(Q.length>0)throw Error(`unknown extension(s): ${Q.join(", ")}`);return Z}function xJ($){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return;return Math.floor($)}function gJ($){if(typeof $!=="number"||!Number.isFinite($)||$<0)return;return Math.floor($)}function vJ($){if($===null||typeof $!=="object")return JSON.stringify($??null);if(Array.isArray($))return`[${$.map((Q)=>vJ(Q)).join(",")}]`;let Z=Object.entries($).filter(([,Q])=>Q!==void 0);return Z.sort(([Q],[W])=>Q<W?-1:Q>W?1:0),`{${Z.map(([Q,W])=>`${JSON.stringify(Q)}:${vJ(W)}`).join(",")}}`}function qF($,Z){let Q=TC("sha256");return Q.update(vJ($)),Q.update(`
500
+ `),Q.update(Z),Q.digest("hex")}function bC($){return($.split("/").pop()??$).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}var yC=["schedule","timezone"],hC=["event","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds","maxParallel"],kC=["cwd"];function TF($,Z,Q,W,J){return{externalId:$,relativePath:$,triggerKind:Z,body:Q,contentHash:qF(W,Q),error:J}}function f1($,Z,Q,W,J,X){return{externalId:$,relativePath:Z,triggerKind:Q,body:W,contentHash:J,error:X}}function MF($){let Z=$.relativePath.replace(/\\/g,"/"),Q=qC(Z),{frontmatter:W,body:J}=MC($.raw),X={};if(W!==void 0&&W.trim().length>0)try{let U=OC.parse(W);if(U&&typeof U==="object"&&!Array.isArray(U))X=U;else if(U!==null&&U!==void 0)return TF(Z,Q,J,{},"frontmatter must be a YAML mapping")}catch(U){return TF(Z,Q,J,{},U instanceof Error?`failed to parse frontmatter: ${U.message}`:"failed to parse frontmatter")}let Y=qF(X,J),j=i0(X.id),V=j??Z;if(Q!=="schedule"){for(let U of yC)if(X[U]!==void 0)return f1(V,Z,Q,J,Y,`field "${U}" is only allowed on *.cron.md specs`)}for(let U of kC)if(X[U]!==void 0)return f1(V,Z,Q,J,Y,`field "${U}" is no longer supported; cron specs use workspaceRoot as cwd`);if(Q!=="event"){for(let U of hC)if(X[U]!==void 0)return f1(V,Z,Q,J,Y,`field "${U}" is only allowed on .event.md specs`)}let H=i0(X.prompt),B=J.trim(),G=H??(B.length>0?B:void 0);if(!G)return f1(V,Z,Q,J,Y,"prompt is required (frontmatter `prompt` or markdown body)");let K=i0(X.workspaceRoot);if(!K)return f1(V,Z,Q,J,Y,"workspaceRoot is required");let F,A;try{F=CC(X.tools),A=SC(X.extensions)}catch(U){return f1(V,Z,Q,J,Y,U instanceof Error?U.message:String(U))}let L=NC(X.mode);if(X.mode!==void 0&&L===void 0)return f1(V,Z,Q,J,Y,"mode must be one of: act, plan, yolo");let f={id:j,title:i0(X.title)??j??bC(Z),prompt:G,workspaceRoot:K,mode:L??"yolo",systemPrompt:i0(X.systemPrompt),modelSelection:EC(X.modelSelection),maxIterations:xJ(X.maxIterations),timeoutSeconds:xJ(X.timeoutSeconds),tools:F,notesDirectory:i0(X.notesDirectory),extensions:A,source:i0(X.source)??"user",tags:RC(X.tags),enabled:typeof X.enabled==="boolean"?X.enabled:!0,metadata:mJ(X.metadata)},D;if(Q==="schedule"){let U=i0(X.schedule);if(!U)return f1(V,Z,Q,J,Y,"schedule is required for *.cron.md specs");let T=i0(X.timezone);try{Uj(U,T)}catch(z){return f1(V,Z,Q,J,Y,z instanceof Error?z.message:String(z))}D={...f,triggerKind:"schedule",schedule:U,timezone:T}}else if(Q==="event"){let U=i0(X.event);if(!U)return f1(V,Z,Q,J,Y,"event is required for .event.md specs");D={...f,triggerKind:"event",event:U,filters:mJ(X.filters),debounceSeconds:gJ(X.debounceSeconds),dedupeWindowSeconds:gJ(X.dedupeWindowSeconds),cooldownSeconds:gJ(X.cooldownSeconds),maxParallel:xJ(X.maxParallel)}}else D={...f,triggerKind:"one_off"};return{externalId:V,relativePath:Z,triggerKind:Q,body:J,contentHash:Y,spec:D}}function uC($,Z){return vC($,Z).replace(/\\/g,"/")}function dC($){if(!IC($))return[];let Z=[],Q=[$];while(Q.length>0){let W=Q.pop();if(!W)continue;let J;try{J=xC(W,{withFileTypes:!0})}catch{continue}for(let X of J){let Y=`${W}/${X.name}`;if(X.isDirectory()){if(X.name==="reports")continue;Q.push(Y);continue}if(!X.isFile())continue;if(!X.name.endsWith(".md"))continue;Z.push(Y)}}return Z}class cJ{store;cronDir;constructor($){this.store=$.store,this.cronDir=cC($.specs??($.workspaceRoot?{scope:"workspace",workspaceRoot:$.workspaceRoot}:void 0))}getCronDir(){return this.cronDir}async reconcileAll(){let $={scanned:0,upserted:0,invalidParses:0,removed:0,changes:[]},Z=dC(this.cronDir),Q=new Set;for(let J of Z){let X=uC(this.cronDir,J);Q.add(X),$.scanned+=1;let Y=await this.reconcileFile(X,J);if(Y){if($.changes.push(Y),$.upserted+=1,Y.parse.error)$.invalidParses+=1}}let W=this.store.listSpecs({includeRemoved:!1,limit:1e4});for(let J of W)if(!Q.has(J.sourcePath))this.handleFileDeleted(J),$.removed+=1;return this.refreshScheduleNextRunAt(),$}async reconcileFile($,Z){let Q=this.store.getSpecBySourcePath($),W,J;try{W=gC(Z,"utf8"),J=mC(Z).mtimeMs}catch{return}let Y=MF({relativePath:$,raw:W}),j=this.store.upsertSpec({externalId:Y.externalId,sourcePath:$,triggerKind:Y.triggerKind,sourceMtimeMs:J,sourceHash:Y.contentHash,parseStatus:Y.error?"invalid":"valid",parseError:Y.error,spec:Y.spec});if(!Y.error&&Y.triggerKind==="schedule"&&j.record.enabled)this.applyScheduleNextRunAt(j.record,{forceReset:!Q||Q.removed||!Q.enabled||Q.scheduleExpr!==j.record.scheduleExpr||Q.timezone!==j.record.timezone});return{relativePath:$,result:j,parse:Y}}handleFileDeleted($){this.store.markSpecRemoved($.specId),this.store.cancelQueuedRunsForSpec($.specId)}refreshScheduleNextRunAt(){let $=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let Z of $)this.applyScheduleNextRunAt(Z,{forceReset:!1})}applyScheduleNextRunAt($,Z){if(!$.scheduleExpr)return;if(!Z.forceReset&&$.nextRunAt)return;try{let Q=Date.now(),W=$.lastRunAt?Math.max(Q,new Date($.lastRunAt).getTime()):Q,J=i$($.scheduleExpr,W,$.timezone),X=new Date(J).toISOString();if($.nextRunAt!==X)this.store.updateSpecNextRunAt($.specId,X)}catch{}}}import{existsSync as lC,mkdirSync as pC,watch as rC}from"node:fs";import{relative as iC,resolve as nC}from"node:path";var aC=250;class uJ{reconciler;debounceMs;onError;onReconciled;watcher;pending=new Map;disposed=!1;constructor($){this.reconciler=$.reconciler,this.debounceMs=Math.max(0,$.debounceMs??aC),this.onError=$.onError??(()=>{}),this.onReconciled=$.onReconciled??(()=>{})}start(){if(this.disposed)throw Error("CronWatcher disposed");if(this.watcher)return;let $=this.reconciler.getCronDir();try{pC($,{recursive:!0}),this.watcher=rC($,{recursive:!0},(Z,Q)=>{if(!Q)return;let W=String(Q).replace(/\\/g,"/");if(!W.endsWith(".md"))return;if(W.startsWith("reports/"))return;this.scheduleReconcile(W)}),this.watcher.on("error",this.onError)}catch(Z){this.onError(Z)}}stop(){for(let $ of this.pending.values())clearTimeout($);this.pending.clear(),this.watcher?.close(),this.watcher=void 0}dispose(){this.disposed=!0,this.stop()}scheduleReconcile($){let Z=this.pending.get($);if(Z)clearTimeout(Z);let Q=setTimeout(()=>{this.pending.delete($),this.reconcileNow($)},this.debounceMs);this.pending.set($,Q)}async reconcileNow($){try{let Z=nC(this.reconciler.getCronDir(),$);if(!lC(Z)){await this.reconciler.reconcileAll(),await this.onReconciled();return}let Q=iC(this.reconciler.getCronDir(),Z).replace(/\\/g,"/");await this.reconciler.reconcileFile(Q,Z),await this.onReconciled()}catch(Z){this.onError(Z)}}}class P5{store;reconciler;watcher;eventIngress;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new x4({dbPath:$.dbPath});let Z=$.specs;this.reconciler=new cJ({store:this.store,specs:Z}),this.materializer=new P4({store:this.store}),this.eventIngress=new IJ({store:this.store,logger:$.logger}),this.runner=new y4({store:this.store,materializer:this.materializer,runtimeHandlers:$.runtimeHandlers,workspaceRoot:$.workspaceRoot,specs:Z,logger:$.logger,pollIntervalMs:$.pollIntervalMs,claimLeaseSeconds:$.claimLeaseSeconds,globalMaxConcurrency:$.globalMaxConcurrency}),this.watcher=new uJ({reconciler:this.reconciler,debounceMs:$.watcherDebounceMs,onReconciled:()=>{this.materializer.materializeAll()},onError:(Q)=>{let W=$.logger;if(W)if(W.error)W.error("cron.watcher.failed",{error:Q});else W.log("cron.watcher.failed",{error:Q})}})}async start(){if(this.disposed)throw Error("CronService disposed");if(this.started)return;this.started=!0,await this.reconciler.reconcileAll(),this.materializer.materializeAll(),this.watcher.start(),await this.runner.start()}async stop(){this.watcher.stop(),await this.runner.stop(),this.started=!1}async dispose(){if(this.disposed)return;this.disposed=!0,this.watcher.dispose(),await this.runner.dispose(),this.store.close()}listSpecs($){return this.store.listSpecs($)}getSpec($){return this.store.getSpec($)}listRuns($){return this.store.listRuns($)}getRun($){return this.store.getRun($)}listActiveRuns(){return this.store.listRuns({status:"running",limit:200})}listUpcomingRuns($=20){return this.store.listRuns({status:"queued",limit:$})}async reconcileNow(){await this.reconciler.reconcileAll(),this.materializer.materializeAll()}ingestEvent($){return this.eventIngress.ingestEvent($)}listEventLogs($){return this.store.listEventLogs($)}getEventLog($){return this.store.getEventLog($)}}var yF={};N(yF,{manifestToSessionRecord:()=>vQ,listSessionHistoryFromBackend:()=>rJ,listSessionHistory:()=>cQ,hydrateSessionHistory:()=>bF});import{readdir as eC,readFile as CF}from"node:fs/promises";import{join as PF}from"node:path";import{formatDisplayUserInput as $P,normalizeUserInput as ZP}from"@cline/shared";import{resolveSessionDataDir as SF}from"@cline/shared/storage";import{existsSync as sC}from"node:fs";import{readFile as oC}from"node:fs/promises";import{formatDisplayUserInput as RF}from"@cline/shared";class S5{listeners=new Set;subscribe($,Z){let Q={listener:$,sessionId:Z?.sessionId?.trim()||void 0};return this.listeners.add(Q),()=>{this.listeners.delete(Q)}}emit($){let Z=$.payload.sessionId?.trim();for(let Q of this.listeners){if(Q.sessionId&&Q.sessionId!==Z)continue;Q.listener($)}}get size(){return this.listeners.size}}async function I$($){let Z=$?.trim();if(!Z||!sC(Z))return[];try{let Q=(await oC(Z,"utf8")).trim();if(!Q)return[];let W=JSON.parse(Q);if(Array.isArray(W))return EF(W);if(W&&typeof W==="object"&&!Array.isArray(W)){let J=W.messages;if(Array.isArray(J))return EF(J)}return[]}catch{return[]}}function tC($){if($.role!=="user")return $;if(typeof $.content==="string")return{...$,content:RF($.content)};return{...$,content:$.content.map((Z)=>{if(Z.type!=="text"||typeof Z.text!=="string")return Z;return{...Z,text:RF(Z.text)}})}}function EF($){return $.map(tC)}function dJ($){return $?{...$}:void 0}async function NF($,Z){if(!($.hookName==="tool_call"||!!$.parent_agent_id))return;await Z.queueSpawnRequest($);let W=await Z.upsertSubagentSessionFromHook($);if(!W)return;await Z.appendSubagentHookAudit(W,$),await Z.applySubagentStatus(W,$)}function b5($){if(typeof $!=="string")return;let Z=$.trim();return Z.length>0?Z:void 0}function n0($){let Z=b5($);if(!Z)return;return Z.toLowerCase()==="unknown"?void 0:Z}function mQ($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function QP($){if(!$||typeof $!=="object"||Array.isArray($))return;return{...$}}function pJ($){let Z=$??200;return Number.isFinite(Z)?Math.max(0,Math.floor(Z)):200}function WP($){if($===0)return 0;return Math.min(Math.max($*2,20),2000)}function JP($){return $.isSubagent!==!0&&!b5($.parentSessionId)}function XP($){let Z=$.match(/\d{13,}/g);if(!Z||Z.length===0)return 0;let Q=0;for(let W of Z){let J=Number.parseInt(W,10);if(Number.isFinite(J)&&J>Q)Q=J}return Q}function vQ($){return{sessionId:$.session_id,source:$.source,pid:$.pid,startedAt:$.started_at,endedAt:$.ended_at??null,exitCode:$.exit_code??null,status:$.status,interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspaceRoot:$.workspace_root,teamName:$.team_name,enableTools:$.enable_tools,enableSpawn:$.enable_spawn,enableTeams:$.enable_teams,isSubagent:!1,prompt:$.prompt,metadata:$.metadata,messagesPath:$.messages_path,updatedAt:$.ended_at??$.started_at}}async function YP($){let Z=pJ($);if(Z===0)return[];let Q=SF(),J=(await eC(Q,{withFileTypes:!0}).catch(()=>[])).filter((Y)=>Y.isDirectory()).map((Y)=>({entry:Y,recency:XP(Y.name.trim())})).sort((Y,j)=>j.recency-Y.recency||j.entry.name.localeCompare(Y.entry.name));return(await Promise.all(J.map(async({entry:Y})=>{let j=Y.name.trim();if(!j)return;let V=PF(Q,j,`${j}.json`),H=await CF(V,"utf8").catch(()=>{return});if(!H)return;let B;try{B=JSON.parse(H)}catch{return}let G=b0.safeParse(B);if(!G.success)return;return vQ(G.data)}))).filter((Y)=>Boolean(Y)).sort((Y,j)=>j.startedAt.localeCompare(Y.startedAt)).slice(0,Z)}async function jP($,Z,Q){let W=pJ(Z);if(W===0)return await $.listSessions(0),[];let J=Q.includeSubagents?W:WP(W),X=await $.listSessions(J);return(Q.includeSubagents?X:X.filter(JP)).slice(0,W)}function VP($){if(typeof $==="string")return $.trim();let Z=[];for(let Q of $){if(!Q||typeof Q!=="object")continue;let W=Q;if(W.type!=="text")continue;let J=W.text?.trim();if(J)Z.push(J)}return Z.join(`
501
+ `).trim()}function wF($){return $.replace(/\s+/g," ").trim()}function HP($,Z){if($.length<=Z)return $;return`${$.slice(0,Math.max(0,Z-3)).trimEnd()}...`}function BP($){for(let Z of["user","assistant"])for(let Q of $){if(Q.role!==Z)continue;let W=wF(VP(Q.content));if(!W)continue;let J=Z==="user"?wF($P(W)):W,X=ZP(J.split(`
502
+ `)[0]??J);return HP(X,50)}return}function GP($){let Z=0;for(let Q of $)Z+=mQ(Q.metrics?.cost)??0;return Z}function KP($){let Z,Q;for(let W=$.length-1;W>=0;W-=1){let J=$[W];if(!Z)Z=n0(J.modelInfo?.provider);if(!Q)Q=n0(J.modelInfo?.id);if(Z&&Q)break}return{provider:Z,model:Q}}function FP($){return n0($?.provider)??n0($?.provider&&typeof $.provider==="object"&&!Array.isArray($.provider)?$.provider.id:void 0)}function AP($){return n0($?.model)??n0($?.model&&typeof $.model==="object"&&!Array.isArray($.model)?$.model.id:void 0)}function lJ($,Z){let Q=QP($.metadata),W=b5(Z?.title)??b5(Q?.title),J=mQ(Z?.totalCost)??mQ(Q?.totalCost),X=Q||W!==void 0||J!==void 0?{...Q??{},...W!==void 0?{title:W}:{},...J!==void 0?{totalCost:J}:{}}:void 0;return{...$,provider:n0(Z?.provider)??n0($.provider)??FP(Q)??"",model:n0(Z?.model)??n0($.model)??AP(Q)??"",metadata:X}}function fP($){let Z=$.content;if(!Array.isArray(Z))return!1;return Z.some((Q)=>!!Q&&typeof Q==="object"&&Q.type==="tool-call")}function UP($,Z){if($.status!=="running"||$.interactive!==!0)return!1;let Q=Z.at(-1);return Q?.role==="assistant"&&!fP(Q)}async function DP($,Z){return await Promise.all(Z.map(async(Q)=>{if(Q.status!=="running"||Q.interactive!==!0)return Q;let W=await $.readSessionMessages(Q.sessionId);return UP(Q,W)?{...Q,status:"idle"}:Q}))}async function bF($,Z){return await Promise.all(Z.map(async(Q)=>{let W=lJ(Q),J=Boolean(b5(W.metadata?.title)),X=Boolean(n0(W.provider)),Y=Boolean(n0(W.model)),j=mQ(W.metadata?.totalCost),V=j!==void 0&&j>0;if(J&&X&&Y&&V)return W;let H=await $.readSessionMessages(Q.sessionId);if(H.length===0)return W;let B=KP(H),G=GP(H);return lJ(Q,{title:J?void 0:BP(H),provider:X?void 0:B.provider,model:Y?void 0:B.model,totalCost:V||G<=0?void 0:G})}))}async function cQ($,Z={}){let Q=pJ(Z.limit),W=Z.includeSubagents===!0,J=await jP($,Q,{includeSubagents:W}),X=Z.includeManifestFallback===!0&&J.length<Q?await YP(Math.min(Math.max(Q*2,100),500)):[],Y=new Map;for(let H of[...J,...X]){if(Y.has(H.sessionId))continue;Y.set(H.sessionId,H)}let j=X.length===0?J:Array.from(Y.values()).sort((H,B)=>B.startedAt.localeCompare(H.startedAt)).slice(0,Q),V=await DP($,j);if(Z.hydrate===!1)return V.map((H)=>lJ(H));return await bF($,V)}async function LP($){let Z=$.trim();if(!Z)return;let Q=PF(SF(),Z,`${Z}.json`),W=await CF(Q,"utf8").catch(()=>{return});if(!W)return;try{let J=b0.safeParse(JSON.parse(W));return J.success?J.data.messages_path:void 0}catch{return}}async function rJ($,Z={}){let Q=new Map;return await cQ({listSessions:async(J)=>{let X=await $.listSessions(J);Q.clear();for(let Y of X)Q.set(Y.sessionId,Y);return X.map(v6)},readSessionMessages:async(J)=>{let X=Q.get(J)?.messagesPath??await LP(J);return await I$(X)}},Z)}var zA={};N(zA,{resolveSessionBackend:()=>KX,createRuntimeHost:()=>K4});import{captureSdkError as LA}from"@cline/shared";var rF={};N(rF,{HubRuntimeHost:()=>o1});import{captureSdkError as kF,createSessionId as IF,HUB_CHECKPOINT_CAPABILITY as OP,HUB_COMPACTION_CAPABILITY as qP,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as MP,HUB_HOOK_CAPABILITY_PREFIX as RP,HUB_MISTAKE_LIMIT_CAPABILITY as EP,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as NP,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as wP,isHubToolExecutorName as CP}from"@cline/shared";var hF={};N(hF,{createCoreSessionSnapshot:()=>U1,coreSessionSnapshotToRecord:()=>uQ});function _P($){return $?JSON.parse(JSON.stringify($)):void 0}function zP($){return $?JSON.parse(JSON.stringify($)):void 0}function TP($){let Z=$?.checkpoint&&typeof $.checkpoint==="object"&&!Array.isArray($.checkpoint)?$.checkpoint:void 0,W=(Array.isArray(Z?.history)?Z.history:[]).filter((Y)=>!!Y&&typeof Y==="object"&&!Array.isArray(Y)).flatMap((Y)=>{let j=typeof Y.ref==="string"?Y.ref.trim():"",V=Number(Y.createdAt),H=Number(Y.runCount);if(!j||!Number.isFinite(V)||!Number.isInteger(H))return[];return[{ref:j,createdAt:V,runCount:H,...Y.kind==="stash"||Y.kind==="commit"?{kind:Y.kind}:{}}]}),J=W.at(-1),X=$?.checkpointEnabled===!0?!0:void 0;if(!X&&W.length===0)return;return{...X?{enabled:X}:{},...J?{latest:J}:{},history:W}}function U1($){let{session:Z}=$,Q=_P(Z.metadata);return{version:1,sessionId:Z.sessionId,source:Z.source,status:Z.status,createdAt:Z.startedAt,updatedAt:Z.updatedAt,endedAt:Z.endedAt??null,exitCode:Z.exitCode??null,interactive:Z.interactive,workspace:{cwd:Z.cwd,root:Z.workspaceRoot},model:{providerId:Z.provider,modelId:Z.model},capabilities:{enableTools:Z.enableTools,enableSpawn:Z.enableSpawn,enableTeams:Z.enableTeams},lineage:{...Z.parentSessionId?{parentSessionId:Z.parentSessionId}:{},...Z.parentAgentId?{parentAgentId:Z.parentAgentId}:{},...Z.agentId?{agentId:Z.agentId}:{},...Z.conversationId?{conversationId:Z.conversationId}:{},isSubagent:Z.isSubagent},...Z.teamName?{team:{name:Z.teamName}}:{},...Z.prompt?{prompt:Z.prompt}:{},...Q?{metadata:Q}:{},...Z.messagesPath?{artifacts:{messagesPath:Z.messagesPath}}:{},...$.messages?{messages:zP($.messages)}:{},...$.usage?{usage:{...$.usage}}:{},...$.aggregateUsage?{aggregateUsage:{...$.aggregateUsage}}:{},...(()=>{let W=TP(Q);return W?{checkpoint:W}:{}})()}}function uQ($){return{sessionId:$.sessionId,parentSessionId:$.lineage.parentSessionId,agentId:$.lineage.agentId,parentAgentId:$.lineage.parentAgentId,conversationId:$.lineage.conversationId,isSubagent:$.lineage.isSubagent,source:$.source,startedAt:$.createdAt,endedAt:$.endedAt??void 0,exitCode:$.exitCode??void 0,status:$.status,interactive:$.interactive,provider:$.model.providerId,model:$.model.modelId,cwd:$.workspace.cwd,workspaceRoot:$.workspace.root,teamName:$.team?.name,enableTools:$.capabilities.enableTools,enableSpawn:$.capabilities.enableSpawn,enableTeams:$.capabilities.enableTeams,prompt:$.prompt,metadata:$.metadata,updatedAt:$.updatedAt,messagesPath:$.artifacts?.messagesPath}}function J4($){if(!$)return;return JSON.parse(JSON.stringify($))}var PP=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function xF($){if(!$||typeof $!=="object"||Array.isArray($))return;return JSON.parse(JSON.stringify($))}function gF($){if(!$)return;let{userInstructionService:Z,...Q}=$;return JSON.parse(JSON.stringify(Q))}function mF($){let Z=$&&typeof $==="object"&&!Array.isArray($)?$:{};return{agentId:typeof Z.agentId==="string"?Z.agentId:"",conversationId:typeof Z.conversationId==="string"?Z.conversationId:"",iteration:typeof Z.iteration==="number"?Z.iteration:0,metadata:Z.metadata&&typeof Z.metadata==="object"&&!Array.isArray(Z.metadata)?Z.metadata:void 0}}function h2($,Z,Q){$.manifest.push(Z),$.handlers.set(Z.capabilityName,Q)}function vF($,Z){let Q={manifest:[],handlers:new Map};for(let J of Object.keys(Z.toolExecutors??{}).filter(CP)){let X=Z.toolExecutors?.[J];if(typeof X!=="function")continue;h2(Q,{kind:"toolExecutor",executor:J,capabilityName:`${NP}${J}`},async({payload:Y,abortSignal:j})=>{let V=Array.isArray(Y.args)?[...Y.args]:[],H={...mF(Y.context),signal:j};return{result:await X(...V,H)}})}for(let J of $?.extraTools??[])h2(Q,{kind:"tool",name:J.name,description:J.description,inputSchema:J4(J.inputSchema)??{},...J.lifecycle?{lifecycle:J4(J.lifecycle)}:{},capabilityName:`${MP}${J.name}`},async({payload:X,abortSignal:Y,progress:j})=>{let V={...mF(X.context),signal:Y};return{result:await J.execute(X.input,{...V,emitUpdate:(B)=>{j({update:B})}})}});let W=$?.hooks;if(W)for(let J of PP){let X=W[J];if(typeof X!=="function")continue;h2(Q,{kind:"hook",name:J,capabilityName:`${RP}${J}`},async({payload:Y})=>({control:await X(Y.context)}))}if($?.compaction?.compact){let J=$.compaction.compact;h2(Q,{kind:"compaction",capabilityName:qP,config:xF($.compaction)},async({payload:X})=>({result:await J(X.context)}))}if($?.checkpoint?.createCheckpoint){let J=$.checkpoint.createCheckpoint;h2(Q,{kind:"checkpoint",capabilityName:OP,config:xF($.checkpoint)},async({payload:X})=>({result:await J(X.context)}))}if($?.onConsecutiveMistakeLimitReached){let J=$.onConsecutiveMistakeLimitReached;h2(Q,{kind:"mistakeLimit",capabilityName:EP},async({payload:X})=>({result:await J(X.context)}))}if($?.userInstructionService){let J=$.userInstructionService;h2(Q,{kind:"userInstructionService",capabilityName:wP},async()=>{return await J.start().catch(()=>{}),{snapshot:{records:{skill:J.listRecords("skill"),rule:J.listRecords("rule"),workflow:J.listRecords("workflow")},runtimeCommands:J.listRuntimeCommands()}}})}return Q}function lF($){if(typeof $==="string"&&$.trim())return $.trim();if($ instanceof Error)return $.message.trim()||void 0;if($&&typeof $==="object"&&"message"in $){let Z=$.message;if(typeof Z==="string"&&Z.trim())return Z.trim()}return}function SP($){return lF($)??"Capability request was cancelled."}function bP($){if(typeof $!=="string")return $;try{return JSON.parse($)}catch{return $}}function yP($){return $==="completed"||$==="max_iterations"||$==="aborted"||$==="mistake_limit"||$==="error"}function hP($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$,Q=typeof Z.inputTokens==="number"?Z.inputTokens:void 0,W=typeof Z.outputTokens==="number"?Z.outputTokens:void 0;if(Q===void 0||W===void 0)return;return{inputTokens:Q,outputTokens:W,cacheReadTokens:typeof Z.cacheReadTokens==="number"?Z.cacheReadTokens:0,cacheWriteTokens:typeof Z.cacheWriteTokens==="number"?Z.cacheWriteTokens:0,totalCost:typeof Z.totalCost==="number"?Z.totalCost:0}}function cF($){if(!$)return;return{inputTokens:typeof $.inputTokens==="number"?$.inputTokens:0,outputTokens:typeof $.outputTokens==="number"?$.outputTokens:0,cacheReadTokens:typeof $.cacheReadTokens==="number"?$.cacheReadTokens:0,cacheWriteTokens:typeof $.cacheWriteTokens==="number"?$.cacheWriteTokens:0,totalCost:typeof $.totalCost==="number"?$.totalCost:0}}function iJ($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function x$($,Z){return iJ($?.[Z])??0}function kP($){let Z=$?.delta&&typeof $.delta==="object"?$.delta:void 0,Q=$?.totals&&typeof $.totals==="object"?$.totals:void 0,W=$?.agent&&typeof $.agent==="object"?$.agent:void 0,J=W?.teamRole==="teammate"||W?.teamRole==="lead"?W.teamRole:void 0;return{event:{type:"usage",agentId:typeof W?.agentId==="string"?W.agentId:void 0,conversationId:typeof W?.conversationId==="string"?W.conversationId:void 0,parentAgentId:typeof W?.parentAgentId==="string"?W.parentAgentId:void 0,inputTokens:x$(Z,"inputTokens"),outputTokens:x$(Z,"outputTokens"),cacheReadTokens:x$(Z,"cacheReadTokens"),cacheWriteTokens:x$(Z,"cacheWriteTokens"),cost:iJ(Z?.totalCost),totalInputTokens:x$(Q,"inputTokens"),totalOutputTokens:x$(Q,"outputTokens"),totalCacheReadTokens:x$(Q,"cacheReadTokens"),totalCacheWriteTokens:x$(Q,"cacheWriteTokens"),totalCost:iJ(Q?.totalCost)},teamAgentId:typeof W?.teamAgentId==="string"?W.teamAgentId:void 0,teamRole:J}}function IP($){let Z=$?.result&&typeof $.result==="object"&&!Array.isArray($.result)?$.result:void 0,Q=$?.reason??Z?.finishReason,W=yP(Q)?Q:Q==="failed"?"error":"completed",J=hP($?.usage??Z?.usage);return{type:"done",reason:W,text:typeof $?.text==="string"?$.text:typeof Z?.text==="string"?Z.text:"",iterations:typeof $?.iterations==="number"?$.iterations:typeof Z?.iterations==="number"?Z.iterations:0,usage:J}}function dQ($,Z){return $.error?.message??`hub command failed: ${Z}`}function y5($){switch($){case"idle":case"completed":return"completed";case"failed":return"failed";case"aborted":return"cancelled";default:return"running"}}function pF($){let Z=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):void 0;return{sessionId:$.sessionId,parentSessionId:typeof Z?.parentSessionId==="string"?Z.parentSessionId:void 0,agentId:$.runtimeSession?.agentId||(typeof Z?.agentId==="string"?Z.agentId:void 0),parentAgentId:typeof Z?.parentAgentId==="string"?Z.parentAgentId:void 0,conversationId:typeof Z?.conversationId==="string"?Z.conversationId:void 0,isSubagent:typeof Z?.isSubagent==="boolean"?Z.isSubagent:!1,source:typeof Z?.source==="string"?Z.source:T0.CORE,pid:typeof Z?.pid==="number"?Z.pid:void 0,startedAt:new Date($.createdAt).toISOString(),endedAt:y5($.status)==="running"?void 0:new Date($.updatedAt).toISOString(),exitCode:y5($.status)==="completed"?0:y5($.status)==="failed"?1:void 0,status:y5($.status),interactive:Z?.interactive===!0,provider:typeof Z?.provider==="string"?Z.provider:"hub",model:typeof Z?.model==="string"?Z.model:"hub",cwd:$.cwd?.trim()||$.workspaceRoot,workspaceRoot:$.workspaceRoot,teamName:typeof Z?.teamName==="string"?Z.teamName:void 0,enableTools:$.runtimeOptions?.enableTools??Z?.enableTools===!0,enableSpawn:$.runtimeOptions?.enableSpawn??Z?.enableSpawn===!0,enableTeams:$.runtimeOptions?.enableTeams??Z?.enableTeams===!0,prompt:typeof Z?.prompt==="string"?Z.prompt:void 0,metadata:Z,updatedAt:new Date($.updatedAt).toISOString(),messagesPath:typeof Z?.messagesPath==="string"?Z.messagesPath:void 0,hookPath:typeof Z?.hookPath==="string"?Z.hookPath:void 0}}function g$($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$;return Z.version===1&&typeof Z.sessionId==="string"?JSON.parse(JSON.stringify(Z)):void 0}function xP($){let Z=g$($?.snapshot);if(Z)return uQ(Z);let Q=$?.session;return Q?pF(Q):void 0}function uF($,Z,Q){let W=Q?.workspaceRoot?.trim()||Z.config.workspaceRoot||Z.config.cwd;return b0.parse({version:1,session_id:$,source:Z.source??T0.CORE,pid:process.pid,started_at:new Date(Q?.createdAt??Date.now()).toISOString(),status:y5(Q?.status),interactive:Z.interactive===!0,provider:Z.config.providerId,model:Z.config.modelId,cwd:Q?.cwd?.trim()||Z.config.cwd,workspace_root:W,team_name:Z.config.teamName,enable_tools:Z.config.enableTools,enable_spawn:Z.config.enableSpawnAgent,enable_teams:Z.config.enableAgentTeams,prompt:Z.prompt?.trim()||void 0,metadata:Z.sessionMetadata&&Object.keys(Z.sessionMetadata).length>0?Z.sessionMetadata:void 0})}function dF($,Z){return b0.parse({version:1,session_id:$.sessionId,source:$.source,pid:process.pid,started_at:$.createdAt,status:$.status,interactive:$.interactive,provider:$.model.providerId,model:$.model.modelId,cwd:$.workspace.cwd,workspace_root:$.workspace.root,team_name:$.team?.name,enable_tools:$.capabilities.enableTools,enable_spawn:$.capabilities.enableSpawn,enable_teams:$.capabilities.enableTeams,prompt:($.prompt??Z.prompt?.trim())||void 0,metadata:$.metadata,messages_path:$.artifacts?.messagesPath})}class o1{runtimeAddress;pendingPrompts;client;clientOptions;clientContext;events=new S5;sessionCapabilities=new Map;sessionClientContributionHandlers=new Map;sessionSubscriptions=new Map;pendingApprovalToolCallIds=new Set;agentDoneEmittedForCurrentRunBySession=new Set;activeCapabilityAbortControllers=new Map;defaultCapabilities;telemetry;constructor($,Z){this.clientContext=Z,this.clientOptions={authToken:$.authToken,clientType:$.clientType??"core-hub-runtime",displayName:$.displayName??"core hub runtime",workspaceRoot:Z?.workspaceRoot,cwd:Z?.cwd},this.defaultCapabilities=M0($.capabilities)??{},this.telemetry=$.telemetry,this.runtimeAddress=$.url,this.pendingPrompts={list:(Q)=>this.requestPendingPromptsList(Q),update:(Q)=>this.requestPendingPromptUpdate(Q),delete:(Q)=>this.requestPendingPromptDelete(Q)},this.client=this.createClient($.url)}createClient($){return new W1({...this.clientOptions,url:$})}async replaceClient($){let Z=this.client;this.client=this.createClient($),this.runtimeAddress=$,await Promise.resolve(Z.dispose()).catch(()=>{return})}async recoverLocalHubStartupDeadlock($){if(!o9($,"session.create"))return!1;let Z=await t9({url:this.client.getUrl(),workspaceRoot:this.clientContext?.workspaceRoot,cwd:this.clientContext?.cwd}).catch(()=>{return});if(!Z)return!1;return await this.replaceClient(Z),!0}registerPlannedSession($,Z,Q){if(this.sessionCapabilities.set($,Z),Q.size>0)this.sessionClientContributionHandlers.set($,Q);this.ensureSessionSubscription($)}cleanupPlannedSession($){this.sessionCapabilities.delete($),this.sessionClientContributionHandlers.delete($),this.disposeSessionSubscription($)}async connect(){await this.client.connect()}async startSession($){let Z=this.resolveCapabilities($),Q=vF($.localRuntime,Z),W=$.config.sessionId?.trim()||IF(),J=()=>this.client.command("session.create",{workspaceRoot:$.config.workspaceRoot?.trim()||$.config.cwd,cwd:$.config.cwd,sessionConfig:J4({...$.config,sessionId:W}),metadata:{...$.sessionMetadata??{},source:$.source??T0.CORE,provider:$.config.providerId,model:$.config.modelId,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,teamName:$.config.teamName,prompt:$.prompt,interactive:$.interactive===!0},runtimeOptions:{...Q.manifest.length>0?{clientContributions:Q.manifest}:{},...$.localRuntime?.configExtensions?{configExtensions:$.localRuntime.configExtensions}:{}},toolPolicies:J4($.toolPolicies),initialMessages:$.initialMessages});this.registerPlannedSession(W,Z,Q.handlers);let X;try{X=await J()}catch(H){if(this.cleanupPlannedSession(W),await this.recoverLocalHubStartupDeadlock(H)){this.registerPlannedSession(W,Z,Q.handlers);try{X=await J()}catch(B){throw this.cleanupPlannedSession(W),B}}else throw H}let Y=g$(X.payload?.snapshot),j=X.payload?.session,V=(Y?.sessionId??j?.sessionId)?.trim();if(!V)throw this.cleanupPlannedSession(W),Error("Hub runtime did not return a session id.");if(V!==W)this.cleanupPlannedSession(W),this.registerPlannedSession(V,Z,Q.handlers);return{sessionId:V,manifest:Y?dF(Y,$):uF(V,$,j),manifestPath:"",messagesPath:"",result:void 0}}async restoreSession($){let Z=$.sessionId.trim();if(!Z)throw Error("sessionId is required");let Q=$.restore?.messages!==!1;if(Q&&!$.start)throw Error("start is required when restore.messages is true");let W=$.start,J=W?this.resolveCapabilities(W):void 0,X=W?vF(W.localRuntime,J??{}):{manifest:[],handlers:new Map},Y=W?W.config.sessionId?.trim()||IF():void 0;if(Y&&J)this.sessionCapabilities.set(Y,J);if(Y&&X.handlers.size>0)this.sessionClientContributionHandlers.set(Y,X.handlers),this.ensureSessionSubscription(Y);let j;try{j=await this.client.command("session.restore",{sessionId:Z,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...W?{workspaceRoot:W.config.workspaceRoot?.trim()||W.config.cwd,cwd:W.config.cwd??$.cwd,sessionConfig:J4({...W.config,sessionId:Y}),metadata:{...W.sessionMetadata??{},source:W.source??T0.CORE,provider:W.config.providerId,model:W.config.modelId,enableTools:W.config.enableTools,enableSpawn:W.config.enableSpawnAgent,enableTeams:W.config.enableAgentTeams,teamName:W.config.teamName,prompt:W.prompt,interactive:W.interactive===!0},runtimeOptions:{...X.manifest.length>0?{clientContributions:X.manifest}:{},...W.localRuntime?.configExtensions?{configExtensions:W.localRuntime.configExtensions}:{}},toolPolicies:J4(W.toolPolicies)}:{}},Z)}catch(F){if(Y)this.sessionCapabilities.delete(Y),this.sessionClientContributionHandlers.delete(Y),this.disposeSessionSubscription(Y);throw F}if(!j.ok){let F=typeof j.payload?.error==="string"?j.payload.error:"session.restore failed";if(Y)this.sessionCapabilities.delete(Y),this.sessionClientContributionHandlers.delete(Y),this.disposeSessionSubscription(Y);throw Error(F)}let V=g$(j.payload?.snapshot),H=j.payload?.session,B=(V?.sessionId??H?.sessionId)?.trim();if(Q&&!B){if(Y)this.sessionCapabilities.delete(Y),this.sessionClientContributionHandlers.delete(Y),this.disposeSessionSubscription(Y);throw Error("Hub checkpoint restore returned no session id")}if(B&&Y&&B!==Y)this.sessionCapabilities.delete(Y),this.sessionClientContributionHandlers.delete(Y),this.disposeSessionSubscription(Y);if(B&&J)this.sessionCapabilities.set(B,J);if(B&&X.handlers.size>0)this.sessionClientContributionHandlers.set(B,X.handlers);if(B)this.ensureSessionSubscription(B);let G=Array.isArray(j.payload?.messages)?j.payload.messages:void 0,K=j.payload?.checkpoint;if(!K)throw Error("Hub checkpoint restore returned no checkpoint");return{sessionId:B,startResult:B?{sessionId:B,manifest:V?dF(V,W??{}):uF(B,W??{},H),manifestPath:"",messagesPath:"",result:void 0}:void 0,messages:G,checkpoint:K}}async runTurn($){return this.ensureSessionSubscription($.sessionId),(await this.client.command("run.start",{sessionId:$.sessionId,input:$.prompt,mode:$.mode,attachments:($.userImages?.length??0)>0||($.userFiles?.length??0)>0?{...$.userImages?.length?{userImages:$.userImages}:{},...$.userFiles?.length?{userFiles:$.userFiles}:{}}:void 0,delivery:$.delivery,timeoutMs:$.timeoutMs},$.sessionId,{timeoutMs:null})).payload?.result}async requestPendingPromptsList($){this.ensureSessionSubscription($.sessionId);let Z=await this.client.command("session.pending_prompts",{sessionId:$.sessionId},$.sessionId);return Array.isArray(Z.payload?.prompts)?Z.payload.prompts:[]}async requestPendingPromptUpdate($){this.ensureSessionSubscription($.sessionId);let Z=await this.client.command("session.update_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(Z.payload?.prompts)?Z.payload.prompts:[],prompt:Z.payload?.prompt,updated:Z.payload?.updated===!0}}async requestPendingPromptDelete($){this.ensureSessionSubscription($.sessionId);let Z=await this.client.command("session.remove_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(Z.payload?.prompts)?Z.payload.prompts:[],prompt:Z.payload?.prompt,removed:Z.payload?.removed===!0}}async getAccumulatedUsage($){let Z=await this.client.command("session.get",{includeSnapshot:!0},$),Q=g$(Z.payload?.snapshot);if(Q){let Y=Q.usage?{...Q.usage}:void 0,j=Q.aggregateUsage?{...Q.aggregateUsage}:void 0;return Y||j?{usage:Y,aggregateUsage:j}:void 0}let W=Z.payload?.session,J=cF(W?.usage),X=cF(W?.aggregateUsage);return J||X?{usage:J,aggregateUsage:X}:void 0}async abort($,Z){await this.client.command("run.abort",{sessionId:$,reason:lF(Z)},$)}async stopSession($){this.sessionCapabilities.delete($),this.disposeSessionSubscription($),await this.client.command("session.detach",{sessionId:$},$)}async dispose(){for(let[$,Z]of this.sessionSubscriptions){Z();try{await this.client.command("session.detach",{sessionId:$},$)}catch{}}this.sessionSubscriptions.clear(),this.sessionCapabilities.clear(),this.agentDoneEmittedForCurrentRunBySession.clear();for(let $ of this.activeCapabilityAbortControllers.values())$.abort("Hub runtime host disposed.");this.activeCapabilityAbortControllers.clear(),await this.client.dispose()}async getSession($){let Z;try{Z=await this.client.command("session.get",void 0,$)}catch(Q){if(I1(Q))return;throw Q}return xP(Z.payload)}async listSessions($=100){let Z=await this.client.command("session.list",{limit:$}),Q=Array.isArray(Z.payload?.snapshots)?Z.payload.snapshots.flatMap((J)=>{let X=g$(J);return X?[uQ(X)]:[]}):[];if(Q.length>0)return Q;return(Z.payload?.sessions??[]).map(pF)}async listSettings($){let Z=await this.client.command("settings.list",gF($));if(!Z.ok)throw Error(dQ(Z,"settings.list"));return Z.payload?.snapshot}async toggleSetting($){let Z=await this.client.command("settings.toggle",gF($));if(!Z.ok)throw Error(dQ(Z,"settings.toggle"));return{snapshot:Z.payload?.snapshot,changedTypes:Array.isArray(Z.payload?.changedTypes)?Z.payload.changedTypes:[]}}async deleteSession($){return this.sessionCapabilities.delete($),this.disposeSessionSubscription($),(await this.client.command("session.delete",{sessionId:$})).payload?.deleted===!0}async updateSession($,Z){let Q={...Z.metadata??{}};if(typeof Z.prompt==="string")Q.prompt=Z.prompt;if(typeof Z.title==="string")Q.title=Z.title;return{updated:(await this.client.command("session.update",{sessionId:$,metadata:Q})).ok}}async readSessionMessages($){let Z=$.trim();if(!Z)return[];let Q=await this.client.command("session.messages",{sessionId:Z},Z);if(!Q.ok)throw kF(this.telemetry,{component:"core",operation:"hub.runtime_host.read_session_messages",error:Error(dQ(Q,"session.messages")),severity:Q.error?.code==="session_not_found"?"warn":"error",handled:!0,context:{command:"session.messages",sessionId:Z,errorCode:Q.error?.code,runtimeAddress:this.runtimeAddress}}),Error(dQ(Q,"session.messages"));let W=Q.payload?.messages;return Array.isArray(W)?W:[]}async dispatchHookEvent($){await this.client.command("session.hook",{payload:$})}subscribe($,Z){return this.events.subscribe($,Z)}ensureSessionSubscription($){let Z=$.trim();if(!Z||this.sessionSubscriptions.has(Z))return;let Q=this.client.subscribe((W)=>{this.handleHubEvent(W)},{sessionId:Z});this.sessionSubscriptions.set(Z,typeof Q==="function"?Q:()=>{})}disposeSessionSubscription($){let Z=$.trim();if(!Z)return;this.sessionSubscriptions.get(Z)?.(),this.sessionSubscriptions.delete(Z),this.agentDoneEmittedForCurrentRunBySession.delete(Z)}resolveCapabilities($){return M0(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:IP($.payload)}})}handleHubEvent($){let Z=$.sessionId?.trim();if($.event==="capability.requested"){this.handleCapabilityRequest($).catch((Q)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_request",Q,$)});return}if($.event==="capability.resolved"){this.handleCapabilityResolved($);return}if($.event==="approval.requested"){this.handleApprovalRequested($).catch((Q)=>{this.captureDetachedHubEventError("hub.runtime_host.approval_request",Q,$)});return}if(!Z)return;switch($.event){case"run.started":{this.agentDoneEmittedForCurrentRunBySession.delete(Z);let Q=g$($.payload?.snapshot),W=$.payload?.session;if(Q)this.events.emit({type:"session_snapshot",payload:{sessionId:Z,snapshot:Q}});this.events.emit({type:"status",payload:{sessionId:Z,status:W?.status??"running"}});return}case"iteration.started":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"iteration_start",iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0}}});return}case"iteration.finished":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"iteration_end",iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0,hadToolCalls:$.payload?.hadToolCalls===!0,toolCallCount:typeof $.payload?.toolCallCount==="number"?$.payload.toolCallCount:0}}});return}case"assistant.delta":{let Q=typeof $.payload?.text==="string"?$.payload.text:"";if(!Q)return;this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_start",contentType:"text",text:Q}}});return}case"assistant.finished":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_end",contentType:"text",text:typeof $.payload?.text==="string"?$.payload.text:void 0}}});return}case"reasoning.delta":{let Q=typeof $.payload?.text==="string"?$.payload.text:"",W=$.payload?.redacted===!0;if(!Q&&!W)return;this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_start",contentType:"reasoning",reasoning:Q,redacted:W}}});return}case"reasoning.finished":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_end",contentType:"reasoning",reasoning:typeof $.payload?.reasoning==="string"?$.payload.reasoning:void 0}}});return}case"agent.done":{this.emitAgentDoneIfNeeded({sessionId:Z,payload:$.payload});return}case"usage.updated":{let Q=kP($.payload);this.events.emit({type:"agent_event",payload:{sessionId:Z,event:Q.event,teamAgentId:Q.teamAgentId,teamRole:Q.teamRole}});return}case"tool.started":{let Q=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(Q&&this.pendingApprovalToolCallIds.delete(Q))return;this.emitToolCallContentStart({sessionId:Z,toolCallId:Q,toolName:typeof $.payload?.toolName==="string"?$.payload.toolName:void 0,toolInput:$.payload?.input});return}case"tool.finished":{let Q=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(Q)this.pendingApprovalToolCallIds.delete(Q);this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_end",contentType:"tool",toolCallId:Q,toolName:typeof $.payload?.toolName==="string"?$.payload.toolName:void 0,output:$.payload?.output,error:typeof $.payload?.error==="string"?$.payload.error:void 0}}});return}case"session.created":case"session.updated":case"session.attached":case"session.detached":{let Q=g$($.payload?.snapshot),W=$.payload?.session;if(Q)this.events.emit({type:"session_snapshot",payload:{sessionId:Z,snapshot:Q}});this.events.emit({type:"status",payload:{sessionId:Z,status:W?.status??"running"}});return}case"session.pending_prompts":{this.events.emit({type:"pending_prompts",payload:{sessionId:Z,prompts:Array.isArray($.payload?.prompts)?$.payload.prompts:[]}});return}case"session.pending_prompt_submitted":{let Q=$.payload?.prompt;if(!Q)return;this.events.emit({type:"pending_prompt_submitted",payload:{sessionId:Z,id:Q.id,prompt:Q.prompt,delivery:Q.delivery,attachmentCount:Q.attachmentCount,userImages:Q.userImages,userFiles:Q.userFiles}});return}case"run.completed":case"run.failed":case"run.aborted":{let Q=g$($.payload?.snapshot),W=typeof $.payload?.reason==="string"?$.payload.reason:$.event==="run.aborted"?"aborted":$.event==="run.failed"?"error":"completed";if(this.emitAgentDoneIfNeeded({sessionId:Z,payload:{...$.payload,reason:W}}),Q?.interactive===!0&&H0(Q.status))return;this.events.emit({type:"ended",payload:{sessionId:Z,reason:W,ts:$.timestamp??Date.now()}});return}default:return}}captureDetachedHubEventError($,Z,Q){try{kF(this.telemetry,{component:"core",operation:$,error:Z,severity:"warn",handled:!0,context:{event:Q.event,sessionId:Q.sessionId,runtimeAddress:this.runtimeAddress}})}catch{}}async handleCapabilityRequest($){let Z=$.sessionId?.trim();if(!Z)return;let Q=typeof $.payload?.targetClientId==="string"?$.payload.targetClientId:void 0;if(Q&&Q!==this.client.getClientId())return;let W=typeof $.payload?.requestId==="string"?$.payload.requestId:"",J=typeof $.payload?.capabilityName==="string"?$.payload.capabilityName:"";if(!W)return;let X=this.sessionClientContributionHandlers.get(Z)?.get(J);if(!X){await this.client.command("capability.respond",{requestId:W,ok:!1,error:`No client contribution handler registered for capability ${J} in session ${Z}.`},Z).catch(()=>{});return}let Y=$.payload?.payload&&typeof $.payload.payload==="object"&&!Array.isArray($.payload.payload)?$.payload.payload:{},j=new AbortController;this.activeCapabilityAbortControllers.set(W,j);let V=(H)=>{this.client.command("capability.progress",{requestId:W,payload:H},Z).catch((B)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_progress",B,$)})};try{let H=await X({payload:Y,abortSignal:j.signal,progress:V});if(j.signal.aborted)return;await this.client.command("capability.respond",{requestId:W,ok:!0,payload:H},Z)}catch(H){if(j.signal.aborted)return;await this.client.command("capability.respond",{requestId:W,ok:!1,error:H instanceof Error?H.message:String(H)},Z)}finally{this.activeCapabilityAbortControllers.delete(W)}}handleCapabilityResolved($){if($.payload?.cancelled!==!0)return;let Z=typeof $.payload.requestId==="string"?$.payload.requestId.trim():"";if(!Z)return;let Q=this.activeCapabilityAbortControllers.get(Z);if(!Q)return;Q.abort(SP($.payload.error))}async handleApprovalRequested($){let Z=$.sessionId?.trim();if(!Z)return;let Q=this.sessionCapabilities.get(Z)?.requestToolApproval??this.defaultCapabilities.requestToolApproval;if(!Q)return;let W=typeof $.payload?.approvalId==="string"?$.payload.approvalId.trim():"",J=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:"",X=typeof $.payload?.toolName==="string"?$.payload.toolName:"";if(!W||!J||!X)return;let Y=$.payload?.policy&&typeof $.payload.policy==="object"&&!Array.isArray($.payload.policy)?$.payload.policy:{autoApprove:!1},j=bP($.payload?.inputJson);this.pendingApprovalToolCallIds.add(J),this.emitToolCallContentStart({sessionId:Z,toolCallId:J,toolName:X,toolInput:j});let V=await Promise.resolve(Q({sessionId:Z,agentId:typeof $.payload?.agentId==="string"?$.payload.agentId:"",conversationId:typeof $.payload?.conversationId==="string"?$.payload.conversationId:Z,iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0,toolCallId:J,toolName:X,input:j,policy:Y})).catch((H)=>({approved:!1,reason:H instanceof Error?H.message:`Tool approval request failed: ${String(H)}`}));await this.client.command("approval.respond",{approvalId:W,approved:V.approved,reason:V.reason},Z).catch(()=>{})}}var iF={};N(iF,{RemoteRuntimeHost:()=>X4});class X4 extends o1{constructor($){super({url:G$($.endpoint),authToken:$.authToken,clientType:$.clientType??"core-remote-runtime",displayName:$.displayName??"core remote runtime",capabilities:$.capabilities},{workspaceRoot:$.workspaceRoot,cwd:$.cwd})}}var nF={};N(nF,{SqliteSessionStore:()=>L1});import{existsSync as gP,mkdirSync as mP}from"node:fs";import{join as vP}from"node:path";import{asBool as h5,asOptionalString as D1,asString as t1,ensureSessionSchema as cP,loadSqliteDb as uP,nowIso as lQ,toBoolInt as k5}from"@cline/shared/db";import{resolveDbDataDir as dP}from"@cline/shared/storage";class L1{sessionsDirPath;db;constructor($={}){this.sessionsDirPath=$.sessionsDir??dP()}init(){this.getRawDb()}ensureSessionsDir(){if(!gP(this.sessionsDirPath))mP(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}sessionDbPath(){return vP(this.ensureSessionsDir(),"sessions.db")}getRawDb(){if(this.db)return this.db;let $=uP(this.sessionDbPath());return cP($,{includeLegacyMigrations:!0}),this.db=$,$}close(){this.db?.close?.(),this.db=void 0}run($,Z=[]){return this.getRawDb().prepare($).run(...Z)}queryOne($,Z=[]){return this.getRawDb().prepare($).get(...Z)??void 0}queryAll($,Z=[]){return this.getRawDb().prepare($).all(...Z)}create($){let Z=lQ();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,k5($.interactive),$.provider,$.model,$.cwd,$.workspaceRoot,$.teamName??null,k5($.enableTools),k5($.enableSpawn),k5($.enableTeams),$.parentSessionId??null,$.parentAgentId??null,$.agentId??null,$.conversationId??null,k5($.isSubagent),$.prompt??null,$.metadata?JSON.stringify($.metadata):null,"",$.hookPath??"",$.messagesPath??null,Z])}update($){let Z=[],Q=[];if($.endedAt!==void 0)Z.push("ended_at = ?"),Q.push($.endedAt);if($.exitCode!==void 0)Z.push("exit_code = ?"),Q.push($.exitCode);if($.status!==void 0)Z.push("status = ?"),Q.push($.status);if($.prompt!==void 0)Z.push("prompt = ?"),Q.push($.prompt);if($.metadata!==void 0)Z.push("metadata_json = ?"),Q.push($.metadata?JSON.stringify($.metadata):null);if($.parentSessionId!==void 0)Z.push("parent_session_id = ?"),Q.push($.parentSessionId);if($.parentAgentId!==void 0)Z.push("parent_agent_id = ?"),Q.push($.parentAgentId);if($.agentId!==void 0)Z.push("agent_id = ?"),Q.push($.agentId);if($.conversationId!==void 0)Z.push("conversation_id = ?"),Q.push($.conversationId);if(Z.length===0)return;Z.push("updated_at = ?"),Q.push(dQ()),Q.push($.sessionId),this.run(`UPDATE sessions SET ${Z.join(", ")} WHERE session_id = ?`,Q)}updateStatus($,Z,Q){this.update({sessionId:$,status:Z,endedAt:H0(Z)?null:dQ(),exitCode:H0(Z)?null:Q??(Z==="failed"?1:0)})}get($){let Z=this.queryOne(`SELECT session_id, source, pid, started_at, ended_at, exit_code, status, interactive,
507
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.sessionId,$.source,$.pid,$.startedAt,$.endedAt??null,$.exitCode??null,$.status,0,k5($.interactive),$.provider,$.model,$.cwd,$.workspaceRoot,$.teamName??null,k5($.enableTools),k5($.enableSpawn),k5($.enableTeams),$.parentSessionId??null,$.parentAgentId??null,$.agentId??null,$.conversationId??null,k5($.isSubagent),$.prompt??null,$.metadata?JSON.stringify($.metadata):null,"",$.hookPath??"",$.messagesPath??null,Z])}update($){let Z=[],Q=[];if($.endedAt!==void 0)Z.push("ended_at = ?"),Q.push($.endedAt);if($.exitCode!==void 0)Z.push("exit_code = ?"),Q.push($.exitCode);if($.status!==void 0)Z.push("status = ?"),Q.push($.status);if($.prompt!==void 0)Z.push("prompt = ?"),Q.push($.prompt);if($.metadata!==void 0)Z.push("metadata_json = ?"),Q.push($.metadata?JSON.stringify($.metadata):null);if($.parentSessionId!==void 0)Z.push("parent_session_id = ?"),Q.push($.parentSessionId);if($.parentAgentId!==void 0)Z.push("parent_agent_id = ?"),Q.push($.parentAgentId);if($.agentId!==void 0)Z.push("agent_id = ?"),Q.push($.agentId);if($.conversationId!==void 0)Z.push("conversation_id = ?"),Q.push($.conversationId);if(Z.length===0)return;Z.push("updated_at = ?"),Q.push(lQ()),Q.push($.sessionId),this.run(`UPDATE sessions SET ${Z.join(", ")} WHERE session_id = ?`,Q)}updateStatus($,Z,Q){this.update({sessionId:$,status:Z,endedAt:H0(Z)?null:lQ(),exitCode:H0(Z)?null:Q??(Z==="failed"?1:0)})}get($){let Z=this.queryOne(`SELECT session_id, source, pid, started_at, ended_at, exit_code, status, interactive,
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(!Z)return;return{sessionId:t1(Z.session_id),source:t1(Z.source),pid:Number(Z.pid??0),startedAt:t1(Z.started_at),endedAt:Z.ended_at??null,exitCode:Z.exit_code??null,status:t1(Z.status),interactive:h5(Z.interactive),provider:t1(Z.provider),model:t1(Z.model),cwd:t1(Z.cwd),workspaceRoot:t1(Z.workspace_root),teamName:U1(Z.team_name),enableTools:h5(Z.enable_tools),enableSpawn:h5(Z.enable_spawn),enableTeams:h5(Z.enable_teams),parentSessionId:U1(Z.parent_session_id),parentAgentId:U1(Z.parent_agent_id),agentId:U1(Z.agent_id),conversationId:U1(Z.conversation_id),isSubagent:h5(Z.is_subagent),prompt:U1(Z.prompt),metadata:(()=>{let Q=U1(Z.metadata_json);if(!Q)return;try{let W=JSON.parse(Q);if(W&&typeof W==="object"&&!Array.isArray(W))return W}catch{}return})(),hookPath:U1(Z.hook_path),messagesPath:U1(Z.messages_path),updatedAt:U1(Z.updated_at)??dQ()}}list($=200){let Z=this.queryAll("SELECT session_id FROM sessions ORDER BY started_at DESC LIMIT ?",[$]),Q=[];for(let W of Z){let J=this.get(t1(W.session_id));if(J)Q.push(J)}return Q}delete($,Z=!1){let Q=this.run("DELETE FROM sessions WHERE session_id = ?",[$]).changes??0;if(Z)this.run("DELETE FROM sessions WHERE parent_session_id = ?",[$]);return Q>0}}J8();import{existsSync as YX,mkdirSync as _S,readFileSync as VA,renameSync as zS,writeFileSync as TS}from"node:fs";import{join as HA}from"node:path";import{resolveSessionDataDir as OS}from"@cline/shared/storage";import{dirname as DS}from"node:path";import{nanoid as LS}from"nanoid";import{appendFileSync as vP,existsSync as cP,mkdirSync as iF,readFileSync as uP,writeFileSync as nF}from"node:fs";import{dirname as aF,join as dP}from"node:path";import{ensureHookLogDir as lP}from"@cline/shared/storage";class nJ{adapter;messagesArtifactUploader;logger;artifacts;constructor($,Z,Q){this.adapter=$;this.messagesArtifactUploader=Z;this.logger=Q;this.artifacts=new fJ(()=>this.ensureSessionsDir())}ensureSessionsDir(){return this.adapter.ensureSessionsDir()}initializeMessagesFile($,Z,Q){ZG(Z,Q,h3($))}writeSessionManifest($,Z){iF(aF($),{recursive:!0}),nF($,`${JSON.stringify(b0.parse(Z),null,2)}
513
- `,"utf8")}readSessionManifest($){return this.readManifestFile($).manifest}readManifestFile($){let Z=this.artifacts.sessionManifestPath($,!1);if(!cP(Z))return{path:Z};try{return{path:Z,manifest:b0.parse(JSON.parse(uP(Z,"utf8")))}}catch{return{path:Z}}}async resolveArtifactPath($,Z,Q){let J=(await this.adapter.getSession($))?.[Z];return typeof J==="string"&&J.trim().length>0?J:Q($)}async persistSessionMessages($,Z,Q){let W=await this.resolveArtifactPath($,"messagesPath",(Y)=>this.artifacts.sessionMessagesPath(Y)),J=k3({updatedAt:J0(),context:h3($),messages:Z,systemPrompt:Q}),X=`${JSON.stringify(J,null,2)}
514
- `;if(iF(aF(W),{recursive:!0}),nF(W,X,"utf8"),!this.messagesArtifactUploader)return;try{let Y=await this.adapter.getSession($);await this.messagesArtifactUploader.uploadMessagesFile({sessionId:$,path:W,contents:X,row:Y})}catch(Y){this.logger?.debug("Failed to upload persisted session messages",{sessionId:$,error:Y})}}appendStaleSessionHookLog($,Z,Q,W,J){let Y=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??dP(lP(),"hooks.jsonl");vP(Y,`${JSON.stringify({ts:$,hookName:"session_shutdown",reason:W,sessionId:Z,pid:Q,source:J})}
515
- `,"utf8")}}import{appendFileSync as pP}from"node:fs";import{join as rP}from"node:path";import{resolveRootSessionId as sF}from"@cline/shared";import{ensureHookLogDir as iP}from"@cline/shared/storage";import{z as aJ}from"zod";var nP="subagent",aP=aJ.looseObject({task:aJ.string().optional(),systemPrompt:aJ.string().optional()});class lQ{adapter;manifestStore;toPersistedMessages;heartbeatLogIntervalMs;teamTaskSessionsByAgent=new Map;teamTaskLastHeartbeatBySession=new Map;teamTaskLastProgressLineBySession=new Map;constructor($,Z,Q,W){this.adapter=$;this.manifestStore=Z;this.toPersistedMessages=Q;this.heartbeatLogIntervalMs=W}teamTaskQueueKey($,Z){return`${$}::${Z}`}activeTeamTaskSessionId($,Z){return this.teamTaskSessionsByAgent.get(this.teamTaskQueueKey($,Z))?.at(-1)}buildSubsessionRow($,Z){return{sessionId:Z.sessionId,source:nP,pid:process.ppid,startedAt:Z.startedAt,endedAt:null,exitCode:null,status:"running",statusLock:0,interactive:!1,provider:$.provider,model:$.model,cwd:$.cwd,workspaceRoot:$.workspaceRoot,teamName:$.teamName??null,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,parentSessionId:Z.parentSessionId,parentAgentId:Z.parentAgentId,agentId:Z.agentId,conversationId:Z.conversationId??null,isSubagent:!0,prompt:Z.prompt,metadata:c6({prompt:Z.prompt}),hookPath:"",messagesPath:Z.messagesPath,updatedAt:Z.startedAt}}async queueSpawnRequest($){if($.hookName!=="tool_call"||$.parent_agent_id!==null)return;if($.tool_call?.name!=="spawn_agent")return;let Z=sF($.sessionContext);if(!Z)return;let Q=aP.safeParse($.tool_call.input);await this.adapter.enqueueSpawnRequest({rootSessionId:Z,parentAgentId:$.agent_id,task:Q.success?Q.data.task:void 0,systemPrompt:Q.success?Q.data.systemPrompt:void 0})}async upsertSubagentSession($){let Z=$.rootSessionId;if(!Z)return;let Q=await this.adapter.getSession(Z);if(!Q)return;let W=C8(Z,$.agentId),J=await this.adapter.getSession(W),X=J0(),Y=this.manifestStore.artifacts.subagentArtifactPaths(W,$.agentId,this.activeTeamTaskSessionId(Z,$.parentAgentId)),j=$.prompt??J?.prompt??void 0;if(!j)j=await this.adapter.claimSpawnRequest(Z,$.parentAgentId)??`Subagent run by ${$.parentAgentId}`;if(!J)return await this.adapter.upsertSession(this.buildSubsessionRow(Q,{sessionId:W,parentSessionId:Z,parentAgentId:$.parentAgentId,agentId:$.agentId,conversationId:$.conversationId,prompt:j,startedAt:X,...Y})),this.manifestStore.initializeMessagesFile(W,Y.messagesPath,X),W;return await this.adapter.updateSession({sessionId:W,setRunning:!0,parentSessionId:Z,parentAgentId:$.parentAgentId,agentId:$.agentId,conversationId:$.conversationId,prompt:J.prompt??j??null,metadata:c6({metadata:J.metadata??void 0,prompt:J.prompt??j??null}),expectedStatusLock:J.statusLock}),W}async upsertSubagentSessionFromHook($){if(!$.parent_agent_id)return;let Z=sF($.sessionContext);if(!Z)return;if($.hookName==="session_shutdown"){let Q=C8(Z,$.agent_id);return await this.adapter.getSession(Q)?Q:void 0}return await this.upsertSubagentSession({agentId:$.agent_id,parentAgentId:$.parent_agent_id,conversationId:$.taskId,rootSessionId:Z})}async applySubagentStatus($,Z){await this.applySubagentStatusBySessionId($,g6(Z))}async applySubagentStatusBySessionId($,Z){let Q=await this.adapter.getSession($);if(!Q)return;let W=H0(Z)?null:J0(),J=H0(Z)?null:Z==="failed"?1:0;await this.adapter.updateSession({sessionId:$,status:Z,endedAt:W,exitCode:J,expectedStatusLock:Q.statusLock})}async applyStatusToRunningChildSessions($,Z){if(!$)return;let Q=await this.adapter.listSessions({limit:2000,parentSessionId:$,status:"running"});for(let W of Q)await this.applySubagentStatusBySessionId(W.sessionId,Z)}async onTeamTaskStart($,Z,Q){let W=await this.adapter.getSession($);if(!W)return;let J=I6($,Z),X=J0(),{messagesPath:Y}=this.manifestStore.artifacts.subagentArtifactPaths(J,Z);await this.adapter.upsertSession(this.buildSubsessionRow(W,{sessionId:J,parentSessionId:$,parentAgentId:"lead",agentId:Z,prompt:Q||`Team task for ${Z}`,startedAt:X,messagesPath:Y})),this.manifestStore.initializeMessagesFile(J,Y,X);let j=this.teamTaskQueueKey($,Z),V=this.teamTaskSessionsByAgent.get(j)??[];V.push(J),this.teamTaskSessionsByAgent.set(j,V)}async onTeamTaskEnd($,Z,Q,W,J,X){let Y=this.teamTaskQueueKey($,Z),j=this.teamTaskSessionsByAgent.get(Y);if(!j||j.length===0)return;let V=j.shift();if(j.length===0)this.teamTaskSessionsByAgent.delete(Y);if(!V)return;let H=J?.messages??X,B=this.toPersistedMessages(H,J,X);if(B)await this.manifestStore.persistSessionMessages(V,B);await this.applySubagentStatusBySessionId(V,Q),this.teamTaskLastHeartbeatBySession.delete(V),this.teamTaskLastProgressLineBySession.delete(V)}async onTeamTaskProgress($,Z,Q,W){let J=this.teamTaskQueueKey($,Z),X=this.teamTaskSessionsByAgent.get(J)?.[0];if(!X)return;let Y=Q.trim();if(!Y)return;let j=W?.kind??"progress";if(j==="heartbeat"){let H=Date.now(),B=this.teamTaskLastHeartbeatBySession.get(X)??0;if(H-B<this.heartbeatLogIntervalMs)return;this.teamTaskLastHeartbeatBySession.set(X,H)}let V=j==="heartbeat"?"[progress] heartbeat":j==="text"?`[progress] text: ${Y}`:`[progress] ${Y}`;if(this.teamTaskLastProgressLineBySession.get(X)===V)return;this.teamTaskLastProgressLineBySession.set(X,V)}async handleSubAgentStart($,Z){let Q=await this.upsertSubagentSession({agentId:Z.subAgentId,parentAgentId:Z.parentAgentId,conversationId:Z.conversationId,prompt:Z.input.task,rootSessionId:$});if(!Q)return;await this.applySubagentStatusBySessionId(Q,"running")}async handleSubAgentEnd($,Z){let Q=await this.upsertSubagentSession({agentId:Z.subAgentId,parentAgentId:Z.parentAgentId,conversationId:Z.conversationId,prompt:Z.input.task,rootSessionId:$});if(!Q)return;if(Z.error){await this.applySubagentStatusBySessionId(Q,"failed");return}let W=this.toPersistedMessages(Z.agentResult?.messages,Z.agentResult);if(W)await this.manifestStore.persistSessionMessages(Q,W);let J=Z.result?.finishReason??"completed";await this.applySubagentStatusBySessionId(Q,J==="aborted"?"cancelled":"completed")}appendSubagentHookAudit($){let Q=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??rP(iP(),"hooks.jsonl");pP(Q,`${JSON.stringify({ts:J0(),...$})}
516
- `,"utf8")}}import{formatUserInputBlock as US}from"@cline/shared";var jA={};N(jA,{toTeamProgressLifecycleEvent:()=>H4,sanitizeTeamName:()=>pB,reviveTeamStateDates:()=>PZ,parseConfiguredAgentConfig:()=>I5,loadConfiguredAgentConfigs:()=>Y4,createWorkerReviewerTeam:()=>YA,createSpawnAgentTool:()=>q$,createDelegatedAgentConfigProvider:()=>T$,createDelegatedAgent:()=>O$,createConfiguredAgentTools:()=>j4,createAgentTeamsTools:()=>F2,createAgentTeam:()=>tJ,buildTeamProgressSummary:()=>V4,buildDelegatedAgentConfig:()=>G2,buildConfiguredAgentToolName:()=>x5,buildConfiguredAgentToolDescriptors:()=>g5,bootstrapAgentTeams:()=>w8,AgentTeamsRuntime:()=>h2,AgentTeam:()=>G4});import{existsSync as sP,readdirSync as oP,readFileSync as tP}from"node:fs";import{basename as oF,extname as eP,join as $S}from"node:path";import{resolveAgentConfigSearchPaths as ZS}from"@cline/shared/storage";import eF from"yaml";import{z as N0}from"zod";var $A=N0.object({name:N0.string().trim().min(1),description:N0.string().trim().min(1),tools:N0.union([N0.string(),N0.array(N0.string())]).optional(),skills:N0.union([N0.string(),N0.array(N0.string())]).optional(),providerId:N0.string().trim().min(1).optional(),modelId:N0.string().trim().min(1).optional(),maxIterations:N0.number().int().positive().optional()});function QS($){let Z=$.match(/^(---)[^\S\r\n]*(?:\r?\n|$)/);if(!Z)throw Error("Missing YAML frontmatter block in agent config file.");let Q=Z[0].length,W=/^---[^\S\r\n]*(?:\r?\n|$)/gm;W.lastIndex=Q;let J,X=Array.from($.matchAll(W)).filter((Y)=>Y.index>=Q);for(let Y of X){let j=Y.index,V=$.slice(Q,j);try{let H=eF.parse(V);if(!H||typeof H!=="object"||Array.isArray(H))continue;$A.parse(H);let B=$.slice(j+Y[0].length);J={frontmatter:V,body:B}}catch{}}if(J)return J;throw Error("Missing closing YAML frontmatter delimiter in agent config file.")}function tF($){if($===void 0)return;let Z=Array.isArray($)?$:$.split(",");return Array.from(new Set(Z.map((Q)=>Q.trim()).filter((Q)=>Q.length>0)))}function WS($){return $.trim().toLowerCase()}function JS($){let Z=eP($).toLowerCase();return Z===".yml"||Z===".yaml"}function I5($,Z={}){let{frontmatter:Q,body:W}=QS($),J=eF.parse(Q);if(!J||typeof J!=="object"||Array.isArray(J))throw Error("Agent config frontmatter must be a YAML mapping.");let X=$A.parse(J),Y=W.trim();if(!Y)throw Error("Missing system prompt body in agent config file.");return{name:X.name,description:X.description,tools:tF(X.tools),skills:tF(X.skills),providerId:X.providerId,modelId:X.modelId,maxIterations:X.maxIterations,systemPrompt:Y,path:Z.path}}function Y4($){let Z=$.searchPaths??ZS($.workspaceRoot),Q=new Map,W=[];for(let X of Z.filter(Boolean)){if(!sP(X))continue;let Y;try{Y=oP(X,{withFileTypes:!0})}catch(j){W.push({path:X,error:j instanceof Error?j:Error(String(j))});continue}for(let j of Y){if(!j.isFile()||!JS(j.name))continue;let V=$S(X,j.name);try{let H=tP(V,"utf8"),B=I5(H,{path:V}),G=WS(B.name);if(!Q.has(G))Q.set(G,B)}catch(H){W.push({path:V,error:H instanceof Error?H:Error(String(H))})}}}return{configs:Array.from(Q.values()).sort((X,Y)=>(X.path?oF(X.path):X.name).localeCompare(Y.path?oF(Y.path):Y.name)),errors:W}}import{createTool as XS,zodToJsonSchema as YS}from"@cline/shared";import{z as ZA}from"zod";var sJ="subagent_",pQ=64,jS=ZA.object({prompt:ZA.string().trim().min(1).describe("Task for the subagent to perform")});function VS($){let Z="",Q=!0;for(let W of $.trim().toLowerCase()){let J=W.charCodeAt(0);if(!(J>=97&&J<=122||J>=48&&J<=57||W==="_")||W==="_"){if(!Q)Z+="_",Q=!0;continue}Z+=W,Q=!1}return Q?Z.slice(0,-1):Z}function HS($){let Z=2166136261;for(let Q=0;Q<$.length;Q++)Z^=$.charCodeAt(Q),Z=Math.imul(Z,16777619);return(Z>>>0).toString(36)}function x5($){let Z=VS($)||"agent",Q=HS($).slice(0,6),W=`${sJ}${Z}`;if(W.length<=pQ)return W;let J=pQ-sJ.length-Q.length-1,X=Z.slice(0,Math.max(1,J));return`${sJ}${X}_${Q}`.slice(0,pQ)}function g5($){let Z=new Set,Q=[];for(let W of[...$].sort((J,X)=>J.name.localeCompare(X.name))){let J=x5(W.name),X=J,Y=2;while(Z.has(X)){let j=`_${Y++}`,V=Math.max(1,pQ-j.length);X=`${J.slice(0,V)}${j}`}Z.add(X),Q.push({toolName:X,config:W})}return Q}function BS($,Z){return{...$,providerId:Z.providerId??$.providerId,modelId:Z.modelId??$.modelId,maxIterations:Z.maxIterations??$.maxIterations}}function j4($){return g5($.agents).map(({toolName:Z,config:Q})=>{return XS({name:Z,description:`Use the "${Q.name}" subagent: ${Q.description}`,inputSchema:YS(jS),execute:async(J,X)=>{let Y=$.configProvider.getRuntimeConfig(),j=T$(BS(Y,Q)),V=$.createSubAgentTools?await $.createSubAgentTools(Q,J,X):[],H=O$({kind:"subagent",prompt:Q.systemPrompt,configProvider:j,tools:V,maxIterations:Q.maxIterations,parentAgentId:X.agentId,abortSignal:X.signal,onEvent:$.onSubAgentEvent,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval}),B=H.getAgentId(),G=H.getConversationId(),K=X.agentId,F={systemPrompt:Q.systemPrompt,task:J.prompt};if($.onSubAgentStart)try{await $.onSubAgentStart({subAgentId:B,conversationId:G,parentAgentId:K,input:F})}catch{}try{let A=await H.run(J.prompt),L={text:A.text,iterations:A.iterations,finishReason:A.finishReason,usage:{inputTokens:A.usage.inputTokens,outputTokens:A.usage.outputTokens}};if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:B,conversationId:G,parentAgentId:K,input:F,result:L,agentResult:A})}catch{}return L}catch(A){if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:B,conversationId:G,parentAgentId:K,input:F,error:A instanceof Error?A:Error(String(A))})}catch{}throw A}},timeoutMs:300000,retryable:!1})})}function L1(){return new Date().toISOString()}function QA($,Z){if(Z<=0)return 0;return Math.round($/Z*100)}function GS($,Z){let Q=new Set;for(let J of Z)if(J.status==="reviewed")Q.add(`${J.outcomeId}:${J.section}`);let W=new Set;for(let J of $){if(J.status==="finalized")continue;for(let X of J.requiredSections)if(!Q.has(`${J.id}:${X}`))W.add(`${J.id}:${X}`)}return[...W].sort((J,X)=>J.localeCompare(X))}function V4($,Z){let Q={idle:0,running:0,stopped:0},W={pending:0,in_progress:0,blocked:0,completed:0},J={queued:0,running:0,completed:0,failed:0,cancelled:0,interrupted:0},X={draft:0,in_review:0,finalized:0},Y={draft:0,reviewed:0,rejected:0},j=0,V=0;for(let f of Z.members)if(Q[f.status]+=1,f.role==="lead")j+=1;else V+=1;let H=[],B=[],G=Z.tasks.filter((f)=>f.status==="completed").length,K=new Map(Z.tasks.map((f)=>[f.id,f]));for(let f of Z.tasks){if(W[f.status]+=1,f.status==="blocked"){H.push(f.id);continue}if(f.status!=="pending")continue;if(f.dependsOn.every((U)=>{return K.get(U)?.status==="completed"}))B.push(f.id)}let F=[],A,L=0;for(let f of Z.runs){if(J[f.status]+=1,f.status==="queued"||f.status==="running")F.push(f.id);let D=f.startedAt.getTime();if(D>=L)L=D,A=f.id}for(let f of Z.outcomes)X[f.status]+=1;for(let f of Z.outcomeFragments)Y[f.status]+=1;return{teamName:$,updatedAt:L1(),members:{total:Z.members.length,byStatus:Q,leadCount:j,teammateCount:V},tasks:{total:Z.tasks.length,byStatus:W,blockedTaskIds:H,readyTaskIds:B,completionPct:QA(G,Z.tasks.length)},runs:{total:Z.runs.length,byStatus:J,activeRunIds:F,latestRunId:A},outcomes:{total:Z.outcomes.length,byStatus:X,finalizedPct:QA(X.finalized,Z.outcomes.length),missingRequiredSections:GS(Z.outcomes,Z.outcomeFragments)},fragments:{total:Z.outcomeFragments.length,byStatus:Y}}}function H4($){let{event:Z}=$;switch(Z.type){case"team_task_updated":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:L1(),taskId:Z.task.id,agentId:Z.task.assignee??Z.task.createdBy};case"run_queued":case"run_started":case"run_completed":case"run_failed":case"run_cancelled":case"run_interrupted":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:L1(),runId:Z.run.id,taskId:Z.run.taskId,agentId:Z.run.agentId,message:Z.run.error};case"run_progress":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:L1(),runId:Z.run.id,taskId:Z.run.taskId,agentId:Z.run.agentId,message:Z.message};case"outcome_created":case"outcome_finalized":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:L1(),outcomeId:Z.outcome.id};case"outcome_fragment_attached":case"outcome_fragment_reviewed":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:L1(),outcomeId:Z.fragment.outcomeId,fragmentId:Z.fragment.id,agentId:Z.fragment.sourceAgentId};case"team_message":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:L1(),taskId:Z.message.taskId,agentId:Z.message.fromAgentId,message:Z.message.subject};case"team_mission_log":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:L1(),taskId:Z.entry.taskId,agentId:Z.entry.agentId,message:Z.entry.summary};case"teammate_spawned":case"teammate_shutdown":case"task_start":case"task_end":case"agent_event":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:L1(),agentId:Z.agentId}}return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:L1()}}import{sanitizeFileName as KS,TeamMessageType as I}from"@cline/shared";import{nanoid as FS}from"nanoid";import{TeamMessageType as qn}from"@cline/shared";function oJ($){if(typeof DOMException<"u"&&$ instanceof DOMException&&$.name==="AbortError")return!0;if(!($ instanceof Error))return!1;return $.name==="AbortError"||$.message.toLowerCase().includes("aborted")}function WA($,Z){return $?.status==="stopped"&&oJ(Z)}var AS=600000,JA="recovered_queued";function fS($){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.
512
+ FROM sessions WHERE session_id = ?`,[$]);if(!Z)return;return{sessionId:t1(Z.session_id),source:t1(Z.source),pid:Number(Z.pid??0),startedAt:t1(Z.started_at),endedAt:Z.ended_at??null,exitCode:Z.exit_code??null,status:t1(Z.status),interactive:h5(Z.interactive),provider:t1(Z.provider),model:t1(Z.model),cwd:t1(Z.cwd),workspaceRoot:t1(Z.workspace_root),teamName:D1(Z.team_name),enableTools:h5(Z.enable_tools),enableSpawn:h5(Z.enable_spawn),enableTeams:h5(Z.enable_teams),parentSessionId:D1(Z.parent_session_id),parentAgentId:D1(Z.parent_agent_id),agentId:D1(Z.agent_id),conversationId:D1(Z.conversation_id),isSubagent:h5(Z.is_subagent),prompt:D1(Z.prompt),metadata:(()=>{let Q=D1(Z.metadata_json);if(!Q)return;try{let W=JSON.parse(Q);if(W&&typeof W==="object"&&!Array.isArray(W))return W}catch{}return})(),hookPath:D1(Z.hook_path),messagesPath:D1(Z.messages_path),updatedAt:D1(Z.updated_at)??lQ()}}list($=200){let Z=this.queryAll("SELECT session_id FROM sessions ORDER BY started_at DESC LIMIT ?",[$]),Q=[];for(let W of Z){let J=this.get(t1(W.session_id));if(J)Q.push(J)}return Q}delete($,Z=!1){let Q=this.run("DELETE FROM sessions WHERE session_id = ?",[$]).changes??0;if(Z)this.run("DELETE FROM sessions WHERE parent_session_id = ?",[$]);return Q>0}}J8();import{existsSync as YX,mkdirSync as qS,readFileSync as BA,renameSync as MS,writeFileSync as RS}from"node:fs";import{join as GA}from"node:path";import{resolveSessionDataDir as ES}from"@cline/shared/storage";import{dirname as TS}from"node:path";import{nanoid as OS}from"nanoid";import{appendFileSync as lP,existsSync as pP,mkdirSync as aF,readFileSync as rP,writeFileSync as sF}from"node:fs";import{dirname as oF,join as iP}from"node:path";import{ensureHookLogDir as nP}from"@cline/shared/storage";class nJ{adapter;messagesArtifactUploader;logger;artifacts;constructor($,Z,Q){this.adapter=$;this.messagesArtifactUploader=Z;this.logger=Q;this.artifacts=new fJ(()=>this.ensureSessionsDir())}ensureSessionsDir(){return this.adapter.ensureSessionsDir()}initializeMessagesFile($,Z,Q){WG(Z,Q,h3($))}writeSessionManifest($,Z){aF(oF($),{recursive:!0}),sF($,`${JSON.stringify(b0.parse(Z),null,2)}
513
+ `,"utf8")}readSessionManifest($){return this.readManifestFile($).manifest}readManifestFile($){let Z=this.artifacts.sessionManifestPath($,!1);if(!pP(Z))return{path:Z};try{return{path:Z,manifest:b0.parse(JSON.parse(rP(Z,"utf8")))}}catch{return{path:Z}}}async resolveArtifactPath($,Z,Q){let J=(await this.adapter.getSession($))?.[Z];return typeof J==="string"&&J.trim().length>0?J:Q($)}async persistSessionMessages($,Z,Q){let W=await this.resolveArtifactPath($,"messagesPath",(Y)=>this.artifacts.sessionMessagesPath(Y)),J=k3({updatedAt:J0(),context:h3($),messages:Z,systemPrompt:Q}),X=`${JSON.stringify(J,null,2)}
514
+ `;if(aF(oF(W),{recursive:!0}),sF(W,X,"utf8"),!this.messagesArtifactUploader)return;try{let Y=await this.adapter.getSession($);await this.messagesArtifactUploader.uploadMessagesFile({sessionId:$,path:W,contents:X,row:Y})}catch(Y){this.logger?.debug("Failed to upload persisted session messages",{sessionId:$,error:Y})}}appendStaleSessionHookLog($,Z,Q,W,J){let Y=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??iP(nP(),"hooks.jsonl");lP(Y,`${JSON.stringify({ts:$,hookName:"session_shutdown",reason:W,sessionId:Z,pid:Q,source:J})}
515
+ `,"utf8")}}import{appendFileSync as aP}from"node:fs";import{join as sP}from"node:path";import{resolveRootSessionId as tF}from"@cline/shared";import{ensureHookLogDir as oP}from"@cline/shared/storage";import{z as aJ}from"zod";var tP="subagent",eP=aJ.looseObject({task:aJ.string().optional(),systemPrompt:aJ.string().optional()});class pQ{adapter;manifestStore;toPersistedMessages;heartbeatLogIntervalMs;teamTaskSessionsByAgent=new Map;teamTaskLastHeartbeatBySession=new Map;teamTaskLastProgressLineBySession=new Map;constructor($,Z,Q,W){this.adapter=$;this.manifestStore=Z;this.toPersistedMessages=Q;this.heartbeatLogIntervalMs=W}teamTaskQueueKey($,Z){return`${$}::${Z}`}activeTeamTaskSessionId($,Z){return this.teamTaskSessionsByAgent.get(this.teamTaskQueueKey($,Z))?.at(-1)}buildSubsessionRow($,Z){return{sessionId:Z.sessionId,source:tP,pid:process.ppid,startedAt:Z.startedAt,endedAt:null,exitCode:null,status:"running",statusLock:0,interactive:!1,provider:$.provider,model:$.model,cwd:$.cwd,workspaceRoot:$.workspaceRoot,teamName:$.teamName??null,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,parentSessionId:Z.parentSessionId,parentAgentId:Z.parentAgentId,agentId:Z.agentId,conversationId:Z.conversationId??null,isSubagent:!0,prompt:Z.prompt,metadata:c6({prompt:Z.prompt}),hookPath:"",messagesPath:Z.messagesPath,updatedAt:Z.startedAt}}async queueSpawnRequest($){if($.hookName!=="tool_call"||$.parent_agent_id!==null)return;if($.tool_call?.name!=="spawn_agent")return;let Z=tF($.sessionContext);if(!Z)return;let Q=eP.safeParse($.tool_call.input);await this.adapter.enqueueSpawnRequest({rootSessionId:Z,parentAgentId:$.agent_id,task:Q.success?Q.data.task:void 0,systemPrompt:Q.success?Q.data.systemPrompt:void 0})}async upsertSubagentSession($){let Z=$.rootSessionId;if(!Z)return;let Q=await this.adapter.getSession(Z);if(!Q)return;let W=C8(Z,$.agentId),J=await this.adapter.getSession(W),X=J0(),Y=this.manifestStore.artifacts.subagentArtifactPaths(W,$.agentId,this.activeTeamTaskSessionId(Z,$.parentAgentId)),j=$.prompt??J?.prompt??void 0;if(!j)j=await this.adapter.claimSpawnRequest(Z,$.parentAgentId)??`Subagent run by ${$.parentAgentId}`;if(!J)return await this.adapter.upsertSession(this.buildSubsessionRow(Q,{sessionId:W,parentSessionId:Z,parentAgentId:$.parentAgentId,agentId:$.agentId,conversationId:$.conversationId,prompt:j,startedAt:X,...Y})),this.manifestStore.initializeMessagesFile(W,Y.messagesPath,X),W;return await this.adapter.updateSession({sessionId:W,setRunning:!0,parentSessionId:Z,parentAgentId:$.parentAgentId,agentId:$.agentId,conversationId:$.conversationId,prompt:J.prompt??j??null,metadata:c6({metadata:J.metadata??void 0,prompt:J.prompt??j??null}),expectedStatusLock:J.statusLock}),W}async upsertSubagentSessionFromHook($){if(!$.parent_agent_id)return;let Z=tF($.sessionContext);if(!Z)return;if($.hookName==="session_shutdown"){let Q=C8(Z,$.agent_id);return await this.adapter.getSession(Q)?Q:void 0}return await this.upsertSubagentSession({agentId:$.agent_id,parentAgentId:$.parent_agent_id,conversationId:$.taskId,rootSessionId:Z})}async applySubagentStatus($,Z){await this.applySubagentStatusBySessionId($,g6(Z))}async applySubagentStatusBySessionId($,Z){let Q=await this.adapter.getSession($);if(!Q)return;let W=H0(Z)?null:J0(),J=H0(Z)?null:Z==="failed"?1:0;await this.adapter.updateSession({sessionId:$,status:Z,endedAt:W,exitCode:J,expectedStatusLock:Q.statusLock})}async applyStatusToRunningChildSessions($,Z){if(!$)return;let Q=await this.adapter.listSessions({limit:2000,parentSessionId:$,status:"running"});for(let W of Q)await this.applySubagentStatusBySessionId(W.sessionId,Z)}async onTeamTaskStart($,Z,Q){let W=await this.adapter.getSession($);if(!W)return;let J=I6($,Z),X=J0(),{messagesPath:Y}=this.manifestStore.artifacts.subagentArtifactPaths(J,Z);await this.adapter.upsertSession(this.buildSubsessionRow(W,{sessionId:J,parentSessionId:$,parentAgentId:"lead",agentId:Z,prompt:Q||`Team task for ${Z}`,startedAt:X,messagesPath:Y})),this.manifestStore.initializeMessagesFile(J,Y,X);let j=this.teamTaskQueueKey($,Z),V=this.teamTaskSessionsByAgent.get(j)??[];V.push(J),this.teamTaskSessionsByAgent.set(j,V)}async onTeamTaskEnd($,Z,Q,W,J,X){let Y=this.teamTaskQueueKey($,Z),j=this.teamTaskSessionsByAgent.get(Y);if(!j||j.length===0)return;let V=j.shift();if(j.length===0)this.teamTaskSessionsByAgent.delete(Y);if(!V)return;let H=J?.messages??X,B=this.toPersistedMessages(H,J,X);if(B)await this.manifestStore.persistSessionMessages(V,B);await this.applySubagentStatusBySessionId(V,Q),this.teamTaskLastHeartbeatBySession.delete(V),this.teamTaskLastProgressLineBySession.delete(V)}async onTeamTaskProgress($,Z,Q,W){let J=this.teamTaskQueueKey($,Z),X=this.teamTaskSessionsByAgent.get(J)?.[0];if(!X)return;let Y=Q.trim();if(!Y)return;let j=W?.kind??"progress";if(j==="heartbeat"){let H=Date.now(),B=this.teamTaskLastHeartbeatBySession.get(X)??0;if(H-B<this.heartbeatLogIntervalMs)return;this.teamTaskLastHeartbeatBySession.set(X,H)}let V=j==="heartbeat"?"[progress] heartbeat":j==="text"?`[progress] text: ${Y}`:`[progress] ${Y}`;if(this.teamTaskLastProgressLineBySession.get(X)===V)return;this.teamTaskLastProgressLineBySession.set(X,V)}async handleSubAgentStart($,Z){let Q=await this.upsertSubagentSession({agentId:Z.subAgentId,parentAgentId:Z.parentAgentId,conversationId:Z.conversationId,prompt:Z.input.task,rootSessionId:$});if(!Q)return;await this.applySubagentStatusBySessionId(Q,"running")}async handleSubAgentEnd($,Z){let Q=await this.upsertSubagentSession({agentId:Z.subAgentId,parentAgentId:Z.parentAgentId,conversationId:Z.conversationId,prompt:Z.input.task,rootSessionId:$});if(!Q)return;if(Z.error){await this.applySubagentStatusBySessionId(Q,"failed");return}let W=this.toPersistedMessages(Z.agentResult?.messages,Z.agentResult);if(W)await this.manifestStore.persistSessionMessages(Q,W);let J=Z.result?.finishReason??"completed";await this.applySubagentStatusBySessionId(Q,J==="aborted"?"cancelled":"completed")}appendSubagentHookAudit($){let Q=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??sP(oP(),"hooks.jsonl");aP(Q,`${JSON.stringify({ts:J0(),...$})}
516
+ `,"utf8")}}import{formatUserInputBlock as zS}from"@cline/shared";var HA={};N(HA,{toTeamProgressLifecycleEvent:()=>H4,sanitizeTeamName:()=>iB,reviveTeamStateDates:()=>SZ,parseConfiguredAgentConfig:()=>I5,loadConfiguredAgentConfigs:()=>Y4,createWorkerReviewerTeam:()=>VA,createSpawnAgentTool:()=>q$,createDelegatedAgentConfigProvider:()=>T$,createDelegatedAgent:()=>O$,createConfiguredAgentTools:()=>j4,createAgentTeamsTools:()=>A2,createAgentTeam:()=>tJ,buildTeamProgressSummary:()=>V4,buildDelegatedAgentConfig:()=>K2,buildConfiguredAgentToolName:()=>x5,buildConfiguredAgentToolDescriptors:()=>g5,bootstrapAgentTeams:()=>w8,AgentTeamsRuntime:()=>k2,AgentTeam:()=>G4});import{existsSync as $S,readdirSync as ZS,readFileSync as QS}from"node:fs";import{basename as eF,extname as WS,join as JS}from"node:path";import{resolveAgentConfigSearchPaths as XS}from"@cline/shared/storage";import ZA from"yaml";import{z as N0}from"zod";var QA=N0.object({name:N0.string().trim().min(1),description:N0.string().trim().min(1),tools:N0.union([N0.string(),N0.array(N0.string())]).optional(),skills:N0.union([N0.string(),N0.array(N0.string())]).optional(),providerId:N0.string().trim().min(1).optional(),modelId:N0.string().trim().min(1).optional(),maxIterations:N0.number().int().positive().optional()});function YS($){let Z=$.match(/^(---)[^\S\r\n]*(?:\r?\n|$)/);if(!Z)throw Error("Missing YAML frontmatter block in agent config file.");let Q=Z[0].length,W=/^---[^\S\r\n]*(?:\r?\n|$)/gm;W.lastIndex=Q;let J,X=Array.from($.matchAll(W)).filter((Y)=>Y.index>=Q);for(let Y of X){let j=Y.index,V=$.slice(Q,j);try{let H=ZA.parse(V);if(!H||typeof H!=="object"||Array.isArray(H))continue;QA.parse(H);let B=$.slice(j+Y[0].length);J={frontmatter:V,body:B}}catch{}}if(J)return J;throw Error("Missing closing YAML frontmatter delimiter in agent config file.")}function $A($){if($===void 0)return;let Z=Array.isArray($)?$:$.split(",");return Array.from(new Set(Z.map((Q)=>Q.trim()).filter((Q)=>Q.length>0)))}function jS($){return $.trim().toLowerCase()}function VS($){let Z=WS($).toLowerCase();return Z===".yml"||Z===".yaml"}function I5($,Z={}){let{frontmatter:Q,body:W}=YS($),J=ZA.parse(Q);if(!J||typeof J!=="object"||Array.isArray(J))throw Error("Agent config frontmatter must be a YAML mapping.");let X=QA.parse(J),Y=W.trim();if(!Y)throw Error("Missing system prompt body in agent config file.");return{name:X.name,description:X.description,tools:$A(X.tools),skills:$A(X.skills),providerId:X.providerId,modelId:X.modelId,maxIterations:X.maxIterations,systemPrompt:Y,path:Z.path}}function Y4($){let Z=$.searchPaths??XS($.workspaceRoot),Q=new Map,W=[];for(let X of Z.filter(Boolean)){if(!$S(X))continue;let Y;try{Y=ZS(X,{withFileTypes:!0})}catch(j){W.push({path:X,error:j instanceof Error?j:Error(String(j))});continue}for(let j of Y){if(!j.isFile()||!VS(j.name))continue;let V=JS(X,j.name);try{let H=QS(V,"utf8"),B=I5(H,{path:V}),G=jS(B.name);if(!Q.has(G))Q.set(G,B)}catch(H){W.push({path:V,error:H instanceof Error?H:Error(String(H))})}}}return{configs:Array.from(Q.values()).sort((X,Y)=>(X.path?eF(X.path):X.name).localeCompare(Y.path?eF(Y.path):Y.name)),errors:W}}import{createTool as HS,zodToJsonSchema as BS}from"@cline/shared";import{z as WA}from"zod";var sJ="subagent_",rQ=64,GS=WA.object({prompt:WA.string().trim().min(1).describe("Task for the subagent to perform")});function KS($){let Z="",Q=!0;for(let W of $.trim().toLowerCase()){let J=W.charCodeAt(0);if(!(J>=97&&J<=122||J>=48&&J<=57||W==="_")||W==="_"){if(!Q)Z+="_",Q=!0;continue}Z+=W,Q=!1}return Q?Z.slice(0,-1):Z}function FS($){let Z=2166136261;for(let Q=0;Q<$.length;Q++)Z^=$.charCodeAt(Q),Z=Math.imul(Z,16777619);return(Z>>>0).toString(36)}function x5($){let Z=KS($)||"agent",Q=FS($).slice(0,6),W=`${sJ}${Z}`;if(W.length<=rQ)return W;let J=rQ-sJ.length-Q.length-1,X=Z.slice(0,Math.max(1,J));return`${sJ}${X}_${Q}`.slice(0,rQ)}function g5($){let Z=new Set,Q=[];for(let W of[...$].sort((J,X)=>J.name.localeCompare(X.name))){let J=x5(W.name),X=J,Y=2;while(Z.has(X)){let j=`_${Y++}`,V=Math.max(1,rQ-j.length);X=`${J.slice(0,V)}${j}`}Z.add(X),Q.push({toolName:X,config:W})}return Q}function AS($,Z){return{...$,providerId:Z.providerId??$.providerId,modelId:Z.modelId??$.modelId,maxIterations:Z.maxIterations??$.maxIterations}}function j4($){return g5($.agents).map(({toolName:Z,config:Q})=>{return HS({name:Z,description:`Use the "${Q.name}" subagent: ${Q.description}`,inputSchema:BS(GS),execute:async(J,X)=>{let Y=$.configProvider.getRuntimeConfig(),j=T$(AS(Y,Q)),V=$.createSubAgentTools?await $.createSubAgentTools(Q,J,X):[],H=O$({kind:"subagent",prompt:Q.systemPrompt,configProvider:j,tools:V,maxIterations:Q.maxIterations,parentAgentId:X.agentId,abortSignal:X.signal,onEvent:$.onSubAgentEvent,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval}),B=H.getAgentId(),G=H.getConversationId(),K=X.agentId,F={systemPrompt:Q.systemPrompt,task:J.prompt};if($.onSubAgentStart)try{await $.onSubAgentStart({subAgentId:B,conversationId:G,parentAgentId:K,input:F})}catch{}try{let A=await H.run(J.prompt),L={text:A.text,iterations:A.iterations,finishReason:A.finishReason,usage:{inputTokens:A.usage.inputTokens,outputTokens:A.usage.outputTokens}};if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:B,conversationId:G,parentAgentId:K,input:F,result:L,agentResult:A})}catch{}return L}catch(A){if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:B,conversationId:G,parentAgentId:K,input:F,error:A instanceof Error?A:Error(String(A))})}catch{}throw A}},timeoutMs:300000,retryable:!1})})}function _1(){return new Date().toISOString()}function JA($,Z){if(Z<=0)return 0;return Math.round($/Z*100)}function fS($,Z){let Q=new Set;for(let J of Z)if(J.status==="reviewed")Q.add(`${J.outcomeId}:${J.section}`);let W=new Set;for(let J of $){if(J.status==="finalized")continue;for(let X of J.requiredSections)if(!Q.has(`${J.id}:${X}`))W.add(`${J.id}:${X}`)}return[...W].sort((J,X)=>J.localeCompare(X))}function V4($,Z){let Q={idle:0,running:0,stopped:0},W={pending:0,in_progress:0,blocked:0,completed:0},J={queued:0,running:0,completed:0,failed:0,cancelled:0,interrupted:0},X={draft:0,in_review:0,finalized:0},Y={draft:0,reviewed:0,rejected:0},j=0,V=0;for(let f of Z.members)if(Q[f.status]+=1,f.role==="lead")j+=1;else V+=1;let H=[],B=[],G=Z.tasks.filter((f)=>f.status==="completed").length,K=new Map(Z.tasks.map((f)=>[f.id,f]));for(let f of Z.tasks){if(W[f.status]+=1,f.status==="blocked"){H.push(f.id);continue}if(f.status!=="pending")continue;if(f.dependsOn.every((U)=>{return K.get(U)?.status==="completed"}))B.push(f.id)}let F=[],A,L=0;for(let f of Z.runs){if(J[f.status]+=1,f.status==="queued"||f.status==="running")F.push(f.id);let D=f.startedAt.getTime();if(D>=L)L=D,A=f.id}for(let f of Z.outcomes)X[f.status]+=1;for(let f of Z.outcomeFragments)Y[f.status]+=1;return{teamName:$,updatedAt:_1(),members:{total:Z.members.length,byStatus:Q,leadCount:j,teammateCount:V},tasks:{total:Z.tasks.length,byStatus:W,blockedTaskIds:H,readyTaskIds:B,completionPct:JA(G,Z.tasks.length)},runs:{total:Z.runs.length,byStatus:J,activeRunIds:F,latestRunId:A},outcomes:{total:Z.outcomes.length,byStatus:X,finalizedPct:JA(X.finalized,Z.outcomes.length),missingRequiredSections:fS(Z.outcomes,Z.outcomeFragments)},fragments:{total:Z.outcomeFragments.length,byStatus:Y}}}function H4($){let{event:Z}=$;switch(Z.type){case"team_task_updated":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:_1(),taskId:Z.task.id,agentId:Z.task.assignee??Z.task.createdBy};case"run_queued":case"run_started":case"run_completed":case"run_failed":case"run_cancelled":case"run_interrupted":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:_1(),runId:Z.run.id,taskId:Z.run.taskId,agentId:Z.run.agentId,message:Z.run.error};case"run_progress":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:_1(),runId:Z.run.id,taskId:Z.run.taskId,agentId:Z.run.agentId,message:Z.message};case"outcome_created":case"outcome_finalized":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:_1(),outcomeId:Z.outcome.id};case"outcome_fragment_attached":case"outcome_fragment_reviewed":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:_1(),outcomeId:Z.fragment.outcomeId,fragmentId:Z.fragment.id,agentId:Z.fragment.sourceAgentId};case"team_message":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:_1(),taskId:Z.message.taskId,agentId:Z.message.fromAgentId,message:Z.message.subject};case"team_mission_log":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:_1(),taskId:Z.entry.taskId,agentId:Z.entry.agentId,message:Z.entry.summary};case"teammate_spawned":case"teammate_shutdown":case"task_start":case"task_end":case"agent_event":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:_1(),agentId:Z.agentId}}return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:_1()}}import{sanitizeFileName as US,TeamMessageType as I}from"@cline/shared";import{nanoid as DS}from"nanoid";import{TeamMessageType as Nn}from"@cline/shared";function oJ($){if(typeof DOMException<"u"&&$ instanceof DOMException&&$.name==="AbortError")return!0;if(!($ instanceof Error))return!1;return $.name==="AbortError"||$.message.toLowerCase().includes("aborted")}function XA($,Z){return $?.status==="stopped"&&oJ(Z)}var LS=600000,YA="recovered_queued";function _S($){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 G4{agents=new Map;configs=new Map;onTeamEvent;constructor($,Z){if(this.onTeamEvent=Z,$)for(let[Q,W]of Object.entries($))this.addAgent(Q,W)}addAgent($,Z){if(this.agents.has($))throw Error(`Agent with id "${$}" already exists in the team`);let Q={...Z,onEvent:(J)=>{Z.onEvent?.(J),this.emitEvent({type:I.AgentEvent,agentId:$,event:J})}},W=new z$(Q);if(Q.onEvent)W.subscribeEvents(Q.onEvent);this.agents.set($,W),this.configs.set($,Z)}removeAgent($){return this.configs.delete($),this.agents.delete($)}getAgent($){return this.agents.get($)}getAgentIds(){return Array.from(this.agents.keys())}get size(){return this.agents.size}async routeTo($,Z){let Q=this.agents.get($);if(!Q)throw Error(`Agent "${$}" not found in team`);this.emitEvent({type:I.TaskStart,agentId:$,message:Z});try{let W=await Q.run(Z);return this.emitEvent({type:I.TaskEnd,agentId:$,result:W}),W}catch(W){let J=W instanceof Error?W:Error(String(W));throw this.emitEvent({type:I.TaskEnd,agentId:$,error:J,messages:Q.getMessages()}),W}}async continueTo($,Z){let Q=this.agents.get($);if(!Q)throw Error(`Agent "${$}" not found in team`);this.emitEvent({type:I.TaskStart,agentId:$,message:Z});try{let W=await Q.continue(Z);return this.emitEvent({type:I.TaskEnd,agentId:$,result:W}),W}catch(W){let J=W instanceof Error?W:Error(String(W));throw this.emitEvent({type:I.TaskEnd,agentId:$,error:J,messages:Q.getMessages()}),W}}async runParallel($){let Z=$.map(async(Q)=>{let W=this.agents.get(Q.agentId);if(!W)return{agentId:Q.agentId,result:void 0,error:Error(`Agent "${Q.agentId}" not found in team`),metadata:Q.metadata};this.emitEvent({type:I.TaskStart,agentId:Q.agentId,message:Q.message});try{let J=await W.run(Q.message);return this.emitEvent({type:I.TaskEnd,agentId:Q.agentId,result:J}),{agentId:Q.agentId,result:J,metadata:Q.metadata}}catch(J){let X=J instanceof Error?J:Error(String(J));return this.emitEvent({type:I.TaskEnd,agentId:Q.agentId,error:X,messages:W.getMessages()}),{agentId:Q.agentId,result:void 0,error:X,metadata:Q.metadata}}});return Promise.all(Z)}async runSequential($){let Z=[];for(let Q of $){let W=this.agents.get(Q.agentId);if(!W){Z.push({agentId:Q.agentId,result:void 0,error:Error(`Agent "${Q.agentId}" not found in team`),metadata:Q.metadata});continue}this.emitEvent({type:I.TaskStart,agentId:Q.agentId,message:Q.message});try{let J=await W.run(Q.message);this.emitEvent({type:I.TaskEnd,agentId:Q.agentId,result:J}),Z.push({agentId:Q.agentId,result:J,metadata:Q.metadata})}catch(J){let X=J instanceof Error?J:Error(String(J));this.emitEvent({type:I.TaskEnd,agentId:Q.agentId,error:X,messages:W.getMessages()}),Z.push({agentId:Q.agentId,result:void 0,error:X,metadata:Q.metadata})}}return Z}async runPipeline($,Z,Q){let W=[],J=Z;for(let X of $){let Y=this.agents.get(X);if(!Y){W.push({agentId:X,result:void 0,error:Error(`Agent "${X}" not found in team`)});break}this.emitEvent({type:I.TaskStart,agentId:X,message:J});try{let j=await Y.run(J);this.emitEvent({type:I.TaskEnd,agentId:X,result:j}),W.push({agentId:X,result:j});let V=$.indexOf(X)+1;if(V<$.length){let H=$[V];J=Q?Q(j,H):`Previous agent output:
519
519
  ${j.text}
520
520
 
521
- Please continue from here.`}}catch(j){let V=j instanceof Error?j:Error(String(j));this.emitEvent({type:I.TaskEnd,agentId:X,error:V,messages:Y.getMessages()}),W.push({agentId:X,result:void 0,error:V});break}}return W}abortAll(){for(let $ of this.agents.values())$.abort(Error("Agent team abortAll requested"))}clear(){this.abortAll(),this.agents.clear(),this.configs.clear()}emitEvent($){try{this.onTeamEvent?.($)}catch{}}}function tJ($,Z){return new G4($,Z)}function YA($){let Z=tJ({worker:$.worker,reviewer:$.reviewer}),Q=Z;return Q.doAndReview=async(W)=>{let J=await Z.routeTo("worker",W),X=await Z.routeTo("reviewer",`Please review this work:
521
+ Please continue from here.`}}catch(j){let V=j instanceof Error?j:Error(String(j));this.emitEvent({type:I.TaskEnd,agentId:X,error:V,messages:Y.getMessages()}),W.push({agentId:X,result:void 0,error:V});break}}return W}abortAll(){for(let $ of this.agents.values())$.abort(Error("Agent team abortAll requested"))}clear(){this.abortAll(),this.agents.clear(),this.configs.clear()}emitEvent($){try{this.onTeamEvent?.($)}catch{}}}function tJ($,Z){return new G4($,Z)}function VA($){let Z=tJ({worker:$.worker,reviewer:$.reviewer}),Q=Z;return Q.doAndReview=async(W)=>{let J=await Z.routeTo("worker",W),X=await Z.routeTo("reviewer",`Please review this work:
522
522
 
523
- ${J.text}`);return{workerResult:J,reviewResult:X}},Q}class h2{teamId;teamName;onTeamEvent;members=new Map;tasks=new Map;missionLog=[];mailbox=[];missionStepCounter=0;taskCounter=0;messageCounter=0;missionCounter=0;runCounter=0;outcomeCounter=0;outcomeFragmentCounter=0;runs=new Map;runQueue=[];queuedRunDispatchTimer;outcomes=new Map;outcomeFragments=new Map;missionLogIntervalSteps;missionLogIntervalMs;maxConcurrentRuns;constructor($){this.teamName=$.teamName,this.teamId=`t_${KS(FS(10))}`,this.onTeamEvent=$.onTeamEvent,this.missionLogIntervalSteps=Math.max(1,$.missionLogIntervalSteps??3),this.missionLogIntervalMs=Math.max(1000,$.missionLogIntervalMs??120000),this.maxConcurrentRuns=Math.max(1,$.maxConcurrentRuns??2);let Z=$.leadAgentId??"lead";this.members.set(Z,{agentId:Z,role:"lead",status:"idle",runningCount:0,lastMissionStep:0,lastMissionAt:Date.now()})}getTeamId(){return this.teamId}getTeamName(){return this.teamName}getMemberRole($){return this.members.get($)?.role}getMemberIds(){return Array.from(this.members.keys())}getTeammateIds(){return Array.from(this.members.values()).filter(($)=>$.role==="teammate").map(($)=>$.agentId)}getTask($){return this.tasks.get($)}listTasks(){return Array.from(this.tasks.values())}listTaskItems($){return Array.from(this.tasks.values()).map((Z)=>{let Q=this.getUnresolvedDependencies(Z);return{...Z,blockedBy:Q,isReady:Z.status==="pending"&&!Z.assignee&&Q.length===0}}).filter((Z)=>{if($?.status&&Z.status!==$.status)return!1;if($?.assignee&&Z.assignee!==$.assignee)return!1;return!0})}listMissionLog($){if(!$||$<=0)return[...this.missionLog];return this.missionLog.slice(Math.max(0,this.missionLog.length-$))}listMailbox($,Z){let Q=Z?.unreadOnly??!0,W=Z?.markRead??!0,J=Z?.limit,X=this.mailbox.filter((j)=>j.toAgentId===$&&(!Q||!j.readAt)),Y=typeof J==="number"&&J>0?X.slice(Math.max(0,X.length-J)):X;if(W){let j=new Date;for(let V of Y)if(!V.readAt)V.readAt=j}return Y.map((j)=>({...j}))}getSnapshot(){let $={pending:0,in_progress:0,blocked:0,completed:0};for(let Q of this.tasks.values())$[Q.status]++;let Z={draft:0,in_review:0,finalized:0};for(let Q of this.outcomes.values())Z[Q.status]++;return{teamId:this.teamId,teamName:this.teamName,members:Array.from(this.members.values()).map((Q)=>({agentId:Q.agentId,role:Q.role,description:Q.description,status:Q.status})),taskCounts:$,unreadMessages:this.mailbox.filter((Q)=>!Q.readAt).length,missionLogEntries:this.missionLog.length,activeRuns:Array.from(this.runs.values()).filter((Q)=>Q.status==="running").length,queuedRuns:Array.from(this.runs.values()).filter((Q)=>Q.status==="queued").length,outcomeCounts:Z}}exportState(){return{teamId:this.teamId,teamName:this.teamName,members:Array.from(this.members.values()).map(($)=>({agentId:$.agentId,role:$.role,description:$.description,status:$.status})),tasks:Array.from(this.tasks.values()).map(($)=>({...$})),mailbox:this.mailbox.map(($)=>({...$})),missionLog:this.missionLog.map(($)=>({...$})),runs:Array.from(this.runs.values()).map(($)=>({...$})),outcomes:Array.from(this.outcomes.values()).map(($)=>({...$})),outcomeFragments:Array.from(this.outcomeFragments.values()).map(($)=>({...$}))}}hydrateState($){this.clearQueuedRunDispatchTimer(),this.tasks.clear();for(let Q of $.tasks)this.tasks.set(Q.id,{...Q});this.mailbox.length=0,this.mailbox.push(...$.mailbox.map((Q)=>({...Q}))),this.missionLog.length=0,this.missionLog.push(...$.missionLog.map((Q)=>({...Q}))),this.runs.clear();for(let Q of $.runs??[])this.runs.set(Q.id,{...Q});this.runQueue.length=0,this.runQueue.push(...Array.from(this.runs.values()).filter((Q)=>Q.status==="queued").map((Q)=>Q.id)),this.outcomes.clear();for(let Q of $.outcomes??[])this.outcomes.set(Q.id,{...Q});this.outcomeFragments.clear();for(let Q of $.outcomeFragments??[])this.outcomeFragments.set(Q.id,{...Q});let Z=Array.from(this.members.values()).filter((Q)=>Q.role==="lead");this.members.clear();for(let Q of Z)this.members.set(Q.agentId,{...Q,status:"idle",runningCount:0,lastMissionStep:this.missionStepCounter,lastMissionAt:Date.now()});for(let Q of $.members){if(Q.role!=="teammate")continue;this.members.set(Q.agentId,{agentId:Q.agentId,role:"teammate",description:Q.description,status:"stopped",agent:void 0,runningCount:0,lastMissionStep:this.missionStepCounter,lastMissionAt:Date.now()})}this.taskCounter=Math.max(this.taskCounter,B4($.tasks.map((Q)=>Q.id),"task_")),this.messageCounter=Math.max(this.messageCounter,B4($.mailbox.map((Q)=>Q.id),"msg_")),this.missionCounter=Math.max(this.missionCounter,B4($.missionLog.map((Q)=>Q.id),"log_")),this.runCounter=Math.max(this.runCounter,B4(($.runs??[]).map((Q)=>Q.id),"run_")),this.outcomeCounter=Math.max(this.outcomeCounter,B4(($.outcomes??[]).map((Q)=>Q.id),"out_")),this.outcomeFragmentCounter=Math.max(this.outcomeFragmentCounter,B4(($.outcomeFragments??[]).map((Q)=>Q.id),"frag_"))}isTeammateActive($){let Z=this.members.get($);return!!Z&&Z.role==="teammate"&&!!Z.agent}spawnTeammate({agentId:$,config:Z}){let Q=this.members.get($);if(Q&&Q.role!=="teammate")throw Error(`Team member "${$}" already exists and is not a teammate`);if(Q&&Q.runningCount>0)throw Error(`Teammate "${$}" is currently running and cannot be respawned`);let W={...Z,apiTimeoutMs:AS,consumePendingUserMessage:()=>{let Y=this.members.get($);if(!Y||!Y.pendingSteerMessage)return;let j=Y.pendingSteerMessage;return Y.pendingSteerMessage=void 0,j},onEvent:(Y)=>{Z.onEvent?.(Y),this.emitEvent({type:I.AgentEvent,agentId:$,event:Y}),this.trackMeaningfulEvent($,Y)}},J=new z$(W);if(W.onEvent)J.subscribeEvents(W.onEvent);let X={agentId:$,role:"teammate",description:Z.role,status:"idle",agent:J,runningCount:0,lastMissionStep:0,lastMissionAt:Date.now()};return this.members.set($,X),this.emitEvent({type:I.TeammateSpawned,agentId:$,role:Z.role,teammate:{rolePrompt:Z.systemPrompt,modelId:Z.modelId,maxIterations:Z.maxIterations,runtimeAgentId:J.getAgentId(),conversationId:J.getConversationId(),parentAgentId:null}}),{agentId:X.agentId,role:X.role,description:X.description,status:X.status}}shutdownTeammate($,Z){let Q=this.members.get($);if(!Q||Q.role!=="teammate")throw Error(`Teammate "${$}" was not found`);try{Q.agent?.abort()}catch(W){if(!oJ(W))throw W}Q.status="stopped",this.emitEvent({type:I.TeammateShutdown,agentId:$,reason:Z})}updateTeammateConnections($){for(let Z of this.members.values()){if(Z.role!=="teammate"||!Z.agent)continue;Z.agent.updateConnection($)}}createTask($){let Z=`task_${String(++this.taskCounter).padStart(4,"0")}`,Q=new Date,W={id:Z,title:$.title,description:$.description,status:$.assignee?"in_progress":"pending",createdAt:Q,updatedAt:Q,createdBy:$.createdBy,assignee:$.assignee,dependsOn:$.dependsOn??[]};return this.tasks.set(Z,W),this.emitEvent({type:I.TeamTaskUpdated,task:{...W}}),{...W}}claimTask($,Z){let Q=this.requireTask($);return this.assertDependenciesResolved(Q),Q.status="in_progress",Q.assignee=Z,Q.updatedAt=new Date,this.emitEvent({type:I.TeamTaskUpdated,task:{...Q}}),this.appendMissionLog({agentId:Z,taskId:$,kind:"progress",summary:`Claimed task "${Q.title}"`}),{...Q}}blockTask($,Z,Q){let W=this.requireTask($);return W.status="blocked",W.updatedAt=new Date,W.summary=Q,this.emitEvent({type:I.TeamTaskUpdated,task:{...W}}),this.appendMissionLog({agentId:Z,taskId:$,kind:"blocked",summary:Q}),{...W}}completeTask($,Z,Q){let W=this.requireTask($);if(W.status="completed",W.updatedAt=new Date,W.summary=Q,!W.assignee)W.assignee=Z;return this.emitEvent({type:I.TeamTaskUpdated,task:{...W}}),this.appendMissionLog({agentId:Z,taskId:$,kind:"done",summary:Q}),{...W}}async routeToTeammate($,Z,Q){let W=this.members.get($);if(!W||W.role!=="teammate"||!W.agent)throw Error(`Teammate "${$}" was not found`);if(!W.agent.canStartRun())throw Error("Cannot start a new run while another run is already in progress");W.runningCount++,W.status="running",this.emitEvent({type:I.TaskStart,agentId:$,message:Z});try{let J=this.listMailbox($,{unreadOnly:!0,markRead:!0}),X=J.length>0?`${this.buildMailboxNotification(J)}
523
+ ${J.text}`);return{workerResult:J,reviewResult:X}},Q}class k2{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_${US(DS(10))}`,this.onTeamEvent=$.onTeamEvent,this.missionLogIntervalSteps=Math.max(1,$.missionLogIntervalSteps??3),this.missionLogIntervalMs=Math.max(1000,$.missionLogIntervalMs??120000),this.maxConcurrentRuns=Math.max(1,$.maxConcurrentRuns??2);let Z=$.leadAgentId??"lead";this.members.set(Z,{agentId:Z,role:"lead",status:"idle",runningCount:0,lastMissionStep:0,lastMissionAt:Date.now()})}getTeamId(){return this.teamId}getTeamName(){return this.teamName}getMemberRole($){return this.members.get($)?.role}getMemberIds(){return Array.from(this.members.keys())}getTeammateIds(){return Array.from(this.members.values()).filter(($)=>$.role==="teammate").map(($)=>$.agentId)}getTask($){return this.tasks.get($)}listTasks(){return Array.from(this.tasks.values())}listTaskItems($){return Array.from(this.tasks.values()).map((Z)=>{let Q=this.getUnresolvedDependencies(Z);return{...Z,blockedBy:Q,isReady:Z.status==="pending"&&!Z.assignee&&Q.length===0}}).filter((Z)=>{if($?.status&&Z.status!==$.status)return!1;if($?.assignee&&Z.assignee!==$.assignee)return!1;return!0})}listMissionLog($){if(!$||$<=0)return[...this.missionLog];return this.missionLog.slice(Math.max(0,this.missionLog.length-$))}listMailbox($,Z){let Q=Z?.unreadOnly??!0,W=Z?.markRead??!0,J=Z?.limit,X=this.mailbox.filter((j)=>j.toAgentId===$&&(!Q||!j.readAt)),Y=typeof J==="number"&&J>0?X.slice(Math.max(0,X.length-J)):X;if(W){let j=new Date;for(let V of Y)if(!V.readAt)V.readAt=j}return Y.map((j)=>({...j}))}getSnapshot(){let $={pending:0,in_progress:0,blocked:0,completed:0};for(let Q of this.tasks.values())$[Q.status]++;let Z={draft:0,in_review:0,finalized:0};for(let Q of this.outcomes.values())Z[Q.status]++;return{teamId:this.teamId,teamName:this.teamName,members:Array.from(this.members.values()).map((Q)=>({agentId:Q.agentId,role:Q.role,description:Q.description,status:Q.status})),taskCounts:$,unreadMessages:this.mailbox.filter((Q)=>!Q.readAt).length,missionLogEntries:this.missionLog.length,activeRuns:Array.from(this.runs.values()).filter((Q)=>Q.status==="running").length,queuedRuns:Array.from(this.runs.values()).filter((Q)=>Q.status==="queued").length,outcomeCounts:Z}}exportState(){return{teamId:this.teamId,teamName:this.teamName,members:Array.from(this.members.values()).map(($)=>({agentId:$.agentId,role:$.role,description:$.description,status:$.status})),tasks:Array.from(this.tasks.values()).map(($)=>({...$})),mailbox:this.mailbox.map(($)=>({...$})),missionLog:this.missionLog.map(($)=>({...$})),runs:Array.from(this.runs.values()).map(($)=>({...$})),outcomes:Array.from(this.outcomes.values()).map(($)=>({...$})),outcomeFragments:Array.from(this.outcomeFragments.values()).map(($)=>({...$}))}}hydrateState($){this.clearQueuedRunDispatchTimer(),this.tasks.clear();for(let Q of $.tasks)this.tasks.set(Q.id,{...Q});this.mailbox.length=0,this.mailbox.push(...$.mailbox.map((Q)=>({...Q}))),this.missionLog.length=0,this.missionLog.push(...$.missionLog.map((Q)=>({...Q}))),this.runs.clear();for(let Q of $.runs??[])this.runs.set(Q.id,{...Q});this.runQueue.length=0,this.runQueue.push(...Array.from(this.runs.values()).filter((Q)=>Q.status==="queued").map((Q)=>Q.id)),this.outcomes.clear();for(let Q of $.outcomes??[])this.outcomes.set(Q.id,{...Q});this.outcomeFragments.clear();for(let Q of $.outcomeFragments??[])this.outcomeFragments.set(Q.id,{...Q});let Z=Array.from(this.members.values()).filter((Q)=>Q.role==="lead");this.members.clear();for(let Q of Z)this.members.set(Q.agentId,{...Q,status:"idle",runningCount:0,lastMissionStep:this.missionStepCounter,lastMissionAt:Date.now()});for(let Q of $.members){if(Q.role!=="teammate")continue;this.members.set(Q.agentId,{agentId:Q.agentId,role:"teammate",description:Q.description,status:"stopped",agent:void 0,runningCount:0,lastMissionStep:this.missionStepCounter,lastMissionAt:Date.now()})}this.taskCounter=Math.max(this.taskCounter,B4($.tasks.map((Q)=>Q.id),"task_")),this.messageCounter=Math.max(this.messageCounter,B4($.mailbox.map((Q)=>Q.id),"msg_")),this.missionCounter=Math.max(this.missionCounter,B4($.missionLog.map((Q)=>Q.id),"log_")),this.runCounter=Math.max(this.runCounter,B4(($.runs??[]).map((Q)=>Q.id),"run_")),this.outcomeCounter=Math.max(this.outcomeCounter,B4(($.outcomes??[]).map((Q)=>Q.id),"out_")),this.outcomeFragmentCounter=Math.max(this.outcomeFragmentCounter,B4(($.outcomeFragments??[]).map((Q)=>Q.id),"frag_"))}isTeammateActive($){let Z=this.members.get($);return!!Z&&Z.role==="teammate"&&!!Z.agent}spawnTeammate({agentId:$,config:Z}){let Q=this.members.get($);if(Q&&Q.role!=="teammate")throw Error(`Team member "${$}" already exists and is not a teammate`);if(Q&&Q.runningCount>0)throw Error(`Teammate "${$}" is currently running and cannot be respawned`);let W={...Z,apiTimeoutMs:LS,consumePendingUserMessage:()=>{let Y=this.members.get($);if(!Y||!Y.pendingSteerMessage)return;let j=Y.pendingSteerMessage;return Y.pendingSteerMessage=void 0,j},onEvent:(Y)=>{Z.onEvent?.(Y),this.emitEvent({type:I.AgentEvent,agentId:$,event:Y}),this.trackMeaningfulEvent($,Y)}},J=new z$(W);if(W.onEvent)J.subscribeEvents(W.onEvent);let X={agentId:$,role:"teammate",description:Z.role,status:"idle",agent:J,runningCount:0,lastMissionStep:0,lastMissionAt:Date.now()};return this.members.set($,X),this.emitEvent({type:I.TeammateSpawned,agentId:$,role:Z.role,teammate:{rolePrompt:Z.systemPrompt,modelId:Z.modelId,maxIterations:Z.maxIterations,runtimeAgentId:J.getAgentId(),conversationId:J.getConversationId(),parentAgentId:null}}),{agentId:X.agentId,role:X.role,description:X.description,status:X.status}}shutdownTeammate($,Z){let Q=this.members.get($);if(!Q||Q.role!=="teammate")throw Error(`Teammate "${$}" was not found`);try{Q.agent?.abort()}catch(W){if(!oJ(W))throw W}Q.status="stopped",this.emitEvent({type:I.TeammateShutdown,agentId:$,reason:Z})}updateTeammateConnections($){for(let Z of this.members.values()){if(Z.role!=="teammate"||!Z.agent)continue;Z.agent.updateConnection($)}}createTask($){let Z=`task_${String(++this.taskCounter).padStart(4,"0")}`,Q=new Date,W={id:Z,title:$.title,description:$.description,status:$.assignee?"in_progress":"pending",createdAt:Q,updatedAt:Q,createdBy:$.createdBy,assignee:$.assignee,dependsOn:$.dependsOn??[]};return this.tasks.set(Z,W),this.emitEvent({type:I.TeamTaskUpdated,task:{...W}}),{...W}}claimTask($,Z){let Q=this.requireTask($);return this.assertDependenciesResolved(Q),Q.status="in_progress",Q.assignee=Z,Q.updatedAt=new Date,this.emitEvent({type:I.TeamTaskUpdated,task:{...Q}}),this.appendMissionLog({agentId:Z,taskId:$,kind:"progress",summary:`Claimed task "${Q.title}"`}),{...Q}}blockTask($,Z,Q){let W=this.requireTask($);return W.status="blocked",W.updatedAt=new Date,W.summary=Q,this.emitEvent({type:I.TeamTaskUpdated,task:{...W}}),this.appendMissionLog({agentId:Z,taskId:$,kind:"blocked",summary:Q}),{...W}}completeTask($,Z,Q){let W=this.requireTask($);if(W.status="completed",W.updatedAt=new Date,W.summary=Q,!W.assignee)W.assignee=Z;return this.emitEvent({type:I.TeamTaskUpdated,task:{...W}}),this.appendMissionLog({agentId:Z,taskId:$,kind:"done",summary:Q}),{...W}}async routeToTeammate($,Z,Q){let W=this.members.get($);if(!W||W.role!=="teammate"||!W.agent)throw Error(`Teammate "${$}" was not found`);if(!W.agent.canStartRun())throw Error("Cannot start a new run while another run is already in progress");W.runningCount++,W.status="running",this.emitEvent({type:I.TaskStart,agentId:$,message:Z});try{let J=this.listMailbox($,{unreadOnly:!0,markRead:!0}),X=J.length>0?`${this.buildMailboxNotification(J)}
524
524
 
525
- ${Z}`:Z,Y=Q?.continueConversation?await W.agent.continue(X):await W.agent.run(X);return this.emitEvent({type:I.TaskEnd,agentId:$,result:Y}),this.recordProgressStep($,`Completed a delegated run (${Y.iterations} iterations)`,Q?.taskId,!0),Y}catch(J){let X=J instanceof Error?J:Error(String(J));if(this.emitEvent({type:I.TaskEnd,agentId:$,error:X,messages:W.agent.getMessages()}),!WA(W,X))this.appendMissionLog({agentId:$,taskId:Q?.taskId,kind:"error",summary:X.message});throw X}finally{if(W.runningCount--,W.runningCount<=0&&this.members.get($)?.status!=="stopped")W.status="idle"}}startTeammateRun($,Z,Q){let W=`run_${String(++this.runCounter).padStart(5,"0")}`,J={id:W,agentId:$,taskId:Q?.taskId,status:"queued",message:Z,priority:Q?.priority??0,retryCount:0,maxRetries:Math.max(0,Q?.maxRetries??0),continueConversation:Q?.continueConversation,startedAt:new Date(0),leaseOwner:Q?.leaseOwner,heartbeatAt:void 0,lastProgressAt:new Date,lastProgressMessage:"queued",currentActivity:"queued"};return this.runs.set(W,J),this.runQueue.push(W),this.emitEvent({type:I.RunQueued,run:{...J}}),this.dispatchQueuedRuns(),{...J}}dispatchQueuedRuns(){this.clearQueuedRunDispatchTimer();let $;while(this.countActiveRuns()<this.maxConcurrentRuns&&this.runQueue.length>0){let Z=this.selectNextDispatchableQueuedRun();$=Z.nextDelayedAttemptAt;let Q=Z.index;if(Q<0){this.scheduleQueuedRunDispatch($);return}let[W]=this.runQueue.splice(Q,1),J=W?this.runs.get(W):void 0;if(!J||J.status!=="queued")continue;this.executeQueuedRun(J)}this.scheduleQueuedRunDispatch($)}selectNextDispatchableQueuedRun(){let $=-1,Z=Number.NEGATIVE_INFINITY,Q,W=Date.now();for(let J=0;J<this.runQueue.length;J++){let X=this.runs.get(this.runQueue[J]);if(!X||X.status!=="queued")continue;if(X.nextAttemptAt&&X.nextAttemptAt.getTime()>W){if(!Q||X.nextAttemptAt<Q)Q=X.nextAttemptAt;continue}if(X.priority>Z)Z=X.priority,$=J}return{index:$,nextDelayedAttemptAt:Q}}scheduleQueuedRunDispatch($){if(!$)return;let Z=Math.max(0,$.getTime()-Date.now());this.queuedRunDispatchTimer=setTimeout(()=>{this.queuedRunDispatchTimer=void 0,this.dispatchQueuedRuns()},Z)}clearQueuedRunDispatchTimer(){if(!this.queuedRunDispatchTimer)return;clearTimeout(this.queuedRunDispatchTimer),this.queuedRunDispatchTimer=void 0}countActiveRuns(){let $=0;for(let Z of this.runs.values())if(Z.status==="running")$++;return $}async executeQueuedRun($){let Z=$.currentActivity===JA;$.nextAttemptAt=void 0,$.status="running",$.startedAt=new Date,$.heartbeatAt=new Date,$.currentActivity="run_started",this.emitEvent({type:I.RunStarted,run:{...$}});let Q=setInterval(()=>{if($.status!=="running")return;this.recordRunProgress($,"heartbeat")},2000);try{let W=Z?fS($):$.message,J=await this.routeToTeammate($.agentId,W,{taskId:$.taskId,continueConversation:$.continueConversation});$.status="completed",$.result=J,$.endedAt=new Date,$.currentActivity="completed",this.emitEvent({type:I.RunCompleted,run:{...$}})}catch(W){let J=W instanceof Error?W.message:String(W??"Unknown error");$.error=J,$.endedAt=new Date;let X=this.members.get($.agentId);if(WA(X,W))$.status="cancelled",$.currentActivity="cancelled",this.emitEvent({type:I.RunCancelled,run:{...$},reason:J});else if($.retryCount<$.maxRetries)$.retryCount++,$.status="queued",$.nextAttemptAt=new Date(Date.now()+Math.min(30000,1000*2**$.retryCount)),this.runQueue.push($.id),this.recordRunProgress($,`retry_scheduled_${$.retryCount}`);else $.status="failed",$.currentActivity="failed",this.emitEvent({type:I.RunFailed,run:{...$}})}finally{clearInterval(Q),this.dispatchQueuedRuns()}}listRuns($){let Z=$?.includeCompleted??!0;return Array.from(this.runs.values()).filter((Q)=>{if(!Z&&!["running","queued"].includes(Q.status))return!1;if($?.status&&Q.status!==$.status)return!1;if($?.agentId&&Q.agentId!==$.agentId)return!1;return!0}).map((Q)=>({...Q}))}getRun($){let Z=this.runs.get($);return Z?{...Z}:void 0}async awaitRun($,Z=250){let Q=this.runs.get($);if(!Q)throw Error(`Run "${$}" was not found`);while(Q.status==="queued"||Q.status==="running")await XA(Z);return{...Q}}async awaitAllRuns($=250){while(Array.from(this.runs.values()).some((Z)=>["queued","running"].includes(Z.status)))await XA($);return this.listRuns()}cancelRun($,Z){let Q=this.runs.get($);if(!Q)throw Error(`Run "${$}" was not found`);if(Q.status==="completed"||Q.status==="failed")return{...Q};Q.status="cancelled",Q.error=Z,Q.endedAt=new Date,Q.currentActivity="cancelled";let W=this.runQueue.indexOf($);if(W>=0)this.runQueue.splice(W,1);return this.emitEvent({type:I.RunCancelled,run:{...Q},reason:Z}),{...Q}}recoverActiveRuns($="runtime_recovered"){let Z=[];for(let Q of this.runs.values()){if(!["queued","running"].includes(Q.status))continue;let W=this.members.get(Q.agentId);if(!W||W.role!=="teammate"||!W.agent){Q.status="interrupted",Q.error="teammate_unavailable_after_recovery",Q.endedAt=new Date,Q.currentActivity="interrupted",this.emitEvent({type:I.RunInterrupted,run:{...Q},reason:Q.error});continue}let J=new Date;if(Q.status="queued",Q.error=void 0,Q.endedAt=void 0,Q.heartbeatAt=J,Q.lastProgressAt=J,Q.lastProgressMessage=$,Q.currentActivity=JA,!this.runQueue.includes(Q.id))this.runQueue.push(Q.id);Z.push({...Q}),this.emitEvent({type:I.RunQueued,run:{...Q}})}return this.dispatchQueuedRuns(),Z}markStaleRunsInterrupted($="runtime_recovered"){let Z=[];for(let Q of this.runs.values()){if(!["queued","running"].includes(Q.status))continue;Q.status="interrupted",Q.error=$,Q.endedAt=new Date,Q.currentActivity="interrupted",Z.push({...Q}),this.emitEvent({type:I.RunInterrupted,run:{...Q},reason:$})}return this.runQueue.length=0,this.clearQueuedRunDispatchTimer(),Z}sendMessage($,Z,Q,W,J){if(!this.members.has($))throw Error(`Unknown sender "${$}"`);let X=this.members.get(Z);if(!X)throw Error(`Unknown recipient "${Z}"`);let Y={id:`msg_${String(++this.messageCounter).padStart(5,"0")}`,teamId:this.teamId,fromAgentId:$,toAgentId:Z,subject:Q,body:W,taskId:J,sentAt:new Date};if(this.mailbox.push(Y),this.emitEvent({type:I.TeamMessage,message:{...Y}}),X.role==="teammate"&&X.runningCount>0&&X.agent)X.pendingSteerMessage=`[MAILBOX] You got a message from ${$}. Subject: "${Q}". Use the team_read_mailbox tool to read it at your convenience.`;return{...Y}}broadcast($,Z,Q,W){let J=[];for(let X of this.members.values()){if(X.agentId===$)continue;if(X.role==="lead")continue;J.push(this.sendMessage($,X.agentId,Z,Q,W?.taskId))}return J}appendMissionLog($){if(!this.members.has($.agentId))throw Error(`Unknown team member "${$.agentId}"`);let Z={id:`log_${String(++this.missionCounter).padStart(6,"0")}`,ts:new Date,teamId:this.teamId,agentId:$.agentId,taskId:$.taskId,kind:$.kind,summary:$.summary,evidence:$.evidence,nextAction:$.nextAction};this.missionLog.push(Z);let Q=this.members.get($.agentId);if(Q)Q.lastMissionAt=Date.now(),Q.lastMissionStep=this.missionStepCounter;return this.emitEvent({type:I.TeamMissionLog,entry:{...Z}}),{...Z}}createOutcome($){let Z={id:`out_${String(++this.outcomeCounter).padStart(4,"0")}`,teamId:this.teamId,title:$.title,status:"draft",requiredSections:[...new Set($.requiredSections)],createdBy:$.createdBy,createdAt:new Date};return this.outcomes.set(Z.id,Z),this.emitEvent({type:I.OutcomeCreated,outcome:{...Z}}),{...Z}}listOutcomes(){return Array.from(this.outcomes.values()).map(($)=>({...$}))}attachOutcomeFragment($){let Z=this.outcomes.get($.outcomeId);if(!Z)throw Error(`Outcome "${$.outcomeId}" was not found`);if(!Z.requiredSections.includes($.section))throw Error(`Section "${$.section}" is not part of outcome "${$.outcomeId}"`);let Q={id:`frag_${String(++this.outcomeFragmentCounter).padStart(5,"0")}`,teamId:this.teamId,outcomeId:$.outcomeId,section:$.section,sourceAgentId:$.sourceAgentId,sourceRunId:$.sourceRunId,content:$.content,status:"draft",createdAt:new Date};if(this.outcomeFragments.set(Q.id,Q),Z.status==="draft")Z.status="in_review";return this.emitEvent({type:I.OutcomeFragmentAttached,fragment:{...Q}}),{...Q}}reviewOutcomeFragment($){let Z=this.outcomeFragments.get($.fragmentId);if(!Z)throw Error(`Fragment "${$.fragmentId}" was not found`);return Z.status=$.approved?"reviewed":"rejected",Z.reviewedBy=$.reviewedBy,Z.reviewedAt=new Date,this.emitEvent({type:I.OutcomeFragmentReviewed,fragment:{...Z}}),{...Z}}listOutcomeFragments($){return Array.from(this.outcomeFragments.values()).filter((Z)=>Z.outcomeId===$).map((Z)=>({...Z}))}finalizeOutcome($){let Z=this.outcomes.get($);if(!Z)throw Error(`Outcome "${$}" was not found`);let Q=this.listOutcomeFragments($);for(let W of Z.requiredSections)if(!Q.some((X)=>X.section===W&&X.status==="reviewed"))throw Error(`Outcome "${$}" cannot be finalized. Section "${W}" is missing a reviewed fragment.`);return Z.status="finalized",Z.finalizedAt=new Date,this.emitEvent({type:I.OutcomeFinalized,outcome:{...Z}}),{...Z}}cleanup(){for(let $ of this.members.values())if($.role==="teammate"&&$.runningCount>0)throw Error(`Cannot cleanup team while teammate "${$.agentId}" is still running`);if(Array.from(this.runs.values()).some(($)=>["queued","running"].includes($.status)))throw Error("Cannot cleanup team while async teammate runs are still active");for(let $ of this.members.values())if($.role==="teammate")try{$.agent?.abort()}catch(Z){if(!oJ(Z))throw Z}this.tasks.clear(),this.mailbox.length=0,this.missionLog.length=0,this.runs.clear(),this.runQueue.length=0,this.clearQueuedRunDispatchTimer(),this.outcomes.clear(),this.outcomeFragments.clear();for(let[$,Z]of this.members.entries())if(Z.role==="teammate")this.members.delete($)}requireTask($){let Z=this.tasks.get($);if(!Z)throw Error(`Task "${$}" was not found`);return Z}assertDependenciesResolved($){let Z=this.getUnresolvedDependencies($);if(Z.length>0)throw Error(`Task "${$.id}" is blocked by "${Z[0]}"`)}getUnresolvedDependencies($){return $.dependsOn.filter((Z)=>{let Q=this.tasks.get(Z);return!Q||Q.status!=="completed"})}trackMeaningfulEvent($,Z){if(this.recordRunActivityFromAgentEvent($,Z),Z.type==="iteration_end"&&Z.hadToolCalls){this.recordProgressStep($,`Completed iteration ${Z.iteration} with ${Z.toolCallCount} tool call(s)`);return}if(Z.type==="content_end"&&Z.contentType==="tool"&&!Z.error){this.recordProgressStep($,`Finished tool "${Z.toolName??"unknown"}"`);return}if(Z.type==="done"){this.appendMissionLog({agentId:$,kind:"done",summary:`Completed a delegated run (${Z.iterations} iterations)`});return}if(Z.type==="error")this.appendMissionLog({agentId:$,kind:"error",summary:Z.error.message})}recordRunActivityFromAgentEvent($,Z){let Q;switch(Z.type){case"iteration_start":Q=`iteration_${Z.iteration}_started`;break;case"content_start":if(Z.contentType==="tool")Q=`running_tool_${Z.toolName??"unknown"}`;break;case"content_end":if(Z.contentType==="tool")Q=Z.error?this.formatProgressErrorActivity(`tool_${Z.toolName??"unknown"}_error`,Z.error):`finished_tool_${Z.toolName??"unknown"}`;break;case"done":Q="finalizing_response";break;case"error":Q=this.formatProgressErrorActivity("run_error",Z.error.message);break;default:break}if(!Q)return;for(let W of this.runs.values()){if(W.agentId!==$||W.status!=="running")continue;this.recordRunProgress(W,Q)}}recordRunProgress($,Z){let Q=new Date;$.heartbeatAt=Q,$.lastProgressAt=Q,$.lastProgressMessage=Z,$.currentActivity=Z,this.emitEvent({type:I.RunProgress,run:{...$},message:Z})}formatProgressErrorActivity($,Z){let Q=Z.replace(/\s+/g," ").trim();if(Q.length===0)return $;let W=Q.length>240?`${Q.slice(0,237).trimEnd()}...`:Q;return`${$}: ${W}`}recordProgressStep($,Z,Q,W=!1){this.missionStepCounter++;let J=this.members.get($);if(!J)return;let X=this.missionStepCounter-J.lastMissionStep,Y=Date.now()-J.lastMissionAt;if(!W&&X<this.missionLogIntervalSteps&&Y<this.missionLogIntervalMs)return;this.appendMissionLog({agentId:$,taskId:Q,kind:"progress",summary:Z})}buildMailboxNotification($){if($.length===0)return"";let Z=[`[MAILBOX] You have ${$.length} unread message(s):`];for(let Q of $)Z.push(`--- Message from ${Q.fromAgentId} | subject: ${Q.subject} ---`),Z.push(Q.body);return Z.push("---"),Z.join(`
526
- `)}emitEvent($){try{this.onTeamEvent?.($)}catch{}}}function XA($){return new Promise((Z)=>setTimeout(Z,$))}function B4($,Z){let Q=0;for(let W of $){if(!W.startsWith(Z))continue;let J=Number.parseInt(W.slice(Z.length),10);if(Number.isFinite(J))Q=Math.max(Q,J)}return Q}function eJ($,Z){switch(Z.type){case"run_queued":case"run_started":$.activeTeamRunIds.add(Z.run.id);break;case"run_completed":case"run_failed":case"run_cancelled":case"run_interrupted":{let Q;if(Z.type==="run_failed")Q=Z.run.error;else if(Z.type==="run_cancelled"||Z.type==="run_interrupted")Q=Z.run.error??Z.reason;$.activeTeamRunIds.delete(Z.run.id),$.pendingTeamRunUpdates.push({runId:Z.run.id,agentId:Z.run.agentId,taskId:Z.run.taskId,status:Z.type.replace("run_",""),error:Q,iterations:Z.run.result?.iterations}),rQ($);break}default:break}}async function $X($,Z,Q){switch(Z.type){case"run_progress":await Q("onTeamTaskProgress",$,Z.run.agentId,Z.message,{kind:Z.message==="heartbeat"?"heartbeat":"progress"});break;case"agent_event":if(Z.event.type==="content_start"&&Z.event.contentType==="text"&&typeof Z.event.text==="string"){let W=Z.event.text.replace(/\s+/g," ").trim().slice(0,120);if(W)await Q("onTeamTaskProgress",$,Z.agentId,W,{kind:"text"})}break;case"task_start":await Q("onTeamTaskStart",$,Z.agentId,Z.message);break;case"task_end":{if(Z.error)await Q("onTeamTaskEnd",$,Z.agentId,"failed",`[error] ${Z.error.message}`,void 0,Z.messages);else if(Z.result?.finishReason==="aborted")await Q("onTeamTaskEnd",$,Z.agentId,"cancelled","[done] aborted",Z.result,Z.result.messages);else await Q("onTeamTaskEnd",$,Z.agentId,"completed",`[done] ${Z.result?.finishReason??"completed"}`,Z.result,Z.result?.messages);break}default:break}}function ZX($,Z,Q,W){if(!$.runtime.teamRuntime)return;let J=$.runtime.teamRuntime.getTeamName();W({type:"team_progress",payload:{sessionId:Z,teamName:J,lifecycle:H4({teamName:J,sessionId:Z,event:Q}),summary:V4(J,$.runtime.teamRuntime.exportState())}})}function m5($){return $.activeTeamRunIds.size>0||$.pendingTeamRunUpdates.length>0}function QX($,Z){if($.aborting)return!1;if(!(Z==="completed"||Z==="max_iterations"))return!1;return $.config.enableAgentTeams===!0&&m5($)}function rQ($){let Z=$.teamRunWaiters.splice(0);for(let Q of Z)Q()}async function WX($){while(!0){if($.aborting)return[];if($.pendingTeamRunUpdates.length>0){let Z=[...$.pendingTeamRunUpdates];return $.pendingTeamRunUpdates.length=0,Z}if($.activeTeamRunIds.size===0)return[];await new Promise((Z)=>{$.teamRunWaiters.push(Z)})}}function JX($,Z){let Q=Z.map((X)=>{let Y=[`- ${X.runId} (${X.agentId}) -> ${X.status}`];if(X.taskId)Y.push(` task=${X.taskId}`);if(typeof X.iterations==="number")Y.push(` iterations=${X.iterations}`);if(X.error)Y.push(` error=${X.error}`);return Y.join("")}),W=$.activeTeamRunIds.size,J=W>0?`There are still ${W} teammate run(s) in progress. Continue coordination and decide whether to wait for more updates.`:"No teammate runs are currently in progress. Continue coordination using these updates.";return v5(`System-delivered teammate async run updates:
525
+ ${Z}`:Z,Y=Q?.continueConversation?await W.agent.continue(X):await W.agent.run(X);return this.emitEvent({type:I.TaskEnd,agentId:$,result:Y}),this.recordProgressStep($,`Completed a delegated run (${Y.iterations} iterations)`,Q?.taskId,!0),Y}catch(J){let X=J instanceof Error?J:Error(String(J));if(this.emitEvent({type:I.TaskEnd,agentId:$,error:X,messages:W.agent.getMessages()}),!XA(W,X))this.appendMissionLog({agentId:$,taskId:Q?.taskId,kind:"error",summary:X.message});throw X}finally{if(W.runningCount--,W.runningCount<=0&&this.members.get($)?.status!=="stopped")W.status="idle"}}startTeammateRun($,Z,Q){let W=`run_${String(++this.runCounter).padStart(5,"0")}`,J={id:W,agentId:$,taskId:Q?.taskId,status:"queued",message:Z,priority:Q?.priority??0,retryCount:0,maxRetries:Math.max(0,Q?.maxRetries??0),continueConversation:Q?.continueConversation,startedAt:new Date(0),leaseOwner:Q?.leaseOwner,heartbeatAt:void 0,lastProgressAt:new Date,lastProgressMessage:"queued",currentActivity:"queued"};return this.runs.set(W,J),this.runQueue.push(W),this.emitEvent({type:I.RunQueued,run:{...J}}),this.dispatchQueuedRuns(),{...J}}dispatchQueuedRuns(){this.clearQueuedRunDispatchTimer();let $;while(this.countActiveRuns()<this.maxConcurrentRuns&&this.runQueue.length>0){let Z=this.selectNextDispatchableQueuedRun();$=Z.nextDelayedAttemptAt;let Q=Z.index;if(Q<0){this.scheduleQueuedRunDispatch($);return}let[W]=this.runQueue.splice(Q,1),J=W?this.runs.get(W):void 0;if(!J||J.status!=="queued")continue;this.executeQueuedRun(J)}this.scheduleQueuedRunDispatch($)}selectNextDispatchableQueuedRun(){let $=-1,Z=Number.NEGATIVE_INFINITY,Q,W=Date.now();for(let J=0;J<this.runQueue.length;J++){let X=this.runs.get(this.runQueue[J]);if(!X||X.status!=="queued")continue;if(X.nextAttemptAt&&X.nextAttemptAt.getTime()>W){if(!Q||X.nextAttemptAt<Q)Q=X.nextAttemptAt;continue}if(X.priority>Z)Z=X.priority,$=J}return{index:$,nextDelayedAttemptAt:Q}}scheduleQueuedRunDispatch($){if(!$)return;let Z=Math.max(0,$.getTime()-Date.now());this.queuedRunDispatchTimer=setTimeout(()=>{this.queuedRunDispatchTimer=void 0,this.dispatchQueuedRuns()},Z)}clearQueuedRunDispatchTimer(){if(!this.queuedRunDispatchTimer)return;clearTimeout(this.queuedRunDispatchTimer),this.queuedRunDispatchTimer=void 0}countActiveRuns(){let $=0;for(let Z of this.runs.values())if(Z.status==="running")$++;return $}async executeQueuedRun($){let Z=$.currentActivity===YA;$.nextAttemptAt=void 0,$.status="running",$.startedAt=new Date,$.heartbeatAt=new Date,$.currentActivity="run_started",this.emitEvent({type:I.RunStarted,run:{...$}});let Q=setInterval(()=>{if($.status!=="running")return;this.recordRunProgress($,"heartbeat")},2000);try{let W=Z?_S($):$.message,J=await this.routeToTeammate($.agentId,W,{taskId:$.taskId,continueConversation:$.continueConversation});$.status="completed",$.result=J,$.endedAt=new Date,$.currentActivity="completed",this.emitEvent({type:I.RunCompleted,run:{...$}})}catch(W){let J=W instanceof Error?W.message:String(W??"Unknown error");$.error=J,$.endedAt=new Date;let X=this.members.get($.agentId);if(XA(X,W))$.status="cancelled",$.currentActivity="cancelled",this.emitEvent({type:I.RunCancelled,run:{...$},reason:J});else if($.retryCount<$.maxRetries)$.retryCount++,$.status="queued",$.nextAttemptAt=new Date(Date.now()+Math.min(30000,1000*2**$.retryCount)),this.runQueue.push($.id),this.recordRunProgress($,`retry_scheduled_${$.retryCount}`);else $.status="failed",$.currentActivity="failed",this.emitEvent({type:I.RunFailed,run:{...$}})}finally{clearInterval(Q),this.dispatchQueuedRuns()}}listRuns($){let Z=$?.includeCompleted??!0;return Array.from(this.runs.values()).filter((Q)=>{if(!Z&&!["running","queued"].includes(Q.status))return!1;if($?.status&&Q.status!==$.status)return!1;if($?.agentId&&Q.agentId!==$.agentId)return!1;return!0}).map((Q)=>({...Q}))}getRun($){let Z=this.runs.get($);return Z?{...Z}:void 0}async awaitRun($,Z=250){let Q=this.runs.get($);if(!Q)throw Error(`Run "${$}" was not found`);while(Q.status==="queued"||Q.status==="running")await jA(Z);return{...Q}}async awaitAllRuns($=250){while(Array.from(this.runs.values()).some((Z)=>["queued","running"].includes(Z.status)))await jA($);return this.listRuns()}cancelRun($,Z){let Q=this.runs.get($);if(!Q)throw Error(`Run "${$}" was not found`);if(Q.status==="completed"||Q.status==="failed")return{...Q};Q.status="cancelled",Q.error=Z,Q.endedAt=new Date,Q.currentActivity="cancelled";let W=this.runQueue.indexOf($);if(W>=0)this.runQueue.splice(W,1);return this.emitEvent({type:I.RunCancelled,run:{...Q},reason:Z}),{...Q}}recoverActiveRuns($="runtime_recovered"){let Z=[];for(let Q of this.runs.values()){if(!["queued","running"].includes(Q.status))continue;let W=this.members.get(Q.agentId);if(!W||W.role!=="teammate"||!W.agent){Q.status="interrupted",Q.error="teammate_unavailable_after_recovery",Q.endedAt=new Date,Q.currentActivity="interrupted",this.emitEvent({type:I.RunInterrupted,run:{...Q},reason:Q.error});continue}let J=new Date;if(Q.status="queued",Q.error=void 0,Q.endedAt=void 0,Q.heartbeatAt=J,Q.lastProgressAt=J,Q.lastProgressMessage=$,Q.currentActivity=YA,!this.runQueue.includes(Q.id))this.runQueue.push(Q.id);Z.push({...Q}),this.emitEvent({type:I.RunQueued,run:{...Q}})}return this.dispatchQueuedRuns(),Z}markStaleRunsInterrupted($="runtime_recovered"){let Z=[];for(let Q of this.runs.values()){if(!["queued","running"].includes(Q.status))continue;Q.status="interrupted",Q.error=$,Q.endedAt=new Date,Q.currentActivity="interrupted",Z.push({...Q}),this.emitEvent({type:I.RunInterrupted,run:{...Q},reason:$})}return this.runQueue.length=0,this.clearQueuedRunDispatchTimer(),Z}sendMessage($,Z,Q,W,J){if(!this.members.has($))throw Error(`Unknown sender "${$}"`);let X=this.members.get(Z);if(!X)throw Error(`Unknown recipient "${Z}"`);let Y={id:`msg_${String(++this.messageCounter).padStart(5,"0")}`,teamId:this.teamId,fromAgentId:$,toAgentId:Z,subject:Q,body:W,taskId:J,sentAt:new Date};if(this.mailbox.push(Y),this.emitEvent({type:I.TeamMessage,message:{...Y}}),X.role==="teammate"&&X.runningCount>0&&X.agent)X.pendingSteerMessage=`[MAILBOX] You got a message from ${$}. Subject: "${Q}". Use the team_read_mailbox tool to read it at your convenience.`;return{...Y}}broadcast($,Z,Q,W){let J=[];for(let X of this.members.values()){if(X.agentId===$)continue;if(X.role==="lead")continue;J.push(this.sendMessage($,X.agentId,Z,Q,W?.taskId))}return J}appendMissionLog($){if(!this.members.has($.agentId))throw Error(`Unknown team member "${$.agentId}"`);let Z={id:`log_${String(++this.missionCounter).padStart(6,"0")}`,ts:new Date,teamId:this.teamId,agentId:$.agentId,taskId:$.taskId,kind:$.kind,summary:$.summary,evidence:$.evidence,nextAction:$.nextAction};this.missionLog.push(Z);let Q=this.members.get($.agentId);if(Q)Q.lastMissionAt=Date.now(),Q.lastMissionStep=this.missionStepCounter;return this.emitEvent({type:I.TeamMissionLog,entry:{...Z}}),{...Z}}createOutcome($){let Z={id:`out_${String(++this.outcomeCounter).padStart(4,"0")}`,teamId:this.teamId,title:$.title,status:"draft",requiredSections:[...new Set($.requiredSections)],createdBy:$.createdBy,createdAt:new Date};return this.outcomes.set(Z.id,Z),this.emitEvent({type:I.OutcomeCreated,outcome:{...Z}}),{...Z}}listOutcomes(){return Array.from(this.outcomes.values()).map(($)=>({...$}))}attachOutcomeFragment($){let Z=this.outcomes.get($.outcomeId);if(!Z)throw Error(`Outcome "${$.outcomeId}" was not found`);if(!Z.requiredSections.includes($.section))throw Error(`Section "${$.section}" is not part of outcome "${$.outcomeId}"`);let Q={id:`frag_${String(++this.outcomeFragmentCounter).padStart(5,"0")}`,teamId:this.teamId,outcomeId:$.outcomeId,section:$.section,sourceAgentId:$.sourceAgentId,sourceRunId:$.sourceRunId,content:$.content,status:"draft",createdAt:new Date};if(this.outcomeFragments.set(Q.id,Q),Z.status==="draft")Z.status="in_review";return this.emitEvent({type:I.OutcomeFragmentAttached,fragment:{...Q}}),{...Q}}reviewOutcomeFragment($){let Z=this.outcomeFragments.get($.fragmentId);if(!Z)throw Error(`Fragment "${$.fragmentId}" was not found`);return Z.status=$.approved?"reviewed":"rejected",Z.reviewedBy=$.reviewedBy,Z.reviewedAt=new Date,this.emitEvent({type:I.OutcomeFragmentReviewed,fragment:{...Z}}),{...Z}}listOutcomeFragments($){return Array.from(this.outcomeFragments.values()).filter((Z)=>Z.outcomeId===$).map((Z)=>({...Z}))}finalizeOutcome($){let Z=this.outcomes.get($);if(!Z)throw Error(`Outcome "${$}" was not found`);let Q=this.listOutcomeFragments($);for(let W of Z.requiredSections)if(!Q.some((X)=>X.section===W&&X.status==="reviewed"))throw Error(`Outcome "${$}" cannot be finalized. Section "${W}" is missing a reviewed fragment.`);return Z.status="finalized",Z.finalizedAt=new Date,this.emitEvent({type:I.OutcomeFinalized,outcome:{...Z}}),{...Z}}cleanup(){for(let $ of this.members.values())if($.role==="teammate"&&$.runningCount>0)throw Error(`Cannot cleanup team while teammate "${$.agentId}" is still running`);if(Array.from(this.runs.values()).some(($)=>["queued","running"].includes($.status)))throw Error("Cannot cleanup team while async teammate runs are still active");for(let $ of this.members.values())if($.role==="teammate")try{$.agent?.abort()}catch(Z){if(!oJ(Z))throw Z}this.tasks.clear(),this.mailbox.length=0,this.missionLog.length=0,this.runs.clear(),this.runQueue.length=0,this.clearQueuedRunDispatchTimer(),this.outcomes.clear(),this.outcomeFragments.clear();for(let[$,Z]of this.members.entries())if(Z.role==="teammate")this.members.delete($)}requireTask($){let Z=this.tasks.get($);if(!Z)throw Error(`Task "${$}" was not found`);return Z}assertDependenciesResolved($){let Z=this.getUnresolvedDependencies($);if(Z.length>0)throw Error(`Task "${$.id}" is blocked by "${Z[0]}"`)}getUnresolvedDependencies($){return $.dependsOn.filter((Z)=>{let Q=this.tasks.get(Z);return!Q||Q.status!=="completed"})}trackMeaningfulEvent($,Z){if(this.recordRunActivityFromAgentEvent($,Z),Z.type==="iteration_end"&&Z.hadToolCalls){this.recordProgressStep($,`Completed iteration ${Z.iteration} with ${Z.toolCallCount} tool call(s)`);return}if(Z.type==="content_end"&&Z.contentType==="tool"&&!Z.error){this.recordProgressStep($,`Finished tool "${Z.toolName??"unknown"}"`);return}if(Z.type==="done"){this.appendMissionLog({agentId:$,kind:"done",summary:`Completed a delegated run (${Z.iterations} iterations)`});return}if(Z.type==="error")this.appendMissionLog({agentId:$,kind:"error",summary:Z.error.message})}recordRunActivityFromAgentEvent($,Z){let Q;switch(Z.type){case"iteration_start":Q=`iteration_${Z.iteration}_started`;break;case"content_start":if(Z.contentType==="tool")Q=`running_tool_${Z.toolName??"unknown"}`;break;case"content_end":if(Z.contentType==="tool")Q=Z.error?this.formatProgressErrorActivity(`tool_${Z.toolName??"unknown"}_error`,Z.error):`finished_tool_${Z.toolName??"unknown"}`;break;case"done":Q="finalizing_response";break;case"error":Q=this.formatProgressErrorActivity("run_error",Z.error.message);break;default:break}if(!Q)return;for(let W of this.runs.values()){if(W.agentId!==$||W.status!=="running")continue;this.recordRunProgress(W,Q)}}recordRunProgress($,Z){let Q=new Date;$.heartbeatAt=Q,$.lastProgressAt=Q,$.lastProgressMessage=Z,$.currentActivity=Z,this.emitEvent({type:I.RunProgress,run:{...$},message:Z})}formatProgressErrorActivity($,Z){let Q=Z.replace(/\s+/g," ").trim();if(Q.length===0)return $;let W=Q.length>240?`${Q.slice(0,237).trimEnd()}...`:Q;return`${$}: ${W}`}recordProgressStep($,Z,Q,W=!1){this.missionStepCounter++;let J=this.members.get($);if(!J)return;let X=this.missionStepCounter-J.lastMissionStep,Y=Date.now()-J.lastMissionAt;if(!W&&X<this.missionLogIntervalSteps&&Y<this.missionLogIntervalMs)return;this.appendMissionLog({agentId:$,taskId:Q,kind:"progress",summary:Z})}buildMailboxNotification($){if($.length===0)return"";let Z=[`[MAILBOX] You have ${$.length} unread message(s):`];for(let Q of $)Z.push(`--- Message from ${Q.fromAgentId} | subject: ${Q.subject} ---`),Z.push(Q.body);return Z.push("---"),Z.join(`
526
+ `)}emitEvent($){try{this.onTeamEvent?.($)}catch{}}}function jA($){return new Promise((Z)=>setTimeout(Z,$))}function B4($,Z){let Q=0;for(let W of $){if(!W.startsWith(Z))continue;let J=Number.parseInt(W.slice(Z.length),10);if(Number.isFinite(J))Q=Math.max(Q,J)}return Q}function eJ($,Z){switch(Z.type){case"run_queued":case"run_started":$.activeTeamRunIds.add(Z.run.id);break;case"run_completed":case"run_failed":case"run_cancelled":case"run_interrupted":{let Q;if(Z.type==="run_failed")Q=Z.run.error;else if(Z.type==="run_cancelled"||Z.type==="run_interrupted")Q=Z.run.error??Z.reason;$.activeTeamRunIds.delete(Z.run.id),$.pendingTeamRunUpdates.push({runId:Z.run.id,agentId:Z.run.agentId,taskId:Z.run.taskId,status:Z.type.replace("run_",""),error:Q,iterations:Z.run.result?.iterations}),iQ($);break}default:break}}async function $X($,Z,Q){switch(Z.type){case"run_progress":await Q("onTeamTaskProgress",$,Z.run.agentId,Z.message,{kind:Z.message==="heartbeat"?"heartbeat":"progress"});break;case"agent_event":if(Z.event.type==="content_start"&&Z.event.contentType==="text"&&typeof Z.event.text==="string"){let W=Z.event.text.replace(/\s+/g," ").trim().slice(0,120);if(W)await Q("onTeamTaskProgress",$,Z.agentId,W,{kind:"text"})}break;case"task_start":await Q("onTeamTaskStart",$,Z.agentId,Z.message);break;case"task_end":{if(Z.error)await Q("onTeamTaskEnd",$,Z.agentId,"failed",`[error] ${Z.error.message}`,void 0,Z.messages);else if(Z.result?.finishReason==="aborted")await Q("onTeamTaskEnd",$,Z.agentId,"cancelled","[done] aborted",Z.result,Z.result.messages);else await Q("onTeamTaskEnd",$,Z.agentId,"completed",`[done] ${Z.result?.finishReason??"completed"}`,Z.result,Z.result?.messages);break}default:break}}function ZX($,Z,Q,W){if(!$.runtime.teamRuntime)return;let J=$.runtime.teamRuntime.getTeamName();W({type:"team_progress",payload:{sessionId:Z,teamName:J,lifecycle:H4({teamName:J,sessionId:Z,event:Q}),summary:V4(J,$.runtime.teamRuntime.exportState())}})}function m5($){return $.activeTeamRunIds.size>0||$.pendingTeamRunUpdates.length>0}function QX($,Z){if($.aborting)return!1;if(!(Z==="completed"||Z==="max_iterations"))return!1;return $.config.enableAgentTeams===!0&&m5($)}function iQ($){let Z=$.teamRunWaiters.splice(0);for(let Q of Z)Q()}async function WX($){while(!0){if($.aborting)return[];if($.pendingTeamRunUpdates.length>0){let Z=[...$.pendingTeamRunUpdates];return $.pendingTeamRunUpdates.length=0,Z}if($.activeTeamRunIds.size===0)return[];await new Promise((Z)=>{$.teamRunWaiters.push(Z)})}}function JX($,Z){let Q=Z.map((X)=>{let Y=[`- ${X.runId} (${X.agentId}) -> ${X.status}`];if(X.taskId)Y.push(` task=${X.taskId}`);if(typeof X.iterations==="number")Y.push(` iterations=${X.iterations}`);if(X.error)Y.push(` error=${X.error}`);return Y.join("")}),W=$.activeTeamRunIds.size,J=W>0?`There are still ${W} teammate run(s) in progress. Continue coordination and decide whether to wait for more updates.`:"No teammate runs are currently in progress. Continue coordination using these updates.";return v5(`System-delivered teammate async run updates:
527
527
  ${Q.join(`
528
528
  `)}
529
529
 
530
- ${J}`,$.config.mode)}function v5($,Z){return US($,Z==="plan"?"plan":Z==="yolo"?"yolo":"act")}var XX=4;class e1{adapter;manifestStore;teamChildren;static STALE_REASON="failed_external_process_exit";static STALE_SOURCE="stale_session_reconciler";static TEAM_HEARTBEAT_LOG_INTERVAL_MS=30000;constructor($,Z={}){this.adapter=$;this.manifestStore=new nJ($,Z.messagesArtifactUploader,Z.logger),this.teamChildren=new lQ($,this.manifestStore,(Q,W,J)=>this.toPersistedMessages(Q,W,J),e1.TEAM_HEARTBEAT_LOG_INTERVAL_MS)}toPersistedMessages($,Z,Q){if(!$)return;return Z?kZ(Z.messages,Z,Q):hZ($)}ensureSessionsDir(){return this.manifestStore.ensureSessionsDir()}writeSessionManifest($,Z){this.manifestStore.writeSessionManifest($,Z)}readSessionManifest($){return this.manifestStore.readSessionManifest($)}async createRootSessionWithArtifacts($){let Z=$.startedAt??J0(),Q=$.sessionId.trim(),W=Q.length>0?Q:`${Date.now()}_${LS(5)}`,J=this.manifestStore.artifacts.sessionMessagesPath(W),X=this.manifestStore.artifacts.sessionManifestPath(W),Y=c6({metadata:$.metadata,prompt:$.prompt}),j={version:1,session_id:W,source:$.source,pid:$.pid,started_at:Z,status:"running",interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspace_root:$.workspaceRoot,team_name:$.teamName,enable_tools:$.enableTools,enable_spawn:$.enableSpawn,enable_teams:$.enableTeams,prompt:$.prompt?.trim()||void 0,metadata:Y,messages_path:J};return await this.adapter.upsertSession({sessionId:W,source:$.source,pid:$.pid,startedAt:Z,endedAt:null,exitCode:null,status:"running",statusLock:0,interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspaceRoot:$.workspaceRoot,teamName:$.teamName??null,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,parentSessionId:null,parentAgentId:null,agentId:null,conversationId:null,isSubagent:!1,prompt:j.prompt??null,metadata:M$(j.metadata),hookPath:"",messagesPath:J,updatedAt:J0()}),this.manifestStore.initializeMessagesFile(W,J,Z),this.manifestStore.writeSessionManifest(X,j),{manifestPath:X,messagesPath:J,manifest:j}}async updateSessionStatus($,Z,Q){let W;if((await WG(()=>this.adapter.getSession($),async(X)=>{return W=H0(Z)?void 0:J0(),this.adapter.updateSession({sessionId:$,status:Z,endedAt:W??null,exitCode:H0(Z)?null:typeof Q==="number"?Q:null,expectedStatusLock:X.statusLock})},XX)).updated){if(Z==="cancelled")await this.teamChildren.applyStatusToRunningChildSessions($,"cancelled");return{updated:!0,endedAt:W}}return{updated:!1}}async updateSession($){for(let Z=0;Z<XX;Z++){let Q=await this.adapter.getSession($.sessionId);if(!Q)return{updated:!1};let W=Q.metadata??void 0,J=$.metadata!==void 0?M$($.metadata)??{}:M$(W)??{},X=D2(typeof W?.title==="string"?W.title:void 0),Y=$.title!==void 0?D2($.title):X??y3($.prompt);if(Y)J.title=Y;else delete J.title;let j=$.metadata!==void 0||$.prompt!==void 0||$.title!==void 0;if(!(await this.adapter.updateSession({sessionId:$.sessionId,prompt:$.prompt,metadata:j?Object.keys(J).length>0?J:null:void 0,title:Y,expectedStatusLock:Q.statusLock})).updated)continue;let{path:H,manifest:B}=this.manifestStore.readManifestFile($.sessionId);if(B){if($.prompt!==void 0)B.prompt=$.prompt??void 0;let G=$.metadata!==void 0?M$($.metadata)??{}:M$(B.metadata)??{};if(Y)G.title=Y;B.metadata=Object.keys(G).length>0?G:void 0,this.manifestStore.writeSessionManifest(H,B)}return{updated:!0}}return{updated:!1}}queueSpawnRequest($){return this.teamChildren.queueSpawnRequest($)}upsertSubagentSession($){return this.teamChildren.upsertSubagentSession($)}upsertSubagentSessionFromHook($){return this.teamChildren.upsertSubagentSessionFromHook($)}appendSubagentHookAudit($,Z){return this.teamChildren.appendSubagentHookAudit(Z),Promise.resolve()}persistSessionMessages($,Z,Q){let W=hZ(Z);return this.manifestStore.persistSessionMessages($,W,Q)}applySubagentStatus($,Z){return this.teamChildren.applySubagentStatus($,Z)}applySubagentStatusBySessionId($,Z){return this.teamChildren.applySubagentStatusBySessionId($,Z)}applyStatusToRunningChildSessions($,Z){return this.teamChildren.applyStatusToRunningChildSessions($,Z)}onTeamTaskStart($,Z,Q){return this.teamChildren.onTeamTaskStart($,Z,Q)}onTeamTaskEnd($,Z,Q,W,J,X){return this.teamChildren.onTeamTaskEnd($,Z,Q,W,J,X)}onTeamTaskProgress($,Z,Q,W){return this.teamChildren.onTeamTaskProgress($,Z,Q,W)}handleSubAgentStart($,Z){return this.teamChildren.handleSubAgentStart($,Z)}handleSubAgentEnd($,Z){return this.teamChildren.handleSubAgentEnd($,Z)}isPidAlive($){if(!Number.isFinite($)||$<=0)return!1;try{return process.kill(Math.floor($),0),!0}catch(Z){return typeof Z==="object"&&Z!==null&&"code"in Z&&Z.code==="EPERM"}}async reconcileDeadRunningSession($){if(H0($.status)===!1||this.isPidAlive($.pid))return $;let Z=J0(),Q=e1.STALE_REASON;for(let W=0;W<XX;W++){let J=await this.adapter.getSession($.sessionId);if(!J)return;if(H0(J.status)===!1)return J;let X={...J.metadata??{},terminal_marker:Q,terminal_marker_at:Z,terminal_marker_pid:J.pid,terminal_marker_source:e1.STALE_SOURCE},Y=await this.adapter.updateSession({sessionId:J.sessionId,status:"failed",endedAt:Z,exitCode:1,metadata:X,expectedStatusLock:J.statusLock});if(!Y.updated)continue;await this.teamChildren.applyStatusToRunningChildSessions(J.sessionId,"failed");let j=QG(J,{status:"failed",endedAt:Z,exitCode:1,metadata:X}),{path:V}=this.manifestStore.readManifestFile(J.sessionId);return this.manifestStore.writeSessionManifest(V,j),this.manifestStore.appendStaleSessionHookLog(Z,J.sessionId,J.pid,Q,e1.STALE_SOURCE),{...J,status:"failed",endedAt:Z,exitCode:1,metadata:X,statusLock:Y.statusLock,updatedAt:Z}}return await this.adapter.getSession($.sessionId)}async listSessions($=200){let Z=Math.max(1,Math.floor($)),Q=Math.min(Z*5,2000);return await this.reconcileDeadSessions(Q),(await this.adapter.listSessions({limit:Q})).slice(0,Z).map((J)=>{let X=M$(J.metadata??void 0),Y=this.manifestStore.readSessionManifest(J.sessionId),j=D2(typeof Y?.metadata?.title==="string"?Y.metadata.title:void 0),V=j?{...X??{},title:j}:X;return{...J,metadata:V}})}async reconcileDeadSessions($=2000){let Z=Math.max(1,Math.floor($)),Q=(await Promise.all(["idle","running","pending"].map((J)=>this.adapter.listSessions({limit:Z,status:J})))).flat(),W=0;for(let J of Q){let X=await this.reconcileDeadRunningSession(J);if(X&&X.status!==J.status)W++}return W}async deleteSession($){let Z=$.trim();if(!Z)throw Error("session id is required");let Q=await this.adapter.getSession(Z);if(!Q)return{deleted:!1};if(await this.adapter.deleteSession(Z,!1),!Q.isSubagent){let W=await this.adapter.listSessions({limit:2000,parentSessionId:Z});await this.adapter.deleteSession(Z,!0),await Promise.allSettled(W.map(async(J)=>{await $J(J.cwd,J.sessionId),J5(J.messagesPath),J5(this.manifestStore.artifacts.sessionManifestPath(J.sessionId,!1)),this.manifestStore.artifacts.removeSessionDirIfEmpty(J.sessionId)}))}if(await $J(Q.cwd,Z),J5(Q.messagesPath),J5(this.manifestStore.artifacts.sessionManifestPath(Z,!1)),Q.isSubagent)this.manifestStore.artifacts.removeSessionDirIfEmpty(Z);else{let W=new Set([this.manifestStore.artifacts.sessionArtifactsDir(Z)]);for(let J of[Q.messagesPath])if(typeof J==="string"&&J.trim().length>0)W.add(DS(J));for(let J of W)this.manifestStore.artifacts.removeDir(J)}return{deleted:!0}}}function jX(){return new Date().toISOString()}function BA($,Z){let Q=`${$}.tmp`;TS(Q,`${JSON.stringify(Z,null,2)}
531
- `,"utf8"),zS(Q,$)}class GA{sessionsDirPath;constructor($=OS()){this.sessionsDirPath=$}ensureSessionsDir(){if(!YX(this.sessionsDirPath))_S(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}indexPath(){return HA(this.ensureSessionsDir(),"sessions.index.json")}spawnQueuePath(){return HA(this.ensureSessionsDir(),"subagent-spawn-queue.json")}readIndex(){let $=this.indexPath();if(!YX($))return{version:1,sessions:{}};try{let Z=JSON.parse(VA($,"utf8"));if(Z?.version===1&&Z.sessions)return Z}catch{}return{version:1,sessions:{}}}writeIndex($){BA(this.indexPath(),$)}readQueue(){let $=this.spawnQueuePath();if(!YX($))return{version:1,nextId:1,requests:[]};try{let Z=JSON.parse(VA($,"utf8"));if(Z?.version===1&&typeof Z.nextId==="number"&&Array.isArray(Z.requests))return Z}catch{}return{version:1,nextId:1,requests:[]}}writeQueue($){BA(this.spawnQueuePath(),$)}async upsertSession($){let Z=this.readIndex();Z.sessions[$.sessionId]=$,this.writeIndex(Z)}async getSession($){return this.readIndex().sessions[$]}async listSessions($){return Object.values(this.readIndex().sessions).filter((Z)=>$.parentSessionId!==void 0?Z.parentSessionId===$.parentSessionId:!0).filter((Z)=>$.status!==void 0?Z.status===$.status:!0).sort((Z,Q)=>Q.startedAt.localeCompare(Z.startedAt)).slice(0,$.limit)}async updateSession($){let Z=this.readIndex(),Q=Z.sessions[$.sessionId];if(!Q)return{updated:!1,statusLock:0};if($.expectedStatusLock!==void 0&&Q.statusLock!==$.expectedStatusLock)return{updated:!1,statusLock:Q.statusLock};let W=$.expectedStatusLock!==void 0?$.expectedStatusLock+1:Q.statusLock,J={...Q,status:$.status??Q.status,endedAt:$.endedAt!==void 0?$.endedAt:Q.endedAt??null,exitCode:$.exitCode!==void 0?$.exitCode:Q.exitCode??null,prompt:$.prompt!==void 0?$.prompt:Q.prompt??null,metadata:$.metadata!==void 0?$.metadata??null:Q.metadata??null,parentSessionId:$.parentSessionId!==void 0?$.parentSessionId??null:Q.parentSessionId??null,parentAgentId:$.parentAgentId!==void 0?$.parentAgentId??null:Q.parentAgentId??null,agentId:$.agentId!==void 0?$.agentId??null:Q.agentId??null,conversationId:$.conversationId!==void 0?$.conversationId??null:Q.conversationId??null,statusLock:W,isSubagent:$.setRunning||$.parentSessionId!==void 0?!0:Q.isSubagent,updatedAt:jX()};if($.setRunning)J.status="running",J.endedAt=null,J.exitCode=null;return Z.sessions[$.sessionId]=J,this.writeIndex(Z),{updated:!0,statusLock:J.statusLock}}async deleteSession($,Z){let Q=this.readIndex();if(!Q.sessions[$])return!1;if(delete Q.sessions[$],Z){for(let J of Object.values(Q.sessions))if(J.parentSessionId===$)delete Q.sessions[J.sessionId]}return this.writeIndex(Q),!0}async enqueueSpawnRequest($){let Z=this.readQueue();Z.requests.push({id:Z.nextId,rootSessionId:$.rootSessionId,parentAgentId:$.parentAgentId,task:$.task,systemPrompt:$.systemPrompt,createdAt:jX()}),Z.nextId+=1,this.writeQueue(Z)}async claimSpawnRequest($,Z){let Q=this.readQueue(),W=Q.requests.find((J)=>J.rootSessionId===$&&J.parentAgentId===Z&&!J.consumedAt);if(!W)return;return W.consumedAt=jX(),this.writeQueue(Q),W.task}}class VX extends e1{constructor($,Z={}){super(new GA($),Z)}ensureSessionsDir(){return super.ensureSessionsDir()}}var AA={};N(AA,{CoreSessionService:()=>_1});import{existsSync as qS,mkdirSync as MS}from"node:fs";import{resolveSessionDataDir as RS}from"@cline/shared/storage";var HX=`
530
+ ${J}`,$.config.mode)}function v5($,Z){return zS($,Z==="plan"?"plan":Z==="yolo"?"yolo":"act")}var XX=4;class e1{adapter;manifestStore;teamChildren;static STALE_REASON="failed_external_process_exit";static STALE_SOURCE="stale_session_reconciler";static TEAM_HEARTBEAT_LOG_INTERVAL_MS=30000;constructor($,Z={}){this.adapter=$;this.manifestStore=new nJ($,Z.messagesArtifactUploader,Z.logger),this.teamChildren=new pQ($,this.manifestStore,(Q,W,J)=>this.toPersistedMessages(Q,W,J),e1.TEAM_HEARTBEAT_LOG_INTERVAL_MS)}toPersistedMessages($,Z,Q){if(!$)return;return Z?IZ(Z.messages,Z,Q):kZ($)}ensureSessionsDir(){return this.manifestStore.ensureSessionsDir()}writeSessionManifest($,Z){this.manifestStore.writeSessionManifest($,Z)}readSessionManifest($){return this.manifestStore.readSessionManifest($)}async createRootSessionWithArtifacts($){let Z=$.startedAt??J0(),Q=$.sessionId.trim(),W=Q.length>0?Q:`${Date.now()}_${OS(5)}`,J=this.manifestStore.artifacts.sessionMessagesPath(W),X=this.manifestStore.artifacts.sessionManifestPath(W),Y=c6({metadata:$.metadata,prompt:$.prompt}),j={version:1,session_id:W,source:$.source,pid:$.pid,started_at:Z,status:"running",interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspace_root:$.workspaceRoot,team_name:$.teamName,enable_tools:$.enableTools,enable_spawn:$.enableSpawn,enable_teams:$.enableTeams,prompt:$.prompt?.trim()||void 0,metadata:Y,messages_path:J};return await this.adapter.upsertSession({sessionId:W,source:$.source,pid:$.pid,startedAt:Z,endedAt:null,exitCode:null,status:"running",statusLock:0,interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspaceRoot:$.workspaceRoot,teamName:$.teamName??null,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,parentSessionId:null,parentAgentId:null,agentId:null,conversationId:null,isSubagent:!1,prompt:j.prompt??null,metadata:M$(j.metadata),hookPath:"",messagesPath:J,updatedAt:J0()}),this.manifestStore.initializeMessagesFile(W,J,Z),this.manifestStore.writeSessionManifest(X,j),{manifestPath:X,messagesPath:J,manifest:j}}async updateSessionStatus($,Z,Q){let W;if((await XG(()=>this.adapter.getSession($),async(X)=>{return W=H0(Z)?void 0:J0(),this.adapter.updateSession({sessionId:$,status:Z,endedAt:W??null,exitCode:H0(Z)?null:typeof Q==="number"?Q:null,expectedStatusLock:X.statusLock})},XX)).updated){if(Z==="cancelled")await this.teamChildren.applyStatusToRunningChildSessions($,"cancelled");return{updated:!0,endedAt:W}}return{updated:!1}}async updateSession($){for(let Z=0;Z<XX;Z++){let Q=await this.adapter.getSession($.sessionId);if(!Q)return{updated:!1};let W=Q.metadata??void 0,J=$.metadata!==void 0?M$($.metadata)??{}:M$(W)??{},X=L2(typeof W?.title==="string"?W.title:void 0),Y=$.title!==void 0?L2($.title):X??y3($.prompt);if(Y)J.title=Y;else delete J.title;let j=$.metadata!==void 0||$.prompt!==void 0||$.title!==void 0;if(!(await this.adapter.updateSession({sessionId:$.sessionId,prompt:$.prompt,metadata:j?Object.keys(J).length>0?J:null:void 0,title:Y,expectedStatusLock:Q.statusLock})).updated)continue;let{path:H,manifest:B}=this.manifestStore.readManifestFile($.sessionId);if(B){if($.prompt!==void 0)B.prompt=$.prompt??void 0;let G=$.metadata!==void 0?M$($.metadata)??{}:M$(B.metadata)??{};if(Y)G.title=Y;B.metadata=Object.keys(G).length>0?G:void 0,this.manifestStore.writeSessionManifest(H,B)}return{updated:!0}}return{updated:!1}}queueSpawnRequest($){return this.teamChildren.queueSpawnRequest($)}upsertSubagentSession($){return this.teamChildren.upsertSubagentSession($)}upsertSubagentSessionFromHook($){return this.teamChildren.upsertSubagentSessionFromHook($)}appendSubagentHookAudit($,Z){return this.teamChildren.appendSubagentHookAudit(Z),Promise.resolve()}persistSessionMessages($,Z,Q){let W=kZ(Z);return this.manifestStore.persistSessionMessages($,W,Q)}applySubagentStatus($,Z){return this.teamChildren.applySubagentStatus($,Z)}applySubagentStatusBySessionId($,Z){return this.teamChildren.applySubagentStatusBySessionId($,Z)}applyStatusToRunningChildSessions($,Z){return this.teamChildren.applyStatusToRunningChildSessions($,Z)}onTeamTaskStart($,Z,Q){return this.teamChildren.onTeamTaskStart($,Z,Q)}onTeamTaskEnd($,Z,Q,W,J,X){return this.teamChildren.onTeamTaskEnd($,Z,Q,W,J,X)}onTeamTaskProgress($,Z,Q,W){return this.teamChildren.onTeamTaskProgress($,Z,Q,W)}handleSubAgentStart($,Z){return this.teamChildren.handleSubAgentStart($,Z)}handleSubAgentEnd($,Z){return this.teamChildren.handleSubAgentEnd($,Z)}isPidAlive($){if(!Number.isFinite($)||$<=0)return!1;try{return process.kill(Math.floor($),0),!0}catch(Z){return typeof Z==="object"&&Z!==null&&"code"in Z&&Z.code==="EPERM"}}async reconcileDeadRunningSession($){if(H0($.status)===!1||this.isPidAlive($.pid))return $;let Z=J0(),Q=e1.STALE_REASON;for(let W=0;W<XX;W++){let J=await this.adapter.getSession($.sessionId);if(!J)return;if(H0(J.status)===!1)return J;let X={...J.metadata??{},terminal_marker:Q,terminal_marker_at:Z,terminal_marker_pid:J.pid,terminal_marker_source:e1.STALE_SOURCE},Y=await this.adapter.updateSession({sessionId:J.sessionId,status:"failed",endedAt:Z,exitCode:1,metadata:X,expectedStatusLock:J.statusLock});if(!Y.updated)continue;await this.teamChildren.applyStatusToRunningChildSessions(J.sessionId,"failed");let j=JG(J,{status:"failed",endedAt:Z,exitCode:1,metadata:X}),{path:V}=this.manifestStore.readManifestFile(J.sessionId);return this.manifestStore.writeSessionManifest(V,j),this.manifestStore.appendStaleSessionHookLog(Z,J.sessionId,J.pid,Q,e1.STALE_SOURCE),{...J,status:"failed",endedAt:Z,exitCode:1,metadata:X,statusLock:Y.statusLock,updatedAt:Z}}return await this.adapter.getSession($.sessionId)}async listSessions($=200){let Z=Math.max(1,Math.floor($)),Q=Math.min(Z*5,2000);return await this.reconcileDeadSessions(Q),(await this.adapter.listSessions({limit:Q})).slice(0,Z).map((J)=>{let X=M$(J.metadata??void 0),Y=this.manifestStore.readSessionManifest(J.sessionId),j=L2(typeof Y?.metadata?.title==="string"?Y.metadata.title:void 0),V=j?{...X??{},title:j}:X;return{...J,metadata:V}})}async reconcileDeadSessions($=2000){let Z=Math.max(1,Math.floor($)),Q=(await Promise.all(["idle","running","pending"].map((J)=>this.adapter.listSessions({limit:Z,status:J})))).flat(),W=0;for(let J of Q){let X=await this.reconcileDeadRunningSession(J);if(X&&X.status!==J.status)W++}return W}async deleteSession($){let Z=$.trim();if(!Z)throw Error("session id is required");let Q=await this.adapter.getSession(Z);if(!Q)return{deleted:!1};if(await this.adapter.deleteSession(Z,!1),!Q.isSubagent){let W=await this.adapter.listSessions({limit:2000,parentSessionId:Z});await this.adapter.deleteSession(Z,!0),await Promise.allSettled(W.map(async(J)=>{await $J(J.cwd,J.sessionId),J5(J.messagesPath),J5(this.manifestStore.artifacts.sessionManifestPath(J.sessionId,!1)),this.manifestStore.artifacts.removeSessionDirIfEmpty(J.sessionId)}))}if(await $J(Q.cwd,Z),J5(Q.messagesPath),J5(this.manifestStore.artifacts.sessionManifestPath(Z,!1)),Q.isSubagent)this.manifestStore.artifacts.removeSessionDirIfEmpty(Z);else{let W=new Set([this.manifestStore.artifacts.sessionArtifactsDir(Z)]);for(let J of[Q.messagesPath])if(typeof J==="string"&&J.trim().length>0)W.add(TS(J));for(let J of W)this.manifestStore.artifacts.removeDir(J)}return{deleted:!0}}}function jX(){return new Date().toISOString()}function KA($,Z){let Q=`${$}.tmp`;RS(Q,`${JSON.stringify(Z,null,2)}
531
+ `,"utf8"),MS(Q,$)}class FA{sessionsDirPath;constructor($=ES()){this.sessionsDirPath=$}ensureSessionsDir(){if(!YX(this.sessionsDirPath))qS(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}indexPath(){return GA(this.ensureSessionsDir(),"sessions.index.json")}spawnQueuePath(){return GA(this.ensureSessionsDir(),"subagent-spawn-queue.json")}readIndex(){let $=this.indexPath();if(!YX($))return{version:1,sessions:{}};try{let Z=JSON.parse(BA($,"utf8"));if(Z?.version===1&&Z.sessions)return Z}catch{}return{version:1,sessions:{}}}writeIndex($){KA(this.indexPath(),$)}readQueue(){let $=this.spawnQueuePath();if(!YX($))return{version:1,nextId:1,requests:[]};try{let Z=JSON.parse(BA($,"utf8"));if(Z?.version===1&&typeof Z.nextId==="number"&&Array.isArray(Z.requests))return Z}catch{}return{version:1,nextId:1,requests:[]}}writeQueue($){KA(this.spawnQueuePath(),$)}async upsertSession($){let Z=this.readIndex();Z.sessions[$.sessionId]=$,this.writeIndex(Z)}async getSession($){return this.readIndex().sessions[$]}async listSessions($){return Object.values(this.readIndex().sessions).filter((Z)=>$.parentSessionId!==void 0?Z.parentSessionId===$.parentSessionId:!0).filter((Z)=>$.status!==void 0?Z.status===$.status:!0).sort((Z,Q)=>Q.startedAt.localeCompare(Z.startedAt)).slice(0,$.limit)}async updateSession($){let Z=this.readIndex(),Q=Z.sessions[$.sessionId];if(!Q)return{updated:!1,statusLock:0};if($.expectedStatusLock!==void 0&&Q.statusLock!==$.expectedStatusLock)return{updated:!1,statusLock:Q.statusLock};let W=$.expectedStatusLock!==void 0?$.expectedStatusLock+1:Q.statusLock,J={...Q,status:$.status??Q.status,endedAt:$.endedAt!==void 0?$.endedAt:Q.endedAt??null,exitCode:$.exitCode!==void 0?$.exitCode:Q.exitCode??null,prompt:$.prompt!==void 0?$.prompt:Q.prompt??null,metadata:$.metadata!==void 0?$.metadata??null:Q.metadata??null,parentSessionId:$.parentSessionId!==void 0?$.parentSessionId??null:Q.parentSessionId??null,parentAgentId:$.parentAgentId!==void 0?$.parentAgentId??null:Q.parentAgentId??null,agentId:$.agentId!==void 0?$.agentId??null:Q.agentId??null,conversationId:$.conversationId!==void 0?$.conversationId??null:Q.conversationId??null,statusLock:W,isSubagent:$.setRunning||$.parentSessionId!==void 0?!0:Q.isSubagent,updatedAt:jX()};if($.setRunning)J.status="running",J.endedAt=null,J.exitCode=null;return Z.sessions[$.sessionId]=J,this.writeIndex(Z),{updated:!0,statusLock:J.statusLock}}async deleteSession($,Z){let Q=this.readIndex();if(!Q.sessions[$])return!1;if(delete Q.sessions[$],Z){for(let J of Object.values(Q.sessions))if(J.parentSessionId===$)delete Q.sessions[J.sessionId]}return this.writeIndex(Q),!0}async enqueueSpawnRequest($){let Z=this.readQueue();Z.requests.push({id:Z.nextId,rootSessionId:$.rootSessionId,parentAgentId:$.parentAgentId,task:$.task,systemPrompt:$.systemPrompt,createdAt:jX()}),Z.nextId+=1,this.writeQueue(Z)}async claimSpawnRequest($,Z){let Q=this.readQueue(),W=Q.requests.find((J)=>J.rootSessionId===$&&J.parentAgentId===Z&&!J.consumedAt);if(!W)return;return W.consumedAt=jX(),this.writeQueue(Q),W.task}}class VX extends e1{constructor($,Z={}){super(new FA($),Z)}ensureSessionsDir(){return super.ensureSessionsDir()}}var UA={};N(UA,{CoreSessionService:()=>z1});import{existsSync as NS,mkdirSync as wS}from"node:fs";import{resolveSessionDataDir as CS}from"@cline/shared/storage";var HX=`
532
532
  session_id AS sessionId,
533
533
  source,
534
534
  pid,
@@ -555,7 +555,7 @@ ${J}`,$.config.mode)}function v5($,Z){return US($,Z==="plan"?"plan":Z==="yolo"?"
555
555
  metadata_json AS metadata,
556
556
  hook_path AS hookPath,
557
557
  messages_path AS messagesPath,
558
- updated_at AS updatedAt`;function BX($){$.interactive=$.interactive===1,$.enableTools=$.enableTools===1,$.enableSpawn=$.enableSpawn===1,$.enableTeams=$.enableTeams===1,$.isSubagent=$.isSubagent===1;let Z=$.metadata;if(typeof Z==="string"&&Z.trim())try{let Q=JSON.parse(Z);$.metadata=Q&&typeof Q==="object"&&!Array.isArray(Q)?Q:null}catch{$.metadata=null}else $.metadata=null;return $}function GX($){if(!$||Object.keys($).length===0)return null;return JSON.stringify($)}function KA($){return{...$,tasks:$.tasks.map((Z)=>({...Z,createdAt:new Date(Z.createdAt),updatedAt:new Date(Z.updatedAt)})),mailbox:$.mailbox.map((Z)=>({...Z,sentAt:new Date(Z.sentAt),readAt:Z.readAt?new Date(Z.readAt):void 0})),missionLog:$.missionLog.map((Z)=>({...Z,ts:new Date(Z.ts)})),runs:($.runs??[]).map((Z)=>({...Z,startedAt:new Date(Z.startedAt),endedAt:Z.endedAt?new Date(Z.endedAt):void 0,nextAttemptAt:Z.nextAttemptAt?new Date(Z.nextAttemptAt):void 0,heartbeatAt:Z.heartbeatAt?new Date(Z.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),finalizedAt:Z.finalizedAt?new Date(Z.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),reviewedAt:Z.reviewedAt?new Date(Z.reviewedAt):void 0}))}}class FA{store;sessionsDirPath;constructor($,Z=RS()){this.store=$;this.sessionsDirPath=Z}ensureSessionsDir(){if(!qS(this.sessionsDirPath))MS(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}async upsertSession($){this.store.run(`INSERT OR REPLACE INTO sessions (
558
+ updated_at AS updatedAt`;function BX($){$.interactive=$.interactive===1,$.enableTools=$.enableTools===1,$.enableSpawn=$.enableSpawn===1,$.enableTeams=$.enableTeams===1,$.isSubagent=$.isSubagent===1;let Z=$.metadata;if(typeof Z==="string"&&Z.trim())try{let Q=JSON.parse(Z);$.metadata=Q&&typeof Q==="object"&&!Array.isArray(Q)?Q:null}catch{$.metadata=null}else $.metadata=null;return $}function GX($){if(!$||Object.keys($).length===0)return null;return JSON.stringify($)}function AA($){return{...$,tasks:$.tasks.map((Z)=>({...Z,createdAt:new Date(Z.createdAt),updatedAt:new Date(Z.updatedAt)})),mailbox:$.mailbox.map((Z)=>({...Z,sentAt:new Date(Z.sentAt),readAt:Z.readAt?new Date(Z.readAt):void 0})),missionLog:$.missionLog.map((Z)=>({...Z,ts:new Date(Z.ts)})),runs:($.runs??[]).map((Z)=>({...Z,startedAt:new Date(Z.startedAt),endedAt:Z.endedAt?new Date(Z.endedAt):void 0,nextAttemptAt:Z.nextAttemptAt?new Date(Z.nextAttemptAt):void 0,heartbeatAt:Z.heartbeatAt?new Date(Z.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),finalizedAt:Z.finalizedAt?new Date(Z.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),reviewedAt:Z.reviewedAt?new Date(Z.reviewedAt):void 0}))}}class fA{store;sessionsDirPath;constructor($,Z=CS()){this.store=$;this.sessionsDirPath=Z}ensureSessionsDir(){if(!NS(this.sessionsDirPath))wS(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}async upsertSession($){this.store.run(`INSERT OR REPLACE INTO sessions (
559
559
  session_id, source, pid, started_at, ended_at, exit_code, status, status_lock, interactive,
560
560
  provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
561
561
  parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
@@ -571,17 +571,17 @@ ${J}`,$.config.mode)}function v5($,Z){return US($,Z==="plan"?"plan":Z==="yolo"?"
571
571
  WHERE session_id = ? AND status_lock = ?`,[J0(),$.expectedStatusLock+1,$.parentSessionId??null,$.parentAgentId??null,$.agentId??null,$.conversationId??null,$.prompt??null,$.sessionId,$.expectedStatusLock]).changes??0)>0,statusLock:$.expectedStatusLock+1}}let Z=[],Q=[];if($.status!==void 0)Z.push("status = ?"),Q.push($.status);if($.endedAt!==void 0)Z.push("ended_at = ?"),Q.push($.endedAt);if($.exitCode!==void 0)Z.push("exit_code = ?"),Q.push($.exitCode);if($.prompt!==void 0)Z.push("prompt = ?"),Q.push($.prompt??null);if($.metadata!==void 0)Z.push("metadata_json = ?"),Q.push(GX($.metadata));if($.parentSessionId!==void 0)Z.push("parent_session_id = ?"),Q.push($.parentSessionId??null);if($.parentAgentId!==void 0)Z.push("parent_agent_id = ?"),Q.push($.parentAgentId??null);if($.agentId!==void 0)Z.push("agent_id = ?"),Q.push($.agentId??null);if($.conversationId!==void 0)Z.push("conversation_id = ?"),Q.push($.conversationId??null);if(Z.length===0){let Y=await this.getSession($.sessionId);return{updated:!!Y,statusLock:Y?.statusLock??0}}let W=0;if($.expectedStatusLock!==void 0)W=$.expectedStatusLock+1,Z.push("status_lock = ?"),Q.push(W);Z.push("updated_at = ?"),Q.push(J0());let J=`UPDATE sessions SET ${Z.join(", ")} WHERE session_id = ?`;if(Q.push($.sessionId),$.expectedStatusLock!==void 0)J+=" AND status_lock = ?",Q.push($.expectedStatusLock);if((this.store.run(J,Q).changes??0)===0)return{updated:!1,statusLock:0};if($.expectedStatusLock===void 0)W=(await this.getSession($.sessionId))?.statusLock??0;return{updated:!0,statusLock:W}}async deleteSession($,Z){let Q=this.store.run("DELETE FROM sessions WHERE session_id = ?",[$]).changes??0;if(Z)this.store.run("DELETE FROM sessions WHERE parent_session_id = ?",[$]);return Q>0}async enqueueSpawnRequest($){this.store.run(`INSERT INTO subagent_spawn_queue (root_session_id, parent_agent_id, task, system_prompt, created_at, consumed_at)
572
572
  VALUES (?, ?, ?, ?, ?, NULL)`,[$.rootSessionId,$.parentAgentId,$.task??null,$.systemPrompt??null,J0()])}async claimSpawnRequest($,Z){let Q=this.store.queryOne(`SELECT id, task FROM subagent_spawn_queue
573
573
  WHERE root_session_id = ? AND parent_agent_id = ? AND consumed_at IS NULL
574
- ORDER BY id ASC LIMIT 1`,[$,Z]);if(!Q||typeof Q.id!=="number")return;return this.store.run("UPDATE subagent_spawn_queue SET consumed_at = ? WHERE id = ?",[J0(),Q.id]),Q.task??void 0}}class _1 extends e1{store;constructor($,Z={}){super(new FA($,Z.sessionArtifactsDir),Z);this.store=$}createRootSession($){this.store.run(`INSERT OR REPLACE INTO sessions (
574
+ ORDER BY id ASC LIMIT 1`,[$,Z]);if(!Q||typeof Q.id!=="number")return;return this.store.run("UPDATE subagent_spawn_queue SET consumed_at = ? WHERE id = ?",[J0(),Q.id]),Q.task??void 0}}class z1 extends e1{store;constructor($,Z={}){super(new fA($,Z.sessionArtifactsDir),Z);this.store=$}createRootSession($){this.store.run(`INSERT OR REPLACE INTO sessions (
575
575
  session_id, source, pid, started_at, ended_at, exit_code, status, status_lock, interactive,
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,J0()])}}function ES($){if($.backendMode)return $.backendMode;if(process.env.CLINE_VCR?.trim())return"local";let Z=process.env.CLINE_SESSION_BACKEND_MODE?.trim().toLowerCase();if(Z==="local"||Z==="hub"||Z==="remote")return Z;return"auto"}var c5,u5;function NS($,Z){if($!=="auto"&&$!=="hub")return;if(Z.hub?.endpoint?.trim())return;a9(Z.hub?.workspaceRoot?.trim()||Z.hub?.cwd?.trim()||process.cwd())}async function wS($){await $.reconcileDeadSessions?.().catch(()=>{})}function DA($){try{let Z=new D1;return Z.init(),new _1(Z,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}catch(Z){return $.telemetry?.capture({event:"session_backend_fallback",properties:{requestedBackend:"sqlite",fallbackBackend:"file"}}),UA($.telemetry,{component:"core",operation:"session_backend.sqlite_init",error:Z,severity:"warn",handled:!0,context:{requestedBackend:"sqlite",fallbackBackend:"file"}}),new VX(void 0,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}}function fA($,Z,Q){return new z1({sessionService:Q??$.sessionService??DA($),capabilities:$.capabilities,telemetry:$.telemetry,toolPolicies:$.toolPolicies,distinctId:Z,fetch:$.fetch})}async function KX($){if(c5)return c5;if(u5)return await u5;return u5=(async()=>{return c5=DA($),await wS(c5),c5})().finally(()=>{u5=void 0}),await u5}async function K4($){let Z=P0($.distinctId);$.telemetry?.setDistinctId(Z);let Q=ES($);if(NS(Q,$),Q==="remote"){let W=$.remote?.endpoint?.trim();if(!W)throw Error("Remote runtime mode requires `remote.endpoint` to be configured.");return $.logger?.log("Using remote runtime host",{endpoint:W}),new X4({endpoint:W,authToken:$.remote?.authToken,clientType:$.remote?.clientType,displayName:$.remote?.displayName,workspaceRoot:$.remote?.workspaceRoot,cwd:$.remote?.cwd,capabilities:$.capabilities})}if(Q==="hub"){let W=$.hub?.endpoint?.trim(),J=W||await e$({strategy:$.hub?.strategy??"require-hub",workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});if(!J)throw Error("No compatible hub runtime is available.");return $.logger?.log("Using hub runtime host",{url:J,explicitEndpoint:W||void 0}),new o1({url:J,authToken:$.hub?.authToken,clientType:$.hub?.clientType,displayName:$.hub?.displayName,capabilities:$.capabilities,telemetry:$.telemetry},{workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd})}if(Q==="auto"){let W=await o4({endpoint:$.hub?.endpoint,strategy:$.hub?.strategy??"prefer-hub",workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});if(W){$.logger?.log("Using discovered local hub runtime host",{url:W});let J=new o1({url:W,authToken:$.hub?.authToken,clientType:$.hub?.clientType,displayName:$.hub?.displayName,capabilities:$.capabilities,telemetry:$.telemetry},{workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});try{return await J.connect(),J}catch(X){$.logger?.log("Falling back to local runtime host",{reason:"hub_connect_failed",severity:"warn",error:X}),UA($.telemetry,{component:"core",operation:"runtime_host.hub_connect",error:X,severity:"warn",handled:!0,context:{backendMode:"auto",fallbackBackend:"local"}})}}return $.logger?.log("Falling back to local runtime host",{reason:"compatible_hub_unavailable",severity:"warn"}),fA($,Z)}return fA($,Z)}var RA={};N(RA,{createCheckpointComparePlan:()=>nQ,compareCheckpointToWorkspace:()=>d5,buildCheckpointWorkspaceDiff:()=>aQ});import{execFile as SS}from"node:child_process";import*as qA from"node:fs/promises";import*as f4 from"node:path";import{promisify as bS}from"node:util";var TA={};N(TA,{trimMessagesToCheckpoint:()=>zA,trimMessagesBeforeCheckpoint:()=>AX,readSessionCheckpointHistory:()=>k2,findCheckpointForRun:()=>A4,createRestoredCheckpointMetadata:()=>FX,createCheckpointRestorePlan:()=>fX,applyCheckpointToWorktree:()=>UX});import{execFile as CS}from"node:child_process";import{promisify as PS}from"node:util";var F4=PS(CS);function k2($){let Z=$?.metadata?.checkpoint&&typeof $.metadata.checkpoint==="object"&&!Array.isArray($.metadata.checkpoint)?$.metadata.checkpoint:void 0;return(Array.isArray(Z?.history)?Z.history:[]).filter((W)=>!!W&&typeof W==="object"&&!Array.isArray(W)).flatMap((W)=>{let J=String(W.ref??"").trim(),X=Number(W.createdAt??0),Y=Number(W.runCount??0);if(J.length===0||!Number.isFinite(X)||!Number.isInteger(Y)||Y<1)return[];let j=W.kind==="stash"||W.kind==="commit"?W.kind:void 0;return[{ref:J,createdAt:X,runCount:Y,...j?{kind:j}:{}}]})}function FX($,Z){let Q=k2($).filter((J)=>J.runCount<=Z),W=Q.at(-1);return W?{latest:W,history:Q}:void 0}function A4($,Z){return $.reduce((Q,W)=>{if(W.runCount>Z)return Q;if(!Q||W.runCount>Q.runCount)return W;return Q},void 0)}function _A($,Z){let Q=0;for(let W=0;W<$.length;W+=1){let J=$[W];if(J?.role!=="user")continue;if(("metadata"in J&&J.metadata&&typeof J.metadata==="object"?J.metadata:void 0)?.kind==="recovery_notice")continue;if(Q+=1,Q===Z)return W}throw Error(`Could not find user message for checkpoint run ${Z}`)}function zA($,Z){let Q=_A($,Z);return $.slice(0,Q+1)}function AX($,Z){let Q=_A($,Z);return $.slice(0,Q)}function fX($){let Z=$.checkpointRunCount;if(!Number.isInteger(Z)||Z<1)throw Error("checkpointRunCount must be a positive integer");let Q=A4(k2($.session),Z);if(!Q)throw Error(`No checkpoint found at or before run ${Z} in session ${$.session.sessionId}`);let W=($.cwd?.trim()||$.session.cwd||$.session.workspaceRoot).trim();if(!W)throw Error("cwd or workspaceRoot is required to restore a checkpoint");return{checkpoint:Q,cwd:W,...$.restoreMessages!==!1?{messages:zA($.messages??[],Z)}:{}}}async function UX($,Z){if((await F4("git",["-C",$,"rev-parse","--is-inside-work-tree"],{windowsHide:!0})).stdout.trim()!=="true")throw Error(`${$} is not a git repository`);if(await F4("git",["-C",$,"cat-file","-e",`${Z.ref}^{commit}`],{windowsHide:!0}),await F4("git",["-C",$,"reset","--hard"],{windowsHide:!0}),await F4("git",["-C",$,"clean","-fd"],{windowsHide:!0}),Z.kind==="commit"){await F4("git",["-C",$,"reset","--hard",Z.ref],{windowsHide:!0});return}await F4("git",["-C",$,"stash","apply",Z.ref],{windowsHide:!0})}var yS=bS(SS),hS=52428800;async function iQ($,Z){let{stdout:Q}=await yS("git",["-C",$,...Z],{windowsHide:!0,maxBuffer:hS,encoding:"utf8"});return Q}function OA($){return $.split("\x00").filter(Boolean)}function MA($,Z){let Q=f4.resolve($,Z),W=f4.relative($,Q);if(W.startsWith("..")||f4.isAbsolute(W))throw Error(`Checkpoint diff path escapes workspace: ${Z}`);return Q}async function kS($,Z,Q){try{return await iQ($,["show",`${Z}:${Q}`])}catch{return""}}async function IS($,Z){try{return await qA.readFile(MA($,Z),"utf8")}catch{return""}}async function xS($,Z){await iQ($,["cat-file","-e",`${Z.ref}^{tree}`]);let[Q,W]=await Promise.all([iQ($,["diff","--name-only","-z",Z.ref,"--"]),iQ($,["ls-files","--others","--exclude-standard","-z"])]);return[...new Set([...OA(Q),...OA(W)])].sort((X,Y)=>X.localeCompare(Y))}function nQ($){let Z=$.checkpointRunCount;if(!Number.isInteger(Z)||Z<1)throw Error("checkpointRunCount must be a positive integer");let Q=A4(k2($.session),Z);if(!Q)throw Error(`No checkpoint found at or before run ${Z} in session ${$.session.sessionId}`);let W=($.cwd?.trim()||$.session.cwd||$.session.workspaceRoot).trim();if(!W)throw Error("cwd or workspaceRoot is required to compare a checkpoint");return{checkpoint:Q,cwd:W}}async function aQ($,Z){let Q=await xS($,Z);return(await Promise.all(Q.map(async(J)=>{let[X,Y]=await Promise.all([kS($,Z.ref,J),IS($,J)]);return{filePath:MA($,J),leftContent:X,rightContent:Y}}))).filter((J)=>J.leftContent!==J.rightContent)}async function d5($){let Z=nQ($),Q=await aQ(Z.cwd,Z.checkpoint);return{...Z,diffs:Q}}var wA={};N(wA,{NoOpFeatureFlagsProvider:()=>x2,FeatureFlagsService:()=>I2});import{existsSync as gS,mkdirSync as mS,readFileSync as vS,writeFileSync as cS}from"node:fs";import{dirname as uS}from"node:path";import{FEATURE_FLAGS as EA,FeatureFlagDefaultValue as DX}from"@cline/shared";var dS=3600000,lS=604800000,NA=1;class I2{provider;telemetry;logger;cacheTtlMs;cacheFilePath;persistentCacheMaxAgeMs;context;cache=new Map;cacheInfo={updateTime:0,userId:null};constructor($){this.provider=$.provider,this.telemetry=$.telemetry,this.logger=$.logger,this.cacheTtlMs=$.cacheTtlMs??dS,this.cacheFilePath=$.cacheFilePath,this.persistentCacheMaxAgeMs=$.persistentCacheMaxAgeMs??lS,this.context={...$.context??{}},this.hydrateFromPersistentCache()}setContext($){this.context={...$}}hydrateCache($){this.cacheInfo={updateTime:$.updateTime,userId:$.userId,flagsPayload:$.flagsPayload},this.rebuildCacheFromSnapshot($.flagsPayload)}getCacheSnapshot(){return{updateTime:this.cacheInfo.updateTime,userId:this.cacheInfo.userId,flagsPayload:this.cacheInfo.flagsPayload}}async poll($){let Z=$??this.context.userId??null,Q=Date.now();if(Q-this.cacheInfo.updateTime<this.cacheTtlMs){if(this.cacheInfo.userId===Z)return}let W=this.cacheInfo;this.cacheInfo={updateTime:Q,userId:Z||null};try{let J=await this.provider.getAllFlagsAndPayloads({flagKeys:EA.length>0?EA:void 0,context:{...this.context,userId:Z}});if(this.cacheInfo.userId!==Z)return;this.cacheInfo.flagsPayload=J,this.rebuildCacheFromSnapshot(J),this.writePersistentCache()}catch(J){if(this.cacheInfo.userId!==Z)return;throw this.cacheInfo=W.updateTime?W:{updateTime:0,userId:null},this.logger?.error?.("Error polling SDK feature flags",{error:J}),J}}hydrateFromPersistentCache(){let $=this.readPersistentCache();if($)this.hydrateCache($)}isFeatureFlagPayload($){if($===null||typeof $==="string"||typeof $==="number"||typeof $==="boolean")return!0;if(Array.isArray($))return $.every((Z)=>this.isFeatureFlagPayload(Z));if(typeof $==="object")return Object.values($).every((Z)=>this.isFeatureFlagPayload(Z));return!1}readPayloadRecord($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=Object.entries($).filter(([,W])=>this.isFeatureFlagPayload(W));if(Z.length===0)return;let Q={};for(let[W,J]of Z)Q[W]=J;return Q}readPersistentCache(){try{if(!this.cacheFilePath||!gS(this.cacheFilePath))return;let $=JSON.parse(vS(this.cacheFilePath,"utf8"));if(!$||typeof $!=="object")return;let Z=$;if(Z.version!==NA||typeof Z.updatedAt!=="number"||!Number.isFinite(Z.updatedAt)||Date.now()-Z.updatedAt>this.persistentCacheMaxAgeMs)return;return{updateTime:Z.updatedAt,userId:Z.userId??null,flagsPayload:{featureFlags:this.readPayloadRecord(Z.flagsPayload?.featureFlags),featureFlagPayloads:this.readPayloadRecord(Z.flagsPayload?.featureFlagPayloads)}}}catch($){this.logger?.error?.("Error reading SDK feature flags cache",{error:$});return}}writePersistentCache(){try{if(!this.cacheFilePath)return;mS(uS(this.cacheFilePath),{recursive:!0,mode:448});let $=this.getCacheSnapshot(),Z={version:NA,updatedAt:$.updateTime,userId:$.userId,flagsPayload:$.flagsPayload};cS(this.cacheFilePath,`${JSON.stringify(Z,null,2)}
580
- `,"utf8")}catch($){this.logger?.error?.("Error writing SDK feature flags cache",{error:$})}}getReturnedFlagKeys($){return[...new Set([...Object.keys($?.featureFlags??{}),...Object.keys($?.featureFlagPayloads??{})])]}rebuildCacheFromSnapshot($){let Z=new Map;for(let Q of this.getReturnedFlagKeys($)){let W=this.getFeatureFlag(Q);Z.set(Q,W??!1)}this.cache=Z}getFeatureFlag($){try{let Z=this.cacheInfo.flagsPayload?.featureFlagPayloads?.[$],Q=this.cacheInfo.flagsPayload?.featureFlags?.[$],W=Z??Q??DX[$]??void 0;if(!this.cache.has($)||this.cache.get($)!==W)this.telemetry?.capture({event:m.FEATURE_FLAGS.FLAG_CALLED,properties:{$feature_flag:$,$feature_flag_response:Q}});return W}catch(Z){return this.logger?.error?.(`Error checking SDK feature flag ${$}`,{error:Z}),DX[$]??!1}}getBooleanFlagEnabled($){return this.cache.get($)===!0}getFlagPayload($){return this.cache.get($)??DX[$]}getProvider(){return this.provider}get enabled(){return this.provider.enabled}getSettings(){return this.provider.getSettings()}test($,Z){if(process.env.IS_TEST==="true")this.cache.set($,Z)}async dispose(){await this.provider.dispose()}}class x2{async getAllFlagsAndPayloads(){return{}}enabled=!1;getSettings(){return{enabled:!1,timeoutMs:1000}}async dispose(){}}J8();class l5{clientName;runtimeAddress;automation;settings;featureFlags;pendingPrompts;host;prepare;capabilities;logger;telemetry;distinctId;automationService;activeSessionBootstraps=new Map;unsubscribeBootstrapCleanup;constructor($,Z,Q,W,J,X,Y,j,V,H){this.clientName=Z,this.runtimeAddress=Q,this.host=$,this.prepare=W,this.capabilities=J,this.logger=X,this.telemetry=Y,this.distinctId=j,this.featureFlags=V,this.settings=FF($),this.pendingPrompts=AF($),this.automation=new UJ(()=>{if(!this.automationService)throw Error("ClineCore automation is not enabled. Pass `automation: true` or automation options to ClineCore.create().");return this.automationService}),this.automationService=H?new P5({workspaceRoot:H.workspaceRoot??process.cwd(),specs:{cronSpecsDir:H.cronSpecsDir??H.cronDir,scope:HK(H.cronScope),workspaceRoot:H.workspaceRoot},runtimeHandlers:BK({host:$,getExtensionContext:()=>_Q({automationService:this.automationService,automation:this.automation,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}),dbPath:H.dbPath,logger:H.logger,pollIntervalMs:H.pollIntervalMs,claimLeaseSeconds:H.claimLeaseSeconds,globalMaxConcurrency:H.globalMaxConcurrency,watcherDebounceMs:H.watcherDebounceMs}):void 0,this.unsubscribeBootstrapCleanup=this.host.subscribe((B)=>{if(B.type!=="ended")return;this.disposeSessionBootstrap(B.payload.sessionId)})}static async create($={}){let Z=P0($.distinctId),Q=q0($.capabilities),W={...$,capabilities:Q,distinctId:Z},J=await K4(W),X=VK($.automation),Y=$.featureFlags||new I2({provider:new x2,telemetry:$.telemetry,logger:$.logger,context:{distinctId:Z,clientName:$.clientName}}),j=new l5(J,$.clientName,J.runtimeAddress,$.prepare,Q,$.logger,$.telemetry,Z,Y,X?{...X,logger:$.logger}:void 0);if(X&&X.autoStart!==!1)await j.automation.start();return j}async disposeSessionBootstrap($){let Z=this.activeSessionBootstraps.get($);if(!Z)return;this.activeSessionBootstraps.delete($),await Promise.resolve(Z.dispose?.())}async start($){let Z=fF($),Q=await this.prepare?.(Z);try{let W=Q?await Q.applyToStartSessionInput(Z):Z,J=await this.host.startSession(yJ(W,{defaultCapabilities:this.capabilities,withExtensionContext:(X)=>_Q({automationService:this.automationService,automation:this.automation,context:X,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}));if(Q)if(await this.host.getSession(J.sessionId))this.activeSessionBootstraps.set(J.sessionId,Q);else await Promise.resolve(Q.dispose?.());return UF({input:W,sessionId:J.sessionId,telemetry:this.telemetry,clientName:this.clientName,runtimeAddress:this.runtimeAddress}),J}catch(W){throw await Promise.resolve(Q?.dispose?.()),W}}send=(...$)=>this.host.runTurn(...$);getAccumulatedUsage=(...$)=>{return this.host.getAccumulatedUsage?.(...$)??Promise.resolve(void 0)};abort=(...$)=>this.host.abort(...$);stop=async($)=>{await this.host.stopSession($),await this.disposeSessionBootstrap($)};dispose=async(...$)=>{try{await this.automationService?.dispose(),await this.host.dispose(...$)}finally{this.unsubscribeBootstrapCleanup();let Z=[...this.activeSessionBootstraps.keys()];await Promise.allSettled(Z.map((Q)=>this.disposeSessionBootstrap(Q)))}};get=(...$)=>this.host.getSession(...$);listHistory=async($={})=>await vQ(this.host,$);list=async($=200,Z={})=>await this.listHistory({...Z,limit:$});delete=async($)=>{let Z=await this.host.deleteSession($);if(Z)await this.disposeSessionBootstrap($);return Z};update=(...$)=>this.host.updateSession(...$);readMessages=(...$)=>this.host.readSessionMessages(...$);async restore($){let Z=$.start?yJ($.start,{defaultCapabilities:this.capabilities,withExtensionContext:(Q)=>_Q({automationService:this.automationService,automation:this.automation,context:Q,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}):void 0;return this.host.restoreSession({sessionId:$.sessionId,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd,restore:$.restore,start:Z})}async compareCheckpoint($){let Z=$.sessionId.trim();if(!Z)throw Error("sessionId is required");let Q=await this.host.getSession(Z);if(!Q)throw Error(`Session ${Z} not found`);return d5({session:Q,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd})}ingestHookEvent=(...$)=>this.host.dispatchHookEvent(...$);subscribe($,Z){return this.host.subscribe($,Z)}updateSessionModel=(...$)=>{return this.host.updateSessionModel?.(...$)??Promise.resolve()}}var PA={};N(PA,{resolvePluginSkillDirectoriesFromPaths:()=>n1,resolvePluginConfigSearchPaths:()=>i6,resolveAndLoadAgentPlugins:()=>g8,resolveAgentPluginPaths:()=>i1,loadAgentPluginsFromPathsWithDiagnostics:()=>_2,loadAgentPluginsFromPaths:()=>xZ,loadAgentPluginFromPath:()=>p6,discoverPluginModulePaths:()=>n6});var yA={};N(yA,{toHookConfigFileName:()=>o6,runSubprocessEvent:()=>U4,runHook:()=>L4,resolveHooksConfigSearchPaths:()=>a6,parseHookEventPayload:()=>D4,mergeAgentHooks:()=>q2,listHookConfigFiles:()=>N$,createSubprocessHooks:()=>tQ,createHookConfigFileHooks:()=>t6,createHookConfigFileExtension:()=>u8,createHookAuditHooks:()=>c8,createAgentHooksExtension:()=>m8,HookEventPayloadSchema:()=>oQ,HookEventNameSchema:()=>sQ,HookConfigFileName:()=>v8,HOOK_CONFIG_FILE_EVENT_MAP:()=>s6,HOOKS_CONFIG_DIRECTORY_NAME:()=>dZ});import{HookEventNameSchema as sQ,HookEventPayloadSchema as oQ,parseHookEventPayload as D4,resolveHookSessionContext as oS}from"@cline/shared";import{z as g2}from"zod";import{spawn as pS}from"node:child_process";import{augmentNodeCommandForDebug as rS,withResolvedClineBuildEnv as iS}from"@cline/shared";function nS($){let Z=$.trim();if(!Z)return{};let W=Z.split(`
581
- `).map((X)=>X.trim()).filter(Boolean).filter((X)=>X.startsWith("HOOK_CONTROL\t")).map((X)=>X.slice(13)),J=W.length>0?W[W.length-1]:Z;try{return{parsedJson:JSON.parse(J)}}catch(X){return{parseError:X instanceof Error?X.message:"Failed to parse subprocess stdout JSON"}}}function aS($,Z){let Q=$ instanceof Error?$:Error(String($)),W=Q,J=Z.join(" ");if(W.code==="EACCES")return Error(`Failed to execute hook command "${J}" (EACCES). Configure hooks with an explicit interpreter/command array (for example: ["bash", "/path/to/script"]) or make the script executable with a valid shebang.`);return Error(`Failed to execute hook command "${J}": ${Q.message}`)}async function sS($,Z){let Q=$.stdin;if(!Q)throw Error("runSubprocessEvent failed to create stdin pipe");await new Promise((W,J)=>{let X=(Y)=>{Q.off("error",X);let j=Y.code;if(j==="EPIPE"||j==="ERR_STREAM_DESTROYED"){W();return}J(Y)};Q.once("error",X),Q.end(Z,(Y)=>{if(Q.off("error",X),Y){let j=Y.code;if(j==="EPIPE"||j==="ERR_STREAM_DESTROYED"){W();return}J(Y);return}W()})})}async function U4($,Z){let Q=rS(Z.command,{env:Z.env,debugRole:"hook"});if(!Array.isArray(Q)||Q.length===0)throw Error("runSubprocessEvent requires a non-empty command");let W=!!Z.detached,J=pS(Q[0],Q.slice(1),{cwd:Z.cwd,env:iS(Z.env),stdio:W?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:W,windowsHide:!0}),X=new Promise((K)=>{J.once("spawn",()=>{try{Z.onSpawn?.({command:Q,pid:J.pid??void 0,detached:W})}catch{}K()})}),Y=new Promise((K,F)=>{J.once("error",(A)=>{F(aS(A,Q))})});if(await sS(J,JSON.stringify($)),W){await Promise.race([X,Y]),J.unref();return}if(!J.stdout||!J.stderr)throw Error("runSubprocessEvent failed to create stdout/stderr pipes");let j="",V="",H=!1,B;J.stdout.on("data",(K)=>{j+=K.toString()}),J.stderr.on("data",(K)=>{V+=K.toString()});let G=new Promise((K)=>{if((Z.timeoutMs??0)>0)B=setTimeout(()=>{H=!0,J.kill("SIGKILL")},Z.timeoutMs);J.once("close",(F)=>{if(B)clearTimeout(B);let{parsedJson:A,parseError:L}=nS(j);K({exitCode:F,stdout:j,stderr:V,parsedJson:A,parseError:L,timedOut:H})})});return await Promise.race([G,Y])}var tS=g2.object({contextModification:g2.string().optional(),cancel:g2.boolean().optional(),review:g2.boolean().optional(),errorMessage:g2.string().optional(),context:g2.string().optional(),overrideInput:g2.unknown().optional()}).passthrough();var eS=["agent","hook"];async function L4($,Z={}){let Q=Z.command??eS;return await U4($,{command:Q,cwd:Z.cwd,env:Z.env,detached:Z.detached,timeoutMs:Z.timeoutMs,onSpawn:Z.onSpawn})}function bA($){return $ instanceof Error?$:Error(String($))}function $b($){if(!$||typeof $!=="object")return;let Z=tS.safeParse($);if(!Z.success)return;let Q=Z.data;if(!(("cancel"in Q)||("review"in Q)||("context"in Q)||("contextModification"in Q)||("overrideInput"in Q)||("errorMessage"in Q)))return;let J=typeof Q.context==="string"?Q.context:typeof Q.contextModification==="string"?Q.contextModification:typeof Q.errorMessage==="string"&&Q.errorMessage.length>0?Q.errorMessage:void 0;return{cancel:typeof Q.cancel==="boolean"?Q.cancel:void 0,review:typeof Q.review==="boolean"?Q.review:void 0,context:J,overrideInput:Object.hasOwn(Q,"overrideInput")?Q.overrideInput:void 0}}function SA($){if(!$||typeof $!=="object")return{};let Z={};for(let[Q,W]of Object.entries($))if(typeof W==="string")Z[Q]=W;else Z[Q]=JSON.stringify(W);return Z}function $$($,Z,Q){let W=Q.env??process.env,J=W.CLINE_USER_ID?.trim()||W.USER?.trim()||"unknown",X=Q.cwd||process.cwd();return{clineVersion:W.CLINE_VERSION?.trim()||"",hookName:$,timestamp:new Date().toISOString(),taskId:Z.conversationId,sessionContext:oS(Q.sessionContext,{hookName:$,conversationId:Z.conversationId,agentId:Z.agentId,parentAgentId:Z.parentAgentId}),workspaceRoots:X?[X]:[],workspaceInfo:Q.workspaceInfo,userId:J,agent_id:Z.agentId,parent_agent_id:Z.parentAgentId}}function Zb($){return{name:$.name,message:$.message,stack:$.stack}}function Qb($){let Z=String($??"").toLowerCase();return Z.includes("cancel")||Z.includes("abort")||Z.includes("interrupt")}function Wb($){return{agentId:$.snapshot.agentId,conversationId:$.snapshot.conversationId??$.snapshot.runId??$.snapshot.agentId,parentAgentId:$.snapshot.parentAgentId??null}}function Jb($){return $.filter((Z)=>Z.type==="text"&&typeof Z.text==="string").map((Z)=>Z.text).join("")}function Xb($){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 Yb($){if(!$)return;let Z={};if($.cancel===!0)Z.stop=!0;if($.overrideInput!==void 0)Z.input=$.overrideInput;return Object.keys(Z).length>0?Z:void 0}async function m2($,Z){try{let Q=await L4($,{command:Z.command,cwd:Z.cwd,env:Z.env,detached:!0,onSpawn:Z.onSpawn});Z.onDispatch?.({payload:$,result:Q,detached:!0})}catch(Q){Z.onDispatchError?.(bA(Q),$)}}function tQ($={}){return{hooks:{beforeRun:async(j)=>{let V=Wb(j);if(($.env??process.env).CLINE_HOOK_AGENT_RESUME==="1"){let B={...$$("agent_resume",V,$),hookName:"agent_resume",taskResume:{taskMetadata:{},previousState:{}}};await m2(B,$)}else{let B={...$$("agent_start",V,$),hookName:"agent_start",taskStart:{taskMetadata:{}}};await m2(B,$)}return},beforeTool:async(j)=>{let V={agentId:j.snapshot.agentId,conversationId:j.snapshot.conversationId??j.snapshot.runId??j.snapshot.agentId,parentAgentId:j.snapshot.parentAgentId??null},H={...$$("tool_call",V,$),hookName:"tool_call",iteration:j.snapshot.iteration,tool_call:{id:j.toolCall.toolCallId,name:j.toolCall.toolName,input:j.input},preToolUse:{toolName:j.toolCall.toolName,parameters:SA(j.input)}};try{let B=await L4(H,{command:$.command,cwd:$.cwd,env:$.env,detached:!1,timeoutMs:$.timeoutMs,onSpawn:$.onSpawn});if($.onDispatch?.({payload:H,result:B,detached:!1}),B?.timedOut)throw Error("tool_call hook command timed out");if(B?.parseError)throw Error(`tool_call hook produced invalid control JSON: ${B.parseError}`);return Yb($b(B?.parsedJson))}catch(B){$.onDispatchError?.(bA(B),H);return}},afterTool:async(j)=>{let V=Xb(j),H={agentId:j.snapshot.agentId,conversationId:j.snapshot.conversationId??j.snapshot.runId??j.snapshot.agentId,parentAgentId:j.snapshot.parentAgentId??null},B={...$$("tool_result",H,$),hookName:"tool_result",iteration:j.snapshot.iteration,tool_result:V,postToolUse:{toolName:V.name,parameters:SA(V.input),result:typeof V.output==="string"?V.output:JSON.stringify(V.output),success:!V.error,executionTimeMs:V.durationMs}};await m2(B,$);return},afterRun:async({snapshot:j,result:V})=>{let H={agentId:j.agentId,conversationId:j.conversationId??j.runId??j.agentId,parentAgentId:j.parentAgentId??null};if(V.status==="completed"){let K={...$$("agent_end",H,$),hookName:"agent_end",iteration:V.iterations,turn:{outputText:V.outputText,status:V.status},taskComplete:{taskMetadata:{}}};await m2(K,$);return}let B=V.status==="aborted"||Qb(V.error?.message)?"agent_abort":"agent_error",G=B==="agent_error"?{...$$(B,H,$),hookName:B,iteration:V.iterations,error:Zb(V.error??Error("Agent run failed")),taskCancel:{taskMetadata:{}}}:{...$$(B,H,$),hookName:B,reason:V.error?.message,taskCancel:{taskMetadata:{}}};await m2(G,$)},onEvent:async(j)=>{if(j.type!=="message-added"||j.message.role!=="user")return;let V={agentId:j.snapshot.agentId,conversationId:j.snapshot.conversationId??j.snapshot.runId??j.snapshot.agentId,parentAgentId:j.snapshot.parentAgentId??null},H={...$$("prompt_submit",V,$),hookName:"prompt_submit",userPromptSubmit:{prompt:Jb(j.message.content),attachments:[]}};await m2(H,$)}},shutdown:async({agentId:j,conversationId:V,parentAgentId:H,reason:B})=>{let G={...$$("session_shutdown",{agentId:j,conversationId:V,parentAgentId:H},$),hookName:"session_shutdown",reason:B};await m2(G,$)}}}eQ();var kA={};N(kA,{registerRemoteConfigSessionBlobUpload:()=>Q7,readRemoteConfigSessionBlobUploadMetadata:()=>LX,prepareRemoteConfigCoreIntegration:()=>zX,createRemoteConfigSessionMessagesArtifactUploader:()=>_X,buildRemoteConfigSessionBlobUploadMetadata:()=>$7,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY:()=>Z7});import{buildRemoteConfigSessionBlobUploadMetadata as $7,clearRemoteConfigSessionBlobUpload as jb,createClineTelemetryServiceConfig as Vb,createSessionId as Hb,createRemoteConfigSessionMessagesArtifactUploader as Bb,prepareRemoteConfigRuntime as Gb,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY as Z7,readRemoteConfigSessionBlobUploadMetadata as LX,registerRemoteConfigSessionBlobUpload as Q7}from"@cline/shared";function Kb($,Z){let Q=$.telemetry||Z.telemetryService?{...Z.telemetryService??{},...$.telemetry??{}}:void 0;if(!Q)return;return h1(Vb(Q)).telemetry}function _X(){let $=Bb();return{async uploadMessagesFile(Z){await $.uploadMessagesFile(Z)}}}async function zX($){let Z=await Gb($),Q=Kb(Z,$),W=[Z.pluginDefinition],J=Z.claims?.subject,X=$7(Z.bundle?.remoteConfig,J),Y;return{prepared:Z,extensions:W,telemetry:Q,applyToStartSessionInput(j){let V=j.config.extensions??[],H=j.config.telemetry,B=X?j.config.sessionId?.trim()||Hb():j.config.sessionId;if(B&&X)Y=B;let G=B&&X?Q7(B,Z.bundle?.remoteConfig,J):void 0,K=G?{...j.sessionMetadata??{},[Z7]:G}:j.sessionMetadata;return{...j,...K?{sessionMetadata:K}:{},config:{...j.config,...B?{sessionId:B}:{},extensions:[...V,...W],telemetry:Q??H}}},async dispose(){if(Y)jb(Y)}}}var uA={};N(uA,{createTeamName:()=>X7,DefaultRuntimeBuilder:()=>T4});import{hasRuntimeConfigExtension as Eb}from"@cline/shared";import{nanoid as Nb}from"nanoid";$1();var cA={};N(cA,{createLocalTeamStore:()=>MX,SqliteTeamStore:()=>v2,FileTeamStore:()=>p5});import{appendFileSync as Fb,existsSync as _4,mkdirSync as IA,readdirSync as Ab,readFileSync as xA,renameSync as fb,writeFileSync as Ub}from"node:fs";import{join as TX}from"node:path";import{resolveTeamDataDir as Db}from"@cline/shared/storage";function gA(){return new Date().toISOString()}function OX($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function mA($){return{...$,tasks:$.tasks.map((Z)=>({...Z,createdAt:new Date(Z.createdAt),updatedAt:new Date(Z.updatedAt)})),mailbox:$.mailbox.map((Z)=>({...Z,sentAt:new Date(Z.sentAt),readAt:Z.readAt?new Date(Z.readAt):void 0})),missionLog:$.missionLog.map((Z)=>({...Z,ts:new Date(Z.ts)})),runs:($.runs??[]).map((Z)=>({...Z,startedAt:new Date(Z.startedAt),endedAt:Z.endedAt?new Date(Z.endedAt):void 0,nextAttemptAt:Z.nextAttemptAt?new Date(Z.nextAttemptAt):void 0,heartbeatAt:Z.heartbeatAt?new Date(Z.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),finalizedAt:Z.finalizedAt?new Date(Z.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),reviewedAt:Z.reviewedAt?new Date(Z.reviewedAt):void 0}))}}class p5{teamDirPath;constructor($={}){this.teamDirPath=$.teamDir??Db()}init(){this.ensureTeamDir()}listTeamNames(){if(!_4(this.teamDirPath))return[];return Ab(this.teamDirPath,{withFileTypes:!0}).filter(($)=>$.isDirectory()).filter(($)=>_4(this.statePath($.name))).map(($)=>$.name).sort()}readState($){let Z=this.readEnvelope($);return Z?.teamState?mA(Z.teamState):void 0}readHistory($,Z=200){let Q=this.historyPath($);if(!_4(Q))return[];return xA(Q,"utf8").split(`
582
- `).map((W)=>W.trim()).filter(Boolean).map((W)=>{try{return JSON.parse(W)}catch{return}}).filter((W)=>W!==void 0).reverse().slice(0,Z)}loadRuntime($){let Z=this.readEnvelope($);return{state:Z?.teamState?mA(Z.teamState):void 0,teammates:Z?.teammates??[],interruptedRunIds:[]}}handleTeamEvent($,Z){this.ensureTeamSubdir($),Fb(this.historyPath($),`${JSON.stringify({ts:gA(),eventType:Z.type,payload:Z})}
583
- `,"utf8")}persistRuntime($,Z,Q){this.ensureTeamSubdir($);let W={version:1,updatedAt:gA(),teamState:Z,teammates:Q},J=this.statePath($),X=`${J}.tmp`;Ub(X,`${JSON.stringify(W,null,2)}
584
- `,"utf8"),fb(X,J)}markInProgressRunsInterrupted($,Z){let Q=this.readEnvelope($);if(!Q?.teamState?.runs?.length)return[];let W=Q.teamState.runs.filter((X)=>X.status==="queued"||X.status==="running").map((X)=>X.id);if(W.length===0)return[];let J=new Date;return Q.teamState={...Q.teamState,runs:Q.teamState.runs.map((X)=>X.status==="queued"||X.status==="running"?{...X,status:"interrupted",error:Z,endedAt:J}:X)},this.persistRuntime($,Q.teamState,Q.teammates),W}ensureTeamDir(){if(!_4(this.teamDirPath))IA(this.teamDirPath,{recursive:!0});return this.teamDirPath}ensureTeamSubdir($){let Z=TX(this.ensureTeamDir(),OX($));if(!_4(Z))IA(Z,{recursive:!0});return Z}statePath($){return TX(this.ensureTeamDir(),OX($),"state.json")}historyPath($){return TX(this.ensureTeamDir(),OX($),"task-history.jsonl")}readEnvelope($){let Z=this.statePath($);if(!_4(Z))return;try{let Q=JSON.parse(xA(Z,"utf8"));if(Q?.version===1&&Q.teamState)return Q}catch{}return}}import{existsSync as Lb,mkdirSync as _b}from"node:fs";import{join as zb}from"node:path";import{safeJsonParse as vA}from"@cline/shared";import{loadSqliteDb as Tb,nowIso as qX}from"@cline/shared/db";import{resolveDbDataDir as Ob}from"@cline/shared/storage";function qb(){return Ob()}function z4($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function Mb($){let Z=vA($);if(!Array.isArray(Z))return[];let Q=[];for(let W of Z){if(!W||typeof W!=="object")continue;let J=W,X=J.agentId,Y=J.rolePrompt;if(typeof X!=="string"||!X.trim())continue;if(typeof Y!=="string"||!Y.trim())continue;let j={agentId:X.trim(),rolePrompt:Y};if(typeof J.modelId==="string"&&J.modelId.trim())j.modelId=J.modelId.trim();if(typeof J.maxIterations==="number"&&Number.isFinite(J.maxIterations))j.maxIterations=Math.max(1,Math.floor(J.maxIterations));Q.push(j)}return Q}function Rb($){return{...$,tasks:$.tasks.map((Z)=>({...Z,createdAt:new Date(Z.createdAt),updatedAt:new Date(Z.updatedAt)})),mailbox:$.mailbox.map((Z)=>({...Z,sentAt:new Date(Z.sentAt),readAt:Z.readAt?new Date(Z.readAt):void 0})),missionLog:$.missionLog.map((Z)=>({...Z,ts:new Date(Z.ts)})),runs:($.runs??[]).map((Z)=>({...Z,startedAt:new Date(Z.startedAt),endedAt:Z.endedAt?new Date(Z.endedAt):void 0,nextAttemptAt:Z.nextAttemptAt?new Date(Z.nextAttemptAt):void 0,heartbeatAt:Z.heartbeatAt?new Date(Z.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),finalizedAt:Z.finalizedAt?new Date(Z.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),reviewedAt:Z.reviewedAt?new Date(Z.reviewedAt):void 0}))}}class v2{teamDirPath;db;constructor($={}){this.teamDirPath=$.teamDir??qb()}init(){this.getRawDb()}ensureTeamDir(){if(!Lb(this.teamDirPath))_b(this.teamDirPath,{recursive:!0});return this.teamDirPath}dbPath(){return zb(this.ensureTeamDir(),"teams.db")}getRawDb(){if(this.db)return this.db;let $=Tb(this.dbPath());return this.ensureSchema($),this.db=$,$}ensureSchema($){if($.exec("PRAGMA journal_mode = WAL;"),$.exec("PRAGMA busy_timeout = 5000;"),$.exec(`
579
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.sessionId,$.source,$.pid,$.startedAt,null,null,"running",0,$.interactive?1:0,$.provider,$.model,$.cwd,$.workspaceRoot,$.teamName??null,$.enableTools?1:0,$.enableSpawn?1:0,$.enableTeams?1:0,null,null,null,null,0,$.prompt??null,$.metadata?JSON.stringify($.metadata):null,"","",$.messagesPath,J0()])}}function PS($){if($.backendMode)return $.backendMode;if(process.env.CLINE_VCR?.trim())return"local";let Z=process.env.CLINE_SESSION_BACKEND_MODE?.trim().toLowerCase();if(Z==="local"||Z==="hub"||Z==="remote")return Z;return"auto"}var c5,u5;function SS($,Z){if($!=="auto"&&$!=="hub")return;if(Z.hub?.endpoint?.trim())return;a9(Z.hub?.workspaceRoot?.trim()||Z.hub?.cwd?.trim()||process.cwd())}async function bS($){await $.reconcileDeadSessions?.().catch(()=>{})}function _A($){try{let Z=new L1;return Z.init(),new z1(Z,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}catch(Z){return $.telemetry?.capture({event:"session_backend_fallback",properties:{requestedBackend:"sqlite",fallbackBackend:"file"}}),LA($.telemetry,{component:"core",operation:"session_backend.sqlite_init",error:Z,severity:"warn",handled:!0,context:{requestedBackend:"sqlite",fallbackBackend:"file"}}),new VX(void 0,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}}function DA($,Z,Q){return new T1({sessionService:Q??$.sessionService??_A($),capabilities:$.capabilities,telemetry:$.telemetry,toolPolicies:$.toolPolicies,distinctId:Z,fetch:$.fetch})}async function KX($){if(c5)return c5;if(u5)return await u5;return u5=(async()=>{return c5=_A($),await bS(c5),c5})().finally(()=>{u5=void 0}),await u5}async function K4($){let Z=P0($.distinctId);$.telemetry?.setDistinctId(Z);let Q=PS($);if(SS(Q,$),Q==="remote"){let W=$.remote?.endpoint?.trim();if(!W)throw Error("Remote runtime mode requires `remote.endpoint` to be configured.");return $.logger?.log("Using remote runtime host",{endpoint:W}),new X4({endpoint:W,authToken:$.remote?.authToken,clientType:$.remote?.clientType,displayName:$.remote?.displayName,workspaceRoot:$.remote?.workspaceRoot,cwd:$.remote?.cwd,capabilities:$.capabilities})}if(Q==="hub"){let W=$.hub?.endpoint?.trim(),J=W||await $2({strategy:$.hub?.strategy??"require-hub",workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});if(!J)throw Error("No compatible hub runtime is available.");return $.logger?.log("Using hub runtime host",{url:J,explicitEndpoint:W||void 0}),new o1({url:J,authToken:$.hub?.authToken,clientType:$.hub?.clientType,displayName:$.hub?.displayName,capabilities:$.capabilities,telemetry:$.telemetry},{workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd})}if(Q==="auto"){let W=await o4({endpoint:$.hub?.endpoint,strategy:$.hub?.strategy??"prefer-hub",workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});if(W){$.logger?.log("Using discovered local hub runtime host",{url:W});let J=new o1({url:W,authToken:$.hub?.authToken,clientType:$.hub?.clientType,displayName:$.hub?.displayName,capabilities:$.capabilities,telemetry:$.telemetry},{workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});try{return await J.connect(),J}catch(X){$.logger?.log("Falling back to local runtime host",{reason:"hub_connect_failed",severity:"warn",error:X}),LA($.telemetry,{component:"core",operation:"runtime_host.hub_connect",error:X,severity:"warn",handled:!0,context:{backendMode:"auto",fallbackBackend:"local"}})}}return $.logger?.log("Falling back to local runtime host",{reason:"compatible_hub_unavailable",severity:"warn"}),DA($,Z)}return DA($,Z)}var NA={};N(NA,{createCheckpointComparePlan:()=>aQ,compareCheckpointToWorkspace:()=>d5,buildCheckpointWorkspaceDiff:()=>sQ});import{execFile as kS}from"node:child_process";import*as RA from"node:fs/promises";import*as f4 from"node:path";import{promisify as IS}from"node:util";var qA={};N(qA,{trimMessagesToCheckpoint:()=>OA,trimMessagesBeforeCheckpoint:()=>AX,readSessionCheckpointHistory:()=>I2,findCheckpointForRun:()=>A4,createRestoredCheckpointMetadata:()=>FX,createCheckpointRestorePlan:()=>fX,applyCheckpointToWorktree:()=>UX});import{execFile as yS}from"node:child_process";import{promisify as hS}from"node:util";var F4=hS(yS);function I2($){let Z=$?.metadata?.checkpoint&&typeof $.metadata.checkpoint==="object"&&!Array.isArray($.metadata.checkpoint)?$.metadata.checkpoint:void 0;return(Array.isArray(Z?.history)?Z.history:[]).filter((W)=>!!W&&typeof W==="object"&&!Array.isArray(W)).flatMap((W)=>{let J=String(W.ref??"").trim(),X=Number(W.createdAt??0),Y=Number(W.runCount??0);if(J.length===0||!Number.isFinite(X)||!Number.isInteger(Y)||Y<1)return[];let j=W.kind==="stash"||W.kind==="commit"?W.kind:void 0;return[{ref:J,createdAt:X,runCount:Y,...j?{kind:j}:{}}]})}function FX($,Z){let Q=I2($).filter((J)=>J.runCount<=Z),W=Q.at(-1);return W?{latest:W,history:Q}:void 0}function A4($,Z){return $.reduce((Q,W)=>{if(W.runCount>Z)return Q;if(!Q||W.runCount>Q.runCount)return W;return Q},void 0)}function TA($,Z){let Q=0;for(let W=0;W<$.length;W+=1){let J=$[W];if(J?.role!=="user")continue;if(("metadata"in J&&J.metadata&&typeof J.metadata==="object"?J.metadata:void 0)?.kind==="recovery_notice")continue;if(Q+=1,Q===Z)return W}throw Error(`Could not find user message for checkpoint run ${Z}`)}function OA($,Z){let Q=TA($,Z);return $.slice(0,Q+1)}function AX($,Z){let Q=TA($,Z);return $.slice(0,Q)}function fX($){let Z=$.checkpointRunCount;if(!Number.isInteger(Z)||Z<1)throw Error("checkpointRunCount must be a positive integer");let Q=A4(I2($.session),Z);if(!Q)throw Error(`No checkpoint found at or before run ${Z} in session ${$.session.sessionId}`);let W=($.cwd?.trim()||$.session.cwd||$.session.workspaceRoot).trim();if(!W)throw Error("cwd or workspaceRoot is required to restore a checkpoint");return{checkpoint:Q,cwd:W,...$.restoreMessages!==!1?{messages:OA($.messages??[],Z)}:{}}}async function UX($,Z){if((await F4("git",["-C",$,"rev-parse","--is-inside-work-tree"],{windowsHide:!0})).stdout.trim()!=="true")throw Error(`${$} is not a git repository`);if(await F4("git",["-C",$,"cat-file","-e",`${Z.ref}^{commit}`],{windowsHide:!0}),await F4("git",["-C",$,"reset","--hard"],{windowsHide:!0}),await F4("git",["-C",$,"clean","-fd"],{windowsHide:!0}),Z.kind==="commit"){await F4("git",["-C",$,"reset","--hard",Z.ref],{windowsHide:!0});return}await F4("git",["-C",$,"stash","apply",Z.ref],{windowsHide:!0})}var xS=IS(kS),gS=52428800;async function nQ($,Z){let{stdout:Q}=await xS("git",["-C",$,...Z],{windowsHide:!0,maxBuffer:gS,encoding:"utf8"});return Q}function MA($){return $.split("\x00").filter(Boolean)}function EA($,Z){let Q=f4.resolve($,Z),W=f4.relative($,Q);if(W.startsWith("..")||f4.isAbsolute(W))throw Error(`Checkpoint diff path escapes workspace: ${Z}`);return Q}async function mS($,Z,Q){try{return await nQ($,["show",`${Z}:${Q}`])}catch{return""}}async function vS($,Z){try{return await RA.readFile(EA($,Z),"utf8")}catch{return""}}async function cS($,Z){await nQ($,["cat-file","-e",`${Z.ref}^{tree}`]);let[Q,W]=await Promise.all([nQ($,["diff","--name-only","-z",Z.ref,"--"]),nQ($,["ls-files","--others","--exclude-standard","-z"])]);return[...new Set([...MA(Q),...MA(W)])].sort((X,Y)=>X.localeCompare(Y))}function aQ($){let Z=$.checkpointRunCount;if(!Number.isInteger(Z)||Z<1)throw Error("checkpointRunCount must be a positive integer");let Q=A4(I2($.session),Z);if(!Q)throw Error(`No checkpoint found at or before run ${Z} in session ${$.session.sessionId}`);let W=($.cwd?.trim()||$.session.cwd||$.session.workspaceRoot).trim();if(!W)throw Error("cwd or workspaceRoot is required to compare a checkpoint");return{checkpoint:Q,cwd:W}}async function sQ($,Z){let Q=await cS($,Z);return(await Promise.all(Q.map(async(J)=>{let[X,Y]=await Promise.all([mS($,Z.ref,J),vS($,J)]);return{filePath:EA($,J),leftContent:X,rightContent:Y}}))).filter((J)=>J.leftContent!==J.rightContent)}async function d5($){let Z=aQ($),Q=await sQ(Z.cwd,Z.checkpoint);return{...Z,diffs:Q}}var PA={};N(PA,{NoOpFeatureFlagsProvider:()=>g2,FeatureFlagsService:()=>x2});import{existsSync as uS,mkdirSync as dS,readFileSync as lS,writeFileSync as pS}from"node:fs";import{dirname as rS}from"node:path";import{FEATURE_FLAGS as wA,FeatureFlagDefaultValue as DX}from"@cline/shared";var iS=3600000,nS=604800000,CA=1;class x2{provider;telemetry;logger;cacheTtlMs;cacheFilePath;persistentCacheMaxAgeMs;context;cache=new Map;cacheInfo={updateTime:0,userId:null};constructor($){this.provider=$.provider,this.telemetry=$.telemetry,this.logger=$.logger,this.cacheTtlMs=$.cacheTtlMs??iS,this.cacheFilePath=$.cacheFilePath,this.persistentCacheMaxAgeMs=$.persistentCacheMaxAgeMs??nS,this.context={...$.context??{}},this.hydrateFromPersistentCache()}setContext($){this.context={...$}}hydrateCache($){this.cacheInfo={updateTime:$.updateTime,userId:$.userId,flagsPayload:$.flagsPayload},this.rebuildCacheFromSnapshot($.flagsPayload)}getCacheSnapshot(){return{updateTime:this.cacheInfo.updateTime,userId:this.cacheInfo.userId,flagsPayload:this.cacheInfo.flagsPayload}}async poll($){let Z=$??this.context.userId??null,Q=Date.now();if(Q-this.cacheInfo.updateTime<this.cacheTtlMs){if(this.cacheInfo.userId===Z)return}let W=this.cacheInfo;this.cacheInfo={updateTime:Q,userId:Z||null};try{let J=await this.provider.getAllFlagsAndPayloads({flagKeys:wA.length>0?wA:void 0,context:{...this.context,userId:Z}});if(this.cacheInfo.userId!==Z)return;this.cacheInfo.flagsPayload=J,this.rebuildCacheFromSnapshot(J),this.writePersistentCache()}catch(J){if(this.cacheInfo.userId!==Z)return;throw this.cacheInfo=W.updateTime?W:{updateTime:0,userId:null},this.logger?.error?.("Error polling SDK feature flags",{error:J}),J}}hydrateFromPersistentCache(){let $=this.readPersistentCache();if($)this.hydrateCache($)}isFeatureFlagPayload($){if($===null||typeof $==="string"||typeof $==="number"||typeof $==="boolean")return!0;if(Array.isArray($))return $.every((Z)=>this.isFeatureFlagPayload(Z));if(typeof $==="object")return Object.values($).every((Z)=>this.isFeatureFlagPayload(Z));return!1}readPayloadRecord($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=Object.entries($).filter(([,W])=>this.isFeatureFlagPayload(W));if(Z.length===0)return;let Q={};for(let[W,J]of Z)Q[W]=J;return Q}readPersistentCache(){try{if(!this.cacheFilePath||!uS(this.cacheFilePath))return;let $=JSON.parse(lS(this.cacheFilePath,"utf8"));if(!$||typeof $!=="object")return;let Z=$;if(Z.version!==CA||typeof Z.updatedAt!=="number"||!Number.isFinite(Z.updatedAt)||Date.now()-Z.updatedAt>this.persistentCacheMaxAgeMs)return;return{updateTime:Z.updatedAt,userId:Z.userId??null,flagsPayload:{featureFlags:this.readPayloadRecord(Z.flagsPayload?.featureFlags),featureFlagPayloads:this.readPayloadRecord(Z.flagsPayload?.featureFlagPayloads)}}}catch($){this.logger?.error?.("Error reading SDK feature flags cache",{error:$});return}}writePersistentCache(){try{if(!this.cacheFilePath)return;dS(rS(this.cacheFilePath),{recursive:!0,mode:448});let $=this.getCacheSnapshot(),Z={version:CA,updatedAt:$.updateTime,userId:$.userId,flagsPayload:$.flagsPayload};pS(this.cacheFilePath,`${JSON.stringify(Z,null,2)}
580
+ `,"utf8")}catch($){this.logger?.error?.("Error writing SDK feature flags cache",{error:$})}}getReturnedFlagKeys($){return[...new Set([...Object.keys($?.featureFlags??{}),...Object.keys($?.featureFlagPayloads??{})])]}rebuildCacheFromSnapshot($){let Z=new Map;for(let Q of this.getReturnedFlagKeys($)){let W=this.getFeatureFlag(Q);Z.set(Q,W??!1)}this.cache=Z}getFeatureFlag($){try{let Z=this.cacheInfo.flagsPayload?.featureFlagPayloads?.[$],Q=this.cacheInfo.flagsPayload?.featureFlags?.[$],W=Z??Q??DX[$]??void 0;if(!this.cache.has($)||this.cache.get($)!==W)this.telemetry?.capture({event:m.FEATURE_FLAGS.FLAG_CALLED,properties:{$feature_flag:$,$feature_flag_response:Q}});return W}catch(Z){return this.logger?.error?.(`Error checking SDK feature flag ${$}`,{error:Z}),DX[$]??!1}}getBooleanFlagEnabled($){return this.cache.get($)===!0}getFlagPayload($){return this.cache.get($)??DX[$]}getProvider(){return this.provider}get enabled(){return this.provider.enabled}getSettings(){return this.provider.getSettings()}test($,Z){if(process.env.IS_TEST==="true")this.cache.set($,Z)}async dispose(){await this.provider.dispose()}}class g2{async getAllFlagsAndPayloads(){return{}}enabled=!1;getSettings(){return{enabled:!1,timeoutMs:1000}}async dispose(){}}J8();class l5{clientName;runtimeAddress;automation;settings;featureFlags;pendingPrompts;host;prepare;capabilities;logger;telemetry;distinctId;automationService;activeSessionBootstraps=new Map;unsubscribeBootstrapCleanup;constructor($,Z,Q,W,J,X,Y,j,V,H){this.clientName=Z,this.runtimeAddress=Q,this.host=$,this.prepare=W,this.capabilities=J,this.logger=X,this.telemetry=Y,this.distinctId=j,this.featureFlags=V,this.settings=fF($),this.pendingPrompts=UF($),this.automation=new UJ(()=>{if(!this.automationService)throw Error("ClineCore automation is not enabled. Pass `automation: true` or automation options to ClineCore.create().");return this.automationService}),this.automationService=H?new P5({workspaceRoot:H.workspaceRoot??process.cwd(),specs:{cronSpecsDir:H.cronSpecsDir??H.cronDir,scope:GK(H.cronScope),workspaceRoot:H.workspaceRoot},runtimeHandlers:KK({host:$,getExtensionContext:()=>zQ({automationService:this.automationService,automation:this.automation,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}),dbPath:H.dbPath,logger:H.logger,pollIntervalMs:H.pollIntervalMs,claimLeaseSeconds:H.claimLeaseSeconds,globalMaxConcurrency:H.globalMaxConcurrency,watcherDebounceMs:H.watcherDebounceMs}):void 0,this.unsubscribeBootstrapCleanup=this.host.subscribe((B)=>{if(B.type!=="ended")return;this.disposeSessionBootstrap(B.payload.sessionId)})}static async create($={}){let Z=P0($.distinctId),Q=M0($.capabilities),W={...$,capabilities:Q,distinctId:Z},J=await K4(W),X=BK($.automation),Y=$.featureFlags||new x2({provider:new g2,telemetry:$.telemetry,logger:$.logger,context:{distinctId:Z,clientName:$.clientName}}),j=new l5(J,$.clientName,J.runtimeAddress,$.prepare,Q,$.logger,$.telemetry,Z,Y,X?{...X,logger:$.logger}:void 0);if(X&&X.autoStart!==!1)await j.automation.start();return j}async disposeSessionBootstrap($){let Z=this.activeSessionBootstraps.get($);if(!Z)return;this.activeSessionBootstraps.delete($),await Promise.resolve(Z.dispose?.())}async start($){let Z=DF($),Q=await this.prepare?.(Z);try{let W=Q?await Q.applyToStartSessionInput(Z):Z,J=await this.host.startSession(yJ(W,{defaultCapabilities:this.capabilities,withExtensionContext:(X)=>zQ({automationService:this.automationService,automation:this.automation,context:X,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}));if(Q)if(await this.host.getSession(J.sessionId))this.activeSessionBootstraps.set(J.sessionId,Q);else await Promise.resolve(Q.dispose?.());return LF({input:W,sessionId:J.sessionId,telemetry:this.telemetry,clientName:this.clientName,runtimeAddress:this.runtimeAddress}),J}catch(W){throw await Promise.resolve(Q?.dispose?.()),W}}send=(...$)=>this.host.runTurn(...$);getAccumulatedUsage=(...$)=>{return this.host.getAccumulatedUsage?.(...$)??Promise.resolve(void 0)};abort=(...$)=>this.host.abort(...$);stop=async($)=>{await this.host.stopSession($),await this.disposeSessionBootstrap($)};dispose=async(...$)=>{try{await this.automationService?.dispose(),await this.host.dispose(...$)}finally{this.unsubscribeBootstrapCleanup();let Z=[...this.activeSessionBootstraps.keys()];await Promise.allSettled(Z.map((Q)=>this.disposeSessionBootstrap(Q)))}};get=(...$)=>this.host.getSession(...$);listHistory=async($={})=>await cQ(this.host,$);list=async($=200,Z={})=>await this.listHistory({...Z,limit:$});delete=async($)=>{let Z=await this.host.deleteSession($);if(Z)await this.disposeSessionBootstrap($);return Z};update=(...$)=>this.host.updateSession(...$);readMessages=(...$)=>this.host.readSessionMessages(...$);async restore($){let Z=$.start?yJ($.start,{defaultCapabilities:this.capabilities,withExtensionContext:(Q)=>zQ({automationService:this.automationService,automation:this.automation,context:Q,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}):void 0;return this.host.restoreSession({sessionId:$.sessionId,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd,restore:$.restore,start:Z})}async compareCheckpoint($){let Z=$.sessionId.trim();if(!Z)throw Error("sessionId is required");let Q=await this.host.getSession(Z);if(!Q)throw Error(`Session ${Z} not found`);return d5({session:Q,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd})}ingestHookEvent=(...$)=>this.host.dispatchHookEvent(...$);subscribe($,Z){return this.host.subscribe($,Z)}updateSessionModel=(...$)=>{return this.host.updateSessionModel?.(...$)??Promise.resolve()}}var bA={};N(bA,{resolvePluginSkillDirectoriesFromPaths:()=>n1,resolvePluginConfigSearchPaths:()=>i6,resolveAndLoadAgentPlugins:()=>g8,resolveAgentPluginPaths:()=>i1,loadAgentPluginsFromPathsWithDiagnostics:()=>z2,loadAgentPluginsFromPaths:()=>gZ,loadAgentPluginFromPath:()=>p6,discoverPluginModulePaths:()=>n6});var kA={};N(kA,{toHookConfigFileName:()=>o6,runSubprocessEvent:()=>U4,runHook:()=>L4,resolveHooksConfigSearchPaths:()=>a6,parseHookEventPayload:()=>D4,mergeAgentHooks:()=>M2,listHookConfigFiles:()=>N$,createSubprocessHooks:()=>eQ,createHookConfigFileHooks:()=>t6,createHookConfigFileExtension:()=>u8,createHookAuditHooks:()=>c8,createAgentHooksExtension:()=>m8,HookEventPayloadSchema:()=>tQ,HookEventNameSchema:()=>oQ,HookConfigFileName:()=>v8,HOOK_CONFIG_FILE_EVENT_MAP:()=>s6,HOOKS_CONFIG_DIRECTORY_NAME:()=>lZ});import{HookEventNameSchema as oQ,HookEventPayloadSchema as tQ,parseHookEventPayload as D4,resolveHookSessionContext as Zb}from"@cline/shared";import{z as m2}from"zod";import{spawn as aS}from"node:child_process";import{augmentNodeCommandForDebug as sS,withResolvedClineBuildEnv as oS}from"@cline/shared";function tS($){let Z=$.trim();if(!Z)return{};let W=Z.split(`
581
+ `).map((X)=>X.trim()).filter(Boolean).filter((X)=>X.startsWith("HOOK_CONTROL\t")).map((X)=>X.slice(13)),J=W.length>0?W[W.length-1]:Z;try{return{parsedJson:JSON.parse(J)}}catch(X){return{parseError:X instanceof Error?X.message:"Failed to parse subprocess stdout JSON"}}}function eS($,Z){let Q=$ instanceof Error?$:Error(String($)),W=Q,J=Z.join(" ");if(W.code==="EACCES")return Error(`Failed to execute hook command "${J}" (EACCES). Configure hooks with an explicit interpreter/command array (for example: ["bash", "/path/to/script"]) or make the script executable with a valid shebang.`);return Error(`Failed to execute hook command "${J}": ${Q.message}`)}async function $b($,Z){let Q=$.stdin;if(!Q)throw Error("runSubprocessEvent failed to create stdin pipe");await new Promise((W,J)=>{let X=(Y)=>{Q.off("error",X);let j=Y.code;if(j==="EPIPE"||j==="ERR_STREAM_DESTROYED"){W();return}J(Y)};Q.once("error",X),Q.end(Z,(Y)=>{if(Q.off("error",X),Y){let j=Y.code;if(j==="EPIPE"||j==="ERR_STREAM_DESTROYED"){W();return}J(Y);return}W()})})}async function U4($,Z){let Q=sS(Z.command,{env:Z.env,debugRole:"hook"});if(!Array.isArray(Q)||Q.length===0)throw Error("runSubprocessEvent requires a non-empty command");let W=!!Z.detached,J=aS(Q[0],Q.slice(1),{cwd:Z.cwd,env:oS(Z.env),stdio:W?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:W,windowsHide:!0}),X=new Promise((K)=>{J.once("spawn",()=>{try{Z.onSpawn?.({command:Q,pid:J.pid??void 0,detached:W})}catch{}K()})}),Y=new Promise((K,F)=>{J.once("error",(A)=>{F(eS(A,Q))})});if(await $b(J,JSON.stringify($)),W){await Promise.race([X,Y]),J.unref();return}if(!J.stdout||!J.stderr)throw Error("runSubprocessEvent failed to create stdout/stderr pipes");let j="",V="",H=!1,B;J.stdout.on("data",(K)=>{j+=K.toString()}),J.stderr.on("data",(K)=>{V+=K.toString()});let G=new Promise((K)=>{if((Z.timeoutMs??0)>0)B=setTimeout(()=>{H=!0,J.kill("SIGKILL")},Z.timeoutMs);J.once("close",(F)=>{if(B)clearTimeout(B);let{parsedJson:A,parseError:L}=tS(j);K({exitCode:F,stdout:j,stderr:V,parsedJson:A,parseError:L,timedOut:H})})});return await Promise.race([G,Y])}var Qb=m2.object({contextModification:m2.string().optional(),cancel:m2.boolean().optional(),review:m2.boolean().optional(),errorMessage:m2.string().optional(),context:m2.string().optional(),overrideInput:m2.unknown().optional()}).passthrough();var Wb=["agent","hook"];async function L4($,Z={}){let Q=Z.command??Wb;return await U4($,{command:Q,cwd:Z.cwd,env:Z.env,detached:Z.detached,timeoutMs:Z.timeoutMs,onSpawn:Z.onSpawn})}function hA($){return $ instanceof Error?$:Error(String($))}function Jb($){if(!$||typeof $!=="object")return;let Z=Qb.safeParse($);if(!Z.success)return;let Q=Z.data;if(!(("cancel"in Q)||("review"in Q)||("context"in Q)||("contextModification"in Q)||("overrideInput"in Q)||("errorMessage"in Q)))return;let J=typeof Q.context==="string"?Q.context:typeof Q.contextModification==="string"?Q.contextModification:typeof Q.errorMessage==="string"&&Q.errorMessage.length>0?Q.errorMessage:void 0;return{cancel:typeof Q.cancel==="boolean"?Q.cancel:void 0,review:typeof Q.review==="boolean"?Q.review:void 0,context:J,overrideInput:Object.hasOwn(Q,"overrideInput")?Q.overrideInput:void 0}}function yA($){if(!$||typeof $!=="object")return{};let Z={};for(let[Q,W]of Object.entries($))if(typeof W==="string")Z[Q]=W;else Z[Q]=JSON.stringify(W);return Z}function $$($,Z,Q){let W=Q.env??process.env,J=W.CLINE_USER_ID?.trim()||W.USER?.trim()||"unknown",X=Q.cwd||process.cwd();return{clineVersion:W.CLINE_VERSION?.trim()||"",hookName:$,timestamp:new Date().toISOString(),taskId:Z.conversationId,sessionContext:Zb(Q.sessionContext,{hookName:$,conversationId:Z.conversationId,agentId:Z.agentId,parentAgentId:Z.parentAgentId}),workspaceRoots:X?[X]:[],workspaceInfo:Q.workspaceInfo,userId:J,agent_id:Z.agentId,parent_agent_id:Z.parentAgentId}}function Xb($){return{name:$.name,message:$.message,stack:$.stack}}function Yb($){let Z=String($??"").toLowerCase();return Z.includes("cancel")||Z.includes("abort")||Z.includes("interrupt")}function jb($){return{agentId:$.snapshot.agentId,conversationId:$.snapshot.conversationId??$.snapshot.runId??$.snapshot.agentId,parentAgentId:$.snapshot.parentAgentId??null}}function Vb($){return $.filter((Z)=>Z.type==="text"&&typeof Z.text==="string").map((Z)=>Z.text).join("")}function Hb($){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 Bb($){if(!$)return;let Z={};if($.cancel===!0)Z.stop=!0;if($.overrideInput!==void 0)Z.input=$.overrideInput;return Object.keys(Z).length>0?Z:void 0}async function v2($,Z){try{let Q=await L4($,{command:Z.command,cwd:Z.cwd,env:Z.env,detached:!0,onSpawn:Z.onSpawn});Z.onDispatch?.({payload:$,result:Q,detached:!0})}catch(Q){Z.onDispatchError?.(hA(Q),$)}}function eQ($={}){return{hooks:{beforeRun:async(j)=>{let V=jb(j);if(($.env??process.env).CLINE_HOOK_AGENT_RESUME==="1"){let B={...$$("agent_resume",V,$),hookName:"agent_resume",taskResume:{taskMetadata:{},previousState:{}}};await v2(B,$)}else{let B={...$$("agent_start",V,$),hookName:"agent_start",taskStart:{taskMetadata:{}}};await v2(B,$)}return},beforeTool:async(j)=>{let V={agentId:j.snapshot.agentId,conversationId:j.snapshot.conversationId??j.snapshot.runId??j.snapshot.agentId,parentAgentId:j.snapshot.parentAgentId??null},H={...$$("tool_call",V,$),hookName:"tool_call",iteration:j.snapshot.iteration,tool_call:{id:j.toolCall.toolCallId,name:j.toolCall.toolName,input:j.input},preToolUse:{toolName:j.toolCall.toolName,parameters:yA(j.input)}};try{let B=await L4(H,{command:$.command,cwd:$.cwd,env:$.env,detached:!1,timeoutMs:$.timeoutMs,onSpawn:$.onSpawn});if($.onDispatch?.({payload:H,result:B,detached:!1}),B?.timedOut)throw Error("tool_call hook command timed out");if(B?.parseError)throw Error(`tool_call hook produced invalid control JSON: ${B.parseError}`);return Bb(Jb(B?.parsedJson))}catch(B){$.onDispatchError?.(hA(B),H);return}},afterTool:async(j)=>{let V=Hb(j),H={agentId:j.snapshot.agentId,conversationId:j.snapshot.conversationId??j.snapshot.runId??j.snapshot.agentId,parentAgentId:j.snapshot.parentAgentId??null},B={...$$("tool_result",H,$),hookName:"tool_result",iteration:j.snapshot.iteration,tool_result:V,postToolUse:{toolName:V.name,parameters:yA(V.input),result:typeof V.output==="string"?V.output:JSON.stringify(V.output),success:!V.error,executionTimeMs:V.durationMs}};await v2(B,$);return},afterRun:async({snapshot:j,result:V})=>{let H={agentId:j.agentId,conversationId:j.conversationId??j.runId??j.agentId,parentAgentId:j.parentAgentId??null};if(V.status==="completed"){let K={...$$("agent_end",H,$),hookName:"agent_end",iteration:V.iterations,turn:{outputText:V.outputText,status:V.status},taskComplete:{taskMetadata:{}}};await v2(K,$);return}let B=V.status==="aborted"||Yb(V.error?.message)?"agent_abort":"agent_error",G=B==="agent_error"?{...$$(B,H,$),hookName:B,iteration:V.iterations,error:Xb(V.error??Error("Agent run failed")),taskCancel:{taskMetadata:{}}}:{...$$(B,H,$),hookName:B,reason:V.error?.message,taskCancel:{taskMetadata:{}}};await v2(G,$)},onEvent:async(j)=>{if(j.type!=="message-added"||j.message.role!=="user")return;let V={agentId:j.snapshot.agentId,conversationId:j.snapshot.conversationId??j.snapshot.runId??j.snapshot.agentId,parentAgentId:j.snapshot.parentAgentId??null},H={...$$("prompt_submit",V,$),hookName:"prompt_submit",userPromptSubmit:{prompt:Vb(j.message.content),attachments:[]}};await v2(H,$)}},shutdown:async({agentId:j,conversationId:V,parentAgentId:H,reason:B})=>{let G={...$$("session_shutdown",{agentId:j,conversationId:V,parentAgentId:H},$),hookName:"session_shutdown",reason:B};await v2(G,$)}}}$7();var xA={};N(xA,{registerRemoteConfigSessionBlobUpload:()=>W7,readRemoteConfigSessionBlobUploadMetadata:()=>LX,prepareRemoteConfigCoreIntegration:()=>zX,createRemoteConfigSessionMessagesArtifactUploader:()=>_X,buildRemoteConfigSessionBlobUploadMetadata:()=>Z7,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY:()=>Q7});import{buildRemoteConfigSessionBlobUploadMetadata as Z7,clearRemoteConfigSessionBlobUpload as Gb,createClineTelemetryServiceConfig as Kb,createSessionId as Fb,createRemoteConfigSessionMessagesArtifactUploader as Ab,prepareRemoteConfigRuntime as fb,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY as Q7,readRemoteConfigSessionBlobUploadMetadata as LX,registerRemoteConfigSessionBlobUpload as W7}from"@cline/shared";function Ub($,Z){let Q=$.telemetry||Z.telemetryService?{...Z.telemetryService??{},...$.telemetry??{}}:void 0;if(!Q)return;return h1(Kb(Q)).telemetry}function _X(){let $=Ab();return{async uploadMessagesFile(Z){await $.uploadMessagesFile(Z)}}}async function zX($){let Z=await fb($),Q=Ub(Z,$),W=[Z.pluginDefinition],J=Z.claims?.subject,X=Z7(Z.bundle?.remoteConfig,J),Y;return{prepared:Z,extensions:W,telemetry:Q,applyToStartSessionInput(j){let V=j.config.extensions??[],H=j.config.telemetry,B=X?j.config.sessionId?.trim()||Fb():j.config.sessionId;if(B&&X)Y=B;let G=B&&X?W7(B,Z.bundle?.remoteConfig,J):void 0,K=G?{...j.sessionMetadata??{},[Q7]:G}:j.sessionMetadata;return{...j,...K?{sessionMetadata:K}:{},config:{...j.config,...B?{sessionId:B}:{},extensions:[...V,...W],telemetry:Q??H}}},async dispose(){if(Y)Gb(Y)}}}var lA={};N(lA,{createTeamName:()=>Y7,DefaultRuntimeBuilder:()=>T4});import{hasRuntimeConfigExtension as Pb}from"@cline/shared";import{nanoid as Sb}from"nanoid";$1();var dA={};N(dA,{createLocalTeamStore:()=>MX,SqliteTeamStore:()=>c2,FileTeamStore:()=>p5});import{appendFileSync as Db,existsSync as _4,mkdirSync as gA,readdirSync as Lb,readFileSync as mA,renameSync as _b,writeFileSync as zb}from"node:fs";import{join as TX}from"node:path";import{resolveTeamDataDir as Tb}from"@cline/shared/storage";function vA(){return new Date().toISOString()}function OX($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function cA($){return{...$,tasks:$.tasks.map((Z)=>({...Z,createdAt:new Date(Z.createdAt),updatedAt:new Date(Z.updatedAt)})),mailbox:$.mailbox.map((Z)=>({...Z,sentAt:new Date(Z.sentAt),readAt:Z.readAt?new Date(Z.readAt):void 0})),missionLog:$.missionLog.map((Z)=>({...Z,ts:new Date(Z.ts)})),runs:($.runs??[]).map((Z)=>({...Z,startedAt:new Date(Z.startedAt),endedAt:Z.endedAt?new Date(Z.endedAt):void 0,nextAttemptAt:Z.nextAttemptAt?new Date(Z.nextAttemptAt):void 0,heartbeatAt:Z.heartbeatAt?new Date(Z.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),finalizedAt:Z.finalizedAt?new Date(Z.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),reviewedAt:Z.reviewedAt?new Date(Z.reviewedAt):void 0}))}}class p5{teamDirPath;constructor($={}){this.teamDirPath=$.teamDir??Tb()}init(){this.ensureTeamDir()}listTeamNames(){if(!_4(this.teamDirPath))return[];return Lb(this.teamDirPath,{withFileTypes:!0}).filter(($)=>$.isDirectory()).filter(($)=>_4(this.statePath($.name))).map(($)=>$.name).sort()}readState($){let Z=this.readEnvelope($);return Z?.teamState?cA(Z.teamState):void 0}readHistory($,Z=200){let Q=this.historyPath($);if(!_4(Q))return[];return mA(Q,"utf8").split(`
582
+ `).map((W)=>W.trim()).filter(Boolean).map((W)=>{try{return JSON.parse(W)}catch{return}}).filter((W)=>W!==void 0).reverse().slice(0,Z)}loadRuntime($){let Z=this.readEnvelope($);return{state:Z?.teamState?cA(Z.teamState):void 0,teammates:Z?.teammates??[],interruptedRunIds:[]}}handleTeamEvent($,Z){this.ensureTeamSubdir($),Db(this.historyPath($),`${JSON.stringify({ts:vA(),eventType:Z.type,payload:Z})}
583
+ `,"utf8")}persistRuntime($,Z,Q){this.ensureTeamSubdir($);let W={version:1,updatedAt:vA(),teamState:Z,teammates:Q},J=this.statePath($),X=`${J}.tmp`;zb(X,`${JSON.stringify(W,null,2)}
584
+ `,"utf8"),_b(X,J)}markInProgressRunsInterrupted($,Z){let Q=this.readEnvelope($);if(!Q?.teamState?.runs?.length)return[];let W=Q.teamState.runs.filter((X)=>X.status==="queued"||X.status==="running").map((X)=>X.id);if(W.length===0)return[];let J=new Date;return Q.teamState={...Q.teamState,runs:Q.teamState.runs.map((X)=>X.status==="queued"||X.status==="running"?{...X,status:"interrupted",error:Z,endedAt:J}:X)},this.persistRuntime($,Q.teamState,Q.teammates),W}ensureTeamDir(){if(!_4(this.teamDirPath))gA(this.teamDirPath,{recursive:!0});return this.teamDirPath}ensureTeamSubdir($){let Z=TX(this.ensureTeamDir(),OX($));if(!_4(Z))gA(Z,{recursive:!0});return Z}statePath($){return TX(this.ensureTeamDir(),OX($),"state.json")}historyPath($){return TX(this.ensureTeamDir(),OX($),"task-history.jsonl")}readEnvelope($){let Z=this.statePath($);if(!_4(Z))return;try{let Q=JSON.parse(mA(Z,"utf8"));if(Q?.version===1&&Q.teamState)return Q}catch{}return}}import{existsSync as Ob,mkdirSync as qb}from"node:fs";import{join as Mb}from"node:path";import{safeJsonParse as uA}from"@cline/shared";import{loadSqliteDb as Rb,nowIso as qX}from"@cline/shared/db";import{resolveDbDataDir as Eb}from"@cline/shared/storage";function Nb(){return Eb()}function z4($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function wb($){let Z=uA($);if(!Array.isArray(Z))return[];let Q=[];for(let W of Z){if(!W||typeof W!=="object")continue;let J=W,X=J.agentId,Y=J.rolePrompt;if(typeof X!=="string"||!X.trim())continue;if(typeof Y!=="string"||!Y.trim())continue;let j={agentId:X.trim(),rolePrompt:Y};if(typeof J.modelId==="string"&&J.modelId.trim())j.modelId=J.modelId.trim();if(typeof J.maxIterations==="number"&&Number.isFinite(J.maxIterations))j.maxIterations=Math.max(1,Math.floor(J.maxIterations));Q.push(j)}return Q}function Cb($){return{...$,tasks:$.tasks.map((Z)=>({...Z,createdAt:new Date(Z.createdAt),updatedAt:new Date(Z.updatedAt)})),mailbox:$.mailbox.map((Z)=>({...Z,sentAt:new Date(Z.sentAt),readAt:Z.readAt?new Date(Z.readAt):void 0})),missionLog:$.missionLog.map((Z)=>({...Z,ts:new Date(Z.ts)})),runs:($.runs??[]).map((Z)=>({...Z,startedAt:new Date(Z.startedAt),endedAt:Z.endedAt?new Date(Z.endedAt):void 0,nextAttemptAt:Z.nextAttemptAt?new Date(Z.nextAttemptAt):void 0,heartbeatAt:Z.heartbeatAt?new Date(Z.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),finalizedAt:Z.finalizedAt?new Date(Z.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),reviewedAt:Z.reviewedAt?new Date(Z.reviewedAt):void 0}))}}class c2{teamDirPath;db;constructor($={}){this.teamDirPath=$.teamDir??Nb()}init(){this.getRawDb()}ensureTeamDir(){if(!Ob(this.teamDirPath))qb(this.teamDirPath,{recursive:!0});return this.teamDirPath}dbPath(){return Mb(this.ensureTeamDir(),"teams.db")}getRawDb(){if(this.db)return this.db;let $=Rb(this.dbPath());return this.ensureSchema($),this.db=$,$}ensureSchema($){if($.exec("PRAGMA journal_mode = WAL;"),$.exec("PRAGMA busy_timeout = 5000;"),$.exec(`
585
585
  CREATE TABLE IF NOT EXISTS team_store_schema_version (
586
586
  lock INTEGER PRIMARY KEY CHECK (lock = 1),
587
587
  version INTEGER NOT NULL
@@ -665,7 +665,7 @@ ${J}`,$.config.mode)}function v5($,Z){return US($,Z==="plan"?"plan":Z==="yolo"?"
665
665
  version INTEGER NOT NULL DEFAULT 1,
666
666
  PRIMARY KEY(team_name, fragment_id)
667
667
  );
668
- `)}run($,Z=[]){return this.getRawDb().prepare($).run(...Z)}queryOne($,Z=[]){return this.getRawDb().prepare($).get(...Z)??void 0}queryAll($,Z=[]){return this.getRawDb().prepare($).all(...Z)}withTransaction($){let Z=this.getRawDb();Z.exec("BEGIN IMMEDIATE;");try{$(),Z.exec("COMMIT;")}catch(Q){try{Z.exec("ROLLBACK;")}catch{}throw Q}}listTeamNames(){return this.queryAll("SELECT team_name FROM team_runtime_snapshot ORDER BY team_name ASC").map(($)=>$.team_name)}readState($){let Z=this.queryOne("SELECT team_name, state_json, teammates_json, updated_at FROM team_runtime_snapshot WHERE team_name = ?",[z4($)]);if(!Z)return;let Q=vA(Z.state_json);if(!Q)return;try{return Rb(Q)}catch{return}}readHistory($,Z=200){return this.queryAll("SELECT event_type, payload_json, ts FROM team_events WHERE team_name = ? ORDER BY id DESC LIMIT ?",[z4($),Z]).flatMap((Q)=>{try{return[{eventType:Q.event_type,payload:JSON.parse(Q.payload_json),ts:Q.ts}]}catch{return[]}})}loadRuntime($){let Z=z4($),Q=this.readState(Z),W=this.queryOne("SELECT team_name, state_json, teammates_json, updated_at FROM team_runtime_snapshot WHERE team_name = ?",[Z]),J=W?Mb(W.teammates_json):[];return{state:Q,teammates:J,interruptedRunIds:[]}}appendTeamEvent($,Z,Q,W){this.run(`INSERT INTO team_events (team_name, ts, event_type, payload_json, causation_id, correlation_id)
668
+ `)}run($,Z=[]){return this.getRawDb().prepare($).run(...Z)}queryOne($,Z=[]){return this.getRawDb().prepare($).get(...Z)??void 0}queryAll($,Z=[]){return this.getRawDb().prepare($).all(...Z)}withTransaction($){let Z=this.getRawDb();Z.exec("BEGIN IMMEDIATE;");try{$(),Z.exec("COMMIT;")}catch(Q){try{Z.exec("ROLLBACK;")}catch{}throw Q}}listTeamNames(){return this.queryAll("SELECT team_name FROM team_runtime_snapshot ORDER BY team_name ASC").map(($)=>$.team_name)}readState($){let Z=this.queryOne("SELECT team_name, state_json, teammates_json, updated_at FROM team_runtime_snapshot WHERE team_name = ?",[z4($)]);if(!Z)return;let Q=uA(Z.state_json);if(!Q)return;try{return Cb(Q)}catch{return}}readHistory($,Z=200){return this.queryAll("SELECT event_type, payload_json, ts FROM team_events WHERE team_name = ? ORDER BY id DESC LIMIT ?",[z4($),Z]).flatMap((Q)=>{try{return[{eventType:Q.event_type,payload:JSON.parse(Q.payload_json),ts:Q.ts}]}catch{return[]}})}loadRuntime($){let Z=z4($),Q=this.readState(Z),W=this.queryOne("SELECT team_name, state_json, teammates_json, updated_at FROM team_runtime_snapshot WHERE team_name = ?",[Z]),J=W?wb(W.teammates_json):[];return{state:Q,teammates:J,interruptedRunIds:[]}}appendTeamEvent($,Z,Q,W){this.run(`INSERT INTO team_events (team_name, ts, event_type, payload_json, causation_id, correlation_id)
669
669
  VALUES (?, ?, ?, ?, NULL, ?)`,[z4($),qX(),Z,JSON.stringify(Q),W??null])}persistRuntime($,Z,Q){let W=z4($),J=qX();this.withTransaction(()=>{this.run(`INSERT INTO team_runtime_snapshot (team_name, state_json, teammates_json, updated_at)
670
670
  VALUES (?, ?, ?, ?)
671
671
  ON CONFLICT(team_name) DO UPDATE SET
@@ -712,43 +712,43 @@ ${J}`,$.config.mode)}function v5($,Z){return US($,Z==="plan"?"plan":Z==="yolo"?"
712
712
  reviewed_by = excluded.reviewed_by,
713
713
  reviewed_at = excluded.reviewed_at,
714
714
  version = team_outcome_fragments.version + 1`,[W,X.outcomeId,X.id,X.section,X.sourceAgentId,X.sourceRunId??null,X.content,X.status,X.reviewedBy??null,X.reviewedAt?X.reviewedAt.toISOString():null])})}markInProgressRunsInterrupted($,Z){let Q=z4($),W=this.queryAll("SELECT run_id FROM team_runs WHERE team_name = ? AND status IN ('queued', 'running')",[Q]);if(W.length===0)return[];let J=qX();return this.run(`UPDATE team_runs SET status = 'interrupted', error = ?, ended_at = ?, version = version + 1
715
- WHERE team_name = ? AND status IN ('queued', 'running')`,[Z,J,Q]),W.map((X)=>X.run_id)}handleTeamEvent($,Z){this.appendTeamEvent($,Z.type,Z)}}function MX($={}){try{let Z=new v2($);return Z.init(),Z}catch{let Z=new p5({teamDir:$.teamDir});return Z.init(),Z}}function W7($,Z){return Eb($,Z)}function wb($,Z){let Q=Z?.["*"]??{},W=Z?.[$]??{};return{...Q,...W}.enabled!==!1}function Cb($,Z){return $.filter((Q)=>wb(Q.name,Z))}function RX($,Z){return y1(Cb($,Z))}var Pb={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 Sb($){let Z=$.trim().toLowerCase();return Pb[Z]??Z}function bb($,Z){if(Z.tools===void 0)return $;let Q=new Set(Z.tools.map(Sb));if(Z.skills!==void 0)Q.add("skills");return $.filter((W)=>Q.has(W.name))}function X7(){return`team-${Nb(5)}`}function J7($,Z,Q,W,J,X,Y,j){let V=u0[l1({mode:Q})],H=M8(Z,W,Q,J??q8);return RX(f2({cwd:$,...V,enableSkills:!!Y,...H,executors:{...Y?{skills:Y}:{},...j??{}}}),X)}function yb($){return J7($.cwd,$.providerId,$.mode,$.modelId,$.toolRoutingRules,$.toolPolicies,hb,$.toolExecutors).some((Z)=>Z.name==="skills")}var hb=async()=>"";async function kb($){let Z=Z0();if(!s1({filePath:Z}))return{tools:[]};let Q=new S2({clientFactory:$4({settingsPath:Z})}),W;try{W=await P2(Q,{filePath:Z})}catch(j){await Q.dispose().catch(()=>{});let V=j instanceof Error?j.message:String(j);return $?.log(`[mcp] Failed to load MCP settings, skipping MCP tools: ${V}`),{tools:[]}}let J=W.filter((j)=>j.disabled!==!0),X=await Promise.allSettled(J.map((j)=>Q4({serverName:j.name,provider:Q}))),Y=[];for(let[j,V]of X.entries())if(V.status==="fulfilled")Y.push(...V.value);else{let H=V.reason instanceof Error?V.reason.message:String(V.reason);$?.log(`[mcp] Failed to load tools from MCP server "${J[j].name}", skipping: ${H}`)}return{tools:Y,shutdown:async()=>{await Q.dispose()}}}function Ib($,Z){if(!$)return;for(let Q of $.getTeammateIds())try{$.shutdownTeammate(Q,Z)}catch{}}function xb($){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 gb($){let Z=u0[l1({mode:$.mode})];return{sessionId:$.sessionId||"",mode:$.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act",enableTools:$.enableTools!==!1,enableSpawnAgent:$.enableSpawnAgent??Z.enableSpawnAgent??!0,enableAgentTeams:$.enableAgentTeams??Z.enableAgentTeams??!0,disableMcpSettingsTools:$.disableMcpSettingsTools===!0,yolo:$.yolo===!0,missionLogIntervalSteps:typeof $.missionLogIntervalSteps==="number"&&Number.isFinite($.missionLogIntervalSteps)?$.missionLogIntervalSteps:3,missionLogIntervalMs:typeof $.missionLogIntervalMs==="number"&&Number.isFinite($.missionLogIntervalMs)?$.missionLogIntervalMs:120000}}class T4{teamRuntimeEntries=new Map;async build($){let{config:Z,hooks:Q,extensions:W,logger:J,telemetry:X,createSpawnTool:Y,onTeamRestored:j,userInstructionService:V,configExtensions:H,toolExecutors:B}=$,G=$.onTeamEvent??(()=>{}),K=gb(Z),F=Z.workspaceRoot??Z.cwd,A=$.toolPolicies??Z.toolPolicies,L=B1(),f=[],D=Z.teamName?.trim()||X7(),U=Z.sessionId?.trim()||D,T=K.enableSpawnAgent?Y4({workspaceRoot:F}):{configs:[],errors:[]},O=T.configs.some((v)=>v.skills!==void 0),z=W7(H,"rules"),_=W7(H,"skills"),E=_||O,C=W7(H,"workflows"),y=W7(H,"plugins"),l=z||_||C,o=!1,t=Boolean(V),Q0=V,e0;for(let v of T.errors)(J??Z.logger)?.log?.(`[agents] Failed to load agent config at ${v.path}: ${v.error.message}`);if(!Q0&&(l||O))Q0=b$({skills:E?{workspacePath:F,includePluginSkills:y,pluginSkillDirectories:y?$.pluginSkillDirectories:void 0,pluginPaths:Z.pluginPaths,cwd:Z.cwd}:{workspacePath:F},rules:{workspacePath:Z.cwd},workflows:{workspacePath:Z.cwd}});if(Q0)await Q0.start().catch(()=>{});let l$=K.enableTools&&_&&Boolean(Q0)&&Q0?.hasConfiguredSkills(Z.skills)===!0&&yb({cwd:Z.cwd,providerId:Z.providerId,mode:K.mode,modelId:Z.modelId,toolRoutingRules:Z.toolRoutingRules,toolPolicies:A,toolExecutors:B}),r=Q0&&l?Q0.createExtension({includeRules:z,includeSkills:_,includeWorkflows:C,registerSkillsTool:l$,allowedSkillNames:Z.skills}):void 0,q1=r?[...W??Z.extensions??[],r]:W??Z.extensions;if(K.enableTools){if(f.push(...J7(Z.cwd,Z.providerId,K.mode,Z.modelId,Z.toolRoutingRules,A,void 0,B)),!K.disableMcpSettingsTools){let v=await kb(Z.logger);f.push(...v.tools),e0=v.shutdown}}let P,B0=K.enableAgentTeams?MX():void 0,G0=B0?.loadRuntime(U),C0=G0?.state,i2=G0?.teammates??[],M1=new Map(i2.map((v)=>[v.agentId,v])),H1=Z.sessionId||D,C4,n2=[],K9=!1,R1=T$({providerId:Z.providerId,modelId:Z.modelId,cwd:Z.cwd,apiKey:Z.apiKey??"",baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking,maxTokensPerTurn:Z.maxTokensPerTurn,maxIterations:Z.maxIterations,hooks:Q,extensions:q1,logger:J??Z.logger,telemetry:$.telemetry??Z.telemetry,workspaceMetadata:Z.workspaceMetadata});if(K.enableSpawnAgent){if(T.configs.length>0)f.push(...RX(j4({configProvider:R1,agents:T.configs,createSubAgentTools:(v)=>K.enableTools?bb(J7(Z.cwd,v.providerId??Z.providerId,K.mode,v.modelId??Z.modelId,Z.toolRoutingRules,A,v.skills!==void 0&&Q0?.createSkillsExecutor?Q0.createSkillsExecutor(v.skills):void 0,B),v):[],hookErrorMode:Z.hookErrorMode,toolPolicies:A,requestToolApproval:$.requestToolApproval,onSubAgentEvent:$.onSubAgentEvent,onSubAgentStart:$.onSubAgentStart,onSubAgentEnd:$.onSubAgentEnd}),A))}if(!this.teamRuntimeEntries.has(H1))this.teamRuntimeEntries.set(H1,{delegatedAgentConfigProvider:R1});let F9=()=>{if(!K.enableAgentTeams)return;let v=this.teamRuntimeEntries.get(H1)??{delegatedAgentConfigProvider:R1};if(this.teamRuntimeEntries.set(H1,v),P=v.runtime,!P){if(P=new h2({teamName:D,leadAgentId:Z.sessionId||"lead",missionLogIntervalSteps:K.missionLogIntervalSteps,missionLogIntervalMs:K.missionLogIntervalMs,onTeamEvent:(Y0)=>{if(G(Y0),P&&B0){if(Y0.type==="teammate_spawned"&&Y0.teammate?.rolePrompt){let E1={agentId:Y0.agentId,rolePrompt:Y0.teammate.rolePrompt,modelId:Y0.teammate.modelId,maxIterations:Y0.teammate.maxIterations};M1.set(E1.agentId,E1)}if(Y0.type==="teammate_shutdown"&&!xb(Y0.reason))M1.delete(Y0.agentId);B0.handleTeamEvent(U,Y0),B0.persistRuntime(U,P.exportState(),Array.from(M1.values()))}}}),C0)P.hydrateState(C0),K9=!0;v.runtime=P}if(!o){if(!P)return;o=!0;let Y0=w8({runtime:P,leadAgentId:Z.sessionId||"lead",restoredFromPersistence:Boolean(C0),restoredTeammates:i2,includeLeadSpawnTool:!0,includeLeadManagementTools:!0,onLeadToolsUnlocked:(E1)=>{n2=E1,C4?.addTools(E1)},createBaseTools:K.enableTools?()=>J7(Z.cwd,Z.providerId,K.mode,Z.modelId,Z.toolRoutingRules,A,void 0,B):void 0,teammateConfigProvider:R1});if(K9)P.recoverActiveRuns("runtime_recovered");if(Y0.restoredFromPersistence)j?.();f.push(...Y0.tools)}return P};if(K.enableSpawnAgent&&Y){let v=Y();f.push({...v,execute:async(Y0,E1)=>{return F9(),v.execute(Y0,E1)}})}if(K.enableAgentTeams)F9();let a2=RX(f,A),e7=a2.some((v)=>v.name==="submit_and_exit"&&v.lifecycle?.completesRun===!0),A9=K.enableAgentTeams?()=>{let v=this.teamRuntimeEntries.get(H1)?.runtime;if(!v)return;let Y0=v.listTasks(),E1=Y0.some((J$)=>J$.status==="in_progress"||J$.status==="pending"),Zj=v.listRuns({}),LD=Zj.some((J$)=>J$.status==="running"||J$.status==="queued");if(E1||LD){let J$=Y0.filter((x0)=>x0.status==="in_progress"||x0.status==="pending").map((x0)=>`${x0.id} (${x0.status}): ${x0.title}`).join(", "),Qj=Zj.filter((x0)=>x0.status==="running"||x0.status==="queued").map((x0)=>`${x0.id} (${x0.status})`).join(", "),$W=[];if(J$)$W.push(`Unfinished tasks: ${J$}`);if(Qj)$W.push(`Active runs: ${Qj}`);return`[SYSTEM] You still have team obligations. ${$W.join(". ")}. Use team_run_task to delegate work, or team_task with action=complete to mark tasks done, or team_await_runs to wait for active runs. Do NOT stop until all tasks are completed.`}return}:void 0,DD=e7?{requireCompletionTool:!0,...A9?{completionGuard:A9}:{}}:A9?{completionGuard:A9}:void 0;return{tools:a2,logger:J??Z.logger,telemetry:X??Z.telemetry,teamRuntime:P,teamRestoredFromPersistence:Boolean(C0),delegatedAgentConfigProvider:this.teamRuntimeEntries.get(H1)?.delegatedAgentConfigProvider??R1,extensions:q1,completionPolicy:DD,registerLeadAgent:(v)=>{if(C4=v,n2.length>0)v.addTools(y1(n2,[...L]))},shutdown:async(v)=>{if(Ib(P,v),this.teamRuntimeEntries.delete(H1),await e0?.(),!t)Q0?.stop()}}}}var lA={};N(lA,{requestDesktopToolApproval:()=>NX});import{mkdir as mb,readFile as vb,unlink as cb,writeFile as ub}from"node:fs/promises";import{join as dA}from"node:path";function db($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function lb($){return new Promise((Z)=>setTimeout(Z,$))}async function EX($){try{await cb($)}catch{}}async function NX($,Z={}){let Q=Z.approvalDir?.trim(),W=Z.sessionId?.trim();if(!Q||!W)return{approved:!1,reason:"Desktop tool approval IPC is not configured"};await mb(Q,{recursive:!0});let J=db(`${$.toolCallId}`),X=dA(Q,`${W}.request.${J}.json`),Y=dA(Q,`${W}.decision.${J}.json`),j=Z.nowIso??(()=>new Date().toISOString());await ub(X,`${JSON.stringify({requestId:J,sessionId:W,createdAt:j(),toolCallId:$.toolCallId,toolName:$.toolName,input:$.input,iteration:$.iteration,agentId:$.agentId,conversationId:$.conversationId},null,2)}
716
- `,"utf8");let V=Z.timeoutMs??300000,H=Z.pollIntervalMs??200,B=Date.now();while(Date.now()-B<V){try{let G=await vb(Y,"utf8"),K=JSON.parse(G),F={approved:K.approved===!0,reason:typeof K.reason==="string"?K.reason:void 0};return await Promise.all([EX(Y),EX(X)]),F}catch{}await lb(H)}return await EX(X),{approved:!1,reason:"Tool approval request timed out"}}$1();var rA={};N(rA,{parseMcpInstallArgs:()=>r5,installMcpServer:()=>wX,buildMcpInstallTransport:()=>Y7});function pb($){let Z=($??"stdio").trim();if(Z==="http"||Z==="streamable-http")return"streamableHttp";if(Z==="stdio"||Z==="sse"||Z==="streamableHttp")return Z;throw Error(`Unsupported MCP transport "${Z}". Expected stdio, sse, http, streamable-http, or streamableHttp.`)}function rb($){let Z;try{Z=new URL($)}catch{throw Error(`Invalid MCP server URL: ${$}`)}if(Z.protocol!=="http:"&&Z.protocol!=="https:")throw Error(`Invalid MCP server URL: ${$} (only http and https are supported)`)}function ib($){let Z=$.indexOf(":");if(Z<=0)throw Error(`Invalid MCP header "${$}". Expected "Header-Name: header value".`);let Q=$.slice(0,Z).trim(),W=$.slice(Z+1).trim();if(!Q||!W)throw Error(`Invalid MCP header "${$}". Expected "Header-Name: header value".`);if(!/^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/.test(Q))throw Error(`Invalid MCP header name "${Q}".`);return[Q,W]}function nb($){let Z=$.indexOf("<");return Z>=0&&$.indexOf(">",Z+1)>Z+1}function pA($){let Z=[...$.headers??[]],Q=[],W=$.transport,J=$.targetArgs??[];for(let X=0;X<J.length;X++){let Y=J[X];if($.parseTransport&&Y==="--transport"){let j=J[X+1];if(!j)throw Error("--transport requires a value");W=j,X++;continue}if($.parseTransport&&Y?.startsWith("--transport=")){W=Y.slice(12);continue}if(Y==="--header"){let j=J[X+1];if(!j)throw Error("--header requires a value");Z.push(j),X++;continue}if(Y?.startsWith("--header=")){Z.push(Y.slice(9));continue}Q.push(Y)}return{headers:Z,targetArgs:Q,transport:W}}function ab($){if($.length===0)return{warnings:[]};let Z={},Q=[];for(let W of $){let[J,X]=ib(W);if(Z[J]=X,nb(X))Q.push(`Header "${J}" looks like it contains a placeholder. Update it in MCP settings before using this server.`)}return{headers:Z,warnings:Q}}function Y7($){let Z=$.name.trim();if(!Z)throw Error("MCP server name is required");let{headers:Q,targetArgs:W,transport:J}=pA({headers:$.headers,targetArgs:$.targetArgs,transport:$.transport}),X=pb(J),{headers:Y,warnings:j}=ab(Q);if(X==="stdio"){if(Q.length>0)throw Error("Stdio MCP installs do not support request headers.");let[H,...B]=W;if(!H?.trim())throw Error("Stdio MCP install requires a command after the server name, for example: cline mcp install fs --yes -- npx -y @modelcontextprotocol/server-filesystem /tmp");return{name:Z,transport:{type:X,command:H,args:B.length>0?B:void 0},warnings:j}}if(W.length!==1)throw Error("Remote MCP install requires exactly one URL argument after the server name.");let V=W[0]?.trim()??"";return rb(V),{name:Z,transport:Y?{type:X,url:V,headers:Y}:{type:X,url:V},warnings:j}}function r5($){let[Z,...Q]=$;if(!Z)throw Error("Marketplace MCP install args must start with a server name.");return{name:Z,...pA({parseTransport:!0,targetArgs:Q})}}function sb($,Z,Q){j1(Q,(W)=>{let J=W.mcpServers,X=J&&typeof J==="object"&&!Array.isArray(J)?{...J}:{};X[$]={transport:Z},W.mcpServers=X})}function wX($){let{name:Z,transport:Q,warnings:W}=Y7($);return sb(Z,Q,$.settingsPath??Z0()),{name:Z,status:"installed",transport:Q,warnings:W}}var Jf={};N(Jf,{uninstallMarketplaceSkill:()=>F7,uninstallMarketplacePlugin:()=>A7,uninstallMarketplaceMcpServerFromSettings:()=>G7,uninstallMarketplaceEntry:()=>dX,resolveMarketplaceMcpServerName:()=>o5,marketplaceEntryKey:()=>uX,isMarketplaceSkillInstalled:()=>K7,getMarketplaceSkillCandidates:()=>t5,getGlobalMarketplaceSkillPaths:()=>e5,findInstalledGlobalMarketplaceSkillName:()=>$9});import{spawn as Ny}from"node:child_process";import{existsSync as Qf,rmSync as wy}from"node:fs";import{homedir as Cy,platform as Py}from"node:os";import{dirname as Sy,join as Zf}from"node:path";import{resolveClineDir as by,resolveMcpSettingsPath as yy}from"@cline/shared/storage";$1();var $f={};N($f,{uninstallPlugin:()=>a5});import{existsSync as q4,readdirSync as Xy,readFileSync as Yy,rmdirSync as jy,rmSync as Vy,statSync as Hy}from"node:fs";import{basename as a0,dirname as m$,extname as By,isAbsolute as Gy,join as Z$,relative as Ky,resolve as O4,sep as yX}from"node:path";import{discoverPluginModulePaths as Fy,resolvePluginConfigSearchPaths as Ay}from"@cline/shared/storage";var sA={};N(sA,{syncPluginMcpServersToSettings:()=>i5,removePluginMcpServersFromSettings:()=>n5,disablePluginMcpServersInSettings:()=>bX});import{existsSync as ob,mkdirSync as tb,readFileSync as eb,writeFileSync as $y}from"node:fs";import{dirname as nA,isAbsolute as Zy,relative as Qy,resolve as iA}from"node:path";function c2($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function j7($,Z){let Q=Qy(iA($),iA(Z));return Q===""||!Q.startsWith("..")&&!Zy(Q)}function CX($){if(!ob($))return{mcpServers:{}};try{let Z=JSON.parse(eb($,"utf8"));if(c2(Z))return Z}catch(Z){throw Error(`Invalid MCP settings at "${$}": ${Z instanceof Error?Z.message:String(Z)}`)}throw Error(`Invalid MCP settings at "${$}": expected an object`)}function PX($){if(c2($.mcpServers))return{...$.mcpServers};return{}}function SX($,Z,Q){tb(nA($),{recursive:!0}),$y($,`${JSON.stringify({...Z,mcpServers:Q},null,2)}
717
- `,"utf8")}function aA($){return{pluginPaths:[...new Set(($.pluginPaths??[]).map((Z)=>Z.trim()).filter((Z)=>Z.length>0))],pluginNames:[...new Set(($.pluginNames??[]).map((Z)=>Z.trim()).filter((Z)=>Z.length>0))]}}function H7($){if(!c2($))return;let Z=$.metadata;return c2(Z)?Z:void 0}function V7($,Z){let Q=H7($);if(!Q||Q.source!=="plugin")return!1;let W=typeof Q.pluginName==="string"?Q.pluginName:typeof Q.plugin==="string"?Q.plugin:void 0,J=typeof Q.pluginPath==="string"?Q.pluginPath:void 0;if(Z.pluginName&&W===Z.pluginName){if(!Z.pluginPath||J===Z.pluginPath)return!0}if(J&&Z.pluginPath&&(J===Z.pluginPath||j7(Z.pluginPath,J)||j7(J,Z.pluginPath)))return!0;if(W&&Z.pluginNames?.some((X)=>X===W))return!0;if(J&&Z.pluginPaths?.some((X)=>J===X||j7(X,J)||j7(J,X)))return!0;return!1}function Wy($){let Z=c2($.existing?.oauth)?{oauth:$.existing.oauth}:{};return{transport:$.registration.transport.type==="stdio"&&$.registration.transport.cwd===void 0?{...$.registration.transport,cwd:nA($.pluginPath)}:$.registration.transport,...$.disabled?{disabled:!0}:{},...Z,metadata:{...$.registration.metadata??{},source:"plugin",pluginName:$.pluginName,pluginPath:$.pluginPath}}}async function Jy($){if($.pluginPaths.length===0)return{plugins:[],servers:[],failures:[]};let Z=await x8({pluginPaths:[...$.pluginPaths],cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,workspaceInfo:$.workspacePath?{rootPath:$.workspacePath}:void 0});try{let Q=[],W=[],J=(Z.failures??[]).map((X)=>({pluginPath:X.pluginPath,pluginName:X.pluginName,message:X.message}));for(let X of Z.extensions??[]){let Y=X.__clinePluginPath;if(!Y)continue;if(!X.setup){Q.push({pluginName:X.name,pluginPath:Y});continue}let j=[],V={registerTool:(H)=>{},registerCommand:()=>{},registerMessageBuilder:()=>{},registerRule:()=>{},registerProvider:()=>{},registerAutomationEventType:()=>{},registerMcpServer:(H)=>{if(!X.manifest.capabilities.includes("mcp"))throw Error('registerMcpServer requires the "mcp" capability');j.push(H)}};try{await X.setup(V,{workspaceInfo:$.workspacePath?{rootPath:$.workspacePath}:void 0})}catch(H){J.push({pluginPath:Y,pluginName:X.name,message:H instanceof Error?H.message:String(H)});continue}Q.push({pluginName:X.name,pluginPath:Y});for(let H of j)W.push({pluginName:X.name,pluginPath:Y,server:{...H,metadata:{...H.metadata??{},source:"plugin",pluginName:X.name,pluginPath:Y}}})}return{plugins:Q,servers:W,failures:J}}finally{await Z.shutdown().catch(()=>{})}}async function i5($){let Z=$.settingsPath??Z0(),Q={mutations:[],failures:[]},W;try{W=await Jy($)}catch(H){for(let B of $.pluginPaths)Q.failures.push({pluginPath:B,message:H instanceof Error?H.message:String(H)});return Q}Q.failures.push(...W.failures);let J;try{J=CX(Z)}catch(H){for(let B of $.pluginPaths)Q.failures.push({pluginPath:B,message:H instanceof Error?H.message:String(H)});return Q}let X=PX(J),Y=new Map,j=new Map;for(let H of W.plugins)Y.set(H.pluginPath,new Set),j.set(H.pluginPath,H.pluginName);let V=yQ(W.servers.map((H)=>({server:H.server,owner:H,ownerLabel:H.pluginName})));for(let H of V){let B=H.owner;if(!Y.has(B.pluginPath))Y.set(B.pluginPath,new Set);if(H.name)Y.get(B.pluginPath)?.add(H.name);if(!H.registration){Q.mutations.push({name:H.name,pluginName:B.pluginName,pluginPath:B.pluginPath,action:"skipped",reason:H.loadError??"invalid MCP server registration"});continue}let G=X[H.registration.name];if(G!==void 0){if(!V7(G,{pluginName:B.pluginName,pluginPath:B.pluginPath})){Q.mutations.push({name:H.registration.name,pluginName:B.pluginName,pluginPath:B.pluginPath,action:"skipped",reason:"MCP server name is already configured"});continue}}X[H.registration.name]=Wy({registration:H.registration,pluginName:B.pluginName,pluginPath:B.pluginPath,existing:c2(G)?G:void 0}),Q.mutations.push({name:H.registration.name,pluginName:B.pluginName,pluginPath:B.pluginPath,action:G===void 0?"created":"updated"})}for(let[H,B]of Object.entries(X)){let G=H7(B),K=typeof G?.pluginPath==="string"?G.pluginPath:"",F=Y.get(K);if(F&&V7(B,{pluginPath:K})&&!F.has(H))delete X[H],Q.mutations.push({name:H,pluginName:typeof G?.pluginName==="string"?G.pluginName:j.get(K)??"plugin",pluginPath:K,action:"removed",reason:"plugin no longer declares this MCP server"})}if(Q.mutations.some((H)=>H.action!=="skipped"))try{SX(Z,J,X)}catch(H){for(let B of $.pluginPaths)Q.failures.push({pluginPath:B,message:H instanceof Error?H.message:String(H)})}return Q}function bX($){let Z=$.settingsPath??Z0(),Q;try{Q=CX(Z)}catch{return[]}let W=PX(Q),J=aA($),X=[];for(let[Y,j]of Object.entries(W)){if(!c2(j)||!V7(j,J))continue;let V=H7(j);W[Y]={...j,disabled:!0},X.push({name:Y,pluginName:typeof V?.pluginName==="string"?V.pluginName:"plugin",pluginPath:typeof V?.pluginPath==="string"?V.pluginPath:"",action:"disabled"})}if(X.length>0)SX(Z,Q,W);return X}function n5($){let Z=$.settingsPath??Z0(),Q;try{Q=CX(Z)}catch{return[]}let W=PX(Q),J=aA($),X=[];for(let[Y,j]of Object.entries(W)){if(!V7(j,J))continue;let V=H7(j);delete W[Y],X.push({name:Y,pluginName:typeof V?.pluginName==="string"?V.pluginName:"plugin",pluginPath:typeof V?.pluginPath==="string"?V.pluginPath:"",action:"removed"})}if(X.length>0)SX(Z,Q,W);return X}var gX="_installed",fy="package",Uy=new Map([["git",2],["local",1],["npm",1],["official",1],["remote",1]]);function hX($){return $.trim().toLowerCase()}function V1($,Z){let Q=Z?.trim();if(!Q)return;$.add(Q)}function Dy($){return $.replace(/-[0-9a-f]{12}$/i,"")}function kX($){let Z=By($);return Z?$.slice(0,-Z.length):$}function IX($){if(!q4($))return;try{let Z=JSON.parse(Yy($,"utf8"));return typeof Z.name==="string"?Z.name.trim():void 0}catch{return}}function mX($,Z){let Q=Ky(Z,$);return Q===""||!Q.startsWith("..")&&!Gy(Q)}function oA($){let Q=O4($).split(yX),W=Q.lastIndexOf(gX);if(W<0)return;let J=Q[W+1];if(!J)return;let X=Uy.get(J)??1,Y=W+2+X;if(Q.length<Y)return;let j=Q.slice(0,Y).join(yX)||yX;return q4(j)?j:void 0}function B7($){try{return Xy($,{withFileTypes:!0})}catch{return[]}}function Ly($){let Z=Z$($,gX);if(!q4(Z))return[];let Q=[];for(let W of B7(Z)){if(!W.isDirectory())continue;let J=Z$(Z,W.name);if(W.name==="git"){for(let X of B7(J)){if(!X.isDirectory())continue;let Y=Z$(J,X.name);for(let j of B7(Y))if(j.isDirectory())Q.push(Z$(Y,j.name))}continue}for(let X of B7(J))if(X.isDirectory())Q.push(Z$(J,X.name))}return Q.sort((W,J)=>W.localeCompare(J))}function tA($){try{return Fy($)}catch{return[]}}function xX($){let Z=tA($),Q=new Set;V1(Q,a0($)),V1(Q,Dy(a0($))),V1(Q,IX(Z$($,"package.json"))),V1(Q,IX(Z$($,fy,"package.json")));for(let W of Z)V1(Q,a0(W)),V1(Q,kX(a0(W)));return{installPath:$,entryPaths:Z,names:[...Q].sort((W,J)=>W.localeCompare(J)),installed:!0}}function _y($,Z){let Q=O4($),W=Z.find((Y)=>mX(Q,Y));if(!W)return;let J=m$(Q);while(J!==W&&J!==m$(J)){if(q4(Z$(J,"package.json")))return J;J=m$(J)}let X=a0(Q);if((X==="index.ts"||X==="index.js")&&m$(Q)!==W)return m$(Q);return Q}function eA($,Z){let Q=_y($,Z);if(!Q)return;let W=new Set;return V1(W,a0($)),V1(W,kX(a0($))),V1(W,a0(Q)),V1(W,kX(a0(Q))),V1(W,IX(Z$(Q,"package.json"))),{installPath:Q,entryPaths:[$],names:[...W].sort((J,X)=>J.localeCompare(X)),installed:!1}}function zy($){let Z=$.workspaceRoot?.trim()||$.cwd?.trim()||process.cwd();return Ay(Z).filter((Q)=>q4(Q))}function Ty($){let Z=new Map;for(let Q of $){for(let W of Ly(Q))Z.set(W,xX(W));for(let W of tA(Q)){let J=oA(W);if(J){if(!Z.has(J))Z.set(J,xX(J));continue}let X=eA(W,$);if(X)Z.set(X.installPath,X)}}return[...Z.values()].sort((Q,W)=>Q.installPath.localeCompare(W.installPath))}function Oy($,Z){let Q=hX(Z);if(!Q)return!1;if(hX($.installPath)===Q)return!0;return $.names.some((W)=>hX(W)===Q)}function qy($,Z,Q){let W=O4($);for(let X of Z){if(mX(W,X.installPath))return X;if(X.entryPaths.some((Y)=>O4(Y)===W))return X}let J=oA(W);if(J)return xX(J);if(q4(W))return eA(W,Q);return}function My($){let Z=M0(),Q=Z.disabledPlugins;if(!Q?.length)return;let W=Q.filter((J)=>{let X=O4(J);if(mX(X,$.installPath))return!1;return!$.entryPaths.some((Y)=>O4(Y)===X)});if(W.length===Q.length)return;b1({...Z,disabledPlugins:W})}function Ry($){let Z=m$($);while(Z!==m$(Z)&&a0(Z)!==gX){try{jy(Z)}catch{return}Z=m$(Z)}}function Ey($){return`${$.names[0]??a0($.installPath)} at ${$.installPath}`}async function a5($){let Z=zy($),Q=Ty(Z),W=$.path?.trim(),J=$.name?.trim(),X;if(W){if(X=qy(W,Q,Z),!X)throw Error(`No plugin found at ${W}`)}else{if(!J)throw Error("plugin uninstall requires a plugin name");let j=Q.filter((V)=>Oy(V,J));if(j.length===0)throw Error(`No plugin found matching "${J}"`);if(j.length>1)throw Error(`Multiple plugins match "${J}": ${j.map(Ey).join(", ")}`);X=j[0]}let Y=Hy(X.installPath,{throwIfNoEntry:!1});if(!Y)throw Error(`Plugin install path does not exist: ${X.installPath}`);if(n5({pluginPaths:[X.installPath,...X.entryPaths],pluginNames:X.names}),Vy(X.installPath,{recursive:Y.isDirectory(),force:!0}),My(X),X.installed)Ry(X.installPath);return{name:J||X.names[0]||a0(X.installPath),installPath:X.installPath,removedPaths:[X.installPath],entryPaths:X.entryPaths}}var vX=120000,s5=12000,hy=/(api[_ -]?key|access[_ -]?token|refresh[_ -]?token|auth(?:orization)?[_ -]?token|token|secret|password|authorization|credential)/i,ky=/((?:^|[^\w])(?:[a-z0-9_]*?(?:api[_ -]?key|access[_ -]?token|refresh[_ -]?token|auth(?:orization)?[_ -]?token|token|secret|password|credential)[a-z0-9_]*)\s*[:=]\s*)(.+)$/gi,Iy=/((?:^|[^\w])authorization\s*[:=]\s*)bearer\s+([^\s,"'}\]]+)/gi,xy=/((?:^|[^\w])authorization\s*[:=])(?!\s*bearer\b)\s*(.+)$/gi;function cX($){return $.install?.args??[]}function gy(){return process.env.HOME?.trim()||process.env.USERPROFILE?.trim()||Cy()}function my($){let Z=0,Q=$.length;while(Z<Q&&($[Z]==="."||$[Z]==="-"))Z++;while(Q>Z&&($[Q-1]==="."||$[Q-1]==="-"))Q--;return $.slice(Z,Q)}function vy($){return my($.toLowerCase().replace(/[^a-z0-9._]+/g,"-")).slice(0,255)||"skill"}function Wf($){return $.split(/\r?\n/).map((Z)=>{if(!hy.test(Z))return Z;return Z.replace(ky,"$1[redacted]").replace(Iy,"$1Bearer [redacted]").replace(/\b(Bearer)\s+(?!\[redacted\])([^\s,"'}\]]+)/gi,"$1 [redacted]").replace(xy,"$1 [redacted]").replace(/((?:^|[^\w])(?:api\s+key|access\s+token|refresh\s+token|auth(?:orization)?\s+token|secret|password|credential)\s+(?:is\s+)?)(\S+)/gi,"$1[redacted]")}).join(`
718
- `).slice(-s5)}function cy($){let Z=Wf([$.stdout,$.stderr].filter(Boolean).join(`
719
- `)).trim();return Z.length>0?Z:void 0}function uy($){if($==="")return'""';if(/^[a-zA-Z0-9_./:=@%+,-]+$/.test($))return $;return JSON.stringify($)}function dy($,Z){return[$,...Z].map((Q)=>uy(Wf(Q).trim())).join(" ")}var ly=async($,Z)=>new Promise((Q,W)=>{let J=!1,X=!1,Y=Ny($,Z,{env:process.env,shell:Py()==="win32",stdio:["ignore","pipe","pipe"],windowsHide:!0}),j="",V="",H=setTimeout(()=>{if(!J)Y.kill("SIGKILL")},vX+5000),B=setTimeout(()=>{X=!0,V+=`
720
- Timed out after ${vX/1000}s.`,Y.kill("SIGTERM")},vX);H.unref?.(),B.unref?.(),Y.stdout?.on("data",(G)=>{if(j+=String(G),j.length>s5*2)j=j.slice(-s5)}),Y.stderr?.on("data",(G)=>{if(V+=String(G),V.length>s5*2)V=V.slice(-s5)}),Y.once("error",(G)=>{clearTimeout(B),clearTimeout(H),W(G)}),Y.once("close",(G,K)=>{J=!0,clearTimeout(B),clearTimeout(H),Q({exitCode:X?124:G??(K==="SIGINT"?130:1),stdout:j,stderr:V})})});function uX($){return`${$.type}:${$.id}`}function o5($){let Z=cX($);if(Z.length===0)throw Error("Marketplace install args are required.");return r5(Z).name}function G7($,Z={}){let Q=o5($),W=Z.mcpSettingsPath??yy(),J=j1(W,(X)=>{let Y=X.mcpServers&&typeof X.mcpServers==="object"&&!Array.isArray(X.mcpServers)?X.mcpServers:{},j=Object.hasOwn(Y,Q);if(j)delete Y[Q];return X.mcpServers=Y,j});return{name:Q,deleted:J}}function t5($){let Z=new Set,Q=(J)=>{let X=vy(J??"");if(X&&X!=="skill")Z.add(X)};Q($.id),Q($.name);let W=cX($);for(let J=0;J<W.length;J++){let X=W[J];if((X==="--skill"||X==="-s")&&W[J+1]){Q(W[J+1]),J++;continue}let Y=X.split("@").at(1);if(Y)Q(Y)}return[...Z]}function e5($){return[Zf(by(),"skills",$,"SKILL.md"),Zf(gy(),".agents","skills",$,"SKILL.md")].filter((Z,Q,W)=>W.indexOf(Z)===Q)}function $9($){if($.type!=="skill")return;return t5($).find((Z)=>e5(Z).some((Q)=>Qf(Q)))}function K7($){return $9($)!==void 0}function py($){let Z=[];if($.type!=="skill")return Z;for(let Q of t5($))for(let W of e5(Q)){if(!Qf(W))continue;let J=Sy(W);wy(J,{recursive:!0,force:!0}),Z.push(J)}return Z}async function F7($,Z={}){let Q=$9($);if(!Q)return{id:$.id,type:"skill",status:"uninstalled",message:`${$.name??$.id} is not installed.`};let W="npx",J=["-y","skills@latest","remove",Q,"-g","-y"],X=dy(W,J),Y=Z.spawnCommand??ly,j;try{j=await Y(W,J)}catch(B){throw Error(`Failed to start ${$.name??$.id} uninstall command:
715
+ WHERE team_name = ? AND status IN ('queued', 'running')`,[Z,J,Q]),W.map((X)=>X.run_id)}handleTeamEvent($,Z){this.appendTeamEvent($,Z.type,Z)}}function MX($={}){try{let Z=new c2($);return Z.init(),Z}catch{let Z=new p5({teamDir:$.teamDir});return Z.init(),Z}}function J7($,Z){return Pb($,Z)}function bb($,Z){let Q=Z?.["*"]??{},W=Z?.[$]??{};return{...Q,...W}.enabled!==!1}function yb($,Z){return $.filter((Q)=>bb(Q.name,Z))}function RX($,Z){return y1(yb($,Z))}var hb={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 kb($){let Z=$.trim().toLowerCase();return hb[Z]??Z}function Ib($,Z){if(Z.tools===void 0)return $;let Q=new Set(Z.tools.map(kb));if(Z.skills!==void 0)Q.add("skills");return $.filter((W)=>Q.has(W.name))}function Y7(){return`team-${Sb(5)}`}function X7($,Z,Q,W,J,X,Y,j){let V=u0[l1({mode:Q})],H=M8(Z,W,Q,J??q8);return RX(U2({cwd:$,...V,enableSkills:!!Y,...H,executors:{...Y?{skills:Y}:{},...j??{}}}),X)}function xb($){return X7($.cwd,$.providerId,$.mode,$.modelId,$.toolRoutingRules,$.toolPolicies,gb,$.toolExecutors).some((Z)=>Z.name==="skills")}var gb=async()=>"";async function mb($){let Z=Z0();if(!s1({filePath:Z}))return{tools:[]};let Q=new b2({clientFactory:$4({settingsPath:Z})}),W;try{W=await S2(Q,{filePath:Z})}catch(j){await Q.dispose().catch(()=>{});let V=j instanceof Error?j.message:String(j);return $?.log(`[mcp] Failed to load MCP settings, skipping MCP tools: ${V}`),{tools:[]}}let J=W.filter((j)=>j.disabled!==!0),X=await Promise.allSettled(J.map((j)=>Q4({serverName:j.name,provider:Q}))),Y=[];for(let[j,V]of X.entries())if(V.status==="fulfilled")Y.push(...V.value);else{let H=V.reason instanceof Error?V.reason.message:String(V.reason);$?.log(`[mcp] Failed to load tools from MCP server "${J[j].name}", skipping: ${H}`)}return{tools:Y,shutdown:async()=>{await Q.dispose()}}}function vb($,Z){if(!$)return;for(let Q of $.getTeammateIds())try{$.shutdownTeammate(Q,Z)}catch{}}function cb($){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 ub($){let Z=u0[l1({mode:$.mode})];return{sessionId:$.sessionId||"",mode:$.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act",enableTools:$.enableTools!==!1,enableSpawnAgent:$.enableSpawnAgent??Z.enableSpawnAgent??!0,enableAgentTeams:$.enableAgentTeams??Z.enableAgentTeams??!0,disableMcpSettingsTools:$.disableMcpSettingsTools===!0,yolo:$.yolo===!0,missionLogIntervalSteps:typeof $.missionLogIntervalSteps==="number"&&Number.isFinite($.missionLogIntervalSteps)?$.missionLogIntervalSteps:3,missionLogIntervalMs:typeof $.missionLogIntervalMs==="number"&&Number.isFinite($.missionLogIntervalMs)?$.missionLogIntervalMs:120000}}class T4{teamRuntimeEntries=new Map;async build($){let{config:Z,hooks:Q,extensions:W,logger:J,telemetry:X,createSpawnTool:Y,onTeamRestored:j,userInstructionService:V,configExtensions:H,toolExecutors:B}=$,G=$.onTeamEvent??(()=>{}),K=ub(Z),F=Z.workspaceRoot??Z.cwd,A=$.toolPolicies??Z.toolPolicies,L=G1(),f=[],D=Z.teamName?.trim()||Y7(),U=Z.sessionId?.trim()||D,T=K.enableSpawnAgent?Y4({workspaceRoot:F}):{configs:[],errors:[]},q=T.configs.some((v)=>v.skills!==void 0),z=J7(H,"rules"),_=J7(H,"skills"),E=_||q,C=J7(H,"workflows"),y=J7(H,"plugins"),l=z||_||C,o=!1,t=Boolean(V),Q0=V,e0;for(let v of T.errors)(J??Z.logger)?.log?.(`[agents] Failed to load agent config at ${v.path}: ${v.error.message}`);if(!Q0&&(l||q))Q0=b$({skills:E?{workspacePath:F,includePluginSkills:y,pluginSkillDirectories:y?$.pluginSkillDirectories:void 0,pluginPaths:Z.pluginPaths,cwd:Z.cwd}:{workspacePath:F},rules:{workspacePath:Z.cwd},workflows:{workspacePath:Z.cwd}});if(Q0)await Q0.start().catch(()=>{});let l$=K.enableTools&&_&&Boolean(Q0)&&Q0?.hasConfiguredSkills(Z.skills)===!0&&xb({cwd:Z.cwd,providerId:Z.providerId,mode:K.mode,modelId:Z.modelId,toolRoutingRules:Z.toolRoutingRules,toolPolicies:A,toolExecutors:B}),r=Q0&&l?Q0.createExtension({includeRules:z,includeSkills:_,includeWorkflows:C,registerSkillsTool:l$,allowedSkillNames:Z.skills}):void 0,M1=r?[...W??Z.extensions??[],r]:W??Z.extensions;if(K.enableTools){if(f.push(...X7(Z.cwd,Z.providerId,K.mode,Z.modelId,Z.toolRoutingRules,A,void 0,B)),!K.disableMcpSettingsTools){let v=await mb(Z.logger);f.push(...v.tools),e0=v.shutdown}}let P,B0=K.enableAgentTeams?MX():void 0,G0=B0?.loadRuntime(U),C0=G0?.state,n2=G0?.teammates??[],R1=new Map(n2.map((v)=>[v.agentId,v])),H1=Z.sessionId||D,C4,a2=[],K9=!1,E1=T$({providerId:Z.providerId,modelId:Z.modelId,cwd:Z.cwd,apiKey:Z.apiKey??"",baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking,maxTokensPerTurn:Z.maxTokensPerTurn,maxIterations:Z.maxIterations,hooks:Q,extensions:M1,logger:J??Z.logger,telemetry:$.telemetry??Z.telemetry,workspaceMetadata:Z.workspaceMetadata});if(K.enableSpawnAgent){if(T.configs.length>0)f.push(...RX(j4({configProvider:E1,agents:T.configs,createSubAgentTools:(v)=>K.enableTools?Ib(X7(Z.cwd,v.providerId??Z.providerId,K.mode,v.modelId??Z.modelId,Z.toolRoutingRules,A,v.skills!==void 0&&Q0?.createSkillsExecutor?Q0.createSkillsExecutor(v.skills):void 0,B),v):[],hookErrorMode:Z.hookErrorMode,toolPolicies:A,requestToolApproval:$.requestToolApproval,onSubAgentEvent:$.onSubAgentEvent,onSubAgentStart:$.onSubAgentStart,onSubAgentEnd:$.onSubAgentEnd}),A))}if(!this.teamRuntimeEntries.has(H1))this.teamRuntimeEntries.set(H1,{delegatedAgentConfigProvider:E1});let F9=()=>{if(!K.enableAgentTeams)return;let v=this.teamRuntimeEntries.get(H1)??{delegatedAgentConfigProvider:E1};if(this.teamRuntimeEntries.set(H1,v),P=v.runtime,!P){if(P=new k2({teamName:D,leadAgentId:Z.sessionId||"lead",missionLogIntervalSteps:K.missionLogIntervalSteps,missionLogIntervalMs:K.missionLogIntervalMs,onTeamEvent:(Y0)=>{if(G(Y0),P&&B0){if(Y0.type==="teammate_spawned"&&Y0.teammate?.rolePrompt){let N1={agentId:Y0.agentId,rolePrompt:Y0.teammate.rolePrompt,modelId:Y0.teammate.modelId,maxIterations:Y0.teammate.maxIterations};R1.set(N1.agentId,N1)}if(Y0.type==="teammate_shutdown"&&!cb(Y0.reason))R1.delete(Y0.agentId);B0.handleTeamEvent(U,Y0),B0.persistRuntime(U,P.exportState(),Array.from(R1.values()))}}}),C0)P.hydrateState(C0),K9=!0;v.runtime=P}if(!o){if(!P)return;o=!0;let Y0=w8({runtime:P,leadAgentId:Z.sessionId||"lead",restoredFromPersistence:Boolean(C0),restoredTeammates:n2,includeLeadSpawnTool:!0,includeLeadManagementTools:!0,onLeadToolsUnlocked:(N1)=>{a2=N1,C4?.addTools(N1)},createBaseTools:K.enableTools?()=>X7(Z.cwd,Z.providerId,K.mode,Z.modelId,Z.toolRoutingRules,A,void 0,B):void 0,teammateConfigProvider:E1});if(K9)P.recoverActiveRuns("runtime_recovered");if(Y0.restoredFromPersistence)j?.();f.push(...Y0.tools)}return P};if(K.enableSpawnAgent&&Y){let v=Y();f.push({...v,execute:async(Y0,N1)=>{return F9(),v.execute(Y0,N1)}})}if(K.enableAgentTeams)F9();let s2=RX(f,A),$W=s2.some((v)=>v.name==="submit_and_exit"&&v.lifecycle?.completesRun===!0),A9=K.enableAgentTeams?()=>{let v=this.teamRuntimeEntries.get(H1)?.runtime;if(!v)return;let Y0=v.listTasks(),N1=Y0.some((J$)=>J$.status==="in_progress"||J$.status==="pending"),Zj=v.listRuns({}),zD=Zj.some((J$)=>J$.status==="running"||J$.status==="queued");if(N1||zD){let J$=Y0.filter((x0)=>x0.status==="in_progress"||x0.status==="pending").map((x0)=>`${x0.id} (${x0.status}): ${x0.title}`).join(", "),Qj=Zj.filter((x0)=>x0.status==="running"||x0.status==="queued").map((x0)=>`${x0.id} (${x0.status})`).join(", "),ZW=[];if(J$)ZW.push(`Unfinished tasks: ${J$}`);if(Qj)ZW.push(`Active runs: ${Qj}`);return`[SYSTEM] You still have team obligations. ${ZW.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,_D=$W?{requireCompletionTool:!0,...A9?{completionGuard:A9}:{}}:A9?{completionGuard:A9}:void 0;return{tools:s2,logger:J??Z.logger,telemetry:X??Z.telemetry,teamRuntime:P,teamRestoredFromPersistence:Boolean(C0),delegatedAgentConfigProvider:this.teamRuntimeEntries.get(H1)?.delegatedAgentConfigProvider??E1,extensions:M1,completionPolicy:_D,registerLeadAgent:(v)=>{if(C4=v,a2.length>0)v.addTools(y1(a2,[...L]))},shutdown:async(v)=>{if(vb(P,v),this.teamRuntimeEntries.delete(H1),await e0?.(),!t)Q0?.stop()}}}}var rA={};N(rA,{requestDesktopToolApproval:()=>NX});import{mkdir as db,readFile as lb,unlink as pb,writeFile as rb}from"node:fs/promises";import{join as pA}from"node:path";function ib($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function nb($){return new Promise((Z)=>setTimeout(Z,$))}async function EX($){try{await pb($)}catch{}}async function NX($,Z={}){let Q=Z.approvalDir?.trim(),W=Z.sessionId?.trim();if(!Q||!W)return{approved:!1,reason:"Desktop tool approval IPC is not configured"};await db(Q,{recursive:!0});let J=ib(`${$.toolCallId}`),X=pA(Q,`${W}.request.${J}.json`),Y=pA(Q,`${W}.decision.${J}.json`),j=Z.nowIso??(()=>new Date().toISOString());await rb(X,`${JSON.stringify({requestId:J,sessionId:W,createdAt:j(),toolCallId:$.toolCallId,toolName:$.toolName,input:$.input,iteration:$.iteration,agentId:$.agentId,conversationId:$.conversationId},null,2)}
716
+ `,"utf8");let V=Z.timeoutMs??300000,H=Z.pollIntervalMs??200,B=Date.now();while(Date.now()-B<V){try{let G=await lb(Y,"utf8"),K=JSON.parse(G),F={approved:K.approved===!0,reason:typeof K.reason==="string"?K.reason:void 0};return await Promise.all([EX(Y),EX(X)]),F}catch{}await nb(H)}return await EX(X),{approved:!1,reason:"Tool approval request timed out"}}$1();var nA={};N(nA,{parseMcpInstallArgs:()=>r5,installMcpServer:()=>wX,buildMcpInstallTransport:()=>j7});function ab($){let Z=($??"stdio").trim();if(Z==="http"||Z==="streamable-http")return"streamableHttp";if(Z==="stdio"||Z==="sse"||Z==="streamableHttp")return Z;throw Error(`Unsupported MCP transport "${Z}". Expected stdio, sse, http, streamable-http, or streamableHttp.`)}function sb($){let Z;try{Z=new URL($)}catch{throw Error(`Invalid MCP server URL: ${$}`)}if(Z.protocol!=="http:"&&Z.protocol!=="https:")throw Error(`Invalid MCP server URL: ${$} (only http and https are supported)`)}function ob($){let Z=$.indexOf(":");if(Z<=0)throw Error(`Invalid MCP header "${$}". Expected "Header-Name: header value".`);let Q=$.slice(0,Z).trim(),W=$.slice(Z+1).trim();if(!Q||!W)throw Error(`Invalid MCP header "${$}". Expected "Header-Name: header value".`);if(!/^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/.test(Q))throw Error(`Invalid MCP header name "${Q}".`);return[Q,W]}function tb($){let Z=$.indexOf("<");return Z>=0&&$.indexOf(">",Z+1)>Z+1}function iA($){let Z=[...$.headers??[]],Q=[],W=$.transport,J=$.targetArgs??[];for(let X=0;X<J.length;X++){let Y=J[X];if($.parseTransport&&Y==="--transport"){let j=J[X+1];if(!j)throw Error("--transport requires a value");W=j,X++;continue}if($.parseTransport&&Y?.startsWith("--transport=")){W=Y.slice(12);continue}if(Y==="--header"){let j=J[X+1];if(!j)throw Error("--header requires a value");Z.push(j),X++;continue}if(Y?.startsWith("--header=")){Z.push(Y.slice(9));continue}Q.push(Y)}return{headers:Z,targetArgs:Q,transport:W}}function eb($){if($.length===0)return{warnings:[]};let Z={},Q=[];for(let W of $){let[J,X]=ob(W);if(Z[J]=X,tb(X))Q.push(`Header "${J}" looks like it contains a placeholder. Update it in MCP settings before using this server.`)}return{headers:Z,warnings:Q}}function j7($){let Z=$.name.trim();if(!Z)throw Error("MCP server name is required");let{headers:Q,targetArgs:W,transport:J}=iA({headers:$.headers,targetArgs:$.targetArgs,transport:$.transport}),X=ab(J),{headers:Y,warnings:j}=eb(Q);if(X==="stdio"){if(Q.length>0)throw Error("Stdio MCP installs do not support request headers.");let[H,...B]=W;if(!H?.trim())throw Error("Stdio MCP install requires a command after the server name, for example: cline mcp install fs --yes -- npx -y @modelcontextprotocol/server-filesystem /tmp");return{name:Z,transport:{type:X,command:H,args:B.length>0?B:void 0},warnings:j}}if(W.length!==1)throw Error("Remote MCP install requires exactly one URL argument after the server name.");let V=W[0]?.trim()??"";return sb(V),{name:Z,transport:Y?{type:X,url:V,headers:Y}:{type:X,url:V},warnings:j}}function r5($){let[Z,...Q]=$;if(!Z)throw Error("Marketplace MCP install args must start with a server name.");return{name:Z,...iA({parseTransport:!0,targetArgs:Q})}}function $y($,Z,Q){j1(Q,(W)=>{let J=W.mcpServers,X=J&&typeof J==="object"&&!Array.isArray(J)?{...J}:{};X[$]={transport:Z},W.mcpServers=X})}function wX($){let{name:Z,transport:Q,warnings:W}=j7($);return $y(Z,Q,$.settingsPath??Z0()),{name:Z,status:"installed",transport:Q,warnings:W}}var Yf={};N(Yf,{uninstallMarketplaceSkill:()=>A7,uninstallMarketplacePlugin:()=>f7,uninstallMarketplaceMcpServerFromSettings:()=>K7,uninstallMarketplaceEntry:()=>dX,resolveMarketplaceMcpServerName:()=>o5,marketplaceEntryKey:()=>uX,isMarketplaceSkillInstalled:()=>F7,getMarketplaceSkillCandidates:()=>t5,getGlobalMarketplaceSkillPaths:()=>e5,findInstalledGlobalMarketplaceSkillName:()=>$9});import{spawn as Sy}from"node:child_process";import{existsSync as Jf,rmSync as by}from"node:fs";import{homedir as yy,platform as hy}from"node:os";import{dirname as ky,join as Wf}from"node:path";import{resolveClineDir as Iy,resolveMcpSettingsPath as xy}from"@cline/shared/storage";$1();var Qf={};N(Qf,{uninstallPlugin:()=>a5});import{existsSync as q4,readdirSync as Hy,readFileSync as By,rmdirSync as Gy,rmSync as Ky,statSync as Fy}from"node:fs";import{basename as a0,dirname as m$,extname as Ay,isAbsolute as fy,join as Z$,relative as Uy,resolve as O4,sep as yX}from"node:path";import{discoverPluginModulePaths as Dy,resolvePluginConfigSearchPaths as Ly}from"@cline/shared/storage";var tA={};N(tA,{syncPluginMcpServersToSettings:()=>i5,removePluginMcpServersFromSettings:()=>n5,disablePluginMcpServersInSettings:()=>bX});import{existsSync as Zy,mkdirSync as Qy,readFileSync as Wy,writeFileSync as Jy}from"node:fs";import{dirname as sA,isAbsolute as Xy,relative as Yy,resolve as aA}from"node:path";function u2($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function V7($,Z){let Q=Yy(aA($),aA(Z));return Q===""||!Q.startsWith("..")&&!Xy(Q)}function CX($){if(!Zy($))return{mcpServers:{}};try{let Z=JSON.parse(Wy($,"utf8"));if(u2(Z))return Z}catch(Z){throw Error(`Invalid MCP settings at "${$}": ${Z instanceof Error?Z.message:String(Z)}`)}throw Error(`Invalid MCP settings at "${$}": expected an object`)}function PX($){if(u2($.mcpServers))return{...$.mcpServers};return{}}function SX($,Z,Q){Qy(sA($),{recursive:!0}),Jy($,`${JSON.stringify({...Z,mcpServers:Q},null,2)}
717
+ `,"utf8")}function oA($){return{pluginPaths:[...new Set(($.pluginPaths??[]).map((Z)=>Z.trim()).filter((Z)=>Z.length>0))],pluginNames:[...new Set(($.pluginNames??[]).map((Z)=>Z.trim()).filter((Z)=>Z.length>0))]}}function B7($){if(!u2($))return;let Z=$.metadata;return u2(Z)?Z:void 0}function H7($,Z){let Q=B7($);if(!Q||Q.source!=="plugin")return!1;let W=typeof Q.pluginName==="string"?Q.pluginName:typeof Q.plugin==="string"?Q.plugin:void 0,J=typeof Q.pluginPath==="string"?Q.pluginPath:void 0;if(Z.pluginName&&W===Z.pluginName){if(!Z.pluginPath||J===Z.pluginPath)return!0}if(J&&Z.pluginPath&&(J===Z.pluginPath||V7(Z.pluginPath,J)||V7(J,Z.pluginPath)))return!0;if(W&&Z.pluginNames?.some((X)=>X===W))return!0;if(J&&Z.pluginPaths?.some((X)=>J===X||V7(X,J)||V7(J,X)))return!0;return!1}function jy($){let Z=u2($.existing?.oauth)?{oauth:$.existing.oauth}:{};return{transport:$.registration.transport.type==="stdio"&&$.registration.transport.cwd===void 0?{...$.registration.transport,cwd:sA($.pluginPath)}:$.registration.transport,...$.disabled?{disabled:!0}:{},...Z,metadata:{...$.registration.metadata??{},source:"plugin",pluginName:$.pluginName,pluginPath:$.pluginPath}}}async function Vy($){if($.pluginPaths.length===0)return{plugins:[],servers:[],failures:[]};let Z=await x8({pluginPaths:[...$.pluginPaths],cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,workspaceInfo:$.workspacePath?{rootPath:$.workspacePath}:void 0});try{let Q=[],W=[],J=(Z.failures??[]).map((X)=>({pluginPath:X.pluginPath,pluginName:X.pluginName,message:X.message}));for(let X of Z.extensions??[]){let Y=X.__clinePluginPath;if(!Y)continue;if(!X.setup){Q.push({pluginName:X.name,pluginPath:Y});continue}let j=[],V={registerTool:(H)=>{},registerCommand:()=>{},registerMessageBuilder:()=>{},registerRule:()=>{},registerProvider:()=>{},registerAutomationEventType:()=>{},registerMcpServer:(H)=>{if(!X.manifest.capabilities.includes("mcp"))throw Error('registerMcpServer requires the "mcp" capability');j.push(H)}};try{await X.setup(V,{workspaceInfo:$.workspacePath?{rootPath:$.workspacePath}:void 0})}catch(H){J.push({pluginPath:Y,pluginName:X.name,message:H instanceof Error?H.message:String(H)});continue}Q.push({pluginName:X.name,pluginPath:Y});for(let H of j)W.push({pluginName:X.name,pluginPath:Y,server:{...H,metadata:{...H.metadata??{},source:"plugin",pluginName:X.name,pluginPath:Y}}})}return{plugins:Q,servers:W,failures:J}}finally{await Z.shutdown().catch(()=>{})}}async function i5($){let Z=$.settingsPath??Z0(),Q={mutations:[],failures:[]},W;try{W=await Vy($)}catch(H){for(let B of $.pluginPaths)Q.failures.push({pluginPath:B,message:H instanceof Error?H.message:String(H)});return Q}Q.failures.push(...W.failures);let J;try{J=CX(Z)}catch(H){for(let B of $.pluginPaths)Q.failures.push({pluginPath:B,message:H instanceof Error?H.message:String(H)});return Q}let X=PX(J),Y=new Map,j=new Map;for(let H of W.plugins)Y.set(H.pluginPath,new Set),j.set(H.pluginPath,H.pluginName);let V=hQ(W.servers.map((H)=>({server:H.server,owner:H,ownerLabel:H.pluginName})));for(let H of V){let B=H.owner;if(!Y.has(B.pluginPath))Y.set(B.pluginPath,new Set);if(H.name)Y.get(B.pluginPath)?.add(H.name);if(!H.registration){Q.mutations.push({name:H.name,pluginName:B.pluginName,pluginPath:B.pluginPath,action:"skipped",reason:H.loadError??"invalid MCP server registration"});continue}let G=X[H.registration.name];if(G!==void 0){if(!H7(G,{pluginName:B.pluginName,pluginPath:B.pluginPath})){Q.mutations.push({name:H.registration.name,pluginName:B.pluginName,pluginPath:B.pluginPath,action:"skipped",reason:"MCP server name is already configured"});continue}}X[H.registration.name]=jy({registration:H.registration,pluginName:B.pluginName,pluginPath:B.pluginPath,existing:u2(G)?G:void 0}),Q.mutations.push({name:H.registration.name,pluginName:B.pluginName,pluginPath:B.pluginPath,action:G===void 0?"created":"updated"})}for(let[H,B]of Object.entries(X)){let G=B7(B),K=typeof G?.pluginPath==="string"?G.pluginPath:"",F=Y.get(K);if(F&&H7(B,{pluginPath:K})&&!F.has(H))delete X[H],Q.mutations.push({name:H,pluginName:typeof G?.pluginName==="string"?G.pluginName:j.get(K)??"plugin",pluginPath:K,action:"removed",reason:"plugin no longer declares this MCP server"})}if(Q.mutations.some((H)=>H.action!=="skipped"))try{SX(Z,J,X)}catch(H){for(let B of $.pluginPaths)Q.failures.push({pluginPath:B,message:H instanceof Error?H.message:String(H)})}return Q}function bX($){let Z=$.settingsPath??Z0(),Q;try{Q=CX(Z)}catch{return[]}let W=PX(Q),J=oA($),X=[];for(let[Y,j]of Object.entries(W)){if(!u2(j)||!H7(j,J))continue;let V=B7(j);W[Y]={...j,disabled:!0},X.push({name:Y,pluginName:typeof V?.pluginName==="string"?V.pluginName:"plugin",pluginPath:typeof V?.pluginPath==="string"?V.pluginPath:"",action:"disabled"})}if(X.length>0)SX(Z,Q,W);return X}function n5($){let Z=$.settingsPath??Z0(),Q;try{Q=CX(Z)}catch{return[]}let W=PX(Q),J=oA($),X=[];for(let[Y,j]of Object.entries(W)){if(!H7(j,J))continue;let V=B7(j);delete W[Y],X.push({name:Y,pluginName:typeof V?.pluginName==="string"?V.pluginName:"plugin",pluginPath:typeof V?.pluginPath==="string"?V.pluginPath:"",action:"removed"})}if(X.length>0)SX(Z,Q,W);return X}var gX="_installed",_y="package",zy=new Map([["git",2],["local",1],["npm",1],["official",1],["remote",1]]);function hX($){return $.trim().toLowerCase()}function V1($,Z){let Q=Z?.trim();if(!Q)return;$.add(Q)}function Ty($){return $.replace(/-[0-9a-f]{12}$/i,"")}function kX($){let Z=Ay($);return Z?$.slice(0,-Z.length):$}function IX($){if(!q4($))return;try{let Z=JSON.parse(By($,"utf8"));return typeof Z.name==="string"?Z.name.trim():void 0}catch{return}}function mX($,Z){let Q=Uy(Z,$);return Q===""||!Q.startsWith("..")&&!fy(Q)}function eA($){let Q=O4($).split(yX),W=Q.lastIndexOf(gX);if(W<0)return;let J=Q[W+1];if(!J)return;let X=zy.get(J)??1,Y=W+2+X;if(Q.length<Y)return;let j=Q.slice(0,Y).join(yX)||yX;return q4(j)?j:void 0}function G7($){try{return Hy($,{withFileTypes:!0})}catch{return[]}}function Oy($){let Z=Z$($,gX);if(!q4(Z))return[];let Q=[];for(let W of G7(Z)){if(!W.isDirectory())continue;let J=Z$(Z,W.name);if(W.name==="git"){for(let X of G7(J)){if(!X.isDirectory())continue;let Y=Z$(J,X.name);for(let j of G7(Y))if(j.isDirectory())Q.push(Z$(Y,j.name))}continue}for(let X of G7(J))if(X.isDirectory())Q.push(Z$(J,X.name))}return Q.sort((W,J)=>W.localeCompare(J))}function $f($){try{return Dy($)}catch{return[]}}function xX($){let Z=$f($),Q=new Set;V1(Q,a0($)),V1(Q,Ty(a0($))),V1(Q,IX(Z$($,"package.json"))),V1(Q,IX(Z$($,_y,"package.json")));for(let W of Z)V1(Q,a0(W)),V1(Q,kX(a0(W)));return{installPath:$,entryPaths:Z,names:[...Q].sort((W,J)=>W.localeCompare(J)),installed:!0}}function qy($,Z){let Q=O4($),W=Z.find((Y)=>mX(Q,Y));if(!W)return;let J=m$(Q);while(J!==W&&J!==m$(J)){if(q4(Z$(J,"package.json")))return J;J=m$(J)}let X=a0(Q);if((X==="index.ts"||X==="index.js")&&m$(Q)!==W)return m$(Q);return Q}function Zf($,Z){let Q=qy($,Z);if(!Q)return;let W=new Set;return V1(W,a0($)),V1(W,kX(a0($))),V1(W,a0(Q)),V1(W,kX(a0(Q))),V1(W,IX(Z$(Q,"package.json"))),{installPath:Q,entryPaths:[$],names:[...W].sort((J,X)=>J.localeCompare(X)),installed:!1}}function My($){let Z=$.workspaceRoot?.trim()||$.cwd?.trim()||process.cwd();return Ly(Z).filter((Q)=>q4(Q))}function Ry($){let Z=new Map;for(let Q of $){for(let W of Oy(Q))Z.set(W,xX(W));for(let W of $f(Q)){let J=eA(W);if(J){if(!Z.has(J))Z.set(J,xX(J));continue}let X=Zf(W,$);if(X)Z.set(X.installPath,X)}}return[...Z.values()].sort((Q,W)=>Q.installPath.localeCompare(W.installPath))}function Ey($,Z){let Q=hX(Z);if(!Q)return!1;if(hX($.installPath)===Q)return!0;return $.names.some((W)=>hX(W)===Q)}function Ny($,Z,Q){let W=O4($);for(let X of Z){if(mX(W,X.installPath))return X;if(X.entryPaths.some((Y)=>O4(Y)===W))return X}let J=eA(W);if(J)return xX(J);if(q4(W))return Zf(W,Q);return}function wy($){let Z=z0(),Q=Z.disabledPlugins;if(!Q?.length)return;let W=Q.filter((J)=>{let X=O4(J);if(mX(X,$.installPath))return!1;return!$.entryPaths.some((Y)=>O4(Y)===X)});if(W.length===Q.length)return;B1({...Z,disabledPlugins:W})}function Cy($){let Z=m$($);while(Z!==m$(Z)&&a0(Z)!==gX){try{Gy(Z)}catch{return}Z=m$(Z)}}function Py($){return`${$.names[0]??a0($.installPath)} at ${$.installPath}`}async function a5($){let Z=My($),Q=Ry(Z),W=$.path?.trim(),J=$.name?.trim(),X;if(W){if(X=Ny(W,Q,Z),!X)throw Error(`No plugin found at ${W}`)}else{if(!J)throw Error("plugin uninstall requires a plugin name");let j=Q.filter((V)=>Ey(V,J));if(j.length===0)throw Error(`No plugin found matching "${J}"`);if(j.length>1)throw Error(`Multiple plugins match "${J}": ${j.map(Py).join(", ")}`);X=j[0]}let Y=Fy(X.installPath,{throwIfNoEntry:!1});if(!Y)throw Error(`Plugin install path does not exist: ${X.installPath}`);if(n5({pluginPaths:[X.installPath,...X.entryPaths],pluginNames:X.names}),Ky(X.installPath,{recursive:Y.isDirectory(),force:!0}),wy(X),X.installed)Cy(X.installPath);return{name:J||X.names[0]||a0(X.installPath),installPath:X.installPath,removedPaths:[X.installPath],entryPaths:X.entryPaths}}var vX=120000,s5=12000,gy=/(api[_ -]?key|access[_ -]?token|refresh[_ -]?token|auth(?:orization)?[_ -]?token|token|secret|password|authorization|credential)/i,my=/((?:^|[^\w])(?:[a-z0-9_]*?(?:api[_ -]?key|access[_ -]?token|refresh[_ -]?token|auth(?:orization)?[_ -]?token|token|secret|password|credential)[a-z0-9_]*)\s*[:=]\s*)(.+)$/gi,vy=/((?:^|[^\w])authorization\s*[:=]\s*)bearer\s+([^\s,"'}\]]+)/gi,cy=/((?:^|[^\w])authorization\s*[:=])(?!\s*bearer\b)\s*(.+)$/gi;function cX($){return $.install?.args??[]}function uy(){return process.env.HOME?.trim()||process.env.USERPROFILE?.trim()||yy()}function dy($){let Z=0,Q=$.length;while(Z<Q&&($[Z]==="."||$[Z]==="-"))Z++;while(Q>Z&&($[Q-1]==="."||$[Q-1]==="-"))Q--;return $.slice(Z,Q)}function ly($){return dy($.toLowerCase().replace(/[^a-z0-9._]+/g,"-")).slice(0,255)||"skill"}function Xf($){return $.split(/\r?\n/).map((Z)=>{if(!gy.test(Z))return Z;return Z.replace(my,"$1[redacted]").replace(vy,"$1Bearer [redacted]").replace(/\b(Bearer)\s+(?!\[redacted\])([^\s,"'}\]]+)/gi,"$1 [redacted]").replace(cy,"$1 [redacted]").replace(/((?:^|[^\w])(?:api\s+key|access\s+token|refresh\s+token|auth(?:orization)?\s+token|secret|password|credential)\s+(?:is\s+)?)(\S+)/gi,"$1[redacted]")}).join(`
718
+ `).slice(-s5)}function py($){let Z=Xf([$.stdout,$.stderr].filter(Boolean).join(`
719
+ `)).trim();return Z.length>0?Z:void 0}function ry($){if($==="")return'""';if(/^[a-zA-Z0-9_./:=@%+,-]+$/.test($))return $;return JSON.stringify($)}function iy($,Z){return[$,...Z].map((Q)=>ry(Xf(Q).trim())).join(" ")}var ny=async($,Z)=>new Promise((Q,W)=>{let J=!1,X=!1,Y=Sy($,Z,{env:process.env,shell:hy()==="win32",stdio:["ignore","pipe","pipe"],windowsHide:!0}),j="",V="",H=setTimeout(()=>{if(!J)Y.kill("SIGKILL")},vX+5000),B=setTimeout(()=>{X=!0,V+=`
720
+ Timed out after ${vX/1000}s.`,Y.kill("SIGTERM")},vX);H.unref?.(),B.unref?.(),Y.stdout?.on("data",(G)=>{if(j+=String(G),j.length>s5*2)j=j.slice(-s5)}),Y.stderr?.on("data",(G)=>{if(V+=String(G),V.length>s5*2)V=V.slice(-s5)}),Y.once("error",(G)=>{clearTimeout(B),clearTimeout(H),W(G)}),Y.once("close",(G,K)=>{J=!0,clearTimeout(B),clearTimeout(H),Q({exitCode:X?124:G??(K==="SIGINT"?130:1),stdout:j,stderr:V})})});function uX($){return`${$.type}:${$.id}`}function o5($){let Z=cX($);if(Z.length===0)throw Error("Marketplace install args are required.");return r5(Z).name}function K7($,Z={}){let Q=o5($),W=Z.mcpSettingsPath??xy(),J=j1(W,(X)=>{let Y=X.mcpServers&&typeof X.mcpServers==="object"&&!Array.isArray(X.mcpServers)?X.mcpServers:{},j=Object.hasOwn(Y,Q);if(j)delete Y[Q];return X.mcpServers=Y,j});return{name:Q,deleted:J}}function t5($){let Z=new Set,Q=(J)=>{let X=ly(J??"");if(X&&X!=="skill")Z.add(X)};Q($.id),Q($.name);let W=cX($);for(let J=0;J<W.length;J++){let X=W[J];if((X==="--skill"||X==="-s")&&W[J+1]){Q(W[J+1]),J++;continue}let Y=X.split("@").at(1);if(Y)Q(Y)}return[...Z]}function e5($){return[Wf(Iy(),"skills",$,"SKILL.md"),Wf(uy(),".agents","skills",$,"SKILL.md")].filter((Z,Q,W)=>W.indexOf(Z)===Q)}function $9($){if($.type!=="skill")return;return t5($).find((Z)=>e5(Z).some((Q)=>Jf(Q)))}function F7($){return $9($)!==void 0}function ay($){let Z=[];if($.type!=="skill")return Z;for(let Q of t5($))for(let W of e5(Q)){if(!Jf(W))continue;let J=ky(W);by(J,{recursive:!0,force:!0}),Z.push(J)}return Z}async function A7($,Z={}){let Q=$9($);if(!Q)return{id:$.id,type:"skill",status:"uninstalled",message:`${$.name??$.id} is not installed.`};let W="npx",J=["-y","skills@latest","remove",Q,"-g","-y"],X=iy(W,J),Y=Z.spawnCommand??ny,j;try{j=await Y(W,J)}catch(B){throw Error(`Failed to start ${$.name??$.id} uninstall command:
721
721
  ${X}
722
- ${B instanceof Error?B.message:String(B)}`)}let V=cy(j);if(j.exitCode!==0)throw Error(`${$.name??$.id} uninstall failed with exit code ${j.exitCode}.
722
+ ${B instanceof Error?B.message:String(B)}`)}let V=py(j);if(j.exitCode!==0)throw Error(`${$.name??$.id} uninstall failed with exit code ${j.exitCode}.
723
723
  Command:
724
724
  ${X}${V?`
725
725
 
726
- ${V}`:""}`);let H=py($);if(K7($))throw Error(`Skill uninstall completed, but ${$.name??$.id} is still present in Cline's global skills directories.`);return{id:$.id,type:"skill",status:"uninstalled",message:`Uninstalled ${$.name??$.id}.`,output:[V,...H.map((B)=>`Removed: ${B}`)].filter(Boolean).join(`
727
- `)||void 0}}async function A7($,Z={}){let[Q]=cX($),W=Q?.trim()||$.id;if(!W)throw Error("Plugin marketplace uninstalls require a plugin name.");let J=await a5({name:W,workspaceRoot:Z.workspaceRoot});return{id:$.id,type:"plugin",status:"uninstalled",message:`Uninstalled ${$.name??J.name??$.id}.`,output:[`Path: ${J.installPath}`,...J.removedPaths.map((X)=>`Removed: ${X}`)].join(`
728
- `)}}async function dX($,Z={}){if($.type==="mcp"){let Q=o5($);if(Z.deleteMcpServer)await Z.deleteMcpServer(Q);else G7($,Z);return{id:$.id,type:$.type,status:"uninstalled",message:`Uninstalled ${$.name??Q??$.id}.`}}if($.type==="skill")return F7($,Z);if($.type==="plugin")return A7($,Z);throw Error(`Unsupported marketplace entry type: ${$.type}`)}var Lf={};N(Lf,{parsePluginSource:()=>q7,isOfficialPluginSlug:()=>O7,installPlugin:()=>aX,collectPluginMcpOAuthCandidates:()=>M7});import{spawn as ry}from"node:child_process";import{createHash as iy}from"node:crypto";import{existsSync as T1,mkdirSync as rX,readdirSync as ny,readFileSync as ay,renameSync as f7,rmSync as L7,statSync as iX}from"node:fs";import{cp as pX,mkdir as Kf,writeFile as _7}from"node:fs/promises";import{homedir as Xf}from"node:os";import{basename as W$,dirname as Yf,extname as sy,join as n,relative as Ff,resolve as v$,sep as oy}from"node:path";import{isPluginModulePath as D7,resolveClineDir as ty,resolvePluginModuleEntries as ey}from"@cline/shared/storage";var M4="_installed",z7="package",$h="https://github.com/cline/plugins.git",jf=30000,U7=10485760,Vf="@cline/",Zh=["dependencies","devDependencies","optionalDependencies","peerDependencies"],Qh={name:"cline-installed-plugin",private:!0,cline:{plugins:[]}};function T7($){if($==="~")return Xf();if($.startsWith("~/"))return n(Xf(),$.slice(2));return $}function Af($){return $.split(oy).join("/")}function u2($){return iy("sha256").update($).digest("hex").slice(0,12)}function Wh($){let Z=0;while(Z<$.length&&$[Z]==="-")Z++;let Q=$.length;while(Q>Z&&$[Q-1]==="-")Q--;return $.slice(Z,Q)}function Q$($){let Z="",Q=!1,W=$.startsWith("@")?$.slice(1):$;for(let X of W.slice(0,256)){if(X>="a"&&X<="z"||X>="A"&&X<="Z"||X>="0"&&X<="9"||X==="."||X==="_"||X==="-")Z+=X,Q=X==="-";else if(!Q)Z+="-",Q=!0;if(Z.length>=80)break}return Wh(Z)||"plugin"}function O7($){return/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test($.trim())}function Jh($){return $?.trim()||$h}function Hf($){let Q=$.trim().match(/^(@?[^@/]+(?:\/[^@/]+)?)(?:@.+)?$/);if(!Q?.[1])throw Error(`Invalid npm plugin source: npm:${$}`);return{name:Q[1]}}function Xh($){if($.startsWith(".")||$.startsWith("/")||$==="~"||$.startsWith("~/")||/^[A-Za-z]:[\\/]|^\\\\/.test($))return!1;let[Z,...Q]=$.split("/");return!!Z&&Q.length>=2&&Z.includes(".")&&!Z.startsWith(".")&&!Z.endsWith(".")}function Yh($){let Z=$.match(/^git@([^:]+):(.+)$/);if(Z){let Y=Z[2]??"",j=Y.indexOf("@");if(j<0)return{repo:$};return{repo:`git@${Z[1]}:${Y.slice(0,j)}`,ref:Y.slice(j+1)||void 0}}if($.includes("://"))try{let Y=new URL($),j=Y.pathname.replace(/^\/+/,""),V=j.indexOf("@");if(V<0)return{repo:$};return Y.pathname=`/${j.slice(0,V)}`,{repo:Y.toString().replace(/\/$/,""),ref:j.slice(V+1)||void 0}}catch{return{repo:$}}let Q=$.indexOf("/");if(Q<0)return{repo:$};let W=$.slice(0,Q),J=$.slice(Q+1),X=J.indexOf("@");if(X<0)return{repo:$};return{repo:`${W}/${J.slice(0,X)}`,ref:J.slice(X+1)||void 0}}function jh($){try{return decodeURIComponent($)}catch{return $}}function Vh($){return W$(jh($))||"plugin"}function Hh($){let Z=$.split("/").filter(Boolean);return Z.length>=5&&(Z[2]==="blob"||Z[2]==="raw")}function Bf($){if(!/^https?:\/\//i.test($))return null;let Z;try{Z=new URL($)}catch{return null}let Q=Z.hostname.toLowerCase(),W=Vh(Z.pathname),J=D7(W),X=(Q==="github.com"||Q==="www.github.com")&&Hh(Z.pathname);if(Z.protocol!=="https:"){if(X||Q==="raw.githubusercontent.com"||J)throw Error(`Remote plugin file URLs must use https: ${$}`);return null}if(Q==="github.com"||Q==="www.github.com"){let Y=Z.pathname.split("/").filter(Boolean);if(!X)return null;if(!J)throw Error(`Remote plugin file must be .js or .ts: ${$}`);return{type:"remote",url:`https://raw.githubusercontent.com/${[Y[0],Y[1],...Y.slice(3)].join("/")}`,filename:W}}if(Q==="raw.githubusercontent.com"){if(!J)throw Error(`Remote plugin file must be .js or .ts: ${$}`);return{type:"remote",url:Z.toString(),filename:W}}if(!J)return null;return{type:"remote",url:Z.toString(),filename:W}}function Gf($,Z={}){let Q=$.trim(),W=Q.startsWith("git:")&&!Q.startsWith("git://"),J=W?Q.slice(4).trim():Q;if(!Z.force&&!W&&!/^(https?|ssh|git):\/\//i.test(J))return null;let{repo:X,ref:Y}=Yh(J),j="",V="";if(X.startsWith("git@")){let G=X.match(/^git@([^:]+):(.+)$/);j=G?.[1]??"",V=G?.[2]??""}else if(/^(https?|ssh|git):\/\//i.test(X)){let G=new URL(X);j=G.hostname,V=G.pathname.replace(/^\/+/,"")}else{let G=X.indexOf("/");if(G<0)return null;j=X.slice(0,G),V=X.slice(G+1)}let H=V.replace(/\.git$/,"").replace(/^\/+/,"");if(!j||!H||H.split("/").length<2)return null;return{type:"git",repo:X.startsWith("git@")||/^(https?|ssh|git):\/\//i.test(X)?X:`https://${X}`,ref:Y,host:j,path:H}}function q7($,Z){let Q=$.trim();if(!Q)throw Error("plugin install requires a source");if(Z==="npm"){let Y=Q.startsWith("npm:")?Q.slice(4).trim():Q,{name:j}=Hf(Y);return{type:"npm",spec:Y,name:j}}if(Z==="git"){let Y=Gf(Q,{force:!0});if(!Y)throw Error(`Invalid git plugin source: ${$}`);return Y}if(Z==="local")return{type:"local",path:$};if(Z==="remote"){let Y=Bf(Q);if(!Y)throw Error(`Invalid remote plugin source: ${$}`);return Y}if(Q.startsWith("npm:")){let Y=Q.slice(4).trim(),{name:j}=Hf(Y);return{type:"npm",spec:Y,name:j}}if(Q.startsWith(".")||Q.startsWith("/")||Q==="~"||Q.startsWith("~/")||/^[A-Za-z]:[\\/]|^\\\\/.test(Q))return{type:"local",path:$};let J=Bf(Q);if(J)return J;let X=Gf(Q);if(X)return X;if(O7(Q))return{type:"official",slug:Q};if(Xh(Q))throw Error(`Unrecognized plugin source "${$}". Use --git for hostname-style repositories or pass an explicit local path such as ./github.com/owner/repo.`);return{type:"local",path:$}}function Bh($){return $?n($,".cline","plugins"):n(ty(),"plugins")}function Gh($,Z,Q){if(Z.type==="npm")return n($,M4,"npm",`${Q$(Z.name)}-${u2(Q)}`);if(Z.type==="git")return n($,M4,"git",Q$(Z.host),`${Q$(Z.path)}-${u2(Q)}`);if(Z.type==="remote")return n($,M4,"remote",`${Q$(Z.filename)}-${u2(Q)}`);if(Z.type==="official")return n($,M4,"official",`${Q$(Z.slug)}-${u2(Q)}`);return n($,M4,"local",`${Q$(W$(T7(Z.path)))}-${u2(Q)}`)}function Kh($,Z,Q){if($.type==="npm")return`npm:${$.spec}`;if($.type==="git")return`git:${$.repo}${$.ref?`#${$.ref}`:""}`;if($.type==="remote")return`remote:${$.url}`;if($.type==="official")return`official:${Q}#plugins/${$.slug}`;return`local:${v$(Z,T7($.path))}`}function Fh($,Z){if($.type==="npm")return $.name;if($.type==="git")return Q$(W$($.path));if($.type==="remote")return Q$(W$($.filename,sy($.filename)));if($.type==="official")return $.slug;return Q$(W$(v$(Z,T7($.path))))}async function R4($,Z,Q={}){await new Promise((W,J)=>{let X=ry($,Z,{cwd:Q.cwd,stdio:["ignore","ignore","pipe"],env:process.env,windowsHide:!0}),Y="";X.stderr.on("data",(j)=>{Y+=String(j)}),X.on("error",J),X.on("close",(j)=>{if(j===0){W();return}let V=Y.trim();J(Error(`${$} ${Z.join(" ")} failed with exit code ${j}${V?`: ${V}`:""}`))})})}function ff($){let Z=n($,"package.json");if(!T1(Z))return null;try{return JSON.parse(ay(Z,"utf8"))}catch{return null}}function Ah($){let Z=$?.cline?.plugins;if(!Array.isArray(Z))return[];return Z.flatMap((Q)=>{if(typeof Q==="string")return[Q];return Q.paths??[]})}async function fh($){let Z=n($,"package.json"),Q=ff($);if(!Q)return;let W=!1;for(let J of Zh){let X=Q[J];if(!X||typeof X!=="object")continue;for(let Y of Object.keys(X)){if(!Y.startsWith(Vf))continue;delete X[Y],delete Q.peerDependenciesMeta?.[Y],W=!0}if(Object.keys(X).length===0)delete Q[J]}if(Q.peerDependenciesMeta){for(let J of Object.keys(Q.peerDependenciesMeta)){if(!J.startsWith(Vf))continue;delete Q.peerDependenciesMeta[J],W=!0}if(Object.keys(Q.peerDependenciesMeta).length===0)delete Q.peerDependenciesMeta}if(!W)return;await _7(Z,`${JSON.stringify(Q,null,2)}
729
- `,"utf8")}function Uh($,Z){let Q=n($,"node_modules","@cline");if(!T1(Q))return;for(let W of Df(Q)){if(`@cline/${W.name}`===Z)continue;L7(n(Q,W.name),{recursive:!0,force:!0})}}function Uf($){let Z=Ah(ff($)).map((X)=>v$($,X)).filter((X)=>T1(X)&&iX(X).isFile()&&D7(X));if(Z.length>0)return Z;let Q=ey($);if(Q?.length)return Q;let W=[],J=[$];while(J.length>0){let X=J.pop();if(!X)continue;for(let Y of Df(X)){let j=n(X,Y.name);if(Y.name==="node_modules"||Y.name===".git")continue;if(Y.isDirectory()){J.push(j);continue}if(Y.isFile()&&!Y.name.startsWith(".")&&D7(j))W.push(j)}}return W.sort((X,Y)=>X.localeCompare(Y))}function Df($){try{return ny($,{withFileTypes:!0})}catch{return[]}}function Dh($,Z){let Q=Uf(Z);if(Q.length===0)throw Error(`No plugin entry files found in ${Z}`);return Q.map((W)=>`./${Af(Ff($,W))}`)}async function Lh($,Z,Q){let W=Dh($,Z);return await _7(n($,"package.json"),JSON.stringify({...Qh,name:Q,cline:{plugins:[{paths:W}]}},null,2),"utf8"),W}async function _h($,Z,Q){let W=n(Z,z7);return await Kf(W,{recursive:!0}),await _7(n(W,"package.json"),JSON.stringify({name:"cline-plugin-install",private:!0},null,2),"utf8"),await R4(Q,["install",$.spec,"--prefix",W,"--omit=dev","--omit=peer","--legacy-peer-deps","--no-audit","--no-fund","--package-lock=false"]),Uh(W,$.name),n(W,"node_modules",$.name)}async function nX($,Z){if(!T1(n($,"package.json")))return;await fh($),await R4(Z,["install","--omit=dev","--omit=peer","--legacy-peer-deps","--no-audit","--no-fund","--package-lock=false"],{cwd:$})}async function zh($,Z,Q){if($.ref?.startsWith("-"))throw Error(`Invalid git ref "${$.ref}".`);let W=n(Z,z7),J=["clone","--filter=blob:none"];if($.ref)J.push("--branch",$.ref);J.push("--",$.repo,W);try{await R4("git",J)}catch(X){if(!$.ref)throw X;await R4("git",["clone","--filter=blob:none","--",$.repo,W]),await R4("git",["checkout","--detach",$.ref],{cwd:W})}return await nX(W,Q),W}async function Th($,Z,Q,W){let J=n(Z,"repo");await R4("git",["clone","--filter=blob:none","--depth","1","--",W,J]);let X=n(J,"plugins",$.slug);if(!T1(X)||!iX(X).isDirectory())throw Error(`Official Cline plugin "${$.slug}" was not found at plugins/${$.slug} in ${W}`);let Y=n(Z,z7);return await pX(X,Y,{recursive:!0,filter:(j)=>{let V=W$(j);return V!==".git"&&V!=="node_modules"}}),L7(J,{recursive:!0,force:!0}),await nX(Y,Q),Y}function lX($){return Error(`Remote plugin file from ${$} exceeds the ${U7} byte limit`)}function Oh($){let Z=$.headers.get("content-length");if(!Z)return;let Q=Number(Z);if(!Number.isFinite(Q)||Q<0)return;return Q}async function qh($,Z){let Q=Oh($);if(Q!==void 0&&Q>U7)throw lX(Z);if(!$.body){let Y=Buffer.from(await $.text(),"utf8");if(Y.byteLength>U7)throw lX(Z);return Y}let W=$.body.getReader(),J=[],X=0;try{while(!0){let{done:Y,value:j}=await W.read();if(Y)break;let V=Buffer.from(j);if(X+=V.byteLength,X>U7)throw await W.cancel().catch(()=>{return}),lX(Z);J.push(V)}return Buffer.concat(J,X)}finally{W.releaseLock()}}async function Mh($,Z){let Q=new AbortController,W=setTimeout(()=>{Q.abort()},jf);try{let J=await fetch($.url,{signal:Q.signal});if(!J.ok){let Y=J.statusText?` ${J.statusText}`:"";throw Error(`Failed to download plugin file from ${$.url}: ${J.status}${Y}`)}let X=await qh(J,$.url);return rX(Z,{recursive:!0}),await _7(n(Z,$.filename),X),Z}catch(J){if(J instanceof Error&&J.name==="AbortError")throw Error(`Timed out downloading plugin file from ${$.url} after ${jf}ms`);throw J}finally{clearTimeout(W)}}async function Rh($,Z,Q,W){let J=v$(Q,T7($.path));if(!T1(J))throw Error(`Plugin source path does not exist: ${J}`);let X=iX(J);if(X.isFile()){if(!D7(J))throw Error(`Plugin file must be .js or .ts: ${J}`);rX(Z,{recursive:!0});let j=n(Z,W$(J));return await pX(J,j),Z}if(!X.isDirectory())throw Error(`Plugin source must be a file or directory: ${J}`);let Y=n(Z,z7);return await pX(J,Y,{recursive:!0,filter:(j)=>{let V=W$(j);return V!==".git"&&V!=="node_modules"}}),await nX(Y,W),Y}function Eh($,Z){if(T1($)&&!Z)throw Error(`Plugin is already installed at ${$}. Use --force to replace it.`)}function Nh($,Z,Q){if(rX(Yf(Z),{recursive:!0}),!T1(Z)){f7($,Z);return}if(!Q)throw Error(`Plugin is already installed at ${Z}. Use --force to replace it.`);let W=n(Yf(Z),`.replace-${W$(Z)}-${Date.now()}-${process.pid}-${u2(`${Z}:${Math.random()}`)}`);f7(Z,W);try{f7($,Z)}catch(J){if(!T1(Z)&&T1(W))f7(W,Z);throw J}try{L7(W,{recursive:!0,force:!0})}catch{}}function wh($){let Z=$.transport;if(Z.type==="stdio")return!1;return Z.headers!==void 0&&Object.keys(Z.headers).length>0}function Ch($){let Z=$.oauth?.tokens?.access_token;return typeof Z==="string"&&Z.trim().length>0}function Ph($){let Z=$.metadata;if(!Z||Z.source!=="plugin"||typeof Z.pluginName!=="string"||typeof Z.pluginPath!=="string")return;return{pluginName:Z.pluginName,pluginPath:Z.pluginPath}}function M7($){let Z=new Set($.pluginPaths.map((J)=>v$(J)));if(Z.size===0)return[];let Q;try{Q=p0({filePath:$.settingsPath??Z0()})}catch{return[]}let W=[];for(let J of Q){let X=Ph(J);if(!X||!Z.has(v$(X.pluginPath)))continue;let Y=J.transport.type;if(Y==="stdio")continue;if(wh(J)||Ch(J))continue;W.push({name:J.name,pluginName:X.pluginName,pluginPath:X.pluginPath,transportType:Y,lastError:J.oauth?.lastError})}return W.sort((J,X)=>J.name.localeCompare(X.name))}async function aX($){let Z=$.source.trim(),Q=q7(Z,$.sourceType),W=$.cwd?.trim(),J=W?v$(W):process.cwd(),X=Bh(W?J:void 0),Y=Jh($.officialPluginsRepo),j=Kh(Q,J,Y),V=Gh(X,Q,j),H=Fh(Q,J),B=n(X,M4,".tmp"),G=n(B,`${Date.now()}-${process.pid}-${u2(`${Z}:${Math.random()}`)}`),K=$.npmCommand??(process.env.CLINE_NPM_COMMAND?.trim()||"npm"),F=$.force===!0;Eh(V,F),await Kf(B,{recursive:!0});let A;try{if(Q.type==="npm")A=await _h(Q,G,K);else if(Q.type==="git")A=await zh(Q,G,K);else if(Q.type==="official")A=await Th(Q,G,K,Y);else if(Q.type==="remote")A=await Mh(Q,G);else A=await Rh(Q,G,J,K);let L=(Q.type==="local"||Q.type==="remote")&&A===G?Uf(G).map((U)=>`./${Af(Ff(G,U))}`):await Lh(G,A,H);if(L.length===0)throw Error(`No plugin entry files found for ${Z}`);Nh(G,V,F);let f={source:Z,installPath:V,entryPaths:L.map((U)=>v$(V,U)),mcpSyncFailures:[],mcpOAuthCandidates:[]},D=await i5({pluginPaths:f.entryPaths,cwd:J,workspacePath:J});return f.mcpSyncFailures=D.failures,f.mcpOAuthCandidates=M7({pluginPaths:f.entryPaths}),f}catch(L){throw L7(G,{recursive:!0,force:!0}),L}}var mf={};N(mf,{updateLocalProvider:()=>b7,saveLocalProviderSettings:()=>WY,saveLocalProviderOAuthCredentials:()=>jY,resolveLocalClineAuthToken:()=>HY,refreshProviderModelsFromSource:()=>JY,normalizeOAuthProvider:()=>XY,loginLocalProvider:()=>YY,loginAndSaveLocalProviderOAuthCredentials:()=>VY,listLocalProviders:()=>ZY,getLocalProviderModels:()=>QY,ensureCustomProvidersLoaded:()=>C7,deleteLocalProvider:()=>y7,addLocalProvider:()=>$Y});import*as w0 from"@cline/llms";import{existsSync as Sh,mkdirSync as bh,readFileSync as yh,writeFileSync as hh}from"node:fs";import{mkdir as kh,readFile as Ih,writeFile as xh}from"node:fs/promises";import{dirname as sX,join as gh}from"node:path";import*as h0 from"@cline/llms";import{ModelCapabilitySchema as mh,ProviderCapabilitySchema as vh,ProviderClientSchema as ch,ProviderProtocolSchema as uh}from"@cline/shared";import{z as a}from"zod";var dh=a.object({id:a.string().optional(),name:a.string().optional(),maxTokens:a.number().optional(),contextWindow:a.number().optional(),maxInputTokens:a.number().optional(),capabilities:a.array(mh).optional(),supportsVision:a.boolean().optional(),supportsAttachments:a.boolean().optional(),supportsReasoning:a.boolean().optional()}).passthrough(),lh=a.object({name:a.string(),baseUrl:a.string(),defaultModelId:a.string().optional(),protocol:uh.optional(),client:ch.optional(),capabilities:a.array(vh).optional(),modelsSourceUrl:a.string().optional()}).passthrough(),_f=a.object({provider:lh.optional(),models:a.record(a.string(),dh).optional()}).passthrough(),zf=a.object({version:a.literal(1),providers:a.record(a.string(),_f)}),ph=a.object({version:a.literal(1),providers:a.record(a.string(),a.unknown())}),R7=new Set;function Tf($){return $.split(/[-_]/).filter(Boolean).map((Z)=>Z.charAt(0).toUpperCase()+Z.slice(1)).join(" ")}function d2($){return gh(sX($.getFilePath()),"models.json")}function E7(){return{version:1,providers:{}}}function Of($){let Z=ph.safeParse($);if(!Z.success)return E7();let Q={};for(let[W,J]of Object.entries(Z.data.providers)){let X=_f.safeParse(J);if(X.success)Q[W]=X.data}return{version:1,providers:Q}}function oX($){if(!Sh($))return E7();try{let Z=yh($,"utf8");return Of(JSON.parse(Z))}catch{}return E7()}async function E4($){try{let Z=await Ih($,"utf8");return Of(JSON.parse(Z))}catch{}return E7()}function qf($,Z){bh(sX($),{recursive:!0});let Q=zf.parse(Z);hh($,`${JSON.stringify(Q,null,2)}
730
- `,"utf8")}async function N7($,Z){await kh(sX($),{recursive:!0});let Q=zf.parse(Z);await xh($,`${JSON.stringify(Q,null,2)}
731
- `,"utf8")}function Mf($,Z){return{id:$,name:Z.name??$,supportsAttachments:Z.capabilities?.includes("files"),supportsVision:Z.capabilities?.includes("images"),supportsReasoning:Z.capabilities?.includes("reasoning")||Z.thinkingConfig!=null}}function Rf($){if(!$||$.length===0)return;let Z=new Set;if($.includes("reasoning"))Z.add("reasoning");if($.includes("prompt-cache"))Z.add("prompt-cache");if($.includes("tools"))Z.add("tools");return Z.size>0?[...Z]:void 0}function Ef($){let Z=new Set;if(!$||$.length===0)return[...Z];if($.includes("streaming"))Z.add("streaming");if($.includes("tools"))Z.add("tools");if($.includes("reasoning"))Z.add("reasoning");if($.includes("prompt-cache"))Z.add("prompt-cache");if($.includes("vision"))Z.add("images"),Z.add("files");return[...Z]}function rh($){return $!=null&&typeof $.name==="string"&&typeof $.baseUrl==="string"}function Nf($,Z){return $??Z??"openai-chat"}function wf($,Z,Q){return $??Q??(Z==="openai-responses"?"openai":"openai-compatible")}function Cf($,Z,Q){let W=new Set(Z?.capabilities??Q??[]);if(Z?.supportsVision)W.add("images");if(Z?.supportsAttachments)W.add("files");if(Z?.supportsReasoning)W.add("reasoning");return{id:$,name:Z?.name??$,maxTokens:Z?.maxTokens,contextWindow:Z?.contextWindow,maxInputTokens:Z?.maxInputTokens,capabilities:W.size>0?[...W]:void 0}}function ih($,Z){for(let[Q,W]of Object.entries(Z??{})){let J=W.id?.trim()||Q.trim();if(!J)continue;h0.registerModel($,J,Cf(J,W))}}function nh($,Z,Q){return{...Z??{},id:$,name:Z?.name??$,capabilities:Z?.capabilities??Q}}function ah($){return Object.assign({},...h0.resolveProviderModelCatalogKeys($).map((Q)=>h0.getGeneratedModelsForProvider(Q)))}function sh($){let Z=$.provider.trim();if(!Z||h0.isBuiltInProviderId(Z))return;let Q=$.baseUrl?.trim();if(!Q)return;let W=h0.MODEL_COLLECTIONS_BY_PROVIDER_ID[Z],J=ah(Z),X=Ef($.capabilities),Y=X.length>0?X:void 0,j=$.model?.trim(),V={...J,...W?.models??{}};if(j)V[j]=nh(j,V[j],Y);let H=Object.keys(V).filter(Boolean),B=j||H[0];if(!B)return;let G=Nf($.protocol,W?.provider.protocol),K=wf($.client,G,W?.provider.client);h0.registerProvider({provider:{id:Z,name:W?.provider.name??Tf(Z),description:W?.provider.description,protocol:G,client:K,baseUrl:Q,modelsSourceUrl:W?.provider.modelsSourceUrl,defaultModelId:B,capabilities:Rf($.capabilities)??W?.provider.capabilities,source:"file"},models:V})}function w7($){for(let Z of Object.values($.providers))sh(Z.settings)}function Z9($,Z){let Q=Z.models??{};if(!rh(Z.provider)){ih($,Q);return}let W=Ef(Z.provider.capabilities),J=Object.entries(Q).map(([H,B])=>({id:B.id?.trim()||H.trim(),model:B})).filter(({id:H})=>H.length>0),X=Z.provider.defaultModelId?.trim()||J[0]?.id||"default",Y=Nf(Z.provider.protocol,void 0),j=wf(Z.provider.client,Y,void 0),V=Object.fromEntries(J.map(({id:H,model:B})=>[H,{...Cf(H,B,W.length>0?W:void 0),status:"active"}]));h0.registerProvider({provider:{id:$,name:Z.provider.name.trim()||Tf($),protocol:Y,client:j,baseUrl:Z.provider.baseUrl,modelsSourceUrl:Z.provider.modelsSourceUrl,defaultModelId:X,capabilities:Rf(Z.provider.capabilities),source:"file"},models:V})}function Pf($){let Z=d2($);if(R7.has(Z))return;let Q=oX(Z);for(let[W,J]of Object.entries(Q.providers))Z9(W,J);R7.add(Z)}async function C7($){let Z=d2($);if(R7.has(Z))return;let Q=await E4(Z);for(let[W,J]of Object.entries(Q.providers))Z9(W,J);R7.add(Z)}var bf="cline-pass";function oh($){return $.apiKey??$.auth?.apiKey}function th($){return($.auth?.accessToken?.trim()??"").length>0}function yf($){return $.split(/[-_]/).filter(Boolean).map((Z)=>Z.charAt(0).toUpperCase()+Z.slice(1)).join(" ")}function eh($){let Z=$.split(/\s+/).filter(Boolean);if(Z.length===0)return"?";if(Z.length===1)return Z[0].slice(0,2).toUpperCase();return`${Z[0][0]}${Z[1][0]}`.toUpperCase()}function $k($){let Z=["#c4956a","#6b8aad","#e8963a","#5b9bd5","#6bbd7b","#9b7dd4","#d07f68","#57a6a1"],Q=0;for(let W of $)Q=Q*31+W.charCodeAt(0)>>>0;return Z[Q%Z.length]}function hf($){return Object.entries($).sort(([Z],[Q])=>Z.localeCompare(Q)).map(([Z,Q])=>Mf(Z,Q))}async function Zk($,Z){let Q=await w0.getModelsForProvider($),W=$===bf;if(!Z&&!W)return Q;let J=await Z5($,{loadLatestOnInit:W,loadPrivateOnAuth:!0,failOnError:!1},Z);if($==="litellm"&&J?.knownModels)return J.knownModels;if(W&&J?.knownModels)return J.knownModels;return J?.knownModels?{...Q,...J.knownModels}:Q}function tX($){return[...new Set(($??[]).map((Z)=>Z.trim()).filter(Boolean))]}function Qk($){if(!$?.length)return;return[...new Set($)]}function Wk($,Z){return Qk([...$??[],...Z??[]])}function Jk($){let Z=$?.popularRank;return typeof Z==="number"&&Number.isFinite(Z)?Z:Number.MAX_SAFE_INTEGER}function Xk($){if(!$||typeof $!=="object")return!1;let Z=$;return typeof Z.path==="string"&&Z.path.trim().length>0&&typeof Z.label==="string"&&Z.label.trim().length>0&&["text","password","url","number","select","boolean"].includes(String(Z.type))}function Yk($){let Z=$?.configFields;if(!Array.isArray(Z))return;return Z.filter(Xk)}var P7={path:"apiKey",label:"API Key",type:"password",placeholder:"Enter API key...",description:"API key issued by the provider.",secret:!0},Sf={path:"baseUrl",label:"Base URL",type:"url",placeholder:"https://...",description:"Base endpoint used for provider requests."};function jk($){if(!$)return[P7];if($.source!=="system")return $.baseUrl?[P7,Sf]:[P7];let Z=[];if($.env?.length)Z.push(P7);if($.baseUrl)Z.push(Sf);return Z}function Vk($,Z){return Z.split(".").reduce((Q,W)=>{if(!Q||typeof Q!=="object")return;return Q[W]},$)}function Hk($){if(typeof $==="string"||typeof $==="number"||typeof $==="boolean"||$===null)return $;return}function Bk($,Z,Q){if(!$?.length)return;let W={};for(let J of $){let Y=Hk(J.path==="baseUrl"&&Z?.baseUrl===void 0?Q?.baseUrl:Vk(Z,J.path))??J.defaultValue;if(Y!==void 0)W[J.path]=Y}return W}function kf($){let Z=Object.entries($??{}).filter(([Q])=>Q.trim().length>0);return Z.length>0?Object.fromEntries(Z):void 0}function eX($,Z){let Q=Z?.includes("vision")??!1,W=Z?.includes("reasoning")??!1;return Object.fromEntries($.map((J)=>[J,{id:J,name:J,supportsVision:Q,supportsAttachments:Q,supportsReasoning:W}]))}async function If($){if(!$.shouldRecompute)return $.fallbackModelIds??[];let Z=$.modelsSourceUrl?await rZ($.modelsSourceUrl,$.providerId):[];return[...new Set([...$.explicitModels??[],...Z])]}function xf($,Z){let Q=$.read(),W=!1;if(Q.providers[Z])delete Q.providers[Z],W=!0;if(Q.lastUsedProvider===Z)delete Q.lastUsedProvider,W=!0;if(W)$.write(Q);w0.unregisterProvider(Z)}async function $Y($,Z){let Q=Z.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let W=Z.baseUrl.trim(),J=Z.apiKey?.trim()??"";if(!W&&!J){let A=d2($);if((await E4(A)).providers[Q]){let f=await y7($,{providerId:Q});return{providerId:Q,settingsPath:f.settingsPath,modelsPath:f.modelsPath,modelsCount:0}}return xf($,Q),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:A,modelsCount:0}}if(w0.hasProvider(Q))throw Error(`provider "${Q}" already exists`);let X=Z.name.trim();if(!X)throw Error("name is required");if(!W)throw Error("baseUrl is required");let Y=tX(Z.models),j=Z.modelsSourceUrl?.trim(),V=await If({providerId:Q,explicitModels:Y,modelsSourceUrl:j,shouldRecompute:!0});if(V.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let H=Z.defaultModelId?.trim()&&V.includes(Z.defaultModelId.trim())?Z.defaultModelId.trim():V[0],B=Z.capabilities?.length?[...new Set(Z.capabilities)]:void 0,G=kf(Z.headers);$.saveProviderSettings({provider:Q,apiKey:J||void 0,baseUrl:W,headers:G,timeout:Z.timeoutMs,model:H,protocol:Z.protocol,client:Z.client},{setLastUsed:!1});let K=d2($),F=await E4(K);return F.providers[Q]={provider:{name:X,baseUrl:W,defaultModelId:H,protocol:Z.protocol,client:Z.client,capabilities:B,modelsSourceUrl:j},models:eX(V,B)},await N7(K,F),Z9(Q,F.providers[Q]),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:K,modelsCount:V.length}}async function b7($,Z){let Q=Z.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let W=d2($),J=await E4(W),X=J.providers[Q];if(!X){let O=$.getProviderSettings(Q);if(!O)throw Error(`provider "${Q}" does not exist`);let z=Z.modelsSourceUrl?.trim(),_=tX(Z.models)[0]??O.model?.trim();if(!_&&!z)throw Error(`provider "${Q}" cannot be updated because no model is configured`);X={provider:{name:Z.name?.trim()||yf(Q),baseUrl:Z.baseUrl?.trim()??O.baseUrl?.trim()??"",defaultModelId:_,protocol:O.protocol,client:O.client,capabilities:O.capabilities},models:_?eX([_],O.capabilities):{}}}if(!X.provider)throw Error(`provider "${Q}" cannot be updated because it is a model overlay (no provider metadata)`);let Y=Z.name?.trim()??X.provider.name.trim();if(!Y)throw Error("name is required");let j=Z.baseUrl?.trim()??X.provider.baseUrl.trim();if(!j)throw Error("baseUrl is required");let V=Z.capabilities===void 0?X.provider.capabilities:Z.capabilities===null?void 0:[...new Set(Z.capabilities)],H=Z.protocol===void 0?X.provider.protocol:Z.protocol??void 0,B=Z.client===void 0?X.provider.client:Z.client??void 0,G=tX(Z.models),K=Z.modelsSourceUrl===void 0?X.provider.modelsSourceUrl:Z.modelsSourceUrl?.trim()||void 0,F=Z.models!==void 0||Z.modelsSourceUrl!==void 0&&!!K,A=Object.keys(X.models??{}).map((O)=>O.trim()).filter(Boolean),L=await If({providerId:Q,explicitModels:G,modelsSourceUrl:K,fallbackModelIds:A,shouldRecompute:F});if(L.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let f=Z.defaultModelId===void 0?X.provider.defaultModelId?.trim():Z.defaultModelId?.trim(),D=f&&L.includes(f)?f:L[0],T={...$.getProviderSettings(Q)??{},provider:Q,baseUrl:j,model:D};if(H)T.protocol=H;else delete T.protocol;if(B)T.client=B;else delete T.client;if(Z.apiKey!==void 0){let O=Z.apiKey?.trim()??"";if(O)T.apiKey=O;else delete T.apiKey}if(Z.headers!==void 0){let O=kf(Z.headers);if(O)T.headers=O;else delete T.headers}if(Z.timeoutMs!==void 0)if(typeof Z.timeoutMs==="number")T.timeout=Z.timeoutMs;else delete T.timeout;return $.saveProviderSettings(T,{setLastUsed:!1}),J.providers[Q]={provider:{name:Y,baseUrl:j,defaultModelId:D,protocol:H,client:B,capabilities:V,modelsSourceUrl:K},models:eX(L,V)},await N7(W,J),Z9(Q,J.providers[Q]),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:W,modelsCount:L.length}}async function y7($,Z){let Q=Z.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let W=d2($),J=await E4(W);if(!J.providers[Q])throw Error(`provider "${Q}" does not exist`);return delete J.providers[Q],await N7(W,J),w0.unregisterProvider(Q),xf($,Q),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:W}}async function ZY($,Z={}){let Q=$.read(),W=w0.getProviderIds(),J=await Promise.all(W.map(async(Y)=>{let[j,V]=await Promise.all([w0.getProvider(Y),w0.getModelsForProvider(Y)]),H=hf(V),B=Q.providers[Y]?.settings,G=j?.name??yf(Y),K=Wk(j?.capabilities,B?.capabilities),F=Yk(j?.metadata)??jk(j);return{provider:{id:Y,name:G,models:H.length,color:$k(Y),letter:eh(G),enabled:Boolean(B),apiKey:B?oh(B):void 0,oauthAccessTokenPresent:B?th(B):void 0,baseUrl:B?.baseUrl??j?.baseUrl,defaultModelId:j?.defaultModelId,protocol:B?.protocol??j?.protocol,client:B?.client??j?.client,capabilities:K,authDescription:"This provider uses API keys for authentication.",baseUrlDescription:"The base endpoint to use for provider requests.",configFields:F,configValues:Bk(F,B,j),modelList:H},rank:Jk(j?.metadata)}}));J.sort((Y,j)=>{if(Y.rank!==j.rank)return Y.rank-j.rank;return Y.provider.name.localeCompare(j.provider.name)||Y.provider.id.localeCompare(j.provider.id)});let X=J.map((Y)=>Y.provider);if(Z.isClinePassEnabled!==!0)X=X.filter((Y)=>Y.id!==bf);return{providers:X,settingsPath:$.getFilePath()}}async function QY($,Z){let Q=$.trim(),W=await Zk(Q,Z),J=hf(W);return{providerId:Q,models:J}}function S7($){return $!=null&&typeof $==="object"&&!Array.isArray($)}function gf($,Z){if(!S7(Z))return S7($)?{...$}:void 0;let Q=S7($)?{...$}:{};for(let[W,J]of Object.entries(Z)){if(J==null||J===""){delete Q[W];continue}if(S7(J)){let X=gf(Q[W],J);if(X&&Object.keys(X).length>0)Q[W]=X;else delete Q[W];continue}Q[W]=J}return Object.keys(Q).length>0?Q:void 0}function WY($,Z){let Q=Z.providerId.trim();if(Z.enabled===!1){let X=$.read();if(delete X.providers[Q],X.lastUsedProvider===Q)delete X.lastUsedProvider;return $.write(X),{providerId:Q,enabled:!1,settingsPath:$.getFilePath()}}let J={...$.getProviderSettings(Q)??{},provider:Q};for(let X of["apiKey","baseUrl","model","region"])if(Object.hasOwn(Z,X)&&typeof Z[X]==="string")if(Z[X].trim().length===0)delete J[X];else J[X]=Z[X];for(let X of["maxTokens","contextWindow","timeout","apiLine","protocol","client","routingProviderId","capabilities"])if(Object.hasOwn(Z,X))J[X]=Z[X];for(let X of["auth","headers","reasoning","aws","gcp","azure","sap","oca"])if(Object.hasOwn(Z,X)&&Z[X]!=null){let Y=gf(J[X],Z[X]);if(Y)J[X]=Y;else delete J[X]}return $.saveProviderSettings(J,{setLastUsed:!1}),{providerId:Q,enabled:!0,settingsPath:$.getFilePath()}}async function JY($,Z){let Q=Z.trim(),W=$.getProviderSettings(Q),X=w0.MODEL_COLLECTIONS_BY_PROVIDER_ID[Q]?.provider,Y=W?.baseUrl?.trim()||X?.baseUrl?.trim(),j=iZ(Y,X?.baseUrl,X?.modelsSourceUrl);if(!W||!X||!Y||!j)return{providerId:Q,refreshed:!1};let V=await b7($,{providerId:Q,name:X.name,baseUrl:Y,apiKey:W.apiKey,headers:W.headers??null,timeoutMs:W.timeout??null,modelsSourceUrl:j,protocol:W.protocol??X.protocol??null,client:W.client??X.client??null,capabilities:W.capabilities??null});return{providerId:Q,refreshed:!0,modelsCount:V.modelsCount}}function XY($){let Z=$.trim().toLowerCase(),Q=j0(Z);if(Q)return Q.providerId;throw Error(`provider "${$}" does not support OAuth login`)}async function YY($,Z,Q,W){let J=j0($);if(!J)throw Error(`provider "${$}" does not support OAuth login`);let X=n8({onPrompt:async(Y)=>Y.defaultValue??"",openUrl:Q,onOpenUrlError:({error:Y})=>{throw Y instanceof Error?Y:Error(String(Y))}});return J.login({settings:Z,callbacks:X,telemetry:W})}function jY($,Z,Q,W,J){return Q2({manager:$,providerId:Z,settings:Q,credentials:W,setLastUsed:J?.setLastUsed})}async function VY($,Z,Q,W){let J=n8({onPrompt:async(X)=>X.defaultValue??"",openUrl:Q,onOpenUrlError:({error:X})=>{throw X instanceof Error?X:Error(String(X))}});return X6($,Z,{callbacks:J,telemetry:W})}function HY($){let Z=$?.auth?.accessToken?.trim()||$?.apiKey?.trim();return Z&&Z.length>0?Z:void 0}var vf={};N(vf,{getProviderConfigFields:()=>BY});import*as h7 from"@cline/llms";var Gk=["apiKey","baseUrl","azureApiVersion","awsRegion","awsProfile","gcpProjectId","gcpRegion","sapClientId","sapClientSecret","sapTokenUrl","sapResourceGroup","sapDeploymentId"],Kk={"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 Fk($,Z){let Q={};for(let W of Gk){let J=$[W],X=Z[W];if(J||X)Q[W]={...J,...X}}return Q}function Ak($){let Z=Kk[$.providerId];if(!Z)return $;return{...$,description:Z.description??$.description,fields:Z.mode==="replace"?Z.fields:Fk($.fields,Z.fields)}}var fk=new Set(["ollama","lmstudio","litellm","openai-compatible"]);function Uk($,Z){if(!Z?.provider.baseUrl)return!1;if(Z.provider.source!=="system")return!0;return fk.has($)}function BY($){let Z=h7.normalizeProviderId($);if(Z2(Z))return{providerId:Z,authMethod:"oauth",fields:{}};let Q=h7.MODEL_COLLECTIONS_BY_PROVIDER_ID[Z];if(Q?.provider.capabilities?.includes("local-auth"))return{providerId:Z,authMethod:"local",fields:{}};let W=Q?.provider.baseUrl,J={apiKey:{}};if(Uk(Z,Q))J.baseUrl={defaultValue:W};return Ak({providerId:Z,authMethod:"api-key",fields:J})}var lf={};N(lf,{resolveLegacyClineAuth:()=>FY,migrateLegacyProviderSettings:()=>Q9});import{existsSync as Dk,readFileSync as Lk}from"node:fs";import{dirname as _k,join as GY}from"node:path";import*as N4 from"@cline/llms";import{resolveClineDataDir as zk}from"@cline/shared/storage";var k7="openai",df=N4.BUILT_IN_PROVIDER.OPENAI_COMPATIBLE,cf=128000;function FY($){let Z=$?.trim();if(!Z)return;try{let Q=JSON.parse(Z);if(!Q)return;let W=typeof Q.expiresAt==="number"&&Number.isFinite(Q.expiresAt)?Q.expiresAt<10000000000?Q.expiresAt*1000:Q.expiresAt:void 0;return{accessToken:Q.idToken,refreshToken:Q.refreshToken,expiresAt:W,accountId:Q.userInfo?.id}}catch{return}}function b($){let Z=$?.trim();return Z?Z:void 0}function Tk($){return $==="credentials"?"iam":$}function uf($){if(!Dk($))return;try{let Z=Lk($,"utf8"),Q=JSON.parse(Z);if(Q&&typeof Q==="object"&&!Array.isArray(Q))return Q}catch{}return}function Ok($){let Z=$.dataDir??zk(),Q=$.globalStatePath??GY(Z,"globalState.json"),W=$.secretsPath??GY(Z,"secrets.json"),J=uf(Q),X=uf(W);if(!J&&!X)return;return{globalState:J??{},secrets:X??{}}}function KY($){if($===k7)return df;return $}function qk($,Z,Q,W){let J=Q==="plan"?"planMode":"actMode",X=Z===W?b(Q==="plan"?$.planModeApiModelId:$.actModeApiModelId):void 0,j={openrouter:`${J}OpenRouterModelId`,cline:`${J}ClineModelId`,openai:`${J}OpenAiModelId`,ollama:`${J}OllamaModelId`,lmstudio:`${J}LmStudioModelId`,litellm:`${J}LiteLlmModelId`,requesty:`${J}RequestyModelId`,together:`${J}TogetherModelId`,fireworks:`${J}FireworksModelId`,sapaicore:`${J}SapAiCoreModelId`,groq:`${J}GroqModelId`,baseten:`${J}BasetenModelId`,huggingface:`${J}HuggingFaceModelId`,"huawei-cloud-maas":`${J}HuaweiCloudMaasModelId`,oca:`${J}OcaModelId`,aihubmix:`${J}AihubmixModelId`,hicap:`${J}HicapModelId`,nousResearch:`${J}NousResearchModelId`,"vercel-ai-gateway":`${J}VercelAiGatewayModelId`}[Z];return(j?b(typeof $[j]==="string"?$[j]:void 0):void 0)??X}function Mk($,Z,Q){let W=Q==="plan"?$.planModeThinkingBudgetTokens:$.actModeThinkingBudgetTokens,J=[...Z==="oca"?[$.actModeOcaReasoningEffort,$.planModeOcaReasoningEffort]:[],...Z==="gemini"?[$.geminiActModeThinkingLevel,$.geminiPlanModeThinkingLevel]:[],$.actModeReasoningEffort,$.planModeReasoningEffort].map(b).find(Boolean),X=J==="none"||J==="low"||J==="medium"||J==="high"||J==="xhigh"?J:void 0,Y=typeof W==="number"&&Number.isInteger(W)&&W>0?W:void 0;if(!X&&Y===void 0)return;return{...X?{effort:X}:{},...Y!==void 0?{budgetTokens:Y}:{}}}function Rk($){let Z=$["openai-codex-oauth-credentials"];if(!Z)return;try{let Q=JSON.parse(Z),W=b(Q.access_token),J=b(Q.refresh_token),X=b(Q.accountId);if(!W&&!J&&!X)return;return{...W?{apiKey:W}:{},auth:{...W?{accessToken:W}:{},...J?{refreshToken:J}:{},...X?{accountId:X}:{}}}}catch{return}}function Ek($){let Z=N4.getGeneratedModelsForProvider($),W=N4.getProviderCollectionSync($)?.provider.defaultModelId;if(W&&Z[W])return W;return Object.keys(Z)[0]??void 0}function Nk($,Z,Q,W){let J=KY($),X=b(W==="plan"?Z.planModeApiProvider:Z.actModeApiProvider),Y=qk(Z,$,W,X)??Ek(J),j=Mk(Z,J,W),V=typeof Z.requestTimeoutMs==="number"&&Number.isInteger(Z.requestTimeoutMs)&&Z.requestTimeoutMs>0?Z.requestTimeoutMs:void 0,H={anthropic:Q.apiKey,cline:Q.clineApiKey,openai:Q.openAiApiKey,"openai-native":Q.openAiNativeApiKey,openrouter:Q.openRouterApiKey,bedrock:Q.awsBedrockApiKey,gemini:Q.geminiApiKey,ollama:Q.ollamaApiKey,deepseek:Q.deepSeekApiKey,requesty:Q.requestyApiKey,together:Q.togetherApiKey,fireworks:Q.fireworksApiKey,qwen:Q.qwenApiKey,doubao:Q.doubaoApiKey,mistral:Q.mistralApiKey,litellm:Q.liteLlmApiKey,asksage:Q.asksageApiKey,xai:Q.xaiApiKey,moonshot:Q.moonshotApiKey,zai:Q.zaiApiKey,huggingface:Q.huggingFaceApiKey,nebius:Q.nebiusApiKey,sambanova:Q.sambanovaApiKey,cerebras:Q.cerebrasApiKey,groq:Q.groqApiKey,"huawei-cloud-maas":Q.huaweiCloudMaasApiKey,baseten:Q.basetenApiKey,"vercel-ai-gateway":Q.vercelAiGatewayApiKey,dify:Q.difyApiKey,minimax:Q.minimaxApiKey,hicap:Q.hicapApiKey,aihubmix:Q.aihubmixApiKey,nousResearch:Q.nousResearchApiKey,oca:Q.ocaApiKey},B={};if($==="openai-codex")Object.assign(B,Rk(Q));if($==="cline")try{let D=b(Q["cline:clineAccountId"]);if(D)B.auth={...B.auth??{},...FY(D)}}catch{}if($===k7&&Z.openAiHeaders)B.headers=Z.openAiHeaders;if($==="bedrock"){let D=Tk(Z.awsAuthentication),U=D==="profile"||Z.awsUseProfile===!0;B.aws={accessKey:b(Q.awsAccessKey),secretKey:b(Q.awsSecretKey),sessionToken:b(Q.awsSessionToken),region:b(Z.awsRegion),authentication:D,profile:U?b(Z.awsProfile):void 0,usePromptCache:Z.awsBedrockUsePromptCache,useCrossRegionInference:Z.awsUseCrossRegionInference,useGlobalInference:Z.awsUseGlobalInference,endpoint:b(Z.awsBedrockEndpoint),customModelBaseId:b(W==="plan"?Z.planModeAwsBedrockCustomModelBaseId:Z.actModeAwsBedrockCustomModelBaseId)}}if($==="vertex")B.gcp={projectId:b(Z.vertexProjectId),region:b(Z.vertexRegion)};if($===k7&&(Z.azureApiVersion||Z.azureIdentity!==void 0))B.azure={apiVersion:b(Z.azureApiVersion),useIdentity:Z.azureIdentity};if($==="sapaicore"){let D=Z.sapAiCoreUseOrchestrationMode??!0;B.sap={clientId:b(Q.sapAiCoreClientId),clientSecret:b(Q.sapAiCoreClientSecret),tokenUrl:b(Z.sapAiCoreTokenUrl),resourceGroup:b(Z.sapAiResourceGroup),deploymentId:D?void 0:b(W==="plan"?Z.planModeSapAiCoreDeploymentId:Z.actModeSapAiCoreDeploymentId),useOrchestrationMode:D}}if($==="oca"){B.oca={mode:Z.ocaMode};let D=b(Q.ocaRefreshToken);if(D)B.auth={...B.auth??{},refreshToken:D}}if($==="qwen")B.apiLine=Z.qwenApiLine;if($==="moonshot")B.apiLine=Z.moonshotApiLine;if($==="zai")B.apiLine=Z.zaiApiLine;if($==="minimax")B.apiLine=Z.minimaxApiLine;let G={anthropic:Z.anthropicBaseUrl,openai:Z.openAiBaseUrl,ollama:Z.ollamaBaseUrl,lmstudio:Z.lmStudioBaseUrl,litellm:Z.liteLlmBaseUrl,gemini:Z.geminiBaseUrl,requesty:Z.requestyBaseUrl,asksage:Z.asksageApiUrl,dify:Z.difyBaseUrl,oca:Z.ocaBaseUrl,aihubmix:Z.aihubmixBaseUrl,sapaicore:Z.sapAiCoreBaseUrl},K=b(H[$]),F=b(G[$]),A={provider:J,...K?{apiKey:K}:{},...Y?{model:Y}:{},...F?{baseUrl:F}:{},...j?{reasoning:j}:{},...V?{timeout:V}:{},...B},L=p8.safeParse(A);if(!L.success)return;return Object.keys(A).filter((D)=>D!=="provider").length>0?L.data:void 0}function wk($,Z){if($!==df)return;if(!Z.baseUrl||!Z.model)return;return{provider:{name:"OpenAI Compatible",baseUrl:Z.baseUrl,defaultModelId:Z.model},models:{[Z.model]:{id:Z.model,name:Z.model,contextWindow:cf,maxInputTokens:cf,capabilities:["streaming","tools","images"]}}}}function Ck($,Z){let Q=new Set;for(let J of[$.actModeApiProvider,$.planModeApiProvider]){let X=b(J);if(X)Q.add(X)}if(b(Z.apiKey))Q.add("anthropic");if(b(Z.openRouterApiKey))Q.add("openrouter");if(b(Z.openAiApiKey))Q.add(k7);if(b(Z.openAiNativeApiKey))Q.add("openai-native");if(b(Z["openai-codex-oauth-credentials"]))Q.add("openai-codex");if(b(Z.geminiApiKey))Q.add("gemini");if(b(Z.ollamaApiKey))Q.add("ollama");if(b(Z.awsAccessKey)||b(Z.awsBedrockApiKey)||$.awsAuthentication!==void 0||$.awsUseProfile===!0||b($.awsProfile))Q.add("bedrock");if(b($.vertexProjectId)||b($.vertexRegion))Q.add("vertex");if(b(Z.clineApiKey))Q.add("cline");let W=FY(b(Z["cline:clineAccountId"]));if(W?.accessToken||W?.refreshToken||W?.accountId)Q.add("cline");if(b(Z.ocaApiKey))Q.add("oca");if(b(Z.sapAiCoreClientId)||b(Z.sapAiCoreClientSecret)||b($.sapAiCoreTokenUrl)||b($.sapAiCoreBaseUrl)||b($.sapAiResourceGroup)||$.sapAiCoreUseOrchestrationMode!==void 0)Q.add("sapaicore");return Q}function Q9($){let Z=$.providerSettingsManager.read(),Q=Ok($);if(!Q)return{migrated:!1,providerCount:Object.keys(Z.providers).length,lastUsedProvider:Z.lastUsedProvider};let{globalState:W,secrets:J}=Q,X=W.mode==="plan"?"plan":"act",Y=Ck(W,J),j=S$();j.providers={...Z.providers},j.lastUsedProvider=Z.lastUsedProvider;let V=new Date().toISOString(),H=0,B=GY(_k($.providerSettingsManager.getFilePath()),"models.json"),G=oX(B),K=0;for(let L of Y){let f=KY(L);if(j.providers[f])continue;let D=Nk(L,W,J,X);if(!D)continue;j.providers[f]={settings:D,updatedAt:V,tokenSource:"migration"},H+=1;let U=wk(f,D);if(U&&!G.providers[f])G.providers[f]=U,K+=1}if(H===0&&K===0)return{migrated:!1,providerCount:Object.keys(Z.providers).length,lastUsedProvider:Z.lastUsedProvider};let F=b(X==="plan"?W.planModeApiProvider:W.actModeApiProvider),A=F?KY(F):void 0;if(j.lastUsedProvider=Z.lastUsedProvider??(A&&j.providers[A]?A:Object.keys(j.providers)[0]),$.providerSettingsManager.write(j),K>0)qf(B,G);return{migrated:H>0||K>0,providerCount:Object.keys(j.providers).length,lastUsedProvider:j.lastUsedProvider}}eQ();_0();u9();var pf={};N(pf,{SessionVersioningService:()=>c$,SessionVersioningError:()=>k0});class k0 extends Error{code;constructor($,Z){super(Z);this.code=$;this.name="SessionVersioningError"}}function Pk($){let Z=$.sessionId.trim();if(!Z)throw new k0("invalid_restore","sessionId is required");if(!$.restoreMessages&&!$.restoreWorkspace)throw new k0("invalid_restore","restore.messages or restore.workspace must be true");if($.restoreMessages&&$.requiresStart)throw new k0("invalid_restore","start is required when restore.messages is true");if(!Number.isInteger($.checkpointRunCount)||$.checkpointRunCount<1)throw new k0("invalid_restore","checkpointRunCount must be a positive integer");return Z}class c${async restoreCheckpoint($){let Z=$.restore?.messages!==!1,Q=$.restore?.workspace!==!1,W=Pk({sessionId:$.sessionId,restoreMessages:Z,restoreWorkspace:Q,requiresStart:$.start===void 0,checkpointRunCount:$.checkpointRunCount}),J=await $.getSession(W);if(!J)throw new k0("session_not_found",`Session ${W} not found`);let X=Z?await $.readMessages(W):void 0;if(Z&&X?.length===0)throw new k0("session_messages_not_found",`No messages found for session ${W}`);let Y=fX({session:J,messages:X,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd,restoreMessages:Z});if(Q)await($.applyWorkspaceCheckpoint??UX)(Y.cwd,Y.checkpoint);let j=f1({session:J,messages:X});if(!Z)return{checkpoint:Y.checkpoint,sourceSnapshot:j};let V=FX(J,$.checkpointRunCount),H=$.restore?.omitCheckpointMessageFromSession?AX(X??[],$.checkpointRunCount):Y.messages??[],B={sourceSession:J,sourceMessages:X,sourceSnapshot:j,plan:Y,restoredCheckpointMetadata:V,initialMessages:H,restoreMessages:Z,restoreWorkspace:Q,checkpointRunCount:$.checkpointRunCount};if(!$.start||!$.startSession)throw new k0("invalid_restore","start is required when restore.messages is true");let G=$.buildStartInput?await $.buildStartInput(B,$.start):$.start,K=await $.startSession(G),F=$.getStartedSessionId?.(K);if(F)await($.retainCheckpointRefs??PG)(Y.cwd,F,V?.history??[]);let A=F&&$.readRestoredSession?await $.readRestoredSession(F):void 0;return{sessionId:F,startResult:K,messages:Y.messages,checkpoint:Y.checkpoint,sourceSnapshot:j,...A?{restoredSnapshot:f1({session:A,messages:H})}:{}}}}var rf={};N(rf,{FileTeamPersistenceStore:()=>I7});import{appendFileSync as Sk,existsSync as AY,mkdirSync as bk,readFileSync as yk,renameSync as hk,unlinkSync as kk,writeFileSync as Ik}from"node:fs";import{join as fY}from"node:path";import{resolveTeamDataDir as xk}from"@cline/shared/storage";function gk($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}class I7{dirPath;statePath;taskHistoryPath;teammateSpecs=new Map;constructor($){let Z=gk($.teamName),Q=$.baseDir?.trim()||xk();this.dirPath=fY(Q,Z),this.statePath=fY(this.dirPath,"state.json"),this.taskHistoryPath=fY(this.dirPath,"task-history.jsonl")}loadState(){if(!AY(this.statePath))return;try{let $=yk(this.statePath,"utf8"),Z=JSON.parse($);if(Z.version!==1||!Z.teamState)return;for(let Q of Z.teammates??[])this.teammateSpecs.set(Q.agentId,Q);return KA(Z.teamState)}catch{return}}getTeammateSpecs(){return Array.from(this.teammateSpecs.values())}upsertTeammateSpec($){this.teammateSpecs.set($.agentId,$)}removeTeammateSpec($){this.teammateSpecs.delete($)}persist($){if(!this.hasPersistableState($)){this.clearPersistedState();return}this.ensureDir();let Z={version:1,updatedAt:new Date().toISOString(),teamState:$.exportState(),teammates:Array.from(this.teammateSpecs.values())},Q=`${this.statePath}.tmp`;Ik(Q,`${JSON.stringify(Z,null,2)}
732
- `,"utf8"),hk(Q,this.statePath)}appendTaskHistory($){let Z={};switch($.type){case"team_task_updated":Z=$.task;break;case"team_message":Z={agentId:$.message.fromAgentId,toAgentId:$.message.toAgentId,subject:$.message.subject,taskId:$.message.taskId};break;case"team_mission_log":Z={agentId:$.entry.agentId,kind:$.entry.kind,summary:$.entry.summary,taskId:$.entry.taskId};break;case"teammate_spawned":case"teammate_shutdown":case"task_start":Z={agentId:$.agentId,message:"message"in $?$.message:void 0};break;case"task_end":Z={agentId:$.agentId,finishReason:$.result?.finishReason,error:$.error?.message};break;case"agent_event":Z={agentId:$.agentId,eventType:$.event.type};break}this.ensureDir(),Sk(this.taskHistoryPath,`${JSON.stringify({ts:new Date().toISOString(),type:$.type,task:Z})}
733
- `,"utf8")}ensureDir(){if(!AY(this.dirPath))bk(this.dirPath,{recursive:!0})}hasPersistableState($){let Z=$.exportState();if(this.teammateSpecs.size>0)return!0;if(Z.members.some((Q)=>Q.role==="teammate"))return!0;return Z.tasks.length>0||Z.mailbox.length>0||Z.missionLog.length>0}clearPersistedState(){if(AY(this.statePath))kk(this.statePath)}}var nf={};N(nf,{ChatViewStateSchema:()=>UY,ChatSummarySchema:()=>c7,ChatSessionStatusSchema:()=>g7,ChatSessionConfigSchema:()=>x7,ChatMessageSchema:()=>v7,ChatMessageRoleSchema:()=>m7});import{z as h}from"zod";var x7=h.object({workspaceRoot:h.string().min(1),cwd:h.string().optional(),provider:h.string().min(1),model:h.string().min(1),mode:h.enum(["act","plan"]).default("act"),apiKey:h.string(),systemPrompt:h.string().optional(),rules:h.string().optional(),maxIterations:h.number().int().positive().optional(),enableTools:h.boolean(),enableSpawn:h.boolean().optional(),enableTeams:h.boolean().optional(),autoApproveTools:h.boolean().optional(),missionStepInterval:h.number().int().positive().optional(),missionTimeIntervalMs:h.number().int().positive().optional()}),g7=h.enum(["idle","starting","running","pending","stopping","completed","cancelled","failed","error"]),m7=h.enum(["user","assistant","tool","system","status","error"]),v7=h.object({id:h.string().min(1),sessionId:h.string().nullable(),role:m7,content:h.string(),createdAt:h.number().int().nonnegative(),meta:h.object({stream:h.enum(["stdout","stderr"]).optional(),toolName:h.string().optional(),iteration:h.number().int().nonnegative().optional(),agentId:h.string().optional(),conversationId:h.string().optional(),hookEventName:h.string().optional(),inputTokens:h.number().int().nonnegative().optional(),outputTokens:h.number().int().nonnegative().optional(),checkpoint:h.object({ref:h.string(),createdAt:h.number().int().nonnegative(),runCount:h.number().int().positive(),kind:h.enum(["stash","commit"]).optional()}).optional()}).optional()}),c7=h.object({toolCalls:h.number().int().nonnegative(),tokensIn:h.number().int().nonnegative(),tokensOut:h.number().int().nonnegative()}),UY=h.object({sessionId:h.string().nullable(),status:g7,config:x7,messages:h.array(v7),rawTranscript:h.string(),error:h.string().nullable(),summary:c7});var af={};N(af,{CORE_BUILD_VERSION:()=>DY});var DY=lj;import{Agent as SI,createAgentRuntime as bI}from"@cline/agents";var sf={};N(sf,{fetchClineRecommendedModels:()=>_Y,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>u7});import{getClineEnvironmentConfig as mk}from"@cline/shared";var vk=5000,u7={recommended:[{id:"anthropic/claude-opus-4.6",name:"Claude Opus 4.6",description:"Most intelligent model for agents and coding",tags:["BEST"]},{id:"anthropic/claude-sonnet-4.6",name:"Claude Sonnet 4.6",description:"Strong coding and agent performance",tags:["NEW"]},{id:"google/gemini-3.1-pro-preview",name:"Gemini 3.1 Pro Preview",description:"1M context window, strong coding performance",tags:["NEW"]},{id:"openai/gpt-5.3-codex",name:"GPT-5.3 Codex",description:"OpenAI's latest with strong coding abilities",tags:["NEW"]}],free:[{id:"kwaipilot/kat-coder-pro",name:"KwaiKAT Kat Coder Pro",description:"Advanced agentic coding model",tags:["FREE"]},{id:"arcee-ai/trinity-large-preview:free",name:"Arcee AI Trinity Large Preview",description:"Advanced large preview model",tags:["FREE"]}],clinePass:[]};function ck($){return{recommended:$.recommended.map((Z)=>({...Z,tags:[...Z.tags]})),free:$.free.map((Z)=>({...Z,tags:[...Z.tags]})),clinePass:$.clinePass.map((Z)=>({...Z,tags:[...Z.tags]}))}}function LY($){if(!$||typeof $!=="object")return null;let Z=$;if(typeof Z.id!=="string"||Z.id.length===0)return null;return{id:Z.id,name:typeof Z.name==="string"&&Z.name.length>0?Z.name:Z.id,description:typeof Z.description==="string"?Z.description:"",tags:Array.isArray(Z.tags)?Z.tags.filter((Q)=>typeof Q==="string"):[]}}function uk($){if(!$||typeof $!=="object")return null;let Z=$,Q=Array.isArray(Z.recommended)?Z.recommended:[],W=Array.isArray(Z.free)?Z.free:[],J=Array.isArray(Z.clinePass)?Z.clinePass:[],X=Q.map(LY).filter((V)=>V!==null),Y=W.map(LY).filter((V)=>V!==null),j=J.map(LY).filter((V)=>V!==null);if(X.length===0&&Y.length===0&&j.length===0)return null;return{recommended:X,free:Y,clinePass:j}}function dk($){let Z=$.baseUrl?.trim();if(Z)return Z;let Q=mk().apiBaseUrl;try{return($.providerSettingsManager??new O1).getProviderSettings("cline")?.baseUrl?.trim()||Q}catch{return Q}}async function lk($,Z,Q){let W=new AbortController,J=setTimeout(()=>W.abort(),Q);try{return await $(Z,{signal:W.signal})}finally{clearTimeout(J)}}async function _Y($={}){try{let Z=dk($),Q=$.fetchImpl??fetch,W=await lk(Q,`${Z}/api/v1/ai/cline/recommended-models`,$.timeoutMs??vk);if(!W.ok)throw Error(`HTTP ${W.status}`);let J=await W.json(),X=uk(J);if(X)return X}catch{}return ck(u7)}var of={};N(of,{loadLlmsConfigFromFile:()=>TY,defineLlmsConfig:()=>zY});import{readFile as pk}from"node:fs/promises";import rk from"node:path";function zY($){return $}async function TY($){let Z=rk.resolve($),Q=await pk(Z,"utf8"),W;try{W=JSON.parse(Q)}catch(J){let X=J instanceof Error?J.message:String(J);throw Error(`Failed to parse JSON config at "${Z}": ${X}`)}return ik(W,Z)}function ik($,Z){if(!$||typeof $!=="object")throw Error(`Invalid llms config in "${Z}": expected an object.`);let W=$.providers;if(!Array.isArray(W))throw Error(`Invalid llms config in "${Z}": "providers" must be an array.`);if(!W.length)throw Error(`Invalid llms config in "${Z}": "providers" cannot be empty.`);return $}var WU={};N(WU,{createLlmsSdk:()=>qY,DefaultLlmsSdk:()=>W9});import{BUILT_IN_PROVIDER_IDS as $U,createHandler as sk,createHandlerAsync as ok,getProviderCollection as tk,hasProvider as ZU,registerAsyncHandler as ek,registerHandler as $I,registerModel as ZI,registerProvider as QU}from"@cline/llms";function tf($){return $?{...$}:{}}function nk($,Z){if($)return $;if(!Z)return;let Q=globalThis.process;if(!Q?.env)return;return Q.env[Z]}function ak($,Z){if(!Z.length)throw Error(`Provider "${$}" must include at least one model.`)}function ef($){let Z=Object.keys($.collection.models);return{id:$.collection.provider.id,name:$.collection.provider.name,description:$.collection.provider.description,protocol:$.collection.provider.protocol,baseUrl:$.collection.provider.baseUrl,capabilities:$.collection.provider.capabilities,env:$.collection.provider.env,models:Z,defaultModel:$.collection.provider.defaultModelId,modelCount:Z.length}}class OY{providers=new Map;register($){ak($.id,$.models);let Z=$.defaultModel??$.models[0];if(!Z)throw Error(`Provider "${$.id}" must define a default model.`);if(!$.models.includes(Z))throw Error(`Default model "${Z}" is not included in configured models for "${$.id}".`);let Q=this.providers.get($.id);this.providers.set($.id,{id:$.id,models:new Set([...Q?.models??[],...$.models]),defaultModel:Z,defaults:{...Q?.defaults??{},...tf($.defaults)}})}registerSelectionConfig($){this.register({id:$.id,models:$.models,defaultModel:$.defaultModel,defaults:{apiKey:nk($.apiKey,$.apiKeyEnv),routingProviderId:$.builtinProviderId,baseUrl:$.baseUrl,headers:$.headers,timeoutMs:$.timeoutMs,capabilities:$.capabilities,...tf($.settings)}})}registerModel($,Z){let Q=this.providers.get($);if(!Q){this.providers.set($,{id:$,models:new Set([Z]),defaultModel:Z,defaults:{}});return}Q.models.add(Z)}createHandlerConfig($){let Z=this.require($.providerId),Q=$.modelId??Z.defaultModel;if(!Z.models.has(Q))throw Error(`Model "${Q}" is not configured for provider "${$.providerId}".`);return{providerId:$.providerId,modelId:Q,...Z.defaults,...$.overrides}}list(){return Array.from(this.providers.values()).map(($)=>({id:$.id,models:Array.from($.models),defaultModel:$.defaultModel}))}getModels($){return Array.from(this.require($).models)}hasProvider($){return this.providers.has($)}hasModel($,Z){return this.providers.get($)?.models.has(Z)??!1}require($){let Z=this.providers.get($);if(!Z)throw Error(`Provider "${$}" is not configured in this SDK instance.`);return Z}}class W9{configuredProviders=new OY;constructor($){this.applyConfig($)}createHandler($){return sk(this.configuredProviders.createHandlerConfig($))}async createHandlerAsync($){return ok(this.configuredProviders.createHandlerConfig($))}registerProvider($){if(QU($.collection),$.handlerFactory&&$.asyncHandlerFactory)throw Error(`Provider "${$.collection.provider.id}" cannot register both sync and async handlers.`);if($.handlerFactory)$I($.collection.provider.id,$.handlerFactory);if($.asyncHandlerFactory)ek($.collection.provider.id,$.asyncHandlerFactory);this.configuredProviders.register({id:$.collection.provider.id,models:$.exposeModels??Object.keys($.collection.models),defaultModel:$.defaultModel??$.collection.provider.defaultModelId,defaults:$.defaults})}registerBuiltinProvider($){let Z=$.exposeModels??Object.keys($.models),Q=$.defaultModel??Z[0];if(!Q)throw Error(`Provider "${$.id}" must define a default model.`);QU({provider:{id:$.id,name:$.name??$.id,description:$.description,protocol:$.protocol,baseUrl:$.baseUrl,defaultModelId:Q,client:$.client??"openai-compatible",capabilities:$.capabilities,env:$.env,source:"system"},models:$.models}),this.configuredProviders.register({id:$.id,models:Z,defaultModel:Q,defaults:{routingProviderId:$.builtinProviderId,...$.defaults??{}}})}registerModel($){ZI($.providerId,$.modelId,$.info),this.configuredProviders.registerModel($.providerId,$.modelId)}getProviders(){return this.configuredProviders.list()}getBuiltInProviderIds(){return[...$U]}async getBuiltInProviders(){return(await Promise.all($U.map((Z)=>tk(Z)))).filter((Z)=>Z!==void 0).map((Z)=>ef({collection:Z}))}getModels($){return this.configuredProviders.getModels($)}isProviderConfigured($){return this.configuredProviders.hasProvider($)}isModelConfigured($,Z){return this.configuredProviders.hasModel($,Z)}applyConfig($){for(let Z of $.providers)this.configuredProviders.registerSelectionConfig(Z);for(let Z of $.models??[])this.registerModel(Z);for(let Z of $.customProviders??[])this.registerProvider(Z);for(let Z of this.configuredProviders.list()){let Q=ZU(Z.id),W=this.configuredProviders.createHandlerConfig({providerId:Z.id,modelId:Z.defaultModel}).routingProviderId,J=typeof W==="string"&&ZU(W);if(!Q&&!J)throw Error(`Provider "${Z.id}" is not known. Register it through customProviders/registerProvider, registerBuiltinProvider, or use a built-in provider ID.`)}}}function qY($){return new W9($)}fW();async function QI(){return Promise.resolve().then(() => (eQ(),hA))}function xI(){return new Date().toISOString()}var gI="cline",mI="cline-pass";function vI($){if(GU($)!=="providers.json")return;let Z=EY($);if(GU(Z)!=="settings")return;return EY(Z)}class O1{filePath;dataDir;constructor($={}){if(this.filePath=$.filePath??II(),this.dataDir=$.dataDir??vI(this.filePath),this.dataDir||!$.filePath)Q9({providerSettingsManager:this,dataDir:this.dataDir});if(Pf(this),w7(this.read()),RY(this.filePath))try{BU(this.filePath,384)}catch{}}getFilePath(){return this.filePath}read(){if(!RY(this.filePath))return S$();try{let $=hI(this.filePath,"utf8"),Z=JSON.parse($),Q=r8.safeParse(Z);if(Q.success)return w7(Q.data),Q.data}catch{}return S$()}write($){let Z=r8.parse($),Q=EY(this.filePath);if(!RY(Q))yI(Q,{recursive:!0,mode:448});kI(this.filePath,`${JSON.stringify(Z,null,2)}
734
- `,"utf8");try{BU(this.filePath,384)}catch{}w7(Z)}saveProviderSettings($,Z={}){let Q=p8.parse($),W=this.read(),J=Q.provider,X=Z.setLastUsed!==!1,Y=W.providers[J],j=Z.tokenSource??Y?.tokenSource??"manual",V={...W,providers:{...W.providers,[J]:{settings:Q,updatedAt:xI(),tokenSource:j}},lastUsedProvider:X?J:W.lastUsedProvider};return this.write(V),V}resolveProviderSettings($,Z){let Q=$.providers[Z]?.settings,J=j0(Z)?.storageProviderId;if(!J||J===Z)return Q;let X=$.providers[J]?.settings;if(!X)return Q;return p8.parse({...X.auth?{auth:X.auth}:{},...X.apiKey?{apiKey:X.apiKey}:{},...X.baseUrl?{baseUrl:X.baseUrl}:{},...Q??{},provider:Z})}getProviderSettings($){let Z=this.read();return this.resolveProviderSettings(Z,$)}resolveLastUsedProviderId($,Z){let Q=$.lastUsedProvider;if(Q===mI&&Z.isClinePassEnabled===!1)return gI;return Q}getLastUsedProviderSettings($={}){let Z=this.read(),Q=this.resolveLastUsedProviderId(Z,$);if(!Q)return;return this.resolveProviderSettings(Z,Q)}getProviderConfig($,Z){let Q=this.getProviderSettings($);if(!Q)return;return l0(Q,Z)}getLastUsedProviderConfig($={}){let Z=this.getLastUsedProviderSettings($);if(!Z)return;return l0(Z,$)}async refreshCatalog(){try{await d8({})}catch{}}}_0();J8();function cI($,Z){let Q=$?.expiresAt,W=Z?.expiresAt;return $?.accessToken===Z?.accessToken&&$?.refreshToken===Z?.refreshToken&&$?.accountId===Z?.accountId&&Q===W}class r7 extends Error{providerId;constructor($){super(`OAuth credentials for provider "${$}" are no longer valid. Re-run authentication for this provider.`);this.name="OAuthReauthRequiredError",this.providerId=$}}class NY{providerSettingsManager;telemetry;refreshInFlight=new Map;constructor($){this.providerSettingsManager=$?.providerSettingsManager??new O1,this.telemetry=$?.telemetry}async resolveProviderApiKey($){let Z=j0($.providerId);if(!Z)return null;return this.resolveWithSingleFlight(Z.providerId,Z.storageProviderId,$.forceRefresh)}async resolveWithSingleFlight($,Z,Q=!1){let W=this.refreshInFlight.get(Z);if(W)return W;let J=this.resolveProviderApiKeyInternal($,Z,Q).catch((X)=>{throw X}).finally(()=>{this.refreshInFlight.delete(Z)});return this.refreshInFlight.set(Z,J),J}async resolveProviderApiKeyInternal($,Z,Q){let W=j0($);if(!W)return null;let J=this.providerSettingsManager.getProviderSettings(Z);if(!J)return null;let X=Y6($,J);if(!X)return null;let Y=await W.refresh({settings:J,credentials:X,forceRefresh:Q,telemetry:this.telemetry});if(!Y)throw new r7($);let j=Q2({manager:this.providerSettingsManager,providerId:$,settings:J,credentials:Y,setLastUsed:!1,save:!1}),V=!cI(J.auth,j.auth);if(V)this.providerSettingsManager.saveProviderSettings(j,{setLastUsed:!1,tokenSource:"oauth"});return{apiKey:W.getApiKey(j)??Y.access,accountId:Y.accountId,refreshed:V}}}import{normalizeUserInput as uI}from"@cline/shared";import{nanoid as dI}from"nanoid";class KU{list($){return $?s0($):[]}update($,Z){if(!$)return{sessionId:Z.sessionId,prompts:[],updated:!1};let Q=Z.promptId.trim(),W=$.pendingPrompts.findIndex((V)=>V.id===Q);if(W<0)return{sessionId:Z.sessionId,prompts:s0($),updated:!1};let J=$.pendingPrompts[W];if(!J)return{sessionId:Z.sessionId,prompts:s0($),updated:!1};let X=Z.prompt===void 0?J.prompt:uI(Z.prompt).trim();if(!X)throw Error("prompt cannot be empty");let Y=Z.delivery??J.delivery,j={...J,prompt:X,mode:Z.mode??J.mode,delivery:Y};return $.pendingPrompts.splice(W,1),lI($,j,W,J.delivery),{sessionId:Z.sessionId,prompts:s0($),prompt:i7(j),updated:!0}}delete($,Z){if(!$)return{sessionId:Z.sessionId,prompts:[],removed:!1};let Q=Z.promptId.trim(),W=$.pendingPrompts.findIndex((X)=>X.id===Q);if(W<0)return{sessionId:Z.sessionId,prompts:s0($),removed:!1};let[J]=$.pendingPrompts.splice(W,1);return{sessionId:Z.sessionId,prompts:s0($),prompt:J?i7(J):void 0,removed:!0}}enqueue($,Z){let{prompt:Q,mode:W,delivery:J,userImages:X,userFiles:Y}=Z,j=$.pendingPrompts.findIndex((V)=>V.prompt===Q);if(j>=0){let[V]=$.pendingPrompts.splice(j,1),H={...V,prompt:Q,mode:W??V.mode,userImages:X??V.userImages,userFiles:Y??V.userFiles};if(J==="steer"||V.delivery==="steer")$.pendingPrompts.unshift({...H,delivery:"steer"});else $.pendingPrompts.push(H)}else{let V={id:`pending_${Date.now()}_${dI(5)}`,prompt:Q,mode:W,delivery:J,userImages:X,userFiles:Y};if(J==="steer")$.pendingPrompts.unshift(V);else $.pendingPrompts.push(V)}return s0($)}consumeSteer($){let Z=$.pendingPrompts.findIndex((W)=>W.delivery==="steer");if(Z<0)return{prompts:s0($)};let[Q]=$.pendingPrompts.splice(Z,1);return{entry:Q,prompts:s0($)}}shiftNext($){return{entry:$.pendingPrompts.shift(),prompts:s0($)}}requeueFront($,Z){return $.pendingPrompts.unshift(Z),s0($)}clear($){return $.pendingPrompts.length=0,[]}}class wY{deps;service=new KU;constructor($){this.deps=$}list($){return this.service.list(this.deps.getSession($))}update($){let Z=this.deps.getSession($.sessionId);if(!Z||Z.aborting)return{sessionId:$.sessionId,prompts:[],updated:!1};let Q=this.service.update(Z,$);return this.emitPrompts(Z),this.scheduleDrain($.sessionId,Z),Q}delete($){let Z=this.deps.getSession($.sessionId);if(!Z||Z.aborting)return{sessionId:$.sessionId,prompts:[],removed:!1};let Q=this.service.delete(Z,$);return this.emitPrompts(Z),this.scheduleDrain($.sessionId,Z),Q}enqueue($,Z){let Q=this.deps.getSession($);if(!Q||Q.aborting)return;this.service.enqueue(Q,Z),this.emitPrompts(Q),this.scheduleDrain($,Q)}consumeSteer($){let Z=this.deps.getSession($);if(!Z)return;let{entry:Q}=this.service.consumeSteer(Z);if(!Q)return;return this.emitPrompts(Z),this.emitSubmitted(Z,Q),Q}clearAborted($){if($.pendingPrompts.length===0)return;this.service.clear($),this.emitPrompts($)}emitPrompts($){this.deps.emit({type:"pending_prompts",payload:{sessionId:$.sessionId,prompts:s0($)}})}scheduleDrain($,Z){if(Z.pendingPrompts.length===0||Z.aborting||Z.drainingPendingPrompts||!Z.agent.canStartRun())return;queueMicrotask(()=>{this.drain($)})}async drain($){let Z=this.deps.getSession($);if(!Z)return;if(Z.aborting||Z.drainingPendingPrompts)return;if(!Z.agent.canStartRun())return;let{entry:Q}=this.service.shiftNext(Z);if(!Q)return;this.emitPrompts(Z),this.emitSubmitted(Z,Q),Z.drainingPendingPrompts=!0;let W=!0;try{await this.deps.send({sessionId:$,prompt:Q.prompt,...Q.mode?{mode:Q.mode}:{},userImages:Q.userImages,userFiles:Q.userFiles})}catch{W=!1,this.service.requeueFront(Z,Q),this.emitPrompts(Z)}finally{if(Z.drainingPendingPrompts=!1,W&&Z.pendingPrompts.length>0&&Z.status!=="failed"&&Z.status!=="cancelled")queueMicrotask(()=>{this.drain($)})}}emitSubmitted($,Z){let Q=i7(Z);this.deps.emit({type:"pending_prompt_submitted",payload:{sessionId:$.sessionId,id:Q.id,prompt:Q.prompt,delivery:Q.delivery,attachmentCount:Q.attachmentCount,userImages:Q.userImages,userFiles:Q.userFiles}})}}function i7($){return{id:$.id,prompt:$.prompt,delivery:$.delivery,attachmentCount:($.userImages?.length??0)+($.userFiles?.length??0),userImages:$.userImages,userFiles:$.userFiles}}function s0($){return $.pendingPrompts.map(i7)}function lI($,Z,Q,W){if(Z.delivery==="steer")$.pendingPrompts.unshift(Z);else if(W==="steer")$.pendingPrompts.push(Z);else $.pendingPrompts.splice(Q,0,Z)}_0();class PY{deps;constructor($){this.deps=$}dispatchAgentEvent($,Z,Q){let W=this.deps.getSession($),J={sessionId:$,config:Z,liveSession:W,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit},X=x3(Q),Y=!!W&&(!X.agentId||X.agentId===CY(W.agent));g3(J,Q,Y?{isPrimaryAgentEvent:!0,agentId:CY(W.agent),conversationId:W.agent.getConversationId(),...W?.runtime.teamRuntime?{teamRole:"lead"}:{}}:{isPrimaryAgentEvent:!1})}async handleTeamEvent($,Z){let Q=this.deps.getSession($);if(Q){if(eJ(Q,Z),Z.type==="agent_event"){let W={sessionId:$,config:Q.config,liveSession:Q,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit};g3(W,Z.event,{agentId:Z.agentId,teamRole:"teammate",teamAgentId:Z.agentId,isPrimaryAgentEvent:!1})}if(Z.type==="teammate_spawned"){let W=r1({agentId:Z.teammate.runtimeAgentId??Z.agentId,conversationId:Z.teammate.conversationId,parentAgentId:Z.teammate.parentAgentId,createdByAgentId:CY(Q.agent),teamId:Q.runtime.teamRuntime?.getTeamId(),teamName:Q.runtime.teamRuntime?.getTeamName(),teamRole:"teammate",teamAgentId:Z.agentId});if(W)H$(Q.config.telemetry,{ulid:$,modelId:Z.teammate.modelId??Q.config.modelId,provider:Q.config.providerId,...W})}}if(await $X($,Z,this.deps.invokeBackendOptional),Q)ZX(Q,$,Z,this.deps.emit)}async handlePluginEvent($,Z,Q){if(Z.name==="plugin_log"){this.handlePluginLog($,Z.payload);return}if(Z.name==="automation_event"){let V=this.deps.getSession($)?.config.extensionContext?.automation??Q;if(!V)return;let H=Z.payload&&typeof Z.payload==="object"?Z.payload:void 0;if(!H)return;await V.ingestEvent(H);return}if(Z.name!=="steer_message"&&Z.name!=="queue_message"&&Z.name!=="pending_prompt")return;let W=Z.payload&&typeof Z.payload==="object"?Z.payload:void 0,J=typeof W?.sessionId==="string"&&W.sessionId.trim().length>0?W.sessionId.trim():$,X=typeof W?.prompt==="string"?W.prompt.trim():"";if(!X)return;let Y=Z.name==="steer_message"?"steer":Z.name==="queue_message"?"queue":W?.delivery==="steer"?"steer":"queue";this.deps.enqueuePendingPrompt(J,{prompt:X,delivery:Y})}handlePluginLog($,Z,Q){let W=this.deps.getSession($),J=Q??W?.config.extensionContext?.logger??W?.config.logger;if(!J||!Z||typeof Z!=="object")return;let X=Z,Y=typeof X.message==="string"?X.message:"";if(!Y)return;let j=X.metadata&&typeof X.metadata==="object"?{...X.metadata}:{};if(j.sessionId??=$,typeof X.pluginName==="string"&&X.pluginName)j.pluginName=X.pluginName;if(X.level==="debug"){J.debug(Y,j);return}if(X.level==="error"){if(J.error)J.error(Y,j);else J.log(Y,{...j,severity:"error"});return}J.log(Y,j)}}function CY($){return $.getAgentId()}function SY($){return{sessionId:$.sessionId,source:$.source,pid:process.pid,startedAt:$.startedAt,endedAt:$.endedAt??null,exitCode:$.exitCode??null,status:$.status,interactive:$.interactive,provider:$.config.providerId,model:$.config.modelId,cwd:$.config.cwd,workspaceRoot:R$($.config),teamName:$.config.teamName?.trim()||void 0,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,parentSessionId:typeof $.sessionMetadata?.parentSessionId==="string"?$.sessionMetadata.parentSessionId:void 0,parentAgentId:typeof $.sessionMetadata?.parentAgentId==="string"?$.sessionMetadata.parentAgentId:void 0,agentId:typeof $.sessionMetadata?.agentId==="string"?$.sessionMetadata.agentId:void 0,conversationId:typeof $.sessionMetadata?.conversationId==="string"?$.sessionMetadata.conversationId:void 0,isSubagent:typeof $.sessionMetadata?.isSubagent==="boolean"?$.sessionMetadata.isSubagent:!1,prompt:$.pendingPrompt,metadata:$.sessionMetadata,messagesPath:$.artifacts?.messagesPath,updatedAt:$.updatedAt??$.endedAt??$.startedAt}}function bY($,Z){let Q=$[Z];return typeof Q==="function"?Q:null}async function FU($,Z,...Q){let W=bY($,Z);if(!W)throw Error(`session service method not available: ${Z}`);return Promise.resolve(W.apply($,Q))}async function AU($,Z,...Q){let W=bY($,Z);if(!W)return;await Promise.resolve(W.apply($,Q))}async function fU($,Z,...Q){let W=bY($,Z);if(!W)return;return await Promise.resolve(W.apply($,Q))}$1();_0();function yY($,Z,Q){return{onSubAgentEvent:(W)=>$.onAgentEvent(Q,Z,W),onSubAgentStart:(W)=>{let J=$.getSession(Q)?.runtime.teamRuntime;$.subAgentStarts.set(W.subAgentId,{startedAt:Date.now(),rootSessionId:Q});let X=r1({agentId:W.subAgentId,conversationId:W.conversationId,parentAgentId:W.parentAgentId,teamId:J?.getTeamId(),teamName:J?.getTeamName(),createdByAgentId:W.parentAgentId});if(X)H$(Z.telemetry,{ulid:Q,modelId:Z.modelId,provider:Z.providerId,...X});v4(Z.telemetry,{event:"started",ulid:Q,durationMs:0,parentId:W.parentAgentId,agentId:W.subAgentId,...X}),$.invokeBackendOptional("handleSubAgentStart",Q,W)},onSubAgentEnd:(W)=>{let J=$.getSession(Q)?.runtime.teamRuntime,X=$.subAgentStarts.get(W.subAgentId),Y=X?Date.now()-X.startedAt:0,j=W.result?.text?W.result.text.split(`
735
- `).length:0;v4(Z.telemetry,{event:"ended",ulid:Q,durationMs:Y,outputLines:j,errorMessage:W.error?String(W.error):void 0,agentId:W.subAgentId,parentId:W.parentAgentId,...r1({agentId:W.subAgentId,conversationId:W.conversationId,parentAgentId:W.parentAgentId,teamId:J?.getTeamId(),teamName:J?.getTeamName(),createdByAgentId:W.parentAgentId})}),$.subAgentStarts.delete(W.subAgentId),$.invokeBackendOptional("handleSubAgentEnd",Q,W)}}}function hY($,Z,Q,W){let J=yY($,Z,Q);return q$({configProvider:{getRuntimeConfig:()=>$.getSession(Q)?.runtime.delegatedAgentConfigProvider?.getRuntimeConfig()??{providerId:Z.providerId,modelId:Z.modelId,cwd:Z.cwd,apiKey:Z.apiKey,baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking,maxIterations:Z.maxIterations,hooks:Z.hooks,extensions:Z.extensions,logger:Z.logger,telemetry:Z.telemetry},getConnectionConfig:()=>$.getSession(Q)?.runtime.delegatedAgentConfigProvider?.getConnectionConfig()??{providerId:Z.providerId,modelId:Z.modelId,apiKey:Z.apiKey,baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking},updateConnectionDefaults:()=>{}},createSubAgentTools:()=>{let Y=Z.enableTools?f2({cwd:Z.cwd,...u0[l1({mode:Z.mode})],executors:W}):[];if(Z.enableSpawnAgent)Y.push(hY($,Z,Q,W));return y1(Y)},...J})}import{readFile as pI,stat as rI}from"node:fs/promises";var iI=20480000;async function UU($){let Z=await rI($);if(!Z.isFile())throw Error("Path is not a file");if(Z.size>iI)throw Error("File is too large to read into context.");let Q=await pI($,"utf8");if(Q.includes("\x00"))throw Error("Cannot read binary file into context.");return Q}var DU=5000;function V9($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function Zx($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$,Q=V9(Z.inputTokens),W=V9(Z.outputTokens),J=V9(Z.cacheReadTokens),X=V9(Z.cacheWriteTokens),Y=V9(Z.totalCost);if(Q===void 0||W===void 0||J===void 0||X===void 0||Y===void 0)return;return{inputTokens:Q,outputTokens:W,cacheReadTokens:J,cacheWriteTokens:X,totalCost:Y}}function Qx($,Z){return{inputTokens:Math.max($.inputTokens,Z.inputTokens),outputTokens:Math.max($.outputTokens,Z.outputTokens),cacheReadTokens:Math.max($.cacheReadTokens,Z.cacheReadTokens),cacheWriteTokens:Math.max($.cacheWriteTokens,Z.cacheWriteTokens),totalCost:Math.max($.totalCost,Z.totalCost)}}class z1{runtimeAddress=void 0;pendingPrompts;sessionService;runtimeBuilder;createAgentInstance;toolExecutors;defaultCapabilities;defaultToolPolicies;providerSettingsManager;oauthTokenManager;defaultTelemetry;defaultFetch;events=new S5;sessions=new Map;usageBySession=new Map;aggregateUsageBySession=new Map;subAgentStarts=new Map;pendingPromptsController;eventBridge;sessionVersioning=new c$;constructor($){let Z=aI();if(Z)$x(Z);let Q=P0($.distinctId);this.sessionService=$.sessionService,this.runtimeBuilder=$.runtimeBuilder??new T4,this.createAgentInstance=$.createAgent??((W)=>new z$(W)),this.defaultCapabilities=q0($.capabilities),this.toolExecutors=this.defaultCapabilities?.toolExecutors,this.defaultToolPolicies=$.toolPolicies,this.providerSettingsManager=$.providerSettingsManager??new O1,this.oauthTokenManager=$.oauthTokenManager??new NY({providerSettingsManager:this.providerSettingsManager,telemetry:$.telemetry}),this.defaultTelemetry=$.telemetry,this.defaultTelemetry?.setDistinctId(Q),this.defaultFetch=$.fetch,this.pendingPromptsController=new wY({getSession:(W)=>this.sessions.get(W),emit:(W)=>this.emit(W),send:(W)=>this.runTurn(W)}),this.pendingPrompts={list:async(W)=>this.pendingPromptsController.list(W.sessionId),update:async(W)=>this.pendingPromptsController.update(W),delete:async(W)=>this.pendingPromptsController.delete(W)},this.eventBridge=new PY({getSession:(W)=>this.sessions.get(W),usageBySession:this.usageBySession,aggregateUsageBySession:this.aggregateUsageBySession,emit:(W)=>this.emit(W),persistMessages:(W,J,X)=>{this.invoke("persistSessionMessages",W,J,X)},enqueuePendingPrompt:(W,J)=>this.pendingPromptsController.enqueue(W,J),invokeBackendOptional:(W,...J)=>this.invokeOptional(W,...J)})}async applyInitialOAuthCredentials($){if($.config.apiKey?.trim())return $;let Z=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId});if(!Z?.apiKey)return $;return{...$,config:{...$.config,apiKey:Z.apiKey}}}async startSession($){let Z=$.source??z0.CLI,Q=J0(),W=$.config.sessionId?.trim()??"",J=W||oI(),X=await this.applyInitialOAuthCredentials($),Y=X.initialMessages??[],j=Y.length>0?b8(Y):D0(),V=await this.invokeOptionalValue("ensureSessionsDir")??"";if(!V)throw Error("session service method not available: ensureSessionsDir");let H=kY(V,J),B=kY(H,`${J}.messages.json`),G=kY(H,`${J}.json`),K=R$($.config),F=b0.parse({version:1,session_id:J,source:Z,pid:process.pid,started_at:Q,status:"running",interactive:$.interactive===!0,provider:X.config.providerId,model:X.config.modelId,cwd:X.config.cwd,workspace_root:K,team_name:X.config.teamName,enable_tools:X.config.enableTools,enable_spawn:X.config.enableSpawnAgent,enable_teams:X.config.enableAgentTeams,prompt:X.prompt?.trim()||void 0,messages_path:B}),A;if(W.length>0&&Y.length>0&&!X.prompt?.trim()){let P=await this.invokeOptionalValue("readSessionManifest",J);if(P)F=P,A={manifestPath:G,messagesPath:P.messages_path||B,manifest:P}}let f=await this.seedAggregateUsageFromArtifacts({initialUsage:j,sessionDir:H,rootMessagesPath:A?.messagesPath??B,manifest:F});this.usageBySession.set(J,j),this.aggregateUsageBySession.set(J,f);let D=q0(this.defaultCapabilities,$.capabilities),U=D?.toolExecutors??this.toolExecutors,T=$.localRuntime,O=T?.extensionContext?.logger??T?.logger,z=T?.extensionContext?.automation,_,E={getSession:(P)=>this.sessions.get(P),subAgentStarts:this.subAgentStarts,onAgentEvent:(P,B0,G0)=>this.eventBridge.dispatchAgentEvent(P,B0,G0),invokeBackendOptional:(P,...B0)=>this.invokeOptional(P,...B0)};_=await ZK({input:X,localRuntime:$.localRuntime,sessionId:J,providerSettingsManager:this.providerSettingsManager,defaultTelemetry:this.defaultTelemetry,defaultCapabilities:D,defaultToolPolicies:this.defaultToolPolicies,defaultFetch:this.defaultFetch,onPluginEvent:(P)=>{if(P.name==="plugin_log"){this.eventBridge.handlePluginLog(J,P.payload,O);return}this.eventBridge.handlePluginEvent(J,P,z)},onTeamEvent:(P)=>{this.eventBridge.handleTeamEvent(J,P),_.config.onTeamEvent?.(P)},createSpawnTool:()=>hY(E,_.config,J,U),createSubAgentLifecycleCallbacks:(P)=>yY(E,P,J),readSessionMetadata:async()=>(await this.getSession(J))?.metadata,writeSessionMetadata:async(P)=>{await this.persistSessionMetadata(J,()=>P)}});let C=await this.runtimeBuilder.build(_.runtimeBuilderInput),y=_.config,l=_.providerConfig;if(C.teamRuntime&&!y.teamName?.trim())y.teamName=C.teamRuntime.getTeamName();let o=[...C.tools,...y.extraTools??[]],t=C.extensions??_.extensions,Q0={sessionId:J,providerId:l.providerId,modelId:l.modelId,apiKey:l.apiKey,baseUrl:l.baseUrl,headers:l.headers,knownModels:l.knownModels,providerConfig:l,thinking:y.thinking,reasoningEffort:y.reasoningEffort??l.reasoningEffort,maxTokensPerTurn:y.maxTokensPerTurn,systemPrompt:y.systemPrompt,maxIterations:y.maxIterations,execution:y.execution,prepareTurn:F6(y),tools:o,hooks:_.hooks,extensions:t,hookErrorMode:y.hookErrorMode,initialMessages:_.effectiveInput.initialMessages,userFileContentLoader:UU,toolPolicies:_.toolPolicies,requestToolApproval:_.requestToolApproval?async(P)=>{let B0=_.requestToolApproval,G0=this.sessions.get(J);if(G0)await this.markTurnPending(G0);try{if(!B0)return{approved:!1,reason:"Tool approval callback is not configured."};return await B0(P)}finally{let C0=this.sessions.get(J);if(C0?.status==="pending")await this.markTurnRunning(C0)}}:void 0,telemetry:y.telemetry,onConsecutiveMistakeLimitReached:y.onConsecutiveMistakeLimitReached,completionPolicy:C.completionPolicy,consumePendingUserMessage:()=>{let P=this.pendingPromptsController.consumeSteer(J);return P?v5(P.prompt,P.mode??y.mode):void 0},logger:C.logger??y.logger,extensionContext:y.extensionContext,onEvent:(P)=>this.eventBridge.dispatchAgentEvent(J,y,P)};Q0.hooks={...Q0.hooks,onEvent:async(P)=>{if(await _.hooks?.onEvent?.(P),P.type!=="assistant-message")return;let B0=this.sessions.get(J);if(!B0)return;let G0=B0.agent.getMessages();try{await this.invoke("persistSessionMessages",J,G0,y.systemPrompt)}catch(C0){y.logger?.error?.("Failed to persist session messages after assistant response",{sessionId:J,error:C0}),l2(y.telemetry,{component:"core",operation:"session.persist_messages_after_assistant_response",error:C0,severity:"warn",handled:!0,context:{sessionId:J,providerId:y.providerId,modelId:y.modelId}})}}};let e0=this.createAgentInstance(Q0);if(Q0.onEvent)e0.subscribeEvents(Q0.onEvent);C.registerLeadAgent?.(e0);let l$=r1({agentId:e0.getAgentId(),conversationId:e0.getConversationId(),teamId:C.teamRuntime?.getTeamId(),teamName:C.teamRuntime?.getTeamName(),teamRole:C.teamRuntime?"lead":void 0});if(WK(y,J,W.length>0,K,l$),l$)H$(y.telemetry,{ulid:J,modelId:y.modelId,provider:y.providerId,...l$});if(C.teamRuntime)b9(y.telemetry,{ulid:J,teamId:C.teamRuntime.getTeamId(),teamName:C.teamRuntime.getTeamName(),leadAgentId:e0.getAgentId(),restoredFromPersistence:C.teamRestoredFromPersistence===!0});let r={sessionId:J,config:y,sessionMetadata:X.sessionMetadata,...A?{artifacts:A}:{},source:Z,startedAt:A?.manifest.started_at??Q,updatedAt:A?.manifest.ended_at??A?.manifest.started_at??Q,pendingPrompt:F.prompt,runtime:C,agent:e0,started:!1,status:A?.manifest.status??"running",aborting:!1,interactive:$.interactive===!0,persistedMessages:Y,activeTeamRunIds:new Set,pendingTeamRunUpdates:[],teamRunWaiters:[],pendingPrompts:[],drainingPendingPrompts:!1,pluginSandboxShutdown:_.pluginSandboxShutdown,submitAndExitObserved:!1,lastInteractiveTurnFinishReason:void 0};if(this.sessions.set(J,r),this.emitStatus(J,"running"),Y.length>0&&!A){if(await this.ensureSessionPersisted(r),await this.invoke("persistSessionMessages",r.sessionId,Y,r.config.systemPrompt),!X.prompt?.trim())await this.updateStatus(r,"completed",0)}let q1;try{if(X.prompt?.trim())if(q1=await this.executeTurn(r,{prompt:X.prompt,userImages:X.userImages,userFiles:X.userFiles}),!r.interactive)await this.finalizeSingleRun(r,q1.finishReason);else await this.completeInteractiveTurn(r,q1.finishReason)}catch(P){if(r.interactive&&r.aborting)q1=await this.completeAbortedInteractiveTurn(r);else{l2(r.config.telemetry,{component:"core",operation:"session.start",error:P,severity:"error",handled:!1,context:{sessionId:r.sessionId,providerId:r.config.providerId,modelId:r.config.modelId}});try{await this.failSession(r)}catch(B0){r.config.logger?.error?.("Session failure cleanup threw",{sessionId:r.sessionId,error:B0})}throw P}}return{sessionId:J,manifest:F,manifestPath:G,messagesPath:B,result:q1}}async restoreSession($){return this.sessionVersioning.restoreCheckpoint({...$,getSession:(Z)=>this.getSession(Z),readMessages:(Z)=>this.readSessionMessages(Z),buildStartInput:(Z,Q)=>{let W=Z.restoredCheckpointMetadata?{...Q.sessionMetadata??{},checkpoint:Z.restoredCheckpointMetadata}:Q.sessionMetadata;return{...Q,...W?{sessionMetadata:W}:{},initialMessages:Z.initialMessages}},startSession:(Z)=>this.startSession(Z),getStartedSessionId:(Z)=>Z.sessionId,readRestoredSession:(Z)=>this.getSession(Z)})}async runTurn($){let Z=this.getSessionOrThrow($.sessionId),Q=Z.agent.canStartRun(),W=$.delivery??(Z.interactive&&!Q?"queue":void 0);if(Z.config.telemetry?.capture({event:"session.input_sent",properties:{sessionId:$.sessionId,promptLength:$.prompt.length,userImageCount:$.userImages?.length??0,userFileCount:$.userFiles?.length??0,delivery:W??"immediate"}}),W==="queue"||W==="steer"){this.pendingPromptsController.enqueue($.sessionId,{prompt:$.prompt,mode:$.mode,delivery:W,userImages:$.userImages,userFiles:$.userFiles});return}try{let J=await this.executeTurn(Z,{prompt:$.prompt,mode:$.mode,userImages:$.userImages,userFiles:$.userFiles});if(!Z.interactive)await this.finalizeSingleRun(Z,J.finishReason);else await this.completeInteractiveTurn(Z,J.finishReason);if(J.finishReason==="error"||J.finishReason==="aborted")return J;return queueMicrotask(()=>{this.pendingPromptsController.drain($.sessionId)}),J}catch(J){if(Z.interactive&&Z.aborting)return await this.completeAbortedInteractiveTurn(Z);throw l2(Z.config.telemetry,{component:"core",operation:"session.submit",error:J,severity:"error",handled:!1,context:{sessionId:Z.sessionId,providerId:Z.config.providerId,modelId:Z.config.modelId}}),await this.failSession(Z),J}}async getAccumulatedUsage($){let Z=dJ(this.usageBySession.get($)),Q=dJ(this.aggregateUsageBySession.get($));return Z||Q?{usage:Z,aggregateUsage:Q}:void 0}async abort($,Z){let Q=this.sessions.get($);if(!Q)return;Q.config.telemetry?.capture({event:"session.aborted",properties:{sessionId:$}}),Q.aborting=!0,this.pendingPromptsController.clearAborted(Q),Q.agent.abort(Z)}async stopSession($){let Z=this.sessions.get($);if(!Z)return;if(Z.config.telemetry?.capture({event:"session.stopped",properties:{sessionId:$}}),Z.interactive&&!H0(Z.status)){await this.releaseSessionRuntime(Z,"session_stop");return}if(Z.interactive&&Z.agent.canStartRun()){await this.shutdownSession(Z,{status:this.resolveInteractiveStopStatus(Z),exitCode:this.resolveInteractiveStopExitCode(Z),shutdownReason:"session_stop",endReason:"stopped"});return}Z.aborting=!0,Z.agent.abort(Error("session_stop")),await this.shutdownSession(Z,{status:"cancelled",exitCode:0,shutdownReason:"session_stop",endReason:"stopped"})}async dispose($="session_manager_dispose"){let Z=[...this.sessions.values()];if(Z.length===0)return;await Promise.allSettled(Z.map((Q)=>Q.interactive&&!H0(Q.status)?this.releaseSessionRuntime(Q,$):Q.interactive&&Q.agent.canStartRun()?this.shutdownSession(Q,{status:this.resolveInteractiveStopStatus(Q),exitCode:this.resolveInteractiveStopExitCode(Q),shutdownReason:$,endReason:"disposed"}):this.shutdownSession(Q,{status:"cancelled",exitCode:0,shutdownReason:$,endReason:"disposed"}))),this.usageBySession.clear(),this.aggregateUsageBySession.clear()}async getSession($){let Z=this.sessions.get($);if(Z)return SY(Z);let Q=$.trim();if(!Q)return;let W=await this.getRow(Q);if(W)return v6(W);let J=await this.readManifest(Q);return J?mQ(J):void 0}async listSessions($=200){let Q=(await this.listRows($)).map(v6),W=new Set(Q.map((J)=>J.sessionId));for(let J of this.sessions.values()){if(W.has(J.sessionId))continue;Q.unshift(SY(J))}return Q.slice(0,$)}async deleteSession($){if(this.sessions.has($))await this.stopSession($);let Z=await this.invoke("deleteSession",$);if(Z.deleted)this.usageBySession.delete($),this.aggregateUsageBySession.delete($);return Z.deleted}async updateSession($,Z){return{updated:(await this.invokeOptionalValue("updateSession",{sessionId:$,prompt:Z.prompt,metadata:Z.metadata,title:Z.title}))?.updated===!0}}async readSessionMessages($){let Z=$.trim();if(!Z)return[];let Q=await this.getRow(Z);if(Q?.messagesPath)return I$(Q.messagesPath);let W=await this.readManifest(Z);return I$(W?.messages_path)}async dispatchHookEvent($){await RF($,{queueSpawnRequest:(Z)=>this.invokeOptional("queueSpawnRequest",Z),upsertSubagentSessionFromHook:(Z)=>this.invokeOptionalValue("upsertSubagentSessionFromHook",Z),appendSubagentHookAudit:(Z,Q)=>this.invokeOptional("appendSubagentHookAudit",Z,Q),applySubagentStatus:(Z,Q)=>this.invokeOptional("applySubagentStatus",Z,Q)})}subscribe($,Z){return this.events.subscribe($,Z)}async updateSessionModel($,Z){let Q=this.getSessionOrThrow($);Q.config.modelId=Z,Q.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({modelId:Z}),Q.agent.updateConnection({modelId:Z})}handlePluginEvent($,Z,Q){return this.eventBridge.handlePluginEvent($,Z,Q)}async executeTurn($,Z){let Q=await this.prepareTurnInput($,Z),W=Q.prompt.trim();if(!W)throw Error("prompt cannot be empty");if(!$.artifacts&&!$.pendingPrompt)$.pendingPrompt=W;await this.ensureSessionPersisted($),await this.syncOAuthCredentials($),await this.markTurnRunning($);let J=await this.executeAgentTurn($,W,Q.userImages,Q.userFiles);while(QX($,J.finishReason)){let X=await WX($);if(X.length===0)break;let Y=JX($,X);J=await this.executeAgentTurn($,Y)}return J}async completeInteractiveTurn($,Z){if(m5($))return;$.lastInteractiveTurnFinishReason=Z,await this.markTurnIdle($),$.aborting=!1}resolveInteractiveStopStatus($){let Z=$.lastInteractiveTurnFinishReason;if(!Z)return"cancelled";switch(Z){case"completed":return"completed";case"error":return"failed";case"aborted":case"max_iterations":case"mistake_limit":return"cancelled"}return Z}resolveInteractiveStopExitCode($){return $.lastInteractiveTurnFinishReason==="error"?1:0}async completeAbortedInteractiveTurn($){let Z=new Date,Q=$.agent.getMessages(),W=D0();return $.persistedMessages=Q,$.started=$.started||Q.length>0,this.eventBridge.dispatchAgentEvent($.sessionId,$.config,{type:"done",reason:"aborted",text:"",iterations:0,usage:W}),await this.completeInteractiveTurn($,"aborted"),{text:"",usage:W,messages:Q,toolCalls:[],iterations:0,finishReason:"aborted",model:{id:$.config.modelId,provider:$.config.providerId},startedAt:Z,endedAt:Z,durationMs:0}}async executeAgentTurn($,Z,Q,W){let J=$.started||$.agent.getMessages().length>0,X=$.persistedMessages??$.agent.getMessages(),Y=this.usageBySession.get($.sessionId)??D0(),j=this.aggregateUsageBySession.get($.sessionId)??Y;$.turnUsageBaseline=Y,$.turnAggregateUsageBaseline=j,$.turnPrimaryUsage=D0(),$.turnUsageByAgent=new Map,E9($.config.telemetry,$.sessionId,$.config.mode),Z8($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,model:$.config.modelId,source:"user",mode:$.config.mode,...this.getSessionAgentTelemetryIdentity($)});try{let V=J?()=>$.agent.continue(Z,Q,W):()=>$.agent.run(Z,Q,W),H=await this.runWithAuthRetry($,V,X);$.started=!0;let B=kZ(H.messages,H,X);$.persistedMessages=B;let G=u6($.turnUsageByAgent?.values()??[]),K=f0(Y,H.usage),F=f0(f0(D0(),H.usage),G),A=f0(j,F);return this.usageBySession.set($.sessionId,K),this.aggregateUsageBySession.set($.sessionId,A),await this.persistSessionMetadata($.sessionId,(L)=>({...L??{},totalCost:K.totalCost,aggregatedAgentsCost:A.totalCost,usage:K,aggregateUsage:A})),await this.invoke("persistSessionMessages",$.sessionId,B,$.config.systemPrompt),this.observeTaskCompletionTool($,H),H}catch(V){throw l2($.config.telemetry,{component:"core",operation:"session.turn",error:V,severity:"error",handled:!1,context:{sessionId:$.sessionId,providerId:$.config.providerId,modelId:$.config.modelId}}),await this.invoke("persistSessionMessages",$.sessionId,$.agent.getMessages(),$.config.systemPrompt),V}finally{$.turnUsageBaseline=void 0,$.turnAggregateUsageBaseline=void 0,$.turnPrimaryUsage=void 0,$.turnUsageByAgent=void 0}}observeTaskCompletionTool($,Z){if($.submitAndExitObserved)return;if(!Z.toolCalls.some((W)=>W.name===U0.SUBMIT_AND_EXIT&&W.error===void 0))return;$.submitAndExitObserved=!0,g4($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"submit_and_exit",...this.getSessionAgentTelemetryIdentity($)})}async prepareTurnInput($,Z){let Q=R$($.config),W=eI(Z.prompt).trim();if(!W)return{prompt:"",userImages:Z.userImages,userFiles:this.resolveAbsoluteFilePaths($.config.cwd,Z.userFiles)};let J=await T8(W,Q);JK($.config.telemetry,J);let X=v5(J.prompt,Z.mode??$.config.mode),Y=this.resolveAbsoluteFilePaths($.config.cwd,Z.userFiles),j=this.resolveAbsoluteFilePaths(Q,J.matchedFiles),V=Array.from(new Set([...Y,...j]));return{prompt:X,userImages:Z.userImages,userFiles:V.length>0?V:void 0}}async ensureSessionPersisted($){if($.artifacts)return;let Z=R$($.config);$.artifacts=await this.invoke("createRootSessionWithArtifacts",{sessionId:$.sessionId,source:$.source,pid:process.pid,interactive:$.interactive,provider:$.config.providerId,model:$.config.modelId,cwd:$.config.cwd,workspaceRoot:Z,teamName:$.config.teamName,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,prompt:$.pendingPrompt,metadata:$.sessionMetadata,startedAt:$.startedAt})}async markTurnRunning($){if($.status==="running")return;await this.updateStatus($,"running",null)}async markTurnPending($){if($.status==="pending")return;await this.updateStatus($,"pending",null)}async markTurnIdle($){if($.status==="idle")return;await this.updateStatus($,"idle",null)}async persistSessionMetadata($,Z){let Q=this.sessions.get($),W=await this.invokeOptionalValue("readSessionManifest",$)??Q?.artifacts?.manifest,J=Z(W?.metadata);if(!Q?.artifacts)return;if((await this.invokeOptionalValue("updateSession",{sessionId:$,metadata:J}))?.updated===!1)return;Q.sessionMetadata=J,Q.artifacts.manifest.metadata=J}async finalizeSingleRun($,Z){if(m5($))return;let Q=Z==="aborted"||$.aborting,W=Z==="error";await this.shutdownSession($,{status:Q?"cancelled":W?"failed":"completed",exitCode:W?1:0,shutdownReason:W?"session_error":"session_complete",endReason:Z})}async failSession($){await this.shutdownSession($,{status:"failed",exitCode:1,shutdownReason:"session_error",endReason:"error"})}async shutdownSession($,Z){if(Z.status==="completed"&&!$.submitAndExitObserved)g4($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"shutdown",...this.getSessionAgentTelemetryIdentity($)});rQ($);let Q=[],W=(J,X)=>{Q.push(X),$.config.logger?.log("Session shutdown cleanup failed",{sessionId:$.sessionId,stage:J,error:X,severity:"warn"}),l2($.config.telemetry,{component:"core",operation:"session.shutdown_cleanup",error:X,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:J,status:Z.status,shutdownReason:Z.shutdownReason,providerId:$.config.providerId,modelId:$.config.modelId}})};if($.artifacts){try{await this.updateStatus($,Z.status,Z.exitCode)}catch(J){W("update_status",J)}try{await $.agent.shutdown(Z.shutdownReason)}catch(J){W("agent_shutdown",J)}}try{await Promise.resolve($.runtime.shutdown(Z.shutdownReason))}catch(J){W("runtime_shutdown",J)}try{await $.pluginSandboxShutdown?.()}catch(J){W("plugin_sandbox_shutdown",J)}if(this.sessions.delete($.sessionId),this.emit({type:"ended",payload:{sessionId:$.sessionId,reason:Z.endReason,ts:Date.now()}}),Q.length>0&&Z.status==="failed")throw Q[0]}async releaseSessionRuntime($,Z){let Q=[],W=(J,X)=>{Q.push(X),$.config.logger?.log("Session runtime cleanup failed",{sessionId:$.sessionId,stage:J,error:X,severity:"warn"}),l2($.config.telemetry,{component:"core",operation:"session.runtime_cleanup",error:X,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:J,reason:Z,providerId:$.config.providerId,modelId:$.config.modelId}})};try{await $.agent.shutdown(Z)}catch(J){W("agent_shutdown",J)}try{await Promise.resolve($.runtime.shutdown(Z))}catch(J){W("runtime_shutdown",J)}try{await $.pluginSandboxShutdown?.()}catch(J){W("plugin_sandbox_shutdown",J)}if(this.sessions.delete($.sessionId),Q.length>0)throw Q[0]}async updateStatus($,Z,Q){if(!$.artifacts)return;let W=await this.invoke("updateSessionStatus",$.sessionId,Z,Q);if(!W.updated)return;let J=await this.invokeOptionalValue("readSessionManifest",$.sessionId)??$.artifacts.manifest;if(J.status=Z,H0(Z))delete J.ended_at,J.exit_code=null;else J.ended_at=W.endedAt??J0(),J.exit_code=typeof Q==="number"?Q:null;$.artifacts.manifest=J,$.status=Z,$.updatedAt=W.endedAt??J0(),$.endedAt=H0(Z)?null:J.ended_at,$.exitCode=J.exit_code,await this.invoke("writeSessionManifest",$.artifacts.manifestPath,J),this.emitStatus($.sessionId,Z)}async runWithAuthRetry($,Z,Q){try{return await Z()}catch(W){if(!Z2($.config.providerId)||!tI(W))throw W;return await this.syncOAuthCredentials($,{forceRefresh:!0}),$.agent.restore(Q),Z()}}async syncOAuthCredentials($,Z){let Q=null;try{Q=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId,forceRefresh:Z?.forceRefresh})}catch(W){if(W instanceof r7)throw Error(`${W.providerId} requires re-authentication.`);throw W}if(!Q?.apiKey||$.config.apiKey===Q.apiKey)return;$.config.apiKey=Q.apiKey,$.agent.updateConnection({apiKey:Q.apiKey}),$.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({apiKey:Q.apiKey}),$.runtime.teamRuntime?.updateTeammateConnections({apiKey:Q.apiKey})}getSessionOrThrow($){let Z=this.sessions.get($);if(!Z){let Q=new k1($);throw l2(this.defaultTelemetry,{component:"core",operation:"session.active_lookup",error:Q,severity:"warn",handled:!0,context:{sessionId:$,activeSessionCount:this.sessions.size}}),Q}return Z}resolveAbsoluteFilePaths($,Z){if(!Z||Z.length===0)return[];let Q=Z.map((W)=>W.trim()).filter((W)=>W.length>0).map((W)=>sI(W)?W:IY($,W));return Array.from(new Set(Q))}getSessionAgentTelemetryIdentity($){return r1({agentId:$.agent.getAgentId(),conversationId:$.agent.getConversationId(),teamId:$.runtime.teamRuntime?.getTeamId(),teamName:$.runtime.teamRuntime?.getTeamName(),teamRole:$.runtime.teamRuntime?"lead":void 0})}async seedAggregateUsageFromArtifacts($){let Z=await this.summarizePersistedTeammateUsage($.sessionDir,$.rootMessagesPath,$.manifest.session_id),Q=f0($.initialUsage,Z);return this.withPersistedAggregateUsageFloor(Q,$.manifest)}async summarizePersistedTeammateUsage($,Z,Q){let W=IY(Z),J=`${Q}.messages.json`,X;try{X=nI($)}catch{return D0()}let Y=D0();for(let j of X){if(!j.endsWith(".messages.json"))continue;if(j===J)continue;let V=IY($,j);if(V===W)continue;let H=await I$(V);if(H.length===0)continue;Y=f0(Y,b8(H))}return Y}withPersistedAggregateUsageFloor($,Z){let Q=Zx(Z.metadata?.aggregateUsage);if(Q)return Qx($,Q);let W=Z.metadata?.aggregatedAgentsCost;if(typeof W!=="number"||!Number.isFinite(W)||W<=$.totalCost)return $;return{...$,totalCost:W}}emitStatus($,Z){this.emitSessionSnapshot($),this.emit({type:"status",payload:{sessionId:$,status:Z}})}async emitSessionSnapshot($){let Z=await this.getSession($);if(!Z)return;this.emit({type:"session_snapshot",payload:{sessionId:$,snapshot:f1({session:Z,messages:await this.readSessionMessages($),usage:this.usageBySession.get($),aggregateUsage:this.aggregateUsageBySession.get($)})}})}emit($){this.events.emit($)}async listRows($){return this.invoke("listSessions",Math.min(Math.max(1,Math.floor($)),DU))}async getRow($){let Z=$.trim();if(!Z)return;return(await this.listRows(DU)).find((W)=>W.sessionId===Z)}async readManifest($){let Z=$.trim();if(!Z)return;return await this.invokeOptionalValue("readSessionManifest",Z)}invoke($,...Z){return FU(this.sessionService,$,...Z)}invokeOptional($,...Z){return AU(this.sessionService,$,...Z)}invokeOptionalValue($,...Z){return fU(this.sessionService,$,...Z)}}function Jx($){return{text:$.text,usage:$.usage,inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,iterations:$.iterations,finishReason:$.finishReason,toolCalls:$.toolCalls.map((Z)=>({name:Z.name,input:Z.input,output:Z.output,error:Z.error,durationMs:Z.durationMs}))}}function Xx($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}function YU($={}){let Z=new z1({sessionService:new _1(new D1),fetch:$.fetch,telemetry:$.telemetry});return{async startSession(Q){let W=(Q.cwd?.trim()||Q.workspaceRoot).trim(),J=await Z.startSession({source:Q.source?.trim()||z0.CLI,interactive:!1,config:{providerId:Wx(Q.provider),modelId:Q.model,apiKey:Q.apiKey?.trim()||void 0,cwd:W,workspaceRoot:Q.workspaceRoot,systemPrompt:Q.systemPrompt??"",mode:Xx(Q),maxIterations:Q.maxIterations,enableTools:Q.enableTools!==!1,enableSpawnAgent:Q.enableSpawn!==!1,enableAgentTeams:Q.enableTeams!==!1,disableMcpSettingsTools:Q.disableMcpSettingsTools,missionLogIntervalSteps:Q.missionStepInterval,missionLogIntervalMs:Q.missionTimeIntervalMs},toolPolicies:Q.toolPolicies??{"*":{autoApprove:Q.autoApproveTools!==!1}},localRuntime:{configExtensions:Q.configExtensions}});return{sessionId:J.sessionId,startResult:{sessionId:J.sessionId,manifestPath:J.manifestPath,messagesPath:J.messagesPath}}},async sendSession(Q,W){let J=await Z.runTurn({sessionId:Q,prompt:W.prompt,userImages:W.attachments?.userImages,userFiles:W.attachments?.userFiles?.map((X)=>X.content)});if(!J)throw Error("local hub schedule runtime returned no turn result");return{result:Jx(J)}},async abortSession(Q){return await Z.abort(Q,Error("hub schedule abort")),{applied:!0}},async stopSession(Q){return await Z.stopSession(Q),{applied:!0}}}}import{resolveClineBuildEnv as fD}from"@cline/shared";function Yx($){if(typeof $==="string")return $.trim()||void 0;if(!Array.isArray($))return;return $.map((Q)=>{if(Q&&typeof Q==="object"&&"type"in Q&&Q.type==="text"&&"text"in Q&&typeof Q.text==="string")return Q.text.trim();return""}).filter(Boolean).join(`
736
- `).trim()||void 0}var LU=120,xY="...";function J9($){let Z=$.trim();if(!Z)return"";if(Buffer.byteLength(Z,"utf8")<=LU)return Z;let Q=LU-Buffer.byteLength(xY,"utf8");if(Q<=0)return xY;let W="";for(let J of Z){if(Buffer.byteLength(W+J,"utf8")>Q)break;W+=J}return`${W}${xY}`}async function _U($){let Z=$?.sessionId?.trim()||"unknown",Q=typeof $?.metadata?.messagesPath==="string"?$.metadata.messagesPath:void 0,J=[...await I$(Q)].reverse().find((V)=>V.role==="assistant"),X=J?Yx(J.content):void 0,Y=$?.workspaceRoot?.trim()||"workspace",j=typeof $?.metadata?.prompt==="string"?$.metadata.prompt.trim():Y;return{title:`Task completed (${Z})`,body:J9(X&&X.length>0?X:j.length>0?j:Y),severity:"info"}}import{captureSdkError as t7,createSessionId as Jg}from"@cline/shared";import{createSessionId as Bx}from"@cline/shared";import{createSessionId as Hx}from"@cline/shared";function jx($){switch($){case"idle":return"idle";case"pending":return"pending";case"completed":return"completed";case"failed":return"failed";case"cancelled":return"aborted";default:return"running"}}function Vx($){let Z=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):{};if($.parentSessionId?.trim())Z.parentSessionId=$.parentSessionId;if($.parentAgentId?.trim())Z.parentAgentId=$.parentAgentId;if($.agentId?.trim())Z.agentId=$.agentId;if($.conversationId?.trim())Z.conversationId=$.conversationId;if($.messagesPath?.trim())Z.messagesPath=$.messagesPath;if($.prompt?.trim())Z.prompt=$.prompt;if($.provider?.trim())Z.provider=$.provider;if($.model?.trim())Z.model=$.model;if($.source?.trim())Z.source=$.source;if(typeof $.pid==="number")Z.pid=$.pid;return Object.keys(Z).length>0?Z:void 0}function n7($,Z,Q,W){return{sessionId:$.sessionId,workspaceRoot:$.workspaceRoot,cwd:$.cwd,createdAt:Date.parse($.startedAt),updatedAt:Date.parse($.updatedAt),createdByClientId:Z?.createdByClientId??"hub",status:jx($.status),participants:Z?[...Z.participants.values()]:[],metadata:Vx($),runtimeOptions:{enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,mode:typeof $.metadata?.mode==="string"?$.metadata.mode:void 0,systemPrompt:typeof $.metadata?.systemPrompt==="string"?$.metadata.systemPrompt:void 0},runtimeSession:$.agentId?{agentId:$.agentId,team:$.teamName?{teamId:$.teamName}:void 0}:void 0,...Q?{usage:{...Q}}:{},...W?{aggregateUsage:{...W}}:{}}}function c($,Z){return{version:$.version,requestId:$.requestId,ok:!0,...Z!==void 0?{payload:Z}:{}}}function x($,Z,Q){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:Z,message:Q}}}function a7($){return $&&typeof $==="object"&&!Array.isArray($)?$:void 0}function I0($){if(typeof $.payload?.sessionId==="string")return $.payload.sessionId.trim();return $.sessionId?.trim()??""}function p2($,Z,Q){return{version:"v1",event:$,eventId:Hx("hevt_"),sessionId:Q,timestamp:Date.now(),payload:Z}}async function o0($,Z){let Q=await $.sessionHost.getSession(Z);if(!Q)return;let W=await $.sessionHost.getAccumulatedUsage?.(Z);return n7(Q,$.sessionState.get(Z),W?.usage,W?.aggregateUsage)}async function t0($,Z){let Q=await $.sessionHost.getSession(Z);if(!Q)return;let[W,J]=await Promise.all([typeof $.sessionHost.readSessionMessages==="function"?$.sessionHost.readSessionMessages(Z):[],$.sessionHost.getAccumulatedUsage?.(Z)]);return f1({session:Q,messages:W,usage:J?.usage,aggregateUsage:J?.aggregateUsage})}function s7($,Z,Q,W,J={}){let X=$.sessionState.get(Z);if(X){if(J.interactive!==void 0)X.interactive=J.interactive;if(!X.participants.has(Q))X.participants.set(Q,{clientId:Q,attachedAt:Date.now(),role:W});return X}let Y={createdByClientId:Q,interactive:J.interactive??!0,participants:new Map([[Q,{clientId:Q,attachedAt:Date.now(),role:W}]])};return $.sessionState.set(Z,Y),Y}async function gY($,Z){let Q=Bx("approval_"),W=Z.sessionId;if($.sessionState.get(W)?.interactive===!1)return{approved:!1,reason:"Tool approval requires an interactive session, but this session is non-interactive."};return await new Promise((X)=>{$.pendingApprovals.set(Q,{sessionId:W,resolve:X}),$.publish($.buildEvent("approval.requested",{approvalId:Q,sessionId:Z.sessionId,agentId:Z.agentId,conversationId:Z.conversationId,iteration:Z.iteration,toolCallId:Z.toolCallId,toolName:Z.toolName,inputJson:JSON.stringify(Z.input??null),policy:Z.policy},W))})}function mY($,Z,Q){let W=$.pendingApprovals.get(Z);if(!W)return;return $.pendingApprovals.delete(Z),W.resolve(Q),{sessionId:W.sessionId}}function vY($,Z,Q){let W=0;for(let[J,X]of[...$.pendingApprovals.entries()]){if(!Z({approvalId:J,sessionId:X.sessionId}))continue;$.pendingApprovals.delete(J),X.resolve({approved:!1,reason:Q}),$.publish($.buildEvent("approval.resolved",{approvalId:J,approved:!1,cancelled:!0,reason:Q},X.sessionId)),W+=1}return W}async function zU($,Z){let Q=typeof Z.payload?.approvalId==="string"?Z.payload.approvalId.trim():"";if(!$.pendingApprovals.get(Q))return x(Z,"approval_not_found",`Unknown approval: ${Q}`);let J=typeof Z.payload?.reason==="string"?Z.payload.reason:Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)&&typeof Z.payload.payload.reason==="string"?Z.payload.payload.reason:void 0,X=Z.payload?.approved===!0,Y=mY($,Q,{approved:X,reason:J});if(!Y)return x(Z,"approval_not_found",`Unknown approval: ${Q}`);return $.publish($.buildEvent("approval.resolved",{approvalId:Q,approved:X,reason:J},Y.sessionId)),c(Z,{approvalId:Q,approved:X})}import{createSessionId as Fx}from"@cline/shared";function Gx($){if($ instanceof Error)return{name:$.name,message:$.message,stack:$.stack};if($===void 0)return;return $}var TU={debug:10,info:20,warn:30,error:40,silent:50};function Kx(){let $=process.env.CLINE_HUB_LOG_LEVEL?.trim().toLowerCase();if($==="debug"||$==="info"||$==="warn"||$==="error"||$==="silent")return $;return process.env.VITEST?"error":"info"}function u($,Z,Q={}){if(TU[$]<TU[Kx()])return;let W=JSON.stringify({ts:new Date().toISOString(),level:$,component:"hub",message:Z,...Object.fromEntries(Object.entries(Q).map(([J,X])=>[J,Gx(X)]).filter(([,J])=>J!==void 0))});if($==="error"||$==="warn"){console.error(`[hub] ${W}`);return}console.log(`[hub] ${W}`)}function cY($,Z){let Q=Z instanceof Error?Z.stack||Z.message:String(Z);u("error",$,{error:Q})}async function OU($,Z,Q,W,J,X){let Y=Fx("capreq_"),j=performance.now();return u("info","capability.request.start",{requestId:Y,sessionId:Z,capabilityName:Q,targetClientId:J}),await new Promise((V,H)=>{$.pendingCapabilityRequests.set(Y,{sessionId:Z,targetClientId:J,capabilityName:Q,onProgress:X,resolve:(B)=>{if(u(B.ok?"info":"warn","capability.request.end",{requestId:Y,sessionId:Z,capabilityName:Q,targetClientId:J,ok:B.ok,error:B.error,durationMs:Math.round(performance.now()-j)}),!B.ok){H(Error(B.error||`Capability ${Q} was rejected by ${J}.`));return}V(B.payload)}}),$.publish($.buildEvent("capability.requested",{requestId:Y,targetClientId:J,capabilityName:Q,payload:W},Z)),u("info","capability.request.published",{requestId:Y,sessionId:Z,capabilityName:Q,targetClientId:J})})}function qU($,Z){let Q=typeof Z.payload?.requestId==="string"?Z.payload.requestId.trim():"",W=$.pendingCapabilityRequests.get(Q);if(!W)return x(Z,"capability_not_found",`Unknown capability request: ${Q}`);if((Z.clientId?.trim()||"")!==W.targetClientId)return x(Z,"capability_wrong_client",`Capability request ${Q} is owned by ${W.targetClientId}`);if(Z.sessionId?.trim()&&Z.sessionId.trim()!==W.sessionId)return x(Z,"capability_wrong_session",`Capability request ${Q} belongs to session ${W.sessionId}`);let X=Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)?Z.payload.payload:{};return W.onProgress?.(X),c(Z,{requestId:Q})}function u$($,Z,Q){let W=0;for(let[J,X]of[...$.pendingCapabilityRequests.entries()]){if(!Z({requestId:J,...X}))continue;$.pendingCapabilityRequests.delete(J),u("warn","capability.request.cancelled",{requestId:J,sessionId:X.sessionId,capabilityName:X.capabilityName,targetClientId:X.targetClientId,reason:Q}),X.resolve({ok:!1,error:Q}),$.publish($.buildEvent("capability.resolved",{requestId:J,capabilityName:X.capabilityName,targetClientId:X.targetClientId,ok:!1,cancelled:!0,error:Q},X.sessionId)),W+=1}return W}async function MU($,Z){let Q=typeof Z.payload?.sessionId==="string"?Z.payload.sessionId.trim():Z.sessionId?.trim()||"",W=typeof Z.payload?.capabilityName==="string"?Z.payload.capabilityName.trim():"",J=typeof Z.payload?.targetClientId==="string"?Z.payload.targetClientId.trim():"";if(!Q||!W||!J)return x(Z,"invalid_capability_request","capability.request requires sessionId, capabilityName, and targetClientId");try{let X=Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)?Z.payload.payload:{},Y=await $.requestCapability(Q,W,X,J);return c(Z,Y)}catch(X){return x(Z,"capability_request_failed",X instanceof Error?X.message:String(X))}}function RU($,Z){let Q=typeof Z.payload?.requestId==="string"?Z.payload.requestId.trim():"",W=$.pendingCapabilityRequests.get(Q);if(!W)return x(Z,"capability_not_found",`Unknown capability request: ${Q}`);let J=Z.clientId?.trim()||"";if(J!==W.targetClientId)return x(Z,"capability_wrong_client",`Capability request ${Q} is owned by ${W.targetClientId}`);if(Z.sessionId?.trim()&&Z.sessionId.trim()!==W.sessionId)return x(Z,"capability_wrong_session",`Capability request ${Q} belongs to session ${W.sessionId}`);$.pendingCapabilityRequests.delete(Q);let X=Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)?Z.payload.payload:void 0,Y=typeof Z.payload?.error==="string"?Z.payload.error:void 0,j=Z.payload?.ok===!0;return u(j?"info":"warn","capability.respond",{requestId:Q,sessionId:W.sessionId,capabilityName:W.capabilityName,targetClientId:W.targetClientId,respondedByClientId:J,ok:j,error:Y}),W.resolve({ok:j,payload:X,error:Y}),$.publish($.buildEvent("capability.resolved",{requestId:Q,capabilityName:W.capabilityName,targetClientId:W.targetClientId,respondedByClientId:J,ok:j,payload:X,error:Y},W.sessionId)),c(Z,{requestId:Q,ok:j})}import{createSessionId as Ax}from"@cline/shared";function EU($,Z){let Q=Z.payload,W=Q?.clientId?.trim()||Z.clientId?.trim()||Ax("client_");return $.clients.set(W,{clientId:W,clientType:Q?.clientType??"unknown",displayName:Q?.displayName,actorKind:Q?.actorKind??"client",connectedAt:Date.now(),lastSeenAt:Date.now(),transport:Q?.transport??"native",capabilities:Q?.capabilities??[],metadata:Q?.metadata,workspaceContext:Q?.workspaceContext}),$.publish($.buildEvent("hub.client.registered",{clientId:W,clientType:Q?.clientType??"unknown",displayName:Q?.displayName,connectedAt:Date.now()})),c(Z,{clientId:W})}function NU($,Z){let Q=Z.clientId?.trim(),W=Q?$.clients.get(Q):void 0;if(!Q||!W)return x(Z,"client_not_found","Client is not registered with this hub.");let J=a7(Z.payload?.metadata);if(W.lastSeenAt=Date.now(),J)W.metadata=JSON.parse(JSON.stringify(J));return c(Z)}function wU($,Z,Q){let W=Z.clientId?.trim();if(W)$.clients.delete(W),Q(W),$.publish($.buildEvent("hub.client.disconnected",{clientId:W}));return c(Z)}function CU($,Z){return c(Z,{clients:[...$.clients.values()]})}_0();import{existsSync as bU,mkdirSync as fx,readdirSync as Ux,readFileSync as Dx,rmSync as Lx,writeFileSync as _x}from"node:fs";import{dirname as zx,join as PU}from"node:path";import{CONNECTOR_PLATFORMS as Tx,connectorChannelsFromPlatforms as Ox,listConnectorCatalog as yU,shouldIncludeConnectorField as qx}from"@cline/shared";import{resolveConnectorDataDir as Mx,resolveConnectorSettingsPath as dY}from"@cline/shared/storage";var Rx=1,SU={startedAt:($)=>typeof $.startedAt==="string"?$.startedAt:void 0,port:($)=>typeof $.port==="number"?$.port:void 0,baseUrl:($)=>typeof $.baseUrl==="string"?$.baseUrl:void 0,connectionMode:($)=>typeof $.connectionMode==="string"?$.connectionMode:void 0,userName:($)=>typeof $.userName==="string"?$.userName:void 0,botUsername:($)=>typeof $.botUsername==="string"?$.botUsername:void 0,applicationId:($)=>typeof $.applicationId==="string"?$.applicationId:void 0,phoneNumberId:($)=>typeof $.phoneNumberId==="string"?$.phoneNumberId:void 0},Ex={discord:{required:["userName","applicationId"],optional:["startedAt","port","baseUrl"]},telegram:{required:["botUsername"],optional:["startedAt"]},gchat:{required:["userName"],optional:["startedAt","port","baseUrl"]},linear:{required:["userName"],optional:["startedAt","port","baseUrl"]},slack:{required:["userName"],optional:["startedAt","connectionMode","port","baseUrl"]},whatsapp:{required:["userName"],optional:["startedAt","phoneNumberId","port","baseUrl"]}};function d$($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function H9($){return typeof $==="string"?$.trim():void 0}function hU($){if(!bU($))return;try{let Z=JSON.parse(Dx($,"utf8"));return d$(Z)?Z:void 0}catch{return}}function lY(){let $=hU(dY()),Z=d$($?.connectors)?$.connectors:{},Q={};for(let[W,J]of Object.entries(Z)){if(!d$(J))continue;let X=H9(J.type),Y=H9(J.configuredAt),j=H9(J.updatedAt);if(!X||!Y||!j)continue;let V=o7(J.values),H=d$(J.security)?{enabled:J.security.enabled===!0,values:o7(J.security.values)}:void 0;Q[W]={type:X,values:V,security:H,configuredAt:Y,updatedAt:j}}return{version:Rx,connectors:Q}}function kU($){let Z=dY();fx(zx(Z),{recursive:!0}),_x(Z,`${JSON.stringify($,null,2)}
737
- `,"utf8")}function o7($){if(!d$($))return{};let Z={};for(let[Q,W]of Object.entries($))if(typeof W==="string")Z[Q]=W.trim();return Z}function Nx($){if(!Number.isInteger($)||$<=0)return!1;try{return process.kill($,0),!0}catch{return!1}}function wx($){let Z=PU(Mx(),$);if(!bU(Z))return[];return Ux(Z).filter((Q)=>Q.endsWith(".json")&&!Q.endsWith(".threads.json")).map((Q)=>PU(Z,Q))}function Cx($,Z,Q){let W=Z.botUsername??Z.userName??Z.applicationId??Z.phoneNumberId??String(Q);return`${$}:${W}`}function Px($,Z){let Q=hU(Z);if(!Q)return;let W=typeof Q.pid==="number"?Q.pid:void 0,J=typeof Q.hubUrl==="string"?Q.hubUrl:typeof Q.rpcAddress==="string"?Q.rpcAddress:void 0;if(!W||!J||!Nx(W))return;let X=Ex[$];if(!X)return;let Y={};for(let j of X.required){let V=SU[j](Q);if(!V||typeof V==="string"&&!V.trim())return;Y[j]=V}for(let j of X.optional){let V=SU[j](Q);if(V!==void 0)Y[j]=V}return{id:Cx($,Y,W),type:$,pid:W,hubUrl:J,...Y}}function Sx(){let $=[];for(let{name:Z}of yU())for(let Q of wx(Z)){let W=Px(Z,Q);if(W)$.push(W)}return $.sort((Z,Q)=>{if(Z.type!==Q.type)return Z.type.localeCompare(Q.type);let W=Z.botUsername??Z.userName??"",J=Q.botUsername??Q.userName??"";return W.localeCompare(J)})}function bx(){let $=lY();return Object.entries($.connectors).map(([Z,Q])=>({id:Z,type:Q.type,configuredAt:Q.configuredAt,updatedAt:Q.updatedAt})).sort((Z,Q)=>Z.type.localeCompare(Q.type))}function pY(){return{available:Ox(),active:Sx(),configured:bx()}}function yx($,Z){if($.required&&!Z[$.flag]?.trim())throw Error(`${$.label} is required`)}function hx($,Z){let Q={};for(let J of $.fields)Q[J.flag]=Z[J.flag]??J.initialValue??"";let W={};for(let J of $.fields){if(!qx(J,Q))continue;yx(J,Q),W[J.flag]=Q[J.flag]}return W}function kx($){if(!d$($))throw Error("connector.configure payload must be an object.");let Z=H9($.channel);if(!Z)throw Error("channel is required");let Q=Tx.find((K)=>K.id===Z);if(!Q)throw Error(`unknown connector channel: ${Z}`);if(!new Set(yU().map((K)=>K.name)).has(Q.id))throw Error(`connector channel is not available: ${Z}`);let J=o7($.values),X=hx(Q,J),Y=d$($.security)?$.security:{},j=Y.enabled===!0,V=o7(Y.values);if(j&&Q.security)for(let K of Q.security.fields){let F=V[K.key];if(!F)throw Error(K.requiredMessage);let A=K.validate?.(F);if(A)throw Error(A)}let H=lY(),B=new Date().toISOString(),G=H.connectors[Z];return H.connectors[Z]={type:Z,values:X,security:j?{enabled:!0,values:V}:{enabled:!1,values:{}},configuredAt:G?.configuredAt??B,updatedAt:B},kU(H),pY()}function Ix($){if(!d$($))throw Error("connector.delete_config payload must be an object.");let Z=H9($.channel);if(!Z)throw Error("channel is required");let Q=lY();if(delete Q.connectors[Z],Object.keys(Q.connectors).length>0)kU(Q);else Lx(dY(),{force:!0});return pY()}function xx($){return $==="connector.configure"||$==="connector.delete_config"}function uY($,Z,Q){if(!xx(Z.command))return;Q8($.telemetry,{ulid:Z.sessionId??Z.requestId??"hub",tool:Z.command,success:Q})}async function IU($,Z){try{if(Z.command==="connector.channels")return c(Z,pY());if(Z.command==="connector.configure"){let Q=kx(Z.payload);return uY($,Z,!0),c(Z,Q)}if(Z.command==="connector.delete_config"){let Q=Ix(Z.payload);return uY($,Z,!0),c(Z,Q)}return x(Z,"unsupported_connector_command",`unsupported connector command: ${Z.command}`)}catch(Q){return uY($,Z,!1),x(Z,"connector_command_failed",Q instanceof Error?Q.message:String(Q))}}var gx=30000;function mx($){if($==="aborted")return"run.aborted";if($==="error"||$==="failed")return"run.failed";return"run.completed"}function vx($){if($.finishReason!=="error")return;return $.text.trim()||void 0}function cx($,Z,Q){let W=Q instanceof Error&&Q.message.trim()?Q.message:`Unknown session: ${Z}`;return x($,a$,W)}function ux($){return $?$:void 0}function dx($){let Z=typeof $.timeoutMs==="number"?$.timeoutMs:typeof $.timeout_ms==="number"?$.timeout_ms:void 0;if(Z&&Number.isFinite(Z)&&Z>0)return Math.floor(Z);let Q=typeof $.timeoutSeconds==="number"?$.timeoutSeconds:typeof $.timeout_seconds==="number"?$.timeout_seconds:void 0;if(Q&&Number.isFinite(Q)&&Q>0)return Math.floor(Q*1000);return}async function lx($,Z,Q,W){let J=performance.now(),X=!1,Y={command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Q.sessionId,timeoutMs:W},j=setInterval(()=>{if(X)return;let B=Math.round(performance.now()-J);u("warn","run.heartbeat",{...Y,elapsedMs:B}),$.publish($.buildEvent("run.heartbeat",{requestId:Z.requestId,elapsedMs:B,...W?{timeoutMs:W}:{}},Q.sessionId))},gx),V=$.sessionHost.runTurn(Q);V.then((B)=>{if(!X)return;u("warn","run.late_end",{...Y,elapsedMs:Math.round(performance.now()-J),finishReason:B?.finishReason})},(B)=>{if(!X)return;u("error","run.late_error",{...Y,elapsedMs:Math.round(performance.now()-J),error:B})});let H;try{if(!W)return await V;return await Promise.race([V,new Promise((B,G)=>{H=setTimeout(()=>{let K=`Hub run ${Z.command} timed out after ${W}ms.`;X=!0,clearInterval(j),G(Error(K)),u("error","run.timeout",{...Y,elapsedMs:Math.round(performance.now()-J)}),vY($,(F)=>F.sessionId===Q.sessionId,K),u$($,(F)=>F.sessionId===Q.sessionId,K),$.sessionHost.abort(Q.sessionId,K).catch((F)=>{u("error","run.timeout_abort_failed",{...Y,error:F})})},W)})])}finally{if(X=!0,clearInterval(j),H)clearTimeout(H)}}async function xU($,Z){let Q=I0(Z),W=Z.payload&&typeof Z.payload==="object"?Z.payload:{},J=typeof W.prompt==="string"?W.prompt:typeof W.input==="string"?W.input:"";if(!J.trim())return x(Z,"invalid_session_input","session input requires a prompt string");$.publish($.buildEvent("run.started",void 0,Q));let X=W.attachments&&typeof W.attachments==="object"&&!Array.isArray(W.attachments)?W.attachments:void 0,Y=Array.isArray(X?.userFiles)?X.userFiles.filter((B)=>typeof B==="string"):void 0,j=dx(W);$.suppressNextTerminalEventBySession.set(Q,"run.start.reply");let V;try{V=await lx($,Z,{sessionId:Q,prompt:J,mode:ux(W.mode),delivery:W.delivery==="queue"||W.delivery==="steer"?W.delivery:void 0,userImages:Array.isArray(X?.userImages)?X.userImages:void 0,userFiles:Y,timeoutMs:j},j)}catch(B){if($.suppressNextTerminalEventBySession.get(Q)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Q);if(I1(B))return cx(Z,Q,B);throw $.publish($.buildEvent("run.failed",{reason:"error",error:B instanceof Error?B.message:String(B)},Q)),B}if(V){let B=await t0($,Q),G=vx(V);if($.publish($.buildEvent(mx(V.finishReason),{reason:V.finishReason,...G?{error:G}:{},result:V,...B?{snapshot:B}:{}},Q)),$.suppressNextTerminalEventBySession.get(Q)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Q)}else $.suppressNextTerminalEventBySession.delete(Q);let H=await t0($,Q);return c(Z,V||H?{...V?{result:V}:{},...H?{snapshot:H}:{}}:void 0)}async function gU($,Z){let Q=I0(Z),W=typeof Z.payload?.reason==="string"?Z.payload.reason:"Run was aborted before pending approval or capability request was resolved.";vY($,(J)=>J.sessionId===Q,W);try{await $.sessionHost.abort(Q,Z.payload?.reason)}catch(J){u("warn","run.abort_failed",{command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Q,error:J})}finally{u$($,(J)=>J.sessionId===Q,W)}return c(Z,{applied:!0})}async function mU($,Z){let Q=D4(Z.payload?.payload);if(!Q)return x(Z,"invalid_hook_payload","session.hook requires a valid hook event payload");return await $.sessionHost.dispatchHookEvent(Q),c(Z,{applied:!0})}async function vU($,Z){switch(Z.type){case"chunk":return;case"agent_event":await px($,Z);return;case"hook":if(Z.payload.hookEventName==="tool_call")$.publish($.buildEvent("tool.started",{toolName:Z.payload.toolName},Z.payload.sessionId));else if(Z.payload.hookEventName==="tool_result")$.publish($.buildEvent("tool.finished",{toolName:Z.payload.toolName},Z.payload.sessionId));return;case"team_progress":{let Q={type:"team_progress_projection",version:1,sessionId:Z.payload.sessionId,summary:Z.payload.summary,lastEvent:Z.payload.lifecycle};$.publish($.buildEvent("team.progress",Q,Z.payload.sessionId));return}case"pending_prompts":$.publish($.buildEvent("session.pending_prompts",{sessionId:Z.payload.sessionId,prompts:Z.payload.prompts},Z.payload.sessionId));return;case"pending_prompt_submitted":{let Q={id:Z.payload.id,prompt:Z.payload.prompt,delivery:Z.payload.delivery,attachmentCount:Z.payload.attachmentCount,userImages:Z.payload.userImages,userFiles:Z.payload.userFiles};$.publish($.buildEvent("session.pending_prompt_submitted",{sessionId:Z.payload.sessionId,prompt:Q},Z.payload.sessionId));return}case"session_snapshot":$.publish($.buildEvent("session.updated",{sessionId:Z.payload.sessionId,snapshot:Z.payload.snapshot},Z.payload.sessionId));return;case"status":{let[Q,W]=await Promise.all([o0($,Z.payload.sessionId),t0($,Z.payload.sessionId)]);if(Q)$.publish($.buildEvent("session.updated",{session:Q,...W?{snapshot:W}:{}},Z.payload.sessionId));return}case"ended":await rx($,Z);return;default:return}}async function px($,Z){let{sessionId:Q,event:W}=Z.payload;if(W.type==="iteration_start"){$.publish($.buildEvent("iteration.started",{iteration:W.iteration},Q));return}if(W.type==="iteration_end"){$.publish($.buildEvent("iteration.finished",{iteration:W.iteration,hadToolCalls:W.hadToolCalls,toolCallCount:W.toolCallCount},Q));return}if(W.type==="content_start"){if(W.contentType==="text"&&typeof W.text==="string"&&W.text.length>0){$.publish($.buildEvent("assistant.delta",{text:W.text},Q));return}if(W.contentType==="reasoning"){if(W.redacted&&!W.reasoning){$.publish($.buildEvent("reasoning.delta",{text:"",redacted:!0},Q));return}if(typeof W.reasoning==="string"&&W.reasoning.length>0)$.publish($.buildEvent("reasoning.delta",{text:W.reasoning,redacted:W.redacted===!0},Q));return}if(W.contentType==="tool"){$.publish($.buildEvent("tool.started",{toolCallId:W.toolCallId,toolName:W.toolName,input:W.input},Q));return}}if(W.type==="content_end"){switch(W.contentType){case"text":$.publish($.buildEvent("assistant.finished",{text:W.text},Q));break;case"reasoning":$.publish($.buildEvent("reasoning.finished",{reasoning:W.reasoning},Q));break;case"tool":$.publish($.buildEvent("tool.finished",{toolCallId:W.toolCallId,toolName:W.toolName,output:W.output,error:W.error},Q));break}return}if(W.type==="usage"){let J;try{J=await $.sessionHost.getAccumulatedUsage?.(Q)}catch{J=void 0}$.publish($.buildEvent("usage.updated",{sessionId:Q,delta:{inputTokens:W.inputTokens,outputTokens:W.outputTokens,cacheReadTokens:W.cacheReadTokens??0,cacheWriteTokens:W.cacheWriteTokens??0,totalCost:W.cost??0},totals:{inputTokens:W.totalInputTokens,outputTokens:W.totalOutputTokens,cacheReadTokens:W.totalCacheReadTokens??0,cacheWriteTokens:W.totalCacheWriteTokens??0,totalCost:W.totalCost??0},usage:J?.usage,aggregateUsage:J?.aggregateUsage,agent:{kind:Z.payload.teamRole==="teammate"?"teammate":W.parentAgentId?"subagent":"lead",agentId:W.agentId,conversationId:W.conversationId,parentAgentId:W.parentAgentId,teamAgentId:Z.payload.teamAgentId,teamRole:Z.payload.teamRole}},Q));return}if(W.type==="done")$.publish($.buildEvent("agent.done",{reason:W.reason,text:W.text,iterations:W.iterations,usage:W.usage},Q))}async function rx($,Z){let Q=$.suppressNextTerminalEventBySession.get(Z.payload.sessionId),W=Q===Z.payload.reason||Q==="run.start.reply";if(W)$.suppressNextTerminalEventBySession.delete(Z.payload.sessionId);let[J,X]=await Promise.all([o0($,Z.payload.sessionId),t0($,Z.payload.sessionId)]);if(Z.payload.reason==="completed"){let Y=await _U(J);$.publish($.buildEvent("ui.notify",Y,Z.payload.sessionId))}if(W)return;$.publish($.buildEvent(Z.payload.reason==="aborted"?"run.aborted":Z.payload.reason==="error"||Z.payload.reason==="failed"?"run.failed":"run.completed",{reason:Z.payload.reason,...X?{snapshot:X}:{}},Z.payload.sessionId))}import{createSessionId as dU,parseRuntimeConfigExtensions as lU}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as W10,HUB_COMPACTION_CAPABILITY as J10,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as X10,HUB_HOOK_CAPABILITY_PREFIX as Y10,HUB_MISTAKE_LIMIT_CAPABILITY as j10,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as V10,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as H10,isHubToolExecutorName as ix}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as A10,HUB_COMPACTION_CAPABILITY as f10,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as U10,HUB_HOOK_CAPABILITY_PREFIX as D10,HUB_MISTAKE_LIMIT_CAPABILITY as L10,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as _10,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as z10}from"@cline/shared";var nx=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function r2($){return $&&typeof $==="object"&&!Array.isArray($)?JSON.parse(JSON.stringify($)):void 0}function ax($,Z){let Q=typeof $.name==="string"?$.name.trim():"",W=typeof $.description==="string"?$.description:"",J=typeof $.capabilityName==="string"?$.capabilityName.trim():"",X=r2($.inputSchema);if(!Q||!W||!X||!J||Z.has(J))return;return Z.add(J),{kind:"tool",capabilityName:J,name:Q,description:W,inputSchema:X,...r2($.lifecycle)?{lifecycle:r2($.lifecycle)}:{}}}function iY($){if(!Array.isArray($))return[];let Z=[],Q=new Set;for(let W of $){if(!W||typeof W!=="object"||Array.isArray(W))continue;let J=W,X=J.kind,Y=typeof J.capabilityName==="string"?J.capabilityName.trim():"";if(!Y||Q.has(Y))continue;if(X==="tool"){let j=ax(J,Q);if(j)Z.push(j);continue}if(X==="toolExecutor"){let j=J.executor;if(!ix(j))continue;Q.add(Y),Z.push({kind:"toolExecutor",capabilityName:Y,executor:j});continue}if(X==="hook"){let j=typeof J.name==="string"?J.name.trim():"";if(!j)continue;Q.add(Y),Z.push({kind:"hook",capabilityName:Y,name:j});continue}if(X==="compaction"){Q.add(Y),Z.push({kind:"compaction",capabilityName:Y,...r2(J.config)?{config:r2(J.config)}:{}});continue}if(X==="checkpoint"){Q.add(Y),Z.push({kind:"checkpoint",capabilityName:Y,...r2(J.config)?{config:r2(J.config)}:{}});continue}if(X==="mistakeLimit"){Q.add(Y),Z.push({kind:"mistakeLimit",capabilityName:Y});continue}if(X==="userInstructionService")Q.add(Y),Z.push({kind:"userInstructionService",capabilityName:Y})}return Z}function uU($){return{agentId:$.agentId,conversationId:$.conversationId,iteration:$.iteration,metadata:$.metadata}}function sx($){return Object.hasOwn($,"update")?$.update:$}function B9($){return $.trim().replace(/^\/+/,"").toLowerCase()}function ox($){let Z=($??[]).map(B9).filter(Boolean);return Z.length>0?new Set(Z):void 0}function tx($,Z,Q){if(!Q)return!0;let W=B9($),J=B9(Z),X=W.includes(":")?W.split(":").at(-1)??W:W,Y=J.includes(":")?J.split(":").at(-1)??J:J;return Q.has(W)||Q.has(J)||Q.has(X)||Q.has(Y)}function rY($,Z){let Q=ox(Z);return $.records.skill.map((W)=>({id:W.id,name:W.item.name,description:"description"in W.item&&typeof W.item.description==="string"?W.item.description:void 0,disabled:W.item.disabled===!0,skill:W.item})).filter((W)=>tx(W.id,W.name,Q))}function cU($,Z){let Q=async(W,J)=>{let X=B9(W),j=rY($,Z).filter((K)=>K.id===X||B9(K.name)===X||K.id.endsWith(`:${X}`)).filter((K)=>!K.disabled);if(j.length!==1)return j.length>1?`Skill "${W}" is ambiguous. Use one of: ${j.map((K)=>K.id).join(", ")}`:`Skill "${W}" not found.`;let V=j[0].skill,H=J?.trim(),B=H?`
726
+ ${V}`:""}`);let H=ay($);if(F7($))throw Error(`Skill uninstall completed, but ${$.name??$.id} is still present in Cline's global skills directories.`);return{id:$.id,type:"skill",status:"uninstalled",message:`Uninstalled ${$.name??$.id}.`,output:[V,...H.map((B)=>`Removed: ${B}`)].filter(Boolean).join(`
727
+ `)||void 0}}async function f7($,Z={}){let[Q]=cX($),W=Q?.trim()||$.id;if(!W)throw Error("Plugin marketplace uninstalls require a plugin name.");let J=await a5({name:W,workspaceRoot:Z.workspaceRoot});return{id:$.id,type:"plugin",status:"uninstalled",message:`Uninstalled ${$.name??J.name??$.id}.`,output:[`Path: ${J.installPath}`,...J.removedPaths.map((X)=>`Removed: ${X}`)].join(`
728
+ `)}}async function dX($,Z={}){if($.type==="mcp"){let Q=o5($);if(Z.deleteMcpServer)await Z.deleteMcpServer(Q);else K7($,Z);return{id:$.id,type:$.type,status:"uninstalled",message:`Uninstalled ${$.name??Q??$.id}.`}}if($.type==="skill")return A7($,Z);if($.type==="plugin")return f7($,Z);throw Error(`Unsupported marketplace entry type: ${$.type}`)}var zf={};N(zf,{parsePluginSource:()=>M7,isOfficialPluginSlug:()=>q7,installPlugin:()=>aX,collectPluginMcpOAuthCandidates:()=>R7});import{spawn as sy}from"node:child_process";import{createHash as oy}from"node:crypto";import{existsSync as O1,mkdirSync as rX,readdirSync as ty,readFileSync as ey,renameSync as U7,rmSync as _7,statSync as iX}from"node:fs";import{cp as pX,mkdir as Af,writeFile as z7}from"node:fs/promises";import{homedir as jf}from"node:os";import{basename as W$,dirname as Vf,extname as $h,join as n,relative as ff,resolve as v$,sep as Zh}from"node:path";import{isPluginModulePath as L7,resolveClineDir as Qh,resolvePluginModuleEntries as Wh}from"@cline/shared/storage";var M4="_installed",T7="package",Jh="https://github.com/cline/plugins.git",Hf=30000,D7=10485760,Bf="@cline/",Xh=["dependencies","devDependencies","optionalDependencies","peerDependencies"],Yh={name:"cline-installed-plugin",private:!0,cline:{plugins:[]}};function O7($){if($==="~")return jf();if($.startsWith("~/"))return n(jf(),$.slice(2));return $}function Uf($){return $.split(Zh).join("/")}function d2($){return oy("sha256").update($).digest("hex").slice(0,12)}function jh($){let Z=0;while(Z<$.length&&$[Z]==="-")Z++;let Q=$.length;while(Q>Z&&$[Q-1]==="-")Q--;return $.slice(Z,Q)}function Q$($){let Z="",Q=!1,W=$.startsWith("@")?$.slice(1):$;for(let X of W.slice(0,256)){if(X>="a"&&X<="z"||X>="A"&&X<="Z"||X>="0"&&X<="9"||X==="."||X==="_"||X==="-")Z+=X,Q=X==="-";else if(!Q)Z+="-",Q=!0;if(Z.length>=80)break}return jh(Z)||"plugin"}function q7($){return/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test($.trim())}function Vh($){return $?.trim()||Jh}function Gf($){let Q=$.trim().match(/^(@?[^@/]+(?:\/[^@/]+)?)(?:@.+)?$/);if(!Q?.[1])throw Error(`Invalid npm plugin source: npm:${$}`);return{name:Q[1]}}function Hh($){if($.startsWith(".")||$.startsWith("/")||$==="~"||$.startsWith("~/")||/^[A-Za-z]:[\\/]|^\\\\/.test($))return!1;let[Z,...Q]=$.split("/");return!!Z&&Q.length>=2&&Z.includes(".")&&!Z.startsWith(".")&&!Z.endsWith(".")}function Bh($){let Z=$.match(/^git@([^:]+):(.+)$/);if(Z){let Y=Z[2]??"",j=Y.indexOf("@");if(j<0)return{repo:$};return{repo:`git@${Z[1]}:${Y.slice(0,j)}`,ref:Y.slice(j+1)||void 0}}if($.includes("://"))try{let Y=new URL($),j=Y.pathname.replace(/^\/+/,""),V=j.indexOf("@");if(V<0)return{repo:$};return Y.pathname=`/${j.slice(0,V)}`,{repo:Y.toString().replace(/\/$/,""),ref:j.slice(V+1)||void 0}}catch{return{repo:$}}let Q=$.indexOf("/");if(Q<0)return{repo:$};let W=$.slice(0,Q),J=$.slice(Q+1),X=J.indexOf("@");if(X<0)return{repo:$};return{repo:`${W}/${J.slice(0,X)}`,ref:J.slice(X+1)||void 0}}function Gh($){try{return decodeURIComponent($)}catch{return $}}function Kh($){return W$(Gh($))||"plugin"}function Fh($){let Z=$.split("/").filter(Boolean);return Z.length>=5&&(Z[2]==="blob"||Z[2]==="raw")}function Kf($){if(!/^https?:\/\//i.test($))return null;let Z;try{Z=new URL($)}catch{return null}let Q=Z.hostname.toLowerCase(),W=Kh(Z.pathname),J=L7(W),X=(Q==="github.com"||Q==="www.github.com")&&Fh(Z.pathname);if(Z.protocol!=="https:"){if(X||Q==="raw.githubusercontent.com"||J)throw Error(`Remote plugin file URLs must use https: ${$}`);return null}if(Q==="github.com"||Q==="www.github.com"){let Y=Z.pathname.split("/").filter(Boolean);if(!X)return null;if(!J)throw Error(`Remote plugin file must be .js or .ts: ${$}`);return{type:"remote",url:`https://raw.githubusercontent.com/${[Y[0],Y[1],...Y.slice(3)].join("/")}`,filename:W}}if(Q==="raw.githubusercontent.com"){if(!J)throw Error(`Remote plugin file must be .js or .ts: ${$}`);return{type:"remote",url:Z.toString(),filename:W}}if(!J)return null;return{type:"remote",url:Z.toString(),filename:W}}function Ff($,Z={}){let Q=$.trim(),W=Q.startsWith("git:")&&!Q.startsWith("git://"),J=W?Q.slice(4).trim():Q;if(!Z.force&&!W&&!/^(https?|ssh|git):\/\//i.test(J))return null;let{repo:X,ref:Y}=Bh(J),j="",V="";if(X.startsWith("git@")){let G=X.match(/^git@([^:]+):(.+)$/);j=G?.[1]??"",V=G?.[2]??""}else if(/^(https?|ssh|git):\/\//i.test(X)){let G=new URL(X);j=G.hostname,V=G.pathname.replace(/^\/+/,"")}else{let G=X.indexOf("/");if(G<0)return null;j=X.slice(0,G),V=X.slice(G+1)}let H=V.replace(/\.git$/,"").replace(/^\/+/,"");if(!j||!H||H.split("/").length<2)return null;return{type:"git",repo:X.startsWith("git@")||/^(https?|ssh|git):\/\//i.test(X)?X:`https://${X}`,ref:Y,host:j,path:H}}function M7($,Z){let Q=$.trim();if(!Q)throw Error("plugin install requires a source");if(Z==="npm"){let Y=Q.startsWith("npm:")?Q.slice(4).trim():Q,{name:j}=Gf(Y);return{type:"npm",spec:Y,name:j}}if(Z==="git"){let Y=Ff(Q,{force:!0});if(!Y)throw Error(`Invalid git plugin source: ${$}`);return Y}if(Z==="local")return{type:"local",path:$};if(Z==="remote"){let Y=Kf(Q);if(!Y)throw Error(`Invalid remote plugin source: ${$}`);return Y}if(Q.startsWith("npm:")){let Y=Q.slice(4).trim(),{name:j}=Gf(Y);return{type:"npm",spec:Y,name:j}}if(Q.startsWith(".")||Q.startsWith("/")||Q==="~"||Q.startsWith("~/")||/^[A-Za-z]:[\\/]|^\\\\/.test(Q))return{type:"local",path:$};let J=Kf(Q);if(J)return J;let X=Ff(Q);if(X)return X;if(q7(Q))return{type:"official",slug:Q};if(Hh(Q))throw Error(`Unrecognized plugin source "${$}". Use --git for hostname-style repositories or pass an explicit local path such as ./github.com/owner/repo.`);return{type:"local",path:$}}function Ah($){return $?n($,".cline","plugins"):n(Qh(),"plugins")}function fh($,Z,Q){if(Z.type==="npm")return n($,M4,"npm",`${Q$(Z.name)}-${d2(Q)}`);if(Z.type==="git")return n($,M4,"git",Q$(Z.host),`${Q$(Z.path)}-${d2(Q)}`);if(Z.type==="remote")return n($,M4,"remote",`${Q$(Z.filename)}-${d2(Q)}`);if(Z.type==="official")return n($,M4,"official",`${Q$(Z.slug)}-${d2(Q)}`);return n($,M4,"local",`${Q$(W$(O7(Z.path)))}-${d2(Q)}`)}function Uh($,Z,Q){if($.type==="npm")return`npm:${$.spec}`;if($.type==="git")return`git:${$.repo}${$.ref?`#${$.ref}`:""}`;if($.type==="remote")return`remote:${$.url}`;if($.type==="official")return`official:${Q}#plugins/${$.slug}`;return`local:${v$(Z,O7($.path))}`}function Dh($,Z){if($.type==="npm")return $.name;if($.type==="git")return Q$(W$($.path));if($.type==="remote")return Q$(W$($.filename,$h($.filename)));if($.type==="official")return $.slug;return Q$(W$(v$(Z,O7($.path))))}async function R4($,Z,Q={}){await new Promise((W,J)=>{let X=sy($,Z,{cwd:Q.cwd,stdio:["ignore","ignore","pipe"],env:process.env,windowsHide:!0}),Y="";X.stderr.on("data",(j)=>{Y+=String(j)}),X.on("error",J),X.on("close",(j)=>{if(j===0){W();return}let V=Y.trim();J(Error(`${$} ${Z.join(" ")} failed with exit code ${j}${V?`: ${V}`:""}`))})})}function Df($){let Z=n($,"package.json");if(!O1(Z))return null;try{return JSON.parse(ey(Z,"utf8"))}catch{return null}}function Lh($){let Z=$?.cline?.plugins;if(!Array.isArray(Z))return[];return Z.flatMap((Q)=>{if(typeof Q==="string")return[Q];return Q.paths??[]})}async function _h($){let Z=n($,"package.json"),Q=Df($);if(!Q)return;let W=!1;for(let J of Xh){let X=Q[J];if(!X||typeof X!=="object")continue;for(let Y of Object.keys(X)){if(!Y.startsWith(Bf))continue;delete X[Y],delete Q.peerDependenciesMeta?.[Y],W=!0}if(Object.keys(X).length===0)delete Q[J]}if(Q.peerDependenciesMeta){for(let J of Object.keys(Q.peerDependenciesMeta)){if(!J.startsWith(Bf))continue;delete Q.peerDependenciesMeta[J],W=!0}if(Object.keys(Q.peerDependenciesMeta).length===0)delete Q.peerDependenciesMeta}if(!W)return;await z7(Z,`${JSON.stringify(Q,null,2)}
729
+ `,"utf8")}function zh($,Z){let Q=n($,"node_modules","@cline");if(!O1(Q))return;for(let W of _f(Q)){if(`@cline/${W.name}`===Z)continue;_7(n(Q,W.name),{recursive:!0,force:!0})}}function Lf($){let Z=Lh(Df($)).map((X)=>v$($,X)).filter((X)=>O1(X)&&iX(X).isFile()&&L7(X));if(Z.length>0)return Z;let Q=Wh($);if(Q?.length)return Q;let W=[],J=[$];while(J.length>0){let X=J.pop();if(!X)continue;for(let Y of _f(X)){let j=n(X,Y.name);if(Y.name==="node_modules"||Y.name===".git")continue;if(Y.isDirectory()){J.push(j);continue}if(Y.isFile()&&!Y.name.startsWith(".")&&L7(j))W.push(j)}}return W.sort((X,Y)=>X.localeCompare(Y))}function _f($){try{return ty($,{withFileTypes:!0})}catch{return[]}}function Th($,Z){let Q=Lf(Z);if(Q.length===0)throw Error(`No plugin entry files found in ${Z}`);return Q.map((W)=>`./${Uf(ff($,W))}`)}async function Oh($,Z,Q){let W=Th($,Z);return await z7(n($,"package.json"),JSON.stringify({...Yh,name:Q,cline:{plugins:[{paths:W}]}},null,2),"utf8"),W}async function qh($,Z,Q){let W=n(Z,T7);return await Af(W,{recursive:!0}),await z7(n(W,"package.json"),JSON.stringify({name:"cline-plugin-install",private:!0},null,2),"utf8"),await R4(Q,["install",$.spec,"--prefix",W,"--omit=dev","--omit=peer","--legacy-peer-deps","--no-audit","--no-fund","--package-lock=false"]),zh(W,$.name),n(W,"node_modules",$.name)}async function nX($,Z){if(!O1(n($,"package.json")))return;await _h($),await R4(Z,["install","--omit=dev","--omit=peer","--legacy-peer-deps","--no-audit","--no-fund","--package-lock=false"],{cwd:$})}async function Mh($,Z,Q){if($.ref?.startsWith("-"))throw Error(`Invalid git ref "${$.ref}".`);let W=n(Z,T7),J=["clone","--filter=blob:none"];if($.ref)J.push("--branch",$.ref);J.push("--",$.repo,W);try{await R4("git",J)}catch(X){if(!$.ref)throw X;await R4("git",["clone","--filter=blob:none","--",$.repo,W]),await R4("git",["checkout","--detach",$.ref],{cwd:W})}return await nX(W,Q),W}async function Rh($,Z,Q,W){let J=n(Z,"repo");await R4("git",["clone","--filter=blob:none","--depth","1","--",W,J]);let X=n(J,"plugins",$.slug);if(!O1(X)||!iX(X).isDirectory())throw Error(`Official Cline plugin "${$.slug}" was not found at plugins/${$.slug} in ${W}`);let Y=n(Z,T7);return await pX(X,Y,{recursive:!0,filter:(j)=>{let V=W$(j);return V!==".git"&&V!=="node_modules"}}),_7(J,{recursive:!0,force:!0}),await nX(Y,Q),Y}function lX($){return Error(`Remote plugin file from ${$} exceeds the ${D7} byte limit`)}function Eh($){let Z=$.headers.get("content-length");if(!Z)return;let Q=Number(Z);if(!Number.isFinite(Q)||Q<0)return;return Q}async function Nh($,Z){let Q=Eh($);if(Q!==void 0&&Q>D7)throw lX(Z);if(!$.body){let Y=Buffer.from(await $.text(),"utf8");if(Y.byteLength>D7)throw lX(Z);return Y}let W=$.body.getReader(),J=[],X=0;try{while(!0){let{done:Y,value:j}=await W.read();if(Y)break;let V=Buffer.from(j);if(X+=V.byteLength,X>D7)throw await W.cancel().catch(()=>{return}),lX(Z);J.push(V)}return Buffer.concat(J,X)}finally{W.releaseLock()}}async function wh($,Z){let Q=new AbortController,W=setTimeout(()=>{Q.abort()},Hf);try{let J=await fetch($.url,{signal:Q.signal});if(!J.ok){let Y=J.statusText?` ${J.statusText}`:"";throw Error(`Failed to download plugin file from ${$.url}: ${J.status}${Y}`)}let X=await Nh(J,$.url);return rX(Z,{recursive:!0}),await z7(n(Z,$.filename),X),Z}catch(J){if(J instanceof Error&&J.name==="AbortError")throw Error(`Timed out downloading plugin file from ${$.url} after ${Hf}ms`);throw J}finally{clearTimeout(W)}}async function Ch($,Z,Q,W){let J=v$(Q,O7($.path));if(!O1(J))throw Error(`Plugin source path does not exist: ${J}`);let X=iX(J);if(X.isFile()){if(!L7(J))throw Error(`Plugin file must be .js or .ts: ${J}`);rX(Z,{recursive:!0});let j=n(Z,W$(J));return await pX(J,j),Z}if(!X.isDirectory())throw Error(`Plugin source must be a file or directory: ${J}`);let Y=n(Z,T7);return await pX(J,Y,{recursive:!0,filter:(j)=>{let V=W$(j);return V!==".git"&&V!=="node_modules"}}),await nX(Y,W),Y}function Ph($,Z){if(O1($)&&!Z)throw Error(`Plugin is already installed at ${$}. Use --force to replace it.`)}function Sh($,Z,Q){if(rX(Vf(Z),{recursive:!0}),!O1(Z)){U7($,Z);return}if(!Q)throw Error(`Plugin is already installed at ${Z}. Use --force to replace it.`);let W=n(Vf(Z),`.replace-${W$(Z)}-${Date.now()}-${process.pid}-${d2(`${Z}:${Math.random()}`)}`);U7(Z,W);try{U7($,Z)}catch(J){if(!O1(Z)&&O1(W))U7(W,Z);throw J}try{_7(W,{recursive:!0,force:!0})}catch{}}function bh($){let Z=$.transport;if(Z.type==="stdio")return!1;return Z.headers!==void 0&&Object.keys(Z.headers).length>0}function yh($){let Z=$.oauth?.tokens?.access_token;return typeof Z==="string"&&Z.trim().length>0}function hh($){let Z=$.metadata;if(!Z||Z.source!=="plugin"||typeof Z.pluginName!=="string"||typeof Z.pluginPath!=="string")return;return{pluginName:Z.pluginName,pluginPath:Z.pluginPath}}function R7($){let Z=new Set($.pluginPaths.map((J)=>v$(J)));if(Z.size===0)return[];let Q;try{Q=p0({filePath:$.settingsPath??Z0()})}catch{return[]}let W=[];for(let J of Q){let X=hh(J);if(!X||!Z.has(v$(X.pluginPath)))continue;let Y=J.transport.type;if(Y==="stdio")continue;if(bh(J)||yh(J))continue;W.push({name:J.name,pluginName:X.pluginName,pluginPath:X.pluginPath,transportType:Y,lastError:J.oauth?.lastError})}return W.sort((J,X)=>J.name.localeCompare(X.name))}async function aX($){let Z=$.source.trim(),Q=M7(Z,$.sourceType),W=$.cwd?.trim(),J=W?v$(W):process.cwd(),X=Ah(W?J:void 0),Y=Vh($.officialPluginsRepo),j=Uh(Q,J,Y),V=fh(X,Q,j),H=Dh(Q,J),B=n(X,M4,".tmp"),G=n(B,`${Date.now()}-${process.pid}-${d2(`${Z}:${Math.random()}`)}`),K=$.npmCommand??(process.env.CLINE_NPM_COMMAND?.trim()||"npm"),F=$.force===!0;Ph(V,F),await Af(B,{recursive:!0});let A;try{if(Q.type==="npm")A=await qh(Q,G,K);else if(Q.type==="git")A=await Mh(Q,G,K);else if(Q.type==="official")A=await Rh(Q,G,K,Y);else if(Q.type==="remote")A=await wh(Q,G);else A=await Ch(Q,G,J,K);let L=(Q.type==="local"||Q.type==="remote")&&A===G?Lf(G).map((U)=>`./${Uf(ff(G,U))}`):await Oh(G,A,H);if(L.length===0)throw Error(`No plugin entry files found for ${Z}`);Sh(G,V,F);let f={source:Z,installPath:V,entryPaths:L.map((U)=>v$(V,U)),mcpSyncFailures:[],mcpOAuthCandidates:[]},D=await i5({pluginPaths:f.entryPaths,cwd:J,workspacePath:J});return f.mcpSyncFailures=D.failures,f.mcpOAuthCandidates=R7({pluginPaths:f.entryPaths}),f}catch(L){throw _7(G,{recursive:!0,force:!0}),L}}var cf={};N(cf,{updateLocalProvider:()=>y7,saveLocalProviderSettings:()=>WY,saveLocalProviderOAuthCredentials:()=>jY,resolveLocalClineAuthToken:()=>HY,refreshProviderModelsFromSource:()=>JY,normalizeOAuthProvider:()=>XY,loginLocalProvider:()=>YY,loginAndSaveLocalProviderOAuthCredentials:()=>VY,listLocalProviders:()=>ZY,getLocalProviderModels:()=>QY,ensureCustomProvidersLoaded:()=>P7,deleteLocalProvider:()=>h7,addLocalProvider:()=>$Y});import*as w0 from"@cline/llms";import{existsSync as kh,mkdirSync as Ih,readFileSync as xh,writeFileSync as gh}from"node:fs";import{mkdir as mh,readFile as vh,writeFile as ch}from"node:fs/promises";import{dirname as sX,join as uh}from"node:path";import*as h0 from"@cline/llms";import{ModelCapabilitySchema as dh,ProviderCapabilitySchema as lh,ProviderClientSchema as ph,ProviderProtocolSchema as rh}from"@cline/shared";import{z as a}from"zod";var ih=a.object({id:a.string().optional(),name:a.string().optional(),maxTokens:a.number().optional(),contextWindow:a.number().optional(),maxInputTokens:a.number().optional(),capabilities:a.array(dh).optional(),supportsVision:a.boolean().optional(),supportsAttachments:a.boolean().optional(),supportsReasoning:a.boolean().optional()}).passthrough(),nh=a.object({name:a.string(),baseUrl:a.string(),defaultModelId:a.string().optional(),protocol:rh.optional(),client:ph.optional(),capabilities:a.array(lh).optional(),modelsSourceUrl:a.string().optional()}).passthrough(),Tf=a.object({provider:nh.optional(),models:a.record(a.string(),ih).optional()}).passthrough(),Of=a.object({version:a.literal(1),providers:a.record(a.string(),Tf)}),ah=a.object({version:a.literal(1),providers:a.record(a.string(),a.unknown())}),E7=new Set;function qf($){return $.split(/[-_]/).filter(Boolean).map((Z)=>Z.charAt(0).toUpperCase()+Z.slice(1)).join(" ")}function l2($){return uh(sX($.getFilePath()),"models.json")}function N7(){return{version:1,providers:{}}}function Mf($){let Z=ah.safeParse($);if(!Z.success)return N7();let Q={};for(let[W,J]of Object.entries(Z.data.providers)){let X=Tf.safeParse(J);if(X.success)Q[W]=X.data}return{version:1,providers:Q}}function oX($){if(!kh($))return N7();try{let Z=xh($,"utf8");return Mf(JSON.parse(Z))}catch{}return N7()}async function E4($){try{let Z=await vh($,"utf8");return Mf(JSON.parse(Z))}catch{}return N7()}function Rf($,Z){Ih(sX($),{recursive:!0});let Q=Of.parse(Z);gh($,`${JSON.stringify(Q,null,2)}
730
+ `,"utf8")}async function w7($,Z){await mh(sX($),{recursive:!0});let Q=Of.parse(Z);await ch($,`${JSON.stringify(Q,null,2)}
731
+ `,"utf8")}function Ef($,Z){return{id:$,name:Z.name??$,supportsAttachments:Z.capabilities?.includes("files"),supportsVision:Z.capabilities?.includes("images"),supportsReasoning:Z.capabilities?.includes("reasoning")||Z.thinkingConfig!=null}}function Nf($){if(!$||$.length===0)return;let Z=new Set;if($.includes("reasoning"))Z.add("reasoning");if($.includes("prompt-cache"))Z.add("prompt-cache");if($.includes("tools"))Z.add("tools");return Z.size>0?[...Z]:void 0}function wf($){let Z=new Set;if(!$||$.length===0)return[...Z];if($.includes("streaming"))Z.add("streaming");if($.includes("tools"))Z.add("tools");if($.includes("reasoning"))Z.add("reasoning");if($.includes("prompt-cache"))Z.add("prompt-cache");if($.includes("vision"))Z.add("images"),Z.add("files");return[...Z]}function sh($){return $!=null&&typeof $.name==="string"&&typeof $.baseUrl==="string"}function Cf($,Z){return $??Z??"openai-chat"}function Pf($,Z,Q){return $??Q??(Z==="openai-responses"?"openai":"openai-compatible")}function Sf($,Z,Q){let W=new Set(Z?.capabilities??Q??[]);if(Z?.supportsVision)W.add("images");if(Z?.supportsAttachments)W.add("files");if(Z?.supportsReasoning)W.add("reasoning");return{id:$,name:Z?.name??$,maxTokens:Z?.maxTokens,contextWindow:Z?.contextWindow,maxInputTokens:Z?.maxInputTokens,capabilities:W.size>0?[...W]:void 0}}function oh($,Z){for(let[Q,W]of Object.entries(Z??{})){let J=W.id?.trim()||Q.trim();if(!J)continue;h0.registerModel($,J,Sf(J,W))}}function th($,Z,Q){return{...Z??{},id:$,name:Z?.name??$,capabilities:Z?.capabilities??Q}}function eh($){return Object.assign({},...h0.resolveProviderModelCatalogKeys($).map((Q)=>h0.getGeneratedModelsForProvider(Q)))}function $k($){let Z=$.provider.trim();if(!Z||h0.isBuiltInProviderId(Z))return;let Q=$.baseUrl?.trim();if(!Q)return;let W=h0.MODEL_COLLECTIONS_BY_PROVIDER_ID[Z],J=eh(Z),X=wf($.capabilities),Y=X.length>0?X:void 0,j=$.model?.trim(),V={...J,...W?.models??{}};if(j)V[j]=th(j,V[j],Y);let H=Object.keys(V).filter(Boolean),B=j||H[0];if(!B)return;let G=Cf($.protocol,W?.provider.protocol),K=Pf($.client,G,W?.provider.client);h0.registerProvider({provider:{id:Z,name:W?.provider.name??qf(Z),description:W?.provider.description,protocol:G,client:K,baseUrl:Q,modelsSourceUrl:W?.provider.modelsSourceUrl,defaultModelId:B,capabilities:Nf($.capabilities)??W?.provider.capabilities,source:"file"},models:V})}function C7($){for(let Z of Object.values($.providers))$k(Z.settings)}function Z9($,Z){let Q=Z.models??{};if(!sh(Z.provider)){oh($,Q);return}let W=wf(Z.provider.capabilities),J=Object.entries(Q).map(([H,B])=>({id:B.id?.trim()||H.trim(),model:B})).filter(({id:H})=>H.length>0),X=Z.provider.defaultModelId?.trim()||J[0]?.id||"default",Y=Cf(Z.provider.protocol,void 0),j=Pf(Z.provider.client,Y,void 0),V=Object.fromEntries(J.map(({id:H,model:B})=>[H,{...Sf(H,B,W.length>0?W:void 0),status:"active"}]));h0.registerProvider({provider:{id:$,name:Z.provider.name.trim()||qf($),protocol:Y,client:j,baseUrl:Z.provider.baseUrl,modelsSourceUrl:Z.provider.modelsSourceUrl,defaultModelId:X,capabilities:Nf(Z.provider.capabilities),source:"file"},models:V})}function bf($){let Z=l2($);if(E7.has(Z))return;let Q=oX(Z);for(let[W,J]of Object.entries(Q.providers))Z9(W,J);E7.add(Z)}async function P7($){let Z=l2($);if(E7.has(Z))return;let Q=await E4(Z);for(let[W,J]of Object.entries(Q.providers))Z9(W,J);E7.add(Z)}var hf="cline-pass";function Zk($){return $.apiKey??$.auth?.apiKey}function Qk($){return($.auth?.accessToken?.trim()??"").length>0}function kf($){return $.split(/[-_]/).filter(Boolean).map((Z)=>Z.charAt(0).toUpperCase()+Z.slice(1)).join(" ")}function Wk($){let Z=$.split(/\s+/).filter(Boolean);if(Z.length===0)return"?";if(Z.length===1)return Z[0].slice(0,2).toUpperCase();return`${Z[0][0]}${Z[1][0]}`.toUpperCase()}function Jk($){let Z=["#c4956a","#6b8aad","#e8963a","#5b9bd5","#6bbd7b","#9b7dd4","#d07f68","#57a6a1"],Q=0;for(let W of $)Q=Q*31+W.charCodeAt(0)>>>0;return Z[Q%Z.length]}function If($){return Object.entries($).sort(([Z],[Q])=>Z.localeCompare(Q)).map(([Z,Q])=>Ef(Z,Q))}async function Xk($,Z){let Q=await w0.getModelsForProvider($),W=$===hf;if(!Z&&!W)return Q;let J=await Z5($,{loadLatestOnInit:W,loadPrivateOnAuth:!0,failOnError:!1},Z);if($==="litellm"&&J?.knownModels)return J.knownModels;if(W&&J?.knownModels)return J.knownModels;return J?.knownModels?{...Q,...J.knownModels}:Q}function tX($){return[...new Set(($??[]).map((Z)=>Z.trim()).filter(Boolean))]}function Yk($){if(!$?.length)return;return[...new Set($)]}function jk($,Z){return Yk([...$??[],...Z??[]])}function Vk($){let Z=$?.popularRank;return typeof Z==="number"&&Number.isFinite(Z)?Z:Number.MAX_SAFE_INTEGER}function Hk($){if(!$||typeof $!=="object")return!1;let Z=$;return typeof Z.path==="string"&&Z.path.trim().length>0&&typeof Z.label==="string"&&Z.label.trim().length>0&&["text","password","url","number","select","boolean"].includes(String(Z.type))}function Bk($){let Z=$?.configFields;if(!Array.isArray(Z))return;return Z.filter(Hk)}var S7={path:"apiKey",label:"API Key",type:"password",placeholder:"Enter API key...",description:"API key issued by the provider.",secret:!0},yf={path:"baseUrl",label:"Base URL",type:"url",placeholder:"https://...",description:"Base endpoint used for provider requests."};function Gk($){if(!$)return[S7];if($.source!=="system")return $.baseUrl?[S7,yf]:[S7];let Z=[];if($.env?.length)Z.push(S7);if($.baseUrl)Z.push(yf);return Z}function Kk($,Z){return Z.split(".").reduce((Q,W)=>{if(!Q||typeof Q!=="object")return;return Q[W]},$)}function Fk($){if(typeof $==="string"||typeof $==="number"||typeof $==="boolean"||$===null)return $;return}function Ak($,Z,Q){if(!$?.length)return;let W={};for(let J of $){let Y=Fk(J.path==="baseUrl"&&Z?.baseUrl===void 0?Q?.baseUrl:Kk(Z,J.path))??J.defaultValue;if(Y!==void 0)W[J.path]=Y}return W}function xf($){let Z=Object.entries($??{}).filter(([Q])=>Q.trim().length>0);return Z.length>0?Object.fromEntries(Z):void 0}function eX($,Z){let Q=Z?.includes("vision")??!1,W=Z?.includes("reasoning")??!1;return Object.fromEntries($.map((J)=>[J,{id:J,name:J,supportsVision:Q,supportsAttachments:Q,supportsReasoning:W}]))}async function gf($){if(!$.shouldRecompute)return $.fallbackModelIds??[];let Z=$.modelsSourceUrl?await iZ($.modelsSourceUrl,$.providerId):[];return[...new Set([...$.explicitModels??[],...Z])]}function mf($,Z){let Q=$.read(),W=!1;if(Q.providers[Z])delete Q.providers[Z],W=!0;if(Q.lastUsedProvider===Z)delete Q.lastUsedProvider,W=!0;if(W)$.write(Q);w0.unregisterProvider(Z)}async function $Y($,Z){let Q=Z.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let W=Z.baseUrl.trim(),J=Z.apiKey?.trim()??"";if(!W&&!J){let A=l2($);if((await E4(A)).providers[Q]){let f=await h7($,{providerId:Q});return{providerId:Q,settingsPath:f.settingsPath,modelsPath:f.modelsPath,modelsCount:0}}return mf($,Q),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:A,modelsCount:0}}if(w0.hasProvider(Q))throw Error(`provider "${Q}" already exists`);let X=Z.name.trim();if(!X)throw Error("name is required");if(!W)throw Error("baseUrl is required");let Y=tX(Z.models),j=Z.modelsSourceUrl?.trim(),V=await gf({providerId:Q,explicitModels:Y,modelsSourceUrl:j,shouldRecompute:!0});if(V.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let H=Z.defaultModelId?.trim()&&V.includes(Z.defaultModelId.trim())?Z.defaultModelId.trim():V[0],B=Z.capabilities?.length?[...new Set(Z.capabilities)]:void 0,G=xf(Z.headers);$.saveProviderSettings({provider:Q,apiKey:J||void 0,baseUrl:W,headers:G,timeout:Z.timeoutMs,model:H,protocol:Z.protocol,client:Z.client},{setLastUsed:!1});let K=l2($),F=await E4(K);return F.providers[Q]={provider:{name:X,baseUrl:W,defaultModelId:H,protocol:Z.protocol,client:Z.client,capabilities:B,modelsSourceUrl:j},models:eX(V,B)},await w7(K,F),Z9(Q,F.providers[Q]),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:K,modelsCount:V.length}}async function y7($,Z){let Q=Z.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let W=l2($),J=await E4(W),X=J.providers[Q];if(!X){let q=$.getProviderSettings(Q);if(!q)throw Error(`provider "${Q}" does not exist`);let z=Z.modelsSourceUrl?.trim(),_=tX(Z.models)[0]??q.model?.trim();if(!_&&!z)throw Error(`provider "${Q}" cannot be updated because no model is configured`);X={provider:{name:Z.name?.trim()||kf(Q),baseUrl:Z.baseUrl?.trim()??q.baseUrl?.trim()??"",defaultModelId:_,protocol:q.protocol,client:q.client,capabilities:q.capabilities},models:_?eX([_],q.capabilities):{}}}if(!X.provider)throw Error(`provider "${Q}" cannot be updated because it is a model overlay (no provider metadata)`);let Y=Z.name?.trim()??X.provider.name.trim();if(!Y)throw Error("name is required");let j=Z.baseUrl?.trim()??X.provider.baseUrl.trim();if(!j)throw Error("baseUrl is required");let V=Z.capabilities===void 0?X.provider.capabilities:Z.capabilities===null?void 0:[...new Set(Z.capabilities)],H=Z.protocol===void 0?X.provider.protocol:Z.protocol??void 0,B=Z.client===void 0?X.provider.client:Z.client??void 0,G=tX(Z.models),K=Z.modelsSourceUrl===void 0?X.provider.modelsSourceUrl:Z.modelsSourceUrl?.trim()||void 0,F=Z.models!==void 0||Z.modelsSourceUrl!==void 0&&!!K,A=Object.keys(X.models??{}).map((q)=>q.trim()).filter(Boolean),L=await gf({providerId:Q,explicitModels:G,modelsSourceUrl:K,fallbackModelIds:A,shouldRecompute:F});if(L.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let f=Z.defaultModelId===void 0?X.provider.defaultModelId?.trim():Z.defaultModelId?.trim(),D=f&&L.includes(f)?f:L[0],T={...$.getProviderSettings(Q)??{},provider:Q,baseUrl:j,model:D};if(H)T.protocol=H;else delete T.protocol;if(B)T.client=B;else delete T.client;if(Z.apiKey!==void 0){let q=Z.apiKey?.trim()??"";if(q)T.apiKey=q;else delete T.apiKey}if(Z.headers!==void 0){let q=xf(Z.headers);if(q)T.headers=q;else delete T.headers}if(Z.timeoutMs!==void 0)if(typeof Z.timeoutMs==="number")T.timeout=Z.timeoutMs;else delete T.timeout;return $.saveProviderSettings(T,{setLastUsed:!1}),J.providers[Q]={provider:{name:Y,baseUrl:j,defaultModelId:D,protocol:H,client:B,capabilities:V,modelsSourceUrl:K},models:eX(L,V)},await w7(W,J),Z9(Q,J.providers[Q]),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:W,modelsCount:L.length}}async function h7($,Z){let Q=Z.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let W=l2($),J=await E4(W);if(!J.providers[Q])throw Error(`provider "${Q}" does not exist`);return delete J.providers[Q],await w7(W,J),w0.unregisterProvider(Q),mf($,Q),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:W}}async function ZY($,Z={}){let Q=$.read(),W=w0.getProviderIds(),J=await Promise.all(W.map(async(Y)=>{let[j,V]=await Promise.all([w0.getProvider(Y),w0.getModelsForProvider(Y)]),H=If(V),B=Q.providers[Y]?.settings,G=j?.name??kf(Y),K=jk(j?.capabilities,B?.capabilities),F=Bk(j?.metadata)??Gk(j);return{provider:{id:Y,name:G,models:H.length,color:Jk(Y),letter:Wk(G),enabled:Boolean(B),apiKey:B?Zk(B):void 0,oauthAccessTokenPresent:B?Qk(B):void 0,baseUrl:B?.baseUrl??j?.baseUrl,defaultModelId:j?.defaultModelId,protocol:B?.protocol??j?.protocol,client:B?.client??j?.client,capabilities:K,authDescription:"This provider uses API keys for authentication.",baseUrlDescription:"The base endpoint to use for provider requests.",configFields:F,configValues:Ak(F,B,j),modelList:H},rank:Vk(j?.metadata)}}));J.sort((Y,j)=>{if(Y.rank!==j.rank)return Y.rank-j.rank;return Y.provider.name.localeCompare(j.provider.name)||Y.provider.id.localeCompare(j.provider.id)});let X=J.map((Y)=>Y.provider);if(Z.isClinePassEnabled!==!0)X=X.filter((Y)=>Y.id!==hf);return{providers:X,settingsPath:$.getFilePath()}}async function QY($,Z){let Q=$.trim(),W=await Xk(Q,Z),J=If(W);return{providerId:Q,models:J}}function b7($){return $!=null&&typeof $==="object"&&!Array.isArray($)}function vf($,Z){if(!b7(Z))return b7($)?{...$}:void 0;let Q=b7($)?{...$}:{};for(let[W,J]of Object.entries(Z)){if(J==null||J===""){delete Q[W];continue}if(b7(J)){let X=vf(Q[W],J);if(X&&Object.keys(X).length>0)Q[W]=X;else delete Q[W];continue}Q[W]=J}return Object.keys(Q).length>0?Q:void 0}function WY($,Z){let Q=Z.providerId.trim();if(Z.enabled===!1){let X=$.read();if(delete X.providers[Q],X.lastUsedProvider===Q)delete X.lastUsedProvider;return $.write(X),{providerId:Q,enabled:!1,settingsPath:$.getFilePath()}}let J={...$.getProviderSettings(Q)??{},provider:Q};for(let X of["apiKey","baseUrl","model","region"])if(Object.hasOwn(Z,X)&&typeof Z[X]==="string")if(Z[X].trim().length===0)delete J[X];else J[X]=Z[X];for(let X of["maxTokens","contextWindow","timeout","apiLine","protocol","client","routingProviderId","capabilities"])if(Object.hasOwn(Z,X))J[X]=Z[X];for(let X of["auth","headers","reasoning","aws","gcp","azure","sap","oca"])if(Object.hasOwn(Z,X)&&Z[X]!=null){let Y=vf(J[X],Z[X]);if(Y)J[X]=Y;else delete J[X]}return $.saveProviderSettings(J,{setLastUsed:!1}),{providerId:Q,enabled:!0,settingsPath:$.getFilePath()}}async function JY($,Z){let Q=Z.trim(),W=$.getProviderSettings(Q),X=w0.MODEL_COLLECTIONS_BY_PROVIDER_ID[Q]?.provider,Y=W?.baseUrl?.trim()||X?.baseUrl?.trim(),j=nZ(Y,X?.baseUrl,X?.modelsSourceUrl);if(!W||!X||!Y||!j)return{providerId:Q,refreshed:!1};let V=await y7($,{providerId:Q,name:X.name,baseUrl:Y,apiKey:W.apiKey,headers:W.headers??null,timeoutMs:W.timeout??null,modelsSourceUrl:j,protocol:W.protocol??X.protocol??null,client:W.client??X.client??null,capabilities:W.capabilities??null});return{providerId:Q,refreshed:!0,modelsCount:V.modelsCount}}function XY($){let Z=$.trim().toLowerCase(),Q=j0(Z);if(Q)return Q.providerId;throw Error(`provider "${$}" does not support OAuth login`)}async function YY($,Z,Q,W){let J=j0($);if(!J)throw Error(`provider "${$}" does not support OAuth login`);let X=n8({onPrompt:async(Y)=>Y.defaultValue??"",openUrl:Q,onOpenUrlError:({error:Y})=>{throw Y instanceof Error?Y:Error(String(Y))}});return J.login({settings:Z,callbacks:X,telemetry:W})}function jY($,Z,Q,W,J){return W2({manager:$,providerId:Z,settings:Q,credentials:W,setLastUsed:J?.setLastUsed})}async function VY($,Z,Q,W){let J=n8({onPrompt:async(X)=>X.defaultValue??"",openUrl:Q,onOpenUrlError:({error:X})=>{throw X instanceof Error?X:Error(String(X))}});return X6($,Z,{callbacks:J,telemetry:W})}function HY($){let Z=$?.auth?.accessToken?.trim()||$?.apiKey?.trim();return Z&&Z.length>0?Z:void 0}var uf={};N(uf,{getProviderConfigFields:()=>BY});import*as k7 from"@cline/llms";var fk=["apiKey","baseUrl","azureApiVersion","awsRegion","awsProfile","gcpProjectId","gcpRegion","sapClientId","sapClientSecret","sapTokenUrl","sapResourceGroup","sapDeploymentId"],Uk={"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 Dk($,Z){let Q={};for(let W of fk){let J=$[W],X=Z[W];if(J||X)Q[W]={...J,...X}}return Q}function Lk($){let Z=Uk[$.providerId];if(!Z)return $;return{...$,description:Z.description??$.description,fields:Z.mode==="replace"?Z.fields:Dk($.fields,Z.fields)}}var _k=new Set(["ollama","lmstudio","litellm","openai-compatible"]);function zk($,Z){if(!Z?.provider.baseUrl)return!1;if(Z.provider.source!=="system")return!0;return _k.has($)}function BY($){let Z=k7.normalizeProviderId($);if(Q2(Z))return{providerId:Z,authMethod:"oauth",fields:{}};let Q=k7.MODEL_COLLECTIONS_BY_PROVIDER_ID[Z];if(Q?.provider.capabilities?.includes("local-auth"))return{providerId:Z,authMethod:"local",fields:{}};let W=Q?.provider.baseUrl,J={apiKey:{}};if(zk(Z,Q))J.baseUrl={defaultValue:W};return Lk({providerId:Z,authMethod:"api-key",fields:J})}var rf={};N(rf,{resolveLegacyClineAuth:()=>FY,migrateLegacyProviderSettings:()=>Q9});import{existsSync as Tk,readFileSync as Ok}from"node:fs";import{dirname as qk,join as GY}from"node:path";import*as N4 from"@cline/llms";import{resolveClineDataDir as Mk}from"@cline/shared/storage";var I7="openai",pf=N4.BUILT_IN_PROVIDER.OPENAI_COMPATIBLE,df=128000;function FY($){let Z=$?.trim();if(!Z)return;try{let Q=JSON.parse(Z);if(!Q)return;let W=typeof Q.expiresAt==="number"&&Number.isFinite(Q.expiresAt)?Q.expiresAt<10000000000?Q.expiresAt*1000:Q.expiresAt:void 0;return{accessToken:Q.idToken,refreshToken:Q.refreshToken,expiresAt:W,accountId:Q.userInfo?.id}}catch{return}}function b($){let Z=$?.trim();return Z?Z:void 0}function Rk($){return $==="credentials"?"iam":$}function lf($){if(!Tk($))return;try{let Z=Ok($,"utf8"),Q=JSON.parse(Z);if(Q&&typeof Q==="object"&&!Array.isArray(Q))return Q}catch{}return}function Ek($){let Z=$.dataDir??Mk(),Q=$.globalStatePath??GY(Z,"globalState.json"),W=$.secretsPath??GY(Z,"secrets.json"),J=lf(Q),X=lf(W);if(!J&&!X)return;return{globalState:J??{},secrets:X??{}}}function KY($){if($===I7)return pf;return $}function Nk($,Z,Q,W){let J=Q==="plan"?"planMode":"actMode",X=Z===W?b(Q==="plan"?$.planModeApiModelId:$.actModeApiModelId):void 0,j={openrouter:`${J}OpenRouterModelId`,cline:`${J}ClineModelId`,openai:`${J}OpenAiModelId`,ollama:`${J}OllamaModelId`,lmstudio:`${J}LmStudioModelId`,litellm:`${J}LiteLlmModelId`,requesty:`${J}RequestyModelId`,together:`${J}TogetherModelId`,fireworks:`${J}FireworksModelId`,sapaicore:`${J}SapAiCoreModelId`,groq:`${J}GroqModelId`,baseten:`${J}BasetenModelId`,huggingface:`${J}HuggingFaceModelId`,"huawei-cloud-maas":`${J}HuaweiCloudMaasModelId`,oca:`${J}OcaModelId`,aihubmix:`${J}AihubmixModelId`,hicap:`${J}HicapModelId`,nousResearch:`${J}NousResearchModelId`,"vercel-ai-gateway":`${J}VercelAiGatewayModelId`}[Z];return(j?b(typeof $[j]==="string"?$[j]:void 0):void 0)??X}function wk($,Z,Q){let W=Q==="plan"?$.planModeThinkingBudgetTokens:$.actModeThinkingBudgetTokens,J=[...Z==="oca"?[$.actModeOcaReasoningEffort,$.planModeOcaReasoningEffort]:[],...Z==="gemini"?[$.geminiActModeThinkingLevel,$.geminiPlanModeThinkingLevel]:[],$.actModeReasoningEffort,$.planModeReasoningEffort].map(b).find(Boolean),X=J==="none"||J==="low"||J==="medium"||J==="high"||J==="xhigh"?J:void 0,Y=typeof W==="number"&&Number.isInteger(W)&&W>0?W:void 0;if(!X&&Y===void 0)return;return{...X?{effort:X}:{},...Y!==void 0?{budgetTokens:Y}:{}}}function Ck($){let Z=$["openai-codex-oauth-credentials"];if(!Z)return;try{let Q=JSON.parse(Z),W=b(Q.access_token),J=b(Q.refresh_token),X=b(Q.accountId);if(!W&&!J&&!X)return;return{...W?{apiKey:W}:{},auth:{...W?{accessToken:W}:{},...J?{refreshToken:J}:{},...X?{accountId:X}:{}}}}catch{return}}function Pk($){let Z=N4.getGeneratedModelsForProvider($),W=N4.getProviderCollectionSync($)?.provider.defaultModelId;if(W&&Z[W])return W;return Object.keys(Z)[0]??void 0}function Sk($,Z,Q,W){let J=KY($),X=b(W==="plan"?Z.planModeApiProvider:Z.actModeApiProvider),Y=Nk(Z,$,W,X)??Pk(J),j=wk(Z,J,W),V=typeof Z.requestTimeoutMs==="number"&&Number.isInteger(Z.requestTimeoutMs)&&Z.requestTimeoutMs>0?Z.requestTimeoutMs:void 0,H={anthropic:Q.apiKey,cline:Q.clineApiKey,openai:Q.openAiApiKey,"openai-native":Q.openAiNativeApiKey,openrouter:Q.openRouterApiKey,bedrock:Q.awsBedrockApiKey,gemini:Q.geminiApiKey,ollama:Q.ollamaApiKey,deepseek:Q.deepSeekApiKey,requesty:Q.requestyApiKey,together:Q.togetherApiKey,fireworks:Q.fireworksApiKey,qwen:Q.qwenApiKey,doubao:Q.doubaoApiKey,mistral:Q.mistralApiKey,litellm:Q.liteLlmApiKey,asksage:Q.asksageApiKey,xai:Q.xaiApiKey,moonshot:Q.moonshotApiKey,zai:Q.zaiApiKey,huggingface:Q.huggingFaceApiKey,nebius:Q.nebiusApiKey,sambanova:Q.sambanovaApiKey,cerebras:Q.cerebrasApiKey,groq:Q.groqApiKey,"huawei-cloud-maas":Q.huaweiCloudMaasApiKey,baseten:Q.basetenApiKey,"vercel-ai-gateway":Q.vercelAiGatewayApiKey,dify:Q.difyApiKey,minimax:Q.minimaxApiKey,hicap:Q.hicapApiKey,aihubmix:Q.aihubmixApiKey,nousResearch:Q.nousResearchApiKey,oca:Q.ocaApiKey},B={};if($==="openai-codex")Object.assign(B,Ck(Q));if($==="cline")try{let D=b(Q["cline:clineAccountId"]);if(D)B.auth={...B.auth??{},...FY(D)}}catch{}if($===I7&&Z.openAiHeaders)B.headers=Z.openAiHeaders;if($==="bedrock"){let D=Rk(Z.awsAuthentication),U=D==="profile"||Z.awsUseProfile===!0;B.aws={accessKey:b(Q.awsAccessKey),secretKey:b(Q.awsSecretKey),sessionToken:b(Q.awsSessionToken),region:b(Z.awsRegion),authentication:D,profile:U?b(Z.awsProfile):void 0,usePromptCache:Z.awsBedrockUsePromptCache,useCrossRegionInference:Z.awsUseCrossRegionInference,useGlobalInference:Z.awsUseGlobalInference,endpoint:b(Z.awsBedrockEndpoint),customModelBaseId:b(W==="plan"?Z.planModeAwsBedrockCustomModelBaseId:Z.actModeAwsBedrockCustomModelBaseId)}}if($==="vertex")B.gcp={projectId:b(Z.vertexProjectId),region:b(Z.vertexRegion)};if($===I7&&(Z.azureApiVersion||Z.azureIdentity!==void 0))B.azure={apiVersion:b(Z.azureApiVersion),useIdentity:Z.azureIdentity};if($==="sapaicore"){let D=Z.sapAiCoreUseOrchestrationMode??!0;B.sap={clientId:b(Q.sapAiCoreClientId),clientSecret:b(Q.sapAiCoreClientSecret),tokenUrl:b(Z.sapAiCoreTokenUrl),resourceGroup:b(Z.sapAiResourceGroup),deploymentId:D?void 0:b(W==="plan"?Z.planModeSapAiCoreDeploymentId:Z.actModeSapAiCoreDeploymentId),useOrchestrationMode:D}}if($==="oca"){B.oca={mode:Z.ocaMode};let D=b(Q.ocaRefreshToken);if(D)B.auth={...B.auth??{},refreshToken:D}}if($==="qwen")B.apiLine=Z.qwenApiLine;if($==="moonshot")B.apiLine=Z.moonshotApiLine;if($==="zai")B.apiLine=Z.zaiApiLine;if($==="minimax")B.apiLine=Z.minimaxApiLine;let G={anthropic:Z.anthropicBaseUrl,openai:Z.openAiBaseUrl,ollama:Z.ollamaBaseUrl,lmstudio:Z.lmStudioBaseUrl,litellm:Z.liteLlmBaseUrl,gemini:Z.geminiBaseUrl,requesty:Z.requestyBaseUrl,asksage:Z.asksageApiUrl,dify:Z.difyBaseUrl,oca:Z.ocaBaseUrl,aihubmix:Z.aihubmixBaseUrl,sapaicore:Z.sapAiCoreBaseUrl},K=b(H[$]),F=b(G[$]),A={provider:J,...K?{apiKey:K}:{},...Y?{model:Y}:{},...F?{baseUrl:F}:{},...j?{reasoning:j}:{},...V?{timeout:V}:{},...B},L=p8.safeParse(A);if(!L.success)return;return Object.keys(A).filter((D)=>D!=="provider").length>0?L.data:void 0}function bk($,Z){if($!==pf)return;if(!Z.baseUrl||!Z.model)return;return{provider:{name:"OpenAI Compatible",baseUrl:Z.baseUrl,defaultModelId:Z.model},models:{[Z.model]:{id:Z.model,name:Z.model,contextWindow:df,maxInputTokens:df,capabilities:["streaming","tools","images"]}}}}function yk($,Z){let Q=new Set;for(let J of[$.actModeApiProvider,$.planModeApiProvider]){let X=b(J);if(X)Q.add(X)}if(b(Z.apiKey))Q.add("anthropic");if(b(Z.openRouterApiKey))Q.add("openrouter");if(b(Z.openAiApiKey))Q.add(I7);if(b(Z.openAiNativeApiKey))Q.add("openai-native");if(b(Z["openai-codex-oauth-credentials"]))Q.add("openai-codex");if(b(Z.geminiApiKey))Q.add("gemini");if(b(Z.ollamaApiKey))Q.add("ollama");if(b(Z.awsAccessKey)||b(Z.awsBedrockApiKey)||$.awsAuthentication!==void 0||$.awsUseProfile===!0||b($.awsProfile))Q.add("bedrock");if(b($.vertexProjectId)||b($.vertexRegion))Q.add("vertex");if(b(Z.clineApiKey))Q.add("cline");let W=FY(b(Z["cline:clineAccountId"]));if(W?.accessToken||W?.refreshToken||W?.accountId)Q.add("cline");if(b(Z.ocaApiKey))Q.add("oca");if(b(Z.sapAiCoreClientId)||b(Z.sapAiCoreClientSecret)||b($.sapAiCoreTokenUrl)||b($.sapAiCoreBaseUrl)||b($.sapAiResourceGroup)||$.sapAiCoreUseOrchestrationMode!==void 0)Q.add("sapaicore");return Q}function Q9($){let Z=$.providerSettingsManager.read(),Q=Ek($);if(!Q)return{migrated:!1,providerCount:Object.keys(Z.providers).length,lastUsedProvider:Z.lastUsedProvider};let{globalState:W,secrets:J}=Q,X=W.mode==="plan"?"plan":"act",Y=yk(W,J),j=S$();j.providers={...Z.providers},j.lastUsedProvider=Z.lastUsedProvider;let V=new Date().toISOString(),H=0,B=GY(qk($.providerSettingsManager.getFilePath()),"models.json"),G=oX(B),K=0;for(let L of Y){let f=KY(L);if(j.providers[f])continue;let D=Sk(L,W,J,X);if(!D)continue;j.providers[f]={settings:D,updatedAt:V,tokenSource:"migration"},H+=1;let U=bk(f,D);if(U&&!G.providers[f])G.providers[f]=U,K+=1}if(H===0&&K===0)return{migrated:!1,providerCount:Object.keys(Z.providers).length,lastUsedProvider:Z.lastUsedProvider};let F=b(X==="plan"?W.planModeApiProvider:W.actModeApiProvider),A=F?KY(F):void 0;if(j.lastUsedProvider=Z.lastUsedProvider??(A&&j.providers[A]?A:Object.keys(j.providers)[0]),$.providerSettingsManager.write(j),K>0)Rf(B,G);return{migrated:H>0||K>0,providerCount:Object.keys(j.providers).length,lastUsedProvider:j.lastUsedProvider}}$7();_0();u9();var nf={};N(nf,{SessionVersioningService:()=>c$,SessionVersioningError:()=>k0});class k0 extends Error{code;constructor($,Z){super(Z);this.code=$;this.name="SessionVersioningError"}}function hk($){let Z=$.sessionId.trim();if(!Z)throw new k0("invalid_restore","sessionId is required");if(!$.restoreMessages&&!$.restoreWorkspace)throw new k0("invalid_restore","restore.messages or restore.workspace must be true");if($.restoreMessages&&$.requiresStart)throw new k0("invalid_restore","start is required when restore.messages is true");if(!Number.isInteger($.checkpointRunCount)||$.checkpointRunCount<1)throw new k0("invalid_restore","checkpointRunCount must be a positive integer");return Z}class c${async restoreCheckpoint($){let Z=$.restore?.messages!==!1,Q=$.restore?.workspace!==!1,W=hk({sessionId:$.sessionId,restoreMessages:Z,restoreWorkspace:Q,requiresStart:$.start===void 0,checkpointRunCount:$.checkpointRunCount}),J=await $.getSession(W);if(!J)throw new k0("session_not_found",`Session ${W} not found`);let X=Z?await $.readMessages(W):void 0;if(Z&&X?.length===0)throw new k0("session_messages_not_found",`No messages found for session ${W}`);let Y=fX({session:J,messages:X,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd,restoreMessages:Z});if(Q)await($.applyWorkspaceCheckpoint??UX)(Y.cwd,Y.checkpoint);let j=U1({session:J,messages:X});if(!Z)return{checkpoint:Y.checkpoint,sourceSnapshot:j};let V=FX(J,$.checkpointRunCount),H=$.restore?.omitCheckpointMessageFromSession?AX(X??[],$.checkpointRunCount):Y.messages??[],B={sourceSession:J,sourceMessages:X,sourceSnapshot:j,plan:Y,restoredCheckpointMetadata:V,initialMessages:H,restoreMessages:Z,restoreWorkspace:Q,checkpointRunCount:$.checkpointRunCount};if(!$.start||!$.startSession)throw new k0("invalid_restore","start is required when restore.messages is true");let G=$.buildStartInput?await $.buildStartInput(B,$.start):$.start,K=await $.startSession(G),F=$.getStartedSessionId?.(K);if(F)await($.retainCheckpointRefs??bG)(Y.cwd,F,V?.history??[]);let A=F&&$.readRestoredSession?await $.readRestoredSession(F):void 0;return{sessionId:F,startResult:K,messages:Y.messages,checkpoint:Y.checkpoint,sourceSnapshot:j,...A?{restoredSnapshot:U1({session:A,messages:H})}:{}}}}var af={};N(af,{FileTeamPersistenceStore:()=>x7});import{appendFileSync as kk,existsSync as AY,mkdirSync as Ik,readFileSync as xk,renameSync as gk,unlinkSync as mk,writeFileSync as vk}from"node:fs";import{join as fY}from"node:path";import{resolveTeamDataDir as ck}from"@cline/shared/storage";function uk($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}class x7{dirPath;statePath;taskHistoryPath;teammateSpecs=new Map;constructor($){let Z=uk($.teamName),Q=$.baseDir?.trim()||ck();this.dirPath=fY(Q,Z),this.statePath=fY(this.dirPath,"state.json"),this.taskHistoryPath=fY(this.dirPath,"task-history.jsonl")}loadState(){if(!AY(this.statePath))return;try{let $=xk(this.statePath,"utf8"),Z=JSON.parse($);if(Z.version!==1||!Z.teamState)return;for(let Q of Z.teammates??[])this.teammateSpecs.set(Q.agentId,Q);return AA(Z.teamState)}catch{return}}getTeammateSpecs(){return Array.from(this.teammateSpecs.values())}upsertTeammateSpec($){this.teammateSpecs.set($.agentId,$)}removeTeammateSpec($){this.teammateSpecs.delete($)}persist($){if(!this.hasPersistableState($)){this.clearPersistedState();return}this.ensureDir();let Z={version:1,updatedAt:new Date().toISOString(),teamState:$.exportState(),teammates:Array.from(this.teammateSpecs.values())},Q=`${this.statePath}.tmp`;vk(Q,`${JSON.stringify(Z,null,2)}
732
+ `,"utf8"),gk(Q,this.statePath)}appendTaskHistory($){let Z={};switch($.type){case"team_task_updated":Z=$.task;break;case"team_message":Z={agentId:$.message.fromAgentId,toAgentId:$.message.toAgentId,subject:$.message.subject,taskId:$.message.taskId};break;case"team_mission_log":Z={agentId:$.entry.agentId,kind:$.entry.kind,summary:$.entry.summary,taskId:$.entry.taskId};break;case"teammate_spawned":case"teammate_shutdown":case"task_start":Z={agentId:$.agentId,message:"message"in $?$.message:void 0};break;case"task_end":Z={agentId:$.agentId,finishReason:$.result?.finishReason,error:$.error?.message};break;case"agent_event":Z={agentId:$.agentId,eventType:$.event.type};break}this.ensureDir(),kk(this.taskHistoryPath,`${JSON.stringify({ts:new Date().toISOString(),type:$.type,task:Z})}
733
+ `,"utf8")}ensureDir(){if(!AY(this.dirPath))Ik(this.dirPath,{recursive:!0})}hasPersistableState($){let Z=$.exportState();if(this.teammateSpecs.size>0)return!0;if(Z.members.some((Q)=>Q.role==="teammate"))return!0;return Z.tasks.length>0||Z.mailbox.length>0||Z.missionLog.length>0}clearPersistedState(){if(AY(this.statePath))mk(this.statePath)}}var sf={};N(sf,{ChatViewStateSchema:()=>UY,ChatSummarySchema:()=>u7,ChatSessionStatusSchema:()=>m7,ChatSessionConfigSchema:()=>g7,ChatMessageSchema:()=>c7,ChatMessageRoleSchema:()=>v7});import{z as h}from"zod";var g7=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()}),m7=h.enum(["idle","starting","running","pending","stopping","completed","cancelled","failed","error"]),v7=h.enum(["user","assistant","tool","system","status","error"]),c7=h.object({id:h.string().min(1),sessionId:h.string().nullable(),role:v7,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()}),u7=h.object({toolCalls:h.number().int().nonnegative(),tokensIn:h.number().int().nonnegative(),tokensOut:h.number().int().nonnegative()}),UY=h.object({sessionId:h.string().nullable(),status:m7,config:g7,messages:h.array(c7),rawTranscript:h.string(),error:h.string().nullable(),summary:u7});var of={};N(of,{CORE_BUILD_VERSION:()=>DY});var DY=rj;import{Agent as kI,createAgentRuntime as II}from"@cline/agents";var tf={};N(tf,{fetchClineRecommendedModels:()=>_Y,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>d7});import{getClineEnvironmentConfig as dk}from"@cline/shared";var lk=5000,d7={recommended:[{id:"anthropic/claude-opus-4.6",name:"Claude Opus 4.6",description:"Most intelligent model for agents and coding",tags:["BEST"]},{id:"anthropic/claude-sonnet-4.6",name:"Claude Sonnet 4.6",description:"Strong coding and agent performance",tags:["NEW"]},{id:"google/gemini-3.1-pro-preview",name:"Gemini 3.1 Pro Preview",description:"1M context window, strong coding performance",tags:["NEW"]},{id:"openai/gpt-5.3-codex",name:"GPT-5.3 Codex",description:"OpenAI's latest with strong coding abilities",tags:["NEW"]}],free:[{id:"kwaipilot/kat-coder-pro",name:"KwaiKAT Kat Coder Pro",description:"Advanced agentic coding model",tags:["FREE"]},{id:"arcee-ai/trinity-large-preview:free",name:"Arcee AI Trinity Large Preview",description:"Advanced large preview model",tags:["FREE"]}],clinePass:[]};function pk($){return{recommended:$.recommended.map((Z)=>({...Z,tags:[...Z.tags]})),free:$.free.map((Z)=>({...Z,tags:[...Z.tags]})),clinePass:$.clinePass.map((Z)=>({...Z,tags:[...Z.tags]}))}}function LY($){if(!$||typeof $!=="object")return null;let Z=$;if(typeof Z.id!=="string"||Z.id.length===0)return null;return{id:Z.id,name:typeof Z.name==="string"&&Z.name.length>0?Z.name:Z.id,description:typeof Z.description==="string"?Z.description:"",tags:Array.isArray(Z.tags)?Z.tags.filter((Q)=>typeof Q==="string"):[]}}function rk($){if(!$||typeof $!=="object")return null;let Z=$,Q=Array.isArray(Z.recommended)?Z.recommended:[],W=Array.isArray(Z.free)?Z.free:[],J=Array.isArray(Z.clinePass)?Z.clinePass:[],X=Q.map(LY).filter((V)=>V!==null),Y=W.map(LY).filter((V)=>V!==null),j=J.map(LY).filter((V)=>V!==null);if(X.length===0&&Y.length===0&&j.length===0)return null;return{recommended:X,free:Y,clinePass:j}}function ik($){let Z=$.baseUrl?.trim();if(Z)return Z;let Q=dk().apiBaseUrl;try{return($.providerSettingsManager??new q1).getProviderSettings("cline")?.baseUrl?.trim()||Q}catch{return Q}}async function nk($,Z,Q){let W=new AbortController,J=setTimeout(()=>W.abort(),Q);try{return await $(Z,{signal:W.signal})}finally{clearTimeout(J)}}async function _Y($={}){try{let Z=ik($),Q=$.fetchImpl??fetch,W=await nk(Q,`${Z}/api/v1/ai/cline/recommended-models`,$.timeoutMs??lk);if(!W.ok)throw Error(`HTTP ${W.status}`);let J=await W.json(),X=rk(J);if(X)return X}catch{}return pk(d7)}var ef={};N(ef,{loadLlmsConfigFromFile:()=>TY,defineLlmsConfig:()=>zY});import{readFile as ak}from"node:fs/promises";import sk from"node:path";function zY($){return $}async function TY($){let Z=sk.resolve($),Q=await ak(Z,"utf8"),W;try{W=JSON.parse(Q)}catch(J){let X=J instanceof Error?J.message:String(J);throw Error(`Failed to parse JSON config at "${Z}": ${X}`)}return ok(W,Z)}function ok($,Z){if(!$||typeof $!=="object")throw Error(`Invalid llms config in "${Z}": expected an object.`);let W=$.providers;if(!Array.isArray(W))throw Error(`Invalid llms config in "${Z}": "providers" must be an array.`);if(!W.length)throw Error(`Invalid llms config in "${Z}": "providers" cannot be empty.`);return $}var XU={};N(XU,{createLlmsSdk:()=>qY,DefaultLlmsSdk:()=>W9});import{BUILT_IN_PROVIDER_IDS as QU,createHandler as $I,createHandlerAsync as ZI,getProviderCollection as QI,hasProvider as WU,registerAsyncHandler as WI,registerHandler as JI,registerModel as XI,registerProvider as JU}from"@cline/llms";function $U($){return $?{...$}:{}}function tk($,Z){if($)return $;if(!Z)return;let Q=globalThis.process;if(!Q?.env)return;return Q.env[Z]}function ek($,Z){if(!Z.length)throw Error(`Provider "${$}" must include at least one model.`)}function ZU($){let Z=Object.keys($.collection.models);return{id:$.collection.provider.id,name:$.collection.provider.name,description:$.collection.provider.description,protocol:$.collection.provider.protocol,baseUrl:$.collection.provider.baseUrl,capabilities:$.collection.provider.capabilities,env:$.collection.provider.env,models:Z,defaultModel:$.collection.provider.defaultModelId,modelCount:Z.length}}class OY{providers=new Map;register($){ek($.id,$.models);let Z=$.defaultModel??$.models[0];if(!Z)throw Error(`Provider "${$.id}" must define a default model.`);if(!$.models.includes(Z))throw Error(`Default model "${Z}" is not included in configured models for "${$.id}".`);let Q=this.providers.get($.id);this.providers.set($.id,{id:$.id,models:new Set([...Q?.models??[],...$.models]),defaultModel:Z,defaults:{...Q?.defaults??{},...$U($.defaults)}})}registerSelectionConfig($){this.register({id:$.id,models:$.models,defaultModel:$.defaultModel,defaults:{apiKey:tk($.apiKey,$.apiKeyEnv),routingProviderId:$.builtinProviderId,baseUrl:$.baseUrl,headers:$.headers,timeoutMs:$.timeoutMs,capabilities:$.capabilities,...$U($.settings)}})}registerModel($,Z){let Q=this.providers.get($);if(!Q){this.providers.set($,{id:$,models:new Set([Z]),defaultModel:Z,defaults:{}});return}Q.models.add(Z)}createHandlerConfig($){let Z=this.require($.providerId),Q=$.modelId??Z.defaultModel;if(!Z.models.has(Q))throw Error(`Model "${Q}" is not configured for provider "${$.providerId}".`);return{providerId:$.providerId,modelId:Q,...Z.defaults,...$.overrides}}list(){return Array.from(this.providers.values()).map(($)=>({id:$.id,models:Array.from($.models),defaultModel:$.defaultModel}))}getModels($){return Array.from(this.require($).models)}hasProvider($){return this.providers.has($)}hasModel($,Z){return this.providers.get($)?.models.has(Z)??!1}require($){let Z=this.providers.get($);if(!Z)throw Error(`Provider "${$}" is not configured in this SDK instance.`);return Z}}class W9{configuredProviders=new OY;constructor($){this.applyConfig($)}createHandler($){return $I(this.configuredProviders.createHandlerConfig($))}async createHandlerAsync($){return ZI(this.configuredProviders.createHandlerConfig($))}registerProvider($){if(JU($.collection),$.handlerFactory&&$.asyncHandlerFactory)throw Error(`Provider "${$.collection.provider.id}" cannot register both sync and async handlers.`);if($.handlerFactory)JI($.collection.provider.id,$.handlerFactory);if($.asyncHandlerFactory)WI($.collection.provider.id,$.asyncHandlerFactory);this.configuredProviders.register({id:$.collection.provider.id,models:$.exposeModels??Object.keys($.collection.models),defaultModel:$.defaultModel??$.collection.provider.defaultModelId,defaults:$.defaults})}registerBuiltinProvider($){let Z=$.exposeModels??Object.keys($.models),Q=$.defaultModel??Z[0];if(!Q)throw Error(`Provider "${$.id}" must define a default model.`);JU({provider:{id:$.id,name:$.name??$.id,description:$.description,protocol:$.protocol,baseUrl:$.baseUrl,defaultModelId:Q,client:$.client??"openai-compatible",capabilities:$.capabilities,env:$.env,source:"system"},models:$.models}),this.configuredProviders.register({id:$.id,models:Z,defaultModel:Q,defaults:{routingProviderId:$.builtinProviderId,...$.defaults??{}}})}registerModel($){XI($.providerId,$.modelId,$.info),this.configuredProviders.registerModel($.providerId,$.modelId)}getProviders(){return this.configuredProviders.list()}getBuiltInProviderIds(){return[...QU]}async getBuiltInProviders(){return(await Promise.all(QU.map((Z)=>QI(Z)))).filter((Z)=>Z!==void 0).map((Z)=>ZU({collection:Z}))}getModels($){return this.configuredProviders.getModels($)}isProviderConfigured($){return this.configuredProviders.hasProvider($)}isModelConfigured($,Z){return this.configuredProviders.hasModel($,Z)}applyConfig($){for(let Z of $.providers)this.configuredProviders.registerSelectionConfig(Z);for(let Z of $.models??[])this.registerModel(Z);for(let Z of $.customProviders??[])this.registerProvider(Z);for(let Z of this.configuredProviders.list()){let Q=WU(Z.id),W=this.configuredProviders.createHandlerConfig({providerId:Z.id,modelId:Z.defaultModel}).routingProviderId,J=typeof W==="string"&&WU(W);if(!Q&&!J)throw Error(`Provider "${Z.id}" is not known. Register it through customProviders/registerProvider, registerBuiltinProvider, or use a built-in provider ID.`)}}}function qY($){return new W9($)}UW();async function YI(){return Promise.resolve().then(() => ($7(),IA))}function cI(){return new Date().toISOString()}var uI="cline",dI="cline-pass";function lI($){if(FU($)!=="providers.json")return;let Z=EY($);if(FU(Z)!=="settings")return;return EY(Z)}class q1{filePath;dataDir;constructor($={}){if(this.filePath=$.filePath??vI(),this.dataDir=$.dataDir??lI(this.filePath),this.dataDir||!$.filePath)Q9({providerSettingsManager:this,dataDir:this.dataDir});if(bf(this),C7(this.read()),RY(this.filePath))try{KU(this.filePath,384)}catch{}}getFilePath(){return this.filePath}read(){if(!RY(this.filePath))return S$();try{let $=gI(this.filePath,"utf8"),Z=JSON.parse($),Q=r8.safeParse(Z);if(Q.success)return C7(Q.data),Q.data}catch{}return S$()}write($){let Z=r8.parse($),Q=EY(this.filePath);if(!RY(Q))xI(Q,{recursive:!0,mode:448});mI(this.filePath,`${JSON.stringify(Z,null,2)}
734
+ `,"utf8");try{KU(this.filePath,384)}catch{}C7(Z)}saveProviderSettings($,Z={}){let Q=p8.parse($),W=this.read(),J=Q.provider,X=Z.setLastUsed!==!1,Y=W.providers[J],j=Z.tokenSource??Y?.tokenSource??"manual",V={...W,providers:{...W.providers,[J]:{settings:Q,updatedAt:cI(),tokenSource:j}},lastUsedProvider:X?J:W.lastUsedProvider};return this.write(V),V}resolveProviderSettings($,Z){let Q=$.providers[Z]?.settings,J=j0(Z)?.storageProviderId;if(!J||J===Z)return Q;let X=$.providers[J]?.settings;if(!X)return Q;return p8.parse({...X.auth?{auth:X.auth}:{},...X.apiKey?{apiKey:X.apiKey}:{},...X.baseUrl?{baseUrl:X.baseUrl}:{},...Q??{},provider:Z})}getProviderSettings($){let Z=this.read();return this.resolveProviderSettings(Z,$)}resolveLastUsedProviderId($,Z){let Q=$.lastUsedProvider;if(Q===dI&&Z.isClinePassEnabled===!1)return uI;return Q}getLastUsedProviderSettings($={}){let Z=this.read(),Q=this.resolveLastUsedProviderId(Z,$);if(!Q)return;return this.resolveProviderSettings(Z,Q)}getProviderConfig($,Z){let Q=this.getProviderSettings($);if(!Q)return;return l0(Q,Z)}getLastUsedProviderConfig($={}){let Z=this.getLastUsedProviderSettings($);if(!Z)return;return l0(Z,$)}async refreshCatalog(){try{await d8({})}catch{}}}_0();J8();function pI($,Z){let Q=$?.expiresAt,W=Z?.expiresAt;return $?.accessToken===Z?.accessToken&&$?.refreshToken===Z?.refreshToken&&$?.accountId===Z?.accountId&&Q===W}class i7 extends Error{providerId;constructor($){super(`OAuth credentials for provider "${$}" are no longer valid. Re-run authentication for this provider.`);this.name="OAuthReauthRequiredError",this.providerId=$}}class NY{providerSettingsManager;telemetry;refreshInFlight=new Map;constructor($){this.providerSettingsManager=$?.providerSettingsManager??new q1,this.telemetry=$?.telemetry}async resolveProviderApiKey($){let Z=j0($.providerId);if(!Z)return null;return this.resolveWithSingleFlight(Z.providerId,Z.storageProviderId,$.forceRefresh)}async resolveWithSingleFlight($,Z,Q=!1){let W=this.refreshInFlight.get(Z);if(W)return W;let J=this.resolveProviderApiKeyInternal($,Z,Q).catch((X)=>{throw X}).finally(()=>{this.refreshInFlight.delete(Z)});return this.refreshInFlight.set(Z,J),J}async resolveProviderApiKeyInternal($,Z,Q){let W=j0($);if(!W)return null;let J=this.providerSettingsManager.getProviderSettings(Z);if(!J)return null;let X=Y6($,J);if(!X)return null;let Y=await W.refresh({settings:J,credentials:X,forceRefresh:Q,telemetry:this.telemetry});if(!Y)throw new i7($);let j=W2({manager:this.providerSettingsManager,providerId:$,settings:J,credentials:Y,setLastUsed:!1,save:!1}),V=!pI(J.auth,j.auth);if(V)this.providerSettingsManager.saveProviderSettings(j,{setLastUsed:!1,tokenSource:"oauth"});return{apiKey:W.getApiKey(j)??Y.access,accountId:Y.accountId,refreshed:V}}}import{normalizeUserInput as rI}from"@cline/shared";import{nanoid as iI}from"nanoid";class AU{list($){return $?s0($):[]}update($,Z){if(!$)return{sessionId:Z.sessionId,prompts:[],updated:!1};let Q=Z.promptId.trim(),W=$.pendingPrompts.findIndex((V)=>V.id===Q);if(W<0)return{sessionId:Z.sessionId,prompts:s0($),updated:!1};let J=$.pendingPrompts[W];if(!J)return{sessionId:Z.sessionId,prompts:s0($),updated:!1};let X=Z.prompt===void 0?J.prompt:rI(Z.prompt).trim();if(!X)throw Error("prompt cannot be empty");let Y=Z.delivery??J.delivery,j={...J,prompt:X,mode:Z.mode??J.mode,delivery:Y};return $.pendingPrompts.splice(W,1),nI($,j,W,J.delivery),{sessionId:Z.sessionId,prompts:s0($),prompt:n7(j),updated:!0}}delete($,Z){if(!$)return{sessionId:Z.sessionId,prompts:[],removed:!1};let Q=Z.promptId.trim(),W=$.pendingPrompts.findIndex((X)=>X.id===Q);if(W<0)return{sessionId:Z.sessionId,prompts:s0($),removed:!1};let[J]=$.pendingPrompts.splice(W,1);return{sessionId:Z.sessionId,prompts:s0($),prompt:J?n7(J):void 0,removed:!0}}enqueue($,Z){let{prompt:Q,mode:W,delivery:J,userImages:X,userFiles:Y}=Z,j=$.pendingPrompts.findIndex((V)=>V.prompt===Q);if(j>=0){let[V]=$.pendingPrompts.splice(j,1),H={...V,prompt:Q,mode:W??V.mode,userImages:X??V.userImages,userFiles:Y??V.userFiles};if(J==="steer"||V.delivery==="steer")$.pendingPrompts.unshift({...H,delivery:"steer"});else $.pendingPrompts.push(H)}else{let V={id:`pending_${Date.now()}_${iI(5)}`,prompt:Q,mode:W,delivery:J,userImages:X,userFiles:Y};if(J==="steer")$.pendingPrompts.unshift(V);else $.pendingPrompts.push(V)}return s0($)}consumeSteer($){let Z=$.pendingPrompts.findIndex((W)=>W.delivery==="steer");if(Z<0)return{prompts:s0($)};let[Q]=$.pendingPrompts.splice(Z,1);return{entry:Q,prompts:s0($)}}shiftNext($){return{entry:$.pendingPrompts.shift(),prompts:s0($)}}requeueFront($,Z){return $.pendingPrompts.unshift(Z),s0($)}clear($){return $.pendingPrompts.length=0,[]}}class wY{deps;service=new AU;constructor($){this.deps=$}list($){return this.service.list(this.deps.getSession($))}update($){let Z=this.deps.getSession($.sessionId);if(!Z||Z.aborting)return{sessionId:$.sessionId,prompts:[],updated:!1};let Q=this.service.update(Z,$);return this.emitPrompts(Z),this.scheduleDrain($.sessionId,Z),Q}delete($){let Z=this.deps.getSession($.sessionId);if(!Z||Z.aborting)return{sessionId:$.sessionId,prompts:[],removed:!1};let Q=this.service.delete(Z,$);return this.emitPrompts(Z),this.scheduleDrain($.sessionId,Z),Q}enqueue($,Z){let Q=this.deps.getSession($);if(!Q||Q.aborting)return;this.service.enqueue(Q,Z),this.emitPrompts(Q),this.scheduleDrain($,Q)}consumeSteer($){let Z=this.deps.getSession($);if(!Z)return;let{entry:Q}=this.service.consumeSteer(Z);if(!Q)return;return this.emitPrompts(Z),this.emitSubmitted(Z,Q),Q}clearAborted($){if($.pendingPrompts.length===0)return;this.service.clear($),this.emitPrompts($)}emitPrompts($){this.deps.emit({type:"pending_prompts",payload:{sessionId:$.sessionId,prompts:s0($)}})}scheduleDrain($,Z){if(Z.pendingPrompts.length===0||Z.aborting||Z.drainingPendingPrompts||!Z.agent.canStartRun())return;queueMicrotask(()=>{this.drain($)})}async drain($){let Z=this.deps.getSession($);if(!Z)return;if(Z.aborting||Z.drainingPendingPrompts)return;if(!Z.agent.canStartRun())return;let{entry:Q}=this.service.shiftNext(Z);if(!Q)return;this.emitPrompts(Z),this.emitSubmitted(Z,Q),Z.drainingPendingPrompts=!0;let W=!0;try{await this.deps.send({sessionId:$,prompt:Q.prompt,...Q.mode?{mode:Q.mode}:{},userImages:Q.userImages,userFiles:Q.userFiles})}catch{W=!1,this.service.requeueFront(Z,Q),this.emitPrompts(Z)}finally{if(Z.drainingPendingPrompts=!1,W&&Z.pendingPrompts.length>0&&Z.status!=="failed"&&Z.status!=="cancelled")queueMicrotask(()=>{this.drain($)})}}emitSubmitted($,Z){let Q=n7(Z);this.deps.emit({type:"pending_prompt_submitted",payload:{sessionId:$.sessionId,id:Q.id,prompt:Q.prompt,delivery:Q.delivery,attachmentCount:Q.attachmentCount,userImages:Q.userImages,userFiles:Q.userFiles}})}}function n7($){return{id:$.id,prompt:$.prompt,delivery:$.delivery,attachmentCount:($.userImages?.length??0)+($.userFiles?.length??0),userImages:$.userImages,userFiles:$.userFiles}}function s0($){return $.pendingPrompts.map(n7)}function nI($,Z,Q,W){if(Z.delivery==="steer")$.pendingPrompts.unshift(Z);else if(W==="steer")$.pendingPrompts.push(Z);else $.pendingPrompts.splice(Q,0,Z)}_0();class PY{deps;constructor($){this.deps=$}dispatchAgentEvent($,Z,Q){let W=this.deps.getSession($),J={sessionId:$,config:Z,liveSession:W,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit},X=x3(Q),Y=!!W&&(!X.agentId||X.agentId===CY(W.agent));g3(J,Q,Y?{isPrimaryAgentEvent:!0,agentId:CY(W.agent),conversationId:W.agent.getConversationId(),...W?.runtime.teamRuntime?{teamRole:"lead"}:{}}:{isPrimaryAgentEvent:!1})}async handleTeamEvent($,Z){let Q=this.deps.getSession($);if(Q){if(eJ(Q,Z),Z.type==="agent_event"){let W={sessionId:$,config:Q.config,liveSession:Q,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit};g3(W,Z.event,{agentId:Z.agentId,teamRole:"teammate",teamAgentId:Z.agentId,isPrimaryAgentEvent:!1})}if(Z.type==="teammate_spawned"){let W=r1({agentId:Z.teammate.runtimeAgentId??Z.agentId,conversationId:Z.teammate.conversationId,parentAgentId:Z.teammate.parentAgentId,createdByAgentId:CY(Q.agent),teamId:Q.runtime.teamRuntime?.getTeamId(),teamName:Q.runtime.teamRuntime?.getTeamName(),teamRole:"teammate",teamAgentId:Z.agentId});if(W)H$(Q.config.telemetry,{ulid:$,modelId:Z.teammate.modelId??Q.config.modelId,provider:Q.config.providerId,...W})}}if(await $X($,Z,this.deps.invokeBackendOptional),Q)ZX(Q,$,Z,this.deps.emit)}async handlePluginEvent($,Z,Q){if(Z.name==="plugin_log"){this.handlePluginLog($,Z.payload);return}if(Z.name==="automation_event"){let V=this.deps.getSession($)?.config.extensionContext?.automation??Q;if(!V)return;let H=Z.payload&&typeof Z.payload==="object"?Z.payload:void 0;if(!H)return;await V.ingestEvent(H);return}if(Z.name!=="steer_message"&&Z.name!=="queue_message"&&Z.name!=="pending_prompt")return;let W=Z.payload&&typeof Z.payload==="object"?Z.payload:void 0,J=typeof W?.sessionId==="string"&&W.sessionId.trim().length>0?W.sessionId.trim():$,X=typeof W?.prompt==="string"?W.prompt.trim():"";if(!X)return;let Y=Z.name==="steer_message"?"steer":Z.name==="queue_message"?"queue":W?.delivery==="steer"?"steer":"queue";this.deps.enqueuePendingPrompt(J,{prompt:X,delivery:Y})}handlePluginLog($,Z,Q){let W=this.deps.getSession($),J=Q??W?.config.extensionContext?.logger??W?.config.logger;if(!J||!Z||typeof Z!=="object")return;let X=Z,Y=typeof X.message==="string"?X.message:"";if(!Y)return;let j=X.metadata&&typeof X.metadata==="object"?{...X.metadata}:{};if(j.sessionId??=$,typeof X.pluginName==="string"&&X.pluginName)j.pluginName=X.pluginName;if(X.level==="debug"){J.debug(Y,j);return}if(X.level==="error"){if(J.error)J.error(Y,j);else J.log(Y,{...j,severity:"error"});return}J.log(Y,j)}}function CY($){return $.getAgentId()}function SY($){return{sessionId:$.sessionId,source:$.source,pid:process.pid,startedAt:$.startedAt,endedAt:$.endedAt??null,exitCode:$.exitCode??null,status:$.status,interactive:$.interactive,provider:$.config.providerId,model:$.config.modelId,cwd:$.config.cwd,workspaceRoot:R$($.config),teamName:$.config.teamName?.trim()||void 0,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,parentSessionId:typeof $.sessionMetadata?.parentSessionId==="string"?$.sessionMetadata.parentSessionId:void 0,parentAgentId:typeof $.sessionMetadata?.parentAgentId==="string"?$.sessionMetadata.parentAgentId:void 0,agentId:typeof $.sessionMetadata?.agentId==="string"?$.sessionMetadata.agentId:void 0,conversationId:typeof $.sessionMetadata?.conversationId==="string"?$.sessionMetadata.conversationId:void 0,isSubagent:typeof $.sessionMetadata?.isSubagent==="boolean"?$.sessionMetadata.isSubagent:!1,prompt:$.pendingPrompt,metadata:$.sessionMetadata,messagesPath:$.artifacts?.messagesPath,updatedAt:$.updatedAt??$.endedAt??$.startedAt}}function bY($,Z){let Q=$[Z];return typeof Q==="function"?Q:null}async function fU($,Z,...Q){let W=bY($,Z);if(!W)throw Error(`session service method not available: ${Z}`);return Promise.resolve(W.apply($,Q))}async function UU($,Z,...Q){let W=bY($,Z);if(!W)return;await Promise.resolve(W.apply($,Q))}async function DU($,Z,...Q){let W=bY($,Z);if(!W)return;return await Promise.resolve(W.apply($,Q))}$1();_0();function yY($,Z,Q){return{onSubAgentEvent:(W)=>$.onAgentEvent(Q,Z,W),onSubAgentStart:(W)=>{let J=$.getSession(Q)?.runtime.teamRuntime;$.subAgentStarts.set(W.subAgentId,{startedAt:Date.now(),rootSessionId:Q});let X=r1({agentId:W.subAgentId,conversationId:W.conversationId,parentAgentId:W.parentAgentId,teamId:J?.getTeamId(),teamName:J?.getTeamName(),createdByAgentId:W.parentAgentId});if(X)H$(Z.telemetry,{ulid:Q,modelId:Z.modelId,provider:Z.providerId,...X});v4(Z.telemetry,{event:"started",ulid:Q,durationMs:0,parentId:W.parentAgentId,agentId:W.subAgentId,...X}),$.invokeBackendOptional("handleSubAgentStart",Q,W)},onSubAgentEnd:(W)=>{let J=$.getSession(Q)?.runtime.teamRuntime,X=$.subAgentStarts.get(W.subAgentId),Y=X?Date.now()-X.startedAt:0,j=W.result?.text?W.result.text.split(`
735
+ `).length:0;v4(Z.telemetry,{event:"ended",ulid:Q,durationMs:Y,outputLines:j,errorMessage:W.error?String(W.error):void 0,agentId:W.subAgentId,parentId:W.parentAgentId,...r1({agentId:W.subAgentId,conversationId:W.conversationId,parentAgentId:W.parentAgentId,teamId:J?.getTeamId(),teamName:J?.getTeamName(),createdByAgentId:W.parentAgentId})}),$.subAgentStarts.delete(W.subAgentId),$.invokeBackendOptional("handleSubAgentEnd",Q,W)}}}function hY($,Z,Q,W){let J=yY($,Z,Q);return q$({configProvider:{getRuntimeConfig:()=>$.getSession(Q)?.runtime.delegatedAgentConfigProvider?.getRuntimeConfig()??{providerId:Z.providerId,modelId:Z.modelId,cwd:Z.cwd,apiKey:Z.apiKey,baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking,maxIterations:Z.maxIterations,hooks:Z.hooks,extensions:Z.extensions,logger:Z.logger,telemetry:Z.telemetry},getConnectionConfig:()=>$.getSession(Q)?.runtime.delegatedAgentConfigProvider?.getConnectionConfig()??{providerId:Z.providerId,modelId:Z.modelId,apiKey:Z.apiKey,baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking},updateConnectionDefaults:()=>{}},createSubAgentTools:()=>{let Y=Z.enableTools?U2({cwd:Z.cwd,...u0[l1({mode:Z.mode})],executors:W}):[];if(Z.enableSpawnAgent)Y.push(hY($,Z,Q,W));return y1(Y)},...J})}import{readFile as aI,stat as sI}from"node:fs/promises";var oI=20480000;async function LU($){let Z=await sI($);if(!Z.isFile())throw Error("Path is not a file");if(Z.size>oI)throw Error("File is too large to read into context.");let Q=await aI($,"utf8");if(Q.includes("\x00"))throw Error("Cannot read binary file into context.");return Q}var _U=5000;function V9($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function Xx($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$,Q=V9(Z.inputTokens),W=V9(Z.outputTokens),J=V9(Z.cacheReadTokens),X=V9(Z.cacheWriteTokens),Y=V9(Z.totalCost);if(Q===void 0||W===void 0||J===void 0||X===void 0||Y===void 0)return;return{inputTokens:Q,outputTokens:W,cacheReadTokens:J,cacheWriteTokens:X,totalCost:Y}}function Yx($,Z){return{inputTokens:Math.max($.inputTokens,Z.inputTokens),outputTokens:Math.max($.outputTokens,Z.outputTokens),cacheReadTokens:Math.max($.cacheReadTokens,Z.cacheReadTokens),cacheWriteTokens:Math.max($.cacheWriteTokens,Z.cacheWriteTokens),totalCost:Math.max($.totalCost,Z.totalCost)}}class T1{runtimeAddress=void 0;pendingPrompts;sessionService;runtimeBuilder;createAgentInstance;toolExecutors;defaultCapabilities;defaultToolPolicies;providerSettingsManager;oauthTokenManager;defaultTelemetry;defaultFetch;events=new S5;sessions=new Map;usageBySession=new Map;aggregateUsageBySession=new Map;subAgentStarts=new Map;pendingPromptsController;eventBridge;sessionVersioning=new c$;constructor($){let Z=eI();if(Z)Jx(Z);let Q=P0($.distinctId);this.sessionService=$.sessionService,this.runtimeBuilder=$.runtimeBuilder??new T4,this.createAgentInstance=$.createAgent??((W)=>new z$(W)),this.defaultCapabilities=M0($.capabilities),this.toolExecutors=this.defaultCapabilities?.toolExecutors,this.defaultToolPolicies=$.toolPolicies,this.providerSettingsManager=$.providerSettingsManager??new q1,this.oauthTokenManager=$.oauthTokenManager??new NY({providerSettingsManager:this.providerSettingsManager,telemetry:$.telemetry}),this.defaultTelemetry=$.telemetry,this.defaultTelemetry?.setDistinctId(Q),this.defaultFetch=$.fetch,this.pendingPromptsController=new wY({getSession:(W)=>this.sessions.get(W),emit:(W)=>this.emit(W),send:(W)=>this.runTurn(W)}),this.pendingPrompts={list:async(W)=>this.pendingPromptsController.list(W.sessionId),update:async(W)=>this.pendingPromptsController.update(W),delete:async(W)=>this.pendingPromptsController.delete(W)},this.eventBridge=new PY({getSession:(W)=>this.sessions.get(W),usageBySession:this.usageBySession,aggregateUsageBySession:this.aggregateUsageBySession,emit:(W)=>this.emit(W),persistMessages:(W,J,X)=>{this.invoke("persistSessionMessages",W,J,X)},enqueuePendingPrompt:(W,J)=>this.pendingPromptsController.enqueue(W,J),invokeBackendOptional:(W,...J)=>this.invokeOptional(W,...J)})}async applyInitialOAuthCredentials($){if($.config.apiKey?.trim())return $;let Z=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId});if(!Z?.apiKey)return $;return{...$,config:{...$.config,apiKey:Z.apiKey}}}async startSession($){let Z=$.source??T0.CLI,Q=J0(),W=$.config.sessionId?.trim()??"",J=W||Zx(),X=await this.applyInitialOAuthCredentials($),Y=X.initialMessages??[],j=Y.length>0?b8(Y):D0(),V=await this.invokeOptionalValue("ensureSessionsDir")??"";if(!V)throw Error("session service method not available: ensureSessionsDir");let H=kY(V,J),B=kY(H,`${J}.messages.json`),G=kY(H,`${J}.json`),K=R$($.config),F=b0.parse({version:1,session_id:J,source:Z,pid:process.pid,started_at:Q,status:"running",interactive:$.interactive===!0,provider:X.config.providerId,model:X.config.modelId,cwd:X.config.cwd,workspace_root:K,team_name:X.config.teamName,enable_tools:X.config.enableTools,enable_spawn:X.config.enableSpawnAgent,enable_teams:X.config.enableAgentTeams,prompt:X.prompt?.trim()||void 0,messages_path:B}),A;if(W.length>0&&Y.length>0&&!X.prompt?.trim()){let P=await this.invokeOptionalValue("readSessionManifest",J);if(P)F=P,A={manifestPath:G,messagesPath:P.messages_path||B,manifest:P}}let f=await this.seedAggregateUsageFromArtifacts({initialUsage:j,sessionDir:H,rootMessagesPath:A?.messagesPath??B,manifest:F});this.usageBySession.set(J,j),this.aggregateUsageBySession.set(J,f);let D=M0(this.defaultCapabilities,$.capabilities),U=D?.toolExecutors??this.toolExecutors,T=$.localRuntime,q=T?.extensionContext?.logger??T?.logger,z=T?.extensionContext?.automation,_,E={getSession:(P)=>this.sessions.get(P),subAgentStarts:this.subAgentStarts,onAgentEvent:(P,B0,G0)=>this.eventBridge.dispatchAgentEvent(P,B0,G0),invokeBackendOptional:(P,...B0)=>this.invokeOptional(P,...B0)};_=await WK({input:X,localRuntime:$.localRuntime,sessionId:J,providerSettingsManager:this.providerSettingsManager,defaultTelemetry:this.defaultTelemetry,defaultCapabilities:D,defaultToolPolicies:this.defaultToolPolicies,defaultFetch:this.defaultFetch,onPluginEvent:(P)=>{if(P.name==="plugin_log"){this.eventBridge.handlePluginLog(J,P.payload,q);return}this.eventBridge.handlePluginEvent(J,P,z)},onTeamEvent:(P)=>{this.eventBridge.handleTeamEvent(J,P),_.config.onTeamEvent?.(P)},createSpawnTool:()=>hY(E,_.config,J,U),createSubAgentLifecycleCallbacks:(P)=>yY(E,P,J),readSessionMetadata:async()=>(await this.getSession(J))?.metadata,writeSessionMetadata:async(P)=>{await this.persistSessionMetadata(J,()=>P)}});let C=await this.runtimeBuilder.build(_.runtimeBuilderInput),y=_.config,l=_.providerConfig;if(C.teamRuntime&&!y.teamName?.trim())y.teamName=C.teamRuntime.getTeamName();let o=[...C.tools,...y.extraTools??[]],t=C.extensions??_.extensions,Q0={sessionId:J,providerId:l.providerId,modelId:l.modelId,apiKey:l.apiKey,baseUrl:l.baseUrl,headers:l.headers,knownModels:l.knownModels,providerConfig:l,thinking:y.thinking,reasoningEffort:y.reasoningEffort??l.reasoningEffort,maxTokensPerTurn:y.maxTokensPerTurn,systemPrompt:y.systemPrompt,maxIterations:y.maxIterations,execution:y.execution,prepareTurn:F6(y),tools:o,hooks:_.hooks,extensions:t,hookErrorMode:y.hookErrorMode,initialMessages:_.effectiveInput.initialMessages,userFileContentLoader:LU,toolPolicies:_.toolPolicies,requestToolApproval:_.requestToolApproval?async(P)=>{let B0=_.requestToolApproval,G0=this.sessions.get(J);if(G0)await this.markTurnPending(G0);try{if(!B0)return{approved:!1,reason:"Tool approval callback is not configured."};return await B0(P)}finally{let C0=this.sessions.get(J);if(C0?.status==="pending")await this.markTurnRunning(C0)}}:void 0,telemetry:y.telemetry,onConsecutiveMistakeLimitReached:y.onConsecutiveMistakeLimitReached,completionPolicy:C.completionPolicy,consumePendingUserMessage:()=>{let P=this.pendingPromptsController.consumeSteer(J);return P?v5(P.prompt,P.mode??y.mode):void 0},logger:C.logger??y.logger,extensionContext:y.extensionContext,onEvent:(P)=>this.eventBridge.dispatchAgentEvent(J,y,P)};Q0.hooks={...Q0.hooks,onEvent:async(P)=>{if(await _.hooks?.onEvent?.(P),P.type!=="assistant-message")return;let B0=this.sessions.get(J);if(!B0)return;let G0=B0.agent.getMessages();try{await this.invoke("persistSessionMessages",J,G0,y.systemPrompt)}catch(C0){y.logger?.error?.("Failed to persist session messages after assistant response",{sessionId:J,error:C0}),p2(y.telemetry,{component:"core",operation:"session.persist_messages_after_assistant_response",error:C0,severity:"warn",handled:!0,context:{sessionId:J,providerId:y.providerId,modelId:y.modelId}})}}};let e0=this.createAgentInstance(Q0);if(Q0.onEvent)e0.subscribeEvents(Q0.onEvent);C.registerLeadAgent?.(e0);let l$=r1({agentId:e0.getAgentId(),conversationId:e0.getConversationId(),teamId:C.teamRuntime?.getTeamId(),teamName:C.teamRuntime?.getTeamName(),teamRole:C.teamRuntime?"lead":void 0});if(XK(y,J,W.length>0,K,l$),l$)H$(y.telemetry,{ulid:J,modelId:y.modelId,provider:y.providerId,...l$});if(C.teamRuntime)b9(y.telemetry,{ulid:J,teamId:C.teamRuntime.getTeamId(),teamName:C.teamRuntime.getTeamName(),leadAgentId:e0.getAgentId(),restoredFromPersistence:C.teamRestoredFromPersistence===!0});let r={sessionId:J,config:y,sessionMetadata:X.sessionMetadata,...A?{artifacts:A}:{},source:Z,startedAt:A?.manifest.started_at??Q,updatedAt:A?.manifest.ended_at??A?.manifest.started_at??Q,pendingPrompt:F.prompt,runtime:C,agent:e0,started:!1,status:A?.manifest.status??"running",aborting:!1,interactive:$.interactive===!0,persistedMessages:Y,activeTeamRunIds:new Set,pendingTeamRunUpdates:[],teamRunWaiters:[],pendingPrompts:[],drainingPendingPrompts:!1,pluginSandboxShutdown:_.pluginSandboxShutdown,submitAndExitObserved:!1,lastInteractiveTurnFinishReason:void 0};if(this.sessions.set(J,r),this.emitStatus(J,"running"),Y.length>0&&!A){if(await this.ensureSessionPersisted(r),await this.invoke("persistSessionMessages",r.sessionId,Y,r.config.systemPrompt),!X.prompt?.trim())await this.updateStatus(r,"completed",0)}let M1;try{if(X.prompt?.trim())if(M1=await this.executeTurn(r,{prompt:X.prompt,userImages:X.userImages,userFiles:X.userFiles}),!r.interactive)await this.finalizeSingleRun(r,M1.finishReason);else await this.completeInteractiveTurn(r,M1.finishReason)}catch(P){if(r.interactive&&r.aborting)M1=await this.completeAbortedInteractiveTurn(r);else{p2(r.config.telemetry,{component:"core",operation:"session.start",error:P,severity:"error",handled:!1,context:{sessionId:r.sessionId,providerId:r.config.providerId,modelId:r.config.modelId}});try{await this.failSession(r)}catch(B0){r.config.logger?.error?.("Session failure cleanup threw",{sessionId:r.sessionId,error:B0})}throw P}}return{sessionId:J,manifest:F,manifestPath:G,messagesPath:B,result:M1}}async restoreSession($){return this.sessionVersioning.restoreCheckpoint({...$,getSession:(Z)=>this.getSession(Z),readMessages:(Z)=>this.readSessionMessages(Z),buildStartInput:(Z,Q)=>{let W=Z.restoredCheckpointMetadata?{...Q.sessionMetadata??{},checkpoint:Z.restoredCheckpointMetadata}:Q.sessionMetadata;return{...Q,...W?{sessionMetadata:W}:{},initialMessages:Z.initialMessages}},startSession:(Z)=>this.startSession(Z),getStartedSessionId:(Z)=>Z.sessionId,readRestoredSession:(Z)=>this.getSession(Z)})}async runTurn($){let Z=this.getSessionOrThrow($.sessionId),Q=Z.agent.canStartRun(),W=$.delivery??(Z.interactive&&!Q?"queue":void 0);if(Z.config.telemetry?.capture({event:"session.input_sent",properties:{sessionId:$.sessionId,promptLength:$.prompt.length,userImageCount:$.userImages?.length??0,userFileCount:$.userFiles?.length??0,delivery:W??"immediate"}}),W==="queue"||W==="steer"){this.pendingPromptsController.enqueue($.sessionId,{prompt:$.prompt,mode:$.mode,delivery:W,userImages:$.userImages,userFiles:$.userFiles});return}try{let J=await this.executeTurn(Z,{prompt:$.prompt,mode:$.mode,userImages:$.userImages,userFiles:$.userFiles});if(!Z.interactive)await this.finalizeSingleRun(Z,J.finishReason);else await this.completeInteractiveTurn(Z,J.finishReason);if(J.finishReason==="error"||J.finishReason==="aborted")return J;return queueMicrotask(()=>{this.pendingPromptsController.drain($.sessionId)}),J}catch(J){if(Z.interactive&&Z.aborting)return await this.completeAbortedInteractiveTurn(Z);throw p2(Z.config.telemetry,{component:"core",operation:"session.submit",error:J,severity:"error",handled:!1,context:{sessionId:Z.sessionId,providerId:Z.config.providerId,modelId:Z.config.modelId}}),await this.failSession(Z),J}}async getAccumulatedUsage($){let Z=dJ(this.usageBySession.get($)),Q=dJ(this.aggregateUsageBySession.get($));return Z||Q?{usage:Z,aggregateUsage:Q}:void 0}async abort($,Z){let Q=this.sessions.get($);if(!Q)return;Q.config.telemetry?.capture({event:"session.aborted",properties:{sessionId:$}}),Q.aborting=!0,this.pendingPromptsController.clearAborted(Q),Q.agent.abort(Z)}async stopSession($){let Z=this.sessions.get($);if(!Z)return;if(Z.config.telemetry?.capture({event:"session.stopped",properties:{sessionId:$}}),Z.interactive&&!H0(Z.status)){await this.releaseSessionRuntime(Z,"session_stop");return}if(Z.interactive&&Z.agent.canStartRun()){await this.shutdownSession(Z,{status:this.resolveInteractiveStopStatus(Z),exitCode:this.resolveInteractiveStopExitCode(Z),shutdownReason:"session_stop",endReason:"stopped"});return}Z.aborting=!0,Z.agent.abort(Error("session_stop")),await this.shutdownSession(Z,{status:"cancelled",exitCode:0,shutdownReason:"session_stop",endReason:"stopped"})}async dispose($="session_manager_dispose"){let Z=[...this.sessions.values()];if(Z.length===0)return;await Promise.allSettled(Z.map((Q)=>Q.interactive&&!H0(Q.status)?this.releaseSessionRuntime(Q,$):Q.interactive&&Q.agent.canStartRun()?this.shutdownSession(Q,{status:this.resolveInteractiveStopStatus(Q),exitCode:this.resolveInteractiveStopExitCode(Q),shutdownReason:$,endReason:"disposed"}):this.shutdownSession(Q,{status:"cancelled",exitCode:0,shutdownReason:$,endReason:"disposed"}))),this.usageBySession.clear(),this.aggregateUsageBySession.clear()}async getSession($){let Z=this.sessions.get($);if(Z)return SY(Z);let Q=$.trim();if(!Q)return;let W=await this.getRow(Q);if(W)return v6(W);let J=await this.readManifest(Q);return J?vQ(J):void 0}async listSessions($=200){let Q=(await this.listRows($)).map(v6),W=new Set(Q.map((J)=>J.sessionId));for(let J of this.sessions.values()){if(W.has(J.sessionId))continue;Q.unshift(SY(J))}return Q.slice(0,$)}async deleteSession($){if(this.sessions.has($))await this.stopSession($);let Z=await this.invoke("deleteSession",$);if(Z.deleted)this.usageBySession.delete($),this.aggregateUsageBySession.delete($);return Z.deleted}async updateSession($,Z){return{updated:(await this.invokeOptionalValue("updateSession",{sessionId:$,prompt:Z.prompt,metadata:Z.metadata,title:Z.title}))?.updated===!0}}async readSessionMessages($){let Z=$.trim();if(!Z)return[];let Q=await this.getRow(Z);if(Q?.messagesPath)return I$(Q.messagesPath);let W=await this.readManifest(Z);return I$(W?.messages_path)}async dispatchHookEvent($){await NF($,{queueSpawnRequest:(Z)=>this.invokeOptional("queueSpawnRequest",Z),upsertSubagentSessionFromHook:(Z)=>this.invokeOptionalValue("upsertSubagentSessionFromHook",Z),appendSubagentHookAudit:(Z,Q)=>this.invokeOptional("appendSubagentHookAudit",Z,Q),applySubagentStatus:(Z,Q)=>this.invokeOptional("applySubagentStatus",Z,Q)})}subscribe($,Z){return this.events.subscribe($,Z)}async updateSessionModel($,Z){let Q=this.getSessionOrThrow($);Q.config.modelId=Z,Q.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({modelId:Z}),Q.agent.updateConnection({modelId:Z})}handlePluginEvent($,Z,Q){return this.eventBridge.handlePluginEvent($,Z,Q)}async executeTurn($,Z){let Q=await this.prepareTurnInput($,Z),W=Q.prompt.trim();if(!W)throw Error("prompt cannot be empty");if(!$.artifacts&&!$.pendingPrompt)$.pendingPrompt=W;await this.ensureSessionPersisted($),await this.syncOAuthCredentials($),await this.markTurnRunning($);let J=await this.executeAgentTurn($,W,Q.userImages,Q.userFiles);while(QX($,J.finishReason)){let X=await WX($);if(X.length===0)break;let Y=JX($,X);J=await this.executeAgentTurn($,Y)}return J}async completeInteractiveTurn($,Z){if(m5($))return;$.lastInteractiveTurnFinishReason=Z,await this.markTurnIdle($),$.aborting=!1}resolveInteractiveStopStatus($){let Z=$.lastInteractiveTurnFinishReason;if(!Z)return"cancelled";switch(Z){case"completed":return"completed";case"error":return"failed";case"aborted":case"max_iterations":case"mistake_limit":return"cancelled"}return Z}resolveInteractiveStopExitCode($){return $.lastInteractiveTurnFinishReason==="error"?1:0}async completeAbortedInteractiveTurn($){let Z=new Date,Q=$.agent.getMessages(),W=D0();return $.persistedMessages=Q,$.started=$.started||Q.length>0,this.eventBridge.dispatchAgentEvent($.sessionId,$.config,{type:"done",reason:"aborted",text:"",iterations:0,usage:W}),await this.completeInteractiveTurn($,"aborted"),{text:"",usage:W,messages:Q,toolCalls:[],iterations:0,finishReason:"aborted",model:{id:$.config.modelId,provider:$.config.providerId},startedAt:Z,endedAt:Z,durationMs:0}}async executeAgentTurn($,Z,Q,W){let J=$.started||$.agent.getMessages().length>0,X=$.persistedMessages??$.agent.getMessages(),Y=this.usageBySession.get($.sessionId)??D0(),j=this.aggregateUsageBySession.get($.sessionId)??Y;$.turnUsageBaseline=Y,$.turnAggregateUsageBaseline=j,$.turnPrimaryUsage=D0(),$.turnUsageByAgent=new Map,E9($.config.telemetry,$.sessionId,$.config.mode),Q8($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,model:$.config.modelId,source:"user",mode:$.config.mode,...this.getSessionAgentTelemetryIdentity($)});try{let V=J?()=>$.agent.continue(Z,Q,W):()=>$.agent.run(Z,Q,W),H=await this.runWithAuthRetry($,V,X);$.started=!0;let B=IZ(H.messages,H,X);$.persistedMessages=B;let G=u6($.turnUsageByAgent?.values()??[]),K=f0(Y,H.usage),F=f0(f0(D0(),H.usage),G),A=f0(j,F);return this.usageBySession.set($.sessionId,K),this.aggregateUsageBySession.set($.sessionId,A),await this.persistSessionMetadata($.sessionId,(L)=>({...L??{},totalCost:K.totalCost,aggregatedAgentsCost:A.totalCost,usage:K,aggregateUsage:A})),await this.invoke("persistSessionMessages",$.sessionId,B,$.config.systemPrompt),this.observeTaskCompletionTool($,H),H}catch(V){throw p2($.config.telemetry,{component:"core",operation:"session.turn",error:V,severity:"error",handled:!1,context:{sessionId:$.sessionId,providerId:$.config.providerId,modelId:$.config.modelId}}),await this.invoke("persistSessionMessages",$.sessionId,$.agent.getMessages(),$.config.systemPrompt),V}finally{$.turnUsageBaseline=void 0,$.turnAggregateUsageBaseline=void 0,$.turnPrimaryUsage=void 0,$.turnUsageByAgent=void 0}}observeTaskCompletionTool($,Z){if($.submitAndExitObserved)return;if(!Z.toolCalls.some((W)=>W.name===U0.SUBMIT_AND_EXIT&&W.error===void 0))return;$.submitAndExitObserved=!0,g4($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"submit_and_exit",...this.getSessionAgentTelemetryIdentity($)})}async prepareTurnInput($,Z){let Q=R$($.config),W=Wx(Z.prompt).trim();if(!W)return{prompt:"",userImages:Z.userImages,userFiles:this.resolveAbsoluteFilePaths($.config.cwd,Z.userFiles)};let J=await T8(W,Q);YK($.config.telemetry,J);let X=v5(J.prompt,Z.mode??$.config.mode),Y=this.resolveAbsoluteFilePaths($.config.cwd,Z.userFiles),j=this.resolveAbsoluteFilePaths(Q,J.matchedFiles),V=Array.from(new Set([...Y,...j]));return{prompt:X,userImages:Z.userImages,userFiles:V.length>0?V:void 0}}async ensureSessionPersisted($){if($.artifacts)return;let Z=R$($.config);$.artifacts=await this.invoke("createRootSessionWithArtifacts",{sessionId:$.sessionId,source:$.source,pid:process.pid,interactive:$.interactive,provider:$.config.providerId,model:$.config.modelId,cwd:$.config.cwd,workspaceRoot:Z,teamName:$.config.teamName,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,prompt:$.pendingPrompt,metadata:$.sessionMetadata,startedAt:$.startedAt})}async markTurnRunning($){if($.status==="running")return;await this.updateStatus($,"running",null)}async markTurnPending($){if($.status==="pending")return;await this.updateStatus($,"pending",null)}async markTurnIdle($){if($.status==="idle")return;await this.updateStatus($,"idle",null)}async persistSessionMetadata($,Z){let Q=this.sessions.get($),W=await this.invokeOptionalValue("readSessionManifest",$)??Q?.artifacts?.manifest,J=Z(W?.metadata);if(!Q?.artifacts)return;if((await this.invokeOptionalValue("updateSession",{sessionId:$,metadata:J}))?.updated===!1)return;Q.sessionMetadata=J,Q.artifacts.manifest.metadata=J}async finalizeSingleRun($,Z){if(m5($))return;let Q=Z==="aborted"||$.aborting,W=Z==="error";await this.shutdownSession($,{status:Q?"cancelled":W?"failed":"completed",exitCode:W?1:0,shutdownReason:W?"session_error":"session_complete",endReason:Z})}async failSession($){await this.shutdownSession($,{status:"failed",exitCode:1,shutdownReason:"session_error",endReason:"error"})}async shutdownSession($,Z){if(Z.status==="completed"&&!$.submitAndExitObserved)g4($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"shutdown",...this.getSessionAgentTelemetryIdentity($)});iQ($);let Q=[],W=(J,X)=>{Q.push(X),$.config.logger?.log("Session shutdown cleanup failed",{sessionId:$.sessionId,stage:J,error:X,severity:"warn"}),p2($.config.telemetry,{component:"core",operation:"session.shutdown_cleanup",error:X,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:J,status:Z.status,shutdownReason:Z.shutdownReason,providerId:$.config.providerId,modelId:$.config.modelId}})};if($.artifacts){try{await this.updateStatus($,Z.status,Z.exitCode)}catch(J){W("update_status",J)}try{await $.agent.shutdown(Z.shutdownReason)}catch(J){W("agent_shutdown",J)}}try{await Promise.resolve($.runtime.shutdown(Z.shutdownReason))}catch(J){W("runtime_shutdown",J)}try{await $.pluginSandboxShutdown?.()}catch(J){W("plugin_sandbox_shutdown",J)}if(this.sessions.delete($.sessionId),this.emit({type:"ended",payload:{sessionId:$.sessionId,reason:Z.endReason,ts:Date.now()}}),Q.length>0&&Z.status==="failed")throw Q[0]}async releaseSessionRuntime($,Z){let Q=[],W=(J,X)=>{Q.push(X),$.config.logger?.log("Session runtime cleanup failed",{sessionId:$.sessionId,stage:J,error:X,severity:"warn"}),p2($.config.telemetry,{component:"core",operation:"session.runtime_cleanup",error:X,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:J,reason:Z,providerId:$.config.providerId,modelId:$.config.modelId}})};try{await $.agent.shutdown(Z)}catch(J){W("agent_shutdown",J)}try{await Promise.resolve($.runtime.shutdown(Z))}catch(J){W("runtime_shutdown",J)}try{await $.pluginSandboxShutdown?.()}catch(J){W("plugin_sandbox_shutdown",J)}if(this.sessions.delete($.sessionId),Q.length>0)throw Q[0]}async updateStatus($,Z,Q){if(!$.artifacts)return;let W=await this.invoke("updateSessionStatus",$.sessionId,Z,Q);if(!W.updated)return;let J=await this.invokeOptionalValue("readSessionManifest",$.sessionId)??$.artifacts.manifest;if(J.status=Z,H0(Z))delete J.ended_at,J.exit_code=null;else J.ended_at=W.endedAt??J0(),J.exit_code=typeof Q==="number"?Q:null;$.artifacts.manifest=J,$.status=Z,$.updatedAt=W.endedAt??J0(),$.endedAt=H0(Z)?null:J.ended_at,$.exitCode=J.exit_code,await this.invoke("writeSessionManifest",$.artifacts.manifestPath,J),this.emitStatus($.sessionId,Z)}async runWithAuthRetry($,Z,Q){try{return await Z()}catch(W){if(!Q2($.config.providerId)||!Qx(W))throw W;return await this.syncOAuthCredentials($,{forceRefresh:!0}),$.agent.restore(Q),Z()}}async syncOAuthCredentials($,Z){let Q=null;try{Q=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId,forceRefresh:Z?.forceRefresh})}catch(W){if(W instanceof i7)throw Error(`${W.providerId} requires re-authentication.`);throw W}if(!Q?.apiKey||$.config.apiKey===Q.apiKey)return;$.config.apiKey=Q.apiKey,$.agent.updateConnection({apiKey:Q.apiKey}),$.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({apiKey:Q.apiKey}),$.runtime.teamRuntime?.updateTeammateConnections({apiKey:Q.apiKey})}getSessionOrThrow($){let Z=this.sessions.get($);if(!Z){let Q=new k1($);throw p2(this.defaultTelemetry,{component:"core",operation:"session.active_lookup",error:Q,severity:"warn",handled:!0,context:{sessionId:$,activeSessionCount:this.sessions.size}}),Q}return Z}resolveAbsoluteFilePaths($,Z){if(!Z||Z.length===0)return[];let Q=Z.map((W)=>W.trim()).filter((W)=>W.length>0).map((W)=>$x(W)?W:IY($,W));return Array.from(new Set(Q))}getSessionAgentTelemetryIdentity($){return r1({agentId:$.agent.getAgentId(),conversationId:$.agent.getConversationId(),teamId:$.runtime.teamRuntime?.getTeamId(),teamName:$.runtime.teamRuntime?.getTeamName(),teamRole:$.runtime.teamRuntime?"lead":void 0})}async seedAggregateUsageFromArtifacts($){let Z=await this.summarizePersistedTeammateUsage($.sessionDir,$.rootMessagesPath,$.manifest.session_id),Q=f0($.initialUsage,Z);return this.withPersistedAggregateUsageFloor(Q,$.manifest)}async summarizePersistedTeammateUsage($,Z,Q){let W=IY(Z),J=`${Q}.messages.json`,X;try{X=tI($)}catch{return D0()}let Y=D0();for(let j of X){if(!j.endsWith(".messages.json"))continue;if(j===J)continue;let V=IY($,j);if(V===W)continue;let H=await I$(V);if(H.length===0)continue;Y=f0(Y,b8(H))}return Y}withPersistedAggregateUsageFloor($,Z){let Q=Xx(Z.metadata?.aggregateUsage);if(Q)return Yx($,Q);let W=Z.metadata?.aggregatedAgentsCost;if(typeof W!=="number"||!Number.isFinite(W)||W<=$.totalCost)return $;return{...$,totalCost:W}}emitStatus($,Z){this.emitSessionSnapshot($),this.emit({type:"status",payload:{sessionId:$,status:Z}})}async emitSessionSnapshot($){let Z=await this.getSession($);if(!Z)return;this.emit({type:"session_snapshot",payload:{sessionId:$,snapshot:U1({session:Z,messages:await this.readSessionMessages($),usage:this.usageBySession.get($),aggregateUsage:this.aggregateUsageBySession.get($)})}})}emit($){this.events.emit($)}async listRows($){return this.invoke("listSessions",Math.min(Math.max(1,Math.floor($)),_U))}async getRow($){let Z=$.trim();if(!Z)return;return(await this.listRows(_U)).find((W)=>W.sessionId===Z)}async readManifest($){let Z=$.trim();if(!Z)return;return await this.invokeOptionalValue("readSessionManifest",Z)}invoke($,...Z){return fU(this.sessionService,$,...Z)}invokeOptional($,...Z){return UU(this.sessionService,$,...Z)}invokeOptionalValue($,...Z){return DU(this.sessionService,$,...Z)}}function Vx($){return{text:$.text,usage:$.usage,inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,iterations:$.iterations,finishReason:$.finishReason,toolCalls:$.toolCalls.map((Z)=>({name:Z.name,input:Z.input,output:Z.output,error:Z.error,durationMs:Z.durationMs}))}}function Hx($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}function VU($={}){let Z=new T1({sessionService:new z1(new L1),fetch:$.fetch,telemetry:$.telemetry});return{async startSession(Q){let W=(Q.cwd?.trim()||Q.workspaceRoot).trim(),J=await Z.startSession({source:Q.source?.trim()||T0.CLI,interactive:!1,config:{providerId:jx(Q.provider),modelId:Q.model,apiKey:Q.apiKey?.trim()||void 0,cwd:W,workspaceRoot:Q.workspaceRoot,systemPrompt:Q.systemPrompt??"",mode:Hx(Q),maxIterations:Q.maxIterations,enableTools:Q.enableTools!==!1,enableSpawnAgent:Q.enableSpawn!==!1,enableAgentTeams:Q.enableTeams!==!1,disableMcpSettingsTools:Q.disableMcpSettingsTools,missionLogIntervalSteps:Q.missionStepInterval,missionLogIntervalMs:Q.missionTimeIntervalMs},toolPolicies:Q.toolPolicies??{"*":{autoApprove:Q.autoApproveTools!==!1}},localRuntime:{configExtensions:Q.configExtensions}});return{sessionId:J.sessionId,startResult:{sessionId:J.sessionId,manifestPath:J.manifestPath,messagesPath:J.messagesPath}}},async sendSession(Q,W){let J=await Z.runTurn({sessionId:Q,prompt:W.prompt,userImages:W.attachments?.userImages,userFiles:W.attachments?.userFiles?.map((X)=>X.content)});if(!J)throw Error("local hub schedule runtime returned no turn result");return{result:Vx(J)}},async abortSession(Q){return await Z.abort(Q,Error("hub schedule abort")),{applied:!0}},async stopSession(Q){return await Z.stopSession(Q),{applied:!0}}}}import{resolveClineBuildEnv as DD}from"@cline/shared";function Bx($){if(typeof $==="string")return $.trim()||void 0;if(!Array.isArray($))return;return $.map((Q)=>{if(Q&&typeof Q==="object"&&"type"in Q&&Q.type==="text"&&"text"in Q&&typeof Q.text==="string")return Q.text.trim();return""}).filter(Boolean).join(`
736
+ `).trim()||void 0}var zU=120,xY="...";function J9($){let Z=$.trim();if(!Z)return"";if(Buffer.byteLength(Z,"utf8")<=zU)return Z;let Q=zU-Buffer.byteLength(xY,"utf8");if(Q<=0)return xY;let W="";for(let J of Z){if(Buffer.byteLength(W+J,"utf8")>Q)break;W+=J}return`${W}${xY}`}async function TU($){let Z=$?.sessionId?.trim()||"unknown",Q=typeof $?.metadata?.messagesPath==="string"?$.metadata.messagesPath:void 0,J=[...await I$(Q)].reverse().find((V)=>V.role==="assistant"),X=J?Bx(J.content):void 0,Y=$?.workspaceRoot?.trim()||"workspace",j=typeof $?.metadata?.prompt==="string"?$.metadata.prompt.trim():Y;return{title:`Task completed (${Z})`,body:J9(X&&X.length>0?X:j.length>0?j:Y),severity:"info"}}import{captureSdkError as e7,createSessionId as Vg}from"@cline/shared";import{createSessionId as Ax}from"@cline/shared";import{createSessionId as Fx}from"@cline/shared";function Gx($){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 Kx($){let Z=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):{};if($.parentSessionId?.trim())Z.parentSessionId=$.parentSessionId;if($.parentAgentId?.trim())Z.parentAgentId=$.parentAgentId;if($.agentId?.trim())Z.agentId=$.agentId;if($.conversationId?.trim())Z.conversationId=$.conversationId;if($.messagesPath?.trim())Z.messagesPath=$.messagesPath;if($.prompt?.trim())Z.prompt=$.prompt;if($.provider?.trim())Z.provider=$.provider;if($.model?.trim())Z.model=$.model;if($.source?.trim())Z.source=$.source;if(typeof $.pid==="number")Z.pid=$.pid;return Object.keys(Z).length>0?Z:void 0}function a7($,Z,Q,W){return{sessionId:$.sessionId,workspaceRoot:$.workspaceRoot,cwd:$.cwd,createdAt:Date.parse($.startedAt),updatedAt:Date.parse($.updatedAt),createdByClientId:Z?.createdByClientId??"hub",status:Gx($.status),participants:Z?[...Z.participants.values()]:[],metadata:Kx($),runtimeOptions:{enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,mode:typeof $.metadata?.mode==="string"?$.metadata.mode:void 0,systemPrompt:typeof $.metadata?.systemPrompt==="string"?$.metadata.systemPrompt:void 0},runtimeSession:$.agentId?{agentId:$.agentId,team:$.teamName?{teamId:$.teamName}:void 0}:void 0,...Q?{usage:{...Q}}:{},...W?{aggregateUsage:{...W}}:{}}}function c($,Z){return{version:$.version,requestId:$.requestId,ok:!0,...Z!==void 0?{payload:Z}:{}}}function x($,Z,Q){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:Z,message:Q}}}function s7($){return $&&typeof $==="object"&&!Array.isArray($)?$:void 0}function I0($){if(typeof $.payload?.sessionId==="string")return $.payload.sessionId.trim();return $.sessionId?.trim()??""}function r2($,Z,Q){return{version:"v1",event:$,eventId:Fx("hevt_"),sessionId:Q,timestamp:Date.now(),payload:Z}}async function o0($,Z){let Q=await $.sessionHost.getSession(Z);if(!Q)return;let W=await $.sessionHost.getAccumulatedUsage?.(Z);return a7(Q,$.sessionState.get(Z),W?.usage,W?.aggregateUsage)}async function t0($,Z){let Q=await $.sessionHost.getSession(Z);if(!Q)return;let[W,J]=await Promise.all([typeof $.sessionHost.readSessionMessages==="function"?$.sessionHost.readSessionMessages(Z):[],$.sessionHost.getAccumulatedUsage?.(Z)]);return U1({session:Q,messages:W,usage:J?.usage,aggregateUsage:J?.aggregateUsage})}function o7($,Z,Q,W,J={}){let X=$.sessionState.get(Z);if(X){if(J.interactive!==void 0)X.interactive=J.interactive;if(!X.participants.has(Q))X.participants.set(Q,{clientId:Q,attachedAt:Date.now(),role:W});return X}let Y={createdByClientId:Q,interactive:J.interactive??!0,participants:new Map([[Q,{clientId:Q,attachedAt:Date.now(),role:W}]])};return $.sessionState.set(Z,Y),Y}async function gY($,Z){let Q=Ax("approval_"),W=Z.sessionId;if($.sessionState.get(W)?.interactive===!1)return{approved:!1,reason:"Tool approval requires an interactive session, but this session is non-interactive."};return await new Promise((X)=>{$.pendingApprovals.set(Q,{sessionId:W,resolve:X}),$.publish($.buildEvent("approval.requested",{approvalId:Q,sessionId:Z.sessionId,agentId:Z.agentId,conversationId:Z.conversationId,iteration:Z.iteration,toolCallId:Z.toolCallId,toolName:Z.toolName,inputJson:JSON.stringify(Z.input??null),policy:Z.policy},W))})}function mY($,Z,Q){let W=$.pendingApprovals.get(Z);if(!W)return;return $.pendingApprovals.delete(Z),W.resolve(Q),{sessionId:W.sessionId}}function vY($,Z,Q){let W=0;for(let[J,X]of[...$.pendingApprovals.entries()]){if(!Z({approvalId:J,sessionId:X.sessionId}))continue;$.pendingApprovals.delete(J),X.resolve({approved:!1,reason:Q}),$.publish($.buildEvent("approval.resolved",{approvalId:J,approved:!1,cancelled:!0,reason:Q},X.sessionId)),W+=1}return W}async function OU($,Z){let Q=typeof Z.payload?.approvalId==="string"?Z.payload.approvalId.trim():"";if(!$.pendingApprovals.get(Q))return x(Z,"approval_not_found",`Unknown approval: ${Q}`);let J=typeof Z.payload?.reason==="string"?Z.payload.reason:Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)&&typeof Z.payload.payload.reason==="string"?Z.payload.payload.reason:void 0,X=Z.payload?.approved===!0,Y=mY($,Q,{approved:X,reason:J});if(!Y)return x(Z,"approval_not_found",`Unknown approval: ${Q}`);return $.publish($.buildEvent("approval.resolved",{approvalId:Q,approved:X,reason:J},Y.sessionId)),c(Z,{approvalId:Q,approved:X})}import{createSessionId as Dx}from"@cline/shared";function fx($){if($ instanceof Error)return{name:$.name,message:$.message,stack:$.stack};if($===void 0)return;return $}var qU={debug:10,info:20,warn:30,error:40,silent:50};function Ux(){let $=process.env.CLINE_HUB_LOG_LEVEL?.trim().toLowerCase();if($==="debug"||$==="info"||$==="warn"||$==="error"||$==="silent")return $;return process.env.VITEST?"error":"info"}function u($,Z,Q={}){if(qU[$]<qU[Ux()])return;let W=JSON.stringify({ts:new Date().toISOString(),level:$,component:"hub",message:Z,...Object.fromEntries(Object.entries(Q).map(([J,X])=>[J,fx(X)]).filter(([,J])=>J!==void 0))});if($==="error"||$==="warn"){console.error(`[hub] ${W}`);return}console.log(`[hub] ${W}`)}function cY($,Z){let Q=Z instanceof Error?Z.stack||Z.message:String(Z);u("error",$,{error:Q})}async function MU($,Z,Q,W,J,X){let Y=Dx("capreq_"),j=performance.now();return u("info","capability.request.start",{requestId:Y,sessionId:Z,capabilityName:Q,targetClientId:J}),await new Promise((V,H)=>{$.pendingCapabilityRequests.set(Y,{sessionId:Z,targetClientId:J,capabilityName:Q,onProgress:X,resolve:(B)=>{if(u(B.ok?"info":"warn","capability.request.end",{requestId:Y,sessionId:Z,capabilityName:Q,targetClientId:J,ok:B.ok,error:B.error,durationMs:Math.round(performance.now()-j)}),!B.ok){H(Error(B.error||`Capability ${Q} was rejected by ${J}.`));return}V(B.payload)}}),$.publish($.buildEvent("capability.requested",{requestId:Y,targetClientId:J,capabilityName:Q,payload:W},Z)),u("info","capability.request.published",{requestId:Y,sessionId:Z,capabilityName:Q,targetClientId:J})})}function RU($,Z){let Q=typeof Z.payload?.requestId==="string"?Z.payload.requestId.trim():"",W=$.pendingCapabilityRequests.get(Q);if(!W)return x(Z,"capability_not_found",`Unknown capability request: ${Q}`);if((Z.clientId?.trim()||"")!==W.targetClientId)return x(Z,"capability_wrong_client",`Capability request ${Q} is owned by ${W.targetClientId}`);if(Z.sessionId?.trim()&&Z.sessionId.trim()!==W.sessionId)return x(Z,"capability_wrong_session",`Capability request ${Q} belongs to session ${W.sessionId}`);let X=Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)?Z.payload.payload:{};return W.onProgress?.(X),c(Z,{requestId:Q})}function u$($,Z,Q){let W=0;for(let[J,X]of[...$.pendingCapabilityRequests.entries()]){if(!Z({requestId:J,...X}))continue;$.pendingCapabilityRequests.delete(J),u("warn","capability.request.cancelled",{requestId:J,sessionId:X.sessionId,capabilityName:X.capabilityName,targetClientId:X.targetClientId,reason:Q}),X.resolve({ok:!1,error:Q}),$.publish($.buildEvent("capability.resolved",{requestId:J,capabilityName:X.capabilityName,targetClientId:X.targetClientId,ok:!1,cancelled:!0,error:Q},X.sessionId)),W+=1}return W}async function EU($,Z){let Q=typeof Z.payload?.sessionId==="string"?Z.payload.sessionId.trim():Z.sessionId?.trim()||"",W=typeof Z.payload?.capabilityName==="string"?Z.payload.capabilityName.trim():"",J=typeof Z.payload?.targetClientId==="string"?Z.payload.targetClientId.trim():"";if(!Q||!W||!J)return x(Z,"invalid_capability_request","capability.request requires sessionId, capabilityName, and targetClientId");try{let X=Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)?Z.payload.payload:{},Y=await $.requestCapability(Q,W,X,J);return c(Z,Y)}catch(X){return x(Z,"capability_request_failed",X instanceof Error?X.message:String(X))}}function NU($,Z){let Q=typeof Z.payload?.requestId==="string"?Z.payload.requestId.trim():"",W=$.pendingCapabilityRequests.get(Q);if(!W)return x(Z,"capability_not_found",`Unknown capability request: ${Q}`);let J=Z.clientId?.trim()||"";if(J!==W.targetClientId)return x(Z,"capability_wrong_client",`Capability request ${Q} is owned by ${W.targetClientId}`);if(Z.sessionId?.trim()&&Z.sessionId.trim()!==W.sessionId)return x(Z,"capability_wrong_session",`Capability request ${Q} belongs to session ${W.sessionId}`);$.pendingCapabilityRequests.delete(Q);let X=Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)?Z.payload.payload:void 0,Y=typeof Z.payload?.error==="string"?Z.payload.error:void 0,j=Z.payload?.ok===!0;return u(j?"info":"warn","capability.respond",{requestId:Q,sessionId:W.sessionId,capabilityName:W.capabilityName,targetClientId:W.targetClientId,respondedByClientId:J,ok:j,error:Y}),W.resolve({ok:j,payload:X,error:Y}),$.publish($.buildEvent("capability.resolved",{requestId:Q,capabilityName:W.capabilityName,targetClientId:W.targetClientId,respondedByClientId:J,ok:j,payload:X,error:Y},W.sessionId)),c(Z,{requestId:Q,ok:j})}import{createSessionId as Lx}from"@cline/shared";function wU($,Z){let Q=Z.payload,W=Q?.clientId?.trim()||Z.clientId?.trim()||Lx("client_");return $.clients.set(W,{clientId:W,clientType:Q?.clientType??"unknown",displayName:Q?.displayName,actorKind:Q?.actorKind??"client",connectedAt:Date.now(),lastSeenAt:Date.now(),transport:Q?.transport??"native",capabilities:Q?.capabilities??[],metadata:Q?.metadata,workspaceContext:Q?.workspaceContext}),$.publish($.buildEvent("hub.client.registered",{clientId:W,clientType:Q?.clientType??"unknown",displayName:Q?.displayName,connectedAt:Date.now()})),c(Z,{clientId:W})}function CU($,Z){let Q=Z.clientId?.trim(),W=Q?$.clients.get(Q):void 0;if(!Q||!W)return x(Z,"client_not_found","Client is not registered with this hub.");let J=s7(Z.payload?.metadata);if(W.lastSeenAt=Date.now(),J)W.metadata=JSON.parse(JSON.stringify(J));return c(Z)}function PU($,Z,Q){let W=Z.clientId?.trim();if(W)$.clients.delete(W),Q(W),$.publish($.buildEvent("hub.client.disconnected",{clientId:W}));return c(Z)}function SU($,Z){return c(Z,{clients:[...$.clients.values()]})}_0();import{existsSync as hU,mkdirSync as _x,readdirSync as zx,readFileSync as Tx,rmSync as Ox,writeFileSync as qx}from"node:fs";import{dirname as Mx,join as bU}from"node:path";import{CONNECTOR_PLATFORMS as Rx,connectorChannelsFromPlatforms as Ex,listConnectorCatalog as kU,shouldIncludeConnectorField as Nx}from"@cline/shared";import{resolveConnectorDataDir as wx,resolveConnectorSettingsPath as dY}from"@cline/shared/storage";var Cx=1,yU={startedAt:($)=>typeof $.startedAt==="string"?$.startedAt:void 0,port:($)=>typeof $.port==="number"?$.port:void 0,baseUrl:($)=>typeof $.baseUrl==="string"?$.baseUrl:void 0,connectionMode:($)=>typeof $.connectionMode==="string"?$.connectionMode:void 0,userName:($)=>typeof $.userName==="string"?$.userName:void 0,botUsername:($)=>typeof $.botUsername==="string"?$.botUsername:void 0,applicationId:($)=>typeof $.applicationId==="string"?$.applicationId:void 0,phoneNumberId:($)=>typeof $.phoneNumberId==="string"?$.phoneNumberId:void 0},Px={discord:{required:["userName","applicationId"],optional:["startedAt","port","baseUrl"]},telegram:{required:["botUsername"],optional:["startedAt"]},gchat:{required:["userName"],optional:["startedAt","port","baseUrl"]},linear:{required:["userName"],optional:["startedAt","port","baseUrl"]},slack:{required:["userName"],optional:["startedAt","connectionMode","port","baseUrl"]},whatsapp:{required:["userName"],optional:["startedAt","phoneNumberId","port","baseUrl"]}};function d$($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function H9($){return typeof $==="string"?$.trim():void 0}function IU($){if(!hU($))return;try{let Z=JSON.parse(Tx($,"utf8"));return d$(Z)?Z:void 0}catch{return}}function lY(){let $=IU(dY()),Z=d$($?.connectors)?$.connectors:{},Q={};for(let[W,J]of Object.entries(Z)){if(!d$(J))continue;let X=H9(J.type),Y=H9(J.configuredAt),j=H9(J.updatedAt);if(!X||!Y||!j)continue;let V=t7(J.values),H=d$(J.security)?{enabled:J.security.enabled===!0,values:t7(J.security.values)}:void 0;Q[W]={type:X,values:V,security:H,configuredAt:Y,updatedAt:j}}return{version:Cx,connectors:Q}}function xU($){let Z=dY();_x(Mx(Z),{recursive:!0}),qx(Z,`${JSON.stringify($,null,2)}
737
+ `,"utf8")}function t7($){if(!d$($))return{};let Z={};for(let[Q,W]of Object.entries($))if(typeof W==="string")Z[Q]=W.trim();return Z}function Sx($){if(!Number.isInteger($)||$<=0)return!1;try{return process.kill($,0),!0}catch{return!1}}function bx($){let Z=bU(wx(),$);if(!hU(Z))return[];return zx(Z).filter((Q)=>Q.endsWith(".json")&&!Q.endsWith(".threads.json")).map((Q)=>bU(Z,Q))}function yx($,Z,Q){let W=Z.botUsername??Z.userName??Z.applicationId??Z.phoneNumberId??String(Q);return`${$}:${W}`}function hx($,Z){let Q=IU(Z);if(!Q)return;let W=typeof Q.pid==="number"?Q.pid:void 0,J=typeof Q.hubUrl==="string"?Q.hubUrl:typeof Q.rpcAddress==="string"?Q.rpcAddress:void 0;if(!W||!J||!Sx(W))return;let X=Px[$];if(!X)return;let Y={};for(let j of X.required){let V=yU[j](Q);if(!V||typeof V==="string"&&!V.trim())return;Y[j]=V}for(let j of X.optional){let V=yU[j](Q);if(V!==void 0)Y[j]=V}return{id:yx($,Y,W),type:$,pid:W,hubUrl:J,...Y}}function kx(){let $=[];for(let{name:Z}of kU())for(let Q of bx(Z)){let W=hx(Z,Q);if(W)$.push(W)}return $.sort((Z,Q)=>{if(Z.type!==Q.type)return Z.type.localeCompare(Q.type);let W=Z.botUsername??Z.userName??"",J=Q.botUsername??Q.userName??"";return W.localeCompare(J)})}function Ix(){let $=lY();return Object.entries($.connectors).map(([Z,Q])=>({id:Z,type:Q.type,configuredAt:Q.configuredAt,updatedAt:Q.updatedAt})).sort((Z,Q)=>Z.type.localeCompare(Q.type))}function pY(){return{available:Ex(),active:kx(),configured:Ix()}}function xx($,Z){if($.required&&!Z[$.flag]?.trim())throw Error(`${$.label} is required`)}function gx($,Z){let Q={};for(let J of $.fields)Q[J.flag]=Z[J.flag]??J.initialValue??"";let W={};for(let J of $.fields){if(!Nx(J,Q))continue;xx(J,Q),W[J.flag]=Q[J.flag]}return W}function mx($){if(!d$($))throw Error("connector.configure payload must be an object.");let Z=H9($.channel);if(!Z)throw Error("channel is required");let Q=Rx.find((K)=>K.id===Z);if(!Q)throw Error(`unknown connector channel: ${Z}`);if(!new Set(kU().map((K)=>K.name)).has(Q.id))throw Error(`connector channel is not available: ${Z}`);let J=t7($.values),X=gx(Q,J),Y=d$($.security)?$.security:{},j=Y.enabled===!0,V=t7(Y.values);if(j&&Q.security)for(let K of Q.security.fields){let F=V[K.key];if(!F)throw Error(K.requiredMessage);let A=K.validate?.(F);if(A)throw Error(A)}let H=lY(),B=new Date().toISOString(),G=H.connectors[Z];return H.connectors[Z]={type:Z,values:X,security:j?{enabled:!0,values:V}:{enabled:!1,values:{}},configuredAt:G?.configuredAt??B,updatedAt:B},xU(H),pY()}function vx($){if(!d$($))throw Error("connector.delete_config payload must be an object.");let Z=H9($.channel);if(!Z)throw Error("channel is required");let Q=lY();if(delete Q.connectors[Z],Object.keys(Q.connectors).length>0)xU(Q);else Ox(dY(),{force:!0});return pY()}function cx($){return $==="connector.configure"||$==="connector.delete_config"}function uY($,Z,Q){if(!cx(Z.command))return;W8($.telemetry,{ulid:Z.sessionId??Z.requestId??"hub",tool:Z.command,success:Q})}async function gU($,Z){try{if(Z.command==="connector.channels")return c(Z,pY());if(Z.command==="connector.configure"){let Q=mx(Z.payload);return uY($,Z,!0),c(Z,Q)}if(Z.command==="connector.delete_config"){let Q=vx(Z.payload);return uY($,Z,!0),c(Z,Q)}return x(Z,"unsupported_connector_command",`unsupported connector command: ${Z.command}`)}catch(Q){return uY($,Z,!1),x(Z,"connector_command_failed",Q instanceof Error?Q.message:String(Q))}}var ux=30000;function dx($){if($==="aborted")return"run.aborted";if($==="error"||$==="failed")return"run.failed";return"run.completed"}function lx($){if($.finishReason!=="error")return;return $.text.trim()||void 0}function px($,Z,Q){let W=Q instanceof Error&&Q.message.trim()?Q.message:`Unknown session: ${Z}`;return x($,s$,W)}function rx($){return $?$:void 0}function ix($){let Z=typeof $.timeoutMs==="number"?$.timeoutMs:typeof $.timeout_ms==="number"?$.timeout_ms:void 0;if(Z&&Number.isFinite(Z)&&Z>0)return Math.floor(Z);let Q=typeof $.timeoutSeconds==="number"?$.timeoutSeconds:typeof $.timeout_seconds==="number"?$.timeout_seconds:void 0;if(Q&&Number.isFinite(Q)&&Q>0)return Math.floor(Q*1000);return}async function nx($,Z,Q,W){let J=performance.now(),X=!1,Y={command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Q.sessionId,timeoutMs:W},j=setInterval(()=>{if(X)return;let B=Math.round(performance.now()-J);u("warn","run.heartbeat",{...Y,elapsedMs:B}),$.publish($.buildEvent("run.heartbeat",{requestId:Z.requestId,elapsedMs:B,...W?{timeoutMs:W}:{}},Q.sessionId))},ux),V=$.sessionHost.runTurn(Q);V.then((B)=>{if(!X)return;u("warn","run.late_end",{...Y,elapsedMs:Math.round(performance.now()-J),finishReason:B?.finishReason})},(B)=>{if(!X)return;u("error","run.late_error",{...Y,elapsedMs:Math.round(performance.now()-J),error:B})});let H;try{if(!W)return await V;return await Promise.race([V,new Promise((B,G)=>{H=setTimeout(()=>{let K=`Hub run ${Z.command} timed out after ${W}ms.`;X=!0,clearInterval(j),G(Error(K)),u("error","run.timeout",{...Y,elapsedMs:Math.round(performance.now()-J)}),vY($,(F)=>F.sessionId===Q.sessionId,K),u$($,(F)=>F.sessionId===Q.sessionId,K),$.sessionHost.abort(Q.sessionId,K).catch((F)=>{u("error","run.timeout_abort_failed",{...Y,error:F})})},W)})])}finally{if(X=!0,clearInterval(j),H)clearTimeout(H)}}async function mU($,Z){let Q=I0(Z),W=Z.payload&&typeof Z.payload==="object"?Z.payload:{},J=typeof W.prompt==="string"?W.prompt:typeof W.input==="string"?W.input:"";if(!J.trim())return x(Z,"invalid_session_input","session input requires a prompt string");$.publish($.buildEvent("run.started",void 0,Q));let X=W.attachments&&typeof W.attachments==="object"&&!Array.isArray(W.attachments)?W.attachments:void 0,Y=Array.isArray(X?.userFiles)?X.userFiles.filter((B)=>typeof B==="string"):void 0,j=ix(W);$.suppressNextTerminalEventBySession.set(Q,"run.start.reply");let V;try{V=await nx($,Z,{sessionId:Q,prompt:J,mode:rx(W.mode),delivery:W.delivery==="queue"||W.delivery==="steer"?W.delivery:void 0,userImages:Array.isArray(X?.userImages)?X.userImages:void 0,userFiles:Y,timeoutMs:j},j)}catch(B){if($.suppressNextTerminalEventBySession.get(Q)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Q);if(I1(B))return px(Z,Q,B);throw $.publish($.buildEvent("run.failed",{reason:"error",error:B instanceof Error?B.message:String(B)},Q)),B}if(V){let B=await t0($,Q),G=lx(V);if($.publish($.buildEvent(dx(V.finishReason),{reason:V.finishReason,...G?{error:G}:{},result:V,...B?{snapshot:B}:{}},Q)),$.suppressNextTerminalEventBySession.get(Q)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Q)}else $.suppressNextTerminalEventBySession.delete(Q);let H=await t0($,Q);return c(Z,V||H?{...V?{result:V}:{},...H?{snapshot:H}:{}}:void 0)}async function vU($,Z){let Q=I0(Z),W=typeof Z.payload?.reason==="string"?Z.payload.reason:"Run was aborted before pending approval or capability request was resolved.";vY($,(J)=>J.sessionId===Q,W);try{await $.sessionHost.abort(Q,Z.payload?.reason)}catch(J){u("warn","run.abort_failed",{command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Q,error:J})}finally{u$($,(J)=>J.sessionId===Q,W)}return c(Z,{applied:!0})}async function cU($,Z){let Q=D4(Z.payload?.payload);if(!Q)return x(Z,"invalid_hook_payload","session.hook requires a valid hook event payload");return await $.sessionHost.dispatchHookEvent(Q),c(Z,{applied:!0})}async function uU($,Z){switch(Z.type){case"chunk":return;case"agent_event":await ax($,Z);return;case"hook":if(Z.payload.hookEventName==="tool_call")$.publish($.buildEvent("tool.started",{toolName:Z.payload.toolName},Z.payload.sessionId));else if(Z.payload.hookEventName==="tool_result")$.publish($.buildEvent("tool.finished",{toolName:Z.payload.toolName},Z.payload.sessionId));return;case"team_progress":{let Q={type:"team_progress_projection",version:1,sessionId:Z.payload.sessionId,summary:Z.payload.summary,lastEvent:Z.payload.lifecycle};$.publish($.buildEvent("team.progress",Q,Z.payload.sessionId));return}case"pending_prompts":$.publish($.buildEvent("session.pending_prompts",{sessionId:Z.payload.sessionId,prompts:Z.payload.prompts},Z.payload.sessionId));return;case"pending_prompt_submitted":{let Q={id:Z.payload.id,prompt:Z.payload.prompt,delivery:Z.payload.delivery,attachmentCount:Z.payload.attachmentCount,userImages:Z.payload.userImages,userFiles:Z.payload.userFiles};$.publish($.buildEvent("session.pending_prompt_submitted",{sessionId:Z.payload.sessionId,prompt:Q},Z.payload.sessionId));return}case"session_snapshot":$.publish($.buildEvent("session.updated",{sessionId:Z.payload.sessionId,snapshot:Z.payload.snapshot},Z.payload.sessionId));return;case"status":{let[Q,W]=await Promise.all([o0($,Z.payload.sessionId),t0($,Z.payload.sessionId)]);if(Q)$.publish($.buildEvent("session.updated",{session:Q,...W?{snapshot:W}:{}},Z.payload.sessionId));return}case"ended":await sx($,Z);return;default:return}}async function ax($,Z){let{sessionId:Q,event:W}=Z.payload;if(W.type==="iteration_start"){$.publish($.buildEvent("iteration.started",{iteration:W.iteration},Q));return}if(W.type==="iteration_end"){$.publish($.buildEvent("iteration.finished",{iteration:W.iteration,hadToolCalls:W.hadToolCalls,toolCallCount:W.toolCallCount},Q));return}if(W.type==="content_start"){if(W.contentType==="text"&&typeof W.text==="string"&&W.text.length>0){$.publish($.buildEvent("assistant.delta",{text:W.text},Q));return}if(W.contentType==="reasoning"){if(W.redacted&&!W.reasoning){$.publish($.buildEvent("reasoning.delta",{text:"",redacted:!0},Q));return}if(typeof W.reasoning==="string"&&W.reasoning.length>0)$.publish($.buildEvent("reasoning.delta",{text:W.reasoning,redacted:W.redacted===!0},Q));return}if(W.contentType==="tool"){$.publish($.buildEvent("tool.started",{toolCallId:W.toolCallId,toolName:W.toolName,input:W.input},Q));return}}if(W.type==="content_end"){switch(W.contentType){case"text":$.publish($.buildEvent("assistant.finished",{text:W.text},Q));break;case"reasoning":$.publish($.buildEvent("reasoning.finished",{reasoning:W.reasoning},Q));break;case"tool":$.publish($.buildEvent("tool.finished",{toolCallId:W.toolCallId,toolName:W.toolName,output:W.output,error:W.error},Q));break}return}if(W.type==="usage"){let J;try{J=await $.sessionHost.getAccumulatedUsage?.(Q)}catch{J=void 0}$.publish($.buildEvent("usage.updated",{sessionId:Q,delta:{inputTokens:W.inputTokens,outputTokens:W.outputTokens,cacheReadTokens:W.cacheReadTokens??0,cacheWriteTokens:W.cacheWriteTokens??0,totalCost:W.cost??0},totals:{inputTokens:W.totalInputTokens,outputTokens:W.totalOutputTokens,cacheReadTokens:W.totalCacheReadTokens??0,cacheWriteTokens:W.totalCacheWriteTokens??0,totalCost:W.totalCost??0},usage:J?.usage,aggregateUsage:J?.aggregateUsage,agent:{kind:Z.payload.teamRole==="teammate"?"teammate":W.parentAgentId?"subagent":"lead",agentId:W.agentId,conversationId:W.conversationId,parentAgentId:W.parentAgentId,teamAgentId:Z.payload.teamAgentId,teamRole:Z.payload.teamRole}},Q));return}if(W.type==="done")$.publish($.buildEvent("agent.done",{reason:W.reason,text:W.text,iterations:W.iterations,usage:W.usage},Q))}async function sx($,Z){let Q=$.suppressNextTerminalEventBySession.get(Z.payload.sessionId),W=Q===Z.payload.reason||Q==="run.start.reply";if(W)$.suppressNextTerminalEventBySession.delete(Z.payload.sessionId);let[J,X]=await Promise.all([o0($,Z.payload.sessionId),t0($,Z.payload.sessionId)]);if(Z.payload.reason==="completed"){let Y=await TU(J);$.publish($.buildEvent("ui.notify",Y,Z.payload.sessionId))}if(W)return;$.publish($.buildEvent(Z.payload.reason==="aborted"?"run.aborted":Z.payload.reason==="error"||Z.payload.reason==="failed"?"run.failed":"run.completed",{reason:Z.payload.reason,...X?{snapshot:X}:{}},Z.payload.sessionId))}import{createSessionId as pU,parseRuntimeConfigExtensions as rU}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as j10,HUB_COMPACTION_CAPABILITY as V10,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as H10,HUB_HOOK_CAPABILITY_PREFIX as B10,HUB_MISTAKE_LIMIT_CAPABILITY as G10,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as K10,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as F10,isHubToolExecutorName as ox}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as L10,HUB_COMPACTION_CAPABILITY as _10,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as z10,HUB_HOOK_CAPABILITY_PREFIX as T10,HUB_MISTAKE_LIMIT_CAPABILITY as O10,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as q10,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as M10}from"@cline/shared";var tx=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function i2($){return $&&typeof $==="object"&&!Array.isArray($)?JSON.parse(JSON.stringify($)):void 0}function ex($,Z){let Q=typeof $.name==="string"?$.name.trim():"",W=typeof $.description==="string"?$.description:"",J=typeof $.capabilityName==="string"?$.capabilityName.trim():"",X=i2($.inputSchema);if(!Q||!W||!X||!J||Z.has(J))return;return Z.add(J),{kind:"tool",capabilityName:J,name:Q,description:W,inputSchema:X,...i2($.lifecycle)?{lifecycle:i2($.lifecycle)}:{}}}function iY($){if(!Array.isArray($))return[];let Z=[],Q=new Set;for(let W of $){if(!W||typeof W!=="object"||Array.isArray(W))continue;let J=W,X=J.kind,Y=typeof J.capabilityName==="string"?J.capabilityName.trim():"";if(!Y||Q.has(Y))continue;if(X==="tool"){let j=ex(J,Q);if(j)Z.push(j);continue}if(X==="toolExecutor"){let j=J.executor;if(!ox(j))continue;Q.add(Y),Z.push({kind:"toolExecutor",capabilityName:Y,executor:j});continue}if(X==="hook"){let j=typeof J.name==="string"?J.name.trim():"";if(!j)continue;Q.add(Y),Z.push({kind:"hook",capabilityName:Y,name:j});continue}if(X==="compaction"){Q.add(Y),Z.push({kind:"compaction",capabilityName:Y,...i2(J.config)?{config:i2(J.config)}:{}});continue}if(X==="checkpoint"){Q.add(Y),Z.push({kind:"checkpoint",capabilityName:Y,...i2(J.config)?{config:i2(J.config)}:{}});continue}if(X==="mistakeLimit"){Q.add(Y),Z.push({kind:"mistakeLimit",capabilityName:Y});continue}if(X==="userInstructionService")Q.add(Y),Z.push({kind:"userInstructionService",capabilityName:Y})}return Z}function lU($){return{agentId:$.agentId,conversationId:$.conversationId,iteration:$.iteration,metadata:$.metadata}}function $g($){return Object.hasOwn($,"update")?$.update:$}function B9($){return $.trim().replace(/^\/+/,"").toLowerCase()}function Zg($){let Z=($??[]).map(B9).filter(Boolean);return Z.length>0?new Set(Z):void 0}function Qg($,Z,Q){if(!Q)return!0;let W=B9($),J=B9(Z),X=W.includes(":")?W.split(":").at(-1)??W:W,Y=J.includes(":")?J.split(":").at(-1)??J:J;return Q.has(W)||Q.has(J)||Q.has(X)||Q.has(Y)}function rY($,Z){let Q=Zg(Z);return $.records.skill.map((W)=>({id:W.id,name:W.item.name,description:"description"in W.item&&typeof W.item.description==="string"?W.item.description:void 0,disabled:W.item.disabled===!0,skill:W.item})).filter((W)=>Qg(W.id,W.name,Q))}function dU($,Z){let Q=async(W,J)=>{let X=B9(W),j=rY($,Z).filter((K)=>K.id===X||B9(K.name)===X||K.id.endsWith(`:${X}`)).filter((K)=>!K.disabled);if(j.length!==1)return j.length>1?`Skill "${W}" is ambiguous. Use one of: ${j.map((K)=>K.id).join(", ")}`:`Skill "${W}" not found.`;let V=j[0].skill,H=J?.trim(),B=H?`
738
738
  <command-args>${H}</command-args>`:"",G=V.description?.trim()?`Description: ${V.description.trim()}
739
739
 
740
740
  `:"";return`<command-name>${V.name}</command-name>${B}
741
741
  <command-instructions>
742
742
  ${G}${V.instructions}
743
- </command-instructions>`};return Object.defineProperty(Q,"configuredSkills",{get:()=>rY($,Z).map(({skill:W,...J})=>J),enumerable:!0}),Q}function ex($,Z,Q,W){let J={records:{skill:[],rule:[],workflow:[]},runtimeCommands:[]},X=async()=>{let Y=await W($,Q.capabilityName,{},Z);if(Y?.snapshot)J=Y.snapshot};return{start:X,stop:()=>{},refreshType:async()=>{await X()},listRecords:(Y)=>[...J.records[Y]],listRuntimeCommands:()=>[...J.runtimeCommands],resolveRuntimeSlashCommand:(Y)=>{if(!Y.startsWith("/")||Y.length<2)return Y;let V=Y.match(/^\/(\S+)/)?.[1];if(!V)return Y;let H=J.runtimeCommands.find((B)=>B.name===V);return H?`${H.instructions}${Y.slice(V.length+1)}`:Y},hasConfiguredSkills:(Y)=>rY(J,Y).some((j)=>!j.disabled),createSkillsExecutor:(Y)=>cU(J,Y),createExtension:(Y)=>({name:"cline-hub-user-instructions",manifest:{capabilities:[Y.includeRules?"rules":void 0,Y.registerSkillsTool?"tools":void 0,Y.includeSkills||Y.includeWorkflows?"commands":void 0].filter((j)=>Boolean(j))},setup(j){if(Y.includeRules)j.registerRule({id:"cline-hub-user-instructions:rules",source:"hub-user-instructions",content:()=>o2(J.records.rule.map((V)=>V.item).filter((V)=>V.disabled!==!0))});if(Y.registerSkillsTool)j.registerTool(j2(cU(J,Y.allowedSkillNames)));for(let V of J.runtimeCommands.filter((H)=>H.kind==="skill"&&Y.includeSkills||H.kind==="workflow"&&Y.includeWorkflows))j.registerCommand({name:V.name,description:V.description,handler:(H)=>{let B=H.trim();return B?`${V.instructions}
743
+ </command-instructions>`};return Object.defineProperty(Q,"configuredSkills",{get:()=>rY($,Z).map(({skill:W,...J})=>J),enumerable:!0}),Q}function Wg($,Z,Q,W){let J={records:{skill:[],rule:[],workflow:[]},runtimeCommands:[]},X=async()=>{let Y=await W($,Q.capabilityName,{},Z);if(Y?.snapshot)J=Y.snapshot};return{start:X,stop:()=>{},refreshType:async()=>{await X()},listRecords:(Y)=>[...J.records[Y]],listRuntimeCommands:()=>[...J.runtimeCommands],resolveRuntimeSlashCommand:(Y)=>{if(!Y.startsWith("/")||Y.length<2)return Y;let V=Y.match(/^\/(\S+)/)?.[1];if(!V)return Y;let H=J.runtimeCommands.find((B)=>B.name===V);return H?`${H.instructions}${Y.slice(V.length+1)}`:Y},hasConfiguredSkills:(Y)=>rY(J,Y).some((j)=>!j.disabled),createSkillsExecutor:(Y)=>dU(J,Y),createExtension:(Y)=>({name:"cline-hub-user-instructions",manifest:{capabilities:[Y.includeRules?"rules":void 0,Y.registerSkillsTool?"tools":void 0,Y.includeSkills||Y.includeWorkflows?"commands":void 0].filter((j)=>Boolean(j))},setup(j){if(Y.includeRules)j.registerRule({id:"cline-hub-user-instructions:rules",source:"hub-user-instructions",content:()=>t2(J.records.rule.map((V)=>V.item).filter((V)=>V.disabled!==!0))});if(Y.registerSkillsTool)j.registerTool(V2(dU(J,Y.allowedSkillNames)));for(let V of J.runtimeCommands.filter((H)=>H.kind==="skill"&&Y.includeSkills||H.kind==="workflow"&&Y.includeWorkflows))j.registerCommand({name:V.name,description:V.description,handler:(H)=>{let B=H.trim();return B?`${V.instructions}
744
744
 
745
- ${B}`:V.instructions}})}})}}function $g($,Z,Q,W){let J=Q.map((X)=>[X.executor,async(...Y)=>{let j=Y.at(-1),V=Y.slice(0,-1);return(await W($,X.capabilityName,{executor:X.executor,args:V,context:uU(j)},Z))?.result}]);return J.length>0?Object.fromEntries(J):void 0}function Zg($,Z,Q,W){if(Q.length===0)return;return Q.map((J)=>({name:J.name,description:J.description,inputSchema:J.inputSchema,lifecycle:J.lifecycle,async execute(X,Y){return(await W($,J.capabilityName,{toolName:J.name,input:X,context:uU(Y)},Z,Y.emitUpdate?(V)=>{Y.emitUpdate?.(sx(V))}:void 0))?.result}}))}function Qg($,Z,Q,W){let J=new Map(Q.map((Y)=>[Y.name,Y])),X={};for(let Y of nx){let j=J.get(Y);if(!j)continue;X[Y]=async(V)=>{return(await W($,j.capabilityName,{context:V},Z))?.control}}return Object.keys(X).length>0?X:void 0}function nY($){let Z=$.contributions.filter((V)=>V.kind==="toolExecutor"),Q=$.contributions.filter((V)=>V.kind==="tool"),W=$.contributions.filter((V)=>V.kind==="hook"),J=$.contributions.find((V)=>V.kind==="compaction"),X=$.contributions.find((V)=>V.kind==="checkpoint"),Y=$.contributions.find((V)=>V.kind==="mistakeLimit"),j=$.contributions.find((V)=>V.kind==="userInstructionService");return{hasClientContributions:$.contributions.length>0,toolExecutors:$g($.sessionId,$.targetClientId,Z,$.requestCapability),localRuntime:{...W.length>0?{hooks:Qg($.sessionId,$.targetClientId,W,$.requestCapability)}:{},...Q.length>0?{extraTools:Zg($.sessionId,$.targetClientId,Q,$.requestCapability)}:{},...J?{compaction:{...$.sessionConfig?.compaction??{},...J.config,compact:async(V)=>{return(await $.requestCapability($.sessionId,J.capabilityName,{context:V},$.targetClientId))?.result}}}:{},...X?{checkpoint:{...$.sessionConfig?.checkpoint??{},...X.config,createCheckpoint:async(V)=>{return(await $.requestCapability($.sessionId,X.capabilityName,{context:V},$.targetClientId))?.result}}}:{},...Y?{onConsecutiveMistakeLimitReached:async(V)=>{return(await $.requestCapability($.sessionId,Y.capabilityName,{context:V},$.targetClientId))?.result}}:{},...j?{userInstructionService:ex($.sessionId,$.targetClientId,j,$.requestCapability)}:{}}}}var pU="hubCapabilityOwnerClientId";function rU($,Z){$[pU]=Z}function Wg($){let Z=$?.[pU];return typeof Z==="string"&&Z.trim()?Z.trim():void 0}async function iU($,Z,Q){let W=performance.now(),J={command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Z.sessionId};u("info","session.create.begin",J);let X=Z.payload&&typeof Z.payload==="object"?Z.payload:{},Y=X.metadata&&typeof X.metadata==="object"?JSON.parse(JSON.stringify(X.metadata)):{},j=X.sessionConfig&&typeof X.sessionConfig==="object"?JSON.parse(JSON.stringify(X.sessionConfig)):void 0,V=X.runtimeOptions&&typeof X.runtimeOptions==="object"?X.runtimeOptions:{};if(typeof j?.mode==="string")Y.mode=j.mode;else if(typeof V.mode==="string")Y.mode=V.mode;if(typeof j?.systemPrompt==="string")Y.systemPrompt=j.systemPrompt;else if(typeof V.systemPrompt==="string")Y.systemPrompt=V.systemPrompt;if(j?.checkpoint?.enabled===!0)Y.checkpointEnabled=!0;else if(V.checkpointEnabled===!0)Y.checkpointEnabled=!0;let H=X.modelSelection&&typeof X.modelSelection==="object"?X.modelSelection:{},B=typeof X.workspaceRoot==="string"&&X.workspaceRoot.trim()?X.workspaceRoot.trim():typeof X.cwd==="string"&&X.cwd.trim()?X.cwd.trim():"";if(!B)return u("warn","session.create.invalid",{...J,reason:"missing_workspace_root"}),x(Z,"invalid_session_create","session.create requires workspaceRoot or cwd");let G=Z.clientId?.trim()||"hub-client",K=iY(V.clientContributions);if(u("info","session.create.contributions_parsed",{...J,clientId:G,workspaceRoot:B,cwd:typeof X.cwd==="string"?X.cwd:void 0,contributionCount:K.length}),K.length>0)rU(Y,G);let A=(typeof j?.sessionId==="string"?j.sessionId.trim():"")||dU(),L=lU(V.configExtensions);u("info","session.create.runtime_build.begin",{...J,sessionId:A,configExtensionCount:L?.length??0});let f=nY({sessionId:A,targetClientId:G,contributions:K,sessionConfig:j,requestCapability:$.requestCapability});u("info","session.create.start_session.begin",{...J,sessionId:A,provider:j?.providerId??(typeof H.provider==="string"?H.provider:typeof Y.provider==="string"?Y.provider:"hub"),model:j?.modelId??(typeof H.model==="string"?H.model:typeof Y.model==="string"?Y.model:"hub")});let D=await $.sessionHost.startSession({source:typeof Y.source==="string"?Y.source:void 0,interactive:Y.interactive!==!1,sessionMetadata:Object.keys(Y).length>0?Y:void 0,initialMessages:Array.isArray(X.initialMessages)?X.initialMessages:void 0,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:L,...f.localRuntime},capabilities:{toolExecutors:f.toolExecutors,requestToolApproval:Q},config:{...j??{},sessionId:A,providerId:j?.providerId??(typeof H.provider==="string"?H.provider:typeof Y.provider==="string"?Y.provider:"hub"),modelId:j?.modelId??(typeof H.model==="string"?H.model:typeof Y.model==="string"?Y.model:"hub"),apiKey:j?.apiKey??(typeof H.apiKey==="string"?H.apiKey:void 0),cwd:j?.cwd??(typeof X.cwd==="string"&&X.cwd.trim()?X.cwd.trim():B),workspaceRoot:j?.workspaceRoot??B,systemPrompt:j?.systemPrompt??(typeof V.systemPrompt==="string"?V.systemPrompt:""),mode:j?.mode??(V.mode==="plan"||V.mode==="yolo"?V.mode:"act"),maxIterations:j?.maxIterations??(typeof V.maxIterations==="number"?V.maxIterations:void 0),enableTools:j?.enableTools??V.enableTools!==!1,enableSpawnAgent:j?.enableSpawnAgent??V.enableSpawn!==!1,enableAgentTeams:j?.enableAgentTeams??V.enableTeams!==!1,checkpoint:j?.checkpoint??(V.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:j?.teamName??(typeof Y.teamName==="string"?Y.teamName:void 0)},toolPolicies:X.toolPolicies&&typeof X.toolPolicies==="object"&&!Array.isArray(X.toolPolicies)?JSON.parse(JSON.stringify(X.toolPolicies)):V.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0});u("info","session.create.start_session.end",{...J,sessionId:D.sessionId,elapsedMs:Math.round(performance.now()-W),hasImmediateResult:!!D.result}),s7($,D.sessionId,G,"creator",{interactive:Y.interactive!==!1}),u("info","session.create.read_records.begin",{...J,sessionId:D.sessionId});let[U,T]=await Promise.all([o0($,D.sessionId),t0($,D.sessionId)]);if(u("info","session.create.read_records.end",{...J,sessionId:D.sessionId,hasSession:!!U,hasSnapshot:!!T,elapsedMs:Math.round(performance.now()-W)}),U)$.publish($.buildEvent("session.created",{session:U,...T?{snapshot:T}:{}},D.sessionId));return u("info","session.create.reply",{...J,sessionId:D.sessionId,elapsedMs:Math.round(performance.now()-W)}),c(Z,{session:U,...T?{snapshot:T}:{}})}async function nU($,Z,Q){let W=Z.payload&&typeof Z.payload==="object"?Z.payload:{},J=typeof W.sessionId==="string"?W.sessionId.trim():Z.sessionId?.trim()||"",X=W.checkpointRunCount;if(!J)return x(Z,"invalid_restore","session.restore requires a session id");let Y=W.restore&&typeof W.restore==="object"?W.restore:{},j=Y.messages!==!1;if(typeof X!=="number")return x(Z,"invalid_restore","checkpointRunCount must be a positive integer");try{let V=W.sessionConfig&&typeof W.sessionConfig==="object"?JSON.parse(JSON.stringify(W.sessionConfig)):void 0;if(j&&!V)return x(Z,"invalid_restore","sessionConfig is required when restore.messages is true");let H=W.runtimeOptions&&typeof W.runtimeOptions==="object"?W.runtimeOptions:{},B=W.metadata&&typeof W.metadata==="object"?JSON.parse(JSON.stringify(W.metadata)):{};if(typeof V?.mode==="string")B.mode=V.mode;else if(typeof H.mode==="string")B.mode=H.mode;if(typeof V?.systemPrompt==="string")B.systemPrompt=V.systemPrompt;else if(typeof H.systemPrompt==="string")B.systemPrompt=H.systemPrompt;if(V?.checkpoint?.enabled===!0)B.checkpointEnabled=!0;else if(H.checkpointEnabled===!0)B.checkpointEnabled=!0;let G=W.modelSelection&&typeof W.modelSelection==="object"?W.modelSelection:{},K=Z.clientId?.trim()||"hub-client",F=iY(H.clientContributions);if(F.length>0)rU(B,K);let L=(typeof V?.sessionId==="string"?V.sessionId.trim():"")||dU(),f=lU(H.configExtensions),D=nY({sessionId:L,targetClientId:K,contributions:F,sessionConfig:V,requestCapability:$.requestCapability}),T=await new c$().restoreCheckpoint({sessionId:J,checkpointRunCount:X,restore:{messages:Y.messages,workspace:Y.workspace,omitCheckpointMessageFromSession:Y.omitCheckpointMessageFromSession===!0},start:V,cwd:typeof V?.cwd==="string"&&V.cwd.trim()||typeof V?.workspaceRoot==="string"&&V.workspaceRoot.trim()||void 0,getSession:(E)=>$.sessionHost.getSession(E),readMessages:(E)=>$.sessionHost.readSessionMessages(E),buildStartInput:(E)=>{if(E.restoredCheckpointMetadata)B.checkpoint=E.restoredCheckpointMetadata;let C=typeof W.workspaceRoot==="string"&&W.workspaceRoot.trim()?W.workspaceRoot.trim():typeof W.cwd==="string"&&W.cwd.trim()?W.cwd.trim():E.sourceSession.workspaceRoot||E.sourceSession.cwd;return{source:typeof B.source==="string"?B.source:void 0,interactive:B.interactive!==!1,sessionMetadata:{...B,restoredFromSessionId:J,restoredCheckpointRunCount:X},initialMessages:E.initialMessages,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:f,...D.localRuntime},capabilities:{toolExecutors:D.toolExecutors,requestToolApproval:Q},config:{...V??{},sessionId:L,providerId:V?.providerId??(typeof G.provider==="string"?G.provider:E.sourceSession.provider),modelId:V?.modelId??(typeof G.model==="string"?G.model:E.sourceSession.model),apiKey:V?.apiKey??(typeof G.apiKey==="string"?G.apiKey:""),cwd:V?.cwd??E.plan.cwd,workspaceRoot:V?.workspaceRoot??C,systemPrompt:V?.systemPrompt??(typeof H.systemPrompt==="string"?H.systemPrompt:""),mode:V?.mode??(H.mode==="plan"||H.mode==="yolo"?H.mode:"act"),maxIterations:V?.maxIterations??(typeof H.maxIterations==="number"?H.maxIterations:void 0),enableTools:V?.enableTools??H.enableTools!==!1,enableSpawnAgent:V?.enableSpawnAgent??H.enableSpawn!==!1,enableAgentTeams:V?.enableAgentTeams??H.enableTeams!==!1,checkpoint:V?.checkpoint??(H.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:V?.teamName??(typeof B.teamName==="string"?B.teamName:void 0)},toolPolicies:W.toolPolicies&&typeof W.toolPolicies==="object"&&!Array.isArray(W.toolPolicies)?JSON.parse(JSON.stringify(W.toolPolicies)):H.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0}},startSession:(E)=>$.sessionHost.startSession(E),getStartedSessionId:(E)=>E.sessionId,readRestoredSession:(E)=>$.sessionHost.getSession(E)});if(!j)return c(Z,{checkpoint:T.checkpoint});let O=T.startResult;if(!O)return x(Z,"restore_failed","Checkpoint restore did not start a session");s7($,O.sessionId,K,"creator",{interactive:B.interactive!==!1});let[z,_]=await Promise.all([o0($,O.sessionId),t0($,O.sessionId)]);if(z)$.publish($.buildEvent("session.created",{session:z,..._?{snapshot:_}:{}},O.sessionId));return c(Z,{session:z,..._?{snapshot:_}:{},messages:T.messages??[],checkpoint:T.checkpoint})}catch(V){if(V instanceof k0)return x(Z,V.code,V.code==="session_not_found"?`Unknown session: ${J}`:V.message);return x(Z,"restore_failed",V instanceof Error?V.message:String(V))}}async function aU($,Z){let Q=I0(Z);if(!Q)return x(Z,"invalid_session_attach","session.attach requires a session id");s7($,Q,Z.clientId?.trim()||"hub-client","participant");let W=await o0($,Q);if(W)$.publish($.buildEvent("session.attached",{session:W},Q));return W?c(Z,{session:W}):x(Z,"session_not_found",`Unknown session: ${Q}`)}async function sU($,Z){let Q=I0(Z);if(!Q)return x(Z,"invalid_session_detach","session.detach requires a session id");let W=Z.clientId?.trim()||"hub-client",[J]=await Promise.all([o0($,Q)]),X=Wg(J?.metadata)??W,Y=$.sessionState.get(Q);if(Y){if(Y.participants.delete(W),Y.createdByClientId===W)Y.createdByClientId=X;if(Y.participants.size===0)$.sessionState.delete(Q)}u$($,(H)=>H.sessionId===Q&&H.targetClientId===W,`Capability owner client ${W} detached before request was resolved.`);let[j,V]=await Promise.all([o0($,Q),t0($,Q)]);return $.publish($.buildEvent("session.detached",j?{session:j,...V?{snapshot:V}:{},clientId:W}:{clientId:W},Q)),c(Z)}async function oU($,Z){let Q=I0(Z),W=Z.payload?.includeSnapshot===!0,[J,X]=await Promise.all([o0($,Q),W?t0($,Q):Promise.resolve(void 0)]);return J?c(Z,{session:J,...X?{snapshot:X}:{}}):x(Z,"session_not_found",`Unknown session: ${Q}`)}async function tU($,Z){let Q=I0(Z);if(!Q)return x(Z,"invalid_session_id","session.messages requires a session id");if(!await o0($,Q))return x(Z,"session_not_found",`Unknown session: ${Q}`);let J=await $.sessionHost.readSessionMessages(Q);return c(Z,{sessionId:Q,messages:J})}async function eU($,Z){let Q=typeof Z.payload?.limit==="number"?Z.payload.limit:200,J=(await $.sessionHost.listSessions(Q)).map((X)=>n7(X,$.sessionState.get(X.sessionId)));return c(Z,{sessions:J})}async function $D($,Z){let Q=I0(Z),W=a7(Z.payload?.metadata),J=await $.sessionHost.updateSession(Q,{metadata:W}),[X,Y]=await Promise.all([o0($,Q),t0($,Q)]);if(X)$.publish($.buildEvent("session.updated",{session:X,...Y?{snapshot:Y}:{}},Q));return{version:Z.version,requestId:Z.requestId,ok:J.updated,payload:{updated:J.updated,session:X,...Y?{snapshot:Y}:{}}}}async function ZD($,Z){let Q=I0(Z),W=await $.sessionHost.deleteSession(Q);return $.sessionState.delete(Q),c(Z,{deleted:W})}async function QD($,Z){let Q=I0(Z),W=$.sessionHost.pendingPrompts;if(!W)return x(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let J=await W.list({sessionId:Q});return c(Z,{sessionId:Q,prompts:J})}async function WD($,Z){let Q=I0(Z),W=typeof Z.payload?.promptId==="string"?Z.payload.promptId.trim():"",J=typeof Z.payload?.prompt==="string"?Z.payload.prompt:void 0,X=Z.payload?.delivery==="queue"||Z.payload?.delivery==="steer"?Z.payload.delivery:void 0,Y=$.sessionHost.pendingPrompts;if(!Y)return x(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let j=await Y.update({sessionId:Q,promptId:W,prompt:J,delivery:X});return c(Z,j)}async function JD($,Z){let Q=I0(Z),W=typeof Z.payload?.promptId==="string"?Z.payload.promptId.trim():"",J=$.sessionHost.pendingPrompts;if(!J)return x(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let X=await J.delete({sessionId:Q,promptId:W});return c(Z,X)}function XD($){switch($){case"schedule.create":return"schedule.created";case"schedule.update":case"schedule.enable":case"schedule.disable":return"schedule.updated";case"schedule.delete":return"schedule.deleted";case"schedule.trigger":return"schedule.triggered";default:return}}var Xg=new Set(["skills","workflows","rules","tools","mcp"]);function aY($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function G9($,Z){let Q=$[Z];if(Q===void 0)return;if(typeof Q!=="string")throw Error(`settings payload '${Z}' must be a string.`);return Q}function Yg($,Z){let Q=$[Z];if(Q===void 0)return;if(typeof Q!=="boolean")throw Error(`settings payload '${Z}' must be a boolean.`);return Q}function YD($){if($===void 0)return{};if(!aY($))throw Error("settings.list payload must be an object.");return{cwd:G9($,"cwd"),workspaceRoot:G9($,"workspaceRoot"),availabilityContext:aY($.availabilityContext)?$.availabilityContext:void 0}}function jg($){if(!aY($))throw Error("settings.toggle payload must be an object.");let{type:Z}=$;if(typeof Z!=="string"||!Xg.has(Z))throw Error("settings.toggle payload 'type' must be one of: skills, workflows, rules, tools, mcp.");return{...YD($),type:Z,id:G9($,"id"),path:G9($,"path"),name:G9($,"name"),enabled:Yg($,"enabled")}}class w4{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=Jg("hub_");ctx;constructor($){this.options=$;if(this.sessionHost=$.sessionHost??new z1({sessionService:new _1(new D1),fetch:$.fetch,telemetry:$.telemetry}),this.ctx={clients:this.clients,sessionState:this.sessionState,pendingApprovals:this.pendingApprovals,pendingCapabilityRequests:this.pendingCapabilityRequests,suppressNextTerminalEventBySession:this.suppressNextTerminalEventBySession,telemetry:$.telemetry,sessionHost:this.sessionHost,publish:(Z)=>this.publish(Z),buildEvent:p2,requestCapability:(Z,Q,W,J,X)=>OU(this.ctx,Z,Q,W,J,X)},this.schedules=new $8({...$.scheduleOptions,runtimeHandlers:$.runtimeHandlers,eventPublisher:(Z,Q)=>{let W=Z==="schedule.execution.completed"?"schedule.execution_completed":Z==="schedule.execution.failed"?"schedule.execution_failed":void 0;if(!W)return;this.publish(p2(W,Q&&typeof Q==="object"?Q:void 0))}}),this.scheduleCommands=new s2(this.schedules),this.settings=$.settingsService??new k$,$.cronOptions)this.cronService=new P5({runtimeHandlers:$.runtimeHandlers,...$.cronOptions});this.sessionHost.subscribe((Z)=>{vU(this.ctx,Z).catch((Q)=>{cY("session event handling failed",Q),t7(this.options.telemetry,{component:"core",operation:"hub.session_event_project",error:Q,severity:"error",handled:!0,context:{eventType:Z.type,sessionId:Z.payload.sessionId}})})})}getCronService(){return this.cronService}getHubId(){return this.hubId}async start(){if(await this.schedules.start(),this.cronService)try{await this.cronService.start()}catch($){console.error("[hub] cron service start failed",$)}}async stop(){for(let $ of this.pendingApprovals.keys())mY(this.ctx,$,{approved:!1,reason:"Hub shutting down before approval was resolved."});if(u$(this.ctx,()=>!0,"Hub shutting down before capability request was resolved."),await this.sessionHost.dispose("hub_server_stop"),await this.schedules.dispose(),this.cronService)try{await this.cronService.dispose()}catch($){console.error("[hub] cron service stop failed",$)}}async handleCommand($){try{let Z=await this.dispatchCommand($);return this.captureFailedReply($,Z),Z}catch(Z){throw t7(this.options.telemetry,{component:"core",operation:"hub.command",error:Z,severity:"error",handled:!1,context:this.commandTelemetryContext($)}),Z}}async dispatchCommand($){switch($.command){case"client.register":return EU(this.ctx,$);case"client.update":return NU(this.ctx,$);case"client.unregister":return wU(this.ctx,$,(Z)=>{this.listeners.delete(Z),this.detachClientFromSessions(Z)});case"client.list":return CU(this.ctx,$);case"session.create":return await iU(this.ctx,$,(Z)=>gY(this.ctx,Z));case"session.restore":return await nU(this.ctx,$,(Z)=>gY(this.ctx,Z));case"session.attach":return await aU(this.ctx,$);case"session.detach":return await sU(this.ctx,$);case"session.get":return await oU(this.ctx,$);case"session.messages":return await tU(this.ctx,$);case"session.list":return await eU(this.ctx,$);case"session.update":return await $D(this.ctx,$);case"session.pending_prompts":return await QD(this.ctx,$);case"session.update_pending_prompt":return await WD(this.ctx,$);case"session.remove_pending_prompt":return await JD(this.ctx,$);case"session.delete":return await ZD(this.ctx,$);case"session.hook":return await mU(this.ctx,$);case"run.start":case"session.send_input":return await xU(this.ctx,$);case"run.abort":return await gU(this.ctx,$);case"capability.request":return await MU(this.ctx,$);case"approval.respond":return await zU(this.ctx,$);case"capability.respond":return RU(this.ctx,$);case"capability.progress":return qU(this.ctx,$);case"ui.notify":return this.publish(p2("ui.notify",$.payload??{})),c($);case"ui.show_window":return this.publish(p2("ui.show_window",$.payload??{})),c($);case"settings.list":return await this.handleSettingsList($);case"settings.toggle":return await this.handleSettingsToggle($);case"connector.channels":case"connector.configure":case"connector.delete_config":return await IU(this.ctx,$);case"settings.get":case"settings.patch":return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"not_implemented",message:`${$.command} is not implemented yet.`}};default:{let Z=await this.scheduleCommands.handleCommand($);if(Z.ok){let Q=XD($.command);if(Q)this.publish(p2(Q,Z.payload))}return Z}}}captureFailedReply($,Z){if(Z.ok||!Z.error||!Vg(Z.error.code))return;t7(this.options.telemetry,{component:"core",operation:"hub.command_reply",error:Error(Z.error.message),severity:Z.error.code==="session_not_found"?"warn":"error",handled:!0,context:{...this.commandTelemetryContext($),errorCode:Z.error.code}})}commandTelemetryContext($){return{command:$.command,requestId:$.requestId,clientId:$.clientId,sessionId:typeof $.payload?.sessionId==="string"?$.payload.sessionId:$.sessionId}}async handleSettingsList($){try{let Z=await this.settings.list(YD($.payload));return{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:Z}}}catch(Z){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_list_failed",message:Z instanceof Error?Z.message:String(Z)}}}}async handleSettingsToggle($){try{let Z=await this.settings.toggle(jg($.payload));return this.publish(p2("settings.changed",{types:Z.changedTypes,snapshot:Z.snapshot})),{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:Z.snapshot,changedTypes:Z.changedTypes}}}catch(Z){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_toggle_failed",message:Z instanceof Error?Z.message:String(Z)}}}}subscribe($,Z,Q){let W=this.listeners.get($)??new Set,J={sessionId:Q?.sessionId,listener:Z};return W.add(J),this.listeners.set($,W),()=>{let X=this.listeners.get($);if(!X)return;if(X.delete(J),X.size===0)this.listeners.delete($)}}detachClientFromSessions($){for(let[Z,Q]of this.sessionState.entries())if(Q.participants.delete($),Q.participants.size===0)this.sessionState.delete(Z);u$(this.ctx,(Z)=>Z.targetClientId===$,`Capability owner client ${$} disconnected before request was resolved.`)}publish($){for(let Z of this.listeners.values())for(let Q of Z){if(Q.sessionId&&Q.sessionId!==$.sessionId)continue;try{Q.listener($)}catch(W){cY(`listener threw while publishing ${$.event}`,W),t7(this.options.telemetry,{component:"core",operation:"hub.publish",error:W,severity:"warn",handled:!0,context:{event:$.event,sessionId:$.sessionId}})}}}}function Vg($){return $==="session_not_found"||$==="session_messages_not_found"||$==="hub_command_timeout"||$.endsWith("_failed")}import{timingSafeEqual as Kg}from"node:crypto";import Fg from"node:http";import Ag from"node:net";import{URL as eY}from"node:url";import{CURRENT_HUB_PROTOCOL_VERSION as HD,HUB_CAPABILITIES as fg,isHubProtocolCompatible as Ug,MAX_CLIENT_HUB_PROTOCOL_VERSION as BD,MIN_CLIENT_HUB_PROTOCOL_VERSION as GD}from"@cline/shared";import{WebSocketServer as Dg}from"ws";import{captureSdkError as jD,HUB_COMMAND_SLOW_LOG_MS as Hg,resolveHubCommandTimeoutMs as Bg,safeJsonParse as Gg}from"@cline/shared";function sY($){return{command:$.envelope.command,requestId:$.envelope.requestId,clientId:$.envelope.clientId,sessionId:$.envelope.sessionId}}function VD($,Z,Q){return{version:$.envelope.version,requestId:$.envelope.requestId,ok:!1,error:{code:Z,message:Q}}}class X9{transport;telemetry;constructor($,Z){this.transport=$;this.telemetry=Z}attach($){let Z=new Map,Q=new Set,W=!1,J=(V)=>{try{$.send(JSON.stringify(V))}catch(H){console.error(`[hub] failed to send websocket frame: ${H instanceof Error?H.stack||H.message:String(H)}`)}},X=(V)=>{J({kind:"event",envelope:V})},Y=async(V)=>{try{let H=JSON.parse(V.data);switch(H.kind){case"command":{let B=performance.now(),G=!1,K=sY(H);u("info","command.start",K);let F=setTimeout(()=>{if(G)return;u("warn","command.slow",{...K,elapsedMs:Math.round(performance.now()-B)})},Hg),A=this.transport.command(H.envelope);A.then((O)=>{if(!G)return;u(O.ok?"warn":"error","command.late_end",{...K,elapsedMs:Math.round(performance.now()-B),ok:O.ok,errorCode:O.error?.code,errorMessage:O.error?.message})},(O)=>{if(!G)return;u("error","command.late_error",{...K,elapsedMs:Math.round(performance.now()-B),error:O})});let L=!1,f,D,U=Bg(H.envelope.command,H.envelope.timeoutMs);try{D=U===null?await A:await Promise.race([A,new Promise((O)=>{f=setTimeout(()=>{L=!0,jD(this.telemetry,{component:"core",operation:"hub.command_timeout",error:Error(`Hub command ${H.envelope.command} did not complete within ${U}ms.`),severity:"error",handled:!0,context:{...K,timeoutMs:U}}),O(VD(H,"hub_command_timeout",`Hub command ${H.envelope.command} did not complete within ${U}ms. Check hub-daemon.log for command.start/command.slow logs with requestId ${H.envelope.requestId}.`))},U)})])}catch(O){if(clearTimeout(F),f)clearTimeout(f);throw O}if(G=L,clearTimeout(F),f)clearTimeout(f);let T=Math.round(performance.now()-B);if(L)u("error","command.timeout",{...K,durationMs:T,timeoutMs:U});else u(D.ok?"info":"warn","command.end",{...K,durationMs:T,ok:D.ok,errorCode:D.error?.code,errorMessage:D.error?.message});if(H.envelope.command==="client.register"&&D.ok){let z=(H.envelope.payload??{}).clientId?.trim()||H.envelope.clientId?.trim();if(z)Q.add(z)}else if(H.envelope.command==="client.unregister"&&D.ok){let O=H.envelope.clientId?.trim();if(O)Q.delete(O)}J({kind:"reply",envelope:D});break}case"stream.subscribe":{let B=`${H.clientId}:${H.sessionId??"*"}`;if(Z.has(B))break;let G=await this.transport.subscribe(H.clientId,X,{sessionId:H.sessionId});Z.set(B,G);break}case"stream.unsubscribe":{let B=`${H.clientId}:${H.sessionId??"*"}`;Z.get(B)?.(),Z.delete(B);break}case"reply":case"event":break}}catch(H){let B=typeof V.data==="string"?Gg(V.data):void 0;if(!B||B.kind!=="command"){u("error","rejected malformed websocket frame",{error:H});return}u("error","command.error",{...sY(B),error:H}),jD(this.telemetry,{component:"core",operation:"hub.websocket_command",error:H,severity:"error",handled:!0,context:sY(B)}),J({kind:"reply",envelope:VD(B,"command_failed",H instanceof Error?H.message:"Unknown hub error")})}},j=()=>{if(W)return;W=!0;for(let V of Z.values())V();Z.clear();for(let V of Q)this.transport.command({version:"v1",command:"client.unregister",clientId:V});Q.clear(),$.removeEventListener("message",Y),$.removeEventListener("close",j)};return $.addEventListener("message",Y),$.addEventListener("close",j),j}}class Y9{transport;constructor($){this.transport=$}command($){return this.transport.handleCommand($)}subscribe($,Z,Q){return this.transport.subscribe($,Z,Q)}}function Lg($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString();if($ instanceof ArrayBuffer)return Buffer.from($).toString();if(Array.isArray($))return Buffer.concat($.map((Z)=>Buffer.from(Z))).toString();return String($)}function _g($){return{send(Z){$.send(Z)},addEventListener(Z,Q){if(Z==="message"){$.on("message",(W)=>{Q({data:Lg(W)})});return}$.on("close",Q)},removeEventListener(){}}}function zg($){try{$.write(`HTTP/1.1 400 Bad Request\r
745
+ ${B}`:V.instructions}})}})}}function Jg($,Z,Q,W){let J=Q.map((X)=>[X.executor,async(...Y)=>{let j=Y.at(-1),V=Y.slice(0,-1);return(await W($,X.capabilityName,{executor:X.executor,args:V,context:lU(j)},Z))?.result}]);return J.length>0?Object.fromEntries(J):void 0}function Xg($,Z,Q,W){if(Q.length===0)return;return Q.map((J)=>({name:J.name,description:J.description,inputSchema:J.inputSchema,lifecycle:J.lifecycle,async execute(X,Y){return(await W($,J.capabilityName,{toolName:J.name,input:X,context:lU(Y)},Z,Y.emitUpdate?(V)=>{Y.emitUpdate?.($g(V))}:void 0))?.result}}))}function Yg($,Z,Q,W){let J=new Map(Q.map((Y)=>[Y.name,Y])),X={};for(let Y of tx){let j=J.get(Y);if(!j)continue;X[Y]=async(V)=>{return(await W($,j.capabilityName,{context:V},Z))?.control}}return Object.keys(X).length>0?X:void 0}function nY($){let Z=$.contributions.filter((V)=>V.kind==="toolExecutor"),Q=$.contributions.filter((V)=>V.kind==="tool"),W=$.contributions.filter((V)=>V.kind==="hook"),J=$.contributions.find((V)=>V.kind==="compaction"),X=$.contributions.find((V)=>V.kind==="checkpoint"),Y=$.contributions.find((V)=>V.kind==="mistakeLimit"),j=$.contributions.find((V)=>V.kind==="userInstructionService");return{hasClientContributions:$.contributions.length>0,toolExecutors:Jg($.sessionId,$.targetClientId,Z,$.requestCapability),localRuntime:{...W.length>0?{hooks:Yg($.sessionId,$.targetClientId,W,$.requestCapability)}:{},...Q.length>0?{extraTools:Xg($.sessionId,$.targetClientId,Q,$.requestCapability)}:{},...J?{compaction:{...$.sessionConfig?.compaction??{},...J.config,compact:async(V)=>{return(await $.requestCapability($.sessionId,J.capabilityName,{context:V},$.targetClientId))?.result}}}:{},...X?{checkpoint:{...$.sessionConfig?.checkpoint??{},...X.config,createCheckpoint:async(V)=>{return(await $.requestCapability($.sessionId,X.capabilityName,{context:V},$.targetClientId))?.result}}}:{},...Y?{onConsecutiveMistakeLimitReached:async(V)=>{return(await $.requestCapability($.sessionId,Y.capabilityName,{context:V},$.targetClientId))?.result}}:{},...j?{userInstructionService:Wg($.sessionId,$.targetClientId,j,$.requestCapability)}:{}}}}var iU="hubCapabilityOwnerClientId";function nU($,Z){$[iU]=Z}function jg($){let Z=$?.[iU];return typeof Z==="string"&&Z.trim()?Z.trim():void 0}async function aU($,Z,Q){let W=performance.now(),J={command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Z.sessionId};u("info","session.create.begin",J);let X=Z.payload&&typeof Z.payload==="object"?Z.payload:{},Y=X.metadata&&typeof X.metadata==="object"?JSON.parse(JSON.stringify(X.metadata)):{},j=X.sessionConfig&&typeof X.sessionConfig==="object"?JSON.parse(JSON.stringify(X.sessionConfig)):void 0,V=X.runtimeOptions&&typeof X.runtimeOptions==="object"?X.runtimeOptions:{};if(typeof j?.mode==="string")Y.mode=j.mode;else if(typeof V.mode==="string")Y.mode=V.mode;if(typeof j?.systemPrompt==="string")Y.systemPrompt=j.systemPrompt;else if(typeof V.systemPrompt==="string")Y.systemPrompt=V.systemPrompt;if(j?.checkpoint?.enabled===!0)Y.checkpointEnabled=!0;else if(V.checkpointEnabled===!0)Y.checkpointEnabled=!0;let H=X.modelSelection&&typeof X.modelSelection==="object"?X.modelSelection:{},B=typeof X.workspaceRoot==="string"&&X.workspaceRoot.trim()?X.workspaceRoot.trim():typeof X.cwd==="string"&&X.cwd.trim()?X.cwd.trim():"";if(!B)return u("warn","session.create.invalid",{...J,reason:"missing_workspace_root"}),x(Z,"invalid_session_create","session.create requires workspaceRoot or cwd");let G=Z.clientId?.trim()||"hub-client",K=iY(V.clientContributions);if(u("info","session.create.contributions_parsed",{...J,clientId:G,workspaceRoot:B,cwd:typeof X.cwd==="string"?X.cwd:void 0,contributionCount:K.length}),K.length>0)nU(Y,G);let A=(typeof j?.sessionId==="string"?j.sessionId.trim():"")||pU(),L=rU(V.configExtensions);u("info","session.create.runtime_build.begin",{...J,sessionId:A,configExtensionCount:L?.length??0});let f=nY({sessionId:A,targetClientId:G,contributions:K,sessionConfig:j,requestCapability:$.requestCapability});u("info","session.create.start_session.begin",{...J,sessionId:A,provider:j?.providerId??(typeof H.provider==="string"?H.provider:typeof Y.provider==="string"?Y.provider:"hub"),model:j?.modelId??(typeof H.model==="string"?H.model:typeof Y.model==="string"?Y.model:"hub")});let D=await $.sessionHost.startSession({source:typeof Y.source==="string"?Y.source:void 0,interactive:Y.interactive!==!1,sessionMetadata:Object.keys(Y).length>0?Y:void 0,initialMessages:Array.isArray(X.initialMessages)?X.initialMessages:void 0,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:L,...f.localRuntime},capabilities:{toolExecutors:f.toolExecutors,requestToolApproval:Q},config:{...j??{},sessionId:A,providerId:j?.providerId??(typeof H.provider==="string"?H.provider:typeof Y.provider==="string"?Y.provider:"hub"),modelId:j?.modelId??(typeof H.model==="string"?H.model:typeof Y.model==="string"?Y.model:"hub"),apiKey:j?.apiKey??(typeof H.apiKey==="string"?H.apiKey:void 0),cwd:j?.cwd??(typeof X.cwd==="string"&&X.cwd.trim()?X.cwd.trim():B),workspaceRoot:j?.workspaceRoot??B,systemPrompt:j?.systemPrompt??(typeof V.systemPrompt==="string"?V.systemPrompt:""),mode:j?.mode??(V.mode==="plan"||V.mode==="yolo"?V.mode:"act"),maxIterations:j?.maxIterations??(typeof V.maxIterations==="number"?V.maxIterations:void 0),enableTools:j?.enableTools??V.enableTools!==!1,enableSpawnAgent:j?.enableSpawnAgent??V.enableSpawn!==!1,enableAgentTeams:j?.enableAgentTeams??V.enableTeams!==!1,checkpoint:j?.checkpoint??(V.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:j?.teamName??(typeof Y.teamName==="string"?Y.teamName:void 0)},toolPolicies:X.toolPolicies&&typeof X.toolPolicies==="object"&&!Array.isArray(X.toolPolicies)?JSON.parse(JSON.stringify(X.toolPolicies)):V.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0});u("info","session.create.start_session.end",{...J,sessionId:D.sessionId,elapsedMs:Math.round(performance.now()-W),hasImmediateResult:!!D.result}),o7($,D.sessionId,G,"creator",{interactive:Y.interactive!==!1}),u("info","session.create.read_records.begin",{...J,sessionId:D.sessionId});let[U,T]=await Promise.all([o0($,D.sessionId),t0($,D.sessionId)]);if(u("info","session.create.read_records.end",{...J,sessionId:D.sessionId,hasSession:!!U,hasSnapshot:!!T,elapsedMs:Math.round(performance.now()-W)}),U)$.publish($.buildEvent("session.created",{session:U,...T?{snapshot:T}:{}},D.sessionId));return u("info","session.create.reply",{...J,sessionId:D.sessionId,elapsedMs:Math.round(performance.now()-W)}),c(Z,{session:U,...T?{snapshot:T}:{}})}async function sU($,Z,Q){let W=Z.payload&&typeof Z.payload==="object"?Z.payload:{},J=typeof W.sessionId==="string"?W.sessionId.trim():Z.sessionId?.trim()||"",X=W.checkpointRunCount;if(!J)return x(Z,"invalid_restore","session.restore requires a session id");let Y=W.restore&&typeof W.restore==="object"?W.restore:{},j=Y.messages!==!1;if(typeof X!=="number")return x(Z,"invalid_restore","checkpointRunCount must be a positive integer");try{let V=W.sessionConfig&&typeof W.sessionConfig==="object"?JSON.parse(JSON.stringify(W.sessionConfig)):void 0;if(j&&!V)return x(Z,"invalid_restore","sessionConfig is required when restore.messages is true");let H=W.runtimeOptions&&typeof W.runtimeOptions==="object"?W.runtimeOptions:{},B=W.metadata&&typeof W.metadata==="object"?JSON.parse(JSON.stringify(W.metadata)):{};if(typeof V?.mode==="string")B.mode=V.mode;else if(typeof H.mode==="string")B.mode=H.mode;if(typeof V?.systemPrompt==="string")B.systemPrompt=V.systemPrompt;else if(typeof H.systemPrompt==="string")B.systemPrompt=H.systemPrompt;if(V?.checkpoint?.enabled===!0)B.checkpointEnabled=!0;else if(H.checkpointEnabled===!0)B.checkpointEnabled=!0;let G=W.modelSelection&&typeof W.modelSelection==="object"?W.modelSelection:{},K=Z.clientId?.trim()||"hub-client",F=iY(H.clientContributions);if(F.length>0)nU(B,K);let L=(typeof V?.sessionId==="string"?V.sessionId.trim():"")||pU(),f=rU(H.configExtensions),D=nY({sessionId:L,targetClientId:K,contributions:F,sessionConfig:V,requestCapability:$.requestCapability}),T=await new c$().restoreCheckpoint({sessionId:J,checkpointRunCount:X,restore:{messages:Y.messages,workspace:Y.workspace,omitCheckpointMessageFromSession:Y.omitCheckpointMessageFromSession===!0},start:V,cwd:typeof V?.cwd==="string"&&V.cwd.trim()||typeof V?.workspaceRoot==="string"&&V.workspaceRoot.trim()||void 0,getSession:(E)=>$.sessionHost.getSession(E),readMessages:(E)=>$.sessionHost.readSessionMessages(E),buildStartInput:(E)=>{if(E.restoredCheckpointMetadata)B.checkpoint=E.restoredCheckpointMetadata;let C=typeof W.workspaceRoot==="string"&&W.workspaceRoot.trim()?W.workspaceRoot.trim():typeof W.cwd==="string"&&W.cwd.trim()?W.cwd.trim():E.sourceSession.workspaceRoot||E.sourceSession.cwd;return{source:typeof B.source==="string"?B.source:void 0,interactive:B.interactive!==!1,sessionMetadata:{...B,restoredFromSessionId:J,restoredCheckpointRunCount:X},initialMessages:E.initialMessages,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:f,...D.localRuntime},capabilities:{toolExecutors:D.toolExecutors,requestToolApproval:Q},config:{...V??{},sessionId:L,providerId:V?.providerId??(typeof G.provider==="string"?G.provider:E.sourceSession.provider),modelId:V?.modelId??(typeof G.model==="string"?G.model:E.sourceSession.model),apiKey:V?.apiKey??(typeof G.apiKey==="string"?G.apiKey:""),cwd:V?.cwd??E.plan.cwd,workspaceRoot:V?.workspaceRoot??C,systemPrompt:V?.systemPrompt??(typeof H.systemPrompt==="string"?H.systemPrompt:""),mode:V?.mode??(H.mode==="plan"||H.mode==="yolo"?H.mode:"act"),maxIterations:V?.maxIterations??(typeof H.maxIterations==="number"?H.maxIterations:void 0),enableTools:V?.enableTools??H.enableTools!==!1,enableSpawnAgent:V?.enableSpawnAgent??H.enableSpawn!==!1,enableAgentTeams:V?.enableAgentTeams??H.enableTeams!==!1,checkpoint:V?.checkpoint??(H.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:V?.teamName??(typeof B.teamName==="string"?B.teamName:void 0)},toolPolicies:W.toolPolicies&&typeof W.toolPolicies==="object"&&!Array.isArray(W.toolPolicies)?JSON.parse(JSON.stringify(W.toolPolicies)):H.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0}},startSession:(E)=>$.sessionHost.startSession(E),getStartedSessionId:(E)=>E.sessionId,readRestoredSession:(E)=>$.sessionHost.getSession(E)});if(!j)return c(Z,{checkpoint:T.checkpoint});let q=T.startResult;if(!q)return x(Z,"restore_failed","Checkpoint restore did not start a session");o7($,q.sessionId,K,"creator",{interactive:B.interactive!==!1});let[z,_]=await Promise.all([o0($,q.sessionId),t0($,q.sessionId)]);if(z)$.publish($.buildEvent("session.created",{session:z,..._?{snapshot:_}:{}},q.sessionId));return c(Z,{session:z,..._?{snapshot:_}:{},messages:T.messages??[],checkpoint:T.checkpoint})}catch(V){if(V instanceof k0)return x(Z,V.code,V.code==="session_not_found"?`Unknown session: ${J}`:V.message);return x(Z,"restore_failed",V instanceof Error?V.message:String(V))}}async function oU($,Z){let Q=I0(Z);if(!Q)return x(Z,"invalid_session_attach","session.attach requires a session id");o7($,Q,Z.clientId?.trim()||"hub-client","participant");let W=await o0($,Q);if(W)$.publish($.buildEvent("session.attached",{session:W},Q));return W?c(Z,{session:W}):x(Z,"session_not_found",`Unknown session: ${Q}`)}async function tU($,Z){let Q=I0(Z);if(!Q)return x(Z,"invalid_session_detach","session.detach requires a session id");let W=Z.clientId?.trim()||"hub-client",[J]=await Promise.all([o0($,Q)]),X=jg(J?.metadata)??W,Y=$.sessionState.get(Q);if(Y){if(Y.participants.delete(W),Y.createdByClientId===W)Y.createdByClientId=X;if(Y.participants.size===0)$.sessionState.delete(Q)}u$($,(H)=>H.sessionId===Q&&H.targetClientId===W,`Capability owner client ${W} detached before request was resolved.`);let[j,V]=await Promise.all([o0($,Q),t0($,Q)]);return $.publish($.buildEvent("session.detached",j?{session:j,...V?{snapshot:V}:{},clientId:W}:{clientId:W},Q)),c(Z)}async function eU($,Z){let Q=I0(Z),W=Z.payload?.includeSnapshot===!0,[J,X]=await Promise.all([o0($,Q),W?t0($,Q):Promise.resolve(void 0)]);return J?c(Z,{session:J,...X?{snapshot:X}:{}}):x(Z,"session_not_found",`Unknown session: ${Q}`)}async function $D($,Z){let Q=I0(Z);if(!Q)return x(Z,"invalid_session_id","session.messages requires a session id");if(!await o0($,Q))return x(Z,"session_not_found",`Unknown session: ${Q}`);let J=await $.sessionHost.readSessionMessages(Q);return c(Z,{sessionId:Q,messages:J})}async function ZD($,Z){let Q=typeof Z.payload?.limit==="number"?Z.payload.limit:200,J=(await $.sessionHost.listSessions(Q)).map((X)=>a7(X,$.sessionState.get(X.sessionId)));return c(Z,{sessions:J})}async function QD($,Z){let Q=I0(Z),W=s7(Z.payload?.metadata),J=await $.sessionHost.updateSession(Q,{metadata:W}),[X,Y]=await Promise.all([o0($,Q),t0($,Q)]);if(X)$.publish($.buildEvent("session.updated",{session:X,...Y?{snapshot:Y}:{}},Q));return{version:Z.version,requestId:Z.requestId,ok:J.updated,payload:{updated:J.updated,session:X,...Y?{snapshot:Y}:{}}}}async function WD($,Z){let Q=I0(Z),W=await $.sessionHost.deleteSession(Q);return $.sessionState.delete(Q),c(Z,{deleted:W})}async function JD($,Z){let Q=I0(Z),W=$.sessionHost.pendingPrompts;if(!W)return x(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let J=await W.list({sessionId:Q});return c(Z,{sessionId:Q,prompts:J})}async function XD($,Z){let Q=I0(Z),W=typeof Z.payload?.promptId==="string"?Z.payload.promptId.trim():"",J=typeof Z.payload?.prompt==="string"?Z.payload.prompt:void 0,X=Z.payload?.delivery==="queue"||Z.payload?.delivery==="steer"?Z.payload.delivery:void 0,Y=$.sessionHost.pendingPrompts;if(!Y)return x(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let j=await Y.update({sessionId:Q,promptId:W,prompt:J,delivery:X});return c(Z,j)}async function YD($,Z){let Q=I0(Z),W=typeof Z.payload?.promptId==="string"?Z.payload.promptId.trim():"",J=$.sessionHost.pendingPrompts;if(!J)return x(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let X=await J.delete({sessionId:Q,promptId:W});return c(Z,X)}function jD($){switch($){case"schedule.create":return"schedule.created";case"schedule.update":case"schedule.enable":case"schedule.disable":return"schedule.updated";case"schedule.delete":return"schedule.deleted";case"schedule.trigger":return"schedule.triggered";default:return}}var Hg=new Set(["skills","workflows","rules","tools","mcp"]);function aY($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function G9($,Z){let Q=$[Z];if(Q===void 0)return;if(typeof Q!=="string")throw Error(`settings payload '${Z}' must be a string.`);return Q}function Bg($,Z){let Q=$[Z];if(Q===void 0)return;if(typeof Q!=="boolean")throw Error(`settings payload '${Z}' must be a boolean.`);return Q}function VD($){if($===void 0)return{};if(!aY($))throw Error("settings.list payload must be an object.");return{cwd:G9($,"cwd"),workspaceRoot:G9($,"workspaceRoot"),availabilityContext:aY($.availabilityContext)?$.availabilityContext:void 0}}function Gg($){if(!aY($))throw Error("settings.toggle payload must be an object.");let{type:Z}=$;if(typeof Z!=="string"||!Hg.has(Z))throw Error("settings.toggle payload 'type' must be one of: skills, workflows, rules, tools, mcp.");return{...VD($),type:Z,id:G9($,"id"),path:G9($,"path"),name:G9($,"name"),enabled:Bg($,"enabled")}}class w4{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=Vg("hub_");ctx;constructor($){this.options=$;if(this.sessionHost=$.sessionHost??new T1({sessionService:new z1(new L1),fetch:$.fetch,telemetry:$.telemetry}),this.ctx={clients:this.clients,sessionState:this.sessionState,pendingApprovals:this.pendingApprovals,pendingCapabilityRequests:this.pendingCapabilityRequests,suppressNextTerminalEventBySession:this.suppressNextTerminalEventBySession,telemetry:$.telemetry,sessionHost:this.sessionHost,publish:(Z)=>this.publish(Z),buildEvent:r2,requestCapability:(Z,Q,W,J,X)=>MU(this.ctx,Z,Q,W,J,X)},this.schedules=new Z8({...$.scheduleOptions,runtimeHandlers:$.runtimeHandlers,eventPublisher:(Z,Q)=>{let W=Z==="schedule.execution.completed"?"schedule.execution_completed":Z==="schedule.execution.failed"?"schedule.execution_failed":void 0;if(!W)return;this.publish(r2(W,Q&&typeof Q==="object"?Q:void 0))}}),this.scheduleCommands=new o2(this.schedules),this.settings=$.settingsService??new k$,$.cronOptions)this.cronService=new P5({runtimeHandlers:$.runtimeHandlers,...$.cronOptions});this.sessionHost.subscribe((Z)=>{uU(this.ctx,Z).catch((Q)=>{cY("session event handling failed",Q),e7(this.options.telemetry,{component:"core",operation:"hub.session_event_project",error:Q,severity:"error",handled:!0,context:{eventType:Z.type,sessionId:Z.payload.sessionId}})})})}getCronService(){return this.cronService}getHubId(){return this.hubId}async start(){if(await this.schedules.start(),this.cronService)try{await this.cronService.start()}catch($){console.error("[hub] cron service start failed",$)}}async stop(){for(let $ of this.pendingApprovals.keys())mY(this.ctx,$,{approved:!1,reason:"Hub shutting down before approval was resolved."});if(u$(this.ctx,()=>!0,"Hub shutting down before capability request was resolved."),await this.sessionHost.dispose("hub_server_stop"),await this.schedules.dispose(),this.cronService)try{await this.cronService.dispose()}catch($){console.error("[hub] cron service stop failed",$)}}async handleCommand($){try{let Z=await this.dispatchCommand($);return this.captureFailedReply($,Z),Z}catch(Z){throw e7(this.options.telemetry,{component:"core",operation:"hub.command",error:Z,severity:"error",handled:!1,context:this.commandTelemetryContext($)}),Z}}async dispatchCommand($){switch($.command){case"client.register":return wU(this.ctx,$);case"client.update":return CU(this.ctx,$);case"client.unregister":return PU(this.ctx,$,(Z)=>{this.listeners.delete(Z),this.detachClientFromSessions(Z)});case"client.list":return SU(this.ctx,$);case"session.create":return await aU(this.ctx,$,(Z)=>gY(this.ctx,Z));case"session.restore":return await sU(this.ctx,$,(Z)=>gY(this.ctx,Z));case"session.attach":return await oU(this.ctx,$);case"session.detach":return await tU(this.ctx,$);case"session.get":return await eU(this.ctx,$);case"session.messages":return await $D(this.ctx,$);case"session.list":return await ZD(this.ctx,$);case"session.update":return await QD(this.ctx,$);case"session.pending_prompts":return await JD(this.ctx,$);case"session.update_pending_prompt":return await XD(this.ctx,$);case"session.remove_pending_prompt":return await YD(this.ctx,$);case"session.delete":return await WD(this.ctx,$);case"session.hook":return await cU(this.ctx,$);case"run.start":case"session.send_input":return await mU(this.ctx,$);case"run.abort":return await vU(this.ctx,$);case"capability.request":return await EU(this.ctx,$);case"approval.respond":return await OU(this.ctx,$);case"capability.respond":return NU(this.ctx,$);case"capability.progress":return RU(this.ctx,$);case"ui.notify":return this.publish(r2("ui.notify",$.payload??{})),c($);case"ui.show_window":return this.publish(r2("ui.show_window",$.payload??{})),c($);case"settings.list":return await this.handleSettingsList($);case"settings.toggle":return await this.handleSettingsToggle($);case"connector.channels":case"connector.configure":case"connector.delete_config":return await gU(this.ctx,$);case"settings.get":case"settings.patch":return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"not_implemented",message:`${$.command} is not implemented yet.`}};default:{let Z=await this.scheduleCommands.handleCommand($);if(Z.ok){let Q=jD($.command);if(Q)this.publish(r2(Q,Z.payload))}return Z}}}captureFailedReply($,Z){if(Z.ok||!Z.error||!Kg(Z.error.code))return;e7(this.options.telemetry,{component:"core",operation:"hub.command_reply",error:Error(Z.error.message),severity:Z.error.code==="session_not_found"?"warn":"error",handled:!0,context:{...this.commandTelemetryContext($),errorCode:Z.error.code}})}commandTelemetryContext($){return{command:$.command,requestId:$.requestId,clientId:$.clientId,sessionId:typeof $.payload?.sessionId==="string"?$.payload.sessionId:$.sessionId}}async handleSettingsList($){try{let Z=await this.settings.list(VD($.payload));return{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:Z}}}catch(Z){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_list_failed",message:Z instanceof Error?Z.message:String(Z)}}}}async handleSettingsToggle($){try{let Z=await this.settings.toggle(Gg($.payload));return this.publish(r2("settings.changed",{types:Z.changedTypes,snapshot:Z.snapshot})),{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:Z.snapshot,changedTypes:Z.changedTypes}}}catch(Z){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_toggle_failed",message:Z instanceof Error?Z.message:String(Z)}}}}subscribe($,Z,Q){let W=this.listeners.get($)??new Set,J={sessionId:Q?.sessionId,listener:Z};return W.add(J),this.listeners.set($,W),()=>{let X=this.listeners.get($);if(!X)return;if(X.delete(J),X.size===0)this.listeners.delete($)}}detachClientFromSessions($){for(let[Z,Q]of this.sessionState.entries())if(Q.participants.delete($),Q.participants.size===0)this.sessionState.delete(Z);u$(this.ctx,(Z)=>Z.targetClientId===$,`Capability owner client ${$} disconnected before request was resolved.`)}publish($){for(let Z of this.listeners.values())for(let Q of Z){if(Q.sessionId&&Q.sessionId!==$.sessionId)continue;try{Q.listener($)}catch(W){cY(`listener threw while publishing ${$.event}`,W),e7(this.options.telemetry,{component:"core",operation:"hub.publish",error:W,severity:"warn",handled:!0,context:{event:$.event,sessionId:$.sessionId}})}}}}function Kg($){return $==="session_not_found"||$==="session_messages_not_found"||$==="hub_command_timeout"||$.endsWith("_failed")}import{timingSafeEqual as Ug}from"node:crypto";import Dg from"node:http";import Lg from"node:net";import{URL as eY}from"node:url";import{CURRENT_HUB_PROTOCOL_VERSION as GD,HUB_CAPABILITIES as _g,isHubProtocolCompatible as zg,MAX_CLIENT_HUB_PROTOCOL_VERSION as KD,MIN_CLIENT_HUB_PROTOCOL_VERSION as FD}from"@cline/shared";import{WebSocketServer as Tg}from"ws";import{captureSdkError as HD,HUB_COMMAND_SLOW_LOG_MS as Fg,resolveHubCommandTimeoutMs as Ag,safeJsonParse as fg}from"@cline/shared";function sY($){return{command:$.envelope.command,requestId:$.envelope.requestId,clientId:$.envelope.clientId,sessionId:$.envelope.sessionId}}function BD($,Z,Q){return{version:$.envelope.version,requestId:$.envelope.requestId,ok:!1,error:{code:Z,message:Q}}}class X9{transport;telemetry;constructor($,Z){this.transport=$;this.telemetry=Z}attach($){let Z=new Map,Q=new Set,W=!1,J=(V)=>{try{$.send(JSON.stringify(V))}catch(H){console.error(`[hub] failed to send websocket frame: ${H instanceof Error?H.stack||H.message:String(H)}`)}},X=(V)=>{J({kind:"event",envelope:V})},Y=async(V)=>{try{let H=JSON.parse(V.data);switch(H.kind){case"command":{let B=performance.now(),G=!1,K=sY(H);u("info","command.start",K);let F=setTimeout(()=>{if(G)return;u("warn","command.slow",{...K,elapsedMs:Math.round(performance.now()-B)})},Fg),A=this.transport.command(H.envelope);A.then((q)=>{if(!G)return;u(q.ok?"warn":"error","command.late_end",{...K,elapsedMs:Math.round(performance.now()-B),ok:q.ok,errorCode:q.error?.code,errorMessage:q.error?.message})},(q)=>{if(!G)return;u("error","command.late_error",{...K,elapsedMs:Math.round(performance.now()-B),error:q})});let L=!1,f,D,U=Ag(H.envelope.command,H.envelope.timeoutMs);try{D=U===null?await A:await Promise.race([A,new Promise((q)=>{f=setTimeout(()=>{L=!0,HD(this.telemetry,{component:"core",operation:"hub.command_timeout",error:Error(`Hub command ${H.envelope.command} did not complete within ${U}ms.`),severity:"error",handled:!0,context:{...K,timeoutMs:U}}),q(BD(H,"hub_command_timeout",`Hub command ${H.envelope.command} did not complete within ${U}ms. Check hub-daemon.log for command.start/command.slow logs with requestId ${H.envelope.requestId}.`))},U)})])}catch(q){if(clearTimeout(F),f)clearTimeout(f);throw q}if(G=L,clearTimeout(F),f)clearTimeout(f);let T=Math.round(performance.now()-B);if(L)u("error","command.timeout",{...K,durationMs:T,timeoutMs:U});else u(D.ok?"info":"warn","command.end",{...K,durationMs:T,ok:D.ok,errorCode:D.error?.code,errorMessage:D.error?.message});if(H.envelope.command==="client.register"&&D.ok){let z=(H.envelope.payload??{}).clientId?.trim()||H.envelope.clientId?.trim();if(z)Q.add(z)}else if(H.envelope.command==="client.unregister"&&D.ok){let q=H.envelope.clientId?.trim();if(q)Q.delete(q)}J({kind:"reply",envelope:D});break}case"stream.subscribe":{let B=`${H.clientId}:${H.sessionId??"*"}`;if(Z.has(B))break;let G=await this.transport.subscribe(H.clientId,X,{sessionId:H.sessionId});Z.set(B,G);break}case"stream.unsubscribe":{let B=`${H.clientId}:${H.sessionId??"*"}`;Z.get(B)?.(),Z.delete(B);break}case"reply":case"event":break}}catch(H){let B=typeof V.data==="string"?fg(V.data):void 0;if(!B||B.kind!=="command"){u("error","rejected malformed websocket frame",{error:H});return}u("error","command.error",{...sY(B),error:H}),HD(this.telemetry,{component:"core",operation:"hub.websocket_command",error:H,severity:"error",handled:!0,context:sY(B)}),J({kind:"reply",envelope:BD(B,"command_failed",H instanceof Error?H.message:"Unknown hub error")})}},j=()=>{if(W)return;W=!0;for(let V of Z.values())V();Z.clear();for(let V of Q)this.transport.command({version:"v1",command:"client.unregister",clientId:V});Q.clear(),$.removeEventListener("message",Y),$.removeEventListener("close",j)};return $.addEventListener("message",Y),$.addEventListener("close",j),j}}class Y9{transport;constructor($){this.transport=$}command($){return this.transport.handleCommand($)}subscribe($,Z,Q){return this.transport.subscribe($,Z,Q)}}function Og($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString();if($ instanceof ArrayBuffer)return Buffer.from($).toString();if(Array.isArray($))return Buffer.concat($.map((Z)=>Buffer.from(Z))).toString();return String($)}function qg($){return{send(Z){$.send(Z)},addEventListener(Z,Q){if(Z==="message"){$.on("message",(W)=>{Q({data:Og(W)})});return}$.on("close",Q)},removeEventListener(){}}}function Mg($){try{$.write(`HTTP/1.1 400 Bad Request\r
746
746
  Connection: close\r
747
747
  Content-Length: 0\r
748
748
  \r
749
- `),$.end()}catch{$.destroy()}}function Tg($){try{$.write(`HTTP/1.1 401 Unauthorized\r
749
+ `),$.end()}catch{$.destroy()}}function Rg($){try{$.write(`HTTP/1.1 401 Unauthorized\r
750
750
  Connection: close\r
751
751
  Content-Length: 0\r
752
752
  \r
753
- `),$.end()}catch{$.destroy()}}function oY($,Z){if(!$||!Z)return!1;let Q=Buffer.from($,"utf8"),W=Buffer.from(Z,"utf8");return Q.length===W.length&&Kg(Q,W)}function KD($,Z){let Q=$&&typeof $==="object"&&"code"in $&&typeof $.code==="string"?$.code:void 0,W=$ instanceof Error?$.message:typeof $==="string"?$:"Unknown startup error",J=`Failed to start hub server on ${Z.host}:${Z.port}${Z.pathname}: ${W}`,X=Error(Q?`${J} (${Q})`:J);if(Q)$.code=Q,X.code=Q;if($ instanceof Error&&$.stack)X.stack=`${X.name}: ${X.message}
754
- Caused by: ${$.stack}`;return X}async function Og($){return await new Promise((Z,Q)=>{let W=Ag.createServer();W.once("error",Q),W.listen(0,$,()=>{let J=W.address();if(!J||typeof J==="string"){W.close(()=>Q(Error("Failed to resolve free port")));return}let X=J.port;W.close((Y)=>{if(Y){Q(Y);return}Z(X)})})})}function qg($){return $ instanceof Error&&"code"in $&&$.code==="EADDRINUSE"}var tY=new Map,FD="cline-hub-auth.",Mg=30000;function $j($){return Array.isArray($)?$.join(","):$??""}function AD($){return $===32||$===9}function d7($){let Z=$j($).trim(),Q="bearer";if(Z.length<=6||Z.slice(0,6).toLowerCase()!=="bearer"||!AD(Z.charCodeAt(6)))return null;let W=7;while(W<Z.length&&AD(Z.charCodeAt(W)))W+=1;return Z.slice(W).trim()||null}function Rg($){for(let Z of $j($).split(",")){let Q=Z.trim();if(Q.startsWith(FD))return Q.slice(FD.length).trim()||null}return null}function l7($){let Z=$.trim().toLowerCase();return Z==="localhost"||Z==="127.0.0.1"||Z==="::1"||Z==="[::1]"}function MY($){let Z=$j($).trim();if(!Z)return!1;try{return l7(new eY(Z).hostname)}catch{return!1}}async function j9($){let Z=$.owner??x1(),Q=$.host??"127.0.0.1",W=$.pathname??"/hub",J=$.port??V8(),X=J===0?await Og(Q):J,Y=X,j=Z1(Q,X,W),V=l9(),H=d9(),B=new w4($);await B.start();let G=new X9(new Y9(B),$.telemetry),K=new Set,F=new Date().toISOString(),A={protocolVersion:HD,minClientProtocolVersion:GD,maxClientProtocolVersion:BD,capabilities:fg,coreVersion:n4.version,buildId:V,pid:process.pid,startedAt:F},L=new Set,f,D,U=async()=>{if(D)return D;return D=(async()=>{if(f)clearInterval(f),f=void 0;for(let _ of L)_.terminate?.();L.clear();for(let _ of K)_();if(K.clear(),await new Promise((_,E)=>{O.close((C)=>{if(C){E(C);return}_()})}),await new Promise((_,E)=>{T.close((C)=>{if(C){E(C);return}_()})}),await B.stop(),(await K0(Z.discoveryPath))?.url===j)await S0(Z.discoveryPath)})(),D},T=Fg.createServer((z,_)=>{if((z.url??"/")==="/health"){let C=JSON.stringify({ok:!0,protocolVersion:A.protocolVersion,minClientProtocolVersion:A.minClientProtocolVersion,maxClientProtocolVersion:A.maxClientProtocolVersion,coreVersion:A.coreVersion,host:Q,port:Y,url:j});_.statusCode=200,_.setHeader("content-type","application/json"),_.end(C);return}if((z.url??"/")==="/status"){if(!oY(d7(z.headers.authorization),H)){_.statusCode=401,_.end("Unauthorized");return}let C=JSON.stringify({hubId:B.getHubId(),...A,authToken:H,host:Q,port:Y,url:j,updatedAt:new Date().toISOString()});_.statusCode=200,_.setHeader("content-type","application/json"),_.end(C);return}if((z.url??"/")==="/version"){_.statusCode=200,_.setHeader("content-type","application/json"),_.end(JSON.stringify(A));return}if(new eY(z.url??"/",`http://${Q}:${Y}`).pathname==="/shutdown"&&z.method==="POST"){if(!oY(d7(z.headers.authorization),H)){_.statusCode=401,_.end("Unauthorized");return}_.statusCode=202,_.setHeader("content-type","application/json"),_.end(JSON.stringify({ok:!0})),queueMicrotask(()=>{U()});return}_.statusCode=404,_.end("Not found")}),O=new Dg({noServer:!0});f=setInterval(()=>{for(let z of L){if(z.isAlive===!1){try{z.terminate?.()}catch{}L.delete(z);continue}z.isAlive=!1;try{z.ping?.()}catch{try{z.terminate?.()}catch{}L.delete(z)}}},Mg),T.on("upgrade",(z,_,E)=>{if(new eY(z.url??"/",`http://${Q}:${Y}`).pathname!==W){_.destroy();return}if(!(oY(Rg(z.headers["sec-websocket-protocol"]),H)||l7(Q)&&MY(z.headers.origin))){Tg(_);return}try{O.handleUpgrade(z,_,E,(l)=>{let o=l;o.isAlive=!0,o.on("pong",()=>{o.isAlive=!0}),L.add(o);let t=G.attach(_g(l));K.add(t),l.once("close",()=>{L.delete(o),t(),K.delete(t)})})}catch{zg(_)}});try{await new Promise((z,_)=>{T.once("error",(E)=>{_(KD(E,{host:Q,port:X,pathname:W}))}),T.listen(X,Q,()=>{let E=T.address();if(!E||typeof E==="string"){_(KD(Error("Failed to resolve hub port"),{host:Q,port:X,pathname:W}));return}Y=E.port,j=Z1(Q,Y,W),z()})})}catch(z){if(f)clearInterval(f),f=void 0;throw await B.stop().catch(()=>{return}),z}return await p9(Z.discoveryPath,{hubId:B.getHubId(),protocolVersion:HD,minClientProtocolVersion:GD,maxClientProtocolVersion:BD,capabilities:[...A.capabilities],coreVersion:n4.version,buildId:V,authToken:H,host:Q,port:Y,url:j,pid:process.pid,startedAt:F,updatedAt:F}),{host:Q,port:Y,url:j,authToken:H,close:U}}async function p7($){let Z=$.owner??x1(),Q=$.host!==void 0||$.port!==void 0||$.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),W=$.host??"127.0.0.1",J=$.port??V8(),X=$.pathname??"/hub",Y=Z1(W,J,X),j=Z.discoveryPath,V=(B)=>{if(!Q)B$(B.url,B.authToken);return B},H=tY.get(j);if(H){let B=await H;if(B.url===Y)return V({server:B,url:B.url,authToken:B.authToken,action:"reuse"})}return await r9(Z.discoveryPath,async()=>{let B=await K0(Z.discoveryPath);if(B?.url&&(B.url===Y||$.allowPortFallback===!0)){let F=await g1(B.url,{authToken:B.authToken});if(F?.url&&Ug(F).compatible&&await F1(F.url,{authToken:B.authToken}))return V({url:F.url,authToken:B.authToken,action:"reuse"})}if(B?.url)await S0(Z.discoveryPath);let K=async(F)=>{let A=j9({...F,owner:Z});tY.set(j,A);try{let L=await A;return V({server:L,url:L.url,authToken:L.authToken,action:"started"})}catch(L){throw tY.delete(j),L}};try{return await K($)}catch(F){if(!$.allowPortFallback||!qg(F))throw F;return await K({...$,port:0})}})}function UD(){return fD()==="production"?K1():Q1()}function Eg($){return fD()!=="production"&&!$}async function jU($){let Z=G1({host:$.host,port:$.port,pathname:$.pathname});return await j9({...$,...Z,owner:UD()})}async function VU($){let Z=$.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Q=G1({host:$.host,port:$.port,pathname:$.pathname});return await p7({...$,...Q,allowPortFallback:$.allowPortFallback??Eg(Z),owner:UD()})}export{p9 as writeHubDiscovery,r9 as withHubStartupLock,F1 as verifyHubConnection,J9 as truncateNotificationBody,TW as toHubStatusUrl,i9 as toHubHealthUrl,yW as stopLocalHubServerGracefully,j9 as startHubWebSocketServer,jU as startHubServer,H8 as spawnDetachedHubServerWithRetry,NW as spawnDetachedHubServer,DV as sendHubCommand,t9 as restartLocalHubIfIdleAfterStartupTimeout,$V as resolveWorkspaceHubOwnerContext,Q1 as resolveSharedHubOwnerContext,K1 as resolveProductionHubOwnerContext,hW as resolveHubUrl,x1 as resolveHubOwnerContext,G1 as resolveHubEndpointOptions,l9 as resolveHubBuildId,V8 as resolveDefaultHubPort,EW as resolveDefaultHubPathname,RW as resolveDefaultHubHost,o4 as resolveCompatibleLocalHubUrl,sj as resolveClineDir,s$ as resolveClineDataDir,s4 as requestHubShutdown,B$ as rememberRecoverableLocalHubUrl,K0 as readHubDiscovery,d7 as readBearerToken,g1 as probeHubServer,UV as probeHubConnection,a9 as prewarmDetachedHubServer,G$ as normalizeHubWebSocketUrl,MY as isLocalHubOrigin,l7 as isLocalHubHostName,SW as isHubReconnectableTransportError,o9 as isHubCommandTimeoutError,tj as isDiscoveryFilePresent,p7 as ensureHubWebSocketServer,VU as ensureHubServer,YV as ensureDetachedHubServer,e$ as ensureCompatibleLocalHubUrl,YU as createLocalHubScheduleRuntimeHandlers,oj as createInMemoryHubOwnerContext,Z1 as createHubServerUrl,d9 as createHubAuthToken,h1 as createConfiguredTelemetryService,j8 as createConfiguredTelemetryHandle,e9 as connectToHub,S0 as clearHubDiscovery,W1 as NodeHubClient,Y9 as NativeHubTransportAdapter,xW as HubUIClient,R0 as HubTransportError,IW as HubSessionClient,w4 as HubServerTransport,$8 as HubScheduleService,s2 as HubScheduleCommandService,B8 as HubCommandError,qW as DEFAULT_HUB_PORT,MW as DEFAULT_HUB_PATHNAME,OW as DEFAULT_HUB_HOST,X9 as BrowserWebSocketHubAdapter};
753
+ `),$.end()}catch{$.destroy()}}function oY($,Z){if(!$||!Z)return!1;let Q=Buffer.from($,"utf8"),W=Buffer.from(Z,"utf8");return Q.length===W.length&&Ug(Q,W)}function AD($,Z){let Q=$&&typeof $==="object"&&"code"in $&&typeof $.code==="string"?$.code:void 0,W=$ instanceof Error?$.message:typeof $==="string"?$:"Unknown startup error",J=`Failed to start hub server on ${Z.host}:${Z.port}${Z.pathname}: ${W}`,X=Error(Q?`${J} (${Q})`:J);if(Q)$.code=Q,X.code=Q;if($ instanceof Error&&$.stack)X.stack=`${X.name}: ${X.message}
754
+ Caused by: ${$.stack}`;return X}async function Eg($){return await new Promise((Z,Q)=>{let W=Lg.createServer();W.once("error",Q),W.listen(0,$,()=>{let J=W.address();if(!J||typeof J==="string"){W.close(()=>Q(Error("Failed to resolve free port")));return}let X=J.port;W.close((Y)=>{if(Y){Q(Y);return}Z(X)})})})}function Ng($){return $ instanceof Error&&"code"in $&&$.code==="EADDRINUSE"}var tY=new Map,fD="cline-hub-auth.",wg=30000;function $j($){return Array.isArray($)?$.join(","):$??""}function UD($){return $===32||$===9}function l7($){let Z=$j($).trim(),Q="bearer";if(Z.length<=6||Z.slice(0,6).toLowerCase()!=="bearer"||!UD(Z.charCodeAt(6)))return null;let W=7;while(W<Z.length&&UD(Z.charCodeAt(W)))W+=1;return Z.slice(W).trim()||null}function Cg($){for(let Z of $j($).split(",")){let Q=Z.trim();if(Q.startsWith(fD))return Q.slice(fD.length).trim()||null}return null}function p7($){let Z=$.trim().toLowerCase();return Z==="localhost"||Z==="127.0.0.1"||Z==="::1"||Z==="[::1]"}function MY($){let Z=$j($).trim();if(!Z)return!1;try{return p7(new eY(Z).hostname)}catch{return!1}}async function j9($){let Z=$.owner??x1(),Q=$.host??"127.0.0.1",W=$.pathname??"/hub",J=$.port??V8(),X=J===0?await Eg(Q):J,Y=X,j=Z1(Q,X,W),V=l9(),H=d9(),B=new w4($);await B.start();let G=new X9(new Y9(B),$.telemetry),K=new Set,F=new Date().toISOString(),A={protocolVersion:GD,minClientProtocolVersion:FD,maxClientProtocolVersion:KD,capabilities:_g,coreVersion:n4.version,buildId:V,pid:process.pid,startedAt:F},L=new Set,f,D,U=async()=>{if(D)return D;return D=(async()=>{if(f)clearInterval(f),f=void 0;for(let _ of L)_.terminate?.();L.clear();for(let _ of K)_();if(K.clear(),await new Promise((_,E)=>{q.close((C)=>{if(C){E(C);return}_()})}),await new Promise((_,E)=>{T.close((C)=>{if(C){E(C);return}_()})}),await B.stop(),(await K0(Z.discoveryPath))?.url===j)await S0(Z.discoveryPath)})(),D},T=Dg.createServer((z,_)=>{if((z.url??"/")==="/health"){let C=JSON.stringify({ok:!0,protocolVersion:A.protocolVersion,minClientProtocolVersion:A.minClientProtocolVersion,maxClientProtocolVersion:A.maxClientProtocolVersion,coreVersion:A.coreVersion,host:Q,port:Y,url:j});_.statusCode=200,_.setHeader("content-type","application/json"),_.end(C);return}if((z.url??"/")==="/status"){if(!oY(l7(z.headers.authorization),H)){_.statusCode=401,_.end("Unauthorized");return}let C=JSON.stringify({hubId:B.getHubId(),...A,authToken:H,host:Q,port:Y,url:j,updatedAt:new Date().toISOString()});_.statusCode=200,_.setHeader("content-type","application/json"),_.end(C);return}if((z.url??"/")==="/version"){_.statusCode=200,_.setHeader("content-type","application/json"),_.end(JSON.stringify(A));return}if(new eY(z.url??"/",`http://${Q}:${Y}`).pathname==="/shutdown"&&z.method==="POST"){if(!oY(l7(z.headers.authorization),H)){_.statusCode=401,_.end("Unauthorized");return}_.statusCode=202,_.setHeader("content-type","application/json"),_.end(JSON.stringify({ok:!0})),queueMicrotask(()=>{U()});return}_.statusCode=404,_.end("Not found")}),q=new Tg({noServer:!0});f=setInterval(()=>{for(let z of L){if(z.isAlive===!1){try{z.terminate?.()}catch{}L.delete(z);continue}z.isAlive=!1;try{z.ping?.()}catch{try{z.terminate?.()}catch{}L.delete(z)}}},wg),T.on("upgrade",(z,_,E)=>{if(new eY(z.url??"/",`http://${Q}:${Y}`).pathname!==W){_.destroy();return}if(!(oY(Cg(z.headers["sec-websocket-protocol"]),H)||p7(Q)&&MY(z.headers.origin))){Rg(_);return}try{q.handleUpgrade(z,_,E,(l)=>{let o=l;o.isAlive=!0,o.on("pong",()=>{o.isAlive=!0}),L.add(o);let t=G.attach(qg(l));K.add(t),l.once("close",()=>{L.delete(o),t(),K.delete(t)})})}catch{Mg(_)}});try{await new Promise((z,_)=>{T.once("error",(E)=>{_(AD(E,{host:Q,port:X,pathname:W}))}),T.listen(X,Q,()=>{let E=T.address();if(!E||typeof E==="string"){_(AD(Error("Failed to resolve hub port"),{host:Q,port:X,pathname:W}));return}Y=E.port,j=Z1(Q,Y,W),z()})})}catch(z){if(f)clearInterval(f),f=void 0;throw await B.stop().catch(()=>{return}),z}return await p9(Z.discoveryPath,{hubId:B.getHubId(),protocolVersion:GD,minClientProtocolVersion:FD,maxClientProtocolVersion:KD,capabilities:[...A.capabilities],coreVersion:n4.version,buildId:V,authToken:H,host:Q,port:Y,url:j,pid:process.pid,startedAt:F,updatedAt:F}),{host:Q,port:Y,url:j,authToken:H,close:U}}async function r7($){let Z=$.owner??x1(),Q=$.host!==void 0||$.port!==void 0||$.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),W=$.host??"127.0.0.1",J=$.port??V8(),X=$.pathname??"/hub",Y=Z1(W,J,X),j=Z.discoveryPath,V=(B)=>{if(!Q)B$(B.url,B.authToken);return B},H=tY.get(j);if(H){let B=await H;if(B.url===Y)return V({server:B,url:B.url,authToken:B.authToken,action:"reuse"})}return await r9(Z.discoveryPath,async()=>{let B=await K0(Z.discoveryPath);if(B?.url&&(B.url===Y||$.allowPortFallback===!0)){let F=await g1(B.url,{authToken:B.authToken});if(F?.url&&zg(F).compatible&&await A1(F.url,{authToken:B.authToken}))return V({url:F.url,authToken:B.authToken,action:"reuse"})}if(B?.url)await S0(Z.discoveryPath);let K=async(F)=>{let A=j9({...F,owner:Z});tY.set(j,A);try{let L=await A;return V({server:L,url:L.url,authToken:L.authToken,action:"started"})}catch(L){throw tY.delete(j),L}};try{return await K($)}catch(F){if(!$.allowPortFallback||!Ng(F))throw F;return await K({...$,port:0})}})}function LD(){return DD()==="production"?F1():Q1()}function Pg($){return DD()!=="production"&&!$}async function HU($){let Z=K1({host:$.host,port:$.port,pathname:$.pathname});return await j9({...$,...Z,owner:LD()})}async function BU($){let Z=$.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Q=K1({host:$.host,port:$.port,pathname:$.pathname});return await r7({...$,...Q,allowPortFallback:$.allowPortFallback??Pg(Z),owner:LD()})}export{p9 as writeHubDiscovery,r9 as withHubStartupLock,A1 as verifyHubConnection,J9 as truncateNotificationBody,OW as toHubStatusUrl,i9 as toHubHealthUrl,hW as stopLocalHubServerGracefully,j9 as startHubWebSocketServer,HU as startHubServer,H8 as spawnDetachedHubServerWithRetry,wW as spawnDetachedHubServer,_V as sendHubCommand,t9 as restartLocalHubIfIdleAfterStartupTimeout,QV as resolveWorkspaceHubOwnerContext,Q1 as resolveSharedHubOwnerContext,F1 as resolveProductionHubOwnerContext,kW as resolveHubUrl,x1 as resolveHubOwnerContext,K1 as resolveHubEndpointOptions,l9 as resolveHubBuildId,V8 as resolveDefaultHubPort,NW as resolveDefaultHubPathname,EW as resolveDefaultHubHost,o4 as resolveCompatibleLocalHubUrl,tj as resolveClineDir,o$ as resolveClineDataDir,s4 as requestHubShutdown,B$ as rememberRecoverableLocalHubUrl,K0 as readHubDiscovery,l7 as readBearerToken,g1 as probeHubServer,LV as probeHubConnection,a9 as prewarmDetachedHubServer,G$ as normalizeHubWebSocketUrl,MY as isLocalHubOrigin,p7 as isLocalHubHostName,bW as isHubReconnectableTransportError,o9 as isHubCommandTimeoutError,$V as isDiscoveryFilePresent,r7 as ensureHubWebSocketServer,BU as ensureHubServer,VV as ensureDetachedHubServer,$2 as ensureCompatibleLocalHubUrl,VU as createLocalHubScheduleRuntimeHandlers,ej as createInMemoryHubOwnerContext,Z1 as createHubServerUrl,d9 as createHubAuthToken,h1 as createConfiguredTelemetryService,j8 as createConfiguredTelemetryHandle,e9 as connectToHub,S0 as clearHubDiscovery,W1 as NodeHubClient,Y9 as NativeHubTransportAdapter,gW as HubUIClient,R0 as HubTransportError,xW as HubSessionClient,w4 as HubServerTransport,Z8 as HubScheduleService,o2 as HubScheduleCommandService,B8 as HubCommandError,MW as DEFAULT_HUB_PORT,RW as DEFAULT_HUB_PATHNAME,qW as DEFAULT_HUB_HOST,X9 as BrowserWebSocketHubAdapter};