@cline/core 0.0.67 → 0.0.68

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 SO}from"node:module";var{defineProperty:d3,getOwnPropertyNames:CO}=Object;var _V=Object.prototype.hasOwnProperty;function LV($){return this[$]}var M=($,Z,Q)=>{var J=CO(Z);for(let W of J)if(!_V.call($,W)&&W!=="default")d3($,W,{get:LV.bind(Z,W),enumerable:!0});if(Q){for(let W of J)if(!_V.call(Q,W)&&W!=="default")d3(Q,W,{get:LV.bind(Z,W),enumerable:!0});return Q}};var wO=($)=>$;function PO($,Z){this[$]=wO.bind(null,Z)}var w=($,Z)=>{for(var Q in Z)d3($,Q,{get:Z[Q],enumerable:!0,configurable:!0,set:PO.bind(Z,Q)})};var D2=($,Z)=>()=>($&&(Z=$($=0)),Z);var AV=SO(import.meta.url);import{AGENT_UNEXPECTED_REASONING_TOKENS_EVENT as Uq,captureAgentUnexpectedReasoningTokens as pV,captureTaskLifecycleEvent as Hd,SDK_ERROR_TELEMETRY_EVENT as Dq,TASK_CANCELLED_EVENT as _q,TASK_FIRST_CHUNK_RECEIVED_EVENT as Lq,TASK_PROVIDER_REQUEST_STARTED_EVENT as Aq,TASK_PROVIDER_STREAM_FAILED_EVENT as Oq,TASK_PROVIDER_STREAM_STARTED_EVENT as qq}from"@cline/shared";function n($,Z,Q){$?.capture({event:Z,properties:Q})}function FZ($){if(!$)return;return $.substring(0,zq)}function Tq($){if(typeof $==="string")return"Error";return $.name?.trim()||$.constructor?.name||"Error"}function Nq($){return typeof $==="string"?$:$.message}function dV($,Z){return $.some((Q)=>Z.has(Q.trim().toLowerCase()))}function lV($){n($,m.CLIENT.EXTENSION_ACTIVATED)}function UZ($,Z){let Q=[...Z.vcs_types],J={root_count:Z.root_count,vcs_types:Q,is_multi_root:Z.root_count>1,has_git:dV(Q,new Set(["git"])),has_mercurial:dV(Q,new Set(["mercurial","hg"]))};if(Z.init_duration_ms!==void 0)J.init_duration_ms=Z.init_duration_ms;if(Z.feature_flag_enabled!==void 0)J.feature_flag_enabled=Z.feature_flag_enabled;if(Z.is_remote_workspace!==void 0)J.is_remote_workspace=Z.is_remote_workspace;n($,m.WORKSPACE.INITIALIZED,J)}function DZ($,Z,Q){n($,m.WORKSPACE.INIT_ERROR,{error_type:Tq(Z),error_message:FZ(Nq(Z)),fallback_to_single_root:Q.fallback_to_single_root,workspace_count:Q.workspace_count??0})}function iV($,Z){n($,m.WORKSPACE.PATH_RESOLVED,{...Z})}function p1($,Z){n($,m.USER.AUTH_STARTED,{provider:Z})}function l1($,Z,Q){n($,m.USER.AUTH_SUCCEEDED,{provider:Z,...Q})}function i1($,Z,Q,J){n($,m.USER.AUTH_FAILED,{provider:Z,errorMessage:FZ(Q),...J?.requestId?{request_id:J.requestId}:{}})}function S$($,Z,Q,J){n($,m.USER.AUTH_LOGGED_OUT,{provider:Z,reason:Q,...J})}function QJ($,Z,Q){n($,m.USER.AUTH_REFRESH_SOFT_FAILURE,{provider:Z,...Q})}function rV($,Z,Q){n($,m.USER.AUTH_RUN_RETRY,{provider:Z,recovered:Q?.recovered})}function nV($,Z){n($,m.USER.PROVIDER_CONFIGURED,{provider:Z})}function aV($,Z){$?.captureRequired(m.USER.TELEMETRY_OPT_OUT,Z)}function r1($,Z){let Q=Z.id?.trim();if(Q)$?.setDistinctId(Q);$?.updateCommonProperties({user_id:Q||Z.id,account_id:Z.id,account_email:Z.email,provider:Z.provider,organization_id:Z.organizationId,organization_name:Z.organizationName,member_id:Z.memberId})}function _Z($,Z){n($,m.TASK.CREATED,Z)}function LZ($,Z){n($,m.TASK.RESTARTED,Z)}function q4($,Z){n($,m.TASK.COMPLETED,Z)}function b8($,Z){n($,m.TASK.CONVERSATION_TURN,{...Z,timestamp:new Date().toISOString()})}function AZ($,Z){n($,m.TASK.TOKEN_USAGE,Z)}function OZ($,Z,Q){n($,m.TASK.MODE_SWITCH,{ulid:Z,mode:Q})}function y8($,Z){n($,m.TASK.TOOL_USED,Z)}function qZ($,Z){n($,m.TASK.SKILL_USED,Z)}function zZ($,Z){n($,m.TASK.DIFF_EDIT_FAILED,Z)}function z4($,Z){n($,m.TASK.PROVIDER_API_ERROR,{...Z,errorMessage:FZ(Z.errorMessage)??"unknown",timestamp:new Date().toISOString()})}function TZ($,Z){n($,m.TASK.MISTAKE_LIMIT_REACHED,{...Z,timestamp:new Date().toISOString()})}function oV($,Z){n($,m.SDK.TOOL_TIMEOUT,fq(Z))}function fq($){let Z={};for(let[Q,J]of Object.entries($))if(J!==void 0)Z[Q]=J;return Z}function NZ($,Z,Q){n($,m.TASK.MENTION_USED,{mentionType:Z,contentLength:Q,timestamp:new Date().toISOString()})}function fZ($,Z,Q,J){n($,m.TASK.MENTION_FAILED,{mentionType:Z,errorType:Q,errorMessage:FZ(J),timestamp:new Date().toISOString()})}function RZ($,Z,Q,J,W){n($,m.TASK.MENTION_SEARCH_RESULTS,{queryLength:Z.length,resultCount:Q,searchType:J,isEmpty:W,timestamp:new Date().toISOString()})}function b$($,Z){n($,m.TASK.AGENT_CREATED,{...Z,timestamp:new Date().toISOString()})}function MZ($,Z){n($,m.TASK.AGENT_TEAM_CREATED,{...Z,timestamp:new Date().toISOString()})}function T4($,Z){n($,Z.event==="ended"?m.TASK.SUBAGENT_COMPLETED:m.TASK.SUBAGENT_STARTED,{...Z,timestamp:new Date().toISOString()})}function EZ($,Z,Q,J){n($,m.HOOKS.DISCOVERY_COMPLETED,{hookName:Z,globalCount:Q,workspaceCount:J,totalCount:Q+J,timestamp:new Date().toISOString()})}function CZ($,Z){n($,m.TASK.COMPACTION_EXECUTED,{...Z,timestamp:new Date().toISOString()})}function wZ($,Z){n($,m.TASK.COMPACTION_SKIPPED,{...Z,timestamp:new Date().toISOString()})}function sV($,Z){n($,m.TASK.COMPACTION_BUDGET_EMERGENCY,{...Z,timestamp:new Date().toISOString()})}var zq=500,m;var C0=D2(()=>{m={CLIENT:{EXTENSION_ACTIVATED:"user.extension_activated"},SESSION:{STARTED:"session.started",ENDED:"session.ended"},AGENT:{UNEXPECTED_REASONING_TOKENS:Uq},USER:{AUTH_STARTED:"user.auth_started",AUTH_SUCCEEDED:"user.auth_succeeded",AUTH_FAILED:"user.auth_failed",AUTH_LOGGED_OUT:"user.auth_logged_out",AUTH_REFRESH_SOFT_FAILURE:"user.auth_refresh_soft_failure",AUTH_RUN_RETRY:"user.auth_run_retry",PROVIDER_CONFIGURED:"user.provider_configured",TELEMETRY_OPT_OUT:"user.opt_out"},TASK:{CREATED:"task.created",RESTARTED:"task.restarted",COMPLETED:"task.completed",CONVERSATION_TURN:"task.conversation_turn",TOKEN_USAGE:"task.tokens",MODE_SWITCH:"task.mode",TOOL_USED:"task.tool_used",SKILL_USED:"task.skill_used",DIFF_EDIT_FAILED:"task.diff_edit_failed",PROVIDER_API_ERROR:"task.provider_api_error",MISTAKE_LIMIT_REACHED:"task.mistake_limit_reached",PROVIDER_REQUEST_STARTED:Aq,PROVIDER_STREAM_STARTED:qq,FIRST_CHUNK_RECEIVED:Lq,PROVIDER_STREAM_FAILED:Oq,CANCELLED:_q,MENTION_USED:"task.mention_used",MENTION_FAILED:"task.mention_failed",MENTION_SEARCH_RESULTS:"task.mention_search_results",AGENT_CREATED:"task.agent_created",AGENT_TEAM_CREATED:"task.agent_team_created",SUBAGENT_STARTED:"task.subagent_started",SUBAGENT_COMPLETED:"task.subagent_completed",COMPACTION_EXECUTED:"task.compaction_executed",COMPACTION_SKIPPED:"task.compaction_skipped",COMPACTION_BUDGET_EMERGENCY:"task.compaction_budget_emergency"},HOOKS:{DISCOVERY_COMPLETED:"hooks.discovery_completed"},WORKSPACE:{INITIALIZED:"workspace.initialized",INIT_ERROR:"workspace.init_error",PATH_RESOLVED:"workspace.path_resolved"},SDK:{ERROR:Dq,TOOL_TIMEOUT:"sdk.tool_timeout"},FEATURE_FLAGS:{FLAG_CALLED:"$feature_flag_called"}}});import{mkdirSync as Rq,readFileSync as Mq,statSync as Eq,writeFileSync as Cq}from"node:fs";import{dirname as wq}from"node:path";import{resolveGlobalSettingsPath as eV}from"@cline/shared/storage";import{z as N1}from"zod";function PZ(){return N4.parse({})}function bq(){SZ=void 0}function yq($){if($.disabledTools)Object.freeze($.disabledTools);if($.disabledPlugins)Object.freeze($.disabledPlugins);return Object.freeze($)}function kq($){let Z;try{Z=Mq($,"utf8")}catch{return PZ()}try{let Q=N4.safeParse(JSON.parse(Z));return Q.success?Q.data:PZ()}catch{return PZ()}}function hq(){let $=eV(),Z=Eq($,{throwIfNoEntry:!1}),Q=Z?.mtimeMs??0,J=Z?.size??0,W=SZ;if(W&&W.path===$&&W.mtimeMs===Q&&W.size===J)return W;let X=yq(Z?kq($):PZ());return SZ={path:$,mtimeMs:Q,size:J,value:X},SZ}function j0(){return hq().value}function g0($,Z={}){let Q=eV(),J=j0();Rq(wq(Q),{recursive:!0});let W=N4.parse($);if(!J.telemetryOptOut&&W.telemetryOptOut)aV(Z.telemetry);Cq(Q,`${JSON.stringify(W,null,2)}
2
- `,"utf8"),bq()}function bZ(){return j0().telemetryOptOut}function $B($,Z={}){g0({...j0(),telemetryOptOut:$},Z)}function ZB(){return j0().autoUpdateEnabled}function QB($,Z={}){g0({...j0(),autoUpdateEnabled:$},Z)}function JB(){return j0().compactionStrategy??"agentic"}function WB($){g0({...j0(),compactionStrategy:$})}function XB(){let $=j0();if($.compactionEnabled===!1)return"off";return $.compactionStrategy}function jB($){let Z=j0();if($==="off"){g0({...Z,compactionEnabled:!1});return}g0({...Z,compactionEnabled:!0,compactionStrategy:$})}function YB(){return j0().planActMode}function VB($){g0({...j0(),planActMode:$})}function BB(){return j0().toolAutoApprove}function HB($){g0({...j0(),toolAutoApprove:$})}function f1($){return new Set($??j0().disabledTools??[])}function f4($){return new Set($??j0().disabledPlugins??[])}function KB($){return f1().has($)}function yZ($){let Z=j0(),Q=new Set(Z.disabledTools??[]),J=Q.has($);if(J)Q.delete($);else Q.add($);return g0({...Z,disabledTools:[...Q]}),!J}function JJ($,Z){let Q=[...new Set($.map((X)=>X.trim()).filter(Boolean))];if(Q.length===0)return;let J=j0(),W=f1(J.disabledTools);for(let X of Q)if(Z)W.add(X);else W.delete(X);g0({...J,disabledTools:[...W]})}function GB($,Z){return JJ([$],Z),Z}function FB($){return f4().has($)}function UB($,Z){let Q=$.trim();if(!Q)return;let J=j0(),W=f4(J.disabledPlugins);if(Z)W.add(Q);else W.delete(Q);g0({...J,disabledPlugins:[...W]})}function kZ($,Z){let Q=f4(Z);if(Q.size===0)return[...$];return $.filter((J)=>!Q.has(J))}function n1($,Z){let Q=f1(Z);if(Q.size===0)return[...$];return $.filter((J)=>!Q.has(J.name))}function hZ($,Z){if(!$||$.length===0)return $;let Q=f1(Z);if(Q.size===0)return $;return $.map((J)=>{if(!J.setup)return J;return{...J,setup:(W,X)=>J.setup?.({...W,registerTool:(j)=>{if(!Q.has(j.name))W.registerTool(j)}},X)}})}var tV,Pq,Sq,N4,SZ;var H1=D2(()=>{C0();tV=N1.preprocess(($)=>Array.isArray($)?$.filter((Z)=>typeof Z==="string").map((Z)=>Z.trim()).filter(Boolean):void 0,N1.array(N1.string()).optional()).transform(($)=>{if(!$)return;let Z=[...new Set($)].sort((Q,J)=>Q.localeCompare(J));return Z.length>0?Z:void 0}),Pq=N1.enum(["basic","agentic"]).catch("agentic"),Sq=N1.enum(["plan","act"]),N4=N1.object({telemetryOptOut:N1.boolean().default(!1).catch(!1),autoUpdateEnabled:N1.boolean().default(!0).catch(!0),compactionStrategy:Pq.optional(),compactionEnabled:N1.boolean().optional().catch(void 0),planActMode:Sq.optional().catch(void 0),toolAutoApprove:N1.boolean().optional().catch(void 0),disabledTools:tV.optional(),disabledPlugins:tV.optional()}).strip().transform(($)=>{let Z={autoUpdateEnabled:$.autoUpdateEnabled,telemetryOptOut:$.telemetryOptOut};if($.compactionStrategy)Z.compactionStrategy=$.compactionStrategy;if($.compactionEnabled!==void 0)Z.compactionEnabled=$.compactionEnabled;if($.planActMode)Z.planActMode=$.planActMode;if($.toolAutoApprove!==void 0)Z.toolAutoApprove=$.toolAutoApprove;if($.disabledTools?.length)Z.disabledTools=$.disabledTools;if($.disabledPlugins?.length)Z.disabledPlugins=$.disabledPlugins;return Z})});import{existsSync as Iq,mkdirSync as xq,readFileSync as gq,writeFileSync as vq}from"node:fs";import{resolve as mq}from"node:path";import{resolveSessionDataDir as cq}from"@cline/shared/storage";import{nanoid as uq}from"nanoid";import*as dq from"node-machine-id";function k8(){if(!_B)DB=LB(),_B=!0;return DB??AB()}function l0($){let Z=$?.trim();if(Z)return Z;let Q=LB();if(Q)return Q;return AB()}function lq(){let $=dq;return $.machineIdSync??$.default?.machineIdSync}function LB(){try{let $=lq();if(!$)return;return $().trim()||void 0}catch{return}}function AB(){let $=cq(),Z=mq($,pq);try{if(Iq(Z)){let J=gq(Z,"utf8").trim();if(J.length>0)return J}}catch{}let Q=`cl-${uq()}`;try{xq($,{recursive:!0}),vq(Z,Q,"utf8")}catch{}return Q}var pq="machine-id",DB,_B=!1;var O2=()=>{};class M4{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,J,W=!1){if(!this.meter||!W&&!this.isEnabled())return;let X=this.counters.get($);if(!X)X=this.meter.createCounter($,J?{description:J}:void 0),this.counters.set($,X);X.add(Z,this.flattenProperties(this.buildAttributes(Q)))}recordHistogram($,Z,Q,J,W=!1){if(!this.meter||!W&&!this.isEnabled())return;let X=this.histograms.get($);if(!X)X=this.meter.createHistogram($,J?{description:J}:void 0),this.histograms.set($,X);X.record(Z,this.flattenProperties(this.buildAttributes(Q)))}recordGauge($,Z,Q,J,W=!1){if(!this.meter||!W&&!this.isEnabled())return;let X=this.buildAttributes(Q),j=JSON.stringify(X),Y=this.gaugeValues.get($);if(Z===null){if(Y){if(Y.delete(j),Y.size===0)this.gaugeValues.delete($),this.gauges.delete($)}return}let V=Y;if(!V)V=new Map,this.gaugeValues.set($,V);if(!this.gauges.has($)){let B=this.meter.createObservableGauge($,J?{description:J}:void 0);B.addCallback((H)=>{for(let K of this.snapshotGaugeSeries($))H.observe(K.value,this.flattenProperties(K.attributes))}),this.gauges.set($,B)}V.set(j,{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 J=this.flattenProperties(this.buildAttributes(Z,Q));this.logger.emit({severityText:"INFO",body:$,attributes:J})}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,J=0){if(!$)return{};let W={},X=100,j=10;for(let[Y,V]of Object.entries($)){if(Y==="__proto__"||Y==="constructor"||Y==="prototype")continue;let B=Z?`${Z}.${Y}`:Y;if(V===null||V===void 0){W[B]=String(V);continue}if(Array.isArray(V)){let H=V.length>X?V.slice(0,X):V;try{W[B]=JSON.stringify(H)}catch{W[B]="[UnserializableArray]"}if(V.length>X)W[`${B}_truncated`]=!0,W[`${B}_original_length`]=V.length;continue}if(typeof V==="object"){if(V instanceof Date){W[B]=V.toISOString();continue}if(V instanceof Error){W[B]=V.message;continue}if(Q.has(V)){W[B]="[Circular]";continue}if(J>=j){W[B]="[MaxDepthExceeded]";continue}Q.add(V),Object.assign(W,this.flattenProperties(V,B,Q,J+1));continue}if(iq(V)){W[B]=V;continue}try{W[B]=JSON.stringify(V)}catch{W[B]=String(V)}}return W}}function iq($){return typeof $==="string"||typeof $==="number"||typeof $==="boolean"}class E4{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,J,W){if(!W&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"counter",name:$,value:Z,attributes:Q,description:J,required:W===!0})}recordHistogram($,Z,Q,J,W){if(!W&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"histogram",name:$,value:Z,attributes:Q,description:J,required:W===!0})}recordGauge($,Z,Q,J,W){if(!W&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"gauge",name:$,value:Z,attributes:Q,description:J,required:W===!0})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}async flush(){}async dispose(){}}class h8{adapters;metadata;distinctId;deviceId;commonProperties;constructor($={}){if(this.adapters=[...$.adapters??[]],$.logger)this.adapters.push(new E4({logger:$.logger}));this.metadata={...$.metadata??{}},this.distinctId=$.distinctId,this.deviceId=$.deviceId??k8(),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 J of this.adapters)J.emitRequired($,Q)}recordCounter($,Z,Q,J,W=!1){let X=this.buildAttributes(Q);for(let j of this.adapters)j.recordCounter($,Z,X,J,W)}recordHistogram($,Z,Q,J,W=!1){let X=this.buildAttributes(Q);for(let j of this.adapters)j.recordHistogram($,Z,X,J,W)}recordGauge($,Z,Q,J,W=!1){let X=this.buildAttributes(Q);for(let j of this.adapters)j.recordGauge($,Z,X,J,W)}async flush(){await Promise.all(this.adapters.map(($)=>$.flush()))}async dispose(){await Promise.all(this.adapters.map(($)=>$.dispose()))}buildAttributes($){return{...this.commonProperties,...$,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{},device_id:this.deviceId}}}var WJ=D2(()=>{O2()});import{metrics as rq,trace as nq}from"@opentelemetry/api";import{logs as aq}from"@opentelemetry/api-logs";import{OTLPLogExporter as oq}from"@opentelemetry/exporter-logs-otlp-http";import{OTLPMetricExporter as sq}from"@opentelemetry/exporter-metrics-otlp-http";import{OTLPTraceExporter as tq}from"@opentelemetry/exporter-trace-otlp-http";import{resourceFromAttributes as eq}from"@opentelemetry/resources";import{BatchLogRecordProcessor as $z,ConsoleLogRecordExporter as Zz,LoggerProvider as Qz}from"@opentelemetry/sdk-logs";import{ConsoleMetricExporter as Jz,MeterProvider as Wz,PeriodicExportingMetricReader as OB}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as Xz,ConsoleSpanExporter as jz,SimpleSpanProcessor as Yz}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as Vz}from"@opentelemetry/sdk-trace-node";import{ATTR_SERVICE_NAME as Bz,ATTR_SERVICE_VERSION as Hz}from"@opentelemetry/semantic-conventions";class qB{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 I8{meterProvider;loggerProvider;tracerProvider;options;constructor($={}){this.options=$;let Z=eq({[Bz]:$.serviceName??"cline",...$.serviceVersion?{[Hz]:$.serviceVersion}:{}});if(this.meterProvider=this.createMeterProvider(Z),this.loggerProvider=this.createLoggerProvider(Z),this.tracerProvider=this.createTracerProvider(Z),this.meterProvider)rq.setGlobalMeterProvider(this.meterProvider);if(this.loggerProvider)aq.setGlobalLoggerProvider(this.loggerProvider);if(this.tracerProvider)this.tracerProvider.register()}getTracer($="cline",Z){return nq.getTracer($,Z??this.options.serviceVersion)}createAdapter($){return new M4({...$,meterProvider:this.meterProvider,loggerProvider:this.loggerProvider})}createTelemetryService($){let Z=this.createAdapter({name:$.name,enabled:this.options.enabled,metadata:$.metadata});return new h8({...$,adapters:[Z],distinctId:l0($.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=XJ(this.options.metricsExporter);if(Z.length===0)return null;let Q=Math.max(1000,this.options.metricExportIntervalMs??this.options.metricExportInterval??60000),J=Math.min(30000,Math.floor(Q*0.8)),W=Z.map((X)=>Fz(X,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json",interval:Q,timeout:J})).filter((X)=>X!==null);if(W.length===0)return null;return new Wz({resource:$,readers:W})}createTracerProvider($){let Z=XJ(this.options.tracesExporter);if(Z.length===0)return null;let Q=this.options.otlpTracesEndpoint??this.options.otlpEndpoint,J=this.options.otlpTracesHeaders??this.options.otlpHeaders,W=[];for(let X of Z){let j=Gz(X,{endpoint:Q,headers:J,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(j)W.push(j)}if(W.length===0)return null;return new Vz({resource:$,spanProcessors:W})}createLoggerProvider($){let Z=XJ(this.options.logsExporter);if(Z.length===0)return null;let Q=Z.map((J)=>{let W=Kz(J,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(!W)return null;return new $z(W,{maxQueueSize:this.options.logMaxQueueSize??2048,maxExportBatchSize:this.options.logBatchSize??512,scheduledDelayMillis:this.options.logBatchTimeoutMs??this.options.logBatchTimeout??5000})}).filter((J)=>J!==null);if(Q.length===0)return null;return new Qz({resource:$,processors:Q})}}function C4($){let Z=new I8($),Q=Z.createTelemetryService($),J=()=>{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})};if(!$.deferProviderCreatedEvent)J();return{provider:Z,telemetry:Q,emitProviderCreated:J}}function a1($){if(bZ())return{telemetry:new qB($)};if($.enabled!==!0)return{telemetry:new h8({...$,distinctId:l0($.distinctId)})};return C4($)}function x8($){let{telemetry:Z,provider:Q,emitProviderCreated:J}=a1($);return{telemetry:Z,provider:Q,flush:async()=>{let j=Q;if(j&&typeof j.forceFlush==="function")try{await j.forceFlush()}catch{}},dispose:async()=>{await Promise.allSettled([Z.dispose(),Q?.dispose()])},...$.deferProviderCreatedEvent&&J?{emitProviderCreated:J}:{}}}function XJ($){if(!$)return[];return(Array.isArray($)?$:$.split(",")).map((Q)=>Q.trim()).filter((Q)=>Q==="console"||Q==="otlp")}function Kz($,Z){if($==="console")return new Zz;if(!Z.endpoint)return null;let Q=jJ(Z.endpoint,"/v1/logs");return new oq({url:Q,headers:Z.headers})}function Gz($,Z){if($==="console")return new Yz(new jz);if(!Z.endpoint)return null;let Q=jJ(Z.endpoint,"/v1/traces");return new Xz(new tq({url:Q,headers:Z.headers}))}function Fz($,Z){if($==="console")return new OB({exporter:new Jz,exportIntervalMillis:Z.interval,exportTimeoutMillis:Z.timeout});if(!Z.endpoint)return null;let Q=jJ(Z.endpoint,"/v1/metrics");return new OB({exporter:new sq({url:Q,headers:Z.headers}),exportIntervalMillis:Z.interval,exportTimeoutMillis:Z.timeout})}function jJ($,Z){let Q=new URL($),J=Q.pathname.endsWith("/")?Q.pathname.slice(0,-1):Q.pathname;return Q.pathname=J.endsWith(Z)?J:`${J}${Z}`,Q.toString()}var IZ=D2(()=>{H1();O2();WJ()});var _G={};w(_G,{normalizeUserMessage:()=>nM,buildInitialUserContent:()=>rM});async function rM($,Z,Q,J){let W=aM(Z),X=await sM(Q,J);if(W.length===0&&!X)return $;let j=[{type:"text",text:$},...W];if(X)j.push(...X);return j}function nM($){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 J of Z)if(J&&typeof J==="object"&&J.type==="text"){let W=J.text;if(typeof W==="string")Q.push(W)}return Q.join(`
3
- `)}function aM($){if(!$||$.length===0)return[];let Z=[];for(let Q of $){let J=oM(Q);if(J)Z.push(J)}return Z}function oM($){let Z=$.trim();if(!Z)return;let Q=Z.match(/^data:([^;,]+);base64,(.+)$/);if(Q){let J=Q[1],W=Q[2];if(!J||!W)return;return{type:"image",mediaType:J,data:W}}return{type:"image",mediaType:"image/png",data:Z}}async function sM($,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.")}),J=await Promise.all($.map(async(W)=>{let X=W.replace(/\\/g,"/");try{let j=await Q(W);return{type:"file",path:X,content:j}}catch(j){let Y=j instanceof Error?j.message:String(j);return{type:"file",path:X,content:`Error fetching content: ${Y}`}}}));if(J.length===0)return;return J}var lU={};w(lU,{updateMcpSettingsFileSync:()=>A1,updateMcpSettingsFile:()=>y6,updateMcpServerOAuthStateAsync:()=>X9,updateMcpServerOAuthState:()=>j8,setMcpServerDisabled:()=>W8,resolveMcpServerRegistrations:()=>W1,resolveDefaultMcpSettingsPath:()=>W0,registerMcpServersFromSettingsFile:()=>Y8,normalizeMcpServerOAuthState:()=>k6,loadMcpSettingsFile:()=>J8,listMcpServerOAuthStatuses:()=>j9,hasMcpSettingsFile:()=>U$,getMcpServerOAuthState:()=>X8,McpSettingsUpdateSkippedError:()=>b6,McpSettingsMutatorPurityError:()=>J2,McpSettingsLockTimeoutError:()=>W2});import{randomUUID as ZS}from"node:crypto";import{existsSync as wU,mkdirSync as MX,readFileSync as PU,renameSync as wX,rmdirSync as QS,rmSync as EX,statSync as JS,unlinkSync as SU,writeFileSync as bU}from"node:fs";import{dirname as yU,join as CU}from"node:path";import{setTimeout as WS}from"node:timers/promises";import{isMcpTimeoutConfigured as XS,resolveMcpTimeoutSeconds as jS}from"@cline/shared";import{resolveMcpSettingsPath as YS}from"@cline/shared/storage";import{z as k}from"zod";function CX($){if(!$)return;if($==="http")return"streamableHttp";return $}function W0(){return YS()}function AS($,Z){MX(yU($),{recursive:!0});let Q=`${$}.tmp.${process.pid}.${Date.now()}.${Math.random().toString(36).slice(2)}`;try{bU(Q,Z,{encoding:"utf8",flag:"wx"}),wX(Q,$)}catch(J){try{SU(Q)}catch{}throw J}}function qS($){Atomics.wait(OS,0,0,$)}function zS($){return`${$}.lock`}function gU(){return`${process.pid}.${Date.now()}.${ZS()}`}function vU($,Z){MX(yU($),{recursive:!0});let Q=`${$}.tmp.${Z}`;EX(Q,{recursive:!0,force:!0}),MX(Q,{recursive:!0}),bU(CU(Q,`owner.${Z}`),Z,{encoding:"utf8",flag:"wx"});try{return wX(Q,$),{lockDir:$,ownerFile:CU($,`owner.${Z}`)}}catch(J){if(EX(Q,{recursive:!0,force:!0}),wU($))return;throw J}}function mU($,Z){let Q;try{Q=Date.now()-JS($).mtimeMs}catch(W){if(W.code==="ENOENT")return;throw W}if(Q<SX)return;Z.logger?.log(`[mcp-settings] Stale lock directory at ${$} (age ${Q}ms); reclaiming.`,{severity:"warn"});let J=`${$}.stale.${gU()}`;try{wX($,J)}catch(W){if(W.code==="ENOENT")return;throw W}EX(J,{recursive:!0,force:!0})}function TS($){try{SU($.ownerFile)}catch(Z){if(Z.code!=="ENOENT")throw Z}try{QS($.lockDir)}catch(Z){let Q=Z.code;if(Q!=="ENOENT"&&Q!=="ENOTEMPTY"&&Q!=="EEXIST")throw Z}}function cU($){let Z=zS($);if(T7.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:gU()}}function NS($,Z){let{lockDir:Q,token:J}=cU($),W=Z.timeoutMs??SX,X=Date.now();while(!0){let j=vU(Q,J);if(j)return T7.add(Q),j;if(Date.now()-X>W)throw new W2(`Timed out waiting for MCP settings lock at ${Q} after ${W}ms.`);mU(Q,Z),qS(xU)}}async function fS($,Z){let{lockDir:Q,token:J}=cU($),W=Z.timeoutMs??SX,X=Date.now();while(!0){let j=vU(Q,J);if(j)return T7.add(Q),j;if(Date.now()-X>W)throw new W2(`Timed out waiting for MCP settings lock at ${Q} after ${W}ms.`);mU(Q,Z),await WS(xU)}}function uU($,Z,Q){try{let J=RS(Z),W=MS(J,Q);return AS(Z,`${JSON.stringify(J,null,2)}
4
- `),W}finally{T7.delete($.lockDir),TS($)}}function A1($,Z,Q={}){let J=NS($,Q);return uU(J,$,Z)}async function y6($,Z,Q={}){let J=await fS($,Q);return uU(J,$,Z)}function RS($){let Z=CS($);if(!Z.mcpServers||typeof Z.mcpServers!=="object"||Array.isArray(Z.mcpServers))Z.mcpServers={};return Z}function MS($,Z){let Q=JSON.stringify($),J=JSON.parse(Q),W=Z(J),X=JSON.stringify(J),j=Z($);if(JSON.stringify($)!==X)throw new J2("MCP settings mutator must be deterministic and free of side effects; repeated calls produced different settings.");if(JSON.stringify(j)!==JSON.stringify(W))throw new J2("MCP settings mutator must be deterministic and free of side effects; repeated calls produced different return values.");return j}function ES($){let Z=PU($,"utf8"),Q;try{Q=JSON.parse(Z)}catch(J){let W=J instanceof Error?J.message:String(J);throw Error(`Failed to parse MCP settings JSON at "${$}": ${W}`)}if(!Q||typeof Q!=="object"||Array.isArray(Q))throw Error(`Invalid MCP settings at "${$}": expected object.`);return Q}function CS($){try{return ES($)}catch(Z){if(Z.code==="ENOENT")return{};throw Z}}function dU($,Z){if(!Object.hasOwn($,Z))return;let Q=$[Z];if(!Q||typeof Q!=="object"||Array.isArray(Q))return;return Q}function wS($,Z,Q){Object.defineProperty($,Z,{value:Q,enumerable:!0,configurable:!0,writable:!0})}function J8($={}){let Z=$.filePath??W0(),Q=PU(Z,"utf8"),J;try{J=JSON.parse(Q)}catch(X){let j=X instanceof Error?X.message:String(X);throw Error(`Failed to parse MCP settings JSON at "${Z}": ${j}`)}let W=LS.safeParse(J);if(!W.success){let X=W.error.issues.map((j)=>{let Y=j.path.join(".");return Y?`${Y}: ${j.message}`:j.message}).join("; ");throw Error(`Invalid MCP settings at "${Z}": ${X}`)}return W.data}function k6($){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 PS($){if($===void 0)return;let Z=PX.safeParse($);if(!Z.success)return;return k6(Z.data)}function U$($={}){let Z=$.filePath??W0();return wU(Z)}function W1($={}){let Z=J8($);return Object.entries(Z.mcpServers).map(([Q,J])=>({name:Q,transport:J.transport,disabled:J.disabled,timeoutSeconds:J.timeoutSeconds,metadata:J.metadata,oauth:J.oauth}))}function W8($){let Z=$.filePath??W0(),Q=$.name.trim();if(!Q)throw Error("MCP server settings toggle requires a server name.");A1(Z,(J)=>{let W=J.mcpServers;if(!W||typeof W!=="object"||Array.isArray(W))throw Error(`Invalid MCP settings at "${Z}": mcpServers must be an object.`);let X={...W},j=dU(X,Q);if(!j)throw Error(`Unknown MCP server: ${Q}`);let Y={...j};if($.disabled)Y.disabled=!0;else delete Y.disabled;wS(X,Q,Y),J.mcpServers=X})}function X8($,Z={}){let Q=J8(Z);if(!Object.hasOwn(Q.mcpServers,$))return;return k6(Q.mcpServers[$]?.oauth)}function pU($,Z){return(Q)=>{let J=Q.mcpServers,W=dU(J,$);if(!W)throw Error(`Unknown MCP server: ${$}`);let X=PS(W.oauth)??{},j=k6(Z(X));if(j)W.oauth=j;else delete W.oauth;return j??{}}}function j8($,Z,Q={}){let J=Q.filePath??W0();return A1(J,pU($,Z))}async function X9($,Z,Q={}){let J=Q.filePath??W0();return y6(J,pU($,Z))}function j9($={}){return W1($).map((Q)=>{let J=Q.transport.type!=="stdio",W=Q.oauth?.tokens?.access_token;return{serverName:Q.name,oauthSupported:J,oauthConfigured:J&&typeof W==="string"&&W.trim().length>0,lastError:Q.oauth?.lastError,lastAuthenticatedAt:Q.oauth?.lastAuthenticatedAt}}).sort((Q,J)=>Q.serverName.localeCompare(J.serverName))}async function Y8($,Z={}){let Q=W1(Z);for(let J of Q)await $.registerServer(J);return Q}var W9,kU,hU,PX,VS,BS,HS,KS,GS,FS,IU,US,DS,_S,LS,b6,W2,J2,SX=1e4,xU=25,OS,T7;var N7=D2(()=>{W9=k.record(k.string(),k.string()),kU=k.record(k.string(),k.unknown()),hU=k.preprocess(($)=>XS($)?jS($):void 0,k.number().optional()),PX=k.object({clientInformation:k.record(k.string(),k.unknown()).optional(),tokens:k.record(k.string(),k.unknown()).optional(),codeVerifier:k.string().optional(),discoveryState:k.record(k.string(),k.unknown()).optional(),redirectUrl:k.string().url().optional(),lastError:k.string().optional(),lastAuthenticatedAt:k.number().int().positive().optional()}).strip(),VS=k.object({type:k.literal("stdio"),command:k.string().min(1),args:k.array(k.string()).optional(),cwd:k.string().min(1).optional(),env:W9.optional()}),BS=k.object({type:k.literal("sse"),url:k.string().url(),headers:W9.optional()}),HS=k.object({type:k.literal("streamableHttp"),url:k.string().url(),headers:W9.optional()}),KS=k.discriminatedUnion("type",[VS,BS,HS]),GS=k.object({transport:KS,disabled:k.boolean().optional(),timeout:hU,metadata:kU.optional(),oauth:PX.optional()}).transform(($)=>({transport:$.transport,disabled:$.disabled,timeoutSeconds:$.timeout,metadata:$.metadata,oauth:$.oauth})),FS=k.enum(["stdio","sse","http","streamableHttp"]).optional(),IU=k.object({type:k.enum(["stdio","sse","streamableHttp"]).optional(),transportType:FS,disabled:k.boolean().optional(),timeout:hU,metadata:kU.optional(),oauth:PX.optional()});US=IU.extend({command:k.string().min(1),args:k.array(k.string()).optional(),cwd:k.string().min(1).optional(),env:W9.optional()}).superRefine(($,Z)=>{let Q=$.type??CX($.transportType);if(Q&&Q!=="stdio")Z.addIssue({code:k.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,timeoutSeconds:$.timeout,metadata:$.metadata,oauth:$.oauth})),DS=IU.extend({url:k.string().url(),headers:W9.optional()}).superRefine(($,Z)=>{let Q=$.type??CX($.transportType)??"sse";if(Q!=="sse"&&Q!=="streamableHttp")Z.addIssue({code:k.ZodIssueCode.custom,message:'Expected type "sse" or "streamableHttp" for URL-based MCP server',path:["type"]})}).transform(($)=>{if(($.type??CX($.transportType)??"sse")==="streamableHttp")return{transport:{type:"streamableHttp",url:$.url,headers:$.headers},disabled:$.disabled,timeoutSeconds:$.timeout,metadata:$.metadata,oauth:$.oauth};return{transport:{type:"sse",url:$.url,headers:$.headers},disabled:$.disabled,timeoutSeconds:$.timeout,metadata:$.metadata,oauth:$.oauth}}),_S=k.union([GS,US,DS]),LS=k.object({mcpServers:k.record(k.string(),_S)}).passthrough();b6=class b6 extends Error{constructor($){super($);this.name="McpSettingsUpdateSkippedError"}};W2=class W2 extends Error{constructor($){super($);this.name="McpSettingsLockTimeoutError"}};J2=class J2 extends Error{constructor($){super($);this.name="McpSettingsMutatorPurityError"}};OS=new Int32Array(new SharedArrayBuffer(4)),T7=new Set});var u_={};w(u_,{resolveCoreDistinctId:()=>l0,resolveCoreDeviceId:()=>k8,createOpenTelemetryTelemetryService:()=>C4,createConfiguredTelemetryService:()=>a1,createConfiguredTelemetryHandle:()=>x8,OpenTelemetryProvider:()=>I8,OpenTelemetryAdapter:()=>M4});var i7=D2(()=>{O2();IZ()});var LA={};w(LA,{writeHubDiscovery:()=>vZ,withHubStartupLock:()=>mZ,verifyHubConnection:()=>E1,truncateNotificationBody:()=>e9,toHubStatusUrl:()=>HJ,toHubHealthUrl:()=>cZ,stopLocalHubServerGracefully:()=>TJ,startHubWebSocketServer:()=>QZ,startHubServer:()=>DA,spawnDetachedHubServerWithRetry:()=>m8,spawnDetachedHubServer:()=>_J,sendHubCommand:()=>aB,restartLocalHubIfIdleAfterStartupTimeout:()=>iZ,resolveWorkspaceHubOwnerContext:()=>bB,resolveSharedHubOwnerContext:()=>G1,resolveProductionHubOwnerContext:()=>M1,resolveHubUrl:()=>NJ,resolveHubOwnerContext:()=>t1,resolveHubEndpointOptions:()=>R1,resolveHubBuildId:()=>gZ,resolveDefaultHubPort:()=>v8,resolveDefaultHubPathname:()=>DJ,resolveDefaultHubHost:()=>UJ,resolveCompatibleLocalHubUrl:()=>y4,resolveClineDir:()=>CB,resolveClineDataDir:()=>z2,requestHubShutdown:()=>b4,rememberRecoverableLocalHubUrl:()=>y$,readHubDiscovery:()=>z0,readBearerToken:()=>k3,probeHubServer:()=>e1,probeHubConnection:()=>nB,prewarmDetachedHubServer:()=>dZ,normalizeHubWebSocketUrl:()=>k$,isLocalHubOrigin:()=>gY,isLocalHubHostName:()=>h3,isHubReconnectableTransportError:()=>qJ,isHubCommandTimeoutError:()=>lZ,isDiscoveryFilePresent:()=>PB,ensureHubWebSocketServer:()=>I3,ensureHubServer:()=>_A,ensureDetachedHubServer:()=>gB,ensureCompatibleLocalHubUrl:()=>f2,createLocalHubScheduleRuntimeHandlers:()=>UA,createInMemoryHubOwnerContext:()=>wB,createHubServerUrl:()=>K1,createHubAuthToken:()=>xZ,createConfiguredTelemetryService:()=>a1,createConfiguredTelemetryHandle:()=>x8,connectToHub:()=>rZ,clearHubDiscovery:()=>i0,NodeHubClient:()=>F1,NativeHubTransportAdapter:()=>ZZ,HubUIClient:()=>MJ,HubTransportError:()=>v0,HubSessionClient:()=>RJ,HubServerTransport:()=>V4,HubScheduleService:()=>S8,HubScheduleCommandService:()=>M8,HubCommandError:()=>c8,DEFAULT_HUB_PORT:()=>GJ,DEFAULT_HUB_PATHNAME:()=>FJ,DEFAULT_HUB_HOST:()=>KJ,BrowserWebSocketHubAdapter:()=>$Z});import{createSessionId as bO,readHubScheduleMode as OV}from"@cline/shared";function t0($,Z){return{version:$.version,requestId:$.requestId,ok:!0,payload:Z}}function qV($,Z,Q){return{version:$.version,requestId:$.requestId??bO("hubreq_"),ok:!1,error:{code:Z,message:Q}}}class M8{schedules;constructor($){this.schedules=$}async handleCommand($){try{switch($.command){case"schedule.create":return t0($,{schedule:this.schedules.createSchedule(this.toCreateInput($.payload??{}))});case"schedule.list":return t0($,{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 t0($,{schedule:this.schedules.getSchedule(String($.payload?.scheduleId??""))});case"schedule.update":return t0($,{schedule:this.schedules.updateSchedule(String($.payload?.scheduleId??""),this.toUpdateInput($.payload??{}))});case"schedule.delete":return t0($,{deleted:this.schedules.deleteSchedule(String($.payload?.scheduleId??""))});case"schedule.enable":return t0($,{schedule:this.schedules.resumeSchedule(String($.payload?.scheduleId??""))});case"schedule.disable":return t0($,{schedule:this.schedules.pauseSchedule(String($.payload?.scheduleId??""))});case"schedule.trigger":return t0($,{execution:$.payload?.wait===!1?this.schedules.triggerScheduleNowDetached(String($.payload?.scheduleId??"")):await this.schedules.triggerScheduleNow(String($.payload?.scheduleId??""))});case"schedule.list_executions":return t0($,{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 t0($,{stats:this.schedules.getScheduleStats(String($.payload?.scheduleId??""))});case"schedule.active":return t0($,{executions:this.schedules.getActiveExecutions()});case"schedule.upcoming":return t0($,{runs:this.schedules.getUpcomingRuns(typeof $.payload?.limit==="number"?$.payload.limit:void 0)});default:return qV($,"unsupported_command",`Unsupported hub schedule command: ${$.command}`)}}catch(Z){return qV($,"schedule_command_failed",Z instanceof Error?Z.message:String(Z))}}toCreateInput($){let Z=OV($,"yolo"),Q=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider&&$.model?{providerId:String($.provider),modelId:String($.model)}:void 0;return{...$,modelSelection:Q,mode:Z}}toUpdateInput($){let Z=OV($),Q=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider||$.model?{providerId:typeof $.provider==="string"?$.provider:"",modelId:typeof $.model==="string"?$.model:""}:void 0;return{...$,modelSelection:Q,...Z===void 0?{}:{mode:Z}}}}import{ONE_TIME_SCHEDULE_CRON_PATTERN as uV,ONE_TIME_SCHEDULE_RUN_AT_METADATA_KEY as Kq}from"@cline/shared";class H4{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 J of Z)if(this.materializeOneOff(J))$.oneOffQueued+=1;let Q=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let J of Q)try{if(this.materializeSchedule(J))$.scheduleQueued+=1}catch{}return $}materializeOneOff($){if($.triggerKind!=="one_off")return!1;if(!$.enabled||$.removed)return!1;if(this.store.hasConsumedOneOffRevision($.specId,$.revision))return!1;return this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"one_off",scheduledFor:$.nextRunAt??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 cO}from"node:path";import{buildClineSystemPrompt as uO}from"@cline/shared";import{nowIso as PV}from"@cline/shared/db";var F0={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"},C$=[F0.READ_FILES,F0.SEARCH_CODEBASE,F0.RUN_COMMANDS,F0.FETCH_WEB_CONTENT,F0.APPLY_PATCH,F0.EDITOR,F0.SKILLS,F0.ASK,F0.SUBMIT_AND_EXIT];var TV={};w(TV,{mergeRulesForSystemPrompt:()=>C8,loadRulesForSystemPromptFromWatcher:()=>p3,listEnabledRulesFromWatcher:()=>zV,isRuleEnabled:()=>jZ,formatRulesForSystemPrompt:()=>E8});function jZ($){return $.disabled!==!0}function E8($){if($.length===0)return"";return`
1
+ import{createRequire as bO}from"node:module";var{defineProperty:d3,getOwnPropertyNames:wO}=Object;var LV=Object.prototype.hasOwnProperty;function AV($){return this[$]}var M=($,Z,Q)=>{var J=wO(Z);for(let W of J)if(!LV.call($,W)&&W!=="default")d3($,W,{get:AV.bind(Z,W),enumerable:!0});if(Q){for(let W of J)if(!LV.call(Q,W)&&W!=="default")d3(Q,W,{get:AV.bind(Z,W),enumerable:!0});return Q}};var PO=($)=>$;function SO($,Z){this[$]=PO.bind(null,Z)}var w=($,Z)=>{for(var Q in Z)d3($,Q,{get:Z[Q],enumerable:!0,configurable:!0,set:SO.bind(Z,Q)})};var _2=($,Z)=>()=>($&&(Z=$($=0)),Z);var OV=bO(import.meta.url);import{AGENT_UNEXPECTED_REASONING_TOKENS_EVENT as Dq,captureAgentUnexpectedReasoningTokens as lV,captureTaskLifecycleEvent as _d,SDK_ERROR_TELEMETRY_EVENT as _q,TASK_CANCELLED_EVENT as Lq,TASK_FIRST_CHUNK_RECEIVED_EVENT as Aq,TASK_PROVIDER_REQUEST_STARTED_EVENT as Oq,TASK_PROVIDER_STREAM_FAILED_EVENT as qq,TASK_PROVIDER_STREAM_STARTED_EVENT as zq}from"@cline/shared";function n($,Z,Q){$?.capture({event:Z,properties:Q})}function FZ($){if(!$)return;return $.substring(0,Tq)}function Nq($){if(typeof $==="string")return"Error";return $.name?.trim()||$.constructor?.name||"Error"}function fq($){return typeof $==="string"?$:$.message}function pV($,Z){return $.some((Q)=>Z.has(Q.trim().toLowerCase()))}function iV($){n($,m.CLIENT.EXTENSION_ACTIVATED)}function UZ($,Z){let Q=[...Z.vcs_types],J={root_count:Z.root_count,vcs_types:Q,is_multi_root:Z.root_count>1,has_git:pV(Q,new Set(["git"])),has_mercurial:pV(Q,new Set(["mercurial","hg"]))};if(Z.init_duration_ms!==void 0)J.init_duration_ms=Z.init_duration_ms;if(Z.feature_flag_enabled!==void 0)J.feature_flag_enabled=Z.feature_flag_enabled;if(Z.is_remote_workspace!==void 0)J.is_remote_workspace=Z.is_remote_workspace;n($,m.WORKSPACE.INITIALIZED,J)}function DZ($,Z,Q){n($,m.WORKSPACE.INIT_ERROR,{error_type:Nq(Z),error_message:FZ(fq(Z)),fallback_to_single_root:Q.fallback_to_single_root,workspace_count:Q.workspace_count??0})}function rV($,Z){n($,m.WORKSPACE.PATH_RESOLVED,{...Z})}function p1($,Z){n($,m.USER.AUTH_STARTED,{provider:Z})}function l1($,Z,Q){n($,m.USER.AUTH_SUCCEEDED,{provider:Z,...Q})}function i1($,Z,Q,J){n($,m.USER.AUTH_FAILED,{provider:Z,errorMessage:FZ(Q),...J?.requestId?{request_id:J.requestId}:{}})}function S$($,Z,Q,J){n($,m.USER.AUTH_LOGGED_OUT,{provider:Z,reason:Q,...J})}function QJ($,Z,Q){n($,m.USER.AUTH_REFRESH_SOFT_FAILURE,{provider:Z,...Q})}function nV($,Z,Q){n($,m.USER.AUTH_RUN_RETRY,{provider:Z,recovered:Q?.recovered})}function aV($,Z){n($,m.USER.PROVIDER_CONFIGURED,{provider:Z})}function oV($,Z){$?.captureRequired(m.USER.TELEMETRY_OPT_OUT,Z)}function r1($,Z){let Q=Z.id?.trim();if(Q)$?.setDistinctId(Q);$?.updateCommonProperties({user_id:Q||Z.id,account_id:Z.id,account_email:Z.email,provider:Z.provider,organization_id:Z.organizationId,organization_name:Z.organizationName,member_id:Z.memberId})}function _Z($,Z){n($,m.TASK.CREATED,Z)}function LZ($,Z){n($,m.TASK.RESTARTED,Z)}function q4($,Z){n($,m.TASK.COMPLETED,Z)}function y8($,Z){n($,m.TASK.CONVERSATION_TURN,{...Z,timestamp:new Date().toISOString()})}function AZ($,Z){n($,m.TASK.TOKEN_USAGE,Z)}function OZ($,Z,Q){n($,m.TASK.MODE_SWITCH,{ulid:Z,mode:Q})}function k8($,Z){n($,m.TASK.TOOL_USED,Z)}function qZ($,Z){n($,m.TASK.SKILL_USED,Z)}function zZ($,Z){n($,m.TASK.DIFF_EDIT_FAILED,Z)}function z4($,Z){n($,m.TASK.PROVIDER_API_ERROR,{...Z,errorMessage:FZ(Z.errorMessage)??"unknown",timestamp:new Date().toISOString()})}function TZ($,Z){n($,m.TASK.MISTAKE_LIMIT_REACHED,{...Z,timestamp:new Date().toISOString()})}function sV($,Z){n($,m.SDK.TOOL_TIMEOUT,Rq(Z))}function Rq($){let Z={};for(let[Q,J]of Object.entries($))if(J!==void 0)Z[Q]=J;return Z}function NZ($,Z,Q){n($,m.TASK.MENTION_USED,{mentionType:Z,contentLength:Q,timestamp:new Date().toISOString()})}function fZ($,Z,Q,J){n($,m.TASK.MENTION_FAILED,{mentionType:Z,errorType:Q,errorMessage:FZ(J),timestamp:new Date().toISOString()})}function RZ($,Z,Q,J,W){n($,m.TASK.MENTION_SEARCH_RESULTS,{queryLength:Z.length,resultCount:Q,searchType:J,isEmpty:W,timestamp:new Date().toISOString()})}function b$($,Z){n($,m.TASK.AGENT_CREATED,{...Z,timestamp:new Date().toISOString()})}function MZ($,Z){n($,m.TASK.AGENT_TEAM_CREATED,{...Z,timestamp:new Date().toISOString()})}function T4($,Z){n($,Z.event==="ended"?m.TASK.SUBAGENT_COMPLETED:m.TASK.SUBAGENT_STARTED,{...Z,timestamp:new Date().toISOString()})}function EZ($,Z,Q,J){n($,m.HOOKS.DISCOVERY_COMPLETED,{hookName:Z,globalCount:Q,workspaceCount:J,totalCount:Q+J,timestamp:new Date().toISOString()})}function CZ($,Z){n($,m.TASK.COMPACTION_EXECUTED,{...Z,timestamp:new Date().toISOString()})}function wZ($,Z){n($,m.TASK.COMPACTION_SKIPPED,{...Z,timestamp:new Date().toISOString()})}function tV($,Z){n($,m.TASK.COMPACTION_BUDGET_EMERGENCY,{...Z,timestamp:new Date().toISOString()})}var Tq=500,m;var C0=_2(()=>{m={CLIENT:{EXTENSION_ACTIVATED:"user.extension_activated"},SESSION:{STARTED:"session.started",ENDED:"session.ended"},AGENT:{UNEXPECTED_REASONING_TOKENS:Dq},USER:{AUTH_STARTED:"user.auth_started",AUTH_SUCCEEDED:"user.auth_succeeded",AUTH_FAILED:"user.auth_failed",AUTH_LOGGED_OUT:"user.auth_logged_out",AUTH_REFRESH_SOFT_FAILURE:"user.auth_refresh_soft_failure",AUTH_RUN_RETRY:"user.auth_run_retry",PROVIDER_CONFIGURED:"user.provider_configured",TELEMETRY_OPT_OUT:"user.opt_out"},TASK:{CREATED:"task.created",RESTARTED:"task.restarted",COMPLETED:"task.completed",CONVERSATION_TURN:"task.conversation_turn",TOKEN_USAGE:"task.tokens",MODE_SWITCH:"task.mode",TOOL_USED:"task.tool_used",SKILL_USED:"task.skill_used",DIFF_EDIT_FAILED:"task.diff_edit_failed",PROVIDER_API_ERROR:"task.provider_api_error",MISTAKE_LIMIT_REACHED:"task.mistake_limit_reached",PROVIDER_REQUEST_STARTED:Oq,PROVIDER_STREAM_STARTED:zq,FIRST_CHUNK_RECEIVED:Aq,PROVIDER_STREAM_FAILED:qq,CANCELLED:Lq,MENTION_USED:"task.mention_used",MENTION_FAILED:"task.mention_failed",MENTION_SEARCH_RESULTS:"task.mention_search_results",AGENT_CREATED:"task.agent_created",AGENT_TEAM_CREATED:"task.agent_team_created",SUBAGENT_STARTED:"task.subagent_started",SUBAGENT_COMPLETED:"task.subagent_completed",COMPACTION_EXECUTED:"task.compaction_executed",COMPACTION_SKIPPED:"task.compaction_skipped",COMPACTION_BUDGET_EMERGENCY:"task.compaction_budget_emergency"},HOOKS:{DISCOVERY_COMPLETED:"hooks.discovery_completed"},WORKSPACE:{INITIALIZED:"workspace.initialized",INIT_ERROR:"workspace.init_error",PATH_RESOLVED:"workspace.path_resolved"},SDK:{ERROR:_q,TOOL_TIMEOUT:"sdk.tool_timeout"},FEATURE_FLAGS:{FLAG_CALLED:"$feature_flag_called"}}});import{mkdirSync as Mq,readFileSync as Eq,statSync as Cq,writeFileSync as wq}from"node:fs";import{dirname as Pq}from"node:path";import{resolveGlobalSettingsPath as $B}from"@cline/shared/storage";import{z as N1}from"zod";function PZ(){return N4.parse({})}function yq(){SZ=void 0}function kq($){if($.disabledTools)Object.freeze($.disabledTools);if($.disabledPlugins)Object.freeze($.disabledPlugins);return Object.freeze($)}function hq($){let Z;try{Z=Eq($,"utf8")}catch{return PZ()}try{let Q=N4.safeParse(JSON.parse(Z));return Q.success?Q.data:PZ()}catch{return PZ()}}function Iq(){let $=$B(),Z=Cq($,{throwIfNoEntry:!1}),Q=Z?.mtimeMs??0,J=Z?.size??0,W=SZ;if(W&&W.path===$&&W.mtimeMs===Q&&W.size===J)return W;let X=kq(Z?hq($):PZ());return SZ={path:$,mtimeMs:Q,size:J,value:X},SZ}function j0(){return Iq().value}function g0($,Z={}){let Q=$B(),J=j0();Mq(Pq(Q),{recursive:!0});let W=N4.parse($);if(!J.telemetryOptOut&&W.telemetryOptOut)oV(Z.telemetry);wq(Q,`${JSON.stringify(W,null,2)}
2
+ `,"utf8"),yq()}function bZ(){return j0().telemetryOptOut}function ZB($,Z={}){g0({...j0(),telemetryOptOut:$},Z)}function QB(){return j0().autoUpdateEnabled}function JB($,Z={}){g0({...j0(),autoUpdateEnabled:$},Z)}function WB(){return j0().compactionStrategy??"agentic"}function XB($){g0({...j0(),compactionStrategy:$})}function jB(){let $=j0();if($.compactionEnabled===!1)return"off";return $.compactionStrategy}function YB($){let Z=j0();if($==="off"){g0({...Z,compactionEnabled:!1});return}g0({...Z,compactionEnabled:!0,compactionStrategy:$})}function VB(){return j0().planActMode}function BB($){g0({...j0(),planActMode:$})}function HB(){return j0().toolAutoApprove}function KB($){g0({...j0(),toolAutoApprove:$})}function f1($){return new Set($??j0().disabledTools??[])}function f4($){return new Set($??j0().disabledPlugins??[])}function GB($){return f1().has($)}function yZ($){let Z=j0(),Q=new Set(Z.disabledTools??[]),J=Q.has($);if(J)Q.delete($);else Q.add($);return g0({...Z,disabledTools:[...Q]}),!J}function JJ($,Z){let Q=[...new Set($.map((X)=>X.trim()).filter(Boolean))];if(Q.length===0)return;let J=j0(),W=f1(J.disabledTools);for(let X of Q)if(Z)W.add(X);else W.delete(X);g0({...J,disabledTools:[...W]})}function FB($,Z){return JJ([$],Z),Z}function UB($){return f4().has($)}function DB($,Z){let Q=$.trim();if(!Q)return;let J=j0(),W=f4(J.disabledPlugins);if(Z)W.add(Q);else W.delete(Q);g0({...J,disabledPlugins:[...W]})}function kZ($,Z){let Q=f4(Z);if(Q.size===0)return[...$];return $.filter((J)=>!Q.has(J))}function n1($,Z){let Q=f1(Z);if(Q.size===0)return[...$];return $.filter((J)=>!Q.has(J.name))}function hZ($,Z){if(!$||$.length===0)return $;let Q=f1(Z);if(Q.size===0)return $;return $.map((J)=>{if(!J.setup)return J;return{...J,setup:(W,X)=>J.setup?.({...W,registerTool:(j)=>{if(!Q.has(j.name))W.registerTool(j)}},X)}})}var eV,Sq,bq,N4,SZ;var H1=_2(()=>{C0();eV=N1.preprocess(($)=>Array.isArray($)?$.filter((Z)=>typeof Z==="string").map((Z)=>Z.trim()).filter(Boolean):void 0,N1.array(N1.string()).optional()).transform(($)=>{if(!$)return;let Z=[...new Set($)].sort((Q,J)=>Q.localeCompare(J));return Z.length>0?Z:void 0}),Sq=N1.enum(["basic","agentic"]).catch("agentic"),bq=N1.enum(["plan","act"]),N4=N1.object({telemetryOptOut:N1.boolean().default(!1).catch(!1),autoUpdateEnabled:N1.boolean().default(!0).catch(!0),compactionStrategy:Sq.optional(),compactionEnabled:N1.boolean().optional().catch(void 0),planActMode:bq.optional().catch(void 0),toolAutoApprove:N1.boolean().optional().catch(void 0),disabledTools:eV.optional(),disabledPlugins:eV.optional()}).strip().transform(($)=>{let Z={autoUpdateEnabled:$.autoUpdateEnabled,telemetryOptOut:$.telemetryOptOut};if($.compactionStrategy)Z.compactionStrategy=$.compactionStrategy;if($.compactionEnabled!==void 0)Z.compactionEnabled=$.compactionEnabled;if($.planActMode)Z.planActMode=$.planActMode;if($.toolAutoApprove!==void 0)Z.toolAutoApprove=$.toolAutoApprove;if($.disabledTools?.length)Z.disabledTools=$.disabledTools;if($.disabledPlugins?.length)Z.disabledPlugins=$.disabledPlugins;return Z})});import{existsSync as xq,mkdirSync as gq,readFileSync as vq,writeFileSync as mq}from"node:fs";import{resolve as cq}from"node:path";import{resolveSessionDataDir as uq}from"@cline/shared/storage";import{nanoid as dq}from"nanoid";import*as pq from"node-machine-id";function h8(){if(!LB)_B=AB(),LB=!0;return _B??OB()}function l0($){let Z=$?.trim();if(Z)return Z;let Q=AB();if(Q)return Q;return OB()}function iq(){let $=pq;return $.machineIdSync??$.default?.machineIdSync}function AB(){try{let $=iq();if(!$)return;return $().trim()||void 0}catch{return}}function OB(){let $=uq(),Z=cq($,lq);try{if(xq(Z)){let J=vq(Z,"utf8").trim();if(J.length>0)return J}}catch{}let Q=`cl-${dq()}`;try{gq($,{recursive:!0}),mq(Z,Q,"utf8")}catch{}return Q}var lq="machine-id",_B,LB=!1;var q2=()=>{};class M4{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,J,W=!1){if(!this.meter||!W&&!this.isEnabled())return;let X=this.counters.get($);if(!X)X=this.meter.createCounter($,J?{description:J}:void 0),this.counters.set($,X);X.add(Z,this.flattenProperties(this.buildAttributes(Q)))}recordHistogram($,Z,Q,J,W=!1){if(!this.meter||!W&&!this.isEnabled())return;let X=this.histograms.get($);if(!X)X=this.meter.createHistogram($,J?{description:J}:void 0),this.histograms.set($,X);X.record(Z,this.flattenProperties(this.buildAttributes(Q)))}recordGauge($,Z,Q,J,W=!1){if(!this.meter||!W&&!this.isEnabled())return;let X=this.buildAttributes(Q),j=JSON.stringify(X),Y=this.gaugeValues.get($);if(Z===null){if(Y){if(Y.delete(j),Y.size===0)this.gaugeValues.delete($),this.gauges.delete($)}return}let V=Y;if(!V)V=new Map,this.gaugeValues.set($,V);if(!this.gauges.has($)){let B=this.meter.createObservableGauge($,J?{description:J}:void 0);B.addCallback((H)=>{for(let K of this.snapshotGaugeSeries($))H.observe(K.value,this.flattenProperties(K.attributes))}),this.gauges.set($,B)}V.set(j,{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 J=this.flattenProperties(this.buildAttributes(Z,Q));this.logger.emit({severityText:"INFO",body:$,attributes:J})}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,J=0){if(!$)return{};let W={},X=100,j=10;for(let[Y,V]of Object.entries($)){if(Y==="__proto__"||Y==="constructor"||Y==="prototype")continue;let B=Z?`${Z}.${Y}`:Y;if(V===null||V===void 0){W[B]=String(V);continue}if(Array.isArray(V)){let H=V.length>X?V.slice(0,X):V;try{W[B]=JSON.stringify(H)}catch{W[B]="[UnserializableArray]"}if(V.length>X)W[`${B}_truncated`]=!0,W[`${B}_original_length`]=V.length;continue}if(typeof V==="object"){if(V instanceof Date){W[B]=V.toISOString();continue}if(V instanceof Error){W[B]=V.message;continue}if(Q.has(V)){W[B]="[Circular]";continue}if(J>=j){W[B]="[MaxDepthExceeded]";continue}Q.add(V),Object.assign(W,this.flattenProperties(V,B,Q,J+1));continue}if(rq(V)){W[B]=V;continue}try{W[B]=JSON.stringify(V)}catch{W[B]=String(V)}}return W}}function rq($){return typeof $==="string"||typeof $==="number"||typeof $==="boolean"}class E4{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,J,W){if(!W&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"counter",name:$,value:Z,attributes:Q,description:J,required:W===!0})}recordHistogram($,Z,Q,J,W){if(!W&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"histogram",name:$,value:Z,attributes:Q,description:J,required:W===!0})}recordGauge($,Z,Q,J,W){if(!W&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"gauge",name:$,value:Z,attributes:Q,description:J,required:W===!0})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}async flush(){}async dispose(){}}class I8{adapters;metadata;distinctId;deviceId;commonProperties;constructor($={}){if(this.adapters=[...$.adapters??[]],$.logger)this.adapters.push(new E4({logger:$.logger}));this.metadata={...$.metadata??{}},this.distinctId=$.distinctId,this.deviceId=$.deviceId??h8(),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 J of this.adapters)J.emitRequired($,Q)}recordCounter($,Z,Q,J,W=!1){let X=this.buildAttributes(Q);for(let j of this.adapters)j.recordCounter($,Z,X,J,W)}recordHistogram($,Z,Q,J,W=!1){let X=this.buildAttributes(Q);for(let j of this.adapters)j.recordHistogram($,Z,X,J,W)}recordGauge($,Z,Q,J,W=!1){let X=this.buildAttributes(Q);for(let j of this.adapters)j.recordGauge($,Z,X,J,W)}async flush(){await Promise.all(this.adapters.map(($)=>$.flush()))}async dispose(){await Promise.all(this.adapters.map(($)=>$.dispose()))}buildAttributes($){return{...this.commonProperties,...$,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{},device_id:this.deviceId}}}var WJ=_2(()=>{q2()});import{metrics as nq,trace as aq}from"@opentelemetry/api";import{logs as oq}from"@opentelemetry/api-logs";import{OTLPLogExporter as sq}from"@opentelemetry/exporter-logs-otlp-http";import{OTLPMetricExporter as tq}from"@opentelemetry/exporter-metrics-otlp-http";import{OTLPTraceExporter as eq}from"@opentelemetry/exporter-trace-otlp-http";import{resourceFromAttributes as $z}from"@opentelemetry/resources";import{BatchLogRecordProcessor as Zz,ConsoleLogRecordExporter as Qz,LoggerProvider as Jz}from"@opentelemetry/sdk-logs";import{ConsoleMetricExporter as Wz,MeterProvider as Xz,PeriodicExportingMetricReader as qB}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as jz,ConsoleSpanExporter as Yz,SimpleSpanProcessor as Vz}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as Bz}from"@opentelemetry/sdk-trace-node";import{ATTR_SERVICE_NAME as Hz,ATTR_SERVICE_VERSION as Kz}from"@opentelemetry/semantic-conventions";class zB{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 x8{meterProvider;loggerProvider;tracerProvider;options;constructor($={}){this.options=$;let Z=$z({[Hz]:$.serviceName??"cline",...$.serviceVersion?{[Kz]:$.serviceVersion}:{}});if(this.meterProvider=this.createMeterProvider(Z),this.loggerProvider=this.createLoggerProvider(Z),this.tracerProvider=this.createTracerProvider(Z),this.meterProvider)nq.setGlobalMeterProvider(this.meterProvider);if(this.loggerProvider)oq.setGlobalLoggerProvider(this.loggerProvider);if(this.tracerProvider)this.tracerProvider.register()}getTracer($="cline",Z){return aq.getTracer($,Z??this.options.serviceVersion)}createAdapter($){return new M4({...$,meterProvider:this.meterProvider,loggerProvider:this.loggerProvider})}createTelemetryService($){let Z=this.createAdapter({name:$.name,enabled:this.options.enabled,metadata:$.metadata});return new I8({...$,adapters:[Z],distinctId:l0($.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=XJ(this.options.metricsExporter);if(Z.length===0)return null;let Q=Math.max(1000,this.options.metricExportIntervalMs??this.options.metricExportInterval??60000),J=Math.min(30000,Math.floor(Q*0.8)),W=Z.map((X)=>Uz(X,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json",interval:Q,timeout:J})).filter((X)=>X!==null);if(W.length===0)return null;return new Xz({resource:$,readers:W})}createTracerProvider($){let Z=XJ(this.options.tracesExporter);if(Z.length===0)return null;let Q=this.options.otlpTracesEndpoint??this.options.otlpEndpoint,J=this.options.otlpTracesHeaders??this.options.otlpHeaders,W=[];for(let X of Z){let j=Fz(X,{endpoint:Q,headers:J,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(j)W.push(j)}if(W.length===0)return null;return new Bz({resource:$,spanProcessors:W})}createLoggerProvider($){let Z=XJ(this.options.logsExporter);if(Z.length===0)return null;let Q=Z.map((J)=>{let W=Gz(J,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(!W)return null;return new Zz(W,{maxQueueSize:this.options.logMaxQueueSize??2048,maxExportBatchSize:this.options.logBatchSize??512,scheduledDelayMillis:this.options.logBatchTimeoutMs??this.options.logBatchTimeout??5000})}).filter((J)=>J!==null);if(Q.length===0)return null;return new Jz({resource:$,processors:Q})}}function C4($){let Z=new x8($),Q=Z.createTelemetryService($),J=()=>{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})};if(!$.deferProviderCreatedEvent)J();return{provider:Z,telemetry:Q,emitProviderCreated:J}}function a1($){if(bZ())return{telemetry:new zB($)};if($.enabled!==!0)return{telemetry:new I8({...$,distinctId:l0($.distinctId)})};return C4($)}function g8($){let{telemetry:Z,provider:Q,emitProviderCreated:J}=a1($);return{telemetry:Z,provider:Q,flush:async()=>{let j=Q;if(j&&typeof j.forceFlush==="function")try{await j.forceFlush()}catch{}},dispose:async()=>{await Promise.allSettled([Z.dispose(),Q?.dispose()])},...$.deferProviderCreatedEvent&&J?{emitProviderCreated:J}:{}}}function XJ($){if(!$)return[];return(Array.isArray($)?$:$.split(",")).map((Q)=>Q.trim()).filter((Q)=>Q==="console"||Q==="otlp")}function Gz($,Z){if($==="console")return new Qz;if(!Z.endpoint)return null;let Q=jJ(Z.endpoint,"/v1/logs");return new sq({url:Q,headers:Z.headers})}function Fz($,Z){if($==="console")return new Vz(new Yz);if(!Z.endpoint)return null;let Q=jJ(Z.endpoint,"/v1/traces");return new jz(new eq({url:Q,headers:Z.headers}))}function Uz($,Z){if($==="console")return new qB({exporter:new Wz,exportIntervalMillis:Z.interval,exportTimeoutMillis:Z.timeout});if(!Z.endpoint)return null;let Q=jJ(Z.endpoint,"/v1/metrics");return new qB({exporter:new tq({url:Q,headers:Z.headers}),exportIntervalMillis:Z.interval,exportTimeoutMillis:Z.timeout})}function jJ($,Z){let Q=new URL($),J=Q.pathname.endsWith("/")?Q.pathname.slice(0,-1):Q.pathname;return Q.pathname=J.endsWith(Z)?J:`${J}${Z}`,Q.toString()}var IZ=_2(()=>{H1();q2();WJ()});var LG={};w(LG,{normalizeUserMessage:()=>aM,buildInitialUserContent:()=>nM});async function nM($,Z,Q,J){let W=oM(Z),X=await tM(Q,J);if(W.length===0&&!X)return $;let j=[{type:"text",text:$},...W];if(X)j.push(...X);return j}function aM($){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 J of Z)if(J&&typeof J==="object"&&J.type==="text"){let W=J.text;if(typeof W==="string")Q.push(W)}return Q.join(`
3
+ `)}function oM($){if(!$||$.length===0)return[];let Z=[];for(let Q of $){let J=sM(Q);if(J)Z.push(J)}return Z}function sM($){let Z=$.trim();if(!Z)return;let Q=Z.match(/^data:([^;,]+);base64,(.+)$/);if(Q){let J=Q[1],W=Q[2];if(!J||!W)return;return{type:"image",mediaType:J,data:W}}return{type:"image",mediaType:"image/png",data:Z}}async function tM($,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.")}),J=await Promise.all($.map(async(W)=>{let X=W.replace(/\\/g,"/");try{let j=await Q(W);return{type:"file",path:X,content:j}}catch(j){let Y=j instanceof Error?j.message:String(j);return{type:"file",path:X,content:`Error fetching content: ${Y}`}}}));if(J.length===0)return;return J}var iU={};w(iU,{updateMcpSettingsFileSync:()=>A1,updateMcpSettingsFile:()=>y6,updateMcpServerOAuthStateAsync:()=>X9,updateMcpServerOAuthState:()=>Y8,setMcpServerDisabled:()=>X8,resolveMcpServerRegistrations:()=>W1,resolveDefaultMcpSettingsPath:()=>W0,registerMcpServersFromSettingsFile:()=>V8,normalizeMcpServerOAuthState:()=>k6,loadMcpSettingsFile:()=>W8,listMcpServerOAuthStatuses:()=>j9,hasMcpSettingsFile:()=>U$,getMcpServerOAuthState:()=>j8,McpSettingsUpdateSkippedError:()=>b6,McpSettingsMutatorPurityError:()=>W2,McpSettingsLockTimeoutError:()=>X2});import{randomUUID as QS}from"node:crypto";import{existsSync as PU,mkdirSync as MX,readFileSync as SU,renameSync as wX,rmdirSync as JS,rmSync as EX,statSync as WS,unlinkSync as bU,writeFileSync as yU}from"node:fs";import{dirname as kU,join as wU}from"node:path";import{setTimeout as XS}from"node:timers/promises";import{isMcpTimeoutConfigured as jS,resolveMcpTimeoutSeconds as YS}from"@cline/shared";import{resolveMcpSettingsPath as VS}from"@cline/shared/storage";import{z as k}from"zod";function CX($){if(!$)return;if($==="http")return"streamableHttp";return $}function W0(){return VS()}function OS($,Z){MX(kU($),{recursive:!0});let Q=`${$}.tmp.${process.pid}.${Date.now()}.${Math.random().toString(36).slice(2)}`;try{yU(Q,Z,{encoding:"utf8",flag:"wx"}),wX(Q,$)}catch(J){try{bU(Q)}catch{}throw J}}function zS($){Atomics.wait(qS,0,0,$)}function TS($){return`${$}.lock`}function vU(){return`${process.pid}.${Date.now()}.${QS()}`}function mU($,Z){MX(kU($),{recursive:!0});let Q=`${$}.tmp.${Z}`;EX(Q,{recursive:!0,force:!0}),MX(Q,{recursive:!0}),yU(wU(Q,`owner.${Z}`),Z,{encoding:"utf8",flag:"wx"});try{return wX(Q,$),{lockDir:$,ownerFile:wU($,`owner.${Z}`)}}catch(J){if(EX(Q,{recursive:!0,force:!0}),PU($))return;throw J}}function cU($,Z){let Q;try{Q=Date.now()-WS($).mtimeMs}catch(W){if(W.code==="ENOENT")return;throw W}if(Q<SX)return;Z.logger?.log(`[mcp-settings] Stale lock directory at ${$} (age ${Q}ms); reclaiming.`,{severity:"warn"});let J=`${$}.stale.${vU()}`;try{wX($,J)}catch(W){if(W.code==="ENOENT")return;throw W}EX(J,{recursive:!0,force:!0})}function NS($){try{bU($.ownerFile)}catch(Z){if(Z.code!=="ENOENT")throw Z}try{JS($.lockDir)}catch(Z){let Q=Z.code;if(Q!=="ENOENT"&&Q!=="ENOTEMPTY"&&Q!=="EEXIST")throw Z}}function uU($){let Z=TS($);if(T7.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:vU()}}function fS($,Z){let{lockDir:Q,token:J}=uU($),W=Z.timeoutMs??SX,X=Date.now();while(!0){let j=mU(Q,J);if(j)return T7.add(Q),j;if(Date.now()-X>W)throw new X2(`Timed out waiting for MCP settings lock at ${Q} after ${W}ms.`);cU(Q,Z),zS(gU)}}async function RS($,Z){let{lockDir:Q,token:J}=uU($),W=Z.timeoutMs??SX,X=Date.now();while(!0){let j=mU(Q,J);if(j)return T7.add(Q),j;if(Date.now()-X>W)throw new X2(`Timed out waiting for MCP settings lock at ${Q} after ${W}ms.`);cU(Q,Z),await XS(gU)}}function dU($,Z,Q){try{let J=MS(Z),W=ES(J,Q);return OS(Z,`${JSON.stringify(J,null,2)}
4
+ `),W}finally{T7.delete($.lockDir),NS($)}}function A1($,Z,Q={}){let J=fS($,Q);return dU(J,$,Z)}async function y6($,Z,Q={}){let J=await RS($,Q);return dU(J,$,Z)}function MS($){let Z=wS($);if(!Z.mcpServers||typeof Z.mcpServers!=="object"||Array.isArray(Z.mcpServers))Z.mcpServers={};return Z}function ES($,Z){let Q=JSON.stringify($),J=JSON.parse(Q),W=Z(J),X=JSON.stringify(J),j=Z($);if(JSON.stringify($)!==X)throw new W2("MCP settings mutator must be deterministic and free of side effects; repeated calls produced different settings.");if(JSON.stringify(j)!==JSON.stringify(W))throw new W2("MCP settings mutator must be deterministic and free of side effects; repeated calls produced different return values.");return j}function CS($){let Z=SU($,"utf8"),Q;try{Q=JSON.parse(Z)}catch(J){let W=J instanceof Error?J.message:String(J);throw Error(`Failed to parse MCP settings JSON at "${$}": ${W}`)}if(!Q||typeof Q!=="object"||Array.isArray(Q))throw Error(`Invalid MCP settings at "${$}": expected object.`);return Q}function wS($){try{return CS($)}catch(Z){if(Z.code==="ENOENT")return{};throw Z}}function pU($,Z){if(!Object.hasOwn($,Z))return;let Q=$[Z];if(!Q||typeof Q!=="object"||Array.isArray(Q))return;return Q}function PS($,Z,Q){Object.defineProperty($,Z,{value:Q,enumerable:!0,configurable:!0,writable:!0})}function W8($={}){let Z=$.filePath??W0(),Q=SU(Z,"utf8"),J;try{J=JSON.parse(Q)}catch(X){let j=X instanceof Error?X.message:String(X);throw Error(`Failed to parse MCP settings JSON at "${Z}": ${j}`)}let W=AS.safeParse(J);if(!W.success){let X=W.error.issues.map((j)=>{let Y=j.path.join(".");return Y?`${Y}: ${j.message}`:j.message}).join("; ");throw Error(`Invalid MCP settings at "${Z}": ${X}`)}return W.data}function k6($){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 SS($){if($===void 0)return;let Z=PX.safeParse($);if(!Z.success)return;return k6(Z.data)}function U$($={}){let Z=$.filePath??W0();return PU(Z)}function W1($={}){let Z=W8($);return Object.entries(Z.mcpServers).map(([Q,J])=>({name:Q,transport:J.transport,disabled:J.disabled,timeoutSeconds:J.timeoutSeconds,metadata:J.metadata,oauth:J.oauth}))}function X8($){let Z=$.filePath??W0(),Q=$.name.trim();if(!Q)throw Error("MCP server settings toggle requires a server name.");A1(Z,(J)=>{let W=J.mcpServers;if(!W||typeof W!=="object"||Array.isArray(W))throw Error(`Invalid MCP settings at "${Z}": mcpServers must be an object.`);let X={...W},j=pU(X,Q);if(!j)throw Error(`Unknown MCP server: ${Q}`);let Y={...j};if($.disabled)Y.disabled=!0;else delete Y.disabled;PS(X,Q,Y),J.mcpServers=X})}function j8($,Z={}){let Q=W8(Z);if(!Object.hasOwn(Q.mcpServers,$))return;return k6(Q.mcpServers[$]?.oauth)}function lU($,Z){return(Q)=>{let J=Q.mcpServers,W=pU(J,$);if(!W)throw Error(`Unknown MCP server: ${$}`);let X=SS(W.oauth)??{},j=k6(Z(X));if(j)W.oauth=j;else delete W.oauth;return j??{}}}function Y8($,Z,Q={}){let J=Q.filePath??W0();return A1(J,lU($,Z))}async function X9($,Z,Q={}){let J=Q.filePath??W0();return y6(J,lU($,Z))}function j9($={}){return W1($).map((Q)=>{let J=Q.transport.type!=="stdio",W=Q.oauth?.tokens?.access_token;return{serverName:Q.name,oauthSupported:J,oauthConfigured:J&&typeof W==="string"&&W.trim().length>0,lastError:Q.oauth?.lastError,lastAuthenticatedAt:Q.oauth?.lastAuthenticatedAt}}).sort((Q,J)=>Q.serverName.localeCompare(J.serverName))}async function V8($,Z={}){let Q=W1(Z);for(let J of Q)await $.registerServer(J);return Q}var W9,hU,IU,PX,BS,HS,KS,GS,FS,US,xU,DS,_S,LS,AS,b6,X2,W2,SX=1e4,gU=25,qS,T7;var N7=_2(()=>{W9=k.record(k.string(),k.string()),hU=k.record(k.string(),k.unknown()),IU=k.preprocess(($)=>jS($)?YS($):void 0,k.number().optional()),PX=k.object({clientInformation:k.record(k.string(),k.unknown()).optional(),tokens:k.record(k.string(),k.unknown()).optional(),codeVerifier:k.string().optional(),discoveryState:k.record(k.string(),k.unknown()).optional(),redirectUrl:k.string().url().optional(),lastError:k.string().optional(),lastAuthenticatedAt:k.number().int().positive().optional()}).strip(),BS=k.object({type:k.literal("stdio"),command:k.string().min(1),args:k.array(k.string()).optional(),cwd:k.string().min(1).optional(),env:W9.optional()}),HS=k.object({type:k.literal("sse"),url:k.string().url(),headers:W9.optional()}),KS=k.object({type:k.literal("streamableHttp"),url:k.string().url(),headers:W9.optional()}),GS=k.discriminatedUnion("type",[BS,HS,KS]),FS=k.object({transport:GS,disabled:k.boolean().optional(),timeout:IU,metadata:hU.optional(),oauth:PX.optional()}).transform(($)=>({transport:$.transport,disabled:$.disabled,timeoutSeconds:$.timeout,metadata:$.metadata,oauth:$.oauth})),US=k.enum(["stdio","sse","http","streamableHttp"]).optional(),xU=k.object({type:k.enum(["stdio","sse","streamableHttp"]).optional(),transportType:US,disabled:k.boolean().optional(),timeout:IU,metadata:hU.optional(),oauth:PX.optional()});DS=xU.extend({command:k.string().min(1),args:k.array(k.string()).optional(),cwd:k.string().min(1).optional(),env:W9.optional()}).superRefine(($,Z)=>{let Q=$.type??CX($.transportType);if(Q&&Q!=="stdio")Z.addIssue({code:k.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,timeoutSeconds:$.timeout,metadata:$.metadata,oauth:$.oauth})),_S=xU.extend({url:k.string().url(),headers:W9.optional()}).superRefine(($,Z)=>{let Q=$.type??CX($.transportType)??"sse";if(Q!=="sse"&&Q!=="streamableHttp")Z.addIssue({code:k.ZodIssueCode.custom,message:'Expected type "sse" or "streamableHttp" for URL-based MCP server',path:["type"]})}).transform(($)=>{if(($.type??CX($.transportType)??"sse")==="streamableHttp")return{transport:{type:"streamableHttp",url:$.url,headers:$.headers},disabled:$.disabled,timeoutSeconds:$.timeout,metadata:$.metadata,oauth:$.oauth};return{transport:{type:"sse",url:$.url,headers:$.headers},disabled:$.disabled,timeoutSeconds:$.timeout,metadata:$.metadata,oauth:$.oauth}}),LS=k.union([FS,DS,_S]),AS=k.object({mcpServers:k.record(k.string(),LS)}).passthrough();b6=class b6 extends Error{constructor($){super($);this.name="McpSettingsUpdateSkippedError"}};X2=class X2 extends Error{constructor($){super($);this.name="McpSettingsLockTimeoutError"}};W2=class W2 extends Error{constructor($){super($);this.name="McpSettingsMutatorPurityError"}};qS=new Int32Array(new SharedArrayBuffer(4)),T7=new Set});var d_={};w(d_,{resolveCoreDistinctId:()=>l0,resolveCoreDeviceId:()=>h8,createOpenTelemetryTelemetryService:()=>C4,createConfiguredTelemetryService:()=>a1,createConfiguredTelemetryHandle:()=>g8,OpenTelemetryProvider:()=>x8,OpenTelemetryAdapter:()=>M4});var i7=_2(()=>{q2();IZ()});var AA={};w(AA,{writeHubDiscovery:()=>vZ,withHubStartupLock:()=>mZ,verifyHubConnection:()=>E1,truncateNotificationBody:()=>e9,toHubStatusUrl:()=>HJ,toHubHealthUrl:()=>cZ,stopLocalHubServerGracefully:()=>TJ,startHubWebSocketServer:()=>QZ,startHubServer:()=>_A,spawnDetachedHubServerWithRetry:()=>c8,spawnDetachedHubServer:()=>_J,sendHubCommand:()=>oB,restartLocalHubIfIdleAfterStartupTimeout:()=>iZ,resolveWorkspaceHubOwnerContext:()=>yB,resolveSharedHubOwnerContext:()=>G1,resolveProductionHubOwnerContext:()=>M1,resolveHubUrl:()=>NJ,resolveHubOwnerContext:()=>t1,resolveHubEndpointOptions:()=>R1,resolveHubBuildId:()=>gZ,resolveDefaultHubPort:()=>m8,resolveDefaultHubPathname:()=>DJ,resolveDefaultHubHost:()=>UJ,resolveCompatibleLocalHubUrl:()=>y4,resolveClineDir:()=>wB,resolveClineDataDir:()=>T2,requestHubShutdown:()=>b4,rememberRecoverableLocalHubUrl:()=>y$,readHubDiscovery:()=>z0,readBearerToken:()=>k3,probeHubServer:()=>e1,probeHubConnection:()=>aB,prewarmDetachedHubServer:()=>dZ,normalizeHubWebSocketUrl:()=>k$,isLocalHubOrigin:()=>vY,isLocalHubHostName:()=>h3,isHubReconnectableTransportError:()=>qJ,isHubCommandTimeoutError:()=>lZ,isDiscoveryFilePresent:()=>SB,ensureHubWebSocketServer:()=>I3,ensureHubServer:()=>LA,ensureDetachedHubServer:()=>vB,ensureCompatibleLocalHubUrl:()=>R2,createLocalHubScheduleRuntimeHandlers:()=>DA,createInMemoryHubOwnerContext:()=>PB,createHubServerUrl:()=>K1,createHubAuthToken:()=>xZ,createConfiguredTelemetryService:()=>a1,createConfiguredTelemetryHandle:()=>g8,connectToHub:()=>rZ,clearHubDiscovery:()=>i0,NodeHubClient:()=>F1,NativeHubTransportAdapter:()=>ZZ,HubUIClient:()=>MJ,HubTransportError:()=>v0,HubSessionClient:()=>RJ,HubServerTransport:()=>V4,HubScheduleService:()=>b8,HubScheduleCommandService:()=>E8,HubCommandError:()=>u8,DEFAULT_HUB_PORT:()=>GJ,DEFAULT_HUB_PATHNAME:()=>FJ,DEFAULT_HUB_HOST:()=>KJ,BrowserWebSocketHubAdapter:()=>$Z});import{createSessionId as yO,readHubScheduleMode as qV}from"@cline/shared";function t0($,Z){return{version:$.version,requestId:$.requestId,ok:!0,payload:Z}}function zV($,Z,Q){return{version:$.version,requestId:$.requestId??yO("hubreq_"),ok:!1,error:{code:Z,message:Q}}}class E8{schedules;constructor($){this.schedules=$}async handleCommand($){try{switch($.command){case"schedule.create":return t0($,{schedule:this.schedules.createSchedule(this.toCreateInput($.payload??{}))});case"schedule.list":return t0($,{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 t0($,{schedule:this.schedules.getSchedule(String($.payload?.scheduleId??""))});case"schedule.update":return t0($,{schedule:this.schedules.updateSchedule(String($.payload?.scheduleId??""),this.toUpdateInput($.payload??{}))});case"schedule.delete":return t0($,{deleted:this.schedules.deleteSchedule(String($.payload?.scheduleId??""))});case"schedule.enable":return t0($,{schedule:this.schedules.resumeSchedule(String($.payload?.scheduleId??""))});case"schedule.disable":return t0($,{schedule:this.schedules.pauseSchedule(String($.payload?.scheduleId??""))});case"schedule.trigger":return t0($,{execution:$.payload?.wait===!1?this.schedules.triggerScheduleNowDetached(String($.payload?.scheduleId??"")):await this.schedules.triggerScheduleNow(String($.payload?.scheduleId??""))});case"schedule.list_executions":return t0($,{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 t0($,{stats:this.schedules.getScheduleStats(String($.payload?.scheduleId??""))});case"schedule.active":return t0($,{executions:this.schedules.getActiveExecutions()});case"schedule.upcoming":return t0($,{runs:this.schedules.getUpcomingRuns(typeof $.payload?.limit==="number"?$.payload.limit:void 0)});default:return zV($,"unsupported_command",`Unsupported hub schedule command: ${$.command}`)}}catch(Z){return zV($,"schedule_command_failed",Z instanceof Error?Z.message:String(Z))}}toCreateInput($){let Z=qV($,"yolo"),Q=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider&&$.model?{providerId:String($.provider),modelId:String($.model)}:void 0;return{...$,modelSelection:Q,mode:Z}}toUpdateInput($){let Z=qV($),Q=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider||$.model?{providerId:typeof $.provider==="string"?$.provider:"",modelId:typeof $.model==="string"?$.model:""}:void 0;return{...$,modelSelection:Q,...Z===void 0?{}:{mode:Z}}}}import{ONE_TIME_SCHEDULE_CRON_PATTERN as dV,ONE_TIME_SCHEDULE_RUN_AT_METADATA_KEY as Gq}from"@cline/shared";class H4{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 J of Z)if(this.materializeOneOff(J))$.oneOffQueued+=1;let Q=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let J of Q)try{if(this.materializeSchedule(J))$.scheduleQueued+=1}catch{}return $}materializeOneOff($){if($.triggerKind!=="one_off")return!1;if(!$.enabled||$.removed)return!1;if(this.store.hasConsumedOneOffRevision($.specId,$.revision))return!1;return this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"one_off",scheduledFor:$.nextRunAt??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 uO}from"node:path";import{buildClineSystemPrompt as dO}from"@cline/shared";import{nowIso as SV}from"@cline/shared/db";var F0={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"},C$=[F0.READ_FILES,F0.SEARCH_CODEBASE,F0.RUN_COMMANDS,F0.FETCH_WEB_CONTENT,F0.APPLY_PATCH,F0.EDITOR,F0.SKILLS,F0.ASK,F0.SUBMIT_AND_EXIT];var NV={};w(NV,{mergeRulesForSystemPrompt:()=>w8,loadRulesForSystemPromptFromWatcher:()=>p3,listEnabledRulesFromWatcher:()=>TV,isRuleEnabled:()=>jZ,formatRulesForSystemPrompt:()=>C8});function jZ($){return $.disabled!==!0}function C8($){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 C8($,Z){let Q=$?.trim(),J=Z?.trim();if(Q&&J)return`${Q}
10
+ `)}`}function w8($,Z){let Q=$?.trim(),J=Z?.trim();if(Q&&J)return`${Q}
11
11
 
12
- ${J}`;return Q||J||void 0}function zV($){return[...$.getSnapshot("rule").values()].map((Q)=>Q.item).filter(jZ).sort((Q,J)=>Q.name.localeCompare(J.name))}function p3($){return E8(zV($))}var wV={};w(wV,{withSessionGitMetadata:()=>VZ,readSessionGitMetadata:()=>EV,readGitWorkspaceState:()=>i3,normalizeWorkspacePath:()=>T1,hasCurrentSessionGitMetadata:()=>l3,generateWorkspaceInfoWithDiagnostics:()=>K4,generateWorkspaceInfo:()=>w8,buildWorkspaceMetadataWithInfo:()=>r3,buildWorkspaceMetadata:()=>G4});import{basename as yO,resolve as kO}from"node:path";import{performance as NV}from"node:perf_hooks";import{processWorkspaceInfo as RV}from"@cline/shared";import MV from"simple-git";function EV($){let Z=$?.git;if(!Z||typeof Z!=="object"||Array.isArray(Z))return{};let Q=Z;return{...typeof Q.url==="string"&&Q.url.trim()?{url:Q.url.trim()}:{},...typeof Q.branch==="string"&&Q.branch.trim()?{branch:Q.branch.trim()}:{}}}function VZ($,Z){let Q={...$??{}};if(!Z.url&&!Z.branch)return delete Q.git,Object.keys(Q).length>0?Q:void 0;let W={...Q.git&&typeof Q.git==="object"&&!Array.isArray(Q.git)?Q.git:{}};if(Z.url)W.url=Z.url;else delete W.url;if(Z.branch)W.branch=Z.branch;else delete W.branch;return Q.git=W,Q}function l3($,Z){let Q=EV($);return Q.url===Z.url&&Q.branch===Z.branch}function CV($){let Z=$.find(({name:Q})=>Q==="origin")??$[0];return(Z?.refs.fetch||Z?.refs.push)?.trim()||void 0}function T1($){return kO($)}async function w8($){return(await K4($)).info}function fV($){let Z=$ instanceof Error?$.message:String($);return/unknown revision|ambiguous argument|does not have any commits yet/i.test(Z)}function YZ($){if($ instanceof Error)return{errorType:$.name?.trim()||$.constructor.name||"Error",message:$.message};return{errorType:"Error",message:String($)}}async function K4($){let Z=T1($),Q={rootPath:Z,hint:yO(Z)},J={},W;try{let X=MV({baseDir:Z});if(!await X.checkIsRepo())return{info:Q,vcsType:"none",gitState:J};try{let Y=await X.getRemotes(!0);if(Y.length>0){let V=Y.map((H)=>{let K=H.refs.fetch||H.refs.push;return`${H.name}: ${K}`});Q.associatedRemoteUrls=V;let B=CV(Y);if(B)J.url=B}}catch(Y){W??=YZ(Y)}try{let Y=(await X.revparse(["HEAD"])).trim();if(Y.length>0)Q.latestGitCommitHash=Y}catch(Y){if(!fV(Y))W??=YZ(Y)}try{let Y=(await X.branch()).current.trim();if(Y.length>0)Q.latestGitBranchName=Y,J.branch=Y}catch(Y){if(!fV(Y))W??=YZ(Y)}return{info:Q,vcsType:"git",gitState:J,error:W}}catch(X){return{info:Q,vcsType:"none",gitState:J,error:YZ(X)}}}async function i3($){try{let Z=MV({baseDir:T1($)});if(!await Z.checkIsRepo())return{};let[Q,J]=await Promise.all([Z.getRemotes(!0),Z.branch()]),W=CV(Q),X=J.current.trim();return{...W?{url:W}:{},...X?{branch:X}:{}}}catch{return}}async function G4($){let Z=await w8($);return RV(Z)}async function r3($){let Z=NV.now(),Q=await K4($),J=NV.now()-Z,W=Q.info;return{workspaceInfo:W,workspaceMetadata:RV(W),durationMs:J,vcsType:Q.vcsType,gitState:Q.gitState,initError:Q.error}}import{mkdirSync as hO,writeFileSync as IO}from"node:fs";import{join as xO}from"node:path";import{resolveCronReportsDir as gO}from"@cline/shared/storage";function w$($){if(/[:#\n]/.test($)||$.includes('"'))return JSON.stringify($);return $}function _2($,Z){if(Z===void 0||Z===null)return;return`${$}: ${w$(Z)}`}function vO($,Z,Q){let J=[`runId: ${w$($.runId)}`,`specId: ${w$(Z.specId)}`,`externalId: ${w$(Z.externalId)}`,`title: ${w$(Z.title)}`,`triggerKind: ${w$($.triggerKind)}`,`status: ${w$($.status)}`,`sourcePath: ${w$(Z.sourcePath)}`],W=[_2("sessionId",$.sessionId),_2("startedAt",$.startedAt),_2("completedAt",$.completedAt),_2("triggerEventId",$.triggerEventId),_2("triggerEventType",Q?.eventType),_2("triggerEventSource",Q?.source),_2("triggerEventSubject",Q?.subject)];for(let X of W)if(X)J.push(X);return`---
12
+ ${J}`;return Q||J||void 0}function TV($){return[...$.getSnapshot("rule").values()].map((Q)=>Q.item).filter(jZ).sort((Q,J)=>Q.name.localeCompare(J.name))}function p3($){return C8(TV($))}var PV={};w(PV,{withSessionGitMetadata:()=>VZ,readSessionGitMetadata:()=>CV,readGitWorkspaceState:()=>i3,normalizeWorkspacePath:()=>T1,hasCurrentSessionGitMetadata:()=>l3,generateWorkspaceInfoWithDiagnostics:()=>K4,generateWorkspaceInfo:()=>P8,buildWorkspaceMetadataWithInfo:()=>r3,buildWorkspaceMetadata:()=>G4});import{basename as kO,resolve as hO}from"node:path";import{performance as fV}from"node:perf_hooks";import{processWorkspaceInfo as MV}from"@cline/shared";import EV from"simple-git";function CV($){let Z=$?.git;if(!Z||typeof Z!=="object"||Array.isArray(Z))return{};let Q=Z;return{...typeof Q.url==="string"&&Q.url.trim()?{url:Q.url.trim()}:{},...typeof Q.branch==="string"&&Q.branch.trim()?{branch:Q.branch.trim()}:{}}}function VZ($,Z){let Q={...$??{}};if(!Z.url&&!Z.branch)return delete Q.git,Object.keys(Q).length>0?Q:void 0;let W={...Q.git&&typeof Q.git==="object"&&!Array.isArray(Q.git)?Q.git:{}};if(Z.url)W.url=Z.url;else delete W.url;if(Z.branch)W.branch=Z.branch;else delete W.branch;return Q.git=W,Q}function l3($,Z){let Q=CV($);return Q.url===Z.url&&Q.branch===Z.branch}function wV($){let Z=$.find(({name:Q})=>Q==="origin")??$[0];return(Z?.refs.fetch||Z?.refs.push)?.trim()||void 0}function T1($){return hO($)}async function P8($){return(await K4($)).info}function RV($){let Z=$ instanceof Error?$.message:String($);return/unknown revision|ambiguous argument|does not have any commits yet/i.test(Z)}function YZ($){if($ instanceof Error)return{errorType:$.name?.trim()||$.constructor.name||"Error",message:$.message};return{errorType:"Error",message:String($)}}async function K4($){let Z=T1($),Q={rootPath:Z,hint:kO(Z)||void 0},J={},W;try{let X=EV({baseDir:Z});if(!await X.checkIsRepo())return{info:Q,vcsType:"none",gitState:J};try{let Y=await X.getRemotes(!0);if(Y.length>0){let V=Y.map((H)=>{let K=H.refs.fetch||H.refs.push;return`${H.name}: ${K}`});Q.associatedRemoteUrls=V;let B=wV(Y);if(B)J.url=B}}catch(Y){W??=YZ(Y)}try{let Y=(await X.revparse(["HEAD"])).trim();if(Y.length>0)Q.latestGitCommitHash=Y}catch(Y){if(!RV(Y))W??=YZ(Y)}try{let Y=(await X.branch()).current.trim();if(Y.length>0)Q.latestGitBranchName=Y,J.branch=Y}catch(Y){if(!RV(Y))W??=YZ(Y)}return{info:Q,vcsType:"git",gitState:J,error:W}}catch(X){return{info:Q,vcsType:"none",gitState:J,error:YZ(X)}}}async function i3($){try{let Z=EV({baseDir:T1($)});if(!await Z.checkIsRepo())return{};let[Q,J]=await Promise.all([Z.getRemotes(!0),Z.branch()]),W=wV(Q),X=J.current.trim();return{...W?{url:W}:{},...X?{branch:X}:{}}}catch{return}}async function G4($){let Z=await P8($);return MV(Z)}async function r3($){let Z=fV.now(),Q=await K4($),J=fV.now()-Z,W=Q.info;return{workspaceInfo:W,workspaceMetadata:MV(W),durationMs:J,vcsType:Q.vcsType,gitState:Q.gitState,initError:Q.error}}import{mkdirSync as IO,writeFileSync as xO}from"node:fs";import{join as gO}from"node:path";import{resolveCronReportsDir as vO}from"@cline/shared/storage";function w$($){if(/[:#\n]/.test($)||$.includes('"'))return JSON.stringify($);return $}function L2($,Z){if(Z===void 0||Z===null)return;return`${$}: ${w$(Z)}`}function mO($,Z,Q){let J=[`runId: ${w$($.runId)}`,`specId: ${w$(Z.specId)}`,`externalId: ${w$(Z.externalId)}`,`title: ${w$(Z.title)}`,`triggerKind: ${w$($.triggerKind)}`,`status: ${w$($.status)}`,`sourcePath: ${w$(Z.sourcePath)}`],W=[L2("sessionId",$.sessionId),L2("startedAt",$.startedAt),L2("completedAt",$.completedAt),L2("triggerEventId",$.triggerEventId),L2("triggerEventType",Q?.eventType),L2("triggerEventSource",Q?.source),L2("triggerEventSubject",Q?.subject)];for(let X of W)if(X)J.push(X);return`---
13
13
  ${J.join(`
14
14
  `)}
15
15
  ---
16
- `}function mO($){let Z=[];if($.triggerEvent){let Q=$.triggerEvent,J=[`- 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((W)=>W.length>0);Z.push(`## Trigger Event
16
+ `}function cO($){let Z=[];if($.triggerEvent){let Q=$.triggerEvent,J=[`- 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((W)=>W.length>0);Z.push(`## Trigger Event
17
17
 
18
18
  ${J.join(`
19
19
  `)}
@@ -32,12 +32,12 @@ ${J.join(`
32
32
  ${Q.join(`
33
33
  `)}
34
34
  `)}return Z.join(`
35
- `)}function n3($){let Z=gO($.specs);hO(Z,{recursive:!0});let Q=xO(Z,`${$.run.runId}.md`),J=`${vO($.run,$.spec,$.data.triggerEvent)}
36
- ${mO($.data)}`;return IO(Q,J,"utf8"),Q}class a3{globalMaxConcurrency;activeExecutions=new Map;constructor($){this.globalMaxConcurrency=Math.max(1,Math.floor($))}acquire($,Z,Q){if(this.getGlobalActiveCount()>=this.globalMaxConcurrency)return!1;let J=Math.max(1,Math.floor(Q)),W=this.activeExecutions.get($)??new Set;if(W.size>=J)return!1;return W.add(Z),this.activeExecutions.set($,W),!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 dO=15000,pO=90,SV=["rules","skills","plugins"];function lO($,Z){return new Set($.extensions??SV).has(Z)}function iO($,Z){let Q=$.tools===void 0?{"*":{autoApprove:!0}}:{"*":{enabled:!1,autoApprove:!0}};for(let J of $.tools??[])Q[J]={enabled:!0,autoApprove:!0};if(Q[F0.ASK]={...Q[F0.ASK],enabled:!1,autoApprove:!0},Z==="yolo")Q[F0.SUBMIT_AND_EXIT]={enabled:!0,autoApprove:!0};return Q}function rO($){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 o3 extends Error{constructor($){super($);this.name="TimeoutError"}}async function nO($,Z){if(Z<=0)return $;let Q,J=new Promise((W,X)=>{Q=setTimeout(()=>{X(new o3("cron run timed out"))},Z)});try{return await Promise.race([$,J])}finally{if(Q)clearTimeout(Q)}}class F4{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 a3($.globalMaxConcurrency??10),this.claimLeaseMs=Math.max(5000,($.claimLeaseSeconds??pO)*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??dO);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,J])=>{if(J.sessionId)try{await this.options.runtimeHandlers.abortSession(J.sessionId)}catch{}try{this.store.requeueRun({runId:Q,claimToken:J.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:PV(),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 J=Q.maxParallel&&Q.maxParallel>0?Q.maxParallel:1;if(!this.limiter.acquire(Q.specId,Z.runId,J)){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,j,Y,V=Date.now(),B;if(Q.timeoutSeconds&&Q.timeoutSeconds>0)B=V+Q.timeoutSeconds*1000;try{Y=this.startClaimLeaseHeartbeat($);let H=await this.buildStartRequest(Q);if(j=(await this.options.runtimeHandlers.startSession(H)).sessionId.trim(),!j)throw Error("runtime returned empty sessionId");this.activeRuns.set(Z.runId,{claimToken:$.claimToken,sessionId:j}),this.store.attachSessionIdToRun(Z.runId,j);let G={config:H,prompt:this.buildPrompt(Q,X)},F=this.options.runtimeHandlers.sendSession(j,G),U=B?Math.max(1,B-Date.now()):0,L=(await nO(F,U)).result,O=Date.now(),D=n3({specs:this.options.specs,workspaceRoot:this.options.workspaceRoot,run:{...Z,sessionId:j,status:"done"},spec:Q,data:{finalText:L.text,usage:L.usage,toolCalls:L.toolCalls,durationMs:O-V,triggerEvent:X}});this.store.completeRun(Z.runId,{status:"done",sessionId:j,reportPath:D,claimToken:$.claimToken}),this.publishScheduleExecutionEvent("schedule.execution.completed",Q,Z.runId),this.store.updateSpecLastRunAt(Q.specId,PV())}catch(H){let K=H instanceof o3;if(j&&K)try{await this.options.runtimeHandlers.abortSession(j)}catch{}let G=H instanceof Error?H.message:String(H),F=Date.now(),U=n3({specs:this.options.specs,workspaceRoot:this.options.workspaceRoot,run:{...Z,sessionId:j,status:"failed"},spec:Q,data:{error:G,durationMs:F-V,triggerEvent:X}});this.store.completeRun(Z.runId,{status:"failed",sessionId:j,reportPath:U,error:G,claimToken:$.claimToken}),this.publishScheduleExecutionEvent("schedule.execution.failed",Q,Z.runId)}finally{if(Z.triggerKind==="one_off")this.store.updateSpecNextRunAt(Q.specId,void 0);if(Y?.(),j)try{await this.options.runtimeHandlers.stopSession(j)}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 J=this.store.getRun(Q);if(!J)return;let W=J.status==="done"?"success":J.status==="cancelled"?"aborted":J.status==="running"?"running":J.status==="queued"?"pending":"failed";this.options.eventPublisher($,{scheduleId:Z.externalId,executionId:J.runId,sessionId:J.sessionId,triggeredAt:new Date(J.scheduledFor??J.createdAt).getTime(),startedAt:J.startedAt?new Date(J.startedAt).getTime():void 0,endedAt:J.completedAt?new Date(J.completedAt).getTime():void 0,status:W,errorMessage:J.error})}buildPrompt($,Z){let Q=$.prompt??"";if(!Z)return Q;let J={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 n3($){let Z=vO($.specs);IO(Z,{recursive:!0});let Q=gO(Z,`${$.run.runId}.md`),J=`${mO($.run,$.spec,$.data.triggerEvent)}
36
+ ${cO($.data)}`;return xO(Q,J,"utf8"),Q}class a3{globalMaxConcurrency;activeExecutions=new Map;constructor($){this.globalMaxConcurrency=Math.max(1,Math.floor($))}acquire($,Z,Q){if(this.getGlobalActiveCount()>=this.globalMaxConcurrency)return!1;let J=Math.max(1,Math.floor(Q)),W=this.activeExecutions.get($)??new Set;if(W.size>=J)return!1;return W.add(Z),this.activeExecutions.set($,W),!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 pO=15000,lO=90,bV=["rules","skills","plugins"];function iO($,Z){return new Set($.extensions??bV).has(Z)}function rO($,Z){let Q=$.tools===void 0?{"*":{autoApprove:!0}}:{"*":{enabled:!1,autoApprove:!0}};for(let J of $.tools??[])Q[J]={enabled:!0,autoApprove:!0};if(Q[F0.ASK]={...Q[F0.ASK],enabled:!1,autoApprove:!0},Z==="yolo")Q[F0.SUBMIT_AND_EXIT]={enabled:!0,autoApprove:!0};return Q}function nO($){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 o3 extends Error{constructor($){super($);this.name="TimeoutError"}}async function aO($,Z){if(Z<=0)return $;let Q,J=new Promise((W,X)=>{Q=setTimeout(()=>{X(new o3("cron run timed out"))},Z)});try{return await Promise.race([$,J])}finally{if(Q)clearTimeout(Q)}}class F4{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 a3($.globalMaxConcurrency??10),this.claimLeaseMs=Math.max(5000,($.claimLeaseSeconds??lO)*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??pO);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,J])=>{if(J.sessionId)try{await this.options.runtimeHandlers.abortSession(J.sessionId)}catch{}try{this.store.requeueRun({runId:Q,claimToken:J.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:SV(),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 J=Q.maxParallel&&Q.maxParallel>0?Q.maxParallel:1;if(!this.limiter.acquire(Q.specId,Z.runId,J)){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,j,Y,V=Date.now(),B;if(Q.timeoutSeconds&&Q.timeoutSeconds>0)B=V+Q.timeoutSeconds*1000;try{Y=this.startClaimLeaseHeartbeat($);let H=await this.buildStartRequest(Q);if(j=(await this.options.runtimeHandlers.startSession(H)).sessionId.trim(),!j)throw Error("runtime returned empty sessionId");this.activeRuns.set(Z.runId,{claimToken:$.claimToken,sessionId:j}),this.store.attachSessionIdToRun(Z.runId,j);let G={config:H,prompt:this.buildPrompt(Q,X)},F=this.options.runtimeHandlers.sendSession(j,G),U=B?Math.max(1,B-Date.now()):0,L=(await aO(F,U)).result,O=Date.now(),D=n3({specs:this.options.specs,workspaceRoot:this.options.workspaceRoot,run:{...Z,sessionId:j,status:"done"},spec:Q,data:{finalText:L.text,usage:L.usage,toolCalls:L.toolCalls,durationMs:O-V,triggerEvent:X}});this.store.completeRun(Z.runId,{status:"done",sessionId:j,reportPath:D,claimToken:$.claimToken}),this.publishScheduleExecutionEvent("schedule.execution.completed",Q,Z.runId),this.store.updateSpecLastRunAt(Q.specId,SV())}catch(H){let K=H instanceof o3;if(j&&K)try{await this.options.runtimeHandlers.abortSession(j)}catch{}let G=H instanceof Error?H.message:String(H),F=Date.now(),U=n3({specs:this.options.specs,workspaceRoot:this.options.workspaceRoot,run:{...Z,sessionId:j,status:"failed"},spec:Q,data:{error:G,durationMs:F-V,triggerEvent:X}});this.store.completeRun(Z.runId,{status:"failed",sessionId:j,reportPath:U,error:G,claimToken:$.claimToken}),this.publishScheduleExecutionEvent("schedule.execution.failed",Q,Z.runId)}finally{if(Z.triggerKind==="one_off")this.store.updateSpecNextRunAt(Q.specId,void 0);if(Y?.(),j)try{await this.options.runtimeHandlers.stopSession(j)}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 J=this.store.getRun(Q);if(!J)return;let W=J.status==="done"?"success":J.status==="cancelled"?"aborted":J.status==="running"?"running":J.status==="queued"?"pending":"failed";this.options.eventPublisher($,{scheduleId:Z.externalId,executionId:J.runId,sessionId:J.sessionId,triggeredAt:new Date(J.scheduledFor??J.createdAt).getTime(),startedAt:J.startedAt?new Date(J.startedAt).getTime():void 0,endedAt:J.completedAt?new Date(J.completedAt).getTime():void 0,status:W,errorMessage:J.error})}buildPrompt($,Z){let Q=$.prompt??"";if(!Z)return Q;let J={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(J,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Math.floor(this.claimLeaseMs/2)),Q=setInterval(()=>{let J=new Date(Date.now()+this.claimLeaseMs).toISOString();if(!this.store.renewClaim($.run.runId,$.claimToken,J))clearInterval(Q)},Z);return()=>clearInterval(Q)}async buildSystemPrompt($,Z,Q,J){let W=rO($.notesDirectory),X=C8(void 0,W),j=await G4(Z),Y=uO({ide:"Cline Cron",workspaceRoot:Z,workspaceName:cO(Z),metadata:j,rules:$.systemPrompt?void 0:X,mode:Q,providerId:J,overridePrompt:$.systemPrompt,platform:typeof process<"u"&&process?.platform||"unknown"});return $.systemPrompt?C8(Y,X)??Y:Y}async buildStartRequest($){let Z=($.workspaceRoot??"").trim(),Q=($.providerId??"").trim(),J=($.modelId??"").trim(),W=$.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 j=$.mode==="plan"?"plan":$.mode==="act"?"act":"yolo";return{workspaceRoot:Z,cwd:X,provider:Q,model:J,mode:j,source:$.source?.trim()||"user",systemPrompt:await this.buildSystemPrompt($,Z,j,Q),maxIterations:$.maxIterations,enableTools:W?.enableTools??!0,enableSpawn:W?.enableSpawn??!0,enableTeams:W?.enableTeams??!0,autoApproveTools:W?.autoApproveTools??!0,toolPolicies:iO($,j),configExtensions:SV.filter((Y)=>lO($,Y))}}}function U4($,Z,Q,J){let W=new Set;function X(j){let Y=j.toLowerCase();if(J){let B=J.indexOf(Y);if(B!==-1)return B+Z}let V=Number(j);if(!Number.isInteger(V)||V<Z||V>Q)throw Error(`Invalid cron value "${j}" for range [${Z}-${Q}]`);return V}for(let j of $.split(",")){if(j==="*"){for(let B=Z;B<=Q;B+=1)W.add(B);continue}let Y=j.indexOf("/");if(Y!==-1){let B=j.slice(0,Y),H=Number(j.slice(Y+1));if(!Number.isInteger(H)||H<1)throw Error(`Invalid step "${j.slice(Y+1)}"`);let K=Z,G=Q;if(B!=="*"){let F=B.indexOf("-");if(F!==-1)K=X(B.slice(0,F)),G=X(B.slice(F+1));else K=X(B)}if(K>G)throw Error(`Invalid cron range "${B}"`);for(let F=K;F<=G;F+=H)W.add(F);continue}let V=j.indexOf("-");if(V!==-1){let B=X(j.slice(0,V)),H=X(j.slice(V+1));if(B>H)throw Error(`Invalid cron range "${j}"`);for(let K=B;K<=H;K+=1)W.add(K);continue}W.add(X(j))}return[...W].sort((j,Y)=>j-Y)}var aO=["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"],yV=["sun","mon","tue","wed","thu","fri","sat"];function D4($,Z,Q){let J=$[Z];if(typeof J!=="string")throw Error(`Invalid cron pattern "${Q}": missing field ${Z+1}`);return J}function s3($,Z){let Q=$[0];if(typeof Q!=="number")throw Error(`Invalid cron pattern: no values parsed for ${Z}`);return Q}function t3($){let Z=$.trim().split(/\s+/);if(Z.length!==5)throw Error(`Invalid cron pattern "${$}": expected 5 fields, got ${Z.length}`);return{minutes:U4(D4(Z,0,$),0,59),hours:U4(D4(Z,1,$),0,23),daysOfMonth:U4(D4(Z,2,$),1,31),months:U4(D4(Z,3,$),1,12,aO),daysOfWeek:U4(D4(Z,4,$),0,6,yV)}}function kV($){t3($)}function hV($,Z,Q=Date.now()){L2($,Q,Z)}var bV=new Map,oO=new Map(yV.map(($,Z)=>[$,Z]));function IV($){let Z=$?.trim();return Z?Z:void 0}function xV($){let Z=bV.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 bV.set($,Q),Q}function sO($){let Z=IV($);if(!Z)return;xV(Z).format(new Date)}function tO($,Z){let Q=xV(Z).formatToParts(new Date($)),J=new Map(Q.map((j)=>[j.type,j.value])),W=J.get("weekday")?.toLowerCase().slice(0,3)??"",X=oO.get(W);if(X===void 0)throw Error(`Unable to resolve weekday for timezone "${Z}"`);return{month:Number(J.get("month")),dayOfMonth:Number(J.get("day")),dayOfWeek:X,hour:Number(J.get("hour")),minute:Number(J.get("minute"))}}function eO($){let Z=new Date($);return{month:Z.getMonth()+1,dayOfMonth:Z.getDate(),dayOfWeek:Z.getDay(),hour:Z.getHours(),minute:Z.getMinutes()}}function $q($,Z){return $.months.includes(Z.month)&&$.daysOfMonth.includes(Z.dayOfMonth)&&$.daysOfWeek.includes(Z.dayOfWeek)&&$.hours.includes(Z.hour)&&$.minutes.includes(Z.minute)}function Zq($,Z,Q){let J=t3($),W=new Date(Z);W.setSeconds(0,0);let X=W.getTime()+60000,j=new Date(Z);j.setFullYear(j.getFullYear()+4);let Y=j.getTime();while(X<=Y){if($q(J,tO(X,Q)))return X;X+=60000}throw Error(`No cron occurrence found within 4 years for pattern "${$}" in timezone "${Q}"`)}function L2($,Z,Q){let J=IV(Q);if(J)return sO(J),Zq($,Z,J);let W=t3($),X=new Date(Z);X.setSeconds(0,0),X=new Date(X.getTime()+60000);let j=new Date(Z);j.setFullYear(j.getFullYear()+4);while(X<=j){let{month:Y,dayOfMonth:V,dayOfWeek:B,hour:H,minute:K}=eO(X.getTime());if(!W.months.includes(Y)){let G=W.months.find((U)=>U>Y)??s3(W.months,"months"),F=G<=Y?1:0;X=new Date(X.getFullYear()+F,G-1,1,0,0,0,0);continue}if(!W.daysOfMonth.includes(V)||!W.daysOfWeek.includes(B)){X=new Date(X.getFullYear(),X.getMonth(),V+1,0,0,0,0);continue}if(!W.hours.includes(H)){let G=W.hours.find((U)=>U>H)??s3(W.hours,"hours"),F=G<=H?1:0;X=new Date(X.getFullYear(),X.getMonth(),X.getDate()+F,G,0,0,0);continue}if(!W.minutes.includes(K)){let G=W.minutes.find((U)=>U>K)??s3(W.minutes,"minutes"),F=G<=K?1:0;X=new Date(X.getFullYear(),X.getMonth(),X.getDate(),X.getHours()+F,G,0,0);continue}return X.getTime()}throw Error(`No cron occurrence found within 4 years for pattern "${$}"`)}import{randomUUID as _4}from"node:crypto";import{ONE_TIME_SCHEDULE_CRON_PATTERN as L4,ONE_TIME_SCHEDULE_RUN_AT_METADATA_KEY as P8}from"@cline/shared";import{asOptionalString as d,asString as J0,loadSqliteDb as Jq,nowIso as q0}from"@cline/shared/db";import{resolveCronDbPath as Wq}from"@cline/shared/storage";var Qq=[`CREATE TABLE IF NOT EXISTS cron_specs (
40
+ ${JSON.stringify(J,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Math.floor(this.claimLeaseMs/2)),Q=setInterval(()=>{let J=new Date(Date.now()+this.claimLeaseMs).toISOString();if(!this.store.renewClaim($.run.runId,$.claimToken,J))clearInterval(Q)},Z);return()=>clearInterval(Q)}async buildSystemPrompt($,Z,Q,J){let W=nO($.notesDirectory),X=w8(void 0,W),j=await G4(Z),Y=dO({ide:"Cline Cron",workspaceRoot:Z,workspaceName:uO(Z),metadata:j,rules:$.systemPrompt?void 0:X,mode:Q,providerId:J,overridePrompt:$.systemPrompt,platform:typeof process<"u"&&process?.platform||"unknown"});return $.systemPrompt?w8(Y,X)??Y:Y}async buildStartRequest($){let Z=($.workspaceRoot??"").trim(),Q=($.providerId??"").trim(),J=($.modelId??"").trim(),W=$.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 j=$.mode==="plan"?"plan":$.mode==="act"?"act":"yolo";return{workspaceRoot:Z,cwd:X,provider:Q,model:J,mode:j,source:$.source?.trim()||"user",systemPrompt:await this.buildSystemPrompt($,Z,j,Q),maxIterations:$.maxIterations,enableTools:W?.enableTools??!0,enableSpawn:W?.enableSpawn??!0,enableTeams:W?.enableTeams??!0,autoApproveTools:W?.autoApproveTools??!0,toolPolicies:rO($,j),configExtensions:bV.filter((Y)=>iO($,Y))}}}function U4($,Z,Q,J){let W=new Set;function X(j){let Y=j.toLowerCase();if(J){let B=J.indexOf(Y);if(B!==-1)return B+Z}let V=Number(j);if(!Number.isInteger(V)||V<Z||V>Q)throw Error(`Invalid cron value "${j}" for range [${Z}-${Q}]`);return V}for(let j of $.split(",")){if(j==="*"){for(let B=Z;B<=Q;B+=1)W.add(B);continue}let Y=j.indexOf("/");if(Y!==-1){let B=j.slice(0,Y),H=Number(j.slice(Y+1));if(!Number.isInteger(H)||H<1)throw Error(`Invalid step "${j.slice(Y+1)}"`);let K=Z,G=Q;if(B!=="*"){let F=B.indexOf("-");if(F!==-1)K=X(B.slice(0,F)),G=X(B.slice(F+1));else K=X(B)}if(K>G)throw Error(`Invalid cron range "${B}"`);for(let F=K;F<=G;F+=H)W.add(F);continue}let V=j.indexOf("-");if(V!==-1){let B=X(j.slice(0,V)),H=X(j.slice(V+1));if(B>H)throw Error(`Invalid cron range "${j}"`);for(let K=B;K<=H;K+=1)W.add(K);continue}W.add(X(j))}return[...W].sort((j,Y)=>j-Y)}var oO=["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"],kV=["sun","mon","tue","wed","thu","fri","sat"];function D4($,Z,Q){let J=$[Z];if(typeof J!=="string")throw Error(`Invalid cron pattern "${Q}": missing field ${Z+1}`);return J}function s3($,Z){let Q=$[0];if(typeof Q!=="number")throw Error(`Invalid cron pattern: no values parsed for ${Z}`);return Q}function t3($){let Z=$.trim().split(/\s+/);if(Z.length!==5)throw Error(`Invalid cron pattern "${$}": expected 5 fields, got ${Z.length}`);return{minutes:U4(D4(Z,0,$),0,59),hours:U4(D4(Z,1,$),0,23),daysOfMonth:U4(D4(Z,2,$),1,31),months:U4(D4(Z,3,$),1,12,oO),daysOfWeek:U4(D4(Z,4,$),0,6,kV)}}function hV($){t3($)}function IV($,Z,Q=Date.now()){A2($,Q,Z)}var yV=new Map,sO=new Map(kV.map(($,Z)=>[$,Z]));function xV($){let Z=$?.trim();return Z?Z:void 0}function gV($){let Z=yV.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 yV.set($,Q),Q}function tO($){let Z=xV($);if(!Z)return;gV(Z).format(new Date)}function eO($,Z){let Q=gV(Z).formatToParts(new Date($)),J=new Map(Q.map((j)=>[j.type,j.value])),W=J.get("weekday")?.toLowerCase().slice(0,3)??"",X=sO.get(W);if(X===void 0)throw Error(`Unable to resolve weekday for timezone "${Z}"`);return{month:Number(J.get("month")),dayOfMonth:Number(J.get("day")),dayOfWeek:X,hour:Number(J.get("hour")),minute:Number(J.get("minute"))}}function $q($){let Z=new Date($);return{month:Z.getMonth()+1,dayOfMonth:Z.getDate(),dayOfWeek:Z.getDay(),hour:Z.getHours(),minute:Z.getMinutes()}}function Zq($,Z){return $.months.includes(Z.month)&&$.daysOfMonth.includes(Z.dayOfMonth)&&$.daysOfWeek.includes(Z.dayOfWeek)&&$.hours.includes(Z.hour)&&$.minutes.includes(Z.minute)}function Qq($,Z,Q){let J=t3($),W=new Date(Z);W.setSeconds(0,0);let X=W.getTime()+60000,j=new Date(Z);j.setFullYear(j.getFullYear()+4);let Y=j.getTime();while(X<=Y){if(Zq(J,eO(X,Q)))return X;X+=60000}throw Error(`No cron occurrence found within 4 years for pattern "${$}" in timezone "${Q}"`)}function A2($,Z,Q){let J=xV(Q);if(J)return tO(J),Qq($,Z,J);let W=t3($),X=new Date(Z);X.setSeconds(0,0),X=new Date(X.getTime()+60000);let j=new Date(Z);j.setFullYear(j.getFullYear()+4);while(X<=j){let{month:Y,dayOfMonth:V,dayOfWeek:B,hour:H,minute:K}=$q(X.getTime());if(!W.months.includes(Y)){let G=W.months.find((U)=>U>Y)??s3(W.months,"months"),F=G<=Y?1:0;X=new Date(X.getFullYear()+F,G-1,1,0,0,0,0);continue}if(!W.daysOfMonth.includes(V)||!W.daysOfWeek.includes(B)){X=new Date(X.getFullYear(),X.getMonth(),V+1,0,0,0,0);continue}if(!W.hours.includes(H)){let G=W.hours.find((U)=>U>H)??s3(W.hours,"hours"),F=G<=H?1:0;X=new Date(X.getFullYear(),X.getMonth(),X.getDate()+F,G,0,0,0);continue}if(!W.minutes.includes(K)){let G=W.minutes.find((U)=>U>K)??s3(W.minutes,"minutes"),F=G<=K?1:0;X=new Date(X.getFullYear(),X.getMonth(),X.getDate(),X.getHours()+F,G,0,0);continue}return X.getTime()}throw Error(`No cron occurrence found within 4 years for pattern "${$}"`)}import{randomUUID as _4}from"node:crypto";import{ONE_TIME_SCHEDULE_CRON_PATTERN as L4,ONE_TIME_SCHEDULE_RUN_AT_METADATA_KEY as S8}from"@cline/shared";import{asOptionalString as d,asString as J0,loadSqliteDb as Wq,nowIso as q0}from"@cline/shared/db";import{resolveCronDbPath as Xq}from"@cline/shared/storage";var Jq=[`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,11 +128,11 @@ ${JSON.stringify(J,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 gV($){$.exec("PRAGMA journal_mode = WAL;"),$.exec("PRAGMA busy_timeout = 5000;"),$.exec("PRAGMA foreign_keys = ON;");for(let Z of Qq)$.exec(Z)}function KZ($){if(!$)return;try{let Z=JSON.parse($);if(Z&&typeof Z==="object"&&!Array.isArray(Z))return Z}catch{}return}function e3($,Z={}){if(!$)return;try{let Q=JSON.parse($);if(!Array.isArray(Q))return;let J=Q.map((W)=>typeof W==="string"?W.trim():"").filter((W)=>W.length>0);if(Z.preserveEmpty)return J;return J.length>0?J:void 0}catch{return}}function A2($){if(typeof $==="number"&&Number.isFinite($))return $;if(typeof $==="bigint")return Number($);return}function P$($){return{specId:J0($.spec_id),externalId:J0($.external_id),sourcePath:J0($.source_path),triggerKind:J0($.trigger_kind),sourceMtimeMs:A2($.source_mtime_ms),sourceHash:d($.source_hash),parseStatus:J0($.parse_status)==="invalid"?"invalid":"valid",parseError:d($.parse_error),enabled:Number($.enabled??0)===1,removed:Number($.removed??0)===1,title:J0($.title),prompt:d($.prompt),workspaceRoot:d($.workspace_root),scheduleExpr:d($.schedule_expr),timezone:d($.timezone),eventType:d($.event_type),filters:KZ(d($.filters_json)),debounceSeconds:A2($.debounce_seconds),dedupeWindowSeconds:A2($.dedupe_window_seconds),cooldownSeconds:A2($.cooldown_seconds),mode:d($.mode),systemPrompt:d($.system_prompt),providerId:d($.provider_id),modelId:d($.model_id),maxIterations:A2($.max_iterations),timeoutSeconds:A2($.timeout_seconds),maxParallel:A2($.max_parallel),tools:e3(d($.tools_json),{preserveEmpty:!0}),notesDirectory:d($.notes_directory),extensions:e3(d($.extensions_json),{preserveEmpty:!0}),source:d($.source),tags:e3(d($.tags_json)),metadata:KZ(d($.metadata_json)),revision:Number($.revision??1),lastMaterializedRunId:d($.last_materialized_run_id),lastRunAt:d($.last_run_at),nextRunAt:d($.next_run_at),createdAt:J0($.created_at),updatedAt:J0($.updated_at)}}function BZ($){return{runId:J0($.run_id),specId:J0($.spec_id),specRevision:Number($.spec_revision??1),triggerKind:J0($.trigger_kind),status:J0($.status),claimToken:d($.claim_token),claimStartedAt:d($.claim_started_at),claimUntilAt:d($.claim_until_at),scheduledFor:d($.scheduled_for),triggerEventId:d($.trigger_event_id),startedAt:d($.started_at),completedAt:d($.completed_at),sessionId:d($.session_id),reportPath:d($.report_path),error:d($.error),attemptCount:Number($.attempt_count??0),createdAt:J0($.created_at),updatedAt:J0($.updated_at)}}function vV($){return{eventId:J0($.event_id),eventType:J0($.event_type),source:J0($.source),subject:d($.subject),occurredAt:J0($.occurred_at),receivedAt:J0($.received_at),workspaceRoot:d($.workspace_root),dedupeKey:d($.dedupe_key),payload:KZ(d($.payload_json)),attributes:KZ(d($.attributes_json)),processingStatus:J0($.processing_status),matchedSpecCount:Number($.matched_spec_count??0),queuedRunCount:Number($.queued_run_count??0),suppressedCount:Number($.suppressed_count??0),error:d($.error),createdAt:J0($.created_at),updatedAt:J0($.updated_at)}}function mV($){return $?JSON.stringify($):null}var Xq=["triggerKind","prompt","workspaceRoot","mode","systemPrompt","providerId","modelId","maxIterations","timeoutSeconds","maxParallel","tools","notesDirectory","extensions","source","scheduleExpr","timezone","eventType","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds"];function HZ($){if($===void 0)return null;if($&&typeof $==="object")return JSON.stringify($);return $}function jq($,Z,Q,J){for(let j of Xq){let Y=$[j],V=Z[j];if(HZ(Y)!==HZ(V))return!0}let W=$.triggerKind==="one_off"||Z.triggerKind==="one_off",X=Z.metadata;if(W&&HZ($.metadata?.[P8])!==HZ(X?.[P8]))return!0;if(Q===!1&&J===!0)return!0;return!1}function Yq($){return($.split("/").pop()??$).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}function Vq($){return`hub/schedules/${$}.cron.md`}function Bq($){let Z={...$.metadata??{},...$.createdBy?{__hubScheduleCreatedBy:$.createdBy}:{},...$.cwd?{__hubScheduleCwd:$.cwd}:{},...$.runtimeOptions?{__hubRuntimeOptions:$.runtimeOptions}:{}};if($.cronPattern.trim()!==L4)delete Z[P8];return Object.keys(Z).length>0?Z:void 0}function $J($){let Z=$.cronPattern.trim()===L4,Q={title:$.name.trim(),prompt:$.prompt,workspaceRoot:$.workspaceRoot.trim(),mode:$.mode??"yolo",systemPrompt:$.systemPrompt,modelSelection:$.modelSelection?JSON.parse(JSON.stringify($.modelSelection)):void 0,maxIterations:typeof $.maxIterations==="number"?Math.floor($.maxIterations):void 0,timeoutSeconds:typeof $.timeoutSeconds==="number"?Math.floor($.timeoutSeconds):void 0,maxParallel:typeof $.maxParallel==="number"?Math.max(1,Math.floor($.maxParallel)):1,source:"hub-schedule",tags:$.tags?.filter((J)=>J.trim().length>0),enabled:$.enabled!==!1,metadata:Bq($)};return Z?{...Q,triggerKind:"one_off"}:{...Q,triggerKind:"schedule",schedule:$.cronPattern.trim()}}function cV($){return JSON.stringify($J($))}function Hq($,Z){let Q=$.metadata?{...$.metadata}:{},J=Z.createdBy===null?void 0:Z.createdBy!==void 0?Z.createdBy:typeof Q.__hubScheduleCreatedBy==="string"?Q.__hubScheduleCreatedBy:void 0,W=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;delete Q.__hubScheduleCreatedBy,delete Q.__hubScheduleCwd,delete Q.__hubRuntimeOptions;let j=Z.cronPattern??($.triggerKind==="one_off"?L4:$.scheduleExpr??""),Y={...Q,...Z.metadata??{}};if(j.trim()!==L4)delete Y[P8];return{name:Z.name??$.title,cronPattern:j,prompt:Z.prompt??$.prompt??"",workspaceRoot:Z.workspaceRoot??$.workspaceRoot??"",cwd:W,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==="act"?"act":"yolo"),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:J,tags:Z.tags??$.tags,runtimeOptions:X,metadata:Object.keys(Y).length>0?Y:void 0}}class A4{db;constructor($={}){let Z=$.dbPath??Wq();this.db=Jq(Z),gV(this.db)}close(){this.db.close?.()}getSpecBySourcePath($){let Z=this.db.prepare("SELECT * FROM cron_specs WHERE source_path = ?").get($);return Z?P$(Z):void 0}getSpec($){let Z=this.db.prepare("SELECT * FROM cron_specs WHERE spec_id = ?").get($);return Z?P$(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?P$(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 J=Z.length>0?`WHERE ${Z.join(" AND ")}`:"",W=Math.max(1,Math.floor($.limit??500));return this.db.prepare(`SELECT * FROM cron_specs ${J} ORDER BY created_at DESC LIMIT ?`).all(...Q,W).map((j)=>P$(j))}createHubSchedule($){let Z=`sched_${_4()}`,Q=$J($),J=this.upsertSpec({externalId:Z,sourcePath:Vq(Z),triggerKind:Q.triggerKind,sourceHash:cV($),parseStatus:"valid",spec:Q});this.initializeHubScheduleNextRun(J.record.specId,$);let W=this.getSpec(J.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 vV($){$.exec("PRAGMA journal_mode = WAL;"),$.exec("PRAGMA busy_timeout = 5000;"),$.exec("PRAGMA foreign_keys = ON;");for(let Z of Jq)$.exec(Z)}function KZ($){if(!$)return;try{let Z=JSON.parse($);if(Z&&typeof Z==="object"&&!Array.isArray(Z))return Z}catch{}return}function e3($,Z={}){if(!$)return;try{let Q=JSON.parse($);if(!Array.isArray(Q))return;let J=Q.map((W)=>typeof W==="string"?W.trim():"").filter((W)=>W.length>0);if(Z.preserveEmpty)return J;return J.length>0?J:void 0}catch{return}}function O2($){if(typeof $==="number"&&Number.isFinite($))return $;if(typeof $==="bigint")return Number($);return}function P$($){return{specId:J0($.spec_id),externalId:J0($.external_id),sourcePath:J0($.source_path),triggerKind:J0($.trigger_kind),sourceMtimeMs:O2($.source_mtime_ms),sourceHash:d($.source_hash),parseStatus:J0($.parse_status)==="invalid"?"invalid":"valid",parseError:d($.parse_error),enabled:Number($.enabled??0)===1,removed:Number($.removed??0)===1,title:J0($.title),prompt:d($.prompt),workspaceRoot:d($.workspace_root),scheduleExpr:d($.schedule_expr),timezone:d($.timezone),eventType:d($.event_type),filters:KZ(d($.filters_json)),debounceSeconds:O2($.debounce_seconds),dedupeWindowSeconds:O2($.dedupe_window_seconds),cooldownSeconds:O2($.cooldown_seconds),mode:d($.mode),systemPrompt:d($.system_prompt),providerId:d($.provider_id),modelId:d($.model_id),maxIterations:O2($.max_iterations),timeoutSeconds:O2($.timeout_seconds),maxParallel:O2($.max_parallel),tools:e3(d($.tools_json),{preserveEmpty:!0}),notesDirectory:d($.notes_directory),extensions:e3(d($.extensions_json),{preserveEmpty:!0}),source:d($.source),tags:e3(d($.tags_json)),metadata:KZ(d($.metadata_json)),revision:Number($.revision??1),lastMaterializedRunId:d($.last_materialized_run_id),lastRunAt:d($.last_run_at),nextRunAt:d($.next_run_at),createdAt:J0($.created_at),updatedAt:J0($.updated_at)}}function BZ($){return{runId:J0($.run_id),specId:J0($.spec_id),specRevision:Number($.spec_revision??1),triggerKind:J0($.trigger_kind),status:J0($.status),claimToken:d($.claim_token),claimStartedAt:d($.claim_started_at),claimUntilAt:d($.claim_until_at),scheduledFor:d($.scheduled_for),triggerEventId:d($.trigger_event_id),startedAt:d($.started_at),completedAt:d($.completed_at),sessionId:d($.session_id),reportPath:d($.report_path),error:d($.error),attemptCount:Number($.attempt_count??0),createdAt:J0($.created_at),updatedAt:J0($.updated_at)}}function mV($){return{eventId:J0($.event_id),eventType:J0($.event_type),source:J0($.source),subject:d($.subject),occurredAt:J0($.occurred_at),receivedAt:J0($.received_at),workspaceRoot:d($.workspace_root),dedupeKey:d($.dedupe_key),payload:KZ(d($.payload_json)),attributes:KZ(d($.attributes_json)),processingStatus:J0($.processing_status),matchedSpecCount:Number($.matched_spec_count??0),queuedRunCount:Number($.queued_run_count??0),suppressedCount:Number($.suppressed_count??0),error:d($.error),createdAt:J0($.created_at),updatedAt:J0($.updated_at)}}function cV($){return $?JSON.stringify($):null}var jq=["triggerKind","prompt","workspaceRoot","mode","systemPrompt","providerId","modelId","maxIterations","timeoutSeconds","maxParallel","tools","notesDirectory","extensions","source","scheduleExpr","timezone","eventType","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds"];function HZ($){if($===void 0)return null;if($&&typeof $==="object")return JSON.stringify($);return $}function Yq($,Z,Q,J){for(let j of jq){let Y=$[j],V=Z[j];if(HZ(Y)!==HZ(V))return!0}let W=$.triggerKind==="one_off"||Z.triggerKind==="one_off",X=Z.metadata;if(W&&HZ($.metadata?.[S8])!==HZ(X?.[S8]))return!0;if(Q===!1&&J===!0)return!0;return!1}function Vq($){return($.split("/").pop()??$).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}function Bq($){return`hub/schedules/${$}.cron.md`}function Hq($){let Z={...$.metadata??{},...$.createdBy?{__hubScheduleCreatedBy:$.createdBy}:{},...$.cwd?{__hubScheduleCwd:$.cwd}:{},...$.runtimeOptions?{__hubRuntimeOptions:$.runtimeOptions}:{}};if($.cronPattern.trim()!==L4)delete Z[S8];return Object.keys(Z).length>0?Z:void 0}function $J($){let Z=$.cronPattern.trim()===L4,Q={title:$.name.trim(),prompt:$.prompt,workspaceRoot:$.workspaceRoot.trim(),mode:$.mode??"yolo",systemPrompt:$.systemPrompt,modelSelection:$.modelSelection?JSON.parse(JSON.stringify($.modelSelection)):void 0,maxIterations:typeof $.maxIterations==="number"?Math.floor($.maxIterations):void 0,timeoutSeconds:typeof $.timeoutSeconds==="number"?Math.floor($.timeoutSeconds):void 0,maxParallel:typeof $.maxParallel==="number"?Math.max(1,Math.floor($.maxParallel)):1,source:"hub-schedule",tags:$.tags?.filter((J)=>J.trim().length>0),enabled:$.enabled!==!1,metadata:Hq($)};return Z?{...Q,triggerKind:"one_off"}:{...Q,triggerKind:"schedule",schedule:$.cronPattern.trim()}}function uV($){return JSON.stringify($J($))}function Kq($,Z){let Q=$.metadata?{...$.metadata}:{},J=Z.createdBy===null?void 0:Z.createdBy!==void 0?Z.createdBy:typeof Q.__hubScheduleCreatedBy==="string"?Q.__hubScheduleCreatedBy:void 0,W=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;delete Q.__hubScheduleCreatedBy,delete Q.__hubScheduleCwd,delete Q.__hubRuntimeOptions;let j=Z.cronPattern??($.triggerKind==="one_off"?L4:$.scheduleExpr??""),Y={...Q,...Z.metadata??{}};if(j.trim()!==L4)delete Y[S8];return{name:Z.name??$.title,cronPattern:j,prompt:Z.prompt??$.prompt??"",workspaceRoot:Z.workspaceRoot??$.workspaceRoot??"",cwd:W,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==="act"?"act":"yolo"),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:J,tags:Z.tags??$.tags,runtimeOptions:X,metadata:Object.keys(Y).length>0?Y:void 0}}class A4{db;constructor($={}){let Z=$.dbPath??Xq();this.db=Wq(Z),vV(this.db)}close(){this.db.close?.()}getSpecBySourcePath($){let Z=this.db.prepare("SELECT * FROM cron_specs WHERE source_path = ?").get($);return Z?P$(Z):void 0}getSpec($){let Z=this.db.prepare("SELECT * FROM cron_specs WHERE spec_id = ?").get($);return Z?P$(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?P$(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 J=Z.length>0?`WHERE ${Z.join(" AND ")}`:"",W=Math.max(1,Math.floor($.limit??500));return this.db.prepare(`SELECT * FROM cron_specs ${J} ORDER BY created_at DESC LIMIT ?`).all(...Q,W).map((j)=>P$(j))}createHubSchedule($){let Z=`sched_${_4()}`,Q=$J($),J=this.upsertSpec({externalId:Z,sourcePath:Bq(Z),triggerKind:Q.triggerKind,sourceHash:uV($),parseStatus:"valid",spec:Q});this.initializeHubScheduleNextRun(J.record.specId,$);let W=this.getSpec(J.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?P$(Z):void 0}listHubSchedules($={}){let Z=["source = 'hub-schedule'","trigger_kind IN ('schedule', 'one_off')","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 J=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,J).map((X)=>P$(X))}updateHubSchedule($,Z){this.db.exec("BEGIN IMMEDIATE;");try{let Q=this.getHubSchedule($);if(!Q){this.db.exec("COMMIT;");return}let J=Hq(Q,Z),W=$J(J),X=this.upsertSpec({externalId:$,sourcePath:Q.sourcePath,triggerKind:W.triggerKind,sourceHash:cV(J),parseStatus:"valid",spec:W}),j=Q.enabled!==X.record.enabled;if((Q.triggerKind==="one_off"||X.record.triggerKind==="one_off")&&(X.revisionChanged||j))this.cancelQueuedOneOffRunsForSpec(X.record.specId);if(Z.cronPattern!==void 0||Z.metadata?.[P8]!==void 0||Z.enabled!==void 0)this.initializeHubScheduleNextRun(X.record.specId,J);let V=this.getSpec(X.record.specId);return this.db.exec("COMMIT;"),V}catch(Q){throw this.db.exec("ROLLBACK;"),Q}}initializeHubScheduleNextRun($,Z){if(Z.enabled===!1){this.updateSpecNextRunAt($,void 0);return}if(Z.cronPattern.trim()===L4){let Q=Z.metadata?.[P8];if(typeof Q!=="number"||!Number.isFinite(Q))throw Error("runAt metadata is required for one-time schedules");this.updateSpecNextRunAt($,new Date(Q).toISOString());return}this.initializeScheduleNextRun($)}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;if(Q.triggerKind==="one_off"&&Z==="manual")return this.consumeOneOffWithManualRun(Q);return this.enqueueRun({specId:Q.specId,specRevision:Q.revision,triggerKind:Z,scheduledFor:q0()})}consumeOneOffWithManualRun($){this.db.exec("BEGIN IMMEDIATE;");try{let Z=this.getSpec($.specId);if(!Z||Z.revision!==$.revision||Z.triggerKind!=="one_off"||!Z.enabled||Z.removed||Z.parseStatus!=="valid"){this.db.exec("COMMIT;");return}let Q=q0();this.db.prepare(`UPDATE cron_specs SET next_run_at = NULL, updated_at = ?
135
+ ORDER BY created_at DESC LIMIT ?`).all(...Q,J).map((X)=>P$(X))}updateHubSchedule($,Z){this.db.exec("BEGIN IMMEDIATE;");try{let Q=this.getHubSchedule($);if(!Q){this.db.exec("COMMIT;");return}let J=Kq(Q,Z),W=$J(J),X=this.upsertSpec({externalId:$,sourcePath:Q.sourcePath,triggerKind:W.triggerKind,sourceHash:uV(J),parseStatus:"valid",spec:W}),j=Q.enabled!==X.record.enabled;if((Q.triggerKind==="one_off"||X.record.triggerKind==="one_off")&&(X.revisionChanged||j))this.cancelQueuedOneOffRunsForSpec(X.record.specId);if(Z.cronPattern!==void 0||Z.metadata?.[S8]!==void 0||Z.enabled!==void 0)this.initializeHubScheduleNextRun(X.record.specId,J);let V=this.getSpec(X.record.specId);return this.db.exec("COMMIT;"),V}catch(Q){throw this.db.exec("ROLLBACK;"),Q}}initializeHubScheduleNextRun($,Z){if(Z.enabled===!1){this.updateSpecNextRunAt($,void 0);return}if(Z.cronPattern.trim()===L4){let Q=Z.metadata?.[S8];if(typeof Q!=="number"||!Number.isFinite(Q))throw Error("runAt metadata is required for one-time schedules");this.updateSpecNextRunAt($,new Date(Q).toISOString());return}this.initializeScheduleNextRun($)}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;if(Q.triggerKind==="one_off"&&Z==="manual")return this.consumeOneOffWithManualRun(Q);return this.enqueueRun({specId:Q.specId,specRevision:Q.revision,triggerKind:Z,scheduledFor:q0()})}consumeOneOffWithManualRun($){this.db.exec("BEGIN IMMEDIATE;");try{let Z=this.getSpec($.specId);if(!Z||Z.revision!==$.revision||Z.triggerKind!=="one_off"||!Z.enabled||Z.removed||Z.parseStatus!=="valid"){this.db.exec("COMMIT;");return}let Q=q0();this.db.prepare(`UPDATE cron_specs SET next_run_at = NULL, updated_at = ?
136
136
  WHERE spec_id = ? AND revision = ?`).run(Q,Z.specId,Z.revision);let J=this.db.prepare(`SELECT * FROM cron_runs
137
137
  WHERE spec_id = ? AND spec_revision = ?
138
138
  AND trigger_kind IN ('one_off', 'manual')
@@ -147,7 +147,7 @@ ${JSON.stringify(J,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
147
147
  AND enabled = 1
148
148
  AND removed = 0
149
149
  AND parse_status = 'valid'
150
- ORDER BY created_at ASC`).all($).map((Q)=>P$(Q))}upsertSpec($){let Z=q0(),Q=this.getSpecBySourcePath($.sourcePath),J=$.spec,W={triggerKind:J?.triggerKind??$.triggerKind,title:J?.title??Q?.title??Yq($.sourcePath),prompt:J?.prompt,workspaceRoot:J?.workspaceRoot,scheduleExpr:J?.triggerKind==="schedule"?J.schedule:void 0,timezone:J?.triggerKind==="schedule"?J.timezone:void 0,eventType:J?.triggerKind==="event"?J.event:void 0,filters:J?.triggerKind==="event"?J.filters:void 0,debounceSeconds:J?.triggerKind==="event"?J.debounceSeconds:void 0,dedupeWindowSeconds:J?.triggerKind==="event"?J.dedupeWindowSeconds:void 0,cooldownSeconds:J?.triggerKind==="event"?J.cooldownSeconds:void 0,mode:J?.mode,systemPrompt:J?.systemPrompt,providerId:J?.modelSelection?.providerId,modelId:J?.modelSelection?.modelId,maxIterations:J?.maxIterations,timeoutSeconds:J?.timeoutSeconds,maxParallel:J&&"maxParallel"in J?J.maxParallel:void 0,tools:J?.tools,notesDirectory:J?.notesDirectory,extensions:J?.extensions,source:J?.source,metadata:J?.metadata},X=$.parseStatus==="valid"&&(J?.enabled??!0);if(!Q){let H=`cspec_${_4()}`;this.insertSpecRow(H,$,W,X,Z);let K=this.getSpec(H);if(!K)throw Error("failed to insert cron_spec row");return{record:K,created:!0,revisionChanged:!0}}let Y=Q.sourceHash!==$.sourceHash&&jq(Q,W,Q.enabled,X),V=Y?Q.revision+1:Q.revision;this.updateSpecRow(Q.specId,$,W,X,V,Z);let B=this.getSpec(Q.specId);if(!B)throw Error("failed to reload cron_spec after update");return{record:B,created:!1,revisionChanged:Y}}insertSpecRow($,Z,Q,J,W){let X=Z.spec;this.db.prepare(`INSERT INTO cron_specs (
150
+ ORDER BY created_at ASC`).all($).map((Q)=>P$(Q))}upsertSpec($){let Z=q0(),Q=this.getSpecBySourcePath($.sourcePath),J=$.spec,W={triggerKind:J?.triggerKind??$.triggerKind,title:J?.title??Q?.title??Vq($.sourcePath),prompt:J?.prompt,workspaceRoot:J?.workspaceRoot,scheduleExpr:J?.triggerKind==="schedule"?J.schedule:void 0,timezone:J?.triggerKind==="schedule"?J.timezone:void 0,eventType:J?.triggerKind==="event"?J.event:void 0,filters:J?.triggerKind==="event"?J.filters:void 0,debounceSeconds:J?.triggerKind==="event"?J.debounceSeconds:void 0,dedupeWindowSeconds:J?.triggerKind==="event"?J.dedupeWindowSeconds:void 0,cooldownSeconds:J?.triggerKind==="event"?J.cooldownSeconds:void 0,mode:J?.mode,systemPrompt:J?.systemPrompt,providerId:J?.modelSelection?.providerId,modelId:J?.modelSelection?.modelId,maxIterations:J?.maxIterations,timeoutSeconds:J?.timeoutSeconds,maxParallel:J&&"maxParallel"in J?J.maxParallel:void 0,tools:J?.tools,notesDirectory:J?.notesDirectory,extensions:J?.extensions,source:J?.source,metadata:J?.metadata},X=$.parseStatus==="valid"&&(J?.enabled??!0);if(!Q){let H=`cspec_${_4()}`;this.insertSpecRow(H,$,W,X,Z);let K=this.getSpec(H);if(!K)throw Error("failed to insert cron_spec row");return{record:K,created:!0,revisionChanged:!0}}let Y=Q.sourceHash!==$.sourceHash&&Yq(Q,W,Q.enabled,X),V=Y?Q.revision+1:Q.revision;this.updateSpecRow(Q.specId,$,W,X,V,Z);let B=this.getSpec(Q.specId);if(!B)throw Error("failed to reload cron_spec after update");return{record:B,created:!1,revisionChanged:Y}}insertSpecRow($,Z,Q,J,W){let X=Z.spec;this.db.prepare(`INSERT INTO cron_specs (
151
151
  spec_id, external_id, source_path, trigger_kind,
152
152
  source_mtime_ms, source_hash, parse_status, parse_error,
153
153
  enabled, removed, title, prompt, workspace_root,
@@ -170,7 +170,7 @@ ${JSON.stringify(J,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
170
170
  tools_json = ?, notes_directory = ?, extensions_json = ?, source = ?,
171
171
  tags_json = ?, metadata_json = ?,
172
172
  revision = ?, updated_at = ?
173
- WHERE spec_id = ?`).run(Z.externalId,Z.triggerKind,Z.sourceMtimeMs??null,Z.sourceHash,Z.parseStatus,Z.parseError??null,J?1:0,Q.title??"",Q.prompt??null,Q.workspaceRoot??null,Q.scheduleExpr??null,Q.timezone??null,Q.eventType??null,Q.filters?JSON.stringify(Q.filters):null,Q.debounceSeconds??null,Q.dedupeWindowSeconds??null,Q.cooldownSeconds??null,Q.mode??null,Q.systemPrompt??null,Q.providerId??null,Q.modelId??null,Q.maxIterations??null,Q.timeoutSeconds??null,Q.maxParallel??null,Q.tools?JSON.stringify(Q.tools):null,Q.notesDirectory??null,Q.extensions?JSON.stringify(Q.extensions):null,Q.source??null,j?.tags?JSON.stringify(j.tags):null,j?.metadata?JSON.stringify(j.metadata):null,W,X,$)}markSpecRemoved($){this.db.prepare("UPDATE cron_specs SET removed = 1, enabled = 0, updated_at = ? WHERE spec_id = ?").run(q0(),$)}updateSpecNextRunAt($,Z){this.db.prepare("UPDATE cron_specs SET next_run_at = ?, updated_at = ? WHERE spec_id = ?").run(Z??null,q0(),$)}updateSpecLastRunAt($,Z){this.db.prepare("UPDATE cron_specs SET last_run_at = ?, updated_at = ? WHERE spec_id = ?").run(Z,q0(),$)}updateLastMaterializedRunId($,Z){this.db.prepare("UPDATE cron_specs SET last_materialized_run_id = ?, updated_at = ? WHERE spec_id = ?").run(Z,q0(),$)}initializeScheduleNextRun($){let Z=this.getSpec($);if(!Z||Z.triggerKind!=="schedule"||!Z.enabled||!Z.scheduleExpr){this.updateSpecNextRunAt($,void 0);return}let Q=new Date(L2(Z.scheduleExpr,Date.now(),Z.timezone)).toISOString();this.updateSpecNextRunAt($,Q)}materializeDueScheduleRun($){let Z=$.nowMs,Q=new Date(Z).toISOString();this.db.exec("BEGIN IMMEDIATE;");try{let J=this.db.prepare("SELECT * FROM cron_specs WHERE spec_id = ?").get($.specId);if(!J)return this.db.exec("COMMIT;"),{queued:!1};let W=P$(J);if(W.triggerKind!=="schedule"||!W.enabled||W.removed||W.parseStatus!=="valid"||!W.scheduleExpr)return this.db.exec("COMMIT;"),{queued:!1};let X=W.nextRunAt;if(!X){let V=new Date(L2(W.scheduleExpr,Z,W.timezone)).toISOString();return this.db.prepare("UPDATE cron_specs SET next_run_at = ?, updated_at = ? WHERE spec_id = ?").run(V,Q,W.specId),this.db.exec("COMMIT;"),{queued:!1,nextRunAt:V}}if(new Date(X).getTime()>Z)return this.db.exec("COMMIT;"),{queued:!1,nextRunAt:X};let j=`crun_${_4()}`,Y;try{Y=new Date(L2(W.scheduleExpr,Z,W.timezone)).toISOString()}catch{Y=void 0}return this.db.prepare(`INSERT INTO cron_runs (
173
+ WHERE spec_id = ?`).run(Z.externalId,Z.triggerKind,Z.sourceMtimeMs??null,Z.sourceHash,Z.parseStatus,Z.parseError??null,J?1:0,Q.title??"",Q.prompt??null,Q.workspaceRoot??null,Q.scheduleExpr??null,Q.timezone??null,Q.eventType??null,Q.filters?JSON.stringify(Q.filters):null,Q.debounceSeconds??null,Q.dedupeWindowSeconds??null,Q.cooldownSeconds??null,Q.mode??null,Q.systemPrompt??null,Q.providerId??null,Q.modelId??null,Q.maxIterations??null,Q.timeoutSeconds??null,Q.maxParallel??null,Q.tools?JSON.stringify(Q.tools):null,Q.notesDirectory??null,Q.extensions?JSON.stringify(Q.extensions):null,Q.source??null,j?.tags?JSON.stringify(j.tags):null,j?.metadata?JSON.stringify(j.metadata):null,W,X,$)}markSpecRemoved($){this.db.prepare("UPDATE cron_specs SET removed = 1, enabled = 0, updated_at = ? WHERE spec_id = ?").run(q0(),$)}updateSpecNextRunAt($,Z){this.db.prepare("UPDATE cron_specs SET next_run_at = ?, updated_at = ? WHERE spec_id = ?").run(Z??null,q0(),$)}updateSpecLastRunAt($,Z){this.db.prepare("UPDATE cron_specs SET last_run_at = ?, updated_at = ? WHERE spec_id = ?").run(Z,q0(),$)}updateLastMaterializedRunId($,Z){this.db.prepare("UPDATE cron_specs SET last_materialized_run_id = ?, updated_at = ? WHERE spec_id = ?").run(Z,q0(),$)}initializeScheduleNextRun($){let Z=this.getSpec($);if(!Z||Z.triggerKind!=="schedule"||!Z.enabled||!Z.scheduleExpr){this.updateSpecNextRunAt($,void 0);return}let Q=new Date(A2(Z.scheduleExpr,Date.now(),Z.timezone)).toISOString();this.updateSpecNextRunAt($,Q)}materializeDueScheduleRun($){let Z=$.nowMs,Q=new Date(Z).toISOString();this.db.exec("BEGIN IMMEDIATE;");try{let J=this.db.prepare("SELECT * FROM cron_specs WHERE spec_id = ?").get($.specId);if(!J)return this.db.exec("COMMIT;"),{queued:!1};let W=P$(J);if(W.triggerKind!=="schedule"||!W.enabled||W.removed||W.parseStatus!=="valid"||!W.scheduleExpr)return this.db.exec("COMMIT;"),{queued:!1};let X=W.nextRunAt;if(!X){let V=new Date(A2(W.scheduleExpr,Z,W.timezone)).toISOString();return this.db.prepare("UPDATE cron_specs SET next_run_at = ?, updated_at = ? WHERE spec_id = ?").run(V,Q,W.specId),this.db.exec("COMMIT;"),{queued:!1,nextRunAt:V}}if(new Date(X).getTime()>Z)return this.db.exec("COMMIT;"),{queued:!1,nextRunAt:X};let j=`crun_${_4()}`,Y;try{Y=new Date(A2(W.scheduleExpr,Z,W.timezone)).toISOString()}catch{Y=void 0}return this.db.prepare(`INSERT INTO cron_runs (
174
174
  run_id, spec_id, spec_revision, trigger_kind, status,
175
175
  scheduled_for, trigger_event_id, attempt_count,
176
176
  created_at, updated_at
@@ -185,9 +185,9 @@ ${JSON.stringify(J,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
185
185
  payload_json, attributes_json, processing_status,
186
186
  matched_spec_count, queued_run_count, suppressed_count,
187
187
  error, created_at, updated_at
188
- ) VALUES (?,?,?,?, ?,?,?,?, ?,?,?, ?,?,?, ?,?,?)`).run(W,X,j,$.subject?.trim()||null,Y,J,$.workspaceRoot?.trim()||null,$.dedupeKey?.trim()||null,mV($.payload),mV($.attributes),"received",0,0,0,null,Q,Q).changes??0,B=this.getEventLog(W);if(!B)throw Error("failed to insert cron_event_log row");return{record:B,created:V===1}}getEventLog($){let Z=this.db.prepare("SELECT * FROM cron_event_log WHERE event_id = ?").get($);return Z?vV(Z):void 0}listEventLogs($={}){let Z=[],Q=[];if($.eventType)Z.push("event_type = ?"),Q.push($.eventType);if($.source)Z.push("source = ?"),Q.push($.source);if($.processingStatus)Z.push("processing_status = ?"),Q.push($.processingStatus);let J=Z.length>0?`WHERE ${Z.join(" AND ")}`:"",W=Math.max(1,Math.floor($.limit??200));return this.db.prepare(`SELECT * FROM cron_event_log ${J}
188
+ ) VALUES (?,?,?,?, ?,?,?,?, ?,?,?, ?,?,?, ?,?,?)`).run(W,X,j,$.subject?.trim()||null,Y,J,$.workspaceRoot?.trim()||null,$.dedupeKey?.trim()||null,cV($.payload),cV($.attributes),"received",0,0,0,null,Q,Q).changes??0,B=this.getEventLog(W);if(!B)throw Error("failed to insert cron_event_log row");return{record:B,created:V===1}}getEventLog($){let Z=this.db.prepare("SELECT * FROM cron_event_log WHERE event_id = ?").get($);return Z?mV(Z):void 0}listEventLogs($={}){let Z=[],Q=[];if($.eventType)Z.push("event_type = ?"),Q.push($.eventType);if($.source)Z.push("source = ?"),Q.push($.source);if($.processingStatus)Z.push("processing_status = ?"),Q.push($.processingStatus);let J=Z.length>0?`WHERE ${Z.join(" AND ")}`:"",W=Math.max(1,Math.floor($.limit??200));return this.db.prepare(`SELECT * FROM cron_event_log ${J}
189
189
  ORDER BY received_at DESC, created_at DESC
190
- LIMIT ?`).all(...Q,W).map((j)=>vV(j))}updateEventLogProcessing($,Z){return(this.db.prepare(`UPDATE cron_event_log SET
190
+ LIMIT ?`).all(...Q,W).map((j)=>mV(j))}updateEventLogProcessing($,Z){return(this.db.prepare(`UPDATE cron_event_log SET
191
191
  processing_status = ?,
192
192
  matched_spec_count = COALESCE(?, matched_spec_count),
193
193
  queued_run_count = COALESCE(?, queued_run_count),
@@ -284,9 +284,9 @@ ${JSON.stringify(J,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
284
284
  error = ?,
285
285
  scheduled_for = COALESCE(?, scheduled_for),
286
286
  updated_at = ?
287
- 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,q0(),$)}attachReportPathToRun($,Z){this.db.prepare("UPDATE cron_runs SET report_path = ?, updated_at = ? WHERE run_id = ?").run(Z,q0(),$)}}function GZ($){return $?new Date($).getTime():void 0}function Gq($){let Z=$.metadata?{...$.metadata}:void 0;if(Z)delete Z.__hubScheduleCreatedBy,delete Z.__hubScheduleCwd,delete Z.__hubRuntimeOptions;return Z}function O4($){let Z=$.metadata;return{scheduleId:$.externalId,name:$.title,cronPattern:$.triggerKind==="one_off"?uV:$.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==="act"?"act":"yolo",systemPrompt:$.systemPrompt,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,maxParallel:$.maxParallel??1,createdAt:new Date($.createdAt).getTime(),updatedAt:new Date($.updatedAt).getTime(),nextRunAt:GZ($.nextRunAt),lastRunAt:GZ($.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:Gq($)}}function Fq($){switch($){case"done":return"success";case"cancelled":return"aborted";case"running":return"running";case"queued":return"pending";default:return"failed"}}function ZJ($,Z){return{executionId:$.runId,scheduleId:Z,sessionId:$.sessionId,triggeredAt:new Date($.scheduledFor??$.createdAt).getTime(),startedAt:GZ($.startedAt),endedAt:GZ($.completedAt),status:Fq($.status),errorMessage:$.error}}class S8{store;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new A4({dbPath:$.dbPath}),this.materializer=new H4({store:this.store}),this.runner=new F4({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(this.validateScheduleTiming($.cronPattern,$.metadata,!0),!$.workspaceRoot?.trim())throw Error("workspaceRoot is required for schedules");return O4(this.store.createHubSchedule($))}getSchedule($){let Z=this.store.getHubSchedule($);return Z?O4(Z):void 0}listSchedules($={}){return this.store.listHubSchedules($).map((Z)=>O4(Z))}updateSchedule($,Z){let Q=this.store.getHubSchedule($);if(!Q)return;let J=Z.workspaceRoot!==void 0?Z.workspaceRoot.trim():Q.workspaceRoot,W=Z.enabled??Q.enabled,X=O4(Q);if(this.validateScheduleTiming(Z.cronPattern??X.cronPattern,Z.metadata??X.metadata,W),W&&!J)throw Error("workspaceRoot is required for enabled schedules");let j=this.store.updateHubSchedule($,{...Z,scheduleId:$});return j?O4(j):void 0}validateScheduleTiming($,Z,Q){if($.trim()!==uV){kV($);return}let J=Z?.[Kq];if(typeof J!=="number"||!Number.isFinite(J)||Q&&J<=Date.now())throw Error("runAt must be a future timestamp")}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 ZJ(Q,$)}triggerScheduleNowDetached($){let Z=this.store.enqueueHubScheduleRun($,"manual");if(!Z)return;return this.runner.tick().catch(()=>{return}),ZJ(Z,$)}listScheduleExecutions($){let Z=$.scheduleId?this.store.getHubSchedule($.scheduleId):void 0,Q={specId:Z?.specId,limit:$.limit};return this.store.listRuns(Q).map((W)=>{let X=Z??this.store.getSpec(W.specId);if(!X||X.source!=="hub-schedule")return;return ZJ(W,X.externalId)}).filter((W)=>{if(!W)return!1;return!$.status||W.status===$.status})}getScheduleStats($){let Z=this.listScheduleExecutions({scheduleId:$,limit:1e4});if(Z.length===0)return{totalRuns:0,successRate:0,avgDurationSeconds:0};let Q=0,J=0,W=0,X;for(let j of Z){if(j.status==="success"||j.status==="completed")Q+=1;if(!X&&j.status!=="success"&&j.status!=="completed")X=j;if(j.startedAt&&j.endedAt)W+=j.endedAt-j.startedAt,J+=1}return{totalRuns:Z.length,successRate:Q/Z.length,avgDurationSeconds:J>0?W/J/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,J)=>String(Q.nextRunAt).localeCompare(String(J.nextRunAt))).slice(0,$).map(({spec:Q,nextRunAt:J})=>({scheduleId:Q.externalId,name:Q.title,nextRunAt:J}))}}IZ();import{createSessionId as YT,isHubProtocolCompatible as VT,resolveClineBuildEnv as BT,resolveHubCommandTimeoutMs as HT}from"@cline/shared";var zB={};w(zB,{splitCoreSessionConfig:()=>w4,isSessionNotFoundError:()=>s1,SessionNotFoundError:()=>o1,SESSION_NOT_FOUND_ERROR_CODE:()=>q2});var q2="session_not_found";class o1 extends Error{sessionId;code="session_not_found";constructor($,Z){super(Z??($?`session not found: ${$}`:"session not found"));this.sessionId=$;this.name="SessionNotFoundError"}}function s1($){return $ instanceof o1||typeof $==="object"&&$!==null&&"code"in $&&$.code==="session_not_found"}function w4($){let{hooks:Z,logger:Q,telemetry:J,extensionContext:W,extraTools:X,extensions:j,onTeamEvent:Y,onConsecutiveMistakeLimitReached:V,checkpoint:B,compaction:H,...K}=$,G={};if(Z)G.hooks=Z;if(Q)G.logger=Q;if(J)G.telemetry=J;if(W)G.extensionContext=W;if(X)G.extraTools=X;if(j)G.extensions=j;if(Y)G.onTeamEvent=Y;if(V)G.onConsecutiveMistakeLimitReached=V;if(B?.createCheckpoint)G.checkpoint=B;if(H?.compact)G.compaction=H;let F=Object.keys(G).length>0?G:void 0;return{config:{...K,...B?{checkpoint:{enabled:B.enabled}}:{},...H?{compaction:{enabled:H.enabled,strategy:H.strategy,preserveRecentTokens:H.preserveRecentTokens,summarizer:H.summarizer}}:{}},...F?{localRuntime:F}:{}}}import{spawn as gz}from"node:child_process";import{closeSync as vz,mkdirSync as mz,openSync as cz}from"node:fs";import{basename as uz,dirname as dz,join as pz}from"node:path";import{fileURLToPath as lz}from"node:url";import{CLINE_RUN_AS_HUB_DAEMON_ENV as iz,isHubDaemonProcess as kB,isHubProtocolCompatible as rz,resolveClineBuildEnv as hB,withResolvedClineBuildEnv as nz}from"@cline/shared";import{createHash as Uz,randomBytes as Dz}from"node:crypto";import{existsSync as _z}from"node:fs";import{chmod as Lz,mkdir as YJ,readFile as RB,rm as VJ,writeFile as MB}from"node:fs/promises";import{dirname as EB,join as BJ}from"node:path";import{resolveClineDataDir as z2,resolveClineDir as CB}from"@cline/shared/storage";var g8="0.0.67";var P4={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:g8,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:compaction":"bun --conditions=development run scripts/compact-session.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 Az="CLINE_HUB_DISCOVERY_PATH",Oz="CLINE_HUB_BUILD_ID",NB=30000,qz=15000,zz=100;function Tz($){return $.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function Nz($){return Uz("sha256").update($).digest("hex").slice(0,12)}function fz($){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 xZ(){return Dz(32).toString("hex")}function Rz($){return new Promise((Z)=>setTimeout(Z,$))}function Mz($){return`${$}.lock`}async function Ez($){try{let Z=JSON.parse(await RB(BJ($,"owner.json"),"utf8"));if(typeof Z.pid!=="number"||typeof Z.acquiredAt!=="string")return;return{pid:Z.pid,acquiredAt:Z.acquiredAt}}catch{return}}async function fB($){await VJ($,{recursive:!0,force:!0}).catch(()=>{return})}function gZ(){return process.env[Oz]?.trim()||String(P4.version)}function t1($=process.argv[1]?.trim()||process.cwd()){let Z=`hub-${Nz($)}`,Q=process.env[Az]?.trim()||BJ(z2(),"locks","hub","owners",`${Tz(Z)}.json`);return{ownerId:Z,discoveryPath:Q}}function wB($=`hub-${Date.now().toString(36)}`){return t1($)}async function z0($){try{let Z=JSON.parse(await RB($,"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 vZ($,Z){await YJ(EB($),{recursive:!0}),await VJ($,{force:!0}).catch(()=>{return}),await MB($,`${JSON.stringify(Z,null,2)}
288
- `,{encoding:"utf8",mode:384}),await Lz($,384)}async function i0($){await VJ($,{force:!0}).catch(()=>{return})}async function mZ($,Z){let Q=Mz($);await YJ(EB(Q),{recursive:!0});let J=Date.now()+qz;while(!0)try{await YJ(Q,{recursive:!1}),await MB(BJ(Q,"owner.json"),`${JSON.stringify({pid:process.pid,acquiredAt:new Date().toISOString()},null,2)}
289
- `,"utf8");try{return await Z()}finally{await fB(Q)}}catch(W){if((W instanceof Error&&"code"in W?String(W.code):"")!=="EEXIST")throw W;let j=await Ez(Q),Y=j?Date.now()-Date.parse(j.acquiredAt):NB+1;if(!j||!fz(j.pid)||Y>NB){await fB(Q);continue}if(Date.now()>=J)throw Error(`Timed out waiting for hub startup lock ${Q}`);await Rz(zz)}}async function e1($,Z){try{let Q=await fetch(Z?.authToken?HJ($):cZ($),{headers:Z?.authToken?{authorization:`Bearer ${Z.authToken}`}:void 0});if(!Q.ok)return;let J=await Q.json();if(typeof J.protocolVersion!=="string"||typeof J.host!=="string"||typeof J.port!=="number"||typeof J.url!=="string")return;return{protocolVersion:J.protocolVersion,minClientProtocolVersion:typeof J.minClientProtocolVersion==="string"?J.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof J.maxClientProtocolVersion==="string"?J.maxClientProtocolVersion:void 0,capabilities:Array.isArray(J.capabilities)?J.capabilities.filter((W)=>typeof W==="string"):void 0,coreVersion:typeof J.coreVersion==="string"?J.coreVersion:void 0,buildId:typeof J.buildId==="string"?J.buildId:void 0,host:J.host,port:J.port,url:J.url,hubId:typeof J.hubId==="string"?J.hubId:void 0,authToken:typeof J.authToken==="string"?J.authToken:void 0,pid:typeof J.pid==="number"?J.pid:void 0,startedAt:typeof J.startedAt==="string"?J.startedAt:void 0,updatedAt:typeof J.updatedAt==="string"?J.updatedAt:void 0}}catch{return}}function K1($,Z,Q="/hub"){return new URL(`ws://${$}:${Z}${Q}`).toString()}function cZ($){let Z=new URL($);return Z.protocol=Z.protocol==="wss:"?"https:":"http:",Z.pathname="/health",Z.search="",Z.toString()}function HJ($){let Z=new URL(cZ($));return Z.pathname="/status",Z.toString()}function PB($){return _z($)}import{CLINE_HUB_DEV_PORT as Cz,CLINE_HUB_PORT as wz,resolveClineBuildEnv as Pz}from"@cline/shared";var Sz="CLINE_HUB_HOST",bz="CLINE_HUB_PORT",yz="CLINE_HUB_PATHNAME",KJ="127.0.0.1",GJ=wz,FJ="/hub";function SB($){return Pz($)==="development"?Cz:GJ}function UJ($={}){return($.env??process.env)[Sz]?.trim()||KJ}function v8($={}){let Q=($.env??process.env)[bz]?.trim();if(!Q)return SB($);let J=Number.parseInt(Q,10);if(!Number.isInteger(J)||J<1||J>65535)return SB($);return J}function DJ($={}){return($.env??process.env)[yz]?.trim()||FJ}function R1($={},Z={}){return{host:$.host??UJ(Z),port:$.port??v8(Z),pathname:$.pathname??DJ(Z)}}import{join as kz}from"node:path";var hz="shared:cline",Iz="CLINE_HUB_DISCOVERY_PATH",xz="hub-production";function bB($){let Z=T1($.trim());return t1(`workspace:${Z||$.trim()}`)}function G1($=hz){return t1($)}function M1(){return{ownerId:xz,discoveryPath:process.env[Iz]?.trim()||kz(z2(),"locks","hub","production.json")}}var az=8000,oz=200,sz=3000,tz=100,ez=[100,250,500,1000,2000],$T="--cline-hub-daemon";function ZT($){return[...$.host?["--host",$.host]:[],...typeof $.port==="number"?["--port",String($.port)]:[],...$.pathname?["--pathname",$.pathname]:[]]}function QT(){try{let $=pz(z2(),"logs","hub-daemon.log");return mz(dz($),{recursive:!0}),{fd:cz($,"a"),logPath:$}}catch{return}}function IB(){return hB()==="production"?M1():G1()}function T2($){return rz($).compatible}function yB($,Z,Q){if(!Z||Z.url!==Q)return $;return{...$,authToken:$.authToken??Z.authToken,pid:$.pid??Z.pid}}async function N2($,Z){try{return await e1($,{authToken:Z})}catch{return}}async function JT($,Z){let Q=Date.now()+Z;while(Date.now()<Q){if(!(await N2($))?.url)return!0;await new Promise((W)=>setTimeout(W,tz))}return!1}async function uZ($,Z){if(await b4($.url,$.authToken).catch(()=>!1),$.pid)try{process.kill($.pid,"SIGTERM")}catch{}let Q=await JT($.url,sz);return await i0(Z).catch(()=>{return}),Q}async function S4($,Z){if(T2($))return!0;return uZ($,Z)}async function xB($){if(hB()!=="production")return;let Z=G1();if(Z.discoveryPath===$.discoveryPath)return;let Q=await z0(Z.discoveryPath);if(Q?.url)await uZ(Q,Z.discoveryPath);else await i0(Z.discoveryPath).catch(()=>{return})}function WT(){let $=import.meta.url.endsWith(".ts")?"ts":"js";return lz(new URL(`./entry.${$}`,import.meta.url))}function XT($,Z){let Q=WT(),J=process.execPath?.trim();if(!J)throw Error("unable to resolve runtime executable for hub daemon");let W=uz(J).toLowerCase().includes("bun"),X=Q.startsWith("/$bunfs/"),j=W&&Q.toLowerCase().endsWith(".ts"),Y=X?[$T]:[...j?["--conditions=development"]:[],Q];return{launcher:J,args:[...Y,"--cwd",$,...ZT(Z)],cwd:$,env:{...nz(process.env),CLINE_NO_INTERACTIVE:"1",[iz]:"1"}}}function jT($){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 _J($,Z={}){if(kB())return;let Q=XT($,Z),J=QT();try{gz(Q.launcher,Q.args,{detached:!0,stdio:J?["ignore",J.fd,J.fd]:"ignore",env:Q.env,cwd:Q.cwd,windowsHide:!0}).unref()}finally{if(J)vz(J.fd)}}async function m8($,Z={}){for(let Q=0;;Q++)try{_J($,Z);return}catch(J){let W=ez[Q];if(!jT(J)||W===void 0)throw J;await new Promise((X)=>setTimeout(X,W))}}function dZ($,Z={}){if(kB())return;let Q=IB(),J=R1(Z),W=K1(J.host,J.port,J.pathname),X=Z.allowPortFallback===!0&&J.port!==0;xB(Q).catch(()=>{return}).then(()=>z0(Q.discoveryPath)).then(async(j)=>{let Y=!1;if(j?.url)if(!j.authToken){if(Y=!0,!await uZ(j,Q.discoveryPath)&&!X)return}else{let H=await N2(j.url,j.authToken);if(H?.url&&T2(H)&&await E1(H.url,{authToken:j.authToken}))return;if(H?.url)await S4({...H,authToken:j.authToken},Q.discoveryPath);else await i0(Q.discoveryPath).catch(()=>{return})}let V=await N2(W);if(V?.url){if(T2(V)){if(!X||!Y)return}else if(!await S4({...V,authToken:void 0},Q.discoveryPath)&&!X)return}let B=X?{...J,port:0}:J;await m8($,B)}).catch(()=>{})}async function gB($,Z={}){let Q=IB(),J=Z.host!==void 0||Z.port!==void 0||Z.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),W=R1(Z),X=K1(W.host,W.port,W.pathname),j=(F)=>{if(!J)y$(F.url,F.authToken);return F};await xB(Q).catch(()=>{return});let Y=await z0(Q.discoveryPath),V=!1;if(Y?.url){let F=Y.authToken;if(!F)V=!0,await uZ(Y,Q.discoveryPath);else{let U=await N2(Y.url,F);if(U?.url&&T2(U)&&await E1(U.url,{authToken:F}))return j({url:U.url,authToken:F});if(U?.url)await S4({...U,authToken:F},Q.discoveryPath);else await i0(Q.discoveryPath).catch(()=>{return})}}let B=await N2(X);if(B?.url){let F=yB(B,Y,X);if(T2(B))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 S4(F,Q.discoveryPath)&&Z.allowPortFallback!==!0&&W.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 K=Z.allowPortFallback===!0&&W.port!==0?{...W,port:0}:W;await m8($,K);let G=Date.now()+az;while(Date.now()<G){let F=await z0(Q.discoveryPath);if(F?.url&&F.authToken){let _=await N2(F.url,F.authToken);if(_?.url&&T2(_)&&await E1(_.url,{authToken:F.authToken}))return j({url:_.url,authToken:F.authToken})}let U=await N2(X);if(U?.url&&!T2(U)){let _=yB(U,F,X);if(!await S4(_,Q.discoveryPath)&&Z.allowPortFallback!==!0&&W.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((_)=>setTimeout(_,oz))}throw Error("Timed out waiting for detached hub startup.")}function pZ(){return BT()==="production"?M1():G1()}function KT(){let $=globalThis.WebSocket;if(!$)throw Error("Global WebSocket is not available in this runtime. Node 22+ is required for hub mode.");return $}function dB($){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 dB($.data);return String($)}function GT($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString("utf8");if($ instanceof ArrayBuffer)return Buffer.from($).toString("utf8");return""}function vB($){let Z=$,Q=GT(Z.reason);return new v0("hub_connection_closed",Z.code||Q?`Hub connection closed (code=${Z.code??0}${Q?`, reason=${Q}`:""})`:LJ,{closeCode:Z.code,closeReason:Q||void 0})}function FT($,Z){if($ instanceof v0)return $;if($ instanceof Error)return new v0("hub_connect_failed",$.message);if($&&typeof $==="object"&&"error"in $&&$.error instanceof Error)return new v0("hub_connect_failed",$.error.message);let Q=$&&typeof $==="object"&&"message"in $&&typeof $.message==="string"?$.message.trim():"";if(Q)return new v0("hub_connect_failed",Q);let J=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return new v0("hub_connect_failed",J?`Failed to connect to hub at ${Z.toString()} (${J} event before socket open).`:`Failed to connect to hub at ${Z.toString()}.`)}var UT=8000,DT=200,mB="*",cB=8000,_T="cline-hub-auth.",pB=new Map,lB=new Set,LT=3000,AT=3000,OT=100,LJ="Hub connection closed",qT=250,zT=5000,uB=0.5;class v0 extends Error{code;details;constructor($,Z,Q){super(Z);this.code=$;this.details=Q;this.name="HubTransportError"}}function qJ($){return $ instanceof v0}class c8 extends Error{command;code;constructor($,Z,Q){super(Q);this.command=$;this.code=Z;this.name="HubCommandError"}}function lZ($,Z){return $ instanceof c8&&$.code==="hub_command_timeout"&&(Z===void 0||$.command===Z)}function iB($){let Z=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),Z)return Z;let Q=zJ($.toString());return Q?pB.get(Q):void 0}function TT($){try{let Q=new URL($).hostname.toLowerCase().replace(/^\[|\]$/g,"");return Q==="localhost"||Q==="127.0.0.1"||Q==="::1"}catch{return!1}}function zJ($){if(!TT($))return;let Z=new URL(k$($));return Z.search="",Z.hash="",Z.toString()}function AJ($){let Z=zJ($);return!!Z&&lB.has(Z)}function y$($,Z){let Q=zJ($);if(Q){if(lB.add(Q),Z?.trim())pB.set(Q,Z)}return $}class F1{options;socket;connectPromise;clientId;currentUrl;recoveryPromise;pendingReplies=new Map;listeners=new Set;subscriptionCounts=new Map;reconnectTimer;reconnectAttempt=0;closedByClient=!1;lastCloseError=new v0("hub_connection_closed",LJ);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}isConnected(){return this.socket?.readyState===1&&this.registered}getConnectionError(){return this.isConnected()?null:this.lastCloseError}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()||iB($);$.hash="";let J=new(KT())($.toString(),Z?[`${_T}${Z}`]:void 0);this.socket=J;let W=!1;this.connectPromise=new Promise((X,j)=>{let Y=!1,V=setTimeout(()=>{if(Y)return;Y=!0,W=!0,this.lastCloseError=new v0("hub_connect_timeout",`Timed out connecting to hub after ${cB}ms`),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0;try{J.close()}catch{}j(this.lastCloseError)},cB);J.addEventListener("open",()=>{if(Y)return;Y=!0,clearTimeout(V),X()}),J.addEventListener("error",(B)=>{if(Y)return;Y=!0,clearTimeout(V),this.lastCloseError=FT(B,$),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0,j(this.lastCloseError)}),J.addEventListener("close",(B)=>{if(Y)return;if(Y=!0,clearTimeout(V),!W)this.lastCloseError=vB(B),this.sawSocketClose=!0;this.connectPromise=void 0,this.socket=void 0,j(this.lastCloseError)})}),J.addEventListener("message",(X)=>{this.handleFrame(JSON.parse(dB(X)))}),J.addEventListener("close",(X)=>{if(this.socket!==J)return;if(!W)this.lastCloseError=vB(X),this.sawSocketClose=!0;this.registered=!1;for(let j of this.pendingReplies.values())j.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,J={listener:$,sessionId:Q};return this.listeners.add(J),this.adjustSubscriptionCount(Q,1),()=>{if(!this.listeners.delete(J))return;this.adjustSubscriptionCount(Q,-1)}}async command($,Z,Q,J){let W=0,X=$!=="client.register"&&$!=="client.unregister";while(!0)try{return await this.commandOnce($,Z,Q,J)}catch(j){if(!X||W>=1||!await this.recoverLocalHubTransport(j))throw j;W+=1}}async commandOnce($,Z,Q,J){await this.connect();let W=YT("hubreq_"),X=HT($,J?.timeoutMs),j=new Promise((V,B)=>{let H=X===null?void 0:setTimeout(()=>{if(!this.pendingReplies.delete(W))return;B(new c8($,"hub_command_timeout",`Hub command ${$} timed out after ${X}ms (hub=${this.currentUrl}, requestId=${W}, clientId=${this.clientId}). Check hub-daemon.log for matching command.start/command.slow entries, or run 'cline doctor fix' to restart the hub.`))},X);this.pendingReplies.set(W,{resolve:(K)=>{if(H)clearTimeout(H);V(K)},reject:(K)=>{if(H)clearTimeout(H);B(K)}})});try{this.sendFrame({kind:"command",envelope:{version:"v1",command:$,requestId:W,clientId:this.clientId,sessionId:Q,timeoutMs:X,payload:Z}})}catch(V){throw this.pendingReplies.delete(W),V}let Y=await j;if(!Y.ok){if(Y.error?.code===q2){let V=Q??(typeof Z?.sessionId==="string"?Z.sessionId:void 0);throw new o1(V,Y.error.message)}throw new c8($,Y.error?.code,Y.error?.message??`Hub command ${$} failed`)}return Y}async recoverLocalHubTransport($){if(!AJ(this.currentUrl)||!qJ($))return!1;if(this.recoveryPromise)return await this.recoveryPromise;return this.recoveryPromise=(async()=>{let Z=await f2({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(qT*2**this.reconnectAttempt,zT),Z=Math.round($*(1-uB)+Math.random()*$*uB);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(!AJ(this.currentUrl)){this.reconnectAttempt+=1,this.scheduleReconnect();return}try{let $=await f2({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 v0("hub_connection_closed",LJ),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 v0("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($),J=(this.subscriptionCounts.get(Q)??0)+Z;if(J<=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,J),Z>0&&J===1&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.subscribe",$)}subscriptionKeyForSessionId($){return $??mB}subscriptionSessionIdFromKey($){return $===mB?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 k$($){let Z=new URL($);if(Z.protocol==="http:")Z.protocol="ws:";else if(Z.protocol==="https:")Z.protocol="wss:";return Z.toString()}async function E1($,Z){let Q=new F1({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 OJ($,Z){let Q=k$($),J=await e1(Q,{authToken:Z?.authToken});if(!J)return{status:"unreachable",url:Q};if(!VT(J).compatible)return{status:"protocol_mismatch",url:Q};if(Z?.verifyConnection===!0&&!await E1(Q,{workspaceRoot:Z.workspaceRoot,cwd:Z.cwd,authToken:Z.authToken}))return{status:"unreachable",url:Q};return{status:"compatible",url:Q}}async function NT($){let Z=Date.now()+UT;while(Date.now()<Z){let Q=await z0($.discoveryPath);if(Q?.url){let J=await OJ(Q.url,{verifyConnection:!0,authToken:Q.authToken});if(J.status==="compatible")return y$(J.url,Q.authToken)}await new Promise((J)=>setTimeout(J,DT))}return}async function fT($){let Z=Date.now()+AT;while(Date.now()<Z){if(!(await e1($).catch(()=>{return}))?.url)return!0;await new Promise((J)=>setTimeout(J,OT))}return!1}function RT($,Z){try{return k$($)===k$(Z)}catch{return!1}}function MT($){return($&&typeof $==="object"&&Array.isArray($.sessions)?$.sessions:[]).some((Q)=>{if(!Q||typeof Q!=="object")return!1;let J=Q;if(J.status==="running"||J.status==="idle"||J.status==="pending")return!0;return Array.isArray(J.participants)&&J.participants.length>0})}async function ET($,Z,Q){let J=new F1({url:$,authToken:Z,clientType:"hub-recovery-check",displayName:"hub recovery check",workspaceRoot:Q?.workspaceRoot,cwd:Q?.cwd});try{let W=await J.command("session.list",{limit:500},void 0,{timeoutMs:LT});return!MT(W.payload)}catch{return!1}finally{await J.dispose().catch(()=>{return})}}async function y4($={}){if($.endpoint?.trim()){let W=await OJ($.endpoint);return W.status==="compatible"?W.url:void 0}let Z=pZ(),Q=await z0(Z.discoveryPath);if(!Q?.url)return;let J=await OJ(Q.url,{authToken:Q.authToken});if(J.status==="compatible")return y$(J.url,Q.authToken);if(J.status==="protocol_mismatch")await i0(Z.discoveryPath).catch(()=>{return});return}async function f2($={}){let Z=await y4($);if(Z&&await E1(Z,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return Z;if($.endpoint?.trim())return;let Q=pZ();return await m8($.workspaceRoot??process.cwd()),await NT(Q)}async function b4($,Z){let Q=new URL($),J=Z?.trim()||iB(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:J?{authorization:`Bearer ${J}`}:void 0})).ok}async function TJ($=pZ()){let Z=await z0($.discoveryPath);if(!Z?.url)return!1;try{if(await b4(Z.url,Z.authToken))return!0}catch{}return!1}async function iZ($){if(!AJ($.url))return;let Z=pZ(),Q=await z0(Z.discoveryPath);if(!Q?.url||!RT(Q.url,$.url))return;if(!await ET(Q.url,Q.authToken,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return;if(!await TJ())return;if(!await fT(Q.url))return;return await i0(Z.discoveryPath).catch(()=>{return}),await f2({workspaceRoot:$.workspaceRoot,cwd:$.cwd})}import{resolveClineBuildEnv as CT}from"@cline/shared";function wT($,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 PT="cline-hub-auth.";function ST($){return $.host!==void 0||$.port!==void 0||$.pathname!==void 0}function bT($,Z){let Q=new URL($),J=new URL(Z);return Q.search="",Q.hash="",J.search="",J.hash="",Q.toString()===J.toString()}function rB(){return CT()==="production"?M1():G1()}async function yT($){let Z=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),Z)return Z;let Q=rB(),J=await z0(Q.discoveryPath);if(J?.url&&bT($.toString(),J.url))return J.authToken;return}async function NJ($={}){let Z=R1($);if(!ST($)){let Q=rB(),J=await z0(Q.discoveryPath);if(J?.url)return J.url}return K1(Z.host,Z.port,Z.pathname)}async function rZ($){return await new Promise((Z,Q)=>{(async()=>{let J=new URL($),W=await yT(J);J.hash="";let X=new WebSocket(J.toString(),W?[`${PT}${W}`]:void 0),j=new Map,Y=0;X.addEventListener("open",()=>{Z({send(V){let B=V.requestId??`hub-client-${++Y}`;return new Promise((H,K)=>{j.set(B,{resolve:H,reject:K});let G={kind:"command",envelope:{...V,requestId:B}};X.send(JSON.stringify(G))})},close(){X.close()}})}),X.addEventListener("message",(V)=>{let B=JSON.parse(String(V.data));if(B.kind==="reply"&&B.envelope.requestId){let H=j.get(B.envelope.requestId);if(H)j.delete(B.envelope.requestId),H.resolve(B.envelope)}}),X.addEventListener("close",()=>{for(let V of j.values())V.reject(Error("Hub connection closed"));j.clear()}),X.addEventListener("error",(V)=>{Q(wT(V,$))})})().catch(Q)})}async function nB($){try{return(await rZ($)).close(),!0}catch{return!1}}async function aB($,Z){let Q=await NJ($),J=await rZ(Q);try{return await J.send({version:Z.version??"v1",clientId:Z.clientId??"hub-client",...Z})}finally{J.close()}}function fJ($){return $?JSON.parse(JSON.stringify($)):{}}function nZ($){let Z=$?.session&&typeof $.session==="object"?$.session:void 0;if(!Z)return;let Q=Z.metadata&&typeof Z.metadata==="object"?fJ(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 oB($,Z){return $.error?.message??`hub command failed: ${Z}`}function kT($){let Z=fJ($);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 J=Q?.error&&typeof Q.error==="object"?Q.error:void 0;if(typeof J?.message==="string"&&J.message.trim())return{...Z,error:J.message.trim()};return Z}function sB($){let Z=$?.sessionId;return typeof Z==="string"&&Z.trim()?Z.trim():void 0}function hT($){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 IT($){let Z=fJ($.payload);if($.event==="schedule.execution_completed")return{sessionId:$.sessionId?.trim()||sB(Z)||"",eventType:"schedule.execution.completed",payload:Z};if($.event==="schedule.execution_failed")return{sessionId:$.sessionId?.trim()||sB(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"session.notice":return{sessionId:Q,eventType:"runtime.chat.notice",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:kT($.payload)};case"run.completed":return{sessionId:Q,eventType:"runtime.chat.completed",payload:Z};default:return}}class RJ{options;client;metadataApplied=!1;constructor($){this.options=$;this.client=new F1({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=nZ(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(s1(Q))return;throw Q}return nZ(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(oB(Q,"session.messages"));let J=Q.payload?.messages;return Array.isArray(J)?J:[]}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 J=$.config,W=await this.client.command("session.restore",{sessionId:Z,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...J?{workspaceRoot:J.workspaceRoot,cwd:J.cwd,sessionConfig:{providerId:J.provider,modelId:J.model,apiKey:J.apiKey,cwd:J.cwd??J.workspaceRoot,workspaceRoot:J.workspaceRoot,systemPrompt:J.systemPrompt??"",mode:J.mode??"act",rules:J.rules,maxIterations:J.maxIterations,enableTools:J.enableTools,enableSpawnAgent:J.enableSpawn!==!1,enableAgentTeams:J.enableTeams!==!1,disableMcpSettingsTools:J.disableMcpSettingsTools,missionLogIntervalSteps:J.missionStepInterval,missionLogIntervalMs:J.missionTimeIntervalMs},metadata:{source:J.source??"cli",provider:J.provider,model:J.model,enableTools:J.enableTools,enableSpawn:J.enableSpawn,enableTeams:J.enableTeams,prompt:void 0,interactive:J.interactive!==!1},runtimeOptions:{mode:J.mode,systemPrompt:J.systemPrompt,maxIterations:J.maxIterations,enableTools:J.enableTools,enableSpawn:J.enableSpawn,enableTeams:J.enableTeams,autoApproveTools:J.autoApproveTools,configExtensions:J.configExtensions},modelSelection:{provider:J.provider,model:J.model,apiKey:J.apiKey},toolPolicies:J.toolPolicies}:{}},Z);if(!W.ok)throw Error(oB(W,"session.restore"));let X=nZ(W.payload);if(Q&&!X?.sessionId)throw Error("hub checkpoint restore returned no session id");let j=Array.isArray(W.payload?.messages)?W.payload.messages:void 0,Y=hT(W.payload);return{sessionId:X?.sessionId,startResult:X?.sessionId?{sessionId:X.sessionId,manifestPath:"",messagesPath:X.messagesPath??""}:void 0,...j?{messages:j}:{},checkpoint:Y}}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((J)=>nZ({session:J})).filter((J)=>Boolean(J?.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((W)=>W.trim()).filter(Boolean)),J=this.client.subscribe((W)=>{let X=IT(W);if(!X)return;if(Q.size>0&&!Q.has(X.sessionId))return;Z.onEvent?.(X)});return this.ensureMetadataApplied().catch((W)=>{Z.onError?.(W instanceof Error?W:Error(String(W)))}),J}streamTeamProgress($,Z){let Q=this.client.subscribe((J)=>{if(J.event!=="team.progress"||!J.payload)return;Z.onProjection?.(J.payload)});return this.ensureMetadataApplied().catch((J)=>{Z.onError?.(J instanceof Error?J:Error(String(J)))}),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 MJ{client;constructor($){this.client=new F1({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 Yc}from"@cline/llms";var FA={};w(FA,{LocalRuntimeHost:()=>g1});import{readdirSync as tm}from"node:fs";import{homedir as em}from"node:os";import{isAbsolute as $c,join as nY,resolve as aY}from"node:path";import{captureSdkError as G2,createSessionId as Zc,isLikelyAuthError as Qc,normalizeUserInput as Jc}from"@cline/shared";import{setHomeDirIfUnset as Wc}from"@cline/shared/storage";var EH={};w(EH,{saveProviderOAuthCredentials:()=>M2,resolveProviderApiKeyFromSettings:()=>uJ,loginAndSaveProviderOAuthCredentials:()=>u4,isOAuthProvider:()=>I$,getProviderOAuthCredentialsFromSettings:()=>d4,getProviderAuthStorageId:()=>cJ,getProviderAuthHandler:()=>U0,getPersistedProviderApiKey:()=>r8,formatProviderOAuthApiKey:()=>dJ});import{decodeJwtPayload as ON,getClineEnvironmentConfig as RH}from"@cline/shared";var VH={};w(VH,{startClineDeviceAuth:()=>hJ,refreshClineToken:()=>tZ,loginClineOAuth:()=>k4,getValidClineCredentials:()=>h4,completeClineDeviceAuth:()=>IJ});import{decodeJwtPayload as dT,getClineEnvironmentConfig as wJ}from"@cline/shared";var tB={};w(tB,{setSdkLogger:()=>CJ,sdkDebug:()=>t,hashSecret:()=>P0,getSdkLogger:()=>gT});import{createHash as xT}from"node:crypto";var EJ;function CJ($){EJ=$}function gT(){return EJ}function P0($){if(typeof $!=="string"||$.length===0)return"unset";return xT("sha256").update($).digest("hex").slice(0,8)}function t($){try{EJ?.debug($)}catch{}}C0();var eB={};w(eB,{startLocalOAuthServer:()=>U1});function vT(){let $;return{promise:new Promise((Q)=>{$=Q}),resolve:$}}async function U1($){let Z=await import("node:http"),Q=$.host??"127.0.0.1",J=$.timeoutMs??300000,W=$.successHtml??mT,X=vT(),j=!1,Y=null,V=null,B=null,H=(F)=>{if(j)return;j=!0,X.resolve(F)},K=()=>{if(Y)clearTimeout(Y),Y=null;let F=B;if(B=null,V)V.close(),V.closeAllConnections?.(),V=null;if(F!==null&&$.onClose)Promise.resolve($.onClose({host:Q,port:F})).catch(()=>{})},G=async()=>{return Y=setTimeout(()=>{K(),H(null)},J),X.promise};for(let F of $.ports){let U=Z.createServer((L,O)=>{try{let D=new URL(L.url||"",`http://${Q}:${F}`);if(D.pathname!==$.callbackPath){O.statusCode=404,O.end("Not found");return}let q={url:D,code:D.searchParams.get("code")??void 0,state:D.searchParams.get("state")??void 0,provider:D.searchParams.get("provider")??void 0,error:D.searchParams.get("error")??void 0};if(q.error){O.statusCode=400,O.end(`Authentication failed: ${q.error}`),K(),H(q);return}if(!q.code){O.statusCode=400,O.end("Missing authorization code");return}if($.expectedState&&q.state!==$.expectedState){O.statusCode=400,O.end("State mismatch");return}O.statusCode=200,O.setHeader("Content-Type","text/html; charset=utf-8"),O.end(W),K(),H(q)}catch{O.statusCode=500,O.end("Internal error")}}),_=await new Promise((L)=>{let O=(D)=>{U.off("error",O),L({bound:!1,error:D})};U.once("error",O),U.listen(F,Q,()=>{U.off("error",O),V=U,L({bound:!0})})});if(_.error){if(_.error.code==="EADDRINUSE")continue;throw K(),_.error}if(_.bound){B=F;let L=`http://${Q}:${F}${$.callbackPath}`;if($.onListening)await Promise.resolve($.onListening({host:Q,port:F,callbackUrl:L})).catch(()=>{});return{callbackUrl:L,waitForCallback:G,cancelWait:()=>{K(),H(null)},close:()=>{K(),H(null)}}}}return{callbackUrl:"",waitForCallback:async()=>null,cancelWait:()=>{},close:()=>{}}}var mT=`<!DOCTYPE html>
287
+ 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,q0(),$)}attachReportPathToRun($,Z){this.db.prepare("UPDATE cron_runs SET report_path = ?, updated_at = ? WHERE run_id = ?").run(Z,q0(),$)}}function GZ($){return $?new Date($).getTime():void 0}function Fq($){let Z=$.metadata?{...$.metadata}:void 0;if(Z)delete Z.__hubScheduleCreatedBy,delete Z.__hubScheduleCwd,delete Z.__hubRuntimeOptions;return Z}function O4($){let Z=$.metadata;return{scheduleId:$.externalId,name:$.title,cronPattern:$.triggerKind==="one_off"?dV:$.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==="act"?"act":"yolo",systemPrompt:$.systemPrompt,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,maxParallel:$.maxParallel??1,createdAt:new Date($.createdAt).getTime(),updatedAt:new Date($.updatedAt).getTime(),nextRunAt:GZ($.nextRunAt),lastRunAt:GZ($.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:Fq($)}}function Uq($){switch($){case"done":return"success";case"cancelled":return"aborted";case"running":return"running";case"queued":return"pending";default:return"failed"}}function ZJ($,Z){return{executionId:$.runId,scheduleId:Z,sessionId:$.sessionId,triggeredAt:new Date($.scheduledFor??$.createdAt).getTime(),startedAt:GZ($.startedAt),endedAt:GZ($.completedAt),status:Uq($.status),errorMessage:$.error}}class b8{store;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new A4({dbPath:$.dbPath}),this.materializer=new H4({store:this.store}),this.runner=new F4({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(this.validateScheduleTiming($.cronPattern,$.metadata,!0),!$.workspaceRoot?.trim())throw Error("workspaceRoot is required for schedules");return O4(this.store.createHubSchedule($))}getSchedule($){let Z=this.store.getHubSchedule($);return Z?O4(Z):void 0}listSchedules($={}){return this.store.listHubSchedules($).map((Z)=>O4(Z))}updateSchedule($,Z){let Q=this.store.getHubSchedule($);if(!Q)return;let J=Z.workspaceRoot!==void 0?Z.workspaceRoot.trim():Q.workspaceRoot,W=Z.enabled??Q.enabled,X=O4(Q);if(this.validateScheduleTiming(Z.cronPattern??X.cronPattern,Z.metadata??X.metadata,W),W&&!J)throw Error("workspaceRoot is required for enabled schedules");let j=this.store.updateHubSchedule($,{...Z,scheduleId:$});return j?O4(j):void 0}validateScheduleTiming($,Z,Q){if($.trim()!==dV){hV($);return}let J=Z?.[Gq];if(typeof J!=="number"||!Number.isFinite(J)||Q&&J<=Date.now())throw Error("runAt must be a future timestamp")}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 ZJ(Q,$)}triggerScheduleNowDetached($){let Z=this.store.enqueueHubScheduleRun($,"manual");if(!Z)return;return this.runner.tick().catch(()=>{return}),ZJ(Z,$)}listScheduleExecutions($){let Z=$.scheduleId?this.store.getHubSchedule($.scheduleId):void 0,Q={specId:Z?.specId,limit:$.limit};return this.store.listRuns(Q).map((W)=>{let X=Z??this.store.getSpec(W.specId);if(!X||X.source!=="hub-schedule")return;return ZJ(W,X.externalId)}).filter((W)=>{if(!W)return!1;return!$.status||W.status===$.status})}getScheduleStats($){let Z=this.listScheduleExecutions({scheduleId:$,limit:1e4});if(Z.length===0)return{totalRuns:0,successRate:0,avgDurationSeconds:0};let Q=0,J=0,W=0,X;for(let j of Z){if(j.status==="success"||j.status==="completed")Q+=1;if(!X&&j.status!=="success"&&j.status!=="completed")X=j;if(j.startedAt&&j.endedAt)W+=j.endedAt-j.startedAt,J+=1}return{totalRuns:Z.length,successRate:Q/Z.length,avgDurationSeconds:J>0?W/J/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,J)=>String(Q.nextRunAt).localeCompare(String(J.nextRunAt))).slice(0,$).map(({spec:Q,nextRunAt:J})=>({scheduleId:Q.externalId,name:Q.title,nextRunAt:J}))}}IZ();import{createSessionId as VT,isHubProtocolCompatible as BT,resolveClineBuildEnv as HT,resolveHubCommandTimeoutMs as KT}from"@cline/shared";var TB={};w(TB,{splitCoreSessionConfig:()=>w4,isSessionNotFoundError:()=>s1,SessionNotFoundError:()=>o1,SESSION_NOT_FOUND_ERROR_CODE:()=>z2});var z2="session_not_found";class o1 extends Error{sessionId;code="session_not_found";constructor($,Z){super(Z??($?`session not found: ${$}`:"session not found"));this.sessionId=$;this.name="SessionNotFoundError"}}function s1($){return $ instanceof o1||typeof $==="object"&&$!==null&&"code"in $&&$.code==="session_not_found"}function w4($){let{hooks:Z,logger:Q,telemetry:J,extensionContext:W,extraTools:X,extensions:j,onTeamEvent:Y,onConsecutiveMistakeLimitReached:V,checkpoint:B,compaction:H,...K}=$,G={};if(Z)G.hooks=Z;if(Q)G.logger=Q;if(J)G.telemetry=J;if(W)G.extensionContext=W;if(X)G.extraTools=X;if(j)G.extensions=j;if(Y)G.onTeamEvent=Y;if(V)G.onConsecutiveMistakeLimitReached=V;if(B?.createCheckpoint)G.checkpoint=B;if(H?.compact)G.compaction=H;let F=Object.keys(G).length>0?G:void 0;return{config:{...K,...B?{checkpoint:{enabled:B.enabled}}:{},...H?{compaction:{enabled:H.enabled,strategy:H.strategy,preserveRecentTokens:H.preserveRecentTokens,summarizer:H.summarizer}}:{}},...F?{localRuntime:F}:{}}}import{spawn as vz}from"node:child_process";import{closeSync as mz,mkdirSync as cz,openSync as uz}from"node:fs";import{basename as dz,dirname as pz,join as lz}from"node:path";import{fileURLToPath as iz}from"node:url";import{CLINE_RUN_AS_HUB_DAEMON_ENV as rz,isHubDaemonProcess as hB,isHubProtocolCompatible as nz,resolveClineBuildEnv as IB,withResolvedClineBuildEnv as az}from"@cline/shared";import{createHash as Dz,randomBytes as _z}from"node:crypto";import{existsSync as Lz}from"node:fs";import{chmod as Az,mkdir as YJ,readFile as MB,rm as VJ,writeFile as EB}from"node:fs/promises";import{dirname as CB,join as BJ}from"node:path";import{resolveClineDataDir as T2,resolveClineDir as wB}from"@cline/shared/storage";var v8="0.0.68";var P4={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:v8,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:compaction":"bun --conditions=development run scripts/compact-session.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 Oz="CLINE_HUB_DISCOVERY_PATH",qz="CLINE_HUB_BUILD_ID",fB=30000,zz=15000,Tz=100;function Nz($){return $.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function fz($){return Dz("sha256").update($).digest("hex").slice(0,12)}function Rz($){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 xZ(){return _z(32).toString("hex")}function Mz($){return new Promise((Z)=>setTimeout(Z,$))}function Ez($){return`${$}.lock`}async function Cz($){try{let Z=JSON.parse(await MB(BJ($,"owner.json"),"utf8"));if(typeof Z.pid!=="number"||typeof Z.acquiredAt!=="string")return;return{pid:Z.pid,acquiredAt:Z.acquiredAt}}catch{return}}async function RB($){await VJ($,{recursive:!0,force:!0}).catch(()=>{return})}function gZ(){return process.env[qz]?.trim()||String(P4.version)}function t1($=process.argv[1]?.trim()||process.cwd()){let Z=`hub-${fz($)}`,Q=process.env[Oz]?.trim()||BJ(T2(),"locks","hub","owners",`${Nz(Z)}.json`);return{ownerId:Z,discoveryPath:Q}}function PB($=`hub-${Date.now().toString(36)}`){return t1($)}async function z0($){try{let Z=JSON.parse(await MB($,"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 vZ($,Z){await YJ(CB($),{recursive:!0}),await VJ($,{force:!0}).catch(()=>{return}),await EB($,`${JSON.stringify(Z,null,2)}
288
+ `,{encoding:"utf8",mode:384}),await Az($,384)}async function i0($){await VJ($,{force:!0}).catch(()=>{return})}async function mZ($,Z){let Q=Ez($);await YJ(CB(Q),{recursive:!0});let J=Date.now()+zz;while(!0)try{await YJ(Q,{recursive:!1}),await EB(BJ(Q,"owner.json"),`${JSON.stringify({pid:process.pid,acquiredAt:new Date().toISOString()},null,2)}
289
+ `,"utf8");try{return await Z()}finally{await RB(Q)}}catch(W){if((W instanceof Error&&"code"in W?String(W.code):"")!=="EEXIST")throw W;let j=await Cz(Q),Y=j?Date.now()-Date.parse(j.acquiredAt):fB+1;if(!j||!Rz(j.pid)||Y>fB){await RB(Q);continue}if(Date.now()>=J)throw Error(`Timed out waiting for hub startup lock ${Q}`);await Mz(Tz)}}async function e1($,Z){try{let Q=await fetch(Z?.authToken?HJ($):cZ($),{headers:Z?.authToken?{authorization:`Bearer ${Z.authToken}`}:void 0});if(!Q.ok)return;let J=await Q.json();if(typeof J.protocolVersion!=="string"||typeof J.host!=="string"||typeof J.port!=="number"||typeof J.url!=="string")return;return{protocolVersion:J.protocolVersion,minClientProtocolVersion:typeof J.minClientProtocolVersion==="string"?J.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof J.maxClientProtocolVersion==="string"?J.maxClientProtocolVersion:void 0,capabilities:Array.isArray(J.capabilities)?J.capabilities.filter((W)=>typeof W==="string"):void 0,coreVersion:typeof J.coreVersion==="string"?J.coreVersion:void 0,buildId:typeof J.buildId==="string"?J.buildId:void 0,host:J.host,port:J.port,url:J.url,hubId:typeof J.hubId==="string"?J.hubId:void 0,authToken:typeof J.authToken==="string"?J.authToken:void 0,pid:typeof J.pid==="number"?J.pid:void 0,startedAt:typeof J.startedAt==="string"?J.startedAt:void 0,updatedAt:typeof J.updatedAt==="string"?J.updatedAt:void 0}}catch{return}}function K1($,Z,Q="/hub"){return new URL(`ws://${$}:${Z}${Q}`).toString()}function cZ($){let Z=new URL($);return Z.protocol=Z.protocol==="wss:"?"https:":"http:",Z.pathname="/health",Z.search="",Z.toString()}function HJ($){let Z=new URL(cZ($));return Z.pathname="/status",Z.toString()}function SB($){return Lz($)}import{CLINE_HUB_DEV_PORT as wz,CLINE_HUB_PORT as Pz,resolveClineBuildEnv as Sz}from"@cline/shared";var bz="CLINE_HUB_HOST",yz="CLINE_HUB_PORT",kz="CLINE_HUB_PATHNAME",KJ="127.0.0.1",GJ=Pz,FJ="/hub";function bB($){return Sz($)==="development"?wz:GJ}function UJ($={}){return($.env??process.env)[bz]?.trim()||KJ}function m8($={}){let Q=($.env??process.env)[yz]?.trim();if(!Q)return bB($);let J=Number.parseInt(Q,10);if(!Number.isInteger(J)||J<1||J>65535)return bB($);return J}function DJ($={}){return($.env??process.env)[kz]?.trim()||FJ}function R1($={},Z={}){return{host:$.host??UJ(Z),port:$.port??m8(Z),pathname:$.pathname??DJ(Z)}}import{join as hz}from"node:path";var Iz="shared:cline",xz="CLINE_HUB_DISCOVERY_PATH",gz="hub-production";function yB($){let Z=T1($.trim());return t1(`workspace:${Z||$.trim()}`)}function G1($=Iz){return t1($)}function M1(){return{ownerId:gz,discoveryPath:process.env[xz]?.trim()||hz(T2(),"locks","hub","production.json")}}var oz=8000,sz=200,tz=3000,ez=100,$T=[100,250,500,1000,2000],ZT="--cline-hub-daemon";function QT($){return[...$.host?["--host",$.host]:[],...typeof $.port==="number"?["--port",String($.port)]:[],...$.pathname?["--pathname",$.pathname]:[]]}function JT(){try{let $=lz(T2(),"logs","hub-daemon.log");return cz(pz($),{recursive:!0}),{fd:uz($,"a"),logPath:$}}catch{return}}function xB(){return IB()==="production"?M1():G1()}function N2($){return nz($).compatible}function kB($,Z,Q){if(!Z||Z.url!==Q)return $;return{...$,authToken:$.authToken??Z.authToken,pid:$.pid??Z.pid}}async function f2($,Z){try{return await e1($,{authToken:Z})}catch{return}}async function WT($,Z){let Q=Date.now()+Z;while(Date.now()<Q){if(!(await f2($))?.url)return!0;await new Promise((W)=>setTimeout(W,ez))}return!1}async function uZ($,Z){if(await b4($.url,$.authToken).catch(()=>!1),$.pid)try{process.kill($.pid,"SIGTERM")}catch{}let Q=await WT($.url,tz);return await i0(Z).catch(()=>{return}),Q}async function S4($,Z){if(N2($))return!0;return uZ($,Z)}async function gB($){if(IB()!=="production")return;let Z=G1();if(Z.discoveryPath===$.discoveryPath)return;let Q=await z0(Z.discoveryPath);if(Q?.url)await uZ(Q,Z.discoveryPath);else await i0(Z.discoveryPath).catch(()=>{return})}function XT(){let $=import.meta.url.endsWith(".ts")?"ts":"js";return iz(new URL(`./entry.${$}`,import.meta.url))}function jT($,Z){let Q=XT(),J=process.execPath?.trim();if(!J)throw Error("unable to resolve runtime executable for hub daemon");let W=dz(J).toLowerCase().includes("bun"),X=Q.startsWith("/$bunfs/"),j=W&&Q.toLowerCase().endsWith(".ts"),Y=X?[ZT]:[...j?["--conditions=development"]:[],Q];return{launcher:J,args:[...Y,"--cwd",$,...QT(Z)],cwd:$,env:{...az(process.env),CLINE_NO_INTERACTIVE:"1",[rz]:"1"}}}function YT($){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 _J($,Z={}){if(hB())return;let Q=jT($,Z),J=JT();try{vz(Q.launcher,Q.args,{detached:!0,stdio:J?["ignore",J.fd,J.fd]:"ignore",env:Q.env,cwd:Q.cwd,windowsHide:!0}).unref()}finally{if(J)mz(J.fd)}}async function c8($,Z={}){for(let Q=0;;Q++)try{_J($,Z);return}catch(J){let W=$T[Q];if(!YT(J)||W===void 0)throw J;await new Promise((X)=>setTimeout(X,W))}}function dZ($,Z={}){if(hB())return;let Q=xB(),J=R1(Z),W=K1(J.host,J.port,J.pathname),X=Z.allowPortFallback===!0&&J.port!==0;gB(Q).catch(()=>{return}).then(()=>z0(Q.discoveryPath)).then(async(j)=>{let Y=!1;if(j?.url)if(!j.authToken){if(Y=!0,!await uZ(j,Q.discoveryPath)&&!X)return}else{let H=await f2(j.url,j.authToken);if(H?.url&&N2(H)&&await E1(H.url,{authToken:j.authToken}))return;if(H?.url)await S4({...H,authToken:j.authToken},Q.discoveryPath);else await i0(Q.discoveryPath).catch(()=>{return})}let V=await f2(W);if(V?.url){if(N2(V)){if(!X||!Y)return}else if(!await S4({...V,authToken:void 0},Q.discoveryPath)&&!X)return}let B=X?{...J,port:0}:J;await c8($,B)}).catch(()=>{})}async function vB($,Z={}){let Q=xB(),J=Z.host!==void 0||Z.port!==void 0||Z.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),W=R1(Z),X=K1(W.host,W.port,W.pathname),j=(F)=>{if(!J)y$(F.url,F.authToken);return F};await gB(Q).catch(()=>{return});let Y=await z0(Q.discoveryPath),V=!1;if(Y?.url){let F=Y.authToken;if(!F)V=!0,await uZ(Y,Q.discoveryPath);else{let U=await f2(Y.url,F);if(U?.url&&N2(U)&&await E1(U.url,{authToken:F}))return j({url:U.url,authToken:F});if(U?.url)await S4({...U,authToken:F},Q.discoveryPath);else await i0(Q.discoveryPath).catch(()=>{return})}}let B=await f2(X);if(B?.url){let F=kB(B,Y,X);if(N2(B))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 S4(F,Q.discoveryPath)&&Z.allowPortFallback!==!0&&W.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 K=Z.allowPortFallback===!0&&W.port!==0?{...W,port:0}:W;await c8($,K);let G=Date.now()+oz;while(Date.now()<G){let F=await z0(Q.discoveryPath);if(F?.url&&F.authToken){let _=await f2(F.url,F.authToken);if(_?.url&&N2(_)&&await E1(_.url,{authToken:F.authToken}))return j({url:_.url,authToken:F.authToken})}let U=await f2(X);if(U?.url&&!N2(U)){let _=kB(U,F,X);if(!await S4(_,Q.discoveryPath)&&Z.allowPortFallback!==!0&&W.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((_)=>setTimeout(_,sz))}throw Error("Timed out waiting for detached hub startup.")}function pZ(){return HT()==="production"?M1():G1()}function GT(){let $=globalThis.WebSocket;if(!$)throw Error("Global WebSocket is not available in this runtime. Node 22+ is required for hub mode.");return $}function pB($){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 pB($.data);return String($)}function FT($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString("utf8");if($ instanceof ArrayBuffer)return Buffer.from($).toString("utf8");return""}function mB($){let Z=$,Q=FT(Z.reason);return new v0("hub_connection_closed",Z.code||Q?`Hub connection closed (code=${Z.code??0}${Q?`, reason=${Q}`:""})`:LJ,{closeCode:Z.code,closeReason:Q||void 0})}function UT($,Z){if($ instanceof v0)return $;if($ instanceof Error)return new v0("hub_connect_failed",$.message);if($&&typeof $==="object"&&"error"in $&&$.error instanceof Error)return new v0("hub_connect_failed",$.error.message);let Q=$&&typeof $==="object"&&"message"in $&&typeof $.message==="string"?$.message.trim():"";if(Q)return new v0("hub_connect_failed",Q);let J=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return new v0("hub_connect_failed",J?`Failed to connect to hub at ${Z.toString()} (${J} event before socket open).`:`Failed to connect to hub at ${Z.toString()}.`)}var DT=8000,_T=200,cB="*",uB=8000,LT="cline-hub-auth.",lB=new Map,iB=new Set,AT=3000,OT=3000,qT=100,LJ="Hub connection closed",zT=250,TT=5000,dB=0.5;class v0 extends Error{code;details;constructor($,Z,Q){super(Z);this.code=$;this.details=Q;this.name="HubTransportError"}}function qJ($){return $ instanceof v0}class u8 extends Error{command;code;constructor($,Z,Q){super(Q);this.command=$;this.code=Z;this.name="HubCommandError"}}function lZ($,Z){return $ instanceof u8&&$.code==="hub_command_timeout"&&(Z===void 0||$.command===Z)}function rB($){let Z=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),Z)return Z;let Q=zJ($.toString());return Q?lB.get(Q):void 0}function NT($){try{let Q=new URL($).hostname.toLowerCase().replace(/^\[|\]$/g,"");return Q==="localhost"||Q==="127.0.0.1"||Q==="::1"}catch{return!1}}function zJ($){if(!NT($))return;let Z=new URL(k$($));return Z.search="",Z.hash="",Z.toString()}function AJ($){let Z=zJ($);return!!Z&&iB.has(Z)}function y$($,Z){let Q=zJ($);if(Q){if(iB.add(Q),Z?.trim())lB.set(Q,Z)}return $}class F1{options;socket;connectPromise;clientId;currentUrl;recoveryPromise;pendingReplies=new Map;listeners=new Set;subscriptionCounts=new Map;reconnectTimer;reconnectAttempt=0;closedByClient=!1;lastCloseError=new v0("hub_connection_closed",LJ);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}isConnected(){return this.socket?.readyState===1&&this.registered}getConnectionError(){return this.isConnected()?null:this.lastCloseError}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()||rB($);$.hash="";let J=new(GT())($.toString(),Z?[`${LT}${Z}`]:void 0);this.socket=J;let W=!1;this.connectPromise=new Promise((X,j)=>{let Y=!1,V=setTimeout(()=>{if(Y)return;Y=!0,W=!0,this.lastCloseError=new v0("hub_connect_timeout",`Timed out connecting to hub after ${uB}ms`),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0;try{J.close()}catch{}j(this.lastCloseError)},uB);J.addEventListener("open",()=>{if(Y)return;Y=!0,clearTimeout(V),X()}),J.addEventListener("error",(B)=>{if(Y)return;Y=!0,clearTimeout(V),this.lastCloseError=UT(B,$),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0,j(this.lastCloseError)}),J.addEventListener("close",(B)=>{if(Y)return;if(Y=!0,clearTimeout(V),!W)this.lastCloseError=mB(B),this.sawSocketClose=!0;this.connectPromise=void 0,this.socket=void 0,j(this.lastCloseError)})}),J.addEventListener("message",(X)=>{this.handleFrame(JSON.parse(pB(X)))}),J.addEventListener("close",(X)=>{if(this.socket!==J)return;if(!W)this.lastCloseError=mB(X),this.sawSocketClose=!0;this.registered=!1;for(let j of this.pendingReplies.values())j.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,J={listener:$,sessionId:Q};return this.listeners.add(J),this.adjustSubscriptionCount(Q,1),()=>{if(!this.listeners.delete(J))return;this.adjustSubscriptionCount(Q,-1)}}async command($,Z,Q,J){let W=0,X=$!=="client.register"&&$!=="client.unregister";while(!0)try{return await this.commandOnce($,Z,Q,J)}catch(j){if(!X||W>=1||!await this.recoverLocalHubTransport(j))throw j;W+=1}}async commandOnce($,Z,Q,J){await this.connect();let W=VT("hubreq_"),X=KT($,J?.timeoutMs),j=new Promise((V,B)=>{let H=X===null?void 0:setTimeout(()=>{if(!this.pendingReplies.delete(W))return;B(new u8($,"hub_command_timeout",`Hub command ${$} timed out after ${X}ms (hub=${this.currentUrl}, requestId=${W}, clientId=${this.clientId}). Check hub-daemon.log for matching command.start/command.slow entries, or run 'cline doctor fix' to restart the hub.`))},X);this.pendingReplies.set(W,{resolve:(K)=>{if(H)clearTimeout(H);V(K)},reject:(K)=>{if(H)clearTimeout(H);B(K)}})});try{this.sendFrame({kind:"command",envelope:{version:"v1",command:$,requestId:W,clientId:this.clientId,sessionId:Q,timeoutMs:X,payload:Z}})}catch(V){throw this.pendingReplies.delete(W),V}let Y=await j;if(!Y.ok){if(Y.error?.code===z2){let V=Q??(typeof Z?.sessionId==="string"?Z.sessionId:void 0);throw new o1(V,Y.error.message)}throw new u8($,Y.error?.code,Y.error?.message??`Hub command ${$} failed`)}return Y}async recoverLocalHubTransport($){if(!AJ(this.currentUrl)||!qJ($))return!1;if(this.recoveryPromise)return await this.recoveryPromise;return this.recoveryPromise=(async()=>{let Z=await R2({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(zT*2**this.reconnectAttempt,TT),Z=Math.round($*(1-dB)+Math.random()*$*dB);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(!AJ(this.currentUrl)){this.reconnectAttempt+=1,this.scheduleReconnect();return}try{let $=await R2({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 v0("hub_connection_closed",LJ),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 v0("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($),J=(this.subscriptionCounts.get(Q)??0)+Z;if(J<=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,J),Z>0&&J===1&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.subscribe",$)}subscriptionKeyForSessionId($){return $??cB}subscriptionSessionIdFromKey($){return $===cB?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 k$($){let Z=new URL($);if(Z.protocol==="http:")Z.protocol="ws:";else if(Z.protocol==="https:")Z.protocol="wss:";return Z.toString()}async function E1($,Z){let Q=new F1({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 OJ($,Z){let Q=k$($),J=await e1(Q,{authToken:Z?.authToken});if(!J)return{status:"unreachable",url:Q};if(!BT(J).compatible)return{status:"protocol_mismatch",url:Q};if(Z?.verifyConnection===!0&&!await E1(Q,{workspaceRoot:Z.workspaceRoot,cwd:Z.cwd,authToken:Z.authToken}))return{status:"unreachable",url:Q};return{status:"compatible",url:Q}}async function fT($){let Z=Date.now()+DT;while(Date.now()<Z){let Q=await z0($.discoveryPath);if(Q?.url){let J=await OJ(Q.url,{verifyConnection:!0,authToken:Q.authToken});if(J.status==="compatible")return y$(J.url,Q.authToken)}await new Promise((J)=>setTimeout(J,_T))}return}async function RT($){let Z=Date.now()+OT;while(Date.now()<Z){if(!(await e1($).catch(()=>{return}))?.url)return!0;await new Promise((J)=>setTimeout(J,qT))}return!1}function MT($,Z){try{return k$($)===k$(Z)}catch{return!1}}function ET($){return($&&typeof $==="object"&&Array.isArray($.sessions)?$.sessions:[]).some((Q)=>{if(!Q||typeof Q!=="object")return!1;let J=Q;if(J.status==="running"||J.status==="idle"||J.status==="pending")return!0;return Array.isArray(J.participants)&&J.participants.length>0})}async function CT($,Z,Q){let J=new F1({url:$,authToken:Z,clientType:"hub-recovery-check",displayName:"hub recovery check",workspaceRoot:Q?.workspaceRoot,cwd:Q?.cwd});try{let W=await J.command("session.list",{limit:500},void 0,{timeoutMs:AT});return!ET(W.payload)}catch{return!1}finally{await J.dispose().catch(()=>{return})}}async function y4($={}){if($.endpoint?.trim()){let W=await OJ($.endpoint);return W.status==="compatible"?W.url:void 0}let Z=pZ(),Q=await z0(Z.discoveryPath);if(!Q?.url)return;let J=await OJ(Q.url,{authToken:Q.authToken});if(J.status==="compatible")return y$(J.url,Q.authToken);if(J.status==="protocol_mismatch")await i0(Z.discoveryPath).catch(()=>{return});return}async function R2($={}){let Z=await y4($);if(Z&&await E1(Z,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return Z;if($.endpoint?.trim())return;let Q=pZ();return await c8($.workspaceRoot??process.cwd()),await fT(Q)}async function b4($,Z){let Q=new URL($),J=Z?.trim()||rB(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:J?{authorization:`Bearer ${J}`}:void 0})).ok}async function TJ($=pZ()){let Z=await z0($.discoveryPath);if(!Z?.url)return!1;try{if(await b4(Z.url,Z.authToken))return!0}catch{}return!1}async function iZ($){if(!AJ($.url))return;let Z=pZ(),Q=await z0(Z.discoveryPath);if(!Q?.url||!MT(Q.url,$.url))return;if(!await CT(Q.url,Q.authToken,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return;if(!await TJ())return;if(!await RT(Q.url))return;return await i0(Z.discoveryPath).catch(()=>{return}),await R2({workspaceRoot:$.workspaceRoot,cwd:$.cwd})}import{resolveClineBuildEnv as wT}from"@cline/shared";function PT($,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 ST="cline-hub-auth.";function bT($){return $.host!==void 0||$.port!==void 0||$.pathname!==void 0}function yT($,Z){let Q=new URL($),J=new URL(Z);return Q.search="",Q.hash="",J.search="",J.hash="",Q.toString()===J.toString()}function nB(){return wT()==="production"?M1():G1()}async function kT($){let Z=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),Z)return Z;let Q=nB(),J=await z0(Q.discoveryPath);if(J?.url&&yT($.toString(),J.url))return J.authToken;return}async function NJ($={}){let Z=R1($);if(!bT($)){let Q=nB(),J=await z0(Q.discoveryPath);if(J?.url)return J.url}return K1(Z.host,Z.port,Z.pathname)}async function rZ($){return await new Promise((Z,Q)=>{(async()=>{let J=new URL($),W=await kT(J);J.hash="";let X=new WebSocket(J.toString(),W?[`${ST}${W}`]:void 0),j=new Map,Y=0;X.addEventListener("open",()=>{Z({send(V){let B=V.requestId??`hub-client-${++Y}`;return new Promise((H,K)=>{j.set(B,{resolve:H,reject:K});let G={kind:"command",envelope:{...V,requestId:B}};X.send(JSON.stringify(G))})},close(){X.close()}})}),X.addEventListener("message",(V)=>{let B=JSON.parse(String(V.data));if(B.kind==="reply"&&B.envelope.requestId){let H=j.get(B.envelope.requestId);if(H)j.delete(B.envelope.requestId),H.resolve(B.envelope)}}),X.addEventListener("close",()=>{for(let V of j.values())V.reject(Error("Hub connection closed"));j.clear()}),X.addEventListener("error",(V)=>{Q(PT(V,$))})})().catch(Q)})}async function aB($){try{return(await rZ($)).close(),!0}catch{return!1}}async function oB($,Z){let Q=await NJ($),J=await rZ(Q);try{return await J.send({version:Z.version??"v1",clientId:Z.clientId??"hub-client",...Z})}finally{J.close()}}function fJ($){return $?JSON.parse(JSON.stringify($)):{}}function nZ($){let Z=$?.session&&typeof $.session==="object"?$.session:void 0;if(!Z)return;let Q=Z.metadata&&typeof Z.metadata==="object"?fJ(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 sB($,Z){return $.error?.message??`hub command failed: ${Z}`}function hT($){let Z=fJ($);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 J=Q?.error&&typeof Q.error==="object"?Q.error:void 0;if(typeof J?.message==="string"&&J.message.trim())return{...Z,error:J.message.trim()};return Z}function tB($){let Z=$?.sessionId;return typeof Z==="string"&&Z.trim()?Z.trim():void 0}function IT($){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 xT($){let Z=fJ($.payload);if($.event==="schedule.execution_completed")return{sessionId:$.sessionId?.trim()||tB(Z)||"",eventType:"schedule.execution.completed",payload:Z};if($.event==="schedule.execution_failed")return{sessionId:$.sessionId?.trim()||tB(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"session.notice":return{sessionId:Q,eventType:"runtime.chat.notice",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:hT($.payload)};case"run.completed":return{sessionId:Q,eventType:"runtime.chat.completed",payload:Z};default:return}}class RJ{options;client;metadataApplied=!1;constructor($){this.options=$;this.client=new F1({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=nZ(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(s1(Q))return;throw Q}return nZ(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(sB(Q,"session.messages"));let J=Q.payload?.messages;return Array.isArray(J)?J:[]}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 J=$.config,W=await this.client.command("session.restore",{sessionId:Z,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...J?{workspaceRoot:J.workspaceRoot,cwd:J.cwd,sessionConfig:{providerId:J.provider,modelId:J.model,apiKey:J.apiKey,cwd:J.cwd??J.workspaceRoot,workspaceRoot:J.workspaceRoot,systemPrompt:J.systemPrompt??"",mode:J.mode??"act",rules:J.rules,maxIterations:J.maxIterations,enableTools:J.enableTools,enableSpawnAgent:J.enableSpawn!==!1,enableAgentTeams:J.enableTeams!==!1,disableMcpSettingsTools:J.disableMcpSettingsTools,missionLogIntervalSteps:J.missionStepInterval,missionLogIntervalMs:J.missionTimeIntervalMs},metadata:{source:J.source??"cli",provider:J.provider,model:J.model,enableTools:J.enableTools,enableSpawn:J.enableSpawn,enableTeams:J.enableTeams,prompt:void 0,interactive:J.interactive!==!1},runtimeOptions:{mode:J.mode,systemPrompt:J.systemPrompt,maxIterations:J.maxIterations,enableTools:J.enableTools,enableSpawn:J.enableSpawn,enableTeams:J.enableTeams,autoApproveTools:J.autoApproveTools,configExtensions:J.configExtensions},modelSelection:{provider:J.provider,model:J.model,apiKey:J.apiKey},toolPolicies:J.toolPolicies}:{}},Z);if(!W.ok)throw Error(sB(W,"session.restore"));let X=nZ(W.payload);if(Q&&!X?.sessionId)throw Error("hub checkpoint restore returned no session id");let j=Array.isArray(W.payload?.messages)?W.payload.messages:void 0,Y=IT(W.payload);return{sessionId:X?.sessionId,startResult:X?.sessionId?{sessionId:X.sessionId,manifestPath:"",messagesPath:X.messagesPath??""}:void 0,...j?{messages:j}:{},checkpoint:Y}}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((J)=>nZ({session:J})).filter((J)=>Boolean(J?.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((W)=>W.trim()).filter(Boolean)),J=this.client.subscribe((W)=>{let X=xT(W);if(!X)return;if(Q.size>0&&!Q.has(X.sessionId))return;Z.onEvent?.(X)});return this.ensureMetadataApplied().catch((W)=>{Z.onError?.(W instanceof Error?W:Error(String(W)))}),J}streamTeamProgress($,Z){let Q=this.client.subscribe((J)=>{if(J.event!=="team.progress"||!J.payload)return;Z.onProjection?.(J.payload)});return this.ensureMetadataApplied().catch((J)=>{Z.onError?.(J instanceof Error?J:Error(String(J)))}),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 MJ{client;constructor($){this.client=new F1({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 Fc}from"@cline/llms";var UA={};w(UA,{LocalRuntimeHost:()=>g1});import{readdirSync as Wc}from"node:fs";import{homedir as Xc}from"node:os";import{isAbsolute as jc,join as aY,resolve as oY}from"node:path";import{captureSdkError as F2,createSessionId as Yc,isLikelyAuthError as Vc,normalizeUserInput as Bc}from"@cline/shared";import{setHomeDirIfUnset as Hc}from"@cline/shared/storage";var CH={};w(CH,{saveProviderOAuthCredentials:()=>E2,resolveProviderApiKeyFromSettings:()=>uJ,loginAndSaveProviderOAuthCredentials:()=>u4,isOAuthProvider:()=>I$,getProviderOAuthCredentialsFromSettings:()=>d4,getProviderAuthStorageId:()=>cJ,getProviderAuthHandler:()=>U0,getPersistedProviderApiKey:()=>n8,formatProviderOAuthApiKey:()=>dJ});import{decodeJwtPayload as qN,getClineEnvironmentConfig as MH}from"@cline/shared";var BH={};w(BH,{startClineDeviceAuth:()=>hJ,refreshClineToken:()=>tZ,loginClineOAuth:()=>k4,getValidClineCredentials:()=>h4,completeClineDeviceAuth:()=>IJ});import{decodeJwtPayload as pT,getClineEnvironmentConfig as wJ}from"@cline/shared";var eB={};w(eB,{setSdkLogger:()=>CJ,sdkDebug:()=>t,hashSecret:()=>P0,getSdkLogger:()=>vT});import{createHash as gT}from"node:crypto";var EJ;function CJ($){EJ=$}function vT(){return EJ}function P0($){if(typeof $!=="string"||$.length===0)return"unset";return gT("sha256").update($).digest("hex").slice(0,8)}function t($){try{EJ?.debug($)}catch{}}C0();var $H={};w($H,{startLocalOAuthServer:()=>U1});function mT(){let $;return{promise:new Promise((Q)=>{$=Q}),resolve:$}}async function U1($){let Z=await import("node:http"),Q=$.host??"127.0.0.1",J=$.timeoutMs??300000,W=$.successHtml??cT,X=mT(),j=!1,Y=null,V=null,B=null,H=(F)=>{if(j)return;j=!0,X.resolve(F)},K=()=>{if(Y)clearTimeout(Y),Y=null;let F=B;if(B=null,V)V.close(),V.closeAllConnections?.(),V=null;if(F!==null&&$.onClose)Promise.resolve($.onClose({host:Q,port:F})).catch(()=>{})},G=async()=>{return Y=setTimeout(()=>{K(),H(null)},J),X.promise};for(let F of $.ports){let U=Z.createServer((L,O)=>{try{let D=new URL(L.url||"",`http://${Q}:${F}`);if(D.pathname!==$.callbackPath){O.statusCode=404,O.end("Not found");return}let q={url:D,code:D.searchParams.get("code")??void 0,state:D.searchParams.get("state")??void 0,provider:D.searchParams.get("provider")??void 0,error:D.searchParams.get("error")??void 0};if(q.error){O.statusCode=400,O.end(`Authentication failed: ${q.error}`),K(),H(q);return}if(!q.code){O.statusCode=400,O.end("Missing authorization code");return}if($.expectedState&&q.state!==$.expectedState){O.statusCode=400,O.end("State mismatch");return}O.statusCode=200,O.setHeader("Content-Type","text/html; charset=utf-8"),O.end(W),K(),H(q)}catch{O.statusCode=500,O.end("Internal error")}}),_=await new Promise((L)=>{let O=(D)=>{U.off("error",O),L({bound:!1,error:D})};U.once("error",O),U.listen(F,Q,()=>{U.off("error",O),V=U,L({bound:!0})})});if(_.error){if(_.error.code==="EADDRINUSE")continue;throw K(),_.error}if(_.bound){B=F;let L=`http://${Q}:${F}${$.callbackPath}`;if($.onListening)await Promise.resolve($.onListening({host:Q,port:F,callbackUrl:L})).catch(()=>{});return{callbackUrl:L,waitForCallback:G,cancelWait:()=>{K(),H(null)},close:()=>{K(),H(null)}}}}return{callbackUrl:"",waitForCallback:async()=>null,cancelWait:()=>{},close:()=>{}}}var cT=`<!DOCTYPE html>
290
290
  <html lang="en">
291
291
  <head>
292
292
  <meta charset="utf-8">
@@ -327,21 +327,21 @@ ${JSON.stringify(J,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
327
327
  </div>
328
328
  <script>setTimeout(() => window.close(), 3000);</script>
329
329
  </body>
330
- </html>`;function $H($){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 cT($){let Q=new TextEncoder().encode($),J=await crypto.subtle.digest("SHA-256",Q);return new Uint8Array(J)}function uT($=32){let Z=new Uint8Array($);return crypto.getRandomValues(Z),$H(Z)}async function aZ(){let $=uT(),Z=$H(await cT($));return{verifier:$,challenge:Z}}function oZ($){return $.endsWith("/")?$.slice(0,-1):$}function R2($,Z){return new URL(Z,`${oZ($)}/`).toString()}function u8($,Z={}){let Q=$.trim();if(!Q)return{};try{let J=new URL(Q);return{code:J.searchParams.get("code")??void 0,state:J.searchParams.get("state")??void 0,provider:Z.includeProvider?J.searchParams.get("provider")??void 0:void 0}}catch{}if(Z.allowHashCodeState&&Q.includes("#")){let[J,W]=Q.split("#",2);return{code:J||void 0,state:W||void 0}}if(Q.includes("code=")){let J=new URLSearchParams(Q);return{code:J.get("code")??void 0,state:J.get("state")??void 0,provider:Z.includeProvider?J.get("provider")??void 0:void 0}}return{code:Q}}function d8($){try{let Z=JSON.parse($),Q=Z.error,J=typeof Q==="string"?Q:Q&&typeof Q==="object"&&typeof Q.type==="string"?Q.type:void 0,W=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:J,message:W}}catch{return{}}}function p8($,Z){return Date.now()>=$.expires-Z}async function l8($){if(!$.onManualCodeInput){let X=await $.waitForCallback();return{code:X?.code,state:X?.state,provider:X?.provider,error:X?.error}}let Z,Q,J=$.onManualCodeInput().then((X)=>{Z=X,$.cancelWait()}).catch((X)=>{Q=X instanceof Error?X:Error(String(X)),$.cancelWait()}),W=await $.waitForCallback();if(Q)throw Q;if(W?.code||W?.error)return{code:W.code,state:W.state,provider:W.provider,error:W.error};if(Z)return u8(Z,$.parseOptions);if(await J,Q)throw Q;if(Z)return u8(Z,$.parseOptions);return{}}var sZ={authorize:"/api/v1/auth/authorize",token:"/api/v1/auth/token",register:"/api/v1/auth/register",refresh:"/api/v1/auth/refresh"},WH={deviceAuthorization:"/user_management/authorize/device",authenticate:"/user_management/authenticate"},PJ="https://api.workos.com",pT="/auth",ZH=Array.from({length:11},($,Z)=>48801+Z),lT=300000,iT=30000,i8=30000,rT=300,nT=5;class r0 extends Error{status;errorCode;requestId;constructor($,Z){super($);this.name="ClineOAuthTokenError",this.status=Z?.status,this.errorCode=Z?.errorCode,this.requestId=Z?.requestId}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 aT($){let Z=Date.parse($);if(Number.isNaN(Z))throw Error(`Invalid expiresAt value: ${$}`);return Z}function SJ($,Z,Q={}){let J=$.userInfo.clineUserId??Q.accountId,W=$.refreshToken??Q.refresh;if(!W)throw Error("Token response did not include a refresh token");let X={...Q.metadata??{},provider:Z,tokenType:$.tokenType,userInfo:$.userInfo};return delete X.startedAt,{access:$.accessToken,refresh:W,expires:aT($.expiresAt),accountId:J??void 0,email:$.userInfo.email||Q.email,metadata:X}}async function bJ($){if(!$)return{};return typeof $==="function"?await $():$}function QH($,Z){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return Z;return Math.floor($)}function oT($){return typeof $==="string"&&$.trim()||void 0}function sT($){let Z=dT($);if(!Z)return{};return{sessionId:oT(Z.sid)}}function tT($){let Z={},Q=$.metadata?.sessionStartedAtMs;if(typeof Q==="number"&&Number.isFinite(Q)&&Q>0)Z.sessionDurationMs=Date.now()-Q;return Z}function yJ($){return{...sT($.access),...tT($)}}async function JH($){await new Promise((Z)=>setTimeout(Z,$))}function kJ($,Z){if(!$.success||!$.data?.accessToken)throw Error(Z);return $.data}async function XH($,Z){let Q=await fetch(R2(PJ,WH.deviceAuthorization),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({client_id:$}),signal:AbortSignal.timeout(Z?.requestTimeoutMs??i8)}),J=await Q.json().catch(()=>({}));if(!Q.ok)throw new r0(`Device authorization failed: ${Q.status}${J.error_description?` - ${J.error_description}`:""}`,{status:Q.status,errorCode:J.error,requestId:Q.headers.get("x-request-id")??void 0});if(!J.device_code||!J.user_code||!J.verification_uri)throw Error("Invalid WorkOS device authorization response");return{deviceCode:J.device_code,userCode:J.user_code,verificationUri:J.verification_uri,verificationUriComplete:J.verification_uri_complete,expiresInSeconds:QH(J.expires_in,rT),pollIntervalSeconds:QH(J.interval,nT)}}async function jH($){let Z=Date.now()+$.expiresInSeconds*1000,Q=Math.max(1,$.initialPollIntervalSeconds);while(Date.now()<=Z){let J=await fetch(R2($.workosApiBaseUrl,WH.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)}),W=await J.json().catch(()=>({}));if(J.ok){if(!W.access_token||!W.refresh_token)throw Error("Invalid WorkOS token response");return{accessToken:W.access_token,refreshToken:W.refresh_token,tokenType:W.token_type??"Bearer"}}switch(W.error){case"authorization_pending":{await JH(Q*1000);break}case"slow_down":{Q+=1,await JH(Q*1000);break}case"access_denied":case"expired_token":case"invalid_grant":throw new r0(W.error_description||"WorkOS authorization failed",{status:J.status,errorCode:W.error,requestId:J.headers.get("x-request-id")??void 0});default:throw new r0(`WorkOS token polling failed: ${J.status}${W.error_description?` - ${W.error_description}`:""}`,{status:J.status,errorCode:W.error,requestId:J.headers.get("x-request-id")??void 0})}$.onProgress?.("Waiting for browser authentication confirmation...")}throw Error("WorkOS device authorization timed out")}async function YH($,Z,Q){let J={accessToken:$.accessToken,refreshToken:$.refreshToken},W=await fetch(R2(Z.apiBaseUrl,sZ.register),{method:"POST",headers:{"Content-Type":"application/json",...await bJ(Z.headers)},body:JSON.stringify(J),signal:AbortSignal.timeout(Z.requestTimeoutMs??i8)});if(!W.ok){let j=await W.text().catch(()=>""),Y=d8(j);throw new r0(`Token registration failed: ${W.status}${Y.message?` - ${Y.message}`:""}`,{status:W.status,errorCode:Y.code,requestId:W.headers.get("x-request-id")??void 0})}let X=await W.json();return SJ(kJ(X,"Invalid token exchange response"),Q??Z.provider,{metadata:{sessionStartedAtMs:Date.now()}})}async function eT($,Z,Q,J){let W={grant_type:"authorization_code",code:$,client_type:"extension",redirect_uri:Z,provider:J??Q.provider},X=await fetch(R2(Q.apiBaseUrl,sZ.token),{method:"POST",headers:{"Content-Type":"application/json",...await bJ(Q.headers)},body:JSON.stringify(W),signal:AbortSignal.timeout(Q.requestTimeoutMs??i8)});if(!X.ok){let Y=await X.text().catch(()=>""),V=d8(Y);throw new r0(`Token exchange failed: ${X.status}${V.message?` - ${V.message}`:""}`,{status:X.status,errorCode:V.code,requestId:X.headers.get("x-request-id")??void 0})}let j=await X.json();return SJ(kJ(j,"Invalid token exchange response"),J??Q.provider,{metadata:{sessionStartedAtMs:Date.now()}})}async function k4($){p1($.telemetry,$.provider??"cline");let Z=$.useWorkOSDeviceAuth??!0,Q=$.callbackPorts?.length?$.callbackPorts:ZH,J=$.callbackPath??pT,W=Z?null:await U1({ports:Q,callbackPath:J,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),X=W?.callbackUrl||`http://127.0.0.1:${Q[0]??ZH[0]}${J}`;try{let j;if(Z){let Y=wJ().workOsClientId,V=await XH(Y,$);$.callbacks.onAuth({url:V.verificationUriComplete??V.verificationUri,instructions:`Enter this code in your browser: ${V.userCode}`});let B=await jH({clientId:Y,deviceCode:V.deviceCode,expiresInSeconds:V.expiresInSeconds,initialPollIntervalSeconds:V.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??i8,workosApiBaseUrl:PJ,onProgress:$.callbacks.onProgress});j=await YH(B,$,$.provider)}else{let Y=new URL(R2($.apiBaseUrl,sZ.authorize));Y.searchParams.set("client_type","extension"),Y.searchParams.set("callback_url",X),Y.searchParams.set("redirect_uri",X),$.callbacks.onAuth({url:Y.toString(),instructions:"Continue the authentication process in your browser."});let V,B=$.provider,H=await l8({waitForCallback:W?.waitForCallback??(async()=>null),cancelWait:W?.cancelWait??(()=>{}),onManualCodeInput:$.callbacks.onManualCodeInput,parseOptions:{includeProvider:!0}});if(H.error)throw Error(`OAuth error: ${H.error}`);if(V=H.code,B=H.provider??B,!V){let K=await $.callbacks.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),G=u8(K,{includeProvider:!0});V=G.code,B=G.provider??B}if(!V)throw Error("Missing authorization code");j=await eT(V,X,$,B)}return l1($.telemetry,$.provider??"cline",yJ(j)),r1($.telemetry,{id:j.accountId,email:j.email,provider:$.provider??"cline"}),j}catch(j){throw i1($.telemetry,$.provider??"cline",j instanceof Error?j.message:String(j),{requestId:j instanceof r0?j.requestId:void 0}),j}finally{W?.close()}}async function hJ($){return await XH(wJ().workOsClientId,$)}async function IJ($){let Z=$.provider??"cline";p1($.telemetry,Z);try{let Q=await jH({clientId:wJ().workOsClientId,deviceCode:$.deviceCode,expiresInSeconds:$.expiresInSeconds,initialPollIntervalSeconds:$.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??i8,workosApiBaseUrl:PJ}),J=await YH(Q,{apiBaseUrl:$.apiBaseUrl,headers:$.headers,requestTimeoutMs:$.requestTimeoutMs,provider:$.provider},$.provider);return l1($.telemetry,Z,yJ(J)),r1($.telemetry,{id:J.accountId,email:J.email,provider:Z}),J}catch(Q){throw i1($.telemetry,Z,Q instanceof Error?Q.message:String(Q),{requestId:Q instanceof r0?Q.requestId:void 0}),Q}}async function tZ($,Z){let Q=R2(Z.apiBaseUrl,sZ.refresh);t(`cline.refresh.request url=${Q} refreshTokenHash=${P0($.refresh)}`);let J=await fetch(Q,{method:"POST",headers:{"Content-Type":"application/json",...await bJ(Z.headers)},body:JSON.stringify({refreshToken:$.refresh,grantType:"refresh_token"}),signal:AbortSignal.timeout(Z.requestTimeoutMs??i8)});if(!J.ok){let Y=await J.text().catch(()=>""),V=d8(Y),B=J.headers.get("x-request-id")??void 0;throw t(`cline.refresh.error status=${J.status} errorCode=${V.code??"none"} message=${V.message??"none"} requestId=${B??"none"}`),new r0(`Token refresh failed: ${J.status}${V.message?` - ${V.message}`:""}`,{status:J.status,errorCode:V.code,requestId:B})}let W=await J.json(),X=$.metadata?.provider??Z.provider,j=SJ(kJ(W,"Invalid token refresh response"),X,$);return t(`cline.refresh.success newAccessTokenHash=${P0(j.access)} newRefreshTokenHash=${P0(j.refresh)} expires=${j.expires}`),j}async function h4($,Z,Q){if(!$)return t("cline.getCredentials outcome=no_current_credentials"),null;let J=Q?.refreshBufferMs??lT,W=Q?.retryableTokenGraceMs??iT,X=Q?.forceRefresh===!0;if(!X&&!p8($,J))return t(`cline.getCredentials outcome=still_valid forceRefresh=${X}`),$;t(`cline.getCredentials outcome=needs_refresh forceRefresh=${X} accessTokenHash=${P0($.access)}`);try{return await tZ($,Z)}catch(j){let Y=yJ($),V=j instanceof r0&&j.requestId?{request_id:j.requestId}:{},B={status:j instanceof r0?j.status:void 0,errorCode:j instanceof r0?j.errorCode:void 0,...V,...Y,errorName:j instanceof Error?j.name:void 0};if(j instanceof r0&&j.isLikelyInvalidGrant())return t(`cline.getCredentials outcome=invalid_grant status=${j.status} errorCode=${j.errorCode??"none"}`),S$(Z.telemetry,Z.provider??"cline","invalid_grant",{status:j.status,errorCode:j.errorCode,...V,...Y}),null;if($.expires-Date.now()>W)return t(`cline.getCredentials outcome=transient_failure_kept_current error=${j instanceof Error?j.message:String(j)}`),QJ(Z.telemetry,Z.provider??"cline",{...B,tokenExpired:!1}),$;throw t(`cline.getCredentials outcome=transient_failure_rethrown error=${j instanceof Error?j.message:String(j)}`),QJ(Z.telemetry,Z.provider??"cline",{...B,tokenExpired:!0}),j}}C0();var HH={};w(HH,{refreshOpenAICodexToken:()=>$Q,loginOpenAICodex:()=>I4,getValidOpenAICodexCredentials:()=>x4,OPENAI_CODEX_OAUTH_CONFIG:()=>K0});import{decodeJwtPayload as xJ}from"@cline/shared";import{nanoid as $N}from"nanoid";var K0={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 eZ 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 ZN($,Z,Q=K0.redirectUri){let J=await fetch(K0.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"authorization_code",client_id:K0.clientId,code:$,code_verifier:Z,redirect_uri:Q}),signal:AbortSignal.timeout(K0.httpTimeoutMs)});if(!J.ok)return{type:"failed"};let W=await J.json();if(!W.access_token||!W.refresh_token||typeof W.expires_in!=="number")return{type:"failed"};return{type:"success",access:W.access_token,refresh:W.refresh_token,expires:Date.now()+W.expires_in*1000,email:W.email,idToken:W.id_token}}async function QN($){try{let Z=await fetch(K0.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:$,client_id:K0.clientId}),signal:AbortSignal.timeout(K0.httpTimeoutMs)});if(!Z.ok){let J=await Z.text().catch(()=>""),W=d8(J);throw new eZ(`Token refresh failed: ${Z.status}${W.message?` - ${W.message}`:""}`,{status:Z.status,errorCode:W.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 eZ)throw Z;return{type:"failed"}}}async function JN($="pi"){let{verifier:Z,challenge:Q}=await aZ(),J=$N(32),W=new URL(K0.authorizationEndpoint);return W.searchParams.set("response_type","code"),W.searchParams.set("client_id",K0.clientId),W.searchParams.set("redirect_uri",K0.redirectUri),W.searchParams.set("scope",K0.scopes),W.searchParams.set("code_challenge",Q),W.searchParams.set("code_challenge_method","S256"),W.searchParams.set("state",J),W.searchParams.set("id_token_add_organizations","true"),W.searchParams.set("codex_cli_simplified_flow","true"),W.searchParams.set("originator",$),{verifier:Z,state:J,url:W.toString()}}function WN(){try{let $=new URL(K0.redirectUri),Z=$.port.length>0?Number.parseInt($.port,10):K0.callbackPort;return{host:$.hostname||"localhost",port:Number.isFinite(Z)?Z:K0.callbackPort,callbackPath:$.pathname||"/auth/callback",redirectUri:$.toString()}}catch{return{host:"localhost",port:K0.callbackPort,callbackPath:"/auth/callback",redirectUri:K0.redirectUri}}}function XN($,Z){let Q=Z?xJ(Z):xJ($),J=Q?Q:xJ($),X=J?.[K0.jwtClaimPath]?.chatgpt_account_id;if(typeof X==="string"&&X.length>0)return X;let j=J?.organizations;if(Array.isArray(j)&&j.length>0){let V=j[0];if(typeof V?.id==="string"&&V.id.length>0)return V.id}let Y=J?.chatgpt_account_id;if(typeof Y==="string"&&Y.length>0)return Y;return null}function BH($,Z){let Q=XN($.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 I4($){p1($.telemetry,"openai-codex");let Z=WN(),{verifier:Q,state:J,url:W}=await JN($.originator),X=await U1({host:Z.host,ports:[Z.port],callbackPath:Z.callbackPath,expectedState:J});$.onAuth({url:W,instructions:"Continue the authentication process in your browser."});let j;try{let Y=await l8({waitForCallback:X.waitForCallback,cancelWait:X.cancelWait,onManualCodeInput:$.onManualCodeInput,parseOptions:{allowHashCodeState:!0}});if(Y.state&&Y.state!==J)throw Error("State mismatch");if(j=Y.code,!j){let H=await $.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),K=u8(H,{allowHashCodeState:!0});if(K.state&&K.state!==J)throw Error("State mismatch");j=K.code}if(!j)throw Error("Missing authorization code");let V=await ZN(j,Q,Z.redirectUri);if(V.type!=="success")throw Error("Token exchange failed");let B=BH(V);return l1($.telemetry,"openai-codex"),r1($.telemetry,{id:B.accountId,email:B.email,provider:"openai-codex"}),B}catch(Y){throw i1($.telemetry,"openai-codex",Y instanceof Error?Y.message:String(Y)),Y}finally{X.close()}}async function $Q($,Z){let Q=await QN($);if(Q.type!=="success")throw Error("Failed to refresh OpenAI Codex token");let J=BH(Q,Z);if(!J.refresh)throw Error("Failed to refresh OpenAI Codex token: missing refresh token");return J}async function x4($,Z){if(!$)return null;let Q=Z?.refreshBufferMs??K0.refreshBufferMs,J=Z?.retryableTokenGraceMs??K0.retryableTokenGraceMs;if(Z?.forceRefresh!==!0&&!p8($,Q))return $;try{return await $Q($.refresh,$)}catch(X){if(X instanceof eZ&&X.isLikelyInvalidGrant())return S$(Z?.telemetry,"openai-codex","invalid_grant"),null;if($.expires-Date.now()>J)return $;return null}}C0();var fH={};w(fH,{refreshOcaToken:()=>WQ,loginOcaOAuth:()=>m4,getValidOcaCredentials:()=>c4,OCI_HEADER_OPC_REQUEST_ID:()=>jN,DEFAULT_INTERNAL_OCA_BASE_URL:()=>ZQ,DEFAULT_INTERNAL_IDCS_URL:()=>FH,DEFAULT_INTERNAL_IDCS_SCOPES:()=>UH,DEFAULT_INTERNAL_IDCS_CLIENT_ID:()=>GH,DEFAULT_EXTERNAL_OCA_BASE_URL:()=>QQ,DEFAULT_EXTERNAL_IDCS_URL:()=>_H,DEFAULT_EXTERNAL_IDCS_SCOPES:()=>LH,DEFAULT_EXTERNAL_IDCS_CLIENT_ID:()=>DH});import{decodeJwtPayload as g4}from"@cline/shared";import{nanoid as KH}from"nanoid";class gJ{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(),J=this.ttlMs){this.pruneExpired(Q),this.entries.delete($);while(this.entries.size>=this.maxEntries){let W=this.entries.keys().next().value;if(W===void 0)break;this.entries.delete(W)}this.entries.set($,{value:Z,expiresAt:Q+J})}pruneExpired($){for(let[Z,Q]of this.entries)if(Q.expiresAt<=$)this.entries.delete(Z)}}var GH="a8331954c0cf48ba99b5dd223a14c6ea",FH="https://idcs-9dc693e80d9b469480d7afe00e743931.identity.oraclecloud.com",UH="openid offline_access",ZQ="https://code-internal.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",DH="c1aba3deed5740659981a752714eba33",_H="https://login-ext.identity.oraclecloud.com",LH="openid offline_access",QQ="https://code.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",jN="opc-request-id",YN="/auth/oca",VN=Array.from({length:11},($,Z)=>48801+Z),BN=300000,HN=30000,AH=30000,KN=600000;class JQ 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 h$={internal:{clientId:GH,idcsUrl:FH,scopes:UH,baseUrl:ZQ},external:{clientId:DH,idcsUrl:_H,scopes:LH,baseUrl:QQ}},v4=new Map,GN=86400000,FN=300000,UN=32,vJ=new gJ(GN,UN);function OH($){if(typeof $==="function")return $();return $??"internal"}function qH($){return{internal:{clientId:$?.internal?.clientId??h$.internal.clientId,idcsUrl:$?.internal?.idcsUrl??h$.internal.idcsUrl,scopes:$?.internal?.scopes??h$.internal.scopes,baseUrl:$?.internal?.baseUrl??h$.internal.baseUrl},external:{clientId:$?.external?.clientId??h$.external.clientId,idcsUrl:$?.external?.idcsUrl??h$.external.idcsUrl,scopes:$?.external?.scopes??h$.external.scopes,baseUrl:$?.external?.baseUrl??h$.external.baseUrl}}}function DN($=Date.now()){let Z=$-KN;for(let[Q,J]of v4.entries())if(J.createdAt<Z)v4.delete(Q)}function _N($,Z,Q){if(typeof $.expires_in==="number"&&$.expires_in>0)return Date.now()+$.expires_in*1000;let W=g4(Z)?.exp;if(typeof W==="number"&&W>0)return W*1000;let j=g4(Q)?.exp;if(typeof j==="number"&&j>0)return j*1000;return Date.now()+3600000}function zH($,Z,Q){let J=$.access_token;if(!J)throw Error("Token response did not include an access token");let W=$.refresh_token??Q?.refresh;if(!W)throw Error("Token response did not include a refresh token");let X=g4($.id_token),j=g4(J),Y=X?.sub??j?.sub,V=X?.email??j?.email;return{access:J,refresh:W,expires:_N($,J,$.id_token),accountId:Y??Q?.accountId,email:V??Q?.email,metadata:{...Q?.metadata??{},provider:"oca",mode:Z,subject:Y,idToken:$.id_token}}}async function TH($,Z){let Q=oZ($),J=vJ.get(Q);if(J)return J;let W=`${Q}/.well-known/openid-configuration`,X=await fetch(W,{method:"GET",signal:AbortSignal.timeout(Z)});if(!X.ok){let V=`${Q}/oauth2/v1/token`;return vJ.set(Q,V,Date.now(),FN),V}let Y=(await X.json()).token_endpoint||`${Q}/oauth2/v1/token`;return vJ.set(Q,Y),Y}function NH($){return{code:$.error,message:$.error_description}}async function LN($){let Z=v4.get($.state);if(!Z)throw Error("No PKCE verifier found for this state");v4.delete($.state);let Q=$.mode==="external"?$.config.external:$.config.internal,J=await TH(Q.idcsUrl,$.requestTimeoutMs),W=new URLSearchParams({grant_type:"authorization_code",code:$.code,redirect_uri:Z.redirectUri,client_id:Q.clientId,code_verifier:Z.verifier}),X=await fetch(J,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:W,signal:AbortSignal.timeout($.requestTimeoutMs)}),j=await X.json();if(!X.ok){let V=NH(j);throw new JQ(`Token exchange failed: ${X.status}${V.message?` - ${V.message}`:""}`,{status:X.status,errorCode:V.code})}let Y=g4(j.id_token);if(!j.id_token||!Y)throw Error("No ID token received from OCA");if(Y.nonce!==Z.nonce)throw Error("OIDC nonce verification failed");return zH(j,$.mode)}function AN($){let Z=$.mode==="external"?$.config.external:$.config.internal,Q=new URL(`${oZ(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 m4($){p1($.telemetry,"oca");let Z=qH($.config),Q=OH($.mode),J=$.callbackPorts?.length?$.callbackPorts:VN,W=$.callbackPath??YN,X=$.requestTimeoutMs??AH,j=await U1({ports:J,callbackPath:W,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),Y=j.callbackUrl;if(!Y)throw Error("Unable to bind local OAuth callback server");let V=KH(16),B=KH(16),{verifier:H,challenge:K}=await aZ();DN(),v4.set(V,{verifier:H,nonce:B,mode:Q,redirectUri:Y,createdAt:Date.now()});let G=AN({callbackUrl:Y,mode:Q,state:V,nonce:B,challenge:K,config:Z});$.callbacks.onAuth({url:G,instructions:"Continue the authentication process in your browser."});try{let F=await l8({waitForCallback:j.waitForCallback,cancelWait:j.cancelWait,onManualCodeInput:$.callbacks.onManualCodeInput}),U=F.code,_=F.state;if(F.error)throw Error(`OAuth error: ${F.error}`);if(!U){if(!$.callbacks.onManualCodeInput)throw Error("Timed out waiting for OCA callback");throw Error("Missing authorization code")}if(!_||_!==V)throw Error("State mismatch");let L=await LN({code:U,state:_,mode:Q,config:Z,requestTimeoutMs:X});return l1($.telemetry,"oca"),r1($.telemetry,{id:L.accountId,email:L.email,provider:"oca"}),L}catch(F){throw i1($.telemetry,"oca",F instanceof Error?F.message:String(F)),F}finally{j.close()}}async function WQ($,Z={}){let Q=qH(Z.config),J=Z.requestTimeoutMs??AH,W=$.metadata?.mode,X=W==="internal"||W==="external"?W:OH(Z.mode),j=X==="external"?Q.external:Q.internal,Y=await TH(j.idcsUrl,J),V=new URLSearchParams({grant_type:"refresh_token",refresh_token:$.refresh,client_id:j.clientId}),B=await fetch(Y,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:V,signal:AbortSignal.timeout(J)}),H=await B.json();if(!B.ok){let K=NH(H);throw new JQ(`Token refresh failed: ${B.status}${K.message?` - ${K.message}`:""}`,{status:B.status,errorCode:K.code})}return zH(H,X,$)}async function c4($,Z,Q){if(!$)return null;let J=Z?.refreshBufferMs??Q?.refreshBufferMs??BN,W=Z?.retryableTokenGraceMs??Q?.retryableTokenGraceMs??HN;if(Z?.forceRefresh!==!0&&!p8($,J))return $;try{return await WQ($,Q)}catch(j){if(j instanceof JQ&&j.isLikelyInvalidGrant())return S$(Q?.telemetry,"oca","invalid_grant"),null;if($.expires-Date.now()>W)return $;return null}}var XQ="workos:";function qN($){let Z=$.trim();return Z.toLowerCase().startsWith(XQ)?Z:`${XQ}${Z}`}function zN($){let Z=$.trim();return Z.toLowerCase().startsWith(XQ)?Z.slice(XQ.length):Z}function TN($){let Q=ON($)?.exp;if(typeof Q==="number"&&Q>0)return Q*1000;return null}function NN($,Z){let Q=$.auth?.expiresAt;if(typeof Q==="number"&&Number.isFinite(Q)&&Q>0)return Q;let J=TN(Z);if(J)return J;return Date.now()-1}function fN($,Z){let Q=$.auth?.accessToken?.trim(),J=$.auth?.refreshToken?.trim();if(!Q||!J)return null;let W=Z?.normalizeAccessToken?.(Q)??Q;if(!W)return null;return{access:W,refresh:J,expires:NN($,W),accountId:$.auth?.accountId,metadata:$.auth?.metadata}}function RN($){let Z=$.formatAccessToken?.($.credentials.access)??$.credentials.access,Q={...$.settings?.auth??{},accessToken:Z,refreshToken:$.credentials.refresh,accountId:$.credentials.accountId,expiresAt:$.credentials.expires},J=Object.fromEntries(Object.entries($.credentials.metadata??{}).filter(([,j])=>j!==void 0)),W={...$.settings?.auth?.metadata??{},...J};if(Object.keys(W).length>0)Q.metadata=W;let X={...$.settings??{provider:$.storageProviderId},provider:$.storageProviderId,auth:Q};if($.save!==!1)$.manager.saveProviderSettings(X,{...$.setLastUsed===void 0?{}:{setLastUsed:$.setLastUsed},tokenSource:"oauth"});return X}function mJ($){let Z=$.storageProviderId??$.providerId;return{providerId:$.providerId,storageProviderId:Z,getApiKey(Q){let J=Q?.auth?.accessToken?.trim();if(J)return $.formatAccessToken?.(J)??J;return Q?.apiKey?.trim()||Q?.auth?.apiKey?.trim()||void 0},login:$.login,refresh:$.refresh,saveCredentials(Q){return RN({...Q,storageProviderId:Z,formatAccessToken:$.formatAccessToken})},isConfigured(Q){return!!Q?.auth?.accessToken},normalizeStoredAccessToken:$.normalizeStoredAccessToken}}function MH($){return mJ({providerId:$.providerId,storageProviderId:$.storageProviderId,formatAccessToken:qN,normalizeStoredAccessToken:zN,login:({settings:Z,callbacks:Q,telemetry:J})=>k4({apiBaseUrl:Z?.baseUrl?.trim()||RH().apiBaseUrl,useWorkOSDeviceAuth:!0,callbacks:Q,telemetry:J}),refresh:({settings:Z,credentials:Q,forceRefresh:J,telemetry:W})=>h4(Q,{apiBaseUrl:Z.baseUrl?.trim()||RH().apiBaseUrl,telemetry:W},{forceRefresh:J})})}var MN=[MH({providerId:"cline"}),MH({providerId:"cline-pass",storageProviderId:"cline"}),mJ({providerId:"oca",login:({settings:$,callbacks:Z,telemetry:Q})=>m4({mode:$?.oca?.mode,callbacks:Z,telemetry:Q}),refresh:({settings:$,credentials:Z,forceRefresh:Q,telemetry:J})=>c4(Z,{forceRefresh:Q,telemetry:J},{mode:$.oca?.mode,telemetry:J})}),mJ({providerId:"openai-codex",login:({callbacks:$,telemetry:Z})=>I4({onAuth:$.onAuth,onPrompt:$.onPrompt,onProgress:$.onProgress,onManualCodeInput:$.onManualCodeInput,telemetry:Z}),refresh:({credentials:$,forceRefresh:Z,telemetry:Q})=>x4($,{forceRefresh:Z,telemetry:Q})})],EN=new Map(MN.map(($)=>[$.providerId,$]));function U0($){return EN.get($.trim().toLowerCase())}function I$($){return U0($)!==void 0}function cJ($){return U0($)?.storageProviderId}function uJ($,Z){let Q=U0(Z),J=Q?.storageProviderId??Z,W=$.getProviderSettings(J);return Q?.getApiKey(W)??r8(Z,W)}async function u4($,Z,Q){let J=U0(Z);if(!J)throw Error(`Provider "${Z}" does not support OAuth login`);let W=$.getProviderSettings(J.storageProviderId),X=await J.login({settings:W,callbacks:Q.callbacks,telemetry:Q.telemetry});return J.saveCredentials({manager:$,settings:W,credentials:X})}function d4($,Z){let Q=U0($);if(!Q)return null;return fN(Z,{normalizeAccessToken:Q.normalizeStoredAccessToken})}function M2($){let Z=U0($.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 r8($,Z){let Q=U0($);if(Q)return Q.getApiKey(Z);return Z?.auth?.accessToken?.trim()||Z?.apiKey?.trim()||Z?.auth?.apiKey?.trim()||void 0}function dJ($,Z){let Q=U0($);if(!Q)return Z.access;return Q.getApiKey({provider:Q.storageProviderId,auth:{accessToken:Z.access}})??Z.access}C0();var LK={};w(LK,{createContextCompactionPrepareTurn:()=>o4,createCompactionStateAwarePrepareTurn:()=>s4});import{estimateRequestInputTokens as zf}from"@cline/shared";var yH={};w(yH,{projectSessionCompactionState:()=>x$,parseSessionCompactionState:()=>D1,createSessionCompactionState:()=>n8,SessionCompactionStateSchema:()=>p4});import{createHash as CN}from"node:crypto";import{formatDisplayUserInput as CH}from"@cline/shared";import{z as C1}from"zod";function wN($){if(!$||typeof $!=="object"||Array.isArray($))return!1;let Z=$;if(Z.role!=="user"&&Z.role!=="assistant")return!1;return typeof Z.content==="string"||Array.isArray(Z.content)}var PN=C1.custom(wN),p4=C1.object({version:C1.literal(1),updated_at:C1.string().datetime(),conversation_id:C1.string().min(1).optional(),source_message_count:C1.number().int().nonnegative(),source_prefix_hash:C1.string().min(1).optional(),source_last_message_key:C1.string().min(1).optional(),messages:C1.array(PN),system_prompt:C1.string().optional()});function pJ($){return JSON.parse(JSON.stringify($))}function wH($){if($.role!=="user")return $;if(typeof $.content==="string")return{...$,content:CH($.content)};return{...$,content:$.content.map((Z)=>Z.type==="text"?{...Z,text:CH(Z.text)}:Z)}}function PH($){if($.includes(":"))throw TypeError("Message role cannot contain ':' in compaction boundary keys")}function SN($){let Z=wH($);return PH(Z.role),[["role",Z.role],["content",Z.content],["agent",Z.agent??null],["sessionId",Z.sessionId??null],["metadata",Z.metadata??null],["modelInfo",Z.modelInfo??null],["metrics",Z.metrics??null]]}function SH($){if(!$)return"";let Z=wH($);if(typeof Z.id==="string"&&Z.id.trim())return`id:${Z.id.trim()}`;if(PH(Z.role),typeof Z.ts==="number"&&Number.isFinite(Z.ts))return`ts:${Z.role}:${Z.ts}`;return`content:${Z.role}:${JSON.stringify(Z.content)}`}function bH($,Z=$.length){let Q=CN("sha256");Q.update(`cline-session-compaction-source-v2
330
+ </html>`;function ZH($){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 uT($){let Q=new TextEncoder().encode($),J=await crypto.subtle.digest("SHA-256",Q);return new Uint8Array(J)}function dT($=32){let Z=new Uint8Array($);return crypto.getRandomValues(Z),ZH(Z)}async function aZ(){let $=dT(),Z=ZH(await uT($));return{verifier:$,challenge:Z}}function oZ($){return $.endsWith("/")?$.slice(0,-1):$}function M2($,Z){return new URL(Z,`${oZ($)}/`).toString()}function d8($,Z={}){let Q=$.trim();if(!Q)return{};try{let J=new URL(Q);return{code:J.searchParams.get("code")??void 0,state:J.searchParams.get("state")??void 0,provider:Z.includeProvider?J.searchParams.get("provider")??void 0:void 0}}catch{}if(Z.allowHashCodeState&&Q.includes("#")){let[J,W]=Q.split("#",2);return{code:J||void 0,state:W||void 0}}if(Q.includes("code=")){let J=new URLSearchParams(Q);return{code:J.get("code")??void 0,state:J.get("state")??void 0,provider:Z.includeProvider?J.get("provider")??void 0:void 0}}return{code:Q}}function p8($){try{let Z=JSON.parse($),Q=Z.error,J=typeof Q==="string"?Q:Q&&typeof Q==="object"&&typeof Q.type==="string"?Q.type:void 0,W=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:J,message:W}}catch{return{}}}function l8($,Z){return Date.now()>=$.expires-Z}async function i8($){if(!$.onManualCodeInput){let X=await $.waitForCallback();return{code:X?.code,state:X?.state,provider:X?.provider,error:X?.error}}let Z,Q,J=$.onManualCodeInput().then((X)=>{Z=X,$.cancelWait()}).catch((X)=>{Q=X instanceof Error?X:Error(String(X)),$.cancelWait()}),W=await $.waitForCallback();if(Q)throw Q;if(W?.code||W?.error)return{code:W.code,state:W.state,provider:W.provider,error:W.error};if(Z)return d8(Z,$.parseOptions);if(await J,Q)throw Q;if(Z)return d8(Z,$.parseOptions);return{}}var sZ={authorize:"/api/v1/auth/authorize",token:"/api/v1/auth/token",register:"/api/v1/auth/register",refresh:"/api/v1/auth/refresh"},XH={deviceAuthorization:"/user_management/authorize/device",authenticate:"/user_management/authenticate"},PJ="https://api.workos.com",lT="/auth",QH=Array.from({length:11},($,Z)=>48801+Z),iT=300000,rT=30000,r8=30000,nT=300,aT=5;class r0 extends Error{status;errorCode;requestId;constructor($,Z){super($);this.name="ClineOAuthTokenError",this.status=Z?.status,this.errorCode=Z?.errorCode,this.requestId=Z?.requestId}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 oT($){let Z=Date.parse($);if(Number.isNaN(Z))throw Error(`Invalid expiresAt value: ${$}`);return Z}function SJ($,Z,Q={}){let J=$.userInfo.clineUserId??Q.accountId,W=$.refreshToken??Q.refresh;if(!W)throw Error("Token response did not include a refresh token");let X={...Q.metadata??{},provider:Z,tokenType:$.tokenType,userInfo:$.userInfo};return delete X.startedAt,{access:$.accessToken,refresh:W,expires:oT($.expiresAt),accountId:J??void 0,email:$.userInfo.email||Q.email,metadata:X}}async function bJ($){if(!$)return{};return typeof $==="function"?await $():$}function JH($,Z){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return Z;return Math.floor($)}function sT($){return typeof $==="string"&&$.trim()||void 0}function tT($){let Z=pT($);if(!Z)return{};return{sessionId:sT(Z.sid)}}function eT($){let Z={},Q=$.metadata?.sessionStartedAtMs;if(typeof Q==="number"&&Number.isFinite(Q)&&Q>0)Z.sessionDurationMs=Date.now()-Q;return Z}function yJ($){return{...tT($.access),...eT($)}}async function WH($){await new Promise((Z)=>setTimeout(Z,$))}function kJ($,Z){if(!$.success||!$.data?.accessToken)throw Error(Z);return $.data}async function jH($,Z){let Q=await fetch(M2(PJ,XH.deviceAuthorization),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({client_id:$}),signal:AbortSignal.timeout(Z?.requestTimeoutMs??r8)}),J=await Q.json().catch(()=>({}));if(!Q.ok)throw new r0(`Device authorization failed: ${Q.status}${J.error_description?` - ${J.error_description}`:""}`,{status:Q.status,errorCode:J.error,requestId:Q.headers.get("x-request-id")??void 0});if(!J.device_code||!J.user_code||!J.verification_uri)throw Error("Invalid WorkOS device authorization response");return{deviceCode:J.device_code,userCode:J.user_code,verificationUri:J.verification_uri,verificationUriComplete:J.verification_uri_complete,expiresInSeconds:JH(J.expires_in,nT),pollIntervalSeconds:JH(J.interval,aT)}}async function YH($){let Z=Date.now()+$.expiresInSeconds*1000,Q=Math.max(1,$.initialPollIntervalSeconds);while(Date.now()<=Z){let J=await fetch(M2($.workosApiBaseUrl,XH.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)}),W=await J.json().catch(()=>({}));if(J.ok){if(!W.access_token||!W.refresh_token)throw Error("Invalid WorkOS token response");return{accessToken:W.access_token,refreshToken:W.refresh_token,tokenType:W.token_type??"Bearer"}}switch(W.error){case"authorization_pending":{await WH(Q*1000);break}case"slow_down":{Q+=1,await WH(Q*1000);break}case"access_denied":case"expired_token":case"invalid_grant":throw new r0(W.error_description||"WorkOS authorization failed",{status:J.status,errorCode:W.error,requestId:J.headers.get("x-request-id")??void 0});default:throw new r0(`WorkOS token polling failed: ${J.status}${W.error_description?` - ${W.error_description}`:""}`,{status:J.status,errorCode:W.error,requestId:J.headers.get("x-request-id")??void 0})}$.onProgress?.("Waiting for browser authentication confirmation...")}throw Error("WorkOS device authorization timed out")}async function VH($,Z,Q){let J={accessToken:$.accessToken,refreshToken:$.refreshToken},W=await fetch(M2(Z.apiBaseUrl,sZ.register),{method:"POST",headers:{"Content-Type":"application/json",...await bJ(Z.headers)},body:JSON.stringify(J),signal:AbortSignal.timeout(Z.requestTimeoutMs??r8)});if(!W.ok){let j=await W.text().catch(()=>""),Y=p8(j);throw new r0(`Token registration failed: ${W.status}${Y.message?` - ${Y.message}`:""}`,{status:W.status,errorCode:Y.code,requestId:W.headers.get("x-request-id")??void 0})}let X=await W.json();return SJ(kJ(X,"Invalid token exchange response"),Q??Z.provider,{metadata:{sessionStartedAtMs:Date.now()}})}async function $N($,Z,Q,J){let W={grant_type:"authorization_code",code:$,client_type:"extension",redirect_uri:Z,provider:J??Q.provider},X=await fetch(M2(Q.apiBaseUrl,sZ.token),{method:"POST",headers:{"Content-Type":"application/json",...await bJ(Q.headers)},body:JSON.stringify(W),signal:AbortSignal.timeout(Q.requestTimeoutMs??r8)});if(!X.ok){let Y=await X.text().catch(()=>""),V=p8(Y);throw new r0(`Token exchange failed: ${X.status}${V.message?` - ${V.message}`:""}`,{status:X.status,errorCode:V.code,requestId:X.headers.get("x-request-id")??void 0})}let j=await X.json();return SJ(kJ(j,"Invalid token exchange response"),J??Q.provider,{metadata:{sessionStartedAtMs:Date.now()}})}async function k4($){p1($.telemetry,$.provider??"cline");let Z=$.useWorkOSDeviceAuth??!0,Q=$.callbackPorts?.length?$.callbackPorts:QH,J=$.callbackPath??lT,W=Z?null:await U1({ports:Q,callbackPath:J,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),X=W?.callbackUrl||`http://127.0.0.1:${Q[0]??QH[0]}${J}`;try{let j;if(Z){let Y=wJ().workOsClientId,V=await jH(Y,$);$.callbacks.onAuth({url:V.verificationUriComplete??V.verificationUri,instructions:`Enter this code in your browser: ${V.userCode}`});let B=await YH({clientId:Y,deviceCode:V.deviceCode,expiresInSeconds:V.expiresInSeconds,initialPollIntervalSeconds:V.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??r8,workosApiBaseUrl:PJ,onProgress:$.callbacks.onProgress});j=await VH(B,$,$.provider)}else{let Y=new URL(M2($.apiBaseUrl,sZ.authorize));Y.searchParams.set("client_type","extension"),Y.searchParams.set("callback_url",X),Y.searchParams.set("redirect_uri",X),$.callbacks.onAuth({url:Y.toString(),instructions:"Continue the authentication process in your browser."});let V,B=$.provider,H=await i8({waitForCallback:W?.waitForCallback??(async()=>null),cancelWait:W?.cancelWait??(()=>{}),onManualCodeInput:$.callbacks.onManualCodeInput,parseOptions:{includeProvider:!0}});if(H.error)throw Error(`OAuth error: ${H.error}`);if(V=H.code,B=H.provider??B,!V){let K=await $.callbacks.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),G=d8(K,{includeProvider:!0});V=G.code,B=G.provider??B}if(!V)throw Error("Missing authorization code");j=await $N(V,X,$,B)}return l1($.telemetry,$.provider??"cline",yJ(j)),r1($.telemetry,{id:j.accountId,email:j.email,provider:$.provider??"cline"}),j}catch(j){throw i1($.telemetry,$.provider??"cline",j instanceof Error?j.message:String(j),{requestId:j instanceof r0?j.requestId:void 0}),j}finally{W?.close()}}async function hJ($){return await jH(wJ().workOsClientId,$)}async function IJ($){let Z=$.provider??"cline";p1($.telemetry,Z);try{let Q=await YH({clientId:wJ().workOsClientId,deviceCode:$.deviceCode,expiresInSeconds:$.expiresInSeconds,initialPollIntervalSeconds:$.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??r8,workosApiBaseUrl:PJ}),J=await VH(Q,{apiBaseUrl:$.apiBaseUrl,headers:$.headers,requestTimeoutMs:$.requestTimeoutMs,provider:$.provider},$.provider);return l1($.telemetry,Z,yJ(J)),r1($.telemetry,{id:J.accountId,email:J.email,provider:Z}),J}catch(Q){throw i1($.telemetry,Z,Q instanceof Error?Q.message:String(Q),{requestId:Q instanceof r0?Q.requestId:void 0}),Q}}async function tZ($,Z){let Q=M2(Z.apiBaseUrl,sZ.refresh);t(`cline.refresh.request url=${Q} refreshTokenHash=${P0($.refresh)}`);let J=await fetch(Q,{method:"POST",headers:{"Content-Type":"application/json",...await bJ(Z.headers)},body:JSON.stringify({refreshToken:$.refresh,grantType:"refresh_token"}),signal:AbortSignal.timeout(Z.requestTimeoutMs??r8)});if(!J.ok){let Y=await J.text().catch(()=>""),V=p8(Y),B=J.headers.get("x-request-id")??void 0;throw t(`cline.refresh.error status=${J.status} errorCode=${V.code??"none"} message=${V.message??"none"} requestId=${B??"none"}`),new r0(`Token refresh failed: ${J.status}${V.message?` - ${V.message}`:""}`,{status:J.status,errorCode:V.code,requestId:B})}let W=await J.json(),X=$.metadata?.provider??Z.provider,j=SJ(kJ(W,"Invalid token refresh response"),X,$);return t(`cline.refresh.success newAccessTokenHash=${P0(j.access)} newRefreshTokenHash=${P0(j.refresh)} expires=${j.expires}`),j}async function h4($,Z,Q){if(!$)return t("cline.getCredentials outcome=no_current_credentials"),null;let J=Q?.refreshBufferMs??iT,W=Q?.retryableTokenGraceMs??rT,X=Q?.forceRefresh===!0;if(!X&&!l8($,J))return t(`cline.getCredentials outcome=still_valid forceRefresh=${X}`),$;t(`cline.getCredentials outcome=needs_refresh forceRefresh=${X} accessTokenHash=${P0($.access)}`);try{return await tZ($,Z)}catch(j){let Y=yJ($),V=j instanceof r0&&j.requestId?{request_id:j.requestId}:{},B={status:j instanceof r0?j.status:void 0,errorCode:j instanceof r0?j.errorCode:void 0,...V,...Y,errorName:j instanceof Error?j.name:void 0};if(j instanceof r0&&j.isLikelyInvalidGrant())return t(`cline.getCredentials outcome=invalid_grant status=${j.status} errorCode=${j.errorCode??"none"}`),S$(Z.telemetry,Z.provider??"cline","invalid_grant",{status:j.status,errorCode:j.errorCode,...V,...Y}),null;if($.expires-Date.now()>W)return t(`cline.getCredentials outcome=transient_failure_kept_current error=${j instanceof Error?j.message:String(j)}`),QJ(Z.telemetry,Z.provider??"cline",{...B,tokenExpired:!1}),$;throw t(`cline.getCredentials outcome=transient_failure_rethrown error=${j instanceof Error?j.message:String(j)}`),QJ(Z.telemetry,Z.provider??"cline",{...B,tokenExpired:!0}),j}}C0();var KH={};w(KH,{refreshOpenAICodexToken:()=>$Q,loginOpenAICodex:()=>I4,getValidOpenAICodexCredentials:()=>x4,OPENAI_CODEX_OAUTH_CONFIG:()=>K0});import{decodeJwtPayload as xJ}from"@cline/shared";import{nanoid as ZN}from"nanoid";var K0={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 eZ 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 QN($,Z,Q=K0.redirectUri){let J=await fetch(K0.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"authorization_code",client_id:K0.clientId,code:$,code_verifier:Z,redirect_uri:Q}),signal:AbortSignal.timeout(K0.httpTimeoutMs)});if(!J.ok)return{type:"failed"};let W=await J.json();if(!W.access_token||!W.refresh_token||typeof W.expires_in!=="number")return{type:"failed"};return{type:"success",access:W.access_token,refresh:W.refresh_token,expires:Date.now()+W.expires_in*1000,email:W.email,idToken:W.id_token}}async function JN($){try{let Z=await fetch(K0.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:$,client_id:K0.clientId}),signal:AbortSignal.timeout(K0.httpTimeoutMs)});if(!Z.ok){let J=await Z.text().catch(()=>""),W=p8(J);throw new eZ(`Token refresh failed: ${Z.status}${W.message?` - ${W.message}`:""}`,{status:Z.status,errorCode:W.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 eZ)throw Z;return{type:"failed"}}}async function WN($="pi"){let{verifier:Z,challenge:Q}=await aZ(),J=ZN(32),W=new URL(K0.authorizationEndpoint);return W.searchParams.set("response_type","code"),W.searchParams.set("client_id",K0.clientId),W.searchParams.set("redirect_uri",K0.redirectUri),W.searchParams.set("scope",K0.scopes),W.searchParams.set("code_challenge",Q),W.searchParams.set("code_challenge_method","S256"),W.searchParams.set("state",J),W.searchParams.set("id_token_add_organizations","true"),W.searchParams.set("codex_cli_simplified_flow","true"),W.searchParams.set("originator",$),{verifier:Z,state:J,url:W.toString()}}function XN(){try{let $=new URL(K0.redirectUri),Z=$.port.length>0?Number.parseInt($.port,10):K0.callbackPort;return{host:$.hostname||"localhost",port:Number.isFinite(Z)?Z:K0.callbackPort,callbackPath:$.pathname||"/auth/callback",redirectUri:$.toString()}}catch{return{host:"localhost",port:K0.callbackPort,callbackPath:"/auth/callback",redirectUri:K0.redirectUri}}}function jN($,Z){let Q=Z?xJ(Z):xJ($),J=Q?Q:xJ($),X=J?.[K0.jwtClaimPath]?.chatgpt_account_id;if(typeof X==="string"&&X.length>0)return X;let j=J?.organizations;if(Array.isArray(j)&&j.length>0){let V=j[0];if(typeof V?.id==="string"&&V.id.length>0)return V.id}let Y=J?.chatgpt_account_id;if(typeof Y==="string"&&Y.length>0)return Y;return null}function HH($,Z){let Q=jN($.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 I4($){p1($.telemetry,"openai-codex");let Z=XN(),{verifier:Q,state:J,url:W}=await WN($.originator),X=await U1({host:Z.host,ports:[Z.port],callbackPath:Z.callbackPath,expectedState:J});$.onAuth({url:W,instructions:"Continue the authentication process in your browser."});let j;try{let Y=await i8({waitForCallback:X.waitForCallback,cancelWait:X.cancelWait,onManualCodeInput:$.onManualCodeInput,parseOptions:{allowHashCodeState:!0}});if(Y.state&&Y.state!==J)throw Error("State mismatch");if(j=Y.code,!j){let H=await $.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),K=d8(H,{allowHashCodeState:!0});if(K.state&&K.state!==J)throw Error("State mismatch");j=K.code}if(!j)throw Error("Missing authorization code");let V=await QN(j,Q,Z.redirectUri);if(V.type!=="success")throw Error("Token exchange failed");let B=HH(V);return l1($.telemetry,"openai-codex"),r1($.telemetry,{id:B.accountId,email:B.email,provider:"openai-codex"}),B}catch(Y){throw i1($.telemetry,"openai-codex",Y instanceof Error?Y.message:String(Y)),Y}finally{X.close()}}async function $Q($,Z){let Q=await JN($);if(Q.type!=="success")throw Error("Failed to refresh OpenAI Codex token");let J=HH(Q,Z);if(!J.refresh)throw Error("Failed to refresh OpenAI Codex token: missing refresh token");return J}async function x4($,Z){if(!$)return null;let Q=Z?.refreshBufferMs??K0.refreshBufferMs,J=Z?.retryableTokenGraceMs??K0.retryableTokenGraceMs;if(Z?.forceRefresh!==!0&&!l8($,Q))return $;try{return await $Q($.refresh,$)}catch(X){if(X instanceof eZ&&X.isLikelyInvalidGrant())return S$(Z?.telemetry,"openai-codex","invalid_grant"),null;if($.expires-Date.now()>J)return $;return null}}C0();var RH={};w(RH,{refreshOcaToken:()=>WQ,loginOcaOAuth:()=>m4,getValidOcaCredentials:()=>c4,OCI_HEADER_OPC_REQUEST_ID:()=>YN,DEFAULT_INTERNAL_OCA_BASE_URL:()=>ZQ,DEFAULT_INTERNAL_IDCS_URL:()=>UH,DEFAULT_INTERNAL_IDCS_SCOPES:()=>DH,DEFAULT_INTERNAL_IDCS_CLIENT_ID:()=>FH,DEFAULT_EXTERNAL_OCA_BASE_URL:()=>QQ,DEFAULT_EXTERNAL_IDCS_URL:()=>LH,DEFAULT_EXTERNAL_IDCS_SCOPES:()=>AH,DEFAULT_EXTERNAL_IDCS_CLIENT_ID:()=>_H});import{decodeJwtPayload as g4}from"@cline/shared";import{nanoid as GH}from"nanoid";class gJ{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(),J=this.ttlMs){this.pruneExpired(Q),this.entries.delete($);while(this.entries.size>=this.maxEntries){let W=this.entries.keys().next().value;if(W===void 0)break;this.entries.delete(W)}this.entries.set($,{value:Z,expiresAt:Q+J})}pruneExpired($){for(let[Z,Q]of this.entries)if(Q.expiresAt<=$)this.entries.delete(Z)}}var FH="a8331954c0cf48ba99b5dd223a14c6ea",UH="https://idcs-9dc693e80d9b469480d7afe00e743931.identity.oraclecloud.com",DH="openid offline_access",ZQ="https://code-internal.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",_H="c1aba3deed5740659981a752714eba33",LH="https://login-ext.identity.oraclecloud.com",AH="openid offline_access",QQ="https://code.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",YN="opc-request-id",VN="/auth/oca",BN=Array.from({length:11},($,Z)=>48801+Z),HN=300000,KN=30000,OH=30000,GN=600000;class JQ 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 h$={internal:{clientId:FH,idcsUrl:UH,scopes:DH,baseUrl:ZQ},external:{clientId:_H,idcsUrl:LH,scopes:AH,baseUrl:QQ}},v4=new Map,FN=86400000,UN=300000,DN=32,vJ=new gJ(FN,DN);function qH($){if(typeof $==="function")return $();return $??"internal"}function zH($){return{internal:{clientId:$?.internal?.clientId??h$.internal.clientId,idcsUrl:$?.internal?.idcsUrl??h$.internal.idcsUrl,scopes:$?.internal?.scopes??h$.internal.scopes,baseUrl:$?.internal?.baseUrl??h$.internal.baseUrl},external:{clientId:$?.external?.clientId??h$.external.clientId,idcsUrl:$?.external?.idcsUrl??h$.external.idcsUrl,scopes:$?.external?.scopes??h$.external.scopes,baseUrl:$?.external?.baseUrl??h$.external.baseUrl}}}function _N($=Date.now()){let Z=$-GN;for(let[Q,J]of v4.entries())if(J.createdAt<Z)v4.delete(Q)}function LN($,Z,Q){if(typeof $.expires_in==="number"&&$.expires_in>0)return Date.now()+$.expires_in*1000;let W=g4(Z)?.exp;if(typeof W==="number"&&W>0)return W*1000;let j=g4(Q)?.exp;if(typeof j==="number"&&j>0)return j*1000;return Date.now()+3600000}function TH($,Z,Q){let J=$.access_token;if(!J)throw Error("Token response did not include an access token");let W=$.refresh_token??Q?.refresh;if(!W)throw Error("Token response did not include a refresh token");let X=g4($.id_token),j=g4(J),Y=X?.sub??j?.sub,V=X?.email??j?.email;return{access:J,refresh:W,expires:LN($,J,$.id_token),accountId:Y??Q?.accountId,email:V??Q?.email,metadata:{...Q?.metadata??{},provider:"oca",mode:Z,subject:Y,idToken:$.id_token}}}async function NH($,Z){let Q=oZ($),J=vJ.get(Q);if(J)return J;let W=`${Q}/.well-known/openid-configuration`,X=await fetch(W,{method:"GET",signal:AbortSignal.timeout(Z)});if(!X.ok){let V=`${Q}/oauth2/v1/token`;return vJ.set(Q,V,Date.now(),UN),V}let Y=(await X.json()).token_endpoint||`${Q}/oauth2/v1/token`;return vJ.set(Q,Y),Y}function fH($){return{code:$.error,message:$.error_description}}async function AN($){let Z=v4.get($.state);if(!Z)throw Error("No PKCE verifier found for this state");v4.delete($.state);let Q=$.mode==="external"?$.config.external:$.config.internal,J=await NH(Q.idcsUrl,$.requestTimeoutMs),W=new URLSearchParams({grant_type:"authorization_code",code:$.code,redirect_uri:Z.redirectUri,client_id:Q.clientId,code_verifier:Z.verifier}),X=await fetch(J,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:W,signal:AbortSignal.timeout($.requestTimeoutMs)}),j=await X.json();if(!X.ok){let V=fH(j);throw new JQ(`Token exchange failed: ${X.status}${V.message?` - ${V.message}`:""}`,{status:X.status,errorCode:V.code})}let Y=g4(j.id_token);if(!j.id_token||!Y)throw Error("No ID token received from OCA");if(Y.nonce!==Z.nonce)throw Error("OIDC nonce verification failed");return TH(j,$.mode)}function ON($){let Z=$.mode==="external"?$.config.external:$.config.internal,Q=new URL(`${oZ(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 m4($){p1($.telemetry,"oca");let Z=zH($.config),Q=qH($.mode),J=$.callbackPorts?.length?$.callbackPorts:BN,W=$.callbackPath??VN,X=$.requestTimeoutMs??OH,j=await U1({ports:J,callbackPath:W,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),Y=j.callbackUrl;if(!Y)throw Error("Unable to bind local OAuth callback server");let V=GH(16),B=GH(16),{verifier:H,challenge:K}=await aZ();_N(),v4.set(V,{verifier:H,nonce:B,mode:Q,redirectUri:Y,createdAt:Date.now()});let G=ON({callbackUrl:Y,mode:Q,state:V,nonce:B,challenge:K,config:Z});$.callbacks.onAuth({url:G,instructions:"Continue the authentication process in your browser."});try{let F=await i8({waitForCallback:j.waitForCallback,cancelWait:j.cancelWait,onManualCodeInput:$.callbacks.onManualCodeInput}),U=F.code,_=F.state;if(F.error)throw Error(`OAuth error: ${F.error}`);if(!U){if(!$.callbacks.onManualCodeInput)throw Error("Timed out waiting for OCA callback");throw Error("Missing authorization code")}if(!_||_!==V)throw Error("State mismatch");let L=await AN({code:U,state:_,mode:Q,config:Z,requestTimeoutMs:X});return l1($.telemetry,"oca"),r1($.telemetry,{id:L.accountId,email:L.email,provider:"oca"}),L}catch(F){throw i1($.telemetry,"oca",F instanceof Error?F.message:String(F)),F}finally{j.close()}}async function WQ($,Z={}){let Q=zH(Z.config),J=Z.requestTimeoutMs??OH,W=$.metadata?.mode,X=W==="internal"||W==="external"?W:qH(Z.mode),j=X==="external"?Q.external:Q.internal,Y=await NH(j.idcsUrl,J),V=new URLSearchParams({grant_type:"refresh_token",refresh_token:$.refresh,client_id:j.clientId}),B=await fetch(Y,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:V,signal:AbortSignal.timeout(J)}),H=await B.json();if(!B.ok){let K=fH(H);throw new JQ(`Token refresh failed: ${B.status}${K.message?` - ${K.message}`:""}`,{status:B.status,errorCode:K.code})}return TH(H,X,$)}async function c4($,Z,Q){if(!$)return null;let J=Z?.refreshBufferMs??Q?.refreshBufferMs??HN,W=Z?.retryableTokenGraceMs??Q?.retryableTokenGraceMs??KN;if(Z?.forceRefresh!==!0&&!l8($,J))return $;try{return await WQ($,Q)}catch(j){if(j instanceof JQ&&j.isLikelyInvalidGrant())return S$(Q?.telemetry,"oca","invalid_grant"),null;if($.expires-Date.now()>W)return $;return null}}var XQ="workos:";function zN($){let Z=$.trim();return Z.toLowerCase().startsWith(XQ)?Z:`${XQ}${Z}`}function TN($){let Z=$.trim();return Z.toLowerCase().startsWith(XQ)?Z.slice(XQ.length):Z}function NN($){let Q=qN($)?.exp;if(typeof Q==="number"&&Q>0)return Q*1000;return null}function fN($,Z){let Q=$.auth?.expiresAt;if(typeof Q==="number"&&Number.isFinite(Q)&&Q>0)return Q;let J=NN(Z);if(J)return J;return Date.now()-1}function RN($,Z){let Q=$.auth?.accessToken?.trim(),J=$.auth?.refreshToken?.trim();if(!Q||!J)return null;let W=Z?.normalizeAccessToken?.(Q)??Q;if(!W)return null;return{access:W,refresh:J,expires:fN($,W),accountId:$.auth?.accountId,metadata:$.auth?.metadata}}function MN($){let Z=$.formatAccessToken?.($.credentials.access)??$.credentials.access,Q={...$.settings?.auth??{},accessToken:Z,refreshToken:$.credentials.refresh,accountId:$.credentials.accountId,expiresAt:$.credentials.expires},J=Object.fromEntries(Object.entries($.credentials.metadata??{}).filter(([,j])=>j!==void 0)),W={...$.settings?.auth?.metadata??{},...J};if(Object.keys(W).length>0)Q.metadata=W;let X={...$.settings??{provider:$.storageProviderId},provider:$.storageProviderId,auth:Q};if($.save!==!1)$.manager.saveProviderSettings(X,{...$.setLastUsed===void 0?{}:{setLastUsed:$.setLastUsed},tokenSource:"oauth"});return X}function mJ($){let Z=$.storageProviderId??$.providerId;return{providerId:$.providerId,storageProviderId:Z,getApiKey(Q){let J=Q?.auth?.accessToken?.trim();if(J)return $.formatAccessToken?.(J)??J;return Q?.apiKey?.trim()||Q?.auth?.apiKey?.trim()||void 0},login:$.login,refresh:$.refresh,saveCredentials(Q){return MN({...Q,storageProviderId:Z,formatAccessToken:$.formatAccessToken})},isConfigured(Q){return!!Q?.auth?.accessToken},normalizeStoredAccessToken:$.normalizeStoredAccessToken}}function EH($){return mJ({providerId:$.providerId,storageProviderId:$.storageProviderId,formatAccessToken:zN,normalizeStoredAccessToken:TN,login:({settings:Z,callbacks:Q,telemetry:J})=>k4({apiBaseUrl:Z?.baseUrl?.trim()||MH().apiBaseUrl,useWorkOSDeviceAuth:!0,callbacks:Q,telemetry:J}),refresh:({settings:Z,credentials:Q,forceRefresh:J,telemetry:W})=>h4(Q,{apiBaseUrl:Z.baseUrl?.trim()||MH().apiBaseUrl,telemetry:W},{forceRefresh:J})})}var EN=[EH({providerId:"cline"}),EH({providerId:"cline-pass",storageProviderId:"cline"}),mJ({providerId:"oca",login:({settings:$,callbacks:Z,telemetry:Q})=>m4({mode:$?.oca?.mode,callbacks:Z,telemetry:Q}),refresh:({settings:$,credentials:Z,forceRefresh:Q,telemetry:J})=>c4(Z,{forceRefresh:Q,telemetry:J},{mode:$.oca?.mode,telemetry:J})}),mJ({providerId:"openai-codex",login:({callbacks:$,telemetry:Z})=>I4({onAuth:$.onAuth,onPrompt:$.onPrompt,onProgress:$.onProgress,onManualCodeInput:$.onManualCodeInput,telemetry:Z}),refresh:({credentials:$,forceRefresh:Z,telemetry:Q})=>x4($,{forceRefresh:Z,telemetry:Q})})],CN=new Map(EN.map(($)=>[$.providerId,$]));function U0($){return CN.get($.trim().toLowerCase())}function I$($){return U0($)!==void 0}function cJ($){return U0($)?.storageProviderId}function uJ($,Z){let Q=U0(Z),J=Q?.storageProviderId??Z,W=$.getProviderSettings(J);return Q?.getApiKey(W)??n8(Z,W)}async function u4($,Z,Q){let J=U0(Z);if(!J)throw Error(`Provider "${Z}" does not support OAuth login`);let W=$.getProviderSettings(J.storageProviderId),X=await J.login({settings:W,callbacks:Q.callbacks,telemetry:Q.telemetry});return J.saveCredentials({manager:$,settings:W,credentials:X})}function d4($,Z){let Q=U0($);if(!Q)return null;return RN(Z,{normalizeAccessToken:Q.normalizeStoredAccessToken})}function E2($){let Z=U0($.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 n8($,Z){let Q=U0($);if(Q)return Q.getApiKey(Z);return Z?.auth?.accessToken?.trim()||Z?.apiKey?.trim()||Z?.auth?.apiKey?.trim()||void 0}function dJ($,Z){let Q=U0($);if(!Q)return Z.access;return Q.getApiKey({provider:Q.storageProviderId,auth:{accessToken:Z.access}})??Z.access}C0();var AK={};w(AK,{createContextCompactionPrepareTurn:()=>o4,createCompactionStateAwarePrepareTurn:()=>s4});import{estimateRequestInputTokens as Tf}from"@cline/shared";var kH={};w(kH,{projectSessionCompactionState:()=>x$,parseSessionCompactionState:()=>D1,createSessionCompactionState:()=>a8,SessionCompactionStateSchema:()=>p4});import{createHash as wN}from"node:crypto";import{formatDisplayUserInput as wH}from"@cline/shared";import{z as C1}from"zod";function PN($){if(!$||typeof $!=="object"||Array.isArray($))return!1;let Z=$;if(Z.role!=="user"&&Z.role!=="assistant")return!1;return typeof Z.content==="string"||Array.isArray(Z.content)}var SN=C1.custom(PN),p4=C1.object({version:C1.literal(1),updated_at:C1.string().datetime(),conversation_id:C1.string().min(1).optional(),source_message_count:C1.number().int().nonnegative(),source_prefix_hash:C1.string().min(1).optional(),source_last_message_key:C1.string().min(1).optional(),messages:C1.array(SN),system_prompt:C1.string().optional()});function pJ($){return JSON.parse(JSON.stringify($))}function PH($){if($.role!=="user")return $;if(typeof $.content==="string")return{...$,content:wH($.content)};return{...$,content:$.content.map((Z)=>Z.type==="text"?{...Z,text:wH(Z.text)}:Z)}}function SH($){if($.includes(":"))throw TypeError("Message role cannot contain ':' in compaction boundary keys")}function bN($){let Z=PH($);return SH(Z.role),[["role",Z.role],["content",Z.content],["agent",Z.agent??null],["sessionId",Z.sessionId??null],["metadata",Z.metadata??null],["modelInfo",Z.modelInfo??null],["metrics",Z.metrics??null]]}function bH($){if(!$)return"";let Z=PH($);if(typeof Z.id==="string"&&Z.id.trim())return`id:${Z.id.trim()}`;if(SH(Z.role),typeof Z.ts==="number"&&Number.isFinite(Z.ts))return`ts:${Z.role}:${Z.ts}`;return`content:${Z.role}:${JSON.stringify(Z.content)}`}function yH($,Z=$.length){let Q=wN("sha256");Q.update(`cline-session-compaction-source-v2
331
331
  `),Q.update(`${Z}
332
- `);for(let J of $.slice(0,Z))Q.update(JSON.stringify(SN(J))),Q.update(`
333
- `);return`sha256:${Q.digest("hex")}`}function n8($){let Z=$.sourceMessages.at(-1),Q=SH(Z);return p4.parse({version:1,updated_at:$.updatedAt??new Date().toISOString(),...$.conversationId?.trim()?{conversation_id:$.conversationId.trim()}:{},source_message_count:$.sourceMessages.length,source_prefix_hash:bH($.sourceMessages),...Q?{source_last_message_key:Q}:{},messages:pJ($.compactedMessages),...$.systemPrompt!==void 0?{system_prompt:$.systemPrompt}:{}})}function x$($,Z){if(!($.source_message_count<=Z.length))return;let J=!!$.source_prefix_hash&&bH(Z,$.source_message_count)===$.source_prefix_hash,W=Z[$.source_message_count-1],X=!$.source_prefix_hash&&$.source_message_count>0&&!!$.source_last_message_key&&SH(W)===$.source_last_message_key;if(!(J||X))return;return[...pJ($.messages),...pJ(Z.slice($.source_message_count))]}function D1($){let Z=p4.safeParse($);return Z.success?Z.data:void 0}import{createHandlerAsync as Yf}from"@cline/llms";var xH={};w(xH,{resolveMessageDisplayRole:()=>lJ,isUserRunMessage:()=>iJ,getUserRunSpan:()=>w1,countUserRunMessages:()=>g$});import{formatDisplayUserInput as kH}from"@cline/shared";var bN=new Set(["auto_compaction","compaction_budget_emergency","completion_reminder","loop_detection_notice","manual_compaction","mistake_stop_notice","recovery_notice"]);function hH($){switch($){case"user":case"assistant":case"tool":case"system":case"status":case"error":return $;default:return"assistant"}}function IH($){return $.metadata&&typeof $.metadata==="object"&&!Array.isArray($.metadata)?$.metadata:void 0}function yN($){let Z=$?.userRunSpan;return typeof Z==="number"&&Number.isInteger(Z)&&Z>=0?Z:void 0}function kN($){if(typeof $.content==="string")return{hasAttachment:!1,text:$.content};if(!Array.isArray($.content))return{hasAttachment:!1,text:"unknown"};let Z=!1,Q=!1,J=[];for(let W of $.content){if(!W||typeof W!=="object"||Array.isArray(W))continue;let X=W;if(X.type==="text"&&typeof X.text==="string")J.push(X.text);else if(X.type==="tool_result"||X.type==="tool-result")Q=!0;else if(X.type==="file"||X.type==="image")Z=!0}return{hasAttachment:Z&&!Q,text:J.join(`
334
- `)}}function hN($){let Z=kH($);return Z.startsWith("[TASK RESUMPTION]")||Z==="The user approved switching to act mode. Continue with the approved plan now."}function lJ($){let Z=hH($.role),Q=IH($),J=typeof Q?.displayRole==="string"?Q.displayRole.trim().toLowerCase():"";if(J==="system"||J==="status"||J==="error")return J;return Z}function w1($){if(hH($.role)!=="user")return 0;let Z=IH($),Q=typeof Z?.kind==="string"?Z.kind:void 0,J=yN(Z);if(Q==="compaction"||Q==="compaction_summary")return J??1;if(J!==void 0)return J;if(Q&&bN.has(Q))return 0;let W=kN($);if(!W.hasAttachment&&!kH(W.text))return 0;if(!W.hasAttachment&&hN(W.text))return 0;return 1}function iJ($){return w1($)>0}function g$($){let Z=0;for(let Q of $??[])Z+=w1(Q);return Z}function IN($){switch($){case"agentic_summary":case"basic_compaction_projection":return{protectLatestTypedUser:!0,protectLiveTailFromDrop:!0,dropUnsafeOutsideLiveTail:!0,dropThinkingBlocks:!0};case"normal_provider_request":return{protectLatestTypedUser:!0,protectLiveTailFromDrop:!0,dropUnsafeOutsideLiveTail:!1,dropThinkingBlocks:!1}}}function gH($){return $.map((Z)=>({...Z,content:Array.isArray(Z.content)?Z.content.map((Q)=>({...Q})):Z.content,...Z.metadata?{metadata:{...Z.metadata}}:{}}))}function P1($){try{return JSON.stringify($).length}catch{return String($).length}}function jQ($,Z){return $.reduce((Q,J)=>Q+Z(J),0)}function uH($){return $.role==="user"&&Array.isArray($.content)&&$.content.length>0&&$.content.every((Z)=>Z.type==="tool_result")}function YQ($){for(let Z=$.length-1;Z>=0;Z-=1){let Q=$[Z];if(Q.role==="user"&&!uH(Q))return Z}return-1}function xN($){for(let Z=0;Z<$.length;Z+=1){let Q=$[Z];if(Q.role==="user"&&!uH(Q))return Z}return-1}function nJ($){let Z=new Set;if(!Array.isArray($.content))return Z;for(let Q of $.content)if(Q.type==="tool_use")Z.add(Q.id);else if(Q.type==="tool_result")Z.add(Q.tool_use_id);return Z}function gN($){let Z=new Map;for(let Q=0;Q<$.length;Q+=1)for(let J of nJ($[Q])){let W=Z.get(J);if(W)W.add(Q);else Z.set(J,new Set([Q]))}return Z}function rJ($){let Z=new Set;for(let Q of $){if(!Array.isArray(Q.content))continue;for(let J of Q.content)if(J.type==="tool_result")Z.add(J.tool_use_id)}for(let Q=$.length-1;Q>=0;Q-=1){let J=$[Q];if(!Array.isArray(J.content))continue;if(J.content.some((W)=>W.type==="tool_use"&&!Z.has(W.id)))return Q}return $.length}function vN($,Z){let Q=gN($),J=new Set,W=[Z];while(W.length>0){let X=W.shift();if(X===void 0||J.has(X))continue;J.add(X);for(let j of nJ($[X]))for(let Y of Q.get(j)??[])if(!J.has(Y))W.push(Y)}return J}function mN($){return $.type==="image"||$.type==="redacted_thinking"}function cN($){return $.type==="image"}function uN($,Z,Q){if(Z.dropThinkingBlocks&&$.type==="thinking")return!0;return Z.dropUnsafeOutsideLiveTail&&!Q&&mN($)}function vH($,Z,Q,J="over_budget"){let W=[],X=[];for(let j=0;j<$.length;j+=1){let Y=$[j];if(Array.isArray(Y.content)&&Y.content.length===0){Q.push({kind:"dropped_message",path:{messageIndex:Z[j]},reason:J,originalSize:P1(Y),finalSize:0});continue}W.push(Y),X.push(Z[j])}return{messages:W,originalIndexes:X}}function dN($,Z,Q,J,W,X){return $.map((j,Y)=>{if(!Array.isArray(j.content))return j;let V=!1,B=Y===J||Y>=W,H=j.content.flatMap((K,G)=>{if(uN(K,X,B))return V=!0,Q.push({kind:"dropped_block",path:{messageIndex:Z[Y],blockIndex:G},reason:"unsafe_to_truncate",originalSize:P1(K),finalSize:0}),[];if(K.type==="tool_result"&&Array.isArray(K.content)){let F=K.content.filter((U)=>{if(X.dropUnsafeOutsideLiveTail&&!B&&cN(U))return!1;return!0});if(F.length!==K.content.length){V=!0;let U={...K,content:F};return Q.push({kind:"dropped_block",path:{messageIndex:Z[Y],blockIndex:G},reason:"unsafe_to_truncate",originalSize:P1(K),finalSize:P1(U)}),[U]}}return[K]});return V?{...j,content:H}:j})}function pN($,Z,Q){return $.map((J,W)=>{if(!Array.isArray(J.content))return J;let X=!1,j=J.content.filter((Y,V)=>{if(Y.type!=="thinking")return!0;return X=!0,Q.push({kind:"dropped_block",path:{messageIndex:Z[W],blockIndex:V},reason:"unsafe_to_truncate",originalSize:P1(Y),finalSize:0}),!1});return X?{...J,content:j}:J})}function a8($,Z){if(Z<=0)return"";if($.length<=Z)return $;if(Z<=16)return $.slice(0,Math.max(1,Z));let Q=`
332
+ `);for(let J of $.slice(0,Z))Q.update(JSON.stringify(bN(J))),Q.update(`
333
+ `);return`sha256:${Q.digest("hex")}`}function a8($){let Z=$.sourceMessages.at(-1),Q=bH(Z);return p4.parse({version:1,updated_at:$.updatedAt??new Date().toISOString(),...$.conversationId?.trim()?{conversation_id:$.conversationId.trim()}:{},source_message_count:$.sourceMessages.length,source_prefix_hash:yH($.sourceMessages),...Q?{source_last_message_key:Q}:{},messages:pJ($.compactedMessages),...$.systemPrompt!==void 0?{system_prompt:$.systemPrompt}:{}})}function x$($,Z){if(!($.source_message_count<=Z.length))return;let J=!!$.source_prefix_hash&&yH(Z,$.source_message_count)===$.source_prefix_hash,W=Z[$.source_message_count-1],X=!$.source_prefix_hash&&$.source_message_count>0&&!!$.source_last_message_key&&bH(W)===$.source_last_message_key;if(!(J||X))return;return[...pJ($.messages),...pJ(Z.slice($.source_message_count))]}function D1($){let Z=p4.safeParse($);return Z.success?Z.data:void 0}import{createHandlerAsync as Vf}from"@cline/llms";var gH={};w(gH,{resolveMessageDisplayRole:()=>lJ,isUserRunMessage:()=>iJ,getUserRunSpan:()=>w1,countUserRunMessages:()=>g$});import{formatDisplayUserInput as hH}from"@cline/shared";var yN=new Set(["auto_compaction","compaction_budget_emergency","completion_reminder","loop_detection_notice","manual_compaction","mistake_stop_notice","recovery_notice"]);function IH($){switch($){case"user":case"assistant":case"tool":case"system":case"status":case"error":return $;default:return"assistant"}}function xH($){return $.metadata&&typeof $.metadata==="object"&&!Array.isArray($.metadata)?$.metadata:void 0}function kN($){let Z=$?.userRunSpan;return typeof Z==="number"&&Number.isInteger(Z)&&Z>=0?Z:void 0}function hN($){if(typeof $.content==="string")return{hasAttachment:!1,text:$.content};if(!Array.isArray($.content))return{hasAttachment:!1,text:"unknown"};let Z=!1,Q=!1,J=[];for(let W of $.content){if(!W||typeof W!=="object"||Array.isArray(W))continue;let X=W;if(X.type==="text"&&typeof X.text==="string")J.push(X.text);else if(X.type==="tool_result"||X.type==="tool-result")Q=!0;else if(X.type==="file"||X.type==="image")Z=!0}return{hasAttachment:Z&&!Q,text:J.join(`
334
+ `)}}function IN($){let Z=hH($);return Z.startsWith("[TASK RESUMPTION]")||Z==="The user approved switching to act mode. Continue with the approved plan now."}function lJ($){let Z=IH($.role),Q=xH($),J=typeof Q?.displayRole==="string"?Q.displayRole.trim().toLowerCase():"";if(J==="system"||J==="status"||J==="error")return J;return Z}function w1($){if(IH($.role)!=="user")return 0;let Z=xH($),Q=typeof Z?.kind==="string"?Z.kind:void 0,J=kN(Z);if(Q==="compaction"||Q==="compaction_summary")return J??1;if(J!==void 0)return J;if(Q&&yN.has(Q))return 0;let W=hN($);if(!W.hasAttachment&&!hH(W.text))return 0;if(!W.hasAttachment&&IN(W.text))return 0;return 1}function iJ($){return w1($)>0}function g$($){let Z=0;for(let Q of $??[])Z+=w1(Q);return Z}function xN($){switch($){case"agentic_summary":case"basic_compaction_projection":return{protectLatestTypedUser:!0,protectLiveTailFromDrop:!0,dropUnsafeOutsideLiveTail:!0,dropThinkingBlocks:!0};case"normal_provider_request":return{protectLatestTypedUser:!0,protectLiveTailFromDrop:!0,dropUnsafeOutsideLiveTail:!1,dropThinkingBlocks:!1}}}function vH($){return $.map((Z)=>({...Z,content:Array.isArray(Z.content)?Z.content.map((Q)=>({...Q})):Z.content,...Z.metadata?{metadata:{...Z.metadata}}:{}}))}function P1($){try{return JSON.stringify($).length}catch{return String($).length}}function jQ($,Z){return $.reduce((Q,J)=>Q+Z(J),0)}function dH($){return $.role==="user"&&Array.isArray($.content)&&$.content.length>0&&$.content.every((Z)=>Z.type==="tool_result")}function YQ($){for(let Z=$.length-1;Z>=0;Z-=1){let Q=$[Z];if(Q.role==="user"&&!dH(Q))return Z}return-1}function gN($){for(let Z=0;Z<$.length;Z+=1){let Q=$[Z];if(Q.role==="user"&&!dH(Q))return Z}return-1}function nJ($){let Z=new Set;if(!Array.isArray($.content))return Z;for(let Q of $.content)if(Q.type==="tool_use")Z.add(Q.id);else if(Q.type==="tool_result")Z.add(Q.tool_use_id);return Z}function vN($){let Z=new Map;for(let Q=0;Q<$.length;Q+=1)for(let J of nJ($[Q])){let W=Z.get(J);if(W)W.add(Q);else Z.set(J,new Set([Q]))}return Z}function rJ($){let Z=new Set;for(let Q of $){if(!Array.isArray(Q.content))continue;for(let J of Q.content)if(J.type==="tool_result")Z.add(J.tool_use_id)}for(let Q=$.length-1;Q>=0;Q-=1){let J=$[Q];if(!Array.isArray(J.content))continue;if(J.content.some((W)=>W.type==="tool_use"&&!Z.has(W.id)))return Q}return $.length}function mN($,Z){let Q=vN($),J=new Set,W=[Z];while(W.length>0){let X=W.shift();if(X===void 0||J.has(X))continue;J.add(X);for(let j of nJ($[X]))for(let Y of Q.get(j)??[])if(!J.has(Y))W.push(Y)}return J}function cN($){return $.type==="image"||$.type==="redacted_thinking"}function uN($){return $.type==="image"}function dN($,Z,Q){if(Z.dropThinkingBlocks&&$.type==="thinking")return!0;return Z.dropUnsafeOutsideLiveTail&&!Q&&cN($)}function mH($,Z,Q,J="over_budget"){let W=[],X=[];for(let j=0;j<$.length;j+=1){let Y=$[j];if(Array.isArray(Y.content)&&Y.content.length===0){Q.push({kind:"dropped_message",path:{messageIndex:Z[j]},reason:J,originalSize:P1(Y),finalSize:0});continue}W.push(Y),X.push(Z[j])}return{messages:W,originalIndexes:X}}function pN($,Z,Q,J,W,X){return $.map((j,Y)=>{if(!Array.isArray(j.content))return j;let V=!1,B=Y===J||Y>=W,H=j.content.flatMap((K,G)=>{if(dN(K,X,B))return V=!0,Q.push({kind:"dropped_block",path:{messageIndex:Z[Y],blockIndex:G},reason:"unsafe_to_truncate",originalSize:P1(K),finalSize:0}),[];if(K.type==="tool_result"&&Array.isArray(K.content)){let F=K.content.filter((U)=>{if(X.dropUnsafeOutsideLiveTail&&!B&&uN(U))return!1;return!0});if(F.length!==K.content.length){V=!0;let U={...K,content:F};return Q.push({kind:"dropped_block",path:{messageIndex:Z[Y],blockIndex:G},reason:"unsafe_to_truncate",originalSize:P1(K),finalSize:P1(U)}),[U]}}return[K]});return V?{...j,content:H}:j})}function lN($,Z,Q){return $.map((J,W)=>{if(!Array.isArray(J.content))return J;let X=!1,j=J.content.filter((Y,V)=>{if(Y.type!=="thinking")return!0;return X=!0,Q.push({kind:"dropped_block",path:{messageIndex:Z[W],blockIndex:V},reason:"unsafe_to_truncate",originalSize:P1(Y),finalSize:0}),!1});return X?{...J,content:j}:J})}function o8($,Z){if(Z<=0)return"";if($.length<=Z)return $;if(Z<=16)return $.slice(0,Math.max(1,Z));let Q=`
335
335
  ...[truncated ${$.length-Z} chars]`,J=Math.max(1,Z-Q.length),W=`
336
- ...[truncated ${$.length-J} chars]`;return`${$.slice(0,J)}${W}`}function mH($,Z){if(typeof $==="string")return a8($,Z);let Q=Z;return $.map((J)=>{if(Q<=0){if(J.type==="text")return{...J,text:""};if(J.type==="file")return{...J,content:""};return J}if(J.type==="text"){let W=a8(J.text,Q);return Q-=W.length,{...J,text:W}}if(J.type==="file"){let W=a8(J.content,Q);return Q-=W.length,{...J,content:W}}return J})}function lN($){if(typeof $==="string")return $.length;return $.reduce((Z,Q)=>{if(Q.type==="text")return Z+Q.text.length;if(Q.type==="file")return Z+Q.content.length;return Z},0)}function iN($,Z){if(typeof $.content==="string")return{...$,content:a8($.content,Z)};let Q=Z;return{...$,content:$.content.map((J)=>{if(Q<=0){if(J.type==="text")return{...J,text:""};if(J.type==="file")return{...J,content:""};if(J.type==="tool_result")return{...J,content:mH(J.content,0)};return J}if(J.type==="text"){let W=a8(J.text,Q);return Q-=W.length,{...J,text:W}}if(J.type==="file"){let W=a8(J.content,Q);return Q-=W.length,{...J,content:W}}if(J.type==="tool_result"){let W=mH(J.content,Q);return Q-=lN(W),{...J,content:W}}return J})}}function rN($){if(typeof $.content==="string")return $.content.length>0;return $.content.some((Z)=>Z.type==="text"||Z.type==="file"||Z.type==="tool_result")}function nN($,Z,Q){return{messages:$.filter((J,W)=>!Q.has(W)),originalIndexes:Z.filter((J,W)=>!Q.has(W))}}function aN($,Z){if(Z<0)return!1;for(let Q of $)if(Q>=Z)return!0;return!1}function cH($,Z){return Z>=0&&$.has(Z)}function l4($){let Z=[],Q=[],J=IN($.policyIntent);if($.targetTokens<=0)return{status:"failed",messages:gH($.messages),actions:Z,liveTailHandling:"preserved_out_of_band",estimatedTokens:jQ($.messages,$.estimateMessageTokens),warnings:[{code:"budget_impossible",message:"Target budget must be greater than zero."}]};let W=gH($.messages),X=W.map((B,H)=>H);if(J.dropThinkingBlocks){let B=vH(pN(W,X,Z),X,Z,"unsafe_to_truncate");W=B.messages,X=B.originalIndexes}let j=J.protectLatestTypedUser?YQ(W):-1,Y=J.protectLiveTailFromDrop?rJ(W):W.length;if(J.dropUnsafeOutsideLiveTail){let B=vH(dN(W,X,Z,j,Y,J),X,Z);W=B.messages,X=B.originalIndexes}let V=jQ(W,$.estimateMessageTokens);if(V<=$.targetTokens)return{status:"ok",messages:W,actions:Z,liveTailHandling:Z.length>0?"included_degraded":"included_verbatim",estimatedTokens:V,warnings:Q};for(let B=W.length-1;B>=0&&V>$.targetTokens;B-=1){let H=YQ(W);if(B===H)continue;if(J.protectLiveTailFromDrop&&B>=rJ(W))continue;if(!rN(W[B]))continue;let K=P1(W[B]),G=Math.max(1,K/Math.max(1,$.estimateMessageTokens(W[B]))),F=Math.max(16,Math.floor($.targetTokens*G/Math.max(1,W.length)));W[B]=iN(W[B],F),Z.push({kind:"truncated_text",path:{messageIndex:X[B]},reason:"over_budget",originalSize:K,finalSize:P1(W[B])}),V=jQ(W,$.estimateMessageTokens)}for(let B=0;B<W.length&&V>$.targetTokens;){let H=xN(W),K=YQ(W),G=J.protectLiveTailFromDrop?rJ(W):W.length;if(B===H||B===K){Z.push({kind:"preserved",path:{messageIndex:X[B]},reason:"protected_live_tail",originalSize:P1(W[B]),finalSize:P1(W[B])}),B+=1;continue}let F=vN(W,B);if(cH(F,H)){B+=1;continue}if(cH(F,K)){B+=1;continue}if(aN(F,G)){B+=1;continue}for(let _ of F)Z.push({kind:"dropped_message",path:{messageIndex:X[_]},reason:F.size>1||nJ(W[_]).size>0?"tool_pair_boundary":"over_budget",originalSize:P1(W[_]),finalSize:0});let U=nN(W,X,F);W=U.messages,X=U.originalIndexes,V=jQ(W,$.estimateMessageTokens)}if(V>$.targetTokens)return Q.push({code:"budget_unachievable_with_protections",message:"Projection could not reach budget without violating protected content."}),{status:"failed",messages:W,actions:Z,liveTailHandling:"included_degraded",estimatedTokens:V,warnings:Q};return{status:"ok",messages:W,actions:Z,liveTailHandling:Z.length>0?"included_degraded":"included_verbatim",estimatedTokens:V,warnings:Q}}import{CHARS_PER_TOKEN as Yl,estimateTokens as VQ}from"@cline/shared";var rH=128000,oN=0.9,C2=0.9,nH=0.7,aH=20000,dH=1024,pH=2000,oH=2000;function lH($){return typeof $==="number"&&Number.isFinite($)&&$>0}function a4($){let Z=lH($.contextWindow)?$.contextWindow:void 0,Q=lH($.maxInputTokens)?$.maxInputTokens:void 0;if(Q!==void 0)return Z===void 0?Q:Math.min(Q,Z);return Z===void 0?void 0:Z*oN}function n4($,Z){if($.length<=Z)return $;return`${$.slice(0,Z)}
337
- ...[truncated ${$.length-Z} chars]`}function sN($){let Z=tN($);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}">
336
+ ...[truncated ${$.length-J} chars]`;return`${$.slice(0,J)}${W}`}function cH($,Z){if(typeof $==="string")return o8($,Z);let Q=Z;return $.map((J)=>{if(Q<=0){if(J.type==="text")return{...J,text:""};if(J.type==="file")return{...J,content:""};return J}if(J.type==="text"){let W=o8(J.text,Q);return Q-=W.length,{...J,text:W}}if(J.type==="file"){let W=o8(J.content,Q);return Q-=W.length,{...J,content:W}}return J})}function iN($){if(typeof $==="string")return $.length;return $.reduce((Z,Q)=>{if(Q.type==="text")return Z+Q.text.length;if(Q.type==="file")return Z+Q.content.length;return Z},0)}function rN($,Z){if(typeof $.content==="string")return{...$,content:o8($.content,Z)};let Q=Z;return{...$,content:$.content.map((J)=>{if(Q<=0){if(J.type==="text")return{...J,text:""};if(J.type==="file")return{...J,content:""};if(J.type==="tool_result")return{...J,content:cH(J.content,0)};return J}if(J.type==="text"){let W=o8(J.text,Q);return Q-=W.length,{...J,text:W}}if(J.type==="file"){let W=o8(J.content,Q);return Q-=W.length,{...J,content:W}}if(J.type==="tool_result"){let W=cH(J.content,Q);return Q-=iN(W),{...J,content:W}}return J})}}function nN($){if(typeof $.content==="string")return $.content.length>0;return $.content.some((Z)=>Z.type==="text"||Z.type==="file"||Z.type==="tool_result")}function aN($,Z,Q){return{messages:$.filter((J,W)=>!Q.has(W)),originalIndexes:Z.filter((J,W)=>!Q.has(W))}}function oN($,Z){if(Z<0)return!1;for(let Q of $)if(Q>=Z)return!0;return!1}function uH($,Z){return Z>=0&&$.has(Z)}function l4($){let Z=[],Q=[],J=xN($.policyIntent);if($.targetTokens<=0)return{status:"failed",messages:vH($.messages),actions:Z,liveTailHandling:"preserved_out_of_band",estimatedTokens:jQ($.messages,$.estimateMessageTokens),warnings:[{code:"budget_impossible",message:"Target budget must be greater than zero."}]};let W=vH($.messages),X=W.map((B,H)=>H);if(J.dropThinkingBlocks){let B=mH(lN(W,X,Z),X,Z,"unsafe_to_truncate");W=B.messages,X=B.originalIndexes}let j=J.protectLatestTypedUser?YQ(W):-1,Y=J.protectLiveTailFromDrop?rJ(W):W.length;if(J.dropUnsafeOutsideLiveTail){let B=mH(pN(W,X,Z,j,Y,J),X,Z);W=B.messages,X=B.originalIndexes}let V=jQ(W,$.estimateMessageTokens);if(V<=$.targetTokens)return{status:"ok",messages:W,actions:Z,liveTailHandling:Z.length>0?"included_degraded":"included_verbatim",estimatedTokens:V,warnings:Q};for(let B=W.length-1;B>=0&&V>$.targetTokens;B-=1){let H=YQ(W);if(B===H)continue;if(J.protectLiveTailFromDrop&&B>=rJ(W))continue;if(!nN(W[B]))continue;let K=P1(W[B]),G=Math.max(1,K/Math.max(1,$.estimateMessageTokens(W[B]))),F=Math.max(16,Math.floor($.targetTokens*G/Math.max(1,W.length)));W[B]=rN(W[B],F),Z.push({kind:"truncated_text",path:{messageIndex:X[B]},reason:"over_budget",originalSize:K,finalSize:P1(W[B])}),V=jQ(W,$.estimateMessageTokens)}for(let B=0;B<W.length&&V>$.targetTokens;){let H=gN(W),K=YQ(W),G=J.protectLiveTailFromDrop?rJ(W):W.length;if(B===H||B===K){Z.push({kind:"preserved",path:{messageIndex:X[B]},reason:"protected_live_tail",originalSize:P1(W[B]),finalSize:P1(W[B])}),B+=1;continue}let F=mN(W,B);if(uH(F,H)){B+=1;continue}if(uH(F,K)){B+=1;continue}if(oN(F,G)){B+=1;continue}for(let _ of F)Z.push({kind:"dropped_message",path:{messageIndex:X[_]},reason:F.size>1||nJ(W[_]).size>0?"tool_pair_boundary":"over_budget",originalSize:P1(W[_]),finalSize:0});let U=aN(W,X,F);W=U.messages,X=U.originalIndexes,V=jQ(W,$.estimateMessageTokens)}if(V>$.targetTokens)return Q.push({code:"budget_unachievable_with_protections",message:"Projection could not reach budget without violating protected content."}),{status:"failed",messages:W,actions:Z,liveTailHandling:"included_degraded",estimatedTokens:V,warnings:Q};return{status:"ok",messages:W,actions:Z,liveTailHandling:Z.length>0?"included_degraded":"included_verbatim",estimatedTokens:V,warnings:Q}}import{CHARS_PER_TOKEN as Fl,estimateTokens as VQ}from"@cline/shared";var nH=128000,sN=0.9,w2=0.9,aH=0.7,oH=20000,pH=1024,lH=2000,sH=2000;function iH($){return typeof $==="number"&&Number.isFinite($)&&$>0}function a4($){let Z=iH($.contextWindow)?$.contextWindow:void 0,Q=iH($.maxInputTokens)?$.maxInputTokens:void 0;if(Q!==void 0)return Z===void 0?Q:Math.min(Q,Z);return Z===void 0?void 0:Z*sN}function n4($,Z){if($.length<=Z)return $;return`${$.slice(0,Z)}
337
+ ...[truncated ${$.length-Z} chars]`}function tN($){let Z=eN($);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}">
338
338
  ${Q.content}
339
339
  </file>`;case"image":return`[image:${Q.mediaType}]`;default:return""}}).join(`
340
- `)}function tN($){if(typeof $==="string")return n4($,pH);return $.map((Z)=>{switch(Z.type){case"text":return{...Z,text:n4(Z.text,pH)};case"file":return{...Z,content:n4(Z.content,oH)};case"image":return Z;default:return Z}})}function eN($){return Object.entries($).map(([Z,Q])=>`${Z}=${JSON.stringify(Q)}`).join(", ")}function sH($){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]: ${n4(Q.thinking,2000)}`);break;case"redacted_thinking":Z.push("[Bot thinking]: [redacted]");break;case"tool_use":Z.push(`[Bot tool calls]: ${Q.name}(${eN(Q.input)})`);break;case"tool_result":Z.push(`[Tool result]: ${sN(Q.content)}`);break;case"file":Z.push(`[${$.role==="user"?"User":"Bot"} file ${Q.path}]: ${n4(Q.content,oH)}`);break;case"image":Z.push(`[${$.role==="user"?"User":"Bot"} image]: ${Q.mediaType}`);break}return Z.join(`
341
- `)}function tH($){return $.map(sH).join(`
340
+ `)}function eN($){if(typeof $==="string")return n4($,lH);return $.map((Z)=>{switch(Z.type){case"text":return{...Z,text:n4(Z.text,lH)};case"file":return{...Z,content:n4(Z.content,sH)};case"image":return Z;default:return Z}})}function $f($){return Object.entries($).map(([Z,Q])=>`${Z}=${JSON.stringify(Q)}`).join(", ")}function tH($){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]: ${n4(Q.thinking,2000)}`);break;case"redacted_thinking":Z.push("[Bot thinking]: [redacted]");break;case"tool_use":Z.push(`[Bot tool calls]: ${Q.name}(${$f(Q.input)})`);break;case"tool_result":Z.push(`[Tool result]: ${tN(Q.content)}`);break;case"file":Z.push(`[${$.role==="user"?"User":"Bot"} file ${Q.path}]: ${n4(Q.content,sH)}`);break;case"image":Z.push(`[${$.role==="user"?"User":"Bot"} image]: ${Q.mediaType}`);break}return Z.join(`
341
+ `)}function eH($){return $.map(tH).join(`
342
342
 
343
- `).trim()}function eH(){let $=new WeakMap;return(Z)=>{let Q=Z,J=$.get(Q);if(typeof J==="number")return J;let W;try{W=JSON.stringify(Z)}catch{W=sH(Z)}let X=VQ(W.length);return $.set(Q,X),X}}function aJ($){return $.metadata?.kind==="compaction_summary"}function oJ($){if(!aJ($))return;let Z=$.metadata;if(!Z)return;let Q=Z.details;return{kind:"compaction_summary",displayRole:"system",userRunSpan:typeof Z.userRunSpan==="number"&&Number.isInteger(Z.userRunSpan)&&Z.userRunSpan>=0?Z.userRunSpan:1,summary:String(Z.summary??""),details:{readFiles:Array.isArray(Q?.readFiles)?Q.readFiles.filter((J)=>typeof J==="string").map((J)=>J.trim()).filter((J)=>J.length>0):[],modifiedFiles:Array.isArray(Q?.modifiedFiles)?Q.modifiedFiles.filter((J)=>typeof J==="string").map((J)=>J.trim()).filter((J)=>J.length>0):[]},tokensBefore:Number(Z.tokensBefore??0),generatedAt:Number(Z.generatedAt??0)}}function $f($){if($.role!=="user"||!Array.isArray($.content))return!1;return $.content.length>0&&$.content.every((Z)=>Z.type==="tool_result")}function $$($){return $.role==="user"&&!$f($)&&!aJ($)}function Zf($){for(let Z=$.length-1;Z>=0;Z-=1)if($$($[Z]))return Z;return 0}function $K($){for(let Z=$.length-1;Z>=0;Z-=1)if(aJ($[Z]))return Z;return-1}function Qf($){return $.role==="assistant"||$$($)}function ZK($,Z,Q){let J=0,W=$.length;for(let Y=$.length-1;Y>=0;Y-=1)if(J+=Q($[Y]),W=Y,J>=Z)break;if(W<=0)return 0;let X=Zf($),j=X>0?Math.min(W,X):W;while(j>0&&!Qf($[j]))j-=1;return j}function E2($){if(typeof $==="string"&&$.trim().length>0)return[$];if(Array.isArray($))return $.flatMap((Z)=>E2(Z));if($&&typeof $==="object"){let Z=$,Q=[];for(let J of["path","file_path","target_file","new_file_path","old_file_path"])Q.push(...E2(Z[J]));if(Array.isArray(Z.files)){for(let J of Z.files)if(J&&typeof J==="object")Q.push(...E2(J.path))}if(Array.isArray(Z.file_paths))Q.push(...E2(Z.file_paths));return Q}return[]}function i4($,Z){let Q=new Set($);for(let J of Z){let W=J.trim();if(!W)continue;Q.add(W)}return[...Q].sort((J,W)=>J.localeCompare(W))}function sJ($){let Z=[],Q=[];for(let J of $){let W=oJ(J);if(W){Z=i4(Z,W.details.readFiles),Q=i4(Q,W.details.modifiedFiles);continue}if(!Array.isArray(J.content))continue;for(let X of J.content){if(X.type==="file"){Z=i4(Z,[X.path]);continue}if(X.type!=="tool_use")continue;let j=E2(X.input);if(X.name==="read_files"){Z=i4(Z,j);continue}if(X.name==="editor"||X.name==="apply_patch")Q=i4(Q,j)}}return{readFiles:Z,modifiedFiles:Q}}var iH=100;function tJ($){return $.readFiles.length>0||$.editedFiles.length>0||$.commands.length>0}function r4($,Z){let Q=Z.trim();if(Q&&!$.includes(Q))$.push(Q)}function Jf($){if($.length<=iH)return $;return`${$.slice(0,iH)}...`}function Wf($){let Z=typeof $.path==="string"?$.path.trim():"";if(!Z)return;let{start_line:Q,end_line:J}=$;if(typeof Q==="number"&&typeof J==="number")return`${Z}:${Q}-${J}`;return Z}function Xf($){let Z=typeof $==="string"?$:$.map((W)=>W.type==="text"?W.text:W.type==="file"?W.content:"").join(`
344
- `);try{let W=JSON.parse(Z);if(W&&typeof W.result==="string")Z=W.result}catch{}let{POSITIVE_INFINITY:Q,NEGATIVE_INFINITY:J}=Number;for(let W of Z.matchAll(/(?:^|\n|\\n)[-+](\d+): /g)){let X=Number(W[1]);if(!Number.isFinite(X))continue;Q=Math.min(Q,X),J=Math.max(J,X)}return Q<=J?{start:Q,end:J}:void 0}function eJ($){let Z=[],Q=[],J=[],W=new Map;for(let X of $){if(!Array.isArray(X.content))continue;for(let j of X.content){if(j.type==="tool_use"){let Y=j.input??{};if(j.name==="read_files"){if(Array.isArray(Y.files)){for(let V of Y.files)if(V&&typeof V==="object"){let B=Wf(V);if(B)r4(Z,B)}}else for(let V of E2(Y))r4(Z,V);continue}if(j.name==="editor"||j.name==="apply_patch"){let V=E2(Y)[0];if(V)W.set(j.id,V);continue}if(j.name==="run_commands"){let V=Array.isArray(Y.commands)?Y.commands:[];for(let B of V)if(typeof B==="string"&&B.trim())r4(J,Jf(B.trim()))}continue}if(j.type==="tool_result"){let Y=W.get(j.tool_use_id);if(!Y)continue;let V=Xf(j.content);r4(Q,V?`${Y}:${V.start}-${V.end}`:Y),W.delete(j.tool_use_id)}}}for(let X of W.values())r4(Q,X);return{readFiles:Z,editedFiles:Q,commands:J}}function QK($){return[`Files read:
343
+ `).trim()}function $K(){let $=new WeakMap;return(Z)=>{let Q=Z,J=$.get(Q);if(typeof J==="number")return J;let W;try{W=JSON.stringify(Z)}catch{W=tH(Z)}let X=VQ(W.length);return $.set(Q,X),X}}function aJ($){return $.metadata?.kind==="compaction_summary"}function oJ($){if(!aJ($))return;let Z=$.metadata;if(!Z)return;let Q=Z.details;return{kind:"compaction_summary",displayRole:"system",userRunSpan:typeof Z.userRunSpan==="number"&&Number.isInteger(Z.userRunSpan)&&Z.userRunSpan>=0?Z.userRunSpan:1,summary:String(Z.summary??""),details:{readFiles:Array.isArray(Q?.readFiles)?Q.readFiles.filter((J)=>typeof J==="string").map((J)=>J.trim()).filter((J)=>J.length>0):[],modifiedFiles:Array.isArray(Q?.modifiedFiles)?Q.modifiedFiles.filter((J)=>typeof J==="string").map((J)=>J.trim()).filter((J)=>J.length>0):[]},tokensBefore:Number(Z.tokensBefore??0),generatedAt:Number(Z.generatedAt??0)}}function Zf($){if($.role!=="user"||!Array.isArray($.content))return!1;return $.content.length>0&&$.content.every((Z)=>Z.type==="tool_result")}function $$($){return $.role==="user"&&!Zf($)&&!aJ($)}function Qf($){for(let Z=$.length-1;Z>=0;Z-=1)if($$($[Z]))return Z;return 0}function ZK($){for(let Z=$.length-1;Z>=0;Z-=1)if(aJ($[Z]))return Z;return-1}function Jf($){return $.role==="assistant"||$$($)}function QK($,Z,Q){let J=0,W=$.length;for(let Y=$.length-1;Y>=0;Y-=1)if(J+=Q($[Y]),W=Y,J>=Z)break;if(W<=0)return 0;let X=Qf($),j=X>0?Math.min(W,X):W;while(j>0&&!Jf($[j]))j-=1;return j}function C2($){if(typeof $==="string"&&$.trim().length>0)return[$];if(Array.isArray($))return $.flatMap((Z)=>C2(Z));if($&&typeof $==="object"){let Z=$,Q=[];for(let J of["path","file_path","target_file","new_file_path","old_file_path"])Q.push(...C2(Z[J]));if(Array.isArray(Z.files)){for(let J of Z.files)if(J&&typeof J==="object")Q.push(...C2(J.path))}if(Array.isArray(Z.file_paths))Q.push(...C2(Z.file_paths));return Q}return[]}function i4($,Z){let Q=new Set($);for(let J of Z){let W=J.trim();if(!W)continue;Q.add(W)}return[...Q].sort((J,W)=>J.localeCompare(W))}function sJ($){let Z=[],Q=[];for(let J of $){let W=oJ(J);if(W){Z=i4(Z,W.details.readFiles),Q=i4(Q,W.details.modifiedFiles);continue}if(!Array.isArray(J.content))continue;for(let X of J.content){if(X.type==="file"){Z=i4(Z,[X.path]);continue}if(X.type!=="tool_use")continue;let j=C2(X.input);if(X.name==="read_files"){Z=i4(Z,j);continue}if(X.name==="editor"||X.name==="apply_patch")Q=i4(Q,j)}}return{readFiles:Z,modifiedFiles:Q}}var rH=100;function tJ($){return $.readFiles.length>0||$.editedFiles.length>0||$.commands.length>0}function r4($,Z){let Q=Z.trim();if(Q&&!$.includes(Q))$.push(Q)}function Wf($){if($.length<=rH)return $;return`${$.slice(0,rH)}...`}function Xf($){let Z=typeof $.path==="string"?$.path.trim():"";if(!Z)return;let{start_line:Q,end_line:J}=$;if(typeof Q==="number"&&typeof J==="number")return`${Z}:${Q}-${J}`;return Z}function jf($){let Z=typeof $==="string"?$:$.map((W)=>W.type==="text"?W.text:W.type==="file"?W.content:"").join(`
344
+ `);try{let W=JSON.parse(Z);if(W&&typeof W.result==="string")Z=W.result}catch{}let{POSITIVE_INFINITY:Q,NEGATIVE_INFINITY:J}=Number;for(let W of Z.matchAll(/(?:^|\n|\\n)[-+](\d+): /g)){let X=Number(W[1]);if(!Number.isFinite(X))continue;Q=Math.min(Q,X),J=Math.max(J,X)}return Q<=J?{start:Q,end:J}:void 0}function eJ($){let Z=[],Q=[],J=[],W=new Map;for(let X of $){if(!Array.isArray(X.content))continue;for(let j of X.content){if(j.type==="tool_use"){let Y=j.input??{};if(j.name==="read_files"){if(Array.isArray(Y.files)){for(let V of Y.files)if(V&&typeof V==="object"){let B=Xf(V);if(B)r4(Z,B)}}else for(let V of C2(Y))r4(Z,V);continue}if(j.name==="editor"||j.name==="apply_patch"){let V=C2(Y)[0];if(V)W.set(j.id,V);continue}if(j.name==="run_commands"){let V=Array.isArray(Y.commands)?Y.commands:[];for(let B of V)if(typeof B==="string"&&B.trim())r4(J,Wf(B.trim()))}continue}if(j.type==="tool_result"){let Y=W.get(j.tool_use_id);if(!Y)continue;let V=jf(j.content);r4(Q,V?`${Y}:${V.start}-${V.end}`:Y),W.delete(j.tool_use_id)}}}for(let X of W.values())r4(Q,X);return{readFiles:Z,editedFiles:Q,commands:J}}function JK($){return[`Files read:
345
345
  ${$.readFiles.join(`
346
346
  `)}`,`Files edited:
347
347
  ${$.editedFiles.join(`
@@ -349,15 +349,15 @@ ${$.editedFiles.join(`
349
349
  ${$.commands.join(`
350
350
  `)}`].join(`
351
351
 
352
- `)}function jf($){let Z=$.readFiles.length>0?$.readFiles.map((J)=>`- ${J}`).join(`
352
+ `)}function Yf($){let Z=$.readFiles.length>0?$.readFiles.map((J)=>`- ${J}`).join(`
353
353
  `):"- none",Q=$.modifiedFiles.length>0?$.modifiedFiles.map((J)=>`- ${J}`).join(`
354
354
  `):"- none";return`## Files
355
355
  Read:
356
356
  ${Z}
357
357
  Modified:
358
- ${Q}`}function JK($,Z){if(/^## Files$/im.test($))return $.trim();return`${$.trim()}
358
+ ${Q}`}function WK($,Z){if(/^## Files$/im.test($))return $.trim();return`${$.trim()}
359
359
 
360
- ${jf(Z)}`.trim()}function $W($){let Z=[`Summarize this session for continuation. Be concise and factual.
360
+ ${Yf(Z)}`.trim()}function $W($){let Z=[`Summarize this session for continuation. Be concise and factual.
361
361
 
362
362
  ## Goal
363
363
  One sentence: what is being built or fixed.
@@ -379,27 +379,27 @@ Edited: ${$.fileOps.modifiedFiles.join(", ")||"none"}`];if($.previousSummary?.tr
379
379
  ${$.previousSummary.trim()}`);return Z.push(`Conversation:
380
380
  ${$.conversationText||"(empty)"}`),Z.join(`
381
381
 
382
- `)}function WK($){let Z=$.summarizer,Q=(W)=>{if(W.providerId==="openai-codex"){let{maxOutputTokens:X,...j}=W;return{...j,thinking:!1}}return{...W,maxOutputTokens:W.maxOutputTokens??dH,thinking:!1}};if(!Z)return Q($.activeProviderConfig);let J=Z.providerConfig?.providerId===Z.providerId?Z.providerConfig:void 0;return Q({...J??{},providerId:Z.providerId,modelId:Z.modelId,apiKey:Z.apiKey??J?.apiKey,baseUrl:Z.baseUrl??J?.baseUrl,headers:Z.headers??J?.headers,modelInfo:Z.modelInfo??J?.modelInfo,knownModels:Z.knownModels??J?.knownModels,maxOutputTokens:Z.maxOutputTokens??dH})}function XK($){return{role:"user",content:[{type:"text",text:`Context summary:
382
+ `)}function XK($){let Z=$.summarizer,Q=(W)=>{if(W.providerId==="openai-codex"){let{maxOutputTokens:X,...j}=W;return{...j,thinking:!1}}return{...W,maxOutputTokens:W.maxOutputTokens??pH,thinking:!1}};if(!Z)return Q($.activeProviderConfig);let J=Z.providerConfig?.providerId===Z.providerId?Z.providerConfig:void 0;return Q({...J??{},providerId:Z.providerId,modelId:Z.modelId,apiKey:Z.apiKey??J?.apiKey,baseUrl:Z.baseUrl??J?.baseUrl,headers:Z.headers??J?.headers,modelInfo:Z.modelInfo??J?.modelInfo,knownModels:Z.knownModels??J?.knownModels,maxOutputTokens:Z.maxOutputTokens??pH})}function jK($){return{role:"user",content:[{type:"text",text:`Context summary:
383
383
 
384
- ${$.summary}`}],metadata:{kind:"compaction_summary",displayRole:"system",userRunSpan:$.userRunSpan,summary:$.summary,details:$.fileOps,tokensBefore:$.tokensBefore,generatedAt:Date.now()}}}var ZW=1024;function Vf($){let Z=a4({maxInputTokens:$.maxInputTokens??$.modelInfo?.maxInputTokens,contextWindow:$.modelInfo?.contextWindow});if(Z!==void 0)return Z;let Q=$.knownModels?.[$.modelId];return a4({maxInputTokens:Q?.maxInputTokens,contextWindow:Q?.contextWindow})}function Bf($){return l4({messages:$.messages,targetTokens:Math.max(1,$.targetTokens),policyIntent:"agentic_summary",estimateMessageTokens:$.estimateMessageTokens})}async function Hf($){let Z=await Yf($.providerConfig),Q="";for await(let J of Z.createMessage("Summarize the provided coding session into a concise continuation note with detailed next steps.",[{role:"user",content:$.request}])){if(J.type==="text"){Q+=J.text;continue}if(J.type==="done"&&!J.success&&J.error)throw Error(J.error)}return $.logger?.debug("Generated compaction summary",{outputChars:Q.length,modelId:$.providerConfig.modelId,providerId:$.providerConfig.providerId}),Q.trim()}function Kf($){try{return JSON.stringify($).length}catch{return String($).length}}async function jK($){let Z=$.context.messages;if(Z.length<2)return;let Q=ZK(Z,$.preserveRecentTokens,$.estimateMessageTokens);if(Q<=0||Q>=Z.length)return;let J=Z.slice(0,Q),W=$K(J),X=W>=0?oJ(J[W])?.summary:void 0,j=W>=0?J.slice(W+1):J;if(j.length===0)return;let Y=sJ(J),V=WK({activeProviderConfig:$.providerConfig,summarizer:$.summarizer}),B=Vf(V),H=$.summarizer===void 0,K=Math.max($.context.budget.request.maxInputTokens,$.context.budget.request.triggerTokens,ZW);if(B===void 0&&!H)$.logger?.log("Agentic compaction summarizer has no known input limit; using conservative summary budget",{severity:"warn",summarizerProviderId:V.providerId,summarizerModelId:V.modelId,fallbackInputLimit:ZW});let G=B??(H?K:ZW),F=VQ($W({previousSummary:X,conversationText:"",fileOps:Y}).length),U=G-F;if(U<=0){$.logger?.debug("Skipped agentic compaction: summarizer budget exhausted",{summarizerProviderId:V.providerId,summarizerModelId:V.modelId,summarizerInputLimit:G,summaryRequestOverheadTokens:F});return}let _=Bf({messages:j,targetTokens:U,estimateMessageTokens:$.estimateMessageTokens});if(_.status==="failed"){$.logger?.log("Skipped agentic compaction: summary input budget failed",{severity:"warn",budgetWarnings:_.warnings.map((S)=>S.code),summaryInputEstimatedTokens:_.estimatedTokens,targetTokens:U,summarizerProviderId:V.providerId,summarizerModelId:V.modelId});return}let L=sJ(_.messages),O=tH(_.messages),D=$W({previousSummary:X,conversationText:O,fileOps:L});$.logger?.debug("Agentic compaction summarizer diagnostics",{messagesToSummarize:J.length,newMessagesToFold:j.length,preservedMessages:Z.length-Q,previousSummaryChars:X?.length??0,conversationTextChars:O.length,summaryRequestChars:D.length,summaryRequestEstimatedTokens:VQ(D.length),newMessagesJsonChars:Kf(j),summaryInputEstimatedTokens:_.estimatedTokens,summaryInputActions:_.actions.length,summaryInputWarnings:_.warnings.map((S)=>S.code),summaryRequestOverheadTokens:F,summarizerProviderId:V.providerId,summarizerModelId:V.modelId,summarizerInputLimit:G,maxInputTokens:$.context.budget.request.maxInputTokens,triggerTokens:$.context.budget.request.triggerTokens});let q=await Hf({providerConfig:V,request:D,logger:$.logger});if(!q.trim())return;let T=JK(q,L),z=Z.reduce((S,y)=>S+$.estimateMessageTokens(y),0),A=[XK({summary:T,fileOps:L,tokensBefore:z,userRunSpan:g$(J)}),...Z.slice(Q)],R=A.reduce((S,y)=>S+$.estimateMessageTokens(y),0);$.logger?.debug("Performed agentic compaction",{messagesBefore:Z.length,messagesAfter:A.length,messagesSummarized:Q,messagesPreserved:Z.length-Q,tokensBefore:z,tokensAfter:R,maxInputTokens:$.context.budget.request.maxInputTokens});let N=_.actions.filter((S)=>S.reason==="over_budget"||S.reason==="tool_pair_boundary").length;return{messages:A,budget:{policyIntent:"agentic_summary",actionCount:N,warningCount:_.warnings.length,liveTailHandling:_.liveTailHandling}}}function YK($,Z){return $.reduce((Q,J)=>Q+Z(J),0)}function Gf($){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)}}function Ff($,Z){return JSON.stringify($)!==JSON.stringify(Z)}var Uf=3;function VK($){if($.role!=="assistant")return;if(typeof $.content==="string")return $.content.trim()||void 0;return $.content.filter((Q)=>Q.type==="text").map((Q)=>Q.text.trim()).filter(Boolean).join(`
385
- `)||void 0}function BK($,Z){let Q=Z.length>0?`
384
+ ${$.summary}`}],metadata:{kind:"compaction_summary",displayRole:"system",userRunSpan:$.userRunSpan,summary:$.summary,details:$.fileOps,tokensBefore:$.tokensBefore,generatedAt:Date.now()}}}var ZW=1024;function Bf($){let Z=a4({maxInputTokens:$.maxInputTokens??$.modelInfo?.maxInputTokens,contextWindow:$.modelInfo?.contextWindow});if(Z!==void 0)return Z;let Q=$.knownModels?.[$.modelId];return a4({maxInputTokens:Q?.maxInputTokens,contextWindow:Q?.contextWindow})}function Hf($){return l4({messages:$.messages,targetTokens:Math.max(1,$.targetTokens),policyIntent:"agentic_summary",estimateMessageTokens:$.estimateMessageTokens})}async function Kf($){let Z=await Vf($.providerConfig),Q="";for await(let J of Z.createMessage("Summarize the provided coding session into a concise continuation note with detailed next steps.",[{role:"user",content:$.request}])){if(J.type==="text"){Q+=J.text;continue}if(J.type==="done"&&!J.success&&J.error)throw Error(J.error)}return $.logger?.debug("Generated compaction summary",{outputChars:Q.length,modelId:$.providerConfig.modelId,providerId:$.providerConfig.providerId}),Q.trim()}function Gf($){try{return JSON.stringify($).length}catch{return String($).length}}async function YK($){let Z=$.context.messages;if(Z.length<2)return;let Q=QK(Z,$.preserveRecentTokens,$.estimateMessageTokens);if(Q<=0||Q>=Z.length)return;let J=Z.slice(0,Q),W=ZK(J),X=W>=0?oJ(J[W])?.summary:void 0,j=W>=0?J.slice(W+1):J;if(j.length===0)return;let Y=sJ(J),V=XK({activeProviderConfig:$.providerConfig,summarizer:$.summarizer}),B=Bf(V),H=$.summarizer===void 0,K=Math.max($.context.budget.request.maxInputTokens,$.context.budget.request.triggerTokens,ZW);if(B===void 0&&!H)$.logger?.log("Agentic compaction summarizer has no known input limit; using conservative summary budget",{severity:"warn",summarizerProviderId:V.providerId,summarizerModelId:V.modelId,fallbackInputLimit:ZW});let G=B??(H?K:ZW),F=VQ($W({previousSummary:X,conversationText:"",fileOps:Y}).length),U=G-F;if(U<=0){$.logger?.debug("Skipped agentic compaction: summarizer budget exhausted",{summarizerProviderId:V.providerId,summarizerModelId:V.modelId,summarizerInputLimit:G,summaryRequestOverheadTokens:F});return}let _=Hf({messages:j,targetTokens:U,estimateMessageTokens:$.estimateMessageTokens});if(_.status==="failed"){$.logger?.log("Skipped agentic compaction: summary input budget failed",{severity:"warn",budgetWarnings:_.warnings.map((S)=>S.code),summaryInputEstimatedTokens:_.estimatedTokens,targetTokens:U,summarizerProviderId:V.providerId,summarizerModelId:V.modelId});return}let L=sJ(_.messages),O=eH(_.messages),D=$W({previousSummary:X,conversationText:O,fileOps:L});$.logger?.debug("Agentic compaction summarizer diagnostics",{messagesToSummarize:J.length,newMessagesToFold:j.length,preservedMessages:Z.length-Q,previousSummaryChars:X?.length??0,conversationTextChars:O.length,summaryRequestChars:D.length,summaryRequestEstimatedTokens:VQ(D.length),newMessagesJsonChars:Gf(j),summaryInputEstimatedTokens:_.estimatedTokens,summaryInputActions:_.actions.length,summaryInputWarnings:_.warnings.map((S)=>S.code),summaryRequestOverheadTokens:F,summarizerProviderId:V.providerId,summarizerModelId:V.modelId,summarizerInputLimit:G,maxInputTokens:$.context.budget.request.maxInputTokens,triggerTokens:$.context.budget.request.triggerTokens});let q=await Kf({providerConfig:V,request:D,logger:$.logger});if(!q.trim())return;let T=WK(q,L),z=Z.reduce((S,y)=>S+$.estimateMessageTokens(y),0),A=[jK({summary:T,fileOps:L,tokensBefore:z,userRunSpan:g$(J)}),...Z.slice(Q)],R=A.reduce((S,y)=>S+$.estimateMessageTokens(y),0);$.logger?.debug("Performed agentic compaction",{messagesBefore:Z.length,messagesAfter:A.length,messagesSummarized:Q,messagesPreserved:Z.length-Q,tokensBefore:z,tokensAfter:R,maxInputTokens:$.context.budget.request.maxInputTokens});let N=_.actions.filter((S)=>S.reason==="over_budget"||S.reason==="tool_pair_boundary").length;return{messages:A,budget:{policyIntent:"agentic_summary",actionCount:N,warningCount:_.warnings.length,liveTailHandling:_.liveTailHandling}}}function VK($,Z){return $.reduce((Q,J)=>Q+Z(J),0)}function Ff($){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)}}function Uf($,Z){return JSON.stringify($)!==JSON.stringify(Z)}var Df=3;function BK($){if($.role!=="assistant")return;if(typeof $.content==="string")return $.content.trim()||void 0;return $.content.filter((Q)=>Q.type==="text").map((Q)=>Q.text.trim()).filter(Boolean).join(`
385
+ `)||void 0}function HK($,Z){let Q=Z.length>0?`
386
386
 
387
387
  Your recent responses:
388
388
  ${Z.join(`
389
389
  ---
390
390
  `)}`:"";return{type:"text",text:`<SYSTEM_NOTICE>
391
391
  Earlier context was compacted. Summary of your actions after the request above:
392
- ${QK($)}${Q}</SYSTEM_NOTICE>`}}function BQ($,Z){if(typeof $.content==="string")return $.content.trim()?[{type:"text",text:$.content}]:[];if(Z)return[...$.content];return $.content.filter((Q)=>Q.type!=="file"&&Q.type!=="image")}function Df($,Z){let Q=new Map;Z.forEach((B,H)=>{if(B.id)Q.set(B.id,H)});let J=(B)=>B.id?Q.get(B.id):void 0,W=new Set;for(let B=Z.length-1;B>=0&&W.size<Uf;B-=1)if(VK(Z[B]))W.add(B);let X=(B,H)=>{let K=[];for(let G=B;G<H;G+=1){if(!W.has(G))continue;let F=VK(Z[G]);if(F)K.push(F)}return K},j=-1;for(let B=$.length-1;B>=0;B-=1)if($$($[B])){j=B;break}let Y=[],V=0;while(V<$.length){if(!$$($[V])){let K=J($[V]);Y.push({message:$[V],firstOriginalIndex:K,lastOriginalIndex:K,isTypedUser:!1}),V+=1;continue}let B=V;while(B+1<$.length&&$$($[B+1]))B+=1;let H=$[V];if(B>V){let K=[],G=0;for(let F=V;F<=B;F+=1){if(G+=w1($[F]),F>V){let U=J($[F-1]),_=J($[F]);if(U!==void 0&&_!==void 0&&_>U+1){let L=eJ(Z.slice(U+1,_)),O=X(U+1,_);if(tJ(L)||O.length>0)K.push(BK(L,O))}}K.push(...BQ($[F],F===j))}H={...$[V],content:K,metadata:{...$[V].metadata,userRunSpan:G}}}else{let K=BQ(H,V===j);if(Array.isArray(H.content)&&K.length!==H.content.length)H={...H,content:K}}Y.push({message:H,firstOriginalIndex:J($[V]),lastOriginalIndex:J($[B]),isTypedUser:!0}),V=B+1}for(let B=0;B<Y.length;B+=1){let H=Y[B];if(!H.isTypedUser||H.lastOriginalIndex===void 0)continue;let K=Y[B+1],G=K?K.firstOriginalIndex:Z.length;if(G===void 0||G<=H.lastOriginalIndex+1)continue;let F=eJ(Z.slice(H.lastOriginalIndex+1,G)),U=X(H.lastOriginalIndex+1,G);if(!tJ(F)&&U.length===0)continue;H.message={...H.message,content:[...BQ(H.message,!0),BK(F,U)]}}return Y.map((B)=>B.message)}function HK($){if(!$.metrics)return $;let{metrics:Z,...Q}=$;return Q}function _f($){let Z=!1,Q={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,cost:0};for(let J of $){let W=J.metrics;if(!W)continue;Z=!0,Q.inputTokens+=W.inputTokens??0,Q.outputTokens+=W.outputTokens??0,Q.cacheReadTokens+=W.cacheReadTokens??0,Q.cacheWriteTokens+=W.cacheWriteTokens??0,Q.cost+=W.cost??0}return Z?Q:void 0}function Lf($,Z){if(!$)return Z;if(!Z)return $;return{inputTokens:$.inputTokens+Z.inputTokens,outputTokens:$.outputTokens+Z.outputTokens,cacheReadTokens:$.cacheReadTokens+Z.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens+Z.cacheWriteTokens,cost:$.cost+Z.cost}}function Af($){let Z=$?.metadata;if(!Z||Z.kind!=="compaction")return{messagesRemoved:0,usageBefore:void 0};let Q=Z.usageBefore;return{messagesRemoved:typeof Z.messagesRemoved==="number"?Z.messagesRemoved:0,usageBefore:Q&&typeof Q==="object"?{inputTokens:Q.inputTokens??0,outputTokens:Q.outputTokens??0,cacheReadTokens:Q.cacheReadTokens??0,cacheWriteTokens:Q.cacheWriteTokens??0,cost:Q.cost??0}:void 0}}var KK="preserved";function GK($){return $.metadata?.compaction===KK}function Of($){if(GK($))return $;return{...$,metadata:{...$.metadata,compaction:KK}}}function qf($){if(typeof $.content==="string")return $.content.trim()?$:void 0;let Z=$.content.filter((Q)=>Q.type!=="thinking"&&Q.type!=="redacted_thinking");if(!Z.some((Q)=>Q.type==="text"&&Q.text.trim()))return;return{...$,content:Z}}function FK($){let Z=$.context.messages,Q=$.estimateMessageTokens;if(Z.length<2)return;let J=Math.max(1,Math.min($.context.budget.messages.targetTokens,$.context.budget.messages.triggerTokens)),W=[];for(let A=0;A<Z.length;A+=1)if($$(Z[A]))W.push(A);let X=new Map;for(let A of W){let R=Gf(Z[A]);if(R)X.set(A,R)}if(X.size===0)return;let j=W[W.length-1],Y=0;for(let[A,R]of X)Y+=Q({...R,content:BQ(R,A===j)});let V=new Set;for(let A=0;A<Z.length;A+=1){if(X.has(A))continue;if(GK(Z[A]))V.add(A),Y+=Q(Z[A])}let B=new Set;{let A=Z.length,R=0;for(let N=Z.length-1;N>j;N-=1){if(V.has(N))break;let S=Q(Z[N]);if(Y+R+S>J)break;R+=S,A=N}while(A<Z.length&&Z[A].role!=="assistant")A+=1;for(let N=A;N<Z.length;N+=1)B.add(N),Y+=Q(Z[N])}let H=new Map;for(let A=W.length-2;A>=0;A-=1){let R=W[A]+1,N=W[A+1];for(let S=N-1;S>=R;S-=1){let y=Z[S];if(V.has(S))break;if(y.role!=="assistant")continue;if(Array.isArray(y.content)&&y.content.some((c)=>c.type==="tool_use"))continue;let s=qf(y);if(s){let c=Q(s);if(Y+c<=J)H.set(S,s),Y+=c}break}}let K=[];for(let A=0;A<Z.length;A+=1){let R=X.get(A);if(R){K.push(R);continue}if(V.has(A)||B.has(A)){K.push(Z[A]);continue}let N=H.get(A);if(N)K.push(N)}let G=YK(Z,$.estimateMessageTokens),F=Math.min(Math.max(J,Y),Math.max(1,$.context.budget.messages.triggerTokens)),U=l4({messages:K,targetTokens:F,policyIntent:"basic_compaction_projection",estimateMessageTokens:$.estimateMessageTokens});if(U.status==="failed")$.logger?.debug("Basic compaction returned best-effort projection",{budgetWarnings:U.warnings.map((A)=>A.code),projectedTokens:U.estimatedTokens,targetTokens:J,maxInputTokens:$.context.budget.request.maxInputTokens});let _=Df(U.messages,Z);if(!Ff(Z,_))return;let L=Af(_[0]),O=Lf(L.usageBefore,_f(Z)),D={kind:"compaction",reason:$.context.mode==="manual"?"manual_compaction":"auto_compaction",displayRole:"system",messagesRemoved:L.messagesRemoved+(Z.length-_.length),...O?{usageBefore:O}:{}},q=_.map((A,R)=>{if(R===0&&$$(A))return HK({...A,metadata:{...A.metadata,...D,userRunSpan:w1(A)}});return HK($$(A)?A:Of(A))}),T=YK(q,$.estimateMessageTokens),z=U.actions.filter((A)=>A.reason==="over_budget"||A.reason==="tool_pair_boundary").length;return $.logger?.debug("Performed basic compaction",{messagesBefore:Z.length,messagesAfter:q.length,messagesRemoved:Z.length-q.length,tokensBefore:G,tokensAfter:T,budgetStatus:U.status,budgetActions:z,budgetWarnings:U.warnings.map((A)=>A.code),targetTokens:J,maxInputTokens:$.context.budget.request.maxInputTokens}),{messages:q,budget:{policyIntent:"basic_compaction_projection",actionCount:z,warningCount:U.warnings.length,liveTailHandling:U.liveTailHandling}}}var Tf=0.5;function Nf($,Z){if(Z.aborted)return!0;return $ instanceof Error&&($.name==="AbortError"||$.name==="AgentRuntimeAbortError")}function ff($){return $ instanceof Error?{errorName:$.name,errorMessage:$.message}:{errorMessage:String($)}}function _K($){try{return JSON.stringify($).length}catch{return String($).length}}function Rf($){let Z=0,Q=0,J=0;for(let W of $){if(!Array.isArray(W.content))continue;for(let X of W.content){if(X.type!=="tool_result")continue;let j=_K(X.content);Z+=1,Q+=j,J=Math.max(J,j)}}return{toolResultCount:Z,toolResultSerializedChars:Q,maxToolResultSerializedChars:J}}var UK={basic:({context:$,estimateMessageTokens:Z,logger:Q})=>FK({context:$,estimateMessageTokens:Z,logger:Q}),agentic:({context:$,providerConfig:Z,compaction:Q,estimateMessageTokens:J,logger:W})=>jK({context:$,providerConfig:Z,summarizer:Q?.summarizer,preserveRecentTokens:Math.min(Q?.preserveRecentTokens??aH,$.budget.messages.targetTokens),estimateMessageTokens:J,logger:W})};function Mf($){let Z=typeof $.manualTargetRatio==="number"&&Number.isFinite($.manualTargetRatio)?$.manualTargetRatio:0.5,Q=Math.min(0.95,Math.max(0.05,Z));return Math.max(1,Math.floor(Math.min($.messageTriggerTokens,$.messageInputTokens*Q)))}function Ef($){let Z=$.messagePairCount>=5&&typeof $.modelMaxTokens==="number"&&Number.isFinite($.modelMaxTokens)&&$.modelMaxTokens<$.maxInputTokens?Math.floor($.maxInputTokens*Tf):Math.floor($.triggerTokens*nH),Q=Math.max(1,$.triggerTokens-1);return Math.max(1,Math.min(Z,$.maxInputTokens,Q))}function DK($,Z){return Math.max(1,Math.floor($-Z))}function Cf($){let Z=0,Q=!1;for(let J of $)if(J.role==="user")Q=!0;else if(J.role==="assistant"&&Q)Z+=1,Q=!1;return Z}function o4($,Z={}){let Q=$.compaction;if(Q?.enabled!==!0)return;let J=$.providerConfig??{providerId:$.providerId,modelId:$.modelId},W=eH(),X=Q?.strategy??"agentic",j=UK[X],Y=Z.mode??"auto",V=Q?.compact?"custom":X;return async(B)=>{let H=B.apiMessages.reduce((r,O0)=>r+W(O0),0),K=zf({systemPrompt:B.systemPrompt,messages:B.apiMessages,tools:B.tools}),G=B.messages.reduce((r,O0)=>r+W(O0),0),F=Math.max(0,K-H),U=a4({maxInputTokens:B.model.info?.maxInputTokens,contextWindow:B.model.info?.contextWindow})??rH,_=U*C2,L=DK(_,F),O=K>=_;if($.logger?.debug("Context compaction diagnostics",{mode:Y,strategy:X,iteration:B.iteration,providerId:$.providerId,modelId:$.modelId,requestInputTokens:K,apiMessageTokens:H,messageInputTokens:G,requestOverheadTokens:F,maxInputTokens:U,requestTriggerTokens:_,messageTriggerTokens:L,thresholdRatio:C2,shouldCompact:O,messageCount:B.messages.length,apiMessageCount:B.apiMessages.length,apiMessagesJsonChars:_K(B.apiMessages),...Rf(B.apiMessages)}),Y==="auto"&&!O)return;let D,q;if(Y==="auto")D=Ef({maxInputTokens:U,modelMaxTokens:B.model.info?.maxTokens,triggerTokens:_,messagePairCount:Cf(B.messages)}),q=DK(D,F);else q=Mf({messageInputTokens:G,messageTriggerTokens:L,manualTargetRatio:Z.manualTargetRatio}),D=F+q;let T={agentId:B.agentId,conversationId:B.conversationId,parentAgentId:B.parentAgentId,iteration:B.iteration,messages:B.messages,model:B.model,mode:Y,budget:{request:{inputTokens:K,maxInputTokens:U,triggerTokens:_,targetTokens:D,overheadTokens:F,thresholdRatio:C2,utilizationRatio:U>0?K/U:0},messages:{inputTokens:G,triggerTokens:L,targetTokens:q}}},z=Y==="manual"?"manual_compaction":"auto_compaction";B.emitStatusNotice?.(Y==="manual"?"compacting":"auto-compacting",{kind:z,reason:z,phase:"started",iteration:B.iteration,triggerTokens:_,targetTokens:D,maxInputTokens:U,messageTargetTokens:q});let A=B.messages.length,R=Date.now(),N={context:T,providerConfig:{...J,abortSignal:B.abortSignal},compaction:Q,estimateMessageTokens:W,logger:$.logger},S=V,y;if(Q?.compact)y=await Q.compact(T);else try{y=await j(N)}catch(r){if(X!=="agentic"||Nf(r,B.abortSignal))throw r;$.logger?.log("Agentic compaction failed; falling back to basic compaction",{severity:"warn",...ff(r)}),S="basic",y=await UK.basic(N)}let s=Date.now()-R,c=$.sessionId??B.conversationId,b={agentId:B.agentId,conversationId:B.conversationId,parentAgentId:B.parentAgentId??void 0};if(y?.messages){let r=y.messages.reduce((N$,f$)=>N$+W(f$),0),O0=F+r;if($.logger?.log("Context compaction completed",{severity:"info",strategy:S,maxInputTokens:U,messageInputTokens:G,apiInputTokens:H,requestInputTokens:K,requestOverheadTokens:F,afterMessageTokens:r,afterRequestTokens:O0,tokensSaved:K-O0,utilizationBefore:`${(K/U*100).toFixed(1)}%`,utilizationAfter:`${(O0/U*100).toFixed(1)}%`,thresholdTrigger:`${(C2*100).toFixed(1)}%`,messagesBefore:A,messagesAfter:y.messages.length,messagesRemoved:A-y.messages.length}),B.emitStatusNotice?.(Y==="manual"?"compacted":"auto-compacted",{kind:z,reason:z,phase:"completed",iteration:B.iteration,tokensBefore:K,tokensAfter:O0,messagesBefore:A,messagesAfter:y.messages.length,maxInputTokens:U}),CZ($.telemetry,{ulid:c,strategy:S,mode:Y,messagesBefore:A,messagesAfter:y.messages.length,messagesRemoved:A-y.messages.length,tokensBefore:K,tokensAfter:O0,tokensSaved:K-O0,triggerTokens:_,maxInputTokens:U,thresholdRatio:C2,durationMs:s,provider:$.providerId,modelId:$.modelId,...b}),y.budget&&(y.budget.actionCount>0||y.budget.warningCount>0))sV($.telemetry,{ulid:c,strategy:S,mode:Y,policyIntent:y.budget.policyIntent,actionCount:y.budget.actionCount,warningCount:y.budget.warningCount,liveTailHandling:y.budget.liveTailHandling,provider:$.providerId,modelId:$.modelId,...b}),B.emitStatusNotice?.("compaction-budget-adjusted",{kind:"compaction_budget_emergency",reason:"compaction_budget_emergency",iteration:B.iteration,policyIntent:y.budget.policyIntent,actionCount:y.budget.actionCount,warningCount:y.budget.warningCount})}else B.emitStatusNotice?.(Y==="manual"?"compaction-skipped":"auto-compaction-skipped",{kind:z,reason:z,phase:"skipped",iteration:B.iteration,maxInputTokens:U}),wZ($.telemetry,{ulid:c,strategy:S,mode:Y,reason:"no_result",tokensBefore:K,triggerTokens:_,maxInputTokens:U,thresholdRatio:C2,durationMs:s,provider:$.providerId,modelId:$.modelId,...b});return y}}function s4($){return async(Z)=>{let Q=$.getState?.(),J=Q?x$(Q,Z.messages):void 0;if(Q&&J){let X=$.compact?await $.compact({...Z,messages:J,apiMessages:J}):void 0;if(X?.messages){let j=X.systemPrompt??Q.system_prompt,Y=n8({sourceMessages:Z.messages,compactedMessages:X.messages,conversationId:Z.conversationId,systemPrompt:j});return await $.saveState?.(Y,Z.messages),{...X,...j!==void 0?{systemPrompt:j}:{}}}return{messages:J,...X?.systemPrompt!==void 0?{systemPrompt:X.systemPrompt}:Q.system_prompt!==void 0?{systemPrompt:Q.system_prompt}:{}}}let W=$.compact?await $.compact(Z):void 0;if(W?.messages){let X=n8({sourceMessages:Z.messages,compactedMessages:W.messages,conversationId:Z.conversationId,systemPrompt:W.systemPrompt});await $.saveState?.(X,Z.messages)}return W}}var rG={};w(rG,{zodToJsonSchema:()=>IE,validateWithZod:()=>hE,truncateCommandOutput:()=>b2,resolveToolRoutingConfig:()=>X6,resolveToolPresetName:()=>j$,resolveCoreSelectedToolIds:()=>wQ,getCoreHeadlessToolNames:()=>_5,getCoreDefaultEnabledToolIds:()=>CQ,getCoreBuiltinToolCatalog:()=>l2,getCoreAcpToolNames:()=>PQ,createWebFetchTool:()=>YW,createWebFetchExecutor:()=>H5,createToolPoliciesWithPreset:()=>OQ,createSubmitAndExitTool:()=>KW,createSkillsTool:()=>k2,createShellTool:()=>Y5,createShellExecutor:()=>y2,createSearchTool:()=>jW,createSearchExecutor:()=>B5,createReadFilesTool:()=>XW,createFileReadExecutor:()=>V5,createEditorTool:()=>BW,createEditorExecutor:()=>x2,createDefaultToolsWithPreset:()=>qQ,createDefaultTools:()=>u$,createDefaultShellExecutor:()=>K5,createDefaultExecutors:()=>J6,createBuiltinTools:()=>i2,createAskQuestionTool:()=>HW,createApplyPatchTool:()=>VW,createApplyPatchExecutor:()=>I2,computePatchChanges:()=>$6,WebFetchRequestSchema:()=>QW,ToolPresets:()=>Q1,TEAM_TOOL_NAMES:()=>V6,SubmitInputSchema:()=>j5,StructuredCommandInputSchema:()=>P2,SkillsInputSchema:()=>W5,SearchCodebaseInputSchema:()=>e4,RunCommandsInputSchema:()=>$5,ReadFilesInputSchema:()=>t4,ReadFileRequestSchema:()=>GQ,PatchActionType:()=>h2,PATCH_MARKERS:()=>p,MAX_COMMAND_OUTPUT_CHARS:()=>Q$,FetchWebContentInputSchema:()=>Z5,EditFileInputSchema:()=>Q5,DefaultToolNames:()=>F0,DEFAULT_MODEL_TOOL_ROUTING_RULES:()=>W6,CommandExitError:()=>J$,AskQuestionInputSchema:()=>X5,ApplyPatchInputSchema:()=>J5,ALL_DEFAULT_TOOL_NAMES:()=>C$});import{validateWithZod as hE,zodToJsonSchema as IE}from"@cline/shared";C0();import{createTool as m$,getDefaultShell as gf,getShellKind as vf,validateWithZod as c$,zodToJsonSchema as W$}from"@cline/shared";import{spawn as PK}from"node:child_process";import{StringDecoder as kf}from"node:string_decoder";import{getDefaultShell as hf,getShellArgs as If}from"@cline/shared";import{validateWithZod as Pf}from"@cline/shared";import{z as E}from"zod";var v$=6000,w2=E.string().describe("The absolute path of a text file to read content from"),HQ=E.object({start_line:E.coerce.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:E.coerce.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"),GQ=E.object({path:w2,start_line:HQ.shape.start_line,end_line:HQ.shape.end_line}).describe("A file read request with optional inclusive one-based line bounds. Always include path; start_line/end_line must be on the same object as the path they apply to, never in a separate array element"),t4=E.object({files:E.array(GQ).describe("Array of file read requests; each element is one file and must include path. Omit start_line/end_line or set them to null to read from the start; provide integers on the same object as the path to return only that inclusive one-based line range — never emit a range as its own array element. Reads are capped, so page through long files with start_line/end_line. Prefer this tool over running terminal command to get file content for better performance and reliability.")}),AK={start_line:HQ.shape.start_line,end_line:HQ.shape.end_line},o8=E.union([GQ,E.object({file_path:w2,...AK}).transform(({file_path:$,...Z})=>({path:$,...Z})),E.object({filePath:w2,...AK}).transform(({filePath:$,...Z})=>({path:$,...Z}))]),OK=E.union([t4,o8,E.array(o8),E.array(E.string()),E.string(),E.object({files:E.array(E.union([w2,o8]))}),E.object({files:o8}),E.object({files:w2}),E.object({file_paths:E.array(w2)}),E.object({file_paths:E.string()}),E.object({paths:E.array(E.union([w2,o8]))}),E.object({paths:o8}),E.object({paths:E.string()})]),e4=E.object({queries:E.array(E.string()).describe("Array of regex search queries to execute")}),qK=E.union([e4,E.array(E.string()),E.string(),E.object({queries:E.string()})]),KQ=E.string().describe(`The non-interactive shell command to execute - MUST keep input short and concise (within ${v$*2} characters) to avoid timeouts.`),P2=E.object({command:E.string().min(1).describe("The executable to run directly without shell parsing."),args:E.array(E.string()).optional().describe("Optional argv list passed directly to the executable.")}),zK=E.union([KQ,P2]),$5=E.object({commands:E.array(KQ).describe("Array of complete shell command strings to execute.")}),wf=E.object({commands:E.array(zK)}),TK=E.union([$5,wf,E.object({commands:zK}),E.array(P2),P2,E.object({command:KQ}),E.object({cmd:KQ}),E.array(E.string()),E.string()]),QW=E.object({url:E.string().describe("The URL to fetch"),prompt:E.string().min(2).describe("Analysis prompt for the fetched content")}),Z5=E.object({requests:E.array(QW).describe("Array of the URLs for the web fetch requests")}),Q5=E.object({path:E.string().min(1).describe("The absolute path for the action to be performed on"),old_text:E.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 ${v$} characters when possible; larger payloads should be split across multiple tool calls to avoid timeouts.`),new_text:E.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 ${v$} 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:E.coerce.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."),J5=E.object({input:E.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."),NK=E.union([J5,E.string()]),W5=E.object({skill:E.string().min(1).describe("Name of the skill to execute."),args:E.string().nullable().optional().describe("Arguments for the skill; use null when omitted")}),X5=E.object({question:E.string().min(1).describe('The single question to ask the user. E.g. "How can I help you?"'),options:E.array(E.string().min(1)).min(2).max(5).describe("Array of 2-5 user-selectable answer options for the single question")}),j5=E.object({summary:E.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:E.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.
392
+ ${JK($)}${Q}</SYSTEM_NOTICE>`}}function BQ($,Z){if(typeof $.content==="string")return $.content.trim()?[{type:"text",text:$.content}]:[];if(Z)return[...$.content];return $.content.filter((Q)=>Q.type!=="file"&&Q.type!=="image")}function _f($,Z){let Q=new Map;Z.forEach((B,H)=>{if(B.id)Q.set(B.id,H)});let J=(B)=>B.id?Q.get(B.id):void 0,W=new Set;for(let B=Z.length-1;B>=0&&W.size<Df;B-=1)if(BK(Z[B]))W.add(B);let X=(B,H)=>{let K=[];for(let G=B;G<H;G+=1){if(!W.has(G))continue;let F=BK(Z[G]);if(F)K.push(F)}return K},j=-1;for(let B=$.length-1;B>=0;B-=1)if($$($[B])){j=B;break}let Y=[],V=0;while(V<$.length){if(!$$($[V])){let K=J($[V]);Y.push({message:$[V],firstOriginalIndex:K,lastOriginalIndex:K,isTypedUser:!1}),V+=1;continue}let B=V;while(B+1<$.length&&$$($[B+1]))B+=1;let H=$[V];if(B>V){let K=[],G=0;for(let F=V;F<=B;F+=1){if(G+=w1($[F]),F>V){let U=J($[F-1]),_=J($[F]);if(U!==void 0&&_!==void 0&&_>U+1){let L=eJ(Z.slice(U+1,_)),O=X(U+1,_);if(tJ(L)||O.length>0)K.push(HK(L,O))}}K.push(...BQ($[F],F===j))}H={...$[V],content:K,metadata:{...$[V].metadata,userRunSpan:G}}}else{let K=BQ(H,V===j);if(Array.isArray(H.content)&&K.length!==H.content.length)H={...H,content:K}}Y.push({message:H,firstOriginalIndex:J($[V]),lastOriginalIndex:J($[B]),isTypedUser:!0}),V=B+1}for(let B=0;B<Y.length;B+=1){let H=Y[B];if(!H.isTypedUser||H.lastOriginalIndex===void 0)continue;let K=Y[B+1],G=K?K.firstOriginalIndex:Z.length;if(G===void 0||G<=H.lastOriginalIndex+1)continue;let F=eJ(Z.slice(H.lastOriginalIndex+1,G)),U=X(H.lastOriginalIndex+1,G);if(!tJ(F)&&U.length===0)continue;H.message={...H.message,content:[...BQ(H.message,!0),HK(F,U)]}}return Y.map((B)=>B.message)}function KK($){if(!$.metrics)return $;let{metrics:Z,...Q}=$;return Q}function Lf($){let Z=!1,Q={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,cost:0};for(let J of $){let W=J.metrics;if(!W)continue;Z=!0,Q.inputTokens+=W.inputTokens??0,Q.outputTokens+=W.outputTokens??0,Q.cacheReadTokens+=W.cacheReadTokens??0,Q.cacheWriteTokens+=W.cacheWriteTokens??0,Q.cost+=W.cost??0}return Z?Q:void 0}function Af($,Z){if(!$)return Z;if(!Z)return $;return{inputTokens:$.inputTokens+Z.inputTokens,outputTokens:$.outputTokens+Z.outputTokens,cacheReadTokens:$.cacheReadTokens+Z.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens+Z.cacheWriteTokens,cost:$.cost+Z.cost}}function Of($){let Z=$?.metadata;if(!Z||Z.kind!=="compaction")return{messagesRemoved:0,usageBefore:void 0};let Q=Z.usageBefore;return{messagesRemoved:typeof Z.messagesRemoved==="number"?Z.messagesRemoved:0,usageBefore:Q&&typeof Q==="object"?{inputTokens:Q.inputTokens??0,outputTokens:Q.outputTokens??0,cacheReadTokens:Q.cacheReadTokens??0,cacheWriteTokens:Q.cacheWriteTokens??0,cost:Q.cost??0}:void 0}}var GK="preserved";function FK($){return $.metadata?.compaction===GK}function qf($){if(FK($))return $;return{...$,metadata:{...$.metadata,compaction:GK}}}function zf($){if(typeof $.content==="string")return $.content.trim()?$:void 0;let Z=$.content.filter((Q)=>Q.type!=="thinking"&&Q.type!=="redacted_thinking");if(!Z.some((Q)=>Q.type==="text"&&Q.text.trim()))return;return{...$,content:Z}}function UK($){let Z=$.context.messages,Q=$.estimateMessageTokens;if(Z.length<2)return;let J=Math.max(1,Math.min($.context.budget.messages.targetTokens,$.context.budget.messages.triggerTokens)),W=[];for(let A=0;A<Z.length;A+=1)if($$(Z[A]))W.push(A);let X=new Map;for(let A of W){let R=Ff(Z[A]);if(R)X.set(A,R)}if(X.size===0)return;let j=W[W.length-1],Y=0;for(let[A,R]of X)Y+=Q({...R,content:BQ(R,A===j)});let V=new Set;for(let A=0;A<Z.length;A+=1){if(X.has(A))continue;if(FK(Z[A]))V.add(A),Y+=Q(Z[A])}let B=new Set;{let A=Z.length,R=0;for(let N=Z.length-1;N>j;N-=1){if(V.has(N))break;let S=Q(Z[N]);if(Y+R+S>J)break;R+=S,A=N}while(A<Z.length&&Z[A].role!=="assistant")A+=1;for(let N=A;N<Z.length;N+=1)B.add(N),Y+=Q(Z[N])}let H=new Map;for(let A=W.length-2;A>=0;A-=1){let R=W[A]+1,N=W[A+1];for(let S=N-1;S>=R;S-=1){let y=Z[S];if(V.has(S))break;if(y.role!=="assistant")continue;if(Array.isArray(y.content)&&y.content.some((c)=>c.type==="tool_use"))continue;let s=zf(y);if(s){let c=Q(s);if(Y+c<=J)H.set(S,s),Y+=c}break}}let K=[];for(let A=0;A<Z.length;A+=1){let R=X.get(A);if(R){K.push(R);continue}if(V.has(A)||B.has(A)){K.push(Z[A]);continue}let N=H.get(A);if(N)K.push(N)}let G=VK(Z,$.estimateMessageTokens),F=Math.min(Math.max(J,Y),Math.max(1,$.context.budget.messages.triggerTokens)),U=l4({messages:K,targetTokens:F,policyIntent:"basic_compaction_projection",estimateMessageTokens:$.estimateMessageTokens});if(U.status==="failed")$.logger?.debug("Basic compaction returned best-effort projection",{budgetWarnings:U.warnings.map((A)=>A.code),projectedTokens:U.estimatedTokens,targetTokens:J,maxInputTokens:$.context.budget.request.maxInputTokens});let _=_f(U.messages,Z);if(!Uf(Z,_))return;let L=Of(_[0]),O=Af(L.usageBefore,Lf(Z)),D={kind:"compaction",reason:$.context.mode==="manual"?"manual_compaction":"auto_compaction",displayRole:"system",messagesRemoved:L.messagesRemoved+(Z.length-_.length),...O?{usageBefore:O}:{}},q=_.map((A,R)=>{if(R===0&&$$(A))return KK({...A,metadata:{...A.metadata,...D,userRunSpan:w1(A)}});return KK($$(A)?A:qf(A))}),T=VK(q,$.estimateMessageTokens),z=U.actions.filter((A)=>A.reason==="over_budget"||A.reason==="tool_pair_boundary").length;return $.logger?.debug("Performed basic compaction",{messagesBefore:Z.length,messagesAfter:q.length,messagesRemoved:Z.length-q.length,tokensBefore:G,tokensAfter:T,budgetStatus:U.status,budgetActions:z,budgetWarnings:U.warnings.map((A)=>A.code),targetTokens:J,maxInputTokens:$.context.budget.request.maxInputTokens}),{messages:q,budget:{policyIntent:"basic_compaction_projection",actionCount:z,warningCount:U.warnings.length,liveTailHandling:U.liveTailHandling}}}var Nf=0.5;function ff($,Z){if(Z.aborted)return!0;return $ instanceof Error&&($.name==="AbortError"||$.name==="AgentRuntimeAbortError")}function Rf($){return $ instanceof Error?{errorName:$.name,errorMessage:$.message}:{errorMessage:String($)}}function LK($){try{return JSON.stringify($).length}catch{return String($).length}}function Mf($){let Z=0,Q=0,J=0;for(let W of $){if(!Array.isArray(W.content))continue;for(let X of W.content){if(X.type!=="tool_result")continue;let j=LK(X.content);Z+=1,Q+=j,J=Math.max(J,j)}}return{toolResultCount:Z,toolResultSerializedChars:Q,maxToolResultSerializedChars:J}}var DK={basic:({context:$,estimateMessageTokens:Z,logger:Q})=>UK({context:$,estimateMessageTokens:Z,logger:Q}),agentic:({context:$,providerConfig:Z,compaction:Q,estimateMessageTokens:J,logger:W})=>YK({context:$,providerConfig:Z,summarizer:Q?.summarizer,preserveRecentTokens:Math.min(Q?.preserveRecentTokens??oH,$.budget.messages.targetTokens),estimateMessageTokens:J,logger:W})};function Ef($){let Z=typeof $.manualTargetRatio==="number"&&Number.isFinite($.manualTargetRatio)?$.manualTargetRatio:0.5,Q=Math.min(0.95,Math.max(0.05,Z));return Math.max(1,Math.floor(Math.min($.messageTriggerTokens,$.messageInputTokens*Q)))}function Cf($){let Z=$.messagePairCount>=5&&typeof $.modelMaxTokens==="number"&&Number.isFinite($.modelMaxTokens)&&$.modelMaxTokens<$.maxInputTokens?Math.floor($.maxInputTokens*Nf):Math.floor($.triggerTokens*aH),Q=Math.max(1,$.triggerTokens-1);return Math.max(1,Math.min(Z,$.maxInputTokens,Q))}function _K($,Z){return Math.max(1,Math.floor($-Z))}function wf($){let Z=0,Q=!1;for(let J of $)if(J.role==="user")Q=!0;else if(J.role==="assistant"&&Q)Z+=1,Q=!1;return Z}function o4($,Z={}){let Q=$.compaction;if(Q?.enabled!==!0)return;let J=$.providerConfig??{providerId:$.providerId,modelId:$.modelId},W=$K(),X=Q?.strategy??"agentic",j=DK[X],Y=Z.mode??"auto",V=Q?.compact?"custom":X;return async(B)=>{let H=B.apiMessages.reduce((r,O0)=>r+W(O0),0),K=Tf({systemPrompt:B.systemPrompt,messages:B.apiMessages,tools:B.tools}),G=B.messages.reduce((r,O0)=>r+W(O0),0),F=Math.max(0,K-H),U=a4({maxInputTokens:B.model.info?.maxInputTokens,contextWindow:B.model.info?.contextWindow})??nH,_=U*w2,L=_K(_,F),O=K>=_;if($.logger?.debug("Context compaction diagnostics",{mode:Y,strategy:X,iteration:B.iteration,providerId:$.providerId,modelId:$.modelId,requestInputTokens:K,apiMessageTokens:H,messageInputTokens:G,requestOverheadTokens:F,maxInputTokens:U,requestTriggerTokens:_,messageTriggerTokens:L,thresholdRatio:w2,shouldCompact:O,messageCount:B.messages.length,apiMessageCount:B.apiMessages.length,apiMessagesJsonChars:LK(B.apiMessages),...Mf(B.apiMessages)}),Y==="auto"&&!O)return;let D,q;if(Y==="auto")D=Cf({maxInputTokens:U,modelMaxTokens:B.model.info?.maxTokens,triggerTokens:_,messagePairCount:wf(B.messages)}),q=_K(D,F);else q=Ef({messageInputTokens:G,messageTriggerTokens:L,manualTargetRatio:Z.manualTargetRatio}),D=F+q;let T={agentId:B.agentId,conversationId:B.conversationId,parentAgentId:B.parentAgentId,iteration:B.iteration,messages:B.messages,model:B.model,mode:Y,budget:{request:{inputTokens:K,maxInputTokens:U,triggerTokens:_,targetTokens:D,overheadTokens:F,thresholdRatio:w2,utilizationRatio:U>0?K/U:0},messages:{inputTokens:G,triggerTokens:L,targetTokens:q}}},z=Y==="manual"?"manual_compaction":"auto_compaction";B.emitStatusNotice?.(Y==="manual"?"compacting":"auto-compacting",{kind:z,reason:z,phase:"started",iteration:B.iteration,triggerTokens:_,targetTokens:D,maxInputTokens:U,messageTargetTokens:q});let A=B.messages.length,R=Date.now(),N={context:T,providerConfig:{...J,abortSignal:B.abortSignal},compaction:Q,estimateMessageTokens:W,logger:$.logger},S=V,y;if(Q?.compact)y=await Q.compact(T);else try{y=await j(N)}catch(r){if(X!=="agentic"||ff(r,B.abortSignal))throw r;$.logger?.log("Agentic compaction failed; falling back to basic compaction",{severity:"warn",...Rf(r)}),S="basic",y=await DK.basic(N)}let s=Date.now()-R,c=$.sessionId??B.conversationId,b={agentId:B.agentId,conversationId:B.conversationId,parentAgentId:B.parentAgentId??void 0};if(y?.messages){let r=y.messages.reduce((N$,f$)=>N$+W(f$),0),O0=F+r;if($.logger?.log("Context compaction completed",{severity:"info",strategy:S,maxInputTokens:U,messageInputTokens:G,apiInputTokens:H,requestInputTokens:K,requestOverheadTokens:F,afterMessageTokens:r,afterRequestTokens:O0,tokensSaved:K-O0,utilizationBefore:`${(K/U*100).toFixed(1)}%`,utilizationAfter:`${(O0/U*100).toFixed(1)}%`,thresholdTrigger:`${(w2*100).toFixed(1)}%`,messagesBefore:A,messagesAfter:y.messages.length,messagesRemoved:A-y.messages.length}),B.emitStatusNotice?.(Y==="manual"?"compacted":"auto-compacted",{kind:z,reason:z,phase:"completed",iteration:B.iteration,tokensBefore:K,tokensAfter:O0,messagesBefore:A,messagesAfter:y.messages.length,maxInputTokens:U}),CZ($.telemetry,{ulid:c,strategy:S,mode:Y,messagesBefore:A,messagesAfter:y.messages.length,messagesRemoved:A-y.messages.length,tokensBefore:K,tokensAfter:O0,tokensSaved:K-O0,triggerTokens:_,maxInputTokens:U,thresholdRatio:w2,durationMs:s,provider:$.providerId,modelId:$.modelId,...b}),y.budget&&(y.budget.actionCount>0||y.budget.warningCount>0))tV($.telemetry,{ulid:c,strategy:S,mode:Y,policyIntent:y.budget.policyIntent,actionCount:y.budget.actionCount,warningCount:y.budget.warningCount,liveTailHandling:y.budget.liveTailHandling,provider:$.providerId,modelId:$.modelId,...b}),B.emitStatusNotice?.("compaction-budget-adjusted",{kind:"compaction_budget_emergency",reason:"compaction_budget_emergency",iteration:B.iteration,policyIntent:y.budget.policyIntent,actionCount:y.budget.actionCount,warningCount:y.budget.warningCount})}else B.emitStatusNotice?.(Y==="manual"?"compaction-skipped":"auto-compaction-skipped",{kind:z,reason:z,phase:"skipped",iteration:B.iteration,maxInputTokens:U}),wZ($.telemetry,{ulid:c,strategy:S,mode:Y,reason:"no_result",tokensBefore:K,triggerTokens:_,maxInputTokens:U,thresholdRatio:w2,durationMs:s,provider:$.providerId,modelId:$.modelId,...b});return y}}function s4($){return async(Z)=>{let Q=$.getState?.(),J=Q?x$(Q,Z.messages):void 0;if(Q&&J){let X=$.compact?await $.compact({...Z,messages:J,apiMessages:J}):void 0;if(X?.messages){let j=X.systemPrompt??Q.system_prompt,Y=a8({sourceMessages:Z.messages,compactedMessages:X.messages,conversationId:Z.conversationId,systemPrompt:j});return await $.saveState?.(Y,Z.messages),{...X,...j!==void 0?{systemPrompt:j}:{}}}return{messages:J,...X?.systemPrompt!==void 0?{systemPrompt:X.systemPrompt}:Q.system_prompt!==void 0?{systemPrompt:Q.system_prompt}:{}}}let W=$.compact?await $.compact(Z):void 0;if(W?.messages){let X=a8({sourceMessages:Z.messages,compactedMessages:W.messages,conversationId:Z.conversationId,systemPrompt:W.systemPrompt});await $.saveState?.(X,Z.messages)}return W}}var nG={};w(nG,{zodToJsonSchema:()=>xE,validateWithZod:()=>IE,truncateCommandOutput:()=>y2,resolveToolRoutingConfig:()=>j6,resolveToolPresetName:()=>j$,resolveCoreSelectedToolIds:()=>wQ,getCoreHeadlessToolNames:()=>_5,getCoreDefaultEnabledToolIds:()=>CQ,getCoreBuiltinToolCatalog:()=>i2,getCoreAcpToolNames:()=>PQ,createWebFetchTool:()=>YW,createWebFetchExecutor:()=>H5,createToolPoliciesWithPreset:()=>OQ,createSubmitAndExitTool:()=>KW,createSkillsTool:()=>h2,createShellTool:()=>Y5,createShellExecutor:()=>k2,createSearchTool:()=>jW,createSearchExecutor:()=>B5,createReadFilesTool:()=>XW,createFileReadExecutor:()=>V5,createEditorTool:()=>BW,createEditorExecutor:()=>g2,createDefaultToolsWithPreset:()=>qQ,createDefaultTools:()=>u$,createDefaultShellExecutor:()=>K5,createDefaultExecutors:()=>W6,createBuiltinTools:()=>r2,createAskQuestionTool:()=>HW,createApplyPatchTool:()=>VW,createApplyPatchExecutor:()=>x2,computePatchChanges:()=>Z6,WebFetchRequestSchema:()=>QW,ToolPresets:()=>Q1,TEAM_TOOL_NAMES:()=>B6,SubmitInputSchema:()=>j5,StructuredCommandInputSchema:()=>S2,SkillsInputSchema:()=>W5,SearchCodebaseInputSchema:()=>e4,RunCommandsInputSchema:()=>$5,ReadFilesInputSchema:()=>t4,ReadFileRequestSchema:()=>GQ,PatchActionType:()=>I2,PATCH_MARKERS:()=>p,MAX_COMMAND_OUTPUT_CHARS:()=>Q$,FetchWebContentInputSchema:()=>Z5,EditFileInputSchema:()=>Q5,DefaultToolNames:()=>F0,DEFAULT_MODEL_TOOL_ROUTING_RULES:()=>X6,CommandExitError:()=>J$,AskQuestionInputSchema:()=>X5,ApplyPatchInputSchema:()=>J5,ALL_DEFAULT_TOOL_NAMES:()=>C$});import{validateWithZod as IE,zodToJsonSchema as xE}from"@cline/shared";C0();import{createTool as m$,getDefaultShell as vf,getShellKind as mf,validateWithZod as c$,zodToJsonSchema as W$}from"@cline/shared";import{spawn as SK}from"node:child_process";import{StringDecoder as hf}from"node:string_decoder";import{getDefaultShell as If,getShellInvocation as xf}from"@cline/shared";import{validateWithZod as Sf}from"@cline/shared";import{z as E}from"zod";var v$=6000,P2=E.string().describe("The absolute path of a text file to read content from"),HQ=E.object({start_line:E.coerce.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:E.coerce.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"),GQ=E.object({path:P2,start_line:HQ.shape.start_line,end_line:HQ.shape.end_line}).describe("A file read request with optional inclusive one-based line bounds. Always include path; start_line/end_line must be on the same object as the path they apply to, never in a separate array element"),t4=E.object({files:E.array(GQ).describe("Array of file read requests; each element is one file and must include path. Omit start_line/end_line or set them to null to read from the start; provide integers on the same object as the path to return only that inclusive one-based line range — never emit a range as its own array element. Reads are capped, so page through long files with start_line/end_line. Prefer this tool over running terminal command to get file content for better performance and reliability.")}),OK={start_line:HQ.shape.start_line,end_line:HQ.shape.end_line},s8=E.union([GQ,E.object({file_path:P2,...OK}).transform(({file_path:$,...Z})=>({path:$,...Z})),E.object({filePath:P2,...OK}).transform(({filePath:$,...Z})=>({path:$,...Z}))]),qK=E.union([t4,s8,E.array(s8),E.array(E.string()),E.string(),E.object({files:E.array(E.union([P2,s8]))}),E.object({files:s8}),E.object({files:P2}),E.object({file_paths:E.array(P2)}),E.object({file_paths:E.string()}),E.object({paths:E.array(E.union([P2,s8]))}),E.object({paths:s8}),E.object({paths:E.string()})]),e4=E.object({queries:E.array(E.string()).describe("Array of regex search queries to execute")}),zK=E.union([e4,E.array(E.string()),E.string(),E.object({queries:E.string()})]),KQ=E.string().describe(`The non-interactive shell command to execute - MUST keep input short and concise (within ${v$*2} characters) to avoid timeouts.`),S2=E.object({command:E.string().min(1).describe("The executable to run directly without shell parsing."),args:E.array(E.string()).optional().describe("Optional argv list passed directly to the executable.")}),TK=E.union([KQ,S2]),$5=E.object({commands:E.array(KQ).describe("Array of complete shell command strings to execute.")}),Pf=E.object({commands:E.array(TK)}),NK=E.union([$5,Pf,E.object({commands:TK}),E.array(S2),S2,E.object({command:KQ}),E.object({cmd:KQ}),E.array(E.string()),E.string()]),QW=E.object({url:E.string().describe("The URL to fetch"),prompt:E.string().min(2).describe("Analysis prompt for the fetched content")}),Z5=E.object({requests:E.array(QW).describe("Array of the URLs for the web fetch requests")}),Q5=E.object({path:E.string().min(1).describe("The absolute path for the action to be performed on"),old_text:E.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 ${v$} characters when possible; larger payloads should be split across multiple tool calls to avoid timeouts.`),new_text:E.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 ${v$} 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:E.coerce.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."),J5=E.object({input:E.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."),fK=E.union([J5,E.string()]),W5=E.object({skill:E.string().min(1).describe("Name of the skill to execute."),args:E.string().nullable().optional().describe("Arguments for the skill; use null when omitted")}),X5=E.object({question:E.string().min(1).describe('The single question to ask the user. E.g. "How can I help you?"'),options:E.array(E.string().min(1)).min(2).max(5).describe("Array of 2-5 user-selectable answer options for the single question")}),j5=E.object({summary:E.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:E.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.
393
393
  'False' if you have done all you can but cannot resolve the issue or if you are stuck and cannot proceed further. =
394
- 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 S2($){if($ instanceof Error)return $.message;return String($)}function RK($){if(typeof $.old_text==="string"&&$.old_text.length>v$)return`Editor input too large: old_text was ${$.old_text.length} characters, exceeding the recommended limit of ${v$}. Split the edit into smaller tool calls so later tool calls are less likely to be truncated or time out.`;if($.new_text.length>v$)return`Editor input too large: new_text was ${$.new_text.length} characters, exceeding the recommended limit of ${v$}. Split the edit into smaller tool calls so later tool calls are less likely to be truncated or time out.`;return null}class s8 extends Error{timeoutMs;constructor($,Z){super($);this.name="TimeoutError",this.timeoutMs=Z}}function Z$($,Z,Q){return Promise.race([$,new Promise((J,W)=>{setTimeout(()=>W(new s8(Q,Z)),Z)})])}function FQ($){let{path:Z,start_line:Q,end_line:J}=$;if(Q==null&&J==null)return Z;return`${Z}:${Q??1}-${J??"EOF"}`}function MK($){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})`}var Sf=new Set(["start_line","end_line"]);function bf($){if($===null||typeof $!=="object"||Array.isArray($))return!1;let Z=Object.keys($);return Z.length>0&&Z.every((Q)=>Sf.has(Q))}function fK($){let Z=[];for(let Q of $){if(bf(Q)){let J=Z[Z.length-1];if(typeof J==="string"){Z[Z.length-1]={path:J,...Q};continue}if(J!==null&&typeof J==="object"&&!Array.isArray(J)&&"path"in J&&Object.keys(Q).every((W)=>!(W in J))){Z[Z.length-1]={...J,...Q};continue}}Z.push(Q)}return Z}function EK($){if(Array.isArray($))return fK($);if($!==null&&typeof $==="object")for(let Z of["files","paths"]){let Q=$[Z];if(Array.isArray(Q))return{...$,[Z]:fK(Q)}}return $}function CK($){let Z=Pf(TK,$);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 yf($){if(typeof $==="string")return $;let Z=$.args??[];if(Z.length===0)return $.command;let Q=Z.map((J)=>/[\s"]/u.test(J)?JSON.stringify(J):J);return`${$.command} ${Q.join(" ")}`}var JW=200;function wK($){let Z=yf($);if(Z.length<=JW)return Z;let Q=Z.length-JW;return`${Z.slice(0,JW)} ... [command truncated: ${Q} more chars; full command is in the tool call input]`}var Q$=48000;function b2($,Z={}){let Q=Z.maxChars??48000,J=Z.totalChars??$.length;if($.length<=Q&&J<=Q)return $;let W=Math.ceil(Q/2),X=Math.max(1,Q-W);return`${$.slice(0,W)}
394
+ IMPORTANT: You must run the specific failing test(s) mentioned in the issue or test patch and include the test output in your reasoning. If the test still fails after your fix, you must revise. Do NOT submit with 'true' unless the test output shows the test passing.`)});function b2($){if($ instanceof Error)return $.message;return String($)}function MK($){if(typeof $.old_text==="string"&&$.old_text.length>v$)return`Editor input too large: old_text was ${$.old_text.length} characters, exceeding the recommended limit of ${v$}. Split the edit into smaller tool calls so later tool calls are less likely to be truncated or time out.`;if($.new_text.length>v$)return`Editor input too large: new_text was ${$.new_text.length} characters, exceeding the recommended limit of ${v$}. Split the edit into smaller tool calls so later tool calls are less likely to be truncated or time out.`;return null}class t8 extends Error{timeoutMs;constructor($,Z){super($);this.name="TimeoutError",this.timeoutMs=Z}}function Z$($,Z,Q){return Promise.race([$,new Promise((J,W)=>{setTimeout(()=>W(new t8(Q,Z)),Z)})])}function FQ($){let{path:Z,start_line:Q,end_line:J}=$;if(Q==null&&J==null)return Z;return`${Z}:${Q??1}-${J??"EOF"}`}function EK($){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})`}var bf=new Set(["start_line","end_line"]);function yf($){if($===null||typeof $!=="object"||Array.isArray($))return!1;let Z=Object.keys($);return Z.length>0&&Z.every((Q)=>bf.has(Q))}function RK($){let Z=[];for(let Q of $){if(yf(Q)){let J=Z[Z.length-1];if(typeof J==="string"){Z[Z.length-1]={path:J,...Q};continue}if(J!==null&&typeof J==="object"&&!Array.isArray(J)&&"path"in J&&Object.keys(Q).every((W)=>!(W in J))){Z[Z.length-1]={...J,...Q};continue}}Z.push(Q)}return Z}function CK($){if(Array.isArray($))return RK($);if($!==null&&typeof $==="object")for(let Z of["files","paths"]){let Q=$[Z];if(Array.isArray(Q))return{...$,[Z]:RK(Q)}}return $}function wK($){let Z=Sf(NK,$);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 kf($){if(typeof $==="string")return $;let Z=$.args??[];if(Z.length===0)return $.command;let Q=Z.map((J)=>/[\s"]/u.test(J)?JSON.stringify(J):J);return`${$.command} ${Q.join(" ")}`}var JW=200;function PK($){let Z=kf($);if(Z.length<=JW)return Z;let Q=Z.length-JW;return`${Z.slice(0,JW)} ... [command truncated: ${Q} more chars; full command is in the tool call input]`}var Q$=48000;function y2($,Z={}){let Q=Z.maxChars??48000,J=Z.totalChars??$.length;if($.length<=Q&&J<=Q)return $;let W=Math.ceil(Q/2),X=Math.max(1,Q-W);return`${$.slice(0,W)}
395
395
  [... output truncated: ${J} chars total. Refine the command (grep, head, tail) to view the elided middle ...]
396
- `+$.slice(-X)}var t8=2000,WW=2000,UQ=48000,e8=48000;class J$ extends Error{exitCode;output;constructor($,Z){super(`Command exited with code ${$}`);this.exitCode=$;this.output=Z;this.name="CommandExitError"}}function SK($){let Z=Math.ceil($/2),Q=Math.max(1,$-Z),J=new kf("utf8"),W="",X="",j=0,Y=(V)=>{if(!V)return;j+=V.length;let B=Z-W.length;if(B>0){W+=V.slice(0,B),X=(X+V.slice(B)).slice(-Q);return}X=(X+V).slice(-Q)};return{append(V){Y(J.write(V))},snapshot(){return Y(J.end()),{text:W+X,totalChars:j,dropped:j>W.length+X.length}}}}function xf($,Z,Q,J,W){if(Z.signal?.aborted)return Promise.reject(Error("Command was aborted"));return new Promise((X,j)=>{let Y=process.platform==="win32",V=PK($.executable,$.args,{cwd:$.cwd,env:{...process.env,...$.env},stdio:["pipe","pipe","pipe"],detached:!Y,windowsHide:!0}),B=V.pid,H=SK(J),K=SK(J),G=!1,F=!1,U=(T)=>{if(F)return;F=!0,T()},_=async()=>{if(!B)return;if(Y){await new Promise((T)=>{let z=!1,A,R=()=>{if(z)return;z=!0,clearTimeout(N),T()};try{A=PK("taskkill.exe",["/PID",String(B),"/T","/F"],{stdio:"ignore",shell:!1,windowsHide:!0})}catch{V.kill(),T();return}let N=setTimeout(()=>{A.kill(),V.kill(),R()},5000);A.once("error",()=>{V.kill(),R()}),A.once("close",(S)=>{if(S!==0)V.kill();R()})});return}try{process.kill(-B,"SIGKILL")}catch{V.kill("SIGKILL")}},L,O=()=>q(Error("Command was aborted")),D=()=>{clearTimeout(L),Z.signal?.removeEventListener("abort",O)},q=(T)=>{if(G||F)return;G=!0,D(),_().finally(()=>U(()=>j(T)))};if(L=setTimeout(()=>q(new s8(`Command timed out after ${Q}ms`,Q)),Q),Z.signal){if(Z.signal.addEventListener("abort",O,{once:!0}),Z.signal.aborted)O()}V.stdout?.on("data",(T)=>{H.append(T)}),V.stderr?.on("data",(T)=>{K.append(T)}),V.on("close",(T)=>{if(D(),G)return;let z=H.snapshot(),A=K.snapshot();if(T!==0){let R=T??1,N=W?z.text+(A.text?`
396
+ `+$.slice(-X)}var e8=2000,WW=2000,UQ=48000,$6=48000;class J$ extends Error{exitCode;output;constructor($,Z){super(`Command exited with code ${$}`);this.exitCode=$;this.output=Z;this.name="CommandExitError"}}function bK($){let Z=Math.ceil($/2),Q=Math.max(1,$-Z),J=new hf("utf8"),W="",X="",j=0,Y=(V)=>{if(!V)return;j+=V.length;let B=Z-W.length;if(B>0){W+=V.slice(0,B),X=(X+V.slice(B)).slice(-Q);return}X=(X+V).slice(-Q)};return{append(V){Y(J.write(V))},snapshot(){return Y(J.end()),{text:W+X,totalChars:j,dropped:j>W.length+X.length}}}}function gf($,Z,Q,J,W){if(Z.signal?.aborted)return Promise.reject(Error("Command was aborted"));return new Promise((X,j)=>{let Y=process.platform==="win32",V=SK($.executable,$.args,{cwd:$.cwd,env:{...process.env,...$.env},stdio:["pipe","pipe","pipe"],detached:!Y,windowsHide:!0}),B=V.pid,H=bK(J),K=bK(J),G=!1,F=!1,U=(T)=>{if(F)return;F=!0,T()},_=async()=>{if(!B)return;if(Y){await new Promise((T)=>{let z=!1,A,R=()=>{if(z)return;z=!0,clearTimeout(N),T()};try{A=SK("taskkill.exe",["/PID",String(B),"/T","/F"],{stdio:"ignore",shell:!1,windowsHide:!0})}catch{V.kill(),T();return}let N=setTimeout(()=>{A.kill(),V.kill(),R()},5000);A.once("error",()=>{V.kill(),R()}),A.once("close",(S)=>{if(S!==0)V.kill();R()})});return}try{process.kill(-B,"SIGKILL")}catch{V.kill("SIGKILL")}},L,O=()=>q(Error("Command was aborted")),D=()=>{clearTimeout(L),Z.signal?.removeEventListener("abort",O)},q=(T)=>{if(G||F)return;G=!0,D(),_().finally(()=>U(()=>j(T)))};if(L=setTimeout(()=>q(new t8(`Command timed out after ${Q}ms`,Q)),Q),Z.signal){if(Z.signal.addEventListener("abort",O,{once:!0}),Z.signal.aborted)O()}V.stdout?.on("data",(T)=>{H.append(T)}),V.stderr?.on("data",(T)=>{K.append(T)}),V.on("close",(T)=>{if(D(),G)return;let z=H.snapshot(),A=K.snapshot();if(T!==0){let R=T??1,N=W?z.text+(A.text?`
397
397
  [stderr]
398
- ${A.text}`:""):z.text,S=z.dropped||W&&A.dropped,y=W?z.totalChars+A.totalChars:z.totalChars;if(S||N.length>J)N=b2(N,{maxChars:J,totalChars:y});let s=N.length>0?`[Command exited with code ${R}]
398
+ ${A.text}`:""):z.text,S=z.dropped||W&&A.dropped,y=W?z.totalChars+A.totalChars:z.totalChars;if(S||N.length>J)N=y2(N,{maxChars:J,totalChars:y});let s=N.length>0?`[Command exited with code ${R}]
399
399
  ${N}`:`[Command exited with code ${R}]`;U(()=>j(new J$(R,s)))}else{let R=W?z.text+(A.text?`
400
400
  [stderr]
401
- ${A.text}`:""):z.text;if(z.dropped||W&&A.dropped||R.length>J){let S=W?z.totalChars+A.totalChars:z.totalChars;R=b2(R,{maxChars:J,totalChars:S})}U(()=>X(R))}}),V.on("error",(T)=>{if(D(),G)return;U(()=>j(Error(`Failed to execute command: ${T.message}`)))})})}function y2($={}){let{shell:Z=hf(process.platform),timeoutMs:Q=30000,env:J={},combineOutput:W=!0}=$,X=$.maxOutputChars??$.maxOutputBytes??Q$;return(j,Y,V)=>{let B=typeof j!=="string";return xf({executable:B?j.command:Z,args:B?j.args??[]:If(Z,j),cwd:Y,env:J},V,Q,X,W)}}function bK($,Z){let Q=$.metadata?.[Z];return typeof Q==="string"?Q:void 0}function mf($,Z,Q){oV($,{tool_name:"run_commands",effective_timeout_ms:Q.effectiveTimeoutMs,timeout_source:Q.timeoutSource,command_count:Q.commandCount,duration_ms:Q.durationMs,ulid:Z.sessionId,mode:bK(Z,"mode"),source:bK(Z,"source"),session_id:Z.sessionId,agent_id:Z.agentId,conversation_id:Z.conversationId,run_id:Z.runId,iteration:Z.iteration,tool_call_id:Z.toolCallId})}function cf($){let Z=$.match(/(?<![<])<<-?\s*(?:"([^"]+)"|'([^']+)'|([A-Za-z0-9_./-]+))/);return Z?.[1]??Z?.[2]??Z?.[3]}function uf($){let Z=[];for(let Q=0;Q<$.length;Q+=1){let J=$[Q],W=cf(J);if(!W){Z.push(J);continue}let X=$.findIndex((Y,V)=>V>Q&&Y.trim()===W);if(X===-1){Z.push(J);continue}let j=[J];while(Q<X){Q+=1;let Y=$[Q];j.push(Y)}Z.push(j.join(`
402
- `))}return Z}function df($){let Z=[],Q=[],J=()=>{if(Q.length>0)Z.push(...uf(Q)),Q=[]};for(let W of $){if(typeof W==="string"){Q.push(W);continue}J(),Z.push(W)}return J(),Z}async function pf($,Z){let{executor:Q,cwd:J,context:W,timeoutMs:X,timeoutSource:j,telemetry:Y}=Z;return Promise.all($.map(async(V)=>{let B=Date.now(),H=wK(V);try{let K=await Z$(Q(V,J,W),X,`Command timed out after ${X}ms`);return{query:H,result:K,success:!0}}catch(K){if(K instanceof s8)mf(Y,W,{effectiveTimeoutMs:K.timeoutMs,timeoutSource:j,commandCount:$.length,durationMs:Date.now()-B});if(K instanceof J$)return{query:H,result:K.output,error:K.message,success:!1};let G=S2(K);return{query:H,result:"",error:`Command failed: ${G}`,success:!1}}}))}function XW($,Z={}){let Q=Z.fileReadTimeoutMs??1e4;return m$({name:"read_files",description:`Read the content of text or image files at the provided absolute paths, or return only an inclusive one-based line range when start_line/end_line are provided on the same file entry as its path. When you already know multiple files you need, read them together in one call, and call this tool in the same response as other independent tool calls. Each read returns at most ${t8} lines / ~${Math.round(UQ/1024)}k characters; longer files report their total line count, page through them with start_line/end_line on that file's entry. Binary files that are not image and large files are not supported. Returns file contents or error messages for each path. `,inputSchema:W$(t4),timeoutMs:Q*2,retryable:!0,maxRetries:1,execute:async(J,W)=>{let X=c$(OK,EK(J)),j;if(typeof X==="string")j=[{path:X}];else if(Array.isArray(X))j=X.map((Y)=>typeof Y==="string"?{path:Y}:Y);else if("files"in X)j=(Array.isArray(X.files)?X.files:[X.files]).map((V)=>typeof V==="string"?{path:V}:V);else if("file_paths"in X)j=(Array.isArray(X.file_paths)?X.file_paths:[X.file_paths]).map((V)=>({path:V}));else if("paths"in X)j=(Array.isArray(X.paths)?X.paths:[X.paths]).map((V)=>typeof V==="string"?{path:V}:V);else j=[X];return Promise.all(j.map(async(Y)=>{let V=MK(Y);if(V)return{query:FQ(Y),result:"",error:`Invalid file range: ${V}`,success:!1};try{let B=await Z$($(Y,W),Q,`File read timed out after ${Q}ms`);return{query:FQ(Y),result:B,success:!0}}catch(B){let H=S2(B);return{query:FQ(Y),result:"",error:`Error reading file: ${H}`,success:!1}}}))}})}function jW($,Z={}){let Q=Z.searchTimeoutMs??30000,J=Z.cwd??process.cwd();return m$({name:"search_codebase",description:`Perform regex pattern searches across the codebase. Supports multiple parallel searches. When several search patterns could be useful and do not depend on each other, run them together in one call, and call this tool in the same response as other independent tool calls. Use for finding code patterns, function definitions, class names, imports, etc. Output beyond ~${Math.round(e8/1000)}k characters per query is middle-truncated; narrow patterns beat broad ones.`,inputSchema:W$(e4),timeoutMs:Q*2,retryable:!0,maxRetries:1,execute:async(W,X)=>{let j=c$(qK,W),Y=Array.isArray(j)?j:typeof j==="object"?Array.isArray(j.queries)?j.queries:[j.queries]:[j];return Promise.all(Y.map(async(V)=>{try{let B=await Z$($(V,J,X),Q,`Search timed out after ${Q}ms`);return{query:V,result:B,success:!0}}catch(B){let H=S2(B);return{query:V,result:"",error:`Search failed: ${H}`,success:!1}}}))}})}var yK="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 lf($,Z){if($==="powershell"||$==="cmd"){let J=$==="powershell"?"PowerShell":"cmd.exe",W=$==="powershell"?"';'":"'&&'";return"Run non-interactive shell commands from the root of the workspace in Windows environment. "+yK+`Output beyond ~${Math.round(Q$/1000)}k characters is middle-truncated (start and end preserved); filter output when you need specific sections. Commands run through ${J}; quote paths and arguments for ${J} and use ${W} to sequence commands. Include multiple commands in the same call when they are independent and safe to run concurrently. When independent reads, searches, or edits are also needed, call those tools in the same response.`}let Q=$==="wsl"?"Commands run through bash in WSL (wsl.exe); the Windows working directory is mounted under /mnt/<drive>. ":Z?"Commands run through a POSIX (bash-compatible) shell on Windows. ":"";return"Run non-interactive shell commands from the root of the workspace. "+yK+Q+`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(Q$/1000)}k characters is middle-truncated (start and end preserved); pipe through grep/head/tail when you need specific sections of large output. For long-running commands, run them in background and redirect output to a tmp file that you can read from later.`}function Y5($,Z={}){let Q=Z.bashTimeoutMs??30000,J=Z.bashTimeoutMs===void 0?"default_setting":"configured_setting",W=Z.cwd??process.cwd(),X=process.platform==="win32",j=Z.shell,Y=typeof j==="function"?j:()=>j??gf(process.platform),V=()=>lf(vf(Y()),X),B=m$({name:"run_commands",description:V(),inputSchema:W$($5),timeoutMs:Q*2,retryable:!1,maxRetries:0,execute:async(H,K)=>{let G=df(CK(H));return pf(G,{executor:$,cwd:W,context:K,timeoutMs:Q,timeoutSource:J,telemetry:Z.telemetry})}});if(typeof j==="function")Object.defineProperty(B,"description",{get:V,enumerable:!0});return B}function YW($,Z={}){let Q=Z.webFetchTimeoutMs??30000;return m$({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:W$(Z5),timeoutMs:Q*2,retryable:!0,maxRetries:2,execute:async(J,W)=>{let X=c$(Z5,J);return Promise.all(X.requests.map(async(j)=>{try{let Y=await Z$($(j.url,j.prompt,W),Q,`Web fetch timed out after ${Q}ms`);return{query:j.url,result:Y,success:!0}}catch(Y){let V=S2(Y);return{query:j.url,result:"",error:`Error fetching web content: ${V}`,success:!1}}}))}})}var rf=`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:
401
+ ${A.text}`:""):z.text;if(z.dropped||W&&A.dropped||R.length>J){let S=W?z.totalChars+A.totalChars:z.totalChars;R=y2(R,{maxChars:J,totalChars:S})}U(()=>X(R))}}),V.on("error",(T)=>{if(D(),G)return;U(()=>j(Error(`Failed to execute command: ${T.message}`)))}),V.stdin?.on("error",(T)=>{if(G||F)return;q(Error(`Failed to write command input: ${T.message}`))}),V.stdin?.end($.input,"utf8")})}function k2($={}){let{shell:Z=If(process.platform),timeoutMs:Q=30000,env:J={},combineOutput:W=!0}=$,X=$.maxOutputChars??$.maxOutputBytes??Q$;return(j,Y,V)=>{let B=typeof j!=="string",H=B?{args:j.args??[]}:xf(Z,j);return gf({executable:B?j.command:Z,args:H.args,cwd:Y,env:J,input:H.input},V,Q,X,W)}}function yK($,Z){let Q=$.metadata?.[Z];return typeof Q==="string"?Q:void 0}function cf($,Z,Q){sV($,{tool_name:"run_commands",effective_timeout_ms:Q.effectiveTimeoutMs,timeout_source:Q.timeoutSource,command_count:Q.commandCount,duration_ms:Q.durationMs,ulid:Z.sessionId,mode:yK(Z,"mode"),source:yK(Z,"source"),session_id:Z.sessionId,agent_id:Z.agentId,conversation_id:Z.conversationId,run_id:Z.runId,iteration:Z.iteration,tool_call_id:Z.toolCallId})}function uf($){let Z=$.match(/(?<![<])<<-?\s*(?:"([^"]+)"|'([^']+)'|([A-Za-z0-9_./-]+))/);return Z?.[1]??Z?.[2]??Z?.[3]}function df($){let Z=[];for(let Q=0;Q<$.length;Q+=1){let J=$[Q],W=uf(J);if(!W){Z.push(J);continue}let X=$.findIndex((Y,V)=>V>Q&&Y.trim()===W);if(X===-1){Z.push(J);continue}let j=[J];while(Q<X){Q+=1;let Y=$[Q];j.push(Y)}Z.push(j.join(`
402
+ `))}return Z}function pf($){let Z=[],Q=[],J=()=>{if(Q.length>0)Z.push(...df(Q)),Q=[]};for(let W of $){if(typeof W==="string"){Q.push(W);continue}J(),Z.push(W)}return J(),Z}async function lf($,Z){let{executor:Q,cwd:J,context:W,timeoutMs:X,timeoutSource:j,telemetry:Y}=Z;return Promise.all($.map(async(V)=>{let B=Date.now(),H=PK(V);try{let K=await Z$(Q(V,J,W),X,`Command timed out after ${X}ms`);return{query:H,result:K,success:!0}}catch(K){if(K instanceof t8)cf(Y,W,{effectiveTimeoutMs:K.timeoutMs,timeoutSource:j,commandCount:$.length,durationMs:Date.now()-B});if(K instanceof J$)return{query:H,result:K.output,error:K.message,success:!1};let G=b2(K);return{query:H,result:"",error:`Command failed: ${G}`,success:!1}}}))}function XW($,Z={}){let Q=Z.fileReadTimeoutMs??1e4;return m$({name:"read_files",description:`Read the content of text or image files at the provided absolute paths, or return only an inclusive one-based line range when start_line/end_line are provided on the same file entry as its path. When you already know multiple files you need, read them together in one call, and call this tool in the same response as other independent tool calls. Each read returns at most ${e8} lines / ~${Math.round(UQ/1024)}k characters; longer files report their total line count, page through them with start_line/end_line on that file's entry. Binary files that are not image and large files are not supported. Returns file contents or error messages for each path. `,inputSchema:W$(t4),timeoutMs:Q*2,retryable:!0,maxRetries:1,execute:async(J,W)=>{let X=c$(qK,CK(J)),j;if(typeof X==="string")j=[{path:X}];else if(Array.isArray(X))j=X.map((Y)=>typeof Y==="string"?{path:Y}:Y);else if("files"in X)j=(Array.isArray(X.files)?X.files:[X.files]).map((V)=>typeof V==="string"?{path:V}:V);else if("file_paths"in X)j=(Array.isArray(X.file_paths)?X.file_paths:[X.file_paths]).map((V)=>({path:V}));else if("paths"in X)j=(Array.isArray(X.paths)?X.paths:[X.paths]).map((V)=>typeof V==="string"?{path:V}:V);else j=[X];return Promise.all(j.map(async(Y)=>{let V=EK(Y);if(V)return{query:FQ(Y),result:"",error:`Invalid file range: ${V}`,success:!1};try{let B=await Z$($(Y,W),Q,`File read timed out after ${Q}ms`);return{query:FQ(Y),result:B,success:!0}}catch(B){let H=b2(B);return{query:FQ(Y),result:"",error:`Error reading file: ${H}`,success:!1}}}))}})}function jW($,Z={}){let Q=Z.searchTimeoutMs??30000,J=Z.cwd??process.cwd();return m$({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($6/1000)}k characters per query is middle-truncated; narrow patterns beat broad ones.`,inputSchema:W$(e4),timeoutMs:Q*2,retryable:!0,maxRetries:1,execute:async(W,X)=>{let j=c$(zK,W),Y=Array.isArray(j)?j:typeof j==="object"?Array.isArray(j.queries)?j.queries:[j.queries]:[j];return Promise.all(Y.map(async(V)=>{try{let B=await Z$($(V,J,X),Q,`Search timed out after ${Q}ms`);return{query:V,result:B,success:!0}}catch(B){let H=b2(B);return{query:V,result:"",error:`Search failed: ${H}`,success:!1}}}))}})}var kK="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 rf($,Z){if($==="powershell"||$==="cmd"){let J=$==="powershell"?"PowerShell":"cmd.exe",W=$==="powershell"?"';'":"'&&'";return"Run non-interactive shell commands from the root of the workspace in Windows environment. "+kK+`Output beyond ~${Math.round(Q$/1000)}k characters is middle-truncated (start and end preserved); filter output when you need specific sections. Commands run through ${J}; quote paths and arguments for ${J} and use ${W} to sequence commands. Include multiple commands in the same call when they are independent and safe to run concurrently. When independent reads, searches, or edits are also needed, call those tools in the same response.`}let Q=$==="wsl"?"Commands run through bash in WSL (wsl.exe); the Windows working directory is mounted under /mnt/<drive>. ":Z?"Commands run through a POSIX (bash-compatible) shell on Windows. ":"";return"Run non-interactive shell commands from the root of the workspace. "+kK+Q+`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(Q$/1000)}k characters is middle-truncated (start and end preserved); pipe through grep/head/tail when you need specific sections of large output. For long-running commands, run them in background and redirect output to a tmp file that you can read from later.`}function Y5($,Z={}){let Q=Z.bashTimeoutMs??30000,J=Z.bashTimeoutMs===void 0?"default_setting":"configured_setting",W=Z.cwd??process.cwd(),X=process.platform==="win32",j=Z.shell,Y=typeof j==="function"?j:()=>j??vf(process.platform),V=()=>rf(mf(Y()),X),B=m$({name:"run_commands",description:V(),inputSchema:W$($5),timeoutMs:Q*2,retryable:!1,maxRetries:0,execute:async(H,K)=>{let G=pf(wK(H));return lf(G,{executor:$,cwd:W,context:K,timeoutMs:Q,timeoutSource:J,telemetry:Z.telemetry})}});if(typeof j==="function")Object.defineProperty(B,"description",{get:V,enumerable:!0});return B}function YW($,Z={}){let Q=Z.webFetchTimeoutMs??30000;return m$({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:W$(Z5),timeoutMs:Q*2,retryable:!0,maxRetries:2,execute:async(J,W)=>{let X=c$(Z5,J);return Promise.all(X.requests.map(async(j)=>{try{let Y=await Z$($(j.url,j.prompt,W),Q,`Web fetch timed out after ${Q}ms`);return{query:j.url,result:Y,success:!0}}catch(Y){let V=b2(Y);return{query:j.url,result:"",error:`Error fetching web content: ${V}`,success:!1}}}))}})}var nf=`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:
403
403
 
404
404
  *** Begin Patch
405
405
  *** Update File: path/to/file.ts
@@ -435,46 +435,46 @@ Example:
435
435
  </div>
436
436
  );
437
437
  }
438
- *** End Patch`;function VW($,Z={}){let Q=Z.applyPatchTimeoutMs??30000,J=Z.cwd??process.cwd();return m$({name:"apply_patch",description:rf,inputSchema:W$(J5),timeoutMs:Q,retryable:!1,maxRetries:0,execute:async(W,X)=>{let j=c$(NK,W),Y=typeof j==="string"?j:j.input;try{return{query:"apply_patch",result:await Z$($({input:Y},J,X),Q,`apply_patch timed out after ${Q}ms`),success:!0}}catch(V){return{query:"apply_patch",result:"",error:`apply_patch failed: ${S2(V)}`,success:!1}}}})}function BW($,Z={}){let Q=Z.editorTimeoutMs??30000,J=Z.cwd??process.cwd();return m$({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:W$(Q5),timeoutMs:Q,retryable:!1,maxRetries:0,execute:async(W,X)=>{let j=c$(Q5,W),Y=j.insert_line==null?"edit":"insert",V=RK(j);if(V)return{query:`${Y}:${j.path}`,result:"",error:V,success:!1};try{let B=await Z$($(j,J,X),Q,`Editor operation timed out after ${Q}ms`);return{query:`${Y}:${j.path}`,result:B,success:!0}}catch(B){let H=S2(B);return{query:`${Y}:${j.path}`,result:"",error:`Editor operation failed: ${H}`,success:!1}}}})}function k2($,Z={}){let Q=Z.skillsTimeoutMs??15000,J='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.',W=m$({name:"skills",description:J,inputSchema:W$(W5),timeoutMs:Q,retryable:!1,maxRetries:0,execute:async(X,j)=>{let Y=c$(W5,X);return Z$($(Y.skill,Y.args||void 0,j),Q,`Skills operation timed out after ${Q}ms`)}});return Object.defineProperty(W,"description",{get(){let X=$.configuredSkills?.filter((j)=>!j.disabled).map((j)=>j.name);if(X&&X.length>0)return`${J} Available skills: ${X.join(", ")}.`;return J},enumerable:!0,configurable:!0}),W}function HW($){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:W$(X5),retryable:!1,maxRetries:0,execute:async(Z,Q)=>{let J=c$(X5,Z);return $(J.question,J.options,Q)}}}function KW($,Z={}){let Q=Z.submitTimeoutMs??15000;return m$({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:W$(j5),lifecycle:{completesRun:!0},timeoutMs:Q,retryable:!1,maxRetries:0,execute:async(J,W)=>{let X=c$(j5,J);return Z$($(X.summary,X.verified,W),Q,`submit_and_exit timed out after ${Q}ms`)}})}function u$($){let{executors:Z,enableReadFiles:Q=!0,enableSearch:J=!0,enableBash:W=!0,enableWebFetch:X=!0,enableApplyPatch:j=!1,enableEditor:Y=!0,enableSkills:V=!0,enableAskQuestion:B=!0,enableSubmitAndExit:H=!1,...K}=$,G=[];if(Q&&Z.readFile)G.push(XW(Z.readFile,K));if(J&&Z.search)G.push(jW(Z.search,K));if(W&&Z.bash)G.push(Y5(Z.bash,K));if(X&&Z.webFetch)G.push(YW(Z.webFetch,K));if(Y&&Z.editor)G.push(BW(Z.editor,K));else if(j&&Z.applyPatch)G.push(VW(Z.applyPatch,K));if(V&&Z.skills)G.push(k2(Z.skills,K));let F=H?Z.submit:void 0;if(B&&Z.askQuestion&&!F)G.push(HW(Z.askQuestion));if(F)G.push(KW(F,K));return G}import*as $1 from"node:fs/promises";import*as Z1 from"node:path";var p={BEGIN:"*** Begin Patch",END:"*** End Patch",ADD:"*** Add File: ",UPDATE:"*** Update File: ",DELETE:"*** Delete File: ",MOVE:"*** Move to: ",SECTION:"@@",END_FILE:"*** End of File"},hK=["%%bash","apply_patch","EOF","```"],h2;((J)=>{J.ADD="add";J.DELETE="delete";J.UPDATE="update"})(h2||={});class D0 extends Error{constructor($){super($);this.name="DiffError"}}function e0($){let Z={"‐":"-","‑":"-","‒":"-","–":"-","—":"-","−":"-","“":'"',"”":'"',"„":'"',"«":'"',"»":'"',"‘":"'","’":"'","‛":"'"," ":" "," ":" "};return $.normalize("NFC").replace(/./gu,(Q)=>Z[Q]??Q).replace(/\\`/g,"`").replace(/\\'/g,"'").replace(/\\"/g,'"')}class GW{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(p.BEGIN))this.index++}hasMoreLines(){return this.index<this.lines.length}isEndMarker(){return this.lines[this.index]?.startsWith(p.END)??!1}parseNextAction(){let $=this.lines[this.index];if($?.startsWith(p.UPDATE)){this.parseUpdate($.substring(p.UPDATE.length).trim());return}if($?.startsWith(p.DELETE)){this.parseDelete($.substring(p.DELETE.length).trim());return}if($?.startsWith(p.ADD)){this.parseAdd($.substring(p.ADD.length).trim());return}throw new D0(`Unknown line while parsing: ${$}`)}checkDuplicate($,Z){if($ in this.patch.actions)throw new D0(`Duplicate ${Z} for file: ${$}`)}parseUpdate($){this.checkDuplicate($,"update"),this.currentPath=$,this.index++;let Z=this.lines[this.index]?.startsWith(p.MOVE)?(this.lines[this.index++]??"").substring(p.MOVE.length).trim():void 0;if(!($ in this.currentFiles))throw new D0(`Update File Error: Missing File: ${$}`);let Q=this.currentFiles[$]??"",J=this.parseUpdateFile(Q,$);J.movePath=Z,this.patch.actions[$]=J,this.currentPath=void 0}parseUpdateFile($,Z){let Q={type:"update",chunks:[]},J=$.split(`
438
+ *** End Patch`;function VW($,Z={}){let Q=Z.applyPatchTimeoutMs??30000,J=Z.cwd??process.cwd();return m$({name:"apply_patch",description:nf,inputSchema:W$(J5),timeoutMs:Q,retryable:!1,maxRetries:0,execute:async(W,X)=>{let j=c$(fK,W),Y=typeof j==="string"?j:j.input;try{return{query:"apply_patch",result:await Z$($({input:Y},J,X),Q,`apply_patch timed out after ${Q}ms`),success:!0}}catch(V){return{query:"apply_patch",result:"",error:`apply_patch failed: ${b2(V)}`,success:!1}}}})}function BW($,Z={}){let Q=Z.editorTimeoutMs??30000,J=Z.cwd??process.cwd();return m$({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:W$(Q5),timeoutMs:Q,retryable:!1,maxRetries:0,execute:async(W,X)=>{let j=c$(Q5,W),Y=j.insert_line==null?"edit":"insert",V=MK(j);if(V)return{query:`${Y}:${j.path}`,result:"",error:V,success:!1};try{let B=await Z$($(j,J,X),Q,`Editor operation timed out after ${Q}ms`);return{query:`${Y}:${j.path}`,result:B,success:!0}}catch(B){let H=b2(B);return{query:`${Y}:${j.path}`,result:"",error:`Editor operation failed: ${H}`,success:!1}}}})}function h2($,Z={}){let Q=Z.skillsTimeoutMs??15000,J='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.',W=m$({name:"skills",description:J,inputSchema:W$(W5),timeoutMs:Q,retryable:!1,maxRetries:0,execute:async(X,j)=>{let Y=c$(W5,X);return Z$($(Y.skill,Y.args||void 0,j),Q,`Skills operation timed out after ${Q}ms`)}});return Object.defineProperty(W,"description",{get(){let X=$.configuredSkills?.filter((j)=>!j.disabled).map((j)=>j.name);if(X&&X.length>0)return`${J} Available skills: ${X.join(", ")}.`;return J},enumerable:!0,configurable:!0}),W}function HW($){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:W$(X5),retryable:!1,maxRetries:0,execute:async(Z,Q)=>{let J=c$(X5,Z);return $(J.question,J.options,Q)}}}function KW($,Z={}){let Q=Z.submitTimeoutMs??15000;return m$({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:W$(j5),lifecycle:{completesRun:!0},timeoutMs:Q,retryable:!1,maxRetries:0,execute:async(J,W)=>{let X=c$(j5,J);return Z$($(X.summary,X.verified,W),Q,`submit_and_exit timed out after ${Q}ms`)}})}function u$($){let{executors:Z,enableReadFiles:Q=!0,enableSearch:J=!0,enableBash:W=!0,enableWebFetch:X=!0,enableApplyPatch:j=!1,enableEditor:Y=!0,enableSkills:V=!0,enableAskQuestion:B=!0,enableSubmitAndExit:H=!1,...K}=$,G=[];if(Q&&Z.readFile)G.push(XW(Z.readFile,K));if(J&&Z.search)G.push(jW(Z.search,K));if(W&&Z.bash)G.push(Y5(Z.bash,K));if(X&&Z.webFetch)G.push(YW(Z.webFetch,K));if(Y&&Z.editor)G.push(BW(Z.editor,K));else if(j&&Z.applyPatch)G.push(VW(Z.applyPatch,K));if(V&&Z.skills)G.push(h2(Z.skills,K));let F=H?Z.submit:void 0;if(B&&Z.askQuestion&&!F)G.push(HW(Z.askQuestion));if(F)G.push(KW(F,K));return G}import*as $1 from"node:fs/promises";import*as Z1 from"node:path";var p={BEGIN:"*** Begin Patch",END:"*** End Patch",ADD:"*** Add File: ",UPDATE:"*** Update File: ",DELETE:"*** Delete File: ",MOVE:"*** Move to: ",SECTION:"@@",END_FILE:"*** End of File"},IK=["%%bash","apply_patch","EOF","```"],I2;((J)=>{J.ADD="add";J.DELETE="delete";J.UPDATE="update"})(I2||={});class D0 extends Error{constructor($){super($);this.name="DiffError"}}function e0($){let Z={"‐":"-","‑":"-","‒":"-","–":"-","—":"-","−":"-","“":'"',"”":'"',"„":'"',"«":'"',"»":'"',"‘":"'","’":"'","‛":"'"," ":" "," ":" "};return $.normalize("NFC").replace(/./gu,(Q)=>Z[Q]??Q).replace(/\\`/g,"`").replace(/\\'/g,"'").replace(/\\"/g,'"')}class GW{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(p.BEGIN))this.index++}hasMoreLines(){return this.index<this.lines.length}isEndMarker(){return this.lines[this.index]?.startsWith(p.END)??!1}parseNextAction(){let $=this.lines[this.index];if($?.startsWith(p.UPDATE)){this.parseUpdate($.substring(p.UPDATE.length).trim());return}if($?.startsWith(p.DELETE)){this.parseDelete($.substring(p.DELETE.length).trim());return}if($?.startsWith(p.ADD)){this.parseAdd($.substring(p.ADD.length).trim());return}throw new D0(`Unknown line while parsing: ${$}`)}checkDuplicate($,Z){if($ in this.patch.actions)throw new D0(`Duplicate ${Z} for file: ${$}`)}parseUpdate($){this.checkDuplicate($,"update"),this.currentPath=$,this.index++;let Z=this.lines[this.index]?.startsWith(p.MOVE)?(this.lines[this.index++]??"").substring(p.MOVE.length).trim():void 0;if(!($ in this.currentFiles))throw new D0(`Update File Error: Missing File: ${$}`);let Q=this.currentFiles[$]??"",J=this.parseUpdateFile(Q,$);J.movePath=Z,this.patch.actions[$]=J,this.currentPath=void 0}parseUpdateFile($,Z){let Q={type:"update",chunks:[]},J=$.split(`
439
439
  `),W=0,X=[p.END,p.UPDATE,p.DELETE,p.ADD,p.END_FILE];while(!X.some((j)=>this.lines[this.index]?.startsWith(j.trim()))){let j=this.lines[this.index],Y=j?.startsWith("@@ ")?j.substring(3):void 0;if(Y!==void 0||(j==="@@"?j:void 0)!==void 0)this.index++;else if(W!==0)throw new D0(`Invalid Line:
440
- ${this.lines[this.index]}`);if(Y?.trim()){let L=e0(Y.trim());for(let O=W;O<J.length;O++){let D=J[O];if(D&&(e0(D)===L||e0(D.trim())===L)){if(W=O+1,e0(D.trim())===L&&e0(D)!==L)this.fuzz++;break}}}let[B,H,K,G]=of(this.lines,this.index),[F,U,_]=af(J,B,W,G);if(F===-1){let L=B.join(`
440
+ ${this.lines[this.index]}`);if(Y?.trim()){let L=e0(Y.trim());for(let O=W;O<J.length;O++){let D=J[O];if(D&&(e0(D)===L||e0(D.trim())===L)){if(W=O+1,e0(D.trim())===L&&e0(D)!==L)this.fuzz++;break}}}let[B,H,K,G]=sf(this.lines,this.index),[F,U,_]=of(J,B,W,G);if(F===-1){let L=B.join(`
441
441
  `);this.addWarning({path:this.currentPath||Z,chunkIndex:Q.chunks.length,message:`Could not find matching context (similarity: ${_.toFixed(2)}). Chunk skipped.`,context:L.length>200?`${L.substring(0,200)}...`:L}),this.index=K}else{this.fuzz+=U;for(let L of H)L.origIndex+=F,Q.chunks.push(L);W=F+B.length,this.index=K}}return Q}parseDelete($){if(this.checkDuplicate($,"delete"),!($ in this.currentFiles))throw new D0(`Delete File Error: Missing File: ${$}`);this.patch.actions[$]={type:"delete",chunks:[]},this.index++}parseAdd($){if(this.checkDuplicate($,"add"),$ in this.currentFiles)throw new D0(`Add File Error: File already exists: ${$}`);this.index++;let Z=[],Q=[p.END,p.UPDATE,p.DELETE,p.ADD];while(this.hasMoreLines()&&!Q.some((J)=>this.lines[this.index]?.startsWith(J.trim()))){let J=this.lines[this.index++];if(J===void 0)break;if(!J.startsWith("+"))throw new D0(`Invalid Add File line (missing '+'): ${J}`);Z.push(J.substring(1))}this.patch.actions[$]={type:"add",newFile:Z.join(`
442
- `),chunks:[]}}}function kK($,Z){let Q=$.length>Z.length?$:Z,J=$.length>Z.length?Z:$;if(Q.length===0)return 1;let W=nf(J,Q);return(Q.length-W)/Q.length}function nf($,Z){let Q=Z.length+1,J=$.length+1,W=Array(Q*J).fill(0),X=(Y,V)=>W[Y*J+V]??0,j=(Y,V,B)=>{W[Y*J+V]=B};for(let Y=0;Y<=Z.length;Y++)j(Y,0,Y);for(let Y=0;Y<=$.length;Y++)j(0,Y,Y);for(let Y=1;Y<=Z.length;Y++)for(let V=1;V<=$.length;V++)if(Z[Y-1]===$[V-1])j(Y,V,X(Y-1,V-1));else j(Y,V,1+Math.min(X(Y-1,V-1),X(Y,V-1),X(Y-1,V)));return X(Z.length,$.length)}function af($,Z,Q,J){if(Z.length===0)return[Q,0,1];let W=0,X=(j)=>{let Y=e0(Z.join(`
442
+ `),chunks:[]}}}function hK($,Z){let Q=$.length>Z.length?$:Z,J=$.length>Z.length?Z:$;if(Q.length===0)return 1;let W=af(J,Q);return(Q.length-W)/Q.length}function af($,Z){let Q=Z.length+1,J=$.length+1,W=Array(Q*J).fill(0),X=(Y,V)=>W[Y*J+V]??0,j=(Y,V,B)=>{W[Y*J+V]=B};for(let Y=0;Y<=Z.length;Y++)j(Y,0,Y);for(let Y=0;Y<=$.length;Y++)j(0,Y,Y);for(let Y=1;Y<=Z.length;Y++)for(let V=1;V<=$.length;V++)if(Z[Y-1]===$[V-1])j(Y,V,X(Y-1,V-1));else j(Y,V,1+Math.min(X(Y-1,V-1),X(Y,V-1),X(Y-1,V)));return X(Z.length,$.length)}function of($,Z,Q,J){if(Z.length===0)return[Q,0,1];let W=0,X=(j)=>{let Y=e0(Z.join(`
443
443
  `));for(let B=j;B<$.length;B++){let H=e0($.slice(B,B+Z.length).join(`
444
- `));if(H===Y)return[B,0,1];let K=kK(H,Y);if(K>W)W=K}for(let B=j;B<$.length;B++){let H=e0($.slice(B,B+Z.length).map((G)=>G.trimEnd()).join(`
444
+ `));if(H===Y)return[B,0,1];let K=hK(H,Y);if(K>W)W=K}for(let B=j;B<$.length;B++){let H=e0($.slice(B,B+Z.length).map((G)=>G.trimEnd()).join(`
445
445
  `)),K=e0(Z.map((G)=>G.trimEnd()).join(`
446
446
  `));if(H===K)return[B,1,1]}for(let B=j;B<$.length;B++){let H=e0($.slice(B,B+Z.length).map((G)=>G.trim()).join(`
447
447
  `)),K=e0(Z.map((G)=>G.trim()).join(`
448
448
  `));if(H===K)return[B,100,1]}let V=0.66;for(let B=j;B<$.length;B++){let H=e0($.slice(B,B+Z.length).join(`
449
- `)),K=kK(H,Y);if(K>=V)return[B,1000,K];if(K>W)W=K}return[-1,0,W]};if(J){let[j,Y,V]=X($.length-Z.length);if(j!==-1)return[j,Y,V];return[j,Y,V]=X(Q),[j,Y+1e4,V]}return X(Q)}function of($,Z){let Q=Z,J=[],W=[],X=[],j=[],Y="keep",V=["@@",p.END,p.UPDATE,p.DELETE,p.ADD,p.END_FILE];while(Q<$.length){let B=$[Q];if(!B||V.some((G)=>B.startsWith(G.trim())))break;if(B==="***")break;if(B.startsWith("***"))throw new D0(`Invalid line: ${B}`);Q++;let H=Y,K=B;if(K[0]==="+")Y="add";else if(K[0]==="-")Y="delete";else if(K[0]===" ")Y="keep";else Y="keep",K=` ${K}`;if(K=K.slice(1),Y==="keep"&&H!==Y){if(X.length||W.length)j.push({origIndex:J.length-W.length,delLines:W,insLines:X});W=[],X=[]}if(Y==="delete")W.push(K),J.push(K);else if(Y==="add")X.push(K);else J.push(K)}if(X.length||W.length)j.push({origIndex:J.length-W.length,delLines:W,insLines:X});if(Q<$.length&&$[Q]===p.END_FILE)return Q++,[J,j,Q,!0];return[J,j,Q,!1]}function FW($,Z,Q){let J=Z1.isAbsolute(Z),W=J?Z1.normalize(Z):Z1.resolve($,Z);if(!Q||J)return W;let X=Z1.relative($,W);if(X.startsWith("..")||Z1.isAbsolute(X))throw new D0(`Path must stay within cwd: ${Z}`);return W}function sf($){return $.split(`
450
- `).map((Z)=>Z.replace(/\r$/,""))}function IK($){if($.trim()==="")return!1;return hK.some((Z)=>$.startsWith(Z))}function tf($){let Z=0,Q=$.length;while(Z<Q&&IK($[Z]??""))Z++;while(Q>Z&&IK($[Q-1]??""))Q--;return $.slice(Z,Q)}function ef($){let Z=sf($),Q=Z.findIndex((j)=>j.startsWith(p.BEGIN)),J=-1;for(let j=Z.length-1;j>=0;j--)if(Z[j]?.startsWith(p.END)){J=j;break}if(Q!==-1||J!==-1){if(Q===-1||J===-1||J<Q)throw new D0("Invalid patch text - incomplete sentinels. Try breaking it into smaller patches.");return{lines:Z.slice(Q,J+1)}}let W=tf(Z);while(W.length>0&&W[0]==="")W.shift();while(W.length>0&&W[W.length-1]==="")W.pop();return{lines:[p.BEGIN,...W,p.END]}}function $R($,Z){let Q=new Set;for(let J of $)for(let W of Z)if(J.startsWith(W)){Q.add(J.substring(W.length).trim());break}return[...Q]}function ZR($,Z,Q){if(Z.length===0)return $;let J=$.split(`
449
+ `)),K=hK(H,Y);if(K>=V)return[B,1000,K];if(K>W)W=K}return[-1,0,W]};if(J){let[j,Y,V]=X($.length-Z.length);if(j!==-1)return[j,Y,V];return[j,Y,V]=X(Q),[j,Y+1e4,V]}return X(Q)}function sf($,Z){let Q=Z,J=[],W=[],X=[],j=[],Y="keep",V=["@@",p.END,p.UPDATE,p.DELETE,p.ADD,p.END_FILE];while(Q<$.length){let B=$[Q];if(!B||V.some((G)=>B.startsWith(G.trim())))break;if(B==="***")break;if(B.startsWith("***"))throw new D0(`Invalid line: ${B}`);Q++;let H=Y,K=B;if(K[0]==="+")Y="add";else if(K[0]==="-")Y="delete";else if(K[0]===" ")Y="keep";else Y="keep",K=` ${K}`;if(K=K.slice(1),Y==="keep"&&H!==Y){if(X.length||W.length)j.push({origIndex:J.length-W.length,delLines:W,insLines:X});W=[],X=[]}if(Y==="delete")W.push(K),J.push(K);else if(Y==="add")X.push(K);else J.push(K)}if(X.length||W.length)j.push({origIndex:J.length-W.length,delLines:W,insLines:X});if(Q<$.length&&$[Q]===p.END_FILE)return Q++,[J,j,Q,!0];return[J,j,Q,!1]}function FW($,Z,Q){let J=Z1.isAbsolute(Z),W=J?Z1.normalize(Z):Z1.resolve($,Z);if(!Q||J)return W;let X=Z1.relative($,W);if(X.startsWith("..")||Z1.isAbsolute(X))throw new D0(`Path must stay within cwd: ${Z}`);return W}function tf($){return $.split(`
450
+ `).map((Z)=>Z.replace(/\r$/,""))}function xK($){if($.trim()==="")return!1;return IK.some((Z)=>$.startsWith(Z))}function ef($){let Z=0,Q=$.length;while(Z<Q&&xK($[Z]??""))Z++;while(Q>Z&&xK($[Q-1]??""))Q--;return $.slice(Z,Q)}function $R($){let Z=tf($),Q=Z.findIndex((j)=>j.startsWith(p.BEGIN)),J=-1;for(let j=Z.length-1;j>=0;j--)if(Z[j]?.startsWith(p.END)){J=j;break}if(Q!==-1||J!==-1){if(Q===-1||J===-1||J<Q)throw new D0("Invalid patch text - incomplete sentinels. Try breaking it into smaller patches.");return{lines:Z.slice(Q,J+1)}}let W=ef(Z);while(W.length>0&&W[0]==="")W.shift();while(W.length>0&&W[W.length-1]==="")W.pop();return{lines:[p.BEGIN,...W,p.END]}}function ZR($,Z){let Q=new Set;for(let J of $)for(let W of Z)if(J.startsWith(W)){Q.add(J.substring(W.length).trim());break}return[...Q]}function QR($,Z,Q){if(Z.length===0)return $;let J=$.split(`
451
451
  `),W=[],X=0;for(let j of Z){if(j.origIndex>J.length)throw new D0(`${Q}: chunk.origIndex ${j.origIndex} > lines.length ${J.length}`);if(X>j.origIndex)throw new D0(`${Q}: currentIndex ${X} > chunk.origIndex ${j.origIndex}`);W.push(...J.slice(X,j.origIndex)),W.push(...j.insLines),X=j.origIndex+j.delLines.length}return W.push(...J.slice(X)),W.join(`
452
- `)}async function QR($,Z,Q,J){let W=$R($,[p.UPDATE,p.DELETE]),X={};for(let j of W){let Y=FW(Z,j,J),V;try{V=await $1.readFile(Y,Q)}catch{throw new D0(`File not found: ${j}`)}X[j]=V.replace(/\r\n/g,`
453
- `)}return X}function JR($,Z){let Q={};for(let[J,W]of Object.entries($.actions))switch(W.type){case"delete":Q[J]={type:"delete",oldContent:Z[J]};break;case"add":if(W.newFile===void 0)throw new D0("ADD action without file content");Q[J]={type:"add",newContent:W.newFile};break;case"update":Q[J]={type:"update",oldContent:Z[J],newContent:ZR(Z[J]??"",W.chunks,J),movePath:W.movePath};break}return Q}function WR($){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 J=Q.chunkIndex===void 0?"unknown":String(Q.chunkIndex+1);if(Z.push(`${Q.path}: hunk ${J}: ${Q.message}`),Q.context)Z.push(`Context:
452
+ `)}async function JR($,Z,Q,J){let W=ZR($,[p.UPDATE,p.DELETE]),X={};for(let j of W){let Y=FW(Z,j,J),V;try{V=await $1.readFile(Y,Q)}catch{throw new D0(`File not found: ${j}`)}X[j]=V.replace(/\r\n/g,`
453
+ `)}return X}function WR($,Z){let Q={};for(let[J,W]of Object.entries($.actions))switch(W.type){case"delete":Q[J]={type:"delete",oldContent:Z[J]};break;case"add":if(W.newFile===void 0)throw new D0("ADD action without file content");Q[J]={type:"add",newContent:W.newFile};break;case"update":Q[J]={type:"update",oldContent:Z[J],newContent:QR(Z[J]??"",W.chunks,J),movePath:W.movePath};break}return Q}function XR($){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 J=Q.chunkIndex===void 0?"unknown":String(Q.chunkIndex+1);if(Z.push(`${Q.path}: hunk ${J}: ${Q.message}`),Q.context)Z.push(`Context:
454
454
  ${Q.context}`)}return Z.join(`
455
- `)}async function XR($,Z,Q,J){let W=[];for(let[X,j]of Object.entries($)){let Y=FW(Z,X,J);switch(j.type){case"delete":await $1.rm(Y,{force:!0}),W.push(`${X}: [deleted]`);break;case"add":if(j.newContent===void 0)throw new D0(`Cannot create ${X} with no content`);await $1.mkdir(Z1.dirname(Y),{recursive:!0}),await $1.writeFile(Y,j.newContent,{encoding:Q}),W.push(X);break;case"update":{if(j.newContent===void 0)throw new D0(`UPDATE change for ${X} has no new content`);if(j.movePath){let V=FW(Z,j.movePath,J);await $1.mkdir(Z1.dirname(V),{recursive:!0}),await $1.writeFile(V,j.newContent,{encoding:Q}),await $1.rm(Y,{force:!0}),W.push(`${X} -> ${j.movePath}`)}else await $1.writeFile(Y,j.newContent,{encoding:Q}),W.push(X);break}}}return W}async function $6($,Z,Q={}){let{encoding:J="utf-8",restrictToCwd:W=!0}=Q,X=ef($),j=await QR(X.lines,Z,J,W),Y=new GW(X.lines,j),{patch:V,fuzz:B}=Y.parse();if(V.warnings&&V.warnings.length>0)throw new D0(WR(V.warnings));return{changes:JR(V,j),fuzz:B}}function I2($={}){let{encoding:Z="utf-8",restrictToCwd:Q=!0}=$;return async(J,W,X)=>{let{changes:j,fuzz:Y}=await $6(J.input,W,{encoding:Z,restrictToCwd:Q}),V=await XR(j,W,Z,Q),B=["Successfully applied patch to the following files:"];for(let H of V)B.push(H);if(Y>0)B.push(`Note: Patch applied with fuzz factor ${Y}`);return B.join(`
456
- `)}}import*as L1 from"node:fs/promises";import*as _1 from"node:path";function jR($,Z,Q){let J=_1.isAbsolute(Z),W=J?_1.normalize(Z):_1.resolve($,Z);if(!Q)return W;if(J)return W;let X=_1.relative($,W);if(X.startsWith("..")||_1.isAbsolute(X))throw Error(`Path must stay within cwd: ${Z}`);return W}function YR($,Z){if(Z.length===0)return 0;return $.split(Z).length-1}function gK($){return $.includes(`\r
455
+ `)}async function jR($,Z,Q,J){let W=[];for(let[X,j]of Object.entries($)){let Y=FW(Z,X,J);switch(j.type){case"delete":await $1.rm(Y,{force:!0}),W.push(`${X}: [deleted]`);break;case"add":if(j.newContent===void 0)throw new D0(`Cannot create ${X} with no content`);await $1.mkdir(Z1.dirname(Y),{recursive:!0}),await $1.writeFile(Y,j.newContent,{encoding:Q}),W.push(X);break;case"update":{if(j.newContent===void 0)throw new D0(`UPDATE change for ${X} has no new content`);if(j.movePath){let V=FW(Z,j.movePath,J);await $1.mkdir(Z1.dirname(V),{recursive:!0}),await $1.writeFile(V,j.newContent,{encoding:Q}),await $1.rm(Y,{force:!0}),W.push(`${X} -> ${j.movePath}`)}else await $1.writeFile(Y,j.newContent,{encoding:Q}),W.push(X);break}}}return W}async function Z6($,Z,Q={}){let{encoding:J="utf-8",restrictToCwd:W=!0}=Q,X=$R($),j=await JR(X.lines,Z,J,W),Y=new GW(X.lines,j),{patch:V,fuzz:B}=Y.parse();if(V.warnings&&V.warnings.length>0)throw new D0(XR(V.warnings));return{changes:WR(V,j),fuzz:B}}function x2($={}){let{encoding:Z="utf-8",restrictToCwd:Q=!0}=$;return async(J,W,X)=>{let{changes:j,fuzz:Y}=await Z6(J.input,W,{encoding:Z,restrictToCwd:Q}),V=await jR(j,W,Z,Q),B=["Successfully applied patch to the following files:"];for(let H of V)B.push(H);if(Y>0)B.push(`Note: Patch applied with fuzz factor ${Y}`);return B.join(`
456
+ `)}}import*as L1 from"node:fs/promises";import*as _1 from"node:path";function YR($,Z,Q){let J=_1.isAbsolute(Z),W=J?_1.normalize(Z):_1.resolve($,Z);if(!Q)return W;if(J)return W;let X=_1.relative($,W);if(X.startsWith("..")||_1.isAbsolute(X))throw Error(`Path must stay within cwd: ${Z}`);return W}function VR($,Z){if(Z.length===0)return 0;return $.split(Z).length-1}function vK($){return $.includes(`\r
457
457
  `)?`\r
458
458
  `:`
459
- `}function xK($,Z){return $.split(/\r\n|\n/).join(Z)}function VR($,Z,Q){let J=$.split(/\r\n|\n/),W=Z.split(/\r\n|\n/),X=0;while(X<J.length&&X<W.length&&J[X]===W[X])X++;let j=J.length,Y=W.length;while(j>X&&Y>X&&J[j-1]===W[Y-1])j--,Y--;let V=j-X,B=Y-X,H=V,K=B;if(V+B>Q)H=Math.min(V,Math.max(Math.ceil(Q/2),Q-B)),K=Math.min(B,Q-H);let G=["```diff"];for(let _=X;_<X+H;_++)G.push(`-${_+1}: ${J[_]}`);for(let _=X;_<X+K;_++)G.push(`+${_+1}: ${W[_]}`);let F=V-H,U=B-K;if(F>0||U>0)G.push(`... diff truncated (${F} more removed, ${U} more added lines) ...`);return G.push("```"),G.join(`
460
- `)}async function BR($,Z,Q){return await L1.mkdir(_1.dirname($),{recursive:!0}),await L1.writeFile($,Z,{encoding:Q}),`File created successfully at: ${$}`}async function HR($){try{return await L1.access($),!0}catch{return!1}}async function KR($,Z,Q,J,W){let X=await L1.readFile($,J),j=gK(X),Y=xK(Z,j),V=xK(Q??"",j),B=YR(X,Y);if(B===0)throw Error(`No replacement performed: text not found in ${$}.`);if(B>1)throw Error(`No replacement performed: multiple occurrences of text found in ${$}.`);let H=X.replace(Y,()=>V);await L1.writeFile($,H,{encoding:J});let K=VR(X,H,W);return`Edited ${$}
461
- ${K}`}async function GR($,Z,Q,J){let W=await L1.readFile($,J),X=gK(W),j=W.split(/\r\n|\n/),Y=j.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 V=Z-1;return j.splice(V,0,...Q.split(/\r\n|\n/)),await L1.writeFile($,j.join(X),{encoding:J}),`Inserted content at line ${Z} in ${$}.`}function x2($={}){let{encoding:Z="utf-8",restrictToCwd:Q=!0,maxDiffLines:J=200}=$;return async(W,X,j)=>{let Y=jR(X,W.path,Q);if(W.insert_line!=null)return GR(Y,W.insert_line,W.new_text,Z);if(!await HR(Y))return BR(Y,W.new_text,Z);if(W.old_text==null)throw Error("Parameter `old_text` is required when editing an existing file without `insert_line`");return KR(Y,W.old_text,W.new_text,Z,J)}}import{createReadStream as FR}from"node:fs";import*as DQ from"node:fs/promises";import*as d$ from"node:path";import{createInterface as UR}from"node:readline";import{resolveExistingFilePath as DR}from"@cline/shared/storage";var _R=new Map([[".gif","image/gif"],[".png","image/png"],[".jpg","image/jpeg"],[".jpeg","image/jpeg"],[".webp","image/webp"]]),LR={maxFileSizeBytes:1e7,encoding:"utf-8",includeLineNumbers:!0},vK=1e8,AR=50000;function mK($){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 OR($,Z,Q,J,W,X){if(X?.aborted)throw mK(X);let j=Math.max(J??1,1),Y=W??Number.POSITIVE_INFINITY,V=Number.isFinite(Y),B=V?Y:j+AR-1,H=[],K=0,G=0,F=!1,U=!1,_=Number.isFinite(Y)?Math.min(Y,j+t8-1):j+t8-1,L=Q?String(_).length+3:0,O=FR($,{encoding:Z}),D=UR({input:O,crlfDelay:Number.POSITIVE_INFINITY}),q=X?()=>O.destroy(mK(X)):void 0;if(X&&q)X.addEventListener("abort",q,{once:!0});try{for await(let S of D){if(G+=1,G>Y){G=Y;break}if(!V&&F&&G>=B){U=!0;break}if(G<j||F)continue;if(H.length>=t8){F=!0;continue}let y=S;if(y.length>WW)y=`${y.slice(0,WW)} [line truncated]`;let s=K+y.length+L+1;if(s>UQ&&H.length>0){F=!0;continue}H.push({lineNumber:G,text:y}),K=s}}finally{if(X&&q)X.removeEventListener("abort",q);D.close(),O.destroy()}let T=String(H[H.length-1]?.lineNumber??G).length,z=H.map(({lineNumber:S,text:y})=>Q?`${String(S).padStart(T," ")} | ${y}`:y).join(`
459
+ `}function gK($,Z){return $.split(/\r\n|\n/).join(Z)}function BR($,Z,Q){let J=$.split(/\r\n|\n/),W=Z.split(/\r\n|\n/),X=0;while(X<J.length&&X<W.length&&J[X]===W[X])X++;let j=J.length,Y=W.length;while(j>X&&Y>X&&J[j-1]===W[Y-1])j--,Y--;let V=j-X,B=Y-X,H=V,K=B;if(V+B>Q)H=Math.min(V,Math.max(Math.ceil(Q/2),Q-B)),K=Math.min(B,Q-H);let G=["```diff"];for(let _=X;_<X+H;_++)G.push(`-${_+1}: ${J[_]}`);for(let _=X;_<X+K;_++)G.push(`+${_+1}: ${W[_]}`);let F=V-H,U=B-K;if(F>0||U>0)G.push(`... diff truncated (${F} more removed, ${U} more added lines) ...`);return G.push("```"),G.join(`
460
+ `)}async function HR($,Z,Q){return await L1.mkdir(_1.dirname($),{recursive:!0}),await L1.writeFile($,Z,{encoding:Q}),`File created successfully at: ${$}`}async function KR($){try{return await L1.access($),!0}catch{return!1}}async function GR($,Z,Q,J,W){let X=await L1.readFile($,J),j=vK(X),Y=gK(Z,j),V=gK(Q??"",j),B=VR(X,Y);if(B===0)throw Error(`No replacement performed: text not found in ${$}.`);if(B>1)throw Error(`No replacement performed: multiple occurrences of text found in ${$}.`);let H=X.replace(Y,()=>V);await L1.writeFile($,H,{encoding:J});let K=BR(X,H,W);return`Edited ${$}
461
+ ${K}`}async function FR($,Z,Q,J){let W=await L1.readFile($,J),X=vK(W),j=W.split(/\r\n|\n/),Y=j.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 V=Z-1;return j.splice(V,0,...Q.split(/\r\n|\n/)),await L1.writeFile($,j.join(X),{encoding:J}),`Inserted content at line ${Z} in ${$}.`}function g2($={}){let{encoding:Z="utf-8",restrictToCwd:Q=!0,maxDiffLines:J=200}=$;return async(W,X,j)=>{let Y=YR(X,W.path,Q);if(W.insert_line!=null)return FR(Y,W.insert_line,W.new_text,Z);if(!await KR(Y))return HR(Y,W.new_text,Z);if(W.old_text==null)throw Error("Parameter `old_text` is required when editing an existing file without `insert_line`");return GR(Y,W.old_text,W.new_text,Z,J)}}import{createReadStream as UR}from"node:fs";import*as DQ from"node:fs/promises";import*as d$ from"node:path";import{createInterface as DR}from"node:readline";import{resolveExistingFilePath as _R}from"@cline/shared/storage";var LR=new Map([[".gif","image/gif"],[".png","image/png"],[".jpg","image/jpeg"],[".jpeg","image/jpeg"],[".webp","image/webp"]]),AR={maxFileSizeBytes:1e7,encoding:"utf-8",includeLineNumbers:!0},mK=1e8,OR=50000;function cK($){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 qR($,Z,Q,J,W,X){if(X?.aborted)throw cK(X);let j=Math.max(J??1,1),Y=W??Number.POSITIVE_INFINITY,V=Number.isFinite(Y),B=V?Y:j+OR-1,H=[],K=0,G=0,F=!1,U=!1,_=Number.isFinite(Y)?Math.min(Y,j+e8-1):j+e8-1,L=Q?String(_).length+3:0,O=UR($,{encoding:Z}),D=DR({input:O,crlfDelay:Number.POSITIVE_INFINITY}),q=X?()=>O.destroy(cK(X)):void 0;if(X&&q)X.addEventListener("abort",q,{once:!0});try{for await(let S of D){if(G+=1,G>Y){G=Y;break}if(!V&&F&&G>=B){U=!0;break}if(G<j||F)continue;if(H.length>=e8){F=!0;continue}let y=S;if(y.length>WW)y=`${y.slice(0,WW)} [line truncated]`;let s=K+y.length+L+1;if(s>UQ&&H.length>0){F=!0;continue}H.push({lineNumber:G,text:y}),K=s}}finally{if(X&&q)X.removeEventListener("abort",q);D.close(),O.destroy()}let T=String(H[H.length-1]?.lineNumber??G).length,z=H.map(({lineNumber:S,text:y})=>Q?`${String(S).padStart(T," ")} | ${y}`:y).join(`
462
462
  `),A=H[H.length-1]?.lineNumber;if(A===void 0)return z;let R=Math.min(Y,G);if(A>=R)return z;let N=U?`${G}+ lines`:R;return`${z}
463
463
 
464
- [Showing lines ${j}-${A} of ${N}. Use start_line/end_line to read other sections.]`}function V5($={}){let{maxFileSizeBytes:Z,encoding:Q,includeLineNumbers:J}={...LR,...$};return async(W,X)=>{let{path:j,start_line:Y,end_line:V}=W,B=d$.isAbsolute(j)?d$.normalize(j):d$.resolve(process.cwd(),j),H=DR(B)??B,K=d$.extname(H).toLowerCase(),G=_R.get(K),F=await DQ.stat(H);if(!F.isFile())throw Error(`Path is not a file: ${H}`);if(G){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 U=await DQ.readFile(H);return[{type:"text",text:"Successfully read image"},{type:"image",data:U.toString("base64"),mediaType:G}]}if(F.size>vK)throw Error(`Text file too large to stream safely: ${F.size} bytes (max: ${vK} bytes). Use a targeted command such as sed, grep, head, or tail to inspect specific sections.`);return OR(H,Q,J,Y,V,X.signal)}}import{spawn as nK}from"node:child_process";import*as aK from"node:fs/promises";import*as AQ from"node:path";var iK={};w(iK,{prewarmFileIndex:()=>LQ,getFileIndex:()=>X$,enrichPromptWithMentions:()=>Q6});import{spawn as qR}from"node:child_process";import{readdir as zR}from"node:fs/promises";import DW from"node:path";import{isMainThread as dK,parentPort as cK,Worker as TR}from"node:worker_threads";var NR=15000,fR=600000,RR=1000,MR=new Set([".git","node_modules","dist","build",".next","coverage",".turbo",".cache","target","out"]);function uK($){let Z=$&&typeof $==="object"&&"code"in $?String($.code??""):"";return Z==="EACCES"||Z==="EPERM"||Z==="ENOENT"}var Z6=new Map;function ER(){if(!dK)return!1;return!0}function CR($){if(Z6.size<=1)return;for(let[Z,Q]of Z6.entries()){if(Q.pending)continue;if($-Q.lastAccessedAt>fR)Z6.delete(Z)}}function wR($,Z){return DW.relative($,Z).split(DW.sep).join("/")}async function PR($){let Q=(await new Promise((J,W)=>{let X=qR("rg",["--files","--hidden","-g","!.git"],{cwd:$,stdio:["ignore","pipe","pipe"],windowsHide:!0}),j="",Y="";X.stdout.on("data",(V)=>{j+=V.toString()}),X.stderr.on("data",(V)=>{Y+=V.toString()}),X.on("error",W),X.on("close",(V)=>{if(V===0){J(j);return}W(Error(Y||`rg exited with code ${V}`))})})).split(/\r?\n/).map((J)=>J.trim()).filter((J)=>J.length>0).map((J)=>J.replace(/\\/g,"/"));return new Set(Q)}async function pK($,Z,Q){let J;try{J=await zR(Z,{withFileTypes:!0})}catch(W){if(uK(W))return;throw W}for(let W of J){let X=DW.join(Z,W.name);if(W.isDirectory()){if(MR.has(W.name))continue;try{await pK($,X,Q)}catch(j){if(uK(j))continue;throw j}continue}if(W.isFile())Q.add(wR($,X))}}async function SR($){let Z=new Set;return await pK($,$,Z),Z}async function _Q($){try{return await PR($)}catch{return SR($)}}function bR(){if(dK||!cK)return;let $=cK;$.on("message",(Z)=>{if(Z.type!=="index")return;_Q(Z.cwd).then((Q)=>{let J={type:"indexResult",requestId:Z.requestId,files:Array.from(Q)};$.postMessage(J)}).catch((Q)=>{let J={type:"indexResult",requestId:Z.requestId,error:Q instanceof Error?Q.message:"Failed to build file index"};$.postMessage(J)})})}class lK{worker=new TR(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((W,X)=>{let j=setTimeout(()=>{this.pending.delete(Z),W(null)},RR);j.unref(),this.pending.set(Z,{resolve:(Y)=>{clearTimeout(j),W(Y)},reject:(Y)=>{clearTimeout(j),X(Y)}})}),J={type:"index",requestId:Z,cwd:$};return this.worker.postMessage(J),Q}flushPending($){for(let[Z,Q]of this.pending.entries())Q.reject($),this.pending.delete(Z)}}bR();var UW;function yR(){if(!ER())return null;if(UW===void 0)UW=new lK;return UW}async function kR($){let Z=yR();if(!Z)return _Q($);try{let Q=await Z.requestIndex($);if(Q===null)return _Q($);return new Set(Q)}catch{return _Q($)}}async function X$($,Z={}){let Q=Z.ttlMs??NR,J=Date.now();CR(J);let W=Z6.get($);if(W&&Q>0&&J-W.lastBuiltAt<=Q&&W.files.size>0)return W.lastAccessedAt=J,W.files;if(W?.pending)return W.lastAccessedAt=J,W.pending;let X=kR($).then((j)=>{return Z6.set($,{files:j,lastBuiltAt:Date.now(),lastAccessedAt:Date.now(),pending:null}),j});return Z6.set($,{files:W?.files??new Set,lastBuiltAt:W?.lastBuiltAt??0,lastAccessedAt:J,pending:X}),X}async function LQ($,Z={}){await X$($,{...Z,ttlMs:0})}import{stat as hR}from"node:fs/promises";import g2 from"node:path";var IR=/[),.:;!?`'"]+$/,xR=/^[(`'"]+/;function gR($){let Z=$.matchAll(/(^|[\s])@([^\s]+)/g),Q=[];for(let J of Z){let W=(J[2]??"").trim();if(W.length===0)continue;let X=W.replace(xR,"").replace(IR,"");if(X.length===0||X.includes("@"))continue;Q.push(X)}return Array.from(new Set(Q))}function vR($,Z){let Q=$.replace(/\\/g,"/"),J=g2.isAbsolute(Q)?g2.resolve(Q):g2.resolve(Z,Q),W=g2.relative(Z,J);if(W.startsWith("..")||g2.isAbsolute(W))return;return W.split(g2.sep).join("/")}async function Q6($,Z,Q={}){let J=gR($);if(J.length===0)return{prompt:$,mentions:[],matchedFiles:[],ignoredMentions:[]};let{maxFiles:W,maxFileBytes:X,maxTotalBytes:j}=Q,Y=await X$(Z,{ttlMs:Q.ttlMs}),V=[],B=[],H=[],K=0;for(let G of J){if(W&&H.length>=W){B.push(G);continue}let F=vR(G,Z);if(!F||!Y.has(F)){B.push(G);continue}if(!X||!j){V.push(F);continue}let U=g2.join(Z,F);try{if(!(await hR(U)).isFile()){B.push(G);continue}let L=K+X;if(L>j){B.push(G);continue}K=L,V.push(F)}catch{B.push(G)}}return{prompt:$,mentions:J,matchedFiles:V,ignoredMentions:B}}var mR=["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"],cR=["node_modules",".git","dist","build",".next","coverage","__pycache__",".venv","venv",".cache",".turbo",".output","out","target","bin","obj"],v2=null;function uR(){if(v2!==null)return Promise.resolve(v2);return new Promise(($)=>{let Z=nK("rg",["--version"],{stdio:["ignore","pipe","pipe"],windowsHide:!0});Z.on("close",(Q)=>{v2=Q===0,$(v2)}),Z.on("error",()=>{v2=!1,$(!1)}),setTimeout(()=>{if(!Z.killed)Z.kill("SIGTERM");if(v2===null)v2=!1,$(!1)},1000)})}function dR($,Z,Q,J,W=5000,X){return new Promise((j)=>{let Y=nK("rg",["--json",`--context=${J}`,"--max-count=1","-i",$],{cwd:Z,stdio:["ignore","pipe","pipe"],windowsHide:!0}),V="",B=!1,H=()=>{if(!Y.killed)Y.kill("SIGTERM")},K=setTimeout(()=>{if(!B)B=!0,H(),j(null)},W),G=(F)=>{if(!B)B=!0,clearTimeout(K),H(),j(F)};if(X?.aborted){H(),j(null);return}X?.addEventListener("abort",()=>{G(null)}),Y.stdout.on("data",(F)=>{V+=F.toString()}),Y.stderr.on("data",()=>{}),Y.on("close",(F)=>{if(F===0||F===1){try{let U=[],_=V.split(`
465
- `).filter((L)=>L.trim());for(let L of _){if(U.length>=Q)break;let O=JSON.parse(L);if(O.type==="match"){let D=O.data,q=[];if(O.data.submatches&&O.data.submatches.length>0){let T=O.data.submatches[0];U.push({file:D.path.text,line:D.line_number,column:(T?.start??0)+1,match:T?.match?.text??"",context:q})}}else if(O.type==="context"&&U.length>0){let D=U[U.length-1],q=O.data.line_number===D.line?">":" ";D.context.push(`${q} ${O.data.line_number}: ${O.data.lines?.text??O.data.line?.text??""}`)}}G(U.length>0?U:null)}catch{G(null)}return}G(null)}),Y.on("error",()=>{G(null)})})}function pR($,Z,Q,J){let W=$.split("/"),X=W[W.length-1]??"";if(W.length-1>J)return!1;for(let V=0;V<W.length-1;V++)if(Z.has(W[V]??""))return!1;let Y=AQ.posix.extname(X).slice(1).toLowerCase();return Q.has(Y)||!Y&&!X.startsWith(".")}function B5($={}){let{includeExtensions:Z=mR,excludeDirs:Q=cR,maxResults:J=100,contextLines:W=2,maxDepth:X=20}=$,j=new Set(Q),Y=new Set(Z.map((V)=>V.toLowerCase()));return async(V,B,H)=>{if(H.signal?.aborted)throw Error("Search operation aborted");let K=await uR(),G=null;if(K)G=await dR(V,B,J,W,5000,H.signal);if(G){let D=[`Found ${G.length} result${G.length===1?"":"s"} for pattern: ${V}`,""];for(let q of G)D.push(`${q.file}:${q.line}:${q.column}`),D.push(...q.context),D.push("");if(G.length>=J)D.push(`(Showing first ${J} results. Refine your search for more specific results.)`);return rK(D.join(`
466
- `))}let F;try{F=new RegExp(V,"gim")}catch(D){throw Error(`Invalid regex pattern: ${V}. ${D instanceof Error?D.message:""}`)}let U=[],_=0,L=await X$(B);for(let D of L){if(H.signal?.aborted)throw Error("Search operation aborted");if(!pR(D,j,Y,X))continue;if(U.length>=J)break;_++;let q=AQ.join(B,D);try{let z=(await aK.readFile(q,"utf-8")).split(`
464
+ [Showing lines ${j}-${A} of ${N}. Use start_line/end_line to read other sections.]`}function V5($={}){let{maxFileSizeBytes:Z,encoding:Q,includeLineNumbers:J}={...AR,...$};return async(W,X)=>{let{path:j,start_line:Y,end_line:V}=W,B=d$.isAbsolute(j)?d$.normalize(j):d$.resolve(process.cwd(),j),H=_R(B)??B,K=d$.extname(H).toLowerCase(),G=LR.get(K),F=await DQ.stat(H);if(!F.isFile())throw Error(`Path is not a file: ${H}`);if(G){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 U=await DQ.readFile(H);return[{type:"text",text:"Successfully read image"},{type:"image",data:U.toString("base64"),mediaType:G}]}if(F.size>mK)throw Error(`Text file too large to stream safely: ${F.size} bytes (max: ${mK} bytes). Use a targeted command such as sed, grep, head, or tail to inspect specific sections.`);return qR(H,Q,J,Y,V,X.signal)}}import{spawn as aK}from"node:child_process";import*as oK from"node:fs/promises";import*as AQ from"node:path";var rK={};w(rK,{prewarmFileIndex:()=>LQ,getFileIndex:()=>X$,enrichPromptWithMentions:()=>J6});import{spawn as zR}from"node:child_process";import{readdir as TR}from"node:fs/promises";import DW from"node:path";import{isMainThread as pK,parentPort as uK,Worker as NR}from"node:worker_threads";var fR=15000,RR=600000,MR=1000,ER=new Set([".git","node_modules","dist","build",".next","coverage",".turbo",".cache","target","out"]);function dK($){let Z=$&&typeof $==="object"&&"code"in $?String($.code??""):"";return Z==="EACCES"||Z==="EPERM"||Z==="ENOENT"}var Q6=new Map;function CR(){if(!pK)return!1;return!0}function wR($){if(Q6.size<=1)return;for(let[Z,Q]of Q6.entries()){if(Q.pending)continue;if($-Q.lastAccessedAt>RR)Q6.delete(Z)}}function PR($,Z){return DW.relative($,Z).split(DW.sep).join("/")}async function SR($){let Q=(await new Promise((J,W)=>{let X=zR("rg",["--files","--hidden","-g","!.git"],{cwd:$,stdio:["ignore","pipe","pipe"],windowsHide:!0}),j="",Y="";X.stdout.on("data",(V)=>{j+=V.toString()}),X.stderr.on("data",(V)=>{Y+=V.toString()}),X.on("error",W),X.on("close",(V)=>{if(V===0){J(j);return}W(Error(Y||`rg exited with code ${V}`))})})).split(/\r?\n/).map((J)=>J.trim()).filter((J)=>J.length>0).map((J)=>J.replace(/\\/g,"/"));return new Set(Q)}async function lK($,Z,Q){let J;try{J=await TR(Z,{withFileTypes:!0})}catch(W){if(dK(W))return;throw W}for(let W of J){let X=DW.join(Z,W.name);if(W.isDirectory()){if(ER.has(W.name))continue;try{await lK($,X,Q)}catch(j){if(dK(j))continue;throw j}continue}if(W.isFile())Q.add(PR($,X))}}async function bR($){let Z=new Set;return await lK($,$,Z),Z}async function _Q($){try{return await SR($)}catch{return bR($)}}function yR(){if(pK||!uK)return;let $=uK;$.on("message",(Z)=>{if(Z.type!=="index")return;_Q(Z.cwd).then((Q)=>{let J={type:"indexResult",requestId:Z.requestId,files:Array.from(Q)};$.postMessage(J)}).catch((Q)=>{let J={type:"indexResult",requestId:Z.requestId,error:Q instanceof Error?Q.message:"Failed to build file index"};$.postMessage(J)})})}class iK{worker=new NR(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((W,X)=>{let j=setTimeout(()=>{this.pending.delete(Z),W(null)},MR);j.unref(),this.pending.set(Z,{resolve:(Y)=>{clearTimeout(j),W(Y)},reject:(Y)=>{clearTimeout(j),X(Y)}})}),J={type:"index",requestId:Z,cwd:$};return this.worker.postMessage(J),Q}flushPending($){for(let[Z,Q]of this.pending.entries())Q.reject($),this.pending.delete(Z)}}yR();var UW;function kR(){if(!CR())return null;if(UW===void 0)UW=new iK;return UW}async function hR($){let Z=kR();if(!Z)return _Q($);try{let Q=await Z.requestIndex($);if(Q===null)return _Q($);return new Set(Q)}catch{return _Q($)}}async function X$($,Z={}){let Q=Z.ttlMs??fR,J=Date.now();wR(J);let W=Q6.get($);if(W&&Q>0&&J-W.lastBuiltAt<=Q&&W.files.size>0)return W.lastAccessedAt=J,W.files;if(W?.pending)return W.lastAccessedAt=J,W.pending;let X=hR($).then((j)=>{return Q6.set($,{files:j,lastBuiltAt:Date.now(),lastAccessedAt:Date.now(),pending:null}),j});return Q6.set($,{files:W?.files??new Set,lastBuiltAt:W?.lastBuiltAt??0,lastAccessedAt:J,pending:X}),X}async function LQ($,Z={}){await X$($,{...Z,ttlMs:0})}import{stat as IR}from"node:fs/promises";import v2 from"node:path";var xR=/[),.:;!?`'"]+$/,gR=/^[(`'"]+/;function vR($){let Z=$.matchAll(/(^|[\s])@([^\s]+)/g),Q=[];for(let J of Z){let W=(J[2]??"").trim();if(W.length===0)continue;let X=W.replace(gR,"").replace(xR,"");if(X.length===0||X.includes("@"))continue;Q.push(X)}return Array.from(new Set(Q))}function mR($,Z){let Q=$.replace(/\\/g,"/"),J=v2.isAbsolute(Q)?v2.resolve(Q):v2.resolve(Z,Q),W=v2.relative(Z,J);if(W.startsWith("..")||v2.isAbsolute(W))return;return W.split(v2.sep).join("/")}async function J6($,Z,Q={}){let J=vR($);if(J.length===0)return{prompt:$,mentions:[],matchedFiles:[],ignoredMentions:[]};let{maxFiles:W,maxFileBytes:X,maxTotalBytes:j}=Q,Y=await X$(Z,{ttlMs:Q.ttlMs}),V=[],B=[],H=[],K=0;for(let G of J){if(W&&H.length>=W){B.push(G);continue}let F=mR(G,Z);if(!F||!Y.has(F)){B.push(G);continue}if(!X||!j){V.push(F);continue}let U=v2.join(Z,F);try{if(!(await IR(U)).isFile()){B.push(G);continue}let L=K+X;if(L>j){B.push(G);continue}K=L,V.push(F)}catch{B.push(G)}}return{prompt:$,mentions:J,matchedFiles:V,ignoredMentions:B}}var cR=["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"],uR=["node_modules",".git","dist","build",".next","coverage","__pycache__",".venv","venv",".cache",".turbo",".output","out","target","bin","obj"],m2=null;function dR(){if(m2!==null)return Promise.resolve(m2);return new Promise(($)=>{let Z=aK("rg",["--version"],{stdio:["ignore","pipe","pipe"],windowsHide:!0});Z.on("close",(Q)=>{m2=Q===0,$(m2)}),Z.on("error",()=>{m2=!1,$(!1)}),setTimeout(()=>{if(!Z.killed)Z.kill("SIGTERM");if(m2===null)m2=!1,$(!1)},1000)})}function pR($,Z,Q,J,W=5000,X){return new Promise((j)=>{let Y=aK("rg",["--json",`--context=${J}`,"--max-count=1","-i",$],{cwd:Z,stdio:["ignore","pipe","pipe"],windowsHide:!0}),V="",B=!1,H=()=>{if(!Y.killed)Y.kill("SIGTERM")},K=setTimeout(()=>{if(!B)B=!0,H(),j(null)},W),G=(F)=>{if(!B)B=!0,clearTimeout(K),H(),j(F)};if(X?.aborted){H(),j(null);return}X?.addEventListener("abort",()=>{G(null)}),Y.stdout.on("data",(F)=>{V+=F.toString()}),Y.stderr.on("data",()=>{}),Y.on("close",(F)=>{if(F===0||F===1){try{let U=[],_=V.split(`
465
+ `).filter((L)=>L.trim());for(let L of _){if(U.length>=Q)break;let O=JSON.parse(L);if(O.type==="match"){let D=O.data,q=[];if(O.data.submatches&&O.data.submatches.length>0){let T=O.data.submatches[0];U.push({file:D.path.text,line:D.line_number,column:(T?.start??0)+1,match:T?.match?.text??"",context:q})}}else if(O.type==="context"&&U.length>0){let D=U[U.length-1],q=O.data.line_number===D.line?">":" ";D.context.push(`${q} ${O.data.line_number}: ${O.data.lines?.text??O.data.line?.text??""}`)}}G(U.length>0?U:null)}catch{G(null)}return}G(null)}),Y.on("error",()=>{G(null)})})}function lR($,Z,Q,J){let W=$.split("/"),X=W[W.length-1]??"";if(W.length-1>J)return!1;for(let V=0;V<W.length-1;V++)if(Z.has(W[V]??""))return!1;let Y=AQ.posix.extname(X).slice(1).toLowerCase();return Q.has(Y)||!Y&&!X.startsWith(".")}function B5($={}){let{includeExtensions:Z=cR,excludeDirs:Q=uR,maxResults:J=100,contextLines:W=2,maxDepth:X=20}=$,j=new Set(Q),Y=new Set(Z.map((V)=>V.toLowerCase()));return async(V,B,H)=>{if(H.signal?.aborted)throw Error("Search operation aborted");let K=await dR(),G=null;if(K)G=await pR(V,B,J,W,5000,H.signal);if(G){let D=[`Found ${G.length} result${G.length===1?"":"s"} for pattern: ${V}`,""];for(let q of G)D.push(`${q.file}:${q.line}:${q.column}`),D.push(...q.context),D.push("");if(G.length>=J)D.push(`(Showing first ${J} results. Refine your search for more specific results.)`);return nK(D.join(`
466
+ `))}let F;try{F=new RegExp(V,"gim")}catch(D){throw Error(`Invalid regex pattern: ${V}. ${D instanceof Error?D.message:""}`)}let U=[],_=0,L=await X$(B);for(let D of L){if(H.signal?.aborted)throw Error("Search operation aborted");if(!lR(D,j,Y,X))continue;if(U.length>=J)break;_++;let q=AQ.join(B,D);try{let z=(await oK.readFile(q,"utf-8")).split(`
467
467
  `);for(let A=0;A<z.length;A++){let R=z[A];F.lastIndex=0;let N=F.exec(R);while(N!==null){if(U.length>=J)break;let S=Math.max(0,A-W),y=Math.min(z.length-1,A+W),s=[];for(let c=S;c<=y;c++){let b=c===A?">":" ";s.push(`${b} ${c+1}: ${z[c]}`)}if(U.push({file:D,line:A+1,column:N.index+1,match:N[0],context:s}),N.index===F.lastIndex)F.lastIndex++;N=F.exec(R)}}}catch{}}if(U.length===0)return`No results found for pattern: ${V}
468
- Searched ${_} files.`;let O=[`Found ${U.length} result${U.length===1?"":"s"} for pattern: ${V}`,`Searched ${_} files.`,""];for(let D of U)O.push(`${D.file}:${D.line}:${D.column}`),O.push(...D.context),O.push("");if(U.length>=J)O.push(`(Showing first ${J} results. Refine your search for more specific results.)`);return rK(O.join(`
469
- `))}}function rK($){if($.length<=e8)return $;let Z=Math.ceil(e8/2),Q=Math.max(1,e8-Z);return`${$.slice(0,Z)}
468
+ Searched ${_} files.`;let O=[`Found ${U.length} result${U.length===1?"":"s"} for pattern: ${V}`,`Searched ${_} files.`,""];for(let D of U)O.push(`${D.file}:${D.line}:${D.column}`),O.push(...D.context),O.push("");if(U.length>=J)O.push(`(Showing first ${J} results. Refine your search for more specific results.)`);return nK(O.join(`
469
+ `))}}function nK($){if($.length<=$6)return $;let Z=Math.ceil($6/2),Q=Math.max(1,$6-Z);return`${$.slice(0,Z)}
470
470
  [... search output truncated: ${$.length} chars total. Narrow the pattern or scope to view the elided matches ...]
471
- `+$.slice(-Q)}function lR($){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,`
471
+ `+$.slice(-Q)}function iR($){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,`
472
472
  `).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,`
473
473
  `).replace(/\n{3,}/g,`
474
474
 
475
- `).trim()}function H5($={}){let{timeoutMs:Z=30000,maxResponseBytes:Q=5000000,userAgent:J="Mozilla/5.0 (compatible; AgentBot/1.0)",headers:W={},followRedirects:X=!0}=$;return async(j,Y,V)=>{let B;try{B=new URL(j)}catch{throw Error(`Invalid URL: ${j}`)}if(!["http:","https:"].includes(B.protocol))throw Error(`Invalid protocol: ${B.protocol}. Only http and https are supported.`);let H=new AbortController,K=setTimeout(()=>H.abort(),Z),G;if(V.signal)G=()=>H.abort(),V.signal.addEventListener("abort",G);try{let F=await fetch(j,{method:"GET",headers:{"User-Agent":J,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",...W},redirect:X?"follow":"manual",signal:H.signal});if(clearTimeout(K),!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 U=F.headers.get("content-type")||"",_=F.body?.getReader();if(!_)throw Error("Failed to read response body");let L=[],O=0;while(!0){let{done:R,value:N}=await _.read();if(R)break;if(O+=N.length,O>Q)throw _.cancel(),Error(`Response too large: exceeded ${Q} bytes`);L.push(N)}let D=new Uint8Array(O),q=0;for(let R of L)D.set(R,q),q+=R.length;let T=new TextDecoder("utf-8").decode(D),z;if(U.includes("text/html")||U.includes("application/xhtml"))z=lR(T);else if(U.includes("application/json"))try{let R=JSON.parse(T);z=JSON.stringify(R,null,2)}catch{z=T}else z=T;let A=[`URL: ${j}`,`Content-Type: ${U}`,`Size: ${O} bytes`,"","--- Content ---",z.slice(0,50000)];if(z.length>50000)A.push(`
475
+ `).trim()}function H5($={}){let{timeoutMs:Z=30000,maxResponseBytes:Q=5000000,userAgent:J="Mozilla/5.0 (compatible; AgentBot/1.0)",headers:W={},followRedirects:X=!0}=$;return async(j,Y,V)=>{let B;try{B=new URL(j)}catch{throw Error(`Invalid URL: ${j}`)}if(!["http:","https:"].includes(B.protocol))throw Error(`Invalid protocol: ${B.protocol}. Only http and https are supported.`);let H=new AbortController,K=setTimeout(()=>H.abort(),Z),G;if(V.signal)G=()=>H.abort(),V.signal.addEventListener("abort",G);try{let F=await fetch(j,{method:"GET",headers:{"User-Agent":J,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",...W},redirect:X?"follow":"manual",signal:H.signal});if(clearTimeout(K),!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 U=F.headers.get("content-type")||"",_=F.body?.getReader();if(!_)throw Error("Failed to read response body");let L=[],O=0;while(!0){let{done:R,value:N}=await _.read();if(R)break;if(O+=N.length,O>Q)throw _.cancel(),Error(`Response too large: exceeded ${Q} bytes`);L.push(N)}let D=new Uint8Array(O),q=0;for(let R of L)D.set(R,q),q+=R.length;let T=new TextDecoder("utf-8").decode(D),z;if(U.includes("text/html")||U.includes("application/xhtml"))z=iR(T);else if(U.includes("application/json"))try{let R=JSON.parse(T);z=JSON.stringify(R,null,2)}catch{z=T}else z=T;let A=[`URL: ${j}`,`Content-Type: ${U}`,`Size: ${O} bytes`,"","--- Content ---",z.slice(0,50000)];if(z.length>50000)A.push(`
476
476
  [Content truncated: showing first 50000 of ${z.length} characters]`);return A.push("","--- Analysis Request ---",`Prompt: ${Y}`),A.join(`
477
- `)}catch(F){if(clearTimeout(K),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&&G)V.signal.removeEventListener("abort",G)}}}function K5($={}){return y2($)}function J6($={}){return{readFile:V5($.fileRead),search:B5($.search),bash:K5($.bash),webFetch:H5($.webFetch),applyPatch:I2($.applyPatch),editor:x2($.editor)}}var iR={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"},W6=[{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 oK($,Z){if(!Z||Z.length===0)return!0;let Q=$.toLowerCase();return Z.some((J)=>Q.includes(J.toLowerCase()))}function rR($,Z,Q,J){if($.mode&&$.mode!=="any"&&$.mode!==J)return!1;return oK(Z,$.providerIdIncludes)&&oK(Q,$.modelIdIncludes)}function X6($,Z,Q,J){if(!J||J.length===0)return{};let W=new Map;for(let j of J){if(!rR(j,$,Z,Q))continue;for(let Y of j.disableTools??[])W.set(Y,!1);for(let Y of j.enableTools??[])W.set(Y,!0)}let X={};for(let[j,Y]of W.entries())X[iR[j]]=Y;return X}var Q1={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 j$($){if($.mode==="plan")return"plan";if($.mode==="yolo")return"yolo";return"act"}function OQ($){if($!=="yolo")return{};let Z={enabled:!0,autoApprove:!0},Q={"*":Z};for(let J of C$)Q[J]=Z;return Q}function qQ($,Z){let Q=Q1[$],{enableSpawnAgent:J,enableAgentTeams:W,...X}=Q;return u$({...X,...Z})}import{createTool as KE,zodToJsonSchema as GE}from"@cline/shared";import{z as CW}from"zod";H1();import{createAgentRuntime as tM}from"@cline/agents";import{createContributionRegistry as eM,isLikelyAuthError as $E,mergeModelOptions as LG}from"@cline/shared";import{createGateway as JM,createHandlerAsync as WM,hasRegisteredHandler as XM,MODEL_COLLECTIONS_BY_PROVIDER_ID as jM,normalizeProviderId as YM}from"@cline/llms";import{EMPTY_CONTENT_TEXT as nR}from"@cline/shared";function aR($){let Z=sR($.content),Q=[],J=$.id??$M(),W=0,X=[],j=$.role==="user"&&typeof $.metadata?.userRunSpan==="number"&&Number.isInteger($.metadata.userRunSpan)&&$.metadata.userRunSpan>=0?$.metadata.userRunSpan:void 0,Y=!1,V=(K)=>{if(j===void 0)return $.metadata;if(K&&!Y)return Y=!0,$.metadata;return{...$.metadata,userRunSpan:0}},B=()=>{if(X.length===0)return;let K=W===0?J:`${J}_part_${W}`;W+=1,Q.push({id:K,role:$.role,content:X.map(tR),createdAt:$.ts??Date.now(),metadata:V(!0),modelInfo:$.modelInfo,metrics:sK($.metrics)}),X=[]};if(Z.length===0)return Q.push({id:J,role:$.role,content:[{type:"text",text:nR}],createdAt:$.ts??Date.now(),metadata:$.metadata,modelInfo:$.modelInfo,metrics:sK($.metrics)}),Q;let H=Z.length===1&&Z[0].type==="tool_result";for(let K of Z){if(K.type!=="tool_result"){X.push(K);continue}B();let G=`_tool_${K.tool_use_id}`;Q.push({id:H||J.endsWith(G)?J:`${J}${G}`,role:"tool",content:[eK(K)],createdAt:$.ts??Date.now(),metadata:V(!1)})}return B(),Q}function zQ($){return $.flatMap(aR)}function oR($){let Z=$.content.map($G).filter((Q)=>Q!==void 0);return{id:$.id,role:$.role==="tool"?"user":$.role,content:Z,ts:$.createdAt,metadata:$.metadata,modelInfo:$.modelInfo,metrics:eR($.metrics)}}function j6($){return $.map(oR)}function TQ($){let Z=[];for(let Q of $){let J=Q.content.map($G).filter((j)=>j!==void 0),W=Q.role==="tool"?"user":Q.role,X=Z[Z.length-1];if(W==="user"&&J.length>0&&J.every((j)=>j.type==="tool_result")&&X?.role==="user"&&Array.isArray(X.content)&&X.content.every((j)=>j.type==="tool_result")){X.content.push(...J);continue}Z.push({role:W,content:J})}return Z}function sR($){if(typeof $==="string")return $.trim().length>0?[{type:"text",text:$}]:[];return[...$]}function tR($){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 eK($)}}function eK($){return{type:"tool-result",toolCallId:$.tool_use_id,toolName:$.name,output:$.content,isError:$.is_error}}function $G($){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 sK($){if(!$)return;return{inputTokens:$.inputTokens??0,outputTokens:$.outputTokens??0,cacheReadTokens:$.cacheReadTokens??0,cacheWriteTokens:$.cacheWriteTokens??0,cost:$.cost}}function eR($){if(!$)return;return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,cost:$.cost}}var tK=0;function $M(){return tK+=1,`msg_${Date.now().toString(36)}_${tK.toString(36)}`}function ZM($){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:QM($),error:$.error}];default:return[]}}function QM($){if($.success===!1)return"error";if($.incompleteReason==="max_output_tokens"||$.incompleteReason==="max-tokens")return"max-tokens";return"stop"}function ZG($){return{async*stream(Z){let Q=!1,J=!1;try{let W=typeof $==="function"?await $():$;W.setAbortSignal?.(Z.signal);let X=TQ(Z.messages),j=Z.tools.map((Y)=>({name:Y.name,description:Y.description,inputSchema:Y.inputSchema}));for await(let Y of W.createMessage(Z.systemPrompt??"",X,j))for(let V of ZM(Y)){if(V.type==="finish")Q=!0;else if(V.type==="tool-call-delta")J=!0;yield V}if(!Q)yield{type:"finish",reason:J?"tool-calls":"stop"}}catch(W){if(!Q)yield{type:"finish",reason:Z.signal?.aborted?"aborted":"error",error:W instanceof Error?W.message:String(W)}}}}}function VM($){let Z=Object.fromEntries(Object.entries($).filter(([,Q])=>Q!==void 0));return Object.keys(Z).length>0?Z:void 0}function BM($){return $.providerId==="openai-compatible"||$.clientType==="openai-compatible"}function HM($){let Z={region:$.region,apiLine:$.apiLine,openRouterProviderSorting:$.openRouterProviderSorting,modelCatalog:$.modelCatalog};if(BM($))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 VM(Z)}function KM($){return typeof $==="number"&&Number.isFinite($)&&$>0?Math.floor($):void 0}function _W($){let Z=$.providerConfig,Q=Z?.knownModels?Z.knownModels:$.knownModels??jM[$.providerId]?.models??void 0,J=KM(Z?.maxInputTokens),W=Z?.modelInfo&&Z.modelInfo.id===$.modelId?Z.modelInfo:void 0;if(J===void 0&&!W)return Q;return{...Q??{},[$.modelId]:{...Q?.[$.modelId],...J!==void 0?{contextWindow:J,maxInputTokens:J}:{},...W,id:$.modelId}}}function GM($){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 FM($,Z){return{id:$,name:Z.name??$,description:Z.description,contextWindow:Z.contextWindow,maxInputTokens:Z.maxInputTokens,maxOutputTokens:Z.maxTokens,capabilities:GM(Z.capabilities),reasoningOptions:Z.reasoningOptions,metadata:{family:Z.family,pricing:Z.pricing,status:Z.status,releaseDate:Z.releaseDate}}}function QG($,Z,Q){let J=$.providerConfig,W=J?.providerId===$.providerId?J:void 0,X={...W??{},providerId:$.providerId,modelId:$.modelId,apiKey:$.apiKey??W?.apiKey,baseUrl:$.baseUrl??W?.baseUrl,headers:$.headers??W?.headers,knownModels:_W($),maxOutputTokens:$.maxTokensPerTurn,temperature:$.temperature,reasoningEffort:$.reasoningEffort,thinkingBudgetTokens:$.thinkingBudgetTokens,thinking:$.thinking,logger:Z,extensionContext:$.extensionContext};if(XM(YM(X.providerId)))return ZG(()=>WM(X));return JM({fetch:X.fetch,providerConfigs:[{providerId:X.providerId,apiKey:X.apiKey,baseUrl:X.baseUrl,headers:X.headers,timeoutMs:X.timeoutMs,fetch:X.fetch,options:HM(X),models:X.knownModels?Object.entries(X.knownModels).map(([j,Y])=>FM(j,Y)):void 0}],logger:Z,telemetry:Q??$.telemetry??$.extensionContext?.telemetry}).createAgentModel({providerId:X.providerId,modelId:X.modelId},{maxTokens:X.maxOutputTokens,temperature:X.temperature})}C0();import{createMediaBudgetState as UM,IMAGE_OMITTED_PLACEHOLDER as JG,normalizeUserInput as WG,resolveMediaBudget as DM,validateAndReserveImageMedia as _M}from"@cline/shared";var LM=8000,AM=50000,OM=6000000,qM=200000,zM=12000,TM=65536,F5=2000,XG=40000,NM=8,LW={maxToolResultChars:"CLINE_MESSAGE_BUILDER_MAX_TOOL_RESULT_CHARS",maxTotalTextBytes:"CLINE_MESSAGE_BUILDER_MAX_TOTAL_TEXT_BYTES",minOutdatedRewriteBytes:"CLINE_MESSAGE_BUILDER_MIN_OUTDATED_REWRITE_BYTES"},fM=new Set(["read","read_files"]),m2="[outdated - see the latest file content]",jG="Tool execution was interrupted before a result was produced.",YG=($)=>`
477
+ `)}catch(F){if(clearTimeout(K),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&&G)V.signal.removeEventListener("abort",G)}}}function K5($={}){return k2($)}function W6($={}){return{readFile:V5($.fileRead),search:B5($.search),bash:K5($.bash),webFetch:H5($.webFetch),applyPatch:x2($.applyPatch),editor:g2($.editor)}}var rR={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"},X6=[{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 sK($,Z){if(!Z||Z.length===0)return!0;let Q=$.toLowerCase();return Z.some((J)=>Q.includes(J.toLowerCase()))}function nR($,Z,Q,J){if($.mode&&$.mode!=="any"&&$.mode!==J)return!1;return sK(Z,$.providerIdIncludes)&&sK(Q,$.modelIdIncludes)}function j6($,Z,Q,J){if(!J||J.length===0)return{};let W=new Map;for(let j of J){if(!nR(j,$,Z,Q))continue;for(let Y of j.disableTools??[])W.set(Y,!1);for(let Y of j.enableTools??[])W.set(Y,!0)}let X={};for(let[j,Y]of W.entries())X[rR[j]]=Y;return X}var Q1={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 j$($){if($.mode==="plan")return"plan";if($.mode==="yolo")return"yolo";return"act"}function OQ($){if($!=="yolo")return{};let Z={enabled:!0,autoApprove:!0},Q={"*":Z};for(let J of C$)Q[J]=Z;return Q}function qQ($,Z){let Q=Q1[$],{enableSpawnAgent:J,enableAgentTeams:W,...X}=Q;return u$({...X,...Z})}import{createTool as GE,zodToJsonSchema as FE}from"@cline/shared";import{z as CW}from"zod";H1();import{createAgentRuntime as eM}from"@cline/agents";import{createContributionRegistry as $E,isLikelyAuthError as ZE,mergeModelOptions as AG}from"@cline/shared";import{createGateway as WM,createHandlerAsync as XM,hasRegisteredHandler as jM,MODEL_COLLECTIONS_BY_PROVIDER_ID as YM,normalizeProviderId as VM}from"@cline/llms";import{EMPTY_CONTENT_TEXT as aR}from"@cline/shared";function oR($){let Z=tR($.content),Q=[],J=$.id??ZM(),W=0,X=[],j=$.role==="user"&&typeof $.metadata?.userRunSpan==="number"&&Number.isInteger($.metadata.userRunSpan)&&$.metadata.userRunSpan>=0?$.metadata.userRunSpan:void 0,Y=!1,V=(K)=>{if(j===void 0)return $.metadata;if(K&&!Y)return Y=!0,$.metadata;return{...$.metadata,userRunSpan:0}},B=()=>{if(X.length===0)return;let K=W===0?J:`${J}_part_${W}`;W+=1,Q.push({id:K,role:$.role,content:X.map(eR),createdAt:$.ts??Date.now(),metadata:V(!0),modelInfo:$.modelInfo,metrics:tK($.metrics)}),X=[]};if(Z.length===0)return Q.push({id:J,role:$.role,content:[{type:"text",text:aR}],createdAt:$.ts??Date.now(),metadata:$.metadata,modelInfo:$.modelInfo,metrics:tK($.metrics)}),Q;let H=Z.length===1&&Z[0].type==="tool_result";for(let K of Z){if(K.type!=="tool_result"){X.push(K);continue}B();let G=`_tool_${K.tool_use_id}`;Q.push({id:H||J.endsWith(G)?J:`${J}${G}`,role:"tool",content:[$G(K)],createdAt:$.ts??Date.now(),metadata:V(!1)})}return B(),Q}function zQ($){return $.flatMap(oR)}function sR($){let Z=$.content.map(ZG).filter((Q)=>Q!==void 0);return{id:$.id,role:$.role==="tool"?"user":$.role,content:Z,ts:$.createdAt,metadata:$.metadata,modelInfo:$.modelInfo,metrics:$M($.metrics)}}function Y6($){return $.map(sR)}function TQ($){let Z=[];for(let Q of $){let J=Q.content.map(ZG).filter((j)=>j!==void 0),W=Q.role==="tool"?"user":Q.role,X=Z[Z.length-1];if(W==="user"&&J.length>0&&J.every((j)=>j.type==="tool_result")&&X?.role==="user"&&Array.isArray(X.content)&&X.content.every((j)=>j.type==="tool_result")){X.content.push(...J);continue}Z.push({role:W,content:J})}return Z}function tR($){if(typeof $==="string")return $.trim().length>0?[{type:"text",text:$}]:[];return[...$]}function eR($){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 $G($)}}function $G($){return{type:"tool-result",toolCallId:$.tool_use_id,toolName:$.name,output:$.content,isError:$.is_error}}function ZG($){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 tK($){if(!$)return;return{inputTokens:$.inputTokens??0,outputTokens:$.outputTokens??0,cacheReadTokens:$.cacheReadTokens??0,cacheWriteTokens:$.cacheWriteTokens??0,cost:$.cost}}function $M($){if(!$)return;return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,cost:$.cost}}var eK=0;function ZM(){return eK+=1,`msg_${Date.now().toString(36)}_${eK.toString(36)}`}function QM($){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:JM($),error:$.error}];default:return[]}}function JM($){if($.success===!1)return"error";if($.incompleteReason==="max_output_tokens"||$.incompleteReason==="max-tokens")return"max-tokens";return"stop"}function QG($){return{async*stream(Z){let Q=!1,J=!1;try{let W=typeof $==="function"?await $():$;W.setAbortSignal?.(Z.signal);let X=TQ(Z.messages),j=Z.tools.map((Y)=>({name:Y.name,description:Y.description,inputSchema:Y.inputSchema}));for await(let Y of W.createMessage(Z.systemPrompt??"",X,j))for(let V of QM(Y)){if(V.type==="finish")Q=!0;else if(V.type==="tool-call-delta")J=!0;yield V}if(!Q)yield{type:"finish",reason:J?"tool-calls":"stop"}}catch(W){if(!Q)yield{type:"finish",reason:Z.signal?.aborted?"aborted":"error",error:W instanceof Error?W.message:String(W)}}}}}function BM($){let Z=Object.fromEntries(Object.entries($).filter(([,Q])=>Q!==void 0));return Object.keys(Z).length>0?Z:void 0}function HM($){return $.providerId==="openai-compatible"||$.clientType==="openai-compatible"}function KM($){let Z={region:$.region,apiLine:$.apiLine,openRouterProviderSorting:$.openRouterProviderSorting,modelCatalog:$.modelCatalog};if(HM($))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 BM(Z)}function GM($){return typeof $==="number"&&Number.isFinite($)&&$>0?Math.floor($):void 0}function _W($){let Z=$.providerConfig,Q=Z?.knownModels?Z.knownModels:$.knownModels??YM[$.providerId]?.models??void 0,J=GM(Z?.maxInputTokens),W=Z?.modelInfo&&Z.modelInfo.id===$.modelId?Z.modelInfo:void 0;if(J===void 0&&!W)return Q;return{...Q??{},[$.modelId]:{...Q?.[$.modelId],...J!==void 0?{contextWindow:J,maxInputTokens:J}:{},...W,id:$.modelId}}}function FM($){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 UM($,Z){return{id:$,name:Z.name??$,description:Z.description,contextWindow:Z.contextWindow,maxInputTokens:Z.maxInputTokens,maxOutputTokens:Z.maxTokens,capabilities:FM(Z.capabilities),reasoningOptions:Z.reasoningOptions,metadata:{family:Z.family,pricing:Z.pricing,status:Z.status,releaseDate:Z.releaseDate}}}function JG($,Z,Q){let J=$.providerConfig,W=J?.providerId===$.providerId?J:void 0,X={...W??{},providerId:$.providerId,modelId:$.modelId,apiKey:$.apiKey??W?.apiKey,baseUrl:$.baseUrl??W?.baseUrl,headers:$.headers??W?.headers,knownModels:_W($),maxOutputTokens:$.maxTokensPerTurn,temperature:$.temperature,reasoningEffort:$.reasoningEffort,thinkingBudgetTokens:$.thinkingBudgetTokens,thinking:$.thinking,logger:Z,extensionContext:$.extensionContext};if(jM(VM(X.providerId)))return QG(()=>XM(X));return WM({fetch:X.fetch,providerConfigs:[{providerId:X.providerId,apiKey:X.apiKey,baseUrl:X.baseUrl,headers:X.headers,timeoutMs:X.timeoutMs,fetch:X.fetch,options:KM(X),models:X.knownModels?Object.entries(X.knownModels).map(([j,Y])=>UM(j,Y)):void 0}],logger:Z,telemetry:Q??$.telemetry??$.extensionContext?.telemetry}).createAgentModel({providerId:X.providerId,modelId:X.modelId},{maxTokens:X.maxOutputTokens,temperature:X.temperature})}C0();import{createMediaBudgetState as DM,IMAGE_OMITTED_PLACEHOLDER as WG,normalizeUserInput as XG,resolveMediaBudget as _M,validateAndReserveImageMedia as LM}from"@cline/shared";var AM=8000,OM=50000,qM=6000000,zM=200000,TM=12000,NM=65536,F5=2000,jG=40000,fM=8,LW={maxToolResultChars:"CLINE_MESSAGE_BUILDER_MAX_TOOL_RESULT_CHARS",maxTotalTextBytes:"CLINE_MESSAGE_BUILDER_MAX_TOTAL_TEXT_BYTES",minOutdatedRewriteBytes:"CLINE_MESSAGE_BUILDER_MIN_OUTDATED_REWRITE_BYTES"},RM=new Set(["read","read_files"]),c2="[outdated - see the latest file content]",YG="Tool execution was interrupted before a result was produced.",VG=($)=>`
478
478
 
479
479
  ...[truncated ${$} chars]...
480
480
 
@@ -482,55 +482,55 @@ Searched ${_} files.`;let O=[`Found ${U.length} result${U.length===1?"":"s"} for
482
482
 
483
483
  ...[truncated ${$} chars to fit provider request budget]...
484
484
 
485
- `,RM=($)=>`
485
+ `,MM=($)=>`
486
486
 
487
487
  ...[assistant text truncated: omitted ${$} chars]...
488
488
 
489
- `,VG=($)=>`
489
+ `,BG=($)=>`
490
490
 
491
491
  ...[assistant text truncated: omitted ${$} chars to fit provider request budget]...
492
492
 
493
- `,MM=($)=>`
493
+ `,EM=($)=>`
494
494
 
495
495
  ...[assistant text truncated: omitted ${$} chars due to repeated tool-call markup]...
496
496
 
497
- `;function KG($=process.env){return{maxToolResultChars:HG($[LW.maxToolResultChars]),maxTotalTextBytes:HG($[LW.maxTotalTextBytes]),minOutdatedRewriteBytes:CM($[LW.minOutdatedRewriteBytes])}}class OW{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=G5($.maxToolResultChars,LM),this.maxFileContentChars=G5($.maxFileContentChars,AM),this.maxTotalTextBytes=G5($.maxTotalTextBytes,OM),this.mediaBudget=$.mediaBudget??{},this.maxAssistantTextChars=G5($.maxAssistantTextChars,qM),this.maxAssistantToolMarkupChars=G5($.maxAssistantToolMarkupChars,zM),this.minOutdatedRewriteBytes=wM($.minOutdatedRewriteBytes,TM)}resetConversationState(){this.resetIndexes(),this.committedOutdatedRewrites.clear()}buildForApi($){this.reindex($),this.commitOutdatedRewrites($);let Q=this.addMissingToolResults($).map((W)=>{if(!Array.isArray(W.content)){if(W.role==="user"&&typeof W.content==="string"){let Y=WG(W.content);if(Y!==W.content)return{...W,content:Y}}if(W.role==="assistant"&&typeof W.content==="string"){let Y=this.truncateAssistantText(W.content);if(Y!==W.content)return{...W,content:Y}}return W}let X=!1,j=W.content.map((Y)=>{let V=this.transformBlock(Y,W.role);if(V!==Y)X=!0;return V});return X?{...W,content:j}:W}),J=this.applyMediaBudget(Q);return this.truncateToTotalTextBudget(J)}transformBlock($,Z){if(Z==="user"&&$.type==="text"&&typeof $.text==="string"){let W=WG($.text);if(W!==$.text)return{...$,text:W};return $}if(Z==="assistant"&&$.type==="text"&&typeof $.text==="string"){let W=this.truncateAssistantText($.text);return W===$.text?$:{...$,text:W}}if($.type==="file"){let W=Y6($.content,this.maxFileContentChars,YG);return W===$.content?$:{...$,content:W}}if($.type!=="tool_result")return $;let Q=this.resolveToolName($),J=$.content;if(this.isReadTool(Q)&&$.is_error!==!0){let W=this.committedOutdatedRewrites.get($.tool_use_id);if(W&&W.size>0){let j=this.getReadLocators($).filter((Y)=>W.has(this.toReadLocatorKey(Y))&&this.isOutdatedReadLocator(Y,$.tool_use_id));if(j.length>0)J=this.replaceOutdatedReadContent(J,j)}}return J=this.truncateToolResultContent(J),J===$.content?$:{...$,content:J}}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 J=$[Q];if(!Array.isArray(J.content))continue;for(let W=0;W<J.content.length;W++){let X=J.content[W];if(X.type==="file")this.latestFullContentOwnerByPathCache.set(X.path,`file:${Q}:${W}`);else if(X.type==="tool_use"){let j=X.name.toLowerCase();if(this.toolNameByIdCache.set(X.id,j),this.isReadTool(j)){let Y=this.extractLocatorsFromReadToolInput(X.input);if(Y.length>0)this.readLocatorsByToolUseIdCache.set(X.id,Y)}}else if(X.type==="tool_result"){let j=this.resolveToolName(X);if(!this.isReadTool(j)||X.is_error===!0)continue;let Y=this.getReadLocators(X);for(let V of Y)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,J=0;for(let W of $){if(!Array.isArray(W.content))continue;for(let X of W.content){if(X.type!=="tool_result"||X.is_error===!0)continue;let j=this.resolveToolName(X);if(!this.isReadTool(j))continue;Q.add(X.tool_use_id);let Y=this.committedOutdatedRewrites.get(X.tool_use_id),V=new Set,B=new Set;for(let K of this.getReadLocators(X)){let G=this.toReadLocatorKey(K);if(!this.isOutdatedReadLocator(K,X.tool_use_id))continue;if(B.add(G),!Y?.has(G))V.add(G)}if(Y){for(let K of Y)if(!B.has(K))Y.delete(K);if(Y.size===0)this.committedOutdatedRewrites.delete(X.tool_use_id)}if(V.size===0)continue;let H=Z.get(X.tool_use_id);if(!H)H=new Set,Z.set(X.tool_use_id,H);for(let K of V)H.add(K);J+=this.estimateOutdatedReclaimBytes(X.content,V)}}for(let W of this.committedOutdatedRewrites.keys())if(!Q.has(W))this.committedOutdatedRewrites.delete(W);if(Z.size===0||J<this.minOutdatedRewriteBytes)return;for(let[W,X]of Z){let j=this.committedOutdatedRewrites.get(W);if(!j)j=new Set,this.committedOutdatedRewrites.set(W,j);for(let Y of X)j.add(Y)}}estimateOutdatedReclaimBytes($,Z){let Q=this.extractReadLocatorsFromToolResultContent($),J=Q.length>0&&Q.every((V)=>Z.has(this.toReadLocatorKey(V))),W=(V)=>{let B;try{B=JSON.parse(V)}catch{return J||Q.length===0?Y0(this.truncateMiddle(V)):0}let H=Array.isArray(B)?B:[B],K=0;for(let G of H){let F=this.extractLocatorFromResultEntry(G);if(F&&Z.has(this.toReadLocatorKey(F)))K+=this.providerBoundEntryBytes(G)}return K};if(typeof $==="string")return W($);let X=new Set(Z),j=0;for(let V of $)if(V.type==="text")j+=this.countOutdatedImageEntries(V.text,X);let Y=0;for(let V of $)if(V.type==="text")Y+=W(V.text);else if(V.type==="image"){if(j>0)j-=1,Y+=Y0(V.data)}else if(p$(V)){let B=this.extractLocatorFromResultEntry(V);if(B&&Z.has(this.toReadLocatorKey(B)))Y+=this.providerBoundEntryBytes(V)}else if(V.type==="file"){if(Z.has(this.toReadLocatorKey({path:V.path,startLine:null,endLine:null})))Y+=Y0(this.truncateMiddle(V.content))}return Y}providerBoundEntryBytes($){let Z=this.truncateNestedStrings($);return Y0(JSON.stringify(Z))}addMissingToolResults($){let Z=this.collectToolResultIds($),Q=[],J=new Map,W=!1,X=()=>{if(J.size===0)return;j(this.createMissingToolResultMessage(J)),J.clear(),W=!0},j=(Y)=>{let V=Q.at(-1);if(this.shouldMergeUserAfterToolResults(V,Y)){Q[Q.length-1]={...V,content:[...V.content,...this.contentBlocksForUserMerge(Y.content)]},W=!0;return}Q.push(Y)};for(let Y of $){if(this.isToolResultOnlyMessage(Y)){if(j(this.appendMissingToolResults(Y,J)),J.size>0)J.clear(),W=!0;continue}if(Array.isArray(Y.content)){let V=Y.content.filter((H)=>H.type==="tool_result"),B=Y.content.filter((H)=>H.type!=="tool_result");if(V.length>0){let H=this.appendMissingToolResults({...Y,role:"user",content:V},J);if(j(H),J.size>0)J.clear();W=!0}if(B.length>0||V.length===0){if(V.length===0)X();let H=V.length>0?{...Y,content:B}:Y;if(j(H),H.role==="assistant")this.trackMissingToolCalls(H,Z,J)}continue}X(),j(Y)}return X(),W?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 J of Q.content)if(J.type==="tool_result")Z.add(J.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 J of $.content){if(J.type!=="tool_use"||Z.has(J.id))continue;Q.set(J.id,J.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 $?`${jG} Tool: ${$}.`:jG}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=[],J=this.extractLocatorFromReadRequest(Z);if(J)Q.push(J);if(Array.isArray(Z.files))for(let W of Z.files){let X=this.extractLocatorFromReadRequest(W);if(X)Q.push(X)}if(Array.isArray(Z.file_paths)){for(let W of Z.file_paths)if(typeof W==="string"&&W.length>0)Q.push({path:W,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(p$(Q)){let J=this.extractLocatorFromResultEntry(Q);if(J)Z.push(J)}}return this.dedupeReadLocators(Z)}tryParseReadLocators($){try{return this.extractLocatorsFromParsedReadResult(JSON.parse($))}catch{return[]}}extractLocatorsFromParsedReadResult($){if(Array.isArray($)){let Q=[];for(let J of $){let W=this.extractLocatorFromResultEntry(J);if(W)Q.push(W)}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))),J=new Set(Z.map((X)=>X.path));if(typeof $==="string")return this.replaceOutdatedInString($,Q)??m2;let W=0;for(let X of $)if(X.type==="text")W+=this.countOutdatedImageEntries(X.text,Q);return $.map((X)=>{if(X.type==="file"){if(!J.has(X.path))return X;return{...X,content:m2}}if(X.type==="image"){if(W===0)return X;return W-=1,{type:"text",text:m2}}if(p$(X))return this.replaceOutdatedReadEntry(X,Q);if(X.type!=="text")return X;let j=this.replaceOutdatedInString(X.text,Q);if(j===null)return{...X,text:m2};return j===X.text?X:{...X,text:j}})}countOutdatedImageEntries($,Z){let Q;try{Q=JSON.parse($)}catch{return 0}let J=Array.isArray(Q)?Q:[Q],W=0;for(let X of J){if(!X||typeof X!=="object")continue;let j=X,Y=this.extractLocatorFromResultEntry(j);if(!Y)continue;if(!Z.has(this.toReadLocatorKey(Y)))continue;if(j.result==="Successfully read image"||j.content==="Successfully read image")W+=1}return W}replaceOutdatedInString($,Z){let Q;try{Q=JSON.parse($)}catch{return null}let J=Array.isArray(Q)?Q.map((W)=>this.replaceOutdatedReadEntry(W,Z)):this.replaceOutdatedReadEntry(Q,Z);return JSON.stringify(J)}replaceOutdatedReadEntry($,Z){if(!$||typeof $!=="object")return $;let Q=this.extractLocatorFromResultEntry($);if(!Q||!Z.has(this.toReadLocatorKey(Q)))return $;let J={...$};if(typeof J.result==="string")J.result=m2;else if(typeof J.content==="string")J.content=m2;else J.result=m2;return J}isReadTool($){return!!$&&fM.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(p$(Z))return this.truncateNestedStrings(Z);return Z})}truncateNestedStrings($){if(typeof $==="string")return this.truncateMiddle($);if(Array.isArray($)){let Z=!1,Q=$.map((J)=>{let W=this.truncateNestedStrings(J);if(W!==J)Z=!0;return W});return Z?Q:$}if($!==null&&typeof $==="object"){if(qW($))return $;let Z=!1,Q={};for(let[J,W]of Object.entries($)){let X=this.truncateNestedStrings(W);if(X!==W)Z=!0;Q[J]=X}return Z?Q:$}return $}truncateMiddle($){return Y6($,this.maxToolResultChars,YG)}truncateAssistantText($){if(this.hasRepeatedToolCallMarkup($))return Y6($,this.maxAssistantToolMarkupChars,MM);return Y6($,this.maxAssistantTextChars,RM)}hasRepeatedToolCallMarkup($){if($.length<=this.maxAssistantToolMarkupChars)return!1;let Z=0;for(let Q of $.matchAll(EM))if(Z+=1,Z>=NM)return!0;return!1}truncateToTotalTextBudget($){let Z=this.countMessageTextBytes($);if(Z<=this.maxTotalTextBytes)return $;let Q=$.map((W)=>{if(!Array.isArray(W.content))return{...W};return{...W,content:W.content.map((X)=>SM(X))}}),J=this.collectTruncationCandidates(Q);for(let W of J){if(Z<=this.maxTotalTextBytes)break;let X=W.byteLength;if(X<=W.minBytes)continue;let j=Z-this.maxTotalTextBytes,Y=Math.max(W.minBytes,X-j),V=PM(W.get(),Y,W.makeMarker);W.set(V),Z-=X-Y0(V)}return Q}countMessageTextBytes($){let Z=0;for(let Q of $){if(typeof Q.content==="string"){Z+=Y0(Q.content);continue}for(let J of Q.content)if(J.type==="text")Z+=Y0(J.text);else if(J.type==="thinking")Z+=Y0(J.thinking);else if(J.type==="file")Z+=Y0(J.content);else if(J.type==="tool_use")Z+=NQ(J.input);else if(J.type==="tool_result"){if(typeof J.content==="string")Z+=Y0(J.content);else for(let W of J.content)if(W.type==="text")Z+=Y0(W.text);else if(W.type==="file")Z+=Y0(W.content);else if(p$(W))Z+=NQ(W)}}return Z}collectTruncationCandidates($){let Z=[],Q=[];for(let J of $){if(J.role==="assistant"&&typeof J.content==="string"){Z.push({byteLength:Y0(J.content),minBytes:XG,makeMarker:VG,get:()=>J.content,set:(W)=>{J.content=W}});continue}if(!Array.isArray(J.content))continue;for(let W of J.content){if(W.type==="tool_use"){fQ(W.input,Q);continue}if(J.role==="assistant"&&W.type==="text"){Z.push({byteLength:Y0(W.text),minBytes:XG,makeMarker:VG,get:()=>W.text,set:(X)=>{W.text=X}});continue}if(W.type!=="tool_result")continue;if(typeof W.content==="string"){Z.push({byteLength:Y0(W.content),minBytes:F5,makeMarker:U5,get:()=>W.content,set:(X)=>{W.content=X}});continue}for(let X of W.content)if(X.type==="text")Z.push({byteLength:Y0(X.text),minBytes:F5,makeMarker:U5,get:()=>X.text,set:(j)=>{X.text=j}});else if(X.type==="file")Z.push({byteLength:Y0(X.content),minBytes:F5,makeMarker:U5,get:()=>X.content,set:(j)=>{X.content=j}});else if(p$(X))fQ(X,Z)}}return Z.sort((J,W)=>W.byteLength-J.byteLength),Q.sort((J,W)=>W.byteLength-J.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=UM(),J=!1,W=$.map((X)=>{if(!Array.isArray(X.content))return X;let j=!1,Y=X.content.map((V)=>{let B=this.applyMediaBudgetToBlock(V,Z,Q);if(B!==V)j=!0;return B});if(!j)return X;return J=!0,{...X,content:Y}});return J?W:$}resolveMediaBudget(){return DM(this.mediaBudget)}applyMediaBudgetToBlock($,Z,Q){if(AW($))return this.limitImageContent($,Z,Q);if($.type!=="tool_result"||typeof $.content==="string")return $;let J=!1,W=$.content.map((X)=>{let j=this.applyMediaBudgetToToolResultEntry(X,Z,Q);if(j!==X)J=!0;return j});return J?{...$,content:W}:$}applyMediaBudgetToToolResultEntry($,Z,Q){if(AW($))return this.limitImageContent($,Z,Q);if(p$($))return this.limitNestedMedia($,Z,Q);return $}limitNestedMedia($,Z,Q){if(AW($)){let J=this.limitImageContent($,Z,Q);return J.type==="text"?J.text:J}if(Array.isArray($)){let J=!1,W=$.map((X)=>{let j=this.limitNestedMedia(X,Z,Q);if(j!==X)J=!0;return j});return J?W:$}if($!==null&&typeof $==="object"){let J=!1,W={};for(let[X,j]of Object.entries($)){let Y=this.limitNestedMedia(j,Z,Q);if(Y!==j)J=!0;W[X]=Y}return J?W:$}return $}limitImageContent($,Z,Q){if(!GG($))return{type:"text",text:JG};let J=_M($.mediaType,$.data,{maxImageEncodedBytes:Z.maxImageEncodedBytes,maxImageDecodedBytes:Z.maxImageDecodedBytes,maxTotalMediaBytes:Z.maxTotalMediaBytes},Q);if(!J.ok)return{type:"text",text:JG};return{...$,data:J.base64,mediaType:J.mediaType}}}var BG=String.raw`[\|\uFF5C]`,EM=new RegExp(String.raw`<\s*(?:${BG}\s*)?DSML\s*(?:${BG}\s*)?(?:tool_calls|invoke)\b[^>]*>|<\s*/?\s*(?:tool_calls?|tool_call|function_calls?|function_call|invoke)\b[^>]*>`,"gi");function Y0($){return Buffer.byteLength($,"utf8")}function HG($){if($===void 0)return;let Z=Number.parseInt($,10);return Number.isFinite(Z)&&Z>0?Z:void 0}function CM($){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 G5($,Z){return typeof $==="number"&&Number.isFinite($)&&$>0?Math.floor($):Z}function wM($,Z){if(typeof $!=="number"||Number.isNaN($)||$<0)return Z;return Number.isFinite($)?Math.floor($):$}function Y6($,Z,Q){if($.length<=Z)return $;let J=Q($.length-Z),W=Math.max(0,Math.floor((Z-J.length)/2)),X=Math.max(0,$.length-W*2),j=Q(X),Y=Math.max(0,Math.floor((Z-j.length)/2)),V=$.slice(0,Y),B=Y>0?$.slice(-Y):"";return`${V}${j}${B}`}function PM($,Z,Q){if(Y0($)<=Z)return $;let J=0,W=$.length,X=Y6($,0,Q);while(J<=W){let j=J+W>>>1,Y=Y6($,j,Q);if(Y0(Y)<=Z)X=Y,J=j+1;else W=j-1}return X}function SM($){if($.type==="tool_use")return{...$,input:RQ($.input)};if($.type!=="tool_result"||typeof $.content==="string")return{...$};return{...$,content:$.content.map((Z)=>p$(Z)?RQ(Z):{...Z})}}function p$($){if($===null||typeof $!=="object")return!1;let Z=$.type;return Z!=="text"&&Z!=="image"&&Z!=="file"}function AW($){return $!==null&&typeof $==="object"&&$.type==="image"}function GG($){return $!==null&&typeof $==="object"&&$.type==="image"&&typeof $.data==="string"&&typeof $.mediaType==="string"}function qW($){return GG($)}function NQ($){if(typeof $==="string")return Y0($);if(Array.isArray($)){let Z=0;for(let Q of $)Z+=NQ(Q);return Z}if($!==null&&typeof $==="object"){if(qW($))return 0;let Z=0;for(let Q of Object.values($))Z+=NQ(Q);return Z}return 0}function fQ($,Z){if(Array.isArray($)){$.forEach((Q,J)=>{if(typeof Q==="string")Z.push({byteLength:Y0(Q),minBytes:F5,makeMarker:U5,get:()=>$[J],set:(W)=>{$[J]=W}});else fQ(Q,Z)});return}if($!==null&&typeof $==="object"){if(qW($))return;let Q=$;for(let J of Object.keys(Q)){let W=Q[J];if(typeof W==="string")Z.push({byteLength:Y0(W),minBytes:F5,makeMarker:U5,get:()=>Q[J],set:(X)=>{Q[J]=X}});else fQ(W,Z)}}}function RQ($){if(Array.isArray($))return $.map(RQ);if($!==null&&typeof $==="object"){let Z={};for(let[Q,J]of Object.entries($))Z[Q]=RQ(J);return Z}return $}function zW(){return`conv_${Date.now()}_${Math.random().toString(36).slice(2,9)}`}class TW{messages=[];conversationId=zW();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=zW(),this.sessionStarted=!1}clearHistory(){this.messages=[],this.conversationId=zW(),this.sessionStarted=!1}restore($){this.messages=[...$],this.sessionStarted=!1}isSessionStarted(){return this.sessionStarted}markSessionStarted(){this.sessionStarted=!0}}function FG($){let{agentConfig:Z}=$,Q=bM(Z),J=yM(Z),W=$.hooks,X=kM(Z.maxParallelToolCalls);return{sessionId:$.sessionId??Z.sessionId,agentId:$.agentId,conversationId:$.conversationId,parentAgentId:$.parentAgentId,agentRole:$.agentRole,systemPrompt:$.systemPrompt??Z.systemPrompt,messageModelInfo:J,model:$.model,modelOptions:Q,tools:$.tools,hooks:W,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 bM($){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($.temperature!==void 0)Z.temperature=$.temperature;if($.apiTimeoutMs!==void 0)Z.apiTimeoutMs=$.apiTimeoutMs;return Object.keys(Z).length>0?Z:void 0}function yM($){let Z=$.providerConfig?.family;return{id:$.modelId,provider:$.providerId,family:Z}}function kM($){if($===void 0)return;return $>=2?"parallel":"sequential"}var UG={};w(UG,{normalizeConnectionUpdate:()=>c2,buildConnectionUpdate:()=>NW});function NW($){let Z={};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($.thinking===!1)return Z.thinking=!1,Z.reasoningEffort=null,Z.thinkingBudgetTokens=null,Z;if($.thinking===!0)Z.thinking=!0,Z.reasoningEffort=$.reasoningEffort??null,Z.thinkingBudgetTokens=null;else if($.reasoningEffort!==void 0)Z.thinking=!0,Z.reasoningEffort=$.reasoningEffort;if(typeof $.thinkingBudgetTokens==="number"&&Number.isFinite($.thinkingBudgetTokens)&&$.thinkingBudgetTokens>0)Z.thinking=!0,Z.thinkingBudgetTokens=Math.trunc($.thinkingBudgetTokens);return Z}function c2($){let Z={...$},Q=Object.hasOwn($,"thinking"),J=Object.hasOwn($,"thinkingBudgetTokens");if($.thinking===!1||$.thinking===null)return Z.reasoningEffort=void 0,Z.thinkingBudgetTokens=void 0,Z;if(!Q&&J&&typeof $.thinkingBudgetTokens==="number"&&Number.isFinite($.thinkingBudgetTokens)&&$.thinkingBudgetTokens>0)Z.thinking=!0;return Z}function hM(){return{lastToolName:"",lastToolSignature:"",consecutiveIdenticalCount:0}}function IM($){$.lastToolName="",$.lastToolSignature="",$.consecutiveIdenticalCount=0}function fW($){if($==null||typeof $!=="object")return $;if(Array.isArray($))return $.map(fW);let Z={};for(let Q of Object.keys($).sort())Z[Q]=fW($[Q]);return Z}function xM($){if($==null)return"null";if(typeof $==="string")return $;if(typeof $!=="object")return String($);try{return JSON.stringify(fW($))}catch{return String($)}}function gM($,Z,Q,J){if(Z===$.lastToolName&&Q===$.lastToolSignature)$.consecutiveIdenticalCount++;else $.consecutiveIdenticalCount=1;return $.lastToolName=Z,$.lastToolSignature=Q,{softWarning:$.consecutiveIdenticalCount===J.softThreshold,hardEscalation:$.consecutiveIdenticalCount>=J.hardThreshold}}var DG={softThreshold:3,hardThreshold:5};class RW{config;state=hM();constructor($){this.config={softThreshold:$?.softThreshold??DG.softThreshold,hardThreshold:$?.hardThreshold??DG.hardThreshold}}inspect($){let Z=xM($.input),Q=gM(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(){IM(this.state)}}class MW{consecutiveMistakes=0;options;constructor($){this.options=$}async record($){let Z=this.options.maxConsecutiveMistakes,Q=$.forceAtLimit&&Z?Z:this.consecutiveMistakes+1;this.consecutiveMistakes=Q;let J=$.details?.trim()||`consecutive mistake (${$.reason})`;if(this.options.emit({type:"error",error:Error(J),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 W={iteration:$.iteration,consecutiveMistakes:Q,maxConsecutiveMistakes:Z,reason:$.reason,details:$.details};this.options.onLimitTelemetry?.(W);let X=await mM(W,this.options.onLimitReached);if(X.action==="continue"){let j=X.guidance?.trim();if(j)this.options.appendRecoveryNotice(j,$.reason);return this.consecutiveMistakes=0,{action:"continue",guidance:j}}return{action:"stop",reason:X.reason?.trim()||void 0,message:vM({iteration:$.iteration,consecutiveMistakes:Q,maxConsecutiveMistakes:Z,reason:$.reason,details:$.details,stopReason:X.reason})}}reset(){this.consecutiveMistakes=0}get value(){return this.consecutiveMistakes}}function vM($){let Z=[`Stopped after ${$.consecutiveMistakes}/${$.maxConsecutiveMistakes} consecutive mistakes (${$.reason}) at iteration ${$.iteration}.`],Q=$.details?.trim();if(Q)Z.push(`Error: ${Q}`);let J=$.stopReason?.trim();if(J)Z.push(`Decision: ${J}`);return Z.push("Session state was preserved. Send a new prompt to resume from the latest state."),Z.join(" ")}async function mM($,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 cM($){switch($){case"auto_compaction":case"manual_compaction":case"compaction_budget_emergency":return $;default:return}}function uM($){let Z=$.content.filter((Q)=>Q.type==="text");if(Z.length===0)return;return Z.map((Q)=>Q.text).join("")}function dM($){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 pM($){return $.content.find((Z)=>Z.type==="tool-result")}function lM($){switch($){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}function iM($){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 EW{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:cM($.metadata?.reason),metadata:$.metadata}];case"run-finished":return this.translateRunFinished($.result);case"run-failed":return[{type:"error",error:$.error,recoverable:!1,iteration:$.snapshot.iteration}];default:return $}}reset(){this.lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0},this.toolStartedAt.clear()}translateAssistantMessage($){let Z=[],Q=uM($);if(Q!==void 0)Z.push({type:"content_end",contentType:"text",text:Q});let J=dM($);if(J!==void 0)Z.push({type:"content_end",contentType:"reasoning",reasoning:J.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 J=pM($.message),W=J?.output,X=iM(J);return[{type:"content_end",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,output:W,error:X,durationMs:Q}]}translateUsage($){let Z=$.inputTokens-this.lastUsage.inputTokens,Q=$.outputTokens-this.lastUsage.outputTokens,J=$.cacheReadTokens-this.lastUsage.cacheReadTokens,W=$.cacheWriteTokens-this.lastUsage.cacheWriteTokens,X=this.lastUsage.totalCost??0,Y=($.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:J===0?void 0:Math.max(0,J),cacheWriteTokens:W===0?void 0:Math.max(0,W),cost:Y===0?void 0:Y,totalInputTokens:$.inputTokens,totalOutputTokens:$.outputTokens,totalCacheReadTokens:$.cacheReadTokens===0?void 0:$.cacheReadTokens,totalCacheWriteTokens:$.cacheWriteTokens===0?void 0:$.cacheWriteTokens,totalCost:$.totalCost}]}translateRunFinished($){let 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:lM($.status),text:$.outputText,iterations:$.iterations,usage:Z}]}}function ZE($){if(typeof $==="string")return $;if($ instanceof Error)return $.message;try{return JSON.stringify($)}catch{return String($)}}async function QE($){let Q=(typeof $.content==="function"?await $.content():$.content).trim();return Q.length>0?Q:void 0}function JE($,Z){let Q=$.trim(),J=Z.map((W)=>W.trim()).filter(Boolean).join(`
497
+ `;function GG($=process.env){return{maxToolResultChars:KG($[LW.maxToolResultChars]),maxTotalTextBytes:KG($[LW.maxTotalTextBytes]),minOutdatedRewriteBytes:wM($[LW.minOutdatedRewriteBytes])}}class OW{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=G5($.maxToolResultChars,AM),this.maxFileContentChars=G5($.maxFileContentChars,OM),this.maxTotalTextBytes=G5($.maxTotalTextBytes,qM),this.mediaBudget=$.mediaBudget??{},this.maxAssistantTextChars=G5($.maxAssistantTextChars,zM),this.maxAssistantToolMarkupChars=G5($.maxAssistantToolMarkupChars,TM),this.minOutdatedRewriteBytes=PM($.minOutdatedRewriteBytes,NM)}resetConversationState(){this.resetIndexes(),this.committedOutdatedRewrites.clear()}buildForApi($){this.reindex($),this.commitOutdatedRewrites($);let Q=this.addMissingToolResults($).map((W)=>{if(!Array.isArray(W.content)){if(W.role==="user"&&typeof W.content==="string"){let Y=XG(W.content);if(Y!==W.content)return{...W,content:Y}}if(W.role==="assistant"&&typeof W.content==="string"){let Y=this.truncateAssistantText(W.content);if(Y!==W.content)return{...W,content:Y}}return W}let X=!1,j=W.content.map((Y)=>{let V=this.transformBlock(Y,W.role);if(V!==Y)X=!0;return V});return X?{...W,content:j}:W}),J=this.applyMediaBudget(Q);return this.truncateToTotalTextBudget(J)}transformBlock($,Z){if(Z==="user"&&$.type==="text"&&typeof $.text==="string"){let W=XG($.text);if(W!==$.text)return{...$,text:W};return $}if(Z==="assistant"&&$.type==="text"&&typeof $.text==="string"){let W=this.truncateAssistantText($.text);return W===$.text?$:{...$,text:W}}if($.type==="file"){let W=V6($.content,this.maxFileContentChars,VG);return W===$.content?$:{...$,content:W}}if($.type!=="tool_result")return $;let Q=this.resolveToolName($),J=$.content;if(this.isReadTool(Q)&&$.is_error!==!0){let W=this.committedOutdatedRewrites.get($.tool_use_id);if(W&&W.size>0){let j=this.getReadLocators($).filter((Y)=>W.has(this.toReadLocatorKey(Y))&&this.isOutdatedReadLocator(Y,$.tool_use_id));if(j.length>0)J=this.replaceOutdatedReadContent(J,j)}}return J=this.truncateToolResultContent(J),J===$.content?$:{...$,content:J}}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 J=$[Q];if(!Array.isArray(J.content))continue;for(let W=0;W<J.content.length;W++){let X=J.content[W];if(X.type==="file")this.latestFullContentOwnerByPathCache.set(X.path,`file:${Q}:${W}`);else if(X.type==="tool_use"){let j=X.name.toLowerCase();if(this.toolNameByIdCache.set(X.id,j),this.isReadTool(j)){let Y=this.extractLocatorsFromReadToolInput(X.input);if(Y.length>0)this.readLocatorsByToolUseIdCache.set(X.id,Y)}}else if(X.type==="tool_result"){let j=this.resolveToolName(X);if(!this.isReadTool(j)||X.is_error===!0)continue;let Y=this.getReadLocators(X);for(let V of Y)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,J=0;for(let W of $){if(!Array.isArray(W.content))continue;for(let X of W.content){if(X.type!=="tool_result"||X.is_error===!0)continue;let j=this.resolveToolName(X);if(!this.isReadTool(j))continue;Q.add(X.tool_use_id);let Y=this.committedOutdatedRewrites.get(X.tool_use_id),V=new Set,B=new Set;for(let K of this.getReadLocators(X)){let G=this.toReadLocatorKey(K);if(!this.isOutdatedReadLocator(K,X.tool_use_id))continue;if(B.add(G),!Y?.has(G))V.add(G)}if(Y){for(let K of Y)if(!B.has(K))Y.delete(K);if(Y.size===0)this.committedOutdatedRewrites.delete(X.tool_use_id)}if(V.size===0)continue;let H=Z.get(X.tool_use_id);if(!H)H=new Set,Z.set(X.tool_use_id,H);for(let K of V)H.add(K);J+=this.estimateOutdatedReclaimBytes(X.content,V)}}for(let W of this.committedOutdatedRewrites.keys())if(!Q.has(W))this.committedOutdatedRewrites.delete(W);if(Z.size===0||J<this.minOutdatedRewriteBytes)return;for(let[W,X]of Z){let j=this.committedOutdatedRewrites.get(W);if(!j)j=new Set,this.committedOutdatedRewrites.set(W,j);for(let Y of X)j.add(Y)}}estimateOutdatedReclaimBytes($,Z){let Q=this.extractReadLocatorsFromToolResultContent($),J=Q.length>0&&Q.every((V)=>Z.has(this.toReadLocatorKey(V))),W=(V)=>{let B;try{B=JSON.parse(V)}catch{return J||Q.length===0?Y0(this.truncateMiddle(V)):0}let H=Array.isArray(B)?B:[B],K=0;for(let G of H){let F=this.extractLocatorFromResultEntry(G);if(F&&Z.has(this.toReadLocatorKey(F)))K+=this.providerBoundEntryBytes(G)}return K};if(typeof $==="string")return W($);let X=new Set(Z),j=0;for(let V of $)if(V.type==="text")j+=this.countOutdatedImageEntries(V.text,X);let Y=0;for(let V of $)if(V.type==="text")Y+=W(V.text);else if(V.type==="image"){if(j>0)j-=1,Y+=Y0(V.data)}else if(p$(V)){let B=this.extractLocatorFromResultEntry(V);if(B&&Z.has(this.toReadLocatorKey(B)))Y+=this.providerBoundEntryBytes(V)}else if(V.type==="file"){if(Z.has(this.toReadLocatorKey({path:V.path,startLine:null,endLine:null})))Y+=Y0(this.truncateMiddle(V.content))}return Y}providerBoundEntryBytes($){let Z=this.truncateNestedStrings($);return Y0(JSON.stringify(Z))}addMissingToolResults($){let Z=this.collectToolResultIds($),Q=[],J=new Map,W=!1,X=()=>{if(J.size===0)return;j(this.createMissingToolResultMessage(J)),J.clear(),W=!0},j=(Y)=>{let V=Q.at(-1);if(this.shouldMergeUserAfterToolResults(V,Y)){Q[Q.length-1]={...V,content:[...V.content,...this.contentBlocksForUserMerge(Y.content)]},W=!0;return}Q.push(Y)};for(let Y of $){if(this.isToolResultOnlyMessage(Y)){if(j(this.appendMissingToolResults(Y,J)),J.size>0)J.clear(),W=!0;continue}if(Array.isArray(Y.content)){let V=Y.content.filter((H)=>H.type==="tool_result"),B=Y.content.filter((H)=>H.type!=="tool_result");if(V.length>0){let H=this.appendMissingToolResults({...Y,role:"user",content:V},J);if(j(H),J.size>0)J.clear();W=!0}if(B.length>0||V.length===0){if(V.length===0)X();let H=V.length>0?{...Y,content:B}:Y;if(j(H),H.role==="assistant")this.trackMissingToolCalls(H,Z,J)}continue}X(),j(Y)}return X(),W?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 J of Q.content)if(J.type==="tool_result")Z.add(J.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 J of $.content){if(J.type!=="tool_use"||Z.has(J.id))continue;Q.set(J.id,J.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 $?`${YG} Tool: ${$}.`:YG}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=[],J=this.extractLocatorFromReadRequest(Z);if(J)Q.push(J);if(Array.isArray(Z.files))for(let W of Z.files){let X=this.extractLocatorFromReadRequest(W);if(X)Q.push(X)}if(Array.isArray(Z.file_paths)){for(let W of Z.file_paths)if(typeof W==="string"&&W.length>0)Q.push({path:W,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(p$(Q)){let J=this.extractLocatorFromResultEntry(Q);if(J)Z.push(J)}}return this.dedupeReadLocators(Z)}tryParseReadLocators($){try{return this.extractLocatorsFromParsedReadResult(JSON.parse($))}catch{return[]}}extractLocatorsFromParsedReadResult($){if(Array.isArray($)){let Q=[];for(let J of $){let W=this.extractLocatorFromResultEntry(J);if(W)Q.push(W)}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))),J=new Set(Z.map((X)=>X.path));if(typeof $==="string")return this.replaceOutdatedInString($,Q)??c2;let W=0;for(let X of $)if(X.type==="text")W+=this.countOutdatedImageEntries(X.text,Q);return $.map((X)=>{if(X.type==="file"){if(!J.has(X.path))return X;return{...X,content:c2}}if(X.type==="image"){if(W===0)return X;return W-=1,{type:"text",text:c2}}if(p$(X))return this.replaceOutdatedReadEntry(X,Q);if(X.type!=="text")return X;let j=this.replaceOutdatedInString(X.text,Q);if(j===null)return{...X,text:c2};return j===X.text?X:{...X,text:j}})}countOutdatedImageEntries($,Z){let Q;try{Q=JSON.parse($)}catch{return 0}let J=Array.isArray(Q)?Q:[Q],W=0;for(let X of J){if(!X||typeof X!=="object")continue;let j=X,Y=this.extractLocatorFromResultEntry(j);if(!Y)continue;if(!Z.has(this.toReadLocatorKey(Y)))continue;if(j.result==="Successfully read image"||j.content==="Successfully read image")W+=1}return W}replaceOutdatedInString($,Z){let Q;try{Q=JSON.parse($)}catch{return null}let J=Array.isArray(Q)?Q.map((W)=>this.replaceOutdatedReadEntry(W,Z)):this.replaceOutdatedReadEntry(Q,Z);return JSON.stringify(J)}replaceOutdatedReadEntry($,Z){if(!$||typeof $!=="object")return $;let Q=this.extractLocatorFromResultEntry($);if(!Q||!Z.has(this.toReadLocatorKey(Q)))return $;let J={...$};if(typeof J.result==="string")J.result=c2;else if(typeof J.content==="string")J.content=c2;else J.result=c2;return J}isReadTool($){return!!$&&RM.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(p$(Z))return this.truncateNestedStrings(Z);return Z})}truncateNestedStrings($){if(typeof $==="string")return this.truncateMiddle($);if(Array.isArray($)){let Z=!1,Q=$.map((J)=>{let W=this.truncateNestedStrings(J);if(W!==J)Z=!0;return W});return Z?Q:$}if($!==null&&typeof $==="object"){if(qW($))return $;let Z=!1,Q={};for(let[J,W]of Object.entries($)){let X=this.truncateNestedStrings(W);if(X!==W)Z=!0;Q[J]=X}return Z?Q:$}return $}truncateMiddle($){return V6($,this.maxToolResultChars,VG)}truncateAssistantText($){if(this.hasRepeatedToolCallMarkup($))return V6($,this.maxAssistantToolMarkupChars,EM);return V6($,this.maxAssistantTextChars,MM)}hasRepeatedToolCallMarkup($){if($.length<=this.maxAssistantToolMarkupChars)return!1;let Z=0;for(let Q of $.matchAll(CM))if(Z+=1,Z>=fM)return!0;return!1}truncateToTotalTextBudget($){let Z=this.countMessageTextBytes($);if(Z<=this.maxTotalTextBytes)return $;let Q=$.map((W)=>{if(!Array.isArray(W.content))return{...W};return{...W,content:W.content.map((X)=>bM(X))}}),J=this.collectTruncationCandidates(Q);for(let W of J){if(Z<=this.maxTotalTextBytes)break;let X=W.byteLength;if(X<=W.minBytes)continue;let j=Z-this.maxTotalTextBytes,Y=Math.max(W.minBytes,X-j),V=SM(W.get(),Y,W.makeMarker);W.set(V),Z-=X-Y0(V)}return Q}countMessageTextBytes($){let Z=0;for(let Q of $){if(typeof Q.content==="string"){Z+=Y0(Q.content);continue}for(let J of Q.content)if(J.type==="text")Z+=Y0(J.text);else if(J.type==="thinking")Z+=Y0(J.thinking);else if(J.type==="file")Z+=Y0(J.content);else if(J.type==="tool_use")Z+=NQ(J.input);else if(J.type==="tool_result"){if(typeof J.content==="string")Z+=Y0(J.content);else for(let W of J.content)if(W.type==="text")Z+=Y0(W.text);else if(W.type==="file")Z+=Y0(W.content);else if(p$(W))Z+=NQ(W)}}return Z}collectTruncationCandidates($){let Z=[],Q=[];for(let J of $){if(J.role==="assistant"&&typeof J.content==="string"){Z.push({byteLength:Y0(J.content),minBytes:jG,makeMarker:BG,get:()=>J.content,set:(W)=>{J.content=W}});continue}if(!Array.isArray(J.content))continue;for(let W of J.content){if(W.type==="tool_use"){fQ(W.input,Q);continue}if(J.role==="assistant"&&W.type==="text"){Z.push({byteLength:Y0(W.text),minBytes:jG,makeMarker:BG,get:()=>W.text,set:(X)=>{W.text=X}});continue}if(W.type!=="tool_result")continue;if(typeof W.content==="string"){Z.push({byteLength:Y0(W.content),minBytes:F5,makeMarker:U5,get:()=>W.content,set:(X)=>{W.content=X}});continue}for(let X of W.content)if(X.type==="text")Z.push({byteLength:Y0(X.text),minBytes:F5,makeMarker:U5,get:()=>X.text,set:(j)=>{X.text=j}});else if(X.type==="file")Z.push({byteLength:Y0(X.content),minBytes:F5,makeMarker:U5,get:()=>X.content,set:(j)=>{X.content=j}});else if(p$(X))fQ(X,Z)}}return Z.sort((J,W)=>W.byteLength-J.byteLength),Q.sort((J,W)=>W.byteLength-J.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=DM(),J=!1,W=$.map((X)=>{if(!Array.isArray(X.content))return X;let j=!1,Y=X.content.map((V)=>{let B=this.applyMediaBudgetToBlock(V,Z,Q);if(B!==V)j=!0;return B});if(!j)return X;return J=!0,{...X,content:Y}});return J?W:$}resolveMediaBudget(){return _M(this.mediaBudget)}applyMediaBudgetToBlock($,Z,Q){if(AW($))return this.limitImageContent($,Z,Q);if($.type!=="tool_result"||typeof $.content==="string")return $;let J=!1,W=$.content.map((X)=>{let j=this.applyMediaBudgetToToolResultEntry(X,Z,Q);if(j!==X)J=!0;return j});return J?{...$,content:W}:$}applyMediaBudgetToToolResultEntry($,Z,Q){if(AW($))return this.limitImageContent($,Z,Q);if(p$($))return this.limitNestedMedia($,Z,Q);return $}limitNestedMedia($,Z,Q){if(AW($)){let J=this.limitImageContent($,Z,Q);return J.type==="text"?J.text:J}if(Array.isArray($)){let J=!1,W=$.map((X)=>{let j=this.limitNestedMedia(X,Z,Q);if(j!==X)J=!0;return j});return J?W:$}if($!==null&&typeof $==="object"){let J=!1,W={};for(let[X,j]of Object.entries($)){let Y=this.limitNestedMedia(j,Z,Q);if(Y!==j)J=!0;W[X]=Y}return J?W:$}return $}limitImageContent($,Z,Q){if(!FG($))return{type:"text",text:WG};let J=LM($.mediaType,$.data,{maxImageEncodedBytes:Z.maxImageEncodedBytes,maxImageDecodedBytes:Z.maxImageDecodedBytes,maxTotalMediaBytes:Z.maxTotalMediaBytes},Q);if(!J.ok)return{type:"text",text:WG};return{...$,data:J.base64,mediaType:J.mediaType}}}var HG=String.raw`[\|\uFF5C]`,CM=new RegExp(String.raw`<\s*(?:${HG}\s*)?DSML\s*(?:${HG}\s*)?(?:tool_calls|invoke)\b[^>]*>|<\s*/?\s*(?:tool_calls?|tool_call|function_calls?|function_call|invoke)\b[^>]*>`,"gi");function Y0($){return Buffer.byteLength($,"utf8")}function KG($){if($===void 0)return;let Z=Number.parseInt($,10);return Number.isFinite(Z)&&Z>0?Z:void 0}function wM($){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 G5($,Z){return typeof $==="number"&&Number.isFinite($)&&$>0?Math.floor($):Z}function PM($,Z){if(typeof $!=="number"||Number.isNaN($)||$<0)return Z;return Number.isFinite($)?Math.floor($):$}function V6($,Z,Q){if($.length<=Z)return $;let J=Q($.length-Z),W=Math.max(0,Math.floor((Z-J.length)/2)),X=Math.max(0,$.length-W*2),j=Q(X),Y=Math.max(0,Math.floor((Z-j.length)/2)),V=$.slice(0,Y),B=Y>0?$.slice(-Y):"";return`${V}${j}${B}`}function SM($,Z,Q){if(Y0($)<=Z)return $;let J=0,W=$.length,X=V6($,0,Q);while(J<=W){let j=J+W>>>1,Y=V6($,j,Q);if(Y0(Y)<=Z)X=Y,J=j+1;else W=j-1}return X}function bM($){if($.type==="tool_use")return{...$,input:RQ($.input)};if($.type!=="tool_result"||typeof $.content==="string")return{...$};return{...$,content:$.content.map((Z)=>p$(Z)?RQ(Z):{...Z})}}function p$($){if($===null||typeof $!=="object")return!1;let Z=$.type;return Z!=="text"&&Z!=="image"&&Z!=="file"}function AW($){return $!==null&&typeof $==="object"&&$.type==="image"}function FG($){return $!==null&&typeof $==="object"&&$.type==="image"&&typeof $.data==="string"&&typeof $.mediaType==="string"}function qW($){return FG($)}function NQ($){if(typeof $==="string")return Y0($);if(Array.isArray($)){let Z=0;for(let Q of $)Z+=NQ(Q);return Z}if($!==null&&typeof $==="object"){if(qW($))return 0;let Z=0;for(let Q of Object.values($))Z+=NQ(Q);return Z}return 0}function fQ($,Z){if(Array.isArray($)){$.forEach((Q,J)=>{if(typeof Q==="string")Z.push({byteLength:Y0(Q),minBytes:F5,makeMarker:U5,get:()=>$[J],set:(W)=>{$[J]=W}});else fQ(Q,Z)});return}if($!==null&&typeof $==="object"){if(qW($))return;let Q=$;for(let J of Object.keys(Q)){let W=Q[J];if(typeof W==="string")Z.push({byteLength:Y0(W),minBytes:F5,makeMarker:U5,get:()=>Q[J],set:(X)=>{Q[J]=X}});else fQ(W,Z)}}}function RQ($){if(Array.isArray($))return $.map(RQ);if($!==null&&typeof $==="object"){let Z={};for(let[Q,J]of Object.entries($))Z[Q]=RQ(J);return Z}return $}function zW(){return`conv_${Date.now()}_${Math.random().toString(36).slice(2,9)}`}class TW{messages=[];conversationId=zW();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=zW(),this.sessionStarted=!1}clearHistory(){this.messages=[],this.conversationId=zW(),this.sessionStarted=!1}restore($){this.messages=[...$],this.sessionStarted=!1}isSessionStarted(){return this.sessionStarted}markSessionStarted(){this.sessionStarted=!0}}function UG($){let{agentConfig:Z}=$,Q=yM(Z),J=kM(Z),W=$.hooks,X=hM(Z.maxParallelToolCalls);return{sessionId:$.sessionId??Z.sessionId,agentId:$.agentId,conversationId:$.conversationId,parentAgentId:$.parentAgentId,agentRole:$.agentRole,systemPrompt:$.systemPrompt??Z.systemPrompt,messageModelInfo:J,model:$.model,modelOptions:Q,tools:$.tools,hooks:W,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 yM($){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($.temperature!==void 0)Z.temperature=$.temperature;if($.apiTimeoutMs!==void 0)Z.apiTimeoutMs=$.apiTimeoutMs;return Object.keys(Z).length>0?Z:void 0}function kM($){let Z=$.providerConfig?.family;return{id:$.modelId,provider:$.providerId,family:Z}}function hM($){if($===void 0)return;return $>=2?"parallel":"sequential"}var DG={};w(DG,{normalizeConnectionUpdate:()=>u2,buildConnectionUpdate:()=>NW});function NW($){let Z={};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($.thinking===!1)return Z.thinking=!1,Z.reasoningEffort=null,Z.thinkingBudgetTokens=null,Z;if($.thinking===!0)Z.thinking=!0,Z.reasoningEffort=$.reasoningEffort??null,Z.thinkingBudgetTokens=null;else if($.reasoningEffort!==void 0)Z.thinking=!0,Z.reasoningEffort=$.reasoningEffort;if(typeof $.thinkingBudgetTokens==="number"&&Number.isFinite($.thinkingBudgetTokens)&&$.thinkingBudgetTokens>0)Z.thinking=!0,Z.thinkingBudgetTokens=Math.trunc($.thinkingBudgetTokens);return Z}function u2($){let Z={...$},Q=Object.hasOwn($,"thinking"),J=Object.hasOwn($,"thinkingBudgetTokens");if($.thinking===!1||$.thinking===null)return Z.reasoningEffort=void 0,Z.thinkingBudgetTokens=void 0,Z;if(!Q&&J&&typeof $.thinkingBudgetTokens==="number"&&Number.isFinite($.thinkingBudgetTokens)&&$.thinkingBudgetTokens>0)Z.thinking=!0;return Z}function IM(){return{lastToolName:"",lastToolSignature:"",consecutiveIdenticalCount:0}}function xM($){$.lastToolName="",$.lastToolSignature="",$.consecutiveIdenticalCount=0}function fW($){if($==null||typeof $!=="object")return $;if(Array.isArray($))return $.map(fW);let Z={};for(let Q of Object.keys($).sort())Z[Q]=fW($[Q]);return Z}function gM($){if($==null)return"null";if(typeof $==="string")return $;if(typeof $!=="object")return String($);try{return JSON.stringify(fW($))}catch{return String($)}}function vM($,Z,Q,J){if(Z===$.lastToolName&&Q===$.lastToolSignature)$.consecutiveIdenticalCount++;else $.consecutiveIdenticalCount=1;return $.lastToolName=Z,$.lastToolSignature=Q,{softWarning:$.consecutiveIdenticalCount===J.softThreshold,hardEscalation:$.consecutiveIdenticalCount>=J.hardThreshold}}var _G={softThreshold:3,hardThreshold:5};class RW{config;state=IM();constructor($){this.config={softThreshold:$?.softThreshold??_G.softThreshold,hardThreshold:$?.hardThreshold??_G.hardThreshold}}inspect($){let Z=gM($.input),Q=vM(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(){xM(this.state)}}class MW{consecutiveMistakes=0;options;constructor($){this.options=$}async record($){let Z=this.options.maxConsecutiveMistakes,Q=$.forceAtLimit&&Z?Z:this.consecutiveMistakes+1;this.consecutiveMistakes=Q;let J=$.details?.trim()||`consecutive mistake (${$.reason})`;if(this.options.emit({type:"error",error:Error(J),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 W={iteration:$.iteration,consecutiveMistakes:Q,maxConsecutiveMistakes:Z,reason:$.reason,details:$.details};this.options.onLimitTelemetry?.(W);let X=await cM(W,this.options.onLimitReached);if(X.action==="continue"){let j=X.guidance?.trim();if(j)this.options.appendRecoveryNotice(j,$.reason);return this.consecutiveMistakes=0,{action:"continue",guidance:j}}return{action:"stop",reason:X.reason?.trim()||void 0,message:mM({iteration:$.iteration,consecutiveMistakes:Q,maxConsecutiveMistakes:Z,reason:$.reason,details:$.details,stopReason:X.reason})}}reset(){this.consecutiveMistakes=0}get value(){return this.consecutiveMistakes}}function mM($){let Z=[`Stopped after ${$.consecutiveMistakes}/${$.maxConsecutiveMistakes} consecutive mistakes (${$.reason}) at iteration ${$.iteration}.`],Q=$.details?.trim();if(Q)Z.push(`Error: ${Q}`);let J=$.stopReason?.trim();if(J)Z.push(`Decision: ${J}`);return Z.push("Session state was preserved. Send a new prompt to resume from the latest state."),Z.join(" ")}async function cM($,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 uM($){switch($){case"auto_compaction":case"manual_compaction":case"compaction_budget_emergency":return $;default:return}}function dM($){let Z=$.content.filter((Q)=>Q.type==="text");if(Z.length===0)return;return Z.map((Q)=>Q.text).join("")}function pM($){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 lM($){return $.content.find((Z)=>Z.type==="tool-result")}function iM($){switch($){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}function rM($){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 EW{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:uM($.metadata?.reason),metadata:$.metadata}];case"run-finished":return this.translateRunFinished($.result);case"run-failed":return[{type:"error",error:$.error,recoverable:!1,iteration:$.snapshot.iteration}];default:return $}}reset(){this.lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0},this.toolStartedAt.clear()}translateAssistantMessage($){let Z=[],Q=dM($);if(Q!==void 0)Z.push({type:"content_end",contentType:"text",text:Q});let J=pM($);if(J!==void 0)Z.push({type:"content_end",contentType:"reasoning",reasoning:J.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 J=lM($.message),W=J?.output,X=rM(J);return[{type:"content_end",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,output:W,error:X,durationMs:Q}]}translateUsage($){let Z=$.inputTokens-this.lastUsage.inputTokens,Q=$.outputTokens-this.lastUsage.outputTokens,J=$.cacheReadTokens-this.lastUsage.cacheReadTokens,W=$.cacheWriteTokens-this.lastUsage.cacheWriteTokens,X=this.lastUsage.totalCost??0,Y=($.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:J===0?void 0:Math.max(0,J),cacheWriteTokens:W===0?void 0:Math.max(0,W),cost:Y===0?void 0:Y,totalInputTokens:$.inputTokens,totalOutputTokens:$.outputTokens,totalCacheReadTokens:$.cacheReadTokens===0?void 0:$.cacheReadTokens,totalCacheWriteTokens:$.cacheWriteTokens===0?void 0:$.cacheWriteTokens,totalCost:$.totalCost}]}translateRunFinished($){let 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:iM($.status),text:$.outputText,iterations:$.iterations,usage:Z}]}}function QE($){if(typeof $==="string")return $;if($ instanceof Error)return $.message;try{return JSON.stringify($)}catch{return String($)}}async function JE($){let Q=(typeof $.content==="function"?await $.content():$.content).trim();return Q.length>0?Q:void 0}function WE($,Z){let Q=$.trim(),J=Z.map((W)=>W.trim()).filter(Boolean).join(`
498
498
 
499
499
  `);if(Q&&J)return`${Q}
500
500
 
501
- ${J}`;return Q||J}function WE($,Z){let Q=Z?.["*"]??{},J=Z?.[$]??{};return{...Q,...J}.enabled!==!1}function XE($,Z){return $.filter((Q)=>WE(Q.name,Z))}function jE($,Z){return n1(XE($,Z))}function YE($){let Z=$.filter((Q)=>Q!==void 0);if(Z.length===0)return{};return{beforeRun:async(Q)=>{for(let J of Z){let W=await J.beforeRun?.(Q);if(W?.stop)return W}return},afterRun:async(Q)=>{for(let J of Z)await J.afterRun?.(Q)},beforeModel:async(Q)=>{let J=Q.request,W;for(let X of Z){let j=await X.beforeModel?.({...Q,request:J});if(!j)continue;if(j.stop)return j;W={...W,...j,options:LG(W?.options,j.options)},J={...J,...j.messages?{messages:j.messages}:{},...j.tools?{tools:j.tools}:{},...j.options?{options:LG(J.options,j.options)}:{}}}return W},afterModel:async(Q)=>{for(let J of Z){let W=await J.afterModel?.(Q);if(W?.stop)return W}return},beforeTool:async(Q)=>{let J=Q.input,W;for(let X of Z){let j=await X.beforeTool?.({...Q,input:J});if(!j)continue;if(j.stop||j.skip)return j;if(W={...W,...j},Object.hasOwn(j,"input"))J=j.input}return W},afterTool:async(Q)=>{let J=Q.result,W;for(let X of Z){let j=await X.afterTool?.({...Q,result:J});if(!j)continue;if(j.stop)return j;if(W={...W,...j},j.result)J=j.result}return W},onEvent:async(Q)=>{for(let J of Z)await J.onEvent?.(Q)}}}class l${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 EW;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??tM,this.conversation=new TW($.initialMessages),this.messageBuilder=new OW(KG()),this.contributionRegistry=eM({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 MW({maxConsecutiveMistakes:Q,onLimitReached:$.onConsecutiveMistakeLimitReached,onLimitTelemetry:(X)=>{TZ(this.telemetry,{ulid:this.config.sessionId??this.conversation.getConversationId(),model:this.config.modelId,provider:this.config.providerId,reason:X.reason,consecutiveMistakes:X.consecutiveMistakes,maxConsecutiveMistakes:X.maxConsecutiveMistakes,agentId:this.agentId,conversationId:this.conversation.getConversationId(),parentAgentId:this.parentAgentId,isSubagent:Boolean(this.parentAgentId)})},emit:(X)=>this.emitLegacyEvent(X),log:(X,j,Y)=>VE(this.logger,X,j,Y),agentId:this.agentId,getConversationId:()=>this.conversation.getConversationId(),getActiveRunId:()=>this.activeRunId??"",appendRecoveryNotice:(X,j)=>{this.conversation.appendMessage({role:"user",content:[{type:"text",text:X}]})}});let J=$.execution?.loopDetection;this.loopDetectionDisabled=J===!1;let W=J===!1||J===void 0?void 0:J;this.loopTracker=new RW(W)}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((J)=>J.name)),Q=[...this.config.tools];for(let J of $)if(!Z.has(J.name))Q.push(J),Z.add(J.name);this.config={...this.config,tools:Q}}updateConnection($){let Z=c2($),Q={...this.config};if(Z.providerId!==void 0)Q.providerId=Z.providerId;if(Z.modelId!==void 0)Q.modelId=Z.modelId;if(Z.apiKey!==void 0)Q.apiKey=Z.apiKey;if(Z.baseUrl!==void 0)Q.baseUrl=Z.baseUrl;if(Z.headers!==void 0)Q.headers=Z.headers;if(Z.providerConfig!==void 0)Q.providerConfig=Z.providerConfig;if(Object.hasOwn(Z,"reasoningEffort"))Q.reasoningEffort=Z.reasoningEffort??void 0;if(Object.hasOwn(Z,"thinkingBudgetTokens"))Q.thinkingBudgetTokens=Z.thinkingBudgetTokens??void 0;if(Object.hasOwn(Z,"thinking")){if(Q.thinking=Z.thinking??void 0,Z.thinking===!1||Z.thinking===null)Q.reasoningEffort=void 0,Q.thinkingBudgetTokens=void 0}this.config=Q}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 QE(Z);if(Q)$.push(Q)}return JE(this.config.systemPrompt,$)}executeRun($){let Z;return Z=this.executeRunWithAuthRetry($).finally(()=>{if(this.activeRunPromise===Z)this.activeRunPromise=null}),this.activeRunPromise=Z,Z}async executeRunWithAuthRetry($){let Z=await this.executeRunInternal($);if(Z.finishReason!=="error"||!this.config.onAuthError||!$E(Z.text))return Z;if(!await this.config.onAuthError().catch(()=>!1))return Z;let J=await this.executeRunInternal({isContinue:!0});return rV(this.telemetry,this.config.providerId,{recovered:J.finishReason!=="error"}),J}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 D=await HE(Q,$.userImages,$.userFiles,this.config.userFileContentLoader);this.conversation.appendMessage({role:"user",content:D})}let J=await this.composeSystemPrompt(),W=QG(this.config,this.logger,this.telemetry),X=new Map;for(let D of this.contributionRegistry.getRegisteredTools())X.set(D.name,D);let j=jE([...X.values()],this.config.toolPolicies),Y=new Map;for(let D of j)Y.set(D.name,D);for(let D of this.config.tools)Y.set(D.name,D);let V=this.conversation.getConversationId(),B=AG(this.config),H=Array.from(Y.values()),K=zQ(this.conversation.getMessages()),G=FG({agentConfig:this.config,sessionId:this.config.sessionId,agentId:this.agentId,conversationId:V,parentAgentId:this.parentAgentId,model:W,logger:this.logger,telemetry:this.telemetry,tools:H,toolContextMetadata:{modelSupportsImages:B?.capabilities?.includes("images")??!0,...this.config.toolContextMetadata},hooks:this.createRuntimeHooks(),prepareTurn:this.createRuntimePrepareTurn(B,H),initialMessages:K,systemPrompt:J}),F=this.createAgentRuntimeImpl(G);if(this.activeRuntime=F,this.abortRequested)F.abort(this.abortReason);let U=F.subscribe((D)=>{this.handleRuntimeEvent(D)}),_,L;try{if($.isContinue)_=await F.continue(void 0);else _=await F.run("")}catch(D){L=D instanceof Error?D:Error(String(D))}finally{U();try{await this.activeTrackerWork}catch(D){this.logger?.error?.("SessionRuntime tracker work failed during drain",{agentId:this.agentId,error:D})}this.activeRuntime=null,this.running=!1,this.abortRequested=!1,this.abortReason=void 0}if(_&&_.messages.length>0){let D=j6(_.messages);this.conversation.replaceMessages(D)}let O=new Date;try{return this.buildLegacyResult({runResult:_,thrownError:L,startedAt:Z,endedAt:O})}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 $=YE([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 J=Q?.messages??Z.request.messages,W=await this.prepareMessagesForModelRequest(J);return{...Q,messages:W}}}}createRuntimePrepareTurn($,Z){let Q=this.config.prepareTurn;if(!Q)return;return async(J)=>{let W=j6(J.messages),X=await this.prepareProviderMessagesForApi(W),j=await Q({agentId:J.agentId,conversationId:J.conversationId??this.conversation.getConversationId(),parentAgentId:J.parentAgentId??null,iteration:J.iteration,messages:W,apiMessages:X,abortSignal:J.signal??new AbortController().signal,systemPrompt:J.systemPrompt??"",tools:Z,model:{id:this.config.modelId,provider:this.config.providerId,info:$},emitStatusNotice:J.emitStatusNotice});if(!j)return;return{...j.messages?{messages:zQ(j.messages)}:{},...j.systemPrompt!==void 0?{systemPrompt:j.systemPrompt}:{}}}}async prepareMessagesForModelRequest($){let Z=await this.prepareProviderMessagesForApi(TQ($));return zQ(Z)}async prepareProviderMessagesForApi($){let Z=$,Q=this.contributionRegistry.getRegistrySnapshot().messageBuilder;for(let J of Q)Z=await J.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,J=this.toolInputs.get($.toolCall.toolCallId);this.toolStartedAt.delete($.toolCall.toolCallId),this.toolInputs.delete($.toolCall.toolCallId);let W=$.message.content.find((V)=>V.type==="tool-result"),X=W?.type==="tool-result"&&W.isError===!0,j=X?ZE(W?.type==="tool-result"?W.output:void 0):void 0,Y={id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:J,output:W?.type==="tool-result"?W.output:void 0,error:j,durationMs:Z===void 0?0:Q.getTime()-Z.getTime(),startedAt:Z??Q,endedAt:Q};if(this.currentRunToolCalls.push(Y),X){if(this.currentTurnFailedTools+=1,j)this.currentTurnFailureDetails.push(`[${$.toolCall.toolName}] ${j}`)}else this.currentTurnSuccessfulTools+=1;break}case"turn-finished":{let Z=this.currentTurnFailedTools,Q=this.currentTurnSuccessfulTools;if(Z>0&&Q===0){let J=this.currentTurnFailureDetails.join("; ");this.enqueueMistakeRecord({iteration:$.iteration,reason:"tool_execution_failed",details:`${Z} tool call(s) failed${J?`: ${J}`:""}`})}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(j6($));return}if(Z.length===0)return;let Q=new Set(this.conversation.getMessages().map((W)=>W.id).filter((W)=>typeof W==="string")),J=j6(Z).filter((W)=>!W.id||!Q.has(W.id));if(J.length===0)return;this.conversation.replaceMessages([...this.conversation.getMessages(),...J])}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 J=this.loopTracker.inspect({name:$,input:Z});if(J.kind==="ok")return;if(J.kind==="soft"){if(J.message)this.conversation.appendMessage({role:"user",content:[{type:"text",text:J.message}]});return}this.enqueueMistakeRecord({iteration:Q,reason:"tool_execution_failed",forceAtLimit:!0,details:J.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:J,endedAt:W}=$,X=W.getTime()-J.getTime(),j=Q?"error":BE(Z),Y=(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,B=Z?j6(Z.messages):this.conversation.getMessages(),H=AG(this.config);if(Q)throw Q;return{text:Y,usage:V,messages:B,toolCalls:this.currentRunToolCalls,iterations:Z?.iterations??0,finishReason:j,model:{id:this.config.modelId,provider:this.config.providerId,info:H},startedAt:J,endedAt:W,durationMs:X}}}function VE($,Z,Q,J){if(!$)return;if(Z==="debug"){$.debug(Q,J);return}if(Z==="error"&&$.error){$.error(Q,J);return}let W=Z==="warn"?"warn":Z==="error"?"error":"info";$.log(Q,{...J,severity:W})}function BE($){if(!$)return"error";switch($.status){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}async function HE($,Z,Q,J){let{buildInitialUserContent:W}=await Promise.resolve().then(() => _G);return W($,Z,Q,J)}function AG($){if($.knownModels?.[$.modelId])return $.knownModels[$.modelId];let Z=_W($);if(Z?.[$.modelId])return Z[$.modelId];return}import{buildClineSystemPrompt as OG}from"@cline/shared";function qG($,Z){let Q=$.trim();if(Z.providerId.toLowerCase()!=="cline")return Q;return OG({ide:Z.clineIdeName?.trim()||"Terminal",workspaceRoot:Z.cwd?.trim()||"/",providerId:Z.providerId,rules:`# Team Teammate Role
502
- ${Q}`,platform:Z.clinePlatform,metadata:Z.workspaceMetadata})}function zG($,Z){let Q=$.trim();if(Z.providerId.toLowerCase()!=="cline")return Q;return OG({ide:Z.clineIdeName||"Terminal",workspaceRoot:Z.cwd?.trim()||"/",providerId:Z.providerId,overridePrompt:Q,metadata:Z.workspaceMetadata,platform:Z.clinePlatform})}function i$($){let Z={...$};return{getRuntimeConfig:()=>Z,getConnectionConfig:()=>({providerId:Z.providerId,modelId:Z.modelId,apiKey:Z.apiKey,baseUrl:Z.baseUrl,headers:Z.headers,onAuthError:Z.onAuthError,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking,reasoningEffort:Z.reasoningEffort,thinkingBudgetTokens:Z.thinkingBudgetTokens,maxTokensPerTurn:Z.maxTokensPerTurn,temperature:Z.temperature}),updateConnectionDefaults:(Q)=>{Z={...Z,...Q}}}}function u2($){let Z=$.configProvider.getRuntimeConfig(),Q=$.kind==="teammate"?qG($.prompt,Z):zG($.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 r$($){let Z=u2($),Q=new l$(Z);if(Z.onEvent)Q.subscribeEvents(Z.onEvent);return Q}var FE=CW.object({systemPrompt:CW.string().describe("System prompt defining the sub-agent's behavior"),task:CW.string().describe("Task for the sub-agent to complete")});function n$($){return KE({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:GE(FE),execute:async(Z,Q)=>{let J=$.createSubAgentTools?await $.createSubAgentTools(Z,Q):$.subAgentTools??[],W=r$({kind:"subagent",prompt:Z.systemPrompt,configProvider:$.configProvider,tools:J,maxIterations:$.defaultMaxIterations,parentAgentId:Q.agentId,abortSignal:Q.signal,onEvent:$.onSubAgentEvent,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval}),X=W.getAgentId(),j=W.getConversationId(),Y=Q.agentId;if($.onSubAgentStart)try{await $.onSubAgentStart({subAgentId:X,conversationId:j,parentAgentId:Y,input:Z})}catch{}try{let V=await W.run(Z.task),B={text:V.text,iterations:V.iterations,finishReason:V.finishReason,usage:{inputTokens:V.usage.inputTokens,outputTokens:V.usage.outputTokens}};if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:X,conversationId:j,parentAgentId:Y,input:Z,result:B,agentResult:V})}catch{}return B}catch(V){if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:X,conversationId:j,parentAgentId:Y,input:Z,error:V instanceof Error?V:Error(String(V))})}catch{}throw V}},timeoutMs:300000,retryable:!1})}import{createTool as T0,TEAM_AWAIT_TIMEOUT_MS as UE,TEAM_RUN_MESSAGE_PREVIEW_LIMIT as DE,TEAM_RUN_TEXT_PREVIEW_LIMIT as _E,TEAM_TASK_IGNORED_FIELDS_BY_ACTION as LE,TeamAttachOutcomeFragmentInputSchema as TG,TeamAwaitRunsInputSchema as NG,TeamBroadcastInputSchema as fG,TeamBroadcastToolResultSchema as AE,TeamCancelRunInputSchema as RG,TeamCancelRunToolResultSchema as OE,TeamCleanupInputSchema as MG,TeamCleanupToolResultSchema as qE,TeamCreateOutcomeInputSchema as EG,TeamCreateOutcomeToolResultSchema as zE,TeamFinalizeOutcomeInputSchema as CG,TeamFinalizeOutcomeToolResultSchema as TE,TeamListOutcomesInputSchema as wG,TeamListRunsInputSchema as PG,TeamMailboxMessageToolResultSchema as NE,TeamMissionLogInputSchema as SG,TeamMissionLogToolResultSchema as fE,TeamOutcomeFragmentToolResultSchema as bG,TeamOutcomeToolResultSchema as RE,TeamReadMailboxInputSchema as yG,TeamReviewOutcomeFragmentInputSchema as kG,TeamRunTaskInputSchema as hG,TeamRunTaskToolResultSchema as wW,TeamRunToolSummarySchema as PW,TeamSendMessageInputSchema as IG,TeamSendMessageToolResultSchema as ME,TeamShutdownTeammateInputSchema as xG,TeamSimpleAgentStatusToolResultSchema as gG,TeamSpawnTeammateInputSchema as vG,TeamStatusInputSchema as mG,TeamStatusToolResultSchema as EE,TeamTaskInputSchema as cG,TeamTaskToolResultSchema as D5,validateWithZod as g,zodToJsonSchema as N0}from"@cline/shared";function uG($,Z){let Q=$.replace(/\s+/g," ").trim();if(Q.length<=Z)return Q;return`${Q.slice(0,Math.max(0,Z-3)).trimEnd()}...`}function d2($,Z){if($===void 0)throw Error(`Missing required field: ${Z}`);return $}function CE($){let Z=$.result;if(!Z)return;return{textPreview:uG(Z.text,_E),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 MQ($){return $?.toISOString()}function SW($){return{id:$.id,agentId:$.agentId,taskId:$.taskId,status:$.status,messagePreview:uG($.message,DE),priority:$.priority,retryCount:$.retryCount,maxRetries:$.maxRetries,nextAttemptAt:MQ($.nextAttemptAt),continueConversation:$.continueConversation,startedAt:$.startedAt.toISOString(),endedAt:MQ($.endedAt),leaseOwner:$.leaseOwner,heartbeatAt:MQ($.heartbeatAt),lastProgressAt:MQ($.lastProgressAt),lastProgressMessage:$.lastProgressMessage,currentActivity:$.currentActivity,error:$.error,resultSummary:CE($)}}function wE($){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 V6=["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 dG($){let Z=[];if($.createBaseTools)Z.push(...$.createBaseTools());Z.push(...p2({runtime:$.runtime,requesterId:$.spec.agentId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!1,includeSpawnTool:!1})),$.runtime.spawnTeammate({agentId:$.spec.agentId,config:u2({kind:"teammate",prompt:$.spec.rolePrompt,role:$.spec.rolePrompt,configProvider:$.teammateConfigProvider,tools:Z,maxIterations:$.spec.maxIterations,cwd:$.teammateConfigProvider.getRuntimeConfig().cwd})})}function B6($){let Z=$.leadAgentId??"lead",Q=$.restoredFromPersistence===!0,J=p2({runtime:$.runtime,requesterId:Z,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!0,includeSpawnTool:$.includeLeadSpawnTool,includeManagementTools:$.includeLeadManagementTools,onLeadToolsUnlocked:$.onLeadToolsUnlocked}),W=[];for(let X of $.restoredTeammates??[]){if($.runtime.isTeammateActive(X.agentId))continue;dG({runtime:$.runtime,requesterId:Z,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:X}),W.push(X.agentId)}return{tools:J,restoredFromPersistence:Q,restoredTeammates:W}}function p2($){let Z=$.allowSpawn??!0,Q=$.includeSpawnTool??!0,J=$.includeManagementTools??!0,W=[];if(Q)W.push(T0({name:"team_spawn_teammate",description:"Spawn a teammate with a required agentId and rolePrompt.",inputSchema:N0(vG),execute:async(j)=>{let Y=g(vG,j);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:Y.agentId,rolePrompt:Y.rolePrompt};if(dG({runtime:$.runtime,requesterId:$.requesterId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:V}),!J)$.onLeadToolsUnlocked?.(p2({...$,includeSpawnTool:!1,includeManagementTools:!0,onLeadToolsUnlocked:void 0}));return g(gG,{agentId:Y.agentId,status:"spawned"})}}));if(!J)return W;W.push(T0({name:"team_shutdown_teammate",description:"Shutdown a teammate by agentId.",inputSchema:N0(xG),execute:async(j)=>{let Y=g(xG,j);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");return $.runtime.shutdownTeammate(Y.agentId,Y.reason),g(gG,{agentId:Y.agentId,status:"stopped"})}})),W.push(T0({name:"team_status",description:"Return a snapshot of team members, task counts, mailbox, and mission log stats.",inputSchema:N0(mG),execute:async(j)=>{return g(mG,j),g(EE,$.runtime.getSnapshot())}})),W.push(T0({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:N0(cG),execute:async(j)=>{let Y=g(cG,j);switch(Y.action){case"create":{let V=new Set(LE.create??[]),B=Object.entries(j).filter(([K,G])=>V.has(K)&&G!=null).map(([K])=>K),H=$.runtime.createTask({title:d2(Y.title,"title"),description:d2(Y.description,"description"),dependsOn:Y.dependsOn,assignee:Y.assignee,createdBy:$.requesterId});return g(D5,{action:"create",taskId:H.id,status:H.status,...B.length>0?{ignoredFields:B,note:`Ignored fields for action=create: ${B.join(", ")}`}:{}})}case"list":return g(D5,{action:"list",tasks:$.runtime.listTaskItems({status:Y.status,assignee:Y.assignee})});case"claim":{let V=$.runtime.claimTask(d2(Y.taskId,"taskId"),$.requesterId);return g(D5,{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(d2(Y.taskId,"taskId"),$.requesterId,d2(Y.summary,"summary"));return g(D5,{action:"complete",taskId:V.id,status:V.status})}case"block":{let V=$.runtime.blockTask(d2(Y.taskId,"taskId"),$.requesterId,d2(Y.reason,"reason"));return g(D5,{action:"block",taskId:V.id,status:V.status})}}}}));let X=new Map;return W.push(T0({name:"team_run_task",description:"Route a delegated task to a teammate. Choose sync (wait) or async (run in background).",inputSchema:N0(hG),execute:async(j)=>{let Y=g(hG,j);if(Y.runMode==="async"){let H=$.runtime.startTeammateRun(Y.agentId,Y.task,{taskId:Y.taskId||void 0,fromAgentId:$.requesterId,continueConversation:Y.continueConversation||void 0});return g(wW,{agentId:Y.agentId,mode:"async",status:"queued",dispatched:!0,message:`Task dispatched to ${Y.agentId} and queued as ${H.id}.`,runId:H.id})}let V=X.get(Y.agentId);if(V){let H=await V;return g(wW,{...H,status:"joined",deduped:!0,message:`Task for ${Y.agentId} was already dispatched in this tool batch; joined the existing in-flight run.`})}let B=$.runtime.routeToTeammate(Y.agentId,Y.task,{taskId:Y.taskId||void 0,fromAgentId:$.requesterId,continueConversation:Y.continueConversation||void 0}).then((H)=>g(wW,{agentId:Y.agentId,mode:"sync",status:"running",dispatched:!0,message:`Task dispatched to ${Y.agentId} and completed in sync mode.`,text:H.text,iterations:H.iterations})).finally(()=>{X.delete(Y.agentId)});return X.set(Y.agentId,B),await B}})),W.push(T0({name:"team_cancel_run",description:"Cancel one async teammate run.",inputSchema:N0(RG),execute:async(j)=>{let Y=g(RG,j),V=$.runtime.cancelRun(Y.runId,Y.reason);return g(OE,{runId:V.id,status:V.status})}})),W.push(T0({name:"team_list_runs",description:"List teammate runs started with team_run_task in async mode, including live activity/progress fields when available.",inputSchema:N0(PG),execute:async(j)=>g(PW.array(),$.runtime.listRuns(g(PG,j)).map(SW))})),W.push(T0({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:N0(NG),timeoutMs:UE,execute:async(j)=>{let Y=g(NG,j);if(Y.runId){let H=await $.runtime.awaitRun(Y.runId);return wE(H),g(PW,SW(H))}let V=await $.runtime.awaitAllRuns(),B=V.filter((H)=>["failed","cancelled","interrupted"].includes(H.status));if(B.length>0){let H=B.map((K)=>`${K.id}:${K.status}${K.error?`(${K.error})`:""}`).join(", ");throw Error(`One or more runs did not complete successfully: ${H}`)}return g(PW.array(),V.map(SW))}})),W.push(T0({name:"team_send_message",description:"Send a mailbox message to a specific teammate.",inputSchema:N0(IG),execute:async(j)=>{let Y=g(IG,j),V=$.runtime.sendMessage($.requesterId,Y.toAgentId,Y.subject,Y.body,Y.taskId??void 0);return g(ME,{id:V.id,toAgentId:V.toAgentId})}})),W.push(T0({name:"team_broadcast",description:"Broadcast a message to all teammates.",inputSchema:N0(fG),execute:async(j)=>{let Y=g(fG,j),V=$.runtime.broadcast($.requesterId,Y.subject,Y.body,{taskId:Y.taskId??void 0});return g(AE,{delivered:V.length})}})),W.push(T0({name:"team_read_mailbox",description:"Read the current agent mailbox.",inputSchema:N0(yG),execute:async(j)=>{let Y=g(yG,j);return g(NE.array(),$.runtime.listMailbox($.requesterId,{unreadOnly:Y.unreadOnly,markRead:!0}))}})),W.push(T0({name:"team_mission_log",description:"Append a mission log update for your team.",inputSchema:N0(SG),execute:async(j)=>{let Y=g(SG,j),V=$.runtime.appendMissionLog({agentId:$.requesterId,taskId:Y.taskId||void 0,kind:Y.kind,summary:Y.summary,evidence:Y.evidence?.length?Y.evidence:void 0,nextAction:Y.nextAction||void 0});return g(fE,{id:V.id})}})),W.push(T0({name:"team_cleanup",description:"Clean up the team runtime. Fails if teammates are still running.",inputSchema:N0(MG),execute:async(j)=>{if(g(MG,j),$.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can run cleanup.");return $.runtime.cleanup(),g(qE,{status:"cleaned"})}})),W.push(T0({name:"team_create_outcome",description:"Create a converged team outcome.",inputSchema:N0(EG),execute:async(j)=>{let Y=g(EG,j),V=$.runtime.createOutcome({title:Y.title,requiredSections:Y.requiredSections,createdBy:$.requesterId});return g(zE,{outcomeId:V.id,status:V.status,requiredSections:V.requiredSections})}})),W.push(T0({name:"team_attach_outcome_fragment",description:"Attach a fragment to an outcome section.",inputSchema:N0(TG),execute:async(j)=>{let Y=g(TG,j),V=$.runtime.attachOutcomeFragment({outcomeId:Y.outcomeId,section:Y.section,sourceAgentId:$.requesterId,sourceRunId:Y.sourceRunId||void 0,content:Y.content});return g(bG,{fragmentId:V.id,status:V.status})}})),W.push(T0({name:"team_review_outcome_fragment",description:"Review one outcome fragment.",inputSchema:N0(kG),execute:async(j)=>{let Y=g(kG,j),V=$.runtime.reviewOutcomeFragment({fragmentId:Y.fragmentId,reviewedBy:$.requesterId,approved:Y.approved});return g(bG,{fragmentId:V.id,status:V.status})}})),W.push(T0({name:"team_finalize_outcome",description:"Finalize one outcome.",inputSchema:N0(CG),execute:async(j)=>{let Y=g(CG,j),V=$.runtime.finalizeOutcome(Y.outcomeId);return g(TE,{outcomeId:V.id,status:V.status})}})),W.push(T0({name:"team_list_outcomes",description:"List team outcomes.",inputSchema:N0(wG),execute:async(j)=>{return g(wG,j),g(RE.array(),$.runtime.listOutcomes())}})),W}function EQ($){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 pG($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}var PE=[{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:n$({configProvider:{}}).description,headlessToolNames:["spawn_agent"]},{id:"teams",description:"Enable team collaboration tools for teammate management, task coordination, mailbox messaging, mission logs, and outcomes.",headlessToolNames:[...V6]}],SE={read_files:"enableReadFiles",search_codebase:"enableSearch",run_commands:"enableBash",fetch_web_content:"enableWebFetch",apply_patch:"enableApplyPatch",editor:"enableEditor",skills:"enableSkills",ask_question:"enableAskQuestion"};function bE($){return $==="plan"||$==="yolo"?$:"act"}function iG($){let Z=bE($.mode),Q=Q1[j$({mode:Z})],J=X6($.providerId??"",$.modelId??"",Z,W6);return{mode:Z,flags:{...Q,...J,...typeof $.enableSpawnAgent==="boolean"?{enableSpawnAgent:$.enableSpawnAgent}:{},...typeof $.enableAgentTeams==="boolean"?{enableAgentTeams:$.enableAgentTeams}:{}}}}function lG($,Z){if(Z.disabledToolIds?.has($))return!1;let{flags:Q}=iG(Z);if($==="spawn_agent")return Q.enableSpawnAgent===!0;if($==="teams")return Q.enableAgentTeams===!0;if($==="editor")return Q.enableEditor===!0||Q.enableApplyPatch===!0;let J=SE[$];return J?Q[J]===!0:!1}function yE($,Z){if($.id==="editor"){let{flags:Q}=iG(Z),J=Q.enableApplyPatch===!0&&Q.enableEditor!==!0;return{...$,defaultEnabled:lG($.id,Z),headlessToolNames:[J?"apply_patch":"editor"]}}return{...$,defaultEnabled:lG($.id,Z)}}function l2($={}){return PE.map((Z)=>yE(Z,$))}function CQ($={}){return l2($).filter((Z)=>Z.defaultEnabled).map((Z)=>Z.id)}function wQ($){if(!$.enabled)return new Set;let Z=l2($.availabilityContext),Q=new Set(Z.map((J)=>J.id));if(!$.allowlist||$.allowlist.length===0)return new Set(Z.filter((J)=>J.defaultEnabled).map((J)=>J.id));for(let J of $.allowlist)if(!Q.has(J))throw Error(`Unknown tool "${J}". Available tools: ${Z.map((W)=>W.id).join(", ")}`);return new Set($.allowlist)}function _5($,Z={}){return l2(Z).filter((Q)=>$.has(Q.id)).flatMap((Q)=>Q.headlessToolNames)}function PQ($,Z={}){return _5($,Z)}import{getDefaultShell as kE}from"@cline/shared";function i2($={}){let{executorOptions:Z={},executors:Q,...J}=$,W=J.shell??Z.bash?.shell??kE(process.platform),X={...Z,bash:{...Z.bash,shell:W}},j={...J6(X),...Q??{}};return u$({...J,shell:W,executors:j})}import{mkdirSync as mE,writeFileSync as cE}from"node:fs";import{dirname as uE}from"node:path";import{normalizeUserInput as dE,stripModeNotices as pE}from"@cline/shared";import{nanoid as lE}from"nanoid";var nG={};w(nG,{sanitizeSessionToken:()=>r2,parseTeamTaskSubSessionId:()=>K6,parseSubSessionId:()=>A5,makeTeamTaskSubSessionId:()=>L5,makeSubSessionId:()=>H6,deriveSubsessionStatus:()=>O5});import{nanoid as xE}from"nanoid";function r2($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function H6($,Z){let Q=r2($),J=r2(Z),W=`${Q}__${J}`;return W.length>180?W.slice(0,180):W}function L5($,Z){let Q=r2($),J=r2(Z);return`${Q}__teamtask__${J}__${xE(6)}`}function K6($){let Q=$.indexOf("__teamtask__");if(Q<=0)return null;let J=$.slice(0,Q),W=$.slice(Q+12),X=W.lastIndexOf("__");if(X<=0)return null;let j=W.slice(0,X),Y=W.slice(X+2);if(!J||!j||!Y)return null;return{rootSessionId:J,agentId:j,teamTaskId:Y}}function A5($){if(K6($))return null;let Z="__",Q=$.indexOf(Z);if(Q<=0)return null;let J=$.slice(0,Q),W=$.slice(Q+Z.length);if(!J||!W)return null;return{rootSessionId:J,agentId:W}}function O5($){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 Q0}from"zod";var sG={};w(sG,{isTerminalSessionStatus:()=>oG,isNonTerminalSessionStatus:()=>_0,SessionSource:()=>L0,SESSION_STATUSES:()=>q5,NON_TERMINAL_SESSION_STATUSES:()=>aG});import{SESSION_STATUS_VALUES as gE}from"@cline/shared";var q5=gE,aG=["idle","running","pending"];function oG($){return!aG.includes($)}function _0($){return!oG($)}var L0={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 vE=Q0.enum(q5),n0=Q0.object({version:Q0.literal(1),session_id:Q0.string().min(1),source:Q0.string().min(1),pid:Q0.number().int(),started_at:Q0.string().min(1),ended_at:Q0.string().min(1).optional(),exit_code:Q0.number().int().nullable().optional(),status:vE,interactive:Q0.boolean(),provider:Q0.string().min(1),model:Q0.string().min(1),cwd:Q0.string().min(1),workspace_root:Q0.string().min(1),team_name:Q0.string().min(1).optional(),enable_tools:Q0.boolean(),enable_spawn:Q0.boolean(),enable_teams:Q0.boolean(),prompt:Q0.string().optional(),metadata:Q0.record(Q0.string(),Q0.unknown()).optional(),messages_path:Q0.string().min(1).optional(),compaction_path:Q0.string().min(1).optional()});function tG($){if(!$)return!1;return Object.values($).some((Z)=>typeof Z==="function")}function yW($,Z){let Q=[...$??[],...Z??[]];if(Q.length===0)return;let J=[],W=new Set;for(let X of Q){if(W.has(X.name))continue;W.add(X.name),J.push(X)}return J}function eG($){return JSON.stringify($,(Z,Q)=>{if(Q instanceof Error)return{name:Q.name,message:Q.message,stack:Q.stack};return Q})}function Y$($){return typeof $==="string"&&$.trim()?$.trim():void 0}function bW($,Z){let Q={...$};Q.id=Y$(Q.id)??lE();let J=Q.modelInfo&&typeof Q.modelInfo==="object"?{...Q.modelInfo}:void 0,W={id:Y$(J?.id)??Y$(Q.modelId)??Y$(Z?.id),provider:Y$(J?.provider)??Y$(Q.providerId)??Y$(Z?.provider),family:Y$(J?.family)??Y$(Z?.family)};if(delete Q.providerId,delete Q.modelId,W.id&&W.provider)Q.modelInfo={id:W.id,provider:W.provider,...W.family?{family:W.family}:{}};else delete Q.modelInfo;return Q}function SQ($){return $.map((Z)=>bW(Z))}function bQ($,Z,Q=[]){let J=$.map((V,B)=>{let H=Q[B],G=H?.role===V.role&&JSON.stringify(H.content)===JSON.stringify(V.content)?{...H,...V}:{...V};return bW(G)}),W=Q.length,X=[];for(let V=W;V<J.length;V+=1)if(J[V]?.role==="assistant")X.push(V);if(X.length===0){let V=[...J].reverse().findIndex((B)=>B.role==="assistant");if(V===-1)return J;X.push(J.length-1-V)}let j=X[X.length-1],Y=X.some((V)=>J[V]?.metrics);for(let V of X){let B=J[V],H=B.metrics;if(!H&&V===j&&!Y){let K=Z.usage;H={inputTokens:K.inputTokens,outputTokens:K.outputTokens,cacheReadTokens:K.cacheReadTokens??0,cacheWriteTokens:K.cacheWriteTokens??0,cost:K.totalCost}}J[V]={...bW(B,{id:Z.model.id,provider:Z.model.provider,family:Z.model.info?.family}),...H?{metrics:H}:{},ts:B.ts??Z.endedAt.getTime()}}return J}function z5($){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 iE=120;function n2($){let Z=$?.trim();return Z?Z.slice(0,iE):void 0}function kW($){let Z=pE(dE($??"")).trim();if(!Z)return;return n2(Z.split(`
503
- `)[0]?.trim())}function a$($){if(!$)return;let Z={...$},Q=n2(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 T5($){let Z=a$($.metadata)??{},Q=$.title!==void 0?n2($.title):kW($.prompt);if(Q)Z.title=Q;return Object.keys(Z).length>0?Z:void 0}function hW($){let Z=K6($);if(Z)return{agent:"teammate",sessionId:Z.rootSessionId,taskType:"team"};let Q=A5($);if(Q)return{agent:"subagent",sessionId:Q.rootSessionId,taskType:"subagent_task"};return{agent:"lead",sessionId:$}}function IW($){return{version:1,updated_at:$.updatedAt,agent:$.context.agent,sessionId:$.context.sessionId,...$.context.taskType?{taskType:$.context.taskType}:{},messages:SQ($.messages),...$.systemPrompt?{system_prompt:$.systemPrompt}:{}}}function $F($,Z,Q){mE(uE($),{recursive:!0}),cE($,`${JSON.stringify(IW({updatedAt:Z,context:Q,messages:[]}),null,2)}
504
- `,"utf8")}function ZF($,Z){return n0.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 QF($,Z,Q){let J=0;while(!0){let W=await $();if(W===void 0)return{updated:!1};let X=await Z(W);if(typeof X==="object"&&X!==null&&"updated"in X&&X.updated===!1){if(J+=1,J>=Q)return X;continue}return X}}C0();var JF={};w(JF,{summarizeUsageFromMessages:()=>F6,sumUsageTotals:()=>N5,getCurrentContextSize:()=>xW,createInitialAccumulatedUsage:()=>w0,accumulateUsageTotals:()=>f0});function w0(){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 N5($){let Z=w0();for(let Q of $)Z=f0(Z,Q);return Z}function G6($){return typeof $==="number"&&Number.isFinite($)?$:0}function F6($){let Z=w0();for(let Q of $){let J=Q.metrics;if(!J)continue;Z=f0(Z,{inputTokens:G6(J.inputTokens),outputTokens:G6(J.outputTokens),cacheReadTokens:G6(J.cacheReadTokens),cacheWriteTokens:G6(J.cacheWriteTokens),totalCost:G6(J.cost)})}return Z}function xW($){for(let Z=$.length-1;Z>=0;Z-=1){let Q=$[Z];if(Q?.role!=="assistant")continue;let J=G6(Q.metrics?.inputTokens);return J>0?J:void 0}return}function rE($){if(!$||typeof $!=="object")return;let Z=$,Q=Z.skill??Z.skill_name??Z.skillName;if(typeof Q!=="string")return;let J=Q.trim();return J.length>0?J:void 0}function gW($){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 V$($){let Z=$.agentId?.trim();if(!Z)return;let Q=$.parentAgentId?.trim()||void 0,J=$.teamRole,W="root";if(J==="teammate")W="team_teammate";else if(J==="lead")W="team_lead";else if(Q)W="subagent";return{agentId:Z,agentKind:W,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:J,teamAgentId:$.teamAgentId?.trim()||void 0}}function nE($){return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheWriteTokens:$.cacheWriteTokens,cacheReadTokens:$.cacheReadTokens,totalCost:$.cost}}function aE($){let Z=$.isPrimaryAgentEvent?[$.overrides?.agentId,$.eventMetadata.agentId,$.overrides?.teamAgentId]:[$.overrides?.teamAgentId,$.overrides?.agentId,$.eventMetadata.agentId,$.eventMetadata.conversationId];for(let Q of Z){let J=Q?.trim();if(J)return J}return $.isPrimaryAgentEvent?"root":"unknown"}function vW($,Z,Q){let{sessionId:J,config:W,liveSession:X,emit:j}=$,Y=W.telemetry,V=X?.runtime.teamRuntime,B=Q?.isPrimaryAgentEvent??!0,H=gW(Z),K=V$({agentId:Q?.agentId??H.agentId,conversationId:Q?.conversationId??H.conversationId,parentAgentId:Q?.parentAgentId??H.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 G=rE(Z.input);if(G)qZ(Y,{ulid:J,skillName:G,skillSource:"project",skillsAvailableGlobal:0,skillsAvailableProject:0,provider:W.providerId,modelId:W.modelId,...K})}if(Z.type==="content_end"&&Z.contentType==="tool"){let G=Z.toolName??"unknown",F=!Z.error;if(y8(Y,{ulid:J,tool:G,autoApproved:void 0,success:F,modelId:W.modelId,provider:W.providerId,...K}),!F&&(G==="editor"||G==="apply_patch"))zZ(Y,{ulid:J,modelId:W.modelId,provider:W.providerId,errorType:Z.error,...K})}if(Z.type==="notice"&&Z.reason==="api_error")z4(Y,{ulid:J,model:W.modelId,provider:W.providerId,errorMessage:Z.message,...K});if(Z.type==="error")z4(Y,{ulid:J,model:W.modelId,provider:W.providerId,errorMessage:Z.error?.message??"unknown error",...K});if(Z.type==="usage"&&X?.turnUsageBaseline){let G=nE(Z);if(B){X.turnPrimaryUsage=f0(X.turnPrimaryUsage??w0(),G);let U=f0(X.turnUsageBaseline,X.turnPrimaryUsage);$.usageBySession.set(J,U),b8(Y,{ulid:J,provider:W.providerId,model:W.modelId,source:"assistant",mode:W.mode,...K}),AZ(Y,{ulid:J,tokensIn:Z.inputTokens,tokensOut:Z.outputTokens,cacheWriteTokens:Z.cacheWriteTokens,cacheReadTokens:Z.cacheReadTokens,totalCost:Z.cost,model:W.modelId,...K})}else{let U=aE({isPrimaryAgentEvent:B,overrides:Q,eventMetadata:H}),_=X.turnUsageByAgent??new Map;X.turnUsageByAgent=_,_.set(U,f0(_.get(U)??w0(),G))}let F=f0(X.turnPrimaryUsage??w0(),N5(X.turnUsageByAgent?.values()??[]));$.aggregateUsageBySession.set(J,f0(X.turnAggregateUsageBaseline??X.turnUsageBaseline,F))}if(Z.type==="iteration_end"&&B)$.persistMessages(J,X?.agent.getMessages()??[],X?.config.systemPrompt);j({type:"agent_event",payload:{sessionId:J,event:Z,teamAgentId:Q?.teamAgentId,teamRole:Q!==void 0?Q.teamRole??(B?"lead":void 0):void 0}}),j({type:"chunk",payload:{sessionId:J,stream:"agent",chunk:eG(Z),ts:Date.now()}})}function B$($){return $.workspaceRoot??$.cwd}import{resolveProviderRequestHeaders as YP}from"@cline/llms";import{hasRuntimeConfigExtension as VP}from"@cline/shared";H1();import{existsSync as gQ,readFileSync as xC,statSync as gC}from"node:fs";import{basename as vC,dirname as IQ,join as vQ,resolve as xQ}from"node:path";import{discoverPluginModulePaths as mC,resolveConfiguredPluginModulePaths as MF,resolvePluginConfigSearchPaths as cC,SKILLS_CONFIG_DIRECTORY_NAME as uC}from"@cline/shared/storage";import{resolve as DC}from"node:path";import{normalizePluginManifest as _C}from"@cline/shared";import{existsSync as S0,readFileSync as D6}from"node:fs";import{builtinModules as oE,createRequire as dW}from"node:module";import{dirname as o$,extname as R5,isAbsolute as sE,resolve as o}from"node:path";import{fileURLToPath as XF}from"node:url";import{PLUGIN_FILE_EXTENSIONS as tE}from"@cline/shared";var jF=o$(XF(import.meta.url)),eE=dW(import.meta.url),$C=o(jF,"..","..","..","..",".."),mW=JC($C),ZC=["@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"],pW=new Set(oE.flatMap(($)=>[$,$.replace(/^node:/,"")])),f5=new Set(tE),QC=["development","node","import","require","default"];function JC($){let Z={},Q={"@cline/sdk":o($,"packages/sdk/src/index.ts"),"@cline/agents":o($,"packages/agents/src/index.ts"),"@cline/core":o($,"packages/core/src/index.ts"),"@cline/llms":o($,"packages/llms/src/index.ts"),"@cline/shared":o($,"packages/shared/src/index.ts"),"@cline/shared/storage":o($,"packages/shared/src/storage/index.ts"),"@cline/shared/db":o($,"packages/shared/src/db/index.ts")};for(let[J,W]of Object.entries(Q))if(S0(W))Z[J]=W;for(let J of["agents","core","llms","shared"]){let W=o($,"packages",J),X=o(W,"package.json");if(!S0(X))continue;try{let j=JSON.parse(D6(X,"utf8"));if(typeof j.name!=="string"||!j.exports)continue;if(typeof j.exports==="string"){let Y=o(W,j.exports);if(S0(Y))Z[j.name]=Y;continue}if(typeof j.exports!=="object")continue;for(let[Y,V]of Object.entries(j.exports)){let B=WC(W,V);if(!B)continue;let H=Y==="."?j.name:`${j.name}/${Y.replace(/^\.\//,"")}`;Z[H]=B}}catch{}}return Z}function WC($,Z){let Q=lW(Z);if(!Q)return null;let J=YF($,Q);for(let W of J)if(S0(W))return W;return null}function lW($,Z=new Set){if(typeof $==="string")return $;if(!$||typeof $!=="object")return null;if(Z.has($))return null;Z.add($);let Q=$;for(let J of QC){let W=lW(Q[J],Z);if(W)return W}return null}function YF($,Z){let Q=Z.replace(/^\.\//,""),J=[o($,Z)];if(Q.startsWith("dist/")){let W=Q.replace(/^dist\//,"src/").replace(/\.(mjs|cjs|js)$/,"");return[o($,`${W}.ts`),o($,`${W}.tsx`),o($,`${W}.mts`),o($,`${W}.cts`),...J]}return J}function XC($){return Object.fromEntries(Object.entries($).sort(([Z],[Q])=>Q.length-Z.length))}function yQ($){return!($.startsWith(".")||$.startsWith("/")||$.startsWith("file:")||$.startsWith("data:")||$.startsWith("http:")||$.startsWith("https:"))}function U6($){if($.startsWith("@")){let[Z,Q]=$.split("/",3);return Q?`${Z}/${Q}`:$}return $.split("/",1)[0]??$}function jC($){let Z=U6($);if($===Z)return".";return`.${$.slice(Z.length)}`}function VF($){return U6($).startsWith("@cline/")}function cW($,Z){let Q=U6(Z),J=o$($);while(!0){let W=o(J,"node_modules",Q);if(S0(W)||S0(o(W,"package.json")))return!0;let X=o(J,"..");if(X===J)return!1;J=X}}function WF($){return uW($)!==null}function uW($){try{return eE.resolve($)}catch{}return YC($)}function YC($){let Z=U6($),Q=BF(Z);if(!Q)return null;let J=o(Q,"package.json");try{let W=JSON.parse(D6(J,"utf8")),X=jC($),j=X==="."&&typeof W.exports==="string"?W.exports:W.exports&&typeof W.exports==="object"&&Object.hasOwn(W.exports,X)?W.exports[X]:void 0,Y=lW(j)??(X==="."&&typeof W.main==="string"?W.main:null);if(!Y)return null;let V=o(Q,Y),B=[V,...YF(Q,Y).filter((H)=>H!==V)];for(let H of B)if(S0(H))return H;return null}catch{return null}}function VC(){let $=[jF],Z=process.env.CLINE_WRAPPER_PATH?.trim();if(Z)$.push(o$(o$(Z)));let Q=process.execPath?.trim();if(Q)$.push(o$(Q));return[...new Set($.map((J)=>o(J)))]}function BC($,Z){let Q=$;while(!0){let J=o(Q,"package.json");if(S0(J))try{if(JSON.parse(D6(J,"utf8")).name===Z)return Q}catch{}let W=o(Q,"node_modules",Z,"package.json");if(S0(W))return o$(W);let X=o(Q,"..");if(X===Q)return null;Q=X}}function BF($){for(let Z of VC()){let Q=BC(Z,$);if(Q)return Q}return null}function HC($){let Q=o$($);for(let J=0;J<4;J++){let W=o(Q,"package.json");if(S0(W))try{let j=JSON.parse(D6(W,"utf8"));return j!=null&&typeof j==="object"&&"cline"in j}catch{return!1}let X=o(Q,"..");if(X===Q)return!1;Q=X}return!1}function HF($,Z){let Q=Z.startsWith("file:")?XF(Z):sE(Z)?Z:o(o$($),Z);if(S0(Q)&&f5.has(R5(Q)))return Q;for(let J of f5){let W=`${Q}${J}`;if(S0(W))return W}for(let J of f5){let W=o(Q,`index${J}`);if(S0(W))return W}return null}function KF($){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 J of Q)for(let W of $.matchAll(J)){let X=W[1];if(X)Z.add(X)}return[...Z]}function KC($){return R5($)!==".ts"}function GF($,Z,Q=new Set){if(Q.has($)||!S0($))return;if(Q.add($),!f5.has(R5($)))return;let J=D6($,"utf8"),W=KC($);for(let X of KF(J)){if(X.startsWith("node:")||pW.has(X))continue;if(yQ(X)){if(!W)continue;if(Object.hasOwn(mW,X)||Object.hasOwn(mW,U6(X))||cW($,X)||VF(X)&&WF(X)||Z&&WF(X))continue;throw Error(`Cannot find module '${U6(X)}'`)}let j=HF($,X);if(j)GF(j,Z,Q)}}function FF($,Z=new Set,Q=new Set){if(Z.has($)||!S0($))return Q;if(Z.add($),!f5.has(R5($)))return Q;let J=D6($,"utf8");for(let W of KF(J)){if(Q.add(W),yQ(W))continue;let X=HF($,W);if(X)FF(X,Z,Q)}return Q}function GC($,Z){let Q=dW($),J={},W=FF($),X=new Set(ZC);for(let[j,Y]of Object.entries(mW)){try{Q.resolve(j);continue}catch{}J[j]=Y}for(let j of W)if(yQ(j)&&(VF(j)||Z))X.add(j);for(let j of X){if(Object.hasOwn(J,j)||cW($,j))continue;let Y=uW(j);if(Y)J[j]=Y}if(!Z)return J;for(let j of W){if(!yQ(j)||Object.hasOwn(J,j)||cW($,j)||j.startsWith("node:")||pW.has(j))continue;let Y=uW(j);if(Y)J[j]=Y}return J}function FC($){let Z=R5($);return Z===".ts"||Z===".tsx"||Z===".mts"||Z===".cts"}var a2;function UC(){if(a2!==void 0)return a2;let $=BF("jiti");if(!$)return a2=null,null;let Z=o($,"dist","babel.cjs");if(!S0(Z))return a2=null,null;try{let J=dW(Z)(Z);a2=typeof J==="function"?J:null}catch{a2=null}return a2}async function UF($,Z={}){let Q=!HC($);GF($,Q);let J=GC($,Q),W=XC(J),X=await import("jiti"),j=typeof X==="function"?X:typeof X.default==="function"?X.default:void 0;if(!j)throw Error("Unable to load jiti");let Y=Object.entries(W).filter(([,K])=>FC(K)).map(([K])=>K),V=UC(),B=V?(K)=>V({...K,interopDefault:!0}):void 0;return await j($,{alias:W,cache:Z.useCache,requireCache:Z.useCache,esmResolve:!0,interopDefault:!1,nativeModules:[...pW],transformModules:Y,tryNative:!1,...B?{transform:B}:{}}).import($,{})}function DF($,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 _F($){return typeof $==="object"&&$!==null}function iW($){return Array.isArray($)&&$.every((Z)=>typeof Z==="string")}function LC($,Z){if(!_F($.manifest))throw Error(`Invalid plugin module at ${Z}: missing required "manifest"`);if(!iW($.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")&&!iW($.manifest.providerIds))throw Error(`Invalid plugin module at ${Z}: manifest.providerIds must be a string array when provided`);if(Object.hasOwn($.manifest,"modelIds")&&!iW($.manifest.modelIds))throw Error(`Invalid plugin module at ${Z}: manifest.modelIds must be a string array when provided`)}function AC($,Z){if(!_F($))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"`);LC($,Z)}async function M5($,Z={}){let Q=DC(Z.cwd??process.cwd(),$),J=await UF(Q,{useCache:Z.useCache}),W=Z.exportName??"plugin",X=J.default??J[W];AC(X,Q);let j=X,Y=j.setup,V=Y?(B,H)=>{let K={...Z.session,...H.session},G={...H,session:Object.keys(K).length>0?K:void 0,client:Z.client??H.client,user:Z.user??H.user,workspaceInfo:Z.workspaceInfo??H.workspaceInfo,automation:Z.automation??H.automation,logger:Z.logger??H.logger,telemetry:Z.telemetry??H.telemetry};return Y(B,G)}:void 0;return{...j,manifest:_C(j.manifest),setup:V}}async function kQ($,Z={}){return(await o2($,Z)).plugins}async function o2($,Z={}){let Q=[],J=[],W=new Map,X=0;for(let Y of $)try{let V=await M5(Y,Z);if(!DF(V.manifest,Z))continue;let B=W.get(V.name);if(B)J.push({type:"duplicate_plugin_override",pluginName:V.name,pluginPath:Y,overriddenPluginPath:B.pluginPath,message:`Plugin "${V.name}" from ${Y} overrides ${B.pluginPath}`});W.set(V.name,{plugin:V,pluginPath:Y,order:X++})}catch(V){let B=V instanceof Error?V.message:String(V);Q.push({pluginPath:Y,phase:"load",message:B,stack:V instanceof Error?V.stack:void 0})}let j=[...W.values()].sort((Y,V)=>Y.order-V.order);return{plugins:j.map((Y)=>Y.plugin),pluginPaths:j.map((Y)=>Y.pluginPath),failures:Q,warnings:J}}import{existsSync as tW}from"node:fs";import{createRequire as NF}from"node:module";import{dirname as hQ,join as L6}from"node:path";import{fileURLToPath as NC}from"node:url";var qF={};w(qF,{resolveSubprocessRuntimeExecutable:()=>nW,buildSubprocessSandboxCommand:()=>OF,SubprocessSandbox:()=>_6,CLINE_JS_RUNTIME_PATH_ENV:()=>AF});import{spawn as OC}from"node:child_process";import{basename as qC}from"node:path";import{augmentNodeCommandForDebug as zC,withResolvedClineBuildEnv as TC}from"@cline/shared";function rW($){if($ instanceof Error)return $;return Error(String($))}var AF="CLINE_JS_RUNTIME_PATH";function LF($){let Z=$?.trim();if(!Z)return!1;let Q=qC(Z).toLowerCase();return Q==="node"||Q==="node.exe"||Q==="bun"||Q==="bun.exe"}function nW($={}){let Z=$.env??process.env,Q=$.runtimeExecutable?.trim()||Z[AF]?.trim();if(Q)return Q;let J=$.execPath?.trim()||process.execPath;if(LF(J))return J;for(let W of[Z.BUN_EXEC_PATH,Z.npm_node_execpath,Z.NODE]){let X=W?.trim();if(X&&LF(X))return X}return"node"}function OF($,Z={}){let Q=nW({env:Z.env,execPath:Z.execPath,runtimeExecutable:Z.runtimeExecutable});return zC([Q,...$],{env:Z.env,execArgv:Z.execArgv,debugRole:Z.name==="plugin-sandbox"?"plugin-sandbox":"sandbox"})}class _6{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=OF($,{name:this.options.name,runtimeExecutable:this.options.runtimeExecutable}),Q=OC(Z[0]??nW(this.options),Z.slice(1),{stdio:["ignore","ignore","pipe","ipc"],env:TC(process.env),windowsHide:!0});this.process=Q;let J="",W=(X)=>{let j=J+X;J=j.length>4000?j.slice(-4000):j};Q.stderr?.setEncoding("utf8"),Q.stderr?.on("data",(X)=>{W(X)}),Q.on("message",(X)=>{this.onMessage(X)}),Q.on("error",(X)=>{this.failPending(Error(`${this.processLabel} process error: ${rW(X).message}`))}),Q.on("exit",(X,j)=>{this.process=null;let Y=J.trim();this.failPending(Error(`${this.options.name??"sandbox"} process exited (code=${String(X)}, signal=${String(j)})${Y?`: ${Y}`:""}`))})}async call($,Z,Q={}){this.start();let J=this.process;if(!J||J.exitCode!==null)throw Error(`${this.processLabel} process is not available`);let W=`req_${++this.requestCounter}`,X={type:"call",id:W,method:$,args:Z};return await new Promise((j,Y)=>{let V={resolve:(B)=>j(B),reject:Y};if((Q.timeoutMs??0)>0)V.timeout=setTimeout(()=>{this.clearPendingRequest(W),this.shutdown().catch(()=>{}),Y(Error(`${this.processLabel} call timed out after ${Q.timeoutMs}ms: ${$}`))},Q.timeoutMs);this.pending.set(W,V);try{J.send(X,(B)=>{if(!B)return;let H=this.clearPendingRequest(W);if(!H)return;H.reject(Error(`${this.processLabel} failed to send call "${$}": ${rW(B).message}`))})}catch(B){this.clearPendingRequest(W),Y(rW(B))}})}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 fC($){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 E5($){return($ instanceof Error?$.message:String($)).includes("Unknown sandbox plugin id:")}function RC(){return`@cline/cli-${process.platform==="win32"?"windows":process.platform}-${process.arch}`}function MC(){let $=process.env.CLINE_WRAPPER_PATH?.trim();if(!$)return;try{let Q=NF($).resolve(`${RC()}/package.json`),J=L6(hQ(Q),"extensions","plugin-sandbox-bootstrap.js");return tW(J)?J:void 0}catch{return}}function EC(){let $=process.execPath?.trim();if(!$)return;let Z=L6(hQ(hQ($)),"extensions","plugin-sandbox-bootstrap.js");return tW(Z)?Z:void 0}function CC(){let $=hQ(NC(import.meta.url)),Z=NF(import.meta.url),Q=[L6($,"plugin-sandbox-bootstrap.js"),L6($,"extensions","plugin-sandbox-bootstrap.js"),L6($,"agents","plugin-sandbox-bootstrap.js"),MC(),EC()];for(let X of Q.filter((j)=>typeof j==="string"))if(tW(X))return{file:X};let J=L6($,"plugin-sandbox-bootstrap.ts"),W="jiti";try{W=Z.resolve("jiti")}catch{}return{script:[`const createJiti = require(${JSON.stringify(W)});`,`const jiti = createJiti(${JSON.stringify(J)}, { cache: false, requireCache: false, esmResolve: true, interopDefault: false });`,`Promise.resolve(jiti.import(${JSON.stringify(J)}, {})).catch((error) => {`," console.error(error);"," process.exitCode = 1;","});"].join(`
505
- `)}}var aW=CC();function oW($,Z,Q){if(typeof $==="number"&&$>0)return $;if(Q){let J=process.env[Q];if(J){let W=Number(J);if(Number.isInteger(W)&&W>0)return W}}return Z}async function A6($){let Z=new _6({name:"plugin-sandbox",..."file"in aW?{bootstrapFile:aW.file}:{bootstrapScript:aW.script},onEvent:$.onEvent}),Q=oW($.importTimeoutMs,4000,"CLINE_PLUGIN_IMPORT_TIMEOUT_MS"),J=oW($.hookTimeoutMs,3000),W=oW($.contributionTimeoutMs,60000),X={pluginPaths:$.pluginPaths,exportName:$.exportName,providerId:$.providerId,modelId:$.modelId,cwd:$.cwd,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,loggerEnabled:Boolean($.logger),telemetryEnabled:$.telemetryAvailable===!0},j,Y=()=>{return j??=Z.call("initialize",X,{timeoutMs:Q}).finally(()=>{j=void 0}),j},V;try{V=await Z.call("initialize",X,{timeoutMs:Q})}catch(K){throw await Z.shutdown().catch(()=>{}),K}let B=V.plugins.map(fC);return{extensions:B.map((K)=>{let G={name:K.name,__clinePluginPath:K.pluginPath,manifest:K.manifest,setup:(F)=>{PC(F,Z,K,W,Y),SC(F,Z,K,W,Y),bC(F,Z,K,W,Y),kC(F,Z,K,W,Y),yC(F,K)}};return G.hooks=IC(Z,K,J,Y),G}),failures:V.failures,pluginPaths:B.map((K)=>K.pluginPath),shutdown:async()=>{await Z.shutdown()},warnings:V.warnings}}function wC($){let Z=$ instanceof Error?$.message:String($);return/cyclic|circular|bigint/i.test(Z)}function sW($,Z=new WeakSet){if($===null||typeof $!=="object")return typeof $==="function"||typeof $==="symbol"||typeof $==="bigint"?void 0:$;if(Z.has($))return;let Q=$;if(typeof Q.toJSON==="function")try{return Q.toJSON()}catch{return}Z.add($);try{if(Array.isArray($))return $.map((W)=>sW(W,Z)??null);let J={};for(let[W,X]of Object.entries($)){let j=sW(X,Z);if(j!==void 0)J[W]=j}return J}finally{Z.delete($)}}var zF=new Set;function fF($,Z,Q){let J=`${$}:${Z}`;if(zF.has(J))return;zF.add(J);let W=Q instanceof Error?Q.message:String(Q);console.warn(`[plugin-sandbox] ${$} "${Z}" received a payload that is not JSON-serializable (${W}); retrying with non-serializable values dropped. Host-only objects must not be placed on tool contexts or hook payloads.`)}async function RF($,Z,Q){try{return await $(Z)}catch(J){if(!wC(J))throw J;return Q(J),await $(sW(Z))}}function PC($,Z,Q,J,W){for(let X of Q.contributions?.tools??[]){let j={name:X.name,description:X.description??"",inputSchema:X.inputSchema??{type:"object",properties:{}},timeoutMs:X.timeoutMs,retryable:X.retryable,execute:async(Y,V)=>{return await RF(async(H)=>{let{input:K,context:G}=H;try{return await Z.call("executeTool",{pluginId:Q.pluginId,contributionId:X.id,input:K,context:G},{timeoutMs:J})}catch(F){if(!E5(F))throw F;return await W(),await Z.call("executeTool",{pluginId:Q.pluginId,contributionId:X.id,input:K,context:G},{timeoutMs:J})}},{input:Y,context:V},(H)=>fF("tool",X.name,H))}};$.registerTool(j)}}function SC($,Z,Q,J,W){for(let X of Q.contributions?.commands??[])$.registerCommand({name:X.name,description:X.description,handler:async(j)=>{try{return await Z.call("executeCommand",{pluginId:Q.pluginId,contributionId:X.id,input:j},{timeoutMs:J})}catch(Y){if(!E5(Y))throw Y;return await W(),await Z.call("executeCommand",{pluginId:Q.pluginId,contributionId:X.id,input:j},{timeoutMs:J})}}})}function bC($,Z,Q,J,W){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:J})}catch(j){if(!E5(j))throw j;return await W(),await Z.call("resolveRuleContent",{pluginId:Q.pluginId,contributionId:X.id},{timeoutMs:J})}}:X.content??""})}function yC($,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 kC($,Z,Q,J,W){for(let X of Q.contributions?.messageBuilders??[])$.registerMessageBuilder({name:X.name,async build(j){try{let Y=await Z.call("buildMessages",{pluginId:Q.pluginId,contributionId:X.id,messages:j},{timeoutMs:J});return TF(Y)?Y:j}catch(Y){if(!E5(Y))throw Y;await W();let V=await Z.call("buildMessages",{pluginId:Q.pluginId,contributionId:X.id,messages:j},{timeoutMs:J});return TF(V)?V:j}}})}function TF($){return Array.isArray($)&&$.every((Z)=>typeof Z==="object"&&Z!==null&&("role"in Z)&&("content"in Z))}function hC($,Z,Q,J,W){return async(X)=>{return await RF(async(Y)=>{try{return await $.call("invokeHook",{pluginId:Z,hookName:Q,payload:Y},{timeoutMs:J})}catch(V){if(!E5(V))throw V;return await W(),await $.call("invokeHook",{pluginId:Z,hookName:Q,payload:Y},{timeoutMs:J})}},X,(Y)=>fF("hook",Q,Y))}}function IC($,Z,Q,J){let W={};for(let X of Z.hooks??[])W[X]=hC($,Z.pluginId,X,Q,J);return Object.keys(W).length>0?W:void 0}var $X="package.json",dC="package";function C5($){return cC($)}function w5($){return mC($)}function pC($){try{return gQ($)&&gC($).isDirectory()}catch{return!1}}function ZX($){let Z=[],Q=new Set;for(let J of $){let W=xQ(J);if(Q.has(W))continue;Q.add(W),Z.push(W)}return Z}function EF($){let Z=ZX($);return kZ(Z)}function CF($){return C5($).flatMap((Z)=>w5(Z)).filter((Z)=>gQ(Z))}function lC($,Z){let Q=[];for(let J of $)try{Q.push(...MF([J],Z))}catch{}return Q}function eW($){return typeof $==="object"&&$!==null}function iC($){try{let Z=JSON.parse(xC(vQ($,$X),"utf8"));if(!eW(Z)||!eW(Z.cline))return[];let Q=Z.cline.plugins;if(!Array.isArray(Q))return[];let J=[];for(let W of Q){if(typeof W==="string"){J.push(W);continue}if(!eW(W)||!Array.isArray(W.paths))continue;for(let X of W.paths)if(typeof X==="string")J.push(X)}return J}catch{return[]}}function wF($,Z){let Q=xQ(Z);return iC($).some((J)=>xQ($,J)===Q)}function rC($,Z){return vC($)===dC&&gQ(vQ(IQ($),$X))&&wF(IQ($),Z)}function nC($){let Z=xQ($),Q=[],J=IQ(Z);while(!0){if(rC(J,Z)){Q.push(J);break}if(gQ(vQ(J,$X))){if(wF(J,Z))Q.push(J);break}let W=IQ(J);if(W===J)break;J=W}return ZX(Q)}function H$($={}){let Z=$.cwd??process.cwd(),Q=CF($.workspacePath),J=MF($.pluginPaths??[],Z);return EF([...J,...Q])}function aC($={}){let Z=$.cwd??process.cwd(),Q=CF($.workspacePath),J=lC($.pluginPaths??[],Z);return EF([...J,...Q])}function K$($){let Z=[];for(let Q of $)for(let J of nC(Q)){let W=vQ(J,uC);if(pC(W))Z.push(W)}return ZX(Z)}function PF($={}){return K$(aC($))}async function O6($={}){let Z=H$($);if(Z.length===0)return{extensions:[],failures:[],warnings:[],pluginPaths:[]};if($.mode==="in_process"){let J=await o2(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:J.plugins,failures:J.failures,pluginPaths:J.pluginPaths,warnings:J.warnings}}let Q=await A6({pluginPaths:Z,exportName:$.exportName,importTimeoutMs:$.importTimeoutMs,hookTimeoutMs:$.hookTimeoutMs,contributionTimeoutMs:$.contributionTimeoutMs,onEvent:$.onEvent,telemetryAvailable:Boolean($.telemetry),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 oC}from"node:child_process";import{promisify as sC}from"node:util";var tC=sC(oC),SF="cline checkpoint session=";function bF($){return $.includes(SF)}function QX($,Z){$?.log(Z,{severity:"warn"})}function eC($){let Z=$?.checkpoint;if(!Z||typeof Z!=="object"||Array.isArray(Z))return;let Q=Z;if(!Q.latest||!Array.isArray(Q.history))return;let J=Q.latest,W=Q.history.filter((X)=>!!X&&typeof X==="object"&&typeof X.ref==="string"&&typeof X.createdAt==="number"&&typeof X.runCount==="number");if(typeof J.ref!=="string"||typeof J.createdAt!=="number"||typeof J.runCount!=="number")return;return{latest:J,history:W}}async function s2($,Z){let Q=await tC("git",["-C",$,...Z],{windowsHide:!0});return{stdout:Q.stdout.trim(),stderr:Q.stderr.trim()}}async function JX($,Z){if(!$)return;let Q=`refs/cline/checkpoints/${Z}/`;try{let{stdout:J}=await s2($,["for-each-ref","--format=%(refname)",Q]),W=J.trim().split(`
506
- `).filter(Boolean);await Promise.allSettled(W.map((X)=>s2($,["update-ref","-d",X])))}catch{}}async function yF($,Z,Q){if(!$||Q.length===0)return;await Promise.allSettled(Q.map((J)=>s2($,["update-ref",`refs/cline/checkpoints/${Z}/${J.runCount}`,J.ref])))}function $w($,Z){let Q=$.findIndex((J)=>J.runCount===Z.runCount);if(Q<0)return[...$,Z];return $.map((J,W)=>W===Q?Z:J)}function kF($){let Z,Q,J=async()=>{if(Z!==void 0)return Z;try{Z=(await s2($.cwd,["rev-parse","--is-inside-work-tree"])).stdout==="true"}catch{Z=!1}return Z},W=async(X)=>{if($.createCheckpoint)return await $.createCheckpoint({cwd:$.cwd,sessionId:$.sessionId,runCount:X});if(!await J())return;let j=async(H)=>{try{let G=(await s2($.cwd,["rev-parse","HEAD"])).stdout.trim();if(!G)return;return{ref:G,createdAt:Date.now(),runCount:X,kind:"commit"}}catch(K){QX($.logger,`${H}: ${K instanceof Error?K.message:String(K)}`);return}},Y=`${SF}${$.sessionId} run=${X}`,V="";try{V=(await s2($.cwd,["stash","create",Y])).stdout.trim()}catch(H){return QX($.logger,`Checkpoint snapshot failed: ${H instanceof Error?H.message:String(H)}`),j("Checkpoint HEAD fallback failed")}if(!V)return j("Checkpoint HEAD fallback failed");let B=`refs/cline/checkpoints/${$.sessionId}/${X}`;try{await s2($.cwd,["update-ref",B,V])}catch(H){QX($.logger,`Checkpoint store failed: ${H instanceof Error?H.message:String(H)}`);return}return{ref:V,createdAt:Date.now(),runCount:X,kind:"stash"}};return{beforeRun:async({snapshot:X})=>{if(X.parentAgentId==null)Q=X.messages.length;return},beforeModel:async({snapshot:X})=>{if(X.parentAgentId!=null||X.iteration!==1)return;let j=X.messages.slice(Q??Math.max(0,X.messages.length-1));if(Q=void 0,g$(j)<1)return;let Y=g$(X.messages);if(Y<1)return;let V=await W(Y);if(!V)return;let B=await $.readSessionMetadata(),H=eC(B);if(H?.latest.ref===V.ref)return;let K=$w(H?.history??[],V);await $.writeSessionMetadata({...B??{},checkpoint:{latest:V,history:K}});return}}}import{appendFileSync as Uw,readFileSync as Dw}from"node:fs";import{join as _w}from"node:path";import{augmentNodeCommandForDebug as Lw}from"@cline/shared";import{ensureHookLogDir as IF}from"@cline/shared/storage";function q6($,Z){if(!Z)return;return{name:$,manifest:{capabilities:["hooks"]},hooks:Z}}import{existsSync as Zw,readdirSync as Qw}from"node:fs";import{basename as Jw,extname as Ww,join as Xw}from"node:path";import{HOOKS_CONFIG_DIRECTORY_NAME as mQ,resolveHooksConfigSearchPaths as jw}from"@cline/shared/storage";function P5($){return jw($)}var z6;((H)=>{H.TaskStart="TaskStart";H.TaskResume="TaskResume";H.TaskCancel="TaskCancel";H.TaskComplete="TaskComplete";H.TaskError="TaskError";H.PreToolUse="PreToolUse";H.PostToolUse="PostToolUse";H.UserPromptSubmit="UserPromptSubmit";H.PreCompact="PreCompact";H.SessionShutdown="SessionShutdown"})(z6||={});var S5={["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"},Yw=new Map(Object.values(z6).map(($)=>[$.toLowerCase(),$])),Vw=new Set(["",".sh",".bash",".zsh",".js",".mjs",".cjs",".ts",".mts",".cts",".py",".ps1"]);function b5($){let Z=Ww($).toLowerCase();if(!Vw.has(Z))return;let Q=Jw($,Z).trim().toLowerCase();return Yw.get(Q)}function s$($){let Z=[],Q=new Set,J=P5($).filter((W)=>Zw(W));for(let W of J)try{for(let X of Qw(W,{withFileTypes:!0})){if(!X.isFile())continue;let j=b5(X.name);if(!j)continue;let Y=Xw(W,X.name);if(Q.has(Y))continue;Q.add(Y),Z.push({fileName:j,hookEventName:S5[j],path:Y})}}catch{}return Z.sort((W,X)=>W.path.localeCompare(X.path))}import{spawn as Bw}from"node:child_process";import{augmentNodeCommandForDebug as Hw,withResolvedClineBuildEnv as Kw}from"@cline/shared";function Gw($){let Z=$.trim();if(!Z)return{};let J=Z.split(`
507
- `).map((X)=>X.trim()).filter(Boolean).filter((X)=>X.startsWith("HOOK_CONTROL\t")).map((X)=>X.slice(13)),W=J.length>0?J[J.length-1]:Z;try{return{parsedJson:JSON.parse(W)}}catch(X){return{parseError:X instanceof Error?X.message:"Failed to parse subprocess stdout JSON"}}}function hF($,Z){let Q=$ instanceof Error?$:Error(String($)),J=Q,W=Z.join(" ");if(J.code==="EACCES"){let j=Error(`Failed to execute hook command "${W}" (EACCES). Configure hooks with an explicit interpreter/command array (for example: ["bash", "/path/to/script"]) or make the script executable with a valid shebang.`);return j.code=J.code,j}let X=Error(`Failed to execute hook command "${W}": ${Q.message}`);return X.code=J.code,X}async function Fw($,Z){let Q=$.stdin;if(!Q)throw Error("runSubprocessEvent failed to create stdin pipe");await new Promise((J,W)=>{let X=!1,j=(B)=>{if(X)return;X=!0,B()},Y=(B)=>{let H=B.code;return H==="EPIPE"||H==="EOF"||H==="ERR_STREAM_DESTROYED"},V=(B)=>{if(Y(B)){j(J);return}j(()=>W(B))};Q.on("error",V),Q.once("close",()=>Q.off("error",V)),Q.end(Z,(B)=>{if(B){if(Y(B)){j(J);return}j(()=>W(B));return}j(J)})})}async function G$($,Z){let Q=Hw(Z.command,{env:Z.env,debugRole:"hook"});if(!Array.isArray(Q)||Q.length===0)throw Error("runSubprocessEvent requires a non-empty command");let J=!!Z.detached,W=Bw(Q[0],Q.slice(1),{cwd:Z.cwd,env:Kw(Z.env),stdio:J?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:J,windowsHide:!0}),X="",j="",Y=!1,V;if(!J&&(!W.stdout||!W.stderr))throw W.kill("SIGKILL"),Error("runSubprocessEvent failed to create stdout/stderr pipes");W.stdout?.on("data",(K)=>{X+=K.toString()}),W.stderr?.on("data",(K)=>{j+=K.toString()});let B=new Promise((K,G)=>{W.once("spawn",()=>{try{Z.onSpawn?.({command:Q,pid:W.pid??void 0,detached:J})}catch{}K()}),W.once("error",(F)=>G(hF(F,Q)))}),H=new Promise((K,G)=>{W.once("error",(F)=>{if(V)clearTimeout(V);G(hF(F,Q))}),W.once("close",(F)=>{if(V)clearTimeout(V);let{parsedJson:U,parseError:_}=Gw(X);K({exitCode:F,stdout:X,stderr:j,parsedJson:U,parseError:_,timedOut:Y})})});if(J)H.catch(()=>{return});if(!J&&(Z.timeoutMs??0)>0)V=setTimeout(()=>{Y=!0,W.kill("SIGKILL")},Z.timeoutMs);if(await Promise.race([Promise.all([B,Fw(W,JSON.stringify($))]),H]),J){W.unref();return}return await H}function cQ($){if(!$||typeof $!=="object")return{};let Z={};for(let[Q,J]of Object.entries($))Z[Q]=typeof J==="string"?J:JSON.stringify(J);return Z}function y5($,Z,Q){let J=Q instanceof Error?`: ${Q.message}`:"",W=`${Z}${J}`;if($){try{$.log(W,{severity:"warn",...Q!==void 0?{error:Q}:{}})}catch{}return}console.warn(W)}function Aw($,Z){if(!Z)return $;if(!$)return{...Z};let Q=[$.context,Z.context].filter((W)=>typeof W==="string"&&W.length>0).join(`
508
- `),J=[...$.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:J.length>0?J:void 0}}function Ow($){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 WX($){let Z=String($??"").toLowerCase();return Z.includes("cancel")||Z.includes("abort")||Z.includes("interrupt")}function b0($,Z){let Q=process.env.CLINE_USER_ID?.trim()||process.env.USER?.trim()||"unknown",J={rootSessionId:Z.rootSessionId||$.conversationId};return{clineVersion:process.env.CLINE_VERSION?.trim()||"",timestamp:new Date().toISOString(),taskId:$.conversationId,sessionContext:J,workspaceRoots:Z.workspacePath?[Z.workspacePath]:[],workspaceInfo:Z.workspaceInfo,userId:Q,agent_id:$.agentId,parent_agent_id:$.parentAgentId}}async function XX($,Z){if(Z.command.length===0)throw Error("runHookCommand requires non-empty command");try{return await G$($,Z)}catch(Q){let J=Tw(Z.command,process.platform,Q);if(!J)throw Q;return await G$($,{...Z,command:J})}}function qw($){try{let Q=Dw($,"utf8").split(/\r?\n/,1)[0]?.trim();if(!Q?.startsWith("#!"))return;let J=Q.slice(2).trim();if(!J)return;let W=J.split(/\s+/).filter(Boolean);return W.length>0?W:void 0}catch{return}}function zw($){return!!($&&typeof $==="object"&&("code"in $)&&$.code==="ENOENT")}function Tw($,Z=process.platform,Q){if(Z!=="win32"||!zw(Q))return;if($[0]!=="py"||$[1]!=="-3")return;return["python",...$.slice(2)]}function xF($){if($.length===0)return;let[Z,...Q]=$,J=Z.replace(/\\/g,"/").toLowerCase(),W=J.split("/").at(-1)??J;if(W==="env")return xF(Q);if(W==="bash"||W==="sh"||W==="zsh")return[W,...Q];if(W==="python3"||W==="python")return process.platform==="win32"?["py","-3",...Q]:[W,...Q];return $}function Nw($){let Z=qw($);if(Z&&Z.length>0)return[...xF(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 Lw(["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 fw($){let Z={};for(let Q of s$($)){if(!Q.hookEventName)continue;let J=Q.hookEventName,W=Z[J]??[];W.push(Nw(Q.path)),Z[J]=W}return Z}async function Rw($){let Z;for(let Q of $.commands){let J=Q.join(" ");try{let W=await XX($.payload,{command:Q,cwd:$.cwd,env:process.env,detached:!1,timeoutMs:$.timeoutMs});if(W?.timedOut){y5($.logger,`hook command timed out: ${J}`);continue}if(W?.parseError){y5($.logger,`hook command returned invalid JSON control output: ${J} (${W.parseError})`);continue}Z=Aw(Z,Ow(W?.parsedJson))}catch(W){y5($.logger,`hook command failed: ${J}`,W)}}return Z}async function t2($){if($.detached){for(let Z of $.commands){let Q=Z.join(" ");XX($.payload,{command:Z,cwd:$.cwd,env:process.env,detached:!0}).catch((J)=>{y5($.logger,`hook command failed: ${Q}`,J)})}return}await Promise.all($.commands.map(async(Z)=>{let Q=Z.join(" ");try{await XX($.payload,{command:Z,cwd:$.cwd,env:process.env,detached:$.detached})}catch(J){y5($.logger,`hook command failed: ${Q}`,J)}}))}function t$($){return{agentId:$.agentId,conversationId:$.conversationId??$.runId??$.agentId,parentAgentId:$.parentAgentId??null}}function jX($,Z){return{...t$($.snapshot),userMessage:Z}}function gF($){return{...t$($.snapshot),iteration:$.snapshot.iteration,call:{id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:$.input}}}function vF($){return{...t$($.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 mF($){return $.filter((Z)=>Z.type==="text"&&typeof Z.text==="string").map((Z)=>Z.text).join("")}function Mw($){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 T6($){let Z={cwd:$.workspacePath,workspacePath:$.workspacePath,rootSessionId:$.rootSessionId,workspaceInfo:$.workspaceInfo},Q=(J)=>{let W=`${JSON.stringify({ts:new Date().toISOString(),...J})}
509
- `,j=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??_w(IF(),"hooks.jsonl");IF(j),Uw(j,W,"utf8")};return{beforeRun:async(J)=>{let W=jX(J,"");Q({...b0(W,Z),hookName:"agent_start",taskStart:{taskMetadata:{}}});return},beforeTool:async(J)=>{let W=gF(J);Q({...b0(W,Z),hookName:"tool_call",iteration:W.iteration,tool_call:{id:W.call.id,name:W.call.name,input:W.call.input},preToolUse:{toolName:W.call.name,parameters:cQ(W.call.input)}});return},afterTool:async(J)=>{let W=vF(J);Q({...b0(W,Z),hookName:"tool_result",iteration:W.iteration,tool_result:W.record,postToolUse:{toolName:W.record.name,parameters:cQ(W.record.input),result:typeof W.record.output==="string"?W.record.output:JSON.stringify(W.record.output),success:!W.record.error,executionTimeMs:W.record.durationMs}});return},afterRun:async({snapshot:J,result:W})=>{let X=t$(J);if(W.status==="completed"){Q({...b0(X,Z),hookName:"agent_end",iteration:W.iterations,turn:{outputText:W.outputText,status:W.status},taskComplete:{taskMetadata:{}}});return}if(W.status==="aborted"||WX(W.error?.message)){Q({...b0(X,Z),hookName:"agent_abort",reason:W.error?.message,taskCancel:{taskMetadata:{}}});return}if(W.error)Q({...b0(X,Z),hookName:"agent_error",iteration:W.iterations,error:{name:W.error.name,message:W.error.message,stack:W.error.stack}})},onEvent:async(J)=>{if(J.type!=="message-added"||J.message.role!=="user")return;let W=jX({snapshot:J.snapshot},mF(J.message.content));Q({...b0(W,Z),hookName:"prompt_submit",userPromptSubmit:{prompt:W.userMessage,attachments:[]}})}}}function k5($){let Z=fw($.workspacePath);if(!Object.values(Z).some((K)=>K.length>0))return;let J=async(K,G)=>{let F=Z[G]??[];if(F.length===0)return;await t2({commands:F,cwd:$.cwd,logger:$.logger,detached:$.detachAsyncHooks??!0,payload:G==="agent_resume"?{...b0(K,$),hookName:G,taskResume:{taskMetadata:{},previousState:{}}}:{...b0(K,$),hookName:G,taskStart:{taskMetadata:{}}}})},W=async(K)=>{let G=Z.prompt_submit??[];if(G.length>0)await t2({commands:G,cwd:$.cwd,logger:$.logger,detached:$.detachAsyncHooks??!0,payload:{...b0(K,$),hookName:"prompt_submit",userPromptSubmit:{prompt:K.userMessage,attachments:[]}}})},X=async(K)=>{let G=Z.tool_call??[];if(G.length===0)return;return Rw({commands:G,cwd:$.cwd,logger:$.logger,timeoutMs:$.toolCallTimeoutMs??120000,payload:{...b0(K,$),hookName:"tool_call",iteration:K.iteration,tool_call:{id:K.call.id,name:K.call.name,input:K.call.input},preToolUse:{toolName:K.call.name,parameters:cQ(K.call.input)}}})},j=async(K)=>{let G=Z.tool_result??[];if(G.length===0)return;await t2({commands:G,cwd:$.cwd,logger:$.logger,detached:$.detachAsyncHooks??!0,payload:{...b0(K,$),hookName:"tool_result",iteration:K.iteration,tool_result:K.record,postToolUse:{toolName:K.record.name,parameters:cQ(K.record.input),result:typeof K.record.output==="string"?K.record.output:JSON.stringify(K.record.output),success:!K.record.error,executionTimeMs:K.record.durationMs}}})},Y=async(K)=>{let G=Z.agent_end??[];if(G.length===0)return;await t2({commands:G,cwd:$.cwd,logger:$.logger,detached:$.detachAsyncHooks??!0,payload:{...b0(K,$),hookName:"agent_end",iteration:K.iteration,turn:K.turn,taskComplete:{taskMetadata:{}}}})},V=async(K)=>{let G=Z.agent_error??[];if(G.length===0)return;await t2({commands:G,cwd:$.cwd,logger:$.logger,detached:$.detachAsyncHooks??!0,payload:{...b0(K,$),hookName:"agent_error",iteration:K.iteration,error:{name:K.error.name,message:K.error.message,stack:K.error.stack}}})},B=async(K)=>{if(WX(K.reason)){let F=Z.agent_abort??[];if(F.length>0)await t2({commands:F,cwd:$.cwd,logger:$.logger,detached:$.detachAsyncHooks??!0,payload:{...b0(K,$),hookName:"agent_abort",reason:K.reason,taskCancel:{taskMetadata:{}}}})}let G=Z.session_shutdown??[];if(G.length===0)return;await t2({commands:G,cwd:$.cwd,logger:$.logger,detached:$.detachAsyncHooks??!0,payload:{...b0(K,$),hookName:"session_shutdown",reason:K.reason}})},H={};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)H.beforeRun=async(K)=>{let G=process.env.CLINE_HOOK_AGENT_RESUME==="1"?"agent_resume":"agent_start";await J(t$(K.snapshot),G);return};if((Z.prompt_submit?.length??0)>0)H.onEvent=async(K)=>{if(K.type!=="message-added"||K.message.role!=="user")return;await W(jX({snapshot:K.snapshot},mF(K.message.content)))}}if((Z.tool_call?.length??0)>0)H.beforeTool=async(K)=>{let G=await X(gF(K));return Mw(G)};if((Z.tool_result?.length??0)>0)H.afterTool=async(K)=>{await j(vF(K));return};if((Z.agent_end?.length??0)>0)H.afterRun=async({snapshot:K,result:G})=>{if(G.status!=="completed")return;await Y({...t$(K),iteration:G.iterations,turn:{outputText:G.outputText,status:G.status}})};if((Z.agent_error?.length??0)>0||(Z.agent_abort?.length??0)>0||(Z.session_shutdown?.length??0)>0){let K=H.afterRun;H.afterRun=async(G)=>{await K?.(G);let{snapshot:F,result:U}=G;if(U.status==="aborted"||WX(U.error?.message)){await B({...t$(F),reason:U.error?.message});return}if(U.error)await V({...t$(F),iteration:U.iterations,error:U.error})}}return H}function N6($){return q6("core.hook_config_files",k5($))}function e2($,Z){let Q=$.map((J)=>J[Z]).filter((J)=>typeof J==="function");if(Q.length===0)return;return async(J)=>{let W;for(let X of Q){let j=await X(J);if(!j||typeof j!=="object")continue;let Y=j;W={...W??{},...Y,stop:W?.stop===!0||Y.stop===!0?!0:Y.stop,options:W?.options||Y.options?{...W?.options??{},...Y.options??{}}:void 0}}return W}}function $8($){let Z=$.filter((Q)=>Q!==void 0);if(Z.length===0)return;return{beforeRun:e2(Z,"beforeRun"),afterRun:e2(Z,"afterRun"),beforeModel:e2(Z,"beforeModel"),afterModel:e2(Z,"afterModel"),beforeTool:e2(Z,"beforeTool"),afterTool:e2(Z,"afterTool"),onEvent:e2(Z,"onEvent")}}var cF={};w(cF,{normalizeRuntimeCapabilities:()=>y0});function y0(...$){let Z,Q;for(let W of $){if(!W)continue;if(W.toolExecutors)Z={...Z??{},...W.toolExecutors};if(W.requestToolApproval)Q=W.requestToolApproval}let J=Z&&Object.keys(Z).length>0;if(!J&&!Q)return;return{...J?{toolExecutors:Z}:{},...Q?{requestToolApproval:Q}:{}}}var oF={};w(oF,{toProviderConfig:()=>J1,emptyStoredProviderSettings:()=>Z2,StoredProviderSettingsSchema:()=>E6,StoredProviderSettingsEntrySchema:()=>H7,ProviderSettingsSchemaTyped:()=>M6});import{z as $2}from"zod";var aF={};w(aF,{toProviderConfig:()=>J1,safeParseSettings:()=>B7,safeCreateProviderConfig:()=>_X,parseSettings:()=>V7,normalizeProviderId:()=>R6,isBuiltInProviderId:()=>UX,createProviderConfig:()=>DX,SapSettingsSchema:()=>X7,ReasoningSettingsSchema:()=>Z7,ProviderSettingsSchema:()=>e$,ProviderProtocolSchema:()=>tQ,ProviderIdSchema:()=>v5,ProviderClientSchema:()=>eQ,OcaSettingsSchema:()=>j7,ModelCatalogSettingsSchema:()=>Y7,GcpSettingsSchema:()=>J7,BUILT_IN_PROVIDER_IDS:()=>FX,BUILT_IN_PROVIDER:()=>g5,AzureSettingsSchema:()=>W7,AwsSettingsSchema:()=>Q7,AuthSettingsSchema:()=>$7});import*as m0 from"@cline/llms";import{ReasoningLevelSchema as ZP}from"@cline/shared";import{z as P}from"zod";var nF={};w(nF,{resolveProviderConfig:()=>x5,getProviderConfig:()=>sQ,getLiveModelsCatalog:()=>f6,clearPublicModelsCatalogCache:()=>aw,clearPrivateModelsCatalogCache:()=>GX,clearLiveModelsCatalogCache:()=>KX,OPENAI_COMPATIBLE_PROVIDERS:()=>I5,DEFAULT_MODELS_CATALOG_URL:()=>rQ});import*as Z0 from"@cline/llms";function YX($){if(!Array.isArray($))return[];return $.map((Z)=>{if(typeof Z==="string")return Z.trim();if(Z&&typeof Z==="object"){let Q=Z;for(let J of[Q.id,Q.name,Q.model])if(typeof J==="string"&&J.trim())return J.trim()}return""}).filter((Z)=>Z.length>0)}function Ew($,Z){let Q=YX($);if(Q.length>0)return Q;if(!$||typeof $!=="object")return[];let J=$,W=YX(J.data??J.models);if(W.length>0)return W;if(J.models&&typeof J.models==="object"&&!Array.isArray(J.models)){let j=Object.keys(J.models).filter((Y)=>Y.trim().length>0);if(j.length>0)return j}let X=J.providers?.[Z];if(X&&typeof X==="object"){let Y=YX(X.models??X);if(Y.length>0)return Y}return[]}async function uQ($,Z){let Q=await fetch($,{method:"GET"});if(!Q.ok)throw Error(`failed to fetch models from ${$}: HTTP ${Q.status}`);return Ew(await Q.json(),Z)}function uF($){return $.replace(/\/+$/,"")}function dQ($,Z,Q){let J=Q?.trim();if(!J)return;let W=$?.trim();if(!W||!Z?.trim())return J;try{let X=new URL(J),j=new URL(Z),Y=new URL(W);if(X.origin!==j.origin)return J;let V=uF(j.pathname),B=uF(Y.pathname);if(V&&X.pathname.startsWith(`${V}/`)){let H=X.pathname.slice(V.length);Y.pathname=`${B}${H}`}else Y.pathname=X.pathname;return Y.search=X.search,Y.hash=X.hash,Y.toString()}catch{return J}}function Cw($){return Object.fromEntries(Object.entries($).map(([Z,Q])=>[Z,{...Q}]))}function ww($){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 Pw=Object.values(Z0.MODEL_COLLECTIONS_BY_PROVIDER_ID).map(($)=>({id:$.provider.id,baseUrl:$.provider.baseUrl??"",modelsSourceUrl:$.provider.modelsSourceUrl,modelId:$.provider.defaultModelId,knownModels:Cw($.models),capabilities:$.provider.capabilities?[...$.provider.capabilities]:void 0,env:$.provider.env?[...$.provider.env]:void 0,client:$.provider.client,protocol:$.provider.protocol})),pF=Object.fromEntries(Pw.map(($)=>[$.id,$]));function Sw($){return pF[$]}function bw(){return Object.fromEntries(Object.entries(pF).filter(([,$])=>ww($)))}function lF($=[]){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 rQ="https://models.dev/api.json",yw=600000,iF=300000,kw=5000,iQ=new Map,h5=new Map,VX=new Map,pQ=new Map;async function hw(){return Z0.getGeneratedProviderModels()}async function Iw($,Z={},Q={},J={},W={},X={}){if($==="litellm")return Z0.sortModelsByReleaseDate(J);let j=await hw(),Y=Z0.resolveProviderModelCatalogKeys($),V=Object.assign({},...Y.map((K)=>j[K]??{}));if(Boolean(Z0.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl))return Z0.sortModelsByReleaseDate({...W,...X});if($==="openai-codex")return Z0.sortModelsByReleaseDate({...Z,...Z0.filterOpenAICodexModels(Q),...W,...X});if($==="cline-pass"&&Object.keys(Q).length>0)return{...Q,...X};let H=Z0.sortModelsByReleaseDate({...V,...Z,...Q,...J,...W});if($==="cline")return Z0.sortModelsByReleaseDate({...Z0.preferCanonicalModelIds(H,Z0.VERCEL_OPENROUTER_MODEL_ID_ALIAS_RULES),...X});return Z0.sortModelsByReleaseDate({...H,...X})}function xw($,Z){let Q=Z0.resolveProviderModelCatalogKeys($);return Object.assign({},...Q.map((J)=>Z[J]??{}))}function nQ($){let Z=$?.trim();return Z&&Z.length>0?Z:""}function HX($){let Z=$.apiKey?.trim()||$.accessToken?.trim();return Z&&Z.length>0?Z:void 0}function gw($){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 vw($,Z){return`${$}:${nQ(Z.baseUrl)}:${gw(HX(Z)??"")}`}async function aQ($,Z,Q=kw){let J=new AbortController,W=setTimeout(()=>J.abort(),Q);try{return await fetch($,{...Z,signal:J.signal})}finally{clearTimeout(W)}}function Z8($,Z,Q){if(Q&&!$.includes(Z))$.push(Z)}function oQ($,Z){let Q=["streaming","tools"];return Z8(Q,"images",Boolean(Z.supportsImages)),Z8(Q,"prompt-cache",Boolean(Z.supportsPromptCache)),Z8(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 mw($,Z){let Q=await aQ("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 W=(await Q.json())?.data??[],X={};for(let j of W){let Y=j.id?.trim();if(!Y)continue;if(Y.includes("whisper")||Y.includes("tts")||Y.includes("embedding"))continue;let V=j.supported_features??[];X[Y]=oQ(Y,{name:Y,contextWindow:j.context_length,maxInputTokens:j.context_length,maxTokens:j.max_completion_tokens,supportsReasoning:V.includes("reasoning")||V.includes("reasoning_effort"),supportsImages:!1})}return X}function dF($){if(typeof $==="number")return Number.isFinite($)?$:void 0;if(typeof $==="string"){let Z=Number($);return Number.isFinite(Z)?Z:void 0}return}async function cw($,Z){let Q=await aQ("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 W=(await Q.json())?.data??[],X={};for(let j of W){let Y=j.id?.trim();if(!Y)continue;X[Y]=oQ(Y,{name:Y,maxInputTokens:128000,supportsImages:!0,supportsPromptCache:!0})}return X}async function uw($,Z){let J=`${(nQ($.baseUrl)||"https://inference.poolside.ai/v1").replace(/\/+$/,"")}/models`,W=await aQ(J,{method:"GET",headers:{Authorization:`Bearer ${Z}`,accept:"application/json"}});if(!W.ok)throw Error(`Poolside model refresh failed: HTTP ${W.status}`);let j=(await W.json())?.data??[],Y={};for(let V of j){let B=V.id?.trim();if(!B)continue;let H=V.supported_features??[],K=V.supported_sampling_parameters??[],G=V.input_modalities??[],F=["streaming"];Z8(F,"tools",H.includes("tools")),Z8(F,"reasoning",H.includes("reasoning")),Z8(F,"temperature",K.includes("temperature")),Z8(F,"images",G.includes("image"));let U={input:dF(V.pricing?.prompt),output:dF(V.pricing?.completion)};Y[B]={id:B,name:V.name??B,description:V.description,contextWindow:V.context_length,maxInputTokens:V.context_length,maxTokens:V.max_completion_tokens,capabilities:F,pricing:U.input!==void 0||U.output!==void 0?U:void 0,status:"active"}}return Y}function dw($){let Z=nQ($).replace(/\/+$/,"");if(!Z)return"http://localhost:4000";return Z.endsWith("/v1")?Z.slice(0,-3):Z}function pw($){return[`${$}/v1/model/info`,`${$}/model/info`]}async function lw($){let Z=(await $.text().catch(()=>"")).replace(/\s+/g," ").trim(),Q=500,J=Z?`: ${Z.slice(0,500)}${Z.length>500?"...":""}`:"";return`HTTP ${$.status}${J}`}async function iw($,Z){let Q=dw($.baseUrl),J=[],W=[["x-litellm-api-key",{"x-litellm-api-key":Z}],["Authorization",{Authorization:`Bearer ${Z}`}]];for(let X of pw(Q))for(let[j,Y]of W)try{let V=await aQ(X,{method:"GET",headers:{accept:"application/json",...Y}});if(V.ok){let H=(await V.json())?.data??[],K={};for(let G of H){let F=G.model_name?.trim(),_=G.litellm_params?.model?.trim()||F;if(!_)continue;let L=G.model_info,O=oQ(_,{name:F??_,maxTokens:L?.max_output_tokens??L?.max_tokens,maxInputTokens:L?.max_input_tokens??L?.max_tokens,supportsImages:L?.supports_vision,supportsPromptCache:L?.supports_prompt_caching,supportsReasoning:L?.supports_reasoning});if(K[_]=O,F)K[F]={...O,id:F,name:F}}return K}J.push(`${new URL(X).pathname} (${j}): ${await lw(V)}`)}catch(V){let B=V instanceof Error?V.message:String(V);J.push(`${new URL(X).pathname} (${j}): ${B}`)}throw Error(`LiteLLM model refresh failed. Attempts: ${J.join("; ")}`)}var rF={baseten:mw,hicap:cw,litellm:iw,poolside:uw},BX=new Map,lQ=new Map;function rw($,Z){return`${$}:${nQ(Z.baseUrl)}`}async function nw($,Z,Q){let J=Z0.MODEL_COLLECTIONS_BY_PROVIDER_ID[$],W=dQ(Q.baseUrl,J?.provider.baseUrl,J?.provider.modelsSourceUrl);if(!W)return{};let X=Z?.cacheTtlMs??iF,j=rw($,Q),Y=Date.now(),V=BX.get(j);if(V&&V.expiresAt>Y)return V.data;let B=lQ.get(j);if(B)return B;let H=uQ(W,$).then((K)=>{let G=Object.fromEntries(K.map((F)=>[F,oQ(F,{name:F})]));return BX.set(j,{data:G,expiresAt:Y+X}),G}).finally(()=>{lQ.delete(j)});return lQ.set(j,H),H}function aw(){BX.clear(),lQ.clear()}async function ow($,Z){let Q=HX(Z);if(!Q)return{};let J=rF[$];if(!J)return{};return J(Z,Q)}function sw($,Z,Q){if(!Q)return!1;if(!rF[$])return!1;if(Z?.loadPrivateOnAuth===!1)return!1;return Boolean(HX(Q))}async function tw($,Z,Q){let J=Z?.cacheTtlMs??iF,W=vw($,Q),X=Date.now(),j=VX.get(W);if(j&&j.expiresAt>X)return j.data;let Y=pQ.get(W);if(Y)return Y;let V=ow($,Q).then((B)=>{return VX.set(W,{data:B,expiresAt:X+J}),B}).finally(()=>{pQ.delete(W)});return pQ.set(W,V),V}async function ew($){return Z0.fetchLiveProviderModels($,globalThis.fetch)}async function f6($={}){let Z=$.url??rQ,Q=$.cacheTtlMs??yw,J=Date.now(),W=iQ.get(Z);if(W&&W.expiresAt>J)return W.data;let X=h5.get(Z);if(X)return X;let j=ew(Z).then((Y)=>{return iQ.set(Z,{data:Y,expiresAt:J+Q}),Y}).finally(()=>{h5.delete(Z)});return h5.set(Z,j),j}function KX($){if($){iQ.delete($),h5.delete($);return}iQ.clear(),h5.clear()}function GX(){VX.clear(),pQ.clear()}function $P($){return Object.fromEntries(Object.entries($).map(([Z,Q])=>[Z,{baseUrl:Q.baseUrl,modelId:Q.modelId,capabilities:lF(Q.capabilities)}]))}var I5=$P(bw());function sQ($){let Z=Sw($);if(!Z)return;return{baseUrl:Z.baseUrl||void 0,modelId:Z.modelId,knownModels:Z.knownModels,capabilities:lF(Z.capabilities)}}async function x5($,Z,Q){let J=sQ($);if(!J)return;try{let W=Z?.loadLatestOnInit?await f6(Z):void 0,X=W?xw($,W):{},j=Q&&sw($,Z,Q)?await tw($,Z,Q):{},V=Boolean(Z0.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl)?Q??{providerId:$,modelId:J.modelId,baseUrl:J.baseUrl}:Q,B=V?await nw($,Z,V).catch(()=>({})):{},H=await Iw($,J.knownModels,X,j,B,Q?.knownModels);return{...J,knownModels:H}}catch(W){if(Z?.failOnError)throw W;if($==="litellm")return{...J,knownModels:{}};return J}}var g5=m0.BUILT_IN_PROVIDER,FX=m0.BUILT_IN_PROVIDER_IDS,UX=m0.isBuiltInProviderId,R6=m0.normalizeProviderId,v5=P.string().min(1).regex(/^[a-z0-9][a-z0-9-]*$/i),tQ=P.enum(["anthropic","gemini","openai-chat","openai-responses","openai-r1","ai-sdk"]),eQ=P.enum(["anthropic","ai-sdk","ai-sdk-community","openai","openai-compatible","openai-r1","gemini","bedrock","custom","fetch","vertex"]),$7=P.object({apiKey:P.string().optional(),accessToken:P.string().optional(),refreshToken:P.string().optional(),expiresAt:P.number().int().positive().optional(),accountId:P.string().optional(),organizationId:P.string().optional(),organizationName:P.string().optional(),memberId:P.string().optional(),metadata:P.record(P.string(),P.unknown()).optional()}),Z7=P.object({enabled:P.boolean().optional(),effort:ZP.optional(),budgetTokens:P.number().int().positive().optional()}),Q7=P.object({accessKey:P.string().optional(),secretKey:P.string().optional(),sessionToken:P.string().optional(),region:P.string().optional(),profile:P.string().optional(),authentication:P.enum(["iam","api-key","apikey","profile"]).optional(),usePromptCache:P.boolean().optional(),useCrossRegionInference:P.boolean().optional(),useGlobalInference:P.boolean().optional(),endpoint:P.string().url().optional(),customModelBaseId:P.string().optional()}),J7=P.object({projectId:P.string().optional(),region:P.string().optional()}),W7=P.object({apiVersion:P.string().optional(),useIdentity:P.boolean().optional()}),X7=P.object({clientId:P.string().optional(),clientSecret:P.string().optional(),tokenUrl:P.string().url().optional(),resourceGroup:P.string().optional(),deploymentId:P.string().optional(),useOrchestrationMode:P.boolean().optional(),api:P.enum(["orchestration","foundation-models"]).optional(),defaultSettings:P.record(P.string(),P.unknown()).optional()}),j7=P.object({mode:P.enum(["internal","external"]).optional(),usePromptCache:P.boolean().optional()}),Y7=P.object({loadLatestOnInit:P.boolean().optional(),loadPrivateOnAuth:P.boolean().optional(),url:P.string().url().optional(),cacheTtlMs:P.number().int().positive().optional(),failOnError:P.boolean().optional()}),e$=P.object({provider:v5,apiKey:P.string().optional(),auth:$7.optional(),model:P.string().optional(),protocol:tQ.optional(),client:eQ.optional(),routingProviderId:v5.optional(),maxTokens:P.number().int().positive().optional(),contextWindow:P.number().int().positive().optional(),baseUrl:P.string().url().optional(),headers:P.record(P.string(),P.string()).optional(),timeout:P.number().int().positive().optional(),reasoning:Z7.optional(),aws:Q7.optional(),gcp:J7.optional(),azure:W7.optional(),sap:X7.optional(),oca:j7.optional(),region:P.string().optional(),apiLine:P.enum(["china","international"]).optional(),capabilities:P.array(P.enum(["reasoning","prompt-cache","streaming","tools","vision","computer-use","oauth","popular"])).optional(),modelCatalog:Y7.optional()});function V7($){return e$.parse($)}function B7($){return e$.safeParse($)}function QP($){return $.protocol==="openai-responses"||$.client==="openai"}function J1($,Z={}){let Q=$.provider,J=R6(Q),W=Z.includeKnownModels!==!1,X=$.reasoning?.effort||"none",j=X==="none"?void 0:X,Y=I5[J],V=Object.assign({},...m0.resolveProviderModelCatalogKeys(J).map((_)=>m0.getGeneratedModelsForProvider(_))),B=Object.keys(V)[0],H=r8(J,$),K=$.baseUrl??m0.resolveProviderApiLineBaseUrl(J,$.apiLine)??(J==="oca"?$.oca?.mode==="internal"?ZQ:QQ:Y?.baseUrl),G=$.routingProviderId??(QP($)&&J!==g5.OPENAI_NATIVE?g5.OPENAI_NATIVE:void 0),F=W?Y?.knownModels??(Object.keys(V).length>0?V:void 0):void 0,U={providerId:Q,clientType:$.client,routingProviderId:G,modelId:$.model??Y?.modelId??B??"default",...W?{knownModels:F}:{},apiKey:H,accessToken:$.auth?.accessToken,refreshToken:$.auth?.refreshToken,accountId:$.auth?.accountId,baseUrl:K,headers:$.headers,timeoutMs:$.timeout,maxOutputTokens:$.maxTokens,maxInputTokens:$.contextWindow,thinking:$.reasoning?.enabled,reasoningEffort:j,thinkingBudgetTokens:$.reasoning?.budgetTokens,region:$.region??$.aws?.region??$.gcp?.region,apiLine:$.apiLine,useCrossRegionInference:$.aws?.useCrossRegionInference,useGlobalInference:$.aws?.useGlobalInference,aws:$.aws?{accessKey:$.aws.accessKey,secretKey:$.aws.secretKey,sessionToken:$.aws.sessionToken,authentication:$.aws.authentication,profile:$.aws.profile,usePromptCache:$.aws.usePromptCache,endpoint:$.aws.endpoint,customModelBaseId:$.aws.customModelBaseId}:void 0,gcp:$.gcp?{projectId:$.gcp.projectId,region:$.gcp.region}:void 0,azure:$.azure,sap:$.sap,oca:$.oca,capabilities:$.capabilities??Y?.capabilities,modelCatalog:$.modelCatalog?{loadLatestOnInit:$.modelCatalog.loadLatestOnInit,loadPrivateOnAuth:$.modelCatalog.loadPrivateOnAuth,url:$.modelCatalog.url,cacheTtlMs:$.modelCatalog.cacheTtlMs,failOnError:$.modelCatalog.failOnError}:void 0};return Object.fromEntries(Object.entries(U).filter(([_,L])=>L!==void 0))}function DX($){let Z=V7($);return J1(Z)}function _X($){let Z=B7($);if(Z.success)return{success:!0,config:J1(Z.data)};return{success:!1,error:Z.error}}var M6=e$;var H7=$2.object({settings:e$,updatedAt:$2.string().datetime(),tokenSource:$2.enum(["manual","oauth","migration"]).default("manual")}),E6=$2.object({version:$2.literal(1),lastUsedProvider:$2.string().min(1).optional(),providers:$2.record($2.string(),H7)});function Z2(){return{version:1,providers:{}}}H1();var sF={};w(sF,{InMemoryWorkspaceManager:()=>C6});import{upsertWorkspaceInfo as JP,WorkspaceManifestSchema as LX}from"@cline/shared";class C6{manifest;listeners=new Set;constructor($){this.manifest=LX.parse($??{workspaces:{}})}async addWorkspacePath($){let Z=await w8($);return this.manifest=JP(this.manifest,Z),this.emit({type:"workspace_added",workspace:Z}),Z}async switchWorkspace($){let Z=T1($),Q=this.manifest.workspaces[Z];if(Q)return this.manifest=LX.parse({...this.manifest,currentWorkspacePath:Z}),this.emit({type:"workspace_switched",workspace:Q}),Q;let J=await this.addWorkspacePath(Z);return this.manifest=LX.parse({...this.manifest,currentWorkspacePath:J.rootPath}),this.emit({type:"workspace_switched",workspace:J}),J}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}getCurrentWorkspace(){let $=this.manifest.currentWorkspacePath;if(!$)return;return this.manifest.workspaces[$]}getWorkspace($){let Z=T1($);return this.manifest.workspaces[Z]}listWorkspaces(){return Object.values(this.manifest.workspaces)}getManifest(){return this.manifest}emit($){for(let Z of this.listeners)Z($)}}C0();import{createHash as WP}from"node:crypto";var tF=new Set,eF=new Set;function XP($){return WP("sha256").update($).digest("hex")}function jP($){if($.vcsTypes&&$.vcsTypes.length>0)return $.vcsTypes;return[$.vcsType==="git"?"git":"none"]}function $U($){if(!$.telemetry)return;let Z=XP($.rootPath),Q=$.rootCount??1;if(!tF.has(Z))tF.add(Z),UZ($.telemetry,{root_count:Q,vcs_types:jP($),init_duration_ms:$.durationMs,feature_flag_enabled:$.featureFlagEnabled??!0,is_remote_workspace:$.isRemoteWorkspace});if($.initError&&!eF.has(Z)){eF.add(Z);let J=Error($.initError.message);J.name=$.initError.errorType||"Error",DZ($.telemetry,J,{fallback_to_single_root:!0,workspace_count:Q})}}function BP($){return`${$.pluginName??$.pluginPath}: ${$.message}`}function HP($,Z,Q){if(Z.length>0)for(let X of Z)Q?.log(X.message,{severity:"warn"});if($.length===0)return;let J=$.slice(0,3).map(BP).join("; "),W=$.length>3?`; and ${$.length-3} more`:"";Q?.log(`Some plugins failed to initialize. ${J}${W}. 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 KP($,Z){let Q=typeof $.thinking==="boolean",J=typeof $.reasoningEffort==="string";if(!Q&&!J)return Z;return{...Z??{},...Q?{enabled:$.thinking}:{},...J?{effort:$.reasoningEffort}:{}}}function ZU($,Z){return VP($,Z)}function GP($,Z,Q,J,W,X){let j=J.getProviderSettings($.providerId),Y=W||j?.modelCatalog?{...W??{},...j?.modelCatalog??{}}:void 0,V=$.providerConfig?.providerId===$.providerId?$.providerConfig:void 0,B=YP({providerId:$.providerId,sessionId:Z,source:Q,defaultSource:L0.CLI,client:{name:$.extensionContext?.client?.name,version:$.extensionContext?.client?.version,versionHeaderFallback:$.headers?.["X-CLIENT-VERSION"],platform:$.extensionContext?.client?.platform,platformVersion:$.extensionContext?.client?.platformVersion,isMultiRoot:$.extensionContext?.client?.isMultiRoot},coreVersion:g8,openAiCodex:{accountId:V?.accountId??j?.auth?.accountId,accessToken:V?.accessToken??$.apiKey??j?.auth?.accessToken??j?.apiKey,userAgentVersion:process.env.npm_package_version},headers:{stored:j?.headers,config:$.headers,session:V?.headers}}),H={...j??{},provider:$.providerId,model:$.modelId,apiKey:$.apiKey??j?.apiKey,baseUrl:$.baseUrl??j?.baseUrl,headers:void 0,reasoning:KP($,j?.reasoning),modelCatalog:Y},K={...J1(H),...V??{}};if(B)K.headers=B;if($.knownModels)K.knownModels=$.knownModels;if($.extensionContext)K.extensionContext=$.extensionContext;let F=$.fetch??K.fetch??X;if(F)K.fetch=F;return K}async function QU($){let{input:Z,sessionId:Q,providerSettingsManager:J,defaultTelemetry:W,defaultLogger:X,defaultCapabilities:j,defaultToolPolicies:Y,defaultFetch:V,onPluginEvent:B,onTeamEvent:H,createSubAgentLifecycleCallbacks:K,createSpawnTool:G,localRuntime:F,readSessionMetadata:U,writeSessionMetadata:_}=$,L=B$(Z.config),{modelCatalogDefaults:O,userInstructionService:D,configExtensions:q,onTeamRestored:T,...z}=F??{},A=Object.keys(z).length>0?z:void 0,{workspaceInfo:R,workspaceMetadata:N,gitState:S,durationMs:y,vcsType:s,initError:c}=await r3(L),b=A?.extensionContext,r={...b??{},workspace:{...R,...b?.workspace??{}},session:{...b?.session??{},sessionId:Q},logger:b?.logger??A?.logger??X,telemetry:b?.telemetry??A?.telemetry??W};$U({telemetry:r.telemetry,rootPath:R.rootPath,workspaceInfo:R,rootCount:1,vcsType:s,durationMs:y,initError:c,featureFlagEnabled:!0});let O0=N6({cwd:Z.config.cwd,workspacePath:L,rootSessionId:Q,logger:A?.logger,workspaceInfo:R}),N$=tG(A?.hooks)?void 0:T6({rootSessionId:Q,workspacePath:L,workspaceInfo:R}),f$=$8([A?.hooks,N$]),X0;if(ZU(q,"plugins"))try{X0=await O6({pluginPaths:A?.pluginPaths,workspacePath:L,cwd:Z.config.cwd,onEvent:B,providerId:Z.config.providerId,modelId:Z.config.modelId,workspaceInfo:R,session:r.session,client:r.client,user:r.user,logger:r.logger,telemetry:r.telemetry,automation:r.automation}),HP(X0.failures,X0.warnings,A?.logger)}catch(E0){let U2=E0 instanceof Error?E0.message:String(E0);A?.logger?.log?.(`plugin loading failed; continuing without plugins (${U2})`)}let R$=yW(O0?[O0]:void 0,yW(A?.extensions,hZ(X0?.extensions))),q1=ZU(q,"plugins")?K$(X0?.pluginPaths??[]):void 0,p0={...Z.config,...A??{},sessionId:Q,hooks:f$,extensions:R$,extensionContext:r,telemetry:r.telemetry,logger:r.logger},M$=GP(p0,Q,Z.source,J,O,V),R0=$8([p0.hooks,p0.checkpoint?.enabled===!0?kF({cwd:p0.cwd,sessionId:Q,logger:p0.logger,createCheckpoint:p0.checkpoint?.createCheckpoint,readSessionMetadata:U,writeSessionMetadata:_}):void 0]),h0={...p0,providerConfig:M$,workspaceMetadata:N,hooks:R0},z1=Z.toolPolicies??p0.toolPolicies??Y,u=y0(j,Z.capabilities),x0=u?.requestToolApproval,I=u?.toolExecutors,H0=K?.(h0),M0=new C6({currentWorkspacePath:R.rootPath,workspaces:{[R.rootPath]:R}});return{effectiveInput:Z,config:h0,providerConfig:M$,workspaceMetadata:N,workspaceInfo:R,gitState:S,extensions:R$,hooks:R0,toolPolicies:z1,requestToolApproval:x0,pluginSandboxShutdown:X0?.shutdown,runtimeBuilderInput:{config:h0,hooks:R0,extensions:R$,onTeamEvent:H,createSpawnTool:G,onTeamRestored:T,onSubAgentEvent:H0?.onSubAgentEvent,onSubAgentStart:H0?.onSubAgentStart,onSubAgentEnd:H0?.onSubAgentEnd,userInstructionService:D,pluginSkillDirectories:q1,configExtensions:q,toolExecutors:I,toolPolicies:z1,workspaceManager:M0,logger:h0.logger,telemetry:h0.telemetry,requestToolApproval:x0}}}import{existsSync as K7,mkdirSync as FP,readdirSync as UP,rmdirSync as DP,rmSync as _P,unlinkSync as LP}from"node:fs";import{dirname as JU,join as m5}from"node:path";function V0(){return new Date().toISOString()}function c5($){if(!$||!K7($))return;try{LP($)}catch{}}function AP($){let Z=K6($);if(Z)return{rootSessionId:Z.rootSessionId,fileStem:`${Z.agentId}__${Z.teamTaskId}`};let Q=A5($);if(Q)return{rootSessionId:Q.rootSessionId,fileStem:Q.agentId};return{rootSessionId:$,fileStem:$}}class AX{ensureSessionsDir;constructor($){this.ensureSessionsDir=$}sessionArtifactsDir($){return m5(this.ensureSessionsDir(),$)}ensureSessionArtifactsDir($){let Z=this.sessionArtifactsDir($);if(!K7(Z))FP(Z,{recursive:!0});return Z}sessionMessagesPath($){return m5(this.sessionArtifactsDir($),`${$}.messages.json`)}sessionCompactionPath($){return m5(this.sessionArtifactsDir($),`${$}.compaction.json`)}sessionManifestPath($,Z=!1){let Q=Z?this.ensureSessionArtifactsDir($):this.sessionArtifactsDir($);return m5(Q,`${$}.json`)}removeSessionDirIfEmpty($){let Z=this.sessionArtifactsDir($),Q=this.ensureSessionsDir();while(Z.startsWith(Q)&&Z!==Q){if(!K7(Z)){Z=JU(Z);continue}try{if(UP(Z).length>0)break;DP(Z)}catch{break}Z=JU(Z)}}removeSessionDir($){this.removeDir(this.sessionArtifactsDir($))}removeDir($){if(!K7($))return;try{_P($,{recursive:!0,force:!0})}catch{}}subagentArtifactPaths($,Z,Q){let{rootSessionId:J,fileStem:W}=AP($),X=this.sessionArtifactsDir(J);return{messagesPath:m5(X,`${W}.messages.json`)}}}import{resolveDocumentsExtensionPath as OP}from"@cline/shared/storage";C0();function WU($,Z,Q,J,W){if(Q)LZ($.telemetry,{ulid:Z,apiProvider:$.providerId,...W});else _Z($.telemetry,{ulid:Z,apiProvider:$.providerId,...W});qP($.telemetry,{workspacePath:J})}function qP($,Z){let Q=OP("Hooks"),J=s$(Z.workspacePath),W=new Map;for(let X of J){let j=X.hookEventName??"unknown",Y=W.get(j)??{global:0,workspace:0};if(X.path===Q||X.path.startsWith(`${Q}/`))Y.global+=1;else Y.workspace+=1;W.set(j,Y)}for(let[X,j]of W.entries())EZ($,X,j.global,j.workspace)}function XU($,Z){for(let Q of Z.mentions)RZ($,Q,Z.matchedFiles.includes(Q)?1:0,"file",!Z.matchedFiles.includes(Q));for(let Q of Z.matchedFiles)NZ($,"file",Q.length);for(let Q of Z.ignoredMentions)fZ($,"file","not_found",Q)}var GA={};w(GA,{ProviderSettingsManager:()=>v1});import{chmodSync as AA,existsSync as vY,mkdirSync as wm,readFileSync as Pm,renameSync as Sm,rmSync as bm,writeFileSync as ym}from"node:fs";import{basename as OA,dirname as mY}from"node:path";import{resolveProviderSettingsPath as km}from"@cline/shared/storage";var f={};w(f,{writeModelsFileSync:()=>l9,writeHubDiscovery:()=>vZ,writeGlobalSettings:()=>g0,withHubStartupLock:()=>mZ,verifyHubConnection:()=>E1,updateMcpSettingsFileSync:()=>A1,updateMcpSettingsFile:()=>y6,updateMcpServerOAuthStateAsync:()=>X9,updateMcpServerOAuthState:()=>j8,updateLocalProvider:()=>z3,uninstallPlugin:()=>x9,uninstallMarketplaceSkill:()=>j3,uninstallMarketplacePlugin:()=>Y3,uninstallMarketplaceMcpServerFromSettings:()=>W3,uninstallMarketplaceEntry:()=>sj,truncateNotificationBody:()=>e9,truncateCommandOutput:()=>b2,trimMessagesBeforeUserRun:()=>C9,toggleDisabledTool:()=>yZ,toTeamProgressLifecycleEvent:()=>l6,toProviderConfig:()=>J1,toHubStatusUrl:()=>HJ,toHubHealthUrl:()=>cZ,toHookConfigFileName:()=>b5,syncStoredProviderRegistration:()=>HY,syncPluginMcpServersToSettings:()=>h9,summarizeUsageFromMessages:()=>F6,stripUtf8Bom:()=>Mm,stopLocalHubServerGracefully:()=>TJ,startLocalOAuthServer:()=>U1,startHubWebSocketServer:()=>QZ,startHubServer:()=>DA,startClineDeviceAuth:()=>hJ,splitCoreSessionConfig:()=>w4,spawnDetachedHubServerWithRetry:()=>m8,spawnDetachedHubServer:()=>_J,setToolAutoApproveGlobally:()=>HB,setTelemetryOptOutGlobally:()=>$B,setSdkLogger:()=>CJ,setPlanActModeGlobally:()=>VB,setMcpServerDisabled:()=>W8,setDisabledTools:()=>JJ,setDisabledPlugin:()=>UB,setCompactionStrategyGlobally:()=>WB,setCompactionModeGlobally:()=>jB,setAutoUpdateEnabledGlobally:()=>QB,sendHubCommand:()=>aB,sdkDebug:()=>t,saveProviderOAuthCredentials:()=>M2,saveLocalProviderSettings:()=>LY,saveLocalProviderOAuthCredentials:()=>zY,sanitizeSessionToken:()=>r2,safeParseSettings:()=>B7,safeCreateProviderConfig:()=>_X,runSubprocessEvent:()=>G$,runHook:()=>t6,reviveTeamStateDates:()=>EQ,restartLocalHubIfIdleAfterStartupTimeout:()=>iZ,resolveWorkspaceHubOwnerContext:()=>bB,resolveWorkflowsConfigSearchPaths:()=>t5,resolveSkillsConfigSearchPaths:()=>o5,resolveSharedHubOwnerContext:()=>G1,resolveSessionBackend:()=>_j,resolveRulesConfigSearchPaths:()=>s5,resolveProviderConfig:()=>x5,resolveProviderApiKeyFromSettings:()=>uJ,resolveProductionHubOwnerContext:()=>M1,resolvePluginSkillDirectoriesFromPaths:()=>K$,resolvePluginConfigSearchPaths:()=>C5,resolveModelsRegistryPath:()=>c1,resolveMessageDisplayRole:()=>lJ,resolveMcpServerRegistrations:()=>W1,resolveMarketplaceMcpServerName:()=>v9,resolveLocalClineAuthToken:()=>NY,resolveHubUrl:()=>NJ,resolveHubOwnerContext:()=>t1,resolveHubEndpointOptions:()=>R1,resolveHubBuildId:()=>gZ,resolveHooksConfigSearchPaths:()=>P5,resolveDisabledToolNames:()=>f1,resolveDisabledPluginPaths:()=>f4,resolveDefaultMcpSettingsPath:()=>W0,resolveDefaultHubPort:()=>v8,resolveDefaultHubPathname:()=>DJ,resolveDefaultHubHost:()=>UJ,resolveCoreSelectedToolIds:()=>wQ,resolveCoreDistinctId:()=>l0,resolveCoreDeviceId:()=>k8,resolveCompatibleLocalHubUrl:()=>y4,resolveClineDir:()=>CB,resolveClineDataDir:()=>z2,resolveAndLoadAgentPlugins:()=>O6,resolveAgentPluginPaths:()=>H$,requestHubShutdown:()=>b4,requestDesktopToolApproval:()=>Pj,removePluginMcpServersFromSettings:()=>I9,removePersistedConnectorConnection:()=>kj,rememberRecoverableLocalHubUrl:()=>y$,registerRemoteConfigSessionBlobUpload:()=>a7,registerMcpServersFromSettingsFile:()=>Y8,registerDisposable:()=>fm,refreshProviderModelsFromSource:()=>AY,refreshOpenAICodexToken:()=>$Q,refreshOcaToken:()=>WQ,refreshClineToken:()=>tZ,reconnectPersistedConnectors:()=>hj,readToolAutoApproveGlobally:()=>BB,readSessionCheckpointHistory:()=>D8,readRemoteConfigSessionBlobUploadMetadata:()=>zj,readPlanActModeGlobally:()=>YB,readModelsFileSync:()=>Y4,readHubDiscovery:()=>z0,readGlobalSettings:()=>j0,readCompactionStrategyGlobally:()=>JB,readCompactionModeGlobally:()=>XB,readBearerToken:()=>k3,projectSessionCompactionState:()=>x$,probeHubServer:()=>e1,probeHubConnection:()=>nB,prewarmFileIndex:()=>LQ,prewarmDetachedHubServer:()=>dZ,prepareRemoteConfigCoreIntegration:()=>Nj,persistConnectorConnection:()=>Sj,parseWorkflowConfigFromMarkdown:()=>a5,parseUserCommandEnvelope:()=>Nm,parseSkillConfigFromMarkdown:()=>r5,parseSettings:()=>V7,parseSessionCompactionState:()=>D1,parseRuleConfigFromMarkdown:()=>n5,parsePluginSource:()=>_3,parseMcpInstallArgs:()=>k9,parseHookEventPayload:()=>s6,parseConfiguredAgentConfig:()=>q9,normalizeWorkspacePath:()=>T1,normalizeUserInput:()=>Tm,normalizeSdkError:()=>zm,normalizeRuntimeCapabilities:()=>y0,normalizeProviderId:()=>R6,normalizeOAuthProvider:()=>OY,normalizeHubWebSocketUrl:()=>k$,noopBasicLogger:()=>qm,migrateLegacyProviderSettings:()=>s9,mergeRulesForSystemPrompt:()=>C8,mergeAgentHooks:()=>$8,marketplaceEntryKey:()=>oj,markLocalProviderEnabled:()=>UY,makeTeamTaskSubSessionId:()=>L5,makeSubSessionId:()=>H6,loginOpenAICodex:()=>I4,loginOcaOAuth:()=>m4,loginLocalProvider:()=>qY,loginClineOAuth:()=>k4,loginAndSaveProviderOAuthCredentials:()=>u4,loginAndSaveLocalProviderOAuthCredentials:()=>TY,loadOpenTelemetryAdapter:()=>uv,loadMcpSettingsFile:()=>J8,loadLlmsConfigFromFile:()=>hY,loadConfiguredAgentConfigs:()=>u6,loadAgentPluginsFromPathsWithDiagnostics:()=>o2,loadAgentPluginsFromPaths:()=>kQ,loadAgentPluginFromPath:()=>M5,listSessionHistoryFromBackend:()=>aX,listPluginToolsWithDiagnostics:()=>P7,listPluginTools:()=>B9,listMcpServerOAuthStatuses:()=>j9,listLocalProviders:()=>DY,listHookConfigFiles:()=>s$,listActiveConnectors:()=>b9,isUserRunMessage:()=>iJ,isToolDisabledGlobally:()=>KB,isTelemetryOptedOutGlobally:()=>bZ,isSessionNotFoundError:()=>s1,isRuleEnabled:()=>jZ,isPluginDisabledGlobally:()=>FB,isOfficialPluginSlug:()=>D3,isOAuthProvider:()=>I$,isMarketplaceSkillInstalled:()=>X3,isLocalHubOrigin:()=>gY,isLocalHubHostName:()=>h3,isHubReconnectableTransportError:()=>qJ,isHubCommandTimeoutError:()=>lZ,isDiscoveryFilePresent:()=>PB,isClinePassLimitMessage:()=>Ym,isClinePassLimitError:()=>jm,isClineOrgIndividualInferenceSubscriptionMessage:()=>Xm,isClineOrgIndividualInferenceSubscriptionError:()=>Wm,isClineNotSubscribedMessage:()=>Jm,isClineNotSubscribedError:()=>Qm,isClineModelNotFoundMessage:()=>Zm,isClineFreeModelLimitMessage:()=>$m,isClineFreeModelLimitError:()=>ev,isClineAccountActionRequest:()=>G7,isBuiltInProviderId:()=>UX,isAutoUpdateEnabledGlobally:()=>ZB,installPlugin:()=>JY,installMcpServer:()=>Ij,identifyAccount:()=>r1,hashSecret:()=>P0,hasMcpSettingsFile:()=>U$,getValidOpenAICodexCredentials:()=>x4,getValidOcaCredentials:()=>c4,getValidClineCredentials:()=>h4,getUserRunSpan:()=>w1,getProviderOAuthCredentialsFromSettings:()=>d4,getProviderConfigFields:()=>fY,getProviderConfig:()=>sQ,getProviderAuthStorageId:()=>cJ,getProviderAuthHandler:()=>U0,getPersistedProviderApiKey:()=>r8,getPersistedConnectorConnection:()=>yj,getMcpServerOAuthState:()=>X8,getMarketplaceSkillCandidates:()=>m9,getLocalProviderModels:()=>_Y,getLiveModelsCatalog:()=>f6,getGlobalMarketplaceSkillPaths:()=>c9,getFileIndex:()=>X$,getCurrentContextSize:()=>xW,getCoreHeadlessToolNames:()=>_5,getCoreDefaultEnabledToolIds:()=>CQ,getCoreBuiltinToolCatalog:()=>l2,getCoreAcpToolNames:()=>PQ,getClinePassSubscriptionUrl:()=>tv,getClineOrgIndividualInferenceSubscriptionMessage:()=>sv,getClineNotSubscribedMessage:()=>ov,getClineDefaultSystemPrompt:()=>Vm,generateWorkspaceInfoWithDiagnostics:()=>K4,generateWorkspaceInfo:()=>w8,formatRulesForSystemPrompt:()=>E8,formatProviderOAuthApiKey:()=>dJ,formatDisplayUserInput:()=>Om,findInstalledGlobalMarketplaceSkillName:()=>u9,findCheckpointForRun:()=>a6,filterExtensionToolRegistrations:()=>hZ,filterDisabledTools:()=>n1,filterDisabledPluginPaths:()=>kZ,fetchClineRecommendedModels:()=>yY,extractClinePassLimitMessage:()=>av,extractClineFreeModelLimitResetTime:()=>nv,executeClineAccountAction:()=>F7,ensureHubWebSocketServer:()=>I3,ensureHubServer:()=>_A,ensureDetachedHubServer:()=>gB,ensureCustomProvidersLoadedSync:()=>n9,ensureCustomProvidersLoaded:()=>a9,ensureCompatibleLocalHubUrl:()=>f2,enrichPromptWithMentions:()=>Q6,emptyWorkspaceManifest:()=>_m,emptyStoredProviderSettings:()=>Z2,discoverPluginModulePaths:()=>w5,disablePluginMcpServersInSettings:()=>mj,disableConnectorAutostart:()=>bj,deriveSubsessionStatus:()=>O5,deleteLocalProvider:()=>T3,defineLlmsConfig:()=>kY,createWorkflowsConfigDefinition:()=>Z9,createUserInstructionConfigService:()=>Q2,createToolPoliciesWithPreset:()=>OQ,createTool:()=>Dm,createTeamName:()=>t7,createSubprocessHooks:()=>l7,createSpawnAgentTool:()=>n$,createSkillsConfigDefinition:()=>e5,createShellTool:()=>Y5,createShellExecutor:()=>y2,createSessionHost:()=>n6,createSessionCompactionState:()=>n8,createRuntimeHost:()=>n6,createRulesConfigDefinition:()=>$9,createRestoredCheckpointMetadata:()=>E9,createRemoteConfigSessionMessagesArtifactUploader:()=>Tj,createProviderConfig:()=>DX,createOpenTelemetryTelemetryService:()=>C4,createOAuthClientCallbacks:()=>w6,createMcpTools:()=>g6,createLocalHubScheduleRuntimeHandlers:()=>UA,createLlmsSdk:()=>xY,createInitialAccumulatedUsage:()=>w0,createInMemoryHubOwnerContext:()=>wB,createHubServerUrl:()=>K1,createHubAuthToken:()=>xZ,createHookConfigFileHooks:()=>k5,createHookConfigFileExtension:()=>N6,createHookAuditHooks:()=>T6,createEditorExecutor:()=>x2,createDisabledMcpToolPolicy:()=>V9,createDisabledMcpToolPolicies:()=>w7,createDelegatedAgentConfigProvider:()=>i$,createDelegatedAgent:()=>r$,createDefaultToolsWithPreset:()=>qQ,createDefaultTools:()=>u$,createDefaultShellExecutor:()=>K5,createDefaultMcpServerClientFactory:()=>I6,createDefaultExecutors:()=>J6,createCoreSettingsService:()=>B8,createCoreSessionSnapshot:()=>b1,createContributionRegistry:()=>Um,createContextCompactionPrepareTurn:()=>o4,createConfiguredTelemetryService:()=>a1,createConfiguredTelemetryHandle:()=>x8,createConfiguredAgentTools:()=>d6,createCompactionStateAwarePrepareTurn:()=>s4,createClineTelemetryServiceMetadata:()=>Fm,createClineTelemetryServiceConfig:()=>Gm,createCheckpointComparePlan:()=>c7,createBuiltinTools:()=>i2,createApplyPatchExecutor:()=>I2,createAgentTeamsTools:()=>p2,createAgentRuntime:()=>Cm,createAgentHooksExtension:()=>q6,countUserRunMessages:()=>g$,connectToHub:()=>rZ,computePatchChanges:()=>$6,completeClineDeviceAuth:()=>IJ,compareCheckpointToWorkspace:()=>w9,collectPluginMcpOAuthCandidates:()=>L3,clearPrivateModelsCatalogCache:()=>GX,clearLiveModelsCatalogCache:()=>KX,clearHubDiscovery:()=>i0,captureWorkspacePathResolved:()=>iV,captureWorkspaceInitialized:()=>UZ,captureWorkspaceInitError:()=>DZ,captureToolUsage:()=>y8,captureTokenUsage:()=>AZ,captureTaskRestarted:()=>LZ,captureTaskCreated:()=>_Z,captureTaskCompleted:()=>q4,captureSubagentExecution:()=>T4,captureSkillUsed:()=>qZ,captureSdkError:()=>Km,captureProviderConfigured:()=>nV,captureProviderApiError:()=>z4,captureModeSwitch:()=>OZ,captureMistakeLimitReached:()=>TZ,captureMentionUsed:()=>NZ,captureMentionSearchResults:()=>RZ,captureMentionFailed:()=>fZ,captureHookDiscovery:()=>EZ,captureExtensionActivated:()=>lV,captureDiffEditFailure:()=>zZ,captureConversationTurnEvent:()=>b8,captureCompactionSkipped:()=>wZ,captureCompactionExecuted:()=>CZ,captureAuthSucceeded:()=>l1,captureAuthStarted:()=>p1,captureAuthLoggedOut:()=>S$,captureAuthFailed:()=>i1,captureAgentUnexpectedReasoningTokens:()=>pV,captureAgentTeamCreated:()=>MZ,captureAgentCreated:()=>b$,buildWorkspaceMetadata:()=>G4,buildTeamProgressSummary:()=>p6,buildSdkErrorProperties:()=>Bm,buildRemoteConfigSessionBlobUploadMetadata:()=>r7,buildMcpInstallTransport:()=>e7,buildDelegatedAgentConfig:()=>u2,buildConnectionUpdate:()=>NW,buildConfiguredAgentToolName:()=>z9,buildConfiguredAgentToolDescriptors:()=>T9,buildCheckpointWorkspaceDiff:()=>u7,bootstrapAgentTeams:()=>B6,authorizeMcpServerOAuth:()=>M7,augmentMcpTimeoutError:()=>D$,addLocalProvider:()=>FY,accumulateUsageTotals:()=>f0,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>i5,UnifiedConfigFileWatcher:()=>Q8,ToolPresets:()=>Q1,TelemetryService:()=>h8,TelemetryLoggerSink:()=>E4,TEAM_TOOL_NAMES:()=>V6,SubprocessSandbox:()=>_6,StructuredCommandInputSchema:()=>P2,StoredProviderSettingsSchema:()=>E6,StoredProviderSettingsEntrySchema:()=>H7,SqliteTeamStore:()=>A8,SqliteSessionStore:()=>h1,SessionVersioningService:()=>K2,SessionVersioningError:()=>d0,SessionSource:()=>L0,SessionNotFoundError:()=>o1,SapSettingsSchema:()=>X7,SKILLS_CONFIG_DIRECTORY_NAME:()=>l5,SESSION_STATUSES:()=>q5,SESSION_NOT_FOUND_ERROR_CODE:()=>q2,SDK_ERROR_TELEMETRY_EVENT:()=>Rm,RuntimeOAuthTokenManager:()=>Q4,RpcClineAccountService:()=>d5,RemoteRuntimeHost:()=>c6,ReasoningSettingsSchema:()=>Z7,RULES_CONFIG_DIRECTORY_NAME:()=>q7,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY:()=>n7,ProviderSettingsSchema:()=>e$,ProviderSettingsManager:()=>v1,ProviderProtocolSchema:()=>tQ,ProviderIdSchema:()=>v5,ProviderClientSchema:()=>eQ,PatchActionType:()=>h2,PATCH_MARKERS:()=>p,OpenTelemetryProvider:()=>I8,OcaSettingsSchema:()=>j7,OPENAI_COMPATIBLE_PROVIDERS:()=>I5,OAuthReauthRequiredError:()=>O8,NodeHubClient:()=>F1,NoOpFeatureFlagsProvider:()=>U8,NativeHubTransportAdapter:()=>ZZ,ModelCatalogSettingsSchema:()=>Y7,McpSettingsUpdateSkippedError:()=>b6,McpSettingsMutatorPurityError:()=>J2,McpSettingsLockTimeoutError:()=>W2,MAX_COMMAND_OUTPUT_CHARS:()=>Q$,LocalRuntimeHost:()=>g1,Llms:()=>dv,InMemoryWorkspaceManager:()=>C6,InMemoryMcpManager:()=>V8,HubUIClient:()=>MJ,HubTransportError:()=>v0,HubSessionClient:()=>RJ,HubServerTransport:()=>V4,HubScheduleService:()=>S8,HubScheduleCommandService:()=>M8,HubRuntimeHost:()=>_$,HubCommandError:()=>c8,HookEventPayloadSchema:()=>p7,HookEventNameSchema:()=>d7,HookConfigFileName:()=>z6,HOOK_CONFIG_FILE_EVENT_MAP:()=>S5,HOOKS_CONFIG_DIRECTORY_NAME:()=>mQ,GlobalSettingsSchema:()=>N4,GcpSettingsSchema:()=>J7,FileTeamPersistenceStore:()=>M3,FeatureFlagsService:()=>F8,FeatureFlagDefaultValue:()=>Am,FEATURE_FLAGS:()=>Lm,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>y3,DefaultToolNames:()=>F0,DefaultRuntimeBuilder:()=>Z4,DefaultLlmsSdk:()=>t9,DEFAULT_MODELS_CATALOG_URL:()=>rQ,DEFAULT_HUB_PORT:()=>GJ,DEFAULT_HUB_PATHNAME:()=>FJ,DEFAULT_HUB_HOST:()=>KJ,CoreSettingsService:()=>X2,CoreSessionService:()=>x1,ContributionRegistry:()=>Hm,CommandExitError:()=>J$,ClinePassLimitError:()=>rv,ClineOrgIndividualInferenceSubscriptionError:()=>iv,ClineNotSubscribedError:()=>lv,ClineFreeModelLimitError:()=>pv,ClineCore:()=>P9,ClineAccountService:()=>u5,ChatViewStateSchema:()=>PY,ChatSummarySchema:()=>b3,ChatSessionStatusSchema:()=>C3,ChatSessionConfigSchema:()=>E3,ChatMessageSchema:()=>S3,ChatMessageRoleSchema:()=>w3,ChatMessageImageSchema:()=>P3,CORE_TELEMETRY_EVENTS:()=>m,CORE_BUILD_VERSION:()=>SY,BrowserWebSocketHubAdapter:()=>$Z,BUILT_IN_PROVIDER_IDS:()=>FX,BUILT_IN_PROVIDER:()=>g5,AzureSettingsSchema:()=>W7,AwsSettingsSchema:()=>Q7,AuthSettingsSchema:()=>$7,AgentTeamsRuntime:()=>G8,AgentTeam:()=>r6,Agent:()=>Em,ALL_DEFAULT_TOOL_NAMES:()=>C$});M(f,m$0);import*as dv from"@cline/llms";import{ClineFreeModelLimitError as pv,ClineNotSubscribedError as lv,ClineOrgIndividualInferenceSubscriptionError as iv,ClinePassLimitError as rv,extractClineFreeModelLimitResetTime as nv,extractClinePassLimitMessage as av,getClineNotSubscribedMessage as ov,getClineOrgIndividualInferenceSubscriptionMessage as sv,getClinePassSubscriptionUrl as tv,isClineFreeModelLimitError as ev,isClineFreeModelLimitMessage as $m,isClineModelNotFoundMessage as Zm,isClineNotSubscribedError as Qm,isClineNotSubscribedMessage as Jm,isClineOrgIndividualInferenceSubscriptionError as Wm,isClineOrgIndividualInferenceSubscriptionMessage as Xm,isClinePassLimitError as jm,isClinePassLimitMessage as Ym}from"@cline/llms";import{buildClineSystemPrompt as Vm,buildSdkErrorProperties as Bm,ContributionRegistry as Hm,captureSdkError as Km,createClineTelemetryServiceConfig as Gm,createClineTelemetryServiceMetadata as Fm,createContributionRegistry as Um,createTool as Dm,emptyWorkspaceManifest as _m,FEATURE_FLAGS as Lm,FeatureFlagDefaultValue as Am,formatDisplayUserInput as Om,noopBasicLogger as qm,normalizeSdkError as zm,normalizeUserInput as Tm,parseUserCommandEnvelope as Nm,registerDisposable as fm,SDK_ERROR_TELEMETRY_EVENT as Rm,stripUtf8Bom as Mm}from"@cline/shared";import"@cline/shared/storage";var YU={};w(YU,{isClineAccountActionRequest:()=>G7,executeClineAccountAction:()=>F7,RpcClineAccountService:()=>d5,ClineAccountService:()=>u5});function zP($){if(typeof $!=="object"||$===null||!("error"in $))return;let Z=$.error;return typeof Z==="string"&&Z.trim()?Z:void 0}function jU($,Z,Q){let J=zP(Q);if(J)return J;let W=Z.trim();if(W){let X=W.length>200?`${W.slice(0,200)}...`:W;return`Cline account request failed with status ${$}: ${X}`}return`Cline account request failed with status ${$}`}class u5{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 J=(this.getCurrentUserIdFn?await this.getCurrentUserIdFn():void 0)?.trim();if(J)return J;let W=await this.fetchMe();if(!W.id?.trim())throw Error("Unable to resolve current user id");return W.id}async resolveOrganizationMemberId($,Z){let Q=Z?.trim();if(Q)return Q;let W=(this.getOrganizationMemberIdFn?await this.getOrganizationMemberIdFn($):void 0)?.trim();if(W)return W;let j=(await this.fetchUserOrganizations()).find((Y)=>Y.organizationId===$)?.memberId;if(!j?.trim())throw Error(`Unable to resolve memberId for organization ${$}`);return j}async request($,Z){let Q=(await this.getAuthTokenFn())?.trim();if(!Q)throw Error("No Cline account auth token found");let J=this.getHeadersFn?await this.getHeadersFn():{},W=new AbortController,X=setTimeout(()=>W.abort(),this.requestTimeoutMs);try{let j=await this.fetchImpl(new URL($,this.apiBaseUrl),{method:Z?.method??"GET",headers:{Authorization:`Bearer ${Q}`,"Content-Type":"application/json",...J??{}},body:Z?.body!==void 0?JSON.stringify(Z.body):void 0,signal:W.signal});if(j.status===204||Z?.expectNoContent){if(!j.ok)throw Error(`Cline account request failed with status ${j.status}`);return}let Y=await j.text(),V;if(Y.trim())try{V=JSON.parse(Y)}catch{if(!j.ok)throw Error(jU(j.status,Y,void 0));throw Error("Cline account response was not valid JSON")}if(!j.ok)throw Error(jU(j.status,Y,V));if(typeof V==="object"&&V!==null){let B=V;if(typeof B.success==="boolean"){if(!B.success)throw Error(B.error||"Cline account request failed");return B.data}}if(V===void 0||V===null)throw Error("Cline account response payload was empty");return V}finally{clearTimeout(X)}}}function G7($){return $.action==="clineAccount"}async function F7($,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 d5{executor;constructor($){this.executor=$}async fetchMe(){return this.request({action:"clineAccount",operation:"fetchMe"})}async fetchBalance($){return this.request({action:"clineAccount",operation:"fetchBalance",...$?.trim()?{userId:$.trim()}:{}})}async fetchUsageTransactions($){return this.request({action:"clineAccount",operation:"fetchUsageTransactions",...$?.trim()?{userId:$.trim()}:{}})}async fetchPaymentTransactions($){return this.request({action:"clineAccount",operation:"fetchPaymentTransactions",...$?.trim()?{userId:$.trim()}:{}})}async fetchUserOrganizations(){return this.request({action:"clineAccount",operation:"fetchUserOrganizations"})}async fetchOrganizationBalance($){let 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 VU={};w(VU,{createOAuthClientCallbacks:()=>w6});function w6($){return{onAuth:({url:Z,instructions:Q})=>{if($.onOutput?.(Q??"Complete sign-in in your browser."),$.openUrl)try{Promise.resolve($.openUrl(Z)).catch((J)=>{$.onOpenUrlError?.({url:Z,error:J})})}catch(J){$.onOpenUrlError?.({url:Z,error:J})}$.onOutput?.(Z)},onPrompt:$.onPrompt,onServerListening:$.onServerListening,onServerClose:$.onServerClose}}var x_={};w(x_,{ClineCore:()=>P9});function BU($){if($===!0)return{};if(!$)return;return $}function HU($){if($==="user")return"global";return $}class OX{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 KU($){let{host:Z}=$;return{async startSession(Q){let J=(Q.cwd?.trim()||Q.workspaceRoot).trim(),W=await Z.startSession({source:Q.source?.trim()||L0.CLI,interactive:!1,config:{providerId:R6(Q.provider),modelId:Q.model,apiKey:Q.apiKey?.trim()||void 0,cwd:J,workspaceRoot:Q.workspaceRoot,systemPrompt:Q.systemPrompt??"",mode:fP(Q),maxIterations:Q.maxIterations,enableTools:Q.enableTools!==!1,enableSpawnAgent:Q.enableSpawn!==!1,enableAgentTeams:Q.enableTeams!==!1,disableMcpSettingsTools:Q.disableMcpSettingsTools,missionLogIntervalSteps:Q.missionStepInterval,missionLogIntervalMs:Q.missionTimeIntervalMs},toolPolicies:Q.toolPolicies??{"*":{autoApprove:Q.autoApproveTools!==!1}},localRuntime:{extensionContext:$.getExtensionContext(),configExtensions:Q.configExtensions}});return{sessionId:W.sessionId,startResult:{sessionId:W.sessionId,manifestPath:W.manifestPath,messagesPath:W.messagesPath}}},async sendSession(Q,J){let W=await Z.runTurn({sessionId:Q,prompt:J.prompt,userImages:J.attachments?.userImages,userFiles:J.attachments?.userFiles?.map((X)=>X.content),delivery:J.delivery});if(!W)throw Error("ClineCore automation runtime returned no result");return{result:NP(W)}},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 U7($){let Z=TP($.automationService,$.automation),Q=$.context?.client??($.clientName?{name:$.clientName}:void 0),J=$.context?.user??($.distinctId?{distinctId:$.distinctId}:void 0),W=$.context?.logger??$.logger,X=$.context?.telemetry??$.telemetry;if(!Z&&!Q&&!J&&!W&&!X)return $.context;return{...$.context??{},...Q?{client:Q}:{},...J?{user:J}:{},...W?{logger:W}:{},...X?{telemetry:X}:{},...Z?{automation:Z}:{}}}function TP($,Z){if(!$)return;return{ingestEvent:(Q)=>{Z.ingestEvent(Q)}}}function NP($){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 fP($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}var LD={};w(LD,{createCoreSettingsService:()=>B8,CoreSettingsService:()=>X2});import{existsSync as K9,readFileSync as Ob}from"node:fs";import{basename as hX,dirname as HD,extname as qb,isAbsolute as FD,join as zb,relative as UD,resolve as KD}from"node:path";var fU={};w(fU,{resolveWorkflowsConfigSearchPaths:()=>t5,resolveSkillsConfigSearchPaths:()=>o5,resolveRulesConfigSearchPaths:()=>s5,parseWorkflowConfigFromMarkdown:()=>a5,parseSkillConfigFromMarkdown:()=>r5,parseRuleConfigFromMarkdown:()=>n5,createWorkflowsConfigDefinition:()=>Z9,createUserInstructionConfigService:()=>Q2,createSkillsConfigDefinition:()=>e5,createRulesConfigDefinition:()=>$9,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>i5,UnifiedConfigFileWatcher:()=>Q8,SKILLS_CONFIG_DIRECTORY_NAME:()=>l5,RULES_CONFIG_DIRECTORY_NAME:()=>q7});import{createHash as RP}from"node:crypto";import{watch as MP}from"node:fs";import{readdir as EP,readFile as CP}from"node:fs/promises";import{join as wP}from"node:path";function PP($){return RP("sha1").update($).digest("hex")}function UU($){return Boolean($&&typeof $==="object"&&"code"in $)}function GU($){return UU($)&&$.code==="ENOENT"}function FU($){return UU($)&&($.code==="EACCES"||$.code==="EPERM")}class Q8{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 J of Q.directories){let W=this.baseTypesByDirectory.get(J);if(W)W.add(Q.type);else this.baseTypesByDirectory.set(J,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,J])=>[Q,{...J}]))}getAllSnapshots(){let $=new Map;for(let[Z,Q]of this.recordsByType.entries())$.set(Z,new Map([...Q.entries()].map(([J,W])=>[J,{...W}])));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=MP(Z,()=>{let J=this.watchedTypesByDirectory.get(Z);if(!J)return;for(let W of J)this.pendingTypes.add(W);this.scheduleFlush()});this.watchersByDirectory.set(Z,Q),Q.on("error",(J)=>{let W=this.watchedTypesByDirectory.get(Z);if(!W)return;for(let X of W)this.emit({kind:"error",type:X,error:J,filePath:Z})})}catch(Q){if(!GU(Q)&&!FU(Q)){let J=$.get(Z);if(!J)continue;for(let W of J)this.emit({kind:"error",type:W,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($),J=this.recordsByType.get($.type)??new Map;for(let[W,X]of J.entries()){if(Z.has(W))continue;this.emit({kind:"remove",type:$.type,id:W,filePath:X.filePath})}for(let[W,X]of Z.entries()){let j=J.get(W);if(j&&j.filePath===X.filePath&&j.fingerprint===X.fingerprint)continue;this.emit({kind:"upsert",record:{type:X.type,id:W,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 J of $.directories){Q.add(J);let W=$.discoverFiles?await $.discoverFiles(J):await this.readDirectoryFileCandidates(J);for(let X of W){let{fileName:j,filePath:Y}=X;if(Q.add(X.directoryPath),$.includeFile&&!$.includeFile(j,Y))continue;try{let V=await CP(Y,"utf8"),B={type:$.type,directoryPath:X.directoryPath,fileName:j,filePath:Y,content:V},H=$.parseFile(B),K=$.resolveId(H,B).trim();if(!K)continue;Z.set(K,{type:$.type,id:K,item:H,filePath:Y,fingerprint:PP(V)})}catch(V){if(this.emitParseErrors)this.emit({kind:"error",type:$.type,error:V,filePath:Y})}}}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 J of Q){let W=$.get(J);if(W)W.add(Z);else $.set(J,new Set([Z]))}return $}async readDirectoryFileCandidates($){try{return(await EP($,{withFileTypes:!0})).filter((Q)=>Q.isFile()).map((Q)=>({directoryPath:$,fileName:Q.name,filePath:wP($,Q.name)})).sort((Q,J)=>Q.fileName.localeCompare(J.fileName))}catch(Z){if(GU(Z)||FU(Z))return[];throw Z}}}import{readdir as zX,readFile as SP,stat as qX}from"node:fs/promises";import{basename as F$,dirname as bP,extname as _7,join as a0,resolve as p5}from"node:path";import{stripUtf8Bom as yP}from"@cline/shared";import{AGENTS_RULES_FILE_NAME as DU,RULES_CONFIG_DIRECTORY_NAME as q7,resolveGlobalAgentsRulesPath as kP,resolveRulesConfigSearchPaths as hP,resolveSkillsConfigSearchPaths as IP,resolveWorkflowsConfigSearchPaths as xP,SKILLS_CONFIG_DIRECTORY_NAME as l5,WORKFLOWS_CONFIG_DIRECTORY_NAME as i5}from"@cline/shared/storage";import gP from"yaml";var D7="SKILL.md",vP="managed.json",mP=new Set([".md",".markdown",".txt"]);function TX($){return $.trim().toLowerCase()}function P6($){let Z=$;return Z?.code==="ENOENT"||Z?.code==="ENOTDIR"||Z?.code==="EACCES"||Z?.code==="EPERM"||Z?.code==="ELOOP"}function L7($){return mP.has(_7($).toLowerCase())}function _U($){let Z=[],Q=new Set;for(let J of $){let W=p5(J);if(Q.has(W))continue;Q.add(W),Z.push(J)}return Z}function cP($){let Z=[...$?.directories??o5($?.workspacePath)];if($?.pluginSkillDirectories)Z.push(...$.pluginSkillDirectories);else if($?.includePluginSkills)Z.push(...PF({pluginPaths:$.pluginPaths,workspacePath:$.workspacePath,cwd:$.cwd??$.workspacePath}));return _U(Z)}async function NX($){try{let Z=await zX($,{withFileTypes:!0}),Q=[];for(let J of Z){if(!J.isDirectory())continue;let W=a0($,J.name),X=a0(W,vP);try{let j=await SP(X,"utf8"),Y=JSON.parse(j);if(Y&&typeof Y==="object")Q.push(W)}catch(j){if(P6(j))continue;if(j?.name==="SyntaxError")continue;throw j}}return Q.sort((J,W)=>J.localeCompare(W))}catch(Z){if(P6(Z))return[];throw Z}}function fX($){let Z=yP($),Q=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,J=Z.match(Q);if(!J)return{data:{},body:Z,hadFrontmatter:!1};let[,W,X]=J;try{let j=gP.parse(W);return{data:j&&typeof j==="object"&&!Array.isArray(j)?j:{},body:X,hadFrontmatter:!0}}catch(j){let Y=j instanceof Error?j.message:String(j);return{data:{},body:Z,hadFrontmatter:!0,parseError:Y}}}function A7($,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 J=$.trim();if(!J&&Q)throw Error(`Frontmatter field '${Z}' cannot be empty.`);return J||void 0}function S6($,Z){if($===void 0||$===null)return;if(typeof $!=="boolean")throw Error(`Frontmatter field '${Z}' must be a boolean.`);return $}function uP($,Z){if(F$($.filePath).toLowerCase()!==DU.toLowerCase())return F$($.filePath,_7($.filePath));if(Z&&p5($.filePath)===p5(Z,DU))return"Workspace AGENTS.md";if(p5($.filePath)===p5(kP()))return"Global AGENTS.md";return F$($.filePath,_7($.filePath))}function r5($,Z){let{data:Q,body:J,parseError:W}=fX($);if(W)throw Error(`Failed to parse YAML frontmatter: ${W}`);let X=J.trim();if(!X)throw Error("Missing instructions body in skill file.");let Y=A7(Q.name,"name",!1)??Z.trim();if(!Y)throw Error("Missing skill name.");return{name:Y,description:A7(Q.description,"description",!1),disabled:S6(Q.disabled,"disabled")??(S6(Q.enabled,"enabled")===!1?!0:void 0),instructions:X,frontmatter:Q}}function n5($,Z){let{data:Q,body:J,parseError:W}=fX($);if(W)throw Error(`Failed to parse YAML frontmatter: ${W}`);let X=J.trim();if(!X)throw Error("Missing instructions body in rule file.");let j=A7(Q.name,"name",!1)??Z.trim();if(!j)throw Error("Missing rule name.");return{name:j,disabled:S6(Q.disabled,"disabled")??(S6(Q.enabled,"enabled")===!1?!0:void 0),instructions:X,frontmatter:Q}}function a5($,Z){let{data:Q,body:J,parseError:W}=fX($);if(W)throw Error(`Failed to parse YAML frontmatter: ${W}`);let X=J.trim();if(!X)throw Error("Missing instructions body in workflow file.");let j=A7(Q.name,"name",!1)??Z.trim();if(!j)throw Error("Missing workflow name.");return{name:j,disabled:S6(Q.disabled,"disabled")??(S6(Q.enabled,"enabled")===!1?!0:void 0),instructions:X,frontmatter:Q}}function o5($){return IP($)}function s5($){return hP($)}function t5($){return xP($)}async function LU($){if(F$($)===".cline"){let Z=await NX($);return(await Promise.all(Z.map((J)=>LU(a0(J,l5))))).flat()}try{let Z=await zX($,{withFileTypes:!0}),Q=[];for(let J of Z){if(J.isFile()&&J.name===D7){Q.push({directoryPath:$,fileName:J.name,filePath:a0($,J.name)});continue}let W=a0($,J.name);if(J.isDirectory()||J.isSymbolicLink()&&await qX(W).then((j)=>j.isDirectory()).catch((j)=>{if(P6(j))return!1;throw j}))Q.push({directoryPath:W,fileName:D7,filePath:a0(W,D7)})}return Q}catch(Z){if(P6(Z))return[];throw Z}}async function O7($){if(F$($)===".cline"){let Z=await NX($);return(await Promise.all(Z.map((J)=>O7(a0(J,"rules.md"))))).flat()}try{if((await qX($)).isFile())return[{directoryPath:bP($),fileName:F$($),filePath:$}]}catch(Z){if(!P6(Z))throw Z}try{let Q=(await zX($,{withFileTypes:!0})).filter((W)=>W.isFile()&&L7(W.name)).map((W)=>({directoryPath:$,fileName:W.name,filePath:a0($,W.name)})),J=a0($,"AGENTS.md");try{if((await qX(J)).isFile()){if(!Q.some((j)=>j.fileName==="AGENTS.md"))Q.push({directoryPath:$,fileName:"AGENTS.md",filePath:J})}}catch{}return Q}catch(Z){if(P6(Z))return[];throw Z}}async function dP($){if(F$($)===".cline"){let Z=await NX($);return(await Promise.all(Z.map((J)=>O7(a0(J,i5))))).flat()}return O7($)}function e5($){let Z=cP($),Q=$?.workspacePath?a0($.workspacePath,".cline"):void 0;return{type:"skill",directories:Q?_U([...Z,Q]):Z,discoverFiles:LU,includeFile:(J)=>J===D7,parseFile:(J)=>r5(J.content,F$(J.directoryPath)),resolveId:(J)=>TX(J.name)}}function $9($){let Z=$?.directories??s5($?.workspacePath),Q=$?.workspacePath?a0($.workspacePath,".cline"):void 0;return{type:"rule",directories:Q?[...Z,Q]:Z,discoverFiles:O7,includeFile:(J,W)=>J===".clinerules"||L7(J)||L7(W),parseFile:(J)=>n5(J.content,uP(J,$?.workspacePath)),resolveId:(J)=>TX(J.name)}}function Z9($){let Z=$?.directories??t5($?.workspacePath),Q=$?.workspacePath?a0($.workspacePath,".cline"):void 0;return{type:"workflow",directories:Q?[...Z,Q]:Z,discoverFiles:dP,includeFile:(J)=>L7(J),parseFile:(J)=>a5(J.content,F$(J.filePath,_7(J.filePath))),resolveId:(J)=>TX(J.name)}}function AU($){let Z=[e5($?.skills),$9($?.rules),Z9($?.workflows)];return new Q8(Z,{debounceMs:$?.debounceMs,emitParseErrors:$?.emitParseErrors})}import{truncateSplit as OU}from"@cline/shared";function pP($,Z){if($.description?.trim())return OU($.description,".");if(Z==="workflow")return;return OU($.instructions,".")}function lP($){return $.disabled!==!0}function qU($,Z){return[...$.getSnapshot(Z).entries()].map(([Q,J])=>({id:Q,record:J})).filter(({record:Q})=>lP(Q.item)).map(({id:Q,record:J})=>({id:Q,name:J.item.name,instructions:J.item.instructions,description:pP(J.item,Z),kind:Z})).sort((Q,J)=>Q.name.localeCompare(J.name))}function Q9($){let Z=new Map;for(let Q of[...qU($,"workflow"),...qU($,"skill")])if(!Z.has(Q.name))Z.set(Q.name,Q);return[...Z.values()].sort((Q,J)=>Q.name.localeCompare(J.name))}function zU($,Z){if(!$.startsWith("/")||$.length<2)return $;let Q=$.match(/^\/(\S+)/);if(!Q)return $;let J=Q[1];if(!J)return $;let W=J.length+1,X=$.slice(W),j=Q9(Z).find((Y)=>Y.name===J);return j?`${j.instructions}${X}`:$}function z7($){return $.trim().replace(/^\/+/,"").toLowerCase()}function iP($){if(!$||$.length===0)return;let Z=$.map(z7).filter((Q)=>Q.length>0);return Z.length>0?new Set(Z):void 0}function rP($,Z,Q){if(!Q)return!0;let J=z7($),W=z7(Z),X=J.includes(":")?J.split(":").at(-1)??J:J,j=W.includes(":")?W.split(":").at(-1)??W:W;return Q.has(J)||Q.has(W)||Q.has(X)||Q.has(j)}function J9($,Z){let Q=iP(Z);return[...$.getSnapshot("skill").entries()].map(([W,X])=>{let j=X.item;return{id:W,name:j.name.trim(),description:j.description?.trim(),disabled:j.disabled===!0,skill:j}}).filter((W)=>rP(W.id,W.name,Q))}function nP($,Z){return J9($,Z).filter((Q)=>!Q.disabled).map((Q)=>Q.name.trim()).filter((Q)=>Q.length>0).sort((Q,J)=>Q.localeCompare(J))}function aP($,Z,Q){let J=z7(Z);if(!J)return{error:"Missing skill name."};let W=J9($,Q),X=W.find((H)=>H.id===J);if(X){let{skill:H}=X;if(H.disabled===!0)return{error:`Skill "${H.name}" is configured but disabled.`};return{id:X.id,skill:H}}let j=J.includes(":")?J.split(":").at(-1)??J:J,Y=W.filter(({id:H})=>{if(H===j)return!0;return H.endsWith(`:${j}`)}),V=Y.filter(({skill:H})=>H.disabled!==!0);if(V.length===1){let{id:H,skill:K}=V[0];return{id:H,skill:K}}if(V.length>1)return{error:`Skill "${Z}" is ambiguous. Use one of: ${V.map(({id:H})=>H).join(", ")}`};if(Y.length===1){let{skill:H}=Y[0];return{error:`Skill "${H.name}" is configured but disabled.`}}if(Y.length>1)return{error:`Skill "${Z}" is ambiguous, and all matches are disabled: ${Y.map(({id:H})=>H).join(", ")}`};let B=nP($,Q);return{error:B.length>0?`Skill "${Z}" not found. Available skills: ${B.join(", ")}`:"No skills are currently available."}}function RX($,Z=Promise.resolve(),Q){let J=new Set,W=async(X,j)=>{await Z;let Y=aP($,X,Q);if("error"in Y)return Y.error;let{id:V,skill:B}=Y;if(J.has(V))return`Skill "${B.name}" is already running.`;J.add(V);try{let H=j?.trim(),K=H?`
501
+ ${J}`;return Q||J}function XE($,Z){let Q=Z?.["*"]??{},J=Z?.[$]??{};return{...Q,...J}.enabled!==!1}function jE($,Z){return $.filter((Q)=>XE(Q.name,Z))}function YE($,Z){return n1(jE($,Z))}function VE($){let Z=$.filter((Q)=>Q!==void 0);if(Z.length===0)return{};return{beforeRun:async(Q)=>{for(let J of Z){let W=await J.beforeRun?.(Q);if(W?.stop)return W}return},afterRun:async(Q)=>{for(let J of Z)await J.afterRun?.(Q)},beforeModel:async(Q)=>{let J=Q.request,W;for(let X of Z){let j=await X.beforeModel?.({...Q,request:J});if(!j)continue;if(j.stop)return j;W={...W,...j,options:AG(W?.options,j.options)},J={...J,...j.messages?{messages:j.messages}:{},...j.tools?{tools:j.tools}:{},...j.options?{options:AG(J.options,j.options)}:{}}}return W},afterModel:async(Q)=>{for(let J of Z){let W=await J.afterModel?.(Q);if(W?.stop)return W}return},beforeTool:async(Q)=>{let J=Q.input,W;for(let X of Z){let j=await X.beforeTool?.({...Q,input:J});if(!j)continue;if(j.stop||j.skip)return j;if(W={...W,...j},Object.hasOwn(j,"input"))J=j.input}return W},afterTool:async(Q)=>{let J=Q.result,W;for(let X of Z){let j=await X.afterTool?.({...Q,result:J});if(!j)continue;if(j.stop)return j;if(W={...W,...j},j.result)J=j.result}return W},onEvent:async(Q)=>{for(let J of Z)await J.onEvent?.(Q)}}}class l${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 EW;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??eM,this.conversation=new TW($.initialMessages),this.messageBuilder=new OW(GG()),this.contributionRegistry=$E({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 MW({maxConsecutiveMistakes:Q,onLimitReached:$.onConsecutiveMistakeLimitReached,onLimitTelemetry:(X)=>{TZ(this.telemetry,{ulid:this.config.sessionId??this.conversation.getConversationId(),model:this.config.modelId,provider:this.config.providerId,reason:X.reason,consecutiveMistakes:X.consecutiveMistakes,maxConsecutiveMistakes:X.maxConsecutiveMistakes,agentId:this.agentId,conversationId:this.conversation.getConversationId(),parentAgentId:this.parentAgentId,isSubagent:Boolean(this.parentAgentId)})},emit:(X)=>this.emitLegacyEvent(X),log:(X,j,Y)=>BE(this.logger,X,j,Y),agentId:this.agentId,getConversationId:()=>this.conversation.getConversationId(),getActiveRunId:()=>this.activeRunId??"",appendRecoveryNotice:(X,j)=>{this.conversation.appendMessage({role:"user",content:[{type:"text",text:X}]})}});let J=$.execution?.loopDetection;this.loopDetectionDisabled=J===!1;let W=J===!1||J===void 0?void 0:J;this.loopTracker=new RW(W)}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((J)=>J.name)),Q=[...this.config.tools];for(let J of $)if(!Z.has(J.name))Q.push(J),Z.add(J.name);this.config={...this.config,tools:Q}}updateConnection($){let Z=u2($),Q={...this.config};if(Z.providerId!==void 0)Q.providerId=Z.providerId;if(Z.modelId!==void 0)Q.modelId=Z.modelId;if(Z.apiKey!==void 0)Q.apiKey=Z.apiKey;if(Z.baseUrl!==void 0)Q.baseUrl=Z.baseUrl;if(Z.headers!==void 0)Q.headers=Z.headers;if(Z.providerConfig!==void 0)Q.providerConfig=Z.providerConfig;if(Object.hasOwn(Z,"reasoningEffort"))Q.reasoningEffort=Z.reasoningEffort??void 0;if(Object.hasOwn(Z,"thinkingBudgetTokens"))Q.thinkingBudgetTokens=Z.thinkingBudgetTokens??void 0;if(Object.hasOwn(Z,"thinking")){if(Q.thinking=Z.thinking??void 0,Z.thinking===!1||Z.thinking===null)Q.reasoningEffort=void 0,Q.thinkingBudgetTokens=void 0}this.config=Q}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 JE(Z);if(Q)$.push(Q)}return WE(this.config.systemPrompt,$)}executeRun($){let Z;return Z=this.executeRunWithAuthRetry($).finally(()=>{if(this.activeRunPromise===Z)this.activeRunPromise=null}),this.activeRunPromise=Z,Z}async executeRunWithAuthRetry($){let Z=await this.executeRunInternal($);if(Z.finishReason!=="error"||!this.config.onAuthError||!ZE(Z.text))return Z;if(!await this.config.onAuthError().catch(()=>!1))return Z;let J=await this.executeRunInternal({isContinue:!0});return nV(this.telemetry,this.config.providerId,{recovered:J.finishReason!=="error"}),J}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 D=await KE(Q,$.userImages,$.userFiles,this.config.userFileContentLoader);this.conversation.appendMessage({role:"user",content:D})}let J=await this.composeSystemPrompt(),W=JG(this.config,this.logger,this.telemetry),X=new Map;for(let D of this.contributionRegistry.getRegisteredTools())X.set(D.name,D);let j=YE([...X.values()],this.config.toolPolicies),Y=new Map;for(let D of j)Y.set(D.name,D);for(let D of this.config.tools)Y.set(D.name,D);let V=this.conversation.getConversationId(),B=OG(this.config),H=Array.from(Y.values()),K=zQ(this.conversation.getMessages()),G=UG({agentConfig:this.config,sessionId:this.config.sessionId,agentId:this.agentId,conversationId:V,parentAgentId:this.parentAgentId,model:W,logger:this.logger,telemetry:this.telemetry,tools:H,toolContextMetadata:{modelSupportsImages:B?.capabilities?.includes("images")??!0,...this.config.toolContextMetadata},hooks:this.createRuntimeHooks(),prepareTurn:this.createRuntimePrepareTurn(B,H),initialMessages:K,systemPrompt:J}),F=this.createAgentRuntimeImpl(G);if(this.activeRuntime=F,this.abortRequested)F.abort(this.abortReason);let U=F.subscribe((D)=>{this.handleRuntimeEvent(D)}),_,L;try{if($.isContinue)_=await F.continue(void 0);else _=await F.run("")}catch(D){L=D instanceof Error?D:Error(String(D))}finally{U();try{await this.activeTrackerWork}catch(D){this.logger?.error?.("SessionRuntime tracker work failed during drain",{agentId:this.agentId,error:D})}this.activeRuntime=null,this.running=!1,this.abortRequested=!1,this.abortReason=void 0}if(_&&_.messages.length>0){let D=Y6(_.messages);this.conversation.replaceMessages(D)}let O=new Date;try{return this.buildLegacyResult({runResult:_,thrownError:L,startedAt:Z,endedAt:O})}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 $=VE([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 J=Q?.messages??Z.request.messages,W=await this.prepareMessagesForModelRequest(J);return{...Q,messages:W}}}}createRuntimePrepareTurn($,Z){let Q=this.config.prepareTurn;if(!Q)return;return async(J)=>{let W=Y6(J.messages),X=await this.prepareProviderMessagesForApi(W),j=await Q({agentId:J.agentId,conversationId:J.conversationId??this.conversation.getConversationId(),parentAgentId:J.parentAgentId??null,iteration:J.iteration,messages:W,apiMessages:X,abortSignal:J.signal??new AbortController().signal,systemPrompt:J.systemPrompt??"",tools:Z,model:{id:this.config.modelId,provider:this.config.providerId,info:$},emitStatusNotice:J.emitStatusNotice});if(!j)return;return{...j.messages?{messages:zQ(j.messages)}:{},...j.systemPrompt!==void 0?{systemPrompt:j.systemPrompt}:{}}}}async prepareMessagesForModelRequest($){let Z=await this.prepareProviderMessagesForApi(TQ($));return zQ(Z)}async prepareProviderMessagesForApi($){let Z=$,Q=this.contributionRegistry.getRegistrySnapshot().messageBuilder;for(let J of Q)Z=await J.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,J=this.toolInputs.get($.toolCall.toolCallId);this.toolStartedAt.delete($.toolCall.toolCallId),this.toolInputs.delete($.toolCall.toolCallId);let W=$.message.content.find((V)=>V.type==="tool-result"),X=W?.type==="tool-result"&&W.isError===!0,j=X?QE(W?.type==="tool-result"?W.output:void 0):void 0,Y={id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:J,output:W?.type==="tool-result"?W.output:void 0,error:j,durationMs:Z===void 0?0:Q.getTime()-Z.getTime(),startedAt:Z??Q,endedAt:Q};if(this.currentRunToolCalls.push(Y),X){if(this.currentTurnFailedTools+=1,j)this.currentTurnFailureDetails.push(`[${$.toolCall.toolName}] ${j}`)}else this.currentTurnSuccessfulTools+=1;break}case"turn-finished":{let Z=this.currentTurnFailedTools,Q=this.currentTurnSuccessfulTools;if(Z>0&&Q===0){let J=this.currentTurnFailureDetails.join("; ");this.enqueueMistakeRecord({iteration:$.iteration,reason:"tool_execution_failed",details:`${Z} tool call(s) failed${J?`: ${J}`:""}`})}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(Y6($));return}if(Z.length===0)return;let Q=new Set(this.conversation.getMessages().map((W)=>W.id).filter((W)=>typeof W==="string")),J=Y6(Z).filter((W)=>!W.id||!Q.has(W.id));if(J.length===0)return;this.conversation.replaceMessages([...this.conversation.getMessages(),...J])}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 J=this.loopTracker.inspect({name:$,input:Z});if(J.kind==="ok")return;if(J.kind==="soft"){if(J.message)this.conversation.appendMessage({role:"user",content:[{type:"text",text:J.message}]});return}this.enqueueMistakeRecord({iteration:Q,reason:"tool_execution_failed",forceAtLimit:!0,details:J.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:J,endedAt:W}=$,X=W.getTime()-J.getTime(),j=Q?"error":HE(Z),Y=(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,B=Z?Y6(Z.messages):this.conversation.getMessages(),H=OG(this.config);if(Q)throw Q;return{text:Y,usage:V,messages:B,toolCalls:this.currentRunToolCalls,iterations:Z?.iterations??0,finishReason:j,model:{id:this.config.modelId,provider:this.config.providerId,info:H},startedAt:J,endedAt:W,durationMs:X}}}function BE($,Z,Q,J){if(!$)return;if(Z==="debug"){$.debug(Q,J);return}if(Z==="error"&&$.error){$.error(Q,J);return}let W=Z==="warn"?"warn":Z==="error"?"error":"info";$.log(Q,{...J,severity:W})}function HE($){if(!$)return"error";switch($.status){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}async function KE($,Z,Q,J){let{buildInitialUserContent:W}=await Promise.resolve().then(() => LG);return W($,Z,Q,J)}function OG($){if($.knownModels?.[$.modelId])return $.knownModels[$.modelId];let Z=_W($);if(Z?.[$.modelId])return Z[$.modelId];return}import{buildClineSystemPrompt as qG}from"@cline/shared";function zG($,Z){let Q=$.trim();if(Z.providerId.toLowerCase()!=="cline")return Q;return qG({ide:Z.clineIdeName?.trim()||"Terminal",workspaceRoot:Z.cwd?.trim()||"/",providerId:Z.providerId,rules:`# Team Teammate Role
502
+ ${Q}`,platform:Z.clinePlatform,metadata:Z.workspaceMetadata})}function TG($,Z){let Q=$.trim();if(Z.providerId.toLowerCase()!=="cline")return Q;return qG({ide:Z.clineIdeName||"Terminal",workspaceRoot:Z.cwd?.trim()||"/",providerId:Z.providerId,overridePrompt:Q,metadata:Z.workspaceMetadata,platform:Z.clinePlatform})}function i$($){let Z={...$};return{getRuntimeConfig:()=>Z,getConnectionConfig:()=>({providerId:Z.providerId,modelId:Z.modelId,apiKey:Z.apiKey,baseUrl:Z.baseUrl,headers:Z.headers,onAuthError:Z.onAuthError,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking,reasoningEffort:Z.reasoningEffort,thinkingBudgetTokens:Z.thinkingBudgetTokens,maxTokensPerTurn:Z.maxTokensPerTurn,temperature:Z.temperature}),updateConnectionDefaults:(Q)=>{Z={...Z,...Q}}}}function d2($){let Z=$.configProvider.getRuntimeConfig(),Q=$.kind==="teammate"?zG($.prompt,Z):TG($.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 r$($){let Z=d2($),Q=new l$(Z);if(Z.onEvent)Q.subscribeEvents(Z.onEvent);return Q}var UE=CW.object({systemPrompt:CW.string().describe("System prompt defining the sub-agent's behavior"),task:CW.string().describe("Task for the sub-agent to complete")});function n$($){return GE({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:FE(UE),execute:async(Z,Q)=>{let J=$.createSubAgentTools?await $.createSubAgentTools(Z,Q):$.subAgentTools??[],W=r$({kind:"subagent",prompt:Z.systemPrompt,configProvider:$.configProvider,tools:J,maxIterations:$.defaultMaxIterations,parentAgentId:Q.agentId,abortSignal:Q.signal,onEvent:$.onSubAgentEvent,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval}),X=W.getAgentId(),j=W.getConversationId(),Y=Q.agentId;if($.onSubAgentStart)try{await $.onSubAgentStart({subAgentId:X,conversationId:j,parentAgentId:Y,input:Z})}catch{}try{let V=await W.run(Z.task),B={text:V.text,iterations:V.iterations,finishReason:V.finishReason,usage:{inputTokens:V.usage.inputTokens,outputTokens:V.usage.outputTokens}};if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:X,conversationId:j,parentAgentId:Y,input:Z,result:B,agentResult:V})}catch{}return B}catch(V){if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:X,conversationId:j,parentAgentId:Y,input:Z,error:V instanceof Error?V:Error(String(V))})}catch{}throw V}},timeoutMs:300000,retryable:!1})}import{createTool as T0,TEAM_AWAIT_TIMEOUT_MS as DE,TEAM_RUN_MESSAGE_PREVIEW_LIMIT as _E,TEAM_RUN_TEXT_PREVIEW_LIMIT as LE,TEAM_TASK_IGNORED_FIELDS_BY_ACTION as AE,TeamAttachOutcomeFragmentInputSchema as NG,TeamAwaitRunsInputSchema as fG,TeamBroadcastInputSchema as RG,TeamBroadcastToolResultSchema as OE,TeamCancelRunInputSchema as MG,TeamCancelRunToolResultSchema as qE,TeamCleanupInputSchema as EG,TeamCleanupToolResultSchema as zE,TeamCreateOutcomeInputSchema as CG,TeamCreateOutcomeToolResultSchema as TE,TeamFinalizeOutcomeInputSchema as wG,TeamFinalizeOutcomeToolResultSchema as NE,TeamListOutcomesInputSchema as PG,TeamListRunsInputSchema as SG,TeamMailboxMessageToolResultSchema as fE,TeamMissionLogInputSchema as bG,TeamMissionLogToolResultSchema as RE,TeamOutcomeFragmentToolResultSchema as yG,TeamOutcomeToolResultSchema as ME,TeamReadMailboxInputSchema as kG,TeamReviewOutcomeFragmentInputSchema as hG,TeamRunTaskInputSchema as IG,TeamRunTaskToolResultSchema as wW,TeamRunToolSummarySchema as PW,TeamSendMessageInputSchema as xG,TeamSendMessageToolResultSchema as EE,TeamShutdownTeammateInputSchema as gG,TeamSimpleAgentStatusToolResultSchema as vG,TeamSpawnTeammateInputSchema as mG,TeamStatusInputSchema as cG,TeamStatusToolResultSchema as CE,TeamTaskInputSchema as uG,TeamTaskToolResultSchema as D5,validateWithZod as g,zodToJsonSchema as N0}from"@cline/shared";function dG($,Z){let Q=$.replace(/\s+/g," ").trim();if(Q.length<=Z)return Q;return`${Q.slice(0,Math.max(0,Z-3)).trimEnd()}...`}function p2($,Z){if($===void 0)throw Error(`Missing required field: ${Z}`);return $}function wE($){let Z=$.result;if(!Z)return;return{textPreview:dG(Z.text,LE),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 MQ($){return $?.toISOString()}function SW($){return{id:$.id,agentId:$.agentId,taskId:$.taskId,status:$.status,messagePreview:dG($.message,_E),priority:$.priority,retryCount:$.retryCount,maxRetries:$.maxRetries,nextAttemptAt:MQ($.nextAttemptAt),continueConversation:$.continueConversation,startedAt:$.startedAt.toISOString(),endedAt:MQ($.endedAt),leaseOwner:$.leaseOwner,heartbeatAt:MQ($.heartbeatAt),lastProgressAt:MQ($.lastProgressAt),lastProgressMessage:$.lastProgressMessage,currentActivity:$.currentActivity,error:$.error,resultSummary:wE($)}}function PE($){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 B6=["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 pG($){let Z=[];if($.createBaseTools)Z.push(...$.createBaseTools());Z.push(...l2({runtime:$.runtime,requesterId:$.spec.agentId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!1,includeSpawnTool:!1})),$.runtime.spawnTeammate({agentId:$.spec.agentId,config:d2({kind:"teammate",prompt:$.spec.rolePrompt,role:$.spec.rolePrompt,configProvider:$.teammateConfigProvider,tools:Z,maxIterations:$.spec.maxIterations,cwd:$.teammateConfigProvider.getRuntimeConfig().cwd})})}function H6($){let Z=$.leadAgentId??"lead",Q=$.restoredFromPersistence===!0,J=l2({runtime:$.runtime,requesterId:Z,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!0,includeSpawnTool:$.includeLeadSpawnTool,includeManagementTools:$.includeLeadManagementTools,onLeadToolsUnlocked:$.onLeadToolsUnlocked}),W=[];for(let X of $.restoredTeammates??[]){if($.runtime.isTeammateActive(X.agentId))continue;pG({runtime:$.runtime,requesterId:Z,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:X}),W.push(X.agentId)}return{tools:J,restoredFromPersistence:Q,restoredTeammates:W}}function l2($){let Z=$.allowSpawn??!0,Q=$.includeSpawnTool??!0,J=$.includeManagementTools??!0,W=[];if(Q)W.push(T0({name:"team_spawn_teammate",description:"Spawn a teammate with a required agentId and rolePrompt.",inputSchema:N0(mG),execute:async(j)=>{let Y=g(mG,j);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:Y.agentId,rolePrompt:Y.rolePrompt};if(pG({runtime:$.runtime,requesterId:$.requesterId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:V}),!J)$.onLeadToolsUnlocked?.(l2({...$,includeSpawnTool:!1,includeManagementTools:!0,onLeadToolsUnlocked:void 0}));return g(vG,{agentId:Y.agentId,status:"spawned"})}}));if(!J)return W;W.push(T0({name:"team_shutdown_teammate",description:"Shutdown a teammate by agentId.",inputSchema:N0(gG),execute:async(j)=>{let Y=g(gG,j);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");return $.runtime.shutdownTeammate(Y.agentId,Y.reason),g(vG,{agentId:Y.agentId,status:"stopped"})}})),W.push(T0({name:"team_status",description:"Return a snapshot of team members, task counts, mailbox, and mission log stats.",inputSchema:N0(cG),execute:async(j)=>{return g(cG,j),g(CE,$.runtime.getSnapshot())}})),W.push(T0({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:N0(uG),execute:async(j)=>{let Y=g(uG,j);switch(Y.action){case"create":{let V=new Set(AE.create??[]),B=Object.entries(j).filter(([K,G])=>V.has(K)&&G!=null).map(([K])=>K),H=$.runtime.createTask({title:p2(Y.title,"title"),description:p2(Y.description,"description"),dependsOn:Y.dependsOn,assignee:Y.assignee,createdBy:$.requesterId});return g(D5,{action:"create",taskId:H.id,status:H.status,...B.length>0?{ignoredFields:B,note:`Ignored fields for action=create: ${B.join(", ")}`}:{}})}case"list":return g(D5,{action:"list",tasks:$.runtime.listTaskItems({status:Y.status,assignee:Y.assignee})});case"claim":{let V=$.runtime.claimTask(p2(Y.taskId,"taskId"),$.requesterId);return g(D5,{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(p2(Y.taskId,"taskId"),$.requesterId,p2(Y.summary,"summary"));return g(D5,{action:"complete",taskId:V.id,status:V.status})}case"block":{let V=$.runtime.blockTask(p2(Y.taskId,"taskId"),$.requesterId,p2(Y.reason,"reason"));return g(D5,{action:"block",taskId:V.id,status:V.status})}}}}));let X=new Map;return W.push(T0({name:"team_run_task",description:"Route a delegated task to a teammate. Choose sync (wait) or async (run in background).",inputSchema:N0(IG),execute:async(j)=>{let Y=g(IG,j);if(Y.runMode==="async"){let H=$.runtime.startTeammateRun(Y.agentId,Y.task,{taskId:Y.taskId||void 0,fromAgentId:$.requesterId,continueConversation:Y.continueConversation||void 0});return g(wW,{agentId:Y.agentId,mode:"async",status:"queued",dispatched:!0,message:`Task dispatched to ${Y.agentId} and queued as ${H.id}.`,runId:H.id})}let V=X.get(Y.agentId);if(V){let H=await V;return g(wW,{...H,status:"joined",deduped:!0,message:`Task for ${Y.agentId} was already dispatched in this tool batch; joined the existing in-flight run.`})}let B=$.runtime.routeToTeammate(Y.agentId,Y.task,{taskId:Y.taskId||void 0,fromAgentId:$.requesterId,continueConversation:Y.continueConversation||void 0}).then((H)=>g(wW,{agentId:Y.agentId,mode:"sync",status:"running",dispatched:!0,message:`Task dispatched to ${Y.agentId} and completed in sync mode.`,text:H.text,iterations:H.iterations})).finally(()=>{X.delete(Y.agentId)});return X.set(Y.agentId,B),await B}})),W.push(T0({name:"team_cancel_run",description:"Cancel one async teammate run.",inputSchema:N0(MG),execute:async(j)=>{let Y=g(MG,j),V=$.runtime.cancelRun(Y.runId,Y.reason);return g(qE,{runId:V.id,status:V.status})}})),W.push(T0({name:"team_list_runs",description:"List teammate runs started with team_run_task in async mode, including live activity/progress fields when available.",inputSchema:N0(SG),execute:async(j)=>g(PW.array(),$.runtime.listRuns(g(SG,j)).map(SW))})),W.push(T0({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:N0(fG),timeoutMs:DE,execute:async(j)=>{let Y=g(fG,j);if(Y.runId){let H=await $.runtime.awaitRun(Y.runId);return PE(H),g(PW,SW(H))}let V=await $.runtime.awaitAllRuns(),B=V.filter((H)=>["failed","cancelled","interrupted"].includes(H.status));if(B.length>0){let H=B.map((K)=>`${K.id}:${K.status}${K.error?`(${K.error})`:""}`).join(", ");throw Error(`One or more runs did not complete successfully: ${H}`)}return g(PW.array(),V.map(SW))}})),W.push(T0({name:"team_send_message",description:"Send a mailbox message to a specific teammate.",inputSchema:N0(xG),execute:async(j)=>{let Y=g(xG,j),V=$.runtime.sendMessage($.requesterId,Y.toAgentId,Y.subject,Y.body,Y.taskId??void 0);return g(EE,{id:V.id,toAgentId:V.toAgentId})}})),W.push(T0({name:"team_broadcast",description:"Broadcast a message to all teammates.",inputSchema:N0(RG),execute:async(j)=>{let Y=g(RG,j),V=$.runtime.broadcast($.requesterId,Y.subject,Y.body,{taskId:Y.taskId??void 0});return g(OE,{delivered:V.length})}})),W.push(T0({name:"team_read_mailbox",description:"Read the current agent mailbox.",inputSchema:N0(kG),execute:async(j)=>{let Y=g(kG,j);return g(fE.array(),$.runtime.listMailbox($.requesterId,{unreadOnly:Y.unreadOnly,markRead:!0}))}})),W.push(T0({name:"team_mission_log",description:"Append a mission log update for your team.",inputSchema:N0(bG),execute:async(j)=>{let Y=g(bG,j),V=$.runtime.appendMissionLog({agentId:$.requesterId,taskId:Y.taskId||void 0,kind:Y.kind,summary:Y.summary,evidence:Y.evidence?.length?Y.evidence:void 0,nextAction:Y.nextAction||void 0});return g(RE,{id:V.id})}})),W.push(T0({name:"team_cleanup",description:"Clean up the team runtime. Fails if teammates are still running.",inputSchema:N0(EG),execute:async(j)=>{if(g(EG,j),$.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can run cleanup.");return $.runtime.cleanup(),g(zE,{status:"cleaned"})}})),W.push(T0({name:"team_create_outcome",description:"Create a converged team outcome.",inputSchema:N0(CG),execute:async(j)=>{let Y=g(CG,j),V=$.runtime.createOutcome({title:Y.title,requiredSections:Y.requiredSections,createdBy:$.requesterId});return g(TE,{outcomeId:V.id,status:V.status,requiredSections:V.requiredSections})}})),W.push(T0({name:"team_attach_outcome_fragment",description:"Attach a fragment to an outcome section.",inputSchema:N0(NG),execute:async(j)=>{let Y=g(NG,j),V=$.runtime.attachOutcomeFragment({outcomeId:Y.outcomeId,section:Y.section,sourceAgentId:$.requesterId,sourceRunId:Y.sourceRunId||void 0,content:Y.content});return g(yG,{fragmentId:V.id,status:V.status})}})),W.push(T0({name:"team_review_outcome_fragment",description:"Review one outcome fragment.",inputSchema:N0(hG),execute:async(j)=>{let Y=g(hG,j),V=$.runtime.reviewOutcomeFragment({fragmentId:Y.fragmentId,reviewedBy:$.requesterId,approved:Y.approved});return g(yG,{fragmentId:V.id,status:V.status})}})),W.push(T0({name:"team_finalize_outcome",description:"Finalize one outcome.",inputSchema:N0(wG),execute:async(j)=>{let Y=g(wG,j),V=$.runtime.finalizeOutcome(Y.outcomeId);return g(NE,{outcomeId:V.id,status:V.status})}})),W.push(T0({name:"team_list_outcomes",description:"List team outcomes.",inputSchema:N0(PG),execute:async(j)=>{return g(PG,j),g(ME.array(),$.runtime.listOutcomes())}})),W}function EQ($){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 lG($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}var SE=[{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:n$({configProvider:{}}).description,headlessToolNames:["spawn_agent"]},{id:"teams",description:"Enable team collaboration tools for teammate management, task coordination, mailbox messaging, mission logs, and outcomes.",headlessToolNames:[...B6]}],bE={read_files:"enableReadFiles",search_codebase:"enableSearch",run_commands:"enableBash",fetch_web_content:"enableWebFetch",apply_patch:"enableApplyPatch",editor:"enableEditor",skills:"enableSkills",ask_question:"enableAskQuestion"};function yE($){return $==="plan"||$==="yolo"?$:"act"}function rG($){let Z=yE($.mode),Q=Q1[j$({mode:Z})],J=j6($.providerId??"",$.modelId??"",Z,X6);return{mode:Z,flags:{...Q,...J,...typeof $.enableSpawnAgent==="boolean"?{enableSpawnAgent:$.enableSpawnAgent}:{},...typeof $.enableAgentTeams==="boolean"?{enableAgentTeams:$.enableAgentTeams}:{}}}}function iG($,Z){if(Z.disabledToolIds?.has($))return!1;let{flags:Q}=rG(Z);if($==="spawn_agent")return Q.enableSpawnAgent===!0;if($==="teams")return Q.enableAgentTeams===!0;if($==="editor")return Q.enableEditor===!0||Q.enableApplyPatch===!0;let J=bE[$];return J?Q[J]===!0:!1}function kE($,Z){if($.id==="editor"){let{flags:Q}=rG(Z),J=Q.enableApplyPatch===!0&&Q.enableEditor!==!0;return{...$,defaultEnabled:iG($.id,Z),headlessToolNames:[J?"apply_patch":"editor"]}}return{...$,defaultEnabled:iG($.id,Z)}}function i2($={}){return SE.map((Z)=>kE(Z,$))}function CQ($={}){return i2($).filter((Z)=>Z.defaultEnabled).map((Z)=>Z.id)}function wQ($){if(!$.enabled)return new Set;let Z=i2($.availabilityContext),Q=new Set(Z.map((J)=>J.id));if(!$.allowlist||$.allowlist.length===0)return new Set(Z.filter((J)=>J.defaultEnabled).map((J)=>J.id));for(let J of $.allowlist)if(!Q.has(J))throw Error(`Unknown tool "${J}". Available tools: ${Z.map((W)=>W.id).join(", ")}`);return new Set($.allowlist)}function _5($,Z={}){return i2(Z).filter((Q)=>$.has(Q.id)).flatMap((Q)=>Q.headlessToolNames)}function PQ($,Z={}){return _5($,Z)}import{getDefaultShell as hE}from"@cline/shared";function r2($={}){let{executorOptions:Z={},executors:Q,...J}=$,W=J.shell??Z.bash?.shell??hE(process.platform),X={...Z,bash:{...Z.bash,shell:W}},j={...W6(X),...Q??{}};return u$({...J,shell:W,executors:j})}import{mkdirSync as cE,writeFileSync as uE}from"node:fs";import{dirname as dE}from"node:path";import{normalizeUserInput as pE,stripModeNotices as lE}from"@cline/shared";import{nanoid as iE}from"nanoid";var aG={};w(aG,{sanitizeSessionToken:()=>n2,parseTeamTaskSubSessionId:()=>G6,parseSubSessionId:()=>A5,makeTeamTaskSubSessionId:()=>L5,makeSubSessionId:()=>K6,deriveSubsessionStatus:()=>O5});import{nanoid as gE}from"nanoid";function n2($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function K6($,Z){let Q=n2($),J=n2(Z),W=`${Q}__${J}`;return W.length>180?W.slice(0,180):W}function L5($,Z){let Q=n2($),J=n2(Z);return`${Q}__teamtask__${J}__${gE(6)}`}function G6($){let Q=$.indexOf("__teamtask__");if(Q<=0)return null;let J=$.slice(0,Q),W=$.slice(Q+12),X=W.lastIndexOf("__");if(X<=0)return null;let j=W.slice(0,X),Y=W.slice(X+2);if(!J||!j||!Y)return null;return{rootSessionId:J,agentId:j,teamTaskId:Y}}function A5($){if(G6($))return null;let Z="__",Q=$.indexOf(Z);if(Q<=0)return null;let J=$.slice(0,Q),W=$.slice(Q+Z.length);if(!J||!W)return null;return{rootSessionId:J,agentId:W}}function O5($){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 Q0}from"zod";var tG={};w(tG,{isTerminalSessionStatus:()=>sG,isNonTerminalSessionStatus:()=>_0,SessionSource:()=>L0,SESSION_STATUSES:()=>q5,NON_TERMINAL_SESSION_STATUSES:()=>oG});import{SESSION_STATUS_VALUES as vE}from"@cline/shared";var q5=vE,oG=["idle","running","pending"];function sG($){return!oG.includes($)}function _0($){return!sG($)}var L0={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 mE=Q0.enum(q5),n0=Q0.object({version:Q0.literal(1),session_id:Q0.string().min(1),source:Q0.string().min(1),pid:Q0.number().int(),started_at:Q0.string().min(1),ended_at:Q0.string().min(1).optional(),exit_code:Q0.number().int().nullable().optional(),status:mE,interactive:Q0.boolean(),provider:Q0.string().min(1),model:Q0.string().min(1),cwd:Q0.string().min(1),workspace_root:Q0.string().min(1),team_name:Q0.string().min(1).optional(),enable_tools:Q0.boolean(),enable_spawn:Q0.boolean(),enable_teams:Q0.boolean(),prompt:Q0.string().optional(),metadata:Q0.record(Q0.string(),Q0.unknown()).optional(),messages_path:Q0.string().min(1).optional(),compaction_path:Q0.string().min(1).optional()});function eG($){if(!$)return!1;return Object.values($).some((Z)=>typeof Z==="function")}function yW($,Z){let Q=[...$??[],...Z??[]];if(Q.length===0)return;let J=[],W=new Set;for(let X of Q){if(W.has(X.name))continue;W.add(X.name),J.push(X)}return J}function $F($){return JSON.stringify($,(Z,Q)=>{if(Q instanceof Error)return{name:Q.name,message:Q.message,stack:Q.stack};return Q})}function Y$($){return typeof $==="string"&&$.trim()?$.trim():void 0}function bW($,Z){let Q={...$};Q.id=Y$(Q.id)??iE();let J=Q.modelInfo&&typeof Q.modelInfo==="object"?{...Q.modelInfo}:void 0,W={id:Y$(J?.id)??Y$(Q.modelId)??Y$(Z?.id),provider:Y$(J?.provider)??Y$(Q.providerId)??Y$(Z?.provider),family:Y$(J?.family)??Y$(Z?.family)};if(delete Q.providerId,delete Q.modelId,W.id&&W.provider)Q.modelInfo={id:W.id,provider:W.provider,...W.family?{family:W.family}:{}};else delete Q.modelInfo;return Q}function SQ($){return $.map((Z)=>bW(Z))}function bQ($,Z,Q=[]){let J=$.map((V,B)=>{let H=Q[B],G=H?.role===V.role&&JSON.stringify(H.content)===JSON.stringify(V.content)?{...H,...V}:{...V};return bW(G)}),W=Q.length,X=[];for(let V=W;V<J.length;V+=1)if(J[V]?.role==="assistant")X.push(V);if(X.length===0){let V=[...J].reverse().findIndex((B)=>B.role==="assistant");if(V===-1)return J;X.push(J.length-1-V)}let j=X[X.length-1],Y=X.some((V)=>J[V]?.metrics);for(let V of X){let B=J[V],H=B.metrics;if(!H&&V===j&&!Y){let K=Z.usage;H={inputTokens:K.inputTokens,outputTokens:K.outputTokens,cacheReadTokens:K.cacheReadTokens??0,cacheWriteTokens:K.cacheWriteTokens??0,cost:K.totalCost}}J[V]={...bW(B,{id:Z.model.id,provider:Z.model.provider,family:Z.model.info?.family}),...H?{metrics:H}:{},ts:B.ts??Z.endedAt.getTime()}}return J}function z5($){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 rE=120;function a2($){let Z=$?.trim();return Z?Z.slice(0,rE):void 0}function kW($){let Z=lE(pE($??"")).trim();if(!Z)return;return a2(Z.split(`
503
+ `)[0]?.trim())}function a$($){if(!$)return;let Z={...$},Q=a2(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 T5($){let Z=a$($.metadata)??{},Q=$.title!==void 0?a2($.title):kW($.prompt);if(Q)Z.title=Q;return Object.keys(Z).length>0?Z:void 0}function hW($){let Z=G6($);if(Z)return{agent:"teammate",sessionId:Z.rootSessionId,taskType:"team"};let Q=A5($);if(Q)return{agent:"subagent",sessionId:Q.rootSessionId,taskType:"subagent_task"};return{agent:"lead",sessionId:$}}function IW($){return{version:1,updated_at:$.updatedAt,agent:$.context.agent,sessionId:$.context.sessionId,...$.context.taskType?{taskType:$.context.taskType}:{},messages:SQ($.messages),...$.systemPrompt?{system_prompt:$.systemPrompt}:{}}}function ZF($,Z,Q){cE(dE($),{recursive:!0}),uE($,`${JSON.stringify(IW({updatedAt:Z,context:Q,messages:[]}),null,2)}
504
+ `,"utf8")}function QF($,Z){return n0.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 JF($,Z,Q){let J=0;while(!0){let W=await $();if(W===void 0)return{updated:!1};let X=await Z(W);if(typeof X==="object"&&X!==null&&"updated"in X&&X.updated===!1){if(J+=1,J>=Q)return X;continue}return X}}C0();var WF={};w(WF,{summarizeUsageFromMessages:()=>U6,sumUsageTotals:()=>N5,getCurrentContextSize:()=>xW,createInitialAccumulatedUsage:()=>w0,accumulateUsageTotals:()=>f0});function w0(){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 N5($){let Z=w0();for(let Q of $)Z=f0(Z,Q);return Z}function F6($){return typeof $==="number"&&Number.isFinite($)?$:0}function U6($){let Z=w0();for(let Q of $){let J=Q.metrics;if(!J)continue;Z=f0(Z,{inputTokens:F6(J.inputTokens),outputTokens:F6(J.outputTokens),cacheReadTokens:F6(J.cacheReadTokens),cacheWriteTokens:F6(J.cacheWriteTokens),totalCost:F6(J.cost)})}return Z}function xW($){for(let Z=$.length-1;Z>=0;Z-=1){let Q=$[Z];if(Q?.role!=="assistant")continue;let J=F6(Q.metrics?.inputTokens);return J>0?J:void 0}return}function nE($){if(!$||typeof $!=="object")return;let Z=$,Q=Z.skill??Z.skill_name??Z.skillName;if(typeof Q!=="string")return;let J=Q.trim();return J.length>0?J:void 0}function gW($){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 V$($){let Z=$.agentId?.trim();if(!Z)return;let Q=$.parentAgentId?.trim()||void 0,J=$.teamRole,W="root";if(J==="teammate")W="team_teammate";else if(J==="lead")W="team_lead";else if(Q)W="subagent";return{agentId:Z,agentKind:W,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:J,teamAgentId:$.teamAgentId?.trim()||void 0}}function aE($){return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheWriteTokens:$.cacheWriteTokens,cacheReadTokens:$.cacheReadTokens,totalCost:$.cost}}function oE($){let Z=$.isPrimaryAgentEvent?[$.overrides?.agentId,$.eventMetadata.agentId,$.overrides?.teamAgentId]:[$.overrides?.teamAgentId,$.overrides?.agentId,$.eventMetadata.agentId,$.eventMetadata.conversationId];for(let Q of Z){let J=Q?.trim();if(J)return J}return $.isPrimaryAgentEvent?"root":"unknown"}function vW($,Z,Q){let{sessionId:J,config:W,liveSession:X,emit:j}=$,Y=W.telemetry,V=X?.runtime.teamRuntime,B=Q?.isPrimaryAgentEvent??!0,H=gW(Z),K=V$({agentId:Q?.agentId??H.agentId,conversationId:Q?.conversationId??H.conversationId,parentAgentId:Q?.parentAgentId??H.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 G=nE(Z.input);if(G)qZ(Y,{ulid:J,skillName:G,skillSource:"project",skillsAvailableGlobal:0,skillsAvailableProject:0,provider:W.providerId,modelId:W.modelId,...K})}if(Z.type==="content_end"&&Z.contentType==="tool"){let G=Z.toolName??"unknown",F=!Z.error;if(k8(Y,{ulid:J,tool:G,autoApproved:void 0,success:F,modelId:W.modelId,provider:W.providerId,...K}),!F&&(G==="editor"||G==="apply_patch"))zZ(Y,{ulid:J,modelId:W.modelId,provider:W.providerId,errorType:Z.error,...K})}if(Z.type==="notice"&&Z.reason==="api_error")z4(Y,{ulid:J,model:W.modelId,provider:W.providerId,errorMessage:Z.message,...K});if(Z.type==="error")z4(Y,{ulid:J,model:W.modelId,provider:W.providerId,errorMessage:Z.error?.message??"unknown error",...K});if(Z.type==="usage"&&X?.turnUsageBaseline){let G=aE(Z);if(B){X.turnPrimaryUsage=f0(X.turnPrimaryUsage??w0(),G);let U=f0(X.turnUsageBaseline,X.turnPrimaryUsage);$.usageBySession.set(J,U),y8(Y,{ulid:J,provider:W.providerId,model:W.modelId,source:"assistant",mode:W.mode,...K}),AZ(Y,{ulid:J,tokensIn:Z.inputTokens,tokensOut:Z.outputTokens,cacheWriteTokens:Z.cacheWriteTokens,cacheReadTokens:Z.cacheReadTokens,totalCost:Z.cost,model:W.modelId,...K})}else{let U=oE({isPrimaryAgentEvent:B,overrides:Q,eventMetadata:H}),_=X.turnUsageByAgent??new Map;X.turnUsageByAgent=_,_.set(U,f0(_.get(U)??w0(),G))}let F=f0(X.turnPrimaryUsage??w0(),N5(X.turnUsageByAgent?.values()??[]));$.aggregateUsageBySession.set(J,f0(X.turnAggregateUsageBaseline??X.turnUsageBaseline,F))}if(Z.type==="iteration_end"&&B)$.persistMessages(J,X?.agent.getMessages()??[],X?.config.systemPrompt);j({type:"agent_event",payload:{sessionId:J,event:Z,teamAgentId:Q?.teamAgentId,teamRole:Q!==void 0?Q.teamRole??(B?"lead":void 0):void 0}}),j({type:"chunk",payload:{sessionId:J,stream:"agent",chunk:$F(Z),ts:Date.now()}})}function B$($){return $.workspaceRoot??$.cwd}import{resolveProviderRequestHeaders as VP}from"@cline/llms";import{hasRuntimeConfigExtension as BP}from"@cline/shared";H1();import{existsSync as gQ,readFileSync as gC,statSync as vC}from"node:fs";import{basename as mC,dirname as IQ,join as vQ,resolve as xQ}from"node:path";import{discoverPluginModulePaths as cC,resolveConfiguredPluginModulePaths as EF,resolvePluginConfigSearchPaths as uC,SKILLS_CONFIG_DIRECTORY_NAME as dC}from"@cline/shared/storage";import{resolve as _C}from"node:path";import{normalizePluginManifest as LC}from"@cline/shared";import{existsSync as S0,readFileSync as _6}from"node:fs";import{builtinModules as sE,createRequire as dW}from"node:module";import{dirname as o$,extname as R5,isAbsolute as tE,resolve as o}from"node:path";import{fileURLToPath as jF}from"node:url";import{PLUGIN_FILE_EXTENSIONS as eE}from"@cline/shared";var YF=o$(jF(import.meta.url)),$C=dW(import.meta.url),ZC=o(YF,"..","..","..","..",".."),mW=WC(ZC),QC=["@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"],pW=new Set(sE.flatMap(($)=>[$,$.replace(/^node:/,"")])),f5=new Set(eE),JC=["development","node","import","require","default"];function WC($){let Z={},Q={"@cline/sdk":o($,"packages/sdk/src/index.ts"),"@cline/agents":o($,"packages/agents/src/index.ts"),"@cline/core":o($,"packages/core/src/index.ts"),"@cline/llms":o($,"packages/llms/src/index.ts"),"@cline/shared":o($,"packages/shared/src/index.ts"),"@cline/shared/storage":o($,"packages/shared/src/storage/index.ts"),"@cline/shared/db":o($,"packages/shared/src/db/index.ts")};for(let[J,W]of Object.entries(Q))if(S0(W))Z[J]=W;for(let J of["agents","core","llms","shared"]){let W=o($,"packages",J),X=o(W,"package.json");if(!S0(X))continue;try{let j=JSON.parse(_6(X,"utf8"));if(typeof j.name!=="string"||!j.exports)continue;if(typeof j.exports==="string"){let Y=o(W,j.exports);if(S0(Y))Z[j.name]=Y;continue}if(typeof j.exports!=="object")continue;for(let[Y,V]of Object.entries(j.exports)){let B=XC(W,V);if(!B)continue;let H=Y==="."?j.name:`${j.name}/${Y.replace(/^\.\//,"")}`;Z[H]=B}}catch{}}return Z}function XC($,Z){let Q=lW(Z);if(!Q)return null;let J=VF($,Q);for(let W of J)if(S0(W))return W;return null}function lW($,Z=new Set){if(typeof $==="string")return $;if(!$||typeof $!=="object")return null;if(Z.has($))return null;Z.add($);let Q=$;for(let J of JC){let W=lW(Q[J],Z);if(W)return W}return null}function VF($,Z){let Q=Z.replace(/^\.\//,""),J=[o($,Z)];if(Q.startsWith("dist/")){let W=Q.replace(/^dist\//,"src/").replace(/\.(mjs|cjs|js)$/,"");return[o($,`${W}.ts`),o($,`${W}.tsx`),o($,`${W}.mts`),o($,`${W}.cts`),...J]}return J}function jC($){return Object.fromEntries(Object.entries($).sort(([Z],[Q])=>Q.length-Z.length))}function yQ($){return!($.startsWith(".")||$.startsWith("/")||$.startsWith("file:")||$.startsWith("data:")||$.startsWith("http:")||$.startsWith("https:"))}function D6($){if($.startsWith("@")){let[Z,Q]=$.split("/",3);return Q?`${Z}/${Q}`:$}return $.split("/",1)[0]??$}function YC($){let Z=D6($);if($===Z)return".";return`.${$.slice(Z.length)}`}function BF($){return D6($).startsWith("@cline/")}function cW($,Z){let Q=D6(Z),J=o$($);while(!0){let W=o(J,"node_modules",Q);if(S0(W)||S0(o(W,"package.json")))return!0;let X=o(J,"..");if(X===J)return!1;J=X}}function XF($){return uW($)!==null}function uW($){try{return $C.resolve($)}catch{}return VC($)}function VC($){let Z=D6($),Q=HF(Z);if(!Q)return null;let J=o(Q,"package.json");try{let W=JSON.parse(_6(J,"utf8")),X=YC($),j=X==="."&&typeof W.exports==="string"?W.exports:W.exports&&typeof W.exports==="object"&&Object.hasOwn(W.exports,X)?W.exports[X]:void 0,Y=lW(j)??(X==="."&&typeof W.main==="string"?W.main:null);if(!Y)return null;let V=o(Q,Y),B=[V,...VF(Q,Y).filter((H)=>H!==V)];for(let H of B)if(S0(H))return H;return null}catch{return null}}function BC(){let $=[YF],Z=process.env.CLINE_WRAPPER_PATH?.trim();if(Z)$.push(o$(o$(Z)));let Q=process.execPath?.trim();if(Q)$.push(o$(Q));return[...new Set($.map((J)=>o(J)))]}function HC($,Z){let Q=$;while(!0){let J=o(Q,"package.json");if(S0(J))try{if(JSON.parse(_6(J,"utf8")).name===Z)return Q}catch{}let W=o(Q,"node_modules",Z,"package.json");if(S0(W))return o$(W);let X=o(Q,"..");if(X===Q)return null;Q=X}}function HF($){for(let Z of BC()){let Q=HC(Z,$);if(Q)return Q}return null}function KC($){let Q=o$($);for(let J=0;J<4;J++){let W=o(Q,"package.json");if(S0(W))try{let j=JSON.parse(_6(W,"utf8"));return j!=null&&typeof j==="object"&&"cline"in j}catch{return!1}let X=o(Q,"..");if(X===Q)return!1;Q=X}return!1}function KF($,Z){let Q=Z.startsWith("file:")?jF(Z):tE(Z)?Z:o(o$($),Z);if(S0(Q)&&f5.has(R5(Q)))return Q;for(let J of f5){let W=`${Q}${J}`;if(S0(W))return W}for(let J of f5){let W=o(Q,`index${J}`);if(S0(W))return W}return null}function GF($){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 J of Q)for(let W of $.matchAll(J)){let X=W[1];if(X)Z.add(X)}return[...Z]}function GC($){return R5($)!==".ts"}function FF($,Z,Q=new Set){if(Q.has($)||!S0($))return;if(Q.add($),!f5.has(R5($)))return;let J=_6($,"utf8"),W=GC($);for(let X of GF(J)){if(X.startsWith("node:")||pW.has(X))continue;if(yQ(X)){if(!W)continue;if(Object.hasOwn(mW,X)||Object.hasOwn(mW,D6(X))||cW($,X)||BF(X)&&XF(X)||Z&&XF(X))continue;throw Error(`Cannot find module '${D6(X)}'`)}let j=KF($,X);if(j)FF(j,Z,Q)}}function UF($,Z=new Set,Q=new Set){if(Z.has($)||!S0($))return Q;if(Z.add($),!f5.has(R5($)))return Q;let J=_6($,"utf8");for(let W of GF(J)){if(Q.add(W),yQ(W))continue;let X=KF($,W);if(X)UF(X,Z,Q)}return Q}function FC($,Z){let Q=dW($),J={},W=UF($),X=new Set(QC);for(let[j,Y]of Object.entries(mW)){try{Q.resolve(j);continue}catch{}J[j]=Y}for(let j of W)if(yQ(j)&&(BF(j)||Z))X.add(j);for(let j of X){if(Object.hasOwn(J,j)||cW($,j))continue;let Y=uW(j);if(Y)J[j]=Y}if(!Z)return J;for(let j of W){if(!yQ(j)||Object.hasOwn(J,j)||cW($,j)||j.startsWith("node:")||pW.has(j))continue;let Y=uW(j);if(Y)J[j]=Y}return J}function UC($){let Z=R5($);return Z===".ts"||Z===".tsx"||Z===".mts"||Z===".cts"}var o2;function DC(){if(o2!==void 0)return o2;let $=HF("jiti");if(!$)return o2=null,null;let Z=o($,"dist","babel.cjs");if(!S0(Z))return o2=null,null;try{let J=dW(Z)(Z);o2=typeof J==="function"?J:null}catch{o2=null}return o2}async function DF($,Z={}){let Q=!KC($);FF($,Q);let J=FC($,Q),W=jC(J),X=await import("jiti"),j=typeof X==="function"?X:typeof X.default==="function"?X.default:void 0;if(!j)throw Error("Unable to load jiti");let Y=Object.entries(W).filter(([,K])=>UC(K)).map(([K])=>K),V=DC(),B=V?(K)=>V({...K,interopDefault:!0}):void 0;return await j($,{alias:W,cache:Z.useCache,requireCache:Z.useCache,esmResolve:!0,interopDefault:!1,nativeModules:[...pW],transformModules:Y,tryNative:!1,...B?{transform:B}:{}}).import($,{})}function _F($,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 LF($){return typeof $==="object"&&$!==null}function iW($){return Array.isArray($)&&$.every((Z)=>typeof Z==="string")}function AC($,Z){if(!LF($.manifest))throw Error(`Invalid plugin module at ${Z}: missing required "manifest"`);if(!iW($.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")&&!iW($.manifest.providerIds))throw Error(`Invalid plugin module at ${Z}: manifest.providerIds must be a string array when provided`);if(Object.hasOwn($.manifest,"modelIds")&&!iW($.manifest.modelIds))throw Error(`Invalid plugin module at ${Z}: manifest.modelIds must be a string array when provided`)}function OC($,Z){if(!LF($))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"`);AC($,Z)}async function M5($,Z={}){let Q=_C(Z.cwd??process.cwd(),$),J=await DF(Q,{useCache:Z.useCache}),W=Z.exportName??"plugin",X=J.default??J[W];OC(X,Q);let j=X,Y=j.setup,V=Y?(B,H)=>{let K={...Z.session,...H.session},G={...H,session:Object.keys(K).length>0?K:void 0,client:Z.client??H.client,user:Z.user??H.user,workspaceInfo:Z.workspaceInfo??H.workspaceInfo,automation:Z.automation??H.automation,logger:Z.logger??H.logger,telemetry:Z.telemetry??H.telemetry};return Y(B,G)}:void 0;return{...j,manifest:LC(j.manifest),setup:V}}async function kQ($,Z={}){return(await s2($,Z)).plugins}async function s2($,Z={}){let Q=[],J=[],W=new Map,X=0;for(let Y of $)try{let V=await M5(Y,Z);if(!_F(V.manifest,Z))continue;let B=W.get(V.name);if(B)J.push({type:"duplicate_plugin_override",pluginName:V.name,pluginPath:Y,overriddenPluginPath:B.pluginPath,message:`Plugin "${V.name}" from ${Y} overrides ${B.pluginPath}`});W.set(V.name,{plugin:V,pluginPath:Y,order:X++})}catch(V){let B=V instanceof Error?V.message:String(V);Q.push({pluginPath:Y,phase:"load",message:B,stack:V instanceof Error?V.stack:void 0})}let j=[...W.values()].sort((Y,V)=>Y.order-V.order);return{plugins:j.map((Y)=>Y.plugin),pluginPaths:j.map((Y)=>Y.pluginPath),failures:Q,warnings:J}}import{existsSync as tW}from"node:fs";import{createRequire as fF}from"node:module";import{dirname as hQ,join as A6}from"node:path";import{fileURLToPath as fC}from"node:url";var zF={};w(zF,{resolveSubprocessRuntimeExecutable:()=>nW,buildSubprocessSandboxCommand:()=>qF,SubprocessSandbox:()=>L6,CLINE_JS_RUNTIME_PATH_ENV:()=>OF});import{spawn as qC}from"node:child_process";import{basename as zC}from"node:path";import{augmentNodeCommandForDebug as TC,withResolvedClineBuildEnv as NC}from"@cline/shared";function rW($){if($ instanceof Error)return $;return Error(String($))}var OF="CLINE_JS_RUNTIME_PATH";function AF($){let Z=$?.trim();if(!Z)return!1;let Q=zC(Z).toLowerCase();return Q==="node"||Q==="node.exe"||Q==="bun"||Q==="bun.exe"}function nW($={}){let Z=$.env??process.env,Q=$.runtimeExecutable?.trim()||Z[OF]?.trim();if(Q)return Q;let J=$.execPath?.trim()||process.execPath;if(AF(J))return J;for(let W of[Z.BUN_EXEC_PATH,Z.npm_node_execpath,Z.NODE]){let X=W?.trim();if(X&&AF(X))return X}return"node"}function qF($,Z={}){let Q=nW({env:Z.env,execPath:Z.execPath,runtimeExecutable:Z.runtimeExecutable});return TC([Q,...$],{env:Z.env,execArgv:Z.execArgv,debugRole:Z.name==="plugin-sandbox"?"plugin-sandbox":"sandbox"})}class L6{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=qF($,{name:this.options.name,runtimeExecutable:this.options.runtimeExecutable}),Q=qC(Z[0]??nW(this.options),Z.slice(1),{stdio:["ignore","ignore","pipe","ipc"],env:NC(process.env),windowsHide:!0});this.process=Q;let J="",W=(X)=>{let j=J+X;J=j.length>4000?j.slice(-4000):j};Q.stderr?.setEncoding("utf8"),Q.stderr?.on("data",(X)=>{W(X)}),Q.on("message",(X)=>{this.onMessage(X)}),Q.on("error",(X)=>{this.failPending(Error(`${this.processLabel} process error: ${rW(X).message}`))}),Q.on("exit",(X,j)=>{this.process=null;let Y=J.trim();this.failPending(Error(`${this.options.name??"sandbox"} process exited (code=${String(X)}, signal=${String(j)})${Y?`: ${Y}`:""}`))})}async call($,Z,Q={}){this.start();let J=this.process;if(!J||J.exitCode!==null)throw Error(`${this.processLabel} process is not available`);let W=`req_${++this.requestCounter}`,X={type:"call",id:W,method:$,args:Z};return await new Promise((j,Y)=>{let V={resolve:(B)=>j(B),reject:Y};if((Q.timeoutMs??0)>0)V.timeout=setTimeout(()=>{this.clearPendingRequest(W),this.shutdown().catch(()=>{}),Y(Error(`${this.processLabel} call timed out after ${Q.timeoutMs}ms: ${$}`))},Q.timeoutMs);this.pending.set(W,V);try{J.send(X,(B)=>{if(!B)return;let H=this.clearPendingRequest(W);if(!H)return;H.reject(Error(`${this.processLabel} failed to send call "${$}": ${rW(B).message}`))})}catch(B){this.clearPendingRequest(W),Y(rW(B))}})}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 RC($){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 E5($){return($ instanceof Error?$.message:String($)).includes("Unknown sandbox plugin id:")}function MC(){return`@cline/cli-${process.platform==="win32"?"windows":process.platform}-${process.arch}`}function EC(){let $=process.env.CLINE_WRAPPER_PATH?.trim();if(!$)return;try{let Q=fF($).resolve(`${MC()}/package.json`),J=A6(hQ(Q),"extensions","plugin-sandbox-bootstrap.js");return tW(J)?J:void 0}catch{return}}function CC(){let $=process.execPath?.trim();if(!$)return;let Z=A6(hQ(hQ($)),"extensions","plugin-sandbox-bootstrap.js");return tW(Z)?Z:void 0}function wC(){let $=hQ(fC(import.meta.url)),Z=fF(import.meta.url),Q=[A6($,"plugin-sandbox-bootstrap.js"),A6($,"extensions","plugin-sandbox-bootstrap.js"),A6($,"agents","plugin-sandbox-bootstrap.js"),EC(),CC()];for(let X of Q.filter((j)=>typeof j==="string"))if(tW(X))return{file:X};let J=A6($,"plugin-sandbox-bootstrap.ts"),W="jiti";try{W=Z.resolve("jiti")}catch{}return{script:[`const createJiti = require(${JSON.stringify(W)});`,`const jiti = createJiti(${JSON.stringify(J)}, { cache: false, requireCache: false, esmResolve: true, interopDefault: false });`,`Promise.resolve(jiti.import(${JSON.stringify(J)}, {})).catch((error) => {`," console.error(error);"," process.exitCode = 1;","});"].join(`
505
+ `)}}var aW=wC();function oW($,Z,Q){if(typeof $==="number"&&$>0)return $;if(Q){let J=process.env[Q];if(J){let W=Number(J);if(Number.isInteger(W)&&W>0)return W}}return Z}async function O6($){let Z=new L6({name:"plugin-sandbox",..."file"in aW?{bootstrapFile:aW.file}:{bootstrapScript:aW.script},onEvent:$.onEvent}),Q=oW($.importTimeoutMs,4000,"CLINE_PLUGIN_IMPORT_TIMEOUT_MS"),J=oW($.hookTimeoutMs,3000),W=oW($.contributionTimeoutMs,60000),X={pluginPaths:$.pluginPaths,exportName:$.exportName,providerId:$.providerId,modelId:$.modelId,cwd:$.cwd,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,loggerEnabled:Boolean($.logger),telemetryEnabled:$.telemetryAvailable===!0},j,Y=()=>{return j??=Z.call("initialize",X,{timeoutMs:Q}).finally(()=>{j=void 0}),j},V;try{V=await Z.call("initialize",X,{timeoutMs:Q})}catch(K){throw await Z.shutdown().catch(()=>{}),K}let B=V.plugins.map(RC);return{extensions:B.map((K)=>{let G={name:K.name,__clinePluginPath:K.pluginPath,manifest:K.manifest,setup:(F)=>{SC(F,Z,K,W,Y),bC(F,Z,K,W,Y),yC(F,Z,K,W,Y),hC(F,Z,K,W,Y),kC(F,K)}};return G.hooks=xC(Z,K,J,Y),G}),failures:V.failures,pluginPaths:B.map((K)=>K.pluginPath),shutdown:async()=>{await Z.shutdown()},warnings:V.warnings}}function PC($){let Z=$ instanceof Error?$.message:String($);return/cyclic|circular|bigint/i.test(Z)}function sW($,Z=new WeakSet){if($===null||typeof $!=="object")return typeof $==="function"||typeof $==="symbol"||typeof $==="bigint"?void 0:$;if(Z.has($))return;let Q=$;if(typeof Q.toJSON==="function")try{return Q.toJSON()}catch{return}Z.add($);try{if(Array.isArray($))return $.map((W)=>sW(W,Z)??null);let J={};for(let[W,X]of Object.entries($)){let j=sW(X,Z);if(j!==void 0)J[W]=j}return J}finally{Z.delete($)}}var TF=new Set;function RF($,Z,Q){let J=`${$}:${Z}`;if(TF.has(J))return;TF.add(J);let W=Q instanceof Error?Q.message:String(Q);console.warn(`[plugin-sandbox] ${$} "${Z}" received a payload that is not JSON-serializable (${W}); retrying with non-serializable values dropped. Host-only objects must not be placed on tool contexts or hook payloads.`)}async function MF($,Z,Q){try{return await $(Z)}catch(J){if(!PC(J))throw J;return Q(J),await $(sW(Z))}}function SC($,Z,Q,J,W){for(let X of Q.contributions?.tools??[]){let j={name:X.name,description:X.description??"",inputSchema:X.inputSchema??{type:"object",properties:{}},timeoutMs:X.timeoutMs,retryable:X.retryable,execute:async(Y,V)=>{return await MF(async(H)=>{let{input:K,context:G}=H;try{return await Z.call("executeTool",{pluginId:Q.pluginId,contributionId:X.id,input:K,context:G},{timeoutMs:J})}catch(F){if(!E5(F))throw F;return await W(),await Z.call("executeTool",{pluginId:Q.pluginId,contributionId:X.id,input:K,context:G},{timeoutMs:J})}},{input:Y,context:V},(H)=>RF("tool",X.name,H))}};$.registerTool(j)}}function bC($,Z,Q,J,W){for(let X of Q.contributions?.commands??[])$.registerCommand({name:X.name,description:X.description,handler:async(j)=>{try{return await Z.call("executeCommand",{pluginId:Q.pluginId,contributionId:X.id,input:j},{timeoutMs:J})}catch(Y){if(!E5(Y))throw Y;return await W(),await Z.call("executeCommand",{pluginId:Q.pluginId,contributionId:X.id,input:j},{timeoutMs:J})}}})}function yC($,Z,Q,J,W){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:J})}catch(j){if(!E5(j))throw j;return await W(),await Z.call("resolveRuleContent",{pluginId:Q.pluginId,contributionId:X.id},{timeoutMs:J})}}:X.content??""})}function kC($,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 hC($,Z,Q,J,W){for(let X of Q.contributions?.messageBuilders??[])$.registerMessageBuilder({name:X.name,async build(j){try{let Y=await Z.call("buildMessages",{pluginId:Q.pluginId,contributionId:X.id,messages:j},{timeoutMs:J});return NF(Y)?Y:j}catch(Y){if(!E5(Y))throw Y;await W();let V=await Z.call("buildMessages",{pluginId:Q.pluginId,contributionId:X.id,messages:j},{timeoutMs:J});return NF(V)?V:j}}})}function NF($){return Array.isArray($)&&$.every((Z)=>typeof Z==="object"&&Z!==null&&("role"in Z)&&("content"in Z))}function IC($,Z,Q,J,W){return async(X)=>{return await MF(async(Y)=>{try{return await $.call("invokeHook",{pluginId:Z,hookName:Q,payload:Y},{timeoutMs:J})}catch(V){if(!E5(V))throw V;return await W(),await $.call("invokeHook",{pluginId:Z,hookName:Q,payload:Y},{timeoutMs:J})}},X,(Y)=>RF("hook",Q,Y))}}function xC($,Z,Q,J){let W={};for(let X of Z.hooks??[])W[X]=IC($,Z.pluginId,X,Q,J);return Object.keys(W).length>0?W:void 0}var $X="package.json",pC="package";function C5($){return uC($)}function w5($){return cC($)}function lC($){try{return gQ($)&&vC($).isDirectory()}catch{return!1}}function ZX($){let Z=[],Q=new Set;for(let J of $){let W=xQ(J);if(Q.has(W))continue;Q.add(W),Z.push(W)}return Z}function CF($){let Z=ZX($);return kZ(Z)}function wF($){return C5($).flatMap((Z)=>w5(Z)).filter((Z)=>gQ(Z))}function iC($,Z){let Q=[];for(let J of $)try{Q.push(...EF([J],Z))}catch{}return Q}function eW($){return typeof $==="object"&&$!==null}function rC($){try{let Z=JSON.parse(gC(vQ($,$X),"utf8"));if(!eW(Z)||!eW(Z.cline))return[];let Q=Z.cline.plugins;if(!Array.isArray(Q))return[];let J=[];for(let W of Q){if(typeof W==="string"){J.push(W);continue}if(!eW(W)||!Array.isArray(W.paths))continue;for(let X of W.paths)if(typeof X==="string")J.push(X)}return J}catch{return[]}}function PF($,Z){let Q=xQ(Z);return rC($).some((J)=>xQ($,J)===Q)}function nC($,Z){return mC($)===pC&&gQ(vQ(IQ($),$X))&&PF(IQ($),Z)}function aC($){let Z=xQ($),Q=[],J=IQ(Z);while(!0){if(nC(J,Z)){Q.push(J);break}if(gQ(vQ(J,$X))){if(PF(J,Z))Q.push(J);break}let W=IQ(J);if(W===J)break;J=W}return ZX(Q)}function H$($={}){let Z=$.cwd??process.cwd(),Q=wF($.workspacePath),J=EF($.pluginPaths??[],Z);return CF([...J,...Q])}function oC($={}){let Z=$.cwd??process.cwd(),Q=wF($.workspacePath),J=iC($.pluginPaths??[],Z);return CF([...J,...Q])}function K$($){let Z=[];for(let Q of $)for(let J of aC(Q)){let W=vQ(J,dC);if(lC(W))Z.push(W)}return ZX(Z)}function SF($={}){return K$(oC($))}async function q6($={}){let Z=H$($);if(Z.length===0)return{extensions:[],failures:[],warnings:[],pluginPaths:[]};if($.mode==="in_process"){let J=await s2(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:J.plugins,failures:J.failures,pluginPaths:J.pluginPaths,warnings:J.warnings}}let Q=await O6({pluginPaths:Z,exportName:$.exportName,importTimeoutMs:$.importTimeoutMs,hookTimeoutMs:$.hookTimeoutMs,contributionTimeoutMs:$.contributionTimeoutMs,onEvent:$.onEvent,telemetryAvailable:Boolean($.telemetry),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 sC}from"node:child_process";import{promisify as tC}from"node:util";var eC=tC(sC),bF="cline checkpoint session=";function yF($){return $.includes(bF)}function QX($,Z){$?.log(Z,{severity:"warn"})}function $w($){let Z=$?.checkpoint;if(!Z||typeof Z!=="object"||Array.isArray(Z))return;let Q=Z;if(!Q.latest||!Array.isArray(Q.history))return;let J=Q.latest,W=Q.history.filter((X)=>!!X&&typeof X==="object"&&typeof X.ref==="string"&&typeof X.createdAt==="number"&&typeof X.runCount==="number");if(typeof J.ref!=="string"||typeof J.createdAt!=="number"||typeof J.runCount!=="number")return;return{latest:J,history:W}}async function t2($,Z){let Q=await eC("git",["-C",$,...Z],{windowsHide:!0});return{stdout:Q.stdout.trim(),stderr:Q.stderr.trim()}}async function JX($,Z){if(!$)return;let Q=`refs/cline/checkpoints/${Z}/`;try{let{stdout:J}=await t2($,["for-each-ref","--format=%(refname)",Q]),W=J.trim().split(`
506
+ `).filter(Boolean);await Promise.allSettled(W.map((X)=>t2($,["update-ref","-d",X])))}catch{}}async function kF($,Z,Q){if(!$||Q.length===0)return;await Promise.allSettled(Q.map((J)=>t2($,["update-ref",`refs/cline/checkpoints/${Z}/${J.runCount}`,J.ref])))}function Zw($,Z){let Q=$.findIndex((J)=>J.runCount===Z.runCount);if(Q<0)return[...$,Z];return $.map((J,W)=>W===Q?Z:J)}function hF($){let Z,Q,J=async()=>{if(Z!==void 0)return Z;try{Z=(await t2($.cwd,["rev-parse","--is-inside-work-tree"])).stdout==="true"}catch{Z=!1}return Z},W=async(X)=>{if($.createCheckpoint)return await $.createCheckpoint({cwd:$.cwd,sessionId:$.sessionId,runCount:X});if(!await J())return;let j=async(H)=>{try{let G=(await t2($.cwd,["rev-parse","HEAD"])).stdout.trim();if(!G)return;return{ref:G,createdAt:Date.now(),runCount:X,kind:"commit"}}catch(K){QX($.logger,`${H}: ${K instanceof Error?K.message:String(K)}`);return}},Y=`${bF}${$.sessionId} run=${X}`,V="";try{V=(await t2($.cwd,["stash","create",Y])).stdout.trim()}catch(H){return QX($.logger,`Checkpoint snapshot failed: ${H instanceof Error?H.message:String(H)}`),j("Checkpoint HEAD fallback failed")}if(!V)return j("Checkpoint HEAD fallback failed");let B=`refs/cline/checkpoints/${$.sessionId}/${X}`;try{await t2($.cwd,["update-ref",B,V])}catch(H){QX($.logger,`Checkpoint store failed: ${H instanceof Error?H.message:String(H)}`);return}return{ref:V,createdAt:Date.now(),runCount:X,kind:"stash"}};return{beforeRun:async({snapshot:X})=>{if(X.parentAgentId==null)Q=X.messages.length;return},beforeModel:async({snapshot:X})=>{if(X.parentAgentId!=null||X.iteration!==1)return;let j=X.messages.slice(Q??Math.max(0,X.messages.length-1));if(Q=void 0,g$(j)<1)return;let Y=g$(X.messages);if(Y<1)return;let V=await W(Y);if(!V)return;let B=await $.readSessionMetadata(),H=$w(B);if(H?.latest.ref===V.ref)return;let K=Zw(H?.history??[],V);await $.writeSessionMetadata({...B??{},checkpoint:{latest:V,history:K}});return}}}import{appendFileSync as Dw,readFileSync as _w}from"node:fs";import{join as Lw}from"node:path";import{augmentNodeCommandForDebug as Aw}from"@cline/shared";import{ensureHookLogDir as xF}from"@cline/shared/storage";function z6($,Z){if(!Z)return;return{name:$,manifest:{capabilities:["hooks"]},hooks:Z}}import{existsSync as Qw,readdirSync as Jw}from"node:fs";import{basename as Ww,extname as Xw,join as jw}from"node:path";import{HOOKS_CONFIG_DIRECTORY_NAME as mQ,resolveHooksConfigSearchPaths as Yw}from"@cline/shared/storage";function P5($){return Yw($)}var T6;((H)=>{H.TaskStart="TaskStart";H.TaskResume="TaskResume";H.TaskCancel="TaskCancel";H.TaskComplete="TaskComplete";H.TaskError="TaskError";H.PreToolUse="PreToolUse";H.PostToolUse="PostToolUse";H.UserPromptSubmit="UserPromptSubmit";H.PreCompact="PreCompact";H.SessionShutdown="SessionShutdown"})(T6||={});var S5={["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"},Vw=new Map(Object.values(T6).map(($)=>[$.toLowerCase(),$])),Bw=new Set(["",".sh",".bash",".zsh",".js",".mjs",".cjs",".ts",".mts",".cts",".py",".ps1"]);function b5($){let Z=Xw($).toLowerCase();if(!Bw.has(Z))return;let Q=Ww($,Z).trim().toLowerCase();return Vw.get(Q)}function s$($){let Z=[],Q=new Set,J=P5($).filter((W)=>Qw(W));for(let W of J)try{for(let X of Jw(W,{withFileTypes:!0})){if(!X.isFile())continue;let j=b5(X.name);if(!j)continue;let Y=jw(W,X.name);if(Q.has(Y))continue;Q.add(Y),Z.push({fileName:j,hookEventName:S5[j],path:Y})}}catch{}return Z.sort((W,X)=>W.path.localeCompare(X.path))}import{spawn as Hw}from"node:child_process";import{augmentNodeCommandForDebug as Kw,withResolvedClineBuildEnv as Gw}from"@cline/shared";function Fw($){let Z=$.trim();if(!Z)return{};let J=Z.split(`
507
+ `).map((X)=>X.trim()).filter(Boolean).filter((X)=>X.startsWith("HOOK_CONTROL\t")).map((X)=>X.slice(13)),W=J.length>0?J[J.length-1]:Z;try{return{parsedJson:JSON.parse(W)}}catch(X){return{parseError:X instanceof Error?X.message:"Failed to parse subprocess stdout JSON"}}}function IF($,Z){let Q=$ instanceof Error?$:Error(String($)),J=Q,W=Z.join(" ");if(J.code==="EACCES"){let j=Error(`Failed to execute hook command "${W}" (EACCES). Configure hooks with an explicit interpreter/command array (for example: ["bash", "/path/to/script"]) or make the script executable with a valid shebang.`);return j.code=J.code,j}let X=Error(`Failed to execute hook command "${W}": ${Q.message}`);return X.code=J.code,X}async function Uw($,Z){let Q=$.stdin;if(!Q)throw Error("runSubprocessEvent failed to create stdin pipe");await new Promise((J,W)=>{let X=!1,j=(B)=>{if(X)return;X=!0,B()},Y=(B)=>{let H=B.code;return H==="EPIPE"||H==="EOF"||H==="ERR_STREAM_DESTROYED"},V=(B)=>{if(Y(B)){j(J);return}j(()=>W(B))};Q.on("error",V),Q.once("close",()=>Q.off("error",V)),Q.end(Z,(B)=>{if(B){if(Y(B)){j(J);return}j(()=>W(B));return}j(J)})})}async function G$($,Z){let Q=Kw(Z.command,{env:Z.env,debugRole:"hook"});if(!Array.isArray(Q)||Q.length===0)throw Error("runSubprocessEvent requires a non-empty command");let J=!!Z.detached,W=Hw(Q[0],Q.slice(1),{cwd:Z.cwd,env:Gw(Z.env),stdio:J?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:J,windowsHide:!0}),X="",j="",Y=!1,V;if(!J&&(!W.stdout||!W.stderr))throw W.kill("SIGKILL"),Error("runSubprocessEvent failed to create stdout/stderr pipes");W.stdout?.on("data",(K)=>{X+=K.toString()}),W.stderr?.on("data",(K)=>{j+=K.toString()});let B=new Promise((K,G)=>{W.once("spawn",()=>{try{Z.onSpawn?.({command:Q,pid:W.pid??void 0,detached:J})}catch{}K()}),W.once("error",(F)=>G(IF(F,Q)))}),H=new Promise((K,G)=>{W.once("error",(F)=>{if(V)clearTimeout(V);G(IF(F,Q))}),W.once("close",(F)=>{if(V)clearTimeout(V);let{parsedJson:U,parseError:_}=Fw(X);K({exitCode:F,stdout:X,stderr:j,parsedJson:U,parseError:_,timedOut:Y})})});if(J)H.catch(()=>{return});if(!J&&(Z.timeoutMs??0)>0)V=setTimeout(()=>{Y=!0,W.kill("SIGKILL")},Z.timeoutMs);if(await Promise.race([Promise.all([B,Uw(W,JSON.stringify($))]),H]),J){W.unref();return}return await H}function cQ($){if(!$||typeof $!=="object")return{};let Z={};for(let[Q,J]of Object.entries($))Z[Q]=typeof J==="string"?J:JSON.stringify(J);return Z}function y5($,Z,Q){let J=Q instanceof Error?`: ${Q.message}`:"",W=`${Z}${J}`;if($){try{$.log(W,{severity:"warn",...Q!==void 0?{error:Q}:{}})}catch{}return}console.warn(W)}function Ow($,Z){if(!Z)return $;if(!$)return{...Z};let Q=[$.context,Z.context].filter((W)=>typeof W==="string"&&W.length>0).join(`
508
+ `),J=[...$.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:J.length>0?J:void 0}}function qw($){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 WX($){let Z=String($??"").toLowerCase();return Z.includes("cancel")||Z.includes("abort")||Z.includes("interrupt")}function b0($,Z){let Q=process.env.CLINE_USER_ID?.trim()||process.env.USER?.trim()||"unknown",J={rootSessionId:Z.rootSessionId||$.conversationId};return{clineVersion:process.env.CLINE_VERSION?.trim()||"",timestamp:new Date().toISOString(),taskId:$.conversationId,sessionContext:J,workspaceRoots:Z.workspacePath?[Z.workspacePath]:[],workspaceInfo:Z.workspaceInfo,userId:Q,agent_id:$.agentId,parent_agent_id:$.parentAgentId}}async function XX($,Z){if(Z.command.length===0)throw Error("runHookCommand requires non-empty command");try{return await G$($,Z)}catch(Q){let J=Nw(Z.command,process.platform,Q);if(!J)throw Q;return await G$($,{...Z,command:J})}}function zw($){try{let Q=_w($,"utf8").split(/\r?\n/,1)[0]?.trim();if(!Q?.startsWith("#!"))return;let J=Q.slice(2).trim();if(!J)return;let W=J.split(/\s+/).filter(Boolean);return W.length>0?W:void 0}catch{return}}function Tw($){return!!($&&typeof $==="object"&&("code"in $)&&$.code==="ENOENT")}function Nw($,Z=process.platform,Q){if(Z!=="win32"||!Tw(Q))return;if($[0]!=="py"||$[1]!=="-3")return;return["python",...$.slice(2)]}function gF($){if($.length===0)return;let[Z,...Q]=$,J=Z.replace(/\\/g,"/").toLowerCase(),W=J.split("/").at(-1)??J;if(W==="env")return gF(Q);if(W==="bash"||W==="sh"||W==="zsh")return[W,...Q];if(W==="python3"||W==="python")return process.platform==="win32"?["py","-3",...Q]:[W,...Q];return $}function fw($){let Z=zw($);if(Z&&Z.length>0)return[...gF(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 Aw(["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 Rw($){let Z={};for(let Q of s$($)){if(!Q.hookEventName)continue;let J=Q.hookEventName,W=Z[J]??[];W.push(fw(Q.path)),Z[J]=W}return Z}async function Mw($){let Z;for(let Q of $.commands){let J=Q.join(" ");try{let W=await XX($.payload,{command:Q,cwd:$.cwd,env:process.env,detached:!1,timeoutMs:$.timeoutMs});if(W?.timedOut){y5($.logger,`hook command timed out: ${J}`);continue}if(W?.parseError){y5($.logger,`hook command returned invalid JSON control output: ${J} (${W.parseError})`);continue}Z=Ow(Z,qw(W?.parsedJson))}catch(W){y5($.logger,`hook command failed: ${J}`,W)}}return Z}async function e2($){if($.detached){for(let Z of $.commands){let Q=Z.join(" ");XX($.payload,{command:Z,cwd:$.cwd,env:process.env,detached:!0}).catch((J)=>{y5($.logger,`hook command failed: ${Q}`,J)})}return}await Promise.all($.commands.map(async(Z)=>{let Q=Z.join(" ");try{await XX($.payload,{command:Z,cwd:$.cwd,env:process.env,detached:$.detached})}catch(J){y5($.logger,`hook command failed: ${Q}`,J)}}))}function t$($){return{agentId:$.agentId,conversationId:$.conversationId??$.runId??$.agentId,parentAgentId:$.parentAgentId??null}}function jX($,Z){return{...t$($.snapshot),userMessage:Z}}function vF($){return{...t$($.snapshot),iteration:$.snapshot.iteration,call:{id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:$.input}}}function mF($){return{...t$($.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 cF($){return $.filter((Z)=>Z.type==="text"&&typeof Z.text==="string").map((Z)=>Z.text).join("")}function Ew($){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 N6($){let Z={cwd:$.workspacePath,workspacePath:$.workspacePath,rootSessionId:$.rootSessionId,workspaceInfo:$.workspaceInfo},Q=(J)=>{let W=`${JSON.stringify({ts:new Date().toISOString(),...J})}
509
+ `,j=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??Lw(xF(),"hooks.jsonl");xF(j),Dw(j,W,"utf8")};return{beforeRun:async(J)=>{let W=jX(J,"");Q({...b0(W,Z),hookName:"agent_start",taskStart:{taskMetadata:{}}});return},beforeTool:async(J)=>{let W=vF(J);Q({...b0(W,Z),hookName:"tool_call",iteration:W.iteration,tool_call:{id:W.call.id,name:W.call.name,input:W.call.input},preToolUse:{toolName:W.call.name,parameters:cQ(W.call.input)}});return},afterTool:async(J)=>{let W=mF(J);Q({...b0(W,Z),hookName:"tool_result",iteration:W.iteration,tool_result:W.record,postToolUse:{toolName:W.record.name,parameters:cQ(W.record.input),result:typeof W.record.output==="string"?W.record.output:JSON.stringify(W.record.output),success:!W.record.error,executionTimeMs:W.record.durationMs}});return},afterRun:async({snapshot:J,result:W})=>{let X=t$(J);if(W.status==="completed"){Q({...b0(X,Z),hookName:"agent_end",iteration:W.iterations,turn:{outputText:W.outputText,status:W.status},taskComplete:{taskMetadata:{}}});return}if(W.status==="aborted"||WX(W.error?.message)){Q({...b0(X,Z),hookName:"agent_abort",reason:W.error?.message,taskCancel:{taskMetadata:{}}});return}if(W.error)Q({...b0(X,Z),hookName:"agent_error",iteration:W.iterations,error:{name:W.error.name,message:W.error.message,stack:W.error.stack}})},onEvent:async(J)=>{if(J.type!=="message-added"||J.message.role!=="user")return;let W=jX({snapshot:J.snapshot},cF(J.message.content));Q({...b0(W,Z),hookName:"prompt_submit",userPromptSubmit:{prompt:W.userMessage,attachments:[]}})}}}function k5($){let Z=Rw($.workspacePath);if(!Object.values(Z).some((K)=>K.length>0))return;let J=async(K,G)=>{let F=Z[G]??[];if(F.length===0)return;await e2({commands:F,cwd:$.cwd,logger:$.logger,detached:$.detachAsyncHooks??!0,payload:G==="agent_resume"?{...b0(K,$),hookName:G,taskResume:{taskMetadata:{},previousState:{}}}:{...b0(K,$),hookName:G,taskStart:{taskMetadata:{}}}})},W=async(K)=>{let G=Z.prompt_submit??[];if(G.length>0)await e2({commands:G,cwd:$.cwd,logger:$.logger,detached:$.detachAsyncHooks??!0,payload:{...b0(K,$),hookName:"prompt_submit",userPromptSubmit:{prompt:K.userMessage,attachments:[]}}})},X=async(K)=>{let G=Z.tool_call??[];if(G.length===0)return;return Mw({commands:G,cwd:$.cwd,logger:$.logger,timeoutMs:$.toolCallTimeoutMs??120000,payload:{...b0(K,$),hookName:"tool_call",iteration:K.iteration,tool_call:{id:K.call.id,name:K.call.name,input:K.call.input},preToolUse:{toolName:K.call.name,parameters:cQ(K.call.input)}}})},j=async(K)=>{let G=Z.tool_result??[];if(G.length===0)return;await e2({commands:G,cwd:$.cwd,logger:$.logger,detached:$.detachAsyncHooks??!0,payload:{...b0(K,$),hookName:"tool_result",iteration:K.iteration,tool_result:K.record,postToolUse:{toolName:K.record.name,parameters:cQ(K.record.input),result:typeof K.record.output==="string"?K.record.output:JSON.stringify(K.record.output),success:!K.record.error,executionTimeMs:K.record.durationMs}}})},Y=async(K)=>{let G=Z.agent_end??[];if(G.length===0)return;await e2({commands:G,cwd:$.cwd,logger:$.logger,detached:$.detachAsyncHooks??!0,payload:{...b0(K,$),hookName:"agent_end",iteration:K.iteration,turn:K.turn,taskComplete:{taskMetadata:{}}}})},V=async(K)=>{let G=Z.agent_error??[];if(G.length===0)return;await e2({commands:G,cwd:$.cwd,logger:$.logger,detached:$.detachAsyncHooks??!0,payload:{...b0(K,$),hookName:"agent_error",iteration:K.iteration,error:{name:K.error.name,message:K.error.message,stack:K.error.stack}}})},B=async(K)=>{if(WX(K.reason)){let F=Z.agent_abort??[];if(F.length>0)await e2({commands:F,cwd:$.cwd,logger:$.logger,detached:$.detachAsyncHooks??!0,payload:{...b0(K,$),hookName:"agent_abort",reason:K.reason,taskCancel:{taskMetadata:{}}}})}let G=Z.session_shutdown??[];if(G.length===0)return;await e2({commands:G,cwd:$.cwd,logger:$.logger,detached:$.detachAsyncHooks??!0,payload:{...b0(K,$),hookName:"session_shutdown",reason:K.reason}})},H={};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)H.beforeRun=async(K)=>{let G=process.env.CLINE_HOOK_AGENT_RESUME==="1"?"agent_resume":"agent_start";await J(t$(K.snapshot),G);return};if((Z.prompt_submit?.length??0)>0)H.onEvent=async(K)=>{if(K.type!=="message-added"||K.message.role!=="user")return;await W(jX({snapshot:K.snapshot},cF(K.message.content)))}}if((Z.tool_call?.length??0)>0)H.beforeTool=async(K)=>{let G=await X(vF(K));return Ew(G)};if((Z.tool_result?.length??0)>0)H.afterTool=async(K)=>{await j(mF(K));return};if((Z.agent_end?.length??0)>0)H.afterRun=async({snapshot:K,result:G})=>{if(G.status!=="completed")return;await Y({...t$(K),iteration:G.iterations,turn:{outputText:G.outputText,status:G.status}})};if((Z.agent_error?.length??0)>0||(Z.agent_abort?.length??0)>0||(Z.session_shutdown?.length??0)>0){let K=H.afterRun;H.afterRun=async(G)=>{await K?.(G);let{snapshot:F,result:U}=G;if(U.status==="aborted"||WX(U.error?.message)){await B({...t$(F),reason:U.error?.message});return}if(U.error)await V({...t$(F),iteration:U.iterations,error:U.error})}}return H}function f6($){return z6("core.hook_config_files",k5($))}function $8($,Z){let Q=$.map((J)=>J[Z]).filter((J)=>typeof J==="function");if(Q.length===0)return;return async(J)=>{let W;for(let X of Q){let j=await X(J);if(!j||typeof j!=="object")continue;let Y=j;W={...W??{},...Y,stop:W?.stop===!0||Y.stop===!0?!0:Y.stop,options:W?.options||Y.options?{...W?.options??{},...Y.options??{}}:void 0}}return W}}function Z8($){let Z=$.filter((Q)=>Q!==void 0);if(Z.length===0)return;return{beforeRun:$8(Z,"beforeRun"),afterRun:$8(Z,"afterRun"),beforeModel:$8(Z,"beforeModel"),afterModel:$8(Z,"afterModel"),beforeTool:$8(Z,"beforeTool"),afterTool:$8(Z,"afterTool"),onEvent:$8(Z,"onEvent")}}var uF={};w(uF,{normalizeRuntimeCapabilities:()=>y0});function y0(...$){let Z,Q;for(let W of $){if(!W)continue;if(W.toolExecutors)Z={...Z??{},...W.toolExecutors};if(W.requestToolApproval)Q=W.requestToolApproval}let J=Z&&Object.keys(Z).length>0;if(!J&&!Q)return;return{...J?{toolExecutors:Z}:{},...Q?{requestToolApproval:Q}:{}}}var sF={};w(sF,{toProviderConfig:()=>J1,emptyStoredProviderSettings:()=>Q2,StoredProviderSettingsSchema:()=>E6,StoredProviderSettingsEntrySchema:()=>H7,ProviderSettingsSchemaTyped:()=>M6});import{z as Z2}from"zod";var oF={};w(oF,{toProviderConfig:()=>J1,safeParseSettings:()=>B7,safeCreateProviderConfig:()=>_X,parseSettings:()=>V7,normalizeProviderId:()=>R6,isBuiltInProviderId:()=>UX,createProviderConfig:()=>DX,SapSettingsSchema:()=>X7,ReasoningSettingsSchema:()=>Z7,ProviderSettingsSchema:()=>$2,ProviderProtocolSchema:()=>tQ,ProviderIdSchema:()=>v5,ProviderClientSchema:()=>eQ,OcaSettingsSchema:()=>j7,ModelCatalogSettingsSchema:()=>Y7,GcpSettingsSchema:()=>J7,BUILT_IN_PROVIDER_IDS:()=>FX,BUILT_IN_PROVIDER:()=>g5,AzureSettingsSchema:()=>W7,AwsSettingsSchema:()=>Q7,AuthSettingsSchema:()=>$7});import*as m0 from"@cline/llms";import{ReasoningLevelSchema as QP}from"@cline/shared";import{z as P}from"zod";var aF={};w(aF,{resolveProviderConfig:()=>x5,getProviderConfig:()=>sQ,getLiveModelsCatalog:()=>e$,clearPublicModelsCatalogCache:()=>ow,clearPrivateModelsCatalogCache:()=>GX,clearLiveModelsCatalogCache:()=>KX,OPENAI_COMPATIBLE_PROVIDERS:()=>I5,DEFAULT_MODELS_CATALOG_URL:()=>rQ});import*as Z0 from"@cline/llms";function YX($){if(!Array.isArray($))return[];return $.map((Z)=>{if(typeof Z==="string")return Z.trim();if(Z&&typeof Z==="object"){let Q=Z;for(let J of[Q.id,Q.name,Q.model])if(typeof J==="string"&&J.trim())return J.trim()}return""}).filter((Z)=>Z.length>0)}function Cw($,Z){let Q=YX($);if(Q.length>0)return Q;if(!$||typeof $!=="object")return[];let J=$,W=YX(J.data??J.models);if(W.length>0)return W;if(J.models&&typeof J.models==="object"&&!Array.isArray(J.models)){let j=Object.keys(J.models).filter((Y)=>Y.trim().length>0);if(j.length>0)return j}let X=J.providers?.[Z];if(X&&typeof X==="object"){let Y=YX(X.models??X);if(Y.length>0)return Y}return[]}async function uQ($,Z){let Q=await fetch($,{method:"GET"});if(!Q.ok)throw Error(`failed to fetch models from ${$}: HTTP ${Q.status}`);return Cw(await Q.json(),Z)}function dF($){return $.replace(/\/+$/,"")}function dQ($,Z,Q){let J=Q?.trim();if(!J)return;let W=$?.trim();if(!W||!Z?.trim())return J;try{let X=new URL(J),j=new URL(Z),Y=new URL(W);if(X.origin!==j.origin)return J;let V=dF(j.pathname),B=dF(Y.pathname);if(V&&X.pathname.startsWith(`${V}/`)){let H=X.pathname.slice(V.length);Y.pathname=`${B}${H}`}else Y.pathname=X.pathname;return Y.search=X.search,Y.hash=X.hash,Y.toString()}catch{return J}}function ww($){return Object.fromEntries(Object.entries($).map(([Z,Q])=>[Z,{...Q}]))}function Pw($){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 Sw=Object.values(Z0.MODEL_COLLECTIONS_BY_PROVIDER_ID).map(($)=>({id:$.provider.id,baseUrl:$.provider.baseUrl??"",modelsSourceUrl:$.provider.modelsSourceUrl,modelId:$.provider.defaultModelId,knownModels:ww($.models),capabilities:$.provider.capabilities?[...$.provider.capabilities]:void 0,env:$.provider.env?[...$.provider.env]:void 0,client:$.provider.client,protocol:$.provider.protocol})),lF=Object.fromEntries(Sw.map(($)=>[$.id,$]));function bw($){return lF[$]}function yw(){return Object.fromEntries(Object.entries(lF).filter(([,$])=>Pw($)))}function iF($=[]){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 rQ="https://models.dev/api.json",kw=600000,rF=300000,hw=5000,iQ=new Map,h5=new Map,VX=new Map,pQ=new Map;async function Iw(){return Z0.getGeneratedProviderModels()}async function xw($,Z={},Q={},J={},W={},X={}){if($==="litellm")return Z0.sortModelsByReleaseDate(J);let j=await Iw(),Y=Z0.resolveProviderModelCatalogKeys($),V=Object.assign({},...Y.map((K)=>j[K]??{}));if(Boolean(Z0.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl))return Z0.sortModelsByReleaseDate({...W,...X});if($==="openai-codex")return Z0.sortModelsByReleaseDate({...Z,...Z0.filterOpenAICodexModels(Q),...W,...X});if($==="cline-pass"&&Object.keys(Q).length>0)return{...Q,...X};let H=Z0.sortModelsByReleaseDate({...V,...Z,...Q,...J,...W});if($==="cline")return Z0.sortModelsByReleaseDate({...Z0.preferCanonicalModelIds(H,Z0.VERCEL_OPENROUTER_MODEL_ID_ALIAS_RULES),...X});return Z0.sortModelsByReleaseDate({...H,...X})}function gw($,Z){let Q=Z0.resolveProviderModelCatalogKeys($);return Object.assign({},...Q.map((J)=>Z[J]??{}))}function nQ($){let Z=$?.trim();return Z&&Z.length>0?Z:""}function HX($){let Z=$.apiKey?.trim()||$.accessToken?.trim();return Z&&Z.length>0?Z:void 0}function vw($){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 mw($,Z){return`${$}:${nQ(Z.baseUrl)}:${vw(HX(Z)??"")}`}async function aQ($,Z,Q=hw){let J=new AbortController,W=setTimeout(()=>J.abort(),Q);try{return await fetch($,{...Z,signal:J.signal})}finally{clearTimeout(W)}}function Q8($,Z,Q){if(Q&&!$.includes(Z))$.push(Z)}function oQ($,Z){let Q=["streaming","tools"];return Q8(Q,"images",Boolean(Z.supportsImages)),Q8(Q,"prompt-cache",Boolean(Z.supportsPromptCache)),Q8(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 cw($,Z){let Q=await aQ("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 W=(await Q.json())?.data??[],X={};for(let j of W){let Y=j.id?.trim();if(!Y)continue;if(Y.includes("whisper")||Y.includes("tts")||Y.includes("embedding"))continue;let V=j.supported_features??[];X[Y]=oQ(Y,{name:Y,contextWindow:j.context_length,maxInputTokens:j.context_length,maxTokens:j.max_completion_tokens,supportsReasoning:V.includes("reasoning")||V.includes("reasoning_effort"),supportsImages:!1})}return X}function pF($){if(typeof $==="number")return Number.isFinite($)?$:void 0;if(typeof $==="string"){let Z=Number($);return Number.isFinite(Z)?Z:void 0}return}async function uw($,Z){let Q=await aQ("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 W=(await Q.json())?.data??[],X={};for(let j of W){let Y=j.id?.trim();if(!Y)continue;X[Y]=oQ(Y,{name:Y,maxInputTokens:128000,supportsImages:!0,supportsPromptCache:!0})}return X}async function dw($,Z){let J=`${(nQ($.baseUrl)||"https://inference.poolside.ai/v1").replace(/\/+$/,"")}/models`,W=await aQ(J,{method:"GET",headers:{Authorization:`Bearer ${Z}`,accept:"application/json"}});if(!W.ok)throw Error(`Poolside model refresh failed: HTTP ${W.status}`);let j=(await W.json())?.data??[],Y={};for(let V of j){let B=V.id?.trim();if(!B)continue;let H=V.supported_features??[],K=V.supported_sampling_parameters??[],G=V.input_modalities??[],F=["streaming"];Q8(F,"tools",H.includes("tools")),Q8(F,"reasoning",H.includes("reasoning")),Q8(F,"temperature",K.includes("temperature")),Q8(F,"images",G.includes("image"));let U={input:pF(V.pricing?.prompt),output:pF(V.pricing?.completion)};Y[B]={id:B,name:V.name??B,description:V.description,contextWindow:V.context_length,maxInputTokens:V.context_length,maxTokens:V.max_completion_tokens,capabilities:F,pricing:U.input!==void 0||U.output!==void 0?U:void 0,status:"active"}}return Y}function pw($){let Z=nQ($).replace(/\/+$/,"");if(!Z)return"http://localhost:4000";return Z.endsWith("/v1")?Z.slice(0,-3):Z}function lw($){return[`${$}/v1/model/info`,`${$}/model/info`]}async function iw($){let Z=(await $.text().catch(()=>"")).replace(/\s+/g," ").trim(),Q=500,J=Z?`: ${Z.slice(0,500)}${Z.length>500?"...":""}`:"";return`HTTP ${$.status}${J}`}async function rw($,Z){let Q=pw($.baseUrl),J=[],W=[["x-litellm-api-key",{"x-litellm-api-key":Z}],["Authorization",{Authorization:`Bearer ${Z}`}]];for(let X of lw(Q))for(let[j,Y]of W)try{let V=await aQ(X,{method:"GET",headers:{accept:"application/json",...Y}});if(V.ok){let H=(await V.json())?.data??[],K={};for(let G of H){let F=G.model_name?.trim(),_=G.litellm_params?.model?.trim()||F;if(!_)continue;let L=G.model_info,O=oQ(_,{name:F??_,maxTokens:L?.max_output_tokens??L?.max_tokens,maxInputTokens:L?.max_input_tokens??L?.max_tokens,supportsImages:L?.supports_vision,supportsPromptCache:L?.supports_prompt_caching,supportsReasoning:L?.supports_reasoning});if(K[_]=O,F)K[F]={...O,id:F,name:F}}return K}J.push(`${new URL(X).pathname} (${j}): ${await iw(V)}`)}catch(V){let B=V instanceof Error?V.message:String(V);J.push(`${new URL(X).pathname} (${j}): ${B}`)}throw Error(`LiteLLM model refresh failed. Attempts: ${J.join("; ")}`)}var nF={baseten:cw,hicap:uw,litellm:rw,poolside:dw},BX=new Map,lQ=new Map;function nw($,Z){return`${$}:${nQ(Z.baseUrl)}`}async function aw($,Z,Q){let J=Z0.MODEL_COLLECTIONS_BY_PROVIDER_ID[$],W=dQ(Q.baseUrl,J?.provider.baseUrl,J?.provider.modelsSourceUrl);if(!W)return{};let X=Z?.cacheTtlMs??rF,j=nw($,Q),Y=Date.now(),V=BX.get(j);if(V&&V.expiresAt>Y)return V.data;let B=lQ.get(j);if(B)return B;let H=uQ(W,$).then((K)=>{let G=Object.fromEntries(K.map((F)=>[F,oQ(F,{name:F})]));return BX.set(j,{data:G,expiresAt:Y+X}),G}).finally(()=>{lQ.delete(j)});return lQ.set(j,H),H}function ow(){BX.clear(),lQ.clear()}async function sw($,Z){let Q=HX(Z);if(!Q)return{};let J=nF[$];if(!J)return{};return J(Z,Q)}function tw($,Z,Q){if(!Q)return!1;if(!nF[$])return!1;if(Z?.loadPrivateOnAuth===!1)return!1;return Boolean(HX(Q))}async function ew($,Z,Q){let J=Z?.cacheTtlMs??rF,W=mw($,Q),X=Date.now(),j=VX.get(W);if(j&&j.expiresAt>X)return j.data;let Y=pQ.get(W);if(Y)return Y;let V=sw($,Q).then((B)=>{return VX.set(W,{data:B,expiresAt:X+J}),B}).finally(()=>{pQ.delete(W)});return pQ.set(W,V),V}async function $P($){return Z0.fetchLiveProviderModels($,globalThis.fetch)}async function e$($={}){let Z=$.url??rQ,Q=$.cacheTtlMs??kw,J=Date.now(),W=iQ.get(Z);if(W&&W.expiresAt>J)return W.data;let X=h5.get(Z);if(X)return X;let j=$P(Z).then((Y)=>{return iQ.set(Z,{data:Y,expiresAt:J+Q}),Y}).finally(()=>{h5.delete(Z)});return h5.set(Z,j),j}function KX($){if($){iQ.delete($),h5.delete($);return}iQ.clear(),h5.clear()}function GX(){VX.clear(),pQ.clear()}function ZP($){return Object.fromEntries(Object.entries($).map(([Z,Q])=>[Z,{baseUrl:Q.baseUrl,modelId:Q.modelId,capabilities:iF(Q.capabilities)}]))}var I5=ZP(yw());function sQ($){let Z=bw($);if(!Z)return;return{baseUrl:Z.baseUrl||void 0,modelId:Z.modelId,knownModels:Z.knownModels,capabilities:iF(Z.capabilities)}}async function x5($,Z,Q){let J=sQ($);if(!J)return;try{let W=Z?.loadLatestOnInit?await e$(Z):void 0,X=W?gw($,W):{},j=Q&&tw($,Z,Q)?await ew($,Z,Q):{},V=Boolean(Z0.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl)?Q??{providerId:$,modelId:J.modelId,baseUrl:J.baseUrl}:Q,B=V?await aw($,Z,V).catch(()=>({})):{},H=await xw($,J.knownModels,X,j,B,Q?.knownModels);return{...J,knownModels:H}}catch(W){if(Z?.failOnError)throw W;if($==="litellm")return{...J,knownModels:{}};return J}}var g5=m0.BUILT_IN_PROVIDER,FX=m0.BUILT_IN_PROVIDER_IDS,UX=m0.isBuiltInProviderId,R6=m0.normalizeProviderId,v5=P.string().min(1).regex(/^[a-z0-9][a-z0-9-]*$/i),tQ=P.enum(["anthropic","gemini","openai-chat","openai-responses","openai-r1","ai-sdk"]),eQ=P.enum(["anthropic","ai-sdk","ai-sdk-community","openai","openai-compatible","openai-r1","gemini","bedrock","custom","fetch","vertex"]),$7=P.object({apiKey:P.string().optional(),accessToken:P.string().optional(),refreshToken:P.string().optional(),expiresAt:P.number().int().positive().optional(),accountId:P.string().optional(),organizationId:P.string().optional(),organizationName:P.string().optional(),memberId:P.string().optional(),metadata:P.record(P.string(),P.unknown()).optional()}),Z7=P.object({enabled:P.boolean().optional(),effort:QP.optional(),budgetTokens:P.number().int().positive().optional()}),Q7=P.object({accessKey:P.string().optional(),secretKey:P.string().optional(),sessionToken:P.string().optional(),region:P.string().optional(),profile:P.string().optional(),authentication:P.enum(["iam","api-key","apikey","profile"]).optional(),usePromptCache:P.boolean().optional(),useCrossRegionInference:P.boolean().optional(),useGlobalInference:P.boolean().optional(),endpoint:P.string().url().optional(),customModelBaseId:P.string().optional()}),J7=P.object({projectId:P.string().optional(),region:P.string().optional()}),W7=P.object({apiVersion:P.string().optional(),useIdentity:P.boolean().optional()}),X7=P.object({clientId:P.string().optional(),clientSecret:P.string().optional(),tokenUrl:P.string().url().optional(),resourceGroup:P.string().optional(),deploymentId:P.string().optional(),useOrchestrationMode:P.boolean().optional(),api:P.enum(["orchestration","foundation-models"]).optional(),defaultSettings:P.record(P.string(),P.unknown()).optional()}),j7=P.object({mode:P.enum(["internal","external"]).optional(),usePromptCache:P.boolean().optional()}),Y7=P.object({loadLatestOnInit:P.boolean().optional(),loadPrivateOnAuth:P.boolean().optional(),url:P.string().url().optional(),cacheTtlMs:P.number().int().positive().optional(),failOnError:P.boolean().optional()}),$2=P.object({provider:v5,apiKey:P.string().optional(),auth:$7.optional(),model:P.string().optional(),protocol:tQ.optional(),client:eQ.optional(),routingProviderId:v5.optional(),maxTokens:P.number().int().positive().optional(),contextWindow:P.number().int().positive().optional(),baseUrl:P.string().url().optional(),headers:P.record(P.string(),P.string()).optional(),timeout:P.number().int().positive().optional(),reasoning:Z7.optional(),aws:Q7.optional(),gcp:J7.optional(),azure:W7.optional(),sap:X7.optional(),oca:j7.optional(),region:P.string().optional(),apiLine:P.enum(["china","international"]).optional(),capabilities:P.array(P.enum(["reasoning","prompt-cache","streaming","tools","vision","computer-use","oauth","popular"])).optional(),modelCatalog:Y7.optional()});function V7($){return $2.parse($)}function B7($){return $2.safeParse($)}function JP($){return $.protocol==="openai-responses"||$.client==="openai"}function J1($,Z={}){let Q=$.provider,J=R6(Q),W=Z.includeKnownModels!==!1,X=$.reasoning?.effort||"none",j=X==="none"?void 0:X,Y=I5[J],V=Object.assign({},...m0.resolveProviderModelCatalogKeys(J).map((_)=>m0.getGeneratedModelsForProvider(_))),B=Object.keys(V)[0],H=n8(J,$),K=$.baseUrl??m0.resolveProviderApiLineBaseUrl(J,$.apiLine)??(J==="oca"?$.oca?.mode==="internal"?ZQ:QQ:Y?.baseUrl),G=$.routingProviderId??(JP($)&&J!==g5.OPENAI_NATIVE?g5.OPENAI_NATIVE:void 0),F=W?Y?.knownModels??(Object.keys(V).length>0?V:void 0):void 0,U={providerId:Q,clientType:$.client,routingProviderId:G,modelId:$.model??Y?.modelId??B??"default",...W?{knownModels:F}:{},apiKey:H,accessToken:$.auth?.accessToken,refreshToken:$.auth?.refreshToken,accountId:$.auth?.accountId,baseUrl:K,headers:$.headers,timeoutMs:$.timeout,maxOutputTokens:$.maxTokens,maxInputTokens:$.contextWindow,thinking:$.reasoning?.enabled,reasoningEffort:j,thinkingBudgetTokens:$.reasoning?.budgetTokens,region:$.region??$.aws?.region??$.gcp?.region,apiLine:$.apiLine,useCrossRegionInference:$.aws?.useCrossRegionInference,useGlobalInference:$.aws?.useGlobalInference,aws:$.aws?{accessKey:$.aws.accessKey,secretKey:$.aws.secretKey,sessionToken:$.aws.sessionToken,authentication:$.aws.authentication,profile:$.aws.profile,usePromptCache:$.aws.usePromptCache,endpoint:$.aws.endpoint,customModelBaseId:$.aws.customModelBaseId}:void 0,gcp:$.gcp?{projectId:$.gcp.projectId,region:$.gcp.region}:void 0,azure:$.azure,sap:$.sap,oca:$.oca,capabilities:$.capabilities??Y?.capabilities,modelCatalog:$.modelCatalog?{loadLatestOnInit:$.modelCatalog.loadLatestOnInit,loadPrivateOnAuth:$.modelCatalog.loadPrivateOnAuth,url:$.modelCatalog.url,cacheTtlMs:$.modelCatalog.cacheTtlMs,failOnError:$.modelCatalog.failOnError}:void 0};return Object.fromEntries(Object.entries(U).filter(([_,L])=>L!==void 0))}function DX($){let Z=V7($);return J1(Z)}function _X($){let Z=B7($);if(Z.success)return{success:!0,config:J1(Z.data)};return{success:!1,error:Z.error}}var M6=$2;var H7=Z2.object({settings:$2,updatedAt:Z2.string().datetime(),tokenSource:Z2.enum(["manual","oauth","migration"]).default("manual")}),E6=Z2.object({version:Z2.literal(1),lastUsedProvider:Z2.string().min(1).optional(),providers:Z2.record(Z2.string(),H7)});function Q2(){return{version:1,providers:{}}}H1();var tF={};w(tF,{InMemoryWorkspaceManager:()=>C6});import{upsertWorkspaceInfo as WP,WorkspaceManifestSchema as LX}from"@cline/shared";class C6{manifest;listeners=new Set;constructor($){this.manifest=LX.parse($??{workspaces:{}})}async addWorkspacePath($){let Z=await P8($);return this.manifest=WP(this.manifest,Z),this.emit({type:"workspace_added",workspace:Z}),Z}async switchWorkspace($){let Z=T1($),Q=this.manifest.workspaces[Z];if(Q)return this.manifest=LX.parse({...this.manifest,currentWorkspacePath:Z}),this.emit({type:"workspace_switched",workspace:Q}),Q;let J=await this.addWorkspacePath(Z);return this.manifest=LX.parse({...this.manifest,currentWorkspacePath:J.rootPath}),this.emit({type:"workspace_switched",workspace:J}),J}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}getCurrentWorkspace(){let $=this.manifest.currentWorkspacePath;if(!$)return;return this.manifest.workspaces[$]}getWorkspace($){let Z=T1($);return this.manifest.workspaces[Z]}listWorkspaces(){return Object.values(this.manifest.workspaces)}getManifest(){return this.manifest}emit($){for(let Z of this.listeners)Z($)}}C0();import{createHash as XP}from"node:crypto";var eF=new Set,$U=new Set;function jP($){return XP("sha256").update($).digest("hex")}function YP($){if($.vcsTypes&&$.vcsTypes.length>0)return $.vcsTypes;return[$.vcsType==="git"?"git":"none"]}function ZU($){if(!$.telemetry)return;let Z=jP($.rootPath),Q=$.rootCount??1;if(!eF.has(Z))eF.add(Z),UZ($.telemetry,{root_count:Q,vcs_types:YP($),init_duration_ms:$.durationMs,feature_flag_enabled:$.featureFlagEnabled??!0,is_remote_workspace:$.isRemoteWorkspace});if($.initError&&!$U.has(Z)){$U.add(Z);let J=Error($.initError.message);J.name=$.initError.errorType||"Error",DZ($.telemetry,J,{fallback_to_single_root:!0,workspace_count:Q})}}function HP($){return`${$.pluginName??$.pluginPath}: ${$.message}`}function KP($,Z,Q){if(Z.length>0)for(let X of Z)Q?.log(X.message,{severity:"warn"});if($.length===0)return;let J=$.slice(0,3).map(HP).join("; "),W=$.length>3?`; and ${$.length-3} more`:"";Q?.log(`Some plugins failed to initialize. ${J}${W}. 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 GP($,Z){let Q=typeof $.thinking==="boolean",J=typeof $.reasoningEffort==="string";if(!Q&&!J)return Z;return{...Z??{},...Q?{enabled:$.thinking}:{},...J?{effort:$.reasoningEffort}:{}}}function QU($,Z){return BP($,Z)}function FP($,Z,Q,J,W,X){let j=J.getProviderSettings($.providerId),Y=W||j?.modelCatalog?{...W??{},...j?.modelCatalog??{}}:void 0,V=$.providerConfig?.providerId===$.providerId?$.providerConfig:void 0,B=VP({providerId:$.providerId,sessionId:Z,source:Q,defaultSource:L0.CLI,client:{name:$.extensionContext?.client?.name,version:$.extensionContext?.client?.version,versionHeaderFallback:$.headers?.["X-CLIENT-VERSION"],platform:$.extensionContext?.client?.platform,platformVersion:$.extensionContext?.client?.platformVersion,isMultiRoot:$.extensionContext?.client?.isMultiRoot},coreVersion:v8,openAiCodex:{accountId:V?.accountId??j?.auth?.accountId,accessToken:V?.accessToken??$.apiKey??j?.auth?.accessToken??j?.apiKey,userAgentVersion:process.env.npm_package_version},headers:{stored:j?.headers,config:$.headers,session:V?.headers}}),H={...j??{},provider:$.providerId,model:$.modelId,apiKey:$.apiKey??j?.apiKey,baseUrl:$.baseUrl??j?.baseUrl,headers:void 0,reasoning:GP($,j?.reasoning),modelCatalog:Y},K={...J1(H),...V??{}};if(B)K.headers=B;if($.knownModels)K.knownModels=$.knownModels;if($.extensionContext)K.extensionContext=$.extensionContext;let F=$.fetch??K.fetch??X;if(F)K.fetch=F;return K}async function JU($){let{input:Z,sessionId:Q,providerSettingsManager:J,defaultTelemetry:W,defaultLogger:X,defaultCapabilities:j,defaultToolPolicies:Y,defaultFetch:V,onPluginEvent:B,onTeamEvent:H,createSubAgentLifecycleCallbacks:K,createSpawnTool:G,localRuntime:F,readSessionMetadata:U,writeSessionMetadata:_}=$,L=B$(Z.config),{modelCatalogDefaults:O,userInstructionService:D,configExtensions:q,onTeamRestored:T,...z}=F??{},A=Object.keys(z).length>0?z:void 0,{workspaceInfo:R,workspaceMetadata:N,gitState:S,durationMs:y,vcsType:s,initError:c}=await r3(L),b=A?.extensionContext,r={...b??{},workspace:{...R,...b?.workspace??{}},session:{...b?.session??{},sessionId:Q},logger:b?.logger??A?.logger??X,telemetry:b?.telemetry??A?.telemetry??W};ZU({telemetry:r.telemetry,rootPath:R.rootPath,workspaceInfo:R,rootCount:1,vcsType:s,durationMs:y,initError:c,featureFlagEnabled:!0});let O0=f6({cwd:Z.config.cwd,workspacePath:L,rootSessionId:Q,logger:A?.logger,workspaceInfo:R}),N$=eG(A?.hooks)?void 0:N6({rootSessionId:Q,workspacePath:L,workspaceInfo:R}),f$=Z8([A?.hooks,N$]),X0;if(QU(q,"plugins"))try{X0=await q6({pluginPaths:A?.pluginPaths,workspacePath:L,cwd:Z.config.cwd,onEvent:B,providerId:Z.config.providerId,modelId:Z.config.modelId,workspaceInfo:R,session:r.session,client:r.client,user:r.user,logger:r.logger,telemetry:r.telemetry,automation:r.automation}),KP(X0.failures,X0.warnings,A?.logger)}catch(E0){let D2=E0 instanceof Error?E0.message:String(E0);A?.logger?.log?.(`plugin loading failed; continuing without plugins (${D2})`)}let R$=yW(O0?[O0]:void 0,yW(A?.extensions,hZ(X0?.extensions))),q1=QU(q,"plugins")?K$(X0?.pluginPaths??[]):void 0,p0={...Z.config,...A??{},sessionId:Q,hooks:f$,extensions:R$,extensionContext:r,telemetry:r.telemetry,logger:r.logger},M$=FP(p0,Q,Z.source,J,O,V),R0=Z8([p0.hooks,p0.checkpoint?.enabled===!0?hF({cwd:p0.cwd,sessionId:Q,logger:p0.logger,createCheckpoint:p0.checkpoint?.createCheckpoint,readSessionMetadata:U,writeSessionMetadata:_}):void 0]),h0={...p0,providerConfig:M$,workspaceMetadata:N,hooks:R0},z1=Z.toolPolicies??p0.toolPolicies??Y,u=y0(j,Z.capabilities),x0=u?.requestToolApproval,I=u?.toolExecutors,H0=K?.(h0),M0=new C6({currentWorkspacePath:R.rootPath,workspaces:{[R.rootPath]:R}});return{effectiveInput:Z,config:h0,providerConfig:M$,workspaceMetadata:N,workspaceInfo:R,gitState:S,extensions:R$,hooks:R0,toolPolicies:z1,requestToolApproval:x0,pluginSandboxShutdown:X0?.shutdown,runtimeBuilderInput:{config:h0,hooks:R0,extensions:R$,onTeamEvent:H,createSpawnTool:G,onTeamRestored:T,onSubAgentEvent:H0?.onSubAgentEvent,onSubAgentStart:H0?.onSubAgentStart,onSubAgentEnd:H0?.onSubAgentEnd,userInstructionService:D,pluginSkillDirectories:q1,configExtensions:q,toolExecutors:I,toolPolicies:z1,workspaceManager:M0,logger:h0.logger,telemetry:h0.telemetry,requestToolApproval:x0}}}import{existsSync as K7,mkdirSync as UP,readdirSync as DP,rmdirSync as _P,rmSync as LP,unlinkSync as AP}from"node:fs";import{dirname as WU,join as m5}from"node:path";function V0(){return new Date().toISOString()}function c5($){if(!$||!K7($))return;try{AP($)}catch{}}function OP($){let Z=G6($);if(Z)return{rootSessionId:Z.rootSessionId,fileStem:`${Z.agentId}__${Z.teamTaskId}`};let Q=A5($);if(Q)return{rootSessionId:Q.rootSessionId,fileStem:Q.agentId};return{rootSessionId:$,fileStem:$}}class AX{ensureSessionsDir;constructor($){this.ensureSessionsDir=$}sessionArtifactsDir($){return m5(this.ensureSessionsDir(),$)}ensureSessionArtifactsDir($){let Z=this.sessionArtifactsDir($);if(!K7(Z))UP(Z,{recursive:!0});return Z}sessionMessagesPath($){return m5(this.sessionArtifactsDir($),`${$}.messages.json`)}sessionCompactionPath($){return m5(this.sessionArtifactsDir($),`${$}.compaction.json`)}sessionManifestPath($,Z=!1){let Q=Z?this.ensureSessionArtifactsDir($):this.sessionArtifactsDir($);return m5(Q,`${$}.json`)}removeSessionDirIfEmpty($){let Z=this.sessionArtifactsDir($),Q=this.ensureSessionsDir();while(Z.startsWith(Q)&&Z!==Q){if(!K7(Z)){Z=WU(Z);continue}try{if(DP(Z).length>0)break;_P(Z)}catch{break}Z=WU(Z)}}removeSessionDir($){this.removeDir(this.sessionArtifactsDir($))}removeDir($){if(!K7($))return;try{LP($,{recursive:!0,force:!0})}catch{}}subagentArtifactPaths($,Z,Q){let{rootSessionId:J,fileStem:W}=OP($),X=this.sessionArtifactsDir(J);return{messagesPath:m5(X,`${W}.messages.json`)}}}import{resolveDocumentsExtensionPath as qP}from"@cline/shared/storage";C0();function XU($,Z,Q,J,W){if(Q)LZ($.telemetry,{ulid:Z,apiProvider:$.providerId,...W});else _Z($.telemetry,{ulid:Z,apiProvider:$.providerId,...W});zP($.telemetry,{workspacePath:J})}function zP($,Z){let Q=qP("Hooks"),J=s$(Z.workspacePath),W=new Map;for(let X of J){let j=X.hookEventName??"unknown",Y=W.get(j)??{global:0,workspace:0};if(X.path===Q||X.path.startsWith(`${Q}/`))Y.global+=1;else Y.workspace+=1;W.set(j,Y)}for(let[X,j]of W.entries())EZ($,X,j.global,j.workspace)}function jU($,Z){for(let Q of Z.mentions)RZ($,Q,Z.matchedFiles.includes(Q)?1:0,"file",!Z.matchedFiles.includes(Q));for(let Q of Z.matchedFiles)NZ($,"file",Q.length);for(let Q of Z.ignoredMentions)fZ($,"file","not_found",Q)}var FA={};w(FA,{ProviderSettingsManager:()=>v1});import{chmodSync as OA,existsSync as mY,mkdirSync as hm,readFileSync as Im,renameSync as xm,rmSync as gm,writeFileSync as vm}from"node:fs";import{basename as qA,dirname as cY}from"node:path";import{resolveProviderSettingsPath as mm}from"@cline/shared/storage";var f={};w(f,{writeModelsFileSync:()=>l9,writeHubDiscovery:()=>vZ,writeGlobalSettings:()=>g0,withHubStartupLock:()=>mZ,verifyHubConnection:()=>E1,updateMcpSettingsFileSync:()=>A1,updateMcpSettingsFile:()=>y6,updateMcpServerOAuthStateAsync:()=>X9,updateMcpServerOAuthState:()=>Y8,updateLocalProvider:()=>z3,uninstallPlugin:()=>x9,uninstallMarketplaceSkill:()=>j3,uninstallMarketplacePlugin:()=>Y3,uninstallMarketplaceMcpServerFromSettings:()=>W3,uninstallMarketplaceEntry:()=>sj,truncateNotificationBody:()=>e9,truncateCommandOutput:()=>y2,trimMessagesBeforeUserRun:()=>C9,toggleDisabledTool:()=>yZ,toTeamProgressLifecycleEvent:()=>l6,toProviderConfig:()=>J1,toHubStatusUrl:()=>HJ,toHubHealthUrl:()=>cZ,toHookConfigFileName:()=>b5,syncStoredProviderRegistration:()=>HY,syncPluginMcpServersToSettings:()=>h9,summarizeUsageFromMessages:()=>U6,stripUtf8Bom:()=>bm,stopLocalHubServerGracefully:()=>TJ,startLocalOAuthServer:()=>U1,startHubWebSocketServer:()=>QZ,startHubServer:()=>_A,startClineDeviceAuth:()=>hJ,splitCoreSessionConfig:()=>w4,spawnDetachedHubServerWithRetry:()=>c8,spawnDetachedHubServer:()=>_J,setToolAutoApproveGlobally:()=>KB,setTelemetryOptOutGlobally:()=>ZB,setSdkLogger:()=>CJ,setPlanActModeGlobally:()=>BB,setMcpServerDisabled:()=>X8,setDisabledTools:()=>JJ,setDisabledPlugin:()=>DB,setCompactionStrategyGlobally:()=>XB,setCompactionModeGlobally:()=>YB,setAutoUpdateEnabledGlobally:()=>JB,sendHubCommand:()=>oB,sdkDebug:()=>t,saveProviderOAuthCredentials:()=>E2,saveLocalProviderSettings:()=>LY,saveLocalProviderOAuthCredentials:()=>zY,sanitizeSessionToken:()=>n2,safeParseSettings:()=>B7,safeCreateProviderConfig:()=>_X,runSubprocessEvent:()=>G$,runHook:()=>t6,reviveTeamStateDates:()=>EQ,restartLocalHubIfIdleAfterStartupTimeout:()=>iZ,resolveWorkspaceHubOwnerContext:()=>yB,resolveWorkflowsConfigSearchPaths:()=>t5,resolveSkillsConfigSearchPaths:()=>o5,resolveSharedHubOwnerContext:()=>G1,resolveSessionBackend:()=>_j,resolveRulesConfigSearchPaths:()=>s5,resolveProviderConfig:()=>x5,resolveProviderApiKeyFromSettings:()=>uJ,resolveProductionHubOwnerContext:()=>M1,resolvePluginSkillDirectoriesFromPaths:()=>K$,resolvePluginConfigSearchPaths:()=>C5,resolveModelsRegistryPath:()=>c1,resolveMessageDisplayRole:()=>lJ,resolveMcpServerRegistrations:()=>W1,resolveMarketplaceMcpServerName:()=>v9,resolveLocalClineAuthToken:()=>NY,resolveHubUrl:()=>NJ,resolveHubOwnerContext:()=>t1,resolveHubEndpointOptions:()=>R1,resolveHubBuildId:()=>gZ,resolveHooksConfigSearchPaths:()=>P5,resolveDisabledToolNames:()=>f1,resolveDisabledPluginPaths:()=>f4,resolveDefaultMcpSettingsPath:()=>W0,resolveDefaultHubPort:()=>m8,resolveDefaultHubPathname:()=>DJ,resolveDefaultHubHost:()=>UJ,resolveCoreSelectedToolIds:()=>wQ,resolveCoreDistinctId:()=>l0,resolveCoreDeviceId:()=>h8,resolveCompatibleLocalHubUrl:()=>y4,resolveClineDir:()=>wB,resolveClineDataDir:()=>T2,resolveAndLoadAgentPlugins:()=>q6,resolveAgentPluginPaths:()=>H$,requestHubShutdown:()=>b4,requestDesktopToolApproval:()=>Pj,removePluginMcpServersFromSettings:()=>I9,removePersistedConnectorConnection:()=>kj,rememberRecoverableLocalHubUrl:()=>y$,registerRemoteConfigSessionBlobUpload:()=>a7,registerMcpServersFromSettingsFile:()=>V8,registerDisposable:()=>Pm,refreshProviderModelsFromSource:()=>AY,refreshOpenAICodexToken:()=>$Q,refreshOcaToken:()=>WQ,refreshClineToken:()=>tZ,reconnectPersistedConnectors:()=>hj,readToolAutoApproveGlobally:()=>HB,readSessionCheckpointHistory:()=>_8,readRemoteConfigSessionBlobUploadMetadata:()=>zj,readPlanActModeGlobally:()=>VB,readModelsFileSync:()=>Y4,readHubDiscovery:()=>z0,readGlobalSettings:()=>j0,readCompactionStrategyGlobally:()=>WB,readCompactionModeGlobally:()=>jB,readBearerToken:()=>k3,projectSessionCompactionState:()=>x$,probeHubServer:()=>e1,probeHubConnection:()=>aB,prewarmFileIndex:()=>LQ,prewarmDetachedHubServer:()=>dZ,prepareRemoteConfigCoreIntegration:()=>Nj,persistConnectorConnection:()=>Sj,parseWorkflowConfigFromMarkdown:()=>a5,parseUserCommandEnvelope:()=>wm,parseSkillConfigFromMarkdown:()=>r5,parseSettings:()=>V7,parseSessionCompactionState:()=>D1,parseRuleConfigFromMarkdown:()=>n5,parsePluginSource:()=>_3,parseMcpInstallArgs:()=>k9,parseHookEventPayload:()=>s6,parseConfiguredAgentConfig:()=>q9,normalizeWorkspacePath:()=>T1,normalizeUserInput:()=>Cm,normalizeSdkError:()=>Em,normalizeRuntimeCapabilities:()=>y0,normalizeProviderId:()=>R6,normalizeOAuthProvider:()=>OY,normalizeHubWebSocketUrl:()=>k$,noopBasicLogger:()=>Mm,migrateLegacyProviderSettings:()=>s9,mergeRulesForSystemPrompt:()=>w8,mergeAgentHooks:()=>Z8,marketplaceEntryKey:()=>oj,markLocalProviderEnabled:()=>UY,makeTeamTaskSubSessionId:()=>L5,makeSubSessionId:()=>K6,loginOpenAICodex:()=>I4,loginOcaOAuth:()=>m4,loginLocalProvider:()=>qY,loginClineOAuth:()=>k4,loginAndSaveProviderOAuthCredentials:()=>u4,loginAndSaveLocalProviderOAuthCredentials:()=>TY,loadOpenTelemetryAdapter:()=>nv,loadMcpSettingsFile:()=>W8,loadLlmsConfigFromFile:()=>IY,loadConfiguredAgentConfigs:()=>u6,loadAgentPluginsFromPathsWithDiagnostics:()=>s2,loadAgentPluginsFromPaths:()=>kQ,loadAgentPluginFromPath:()=>M5,listSessionHistoryFromBackend:()=>aX,listPluginToolsWithDiagnostics:()=>P7,listPluginTools:()=>B9,listMcpServerOAuthStatuses:()=>j9,listLocalProviders:()=>DY,listHookConfigFiles:()=>s$,listActiveConnectors:()=>b9,isUserRunMessage:()=>iJ,isToolDisabledGlobally:()=>GB,isTelemetryOptedOutGlobally:()=>bZ,isSessionNotFoundError:()=>s1,isRuleEnabled:()=>jZ,isPluginDisabledGlobally:()=>UB,isOfficialPluginSlug:()=>D3,isOAuthProvider:()=>I$,isMarketplaceSkillInstalled:()=>X3,isLocalHubOrigin:()=>vY,isLocalHubHostName:()=>h3,isHubReconnectableTransportError:()=>qJ,isHubCommandTimeoutError:()=>lZ,isDiscoveryFilePresent:()=>SB,isClinePassLimitMessage:()=>Fm,isClinePassLimitError:()=>Gm,isClineOrgIndividualInferenceSubscriptionMessage:()=>Km,isClineOrgIndividualInferenceSubscriptionError:()=>Hm,isClineNotSubscribedMessage:()=>Bm,isClineNotSubscribedError:()=>Vm,isClineModelNotFoundMessage:()=>Ym,isClineFreeModelLimitMessage:()=>jm,isClineFreeModelLimitError:()=>Xm,isClineAccountActionRequest:()=>G7,isBuiltInProviderId:()=>UX,isAutoUpdateEnabledGlobally:()=>QB,installPlugin:()=>JY,installMcpServer:()=>Ij,identifyAccount:()=>r1,hashSecret:()=>P0,hasMcpSettingsFile:()=>U$,getValidOpenAICodexCredentials:()=>x4,getValidOcaCredentials:()=>c4,getValidClineCredentials:()=>h4,getUserRunSpan:()=>w1,getProviderOAuthCredentialsFromSettings:()=>d4,getProviderConfigFields:()=>fY,getProviderConfig:()=>sQ,getProviderAuthStorageId:()=>cJ,getProviderAuthHandler:()=>U0,getPersistedProviderApiKey:()=>n8,getPersistedConnectorConnection:()=>yj,getMcpServerOAuthState:()=>j8,getMarketplaceSkillCandidates:()=>m9,getLocalProviderModels:()=>_Y,getLiveModelsCatalog:()=>e$,getGlobalMarketplaceSkillPaths:()=>c9,getFileIndex:()=>X$,getCurrentContextSize:()=>xW,getCoreHeadlessToolNames:()=>_5,getCoreDefaultEnabledToolIds:()=>CQ,getCoreBuiltinToolCatalog:()=>i2,getCoreAcpToolNames:()=>PQ,getClinePassSubscriptionUrl:()=>Wm,getClineOrgIndividualInferenceSubscriptionMessage:()=>Jm,getClineNotSubscribedMessage:()=>Qm,getClineDefaultSystemPrompt:()=>Um,generateWorkspaceInfoWithDiagnostics:()=>K4,generateWorkspaceInfo:()=>P8,formatRulesForSystemPrompt:()=>C8,formatProviderOAuthApiKey:()=>dJ,formatDisplayUserInput:()=>Rm,findInstalledGlobalMarketplaceSkillName:()=>u9,findCheckpointForRun:()=>a6,filterExtensionToolRegistrations:()=>hZ,filterDisabledTools:()=>n1,filterDisabledPluginPaths:()=>kZ,fetchClineRecommendedModels:()=>kY,extractClinePassLimitMessage:()=>Zm,extractClineFreeModelLimitResetTime:()=>$m,executeClineAccountAction:()=>F7,ensureHubWebSocketServer:()=>I3,ensureHubServer:()=>LA,ensureDetachedHubServer:()=>vB,ensureCustomProvidersLoadedSync:()=>n9,ensureCustomProvidersLoaded:()=>a9,ensureCompatibleLocalHubUrl:()=>R2,enrichPromptWithMentions:()=>J6,emptyWorkspaceManifest:()=>Tm,emptyStoredProviderSettings:()=>Q2,discoverPluginModulePaths:()=>w5,disablePluginMcpServersInSettings:()=>mj,disableConnectorAutostart:()=>bj,deriveSubsessionStatus:()=>O5,deleteLocalProvider:()=>T3,defineLlmsConfig:()=>hY,createWorkflowsConfigDefinition:()=>Z9,createUserInstructionConfigService:()=>J2,createToolPoliciesWithPreset:()=>OQ,createTool:()=>zm,createTeamName:()=>t7,createSubprocessHooks:()=>l7,createSpawnAgentTool:()=>n$,createSkillsConfigDefinition:()=>e5,createShellTool:()=>Y5,createShellExecutor:()=>k2,createSessionHost:()=>n6,createSessionCompactionState:()=>a8,createRuntimeHost:()=>n6,createRulesConfigDefinition:()=>$9,createRestoredCheckpointMetadata:()=>E9,createRemoteConfigSessionMessagesArtifactUploader:()=>Tj,createProviderConfig:()=>DX,createOpenTelemetryTelemetryService:()=>C4,createOAuthClientCallbacks:()=>w6,createMcpTools:()=>g6,createLocalHubScheduleRuntimeHandlers:()=>DA,createLlmsSdk:()=>gY,createInitialAccumulatedUsage:()=>w0,createInMemoryHubOwnerContext:()=>PB,createHubServerUrl:()=>K1,createHubAuthToken:()=>xZ,createHookConfigFileHooks:()=>k5,createHookConfigFileExtension:()=>f6,createHookAuditHooks:()=>N6,createEditorExecutor:()=>g2,createDisabledMcpToolPolicy:()=>V9,createDisabledMcpToolPolicies:()=>w7,createDelegatedAgentConfigProvider:()=>i$,createDelegatedAgent:()=>r$,createDefaultToolsWithPreset:()=>qQ,createDefaultTools:()=>u$,createDefaultShellExecutor:()=>K5,createDefaultMcpServerClientFactory:()=>I6,createDefaultExecutors:()=>W6,createCoreSettingsService:()=>H8,createCoreSessionSnapshot:()=>b1,createContributionRegistry:()=>qm,createContextCompactionPrepareTurn:()=>o4,createConfiguredTelemetryService:()=>a1,createConfiguredTelemetryHandle:()=>g8,createConfiguredAgentTools:()=>d6,createCompactionStateAwarePrepareTurn:()=>s4,createClineTelemetryServiceMetadata:()=>Om,createClineTelemetryServiceConfig:()=>Am,createCheckpointComparePlan:()=>c7,createBuiltinTools:()=>r2,createApplyPatchExecutor:()=>x2,createAgentTeamsTools:()=>l2,createAgentRuntime:()=>km,createAgentHooksExtension:()=>z6,countUserRunMessages:()=>g$,connectToHub:()=>rZ,computePatchChanges:()=>Z6,completeClineDeviceAuth:()=>IJ,compareCheckpointToWorkspace:()=>w9,collectPluginMcpOAuthCandidates:()=>L3,clearPrivateModelsCatalogCache:()=>GX,clearLiveModelsCatalogCache:()=>KX,clearHubDiscovery:()=>i0,captureWorkspacePathResolved:()=>rV,captureWorkspaceInitialized:()=>UZ,captureWorkspaceInitError:()=>DZ,captureToolUsage:()=>k8,captureTokenUsage:()=>AZ,captureTaskRestarted:()=>LZ,captureTaskCreated:()=>_Z,captureTaskCompleted:()=>q4,captureSubagentExecution:()=>T4,captureSkillUsed:()=>qZ,captureSdkError:()=>Lm,captureProviderConfigured:()=>aV,captureProviderApiError:()=>z4,captureModeSwitch:()=>OZ,captureMistakeLimitReached:()=>TZ,captureMentionUsed:()=>NZ,captureMentionSearchResults:()=>RZ,captureMentionFailed:()=>fZ,captureHookDiscovery:()=>EZ,captureExtensionActivated:()=>iV,captureDiffEditFailure:()=>zZ,captureConversationTurnEvent:()=>y8,captureCompactionSkipped:()=>wZ,captureCompactionExecuted:()=>CZ,captureAuthSucceeded:()=>l1,captureAuthStarted:()=>p1,captureAuthLoggedOut:()=>S$,captureAuthFailed:()=>i1,captureAgentUnexpectedReasoningTokens:()=>lV,captureAgentTeamCreated:()=>MZ,captureAgentCreated:()=>b$,buildWorkspaceMetadata:()=>G4,buildTeamProgressSummary:()=>p6,buildSdkErrorProperties:()=>Dm,buildRemoteConfigSessionBlobUploadMetadata:()=>r7,buildMcpInstallTransport:()=>e7,buildDelegatedAgentConfig:()=>d2,buildConnectionUpdate:()=>NW,buildConfiguredAgentToolName:()=>z9,buildConfiguredAgentToolDescriptors:()=>T9,buildCheckpointWorkspaceDiff:()=>u7,bootstrapAgentTeams:()=>H6,authorizeMcpServerOAuth:()=>M7,augmentMcpTimeoutError:()=>D$,addLocalProvider:()=>FY,accumulateUsageTotals:()=>f0,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>i5,UnifiedConfigFileWatcher:()=>J8,ToolPresets:()=>Q1,TelemetryService:()=>I8,TelemetryLoggerSink:()=>E4,TEAM_TOOL_NAMES:()=>B6,SubprocessSandbox:()=>L6,StructuredCommandInputSchema:()=>S2,StoredProviderSettingsSchema:()=>E6,StoredProviderSettingsEntrySchema:()=>H7,SqliteTeamStore:()=>O8,SqliteSessionStore:()=>h1,SessionVersioningService:()=>G2,SessionVersioningError:()=>d0,SessionSource:()=>L0,SessionNotFoundError:()=>o1,SapSettingsSchema:()=>X7,SKILLS_CONFIG_DIRECTORY_NAME:()=>l5,SESSION_STATUSES:()=>q5,SESSION_NOT_FOUND_ERROR_CODE:()=>z2,SDK_ERROR_TELEMETRY_EVENT:()=>Sm,RuntimeOAuthTokenManager:()=>Q4,RpcClineAccountService:()=>d5,RemoteRuntimeHost:()=>c6,ReasoningSettingsSchema:()=>Z7,RULES_CONFIG_DIRECTORY_NAME:()=>q7,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY:()=>n7,ProviderSettingsSchema:()=>$2,ProviderSettingsManager:()=>v1,ProviderProtocolSchema:()=>tQ,ProviderIdSchema:()=>v5,ProviderClientSchema:()=>eQ,PatchActionType:()=>I2,PATCH_MARKERS:()=>p,OpenTelemetryProvider:()=>x8,OcaSettingsSchema:()=>j7,OPENAI_COMPATIBLE_PROVIDERS:()=>I5,OAuthReauthRequiredError:()=>q8,NodeHubClient:()=>F1,NoOpFeatureFlagsProvider:()=>D8,NativeHubTransportAdapter:()=>ZZ,ModelCatalogSettingsSchema:()=>Y7,McpSettingsUpdateSkippedError:()=>b6,McpSettingsMutatorPurityError:()=>W2,McpSettingsLockTimeoutError:()=>X2,MAX_COMMAND_OUTPUT_CHARS:()=>Q$,LocalRuntimeHost:()=>g1,Llms:()=>av,InMemoryWorkspaceManager:()=>C6,InMemoryMcpManager:()=>B8,HubUIClient:()=>MJ,HubTransportError:()=>v0,HubSessionClient:()=>RJ,HubServerTransport:()=>V4,HubScheduleService:()=>b8,HubScheduleCommandService:()=>E8,HubRuntimeHost:()=>_$,HubCommandError:()=>u8,HookEventPayloadSchema:()=>p7,HookEventNameSchema:()=>d7,HookConfigFileName:()=>T6,HOOK_CONFIG_FILE_EVENT_MAP:()=>S5,HOOKS_CONFIG_DIRECTORY_NAME:()=>mQ,GlobalSettingsSchema:()=>N4,GcpSettingsSchema:()=>J7,FileTeamPersistenceStore:()=>M3,FeatureFlagsService:()=>U8,FeatureFlagDefaultValue:()=>fm,FEATURE_FLAGS:()=>Nm,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>y3,DefaultToolNames:()=>F0,DefaultRuntimeBuilder:()=>Z4,DefaultLlmsSdk:()=>t9,DEFAULT_MODELS_CATALOG_URL:()=>rQ,DEFAULT_HUB_PORT:()=>GJ,DEFAULT_HUB_PATHNAME:()=>FJ,DEFAULT_HUB_HOST:()=>KJ,CoreSettingsService:()=>j2,CoreSessionService:()=>x1,ContributionRegistry:()=>_m,CommandExitError:()=>J$,ClinePassLimitError:()=>ev,ClineOrgIndividualInferenceSubscriptionError:()=>tv,ClineNotSubscribedError:()=>sv,ClineFreeModelLimitError:()=>ov,ClineCore:()=>P9,ClineAccountService:()=>u5,ChatViewStateSchema:()=>PY,ChatSummarySchema:()=>b3,ChatSessionStatusSchema:()=>C3,ChatSessionConfigSchema:()=>E3,ChatMessageSchema:()=>S3,ChatMessageRoleSchema:()=>w3,ChatMessageImageSchema:()=>P3,CORE_TELEMETRY_EVENTS:()=>m,CORE_BUILD_VERSION:()=>SY,BrowserWebSocketHubAdapter:()=>$Z,BUILT_IN_PROVIDER_IDS:()=>FX,BUILT_IN_PROVIDER:()=>g5,AzureSettingsSchema:()=>W7,AwsSettingsSchema:()=>Q7,AuthSettingsSchema:()=>$7,AgentTeamsRuntime:()=>F8,AgentTeam:()=>r6,Agent:()=>ym,ALL_DEFAULT_TOOL_NAMES:()=>C$});M(f,n$0);import*as av from"@cline/llms";import{ClineFreeModelLimitError as ov,ClineNotSubscribedError as sv,ClineOrgIndividualInferenceSubscriptionError as tv,ClinePassLimitError as ev,extractClineFreeModelLimitResetTime as $m,extractClinePassLimitMessage as Zm,getClineNotSubscribedMessage as Qm,getClineOrgIndividualInferenceSubscriptionMessage as Jm,getClinePassSubscriptionUrl as Wm,isClineFreeModelLimitError as Xm,isClineFreeModelLimitMessage as jm,isClineModelNotFoundMessage as Ym,isClineNotSubscribedError as Vm,isClineNotSubscribedMessage as Bm,isClineOrgIndividualInferenceSubscriptionError as Hm,isClineOrgIndividualInferenceSubscriptionMessage as Km,isClinePassLimitError as Gm,isClinePassLimitMessage as Fm}from"@cline/llms";import{buildClineSystemPrompt as Um,buildSdkErrorProperties as Dm,ContributionRegistry as _m,captureSdkError as Lm,createClineTelemetryServiceConfig as Am,createClineTelemetryServiceMetadata as Om,createContributionRegistry as qm,createTool as zm,emptyWorkspaceManifest as Tm,FEATURE_FLAGS as Nm,FeatureFlagDefaultValue as fm,formatDisplayUserInput as Rm,noopBasicLogger as Mm,normalizeSdkError as Em,normalizeUserInput as Cm,parseUserCommandEnvelope as wm,registerDisposable as Pm,SDK_ERROR_TELEMETRY_EVENT as Sm,stripUtf8Bom as bm}from"@cline/shared";import"@cline/shared/storage";var VU={};w(VU,{isClineAccountActionRequest:()=>G7,executeClineAccountAction:()=>F7,RpcClineAccountService:()=>d5,ClineAccountService:()=>u5});function TP($){if(typeof $!=="object"||$===null||!("error"in $))return;let Z=$.error;return typeof Z==="string"&&Z.trim()?Z:void 0}function YU($,Z,Q){let J=TP(Q);if(J)return J;let W=Z.trim();if(W){let X=W.length>200?`${W.slice(0,200)}...`:W;return`Cline account request failed with status ${$}: ${X}`}return`Cline account request failed with status ${$}`}class u5{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 J=(this.getCurrentUserIdFn?await this.getCurrentUserIdFn():void 0)?.trim();if(J)return J;let W=await this.fetchMe();if(!W.id?.trim())throw Error("Unable to resolve current user id");return W.id}async resolveOrganizationMemberId($,Z){let Q=Z?.trim();if(Q)return Q;let W=(this.getOrganizationMemberIdFn?await this.getOrganizationMemberIdFn($):void 0)?.trim();if(W)return W;let j=(await this.fetchUserOrganizations()).find((Y)=>Y.organizationId===$)?.memberId;if(!j?.trim())throw Error(`Unable to resolve memberId for organization ${$}`);return j}async request($,Z){let Q=(await this.getAuthTokenFn())?.trim();if(!Q)throw Error("No Cline account auth token found");let J=this.getHeadersFn?await this.getHeadersFn():{},W=new AbortController,X=setTimeout(()=>W.abort(),this.requestTimeoutMs);try{let j=await this.fetchImpl(new URL($,this.apiBaseUrl),{method:Z?.method??"GET",headers:{Authorization:`Bearer ${Q}`,"Content-Type":"application/json",...J??{}},body:Z?.body!==void 0?JSON.stringify(Z.body):void 0,signal:W.signal});if(j.status===204||Z?.expectNoContent){if(!j.ok)throw Error(`Cline account request failed with status ${j.status}`);return}let Y=await j.text(),V;if(Y.trim())try{V=JSON.parse(Y)}catch{if(!j.ok)throw Error(YU(j.status,Y,void 0));throw Error("Cline account response was not valid JSON")}if(!j.ok)throw Error(YU(j.status,Y,V));if(typeof V==="object"&&V!==null){let B=V;if(typeof B.success==="boolean"){if(!B.success)throw Error(B.error||"Cline account request failed");return B.data}}if(V===void 0||V===null)throw Error("Cline account response payload was empty");return V}finally{clearTimeout(X)}}}function G7($){return $.action==="clineAccount"}async function F7($,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 d5{executor;constructor($){this.executor=$}async fetchMe(){return this.request({action:"clineAccount",operation:"fetchMe"})}async fetchBalance($){return this.request({action:"clineAccount",operation:"fetchBalance",...$?.trim()?{userId:$.trim()}:{}})}async fetchUsageTransactions($){return this.request({action:"clineAccount",operation:"fetchUsageTransactions",...$?.trim()?{userId:$.trim()}:{}})}async fetchPaymentTransactions($){return this.request({action:"clineAccount",operation:"fetchPaymentTransactions",...$?.trim()?{userId:$.trim()}:{}})}async fetchUserOrganizations(){return this.request({action:"clineAccount",operation:"fetchUserOrganizations"})}async fetchOrganizationBalance($){let 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 BU={};w(BU,{createOAuthClientCallbacks:()=>w6});function w6($){return{onAuth:({url:Z,instructions:Q})=>{if($.onOutput?.(Q??"Complete sign-in in your browser."),$.openUrl)try{Promise.resolve($.openUrl(Z)).catch((J)=>{$.onOpenUrlError?.({url:Z,error:J})})}catch(J){$.onOpenUrlError?.({url:Z,error:J})}$.onOutput?.(Z)},onPrompt:$.onPrompt,onServerListening:$.onServerListening,onServerClose:$.onServerClose}}var g_={};w(g_,{ClineCore:()=>P9});function HU($){if($===!0)return{};if(!$)return;return $}function KU($){if($==="user")return"global";return $}class OX{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 GU($){let{host:Z}=$;return{async startSession(Q){let J=(Q.cwd?.trim()||Q.workspaceRoot).trim(),W=await Z.startSession({source:Q.source?.trim()||L0.CLI,interactive:!1,config:{providerId:R6(Q.provider),modelId:Q.model,apiKey:Q.apiKey?.trim()||void 0,cwd:J,workspaceRoot:Q.workspaceRoot,systemPrompt:Q.systemPrompt??"",mode:RP(Q),maxIterations:Q.maxIterations,enableTools:Q.enableTools!==!1,enableSpawnAgent:Q.enableSpawn!==!1,enableAgentTeams:Q.enableTeams!==!1,disableMcpSettingsTools:Q.disableMcpSettingsTools,missionLogIntervalSteps:Q.missionStepInterval,missionLogIntervalMs:Q.missionTimeIntervalMs},toolPolicies:Q.toolPolicies??{"*":{autoApprove:Q.autoApproveTools!==!1}},localRuntime:{extensionContext:$.getExtensionContext(),configExtensions:Q.configExtensions}});return{sessionId:W.sessionId,startResult:{sessionId:W.sessionId,manifestPath:W.manifestPath,messagesPath:W.messagesPath}}},async sendSession(Q,J){let W=await Z.runTurn({sessionId:Q,prompt:J.prompt,userImages:J.attachments?.userImages,userFiles:J.attachments?.userFiles?.map((X)=>X.content),delivery:J.delivery});if(!W)throw Error("ClineCore automation runtime returned no result");return{result:fP(W)}},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 U7($){let Z=NP($.automationService,$.automation),Q=$.context?.client??($.clientName?{name:$.clientName}:void 0),J=$.context?.user??($.distinctId?{distinctId:$.distinctId}:void 0),W=$.context?.logger??$.logger,X=$.context?.telemetry??$.telemetry;if(!Z&&!Q&&!J&&!W&&!X)return $.context;return{...$.context??{},...Q?{client:Q}:{},...J?{user:J}:{},...W?{logger:W}:{},...X?{telemetry:X}:{},...Z?{automation:Z}:{}}}function NP($,Z){if(!$)return;return{ingestEvent:(Q)=>{Z.ingestEvent(Q)}}}function fP($){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 RP($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}var AD={};w(AD,{createCoreSettingsService:()=>H8,CoreSettingsService:()=>j2});import{existsSync as K9,readFileSync as qb}from"node:fs";import{basename as hX,dirname as KD,extname as zb,isAbsolute as UD,join as Tb,relative as DD,resolve as GD}from"node:path";var RU={};w(RU,{resolveWorkflowsConfigSearchPaths:()=>t5,resolveSkillsConfigSearchPaths:()=>o5,resolveRulesConfigSearchPaths:()=>s5,parseWorkflowConfigFromMarkdown:()=>a5,parseSkillConfigFromMarkdown:()=>r5,parseRuleConfigFromMarkdown:()=>n5,createWorkflowsConfigDefinition:()=>Z9,createUserInstructionConfigService:()=>J2,createSkillsConfigDefinition:()=>e5,createRulesConfigDefinition:()=>$9,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>i5,UnifiedConfigFileWatcher:()=>J8,SKILLS_CONFIG_DIRECTORY_NAME:()=>l5,RULES_CONFIG_DIRECTORY_NAME:()=>q7});import{createHash as MP}from"node:crypto";import{watch as EP}from"node:fs";import{readdir as CP,readFile as wP}from"node:fs/promises";import{join as PP}from"node:path";function SP($){return MP("sha1").update($).digest("hex")}function DU($){return Boolean($&&typeof $==="object"&&"code"in $)}function FU($){return DU($)&&$.code==="ENOENT"}function UU($){return DU($)&&($.code==="EACCES"||$.code==="EPERM")}class J8{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 J of Q.directories){let W=this.baseTypesByDirectory.get(J);if(W)W.add(Q.type);else this.baseTypesByDirectory.set(J,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,J])=>[Q,{...J}]))}getAllSnapshots(){let $=new Map;for(let[Z,Q]of this.recordsByType.entries())$.set(Z,new Map([...Q.entries()].map(([J,W])=>[J,{...W}])));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=EP(Z,()=>{let J=this.watchedTypesByDirectory.get(Z);if(!J)return;for(let W of J)this.pendingTypes.add(W);this.scheduleFlush()});this.watchersByDirectory.set(Z,Q),Q.on("error",(J)=>{let W=this.watchedTypesByDirectory.get(Z);if(!W)return;for(let X of W)this.emit({kind:"error",type:X,error:J,filePath:Z})})}catch(Q){if(!FU(Q)&&!UU(Q)){let J=$.get(Z);if(!J)continue;for(let W of J)this.emit({kind:"error",type:W,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($),J=this.recordsByType.get($.type)??new Map;for(let[W,X]of J.entries()){if(Z.has(W))continue;this.emit({kind:"remove",type:$.type,id:W,filePath:X.filePath})}for(let[W,X]of Z.entries()){let j=J.get(W);if(j&&j.filePath===X.filePath&&j.fingerprint===X.fingerprint)continue;this.emit({kind:"upsert",record:{type:X.type,id:W,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 J of $.directories){Q.add(J);let W=$.discoverFiles?await $.discoverFiles(J):await this.readDirectoryFileCandidates(J);for(let X of W){let{fileName:j,filePath:Y}=X;if(Q.add(X.directoryPath),$.includeFile&&!$.includeFile(j,Y))continue;try{let V=await wP(Y,"utf8"),B={type:$.type,directoryPath:X.directoryPath,fileName:j,filePath:Y,content:V},H=$.parseFile(B),K=$.resolveId(H,B).trim();if(!K)continue;Z.set(K,{type:$.type,id:K,item:H,filePath:Y,fingerprint:SP(V)})}catch(V){if(this.emitParseErrors)this.emit({kind:"error",type:$.type,error:V,filePath:Y})}}}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 J of Q){let W=$.get(J);if(W)W.add(Z);else $.set(J,new Set([Z]))}return $}async readDirectoryFileCandidates($){try{return(await CP($,{withFileTypes:!0})).filter((Q)=>Q.isFile()).map((Q)=>({directoryPath:$,fileName:Q.name,filePath:PP($,Q.name)})).sort((Q,J)=>Q.fileName.localeCompare(J.fileName))}catch(Z){if(FU(Z)||UU(Z))return[];throw Z}}}import{readdir as zX,readFile as bP,stat as qX}from"node:fs/promises";import{basename as F$,dirname as yP,extname as _7,join as a0,resolve as p5}from"node:path";import{stripUtf8Bom as kP}from"@cline/shared";import{AGENTS_RULES_FILE_NAME as _U,RULES_CONFIG_DIRECTORY_NAME as q7,resolveGlobalAgentsRulesPath as hP,resolveRulesConfigSearchPaths as IP,resolveSkillsConfigSearchPaths as xP,resolveWorkflowsConfigSearchPaths as gP,SKILLS_CONFIG_DIRECTORY_NAME as l5,WORKFLOWS_CONFIG_DIRECTORY_NAME as i5}from"@cline/shared/storage";import vP from"yaml";var D7="SKILL.md",mP="managed.json",cP=new Set([".md",".markdown",".txt"]);function TX($){return $.trim().toLowerCase()}function P6($){let Z=$;return Z?.code==="ENOENT"||Z?.code==="ENOTDIR"||Z?.code==="EACCES"||Z?.code==="EPERM"||Z?.code==="ELOOP"}function L7($){return cP.has(_7($).toLowerCase())}function LU($){let Z=[],Q=new Set;for(let J of $){let W=p5(J);if(Q.has(W))continue;Q.add(W),Z.push(J)}return Z}function uP($){let Z=[...$?.directories??o5($?.workspacePath)];if($?.pluginSkillDirectories)Z.push(...$.pluginSkillDirectories);else if($?.includePluginSkills)Z.push(...SF({pluginPaths:$.pluginPaths,workspacePath:$.workspacePath,cwd:$.cwd??$.workspacePath}));return LU(Z)}async function NX($){try{let Z=await zX($,{withFileTypes:!0}),Q=[];for(let J of Z){if(!J.isDirectory())continue;let W=a0($,J.name),X=a0(W,mP);try{let j=await bP(X,"utf8"),Y=JSON.parse(j);if(Y&&typeof Y==="object")Q.push(W)}catch(j){if(P6(j))continue;if(j?.name==="SyntaxError")continue;throw j}}return Q.sort((J,W)=>J.localeCompare(W))}catch(Z){if(P6(Z))return[];throw Z}}function fX($){let Z=kP($),Q=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,J=Z.match(Q);if(!J)return{data:{},body:Z,hadFrontmatter:!1};let[,W,X]=J;try{let j=vP.parse(W);return{data:j&&typeof j==="object"&&!Array.isArray(j)?j:{},body:X,hadFrontmatter:!0}}catch(j){let Y=j instanceof Error?j.message:String(j);return{data:{},body:Z,hadFrontmatter:!0,parseError:Y}}}function A7($,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 J=$.trim();if(!J&&Q)throw Error(`Frontmatter field '${Z}' cannot be empty.`);return J||void 0}function S6($,Z){if($===void 0||$===null)return;if(typeof $!=="boolean")throw Error(`Frontmatter field '${Z}' must be a boolean.`);return $}function dP($,Z){if(F$($.filePath).toLowerCase()!==_U.toLowerCase())return F$($.filePath,_7($.filePath));if(Z&&p5($.filePath)===p5(Z,_U))return"Workspace AGENTS.md";if(p5($.filePath)===p5(hP()))return"Global AGENTS.md";return F$($.filePath,_7($.filePath))}function r5($,Z){let{data:Q,body:J,parseError:W}=fX($);if(W)throw Error(`Failed to parse YAML frontmatter: ${W}`);let X=J.trim();if(!X)throw Error("Missing instructions body in skill file.");let Y=A7(Q.name,"name",!1)??Z.trim();if(!Y)throw Error("Missing skill name.");return{name:Y,description:A7(Q.description,"description",!1),disabled:S6(Q.disabled,"disabled")??(S6(Q.enabled,"enabled")===!1?!0:void 0),instructions:X,frontmatter:Q}}function n5($,Z){let{data:Q,body:J,parseError:W}=fX($);if(W)throw Error(`Failed to parse YAML frontmatter: ${W}`);let X=J.trim();if(!X)throw Error("Missing instructions body in rule file.");let j=A7(Q.name,"name",!1)??Z.trim();if(!j)throw Error("Missing rule name.");return{name:j,disabled:S6(Q.disabled,"disabled")??(S6(Q.enabled,"enabled")===!1?!0:void 0),instructions:X,frontmatter:Q}}function a5($,Z){let{data:Q,body:J,parseError:W}=fX($);if(W)throw Error(`Failed to parse YAML frontmatter: ${W}`);let X=J.trim();if(!X)throw Error("Missing instructions body in workflow file.");let j=A7(Q.name,"name",!1)??Z.trim();if(!j)throw Error("Missing workflow name.");return{name:j,disabled:S6(Q.disabled,"disabled")??(S6(Q.enabled,"enabled")===!1?!0:void 0),instructions:X,frontmatter:Q}}function o5($){return xP($)}function s5($){return IP($)}function t5($){return gP($)}async function AU($){if(F$($)===".cline"){let Z=await NX($);return(await Promise.all(Z.map((J)=>AU(a0(J,l5))))).flat()}try{let Z=await zX($,{withFileTypes:!0}),Q=[];for(let J of Z){if(J.isFile()&&J.name===D7){Q.push({directoryPath:$,fileName:J.name,filePath:a0($,J.name)});continue}let W=a0($,J.name);if(J.isDirectory()||J.isSymbolicLink()&&await qX(W).then((j)=>j.isDirectory()).catch((j)=>{if(P6(j))return!1;throw j}))Q.push({directoryPath:W,fileName:D7,filePath:a0(W,D7)})}return Q}catch(Z){if(P6(Z))return[];throw Z}}async function O7($){if(F$($)===".cline"){let Z=await NX($);return(await Promise.all(Z.map((J)=>O7(a0(J,"rules.md"))))).flat()}try{if((await qX($)).isFile())return[{directoryPath:yP($),fileName:F$($),filePath:$}]}catch(Z){if(!P6(Z))throw Z}try{let Q=(await zX($,{withFileTypes:!0})).filter((W)=>W.isFile()&&L7(W.name)).map((W)=>({directoryPath:$,fileName:W.name,filePath:a0($,W.name)})),J=a0($,"AGENTS.md");try{if((await qX(J)).isFile()){if(!Q.some((j)=>j.fileName==="AGENTS.md"))Q.push({directoryPath:$,fileName:"AGENTS.md",filePath:J})}}catch{}return Q}catch(Z){if(P6(Z))return[];throw Z}}async function pP($){if(F$($)===".cline"){let Z=await NX($);return(await Promise.all(Z.map((J)=>O7(a0(J,i5))))).flat()}return O7($)}function e5($){let Z=uP($),Q=$?.workspacePath?a0($.workspacePath,".cline"):void 0;return{type:"skill",directories:Q?LU([...Z,Q]):Z,discoverFiles:AU,includeFile:(J)=>J===D7,parseFile:(J)=>r5(J.content,F$(J.directoryPath)),resolveId:(J)=>TX(J.name)}}function $9($){let Z=$?.directories??s5($?.workspacePath),Q=$?.workspacePath?a0($.workspacePath,".cline"):void 0;return{type:"rule",directories:Q?[...Z,Q]:Z,discoverFiles:O7,includeFile:(J,W)=>J===".clinerules"||L7(J)||L7(W),parseFile:(J)=>n5(J.content,dP(J,$?.workspacePath)),resolveId:(J)=>TX(J.name)}}function Z9($){let Z=$?.directories??t5($?.workspacePath),Q=$?.workspacePath?a0($.workspacePath,".cline"):void 0;return{type:"workflow",directories:Q?[...Z,Q]:Z,discoverFiles:pP,includeFile:(J)=>L7(J),parseFile:(J)=>a5(J.content,F$(J.filePath,_7(J.filePath))),resolveId:(J)=>TX(J.name)}}function OU($){let Z=[e5($?.skills),$9($?.rules),Z9($?.workflows)];return new J8(Z,{debounceMs:$?.debounceMs,emitParseErrors:$?.emitParseErrors})}import{truncateSplit as qU}from"@cline/shared";function lP($,Z){if($.description?.trim())return qU($.description,".");if(Z==="workflow")return;return qU($.instructions,".")}function iP($){return $.disabled!==!0}function zU($,Z){return[...$.getSnapshot(Z).entries()].map(([Q,J])=>({id:Q,record:J})).filter(({record:Q})=>iP(Q.item)).map(({id:Q,record:J})=>({id:Q,name:J.item.name,instructions:J.item.instructions,description:lP(J.item,Z),kind:Z})).sort((Q,J)=>Q.name.localeCompare(J.name))}function Q9($){let Z=new Map;for(let Q of[...zU($,"workflow"),...zU($,"skill")])if(!Z.has(Q.name))Z.set(Q.name,Q);return[...Z.values()].sort((Q,J)=>Q.name.localeCompare(J.name))}function TU($,Z){if(!$.startsWith("/")||$.length<2)return $;let Q=$.match(/^\/(\S+)/);if(!Q)return $;let J=Q[1];if(!J)return $;let W=J.length+1,X=$.slice(W),j=Q9(Z).find((Y)=>Y.name===J);return j?`${j.instructions}${X}`:$}function z7($){return $.trim().replace(/^\/+/,"").toLowerCase()}function rP($){if(!$||$.length===0)return;let Z=$.map(z7).filter((Q)=>Q.length>0);return Z.length>0?new Set(Z):void 0}function nP($,Z,Q){if(!Q)return!0;let J=z7($),W=z7(Z),X=J.includes(":")?J.split(":").at(-1)??J:J,j=W.includes(":")?W.split(":").at(-1)??W:W;return Q.has(J)||Q.has(W)||Q.has(X)||Q.has(j)}function J9($,Z){let Q=rP(Z);return[...$.getSnapshot("skill").entries()].map(([W,X])=>{let j=X.item;return{id:W,name:j.name.trim(),description:j.description?.trim(),disabled:j.disabled===!0,skill:j}}).filter((W)=>nP(W.id,W.name,Q))}function aP($,Z){return J9($,Z).filter((Q)=>!Q.disabled).map((Q)=>Q.name.trim()).filter((Q)=>Q.length>0).sort((Q,J)=>Q.localeCompare(J))}function oP($,Z,Q){let J=z7(Z);if(!J)return{error:"Missing skill name."};let W=J9($,Q),X=W.find((H)=>H.id===J);if(X){let{skill:H}=X;if(H.disabled===!0)return{error:`Skill "${H.name}" is configured but disabled.`};return{id:X.id,skill:H}}let j=J.includes(":")?J.split(":").at(-1)??J:J,Y=W.filter(({id:H})=>{if(H===j)return!0;return H.endsWith(`:${j}`)}),V=Y.filter(({skill:H})=>H.disabled!==!0);if(V.length===1){let{id:H,skill:K}=V[0];return{id:H,skill:K}}if(V.length>1)return{error:`Skill "${Z}" is ambiguous. Use one of: ${V.map(({id:H})=>H).join(", ")}`};if(Y.length===1){let{skill:H}=Y[0];return{error:`Skill "${H.name}" is configured but disabled.`}}if(Y.length>1)return{error:`Skill "${Z}" is ambiguous, and all matches are disabled: ${Y.map(({id:H})=>H).join(", ")}`};let B=aP($,Q);return{error:B.length>0?`Skill "${Z}" not found. Available skills: ${B.join(", ")}`:"No skills are currently available."}}function RX($,Z=Promise.resolve(),Q){let J=new Set,W=async(X,j)=>{await Z;let Y=oP($,X,Q);if("error"in Y)return Y.error;let{id:V,skill:B}=Y;if(J.has(V))return`Skill "${B.name}" is already running.`;J.add(V);try{let H=j?.trim(),K=H?`
510
510
  <command-args>${H}</command-args>`:"",G=B.description?.trim()?`Description: ${B.description.trim()}
511
511
 
512
512
  `:"";return`<command-name>${B.name}</command-name>${K}
513
513
  <command-instructions>
514
514
  ${G}${B.instructions}
515
- </command-instructions>`}finally{J.delete(V)}};return Object.defineProperty(W,"configuredSkills",{get:()=>J9($,Q).map(({skill:X,...j})=>j),enumerable:!0,configurable:!1}),W}function TU($){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((J)=>Boolean(J))},async setup(J){if(await Z,$.includeRules)J.registerRule({id:"cline-user-instructions:rules",source:"user-instruction-watcher",content:()=>p3($.watcher)});if($.registerSkillsTool)J.registerTool(k2(RX($.watcher,Z,$.allowedSkillNames)));for(let W of Q9($.watcher).filter((X)=>X.kind==="skill"&&$.includeSkills||X.kind==="workflow"&&$.includeWorkflows))J.registerCommand({name:W.name,description:W.description,handler:(X)=>{let j=X.trim();return j?`${W.instructions}
515
+ </command-instructions>`}finally{J.delete(V)}};return Object.defineProperty(W,"configuredSkills",{get:()=>J9($,Q).map(({skill:X,...j})=>j),enumerable:!0,configurable:!1}),W}function NU($){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((J)=>Boolean(J))},async setup(J){if(await Z,$.includeRules)J.registerRule({id:"cline-user-instructions:rules",source:"user-instruction-watcher",content:()=>p3($.watcher)});if($.registerSkillsTool)J.registerTool(h2(RX($.watcher,Z,$.allowedSkillNames)));for(let W of Q9($.watcher).filter((X)=>X.kind==="skill"&&$.includeSkills||X.kind==="workflow"&&$.includeWorkflows))J.registerCommand({name:W.name,description:W.description,handler:(X)=>{let j=X.trim();return j?`${W.instructions}
516
516
 
517
- ${j}`:W.instructions}})}}}class NU{watcher;ready;stopped=!1;constructor($){this.watcher=AU($)}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 Q9(this.watcher)}resolveRuntimeSlashCommand($){return zU($,this.watcher)}hasConfiguredSkills($){return J9(this.watcher,$).some((Z)=>!Z.disabled)}createSkillsExecutor($){return RX(this.watcher,(this.ready??Promise.resolve()).catch(()=>{}),$)}createExtension($){return TU({...$,watcher:this.watcher,watcherReady:(this.ready??Promise.resolve()).catch(()=>{})})}}function Q2($){return new NU($)}import{readFile as oP,writeFile as sP}from"node:fs/promises";import{stripUtf8Bom as tP}from"@cline/shared";import MU from"yaml";function eP($){let Z=tP($),Q=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,J=Z.match(Q);if(!J)return{data:{},body:Z,hadFrontmatter:!1};let[,W,X]=J,j=MU.parse(W);return{data:j&&typeof j==="object"&&!Array.isArray(j)?j:{},body:X,hadFrontmatter:!0}}function RU($,Z){return`---
518
- ${MU.stringify($).trimEnd()}
517
+ ${j}`:W.instructions}})}}}class fU{watcher;ready;stopped=!1;constructor($){this.watcher=OU($)}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 Q9(this.watcher)}resolveRuntimeSlashCommand($){return TU($,this.watcher)}hasConfiguredSkills($){return J9(this.watcher,$).some((Z)=>!Z.disabled)}createSkillsExecutor($){return RX(this.watcher,(this.ready??Promise.resolve()).catch(()=>{}),$)}createExtension($){return NU({...$,watcher:this.watcher,watcherReady:(this.ready??Promise.resolve()).catch(()=>{})})}}function J2($){return new fU($)}import{readFile as sP,writeFile as tP}from"node:fs/promises";import{stripUtf8Bom as eP}from"@cline/shared";import EU from"yaml";function $S($){let Z=eP($),Q=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,J=Z.match(Q);if(!J)return{data:{},body:Z,hadFrontmatter:!1};let[,W,X]=J,j=EU.parse(W);return{data:j&&typeof j==="object"&&!Array.isArray(j)?j:{},body:X,hadFrontmatter:!0}}function MU($,Z){return`---
518
+ ${EU.stringify($).trimEnd()}
519
519
  ---
520
- ${Z}`}function $S($,Z){let{data:Q,body:J,hadFrontmatter:W}=eP($);if(!W&&Z)return $;if(Z){if(delete Q.disabled,Q.enabled===!1)delete Q.enabled;if(Object.keys(Q).length===0)return J;return RU(Q,J)}return Q.disabled=!0,RU(Q,J)}async function EU({filePath:$,enabled:Z}){let Q=await oP($,"utf8"),J=$S(Q,Z);return await sP($,J),{filePath:$,enabled:Z,disabled:!Z}}var jD={};w(jD,{updateMcpSettingsFileSync:()=>A1,updateMcpSettingsFile:()=>y6,updateMcpServerOAuthStateAsync:()=>X9,updateMcpServerOAuthState:()=>j8,setMcpServerDisabled:()=>W8,resolvePluginMcpServerRegistrations:()=>E7,resolveMcpServerRegistrations:()=>W1,resolveDefaultMcpSettingsPath:()=>W0,registerMcpServersFromSettingsFile:()=>Y8,normalizePluginMcpServerRegistration:()=>kX,loadMcpSettingsFile:()=>J8,listMcpServerOAuthStatuses:()=>j9,hasMcpSettingsFile:()=>U$,getMcpServerOAuthState:()=>X8,createMcpTools:()=>g6,createDisabledMcpToolPolicy:()=>V9,createDisabledMcpToolPolicies:()=>w7,createDefaultMcpServerClientFactory:()=>I6,authorizeMcpServerOAuth:()=>M7,augmentMcpTimeoutError:()=>D$,McpSettingsUpdateSkippedError:()=>b6,McpSettingsMutatorPurityError:()=>J2,McpSettingsLockTimeoutError:()=>W2,InMemoryMcpManager:()=>V8});import{spawn as pS}from"node:child_process";import{StringDecoder as tU}from"node:string_decoder";import{formatMcpTimeoutErrorMessage as lS,isMcpTimeoutConfigured as iS}from"@cline/shared";import{UnauthorizedError as nU}from"@modelcontextprotocol/sdk/client/auth.js";import{Client as rS}from"@modelcontextprotocol/sdk/client/index.js";import{randomUUID as kS}from"node:crypto";import{UnauthorizedError as hS}from"@modelcontextprotocol/sdk/client/auth.js";import{Client as IS}from"@modelcontextprotocol/sdk/client/index.js";import{SSEClientTransport as xS}from"@modelcontextprotocol/sdk/client/sse.js";import{StreamableHTTPClientTransport as gS}from"@modelcontextprotocol/sdk/client/streamableHttp.js";N7();import{formatMcpTimeoutErrorMessage as SS,resolveMcpTimeoutSeconds as bS}from"@cline/shared";import{ErrorCode as yS,McpError as iU}from"@modelcontextprotocol/sdk/types.js";function Y9($){return bS($)*1000}function D$($,Z,Q){if(!($ instanceof iU)||$.code!==yS.RequestTimeout)return $;return new iU($.code,SS(Z,Q),$.data)}var vS="/mcp/oauth/callback",mS=[1456,1457,1458],cS=300000;function uS($){if($ instanceof Error){let Z=$.message.trim();if(Z.length>0)return Z}return String($)}function dS($){return{client_name:"Cline",redirect_uris:[$],grant_types:["authorization_code","refresh_token"],response_types:["code"],token_endpoint_auth_method:"none"}}function R7($){let Z={};try{Z=X8($.serverName,{filePath:$.settingsPath})??{}}catch{Z={}}let Q,J,W=async(j)=>{let Y=k6(j(Z))??{};try{Z=j8($.serverName,()=>Y,{filePath:$.settingsPath})}catch{Z=Y}};return{provider:{get redirectUrl(){return Z.redirectUrl??$.redirectUrl},get clientMetadata(){return dS(Z.redirectUrl??$.redirectUrl)},state:()=>{return J=kS(),J},clientInformation:()=>Z.clientInformation,saveClientInformation:async(j)=>{await W((Y)=>({...Y,clientInformation:j,redirectUrl:$.redirectUrl,lastError:void 0}))},tokens:()=>Z.tokens,saveTokens:async(j)=>{let Y=Date.now();await W((V)=>({...V,tokens:j,redirectUrl:$.redirectUrl,lastError:void 0,lastAuthenticatedAt:Y}))},redirectToAuthorization:async(j)=>{Q=j.toString(),await $.onAuthorizationUrl?.(Q)},saveCodeVerifier:async(j)=>{await W((Y)=>({...Y,codeVerifier:j,redirectUrl:$.redirectUrl}))},codeVerifier:()=>{if(!Z.codeVerifier)throw Error(`Missing OAuth code verifier for MCP server "${$.serverName}".`);return Z.codeVerifier},invalidateCredentials:async(j)=>{await W((Y)=>{if(j==="all")return{lastError:Y.lastError,redirectUrl:Y.redirectUrl};return{...Y,...j==="client"?{clientInformation:void 0}:{},...j==="tokens"?{tokens:void 0,lastAuthenticatedAt:void 0}:{},...j==="verifier"?{codeVerifier:void 0}:{},...j==="discovery"?{discoveryState:void 0}:{}}})},saveDiscoveryState:async(j)=>{await W((Y)=>({...Y,discoveryState:j}))},discoveryState:()=>Z.discoveryState},getLastAuthorizationUrl:()=>Q,getLastOAuthState:()=>J,resetInteractiveState:async()=>{await W((j)=>({...j,clientInformation:void 0,codeVerifier:void 0,discoveryState:void 0,lastError:void 0,redirectUrl:$.redirectUrl}))},markError:async(j)=>{await W((Y)=>({...Y,lastError:j}))},clearError:async()=>{await W((j)=>({...j,lastError:void 0}))}}}function f7($){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 xS(new URL(Z.url),{authProvider:$.oauthProvider,requestInit:Q,fetch:$.fetch});return new gS(new URL(Z.url),{authProvider:$.oauthProvider,requestInit:Q,fetch:$.fetch})}function rU($){return new IS({name:$.clientName?.trim()||"@cline/core",version:$.clientVersion?.trim()||"0.0.0"})}async function M7($){let Z=$.serverName.trim();if(!Z)throw Error("MCP server name cannot be empty.");let{resolveMcpServerRegistrations:Q}=await Promise.resolve().then(() => (N7(),lU)),J=Q({filePath:$.filePath}).find((B)=>B.name===Z);if(!J)throw Error(`MCP server "${Z}" is not configured.`);if(J.disabled)throw Error(`MCP server "${Z}" is disabled. Enable it before running OAuth.`);if(J.transport.type==="stdio")throw Error(`MCP server "${Z}" uses stdio transport and does not support OAuth browser flow.`);let W=Y9(J.timeoutSeconds),X=await U1({host:$.callbackHost,ports:$.callbackPorts?.length?$.callbackPorts:mS,callbackPath:$.callbackPath??vS,timeoutMs:$.timeoutMs??cS,successHtml:$.successHtml,onListening:$.onServerListening,onClose:$.onServerClose});if(!X.callbackUrl)throw Error("Unable to bind local MCP OAuth callback server.");let j=R7({settingsPath:$.filePath,serverName:Z,redirectUrl:X.callbackUrl,onAuthorizationUrl:async(B)=>{await $.openUrl?.(B)}});await j.resetInteractiveState();let Y=rU($),V;try{let B=f7({registration:J,oauthProvider:j.provider,fetch:$.fetch});try{return await Y.connect(B,{timeout:W}),await Y.listTools(void 0,{timeout:W}),await j.clearError(),{serverName:Z,authorized:!0,message:`MCP server "${Z}" is already authorized.`}}catch(H){if(!(H instanceof hS))throw H;if(!j.getLastAuthorizationUrl())throw Error(`MCP server "${Z}" did not provide an authorization URL.`);let G=await X.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 F=j.getLastOAuthState();if(!F)throw Error(`MCP server "${Z}" did not start an OAuth stateful authorization flow.`);if(G.state!==F)throw Error("OAuth authorization failed: state mismatch.");await B.finishAuth(G.code),V=rU($);let U=f7({registration:J,oauthProvider:j.provider,fetch:$.fetch});return await V.connect(U,{timeout:W}),await V.listTools(void 0,{timeout:W}),await j.clearError(),{serverName:Z,authorized:!0,message:`MCP server "${Z}" OAuth authorization completed.`}}}catch(B){let H=uS(D$(B,Z,W));throw await j.markError(H),Error(H)}finally{await Y.close().catch(()=>{return}),await V?.close().catch(()=>{return}),X.close()}}var nS="2024-11-05",aS=1500,aU="http://127.0.0.1:1456/mcp/oauth/callback";function h6($){return $ instanceof Error?$.message:String($)}function oS($,Z,Q){let J=h6(Z),W=h6(Q);if(J===W)return Z instanceof Error?Z:Error(J);return Error(`MCP server "${$}" failed to initialize. Newline-delimited attempt: ${J} Content-Length framed attempt: ${W}`)}function oU($){return Buffer.from(`${JSON.stringify($)}
521
- `,"utf8")}function sU($){let Z=Buffer.from(JSON.stringify($),"utf8");return Buffer.concat([Buffer.from(`Content-Length: ${Z.byteLength}\r
520
+ ${Z}`}function ZS($,Z){let{data:Q,body:J,hadFrontmatter:W}=$S($);if(!W&&Z)return $;if(Z){if(delete Q.disabled,Q.enabled===!1)delete Q.enabled;if(Object.keys(Q).length===0)return J;return MU(Q,J)}return Q.disabled=!0,MU(Q,J)}async function CU({filePath:$,enabled:Z}){let Q=await sP($,"utf8"),J=ZS(Q,Z);return await tP($,J),{filePath:$,enabled:Z,disabled:!Z}}var YD={};w(YD,{updateMcpSettingsFileSync:()=>A1,updateMcpSettingsFile:()=>y6,updateMcpServerOAuthStateAsync:()=>X9,updateMcpServerOAuthState:()=>Y8,setMcpServerDisabled:()=>X8,resolvePluginMcpServerRegistrations:()=>E7,resolveMcpServerRegistrations:()=>W1,resolveDefaultMcpSettingsPath:()=>W0,registerMcpServersFromSettingsFile:()=>V8,normalizePluginMcpServerRegistration:()=>kX,loadMcpSettingsFile:()=>W8,listMcpServerOAuthStatuses:()=>j9,hasMcpSettingsFile:()=>U$,getMcpServerOAuthState:()=>j8,createMcpTools:()=>g6,createDisabledMcpToolPolicy:()=>V9,createDisabledMcpToolPolicies:()=>w7,createDefaultMcpServerClientFactory:()=>I6,authorizeMcpServerOAuth:()=>M7,augmentMcpTimeoutError:()=>D$,McpSettingsUpdateSkippedError:()=>b6,McpSettingsMutatorPurityError:()=>W2,McpSettingsLockTimeoutError:()=>X2,InMemoryMcpManager:()=>B8});import{spawn as lS}from"node:child_process";import{StringDecoder as eU}from"node:string_decoder";import{formatMcpTimeoutErrorMessage as iS,isMcpTimeoutConfigured as rS}from"@cline/shared";import{UnauthorizedError as aU}from"@modelcontextprotocol/sdk/client/auth.js";import{Client as nS}from"@modelcontextprotocol/sdk/client/index.js";import{randomUUID as hS}from"node:crypto";import{UnauthorizedError as IS}from"@modelcontextprotocol/sdk/client/auth.js";import{Client as xS}from"@modelcontextprotocol/sdk/client/index.js";import{SSEClientTransport as gS}from"@modelcontextprotocol/sdk/client/sse.js";import{StreamableHTTPClientTransport as vS}from"@modelcontextprotocol/sdk/client/streamableHttp.js";N7();import{formatMcpTimeoutErrorMessage as bS,resolveMcpTimeoutSeconds as yS}from"@cline/shared";import{ErrorCode as kS,McpError as rU}from"@modelcontextprotocol/sdk/types.js";function Y9($){return yS($)*1000}function D$($,Z,Q){if(!($ instanceof rU)||$.code!==kS.RequestTimeout)return $;return new rU($.code,bS(Z,Q),$.data)}var mS="/mcp/oauth/callback",cS=[1456,1457,1458],uS=300000;function dS($){if($ instanceof Error){let Z=$.message.trim();if(Z.length>0)return Z}return String($)}function pS($){return{client_name:"Cline",redirect_uris:[$],grant_types:["authorization_code","refresh_token"],response_types:["code"],token_endpoint_auth_method:"none"}}function R7($){let Z={};try{Z=j8($.serverName,{filePath:$.settingsPath})??{}}catch{Z={}}let Q,J,W=async(j)=>{let Y=k6(j(Z))??{};try{Z=Y8($.serverName,()=>Y,{filePath:$.settingsPath})}catch{Z=Y}};return{provider:{get redirectUrl(){return Z.redirectUrl??$.redirectUrl},get clientMetadata(){return pS(Z.redirectUrl??$.redirectUrl)},state:()=>{return J=hS(),J},clientInformation:()=>Z.clientInformation,saveClientInformation:async(j)=>{await W((Y)=>({...Y,clientInformation:j,redirectUrl:$.redirectUrl,lastError:void 0}))},tokens:()=>Z.tokens,saveTokens:async(j)=>{let Y=Date.now();await W((V)=>({...V,tokens:j,redirectUrl:$.redirectUrl,lastError:void 0,lastAuthenticatedAt:Y}))},redirectToAuthorization:async(j)=>{Q=j.toString(),await $.onAuthorizationUrl?.(Q)},saveCodeVerifier:async(j)=>{await W((Y)=>({...Y,codeVerifier:j,redirectUrl:$.redirectUrl}))},codeVerifier:()=>{if(!Z.codeVerifier)throw Error(`Missing OAuth code verifier for MCP server "${$.serverName}".`);return Z.codeVerifier},invalidateCredentials:async(j)=>{await W((Y)=>{if(j==="all")return{lastError:Y.lastError,redirectUrl:Y.redirectUrl};return{...Y,...j==="client"?{clientInformation:void 0}:{},...j==="tokens"?{tokens:void 0,lastAuthenticatedAt:void 0}:{},...j==="verifier"?{codeVerifier:void 0}:{},...j==="discovery"?{discoveryState:void 0}:{}}})},saveDiscoveryState:async(j)=>{await W((Y)=>({...Y,discoveryState:j}))},discoveryState:()=>Z.discoveryState},getLastAuthorizationUrl:()=>Q,getLastOAuthState:()=>J,resetInteractiveState:async()=>{await W((j)=>({...j,clientInformation:void 0,codeVerifier:void 0,discoveryState:void 0,lastError:void 0,redirectUrl:$.redirectUrl}))},markError:async(j)=>{await W((Y)=>({...Y,lastError:j}))},clearError:async()=>{await W((j)=>({...j,lastError:void 0}))}}}function f7($){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 gS(new URL(Z.url),{authProvider:$.oauthProvider,requestInit:Q,fetch:$.fetch});return new vS(new URL(Z.url),{authProvider:$.oauthProvider,requestInit:Q,fetch:$.fetch})}function nU($){return new xS({name:$.clientName?.trim()||"@cline/core",version:$.clientVersion?.trim()||"0.0.0"})}async function M7($){let Z=$.serverName.trim();if(!Z)throw Error("MCP server name cannot be empty.");let{resolveMcpServerRegistrations:Q}=await Promise.resolve().then(() => (N7(),iU)),J=Q({filePath:$.filePath}).find((B)=>B.name===Z);if(!J)throw Error(`MCP server "${Z}" is not configured.`);if(J.disabled)throw Error(`MCP server "${Z}" is disabled. Enable it before running OAuth.`);if(J.transport.type==="stdio")throw Error(`MCP server "${Z}" uses stdio transport and does not support OAuth browser flow.`);let W=Y9(J.timeoutSeconds),X=await U1({host:$.callbackHost,ports:$.callbackPorts?.length?$.callbackPorts:cS,callbackPath:$.callbackPath??mS,timeoutMs:$.timeoutMs??uS,successHtml:$.successHtml,onListening:$.onServerListening,onClose:$.onServerClose});if(!X.callbackUrl)throw Error("Unable to bind local MCP OAuth callback server.");let j=R7({settingsPath:$.filePath,serverName:Z,redirectUrl:X.callbackUrl,onAuthorizationUrl:async(B)=>{await $.openUrl?.(B)}});await j.resetInteractiveState();let Y=nU($),V;try{let B=f7({registration:J,oauthProvider:j.provider,fetch:$.fetch});try{return await Y.connect(B,{timeout:W}),await Y.listTools(void 0,{timeout:W}),await j.clearError(),{serverName:Z,authorized:!0,message:`MCP server "${Z}" is already authorized.`}}catch(H){if(!(H instanceof IS))throw H;if(!j.getLastAuthorizationUrl())throw Error(`MCP server "${Z}" did not provide an authorization URL.`);let G=await X.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 F=j.getLastOAuthState();if(!F)throw Error(`MCP server "${Z}" did not start an OAuth stateful authorization flow.`);if(G.state!==F)throw Error("OAuth authorization failed: state mismatch.");await B.finishAuth(G.code),V=nU($);let U=f7({registration:J,oauthProvider:j.provider,fetch:$.fetch});return await V.connect(U,{timeout:W}),await V.listTools(void 0,{timeout:W}),await j.clearError(),{serverName:Z,authorized:!0,message:`MCP server "${Z}" OAuth authorization completed.`}}}catch(B){let H=dS(D$(B,Z,W));throw await j.markError(H),Error(H)}finally{await Y.close().catch(()=>{return}),await V?.close().catch(()=>{return}),X.close()}}var aS="2024-11-05",oS=1500,oU="http://127.0.0.1:1456/mcp/oauth/callback";function h6($){return $ instanceof Error?$.message:String($)}function sS($,Z,Q){let J=h6(Z),W=h6(Q);if(J===W)return Z instanceof Error?Z:Error(J);return Error(`MCP server "${$}" failed to initialize. Newline-delimited attempt: ${J} Content-Length framed attempt: ${W}`)}function sU($){return Buffer.from(`${JSON.stringify($)}
521
+ `,"utf8")}function tU($){let Z=Buffer.from(JSON.stringify($),"utf8");return Buffer.concat([Buffer.from(`Content-Length: ${Z.byteLength}\r
522
522
  \r
523
- `,"utf8"),Z])}class bX{buffer="";decoder=new tU("utf8");push($){this.buffer+=this.decoder.write($);let Z=[];while(!0){let Q=this.buffer.indexOf(`\r
523
+ `,"utf8"),Z])}class bX{buffer="";decoder=new eU("utf8");push($){this.buffer+=this.decoder.write($);let Z=[];while(!0){let Q=this.buffer.indexOf(`\r
524
524
  \r
525
- `);if(Q<0)break;let W=this.buffer.slice(0,Q).match(/(?:^|\r\n)Content-Length:\s*(\d+)(?:\r\n|$)/i);if(!W)throw Error("Invalid MCP stdio frame: missing Content-Length header.");let X=Number.parseInt(W[1],10),j=Q+4,Y=j+X;if(this.buffer.length<Y)break;Z.push(this.buffer.slice(j,Y)),this.buffer=this.buffer.slice(Y)}return Z}}class yX{buffer="";decoder=new tU("utf8");push($){this.buffer+=this.decoder.write($);let Z=[];while(!0){let Q=this.buffer.indexOf(`
526
- `);if(Q<0)break;let J=this.buffer.slice(0,Q).trim();if(this.buffer=this.buffer.slice(Q+1),J.length>0)Z.push(J)}return Z}}class eU{registration;process;nextRequestId=1;pending=new Map;framedParser=new bX;newlineParser=new yX;stderrBuffer="";connected=!1;protocolMode="newline";requestTimeoutMs;connectAttemptTimeoutMs;constructor($){this.registration=$,this.requestTimeoutMs=Y9($.timeoutSeconds),this.connectAttemptTimeoutMs=iS($.timeoutSeconds)?this.requestTimeoutMs:aS}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 $={protocolVersion:nS,capabilities:{},clientInfo:{name:"@cline/core",version:"0.0.0"}};this.spawnProcess("newline");try{await this.request("initialize",$,this.connectAttemptTimeoutMs)}catch(Z){await this.disconnect().catch(()=>{}),this.spawnProcess("framed");try{await this.request("initialize",$,this.connectAttemptTimeoutMs)}catch(Q){throw await this.disconnect().catch(()=>{}),oS(this.registration.name,Z,Q)}}this.notify("notifications/initialized"),this.connected=!0}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??{}},void 0,$.context?.signal)}spawnProcess($){let Z=this.registration.transport;if(Z.type!=="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${Z.type}`);this.framedParser=new bX,this.newlineParser=new yX,this.stderrBuffer="",this.protocolMode=$;let Q=process.platform==="win32"?{windowsHide:!0,shell:!0}:{},J=pS(Z.command,Z.args??[],{cwd:Z.cwd,env:{...process.env,...Z.env??{}},stdio:["pipe","pipe","pipe"],...Q});this.process=J,J.stdout.on("data",(W)=>this.handleStdout(W)),J.stderr.on("data",(W)=>{if(this.process!==J)return;if(this.stderrBuffer+=W.toString("utf8"),this.stderrBuffer.length>16384)this.stderrBuffer=this.stderrBuffer.slice(-16384)}),J.once("error",(W)=>{if(this.process!==J)return;this.failAllPending(Error(`MCP process error: ${h6(W)}`))}),J.once("exit",(W,X)=>{if(this.process!==J)return;this.connected=!1,this.process=void 0;let j=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`MCP process exited for "${this.registration.name}" (code=${W??"null"}, signal=${X??"null"}).${j}`))})}handleStdout($){try{let Z=this.protocolMode==="framed"?this.framedParser.push($):this.newlineParser.push($);for(let Q of Z){let J=JSON.parse(Q);if(typeof J.id!=="number")continue;let W=this.takePending(J.id);if(!W)continue;if(J.error){let X=J.error.message||`MCP request failed with code ${J.error.code??"unknown"}`;W.reject(Error(X));continue}W.resolve(J.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}": ${h6($)}.${Q}`)),Z.kill()}async request($,Z,Q=this.requestTimeoutMs,J){let W=this.process;if(!W?.stdin.writable)throw Error(`MCP server "${this.registration.name}" is not connected.`);let X=this.nextRequestId++,j={jsonrpc:"2.0",id:X,method:$,...Z?{params:Z}:{}},Y=new Promise((V,B)=>{let H=setTimeout(()=>{this.takePending(X),B(this.createTimeoutError($,Q))},Q),K=J?()=>{let G=this.takePending(X);if(!G)return;let F=J.reason instanceof Error?J.reason:Object.assign(Error(`MCP request aborted for "${this.registration.name}" (${$}).`),{name:"AbortError"});G.reject(F)}:void 0;if(this.pending.set(X,{resolve:V,reject:B,timeout:H,signal:J,onAbort:K}),J&&K){if(J.addEventListener("abort",K,{once:!0}),J.aborted)K()}});if(!this.pending.has(X))return Y;try{W.stdin.write(this.protocolMode==="framed"?sU(j):oU(j))}catch(V){let B=this.takePending(X);if(B)B.reject(V instanceof Error?V:Error(String(V)))}return Y}createTimeoutError($,Z){return Error(lS(this.registration.name,Z,$))}notify($,Z){let Q=this.process;if(!Q?.stdin.writable)return;let J={jsonrpc:"2.0",method:$,...Z?{params:Z}:{}};Q.stdin.write(this.protocolMode==="framed"?sU(J):oU(J))}failAllPending($){for(let Z of[...this.pending.keys()]){let Q=this.takePending(Z);if(!Q)continue;Q.reject($)}}takePending($){let Z=this.pending.get($);if(!Z)return;if(this.pending.delete($),clearTimeout(Z.timeout),Z.signal&&Z.onAbort)Z.signal.removeEventListener("abort",Z.onAbort);return Z}}class $D{registration;options;client;authContext;requestTimeoutMs;constructor($,Z){this.registration=$;this.options=Z;this.requestTimeoutMs=Y9($.timeoutSeconds)}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 $=R7({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??aU});this.authContext=$;let Z;try{Z=new rS({name:this.options.clientName?.trim()||"@cline/core",version:this.options.clientVersion?.trim()||"0.0.0"});let Q=f7({registration:this.registration,oauthProvider:$.provider,fetch:this.options.fetch});await Z.connect(Q,{timeout:this.requestTimeoutMs}),await $.clearError(),this.client=Z}catch(Q){await Z?.close().catch(()=>{});let J=D$(Q,this.registration.name,this.requestTimeoutMs),W=Q instanceof nU?this.formatUnauthorizedMessage($.getLastAuthorizationUrl()):h6(J);throw await $.markError(W),Error(W)}}async disconnect(){let $=this.client;this.client=void 0,await $?.close()}async listTools(){let $=await this.ensureConnectedClient();try{return(await $.listTools(void 0,{timeout:this.requestTimeoutMs})).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??{}},void 0,{timeout:this.requestTimeoutMs,signal:$.context?.signal})}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??R7({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??aU}),Q=D$($,this.registration.name,this.requestTimeoutMs),J=$ instanceof nU?this.formatUnauthorizedMessage(Z.getLastAuthorizationUrl()):h6(Q);throw await Z.markError(J),Error(J)}}function I6($={}){return(Z)=>Z.transport.type==="stdio"?new eU(Z):new $D(Z,$)}N7();import{isMcpTimeoutConfigured as ZD,resolveMcpTimeoutSeconds as QD}from"@cline/shared";var sS=5000;function X1(){return Date.now()}function tS($){return $.map((Z)=>({name:Z.name,description:Z.description,inputSchema:Z.inputSchema}))}class V8{toolsCacheTtlMs;clientFactory;servers=new Map;operationLocks=new Map;constructor($){this.clientFactory=$.clientFactory,this.toolsCacheTtlMs=$.toolsCacheTtlMs??sS}async registerServer($){await this.runExclusive($.name,async()=>{let Z=this.servers.get($.name);if(!Z){this.servers.set($.name,{registration:{...$},status:"disconnected",updatedAt:X1()});return}let Q=JSON.stringify(Z.registration.transport)!==JSON.stringify($.transport),J=ZD(Z.registration.timeoutSeconds)!==ZD($.timeoutSeconds)||QD(Z.registration.timeoutSeconds)!==QD($.timeoutSeconds);if(Z.registration={...$},Z.updatedAt=X1(),Q||J)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=X1(),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&&X1()-Q<=this.toolsCacheTtlMs)return Z.toolCache;return this.refreshTools($)}async refreshTools($){return this.runExclusive($,async()=>{let Z=this.requireServer($),J=await(await this.ensureConnectedClient(Z)).listTools(),W=tS(J);return Z.toolCache=W,Z.toolCacheUpdatedAt=X1(),Z.updatedAt=X1(),W})}async callTool($){return this.runExclusive($.serverName,async()=>{let Z=this.requireServer($.serverName),Q=await this.ensureConnectedClient(Z);return Z.updatedAt=X1(),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=X1();let Z=$.client;try{Z??=await this.clientFactory($.registration),$.client=Z,await Z.connect(),$.status="connected",$.lastError=void 0,$.updatedAt=X1()}catch(Q){throw await Z?.disconnect().catch(()=>{}),$.status="disconnected",$.lastError=Q instanceof Error?Q.message:String(Q),$.updatedAt=X1(),Q}}async disconnectState($){if(!$.client){$.status="disconnected",$.updatedAt=X1();return}try{await $.client.disconnect()}finally{$.status="disconnected",$.updatedAt=X1()}}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(),J,W=new Promise((j)=>{J=j}),X=Q.catch(()=>{return}).then(()=>W);this.operationLocks.set($,X),await Q.catch(()=>{return});try{return await Z()}finally{if(J?.(),this.operationLocks.get($)===X)this.operationLocks.delete($)}}}function x6($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function JD($){return x6($)&&Object.values($).every((Z)=>typeof Z==="string")}function eS($){return Array.isArray($)&&$.every((Z)=>typeof Z==="string")}function $b($){if(!x6($))return!1;return($.fromEnv===void 0||typeof $.fromEnv==="string")&&($.value===void 0||typeof $.value==="string")&&($.required===void 0||typeof $.required==="boolean")}function Zb($){let Z=$.env?Object.entries($.env):[];if(Z.length===0)return{ok:!0};let Q={};for(let[J,W]of Z){if(typeof W==="string"){Q[J]=W;continue}let X=W.fromEnv?.trim()||J,j=process.env[X];if(typeof j==="string"&&j.length>0){Q[J]=j;continue}if(typeof W.value==="string"){Q[J]=W.value;continue}if(W.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 kX($){if(!x6($))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,J=Q===void 0?void 0:Q;if(J!==void 0){if(!x6(J))return{name:Z,loadError:"invalid env"};for(let[V,B]of Object.entries(J))if(typeof B!=="string"&&!$b(B))return{name:Z,loadError:`invalid env "${V}"`}}let W=$.transport;if(!x6(W))return{name:Z,loadError:"invalid MCP transport"};let X=W.type;if(X!=="stdio"&&X!=="sse"&&X!=="streamableHttp")return{name:Z,loadError:"invalid MCP transport type"};if(X!=="stdio"&&J!==void 0)return{name:Z,loadError:"top-level env is only supported for stdio MCP transports"};let j=x6($.metadata)?$.metadata:void 0;if(X==="stdio"){let V=W.command;if(typeof V!=="string"||!V.trim())return{name:Z,loadError:"stdio MCP transport requires command"};let B=W.args;if(B!==void 0&&!eS(B))return{name:Z,loadError:"stdio MCP transport args must be strings"};let H=W.cwd;if(H!==void 0&&typeof H!=="string")return{name:Z,loadError:"stdio MCP transport cwd must be a string"};let K=W.env;if(K!==void 0&&!JD(K))return{name:Z,loadError:"stdio MCP transport env must be strings"};let G=Zb({name:Z,transport:{type:"stdio",command:V,args:B,cwd:H,env:K},env:J,metadata:j});if(!G.ok)return{name:Z,loadError:G.reason};let F=K||G.env?{...K??{},...G.env??{}}:void 0;return{name:Z,registration:{name:Z,transport:{type:"stdio",command:V,args:B,cwd:H,env:F},metadata:j}}}if(typeof W.url!=="string"||!W.url.trim())return{name:Z,loadError:`${X} MCP transport requires url`};let Y=W.headers;if(Y!==void 0&&!JD(Y))return{name:Z,loadError:`${X} MCP transport headers must be strings`};return{name:Z,registration:{name:Z,transport:X==="sse"?{type:"sse",url:W.url,headers:Y}:{type:"streamableHttp",url:W.url,headers:Y},metadata:j}}}function E7($){let Z=new Map;return $.map(({server:Q,owner:J,ownerLabel:W})=>{let X=kX(Q);if(!X.registration)return{owner:J,name:X.name,loadError:X.loadError??"invalid MCP server registration"};let j=Z.get(X.registration.name);if(Z.has(X.registration.name)){let Y=j?` already registered by ${j}`:"";return{owner:J,name:X.registration.name,loadError:`duplicate MCP server name "${X.registration.name}"${Y}`}}return Z.set(X.registration.name,W),{owner:J,name:X.registration.name,registration:X.registration}})}import{createHash as Qb}from"node:crypto";var WD=64,Jb=/[^a-zA-Z0-9_-]+/g,XD=8,Wb=1,Xb="mcp_tool";function jb($){return Qb("sha1").update($).digest("hex").slice(0,XD)}function Yb($){return $.replace(Jb,"_")}var C7=({serverName:$,toolName:Z})=>{let Q=`${$}__${Z}`,J=Yb(Q);if(J===Q&&Q.length<=WD)return Q;let W=jb(Q),X=WD-Wb-XD;return`${J.slice(0,X)||Xb}_${W}`};function V9($){return{[($.nameTransform??C7)({serverName:$.serverName,toolName:$.toolName})]:{enabled:!1}}}function w7($){let Z={};for(let Q of $.toolNames)Object.assign(Z,V9({serverName:$.serverName,toolName:Q,nameTransform:$.nameTransform}));return Z}import{createTool as Vb}from"@cline/shared";function Bb($,Z){let Q=Z.description?.trim();if(Q)return Q;return`Execute MCP tool "${Z.name}" from server "${$}".`}async function g6($){let Z=await $.provider.listTools($.serverName),Q=$.nameTransform??C7;return Z.map((J)=>{let W=Q({serverName:$.serverName,toolName:J.name});return Vb({name:W,description:Bb($.serverName,J),inputSchema:J.inputSchema,timeoutMs:$.timeoutMs,retryable:$.retryable,maxRetries:$.maxRetries,execute:async(X,j)=>$.provider.callTool({serverName:$.serverName,toolName:J.name,arguments:X&&typeof X==="object"&&!Array.isArray(X)?X:void 0,context:j})})})}H1();var BD={};w(BD,{listPluginToolsWithDiagnostics:()=>P7,listPluginTools:()=>B9});import{stat as Hb}from"node:fs/promises";import{isAbsolute as Kb,relative as Gb,resolve as YD}from"node:path";H1();function Fb($,Z){let Q=Gb(YD($),YD(Z));return Q===""||!Q.startsWith("..")&&!Kb(Q)}var Ub=32,v6=new Map;function Db($,Z){if(!v6.has($)&&v6.size>=Ub){let Q=v6.keys().next().value;if(Q)v6.delete(Q)}v6.set($,Z)}async function _b($){let Z=await Promise.all($.pluginPaths.map(async(Q)=>{try{let J=await Hb(Q);return`${Q}:${J.mtimeMs}:${J.size}`}catch{return`${Q}:missing`}}));return JSON.stringify({workspacePath:$.workspacePath,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,pathStats:Z})}function VD($,Z){return $.map((Q)=>({...Q,enabled:!Z.has(Q.name)}))}function Lb($){return $.sort((Z,Q)=>{let J=Z.name.localeCompare(Q.name);if(J!==0)return J;return Z.path.localeCompare(Q.path)})}async function Ab($,Z){if(!$.setup)return{tools:[]};let Q=[],J={registerTool:(W)=>Q.push(W),registerCommand:()=>{},registerMessageBuilder:()=>{},registerRule:()=>{},registerProvider:()=>{},registerAutomationEventType:()=>{},registerMcpServer:(W)=>{if(!$.manifest.capabilities.includes("mcp"))throw Error('registerMcpServer requires the "mcp" capability')}};return await $.setup(J,{workspaceInfo:Z}),{tools:Q}}async function P7($){let Z=H$({workspacePath:$.workspacePath,cwd:$.cwd}),Q=f1($.disabledToolNames);if(Z.length===0)return{tools:[],failures:[],warnings:[]};let J=await _b({pluginPaths:Z,workspacePath:$.workspacePath,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId}),W=v6.get(J);if(W)return{tools:VD(W.tools,Q),failures:W.failures,warnings:W.warnings};let X=[],j=[],Y=[],V;try{V=await A6({pluginPaths:Z,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,workspaceInfo:{rootPath:$.workspacePath}}),j=[...V.failures],Y=[...V.warnings];for(let H of V.extensions??[]){let K=H.__clinePluginPath;if(!K)continue;let G=Fb($.workspacePath,K)?"workspace-plugin":"global-plugin",F;try{F=await Ab(H,{rootPath:$.workspacePath})}catch(U){j.push({pluginPath:K,pluginName:H.name,phase:"setup",message:U instanceof Error?U.message:String(U),stack:U instanceof Error?U.stack:void 0});continue}for(let U of F.tools)X.push({name:U.name,pluginName:H.name,path:K,source:G,description:U.description?.trim()||void 0})}}catch(H){j=Z.map((K)=>({pluginPath:K,phase:"load",message:H instanceof Error?H.message:String(H),stack:H instanceof Error?H.stack:void 0}))}finally{await V?.shutdown().catch(()=>{})}let B=Lb(X);return Db(J,{tools:B,failures:j,warnings:Y}),{tools:VD(B,Q),failures:j,warnings:Y}}async function B9($){return(await P7($)).tools}function G9($,Z){if(!Z)return"global";let Q=UD(Z,$);return!Q.startsWith("..")&&!FD(Q)?"workspace":"global"}function Tb($,Z){return G9($,Z)==="workspace"?"workspace-plugin":"global-plugin"}function Nb($,Z){let Q=UD(KD($),KD(Z));return Q===""||!Q.startsWith("..")&&!FD(Q)}function fb($){try{let Z=JSON.parse(Ob($,"utf8"));return typeof Z.name==="string"&&Z.name.trim()?Z.name.trim():void 0}catch{return}}function Rb($){let Z=HD($);while(!0){let Q=zb(Z,"package.json");if(K9(Q)){let W=fb(Q);if(W)return W;break}let J=HD(Z);if(J===Z)break;Z=J}return hX($,qb($))}function Mb($){let Z=[];for(let Q of H$({workspacePath:$.workspaceRoot||void 0,cwd:$.cwd}))for(let J of K$([Q]))Z.push({directory:J,pluginName:Rb(Q),pluginPath:Q,source:$.workspaceRoot?Tb(Q,$.workspaceRoot):"global-plugin"});return Z.sort((Q,J)=>J.directory.length-Q.directory.length)}function Eb($,Z){return Z.find((Q)=>Nb(Q.directory,$))}function H9($){return[...$].sort((Z,Q)=>{let J=(W)=>{switch(W){case"workspace":case"workspace-plugin":return 0;case"global":case"global-plugin":return 1;case"builtin":return 2}};if(Z.source!==Q.source)return J(Z.source)-J(Q.source);return Z.name.localeCompare(Q.name)})}function DD($){return $.workspaceRoot?.trim()||$.cwd?.trim()||""}function _D($,Z){return $.cwd?.trim()||Z||process.cwd()}async function GD($,Z){if($.userInstructionService)return await Z($.userInstructionService);let Q=DD($),J=_D($,Q),W=Q2({skills:{workspacePath:Q||void 0,includePluginSkills:!0,cwd:J},rules:{workspacePath:Q||void 0},workflows:{workspacePath:Q||void 0}});try{return await W.start(),await Z(W)}finally{W.stop()}}function Cb($,Z){if(!$)return;let Q=$.listRecords("skill");if(Z.id){let J=Q.find((W)=>W.id===Z.id);if(J)return J}for(let J of Q)if(J.filePath===Z.path||J.item.name===Z.name||J.id===Z.name)return J;return}class X2{async list($={}){return await GD($,async(Z)=>{let Q=DD($),J=Mb({workspaceRoot:Q,cwd:_D($,Q)}),W=[],X=[],j=[],Y=[],V=[];if(Z){for(let H of Z.listRecords("workflow")){let K=H.item;W.push({id:H.id,name:K.name,path:H.filePath,enabled:K.disabled!==!0,kind:"workflow",source:G9(H.filePath,Q),description:K.instructions,toggleable:!1})}for(let H of Z.listRecords("rule")){let K=H.item;X.push({id:H.id,name:K.name,path:H.filePath,enabled:K.disabled!==!0,kind:"rule",source:G9(H.filePath,Q),description:K.instructions,toggleable:!1})}for(let H of Z.listRecords("skill")){let K=H.item,G=Eb(H.filePath,J);j.push({id:H.id,name:K.name,path:H.filePath,enabled:K.disabled!==!0,kind:"skill",source:G?.source??G9(H.filePath,Q),description:K.description,pluginName:G?.pluginName,pluginPath:G?.pluginPath,toggleable:!0})}}if(Q)try{for(let H of await B9({workspacePath:Q,cwd:$.cwd,providerId:$.availabilityContext?.providerId,modelId:$.availabilityContext?.modelId}))Y.push({id:`${H.pluginName}:${H.name}:${H.path}`,name:H.name,path:H.path,enabled:H.enabled,kind:"tool",source:H.source,description:H.description,toggleable:!0})}catch{}let B=W0();if(U$({filePath:B}))try{for(let H of W1({filePath:B}))V.push({id:H.name,name:H.name,path:B,enabled:H.disabled!==!0,kind:"mcp",source:G9(B,Q),description:H.transport.type,toggleable:!0})}catch{}return{workflows:H9(W.filter((H)=>K9(H.path))),rules:H9(X.filter((H)=>K9(H.path))),skills:H9(j.filter((H)=>K9(H.path))),tools:H9(Y),mcp:H9(V.filter((H)=>K9(H.path)))}})}async toggle($){if($.type==="skills")return await GD($,async(Z)=>{let Q=Cb(Z,$),J=Q?.filePath;if(!J)throw Error(`Unable to resolve skill setting '${$.id??$.name??hX($.path??"")}'.`);let W=Q?.item&&"disabled"in Q.item?Q.item.disabled!==!0:void 0,X=$.enabled??(W!==void 0?!W:void 0);if(X===void 0)throw Error(`Cannot determine toggle state for skill '${$.id??$.name??hX($.path??"")}'; provide an explicit enabled value or a resolvable workspace context.`);return await EU({filePath:J,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)yZ($.name);else GB($.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()||W0(),J=$.enabled;if(J===void 0){let W=W1({filePath:Q}).find((X)=>X.name===Z);if(!W)throw Error(`Unknown MCP server: ${Z}`);J=W.disabled===!0}return W8({filePath:Q,name:Z,disabled:!J}),{snapshot:await this.list($),changedTypes:["mcp"]}}throw Error(`Settings type '${$.type}' does not support toggles.`)}}function B8(){return new X2}function AD($){return{async list(Z){let Q=$;if(Q.listSettings)return await Q.listSettings(Z);return await B8().list(Z)},async toggle(Z){let Q=$;if(Q.toggleSetting)return await Q.toggleSetting(Z);return await B8().toggle(Z)}}}function OD($){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 qD($){let Z=$.config;return"providerId"in Z?{...$,config:{...Z,...wb($.localRuntime)},localRuntime:$.localRuntime}:$}function IX($,Z={}){let Q=w4($.config),J=y0(Z.defaultCapabilities,$.capabilities),W=Pb(Q.localRuntime,$.localRuntime),X=Z.withExtensionContext?.(W?.extensionContext);if(X)W={...W??{},extensionContext:X};return{...$,...Q,...W?{localRuntime:W}:{},...J?{capabilities:J}:{}}}function wb($){if(!$)return{};let{modelCatalogDefaults:Z,userInstructionService:Q,configExtensions:J,onTeamRestored:W,...X}=$;return X}function Pb(...$){let Z={};for(let Q of $)if(Q)Object.assign(Z,Q);return Object.keys(Z).length>0?Z:void 0}C0();function zD($){let Z=$.input.config.telemetry??$.telemetry;if(!Z)return;Z.capture({event:m.SESSION.STARTED,properties:{sessionId:$.sessionId,source:$.input.source??L0.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 F9($){return!!$&&typeof $==="object"&&!Array.isArray($)}function xX($){let Z=$?.trim();return Z?Z:void 0}function Sb($,Z){let Q=$?.trim();if(!Q)return Z;let J=Date.parse(Q);if(!Number.isFinite(J))return Z;return new Date(J).toISOString()}function TD($,Z){return new Date(new Date($).getTime()+Math.max(0,Math.floor(Z))*1000).toISOString()}function ND($,Z){return new Date(new Date($).getTime()-Math.max(0,Math.floor(Z))*1000).toISOString()}function bb($,Z){if(!$)return Z;return new Date($).getTime()>=new Date(Z).getTime()?$:Z}function yb($,Z){let Q=$.eventId.trim(),J=$.eventType.trim(),W=$.source.trim(),X=xX($.subject),j=xX($.dedupeKey)??`${J}:${W}:${X??Q}`;return{eventId:Q,eventType:J,source:W,subject:X,occurredAt:Sb($.occurredAt,Z),workspaceRoot:xX($.workspaceRoot),payload:F9($.payload)?$.payload:void 0,attributes:F9($.attributes)?$.attributes:void 0,dedupeKey:j}}function gX($,Z){if(!Z)return;let Q=Z.split("."),J=$;for(let W of Q){if(!F9(J))return;J=J[W]}return J}function kb($,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},J=gX(Q,Z);if(J!==void 0)return J;if($.attributes){let W=gX($.attributes,Z);if(W!==void 0)return W}if($.payload)return gX($.payload,Z);return}function S7($,Z){if(Array.isArray(Z))return Z.some((Q)=>S7($,Q));if(Array.isArray($))return $.some((Q)=>S7(Q,Z));if(F9(Z)){if(!F9($))return!1;return Object.entries(Z).every(([Q,J])=>S7($[Q],J))}return Object.is($,Z)}function hb($,Z){if(!Z||Object.keys(Z).length===0)return!0;return Object.entries(Z).every(([Q,J])=>S7(kb($,Q),J))}class vX{store;nowFn;logger;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now()),this.logger=$.logger}ingestEvent($){let Z=new Date(this.nowFn()).toISOString(),Q=yb($,Z),J=this.store.insertEventLog(Q,{receivedAtIso:Z});if(!J.created)return this.logger?.debug("cron.event.duplicate",{eventId:J.record.eventId,eventType:J.record.eventType,source:J.record.source}),{event:J.record,duplicate:!0,matchedSpecs:[],queuedRuns:[],suppressions:[{reason:"duplicate_event",dedupeKey:J.record.dedupeKey}]};try{let W=this.store.listEventSpecsForType(Q.eventType),X=[],j=[],Y=[];for(let H of W){if(!hb(Q,H.filters)){X.push({specId:H.specId,externalId:H.externalId,reason:"filter_mismatch",dedupeKey:Q.dedupeKey});continue}j.push(H);let K=this.materializeForSpec(H,Q,J.record.receivedAt);if(K.run)Y.push(K.run);else X.push({specId:H.specId,externalId:H.externalId,reason:K.reason,dedupeKey:Q.dedupeKey})}let V=j.length===0?"unmatched":Y.length>0?"queued":"suppressed";this.store.updateEventLogProcessing(J.record.eventId,{status:V,matchedSpecCount:j.length,queuedRunCount:Y.length,suppressedCount:X.filter((H)=>H.reason!=="filter_mismatch").length});let B=this.store.getEventLog(J.record.eventId);return this.logger?.debug("cron.event.processed",{eventId:J.record.eventId,eventType:J.record.eventType,status:V,matchedSpecCount:j.length,queuedRunCount:Y.length}),{event:B??J.record,duplicate:!1,matchedSpecs:j,queuedRuns:Y,suppressions:X}}catch(W){if(this.store.updateEventLogProcessing(J.record.eventId,{status:"failed",error:W instanceof Error?W.message:String(W)}),this.logger?.error)this.logger.error("cron.event.failed",{eventId:J.record.eventId,eventType:J.record.eventType,error:W});throw W}}materializeForSpec($,Z,Q){let J=Z.dedupeKey??Z.eventId,W=$.debounceSeconds??0;if(W>0){let V=this.store.findQueuedEventRunForDedupe({specId:$.specId,dedupeKey:J});if(V){let B=bb(V.scheduledFor,TD(Q,W)),H=this.store.updateQueuedEventRunForDebounce({runId:V.runId,triggerEventId:Z.eventId,scheduledFor:B});if(H)return{run:H,reason:"dedupe_window"}}}let X=$.dedupeWindowSeconds??0;if(X>0&&this.store.hasRecentEventRunForDedupe({specId:$.specId,dedupeKey:J,sinceIso:ND(Q,X)}))return{reason:"dedupe_window"};let j=$.cooldownSeconds??0;if(j>0&&this.store.hasRecentEventRunForSpec({specId:$.specId,sinceIso:ND(Q,j)}))return{reason:"cooldown"};return{run:this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"event",triggerEventId:Z.eventId,scheduledFor:W>0?TD(Q,W):Q}),reason:"dedupe_window"}}}import{existsSync as sb,readdirSync as tb,readFileSync as eb,statSync as $y}from"node:fs";import{relative as Zy}from"node:path";import{resolveCronSpecsDir as Qy}from"@cline/shared/storage";import{createHash as Ib}from"node:crypto";import xb from"yaml";function gb($){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 vb($){let Z=$.replace(/\r\n/g,`
525
+ `);if(Q<0)break;let W=this.buffer.slice(0,Q).match(/(?:^|\r\n)Content-Length:\s*(\d+)(?:\r\n|$)/i);if(!W)throw Error("Invalid MCP stdio frame: missing Content-Length header.");let X=Number.parseInt(W[1],10),j=Q+4,Y=j+X;if(this.buffer.length<Y)break;Z.push(this.buffer.slice(j,Y)),this.buffer=this.buffer.slice(Y)}return Z}}class yX{buffer="";decoder=new eU("utf8");push($){this.buffer+=this.decoder.write($);let Z=[];while(!0){let Q=this.buffer.indexOf(`
526
+ `);if(Q<0)break;let J=this.buffer.slice(0,Q).trim();if(this.buffer=this.buffer.slice(Q+1),J.length>0)Z.push(J)}return Z}}class $D{registration;process;nextRequestId=1;pending=new Map;framedParser=new bX;newlineParser=new yX;stderrBuffer="";connected=!1;protocolMode="newline";requestTimeoutMs;connectAttemptTimeoutMs;constructor($){this.registration=$,this.requestTimeoutMs=Y9($.timeoutSeconds),this.connectAttemptTimeoutMs=rS($.timeoutSeconds)?this.requestTimeoutMs:oS}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 $={protocolVersion:aS,capabilities:{},clientInfo:{name:"@cline/core",version:"0.0.0"}};this.spawnProcess("newline");try{await this.request("initialize",$,this.connectAttemptTimeoutMs)}catch(Z){await this.disconnect().catch(()=>{}),this.spawnProcess("framed");try{await this.request("initialize",$,this.connectAttemptTimeoutMs)}catch(Q){throw await this.disconnect().catch(()=>{}),sS(this.registration.name,Z,Q)}}this.notify("notifications/initialized"),this.connected=!0}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??{}},void 0,$.context?.signal)}spawnProcess($){let Z=this.registration.transport;if(Z.type!=="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${Z.type}`);this.framedParser=new bX,this.newlineParser=new yX,this.stderrBuffer="",this.protocolMode=$;let Q=process.platform==="win32"?{windowsHide:!0,shell:!0}:{},J=lS(Z.command,Z.args??[],{cwd:Z.cwd,env:{...process.env,...Z.env??{}},stdio:["pipe","pipe","pipe"],...Q});this.process=J,J.stdout.on("data",(W)=>this.handleStdout(W)),J.stderr.on("data",(W)=>{if(this.process!==J)return;if(this.stderrBuffer+=W.toString("utf8"),this.stderrBuffer.length>16384)this.stderrBuffer=this.stderrBuffer.slice(-16384)}),J.once("error",(W)=>{if(this.process!==J)return;this.failAllPending(Error(`MCP process error: ${h6(W)}`))}),J.once("exit",(W,X)=>{if(this.process!==J)return;this.connected=!1,this.process=void 0;let j=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`MCP process exited for "${this.registration.name}" (code=${W??"null"}, signal=${X??"null"}).${j}`))})}handleStdout($){try{let Z=this.protocolMode==="framed"?this.framedParser.push($):this.newlineParser.push($);for(let Q of Z){let J=JSON.parse(Q);if(typeof J.id!=="number")continue;let W=this.takePending(J.id);if(!W)continue;if(J.error){let X=J.error.message||`MCP request failed with code ${J.error.code??"unknown"}`;W.reject(Error(X));continue}W.resolve(J.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}": ${h6($)}.${Q}`)),Z.kill()}async request($,Z,Q=this.requestTimeoutMs,J){let W=this.process;if(!W?.stdin.writable)throw Error(`MCP server "${this.registration.name}" is not connected.`);let X=this.nextRequestId++,j={jsonrpc:"2.0",id:X,method:$,...Z?{params:Z}:{}},Y=new Promise((V,B)=>{let H=setTimeout(()=>{this.takePending(X),B(this.createTimeoutError($,Q))},Q),K=J?()=>{let G=this.takePending(X);if(!G)return;let F=J.reason instanceof Error?J.reason:Object.assign(Error(`MCP request aborted for "${this.registration.name}" (${$}).`),{name:"AbortError"});G.reject(F)}:void 0;if(this.pending.set(X,{resolve:V,reject:B,timeout:H,signal:J,onAbort:K}),J&&K){if(J.addEventListener("abort",K,{once:!0}),J.aborted)K()}});if(!this.pending.has(X))return Y;try{W.stdin.write(this.protocolMode==="framed"?tU(j):sU(j))}catch(V){let B=this.takePending(X);if(B)B.reject(V instanceof Error?V:Error(String(V)))}return Y}createTimeoutError($,Z){return Error(iS(this.registration.name,Z,$))}notify($,Z){let Q=this.process;if(!Q?.stdin.writable)return;let J={jsonrpc:"2.0",method:$,...Z?{params:Z}:{}};Q.stdin.write(this.protocolMode==="framed"?tU(J):sU(J))}failAllPending($){for(let Z of[...this.pending.keys()]){let Q=this.takePending(Z);if(!Q)continue;Q.reject($)}}takePending($){let Z=this.pending.get($);if(!Z)return;if(this.pending.delete($),clearTimeout(Z.timeout),Z.signal&&Z.onAbort)Z.signal.removeEventListener("abort",Z.onAbort);return Z}}class ZD{registration;options;client;authContext;requestTimeoutMs;constructor($,Z){this.registration=$;this.options=Z;this.requestTimeoutMs=Y9($.timeoutSeconds)}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 $=R7({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??oU});this.authContext=$;let Z;try{Z=new nS({name:this.options.clientName?.trim()||"@cline/core",version:this.options.clientVersion?.trim()||"0.0.0"});let Q=f7({registration:this.registration,oauthProvider:$.provider,fetch:this.options.fetch});await Z.connect(Q,{timeout:this.requestTimeoutMs}),await $.clearError(),this.client=Z}catch(Q){await Z?.close().catch(()=>{});let J=D$(Q,this.registration.name,this.requestTimeoutMs),W=Q instanceof aU?this.formatUnauthorizedMessage($.getLastAuthorizationUrl()):h6(J);throw await $.markError(W),Error(W)}}async disconnect(){let $=this.client;this.client=void 0,await $?.close()}async listTools(){let $=await this.ensureConnectedClient();try{return(await $.listTools(void 0,{timeout:this.requestTimeoutMs})).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??{}},void 0,{timeout:this.requestTimeoutMs,signal:$.context?.signal})}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??R7({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??oU}),Q=D$($,this.registration.name,this.requestTimeoutMs),J=$ instanceof aU?this.formatUnauthorizedMessage(Z.getLastAuthorizationUrl()):h6(Q);throw await Z.markError(J),Error(J)}}function I6($={}){return(Z)=>Z.transport.type==="stdio"?new $D(Z):new ZD(Z,$)}N7();import{isMcpTimeoutConfigured as QD,resolveMcpTimeoutSeconds as JD}from"@cline/shared";var tS=5000;function X1(){return Date.now()}function eS($){return $.map((Z)=>({name:Z.name,description:Z.description,inputSchema:Z.inputSchema}))}class B8{toolsCacheTtlMs;clientFactory;servers=new Map;operationLocks=new Map;constructor($){this.clientFactory=$.clientFactory,this.toolsCacheTtlMs=$.toolsCacheTtlMs??tS}async registerServer($){await this.runExclusive($.name,async()=>{let Z=this.servers.get($.name);if(!Z){this.servers.set($.name,{registration:{...$},status:"disconnected",updatedAt:X1()});return}let Q=JSON.stringify(Z.registration.transport)!==JSON.stringify($.transport),J=QD(Z.registration.timeoutSeconds)!==QD($.timeoutSeconds)||JD(Z.registration.timeoutSeconds)!==JD($.timeoutSeconds);if(Z.registration={...$},Z.updatedAt=X1(),Q||J)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=X1(),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&&X1()-Q<=this.toolsCacheTtlMs)return Z.toolCache;return this.refreshTools($)}async refreshTools($){return this.runExclusive($,async()=>{let Z=this.requireServer($),J=await(await this.ensureConnectedClient(Z)).listTools(),W=eS(J);return Z.toolCache=W,Z.toolCacheUpdatedAt=X1(),Z.updatedAt=X1(),W})}async callTool($){return this.runExclusive($.serverName,async()=>{let Z=this.requireServer($.serverName),Q=await this.ensureConnectedClient(Z);return Z.updatedAt=X1(),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=X1();let Z=$.client;try{Z??=await this.clientFactory($.registration),$.client=Z,await Z.connect(),$.status="connected",$.lastError=void 0,$.updatedAt=X1()}catch(Q){throw await Z?.disconnect().catch(()=>{}),$.status="disconnected",$.lastError=Q instanceof Error?Q.message:String(Q),$.updatedAt=X1(),Q}}async disconnectState($){if(!$.client){$.status="disconnected",$.updatedAt=X1();return}try{await $.client.disconnect()}finally{$.status="disconnected",$.updatedAt=X1()}}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(),J,W=new Promise((j)=>{J=j}),X=Q.catch(()=>{return}).then(()=>W);this.operationLocks.set($,X),await Q.catch(()=>{return});try{return await Z()}finally{if(J?.(),this.operationLocks.get($)===X)this.operationLocks.delete($)}}}function x6($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function WD($){return x6($)&&Object.values($).every((Z)=>typeof Z==="string")}function $b($){return Array.isArray($)&&$.every((Z)=>typeof Z==="string")}function Zb($){if(!x6($))return!1;return($.fromEnv===void 0||typeof $.fromEnv==="string")&&($.value===void 0||typeof $.value==="string")&&($.required===void 0||typeof $.required==="boolean")}function Qb($){let Z=$.env?Object.entries($.env):[];if(Z.length===0)return{ok:!0};let Q={};for(let[J,W]of Z){if(typeof W==="string"){Q[J]=W;continue}let X=W.fromEnv?.trim()||J,j=process.env[X];if(typeof j==="string"&&j.length>0){Q[J]=j;continue}if(typeof W.value==="string"){Q[J]=W.value;continue}if(W.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 kX($){if(!x6($))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,J=Q===void 0?void 0:Q;if(J!==void 0){if(!x6(J))return{name:Z,loadError:"invalid env"};for(let[V,B]of Object.entries(J))if(typeof B!=="string"&&!Zb(B))return{name:Z,loadError:`invalid env "${V}"`}}let W=$.transport;if(!x6(W))return{name:Z,loadError:"invalid MCP transport"};let X=W.type;if(X!=="stdio"&&X!=="sse"&&X!=="streamableHttp")return{name:Z,loadError:"invalid MCP transport type"};if(X!=="stdio"&&J!==void 0)return{name:Z,loadError:"top-level env is only supported for stdio MCP transports"};let j=x6($.metadata)?$.metadata:void 0;if(X==="stdio"){let V=W.command;if(typeof V!=="string"||!V.trim())return{name:Z,loadError:"stdio MCP transport requires command"};let B=W.args;if(B!==void 0&&!$b(B))return{name:Z,loadError:"stdio MCP transport args must be strings"};let H=W.cwd;if(H!==void 0&&typeof H!=="string")return{name:Z,loadError:"stdio MCP transport cwd must be a string"};let K=W.env;if(K!==void 0&&!WD(K))return{name:Z,loadError:"stdio MCP transport env must be strings"};let G=Qb({name:Z,transport:{type:"stdio",command:V,args:B,cwd:H,env:K},env:J,metadata:j});if(!G.ok)return{name:Z,loadError:G.reason};let F=K||G.env?{...K??{},...G.env??{}}:void 0;return{name:Z,registration:{name:Z,transport:{type:"stdio",command:V,args:B,cwd:H,env:F},metadata:j}}}if(typeof W.url!=="string"||!W.url.trim())return{name:Z,loadError:`${X} MCP transport requires url`};let Y=W.headers;if(Y!==void 0&&!WD(Y))return{name:Z,loadError:`${X} MCP transport headers must be strings`};return{name:Z,registration:{name:Z,transport:X==="sse"?{type:"sse",url:W.url,headers:Y}:{type:"streamableHttp",url:W.url,headers:Y},metadata:j}}}function E7($){let Z=new Map;return $.map(({server:Q,owner:J,ownerLabel:W})=>{let X=kX(Q);if(!X.registration)return{owner:J,name:X.name,loadError:X.loadError??"invalid MCP server registration"};let j=Z.get(X.registration.name);if(Z.has(X.registration.name)){let Y=j?` already registered by ${j}`:"";return{owner:J,name:X.registration.name,loadError:`duplicate MCP server name "${X.registration.name}"${Y}`}}return Z.set(X.registration.name,W),{owner:J,name:X.registration.name,registration:X.registration}})}import{createHash as Jb}from"node:crypto";var XD=64,Wb=/[^a-zA-Z0-9_-]+/g,jD=8,Xb=1,jb="mcp_tool";function Yb($){return Jb("sha1").update($).digest("hex").slice(0,jD)}function Vb($){return $.replace(Wb,"_")}var C7=({serverName:$,toolName:Z})=>{let Q=`${$}__${Z}`,J=Vb(Q);if(J===Q&&Q.length<=XD)return Q;let W=Yb(Q),X=XD-Xb-jD;return`${J.slice(0,X)||jb}_${W}`};function V9($){return{[($.nameTransform??C7)({serverName:$.serverName,toolName:$.toolName})]:{enabled:!1}}}function w7($){let Z={};for(let Q of $.toolNames)Object.assign(Z,V9({serverName:$.serverName,toolName:Q,nameTransform:$.nameTransform}));return Z}import{createTool as Bb}from"@cline/shared";function Hb($,Z){let Q=Z.description?.trim();if(Q)return Q;return`Execute MCP tool "${Z.name}" from server "${$}".`}async function g6($){let Z=await $.provider.listTools($.serverName),Q=$.nameTransform??C7;return Z.map((J)=>{let W=Q({serverName:$.serverName,toolName:J.name});return Bb({name:W,description:Hb($.serverName,J),inputSchema:J.inputSchema,timeoutMs:$.timeoutMs,retryable:$.retryable,maxRetries:$.maxRetries,execute:async(X,j)=>$.provider.callTool({serverName:$.serverName,toolName:J.name,arguments:X&&typeof X==="object"&&!Array.isArray(X)?X:void 0,context:j})})})}H1();var HD={};w(HD,{listPluginToolsWithDiagnostics:()=>P7,listPluginTools:()=>B9});import{stat as Kb}from"node:fs/promises";import{isAbsolute as Gb,relative as Fb,resolve as VD}from"node:path";H1();function Ub($,Z){let Q=Fb(VD($),VD(Z));return Q===""||!Q.startsWith("..")&&!Gb(Q)}var Db=32,v6=new Map;function _b($,Z){if(!v6.has($)&&v6.size>=Db){let Q=v6.keys().next().value;if(Q)v6.delete(Q)}v6.set($,Z)}async function Lb($){let Z=await Promise.all($.pluginPaths.map(async(Q)=>{try{let J=await Kb(Q);return`${Q}:${J.mtimeMs}:${J.size}`}catch{return`${Q}:missing`}}));return JSON.stringify({workspacePath:$.workspacePath,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,pathStats:Z})}function BD($,Z){return $.map((Q)=>({...Q,enabled:!Z.has(Q.name)}))}function Ab($){return $.sort((Z,Q)=>{let J=Z.name.localeCompare(Q.name);if(J!==0)return J;return Z.path.localeCompare(Q.path)})}async function Ob($,Z){if(!$.setup)return{tools:[]};let Q=[],J={registerTool:(W)=>Q.push(W),registerCommand:()=>{},registerMessageBuilder:()=>{},registerRule:()=>{},registerProvider:()=>{},registerAutomationEventType:()=>{},registerMcpServer:(W)=>{if(!$.manifest.capabilities.includes("mcp"))throw Error('registerMcpServer requires the "mcp" capability')}};return await $.setup(J,{workspaceInfo:Z}),{tools:Q}}async function P7($){let Z=H$({workspacePath:$.workspacePath,cwd:$.cwd}),Q=f1($.disabledToolNames);if(Z.length===0)return{tools:[],failures:[],warnings:[]};let J=await Lb({pluginPaths:Z,workspacePath:$.workspacePath,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId}),W=v6.get(J);if(W)return{tools:BD(W.tools,Q),failures:W.failures,warnings:W.warnings};let X=[],j=[],Y=[],V;try{V=await O6({pluginPaths:Z,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,workspaceInfo:{rootPath:$.workspacePath}}),j=[...V.failures],Y=[...V.warnings];for(let H of V.extensions??[]){let K=H.__clinePluginPath;if(!K)continue;let G=Ub($.workspacePath,K)?"workspace-plugin":"global-plugin",F;try{F=await Ob(H,{rootPath:$.workspacePath})}catch(U){j.push({pluginPath:K,pluginName:H.name,phase:"setup",message:U instanceof Error?U.message:String(U),stack:U instanceof Error?U.stack:void 0});continue}for(let U of F.tools)X.push({name:U.name,pluginName:H.name,path:K,source:G,description:U.description?.trim()||void 0})}}catch(H){j=Z.map((K)=>({pluginPath:K,phase:"load",message:H instanceof Error?H.message:String(H),stack:H instanceof Error?H.stack:void 0}))}finally{await V?.shutdown().catch(()=>{})}let B=Ab(X);return _b(J,{tools:B,failures:j,warnings:Y}),{tools:BD(B,Q),failures:j,warnings:Y}}async function B9($){return(await P7($)).tools}function G9($,Z){if(!Z)return"global";let Q=DD(Z,$);return!Q.startsWith("..")&&!UD(Q)?"workspace":"global"}function Nb($,Z){return G9($,Z)==="workspace"?"workspace-plugin":"global-plugin"}function fb($,Z){let Q=DD(GD($),GD(Z));return Q===""||!Q.startsWith("..")&&!UD(Q)}function Rb($){try{let Z=JSON.parse(qb($,"utf8"));return typeof Z.name==="string"&&Z.name.trim()?Z.name.trim():void 0}catch{return}}function Mb($){let Z=KD($);while(!0){let Q=Tb(Z,"package.json");if(K9(Q)){let W=Rb(Q);if(W)return W;break}let J=KD(Z);if(J===Z)break;Z=J}return hX($,zb($))}function Eb($){let Z=[];for(let Q of H$({workspacePath:$.workspaceRoot||void 0,cwd:$.cwd}))for(let J of K$([Q]))Z.push({directory:J,pluginName:Mb(Q),pluginPath:Q,source:$.workspaceRoot?Nb(Q,$.workspaceRoot):"global-plugin"});return Z.sort((Q,J)=>J.directory.length-Q.directory.length)}function Cb($,Z){return Z.find((Q)=>fb(Q.directory,$))}function H9($){return[...$].sort((Z,Q)=>{let J=(W)=>{switch(W){case"workspace":case"workspace-plugin":return 0;case"global":case"global-plugin":return 1;case"builtin":return 2}};if(Z.source!==Q.source)return J(Z.source)-J(Q.source);return Z.name.localeCompare(Q.name)})}function _D($){return $.workspaceRoot?.trim()||$.cwd?.trim()||""}function LD($,Z){return $.cwd?.trim()||Z||process.cwd()}async function FD($,Z){if($.userInstructionService)return await Z($.userInstructionService);let Q=_D($),J=LD($,Q),W=J2({skills:{workspacePath:Q||void 0,includePluginSkills:!0,cwd:J},rules:{workspacePath:Q||void 0},workflows:{workspacePath:Q||void 0}});try{return await W.start(),await Z(W)}finally{W.stop()}}function wb($,Z){if(!$)return;let Q=$.listRecords("skill");if(Z.id){let J=Q.find((W)=>W.id===Z.id);if(J)return J}for(let J of Q)if(J.filePath===Z.path||J.item.name===Z.name||J.id===Z.name)return J;return}class j2{async list($={}){return await FD($,async(Z)=>{let Q=_D($),J=Eb({workspaceRoot:Q,cwd:LD($,Q)}),W=[],X=[],j=[],Y=[],V=[];if(Z){for(let H of Z.listRecords("workflow")){let K=H.item;W.push({id:H.id,name:K.name,path:H.filePath,enabled:K.disabled!==!0,kind:"workflow",source:G9(H.filePath,Q),description:K.instructions,toggleable:!1})}for(let H of Z.listRecords("rule")){let K=H.item;X.push({id:H.id,name:K.name,path:H.filePath,enabled:K.disabled!==!0,kind:"rule",source:G9(H.filePath,Q),description:K.instructions,toggleable:!1})}for(let H of Z.listRecords("skill")){let K=H.item,G=Cb(H.filePath,J);j.push({id:H.id,name:K.name,path:H.filePath,enabled:K.disabled!==!0,kind:"skill",source:G?.source??G9(H.filePath,Q),description:K.description,pluginName:G?.pluginName,pluginPath:G?.pluginPath,toggleable:!0})}}if(Q)try{for(let H of await B9({workspacePath:Q,cwd:$.cwd,providerId:$.availabilityContext?.providerId,modelId:$.availabilityContext?.modelId}))Y.push({id:`${H.pluginName}:${H.name}:${H.path}`,name:H.name,path:H.path,enabled:H.enabled,kind:"tool",source:H.source,description:H.description,toggleable:!0})}catch{}let B=W0();if(U$({filePath:B}))try{for(let H of W1({filePath:B}))V.push({id:H.name,name:H.name,path:B,enabled:H.disabled!==!0,kind:"mcp",source:G9(B,Q),description:H.transport.type,toggleable:!0})}catch{}return{workflows:H9(W.filter((H)=>K9(H.path))),rules:H9(X.filter((H)=>K9(H.path))),skills:H9(j.filter((H)=>K9(H.path))),tools:H9(Y),mcp:H9(V.filter((H)=>K9(H.path)))}})}async toggle($){if($.type==="skills")return await FD($,async(Z)=>{let Q=wb(Z,$),J=Q?.filePath;if(!J)throw Error(`Unable to resolve skill setting '${$.id??$.name??hX($.path??"")}'.`);let W=Q?.item&&"disabled"in Q.item?Q.item.disabled!==!0:void 0,X=$.enabled??(W!==void 0?!W:void 0);if(X===void 0)throw Error(`Cannot determine toggle state for skill '${$.id??$.name??hX($.path??"")}'; provide an explicit enabled value or a resolvable workspace context.`);return await CU({filePath:J,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)yZ($.name);else FB($.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()||W0(),J=$.enabled;if(J===void 0){let W=W1({filePath:Q}).find((X)=>X.name===Z);if(!W)throw Error(`Unknown MCP server: ${Z}`);J=W.disabled===!0}return X8({filePath:Q,name:Z,disabled:!J}),{snapshot:await this.list($),changedTypes:["mcp"]}}throw Error(`Settings type '${$.type}' does not support toggles.`)}}function H8(){return new j2}function OD($){return{async list(Z){let Q=$;if(Q.listSettings)return await Q.listSettings(Z);return await H8().list(Z)},async toggle(Z){let Q=$;if(Q.toggleSetting)return await Q.toggleSetting(Z);return await H8().toggle(Z)}}}function qD($){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 zD($){let Z=$.config;return"providerId"in Z?{...$,config:{...Z,...Pb($.localRuntime)},localRuntime:$.localRuntime}:$}function IX($,Z={}){let Q=w4($.config),J=y0(Z.defaultCapabilities,$.capabilities),W=Sb(Q.localRuntime,$.localRuntime),X=Z.withExtensionContext?.(W?.extensionContext);if(X)W={...W??{},extensionContext:X};return{...$,...Q,...W?{localRuntime:W}:{},...J?{capabilities:J}:{}}}function Pb($){if(!$)return{};let{modelCatalogDefaults:Z,userInstructionService:Q,configExtensions:J,onTeamRestored:W,...X}=$;return X}function Sb(...$){let Z={};for(let Q of $)if(Q)Object.assign(Z,Q);return Object.keys(Z).length>0?Z:void 0}C0();function TD($){let Z=$.input.config.telemetry??$.telemetry;if(!Z)return;Z.capture({event:m.SESSION.STARTED,properties:{sessionId:$.sessionId,source:$.input.source??L0.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 F9($){return!!$&&typeof $==="object"&&!Array.isArray($)}function xX($){let Z=$?.trim();return Z?Z:void 0}function bb($,Z){let Q=$?.trim();if(!Q)return Z;let J=Date.parse(Q);if(!Number.isFinite(J))return Z;return new Date(J).toISOString()}function ND($,Z){return new Date(new Date($).getTime()+Math.max(0,Math.floor(Z))*1000).toISOString()}function fD($,Z){return new Date(new Date($).getTime()-Math.max(0,Math.floor(Z))*1000).toISOString()}function yb($,Z){if(!$)return Z;return new Date($).getTime()>=new Date(Z).getTime()?$:Z}function kb($,Z){let Q=$.eventId.trim(),J=$.eventType.trim(),W=$.source.trim(),X=xX($.subject),j=xX($.dedupeKey)??`${J}:${W}:${X??Q}`;return{eventId:Q,eventType:J,source:W,subject:X,occurredAt:bb($.occurredAt,Z),workspaceRoot:xX($.workspaceRoot),payload:F9($.payload)?$.payload:void 0,attributes:F9($.attributes)?$.attributes:void 0,dedupeKey:j}}function gX($,Z){if(!Z)return;let Q=Z.split("."),J=$;for(let W of Q){if(!F9(J))return;J=J[W]}return J}function hb($,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},J=gX(Q,Z);if(J!==void 0)return J;if($.attributes){let W=gX($.attributes,Z);if(W!==void 0)return W}if($.payload)return gX($.payload,Z);return}function S7($,Z){if(Array.isArray(Z))return Z.some((Q)=>S7($,Q));if(Array.isArray($))return $.some((Q)=>S7(Q,Z));if(F9(Z)){if(!F9($))return!1;return Object.entries(Z).every(([Q,J])=>S7($[Q],J))}return Object.is($,Z)}function Ib($,Z){if(!Z||Object.keys(Z).length===0)return!0;return Object.entries(Z).every(([Q,J])=>S7(hb($,Q),J))}class vX{store;nowFn;logger;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now()),this.logger=$.logger}ingestEvent($){let Z=new Date(this.nowFn()).toISOString(),Q=kb($,Z),J=this.store.insertEventLog(Q,{receivedAtIso:Z});if(!J.created)return this.logger?.debug("cron.event.duplicate",{eventId:J.record.eventId,eventType:J.record.eventType,source:J.record.source}),{event:J.record,duplicate:!0,matchedSpecs:[],queuedRuns:[],suppressions:[{reason:"duplicate_event",dedupeKey:J.record.dedupeKey}]};try{let W=this.store.listEventSpecsForType(Q.eventType),X=[],j=[],Y=[];for(let H of W){if(!Ib(Q,H.filters)){X.push({specId:H.specId,externalId:H.externalId,reason:"filter_mismatch",dedupeKey:Q.dedupeKey});continue}j.push(H);let K=this.materializeForSpec(H,Q,J.record.receivedAt);if(K.run)Y.push(K.run);else X.push({specId:H.specId,externalId:H.externalId,reason:K.reason,dedupeKey:Q.dedupeKey})}let V=j.length===0?"unmatched":Y.length>0?"queued":"suppressed";this.store.updateEventLogProcessing(J.record.eventId,{status:V,matchedSpecCount:j.length,queuedRunCount:Y.length,suppressedCount:X.filter((H)=>H.reason!=="filter_mismatch").length});let B=this.store.getEventLog(J.record.eventId);return this.logger?.debug("cron.event.processed",{eventId:J.record.eventId,eventType:J.record.eventType,status:V,matchedSpecCount:j.length,queuedRunCount:Y.length}),{event:B??J.record,duplicate:!1,matchedSpecs:j,queuedRuns:Y,suppressions:X}}catch(W){if(this.store.updateEventLogProcessing(J.record.eventId,{status:"failed",error:W instanceof Error?W.message:String(W)}),this.logger?.error)this.logger.error("cron.event.failed",{eventId:J.record.eventId,eventType:J.record.eventType,error:W});throw W}}materializeForSpec($,Z,Q){let J=Z.dedupeKey??Z.eventId,W=$.debounceSeconds??0;if(W>0){let V=this.store.findQueuedEventRunForDedupe({specId:$.specId,dedupeKey:J});if(V){let B=yb(V.scheduledFor,ND(Q,W)),H=this.store.updateQueuedEventRunForDebounce({runId:V.runId,triggerEventId:Z.eventId,scheduledFor:B});if(H)return{run:H,reason:"dedupe_window"}}}let X=$.dedupeWindowSeconds??0;if(X>0&&this.store.hasRecentEventRunForDedupe({specId:$.specId,dedupeKey:J,sinceIso:fD(Q,X)}))return{reason:"dedupe_window"};let j=$.cooldownSeconds??0;if(j>0&&this.store.hasRecentEventRunForSpec({specId:$.specId,sinceIso:fD(Q,j)}))return{reason:"cooldown"};return{run:this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"event",triggerEventId:Z.eventId,scheduledFor:W>0?ND(Q,W):Q}),reason:"dedupe_window"}}}import{existsSync as tb,readdirSync as eb,readFileSync as $y,statSync as Zy}from"node:fs";import{relative as Qy}from"node:path";import{resolveCronSpecsDir as Jy}from"@cline/shared/storage";import{createHash as xb}from"node:crypto";import gb from"yaml";function vb($){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 mb($){let Z=$.replace(/\r\n/g,`
527
527
  `);if(!Z.startsWith(`---
528
528
  `))return{frontmatter:void 0,body:$};let Q=Z.slice(4),J=Q.indexOf(`
529
529
  ---`);if(J===-1)return{frontmatter:void 0,body:$};let W=Q.slice(0,J),X=Q.slice(J+4);if(X.startsWith(`
530
- `))X=X.slice(1);return{frontmatter:W,body:X}}function j1($){if(typeof $!=="string")return;let Z=$.trim();return Z.length>0?Z:void 0}function mb($){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 uX($){if(!$||typeof $!=="object"||Array.isArray($))return;return $}function cb($){let Z=uX($);if(!Z)return;let Q=j1(Z.providerId),J=j1(Z.modelId);if(Q===void 0&&J===void 0)return;return{providerId:Q,modelId:J}}function ub($){if(typeof $!=="string")return;let Z=$.trim().toLowerCase();if(Z==="act"||Z==="plan"||Z==="yolo")return Z;return}function RD($,Z={}){let Q=Array.isArray($)?$:typeof $==="string"?$.split(","):void 0;if(!Q)return;let J=[...new Set(Q.map((W)=>typeof W==="string"?W.trim():"").filter((W)=>W.length>0))];if(Array.isArray($)&&Z.preserveEmptyArray)return J;return J.length>0?J:void 0}var db=new Set(C$);function pb($){let Z=RD($,{preserveEmptyArray:!0});if(!Z)return;let Q=Z.filter((J)=>!db.has(J));if(Q.length>0)throw Error(`unknown tool(s): ${Q.join(", ")}`);return Z}var lb=new Set(["rules","skills","plugins"]);function ib($){let Z=RD($,{preserveEmptyArray:!0});if(!Z)return;let Q=Z.filter((J)=>!lb.has(J));if(Q.length>0)throw Error(`unknown extension(s): ${Q.join(", ")}`);return Z}function mX($){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return;return Math.floor($)}function cX($){if(typeof $!=="number"||!Number.isFinite($)||$<0)return;return Math.floor($)}function dX($){if($===null||typeof $!=="object")return JSON.stringify($??null);if(Array.isArray($))return`[${$.map((Q)=>dX(Q)).join(",")}]`;let Z=Object.entries($).filter(([,Q])=>Q!==void 0);return Z.sort(([Q],[J])=>Q<J?-1:Q>J?1:0),`{${Z.map(([Q,J])=>`${JSON.stringify(Q)}:${dX(J)}`).join(",")}}`}function MD($,Z){let Q=Ib("sha256");return Q.update(dX($)),Q.update(`
531
- `),Q.update(Z),Q.digest("hex")}function rb($){return($.split("/").pop()??$).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}var nb=["schedule","timezone"],ab=["event","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds","maxParallel"],ob=["cwd"];function fD($,Z,Q,J,W){return{externalId:$,relativePath:$,triggerKind:Z,body:Q,contentHash:MD(J,Q),error:W}}function S1($,Z,Q,J,W,X){return{externalId:$,relativePath:Z,triggerKind:Q,body:J,contentHash:W,error:X}}function ED($){let Z=$.relativePath.replace(/\\/g,"/"),Q=gb(Z),{frontmatter:J,body:W}=vb($.raw),X={};if(J!==void 0&&J.trim().length>0)try{let D=xb.parse(J);if(D&&typeof D==="object"&&!Array.isArray(D))X=D;else if(D!==null&&D!==void 0)return fD(Z,Q,W,{},"frontmatter must be a YAML mapping")}catch(D){return fD(Z,Q,W,{},D instanceof Error?`failed to parse frontmatter: ${D.message}`:"failed to parse frontmatter")}let j=MD(X,W),Y=j1(X.id),V=Y??Z;if(Q!=="schedule"){for(let D of nb)if(X[D]!==void 0)return S1(V,Z,Q,W,j,`field "${D}" is only allowed on *.cron.md specs`)}for(let D of ob)if(X[D]!==void 0)return S1(V,Z,Q,W,j,`field "${D}" is no longer supported; cron specs use workspaceRoot as cwd`);if(Q!=="event"){for(let D of ab)if(X[D]!==void 0)return S1(V,Z,Q,W,j,`field "${D}" is only allowed on .event.md specs`)}let B=j1(X.prompt),H=W.trim(),K=B??(H.length>0?H:void 0);if(!K)return S1(V,Z,Q,W,j,"prompt is required (frontmatter `prompt` or markdown body)");let G=j1(X.workspaceRoot);if(!G)return S1(V,Z,Q,W,j,"workspaceRoot is required");let F,U;try{F=pb(X.tools),U=ib(X.extensions)}catch(D){return S1(V,Z,Q,W,j,D instanceof Error?D.message:String(D))}let _=ub(X.mode);if(X.mode!==void 0&&_===void 0)return S1(V,Z,Q,W,j,"mode must be one of: act, plan, yolo");let L={id:Y,title:j1(X.title)??Y??rb(Z),prompt:K,workspaceRoot:G,mode:_??"yolo",systemPrompt:j1(X.systemPrompt),modelSelection:cb(X.modelSelection),maxIterations:mX(X.maxIterations),timeoutSeconds:mX(X.timeoutSeconds),tools:F,notesDirectory:j1(X.notesDirectory),extensions:U,source:j1(X.source)??"user",tags:mb(X.tags),enabled:typeof X.enabled==="boolean"?X.enabled:!0,metadata:uX(X.metadata)},O;if(Q==="schedule"){let D=j1(X.schedule);if(!D)return S1(V,Z,Q,W,j,"schedule is required for *.cron.md specs");let q=j1(X.timezone);try{hV(D,q)}catch(z){return S1(V,Z,Q,W,j,z instanceof Error?z.message:String(z))}O={...L,triggerKind:"schedule",schedule:D,timezone:q}}else if(Q==="event"){let D=j1(X.event);if(!D)return S1(V,Z,Q,W,j,"event is required for .event.md specs");O={...L,triggerKind:"event",event:D,filters:uX(X.filters),debounceSeconds:cX(X.debounceSeconds),dedupeWindowSeconds:cX(X.dedupeWindowSeconds),cooldownSeconds:cX(X.cooldownSeconds),maxParallel:mX(X.maxParallel)}}else O={...L,triggerKind:"one_off"};return{externalId:V,relativePath:Z,triggerKind:Q,body:W,contentHash:j,spec:O}}function Jy($,Z){return Zy($,Z).replace(/\\/g,"/")}function Wy($){if(!sb($))return[];let Z=[],Q=[$];while(Q.length>0){let J=Q.pop();if(!J)continue;let W;try{W=tb(J,{withFileTypes:!0})}catch{continue}for(let X of W){let j=`${J}/${X.name}`;if(X.isDirectory()){if(X.name==="reports")continue;Q.push(j);continue}if(!X.isFile())continue;if(!X.name.endsWith(".md"))continue;Z.push(j)}}return Z}class pX{store;cronDir;constructor($){this.store=$.store,this.cronDir=Qy($.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=Wy(this.cronDir),Q=new Set;for(let W of Z){let X=Jy(this.cronDir,W);Q.add(X),$.scanned+=1;let j=await this.reconcileFile(X,W);if(j){if($.changes.push(j),$.upserted+=1,j.parse.error)$.invalidParses+=1}}let J=this.store.listSpecs({includeRemoved:!1,limit:1e4});for(let W of J)if(!Q.has(W.sourcePath))this.handleFileDeleted(W),$.removed+=1;return this.refreshScheduleNextRunAt(),$}async reconcileFile($,Z){let Q=this.store.getSpecBySourcePath($),J,W;try{J=eb(Z,"utf8"),W=$y(Z).mtimeMs}catch{return}let j=ED({relativePath:$,raw:J}),Y=this.store.upsertSpec({externalId:j.externalId,sourcePath:$,triggerKind:j.triggerKind,sourceMtimeMs:W,sourceHash:j.contentHash,parseStatus:j.error?"invalid":"valid",parseError:j.error,spec:j.spec});if(!j.error&&j.triggerKind==="schedule"&&Y.record.enabled)this.applyScheduleNextRunAt(Y.record,{forceReset:!Q||Q.removed||!Q.enabled||Q.scheduleExpr!==Y.record.scheduleExpr||Q.timezone!==Y.record.timezone});return{relativePath:$,result:Y,parse:j}}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(),J=$.lastRunAt?Math.max(Q,new Date($.lastRunAt).getTime()):Q,W=L2($.scheduleExpr,J,$.timezone),X=new Date(W).toISOString();if($.nextRunAt!==X)this.store.updateSpecNextRunAt($.specId,X)}catch{}}}import{existsSync as Xy,mkdirSync as jy,watch as Yy}from"node:fs";import{relative as Vy,resolve as By}from"node:path";var Hy=250;class lX{reconciler;debounceMs;onError;onReconciled;watcher;pending=new Map;disposed=!1;constructor($){this.reconciler=$.reconciler,this.debounceMs=Math.max(0,$.debounceMs??Hy),this.onError=$.onError??(()=>{}),this.onReconciled=$.onReconciled??(()=>{})}start(){if(this.disposed)throw Error("CronWatcher disposed");if(this.watcher)return;let $=this.reconciler.getCronDir();try{jy($,{recursive:!0}),this.watcher=Yy($,{recursive:!0},(Z,Q)=>{if(!Q)return;let J=String(Q).replace(/\\/g,"/");if(!J.endsWith(".md"))return;if(J.startsWith("reports/"))return;this.scheduleReconcile(J)}),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=By(this.reconciler.getCronDir(),$);if(!Xy(Z)){await this.reconciler.reconcileAll(),await this.onReconciled();return}let Q=Vy(this.reconciler.getCronDir(),Z).replace(/\\/g,"/");await this.reconciler.reconcileFile(Q,Z),await this.onReconciled()}catch(Z){this.onError(Z)}}}class U9{store;reconciler;watcher;eventIngress;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new A4({dbPath:$.dbPath});let Z=$.specs;this.reconciler=new pX({store:this.store,specs:Z}),this.materializer=new H4({store:this.store}),this.eventIngress=new vX({store:this.store,logger:$.logger}),this.runner=new F4({store:this.store,materializer:this.materializer,runtimeHandlers:$.runtimeHandlers,workspaceRoot:$.workspaceRoot,specs:Z,logger:$.logger,pollIntervalMs:$.pollIntervalMs,claimLeaseSeconds:$.claimLeaseSeconds,globalMaxConcurrency:$.globalMaxConcurrency}),this.watcher=new lX({reconciler:this.reconciler,debounceMs:$.watcherDebounceMs,onReconciled:()=>{this.materializer.materializeAll()},onError:(Q)=>{let J=$.logger;if(J)if(J.error)J.error("cron.watcher.failed",{error:Q});else J.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 kD={};w(kD,{manifestToSessionRecord:()=>y7,listSessionHistoryFromBackend:()=>aX,listSessionHistory:()=>k7,hydrateSessionHistory:()=>yD});import{readdir as Fy,readFile as PD}from"node:fs/promises";import{join as SD}from"node:path";import{formatDisplayUserInput as Uy,normalizeUserInput as Dy}from"@cline/shared";import{resolveSessionDataDir as bD}from"@cline/shared/storage";import{existsSync as Ky}from"node:fs";import{readFile as Gy}from"node:fs/promises";class D9{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 j2($){let Z=$?.trim();if(!Z||!Ky(Z))return[];try{let Q=(await Gy(Z,"utf8")).trim();if(!Q)return[];let J=JSON.parse(Q);if(Array.isArray(J))return J;if(J&&typeof J==="object"&&!Array.isArray(J)){let W=J.messages;if(Array.isArray(W))return W}return[]}catch{return[]}}function iX($){return $?{...$}:void 0}async function CD($,Z){if(!($.hookName==="tool_call"||!!$.parent_agent_id))return;await Z.queueSpawnRequest($);let J=await Z.upsertSubagentSessionFromHook($);if(!J)return;await Z.appendSubagentHookAudit(J,$),await Z.applySubagentStatus(J,$)}function _9($){if(typeof $!=="string")return;let Z=$.trim();return Z.length>0?Z:void 0}function Y1($){let Z=_9($);if(!Z)return;return Z.toLowerCase()==="unknown"?void 0:Z}function b7($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function _y($){if(!$||typeof $!=="object"||Array.isArray($))return;return{...$}}function nX($){let Z=$??200;return Number.isFinite(Z)?Math.max(0,Math.floor(Z)):200}function Ly($){if($===0)return 0;return Math.min(Math.max($*2,20),2000)}function Ay($){return $.isSubagent!==!0&&!_9($.parentSessionId)}function Oy($){let Z=$.match(/\d{13,}/g);if(!Z||Z.length===0)return 0;let Q=0;for(let J of Z){let W=Number.parseInt(J,10);if(Number.isFinite(W)&&W>Q)Q=W}return Q}function y7($){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 qy($){let Z=nX($);if(Z===0)return[];let Q=bD(),W=(await Fy(Q,{withFileTypes:!0}).catch(()=>[])).filter((j)=>j.isDirectory()).map((j)=>({entry:j,recency:Oy(j.name.trim())})).sort((j,Y)=>Y.recency-j.recency||Y.entry.name.localeCompare(j.entry.name));return(await Promise.all(W.map(async({entry:j})=>{let Y=j.name.trim();if(!Y)return;let V=SD(Q,Y,`${Y}.json`),B=await PD(V,"utf8").catch(()=>{return});if(!B)return;let H;try{H=JSON.parse(B)}catch{return}let K=n0.safeParse(H);if(!K.success)return;return y7(K.data)}))).filter((j)=>Boolean(j)).sort((j,Y)=>Y.startedAt.localeCompare(j.startedAt)).slice(0,Z)}async function zy($,Z,Q){let J=nX(Z);if(J===0)return await $.listSessions(0),[];let W=Q.includeSubagents?J:Ly(J),X=await $.listSessions(W);return(Q.includeSubagents?X:X.filter(Ay)).slice(0,J)}function Ty($){if(typeof $==="string")return $.trim();let Z=[];for(let Q of $){if(!Q||typeof Q!=="object")continue;let J=Q;if(J.type!=="text")continue;let W=J.text?.trim();if(W)Z.push(W)}return Z.join(`
532
- `).trim()}function wD($){return $.replace(/\s+/g," ").trim()}function Ny($,Z){if($.length<=Z)return $;return`${$.slice(0,Math.max(0,Z-3)).trimEnd()}...`}function fy($){for(let Z of["user","assistant"])for(let Q of $){if(Q.role!==Z)continue;let J=wD(Ty(Q.content));if(!J)continue;let W=Z==="user"?wD(Uy(J)):J,X=Dy(W.split(`
533
- `)[0]??W);return Ny(X,50)}return}function Ry($){let Z=0;for(let Q of $)Z+=b7(Q.metrics?.cost)??0;return Z}function My($){let Z,Q;for(let J=$.length-1;J>=0;J-=1){let W=$[J];if(!Z)Z=Y1(W.modelInfo?.provider);if(!Q)Q=Y1(W.modelInfo?.id);if(Z&&Q)break}return{provider:Z,model:Q}}function Ey($){return Y1($?.provider)??Y1($?.provider&&typeof $.provider==="object"&&!Array.isArray($.provider)?$.provider.id:void 0)}function Cy($){return Y1($?.model)??Y1($?.model&&typeof $.model==="object"&&!Array.isArray($.model)?$.model.id:void 0)}function rX($,Z){let Q=_y($.metadata),J=_9(Z?.title)??_9(Q?.title),W=b7(Z?.totalCost)??b7(Q?.totalCost),X=Q||J!==void 0||W!==void 0?{...Q??{},...J!==void 0?{title:J}:{},...W!==void 0?{totalCost:W}:{}}:void 0;return{...$,provider:Y1(Z?.provider)??Y1($.provider)??Ey(Q)??"",model:Y1(Z?.model)??Y1($.model)??Cy(Q)??"",metadata:X}}function wy($){let Z=$.content;if(!Array.isArray(Z))return!1;return Z.some((Q)=>!!Q&&typeof Q==="object"&&Q.type==="tool-call")}function Py($,Z){if($.status!=="running"||$.interactive!==!0)return!1;let Q=Z.at(-1);return Q?.role==="assistant"&&!wy(Q)}async function Sy($,Z){return await Promise.all(Z.map(async(Q)=>{if(Q.status!=="running"||Q.interactive!==!0)return Q;let J=await $.readSessionMessages(Q.sessionId);return Py(Q,J)?{...Q,status:"idle"}:Q}))}async function yD($,Z){return await Promise.all(Z.map(async(Q)=>{let J=rX(Q),W=Boolean(_9(J.metadata?.title)),X=Boolean(Y1(J.provider)),j=Boolean(Y1(J.model)),Y=b7(J.metadata?.totalCost),V=Y!==void 0&&Y>0;if(W&&X&&j&&V)return J;let B=await $.readSessionMessages(Q.sessionId);if(B.length===0)return J;let H=My(B),K=Ry(B);return rX(Q,{title:W?void 0:fy(B),provider:X?void 0:H.provider,model:j?void 0:H.model,totalCost:V||K<=0?void 0:K})}))}async function k7($,Z={}){let Q=nX(Z.limit),J=Z.includeSubagents===!0,W=await zy($,Q,{includeSubagents:J}),X=Z.includeManifestFallback===!0&&W.length<Q?await qy(Math.min(Math.max(Q*2,100),500)):[],j=new Map;for(let B of[...W,...X]){if(j.has(B.sessionId))continue;j.set(B.sessionId,B)}let Y=X.length===0?W:Array.from(j.values()).sort((B,H)=>H.startedAt.localeCompare(B.startedAt)).slice(0,Q),V=await Sy($,Y);if(Z.hydrate===!1)return V.map((B)=>rX(B));return await yD($,V)}async function by($){let Z=$.trim();if(!Z)return;let Q=SD(bD(),Z,`${Z}.json`),J=await PD(Q,"utf8").catch(()=>{return});if(!J)return;try{let W=n0.safeParse(JSON.parse(J));return W.success?W.data.messages_path:void 0}catch{return}}async function aX($,Z={}){let Q=new Map;return await k7({listSessions:async(W)=>{let X=await $.listSessions(W);Q.clear();for(let j of X)Q.set(j.sessionId,j);return X.map(z5)},readSessionMessages:async(W)=>{let X=Q.get(W)?.messagesPath??await by(W);return await j2(X)}},Z)}var R_={};w(R_,{resolveSessionBackend:()=>_j,createRuntimeHost:()=>n6});import{captureSdkError as N_}from"@cline/shared";var rD={};w(rD,{HubRuntimeHost:()=>_$});import{resolveProviderRequestHeaders as Iy}from"@cline/llms";import{captureSdkError as oX,createSessionId as ID,HUB_CHECKPOINT_CAPABILITY as xy,HUB_COMPACTION_CAPABILITY as gy,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as vy,HUB_HOOK_CAPABILITY_PREFIX as my,HUB_MISTAKE_LIMIT_CAPABILITY as cy,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as uy,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as dy,isHubToolExecutorName as py}from"@cline/shared";var hD={};w(hD,{createCoreSessionSnapshot:()=>b1,coreSessionSnapshotToRecord:()=>h7});function yy($){return $?JSON.parse(JSON.stringify($)):void 0}function ky($){return $?JSON.parse(JSON.stringify($)):void 0}function hy($){let Z=$?.checkpoint&&typeof $.checkpoint==="object"&&!Array.isArray($.checkpoint)?$.checkpoint:void 0,J=(Array.isArray(Z?.history)?Z.history:[]).filter((j)=>!!j&&typeof j==="object"&&!Array.isArray(j)).flatMap((j)=>{let Y=typeof j.ref==="string"?j.ref.trim():"",V=Number(j.createdAt),B=Number(j.runCount);if(!Y||!Number.isFinite(V)||!Number.isInteger(B))return[];return[{ref:Y,createdAt:V,runCount:B,...j.kind==="stash"||j.kind==="commit"?{kind:j.kind}:{}}]}),W=J.at(-1),X=$?.checkpointEnabled===!0?!0:void 0;if(!X&&J.length===0)return;return{...X?{enabled:X}:{},...W?{latest:W}:{},history:J}}function b1($){let{session:Z}=$,Q=yy(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:ky($.messages)}:{},...$.usage?{usage:{...$.usage}}:{},...$.aggregateUsage?{aggregateUsage:{...$.aggregateUsage}}:{},...(()=>{let J=hy(Q);return J?{checkpoint:J}:{}})()}}function h7($){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 m6($){if(!$)return;return JSON.parse(JSON.stringify($))}var ly=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function xD($){if(!$||typeof $!=="object"||Array.isArray($))return;return JSON.parse(JSON.stringify($))}function gD($){if(!$)return;let{userInstructionService:Z,...Q}=$;return JSON.parse(JSON.stringify(Q))}function vD($,Z){let Q={...$.config,sessionId:Z},J=Iy({providerId:$.config.providerId,sessionId:Z,source:$.source,defaultSource:L0.CORE,client:{name:$.localRuntime?.extensionContext?.client?.name,version:$.localRuntime?.extensionContext?.client?.version,versionHeaderFallback:$.config.headers?.["X-CLIENT-VERSION"],platform:$.localRuntime?.extensionContext?.client?.platform,platformVersion:$.localRuntime?.extensionContext?.client?.platformVersion,isMultiRoot:$.localRuntime?.extensionContext?.client?.isMultiRoot},coreVersion:g8,openAiCodex:{accessToken:$.config.apiKey,userAgentVersion:process.env.npm_package_version},headers:{config:$.config.headers}});if(J)Q.headers=J;return Q}function mD($){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 H8($,Z,Q){$.manifest.push(Z),$.handlers.set(Z.capabilityName,Q)}function cD($,Z){let Q={manifest:[],handlers:new Map};for(let W of Object.keys(Z.toolExecutors??{}).filter(py)){let X=Z.toolExecutors?.[W];if(typeof X!=="function")continue;H8(Q,{kind:"toolExecutor",executor:W,capabilityName:`${uy}${W}`},async({payload:j,abortSignal:Y})=>{let V=Array.isArray(j.args)?[...j.args]:[],B={...mD(j.context),signal:Y};return{result:await X(...V,B)}})}for(let W of $?.extraTools??[])H8(Q,{kind:"tool",name:W.name,description:W.description,inputSchema:m6(W.inputSchema)??{},...W.lifecycle?{lifecycle:m6(W.lifecycle)}:{},capabilityName:`${vy}${W.name}`},async({payload:X,abortSignal:j,progress:Y})=>{let V={...mD(X.context),signal:j};return{result:await W.execute(X.input,{...V,emitUpdate:(H)=>{Y({update:H})}})}});let J=$?.hooks;if(J)for(let W of ly){let X=J[W];if(typeof X!=="function")continue;H8(Q,{kind:"hook",name:W,capabilityName:`${my}${W}`},async({payload:j})=>({control:await X(j.context)}))}if($?.compaction?.compact){let W=$.compaction.compact;H8(Q,{kind:"compaction",capabilityName:gy,config:xD($.compaction)},async({payload:X})=>({result:await W(X.context)}))}if($?.checkpoint?.createCheckpoint){let W=$.checkpoint.createCheckpoint;H8(Q,{kind:"checkpoint",capabilityName:xy,config:xD($.checkpoint)},async({payload:X})=>({result:await W(X.context)}))}if($?.onConsecutiveMistakeLimitReached){let W=$.onConsecutiveMistakeLimitReached;H8(Q,{kind:"mistakeLimit",capabilityName:cy},async({payload:X})=>({result:await W(X.context)}))}if($?.userInstructionService){let W=$.userInstructionService;H8(Q,{kind:"userInstructionService",capabilityName:dy},async()=>{return await W.start().catch(()=>{}),{snapshot:{records:{skill:W.listRecords("skill"),rule:W.listRecords("rule"),workflow:W.listRecords("workflow")},runtimeCommands:W.listRuntimeCommands()}}})}return Q}function lD($){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 iy($){return lD($)??"Capability request was cancelled."}function ry($){if(typeof $!=="string")return $;try{return JSON.parse($)}catch{return $}}function ny($){return $==="completed"||$==="max_iterations"||$==="aborted"||$==="mistake_limit"||$==="error"}function ay($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$,Q=typeof Z.inputTokens==="number"?Z.inputTokens:void 0,J=typeof Z.outputTokens==="number"?Z.outputTokens:void 0;if(Q===void 0||J===void 0)return;return{inputTokens:Q,outputTokens:J,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 uD($){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 sX($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function Y2($,Z){return sX($?.[Z])??0}function oy($){let Z=$?.delta&&typeof $.delta==="object"?$.delta:void 0,Q=$?.totals&&typeof $.totals==="object"?$.totals:void 0,J=$?.agent&&typeof $.agent==="object"?$.agent:void 0,W=J?.teamRole==="teammate"||J?.teamRole==="lead"?J.teamRole:void 0;return{event:{type:"usage",agentId:typeof J?.agentId==="string"?J.agentId:void 0,conversationId:typeof J?.conversationId==="string"?J.conversationId:void 0,parentAgentId:typeof J?.parentAgentId==="string"?J.parentAgentId:void 0,inputTokens:Y2(Z,"inputTokens"),outputTokens:Y2(Z,"outputTokens"),cacheReadTokens:Y2(Z,"cacheReadTokens"),cacheWriteTokens:Y2(Z,"cacheWriteTokens"),cost:sX(Z?.totalCost),totalInputTokens:Y2(Q,"inputTokens"),totalOutputTokens:Y2(Q,"outputTokens"),totalCacheReadTokens:Y2(Q,"cacheReadTokens"),totalCacheWriteTokens:Y2(Q,"cacheWriteTokens"),totalCost:sX(Q?.totalCost)},teamAgentId:typeof J?.teamAgentId==="string"?J.teamAgentId:void 0,teamRole:W}}function sy($){let Z=$?.result&&typeof $.result==="object"&&!Array.isArray($.result)?$.result:void 0,Q=$?.reason??Z?.finishReason,J=ny(Q)?Q:Q==="failed"?"error":"completed",W=ay($?.usage??Z?.usage);return{type:"done",reason:J,text:typeof $?.text==="string"?$.text:typeof Z?.text==="string"?Z.text:"",iterations:typeof $?.iterations==="number"?$.iterations:typeof Z?.iterations==="number"?Z.iterations:0,usage:W}}function K8($,Z){return $.error?.message??`hub command failed: ${Z}`}function L9($){switch($){case"idle":case"completed":return"completed";case"failed":return"failed";case"aborted":return"cancelled";default:return"running"}}function iD($){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:L0.CORE,pid:typeof Z?.pid==="number"?Z.pid:void 0,startedAt:new Date($.createdAt).toISOString(),endedAt:L9($.status)==="running"?void 0:new Date($.updatedAt).toISOString(),exitCode:L9($.status)==="completed"?0:L9($.status)==="failed"?1:void 0,status:L9($.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 V2($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$;return Z.version===1&&typeof Z.sessionId==="string"?JSON.parse(JSON.stringify(Z)):void 0}function ty($){let Z=V2($?.snapshot);if(Z)return h7(Z);let Q=$?.session;return Q?iD(Q):void 0}function dD($,Z,Q){let J=Q?.workspaceRoot?.trim()||Z.config.workspaceRoot?.trim()||Z.config.cwd?.trim();if(!J)throw Error("Hub runtime did not return a resolved workspace path.");let W=Q?.cwd?.trim()||Z.config.cwd?.trim()||J;return n0.parse({version:1,session_id:$,source:Z.source??L0.CORE,pid:process.pid,started_at:new Date(Q?.createdAt??Date.now()).toISOString(),status:L9(Q?.status),interactive:Z.interactive===!0,provider:Z.config.providerId,model:Z.config.modelId,cwd:W,workspace_root:J,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 pD($,Z){return n0.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 _${runtimeAddress;pendingPrompts;client;clientOptions;clientContext;events=new D9;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=y0($.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 F1({...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(!lZ($,"session.create"))return!1;let Z=await iZ({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=cD($.localRuntime,Z),J=$.config.sessionId?.trim()||ID(),W=()=>this.client.command("session.create",{workspaceRoot:$.config.workspaceRoot?.trim()||$.config.cwd,cwd:$.config.cwd,sessionConfig:m6(vD($,J)),metadata:{...$.sessionMetadata??{},source:$.source??L0.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:m6($.toolPolicies),initialMessages:$.initialMessages,...$.initialCompactionState?{initialCompactionState:$.initialCompactionState}:{}});this.registerPlannedSession(J,Z,Q.handlers);let X;try{X=await W()}catch(H){if(this.cleanupPlannedSession(J),await this.recoverLocalHubStartupDeadlock(H)){this.registerPlannedSession(J,Z,Q.handlers);try{X=await W()}catch(K){throw this.cleanupPlannedSession(J),K}}else throw H}let j=V2(X.payload?.snapshot),Y=X.payload?.session,V=(j?.sessionId??Y?.sessionId)?.trim();if(!V)throw this.cleanupPlannedSession(J),Error("Hub runtime did not return a session id.");let B;try{B=j?pD(j,$):dD(V,$,Y)}catch(H){throw this.cleanupPlannedSession(J),H}if(V!==J)this.cleanupPlannedSession(J),this.registerPlannedSession(V,Z,Q.handlers);return{sessionId:V,manifest:B,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 J=$.start,W=J?this.resolveCapabilities(J):void 0,X=J?cD(J.localRuntime,W??{}):{manifest:[],handlers:new Map},j,Y;if(J)j=J.config.sessionId?.trim()||ID(),Y=vD(J,j);if(j&&W)this.sessionCapabilities.set(j,W);if(j&&X.handlers.size>0)this.sessionClientContributionHandlers.set(j,X.handlers),this.ensureSessionSubscription(j);let V;try{V=await this.client.command("session.restore",{sessionId:Z,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...J?{workspaceRoot:J.config.workspaceRoot?.trim()||J.config.cwd,cwd:J.config.cwd??$.cwd,sessionConfig:m6(Y),metadata:{...J.sessionMetadata??{},source:J.source??L0.CORE,provider:J.config.providerId,model:J.config.modelId,enableTools:J.config.enableTools,enableSpawn:J.config.enableSpawnAgent,enableTeams:J.config.enableAgentTeams,teamName:J.config.teamName,prompt:J.prompt,interactive:J.interactive===!0},runtimeOptions:{...X.manifest.length>0?{clientContributions:X.manifest}:{},...J.localRuntime?.configExtensions?{configExtensions:J.localRuntime.configExtensions}:{}},toolPolicies:m6(J.toolPolicies),...J.initialCompactionState?{initialCompactionState:J.initialCompactionState}:{}}:{}},Z)}catch(U){if(j)this.sessionCapabilities.delete(j),this.sessionClientContributionHandlers.delete(j),this.disposeSessionSubscription(j);throw U}if(!V.ok){let U=typeof V.payload?.error==="string"?V.payload.error:"session.restore failed";if(j)this.sessionCapabilities.delete(j),this.sessionClientContributionHandlers.delete(j),this.disposeSessionSubscription(j);throw Error(U)}let B=V2(V.payload?.snapshot),H=V.payload?.session,K=(B?.sessionId??H?.sessionId)?.trim();if(Q&&!K){if(j)this.sessionCapabilities.delete(j),this.sessionClientContributionHandlers.delete(j),this.disposeSessionSubscription(j);throw Error("Hub checkpoint restore returned no session id")}if(K&&j&&K!==j)this.sessionCapabilities.delete(j),this.sessionClientContributionHandlers.delete(j),this.disposeSessionSubscription(j);if(K&&W)this.sessionCapabilities.set(K,W);if(K&&X.handlers.size>0)this.sessionClientContributionHandlers.set(K,X.handlers);if(K)this.ensureSessionSubscription(K);let G=Array.isArray(V.payload?.messages)?V.payload.messages:void 0,F=V.payload?.checkpoint;if(!F){if(K)this.cleanupPlannedSession(K);else if(j)this.cleanupPlannedSession(j);throw Error("Hub checkpoint restore returned no checkpoint")}try{return{sessionId:K,startResult:K?{sessionId:K,manifest:B?pD(B,J??{}):dD(K,J??{},H),manifestPath:"",messagesPath:"",result:void 0}:void 0,messages:G,checkpoint:F}}catch(U){if(K)this.cleanupPlannedSession(K);else if(j)this.cleanupPlannedSession(j);throw U}}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=V2(Z.payload?.snapshot);if(Q){let j=Q.usage?{...Q.usage}:void 0,Y=Q.aggregateUsage?{...Q.aggregateUsage}:void 0;return j||Y?{usage:j,aggregateUsage:Y}:void 0}let J=Z.payload?.session,W=uD(J?.usage),X=uD(J?.aggregateUsage);return W||X?{usage:W,aggregateUsage:X}:void 0}async abort($,Z){await this.client.command("run.abort",{sessionId:$,reason:lD(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(s1(Q))return;throw Q}return ty(Z.payload)}async listSessions($=100){let Z=await this.client.command("session.list",{limit:$}),Q=Array.isArray(Z.payload?.snapshots)?Z.payload.snapshots.flatMap((W)=>{let X=V2(W);return X?[h7(X)]:[]}):[];if(Q.length>0)return Q;return(Z.payload?.sessions??[]).map(iD)}async listSettings($){let Z=await this.client.command("settings.list",gD($));if(!Z.ok)throw Error(K8(Z,"settings.list"));return Z.payload?.snapshot}async toggleSetting($){let Z=await this.client.command("settings.toggle",gD($));if(!Z.ok)throw Error(K8(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 updateSessionConnection($,Z){let Q=$.trim();if(!Q)return;let J=await this.client.command("session.update_connection",{sessionId:Q,updates:Z},Q);if(!J.ok)throw Error(K8(J,"session.update_connection"))}async updateSessionCompactionState($,Z){let Q=$.trim();if(!Q)return{updated:!1};let J=await this.client.command("session.compaction.update",{sessionId:Q,state:Z},Q);if(!J.ok)oX(this.telemetry,{component:"core",operation:"hub.runtime_host.update_session_compaction_state",error:Error(K8(J,"session.compaction.update")),severity:"warn",handled:!0,context:{command:"session.compaction.update",sessionId:Q,errorCode:J.error?.code}});return{updated:J.ok&&J.payload?.updated===!0}}async readSessionCompactionState($){let Z=$.trim();if(!Z)return;let Q=await this.client.command("session.compaction.get",{sessionId:Z},Z);if(!Q.ok)throw Error(K8(Q,"session.compaction.get"));return D1(Q.payload?.state)}async readSessionMessages($){let Z=$.trim();if(!Z)return[];let Q=await this.client.command("session.messages",{sessionId:Z},Z);if(!Q.ok)throw oX(this.telemetry,{component:"core",operation:"hub.runtime_host.read_session_messages",error:Error(K8(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(K8(Q,"session.messages"));let J=Q.payload?.messages;return Array.isArray(J)?J:[]}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((J)=>{this.handleHubEvent(J)},{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 y0(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:sy($.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=V2($.payload?.snapshot),J=$.payload?.session;if(Q)this.events.emit({type:"session_snapshot",payload:{sessionId:Z,snapshot:Q}});this.events.emit({type:"status",payload:{sessionId:Z,status:J?.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"session.notice":{let Q=$.payload?.noticeType,J=$.payload?.displayRole,W=$.payload?.reason,X=$.payload?.agent&&typeof $.payload.agent==="object"?$.payload.agent:void 0,j=X?.teamRole==="lead"||X?.teamRole==="teammate"?X.teamRole:void 0;this.events.emit({type:"agent_event",payload:{sessionId:Z,...j?{teamRole:j}:{},...typeof X?.teamAgentId==="string"?{teamAgentId:X.teamAgentId}:{},event:{type:"notice",...typeof X?.agentId==="string"?{agentId:X.agentId}:{},...typeof X?.conversationId==="string"?{conversationId:X.conversationId}:{},...typeof X?.parentAgentId==="string"?{parentAgentId:X.parentAgentId}:{},noticeType:Q==="recovery"||Q==="stop"?Q:"status",message:typeof $.payload?.message==="string"?$.payload.message:"",...J==="system"||J==="status"?{displayRole:J}:{},...typeof W==="string"?{reason:W}:{},...$.payload?.metadata&&typeof $.payload.metadata==="object"?{metadata:$.payload.metadata}:{}}}});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:"",J=$.payload?.redacted===!0;if(!Q&&!J)return;this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_start",contentType:"reasoning",reasoning:Q,redacted:J}}});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=oy($.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=V2($.payload?.snapshot),J=$.payload?.session;if(Q)this.events.emit({type:"session_snapshot",payload:{sessionId:Z,snapshot:Q}});this.events.emit({type:"status",payload:{sessionId:Z,status:J?.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=V2($.payload?.snapshot),J=typeof $.payload?.reason==="string"?$.payload.reason:$.event==="run.aborted"?"aborted":$.event==="run.failed"?"error":"completed";if(this.emitAgentDoneIfNeeded({sessionId:Z,payload:{...$.payload,reason:J}}),Q?.interactive===!0&&_0(Q.status))return;this.events.emit({type:"ended",payload:{sessionId:Z,reason:J,ts:$.timestamp??Date.now()}});return}default:return}}captureDetachedHubEventError($,Z,Q){try{oX(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 J=typeof $.payload?.requestId==="string"?$.payload.requestId:"",W=typeof $.payload?.capabilityName==="string"?$.payload.capabilityName:"";if(!J)return;let X=this.sessionClientContributionHandlers.get(Z)?.get(W);if(!X){await this.client.command("capability.respond",{requestId:J,ok:!1,error:`No client contribution handler registered for capability ${W} in session ${Z}.`},Z).catch(()=>{});return}let j=$.payload?.payload&&typeof $.payload.payload==="object"&&!Array.isArray($.payload.payload)?$.payload.payload:{},Y=new AbortController;this.activeCapabilityAbortControllers.set(J,Y);let V=(B)=>{this.client.command("capability.progress",{requestId:J,payload:B},Z).catch((H)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_progress",H,$)})};try{let B=await X({payload:j,abortSignal:Y.signal,progress:V});if(Y.signal.aborted)return;await this.client.command("capability.respond",{requestId:J,ok:!0,payload:B},Z)}catch(B){if(Y.signal.aborted)return;await this.client.command("capability.respond",{requestId:J,ok:!1,error:B instanceof Error?B.message:String(B)},Z)}finally{this.activeCapabilityAbortControllers.delete(J)}}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(iy($.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 J=typeof $.payload?.approvalId==="string"?$.payload.approvalId.trim():"",W=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:"",X=typeof $.payload?.toolName==="string"?$.payload.toolName:"";if(!J||!W||!X)return;let j=$.payload?.policy&&typeof $.payload.policy==="object"&&!Array.isArray($.payload.policy)?$.payload.policy:{autoApprove:!1},Y=ry($.payload?.inputJson);this.pendingApprovalToolCallIds.add(W),this.emitToolCallContentStart({sessionId:Z,toolCallId:W,toolName:X,toolInput:Y});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:W,toolName:X,input:Y,policy:j})).catch((B)=>({approved:!1,reason:B instanceof Error?B.message:`Tool approval request failed: ${String(B)}`}));await this.client.command("approval.respond",{approvalId:J,approved:V.approved,reason:V.reason},Z).catch(()=>{})}}var nD={};w(nD,{RemoteRuntimeHost:()=>c6});class c6 extends _${constructor($){super({url:k$($.endpoint),authToken:$.authToken,clientType:$.clientType??"core-remote-runtime",displayName:$.displayName??"core remote runtime",capabilities:$.capabilities},{workspaceRoot:$.workspaceRoot,cwd:$.cwd})}}var aD={};w(aD,{SqliteSessionStore:()=>h1});import{existsSync as ey,mkdirSync as $k}from"node:fs";import{join as Zk}from"node:path";import{asBool as A9,asOptionalString as y1,asString as k1,ensureSessionSchema as Qk,loadSqliteDb as Jk,nowIso as I7,toBoolInt as O9}from"@cline/shared/db";import{resolveDbDataDir as Wk}from"@cline/shared/storage";class h1{sessionsDirPath;db;constructor($={}){this.sessionsDirPath=$.sessionsDir??Wk()}init(){this.getRawDb()}ensureSessionsDir(){if(!ey(this.sessionsDirPath))$k(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}sessionDbPath(){return Zk(this.ensureSessionsDir(),"sessions.db")}getRawDb(){if(this.db)return this.db;let $=Jk(this.sessionDbPath());return Qk($,{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=I7();this.run(`INSERT OR REPLACE INTO sessions (
530
+ `))X=X.slice(1);return{frontmatter:W,body:X}}function j1($){if(typeof $!=="string")return;let Z=$.trim();return Z.length>0?Z:void 0}function cb($){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 uX($){if(!$||typeof $!=="object"||Array.isArray($))return;return $}function ub($){let Z=uX($);if(!Z)return;let Q=j1(Z.providerId),J=j1(Z.modelId);if(Q===void 0&&J===void 0)return;return{providerId:Q,modelId:J}}function db($){if(typeof $!=="string")return;let Z=$.trim().toLowerCase();if(Z==="act"||Z==="plan"||Z==="yolo")return Z;return}function MD($,Z={}){let Q=Array.isArray($)?$:typeof $==="string"?$.split(","):void 0;if(!Q)return;let J=[...new Set(Q.map((W)=>typeof W==="string"?W.trim():"").filter((W)=>W.length>0))];if(Array.isArray($)&&Z.preserveEmptyArray)return J;return J.length>0?J:void 0}var pb=new Set(C$);function lb($){let Z=MD($,{preserveEmptyArray:!0});if(!Z)return;let Q=Z.filter((J)=>!pb.has(J));if(Q.length>0)throw Error(`unknown tool(s): ${Q.join(", ")}`);return Z}var ib=new Set(["rules","skills","plugins"]);function rb($){let Z=MD($,{preserveEmptyArray:!0});if(!Z)return;let Q=Z.filter((J)=>!ib.has(J));if(Q.length>0)throw Error(`unknown extension(s): ${Q.join(", ")}`);return Z}function mX($){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return;return Math.floor($)}function cX($){if(typeof $!=="number"||!Number.isFinite($)||$<0)return;return Math.floor($)}function dX($){if($===null||typeof $!=="object")return JSON.stringify($??null);if(Array.isArray($))return`[${$.map((Q)=>dX(Q)).join(",")}]`;let Z=Object.entries($).filter(([,Q])=>Q!==void 0);return Z.sort(([Q],[J])=>Q<J?-1:Q>J?1:0),`{${Z.map(([Q,J])=>`${JSON.stringify(Q)}:${dX(J)}`).join(",")}}`}function ED($,Z){let Q=xb("sha256");return Q.update(dX($)),Q.update(`
531
+ `),Q.update(Z),Q.digest("hex")}function nb($){return($.split("/").pop()??$).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}var ab=["schedule","timezone"],ob=["event","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds","maxParallel"],sb=["cwd"];function RD($,Z,Q,J,W){return{externalId:$,relativePath:$,triggerKind:Z,body:Q,contentHash:ED(J,Q),error:W}}function S1($,Z,Q,J,W,X){return{externalId:$,relativePath:Z,triggerKind:Q,body:J,contentHash:W,error:X}}function CD($){let Z=$.relativePath.replace(/\\/g,"/"),Q=vb(Z),{frontmatter:J,body:W}=mb($.raw),X={};if(J!==void 0&&J.trim().length>0)try{let D=gb.parse(J);if(D&&typeof D==="object"&&!Array.isArray(D))X=D;else if(D!==null&&D!==void 0)return RD(Z,Q,W,{},"frontmatter must be a YAML mapping")}catch(D){return RD(Z,Q,W,{},D instanceof Error?`failed to parse frontmatter: ${D.message}`:"failed to parse frontmatter")}let j=ED(X,W),Y=j1(X.id),V=Y??Z;if(Q!=="schedule"){for(let D of ab)if(X[D]!==void 0)return S1(V,Z,Q,W,j,`field "${D}" is only allowed on *.cron.md specs`)}for(let D of sb)if(X[D]!==void 0)return S1(V,Z,Q,W,j,`field "${D}" is no longer supported; cron specs use workspaceRoot as cwd`);if(Q!=="event"){for(let D of ob)if(X[D]!==void 0)return S1(V,Z,Q,W,j,`field "${D}" is only allowed on .event.md specs`)}let B=j1(X.prompt),H=W.trim(),K=B??(H.length>0?H:void 0);if(!K)return S1(V,Z,Q,W,j,"prompt is required (frontmatter `prompt` or markdown body)");let G=j1(X.workspaceRoot);if(!G)return S1(V,Z,Q,W,j,"workspaceRoot is required");let F,U;try{F=lb(X.tools),U=rb(X.extensions)}catch(D){return S1(V,Z,Q,W,j,D instanceof Error?D.message:String(D))}let _=db(X.mode);if(X.mode!==void 0&&_===void 0)return S1(V,Z,Q,W,j,"mode must be one of: act, plan, yolo");let L={id:Y,title:j1(X.title)??Y??nb(Z),prompt:K,workspaceRoot:G,mode:_??"yolo",systemPrompt:j1(X.systemPrompt),modelSelection:ub(X.modelSelection),maxIterations:mX(X.maxIterations),timeoutSeconds:mX(X.timeoutSeconds),tools:F,notesDirectory:j1(X.notesDirectory),extensions:U,source:j1(X.source)??"user",tags:cb(X.tags),enabled:typeof X.enabled==="boolean"?X.enabled:!0,metadata:uX(X.metadata)},O;if(Q==="schedule"){let D=j1(X.schedule);if(!D)return S1(V,Z,Q,W,j,"schedule is required for *.cron.md specs");let q=j1(X.timezone);try{IV(D,q)}catch(z){return S1(V,Z,Q,W,j,z instanceof Error?z.message:String(z))}O={...L,triggerKind:"schedule",schedule:D,timezone:q}}else if(Q==="event"){let D=j1(X.event);if(!D)return S1(V,Z,Q,W,j,"event is required for .event.md specs");O={...L,triggerKind:"event",event:D,filters:uX(X.filters),debounceSeconds:cX(X.debounceSeconds),dedupeWindowSeconds:cX(X.dedupeWindowSeconds),cooldownSeconds:cX(X.cooldownSeconds),maxParallel:mX(X.maxParallel)}}else O={...L,triggerKind:"one_off"};return{externalId:V,relativePath:Z,triggerKind:Q,body:W,contentHash:j,spec:O}}function Wy($,Z){return Qy($,Z).replace(/\\/g,"/")}function Xy($){if(!tb($))return[];let Z=[],Q=[$];while(Q.length>0){let J=Q.pop();if(!J)continue;let W;try{W=eb(J,{withFileTypes:!0})}catch{continue}for(let X of W){let j=`${J}/${X.name}`;if(X.isDirectory()){if(X.name==="reports")continue;Q.push(j);continue}if(!X.isFile())continue;if(!X.name.endsWith(".md"))continue;Z.push(j)}}return Z}class pX{store;cronDir;constructor($){this.store=$.store,this.cronDir=Jy($.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=Xy(this.cronDir),Q=new Set;for(let W of Z){let X=Wy(this.cronDir,W);Q.add(X),$.scanned+=1;let j=await this.reconcileFile(X,W);if(j){if($.changes.push(j),$.upserted+=1,j.parse.error)$.invalidParses+=1}}let J=this.store.listSpecs({includeRemoved:!1,limit:1e4});for(let W of J)if(!Q.has(W.sourcePath))this.handleFileDeleted(W),$.removed+=1;return this.refreshScheduleNextRunAt(),$}async reconcileFile($,Z){let Q=this.store.getSpecBySourcePath($),J,W;try{J=$y(Z,"utf8"),W=Zy(Z).mtimeMs}catch{return}let j=CD({relativePath:$,raw:J}),Y=this.store.upsertSpec({externalId:j.externalId,sourcePath:$,triggerKind:j.triggerKind,sourceMtimeMs:W,sourceHash:j.contentHash,parseStatus:j.error?"invalid":"valid",parseError:j.error,spec:j.spec});if(!j.error&&j.triggerKind==="schedule"&&Y.record.enabled)this.applyScheduleNextRunAt(Y.record,{forceReset:!Q||Q.removed||!Q.enabled||Q.scheduleExpr!==Y.record.scheduleExpr||Q.timezone!==Y.record.timezone});return{relativePath:$,result:Y,parse:j}}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(),J=$.lastRunAt?Math.max(Q,new Date($.lastRunAt).getTime()):Q,W=A2($.scheduleExpr,J,$.timezone),X=new Date(W).toISOString();if($.nextRunAt!==X)this.store.updateSpecNextRunAt($.specId,X)}catch{}}}import{existsSync as jy,mkdirSync as Yy,watch as Vy}from"node:fs";import{relative as By,resolve as Hy}from"node:path";var Ky=250;class lX{reconciler;debounceMs;onError;onReconciled;watcher;pending=new Map;disposed=!1;constructor($){this.reconciler=$.reconciler,this.debounceMs=Math.max(0,$.debounceMs??Ky),this.onError=$.onError??(()=>{}),this.onReconciled=$.onReconciled??(()=>{})}start(){if(this.disposed)throw Error("CronWatcher disposed");if(this.watcher)return;let $=this.reconciler.getCronDir();try{Yy($,{recursive:!0}),this.watcher=Vy($,{recursive:!0},(Z,Q)=>{if(!Q)return;let J=String(Q).replace(/\\/g,"/");if(!J.endsWith(".md"))return;if(J.startsWith("reports/"))return;this.scheduleReconcile(J)}),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=Hy(this.reconciler.getCronDir(),$);if(!jy(Z)){await this.reconciler.reconcileAll(),await this.onReconciled();return}let Q=By(this.reconciler.getCronDir(),Z).replace(/\\/g,"/");await this.reconciler.reconcileFile(Q,Z),await this.onReconciled()}catch(Z){this.onError(Z)}}}class U9{store;reconciler;watcher;eventIngress;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new A4({dbPath:$.dbPath});let Z=$.specs;this.reconciler=new pX({store:this.store,specs:Z}),this.materializer=new H4({store:this.store}),this.eventIngress=new vX({store:this.store,logger:$.logger}),this.runner=new F4({store:this.store,materializer:this.materializer,runtimeHandlers:$.runtimeHandlers,workspaceRoot:$.workspaceRoot,specs:Z,logger:$.logger,pollIntervalMs:$.pollIntervalMs,claimLeaseSeconds:$.claimLeaseSeconds,globalMaxConcurrency:$.globalMaxConcurrency}),this.watcher=new lX({reconciler:this.reconciler,debounceMs:$.watcherDebounceMs,onReconciled:()=>{this.materializer.materializeAll()},onError:(Q)=>{let J=$.logger;if(J)if(J.error)J.error("cron.watcher.failed",{error:Q});else J.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 hD={};w(hD,{manifestToSessionRecord:()=>y7,listSessionHistoryFromBackend:()=>aX,listSessionHistory:()=>k7,hydrateSessionHistory:()=>kD});import{readdir as Uy,readFile as SD}from"node:fs/promises";import{join as bD}from"node:path";import{formatDisplayUserInput as Dy,normalizeUserInput as _y}from"@cline/shared";import{resolveSessionDataDir as yD}from"@cline/shared/storage";import{existsSync as Gy}from"node:fs";import{readFile as Fy}from"node:fs/promises";class D9{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 Y2($){let Z=$?.trim();if(!Z||!Gy(Z))return[];try{let Q=(await Fy(Z,"utf8")).trim();if(!Q)return[];let J=JSON.parse(Q);if(Array.isArray(J))return J;if(J&&typeof J==="object"&&!Array.isArray(J)){let W=J.messages;if(Array.isArray(W))return W}return[]}catch{return[]}}function iX($){return $?{...$}:void 0}async function wD($,Z){if(!($.hookName==="tool_call"||!!$.parent_agent_id))return;await Z.queueSpawnRequest($);let J=await Z.upsertSubagentSessionFromHook($);if(!J)return;await Z.appendSubagentHookAudit(J,$),await Z.applySubagentStatus(J,$)}function _9($){if(typeof $!=="string")return;let Z=$.trim();return Z.length>0?Z:void 0}function Y1($){let Z=_9($);if(!Z)return;return Z.toLowerCase()==="unknown"?void 0:Z}function b7($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function Ly($){if(!$||typeof $!=="object"||Array.isArray($))return;return{...$}}function nX($){let Z=$??200;return Number.isFinite(Z)?Math.max(0,Math.floor(Z)):200}function Ay($){if($===0)return 0;return Math.min(Math.max($*2,20),2000)}function Oy($){return $.isSubagent!==!0&&!_9($.parentSessionId)}function qy($){let Z=$.match(/\d{13,}/g);if(!Z||Z.length===0)return 0;let Q=0;for(let J of Z){let W=Number.parseInt(J,10);if(Number.isFinite(W)&&W>Q)Q=W}return Q}function y7($){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 zy($){let Z=nX($);if(Z===0)return[];let Q=yD(),W=(await Uy(Q,{withFileTypes:!0}).catch(()=>[])).filter((j)=>j.isDirectory()).map((j)=>({entry:j,recency:qy(j.name.trim())})).sort((j,Y)=>Y.recency-j.recency||Y.entry.name.localeCompare(j.entry.name));return(await Promise.all(W.map(async({entry:j})=>{let Y=j.name.trim();if(!Y)return;let V=bD(Q,Y,`${Y}.json`),B=await SD(V,"utf8").catch(()=>{return});if(!B)return;let H;try{H=JSON.parse(B)}catch{return}let K=n0.safeParse(H);if(!K.success)return;return y7(K.data)}))).filter((j)=>Boolean(j)).sort((j,Y)=>Y.startedAt.localeCompare(j.startedAt)).slice(0,Z)}async function Ty($,Z,Q){let J=nX(Z);if(J===0)return await $.listSessions(0),[];let W=Q.includeSubagents?J:Ay(J),X=await $.listSessions(W);return(Q.includeSubagents?X:X.filter(Oy)).slice(0,J)}function Ny($){if(typeof $==="string")return $.trim();let Z=[];for(let Q of $){if(!Q||typeof Q!=="object")continue;let J=Q;if(J.type!=="text")continue;let W=J.text?.trim();if(W)Z.push(W)}return Z.join(`
532
+ `).trim()}function PD($){return $.replace(/\s+/g," ").trim()}function fy($,Z){if($.length<=Z)return $;return`${$.slice(0,Math.max(0,Z-3)).trimEnd()}...`}function Ry($){for(let Z of["user","assistant"])for(let Q of $){if(Q.role!==Z)continue;let J=PD(Ny(Q.content));if(!J)continue;let W=Z==="user"?PD(Dy(J)):J,X=_y(W.split(`
533
+ `)[0]??W);return fy(X,50)}return}function My($){let Z=0;for(let Q of $)Z+=b7(Q.metrics?.cost)??0;return Z}function Ey($){let Z,Q;for(let J=$.length-1;J>=0;J-=1){let W=$[J];if(!Z)Z=Y1(W.modelInfo?.provider);if(!Q)Q=Y1(W.modelInfo?.id);if(Z&&Q)break}return{provider:Z,model:Q}}function Cy($){return Y1($?.provider)??Y1($?.provider&&typeof $.provider==="object"&&!Array.isArray($.provider)?$.provider.id:void 0)}function wy($){return Y1($?.model)??Y1($?.model&&typeof $.model==="object"&&!Array.isArray($.model)?$.model.id:void 0)}function rX($,Z){let Q=Ly($.metadata),J=_9(Z?.title)??_9(Q?.title),W=b7(Z?.totalCost)??b7(Q?.totalCost),X=Q||J!==void 0||W!==void 0?{...Q??{},...J!==void 0?{title:J}:{},...W!==void 0?{totalCost:W}:{}}:void 0;return{...$,provider:Y1(Z?.provider)??Y1($.provider)??Cy(Q)??"",model:Y1(Z?.model)??Y1($.model)??wy(Q)??"",metadata:X}}function Py($){let Z=$.content;if(!Array.isArray(Z))return!1;return Z.some((Q)=>!!Q&&typeof Q==="object"&&Q.type==="tool-call")}function Sy($,Z){if($.status!=="running"||$.interactive!==!0)return!1;let Q=Z.at(-1);return Q?.role==="assistant"&&!Py(Q)}async function by($,Z){return await Promise.all(Z.map(async(Q)=>{if(Q.status!=="running"||Q.interactive!==!0)return Q;let J=await $.readSessionMessages(Q.sessionId);return Sy(Q,J)?{...Q,status:"idle"}:Q}))}async function kD($,Z){return await Promise.all(Z.map(async(Q)=>{let J=rX(Q),W=Boolean(_9(J.metadata?.title)),X=Boolean(Y1(J.provider)),j=Boolean(Y1(J.model)),Y=b7(J.metadata?.totalCost),V=Y!==void 0&&Y>0;if(W&&X&&j&&V)return J;let B=await $.readSessionMessages(Q.sessionId);if(B.length===0)return J;let H=Ey(B),K=My(B);return rX(Q,{title:W?void 0:Ry(B),provider:X?void 0:H.provider,model:j?void 0:H.model,totalCost:V||K<=0?void 0:K})}))}async function k7($,Z={}){let Q=nX(Z.limit),J=Z.includeSubagents===!0,W=await Ty($,Q,{includeSubagents:J}),X=Z.includeManifestFallback===!0&&W.length<Q?await zy(Math.min(Math.max(Q*2,100),500)):[],j=new Map;for(let B of[...W,...X]){if(j.has(B.sessionId))continue;j.set(B.sessionId,B)}let Y=X.length===0?W:Array.from(j.values()).sort((B,H)=>H.startedAt.localeCompare(B.startedAt)).slice(0,Q),V=await by($,Y);if(Z.hydrate===!1)return V.map((B)=>rX(B));return await kD($,V)}async function yy($){let Z=$.trim();if(!Z)return;let Q=bD(yD(),Z,`${Z}.json`),J=await SD(Q,"utf8").catch(()=>{return});if(!J)return;try{let W=n0.safeParse(JSON.parse(J));return W.success?W.data.messages_path:void 0}catch{return}}async function aX($,Z={}){let Q=new Map;return await k7({listSessions:async(W)=>{let X=await $.listSessions(W);Q.clear();for(let j of X)Q.set(j.sessionId,j);return X.map(z5)},readSessionMessages:async(W)=>{let X=Q.get(W)?.messagesPath??await yy(W);return await Y2(X)}},Z)}var M_={};w(M_,{resolveSessionBackend:()=>_j,createRuntimeHost:()=>n6});import{captureSdkError as f_}from"@cline/shared";var nD={};w(nD,{HubRuntimeHost:()=>_$});import{resolveProviderRequestHeaders as xy}from"@cline/llms";import{captureSdkError as oX,createSessionId as xD,HUB_CHECKPOINT_CAPABILITY as gy,HUB_COMPACTION_CAPABILITY as vy,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as my,HUB_HOOK_CAPABILITY_PREFIX as cy,HUB_MISTAKE_LIMIT_CAPABILITY as uy,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as dy,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as py,isHubToolExecutorName as ly}from"@cline/shared";var ID={};w(ID,{createCoreSessionSnapshot:()=>b1,coreSessionSnapshotToRecord:()=>h7});function ky($){return $?JSON.parse(JSON.stringify($)):void 0}function hy($){return $?JSON.parse(JSON.stringify($)):void 0}function Iy($){let Z=$?.checkpoint&&typeof $.checkpoint==="object"&&!Array.isArray($.checkpoint)?$.checkpoint:void 0,J=(Array.isArray(Z?.history)?Z.history:[]).filter((j)=>!!j&&typeof j==="object"&&!Array.isArray(j)).flatMap((j)=>{let Y=typeof j.ref==="string"?j.ref.trim():"",V=Number(j.createdAt),B=Number(j.runCount);if(!Y||!Number.isFinite(V)||!Number.isInteger(B))return[];return[{ref:Y,createdAt:V,runCount:B,...j.kind==="stash"||j.kind==="commit"?{kind:j.kind}:{}}]}),W=J.at(-1),X=$?.checkpointEnabled===!0?!0:void 0;if(!X&&J.length===0)return;return{...X?{enabled:X}:{},...W?{latest:W}:{},history:J}}function b1($){let{session:Z}=$,Q=ky(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:hy($.messages)}:{},...$.usage?{usage:{...$.usage}}:{},...$.aggregateUsage?{aggregateUsage:{...$.aggregateUsage}}:{},...(()=>{let J=Iy(Q);return J?{checkpoint:J}:{}})()}}function h7($){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 m6($){if(!$)return;return JSON.parse(JSON.stringify($))}var iy=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function gD($){if(!$||typeof $!=="object"||Array.isArray($))return;return JSON.parse(JSON.stringify($))}function vD($){if(!$)return;let{userInstructionService:Z,...Q}=$;return JSON.parse(JSON.stringify(Q))}function mD($,Z){let Q={...$.config,sessionId:Z},J=xy({providerId:$.config.providerId,sessionId:Z,source:$.source,defaultSource:L0.CORE,client:{name:$.localRuntime?.extensionContext?.client?.name,version:$.localRuntime?.extensionContext?.client?.version,versionHeaderFallback:$.config.headers?.["X-CLIENT-VERSION"],platform:$.localRuntime?.extensionContext?.client?.platform,platformVersion:$.localRuntime?.extensionContext?.client?.platformVersion,isMultiRoot:$.localRuntime?.extensionContext?.client?.isMultiRoot},coreVersion:v8,openAiCodex:{accessToken:$.config.apiKey,userAgentVersion:process.env.npm_package_version},headers:{config:$.config.headers}});if(J)Q.headers=J;return Q}function cD($){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 K8($,Z,Q){$.manifest.push(Z),$.handlers.set(Z.capabilityName,Q)}function uD($,Z){let Q={manifest:[],handlers:new Map};for(let W of Object.keys(Z.toolExecutors??{}).filter(ly)){let X=Z.toolExecutors?.[W];if(typeof X!=="function")continue;K8(Q,{kind:"toolExecutor",executor:W,capabilityName:`${dy}${W}`},async({payload:j,abortSignal:Y})=>{let V=Array.isArray(j.args)?[...j.args]:[],B={...cD(j.context),signal:Y};return{result:await X(...V,B)}})}for(let W of $?.extraTools??[])K8(Q,{kind:"tool",name:W.name,description:W.description,inputSchema:m6(W.inputSchema)??{},...W.lifecycle?{lifecycle:m6(W.lifecycle)}:{},capabilityName:`${my}${W.name}`},async({payload:X,abortSignal:j,progress:Y})=>{let V={...cD(X.context),signal:j};return{result:await W.execute(X.input,{...V,emitUpdate:(H)=>{Y({update:H})}})}});let J=$?.hooks;if(J)for(let W of iy){let X=J[W];if(typeof X!=="function")continue;K8(Q,{kind:"hook",name:W,capabilityName:`${cy}${W}`},async({payload:j})=>({control:await X(j.context)}))}if($?.compaction?.compact){let W=$.compaction.compact;K8(Q,{kind:"compaction",capabilityName:vy,config:gD($.compaction)},async({payload:X})=>({result:await W(X.context)}))}if($?.checkpoint?.createCheckpoint){let W=$.checkpoint.createCheckpoint;K8(Q,{kind:"checkpoint",capabilityName:gy,config:gD($.checkpoint)},async({payload:X})=>({result:await W(X.context)}))}if($?.onConsecutiveMistakeLimitReached){let W=$.onConsecutiveMistakeLimitReached;K8(Q,{kind:"mistakeLimit",capabilityName:uy},async({payload:X})=>({result:await W(X.context)}))}if($?.userInstructionService){let W=$.userInstructionService;K8(Q,{kind:"userInstructionService",capabilityName:py},async()=>{return await W.start().catch(()=>{}),{snapshot:{records:{skill:W.listRecords("skill"),rule:W.listRecords("rule"),workflow:W.listRecords("workflow")},runtimeCommands:W.listRuntimeCommands()}}})}return Q}function iD($){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 ry($){return iD($)??"Capability request was cancelled."}function ny($){if(typeof $!=="string")return $;try{return JSON.parse($)}catch{return $}}function ay($){return $==="completed"||$==="max_iterations"||$==="aborted"||$==="mistake_limit"||$==="error"}function oy($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$,Q=typeof Z.inputTokens==="number"?Z.inputTokens:void 0,J=typeof Z.outputTokens==="number"?Z.outputTokens:void 0;if(Q===void 0||J===void 0)return;return{inputTokens:Q,outputTokens:J,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 dD($){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 sX($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function V2($,Z){return sX($?.[Z])??0}function sy($){let Z=$?.delta&&typeof $.delta==="object"?$.delta:void 0,Q=$?.totals&&typeof $.totals==="object"?$.totals:void 0,J=$?.agent&&typeof $.agent==="object"?$.agent:void 0,W=J?.teamRole==="teammate"||J?.teamRole==="lead"?J.teamRole:void 0;return{event:{type:"usage",agentId:typeof J?.agentId==="string"?J.agentId:void 0,conversationId:typeof J?.conversationId==="string"?J.conversationId:void 0,parentAgentId:typeof J?.parentAgentId==="string"?J.parentAgentId:void 0,inputTokens:V2(Z,"inputTokens"),outputTokens:V2(Z,"outputTokens"),cacheReadTokens:V2(Z,"cacheReadTokens"),cacheWriteTokens:V2(Z,"cacheWriteTokens"),cost:sX(Z?.totalCost),totalInputTokens:V2(Q,"inputTokens"),totalOutputTokens:V2(Q,"outputTokens"),totalCacheReadTokens:V2(Q,"cacheReadTokens"),totalCacheWriteTokens:V2(Q,"cacheWriteTokens"),totalCost:sX(Q?.totalCost)},teamAgentId:typeof J?.teamAgentId==="string"?J.teamAgentId:void 0,teamRole:W}}function ty($){let Z=$?.result&&typeof $.result==="object"&&!Array.isArray($.result)?$.result:void 0,Q=$?.reason??Z?.finishReason,J=ay(Q)?Q:Q==="failed"?"error":"completed",W=oy($?.usage??Z?.usage);return{type:"done",reason:J,text:typeof $?.text==="string"?$.text:typeof Z?.text==="string"?Z.text:"",iterations:typeof $?.iterations==="number"?$.iterations:typeof Z?.iterations==="number"?Z.iterations:0,usage:W}}function G8($,Z){return $.error?.message??`hub command failed: ${Z}`}function L9($){switch($){case"idle":case"completed":return"completed";case"failed":return"failed";case"aborted":return"cancelled";default:return"running"}}function rD($){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:L0.CORE,pid:typeof Z?.pid==="number"?Z.pid:void 0,startedAt:new Date($.createdAt).toISOString(),endedAt:L9($.status)==="running"?void 0:new Date($.updatedAt).toISOString(),exitCode:L9($.status)==="completed"?0:L9($.status)==="failed"?1:void 0,status:L9($.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 B2($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$;return Z.version===1&&typeof Z.sessionId==="string"?JSON.parse(JSON.stringify(Z)):void 0}function ey($){let Z=B2($?.snapshot);if(Z)return h7(Z);let Q=$?.session;return Q?rD(Q):void 0}function pD($,Z,Q){let J=Q?.workspaceRoot?.trim()||Z.config.workspaceRoot?.trim()||Z.config.cwd?.trim();if(!J)throw Error("Hub runtime did not return a resolved workspace path.");let W=Q?.cwd?.trim()||Z.config.cwd?.trim()||J;return n0.parse({version:1,session_id:$,source:Z.source??L0.CORE,pid:process.pid,started_at:new Date(Q?.createdAt??Date.now()).toISOString(),status:L9(Q?.status),interactive:Z.interactive===!0,provider:Z.config.providerId,model:Z.config.modelId,cwd:W,workspace_root:J,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 lD($,Z){return n0.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 _${runtimeAddress;pendingPrompts;client;clientOptions;clientContext;events=new D9;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=y0($.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 F1({...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(!lZ($,"session.create"))return!1;let Z=await iZ({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=uD($.localRuntime,Z),J=$.config.sessionId?.trim()||xD(),W=()=>this.client.command("session.create",{workspaceRoot:$.config.workspaceRoot?.trim()||$.config.cwd,cwd:$.config.cwd,sessionConfig:m6(mD($,J)),metadata:{...$.sessionMetadata??{},source:$.source??L0.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:m6($.toolPolicies),initialMessages:$.initialMessages,...$.initialCompactionState?{initialCompactionState:$.initialCompactionState}:{}});this.registerPlannedSession(J,Z,Q.handlers);let X;try{X=await W()}catch(H){if(this.cleanupPlannedSession(J),await this.recoverLocalHubStartupDeadlock(H)){this.registerPlannedSession(J,Z,Q.handlers);try{X=await W()}catch(K){throw this.cleanupPlannedSession(J),K}}else throw H}let j=B2(X.payload?.snapshot),Y=X.payload?.session,V=(j?.sessionId??Y?.sessionId)?.trim();if(!V)throw this.cleanupPlannedSession(J),Error("Hub runtime did not return a session id.");let B;try{B=j?lD(j,$):pD(V,$,Y)}catch(H){throw this.cleanupPlannedSession(J),H}if(V!==J)this.cleanupPlannedSession(J),this.registerPlannedSession(V,Z,Q.handlers);return{sessionId:V,manifest:B,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 J=$.start,W=J?this.resolveCapabilities(J):void 0,X=J?uD(J.localRuntime,W??{}):{manifest:[],handlers:new Map},j,Y;if(J)j=J.config.sessionId?.trim()||xD(),Y=mD(J,j);if(j&&W)this.sessionCapabilities.set(j,W);if(j&&X.handlers.size>0)this.sessionClientContributionHandlers.set(j,X.handlers),this.ensureSessionSubscription(j);let V;try{V=await this.client.command("session.restore",{sessionId:Z,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...J?{workspaceRoot:J.config.workspaceRoot?.trim()||J.config.cwd,cwd:J.config.cwd??$.cwd,sessionConfig:m6(Y),metadata:{...J.sessionMetadata??{},source:J.source??L0.CORE,provider:J.config.providerId,model:J.config.modelId,enableTools:J.config.enableTools,enableSpawn:J.config.enableSpawnAgent,enableTeams:J.config.enableAgentTeams,teamName:J.config.teamName,prompt:J.prompt,interactive:J.interactive===!0},runtimeOptions:{...X.manifest.length>0?{clientContributions:X.manifest}:{},...J.localRuntime?.configExtensions?{configExtensions:J.localRuntime.configExtensions}:{}},toolPolicies:m6(J.toolPolicies),...J.initialCompactionState?{initialCompactionState:J.initialCompactionState}:{}}:{}},Z)}catch(U){if(j)this.sessionCapabilities.delete(j),this.sessionClientContributionHandlers.delete(j),this.disposeSessionSubscription(j);throw U}if(!V.ok){let U=typeof V.payload?.error==="string"?V.payload.error:"session.restore failed";if(j)this.sessionCapabilities.delete(j),this.sessionClientContributionHandlers.delete(j),this.disposeSessionSubscription(j);throw Error(U)}let B=B2(V.payload?.snapshot),H=V.payload?.session,K=(B?.sessionId??H?.sessionId)?.trim();if(Q&&!K){if(j)this.sessionCapabilities.delete(j),this.sessionClientContributionHandlers.delete(j),this.disposeSessionSubscription(j);throw Error("Hub checkpoint restore returned no session id")}if(K&&j&&K!==j)this.sessionCapabilities.delete(j),this.sessionClientContributionHandlers.delete(j),this.disposeSessionSubscription(j);if(K&&W)this.sessionCapabilities.set(K,W);if(K&&X.handlers.size>0)this.sessionClientContributionHandlers.set(K,X.handlers);if(K)this.ensureSessionSubscription(K);let G=Array.isArray(V.payload?.messages)?V.payload.messages:void 0,F=V.payload?.checkpoint;if(!F){if(K)this.cleanupPlannedSession(K);else if(j)this.cleanupPlannedSession(j);throw Error("Hub checkpoint restore returned no checkpoint")}try{return{sessionId:K,startResult:K?{sessionId:K,manifest:B?lD(B,J??{}):pD(K,J??{},H),manifestPath:"",messagesPath:"",result:void 0}:void 0,messages:G,checkpoint:F}}catch(U){if(K)this.cleanupPlannedSession(K);else if(j)this.cleanupPlannedSession(j);throw U}}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=B2(Z.payload?.snapshot);if(Q){let j=Q.usage?{...Q.usage}:void 0,Y=Q.aggregateUsage?{...Q.aggregateUsage}:void 0;return j||Y?{usage:j,aggregateUsage:Y}:void 0}let J=Z.payload?.session,W=dD(J?.usage),X=dD(J?.aggregateUsage);return W||X?{usage:W,aggregateUsage:X}:void 0}async abort($,Z){await this.client.command("run.abort",{sessionId:$,reason:iD(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(s1(Q))return;throw Q}return ey(Z.payload)}async listSessions($=100){let Z=await this.client.command("session.list",{limit:$}),Q=Array.isArray(Z.payload?.snapshots)?Z.payload.snapshots.flatMap((W)=>{let X=B2(W);return X?[h7(X)]:[]}):[];if(Q.length>0)return Q;return(Z.payload?.sessions??[]).map(rD)}async listSettings($){let Z=await this.client.command("settings.list",vD($));if(!Z.ok)throw Error(G8(Z,"settings.list"));return Z.payload?.snapshot}async toggleSetting($){let Z=await this.client.command("settings.toggle",vD($));if(!Z.ok)throw Error(G8(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 updateSessionConnection($,Z){let Q=$.trim();if(!Q)return;let J=await this.client.command("session.update_connection",{sessionId:Q,updates:Z},Q);if(!J.ok)throw Error(G8(J,"session.update_connection"))}async updateSessionCompactionState($,Z){let Q=$.trim();if(!Q)return{updated:!1};let J=await this.client.command("session.compaction.update",{sessionId:Q,state:Z},Q);if(!J.ok)oX(this.telemetry,{component:"core",operation:"hub.runtime_host.update_session_compaction_state",error:Error(G8(J,"session.compaction.update")),severity:"warn",handled:!0,context:{command:"session.compaction.update",sessionId:Q,errorCode:J.error?.code}});return{updated:J.ok&&J.payload?.updated===!0}}async readSessionCompactionState($){let Z=$.trim();if(!Z)return;let Q=await this.client.command("session.compaction.get",{sessionId:Z},Z);if(!Q.ok)throw Error(G8(Q,"session.compaction.get"));return D1(Q.payload?.state)}async readSessionMessages($){let Z=$.trim();if(!Z)return[];let Q=await this.client.command("session.messages",{sessionId:Z},Z);if(!Q.ok)throw oX(this.telemetry,{component:"core",operation:"hub.runtime_host.read_session_messages",error:Error(G8(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(G8(Q,"session.messages"));let J=Q.payload?.messages;return Array.isArray(J)?J:[]}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((J)=>{this.handleHubEvent(J)},{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 y0(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:ty($.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=B2($.payload?.snapshot),J=$.payload?.session;if(Q)this.events.emit({type:"session_snapshot",payload:{sessionId:Z,snapshot:Q}});this.events.emit({type:"status",payload:{sessionId:Z,status:J?.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"session.notice":{let Q=$.payload?.noticeType,J=$.payload?.displayRole,W=$.payload?.reason,X=$.payload?.agent&&typeof $.payload.agent==="object"?$.payload.agent:void 0,j=X?.teamRole==="lead"||X?.teamRole==="teammate"?X.teamRole:void 0;this.events.emit({type:"agent_event",payload:{sessionId:Z,...j?{teamRole:j}:{},...typeof X?.teamAgentId==="string"?{teamAgentId:X.teamAgentId}:{},event:{type:"notice",...typeof X?.agentId==="string"?{agentId:X.agentId}:{},...typeof X?.conversationId==="string"?{conversationId:X.conversationId}:{},...typeof X?.parentAgentId==="string"?{parentAgentId:X.parentAgentId}:{},noticeType:Q==="recovery"||Q==="stop"?Q:"status",message:typeof $.payload?.message==="string"?$.payload.message:"",...J==="system"||J==="status"?{displayRole:J}:{},...typeof W==="string"?{reason:W}:{},...$.payload?.metadata&&typeof $.payload.metadata==="object"?{metadata:$.payload.metadata}:{}}}});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:"",J=$.payload?.redacted===!0;if(!Q&&!J)return;this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_start",contentType:"reasoning",reasoning:Q,redacted:J}}});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=sy($.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=B2($.payload?.snapshot),J=$.payload?.session;if(Q)this.events.emit({type:"session_snapshot",payload:{sessionId:Z,snapshot:Q}});this.events.emit({type:"status",payload:{sessionId:Z,status:J?.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=B2($.payload?.snapshot),J=typeof $.payload?.reason==="string"?$.payload.reason:$.event==="run.aborted"?"aborted":$.event==="run.failed"?"error":"completed";if(this.emitAgentDoneIfNeeded({sessionId:Z,payload:{...$.payload,reason:J}}),Q?.interactive===!0&&_0(Q.status))return;this.events.emit({type:"ended",payload:{sessionId:Z,reason:J,ts:$.timestamp??Date.now()}});return}default:return}}captureDetachedHubEventError($,Z,Q){try{oX(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 J=typeof $.payload?.requestId==="string"?$.payload.requestId:"",W=typeof $.payload?.capabilityName==="string"?$.payload.capabilityName:"";if(!J)return;let X=this.sessionClientContributionHandlers.get(Z)?.get(W);if(!X){await this.client.command("capability.respond",{requestId:J,ok:!1,error:`No client contribution handler registered for capability ${W} in session ${Z}.`},Z).catch(()=>{});return}let j=$.payload?.payload&&typeof $.payload.payload==="object"&&!Array.isArray($.payload.payload)?$.payload.payload:{},Y=new AbortController;this.activeCapabilityAbortControllers.set(J,Y);let V=(B)=>{this.client.command("capability.progress",{requestId:J,payload:B},Z).catch((H)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_progress",H,$)})};try{let B=await X({payload:j,abortSignal:Y.signal,progress:V});if(Y.signal.aborted)return;await this.client.command("capability.respond",{requestId:J,ok:!0,payload:B},Z)}catch(B){if(Y.signal.aborted)return;await this.client.command("capability.respond",{requestId:J,ok:!1,error:B instanceof Error?B.message:String(B)},Z)}finally{this.activeCapabilityAbortControllers.delete(J)}}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(ry($.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 J=typeof $.payload?.approvalId==="string"?$.payload.approvalId.trim():"",W=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:"",X=typeof $.payload?.toolName==="string"?$.payload.toolName:"";if(!J||!W||!X)return;let j=$.payload?.policy&&typeof $.payload.policy==="object"&&!Array.isArray($.payload.policy)?$.payload.policy:{autoApprove:!1},Y=ny($.payload?.inputJson);this.pendingApprovalToolCallIds.add(W),this.emitToolCallContentStart({sessionId:Z,toolCallId:W,toolName:X,toolInput:Y});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:W,toolName:X,input:Y,policy:j})).catch((B)=>({approved:!1,reason:B instanceof Error?B.message:`Tool approval request failed: ${String(B)}`}));await this.client.command("approval.respond",{approvalId:J,approved:V.approved,reason:V.reason},Z).catch(()=>{})}}var aD={};w(aD,{RemoteRuntimeHost:()=>c6});class c6 extends _${constructor($){super({url:k$($.endpoint),authToken:$.authToken,clientType:$.clientType??"core-remote-runtime",displayName:$.displayName??"core remote runtime",capabilities:$.capabilities},{workspaceRoot:$.workspaceRoot,cwd:$.cwd})}}var oD={};w(oD,{SqliteSessionStore:()=>h1});import{existsSync as $k,mkdirSync as Zk}from"node:fs";import{join as Qk}from"node:path";import{asBool as A9,asOptionalString as y1,asString as k1,ensureSessionSchema as Jk,loadSqliteDb as Wk,nowIso as I7,toBoolInt as O9}from"@cline/shared/db";import{resolveDbDataDir as Xk}from"@cline/shared/storage";class h1{sessionsDirPath;db;constructor($={}){this.sessionsDirPath=$.sessionsDir??Xk()}init(){this.getRawDb()}ensureSessionsDir(){if(!$k(this.sessionsDirPath))Zk(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}sessionDbPath(){return Qk(this.ensureSessionsDir(),"sessions.db")}getRawDb(){if(this.db)return this.db;let $=Wk(this.sessionDbPath());return Jk($,{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=I7();this.run(`INSERT OR REPLACE INTO sessions (
534
534
  session_id, source, pid, started_at, ended_at, exit_code, status, status_lock, interactive,
535
535
  provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
536
536
  parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
@@ -541,27 +541,27 @@ ${Z}`}function $S($,Z){let{data:Q,body:J,hadFrontmatter:W}=eP($);if(!W&&Z)return
541
541
  parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent,
542
542
  prompt, metadata_json, hook_path, messages_path, updated_at
543
543
  FROM sessions WHERE session_id = ?`,[$]);if(!Z)return;return{sessionId:k1(Z.session_id),source:k1(Z.source),pid:Number(Z.pid??0),startedAt:k1(Z.started_at),endedAt:Z.ended_at??null,exitCode:Z.exit_code??null,status:k1(Z.status),interactive:A9(Z.interactive),provider:k1(Z.provider),model:k1(Z.model),cwd:k1(Z.cwd),workspaceRoot:k1(Z.workspace_root),teamName:y1(Z.team_name),enableTools:A9(Z.enable_tools),enableSpawn:A9(Z.enable_spawn),enableTeams:A9(Z.enable_teams),parentSessionId:y1(Z.parent_session_id),parentAgentId:y1(Z.parent_agent_id),agentId:y1(Z.agent_id),conversationId:y1(Z.conversation_id),isSubagent:A9(Z.is_subagent),prompt:y1(Z.prompt),metadata:(()=>{let Q=y1(Z.metadata_json);if(!Q)return;try{let J=JSON.parse(Q);if(J&&typeof J==="object"&&!Array.isArray(J))return J}catch{}return})(),hookPath:y1(Z.hook_path),messagesPath:y1(Z.messages_path),updatedAt:y1(Z.updated_at)??I7()}}list($=200){let Z=this.queryAll("SELECT session_id FROM sessions ORDER BY started_at DESC LIMIT ?",[$]),Q=[];for(let J of Z){let W=this.get(k1(J.session_id));if(W)Q.push(W)}return Q}listChildren($,Z=200){let Q=this.queryAll(`SELECT session_id FROM sessions WHERE parent_session_id = ?
544
- ORDER BY started_at ASC LIMIT ?`,[$,Z]),J=[];for(let W of Q){let X=this.get(k1(W.session_id));if(X)J.push(X)}return J}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}}O2();import{existsSync as Hj,mkdirSync as ik,readFileSync as D_,renameSync as rk,writeFileSync as nk}from"node:fs";import{join as __}from"node:path";import{resolveSessionDataDir as ak}from"@cline/shared/storage";import{dirname as pk}from"node:path";import{nanoid as lk}from"nanoid";import{appendFileSync as Hk,existsSync as Kk,mkdirSync as eD,readFileSync as Gk,writeFileSync as $_}from"node:fs";import{readFile as Z_,rm as Fk}from"node:fs/promises";import{dirname as Q_,join as Uk}from"node:path";import{ensureHookLogDir as Dk}from"@cline/shared/storage";import{randomUUID as Xk}from"node:crypto";import{mkdir as jk,open as sD,rename as Yk,rm as Vk}from"node:fs/promises";import{dirname as oD}from"node:path";async function Bk($){let Z;try{Z=await sD($,"r"),await Z.sync()}catch{}finally{if(Z!==void 0)try{await Z.close()}catch{}}}async function tD($,Z){await jk(oD($),{recursive:!0});let Q=`${$}.${process.pid}.${Xk()}.tmp`,J;try{J=await sD(Q,"wx"),await J.writeFile(Z,"utf8"),await J.sync(),await J.close(),J=void 0,await Yk(Q,$),await Bk(oD($))}catch(W){if(J!==void 0)try{await J.close()}catch{}try{await Vk(Q,{force:!0})}catch{}throw W}}function _k($){return typeof $==="object"&&$!==null&&"code"in $&&$.code==="ENOENT"}class tX{adapter;messagesArtifactUploader;logger;artifacts;constructor($,Z,Q){this.adapter=$;this.messagesArtifactUploader=Z;this.logger=Q;this.artifacts=new AX(()=>this.ensureSessionsDir())}ensureSessionsDir(){return this.adapter.ensureSessionsDir()}initializeMessagesFile($,Z,Q){$F(Z,Q,hW($))}writeSessionManifest($,Z){eD(Q_($),{recursive:!0}),$_($,`${JSON.stringify(n0.parse(Z),null,2)}
545
- `,"utf8")}readSessionManifest($){return this.readManifestFile($).manifest}async readSessionManifestTitle($){let Z=this.artifacts.sessionManifestPath($,!1),Q;try{Q=await Z_(Z,"utf8")}catch{return}try{let J=JSON.parse(Q);if(!J||typeof J!=="object"||Array.isArray(J))return;let W=J.metadata;if(!W||typeof W!=="object"||Array.isArray(W))return;let X=W.title;return typeof X==="string"?X:void 0}catch{return}}readManifestFile($){let Z=this.artifacts.sessionManifestPath($,!1);if(!Kk(Z))return{path:Z};try{return{path:Z,manifest:n0.parse(JSON.parse(Gk(Z,"utf8")))}}catch{return{path:Z}}}async resolveArtifactPath($,Z,Q){let W=(await this.adapter.getSession($))?.[Z];return typeof W==="string"&&W.trim().length>0?W:Q($)}async persistSessionMessages($,Z,Q){let J=await this.resolveArtifactPath($,"messagesPath",(j)=>this.artifacts.sessionMessagesPath(j)),W=IW({updatedAt:V0(),context:hW($),messages:Z,systemPrompt:Q}),X=`${JSON.stringify(W,null,2)}
546
- `;if(eD(Q_(J),{recursive:!0}),$_(J,X,"utf8"),!this.messagesArtifactUploader)return;try{let j=await this.adapter.getSession($);await this.messagesArtifactUploader.uploadMessagesFile({sessionId:$,path:J,contents:X,row:j})}catch(j){this.logger?.debug("Failed to upload persisted session messages",{sessionId:$,error:j})}}resolveCompactionPath($){let{manifest:Z}=this.readManifestFile($);return Z?.compaction_path?.trim()||this.artifacts.sessionCompactionPath($)}updateCompactionPath($,Z){let Q=this.readManifestFile($);if(!Q.manifest)return;if(Q.manifest.compaction_path===Z)return;this.writeSessionManifest(Q.path,{...Q.manifest,compaction_path:Z})}async readSessionCompactionState($){let Z=this.resolveCompactionPath($);try{return D1(JSON.parse(await Z_(Z,"utf8")))}catch(Q){if(_k(Q))return;this.logger?.debug("Ignoring invalid session compaction state",{sessionId:$,path:Z,error:Q,recovery:"Canonical history is unchanged; deleting the sidecar is safe."});return}}async persistSessionCompactionState($,Z){let Q=this.resolveCompactionPath($),J=p4.parse(Z);await tD(Q,`${JSON.stringify(J,null,2)}
547
- `),this.updateCompactionPath($,Q)}async deleteSessionCompactionState($){await Fk(this.resolveCompactionPath($),{force:!0}),this.updateCompactionPath($,void 0)}appendStaleSessionHookLog($,Z,Q,J,W){let j=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??Uk(Dk(),"hooks.jsonl");Hk(j,`${JSON.stringify({ts:$,hookName:"session_shutdown",reason:J,sessionId:Z,pid:Q,source:W})}
548
- `,"utf8")}}import{appendFileSync as Lk}from"node:fs";import{join as Ak}from"node:path";import{resolveRootSessionId as J_}from"@cline/shared";import{ensureHookLogDir as Ok}from"@cline/shared/storage";import{z as eX}from"zod";var qk="subagent",zk=eX.looseObject({task:eX.string().optional(),systemPrompt:eX.string().optional()});class x7{adapter;manifestStore;toPersistedMessages;heartbeatLogIntervalMs;teamTaskSessionsByAgent=new Map;teamTaskLastHeartbeatBySession=new Map;teamTaskLastProgressLineBySession=new Map;constructor($,Z,Q,J){this.adapter=$;this.manifestStore=Z;this.toPersistedMessages=Q;this.heartbeatLogIntervalMs=J}teamTaskQueueKey($,Z){return`${$}::${Z}`}activeTeamTaskSessionId($,Z){return this.teamTaskSessionsByAgent.get(this.teamTaskQueueKey($,Z))?.at(-1)}buildSubsessionRow($,Z){return{sessionId:Z.sessionId,source:qk,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:T5({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=J_($.sessionContext);if(!Z)return;let Q=zk.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 J=H6(Z,$.agentId),W=await this.adapter.getSession(J),X=V0(),j=this.manifestStore.artifacts.subagentArtifactPaths(J,$.agentId,this.activeTeamTaskSessionId(Z,$.parentAgentId)),Y=$.prompt??W?.prompt??void 0;if(!Y)Y=await this.adapter.claimSpawnRequest(Z,$.parentAgentId)??`Subagent run by ${$.parentAgentId}`;if(!W)return await this.adapter.upsertSession(this.buildSubsessionRow(Q,{sessionId:J,parentSessionId:Z,parentAgentId:$.parentAgentId,agentId:$.agentId,conversationId:$.conversationId,prompt:Y,startedAt:X,...j})),this.manifestStore.initializeMessagesFile(J,j.messagesPath,X),J;return await this.adapter.updateSession({sessionId:J,setRunning:!0,parentSessionId:Z,parentAgentId:$.parentAgentId,agentId:$.agentId,conversationId:$.conversationId,prompt:W.prompt??Y??null,metadata:T5({metadata:W.metadata??void 0,prompt:W.prompt??Y??null}),expectedStatusLock:W.statusLock}),J}async upsertSubagentSessionFromHook($){if(!$.parent_agent_id)return;let Z=J_($.sessionContext);if(!Z)return;if($.hookName==="session_shutdown"){let Q=H6(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($,O5(Z))}async applySubagentStatusBySessionId($,Z){let Q=await this.adapter.getSession($);if(!Q)return;let J=_0(Z)?null:V0(),W=_0(Z)?null:Z==="failed"?1:0;await this.adapter.updateSession({sessionId:$,status:Z,endedAt:J,exitCode:W,expectedStatusLock:Q.statusLock})}async applyStatusToRunningChildSessions($,Z){if(!$)return;let Q=await this.adapter.listSessions({limit:2000,parentSessionId:$,status:"running"});for(let J of Q)await this.applySubagentStatusBySessionId(J.sessionId,Z)}async onTeamTaskStart($,Z,Q){let J=await this.adapter.getSession($);if(!J)return;let W=L5($,Z),X=V0(),{messagesPath:j}=this.manifestStore.artifacts.subagentArtifactPaths(W,Z);await this.adapter.upsertSession(this.buildSubsessionRow(J,{sessionId:W,parentSessionId:$,parentAgentId:"lead",agentId:Z,prompt:Q||`Team task for ${Z}`,startedAt:X,messagesPath:j})),this.manifestStore.initializeMessagesFile(W,j,X);let Y=this.teamTaskQueueKey($,Z),V=this.teamTaskSessionsByAgent.get(Y)??[];V.push(W),this.teamTaskSessionsByAgent.set(Y,V)}async onTeamTaskEnd($,Z,Q,J,W,X){let j=this.teamTaskQueueKey($,Z),Y=this.teamTaskSessionsByAgent.get(j);if(!Y||Y.length===0)return;let V=Y.shift();if(Y.length===0)this.teamTaskSessionsByAgent.delete(j);if(!V)return;let B=W?.messages??X,H=this.toPersistedMessages(B,W,X);if(H)await this.manifestStore.persistSessionMessages(V,H);await this.applySubagentStatusBySessionId(V,Q),this.teamTaskLastHeartbeatBySession.delete(V),this.teamTaskLastProgressLineBySession.delete(V)}async onTeamTaskProgress($,Z,Q,J){let W=this.teamTaskQueueKey($,Z),X=this.teamTaskSessionsByAgent.get(W)?.[0];if(!X)return;let j=Q.trim();if(!j)return;let Y=J?.kind??"progress";if(Y==="heartbeat"){let B=Date.now(),H=this.teamTaskLastHeartbeatBySession.get(X)??0;if(B-H<this.heartbeatLogIntervalMs)return;this.teamTaskLastHeartbeatBySession.set(X,B)}let V=Y==="heartbeat"?"[progress] heartbeat":Y==="text"?`[progress] text: ${j}`:`[progress] ${j}`;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 J=this.toPersistedMessages(Z.agentResult?.messages,Z.agentResult);if(J)await this.manifestStore.persistSessionMessages(Q,J);let W=Z.result?.finishReason??"completed";await this.applySubagentStatusBySessionId(Q,W==="aborted"?"cancelled":"completed")}appendSubagentHookAudit($){let Q=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??Ak(Ok(),"hooks.jsonl");Lk(Q,`${JSON.stringify({ts:V0(),...$})}
549
- `,"utf8")}}import{formatUserInputBlock as dk}from"@cline/shared";var U_={};w(U_,{toTeamProgressLifecycleEvent:()=>l6,sanitizeTeamName:()=>pG,reviveTeamStateDates:()=>EQ,parseConfiguredAgentConfig:()=>q9,loadConfiguredAgentConfigs:()=>u6,createWorkerReviewerTeam:()=>F_,createSpawnAgentTool:()=>n$,createDelegatedAgentConfigProvider:()=>i$,createDelegatedAgent:()=>r$,createConfiguredAgentTools:()=>d6,createAgentTeamsTools:()=>p2,createAgentTeam:()=>Qj,buildTeamProgressSummary:()=>p6,buildDelegatedAgentConfig:()=>u2,buildConfiguredAgentToolName:()=>z9,buildConfiguredAgentToolDescriptors:()=>T9,bootstrapAgentTeams:()=>B6,AgentTeamsRuntime:()=>G8,AgentTeam:()=>r6});import{existsSync as Tk,readdirSync as Nk,readFileSync as fk}from"node:fs";import{basename as W_,extname as Rk,join as Mk}from"node:path";import{stripUtf8Bom as Ek}from"@cline/shared";import{resolveAgentConfigSearchPaths as Ck}from"@cline/shared/storage";import j_ from"yaml";import{z as c0}from"zod";var Y_=c0.object({name:c0.string().trim().min(1),description:c0.string().trim().min(1),tools:c0.union([c0.string(),c0.array(c0.string())]).optional(),skills:c0.union([c0.string(),c0.array(c0.string())]).optional(),providerId:c0.string().trim().min(1).optional(),modelId:c0.string().trim().min(1).optional(),maxIterations:c0.number().int().positive().optional()});function wk($){$=Ek($);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,J=/^---[^\S\r\n]*(?:\r?\n|$)/gm;J.lastIndex=Q;let W,X=Array.from($.matchAll(J)).filter((j)=>j.index>=Q);for(let j of X){let Y=j.index,V=$.slice(Q,Y);try{let B=j_.parse(V);if(!B||typeof B!=="object"||Array.isArray(B))continue;Y_.parse(B);let H=$.slice(Y+j[0].length);W={frontmatter:V,body:H}}catch{}}if(W)return W;throw Error("Missing closing YAML frontmatter delimiter in agent config file.")}function X_($){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 Pk($){return $.trim().toLowerCase()}function Sk($){let Z=Rk($).toLowerCase();return Z===".yml"||Z===".yaml"}function q9($,Z={}){let{frontmatter:Q,body:J}=wk($),W=j_.parse(Q);if(!W||typeof W!=="object"||Array.isArray(W))throw Error("Agent config frontmatter must be a YAML mapping.");let X=Y_.parse(W),j=J.trim();if(!j)throw Error("Missing system prompt body in agent config file.");return{name:X.name,description:X.description,tools:X_(X.tools),skills:X_(X.skills),providerId:X.providerId,modelId:X.modelId,maxIterations:X.maxIterations,systemPrompt:j,path:Z.path}}function u6($){let Z=$.searchPaths??Ck($.workspaceRoot),Q=new Map,J=[];for(let X of Z.filter(Boolean)){if(!Tk(X))continue;let j;try{j=Nk(X,{withFileTypes:!0})}catch(Y){J.push({path:X,error:Y instanceof Error?Y:Error(String(Y))});continue}for(let Y of j){if(!Y.isFile()||!Sk(Y.name))continue;let V=Mk(X,Y.name);try{let B=fk(V,"utf8"),H=q9(B,{path:V}),K=Pk(H.name);if(!Q.has(K))Q.set(K,H)}catch(B){J.push({path:V,error:B instanceof Error?B:Error(String(B))})}}}return{configs:Array.from(Q.values()).sort((X,j)=>(X.path?W_(X.path):X.name).localeCompare(j.path?W_(j.path):j.name)),errors:J}}import{createTool as bk,zodToJsonSchema as yk}from"@cline/shared";import{z as V_}from"zod";var $j="subagent_",g7=64,kk=V_.object({prompt:V_.string().trim().min(1).describe("Task for the subagent to perform")});function hk($){let Z="",Q=!0;for(let J of $.trim().toLowerCase()){let W=J.charCodeAt(0);if(!(W>=97&&W<=122||W>=48&&W<=57||J==="_")||J==="_"){if(!Q)Z+="_",Q=!0;continue}Z+=J,Q=!1}return Q?Z.slice(0,-1):Z}function Ik($){let Z=2166136261;for(let Q=0;Q<$.length;Q++)Z^=$.charCodeAt(Q),Z=Math.imul(Z,16777619);return(Z>>>0).toString(36)}function z9($){let Z=hk($)||"agent",Q=Ik($).slice(0,6),J=`${$j}${Z}`;if(J.length<=g7)return J;let W=g7-$j.length-Q.length-1,X=Z.slice(0,Math.max(1,W));return`${$j}${X}_${Q}`.slice(0,g7)}function T9($){let Z=new Set,Q=[];for(let J of[...$].sort((W,X)=>W.name.localeCompare(X.name))){let W=z9(J.name),X=W,j=2;while(Z.has(X)){let Y=`_${j++}`,V=Math.max(1,g7-Y.length);X=`${W.slice(0,V)}${Y}`}Z.add(X),Q.push({toolName:X,config:J})}return Q}function xk($,Z){return{...$,providerId:Z.providerId??$.providerId,modelId:Z.modelId??$.modelId,maxIterations:Z.maxIterations??$.maxIterations}}function d6($){return T9($.agents).map(({toolName:Z,config:Q})=>{return bk({name:Z,description:`Use the "${Q.name}" subagent: ${Q.description}`,inputSchema:yk(kk),execute:async(W,X)=>{let j=$.configProvider.getRuntimeConfig(),Y=i$(xk(j,Q)),V=$.createSubAgentTools?await $.createSubAgentTools(Q,W,X):[],B=r$({kind:"subagent",prompt:Q.systemPrompt,configProvider:Y,tools:V,maxIterations:Q.maxIterations,parentAgentId:X.agentId,abortSignal:X.signal,onEvent:$.onSubAgentEvent,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval}),H=B.getAgentId(),K=B.getConversationId(),G=X.agentId,F={systemPrompt:Q.systemPrompt,task:W.prompt};if($.onSubAgentStart)try{await $.onSubAgentStart({subAgentId:H,conversationId:K,parentAgentId:G,input:F})}catch{}try{let U=await B.run(W.prompt),_={text:U.text,iterations:U.iterations,finishReason:U.finishReason,usage:{inputTokens:U.usage.inputTokens,outputTokens:U.usage.outputTokens}};if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:H,conversationId:K,parentAgentId:G,input:F,result:_,agentResult:U})}catch{}return _}catch(U){if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:H,conversationId:K,parentAgentId:G,input:F,error:U instanceof Error?U:Error(String(U))})}catch{}throw U}},timeoutMs:300000,retryable:!1})})}function I1(){return new Date().toISOString()}function B_($,Z){if(Z<=0)return 0;return Math.round($/Z*100)}function gk($,Z){let Q=new Set;for(let W of Z)if(W.status==="reviewed")Q.add(`${W.outcomeId}:${W.section}`);let J=new Set;for(let W of $){if(W.status==="finalized")continue;for(let X of W.requiredSections)if(!Q.has(`${W.id}:${X}`))J.add(`${W.id}:${X}`)}return[...J].sort((W,X)=>W.localeCompare(X))}function p6($,Z){let Q={idle:0,running:0,stopped:0},J={pending:0,in_progress:0,blocked:0,completed:0},W={queued:0,running:0,completed:0,failed:0,cancelled:0,interrupted:0},X={draft:0,in_review:0,finalized:0},j={draft:0,reviewed:0,rejected:0},Y=0,V=0;for(let L of Z.members)if(Q[L.status]+=1,L.role==="lead")Y+=1;else V+=1;let B=[],H=[],K=Z.tasks.filter((L)=>L.status==="completed").length,G=new Map(Z.tasks.map((L)=>[L.id,L]));for(let L of Z.tasks){if(J[L.status]+=1,L.status==="blocked"){B.push(L.id);continue}if(L.status!=="pending")continue;if(L.dependsOn.every((D)=>{return G.get(D)?.status==="completed"}))H.push(L.id)}let F=[],U,_=0;for(let L of Z.runs){if(W[L.status]+=1,L.status==="queued"||L.status==="running")F.push(L.id);let O=L.startedAt.getTime();if(O>=_)_=O,U=L.id}for(let L of Z.outcomes)X[L.status]+=1;for(let L of Z.outcomeFragments)j[L.status]+=1;return{teamName:$,updatedAt:I1(),members:{total:Z.members.length,byStatus:Q,leadCount:Y,teammateCount:V},tasks:{total:Z.tasks.length,byStatus:J,blockedTaskIds:B,readyTaskIds:H,completionPct:B_(K,Z.tasks.length)},runs:{total:Z.runs.length,byStatus:W,activeRunIds:F,latestRunId:U},outcomes:{total:Z.outcomes.length,byStatus:X,finalizedPct:B_(X.finalized,Z.outcomes.length),missingRequiredSections:gk(Z.outcomes,Z.outcomeFragments)},fragments:{total:Z.outcomeFragments.length,byStatus:j}}}function l6($){let{event:Z}=$;switch(Z.type){case"team_task_updated":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:I1(),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:I1(),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:I1(),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:I1(),outcomeId:Z.outcome.id};case"outcome_fragment_attached":case"outcome_fragment_reviewed":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:I1(),outcomeId:Z.fragment.outcomeId,fragmentId:Z.fragment.id,agentId:Z.fragment.sourceAgentId};case"team_message":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:I1(),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:I1(),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:I1(),agentId:Z.agentId}}return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:I1()}}import{sanitizeFileName as vk,TeamMessageType as v}from"@cline/shared";import{nanoid as mk}from"nanoid";import{TeamMessageType as De}from"@cline/shared";function Zj($){if(typeof DOMException<"u"&&$ instanceof DOMException&&$.name==="AbortError")return!0;if(!($ instanceof Error))return!1;return $.name==="AbortError"||$.message.toLowerCase().includes("aborted")}function H_($,Z){return $?.status==="stopped"&&Zj(Z)}var ck=600000,K_="recovered_queued";function uk($){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.
544
+ ORDER BY started_at ASC LIMIT ?`,[$,Z]),J=[];for(let W of Q){let X=this.get(k1(W.session_id));if(X)J.push(X)}return J}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}}q2();import{existsSync as Hj,mkdirSync as rk,readFileSync as __,renameSync as nk,writeFileSync as ak}from"node:fs";import{join as L_}from"node:path";import{resolveSessionDataDir as ok}from"@cline/shared/storage";import{dirname as lk}from"node:path";import{nanoid as ik}from"nanoid";import{appendFileSync as Kk,existsSync as Gk,mkdirSync as $_,readFileSync as Fk,writeFileSync as Z_}from"node:fs";import{readFile as Q_,rm as Uk}from"node:fs/promises";import{dirname as J_,join as Dk}from"node:path";import{ensureHookLogDir as _k}from"@cline/shared/storage";import{randomUUID as jk}from"node:crypto";import{mkdir as Yk,open as tD,rename as Vk,rm as Bk}from"node:fs/promises";import{dirname as sD}from"node:path";async function Hk($){let Z;try{Z=await tD($,"r"),await Z.sync()}catch{}finally{if(Z!==void 0)try{await Z.close()}catch{}}}async function eD($,Z){await Yk(sD($),{recursive:!0});let Q=`${$}.${process.pid}.${jk()}.tmp`,J;try{J=await tD(Q,"wx"),await J.writeFile(Z,"utf8"),await J.sync(),await J.close(),J=void 0,await Vk(Q,$),await Hk(sD($))}catch(W){if(J!==void 0)try{await J.close()}catch{}try{await Bk(Q,{force:!0})}catch{}throw W}}function Lk($){return typeof $==="object"&&$!==null&&"code"in $&&$.code==="ENOENT"}class tX{adapter;messagesArtifactUploader;logger;artifacts;constructor($,Z,Q){this.adapter=$;this.messagesArtifactUploader=Z;this.logger=Q;this.artifacts=new AX(()=>this.ensureSessionsDir())}ensureSessionsDir(){return this.adapter.ensureSessionsDir()}initializeMessagesFile($,Z,Q){ZF(Z,Q,hW($))}writeSessionManifest($,Z){$_(J_($),{recursive:!0}),Z_($,`${JSON.stringify(n0.parse(Z),null,2)}
545
+ `,"utf8")}readSessionManifest($){return this.readManifestFile($).manifest}async readSessionManifestTitle($){let Z=this.artifacts.sessionManifestPath($,!1),Q;try{Q=await Q_(Z,"utf8")}catch{return}try{let J=JSON.parse(Q);if(!J||typeof J!=="object"||Array.isArray(J))return;let W=J.metadata;if(!W||typeof W!=="object"||Array.isArray(W))return;let X=W.title;return typeof X==="string"?X:void 0}catch{return}}readManifestFile($){let Z=this.artifacts.sessionManifestPath($,!1);if(!Gk(Z))return{path:Z};try{return{path:Z,manifest:n0.parse(JSON.parse(Fk(Z,"utf8")))}}catch{return{path:Z}}}async resolveArtifactPath($,Z,Q){let W=(await this.adapter.getSession($))?.[Z];return typeof W==="string"&&W.trim().length>0?W:Q($)}async persistSessionMessages($,Z,Q){let J=await this.resolveArtifactPath($,"messagesPath",(j)=>this.artifacts.sessionMessagesPath(j)),W=IW({updatedAt:V0(),context:hW($),messages:Z,systemPrompt:Q}),X=`${JSON.stringify(W,null,2)}
546
+ `;if($_(J_(J),{recursive:!0}),Z_(J,X,"utf8"),!this.messagesArtifactUploader)return;try{let j=await this.adapter.getSession($);await this.messagesArtifactUploader.uploadMessagesFile({sessionId:$,path:J,contents:X,row:j})}catch(j){this.logger?.debug("Failed to upload persisted session messages",{sessionId:$,error:j})}}resolveCompactionPath($){let{manifest:Z}=this.readManifestFile($);return Z?.compaction_path?.trim()||this.artifacts.sessionCompactionPath($)}updateCompactionPath($,Z){let Q=this.readManifestFile($);if(!Q.manifest)return;if(Q.manifest.compaction_path===Z)return;this.writeSessionManifest(Q.path,{...Q.manifest,compaction_path:Z})}async readSessionCompactionState($){let Z=this.resolveCompactionPath($);try{return D1(JSON.parse(await Q_(Z,"utf8")))}catch(Q){if(Lk(Q))return;this.logger?.debug("Ignoring invalid session compaction state",{sessionId:$,path:Z,error:Q,recovery:"Canonical history is unchanged; deleting the sidecar is safe."});return}}async persistSessionCompactionState($,Z){let Q=this.resolveCompactionPath($),J=p4.parse(Z);await eD(Q,`${JSON.stringify(J,null,2)}
547
+ `),this.updateCompactionPath($,Q)}async deleteSessionCompactionState($){await Uk(this.resolveCompactionPath($),{force:!0}),this.updateCompactionPath($,void 0)}appendStaleSessionHookLog($,Z,Q,J,W){let j=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??Dk(_k(),"hooks.jsonl");Kk(j,`${JSON.stringify({ts:$,hookName:"session_shutdown",reason:J,sessionId:Z,pid:Q,source:W})}
548
+ `,"utf8")}}import{appendFileSync as Ak}from"node:fs";import{join as Ok}from"node:path";import{resolveRootSessionId as W_}from"@cline/shared";import{ensureHookLogDir as qk}from"@cline/shared/storage";import{z as eX}from"zod";var zk="subagent",Tk=eX.looseObject({task:eX.string().optional(),systemPrompt:eX.string().optional()});class x7{adapter;manifestStore;toPersistedMessages;heartbeatLogIntervalMs;teamTaskSessionsByAgent=new Map;teamTaskLastHeartbeatBySession=new Map;teamTaskLastProgressLineBySession=new Map;constructor($,Z,Q,J){this.adapter=$;this.manifestStore=Z;this.toPersistedMessages=Q;this.heartbeatLogIntervalMs=J}teamTaskQueueKey($,Z){return`${$}::${Z}`}activeTeamTaskSessionId($,Z){return this.teamTaskSessionsByAgent.get(this.teamTaskQueueKey($,Z))?.at(-1)}buildSubsessionRow($,Z){return{sessionId:Z.sessionId,source:zk,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:T5({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=W_($.sessionContext);if(!Z)return;let Q=Tk.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 J=K6(Z,$.agentId),W=await this.adapter.getSession(J),X=V0(),j=this.manifestStore.artifacts.subagentArtifactPaths(J,$.agentId,this.activeTeamTaskSessionId(Z,$.parentAgentId)),Y=$.prompt??W?.prompt??void 0;if(!Y)Y=await this.adapter.claimSpawnRequest(Z,$.parentAgentId)??`Subagent run by ${$.parentAgentId}`;if(!W)return await this.adapter.upsertSession(this.buildSubsessionRow(Q,{sessionId:J,parentSessionId:Z,parentAgentId:$.parentAgentId,agentId:$.agentId,conversationId:$.conversationId,prompt:Y,startedAt:X,...j})),this.manifestStore.initializeMessagesFile(J,j.messagesPath,X),J;return await this.adapter.updateSession({sessionId:J,setRunning:!0,parentSessionId:Z,parentAgentId:$.parentAgentId,agentId:$.agentId,conversationId:$.conversationId,prompt:W.prompt??Y??null,metadata:T5({metadata:W.metadata??void 0,prompt:W.prompt??Y??null}),expectedStatusLock:W.statusLock}),J}async upsertSubagentSessionFromHook($){if(!$.parent_agent_id)return;let Z=W_($.sessionContext);if(!Z)return;if($.hookName==="session_shutdown"){let Q=K6(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($,O5(Z))}async applySubagentStatusBySessionId($,Z){let Q=await this.adapter.getSession($);if(!Q)return;let J=_0(Z)?null:V0(),W=_0(Z)?null:Z==="failed"?1:0;await this.adapter.updateSession({sessionId:$,status:Z,endedAt:J,exitCode:W,expectedStatusLock:Q.statusLock})}async applyStatusToRunningChildSessions($,Z){if(!$)return;let Q=await this.adapter.listSessions({limit:2000,parentSessionId:$,status:"running"});for(let J of Q)await this.applySubagentStatusBySessionId(J.sessionId,Z)}async onTeamTaskStart($,Z,Q){let J=await this.adapter.getSession($);if(!J)return;let W=L5($,Z),X=V0(),{messagesPath:j}=this.manifestStore.artifacts.subagentArtifactPaths(W,Z);await this.adapter.upsertSession(this.buildSubsessionRow(J,{sessionId:W,parentSessionId:$,parentAgentId:"lead",agentId:Z,prompt:Q||`Team task for ${Z}`,startedAt:X,messagesPath:j})),this.manifestStore.initializeMessagesFile(W,j,X);let Y=this.teamTaskQueueKey($,Z),V=this.teamTaskSessionsByAgent.get(Y)??[];V.push(W),this.teamTaskSessionsByAgent.set(Y,V)}async onTeamTaskEnd($,Z,Q,J,W,X){let j=this.teamTaskQueueKey($,Z),Y=this.teamTaskSessionsByAgent.get(j);if(!Y||Y.length===0)return;let V=Y.shift();if(Y.length===0)this.teamTaskSessionsByAgent.delete(j);if(!V)return;let B=W?.messages??X,H=this.toPersistedMessages(B,W,X);if(H)await this.manifestStore.persistSessionMessages(V,H);await this.applySubagentStatusBySessionId(V,Q),this.teamTaskLastHeartbeatBySession.delete(V),this.teamTaskLastProgressLineBySession.delete(V)}async onTeamTaskProgress($,Z,Q,J){let W=this.teamTaskQueueKey($,Z),X=this.teamTaskSessionsByAgent.get(W)?.[0];if(!X)return;let j=Q.trim();if(!j)return;let Y=J?.kind??"progress";if(Y==="heartbeat"){let B=Date.now(),H=this.teamTaskLastHeartbeatBySession.get(X)??0;if(B-H<this.heartbeatLogIntervalMs)return;this.teamTaskLastHeartbeatBySession.set(X,B)}let V=Y==="heartbeat"?"[progress] heartbeat":Y==="text"?`[progress] text: ${j}`:`[progress] ${j}`;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 J=this.toPersistedMessages(Z.agentResult?.messages,Z.agentResult);if(J)await this.manifestStore.persistSessionMessages(Q,J);let W=Z.result?.finishReason??"completed";await this.applySubagentStatusBySessionId(Q,W==="aborted"?"cancelled":"completed")}appendSubagentHookAudit($){let Q=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??Ok(qk(),"hooks.jsonl");Ak(Q,`${JSON.stringify({ts:V0(),...$})}
549
+ `,"utf8")}}import{formatUserInputBlock as pk}from"@cline/shared";var D_={};w(D_,{toTeamProgressLifecycleEvent:()=>l6,sanitizeTeamName:()=>lG,reviveTeamStateDates:()=>EQ,parseConfiguredAgentConfig:()=>q9,loadConfiguredAgentConfigs:()=>u6,createWorkerReviewerTeam:()=>U_,createSpawnAgentTool:()=>n$,createDelegatedAgentConfigProvider:()=>i$,createDelegatedAgent:()=>r$,createConfiguredAgentTools:()=>d6,createAgentTeamsTools:()=>l2,createAgentTeam:()=>Qj,buildTeamProgressSummary:()=>p6,buildDelegatedAgentConfig:()=>d2,buildConfiguredAgentToolName:()=>z9,buildConfiguredAgentToolDescriptors:()=>T9,bootstrapAgentTeams:()=>H6,AgentTeamsRuntime:()=>F8,AgentTeam:()=>r6});import{existsSync as Nk,readdirSync as fk,readFileSync as Rk}from"node:fs";import{basename as X_,extname as Mk,join as Ek}from"node:path";import{stripUtf8Bom as Ck}from"@cline/shared";import{resolveAgentConfigSearchPaths as wk}from"@cline/shared/storage";import Y_ from"yaml";import{z as c0}from"zod";var V_=c0.object({name:c0.string().trim().min(1),description:c0.string().trim().min(1),tools:c0.union([c0.string(),c0.array(c0.string())]).optional(),skills:c0.union([c0.string(),c0.array(c0.string())]).optional(),providerId:c0.string().trim().min(1).optional(),modelId:c0.string().trim().min(1).optional(),maxIterations:c0.number().int().positive().optional()});function Pk($){$=Ck($);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,J=/^---[^\S\r\n]*(?:\r?\n|$)/gm;J.lastIndex=Q;let W,X=Array.from($.matchAll(J)).filter((j)=>j.index>=Q);for(let j of X){let Y=j.index,V=$.slice(Q,Y);try{let B=Y_.parse(V);if(!B||typeof B!=="object"||Array.isArray(B))continue;V_.parse(B);let H=$.slice(Y+j[0].length);W={frontmatter:V,body:H}}catch{}}if(W)return W;throw Error("Missing closing YAML frontmatter delimiter in agent config file.")}function j_($){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 Sk($){return $.trim().toLowerCase()}function bk($){let Z=Mk($).toLowerCase();return Z===".yml"||Z===".yaml"}function q9($,Z={}){let{frontmatter:Q,body:J}=Pk($),W=Y_.parse(Q);if(!W||typeof W!=="object"||Array.isArray(W))throw Error("Agent config frontmatter must be a YAML mapping.");let X=V_.parse(W),j=J.trim();if(!j)throw Error("Missing system prompt body in agent config file.");return{name:X.name,description:X.description,tools:j_(X.tools),skills:j_(X.skills),providerId:X.providerId,modelId:X.modelId,maxIterations:X.maxIterations,systemPrompt:j,path:Z.path}}function u6($){let Z=$.searchPaths??wk($.workspaceRoot),Q=new Map,J=[];for(let X of Z.filter(Boolean)){if(!Nk(X))continue;let j;try{j=fk(X,{withFileTypes:!0})}catch(Y){J.push({path:X,error:Y instanceof Error?Y:Error(String(Y))});continue}for(let Y of j){if(!Y.isFile()||!bk(Y.name))continue;let V=Ek(X,Y.name);try{let B=Rk(V,"utf8"),H=q9(B,{path:V}),K=Sk(H.name);if(!Q.has(K))Q.set(K,H)}catch(B){J.push({path:V,error:B instanceof Error?B:Error(String(B))})}}}return{configs:Array.from(Q.values()).sort((X,j)=>(X.path?X_(X.path):X.name).localeCompare(j.path?X_(j.path):j.name)),errors:J}}import{createTool as yk,zodToJsonSchema as kk}from"@cline/shared";import{z as B_}from"zod";var $j="subagent_",g7=64,hk=B_.object({prompt:B_.string().trim().min(1).describe("Task for the subagent to perform")});function Ik($){let Z="",Q=!0;for(let J of $.trim().toLowerCase()){let W=J.charCodeAt(0);if(!(W>=97&&W<=122||W>=48&&W<=57||J==="_")||J==="_"){if(!Q)Z+="_",Q=!0;continue}Z+=J,Q=!1}return Q?Z.slice(0,-1):Z}function xk($){let Z=2166136261;for(let Q=0;Q<$.length;Q++)Z^=$.charCodeAt(Q),Z=Math.imul(Z,16777619);return(Z>>>0).toString(36)}function z9($){let Z=Ik($)||"agent",Q=xk($).slice(0,6),J=`${$j}${Z}`;if(J.length<=g7)return J;let W=g7-$j.length-Q.length-1,X=Z.slice(0,Math.max(1,W));return`${$j}${X}_${Q}`.slice(0,g7)}function T9($){let Z=new Set,Q=[];for(let J of[...$].sort((W,X)=>W.name.localeCompare(X.name))){let W=z9(J.name),X=W,j=2;while(Z.has(X)){let Y=`_${j++}`,V=Math.max(1,g7-Y.length);X=`${W.slice(0,V)}${Y}`}Z.add(X),Q.push({toolName:X,config:J})}return Q}function gk($,Z){return{...$,providerId:Z.providerId??$.providerId,modelId:Z.modelId??$.modelId,maxIterations:Z.maxIterations??$.maxIterations}}function d6($){return T9($.agents).map(({toolName:Z,config:Q})=>{return yk({name:Z,description:`Use the "${Q.name}" subagent: ${Q.description}`,inputSchema:kk(hk),execute:async(W,X)=>{let j=$.configProvider.getRuntimeConfig(),Y=i$(gk(j,Q)),V=$.createSubAgentTools?await $.createSubAgentTools(Q,W,X):[],B=r$({kind:"subagent",prompt:Q.systemPrompt,configProvider:Y,tools:V,maxIterations:Q.maxIterations,parentAgentId:X.agentId,abortSignal:X.signal,onEvent:$.onSubAgentEvent,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval}),H=B.getAgentId(),K=B.getConversationId(),G=X.agentId,F={systemPrompt:Q.systemPrompt,task:W.prompt};if($.onSubAgentStart)try{await $.onSubAgentStart({subAgentId:H,conversationId:K,parentAgentId:G,input:F})}catch{}try{let U=await B.run(W.prompt),_={text:U.text,iterations:U.iterations,finishReason:U.finishReason,usage:{inputTokens:U.usage.inputTokens,outputTokens:U.usage.outputTokens}};if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:H,conversationId:K,parentAgentId:G,input:F,result:_,agentResult:U})}catch{}return _}catch(U){if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:H,conversationId:K,parentAgentId:G,input:F,error:U instanceof Error?U:Error(String(U))})}catch{}throw U}},timeoutMs:300000,retryable:!1})})}function I1(){return new Date().toISOString()}function H_($,Z){if(Z<=0)return 0;return Math.round($/Z*100)}function vk($,Z){let Q=new Set;for(let W of Z)if(W.status==="reviewed")Q.add(`${W.outcomeId}:${W.section}`);let J=new Set;for(let W of $){if(W.status==="finalized")continue;for(let X of W.requiredSections)if(!Q.has(`${W.id}:${X}`))J.add(`${W.id}:${X}`)}return[...J].sort((W,X)=>W.localeCompare(X))}function p6($,Z){let Q={idle:0,running:0,stopped:0},J={pending:0,in_progress:0,blocked:0,completed:0},W={queued:0,running:0,completed:0,failed:0,cancelled:0,interrupted:0},X={draft:0,in_review:0,finalized:0},j={draft:0,reviewed:0,rejected:0},Y=0,V=0;for(let L of Z.members)if(Q[L.status]+=1,L.role==="lead")Y+=1;else V+=1;let B=[],H=[],K=Z.tasks.filter((L)=>L.status==="completed").length,G=new Map(Z.tasks.map((L)=>[L.id,L]));for(let L of Z.tasks){if(J[L.status]+=1,L.status==="blocked"){B.push(L.id);continue}if(L.status!=="pending")continue;if(L.dependsOn.every((D)=>{return G.get(D)?.status==="completed"}))H.push(L.id)}let F=[],U,_=0;for(let L of Z.runs){if(W[L.status]+=1,L.status==="queued"||L.status==="running")F.push(L.id);let O=L.startedAt.getTime();if(O>=_)_=O,U=L.id}for(let L of Z.outcomes)X[L.status]+=1;for(let L of Z.outcomeFragments)j[L.status]+=1;return{teamName:$,updatedAt:I1(),members:{total:Z.members.length,byStatus:Q,leadCount:Y,teammateCount:V},tasks:{total:Z.tasks.length,byStatus:J,blockedTaskIds:B,readyTaskIds:H,completionPct:H_(K,Z.tasks.length)},runs:{total:Z.runs.length,byStatus:W,activeRunIds:F,latestRunId:U},outcomes:{total:Z.outcomes.length,byStatus:X,finalizedPct:H_(X.finalized,Z.outcomes.length),missingRequiredSections:vk(Z.outcomes,Z.outcomeFragments)},fragments:{total:Z.outcomeFragments.length,byStatus:j}}}function l6($){let{event:Z}=$;switch(Z.type){case"team_task_updated":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:I1(),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:I1(),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:I1(),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:I1(),outcomeId:Z.outcome.id};case"outcome_fragment_attached":case"outcome_fragment_reviewed":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:I1(),outcomeId:Z.fragment.outcomeId,fragmentId:Z.fragment.id,agentId:Z.fragment.sourceAgentId};case"team_message":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:I1(),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:I1(),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:I1(),agentId:Z.agentId}}return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:I1()}}import{sanitizeFileName as mk,TeamMessageType as v}from"@cline/shared";import{nanoid as ck}from"nanoid";import{TeamMessageType as ze}from"@cline/shared";function Zj($){if(typeof DOMException<"u"&&$ instanceof DOMException&&$.name==="AbortError")return!0;if(!($ instanceof Error))return!1;return $.name==="AbortError"||$.message.toLowerCase().includes("aborted")}function K_($,Z){return $?.status==="stopped"&&Zj(Z)}var uk=600000,G_="recovered_queued";function dk($){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.
550
550
 
551
551
  ${$.message}`}class r6{agents=new Map;configs=new Map;onTeamEvent;constructor($,Z){if(this.onTeamEvent=Z,$)for(let[Q,J]of Object.entries($))this.addAgent(Q,J)}addAgent($,Z){if(this.agents.has($))throw Error(`Agent with id "${$}" already exists in the team`);let Q={...Z,onEvent:(W)=>{Z.onEvent?.(W),this.emitEvent({type:v.AgentEvent,agentId:$,event:W})}},J=new l$(Q);if(Q.onEvent)J.subscribeEvents(Q.onEvent);this.agents.set($,J),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:v.TaskStart,agentId:$,message:Z});try{let J=await Q.run(Z);return this.emitEvent({type:v.TaskEnd,agentId:$,result:J}),J}catch(J){let W=J instanceof Error?J:Error(String(J));throw this.emitEvent({type:v.TaskEnd,agentId:$,error:W,messages:Q.getMessages()}),J}}async continueTo($,Z){let Q=this.agents.get($);if(!Q)throw Error(`Agent "${$}" not found in team`);this.emitEvent({type:v.TaskStart,agentId:$,message:Z});try{let J=await Q.continue(Z);return this.emitEvent({type:v.TaskEnd,agentId:$,result:J}),J}catch(J){let W=J instanceof Error?J:Error(String(J));throw this.emitEvent({type:v.TaskEnd,agentId:$,error:W,messages:Q.getMessages()}),J}}async runParallel($){let Z=$.map(async(Q)=>{let J=this.agents.get(Q.agentId);if(!J)return{agentId:Q.agentId,result:void 0,error:Error(`Agent "${Q.agentId}" not found in team`),metadata:Q.metadata};this.emitEvent({type:v.TaskStart,agentId:Q.agentId,message:Q.message});try{let W=await J.run(Q.message);return this.emitEvent({type:v.TaskEnd,agentId:Q.agentId,result:W}),{agentId:Q.agentId,result:W,metadata:Q.metadata}}catch(W){let X=W instanceof Error?W:Error(String(W));return this.emitEvent({type:v.TaskEnd,agentId:Q.agentId,error:X,messages:J.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 J=this.agents.get(Q.agentId);if(!J){Z.push({agentId:Q.agentId,result:void 0,error:Error(`Agent "${Q.agentId}" not found in team`),metadata:Q.metadata});continue}this.emitEvent({type:v.TaskStart,agentId:Q.agentId,message:Q.message});try{let W=await J.run(Q.message);this.emitEvent({type:v.TaskEnd,agentId:Q.agentId,result:W}),Z.push({agentId:Q.agentId,result:W,metadata:Q.metadata})}catch(W){let X=W instanceof Error?W:Error(String(W));this.emitEvent({type:v.TaskEnd,agentId:Q.agentId,error:X,messages:J.getMessages()}),Z.push({agentId:Q.agentId,result:void 0,error:X,metadata:Q.metadata})}}return Z}async runPipeline($,Z,Q){let J=[],W=Z;for(let X of $){let j=this.agents.get(X);if(!j){J.push({agentId:X,result:void 0,error:Error(`Agent "${X}" not found in team`)});break}this.emitEvent({type:v.TaskStart,agentId:X,message:W});try{let Y=await j.run(W);this.emitEvent({type:v.TaskEnd,agentId:X,result:Y}),J.push({agentId:X,result:Y});let V=$.indexOf(X)+1;if(V<$.length){let B=$[V];W=Q?Q(Y,B):`Previous agent output:
552
552
  ${Y.text}
553
553
 
554
- Please continue from here.`}}catch(Y){let V=Y instanceof Error?Y:Error(String(Y));this.emitEvent({type:v.TaskEnd,agentId:X,error:V,messages:j.getMessages()}),J.push({agentId:X,result:void 0,error:V});break}}return J}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 Qj($,Z){return new r6($,Z)}function F_($){let Z=Qj({worker:$.worker,reviewer:$.reviewer}),Q=Z;return Q.doAndReview=async(J)=>{let W=await Z.routeTo("worker",J),X=await Z.routeTo("reviewer",`Please review this work:
554
+ Please continue from here.`}}catch(Y){let V=Y instanceof Error?Y:Error(String(Y));this.emitEvent({type:v.TaskEnd,agentId:X,error:V,messages:j.getMessages()}),J.push({agentId:X,result:void 0,error:V});break}}return J}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 Qj($,Z){return new r6($,Z)}function U_($){let Z=Qj({worker:$.worker,reviewer:$.reviewer}),Q=Z;return Q.doAndReview=async(J)=>{let W=await Z.routeTo("worker",J),X=await Z.routeTo("reviewer",`Please review this work:
555
555
 
556
- ${W.text}`);return{workerResult:W,reviewResult:X}},Q}class G8{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_${vk(mk(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,J=Z?.markRead??!0,W=Z?.limit,X=this.mailbox.filter((Y)=>Y.toAgentId===$&&(!Q||!Y.readAt)),j=typeof W==="number"&&W>0?X.slice(Math.max(0,X.length-W)):X;if(J){let Y=new Date;for(let V of j)if(!V.readAt)V.readAt=Y}return j.map((Y)=>({...Y}))}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,i6($.tasks.map((Q)=>Q.id),"task_")),this.messageCounter=Math.max(this.messageCounter,i6($.mailbox.map((Q)=>Q.id),"msg_")),this.missionCounter=Math.max(this.missionCounter,i6($.missionLog.map((Q)=>Q.id),"log_")),this.runCounter=Math.max(this.runCounter,i6(($.runs??[]).map((Q)=>Q.id),"run_")),this.outcomeCounter=Math.max(this.outcomeCounter,i6(($.outcomes??[]).map((Q)=>Q.id),"out_")),this.outcomeFragmentCounter=Math.max(this.outcomeFragmentCounter,i6(($.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 J={...Z,apiTimeoutMs:ck,consumePendingUserMessage:()=>{let j=this.members.get($);if(!j||!j.pendingSteerMessage)return;let Y=j.pendingSteerMessage;return j.pendingSteerMessage=void 0,Y},onEvent:(j)=>{Z.onEvent?.(j),this.emitEvent({type:v.AgentEvent,agentId:$,event:j}),this.trackMeaningfulEvent($,j)}},W=new l$(J);if(J.onEvent)W.subscribeEvents(J.onEvent);let X={agentId:$,role:"teammate",description:Z.role,status:"idle",agent:W,runningCount:0,lastMissionStep:0,lastMissionAt:Date.now()};return this.members.set($,X),this.emitEvent({type:v.TeammateSpawned,agentId:$,role:Z.role,teammate:{rolePrompt:Z.systemPrompt,modelId:Z.modelId,maxIterations:Z.maxIterations,runtimeAgentId:W.getAgentId(),conversationId:W.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(J){if(!Zj(J))throw J}Q.status="stopped",this.emitEvent({type:v.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,J={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,J),this.emitEvent({type:v.TeamTaskUpdated,task:{...J}}),{...J}}claimTask($,Z){let Q=this.requireTask($);return this.assertDependenciesResolved(Q),Q.status="in_progress",Q.assignee=Z,Q.updatedAt=new Date,this.emitEvent({type:v.TeamTaskUpdated,task:{...Q}}),this.appendMissionLog({agentId:Z,taskId:$,kind:"progress",summary:`Claimed task "${Q.title}"`}),{...Q}}blockTask($,Z,Q){let J=this.requireTask($);return J.status="blocked",J.updatedAt=new Date,J.summary=Q,this.emitEvent({type:v.TeamTaskUpdated,task:{...J}}),this.appendMissionLog({agentId:Z,taskId:$,kind:"blocked",summary:Q}),{...J}}completeTask($,Z,Q){let J=this.requireTask($);if(J.status="completed",J.updatedAt=new Date,J.summary=Q,!J.assignee)J.assignee=Z;return this.emitEvent({type:v.TeamTaskUpdated,task:{...J}}),this.appendMissionLog({agentId:Z,taskId:$,kind:"done",summary:Q}),{...J}}async routeToTeammate($,Z,Q){let J=this.members.get($);if(!J||J.role!=="teammate"||!J.agent)throw Error(`Teammate "${$}" was not found`);if(!J.agent.canStartRun())throw Error("Cannot start a new run while another run is already in progress");J.runningCount++,J.status="running",this.emitEvent({type:v.TaskStart,agentId:$,message:Z});try{let W=this.listMailbox($,{unreadOnly:!0,markRead:!0}),X=W.length>0?`${this.buildMailboxNotification(W)}
556
+ ${W.text}`);return{workerResult:W,reviewResult:X}},Q}class F8{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_${mk(ck(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,J=Z?.markRead??!0,W=Z?.limit,X=this.mailbox.filter((Y)=>Y.toAgentId===$&&(!Q||!Y.readAt)),j=typeof W==="number"&&W>0?X.slice(Math.max(0,X.length-W)):X;if(J){let Y=new Date;for(let V of j)if(!V.readAt)V.readAt=Y}return j.map((Y)=>({...Y}))}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,i6($.tasks.map((Q)=>Q.id),"task_")),this.messageCounter=Math.max(this.messageCounter,i6($.mailbox.map((Q)=>Q.id),"msg_")),this.missionCounter=Math.max(this.missionCounter,i6($.missionLog.map((Q)=>Q.id),"log_")),this.runCounter=Math.max(this.runCounter,i6(($.runs??[]).map((Q)=>Q.id),"run_")),this.outcomeCounter=Math.max(this.outcomeCounter,i6(($.outcomes??[]).map((Q)=>Q.id),"out_")),this.outcomeFragmentCounter=Math.max(this.outcomeFragmentCounter,i6(($.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 J={...Z,apiTimeoutMs:uk,consumePendingUserMessage:()=>{let j=this.members.get($);if(!j||!j.pendingSteerMessage)return;let Y=j.pendingSteerMessage;return j.pendingSteerMessage=void 0,Y},onEvent:(j)=>{Z.onEvent?.(j),this.emitEvent({type:v.AgentEvent,agentId:$,event:j}),this.trackMeaningfulEvent($,j)}},W=new l$(J);if(J.onEvent)W.subscribeEvents(J.onEvent);let X={agentId:$,role:"teammate",description:Z.role,status:"idle",agent:W,runningCount:0,lastMissionStep:0,lastMissionAt:Date.now()};return this.members.set($,X),this.emitEvent({type:v.TeammateSpawned,agentId:$,role:Z.role,teammate:{rolePrompt:Z.systemPrompt,modelId:Z.modelId,maxIterations:Z.maxIterations,runtimeAgentId:W.getAgentId(),conversationId:W.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(J){if(!Zj(J))throw J}Q.status="stopped",this.emitEvent({type:v.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,J={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,J),this.emitEvent({type:v.TeamTaskUpdated,task:{...J}}),{...J}}claimTask($,Z){let Q=this.requireTask($);return this.assertDependenciesResolved(Q),Q.status="in_progress",Q.assignee=Z,Q.updatedAt=new Date,this.emitEvent({type:v.TeamTaskUpdated,task:{...Q}}),this.appendMissionLog({agentId:Z,taskId:$,kind:"progress",summary:`Claimed task "${Q.title}"`}),{...Q}}blockTask($,Z,Q){let J=this.requireTask($);return J.status="blocked",J.updatedAt=new Date,J.summary=Q,this.emitEvent({type:v.TeamTaskUpdated,task:{...J}}),this.appendMissionLog({agentId:Z,taskId:$,kind:"blocked",summary:Q}),{...J}}completeTask($,Z,Q){let J=this.requireTask($);if(J.status="completed",J.updatedAt=new Date,J.summary=Q,!J.assignee)J.assignee=Z;return this.emitEvent({type:v.TeamTaskUpdated,task:{...J}}),this.appendMissionLog({agentId:Z,taskId:$,kind:"done",summary:Q}),{...J}}async routeToTeammate($,Z,Q){let J=this.members.get($);if(!J||J.role!=="teammate"||!J.agent)throw Error(`Teammate "${$}" was not found`);if(!J.agent.canStartRun())throw Error("Cannot start a new run while another run is already in progress");J.runningCount++,J.status="running",this.emitEvent({type:v.TaskStart,agentId:$,message:Z});try{let W=this.listMailbox($,{unreadOnly:!0,markRead:!0}),X=W.length>0?`${this.buildMailboxNotification(W)}
557
557
 
558
- ${Z}`:Z,j=Q?.continueConversation?await J.agent.continue(X):await J.agent.run(X);return this.emitEvent({type:v.TaskEnd,agentId:$,result:j}),this.recordProgressStep($,`Completed a delegated run (${j.iterations} iterations)`,Q?.taskId,!0),j}catch(W){let X=W instanceof Error?W:Error(String(W));if(this.emitEvent({type:v.TaskEnd,agentId:$,error:X,messages:J.agent.getMessages()}),!H_(J,X))this.appendMissionLog({agentId:$,taskId:Q?.taskId,kind:"error",summary:X.message});throw X}finally{if(J.runningCount--,J.runningCount<=0&&this.members.get($)?.status!=="stopped")J.status="idle"}}startTeammateRun($,Z,Q){let J=`run_${String(++this.runCounter).padStart(5,"0")}`,W={id:J,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(J,W),this.runQueue.push(J),this.emitEvent({type:v.RunQueued,run:{...W}}),this.dispatchQueuedRuns(),{...W}}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[J]=this.runQueue.splice(Q,1),W=J?this.runs.get(J):void 0;if(!W||W.status!=="queued")continue;this.executeQueuedRun(W)}this.scheduleQueuedRunDispatch($)}selectNextDispatchableQueuedRun(){let $=-1,Z=Number.NEGATIVE_INFINITY,Q,J=Date.now();for(let W=0;W<this.runQueue.length;W++){let X=this.runs.get(this.runQueue[W]);if(!X||X.status!=="queued")continue;if(X.nextAttemptAt&&X.nextAttemptAt.getTime()>J){if(!Q||X.nextAttemptAt<Q)Q=X.nextAttemptAt;continue}if(X.priority>Z)Z=X.priority,$=W}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===K_;$.nextAttemptAt=void 0,$.status="running",$.startedAt=new Date,$.heartbeatAt=new Date,$.currentActivity="run_started",this.emitEvent({type:v.RunStarted,run:{...$}});let Q=setInterval(()=>{if($.status!=="running")return;this.recordRunProgress($,"heartbeat")},2000);try{let J=Z?uk($):$.message,W=await this.routeToTeammate($.agentId,J,{taskId:$.taskId,continueConversation:$.continueConversation});if(W.finishReason==="error")throw Error(W.text||"Teammate run failed");$.status="completed",$.result=W,$.endedAt=new Date,$.currentActivity="completed",this.emitEvent({type:v.RunCompleted,run:{...$}})}catch(J){let W=J instanceof Error?J.message:String(J??"Unknown error");$.error=W,$.endedAt=new Date;let X=this.members.get($.agentId);if(H_(X,J))$.status="cancelled",$.currentActivity="cancelled",this.emitEvent({type:v.RunCancelled,run:{...$},reason:W});else if($.retryCount<$.maxRetries)$.retryCount++,$.status="queued",$.nextAttemptAt=new Date(Date.now()+Math.min(30000,1000*2**$.retryCount)),this.runQueue.push($.id),this.recordRunProgress($,`retry_scheduled_${$.retryCount}`);else $.status="failed",$.currentActivity="failed",this.emitEvent({type:v.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 G_(Z);return{...Q}}async awaitAllRuns($=250){while(Array.from(this.runs.values()).some((Z)=>["queued","running"].includes(Z.status)))await G_($);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 J=this.runQueue.indexOf($);if(J>=0)this.runQueue.splice(J,1);return this.emitEvent({type:v.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 J=this.members.get(Q.agentId);if(!J||J.role!=="teammate"||!J.agent){Q.status="interrupted",Q.error="teammate_unavailable_after_recovery",Q.endedAt=new Date,Q.currentActivity="interrupted",this.emitEvent({type:v.RunInterrupted,run:{...Q},reason:Q.error});continue}let W=new Date;if(Q.status="queued",Q.error=void 0,Q.endedAt=void 0,Q.heartbeatAt=W,Q.lastProgressAt=W,Q.lastProgressMessage=$,Q.currentActivity=K_,!this.runQueue.includes(Q.id))this.runQueue.push(Q.id);Z.push({...Q}),this.emitEvent({type:v.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:v.RunInterrupted,run:{...Q},reason:$})}return this.runQueue.length=0,this.clearQueuedRunDispatchTimer(),Z}sendMessage($,Z,Q,J,W){if(!this.members.has($))throw Error(`Unknown sender "${$}"`);let X=this.members.get(Z);if(!X)throw Error(`Unknown recipient "${Z}"`);let j={id:`msg_${String(++this.messageCounter).padStart(5,"0")}`,teamId:this.teamId,fromAgentId:$,toAgentId:Z,subject:Q,body:J,taskId:W,sentAt:new Date};if(this.mailbox.push(j),this.emitEvent({type:v.TeamMessage,message:{...j}}),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{...j}}broadcast($,Z,Q,J){let W=[];for(let X of this.members.values()){if(X.agentId===$)continue;if(X.role==="lead")continue;W.push(this.sendMessage($,X.agentId,Z,Q,J?.taskId))}return W}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:v.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:v.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:v.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:v.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 J of Z.requiredSections)if(!Q.some((X)=>X.section===J&&X.status==="reviewed"))throw Error(`Outcome "${$}" cannot be finalized. Section "${J}" is missing a reviewed fragment.`);return Z.status="finalized",Z.finalizedAt=new Date,this.emitEvent({type:v.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(!Zj(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 J of this.runs.values()){if(J.agentId!==$||J.status!=="running")continue;this.recordRunProgress(J,Q)}}recordRunProgress($,Z){let Q=new Date;$.heartbeatAt=Q,$.lastProgressAt=Q,$.lastProgressMessage=Z,$.currentActivity=Z,this.emitEvent({type:v.RunProgress,run:{...$},message:Z})}formatProgressErrorActivity($,Z){let Q=Z.replace(/\s+/g," ").trim();if(Q.length===0)return $;let J=Q.length>240?`${Q.slice(0,237).trimEnd()}...`:Q;return`${$}: ${J}`}recordProgressStep($,Z,Q,J=!1){this.missionStepCounter++;let W=this.members.get($);if(!W)return;let X=this.missionStepCounter-W.lastMissionStep,j=Date.now()-W.lastMissionAt;if(!J&&X<this.missionLogIntervalSteps&&j<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(`
559
- `)}emitEvent($){try{this.onTeamEvent?.($)}catch{}}}function G_($){return new Promise((Z)=>setTimeout(Z,$))}function i6($,Z){let Q=0;for(let J of $){if(!J.startsWith(Z))continue;let W=Number.parseInt(J.slice(Z.length),10);if(Number.isFinite(W))Q=Math.max(Q,W)}return Q}function Jj($,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}),v7($);break}default:break}}async function Wj($,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 J=Z.event.text.replace(/\s+/g," ").trim().slice(0,120);if(J)await Q("onTeamTaskProgress",$,Z.agentId,J,{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 Xj($,Z,Q,J){if(!$.runtime.teamRuntime)return;let W=$.runtime.teamRuntime.getTeamName();J({type:"team_progress",payload:{sessionId:Z,teamName:W,lifecycle:l6({teamName:W,sessionId:Z,event:Q}),summary:p6(W,$.runtime.teamRuntime.exportState())}})}function N9($){return $.activeTeamRunIds.size>0||$.pendingTeamRunUpdates.length>0}function jj($,Z){if($.aborting)return!1;if(!(Z==="completed"||Z==="max_iterations"))return!1;return $.config.enableAgentTeams===!0&&N9($)}function v7($){let Z=$.teamRunWaiters.splice(0);for(let Q of Z)Q()}async function Yj($){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 Vj($,Z){let Q=Z.map((X)=>{let j=[`- ${X.runId} (${X.agentId}) -> ${X.status}`];if(X.taskId)j.push(` task=${X.taskId}`);if(typeof X.iterations==="number")j.push(` iterations=${X.iterations}`);if(X.error)j.push(` error=${X.error}`);return j.join("")}),J=$.activeTeamRunIds.size,W=J>0?`There are still ${J} 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 f9(`System-delivered teammate async run updates:
558
+ ${Z}`:Z,j=Q?.continueConversation?await J.agent.continue(X):await J.agent.run(X);return this.emitEvent({type:v.TaskEnd,agentId:$,result:j}),this.recordProgressStep($,`Completed a delegated run (${j.iterations} iterations)`,Q?.taskId,!0),j}catch(W){let X=W instanceof Error?W:Error(String(W));if(this.emitEvent({type:v.TaskEnd,agentId:$,error:X,messages:J.agent.getMessages()}),!K_(J,X))this.appendMissionLog({agentId:$,taskId:Q?.taskId,kind:"error",summary:X.message});throw X}finally{if(J.runningCount--,J.runningCount<=0&&this.members.get($)?.status!=="stopped")J.status="idle"}}startTeammateRun($,Z,Q){let J=`run_${String(++this.runCounter).padStart(5,"0")}`,W={id:J,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(J,W),this.runQueue.push(J),this.emitEvent({type:v.RunQueued,run:{...W}}),this.dispatchQueuedRuns(),{...W}}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[J]=this.runQueue.splice(Q,1),W=J?this.runs.get(J):void 0;if(!W||W.status!=="queued")continue;this.executeQueuedRun(W)}this.scheduleQueuedRunDispatch($)}selectNextDispatchableQueuedRun(){let $=-1,Z=Number.NEGATIVE_INFINITY,Q,J=Date.now();for(let W=0;W<this.runQueue.length;W++){let X=this.runs.get(this.runQueue[W]);if(!X||X.status!=="queued")continue;if(X.nextAttemptAt&&X.nextAttemptAt.getTime()>J){if(!Q||X.nextAttemptAt<Q)Q=X.nextAttemptAt;continue}if(X.priority>Z)Z=X.priority,$=W}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===G_;$.nextAttemptAt=void 0,$.status="running",$.startedAt=new Date,$.heartbeatAt=new Date,$.currentActivity="run_started",this.emitEvent({type:v.RunStarted,run:{...$}});let Q=setInterval(()=>{if($.status!=="running")return;this.recordRunProgress($,"heartbeat")},2000);try{let J=Z?dk($):$.message,W=await this.routeToTeammate($.agentId,J,{taskId:$.taskId,continueConversation:$.continueConversation});if(W.finishReason==="error")throw Error(W.text||"Teammate run failed");$.status="completed",$.result=W,$.endedAt=new Date,$.currentActivity="completed",this.emitEvent({type:v.RunCompleted,run:{...$}})}catch(J){let W=J instanceof Error?J.message:String(J??"Unknown error");$.error=W,$.endedAt=new Date;let X=this.members.get($.agentId);if(K_(X,J))$.status="cancelled",$.currentActivity="cancelled",this.emitEvent({type:v.RunCancelled,run:{...$},reason:W});else if($.retryCount<$.maxRetries)$.retryCount++,$.status="queued",$.nextAttemptAt=new Date(Date.now()+Math.min(30000,1000*2**$.retryCount)),this.runQueue.push($.id),this.recordRunProgress($,`retry_scheduled_${$.retryCount}`);else $.status="failed",$.currentActivity="failed",this.emitEvent({type:v.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 F_(Z);return{...Q}}async awaitAllRuns($=250){while(Array.from(this.runs.values()).some((Z)=>["queued","running"].includes(Z.status)))await F_($);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 J=this.runQueue.indexOf($);if(J>=0)this.runQueue.splice(J,1);return this.emitEvent({type:v.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 J=this.members.get(Q.agentId);if(!J||J.role!=="teammate"||!J.agent){Q.status="interrupted",Q.error="teammate_unavailable_after_recovery",Q.endedAt=new Date,Q.currentActivity="interrupted",this.emitEvent({type:v.RunInterrupted,run:{...Q},reason:Q.error});continue}let W=new Date;if(Q.status="queued",Q.error=void 0,Q.endedAt=void 0,Q.heartbeatAt=W,Q.lastProgressAt=W,Q.lastProgressMessage=$,Q.currentActivity=G_,!this.runQueue.includes(Q.id))this.runQueue.push(Q.id);Z.push({...Q}),this.emitEvent({type:v.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:v.RunInterrupted,run:{...Q},reason:$})}return this.runQueue.length=0,this.clearQueuedRunDispatchTimer(),Z}sendMessage($,Z,Q,J,W){if(!this.members.has($))throw Error(`Unknown sender "${$}"`);let X=this.members.get(Z);if(!X)throw Error(`Unknown recipient "${Z}"`);let j={id:`msg_${String(++this.messageCounter).padStart(5,"0")}`,teamId:this.teamId,fromAgentId:$,toAgentId:Z,subject:Q,body:J,taskId:W,sentAt:new Date};if(this.mailbox.push(j),this.emitEvent({type:v.TeamMessage,message:{...j}}),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{...j}}broadcast($,Z,Q,J){let W=[];for(let X of this.members.values()){if(X.agentId===$)continue;if(X.role==="lead")continue;W.push(this.sendMessage($,X.agentId,Z,Q,J?.taskId))}return W}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:v.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:v.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:v.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:v.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 J of Z.requiredSections)if(!Q.some((X)=>X.section===J&&X.status==="reviewed"))throw Error(`Outcome "${$}" cannot be finalized. Section "${J}" is missing a reviewed fragment.`);return Z.status="finalized",Z.finalizedAt=new Date,this.emitEvent({type:v.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(!Zj(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 J of this.runs.values()){if(J.agentId!==$||J.status!=="running")continue;this.recordRunProgress(J,Q)}}recordRunProgress($,Z){let Q=new Date;$.heartbeatAt=Q,$.lastProgressAt=Q,$.lastProgressMessage=Z,$.currentActivity=Z,this.emitEvent({type:v.RunProgress,run:{...$},message:Z})}formatProgressErrorActivity($,Z){let Q=Z.replace(/\s+/g," ").trim();if(Q.length===0)return $;let J=Q.length>240?`${Q.slice(0,237).trimEnd()}...`:Q;return`${$}: ${J}`}recordProgressStep($,Z,Q,J=!1){this.missionStepCounter++;let W=this.members.get($);if(!W)return;let X=this.missionStepCounter-W.lastMissionStep,j=Date.now()-W.lastMissionAt;if(!J&&X<this.missionLogIntervalSteps&&j<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(`
559
+ `)}emitEvent($){try{this.onTeamEvent?.($)}catch{}}}function F_($){return new Promise((Z)=>setTimeout(Z,$))}function i6($,Z){let Q=0;for(let J of $){if(!J.startsWith(Z))continue;let W=Number.parseInt(J.slice(Z.length),10);if(Number.isFinite(W))Q=Math.max(Q,W)}return Q}function Jj($,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}),v7($);break}default:break}}async function Wj($,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 J=Z.event.text.replace(/\s+/g," ").trim().slice(0,120);if(J)await Q("onTeamTaskProgress",$,Z.agentId,J,{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 Xj($,Z,Q,J){if(!$.runtime.teamRuntime)return;let W=$.runtime.teamRuntime.getTeamName();J({type:"team_progress",payload:{sessionId:Z,teamName:W,lifecycle:l6({teamName:W,sessionId:Z,event:Q}),summary:p6(W,$.runtime.teamRuntime.exportState())}})}function N9($){return $.activeTeamRunIds.size>0||$.pendingTeamRunUpdates.length>0}function jj($,Z){if($.aborting)return!1;if(!(Z==="completed"||Z==="max_iterations"))return!1;return $.config.enableAgentTeams===!0&&N9($)}function v7($){let Z=$.teamRunWaiters.splice(0);for(let Q of Z)Q()}async function Yj($){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 Vj($,Z){let Q=Z.map((X)=>{let j=[`- ${X.runId} (${X.agentId}) -> ${X.status}`];if(X.taskId)j.push(` task=${X.taskId}`);if(typeof X.iterations==="number")j.push(` iterations=${X.iterations}`);if(X.error)j.push(` error=${X.error}`);return j.join("")}),J=$.activeTeamRunIds.size,W=J>0?`There are still ${J} 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 f9(`System-delivered teammate async run updates:
560
560
  ${Q.join(`
561
561
  `)}
562
562
 
563
- ${W}`,$.config.mode)}function f9($,Z){return dk($,Z==="plan"?"plan":Z==="yolo"?"yolo":"act")}var Bj=4;class L${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 tX($,Z.messagesArtifactUploader,Z.logger),this.teamChildren=new x7($,this.manifestStore,(Q,J,W)=>this.toPersistedMessages(Q,J,W),L$.TEAM_HEARTBEAT_LOG_INTERVAL_MS)}toPersistedMessages($,Z,Q){if(!$)return;return Z?bQ(Z.messages,Z,Q):SQ($)}ensureSessionsDir(){return this.manifestStore.ensureSessionsDir()}writeSessionManifest($,Z){this.manifestStore.writeSessionManifest($,Z)}readSessionManifest($){return this.manifestStore.readSessionManifest($)}async createRootSessionWithArtifacts($){let Z=$.startedAt??V0(),Q=$.sessionId.trim(),J=Q.length>0?Q:`${Date.now()}_${lk(5)}`,W=this.manifestStore.artifacts.sessionMessagesPath(J),X=this.manifestStore.artifacts.sessionCompactionPath(J),j=this.manifestStore.artifacts.sessionManifestPath(J),Y=T5({metadata:$.metadata,prompt:$.prompt}),V={version:1,session_id:J,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:W};return await this.adapter.upsertSession({sessionId:J,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:V.prompt??null,metadata:a$(V.metadata),hookPath:"",messagesPath:W,updatedAt:V0()}),this.manifestStore.initializeMessagesFile(J,W,Z),this.manifestStore.writeSessionManifest(j,V),{manifestPath:j,messagesPath:W,compactionPath:X,manifest:V}}async updateSessionStatus($,Z,Q){let J;if((await QF(()=>this.adapter.getSession($),async(X)=>{return J=_0(Z)?void 0:V0(),this.adapter.updateSession({sessionId:$,status:Z,endedAt:J??null,exitCode:_0(Z)?null:typeof Q==="number"?Q:null,expectedStatusLock:X.statusLock})},Bj)).updated){if(Z==="cancelled")await this.teamChildren.applyStatusToRunningChildSessions($,"cancelled");return{updated:!0,endedAt:J}}return{updated:!1}}async updateSession($){for(let Z=0;Z<Bj;Z++){let Q=await this.adapter.getSession($.sessionId);if(!Q)return{updated:!1};let J=Q.metadata??void 0,W=$.metadata!==void 0?a$($.metadata)??{}:a$(J)??{},X=n2(typeof J?.title==="string"?J.title:void 0),j=$.title!==void 0?n2($.title):X??kW($.prompt);if(j)W.title=j;else delete W.title;let Y=$.metadata!==void 0||$.prompt!==void 0||$.title!==void 0;if(!(await this.adapter.updateSession({sessionId:$.sessionId,prompt:$.prompt,metadata:Y?Object.keys(W).length>0?W:null:void 0,title:j,expectedStatusLock:Q.statusLock})).updated)continue;let{path:B,manifest:H}=this.manifestStore.readManifestFile($.sessionId);if(H){if($.prompt!==void 0)H.prompt=$.prompt??void 0;let K=$.metadata!==void 0?a$($.metadata)??{}:a$(H.metadata)??{};if(j)K.title=j;H.metadata=Object.keys(K).length>0?K:void 0,this.manifestStore.writeSessionManifest(B,H)}return{updated:!0}}return{updated:!1}}queueSpawnRequest($){return this.teamChildren.queueSpawnRequest($)}upsertSubagentSession($){return this.teamChildren.upsertSubagentSession($)}upsertSubagentSessionFromHook($){return this.teamChildren.upsertSubagentSessionFromHook($)}appendSubagentHookAudit($,Z){return this.teamChildren.appendSubagentHookAudit(Z),Promise.resolve()}persistSessionMessages($,Z,Q){let J=SQ(Z);return this.manifestStore.persistSessionMessages($,J,Q)}async readSessionCompactionState($){return await this.manifestStore.readSessionCompactionState($)}async persistSessionCompactionState($,Z){await this.manifestStore.persistSessionCompactionState($,Z)}async deleteSessionCompactionState($){await this.manifestStore.deleteSessionCompactionState($)}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,J,W,X){return this.teamChildren.onTeamTaskEnd($,Z,Q,J,W,X)}onTeamTaskProgress($,Z,Q,J){return this.teamChildren.onTeamTaskProgress($,Z,Q,J)}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(_0($.status)===!1||this.isPidAlive($.pid))return $;let Z=V0(),Q=L$.STALE_REASON;for(let J=0;J<Bj;J++){let W=await this.adapter.getSession($.sessionId);if(!W)return;if(_0(W.status)===!1)return W;let X={...W.metadata??{},terminal_marker:Q,terminal_marker_at:Z,terminal_marker_pid:W.pid,terminal_marker_source:L$.STALE_SOURCE},j=await this.adapter.updateSession({sessionId:W.sessionId,status:"failed",endedAt:Z,exitCode:1,metadata:X,expectedStatusLock:W.statusLock});if(!j.updated)continue;await this.teamChildren.applyStatusToRunningChildSessions(W.sessionId,"failed");let Y=ZF(W,{status:"failed",endedAt:Z,exitCode:1,metadata:X}),{path:V}=this.manifestStore.readManifestFile(W.sessionId);return this.manifestStore.writeSessionManifest(V,Y),this.manifestStore.appendStaleSessionHookLog(Z,W.sessionId,W.pid,Q,L$.STALE_SOURCE),{...W,status:"failed",endedAt:Z,exitCode:1,metadata:X,statusLock:j.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);await this.reconcileDeadSessions(Q);let J=(await this.adapter.listSessions({limit:Q})).slice(0,Z),W=await Promise.all(J.map((X)=>this.manifestStore.readSessionManifestTitle(X.sessionId)));return J.map((X,j)=>{let Y=a$(X.metadata??void 0),V=n2(W[j]),B=V?{...Y??{},title:V}:Y;return{...X,metadata:B}})}async reconcileDeadSessions($=2000){let Z=Math.max(1,Math.floor($)),Q=(await Promise.all(["idle","running","pending"].map((W)=>this.adapter.listSessions({limit:Z,status:W})))).flat(),J=0;for(let W of Q){let X=await this.reconcileDeadRunningSession(W);if(X&&X.status!==W.status)J++}return J}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 J=await this.adapter.listSessions({limit:2000,parentSessionId:Z});await this.adapter.deleteSession(Z,!0),await Promise.allSettled(J.map(async(W)=>{await JX(W.cwd,W.sessionId),c5(W.messagesPath),await this.deleteSessionCompactionStateIfExists(W.sessionId),c5(this.manifestStore.artifacts.sessionManifestPath(W.sessionId,!1)),this.manifestStore.artifacts.removeSessionDirIfEmpty(W.sessionId)}))}if(await JX(Q.cwd,Z),c5(Q.messagesPath),await this.deleteSessionCompactionStateIfExists(Z),c5(this.manifestStore.artifacts.sessionManifestPath(Z,!1)),Q.isSubagent)this.manifestStore.artifacts.removeSessionDirIfEmpty(Z);else{let J=new Set([this.manifestStore.artifacts.sessionArtifactsDir(Z)]);for(let W of[Q.messagesPath])if(typeof W==="string"&&W.trim().length>0)J.add(pk(W));for(let W of J)this.manifestStore.artifacts.removeDir(W)}return{deleted:!0}}async deleteSessionCompactionStateIfExists($){try{await this.manifestStore.deleteSessionCompactionState($)}catch{}}}function Kj(){return new Date().toISOString()}function L_($,Z){let Q=`${$}.tmp`;nk(Q,`${JSON.stringify(Z,null,2)}
564
- `,"utf8"),rk(Q,$)}class A_{sessionsDirPath;constructor($=ak()){this.sessionsDirPath=$}ensureSessionsDir(){if(!Hj(this.sessionsDirPath))ik(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}indexPath(){return __(this.ensureSessionsDir(),"sessions.index.json")}spawnQueuePath(){return __(this.ensureSessionsDir(),"subagent-spawn-queue.json")}readIndex(){let $=this.indexPath();if(!Hj($))return{version:1,sessions:{}};try{let Z=JSON.parse(D_($,"utf8"));if(Z?.version===1&&Z.sessions)return Z}catch{}return{version:1,sessions:{}}}writeIndex($){L_(this.indexPath(),$)}readQueue(){let $=this.spawnQueuePath();if(!Hj($))return{version:1,nextId:1,requests:[]};try{let Z=JSON.parse(D_($,"utf8"));if(Z?.version===1&&typeof Z.nextId==="number"&&Array.isArray(Z.requests))return Z}catch{}return{version:1,nextId:1,requests:[]}}writeQueue($){L_(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 J=$.expectedStatusLock!==void 0?$.expectedStatusLock+1:Q.statusLock,W={...Q,status:$.status??Q.status,endedAt:$.endedAt!==void 0?$.endedAt:Q.endedAt??null,exitCode:$.exitCode!==void 0?$.exitCode:Q.exitCode??null,prompt:$.prompt!==void 0?$.prompt:Q.prompt??null,metadata:$.metadata!==void 0?$.metadata??null:Q.metadata??null,parentSessionId:$.parentSessionId!==void 0?$.parentSessionId??null:Q.parentSessionId??null,parentAgentId:$.parentAgentId!==void 0?$.parentAgentId??null:Q.parentAgentId??null,agentId:$.agentId!==void 0?$.agentId??null:Q.agentId??null,conversationId:$.conversationId!==void 0?$.conversationId??null:Q.conversationId??null,statusLock:J,isSubagent:$.setRunning||$.parentSessionId!==void 0?!0:Q.isSubagent,updatedAt:Kj()};if($.setRunning)W.status="running",W.endedAt=null,W.exitCode=null;return Z.sessions[$.sessionId]=W,this.writeIndex(Z),{updated:!0,statusLock:W.statusLock}}async deleteSession($,Z){let Q=this.readIndex();if(!Q.sessions[$])return!1;if(delete Q.sessions[$],Z){for(let W of Object.values(Q.sessions))if(W.parentSessionId===$)delete Q.sessions[W.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:Kj()}),Z.nextId+=1,this.writeQueue(Z)}async claimSpawnRequest($,Z){let Q=this.readQueue(),J=Q.requests.find((W)=>W.rootSessionId===$&&W.parentAgentId===Z&&!W.consumedAt);if(!J)return;return J.consumedAt=Kj(),this.writeQueue(Q),J.task}}class Gj extends L${constructor($,Z={}){super(new A_($),Z)}ensureSessionsDir(){return super.ensureSessionsDir()}}var z_={};w(z_,{CoreSessionService:()=>x1});import{existsSync as ok,mkdirSync as sk}from"node:fs";import{resolveSessionDataDir as tk}from"@cline/shared/storage";var Fj=`
563
+ ${W}`,$.config.mode)}function f9($,Z){return pk($,Z==="plan"?"plan":Z==="yolo"?"yolo":"act")}var Bj=4;class L${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 tX($,Z.messagesArtifactUploader,Z.logger),this.teamChildren=new x7($,this.manifestStore,(Q,J,W)=>this.toPersistedMessages(Q,J,W),L$.TEAM_HEARTBEAT_LOG_INTERVAL_MS)}toPersistedMessages($,Z,Q){if(!$)return;return Z?bQ(Z.messages,Z,Q):SQ($)}ensureSessionsDir(){return this.manifestStore.ensureSessionsDir()}writeSessionManifest($,Z){this.manifestStore.writeSessionManifest($,Z)}readSessionManifest($){return this.manifestStore.readSessionManifest($)}async createRootSessionWithArtifacts($){let Z=$.startedAt??V0(),Q=$.sessionId.trim(),J=Q.length>0?Q:`${Date.now()}_${ik(5)}`,W=this.manifestStore.artifacts.sessionMessagesPath(J),X=this.manifestStore.artifacts.sessionCompactionPath(J),j=this.manifestStore.artifacts.sessionManifestPath(J),Y=T5({metadata:$.metadata,prompt:$.prompt}),V={version:1,session_id:J,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:W};return await this.adapter.upsertSession({sessionId:J,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:V.prompt??null,metadata:a$(V.metadata),hookPath:"",messagesPath:W,updatedAt:V0()}),this.manifestStore.initializeMessagesFile(J,W,Z),this.manifestStore.writeSessionManifest(j,V),{manifestPath:j,messagesPath:W,compactionPath:X,manifest:V}}async updateSessionStatus($,Z,Q){let J;if((await JF(()=>this.adapter.getSession($),async(X)=>{return J=_0(Z)?void 0:V0(),this.adapter.updateSession({sessionId:$,status:Z,endedAt:J??null,exitCode:_0(Z)?null:typeof Q==="number"?Q:null,expectedStatusLock:X.statusLock})},Bj)).updated){if(Z==="cancelled")await this.teamChildren.applyStatusToRunningChildSessions($,"cancelled");return{updated:!0,endedAt:J}}return{updated:!1}}async updateSession($){for(let Z=0;Z<Bj;Z++){let Q=await this.adapter.getSession($.sessionId);if(!Q)return{updated:!1};let J=Q.metadata??void 0,W=$.metadata!==void 0?a$($.metadata)??{}:a$(J)??{},X=a2(typeof J?.title==="string"?J.title:void 0),j=$.title!==void 0?a2($.title):X??kW($.prompt);if(j)W.title=j;else delete W.title;let Y=$.metadata!==void 0||$.prompt!==void 0||$.title!==void 0;if(!(await this.adapter.updateSession({sessionId:$.sessionId,prompt:$.prompt,metadata:Y?Object.keys(W).length>0?W:null:void 0,title:j,expectedStatusLock:Q.statusLock})).updated)continue;let{path:B,manifest:H}=this.manifestStore.readManifestFile($.sessionId);if(H){if($.prompt!==void 0)H.prompt=$.prompt??void 0;let K=$.metadata!==void 0?a$($.metadata)??{}:a$(H.metadata)??{};if(j)K.title=j;H.metadata=Object.keys(K).length>0?K:void 0,this.manifestStore.writeSessionManifest(B,H)}return{updated:!0}}return{updated:!1}}queueSpawnRequest($){return this.teamChildren.queueSpawnRequest($)}upsertSubagentSession($){return this.teamChildren.upsertSubagentSession($)}upsertSubagentSessionFromHook($){return this.teamChildren.upsertSubagentSessionFromHook($)}appendSubagentHookAudit($,Z){return this.teamChildren.appendSubagentHookAudit(Z),Promise.resolve()}persistSessionMessages($,Z,Q){let J=SQ(Z);return this.manifestStore.persistSessionMessages($,J,Q)}async readSessionCompactionState($){return await this.manifestStore.readSessionCompactionState($)}async persistSessionCompactionState($,Z){await this.manifestStore.persistSessionCompactionState($,Z)}async deleteSessionCompactionState($){await this.manifestStore.deleteSessionCompactionState($)}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,J,W,X){return this.teamChildren.onTeamTaskEnd($,Z,Q,J,W,X)}onTeamTaskProgress($,Z,Q,J){return this.teamChildren.onTeamTaskProgress($,Z,Q,J)}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(_0($.status)===!1||this.isPidAlive($.pid))return $;let Z=V0(),Q=L$.STALE_REASON;for(let J=0;J<Bj;J++){let W=await this.adapter.getSession($.sessionId);if(!W)return;if(_0(W.status)===!1)return W;let X={...W.metadata??{},terminal_marker:Q,terminal_marker_at:Z,terminal_marker_pid:W.pid,terminal_marker_source:L$.STALE_SOURCE},j=await this.adapter.updateSession({sessionId:W.sessionId,status:"failed",endedAt:Z,exitCode:1,metadata:X,expectedStatusLock:W.statusLock});if(!j.updated)continue;await this.teamChildren.applyStatusToRunningChildSessions(W.sessionId,"failed");let Y=QF(W,{status:"failed",endedAt:Z,exitCode:1,metadata:X}),{path:V}=this.manifestStore.readManifestFile(W.sessionId);return this.manifestStore.writeSessionManifest(V,Y),this.manifestStore.appendStaleSessionHookLog(Z,W.sessionId,W.pid,Q,L$.STALE_SOURCE),{...W,status:"failed",endedAt:Z,exitCode:1,metadata:X,statusLock:j.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);await this.reconcileDeadSessions(Q);let J=(await this.adapter.listSessions({limit:Q})).slice(0,Z),W=await Promise.all(J.map((X)=>this.manifestStore.readSessionManifestTitle(X.sessionId)));return J.map((X,j)=>{let Y=a$(X.metadata??void 0),V=a2(W[j]),B=V?{...Y??{},title:V}:Y;return{...X,metadata:B}})}async reconcileDeadSessions($=2000){let Z=Math.max(1,Math.floor($)),Q=(await Promise.all(["idle","running","pending"].map((W)=>this.adapter.listSessions({limit:Z,status:W})))).flat(),J=0;for(let W of Q){let X=await this.reconcileDeadRunningSession(W);if(X&&X.status!==W.status)J++}return J}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 J=await this.adapter.listSessions({limit:2000,parentSessionId:Z});await this.adapter.deleteSession(Z,!0),await Promise.allSettled(J.map(async(W)=>{await JX(W.cwd,W.sessionId),c5(W.messagesPath),await this.deleteSessionCompactionStateIfExists(W.sessionId),c5(this.manifestStore.artifacts.sessionManifestPath(W.sessionId,!1)),this.manifestStore.artifacts.removeSessionDirIfEmpty(W.sessionId)}))}if(await JX(Q.cwd,Z),c5(Q.messagesPath),await this.deleteSessionCompactionStateIfExists(Z),c5(this.manifestStore.artifacts.sessionManifestPath(Z,!1)),Q.isSubagent)this.manifestStore.artifacts.removeSessionDirIfEmpty(Z);else{let J=new Set([this.manifestStore.artifacts.sessionArtifactsDir(Z)]);for(let W of[Q.messagesPath])if(typeof W==="string"&&W.trim().length>0)J.add(lk(W));for(let W of J)this.manifestStore.artifacts.removeDir(W)}return{deleted:!0}}async deleteSessionCompactionStateIfExists($){try{await this.manifestStore.deleteSessionCompactionState($)}catch{}}}function Kj(){return new Date().toISOString()}function A_($,Z){let Q=`${$}.tmp`;ak(Q,`${JSON.stringify(Z,null,2)}
564
+ `,"utf8"),nk(Q,$)}class O_{sessionsDirPath;constructor($=ok()){this.sessionsDirPath=$}ensureSessionsDir(){if(!Hj(this.sessionsDirPath))rk(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}indexPath(){return L_(this.ensureSessionsDir(),"sessions.index.json")}spawnQueuePath(){return L_(this.ensureSessionsDir(),"subagent-spawn-queue.json")}readIndex(){let $=this.indexPath();if(!Hj($))return{version:1,sessions:{}};try{let Z=JSON.parse(__($,"utf8"));if(Z?.version===1&&Z.sessions)return Z}catch{}return{version:1,sessions:{}}}writeIndex($){A_(this.indexPath(),$)}readQueue(){let $=this.spawnQueuePath();if(!Hj($))return{version:1,nextId:1,requests:[]};try{let Z=JSON.parse(__($,"utf8"));if(Z?.version===1&&typeof Z.nextId==="number"&&Array.isArray(Z.requests))return Z}catch{}return{version:1,nextId:1,requests:[]}}writeQueue($){A_(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 J=$.expectedStatusLock!==void 0?$.expectedStatusLock+1:Q.statusLock,W={...Q,status:$.status??Q.status,endedAt:$.endedAt!==void 0?$.endedAt:Q.endedAt??null,exitCode:$.exitCode!==void 0?$.exitCode:Q.exitCode??null,prompt:$.prompt!==void 0?$.prompt:Q.prompt??null,metadata:$.metadata!==void 0?$.metadata??null:Q.metadata??null,parentSessionId:$.parentSessionId!==void 0?$.parentSessionId??null:Q.parentSessionId??null,parentAgentId:$.parentAgentId!==void 0?$.parentAgentId??null:Q.parentAgentId??null,agentId:$.agentId!==void 0?$.agentId??null:Q.agentId??null,conversationId:$.conversationId!==void 0?$.conversationId??null:Q.conversationId??null,statusLock:J,isSubagent:$.setRunning||$.parentSessionId!==void 0?!0:Q.isSubagent,updatedAt:Kj()};if($.setRunning)W.status="running",W.endedAt=null,W.exitCode=null;return Z.sessions[$.sessionId]=W,this.writeIndex(Z),{updated:!0,statusLock:W.statusLock}}async deleteSession($,Z){let Q=this.readIndex();if(!Q.sessions[$])return!1;if(delete Q.sessions[$],Z){for(let W of Object.values(Q.sessions))if(W.parentSessionId===$)delete Q.sessions[W.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:Kj()}),Z.nextId+=1,this.writeQueue(Z)}async claimSpawnRequest($,Z){let Q=this.readQueue(),J=Q.requests.find((W)=>W.rootSessionId===$&&W.parentAgentId===Z&&!W.consumedAt);if(!J)return;return J.consumedAt=Kj(),this.writeQueue(Q),J.task}}class Gj extends L${constructor($,Z={}){super(new O_($),Z)}ensureSessionsDir(){return super.ensureSessionsDir()}}var T_={};w(T_,{CoreSessionService:()=>x1});import{existsSync as sk,mkdirSync as tk}from"node:fs";import{resolveSessionDataDir as ek}from"@cline/shared/storage";var Fj=`
565
565
  session_id AS sessionId,
566
566
  source,
567
567
  pid,
@@ -588,7 +588,7 @@ ${W}`,$.config.mode)}function f9($,Z){return dk($,Z==="plan"?"plan":Z==="yolo"?"
588
588
  metadata_json AS metadata,
589
589
  hook_path AS hookPath,
590
590
  messages_path AS messagesPath,
591
- updated_at AS updatedAt`;function Uj($){$.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 Dj($){if(!$||Object.keys($).length===0)return null;return JSON.stringify($)}function O_($){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 q_{store;sessionsDirPath;constructor($,Z=tk()){this.store=$;this.sessionsDirPath=Z}ensureSessionsDir(){if(!ok(this.sessionsDirPath))sk(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}async upsertSession($){this.store.run(`INSERT OR REPLACE INTO sessions (
591
+ updated_at AS updatedAt`;function Uj($){$.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 Dj($){if(!$||Object.keys($).length===0)return null;return JSON.stringify($)}function q_($){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 z_{store;sessionsDirPath;constructor($,Z=ek()){this.store=$;this.sessionsDirPath=Z}ensureSessionsDir(){if(!sk(this.sessionsDirPath))tk(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}async upsertSession($){this.store.run(`INSERT OR REPLACE INTO sessions (
592
592
  session_id, source, pid, started_at, ended_at, exit_code, status, status_lock, interactive,
593
593
  provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
594
594
  parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
@@ -604,16 +604,16 @@ ${W}`,$.config.mode)}function f9($,Z){return dk($,Z==="plan"?"plan":Z==="yolo"?"
604
604
  WHERE session_id = ? AND status_lock = ?`,[V0(),$.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(Dj($.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 j=await this.getSession($.sessionId);return{updated:!!j,statusLock:j?.statusLock??0}}let J=0;if($.expectedStatusLock!==void 0)J=$.expectedStatusLock+1,Z.push("status_lock = ?"),Q.push(J);Z.push("updated_at = ?"),Q.push(V0());let W=`UPDATE sessions SET ${Z.join(", ")} WHERE session_id = ?`;if(Q.push($.sessionId),$.expectedStatusLock!==void 0)W+=" AND status_lock = ?",Q.push($.expectedStatusLock);if((this.store.run(W,Q).changes??0)===0)return{updated:!1,statusLock:0};if($.expectedStatusLock===void 0)J=(await this.getSession($.sessionId))?.statusLock??0;return{updated:!0,statusLock:J}}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)
605
605
  VALUES (?, ?, ?, ?, ?, NULL)`,[$.rootSessionId,$.parentAgentId,$.task??null,$.systemPrompt??null,V0()])}async claimSpawnRequest($,Z){let Q=this.store.queryOne(`SELECT id, task FROM subagent_spawn_queue
606
606
  WHERE root_session_id = ? AND parent_agent_id = ? AND consumed_at IS NULL
607
- 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 = ?",[V0(),Q.id]),Q.task??void 0}}class x1 extends L${store;constructor($,Z={}){super(new q_($,Z.sessionArtifactsDir),Z);this.store=$}createRootSession($){this.store.run(`INSERT OR REPLACE INTO sessions (
607
+ 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 = ?",[V0(),Q.id]),Q.task??void 0}}class x1 extends L${store;constructor($,Z={}){super(new z_($,Z.sessionArtifactsDir),Z);this.store=$}createRootSession($){this.store.run(`INSERT OR REPLACE INTO sessions (
608
608
  session_id, source, pid, started_at, ended_at, exit_code, status, status_lock, interactive,
609
609
  provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
610
610
  parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
611
611
  metadata_json, transcript_path, hook_path, messages_path, updated_at
612
- ) 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,V0()])}}function ek($){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 R9,M9;function $h($,Z){if($!=="auto"&&$!=="hub")return;if(Z.hub?.endpoint?.trim())return;dZ(Z.hub?.workspaceRoot?.trim()||Z.hub?.cwd?.trim()||process.cwd())}async function Zh($){await $.reconcileDeadSessions?.().catch(()=>{})}function f_($){try{let Z=new h1;return Z.init(),new x1(Z,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}catch(Z){return $.telemetry?.capture({event:"session_backend_fallback",properties:{requestedBackend:"sqlite",fallbackBackend:"file"}}),N_($.telemetry,{component:"core",operation:"session_backend.sqlite_init",error:Z,severity:"warn",handled:!0,context:{requestedBackend:"sqlite",fallbackBackend:"file"}}),new Gj(void 0,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}}function T_($,Z,Q){return new g1({sessionService:Q??$.sessionService??f_($),capabilities:$.capabilities,logger:$.logger,telemetry:$.telemetry,toolPolicies:$.toolPolicies,distinctId:Z,fetch:$.fetch})}async function _j($){if(R9)return R9;if(M9)return await M9;return M9=(async()=>{return R9=f_($),await Zh(R9),R9})().finally(()=>{M9=void 0}),await M9}async function n6($){let Z=l0($.distinctId);$.telemetry?.setDistinctId(Z);let Q=ek($);if($h(Q,$),Q==="remote"){let J=$.remote?.endpoint?.trim();if(!J)throw Error("Remote runtime mode requires `remote.endpoint` to be configured.");return $.logger?.log("Using remote runtime host",{endpoint:J}),new c6({endpoint:J,authToken:$.remote?.authToken,clientType:$.remote?.clientType,displayName:$.remote?.displayName,workspaceRoot:$.remote?.workspaceRoot,cwd:$.remote?.cwd,capabilities:$.capabilities})}if(Q==="hub"){let J=$.hub?.endpoint?.trim(),W=J||await f2({strategy:$.hub?.strategy??"require-hub",workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});if(!W)throw Error("No compatible hub runtime is available.");return $.logger?.log("Using hub runtime host",{url:W,explicitEndpoint:J||void 0}),new _$({url:W,authToken:$.hub?.authToken,clientType:$.hub?.clientType,displayName:$.hub?.displayName,capabilities:$.capabilities,telemetry:$.telemetry},{workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd})}if(Q==="auto"){let J=await y4({endpoint:$.hub?.endpoint,strategy:$.hub?.strategy??"prefer-hub",workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});if(J){$.logger?.log("Using discovered local hub runtime host",{url:J});let W=new _$({url:J,authToken:$.hub?.authToken,clientType:$.hub?.clientType,displayName:$.hub?.displayName,capabilities:$.capabilities,telemetry:$.telemetry},{workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});try{return await W.connect(),W}catch(X){$.logger?.log("Falling back to local runtime host",{reason:"hub_connect_failed",severity:"warn",error:X}),N_($.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"}),T_($,Z)}return T_($,Z)}var C_={};w(C_,{NoOpFeatureFlagsProvider:()=>U8,FeatureFlagsService:()=>F8});import{existsSync as Qh,mkdirSync as Jh,readFileSync as Wh,writeFileSync as Xh}from"node:fs";import{dirname as jh}from"node:path";import{FEATURE_FLAGS as M_,FeatureFlagDefaultValue as Lj}from"@cline/shared";var Yh=3600000,Vh=604800000,E_=1;class F8{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??Yh,this.cacheFilePath=$.cacheFilePath,this.persistentCacheMaxAgeMs=$.persistentCacheMaxAgeMs??Vh,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 J=this.cacheInfo;this.cacheInfo={updateTime:Q,userId:Z||null};try{let W=await this.provider.getAllFlagsAndPayloads({flagKeys:M_.length>0?M_:void 0,context:{...this.context,userId:Z}});if(this.cacheInfo.userId!==Z)return;this.cacheInfo.flagsPayload=W,this.rebuildCacheFromSnapshot(W),this.writePersistentCache()}catch(W){if(this.cacheInfo.userId!==Z)return;throw this.cacheInfo=J.updateTime?J:{updateTime:0,userId:null},this.logger?.error?.("Error polling SDK feature flags",{error:W}),W}}hydrateFromPersistentCache(){let $=this.readPersistentCache();if($)this.hydrateCache($)}isFeatureFlagPayload($){if($===null||typeof $==="string"||typeof $==="number"||typeof $==="boolean")return!0;if(Array.isArray($))return $.every((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(([,J])=>this.isFeatureFlagPayload(J));if(Z.length===0)return;let Q={};for(let[J,W]of Z)Q[J]=W;return Q}readPersistentCache(){try{if(!this.cacheFilePath||!Qh(this.cacheFilePath))return;let $=JSON.parse(Wh(this.cacheFilePath,"utf8"));if(!$||typeof $!=="object")return;let Z=$;if(Z.version!==E_||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;Jh(jh(this.cacheFilePath),{recursive:!0,mode:448});let $=this.getCacheSnapshot(),Z={version:E_,updatedAt:$.updateTime,userId:$.userId,flagsPayload:$.flagsPayload};Xh(this.cacheFilePath,`${JSON.stringify(Z,null,2)}
613
- `,"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 J=this.getFeatureFlag(Q);Z.set(Q,J??!1)}this.cache=Z}getFeatureFlag($){try{let Z=this.cacheInfo.flagsPayload?.featureFlagPayloads?.[$],Q=this.cacheInfo.flagsPayload?.featureFlags?.[$],J=Z??Q??Lj[$]??void 0;if(!this.cache.has($)||this.cache.get($)!==J)this.telemetry?.capture({event:m.FEATURE_FLAGS.FLAG_CALLED,properties:{$feature_flag:$,$feature_flag_response:Q}});return J}catch(Z){return this.logger?.error?.(`Error checking SDK feature flag ${$}`,{error:Z}),Lj[$]??!1}}getBooleanFlagEnabled($){return this.cache.get($)===!0}getFlagPayload($){return this.cache.get($)??Lj[$]}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 U8{async getAllFlagsAndPayloads(){return{}}enabled=!1;getSettings(){return{enabled:!1,timeoutMs:1000}}async dispose(){}}O2();var I_={};w(I_,{createCheckpointComparePlan:()=>c7,compareCheckpointToWorkspace:()=>w9,buildCheckpointWorkspaceDiff:()=>u7});import{execFile as Fh}from"node:child_process";import*as k_ from"node:fs/promises";import*as o6 from"node:path";import{promisify as Uh}from"node:util";var b_={};w(b_,{trimMessagesToCheckpoint:()=>S_,trimMessagesBeforeUserRun:()=>C9,readSessionCheckpointHistory:()=>D8,findCheckpointForRun:()=>a6,createRestoredCheckpointMetadata:()=>E9,createCheckpointRestorePlan:()=>Oj,beginWorktreeRestoreTransaction:()=>Aj,applyCheckpointToWorktree:()=>qj});import{execFile as Bh}from"node:child_process";import{randomUUID as Hh}from"node:crypto";import{promisify as Kh}from"node:util";var B0=Kh(Bh);async function w_($,Z){try{return(await B0("git",["-C",$,"rev-parse","--verify","--quiet",Z],{windowsHide:!0})).stdout.trim()||void 0}catch{return}}async function Aj($){if((await B0("git",["-C",$,"rev-parse","--is-inside-work-tree"],{windowsHide:!0})).stdout.trim()!=="true")throw Error(`${$} is not a git repository`);let Q=(await B0("git",["-C",$,"rev-parse","--verify","HEAD"],{windowsHide:!0})).stdout.trim(),J=await w_($,"refs/stash"),W=Hh(),X=`refs/cline/restore-transactions/${W}`;await B0("git",["-C",$,"stash","push","--include-untracked","--message",`cline restore transaction ${W}`],{windowsHide:!0});let j=await w_($,"refs/stash"),Y=j!==void 0&&j!==J;if(Y)try{await B0("git",["-C",$,"update-ref",X,j],{windowsHide:!0}),await B0("git",["-C",$,"stash","drop","stash@{0}"],{windowsHide:!0})}catch(B){try{await B0("git",["-C",$,"reset","--hard",Q],{windowsHide:!0}),await B0("git",["-C",$,"clean","-fd"],{windowsHide:!0}),await B0("git",["-C",$,"stash","apply","--index",j],{windowsHide:!0})}catch(H){throw AggregateError([B,H],"Workspace snapshot and rollback both failed")}throw B}let V=!1;return{async commit(){if(V)return;if(V=!0,!Y)return;await B0("git",["-C",$,"update-ref","-d",X],{windowsHide:!0}).catch(()=>{return})},async rollback(){if(V)return;if(await B0("git",["-C",$,"reset","--hard",Q],{windowsHide:!0}),await B0("git",["-C",$,"clean","-fd"],{windowsHide:!0}),Y)await B0("git",["-C",$,"stash","apply","--index",X],{windowsHide:!0}),await B0("git",["-C",$,"update-ref","-d",X],{windowsHide:!0});V=!0}}}function D8($){let Z=$?.metadata?.checkpoint&&typeof $.metadata.checkpoint==="object"&&!Array.isArray($.metadata.checkpoint)?$.metadata.checkpoint:void 0;return(Array.isArray(Z?.history)?Z.history:[]).filter((J)=>!!J&&typeof J==="object"&&!Array.isArray(J)).flatMap((J)=>{let W=String(J.ref??"").trim(),X=Number(J.createdAt??0),j=Number(J.runCount??0);if(W.length===0||!Number.isFinite(X)||!Number.isInteger(j)||j<1)return[];let Y=J.kind==="stash"||J.kind==="commit"?J.kind:void 0;return[{ref:W,createdAt:X,runCount:j,...Y?{kind:Y}:{}}]})}function E9($,Z){let Q=D8($).filter((W)=>W.runCount<=Z),J=Q.at(-1);return J?{latest:J,history:Q}:void 0}function a6($,Z){return $.reduce((Q,J)=>{if(J.runCount>Z)return Q;if(!Q||J.runCount>Q.runCount)return J;return Q},void 0)}function P_($,Z){let Q=0;for(let J=0;J<$.length;J+=1){let W=$[J];if(!W)continue;let X=w1(W);if(X<1)continue;let j=Q+1;if(Q+=X,Q===Z)return{index:J,span:X};if(Q>Z)throw Error(`Run ${Z} is folded into a compacted message spanning runs ${j}-${Q}`)}throw Error(`Could not find user message for run ${Z}`)}function S_($,Z){let{index:Q}=P_($,Z);return $.slice(0,Q+1)}function C9($,Z){let{index:Q,span:J}=P_($,Z);if(J!==1)throw Error(`Cannot fork before run ${Z} because it is folded into a compacted message`);return $.slice(0,Q)}function Oj($){let Z=$.checkpointRunCount;if(!Number.isInteger(Z)||Z<1)throw Error("checkpointRunCount must be a positive integer");let Q=a6(D8($.session),Z);if(!Q)throw Error(`No checkpoint found at or before run ${Z} in session ${$.session.sessionId}`);let J=($.cwd?.trim()||$.session.cwd||$.session.workspaceRoot).trim();if(!J)throw Error("cwd or workspaceRoot is required to restore a checkpoint");return{checkpoint:Q,cwd:J,...$.restoreMessages!==!1?{messages:S_($.messages??[],Z)}:{}}}async function Gh($,Z){if(Z.kind)return Z.kind;let Q=await B0("git",["-C",$,"show","-s","--format=%P%x00%B",Z.ref],{windowsHide:!0}),J=Q.stdout.indexOf("\x00"),W=J<0?[]:Q.stdout.slice(0,J).trim().split(/\s+/).filter(Boolean),X=J<0?"":Q.stdout.slice(J+1);return W.length>=2&&bF(X)?"stash":"commit"}async function qj($,Z){if((await B0("git",["-C",$,"rev-parse","--is-inside-work-tree"],{windowsHide:!0})).stdout.trim()!=="true")throw Error(`${$} is not a git repository`);await B0("git",["-C",$,"cat-file","-e",`${Z.ref}^{commit}`],{windowsHide:!0});let J=await Gh($,Z),W=J==="commit"?Z.ref:`${Z.ref}^1`;if(await B0("git",["-C",$,"cat-file","-e",`${W}^{commit}`],{windowsHide:!0}),J==="stash")await B0("git",["-C",$,"cat-file","-e",`${Z.ref}^2^{commit}`],{windowsHide:!0});if(await B0("git",["-C",$,"reset","--hard",W],{windowsHide:!0}),await B0("git",["-C",$,"clean","-fd"],{windowsHide:!0}),J==="commit")return;await B0("git",["-C",$,"stash","apply",Z.ref],{windowsHide:!0})}var Dh=Uh(Fh),_h=52428800;async function m7($,Z){let{stdout:Q}=await Dh("git",["-C",$,...Z],{windowsHide:!0,maxBuffer:_h,encoding:"utf8"});return Q}function y_($){return $.split("\x00").filter(Boolean)}function h_($,Z){let Q=o6.resolve($,Z),J=o6.relative($,Q);if(J.startsWith("..")||o6.isAbsolute(J))throw Error(`Checkpoint diff path escapes workspace: ${Z}`);return Q}async function Lh($,Z,Q){try{return await m7($,["show",`${Z}:${Q}`])}catch{return""}}async function Ah($,Z){try{return await k_.readFile(h_($,Z),"utf8")}catch{return""}}async function Oh($,Z){await m7($,["cat-file","-e",`${Z.ref}^{tree}`]);let[Q,J]=await Promise.all([m7($,["diff","--name-only","-z",Z.ref,"--"]),m7($,["ls-files","--others","--exclude-standard","-z"])]);return[...new Set([...y_(Q),...y_(J)])].sort((X,j)=>X.localeCompare(j))}function c7($){let Z=$.checkpointRunCount;if(!Number.isInteger(Z)||Z<1)throw Error("checkpointRunCount must be a positive integer");let Q=a6(D8($.session),Z);if(!Q)throw Error(`No checkpoint found at or before run ${Z} in session ${$.session.sessionId}`);let J=($.cwd?.trim()||$.session.cwd||$.session.workspaceRoot).trim();if(!J)throw Error("cwd or workspaceRoot is required to compare a checkpoint");return{checkpoint:Q,cwd:J}}async function u7($,Z){let Q=await Oh($,Z);return(await Promise.all(Q.map(async(W)=>{let[X,j]=await Promise.all([Lh($,Z.ref,W),Ah($,W)]);return{filePath:h_($,W),leftContent:X,rightContent:j}}))).filter((W)=>W.leftContent!==W.rightContent)}async function w9($){let Z=c7($),Q=await u7(Z.cwd,Z.checkpoint);return{...Z,diffs:Q}}class P9{clientName;runtimeAddress;automation;settings;featureFlags;pendingPrompts;host;prepare;capabilities;logger;telemetry;distinctId;automationService;activeSessionBootstraps=new Map;unsubscribeBootstrapCleanup;constructor($,Z,Q,J,W,X,j,Y,V,B){this.clientName=Z,this.runtimeAddress=Q,this.host=$,this.prepare=J,this.capabilities=W,this.logger=X,this.telemetry=j,this.distinctId=Y,this.featureFlags=V,this.settings=AD($),this.pendingPrompts=OD($),this.automation=new OX(()=>{if(!this.automationService)throw Error("ClineCore automation is not enabled. Pass `automation: true` or automation options to ClineCore.create().");return this.automationService}),this.automationService=B?new U9({workspaceRoot:B.workspaceRoot??process.cwd(),specs:{cronSpecsDir:B.cronSpecsDir??B.cronDir,scope:HU(B.cronScope),workspaceRoot:B.workspaceRoot},runtimeHandlers:KU({host:$,getExtensionContext:()=>U7({automationService:this.automationService,automation:this.automation,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}),dbPath:B.dbPath,logger:B.logger,pollIntervalMs:B.pollIntervalMs,claimLeaseSeconds:B.claimLeaseSeconds,globalMaxConcurrency:B.globalMaxConcurrency,watcherDebounceMs:B.watcherDebounceMs}):void 0,this.unsubscribeBootstrapCleanup=this.host.subscribe((H)=>{if(H.type!=="ended")return;this.disposeSessionBootstrap(H.payload.sessionId)})}static async create($={}){let Z=l0($.distinctId),Q=y0($.capabilities),J={...$,capabilities:Q,distinctId:Z},W=await n6(J),X=BU($.automation),j=$.featureFlags||new F8({provider:new U8,telemetry:$.telemetry,logger:$.logger,context:{distinctId:Z,clientName:$.clientName}}),Y=new P9(W,$.clientName,W.runtimeAddress,$.prepare,Q,$.logger,$.telemetry,Z,j,X?{...X,logger:$.logger}:void 0);if(X&&X.autoStart!==!1)await Y.automation.start();return Y}async disposeSessionBootstrap($){let Z=this.activeSessionBootstraps.get($);if(!Z)return;this.activeSessionBootstraps.delete($),await Promise.resolve(Z.dispose?.())}async start($){let Z=qD($),Q=await this.prepare?.(Z);try{let J=Q?await Q.applyToStartSessionInput(Z):Z,W=await this.host.startSession(IX(J,{defaultCapabilities:this.capabilities,withExtensionContext:(X)=>U7({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(W.sessionId))this.activeSessionBootstraps.set(W.sessionId,Q);else await Promise.resolve(Q.dispose?.());return zD({input:J,sessionId:W.sessionId,telemetry:this.telemetry,clientName:this.clientName,runtimeAddress:this.runtimeAddress}),W}catch(J){throw await Promise.resolve(Q?.dispose?.()),J}}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 k7(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(...$);updateSessionCompactionState=(...$)=>this.host.updateSessionCompactionState(...$);readSessionCompactionState=(...$)=>this.host.readSessionCompactionState(...$);readMessages=(...$)=>this.host.readSessionMessages(...$);readLiveMessages=($)=>this.host.readLiveSessionMessages?this.host.readLiveSessionMessages($):this.host.readSessionMessages($);async restore($){let Z=$.start?IX($.start,{defaultCapabilities:this.capabilities,withExtensionContext:(Q)=>U7({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 w9({session:Q,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd})}ingestHookEvent=(...$)=>this.host.dispatchHookEvent(...$);subscribe($,Z){return this.host.subscribe($,Z)}updateSessionModel=(...$)=>{return this.host.updateSessionModel?.(...$)??Promise.resolve()};updateSessionConnection=(...$)=>{return this.host.updateSessionConnection?.(...$)??Promise.resolve()}}var g_={};w(g_,{resolvePluginSkillDirectoriesFromPaths:()=>K$,resolvePluginConfigSearchPaths:()=>C5,resolveAndLoadAgentPlugins:()=>O6,resolveAgentPluginPaths:()=>H$,loadAgentPluginsFromPathsWithDiagnostics:()=>o2,loadAgentPluginsFromPaths:()=>kQ,loadAgentPluginFromPath:()=>M5,discoverPluginModulePaths:()=>w5});var c_={};w(c_,{toHookConfigFileName:()=>b5,runSubprocessEvent:()=>G$,runHook:()=>t6,resolveHooksConfigSearchPaths:()=>P5,parseHookEventPayload:()=>s6,mergeAgentHooks:()=>$8,listHookConfigFiles:()=>s$,createSubprocessHooks:()=>l7,createHookConfigFileHooks:()=>k5,createHookConfigFileExtension:()=>N6,createHookAuditHooks:()=>T6,createAgentHooksExtension:()=>q6,HookEventPayloadSchema:()=>p7,HookEventNameSchema:()=>d7,HookConfigFileName:()=>z6,HOOK_CONFIG_FILE_EVENT_MAP:()=>S5,HOOKS_CONFIG_DIRECTORY_NAME:()=>mQ});import{HookEventNameSchema as d7,HookEventPayloadSchema as p7,parseHookEventPayload as s6,resolveHookSessionContext as qh}from"@cline/shared";import{z as _8}from"zod";var zh=_8.object({contextModification:_8.string().optional(),cancel:_8.boolean().optional(),review:_8.boolean().optional(),errorMessage:_8.string().optional(),context:_8.string().optional(),overrideInput:_8.unknown().optional()}).passthrough();var Th=["agent","hook"];async function t6($,Z={}){let Q=Z.command??Th;return await G$($,{command:Q,cwd:Z.cwd,env:Z.env,detached:Z.detached,timeoutMs:Z.timeoutMs,onSpawn:Z.onSpawn})}function m_($){return $ instanceof Error?$:Error(String($))}function Nh($){if(!$||typeof $!=="object")return;let Z=zh.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 W=typeof Q.context==="string"?Q.context:typeof Q.contextModification==="string"?Q.contextModification:typeof Q.errorMessage==="string"&&Q.errorMessage.length>0?Q.errorMessage:void 0;return{cancel:typeof Q.cancel==="boolean"?Q.cancel:void 0,review:typeof Q.review==="boolean"?Q.review:void 0,context:W,overrideInput:Object.hasOwn(Q,"overrideInput")?Q.overrideInput:void 0}}function v_($){if(!$||typeof $!=="object")return{};let Z={};for(let[Q,J]of Object.entries($))if(typeof J==="string")Z[Q]=J;else Z[Q]=JSON.stringify(J);return Z}function A$($,Z,Q){let J=Q.env??process.env,W=J.CLINE_USER_ID?.trim()||J.USER?.trim()||"unknown",X=Q.cwd||process.cwd();return{clineVersion:J.CLINE_VERSION?.trim()||"",hookName:$,timestamp:new Date().toISOString(),taskId:Z.conversationId,sessionContext:qh(Q.sessionContext,{hookName:$,conversationId:Z.conversationId,agentId:Z.agentId,parentAgentId:Z.parentAgentId}),workspaceRoots:X?[X]:[],workspaceInfo:Q.workspaceInfo,userId:W,agent_id:Z.agentId,parent_agent_id:Z.parentAgentId}}function fh($){return{name:$.name,message:$.message,stack:$.stack}}function Rh($){let Z=String($??"").toLowerCase();return Z.includes("cancel")||Z.includes("abort")||Z.includes("interrupt")}function Mh($){return{agentId:$.snapshot.agentId,conversationId:$.snapshot.conversationId??$.snapshot.runId??$.snapshot.agentId,parentAgentId:$.snapshot.parentAgentId??null}}function Eh($){return $.filter((Z)=>Z.type==="text"&&typeof Z.text==="string").map((Z)=>Z.text).join("")}function Ch($){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 wh($){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 L8($,Z){try{let Q=await t6($,{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?.(m_(Q),$)}}function l7($={}){return{hooks:{beforeRun:async(Y)=>{let V=Mh(Y);if(($.env??process.env).CLINE_HOOK_AGENT_RESUME==="1"){let H={...A$("agent_resume",V,$),hookName:"agent_resume",taskResume:{taskMetadata:{},previousState:{}}};await L8(H,$)}else{let H={...A$("agent_start",V,$),hookName:"agent_start",taskStart:{taskMetadata:{}}};await L8(H,$)}return},beforeTool:async(Y)=>{let V={agentId:Y.snapshot.agentId,conversationId:Y.snapshot.conversationId??Y.snapshot.runId??Y.snapshot.agentId,parentAgentId:Y.snapshot.parentAgentId??null},B={...A$("tool_call",V,$),hookName:"tool_call",iteration:Y.snapshot.iteration,tool_call:{id:Y.toolCall.toolCallId,name:Y.toolCall.toolName,input:Y.input},preToolUse:{toolName:Y.toolCall.toolName,parameters:v_(Y.input)}};try{let H=await t6(B,{command:$.command,cwd:$.cwd,env:$.env,detached:!1,timeoutMs:$.timeoutMs,onSpawn:$.onSpawn});if($.onDispatch?.({payload:B,result:H,detached:!1}),H?.timedOut)throw Error("tool_call hook command timed out");if(H?.parseError)throw Error(`tool_call hook produced invalid control JSON: ${H.parseError}`);return wh(Nh(H?.parsedJson))}catch(H){$.onDispatchError?.(m_(H),B);return}},afterTool:async(Y)=>{let V=Ch(Y),B={agentId:Y.snapshot.agentId,conversationId:Y.snapshot.conversationId??Y.snapshot.runId??Y.snapshot.agentId,parentAgentId:Y.snapshot.parentAgentId??null},H={...A$("tool_result",B,$),hookName:"tool_result",iteration:Y.snapshot.iteration,tool_result:V,postToolUse:{toolName:V.name,parameters:v_(V.input),result:typeof V.output==="string"?V.output:JSON.stringify(V.output),success:!V.error,executionTimeMs:V.durationMs}};await L8(H,$);return},afterRun:async({snapshot:Y,result:V})=>{let B={agentId:Y.agentId,conversationId:Y.conversationId??Y.runId??Y.agentId,parentAgentId:Y.parentAgentId??null};if(V.status==="completed"){let G={...A$("agent_end",B,$),hookName:"agent_end",iteration:V.iterations,turn:{outputText:V.outputText,status:V.status},taskComplete:{taskMetadata:{}}};await L8(G,$);return}let H=V.status==="aborted"||Rh(V.error?.message)?"agent_abort":"agent_error",K=H==="agent_error"?{...A$(H,B,$),hookName:H,iteration:V.iterations,error:fh(V.error??Error("Agent run failed")),taskCancel:{taskMetadata:{}}}:{...A$(H,B,$),hookName:H,reason:V.error?.message,taskCancel:{taskMetadata:{}}};await L8(K,$)},onEvent:async(Y)=>{if(Y.type!=="message-added"||Y.message.role!=="user")return;let V={agentId:Y.snapshot.agentId,conversationId:Y.snapshot.conversationId??Y.snapshot.runId??Y.snapshot.agentId,parentAgentId:Y.snapshot.parentAgentId??null},B={...A$("prompt_submit",V,$),hookName:"prompt_submit",userPromptSubmit:{prompt:Eh(Y.message.content),attachments:[]}};await L8(B,$)}},shutdown:async({agentId:Y,conversationId:V,parentAgentId:B,reason:H})=>{let K={...A$("session_shutdown",{agentId:Y,conversationId:V,parentAgentId:B},$),hookName:"session_shutdown",reason:H};await L8(K,$)}}}i7();var d_={};w(d_,{registerRemoteConfigSessionBlobUpload:()=>a7,readRemoteConfigSessionBlobUploadMetadata:()=>zj,prepareRemoteConfigCoreIntegration:()=>Nj,createRemoteConfigSessionMessagesArtifactUploader:()=>Tj,buildRemoteConfigSessionBlobUploadMetadata:()=>r7,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY:()=>n7});import{buildRemoteConfigSessionBlobUploadMetadata as r7,clearRemoteConfigSessionBlobUpload as Ph,createClineTelemetryServiceConfig as Sh,createSessionId as bh,createRemoteConfigSessionMessagesArtifactUploader as yh,prepareRemoteConfigRuntime as kh,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY as n7,readRemoteConfigSessionBlobUploadMetadata as zj,registerRemoteConfigSessionBlobUpload as a7}from"@cline/shared";function hh($,Z){let Q=$.telemetry||Z.telemetryService?{...Z.telemetryService??{},...$.telemetry??{}}:void 0;if(!Q)return;return a1(Sh(Q)).telemetry}function Tj(){let $=yh();return{async uploadMessagesFile(Z){await $.uploadMessagesFile(Z)}}}async function Nj($){let Z=await kh($),Q=hh(Z,$),J=[Z.pluginDefinition],W=Z.claims?.subject,X=r7(Z.bundle?.remoteConfig,W),j;return{prepared:Z,extensions:J,telemetry:Q,applyToStartSessionInput(Y){let V=Y.config.extensions??[],B=Y.config.telemetry,H=X?Y.config.sessionId?.trim()||bh():Y.config.sessionId;if(H&&X)j=H;let K=H&&X?a7(H,Z.bundle?.remoteConfig,W):void 0,G=K?{...Y.sessionMetadata??{},[n7]:K}:Y.sessionMetadata;return{...Y,...G?{sessionMetadata:G}:{},config:{...Y.config,...H?{sessionId:H}:{},extensions:[...V,...J],telemetry:Q??B}}},async dispose(){if(j)Ph(j)}}}var o_={};w(o_,{createTeamName:()=>t7,DefaultRuntimeBuilder:()=>Z4});import{hasRuntimeConfigExtension as ah,resolveMcpTimeoutSeconds as oh}from"@cline/shared";import{nanoid as sh}from"nanoid";H1();var a_={};w(a_,{createLocalTeamStore:()=>Ej,SqliteTeamStore:()=>A8,FileTeamStore:()=>S9});import{appendFileSync as Ih,existsSync as e6,mkdirSync as p_,readdirSync as xh,readFileSync as l_,renameSync as gh,writeFileSync as vh}from"node:fs";import{join as fj}from"node:path";import{resolveTeamDataDir as mh}from"@cline/shared/storage";function i_(){return new Date().toISOString()}function Rj($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function r_($){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 S9{teamDirPath;constructor($={}){this.teamDirPath=$.teamDir??mh()}init(){this.ensureTeamDir()}listTeamNames(){if(!e6(this.teamDirPath))return[];return xh(this.teamDirPath,{withFileTypes:!0}).filter(($)=>$.isDirectory()).filter(($)=>e6(this.statePath($.name))).map(($)=>$.name).sort()}readState($){let Z=this.readEnvelope($);return Z?.teamState?r_(Z.teamState):void 0}readHistory($,Z=200){let Q=this.historyPath($);if(!e6(Q))return[];return l_(Q,"utf8").split(`
614
- `).map((J)=>J.trim()).filter(Boolean).map((J)=>{try{return JSON.parse(J)}catch{return}}).filter((J)=>J!==void 0).reverse().slice(0,Z)}loadRuntime($){let Z=this.readEnvelope($);return{state:Z?.teamState?r_(Z.teamState):void 0,teammates:Z?.teammates??[],interruptedRunIds:[]}}handleTeamEvent($,Z){this.ensureTeamSubdir($),Ih(this.historyPath($),`${JSON.stringify({ts:i_(),eventType:Z.type,payload:Z})}
615
- `,"utf8")}persistRuntime($,Z,Q){this.ensureTeamSubdir($);let J={version:1,updatedAt:i_(),teamState:Z,teammates:Q},W=this.statePath($),X=`${W}.tmp`;vh(X,`${JSON.stringify(J,null,2)}
616
- `,"utf8"),gh(X,W)}markInProgressRunsInterrupted($,Z){let Q=this.readEnvelope($);if(!Q?.teamState?.runs?.length)return[];let J=Q.teamState.runs.filter((X)=>X.status==="queued"||X.status==="running").map((X)=>X.id);if(J.length===0)return[];let W=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:W}:X)},this.persistRuntime($,Q.teamState,Q.teammates),J}ensureTeamDir(){if(!e6(this.teamDirPath))p_(this.teamDirPath,{recursive:!0});return this.teamDirPath}ensureTeamSubdir($){let Z=fj(this.ensureTeamDir(),Rj($));if(!e6(Z))p_(Z,{recursive:!0});return Z}statePath($){return fj(this.ensureTeamDir(),Rj($),"state.json")}historyPath($){return fj(this.ensureTeamDir(),Rj($),"task-history.jsonl")}readEnvelope($){let Z=this.statePath($);if(!e6(Z))return;try{let Q=JSON.parse(l_(Z,"utf8"));if(Q?.version===1&&Q.teamState)return Q}catch{}return}}import{existsSync as ch,mkdirSync as uh}from"node:fs";import{join as dh}from"node:path";import{safeJsonParse as n_}from"@cline/shared";import{loadSqliteDb as ph,nowIso as Mj}from"@cline/shared/db";import{resolveDbDataDir as lh}from"@cline/shared/storage";function ih(){return lh()}function $4($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function rh($){let Z=n_($);if(!Array.isArray(Z))return[];let Q=[];for(let J of Z){if(!J||typeof J!=="object")continue;let W=J,X=W.agentId,j=W.rolePrompt;if(typeof X!=="string"||!X.trim())continue;if(typeof j!=="string"||!j.trim())continue;let Y={agentId:X.trim(),rolePrompt:j};if(typeof W.modelId==="string"&&W.modelId.trim())Y.modelId=W.modelId.trim();if(typeof W.maxIterations==="number"&&Number.isFinite(W.maxIterations))Y.maxIterations=Math.max(1,Math.floor(W.maxIterations));Q.push(Y)}return Q}function nh($){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 A8{teamDirPath;db;constructor($={}){this.teamDirPath=$.teamDir??ih()}init(){this.getRawDb()}ensureTeamDir(){if(!ch(this.teamDirPath))uh(this.teamDirPath,{recursive:!0});return this.teamDirPath}dbPath(){return dh(this.ensureTeamDir(),"teams.db")}getRawDb(){if(this.db)return this.db;let $=ph(this.dbPath());return this.ensureSchema($),this.db=$,$}ensureSchema($){if($.exec("PRAGMA journal_mode = WAL;"),$.exec("PRAGMA busy_timeout = 5000;"),$.exec(`
612
+ ) 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,V0()])}}function $h($){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 R9,M9;function Zh($,Z){if($!=="auto"&&$!=="hub")return;if(Z.hub?.endpoint?.trim())return;dZ(Z.hub?.workspaceRoot?.trim()||Z.hub?.cwd?.trim()||process.cwd())}async function Qh($){await $.reconcileDeadSessions?.().catch(()=>{})}function R_($){try{let Z=new h1;return Z.init(),new x1(Z,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}catch(Z){return $.telemetry?.capture({event:"session_backend_fallback",properties:{requestedBackend:"sqlite",fallbackBackend:"file"}}),f_($.telemetry,{component:"core",operation:"session_backend.sqlite_init",error:Z,severity:"warn",handled:!0,context:{requestedBackend:"sqlite",fallbackBackend:"file"}}),new Gj(void 0,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}}function N_($,Z,Q){return new g1({sessionService:Q??$.sessionService??R_($),capabilities:$.capabilities,logger:$.logger,telemetry:$.telemetry,toolPolicies:$.toolPolicies,distinctId:Z,fetch:$.fetch})}async function _j($){if(R9)return R9;if(M9)return await M9;return M9=(async()=>{return R9=R_($),await Qh(R9),R9})().finally(()=>{M9=void 0}),await M9}async function n6($){let Z=l0($.distinctId);$.telemetry?.setDistinctId(Z);let Q=$h($);if(Zh(Q,$),Q==="remote"){let J=$.remote?.endpoint?.trim();if(!J)throw Error("Remote runtime mode requires `remote.endpoint` to be configured.");return $.logger?.log("Using remote runtime host",{endpoint:J}),new c6({endpoint:J,authToken:$.remote?.authToken,clientType:$.remote?.clientType,displayName:$.remote?.displayName,workspaceRoot:$.remote?.workspaceRoot,cwd:$.remote?.cwd,capabilities:$.capabilities})}if(Q==="hub"){let J=$.hub?.endpoint?.trim(),W=J||await R2({strategy:$.hub?.strategy??"require-hub",workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});if(!W)throw Error("No compatible hub runtime is available.");return $.logger?.log("Using hub runtime host",{url:W,explicitEndpoint:J||void 0}),new _$({url:W,authToken:$.hub?.authToken,clientType:$.hub?.clientType,displayName:$.hub?.displayName,capabilities:$.capabilities,telemetry:$.telemetry},{workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd})}if(Q==="auto"){let J=await y4({endpoint:$.hub?.endpoint,strategy:$.hub?.strategy??"prefer-hub",workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});if(J){$.logger?.log("Using discovered local hub runtime host",{url:J});let W=new _$({url:J,authToken:$.hub?.authToken,clientType:$.hub?.clientType,displayName:$.hub?.displayName,capabilities:$.capabilities,telemetry:$.telemetry},{workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});try{return await W.connect(),W}catch(X){$.logger?.log("Falling back to local runtime host",{reason:"hub_connect_failed",severity:"warn",error:X}),f_($.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"}),N_($,Z)}return N_($,Z)}var w_={};w(w_,{NoOpFeatureFlagsProvider:()=>D8,FeatureFlagsService:()=>U8});import{existsSync as Jh,mkdirSync as Wh,readFileSync as Xh,writeFileSync as jh}from"node:fs";import{dirname as Yh}from"node:path";import{FEATURE_FLAGS as E_,FeatureFlagDefaultValue as Lj}from"@cline/shared";var Vh=3600000,Bh=604800000,C_=1;class U8{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??Vh,this.cacheFilePath=$.cacheFilePath,this.persistentCacheMaxAgeMs=$.persistentCacheMaxAgeMs??Bh,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 J=this.cacheInfo;this.cacheInfo={updateTime:Q,userId:Z||null};try{let W=await this.provider.getAllFlagsAndPayloads({flagKeys:E_.length>0?E_:void 0,context:{...this.context,userId:Z}});if(this.cacheInfo.userId!==Z)return;this.cacheInfo.flagsPayload=W,this.rebuildCacheFromSnapshot(W),this.writePersistentCache()}catch(W){if(this.cacheInfo.userId!==Z)return;throw this.cacheInfo=J.updateTime?J:{updateTime:0,userId:null},this.logger?.error?.("Error polling SDK feature flags",{error:W}),W}}hydrateFromPersistentCache(){let $=this.readPersistentCache();if($)this.hydrateCache($)}isFeatureFlagPayload($){if($===null||typeof $==="string"||typeof $==="number"||typeof $==="boolean")return!0;if(Array.isArray($))return $.every((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(([,J])=>this.isFeatureFlagPayload(J));if(Z.length===0)return;let Q={};for(let[J,W]of Z)Q[J]=W;return Q}readPersistentCache(){try{if(!this.cacheFilePath||!Jh(this.cacheFilePath))return;let $=JSON.parse(Xh(this.cacheFilePath,"utf8"));if(!$||typeof $!=="object")return;let Z=$;if(Z.version!==C_||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;Wh(Yh(this.cacheFilePath),{recursive:!0,mode:448});let $=this.getCacheSnapshot(),Z={version:C_,updatedAt:$.updateTime,userId:$.userId,flagsPayload:$.flagsPayload};jh(this.cacheFilePath,`${JSON.stringify(Z,null,2)}
613
+ `,"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 J=this.getFeatureFlag(Q);Z.set(Q,J??!1)}this.cache=Z}getFeatureFlag($){try{let Z=this.cacheInfo.flagsPayload?.featureFlagPayloads?.[$],Q=this.cacheInfo.flagsPayload?.featureFlags?.[$],J=Z??Q??Lj[$]??void 0;if(!this.cache.has($)||this.cache.get($)!==J)this.telemetry?.capture({event:m.FEATURE_FLAGS.FLAG_CALLED,properties:{$feature_flag:$,$feature_flag_response:Q}});return J}catch(Z){return this.logger?.error?.(`Error checking SDK feature flag ${$}`,{error:Z}),Lj[$]??!1}}getBooleanFlagEnabled($){return this.cache.get($)===!0}getFlagPayload($){return this.cache.get($)??Lj[$]}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 D8{async getAllFlagsAndPayloads(){return{}}enabled=!1;getSettings(){return{enabled:!1,timeoutMs:1000}}async dispose(){}}q2();var x_={};w(x_,{createCheckpointComparePlan:()=>c7,compareCheckpointToWorkspace:()=>w9,buildCheckpointWorkspaceDiff:()=>u7});import{execFile as Uh}from"node:child_process";import*as h_ from"node:fs/promises";import*as o6 from"node:path";import{promisify as Dh}from"node:util";var y_={};w(y_,{trimMessagesToCheckpoint:()=>b_,trimMessagesBeforeUserRun:()=>C9,readSessionCheckpointHistory:()=>_8,findCheckpointForRun:()=>a6,createRestoredCheckpointMetadata:()=>E9,createCheckpointRestorePlan:()=>Oj,beginWorktreeRestoreTransaction:()=>Aj,applyCheckpointToWorktree:()=>qj});import{execFile as Hh}from"node:child_process";import{randomUUID as Kh}from"node:crypto";import{promisify as Gh}from"node:util";var B0=Gh(Hh);async function P_($,Z){try{return(await B0("git",["-C",$,"rev-parse","--verify","--quiet",Z],{windowsHide:!0})).stdout.trim()||void 0}catch{return}}async function Aj($){if((await B0("git",["-C",$,"rev-parse","--is-inside-work-tree"],{windowsHide:!0})).stdout.trim()!=="true")throw Error(`${$} is not a git repository`);let Q=(await B0("git",["-C",$,"rev-parse","--verify","HEAD"],{windowsHide:!0})).stdout.trim(),J=await P_($,"refs/stash"),W=Kh(),X=`refs/cline/restore-transactions/${W}`;await B0("git",["-C",$,"stash","push","--include-untracked","--message",`cline restore transaction ${W}`],{windowsHide:!0});let j=await P_($,"refs/stash"),Y=j!==void 0&&j!==J;if(Y)try{await B0("git",["-C",$,"update-ref",X,j],{windowsHide:!0}),await B0("git",["-C",$,"stash","drop","stash@{0}"],{windowsHide:!0})}catch(B){try{await B0("git",["-C",$,"reset","--hard",Q],{windowsHide:!0}),await B0("git",["-C",$,"clean","-fd"],{windowsHide:!0}),await B0("git",["-C",$,"stash","apply","--index",j],{windowsHide:!0})}catch(H){throw AggregateError([B,H],"Workspace snapshot and rollback both failed")}throw B}let V=!1;return{async commit(){if(V)return;if(V=!0,!Y)return;await B0("git",["-C",$,"update-ref","-d",X],{windowsHide:!0}).catch(()=>{return})},async rollback(){if(V)return;if(await B0("git",["-C",$,"reset","--hard",Q],{windowsHide:!0}),await B0("git",["-C",$,"clean","-fd"],{windowsHide:!0}),Y)await B0("git",["-C",$,"stash","apply","--index",X],{windowsHide:!0}),await B0("git",["-C",$,"update-ref","-d",X],{windowsHide:!0});V=!0}}}function _8($){let Z=$?.metadata?.checkpoint&&typeof $.metadata.checkpoint==="object"&&!Array.isArray($.metadata.checkpoint)?$.metadata.checkpoint:void 0;return(Array.isArray(Z?.history)?Z.history:[]).filter((J)=>!!J&&typeof J==="object"&&!Array.isArray(J)).flatMap((J)=>{let W=String(J.ref??"").trim(),X=Number(J.createdAt??0),j=Number(J.runCount??0);if(W.length===0||!Number.isFinite(X)||!Number.isInteger(j)||j<1)return[];let Y=J.kind==="stash"||J.kind==="commit"?J.kind:void 0;return[{ref:W,createdAt:X,runCount:j,...Y?{kind:Y}:{}}]})}function E9($,Z){let Q=_8($).filter((W)=>W.runCount<=Z),J=Q.at(-1);return J?{latest:J,history:Q}:void 0}function a6($,Z){return $.reduce((Q,J)=>{if(J.runCount>Z)return Q;if(!Q||J.runCount>Q.runCount)return J;return Q},void 0)}function S_($,Z){let Q=0;for(let J=0;J<$.length;J+=1){let W=$[J];if(!W)continue;let X=w1(W);if(X<1)continue;let j=Q+1;if(Q+=X,Q===Z)return{index:J,span:X};if(Q>Z)throw Error(`Run ${Z} is folded into a compacted message spanning runs ${j}-${Q}`)}throw Error(`Could not find user message for run ${Z}`)}function b_($,Z){let{index:Q}=S_($,Z);return $.slice(0,Q+1)}function C9($,Z){let{index:Q,span:J}=S_($,Z);if(J!==1)throw Error(`Cannot fork before run ${Z} because it is folded into a compacted message`);return $.slice(0,Q)}function Oj($){let Z=$.checkpointRunCount;if(!Number.isInteger(Z)||Z<1)throw Error("checkpointRunCount must be a positive integer");let Q=a6(_8($.session),Z);if(!Q)throw Error(`No checkpoint found at or before run ${Z} in session ${$.session.sessionId}`);let J=($.cwd?.trim()||$.session.cwd||$.session.workspaceRoot).trim();if(!J)throw Error("cwd or workspaceRoot is required to restore a checkpoint");return{checkpoint:Q,cwd:J,...$.restoreMessages!==!1?{messages:b_($.messages??[],Z)}:{}}}async function Fh($,Z){if(Z.kind)return Z.kind;let Q=await B0("git",["-C",$,"show","-s","--format=%P%x00%B",Z.ref],{windowsHide:!0}),J=Q.stdout.indexOf("\x00"),W=J<0?[]:Q.stdout.slice(0,J).trim().split(/\s+/).filter(Boolean),X=J<0?"":Q.stdout.slice(J+1);return W.length>=2&&yF(X)?"stash":"commit"}async function qj($,Z){if((await B0("git",["-C",$,"rev-parse","--is-inside-work-tree"],{windowsHide:!0})).stdout.trim()!=="true")throw Error(`${$} is not a git repository`);await B0("git",["-C",$,"cat-file","-e",`${Z.ref}^{commit}`],{windowsHide:!0});let J=await Fh($,Z),W=J==="commit"?Z.ref:`${Z.ref}^1`;if(await B0("git",["-C",$,"cat-file","-e",`${W}^{commit}`],{windowsHide:!0}),J==="stash")await B0("git",["-C",$,"cat-file","-e",`${Z.ref}^2^{commit}`],{windowsHide:!0});if(await B0("git",["-C",$,"reset","--hard",W],{windowsHide:!0}),await B0("git",["-C",$,"clean","-fd"],{windowsHide:!0}),J==="commit")return;await B0("git",["-C",$,"stash","apply",Z.ref],{windowsHide:!0})}var _h=Dh(Uh),Lh=52428800;async function m7($,Z){let{stdout:Q}=await _h("git",["-C",$,...Z],{windowsHide:!0,maxBuffer:Lh,encoding:"utf8"});return Q}function k_($){return $.split("\x00").filter(Boolean)}function I_($,Z){let Q=o6.resolve($,Z),J=o6.relative($,Q);if(J.startsWith("..")||o6.isAbsolute(J))throw Error(`Checkpoint diff path escapes workspace: ${Z}`);return Q}async function Ah($,Z,Q){try{return await m7($,["show",`${Z}:${Q}`])}catch{return""}}async function Oh($,Z){try{return await h_.readFile(I_($,Z),"utf8")}catch{return""}}async function qh($,Z){await m7($,["cat-file","-e",`${Z.ref}^{tree}`]);let[Q,J]=await Promise.all([m7($,["diff","--name-only","-z",Z.ref,"--"]),m7($,["ls-files","--others","--exclude-standard","-z"])]);return[...new Set([...k_(Q),...k_(J)])].sort((X,j)=>X.localeCompare(j))}function c7($){let Z=$.checkpointRunCount;if(!Number.isInteger(Z)||Z<1)throw Error("checkpointRunCount must be a positive integer");let Q=a6(_8($.session),Z);if(!Q)throw Error(`No checkpoint found at or before run ${Z} in session ${$.session.sessionId}`);let J=($.cwd?.trim()||$.session.cwd||$.session.workspaceRoot).trim();if(!J)throw Error("cwd or workspaceRoot is required to compare a checkpoint");return{checkpoint:Q,cwd:J}}async function u7($,Z){let Q=await qh($,Z);return(await Promise.all(Q.map(async(W)=>{let[X,j]=await Promise.all([Ah($,Z.ref,W),Oh($,W)]);return{filePath:I_($,W),leftContent:X,rightContent:j}}))).filter((W)=>W.leftContent!==W.rightContent)}async function w9($){let Z=c7($),Q=await u7(Z.cwd,Z.checkpoint);return{...Z,diffs:Q}}class P9{clientName;runtimeAddress;automation;settings;featureFlags;pendingPrompts;host;prepare;capabilities;logger;telemetry;distinctId;automationService;activeSessionBootstraps=new Map;unsubscribeBootstrapCleanup;constructor($,Z,Q,J,W,X,j,Y,V,B){this.clientName=Z,this.runtimeAddress=Q,this.host=$,this.prepare=J,this.capabilities=W,this.logger=X,this.telemetry=j,this.distinctId=Y,this.featureFlags=V,this.settings=OD($),this.pendingPrompts=qD($),this.automation=new OX(()=>{if(!this.automationService)throw Error("ClineCore automation is not enabled. Pass `automation: true` or automation options to ClineCore.create().");return this.automationService}),this.automationService=B?new U9({workspaceRoot:B.workspaceRoot??process.cwd(),specs:{cronSpecsDir:B.cronSpecsDir??B.cronDir,scope:KU(B.cronScope),workspaceRoot:B.workspaceRoot},runtimeHandlers:GU({host:$,getExtensionContext:()=>U7({automationService:this.automationService,automation:this.automation,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}),dbPath:B.dbPath,logger:B.logger,pollIntervalMs:B.pollIntervalMs,claimLeaseSeconds:B.claimLeaseSeconds,globalMaxConcurrency:B.globalMaxConcurrency,watcherDebounceMs:B.watcherDebounceMs}):void 0,this.unsubscribeBootstrapCleanup=this.host.subscribe((H)=>{if(H.type!=="ended")return;this.disposeSessionBootstrap(H.payload.sessionId)})}static async create($={}){let Z=l0($.distinctId),Q=y0($.capabilities),J={...$,capabilities:Q,distinctId:Z},W=await n6(J),X=HU($.automation),j=$.featureFlags||new U8({provider:new D8,telemetry:$.telemetry,logger:$.logger,context:{distinctId:Z,clientName:$.clientName}}),Y=new P9(W,$.clientName,W.runtimeAddress,$.prepare,Q,$.logger,$.telemetry,Z,j,X?{...X,logger:$.logger}:void 0);if(X&&X.autoStart!==!1)await Y.automation.start();return Y}async disposeSessionBootstrap($){let Z=this.activeSessionBootstraps.get($);if(!Z)return;this.activeSessionBootstraps.delete($),await Promise.resolve(Z.dispose?.())}async start($){let Z=zD($),Q=await this.prepare?.(Z);try{let J=Q?await Q.applyToStartSessionInput(Z):Z,W=await this.host.startSession(IX(J,{defaultCapabilities:this.capabilities,withExtensionContext:(X)=>U7({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(W.sessionId))this.activeSessionBootstraps.set(W.sessionId,Q);else await Promise.resolve(Q.dispose?.());return TD({input:J,sessionId:W.sessionId,telemetry:this.telemetry,clientName:this.clientName,runtimeAddress:this.runtimeAddress}),W}catch(J){throw await Promise.resolve(Q?.dispose?.()),J}}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 k7(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(...$);updateSessionCompactionState=(...$)=>this.host.updateSessionCompactionState(...$);readSessionCompactionState=(...$)=>this.host.readSessionCompactionState(...$);readMessages=(...$)=>this.host.readSessionMessages(...$);readLiveMessages=($)=>this.host.readLiveSessionMessages?this.host.readLiveSessionMessages($):this.host.readSessionMessages($);async restore($){let Z=$.start?IX($.start,{defaultCapabilities:this.capabilities,withExtensionContext:(Q)=>U7({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 w9({session:Q,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd})}ingestHookEvent=(...$)=>this.host.dispatchHookEvent(...$);subscribe($,Z){return this.host.subscribe($,Z)}updateSessionModel=(...$)=>{return this.host.updateSessionModel?.(...$)??Promise.resolve()};updateSessionConnection=(...$)=>{return this.host.updateSessionConnection?.(...$)??Promise.resolve()}}var v_={};w(v_,{resolvePluginSkillDirectoriesFromPaths:()=>K$,resolvePluginConfigSearchPaths:()=>C5,resolveAndLoadAgentPlugins:()=>q6,resolveAgentPluginPaths:()=>H$,loadAgentPluginsFromPathsWithDiagnostics:()=>s2,loadAgentPluginsFromPaths:()=>kQ,loadAgentPluginFromPath:()=>M5,discoverPluginModulePaths:()=>w5});var u_={};w(u_,{toHookConfigFileName:()=>b5,runSubprocessEvent:()=>G$,runHook:()=>t6,resolveHooksConfigSearchPaths:()=>P5,parseHookEventPayload:()=>s6,mergeAgentHooks:()=>Z8,listHookConfigFiles:()=>s$,createSubprocessHooks:()=>l7,createHookConfigFileHooks:()=>k5,createHookConfigFileExtension:()=>f6,createHookAuditHooks:()=>N6,createAgentHooksExtension:()=>z6,HookEventPayloadSchema:()=>p7,HookEventNameSchema:()=>d7,HookConfigFileName:()=>T6,HOOK_CONFIG_FILE_EVENT_MAP:()=>S5,HOOKS_CONFIG_DIRECTORY_NAME:()=>mQ});import{HookEventNameSchema as d7,HookEventPayloadSchema as p7,parseHookEventPayload as s6,resolveHookSessionContext as zh}from"@cline/shared";import{z as L8}from"zod";var Th=L8.object({contextModification:L8.string().optional(),cancel:L8.boolean().optional(),review:L8.boolean().optional(),errorMessage:L8.string().optional(),context:L8.string().optional(),overrideInput:L8.unknown().optional()}).passthrough();var Nh=["agent","hook"];async function t6($,Z={}){let Q=Z.command??Nh;return await G$($,{command:Q,cwd:Z.cwd,env:Z.env,detached:Z.detached,timeoutMs:Z.timeoutMs,onSpawn:Z.onSpawn})}function c_($){return $ instanceof Error?$:Error(String($))}function fh($){if(!$||typeof $!=="object")return;let Z=Th.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 W=typeof Q.context==="string"?Q.context:typeof Q.contextModification==="string"?Q.contextModification:typeof Q.errorMessage==="string"&&Q.errorMessage.length>0?Q.errorMessage:void 0;return{cancel:typeof Q.cancel==="boolean"?Q.cancel:void 0,review:typeof Q.review==="boolean"?Q.review:void 0,context:W,overrideInput:Object.hasOwn(Q,"overrideInput")?Q.overrideInput:void 0}}function m_($){if(!$||typeof $!=="object")return{};let Z={};for(let[Q,J]of Object.entries($))if(typeof J==="string")Z[Q]=J;else Z[Q]=JSON.stringify(J);return Z}function A$($,Z,Q){let J=Q.env??process.env,W=J.CLINE_USER_ID?.trim()||J.USER?.trim()||"unknown",X=Q.cwd||process.cwd();return{clineVersion:J.CLINE_VERSION?.trim()||"",hookName:$,timestamp:new Date().toISOString(),taskId:Z.conversationId,sessionContext:zh(Q.sessionContext,{hookName:$,conversationId:Z.conversationId,agentId:Z.agentId,parentAgentId:Z.parentAgentId}),workspaceRoots:X?[X]:[],workspaceInfo:Q.workspaceInfo,userId:W,agent_id:Z.agentId,parent_agent_id:Z.parentAgentId}}function Rh($){return{name:$.name,message:$.message,stack:$.stack}}function Mh($){let Z=String($??"").toLowerCase();return Z.includes("cancel")||Z.includes("abort")||Z.includes("interrupt")}function Eh($){return{agentId:$.snapshot.agentId,conversationId:$.snapshot.conversationId??$.snapshot.runId??$.snapshot.agentId,parentAgentId:$.snapshot.parentAgentId??null}}function Ch($){return $.filter((Z)=>Z.type==="text"&&typeof Z.text==="string").map((Z)=>Z.text).join("")}function wh($){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 Ph($){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 A8($,Z){try{let Q=await t6($,{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?.(c_(Q),$)}}function l7($={}){return{hooks:{beforeRun:async(Y)=>{let V=Eh(Y);if(($.env??process.env).CLINE_HOOK_AGENT_RESUME==="1"){let H={...A$("agent_resume",V,$),hookName:"agent_resume",taskResume:{taskMetadata:{},previousState:{}}};await A8(H,$)}else{let H={...A$("agent_start",V,$),hookName:"agent_start",taskStart:{taskMetadata:{}}};await A8(H,$)}return},beforeTool:async(Y)=>{let V={agentId:Y.snapshot.agentId,conversationId:Y.snapshot.conversationId??Y.snapshot.runId??Y.snapshot.agentId,parentAgentId:Y.snapshot.parentAgentId??null},B={...A$("tool_call",V,$),hookName:"tool_call",iteration:Y.snapshot.iteration,tool_call:{id:Y.toolCall.toolCallId,name:Y.toolCall.toolName,input:Y.input},preToolUse:{toolName:Y.toolCall.toolName,parameters:m_(Y.input)}};try{let H=await t6(B,{command:$.command,cwd:$.cwd,env:$.env,detached:!1,timeoutMs:$.timeoutMs,onSpawn:$.onSpawn});if($.onDispatch?.({payload:B,result:H,detached:!1}),H?.timedOut)throw Error("tool_call hook command timed out");if(H?.parseError)throw Error(`tool_call hook produced invalid control JSON: ${H.parseError}`);return Ph(fh(H?.parsedJson))}catch(H){$.onDispatchError?.(c_(H),B);return}},afterTool:async(Y)=>{let V=wh(Y),B={agentId:Y.snapshot.agentId,conversationId:Y.snapshot.conversationId??Y.snapshot.runId??Y.snapshot.agentId,parentAgentId:Y.snapshot.parentAgentId??null},H={...A$("tool_result",B,$),hookName:"tool_result",iteration:Y.snapshot.iteration,tool_result:V,postToolUse:{toolName:V.name,parameters:m_(V.input),result:typeof V.output==="string"?V.output:JSON.stringify(V.output),success:!V.error,executionTimeMs:V.durationMs}};await A8(H,$);return},afterRun:async({snapshot:Y,result:V})=>{let B={agentId:Y.agentId,conversationId:Y.conversationId??Y.runId??Y.agentId,parentAgentId:Y.parentAgentId??null};if(V.status==="completed"){let G={...A$("agent_end",B,$),hookName:"agent_end",iteration:V.iterations,turn:{outputText:V.outputText,status:V.status},taskComplete:{taskMetadata:{}}};await A8(G,$);return}let H=V.status==="aborted"||Mh(V.error?.message)?"agent_abort":"agent_error",K=H==="agent_error"?{...A$(H,B,$),hookName:H,iteration:V.iterations,error:Rh(V.error??Error("Agent run failed")),taskCancel:{taskMetadata:{}}}:{...A$(H,B,$),hookName:H,reason:V.error?.message,taskCancel:{taskMetadata:{}}};await A8(K,$)},onEvent:async(Y)=>{if(Y.type!=="message-added"||Y.message.role!=="user")return;let V={agentId:Y.snapshot.agentId,conversationId:Y.snapshot.conversationId??Y.snapshot.runId??Y.snapshot.agentId,parentAgentId:Y.snapshot.parentAgentId??null},B={...A$("prompt_submit",V,$),hookName:"prompt_submit",userPromptSubmit:{prompt:Ch(Y.message.content),attachments:[]}};await A8(B,$)}},shutdown:async({agentId:Y,conversationId:V,parentAgentId:B,reason:H})=>{let K={...A$("session_shutdown",{agentId:Y,conversationId:V,parentAgentId:B},$),hookName:"session_shutdown",reason:H};await A8(K,$)}}}i7();var p_={};w(p_,{registerRemoteConfigSessionBlobUpload:()=>a7,readRemoteConfigSessionBlobUploadMetadata:()=>zj,prepareRemoteConfigCoreIntegration:()=>Nj,createRemoteConfigSessionMessagesArtifactUploader:()=>Tj,buildRemoteConfigSessionBlobUploadMetadata:()=>r7,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY:()=>n7});import{buildRemoteConfigSessionBlobUploadMetadata as r7,clearRemoteConfigSessionBlobUpload as Sh,createClineTelemetryServiceConfig as bh,createSessionId as yh,createRemoteConfigSessionMessagesArtifactUploader as kh,prepareRemoteConfigRuntime as hh,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY as n7,readRemoteConfigSessionBlobUploadMetadata as zj,registerRemoteConfigSessionBlobUpload as a7}from"@cline/shared";function Ih($,Z){let Q=$.telemetry||Z.telemetryService?{...Z.telemetryService??{},...$.telemetry??{}}:void 0;if(!Q)return;return a1(bh(Q)).telemetry}function Tj(){let $=kh();return{async uploadMessagesFile(Z){await $.uploadMessagesFile(Z)}}}async function Nj($){let Z=await hh($),Q=Ih(Z,$),J=[Z.pluginDefinition],W=Z.claims?.subject,X=r7(Z.bundle?.remoteConfig,W),j;return{prepared:Z,extensions:J,telemetry:Q,applyToStartSessionInput(Y){let V=Y.config.extensions??[],B=Y.config.telemetry,H=X?Y.config.sessionId?.trim()||yh():Y.config.sessionId;if(H&&X)j=H;let K=H&&X?a7(H,Z.bundle?.remoteConfig,W):void 0,G=K?{...Y.sessionMetadata??{},[n7]:K}:Y.sessionMetadata;return{...Y,...G?{sessionMetadata:G}:{},config:{...Y.config,...H?{sessionId:H}:{},extensions:[...V,...J],telemetry:Q??B}}},async dispose(){if(j)Sh(j)}}}var s_={};w(s_,{createTeamName:()=>t7,DefaultRuntimeBuilder:()=>Z4});import{hasRuntimeConfigExtension as oh,resolveMcpTimeoutSeconds as sh}from"@cline/shared";import{nanoid as th}from"nanoid";H1();var o_={};w(o_,{createLocalTeamStore:()=>Ej,SqliteTeamStore:()=>O8,FileTeamStore:()=>S9});import{appendFileSync as xh,existsSync as e6,mkdirSync as l_,readdirSync as gh,readFileSync as i_,renameSync as vh,writeFileSync as mh}from"node:fs";import{join as fj}from"node:path";import{resolveTeamDataDir as ch}from"@cline/shared/storage";function r_(){return new Date().toISOString()}function Rj($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function n_($){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 S9{teamDirPath;constructor($={}){this.teamDirPath=$.teamDir??ch()}init(){this.ensureTeamDir()}listTeamNames(){if(!e6(this.teamDirPath))return[];return gh(this.teamDirPath,{withFileTypes:!0}).filter(($)=>$.isDirectory()).filter(($)=>e6(this.statePath($.name))).map(($)=>$.name).sort()}readState($){let Z=this.readEnvelope($);return Z?.teamState?n_(Z.teamState):void 0}readHistory($,Z=200){let Q=this.historyPath($);if(!e6(Q))return[];return i_(Q,"utf8").split(`
614
+ `).map((J)=>J.trim()).filter(Boolean).map((J)=>{try{return JSON.parse(J)}catch{return}}).filter((J)=>J!==void 0).reverse().slice(0,Z)}loadRuntime($){let Z=this.readEnvelope($);return{state:Z?.teamState?n_(Z.teamState):void 0,teammates:Z?.teammates??[],interruptedRunIds:[]}}handleTeamEvent($,Z){this.ensureTeamSubdir($),xh(this.historyPath($),`${JSON.stringify({ts:r_(),eventType:Z.type,payload:Z})}
615
+ `,"utf8")}persistRuntime($,Z,Q){this.ensureTeamSubdir($);let J={version:1,updatedAt:r_(),teamState:Z,teammates:Q},W=this.statePath($),X=`${W}.tmp`;mh(X,`${JSON.stringify(J,null,2)}
616
+ `,"utf8"),vh(X,W)}markInProgressRunsInterrupted($,Z){let Q=this.readEnvelope($);if(!Q?.teamState?.runs?.length)return[];let J=Q.teamState.runs.filter((X)=>X.status==="queued"||X.status==="running").map((X)=>X.id);if(J.length===0)return[];let W=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:W}:X)},this.persistRuntime($,Q.teamState,Q.teammates),J}ensureTeamDir(){if(!e6(this.teamDirPath))l_(this.teamDirPath,{recursive:!0});return this.teamDirPath}ensureTeamSubdir($){let Z=fj(this.ensureTeamDir(),Rj($));if(!e6(Z))l_(Z,{recursive:!0});return Z}statePath($){return fj(this.ensureTeamDir(),Rj($),"state.json")}historyPath($){return fj(this.ensureTeamDir(),Rj($),"task-history.jsonl")}readEnvelope($){let Z=this.statePath($);if(!e6(Z))return;try{let Q=JSON.parse(i_(Z,"utf8"));if(Q?.version===1&&Q.teamState)return Q}catch{}return}}import{existsSync as uh,mkdirSync as dh}from"node:fs";import{join as ph}from"node:path";import{safeJsonParse as a_}from"@cline/shared";import{loadSqliteDb as lh,nowIso as Mj}from"@cline/shared/db";import{resolveDbDataDir as ih}from"@cline/shared/storage";function rh(){return ih()}function $4($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function nh($){let Z=a_($);if(!Array.isArray(Z))return[];let Q=[];for(let J of Z){if(!J||typeof J!=="object")continue;let W=J,X=W.agentId,j=W.rolePrompt;if(typeof X!=="string"||!X.trim())continue;if(typeof j!=="string"||!j.trim())continue;let Y={agentId:X.trim(),rolePrompt:j};if(typeof W.modelId==="string"&&W.modelId.trim())Y.modelId=W.modelId.trim();if(typeof W.maxIterations==="number"&&Number.isFinite(W.maxIterations))Y.maxIterations=Math.max(1,Math.floor(W.maxIterations));Q.push(Y)}return Q}function ah($){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 O8{teamDirPath;db;constructor($={}){this.teamDirPath=$.teamDir??rh()}init(){this.getRawDb()}ensureTeamDir(){if(!uh(this.teamDirPath))dh(this.teamDirPath,{recursive:!0});return this.teamDirPath}dbPath(){return ph(this.ensureTeamDir(),"teams.db")}getRawDb(){if(this.db)return this.db;let $=lh(this.dbPath());return this.ensureSchema($),this.db=$,$}ensureSchema($){if($.exec("PRAGMA journal_mode = WAL;"),$.exec("PRAGMA busy_timeout = 5000;"),$.exec(`
617
617
  CREATE TABLE IF NOT EXISTS team_store_schema_version (
618
618
  lock INTEGER PRIMARY KEY CHECK (lock = 1),
619
619
  version INTEGER NOT NULL
@@ -697,7 +697,7 @@ ${W}`,$.config.mode)}function f9($,Z){return dk($,Z==="plan"?"plan":Z==="yolo"?"
697
697
  version INTEGER NOT NULL DEFAULT 1,
698
698
  PRIMARY KEY(team_name, fragment_id)
699
699
  );
700
- `)}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 = ?",[$4($)]);if(!Z)return;let Q=n_(Z.state_json);if(!Q)return;try{return nh(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 ?",[$4($),Z]).flatMap((Q)=>{try{return[{eventType:Q.event_type,payload:JSON.parse(Q.payload_json),ts:Q.ts}]}catch{return[]}})}loadRuntime($){let Z=$4($),Q=this.readState(Z),J=this.queryOne("SELECT team_name, state_json, teammates_json, updated_at FROM team_runtime_snapshot WHERE team_name = ?",[Z]),W=J?rh(J.teammates_json):[];return{state:Q,teammates:W,interruptedRunIds:[]}}appendTeamEvent($,Z,Q,J){this.run(`INSERT INTO team_events (team_name, ts, event_type, payload_json, causation_id, correlation_id)
700
+ `)}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 = ?",[$4($)]);if(!Z)return;let Q=a_(Z.state_json);if(!Q)return;try{return ah(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 ?",[$4($),Z]).flatMap((Q)=>{try{return[{eventType:Q.event_type,payload:JSON.parse(Q.payload_json),ts:Q.ts}]}catch{return[]}})}loadRuntime($){let Z=$4($),Q=this.readState(Z),J=this.queryOne("SELECT team_name, state_json, teammates_json, updated_at FROM team_runtime_snapshot WHERE team_name = ?",[Z]),W=J?nh(J.teammates_json):[];return{state:Q,teammates:W,interruptedRunIds:[]}}appendTeamEvent($,Z,Q,J){this.run(`INSERT INTO team_events (team_name, ts, event_type, payload_json, causation_id, correlation_id)
701
701
  VALUES (?, ?, ?, ?, NULL, ?)`,[$4($),Mj(),Z,JSON.stringify(Q),J??null])}persistRuntime($,Z,Q){let J=$4($),W=Mj();this.withTransaction(()=>{this.run(`INSERT INTO team_runtime_snapshot (team_name, state_json, teammates_json, updated_at)
702
702
  VALUES (?, ?, ?, ?)
703
703
  ON CONFLICT(team_name) DO UPDATE SET
@@ -744,26 +744,26 @@ ${W}`,$.config.mode)}function f9($,Z){return dk($,Z==="plan"?"plan":Z==="yolo"?"
744
744
  reviewed_by = excluded.reviewed_by,
745
745
  reviewed_at = excluded.reviewed_at,
746
746
  version = team_outcome_fragments.version + 1`,[J,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=$4($),J=this.queryAll("SELECT run_id FROM team_runs WHERE team_name = ? AND status IN ('queued', 'running')",[Q]);if(J.length===0)return[];let W=Mj();return this.run(`UPDATE team_runs SET status = 'interrupted', error = ?, ended_at = ?, version = version + 1
747
- WHERE team_name = ? AND status IN ('queued', 'running')`,[Z,W,Q]),J.map((X)=>X.run_id)}handleTeamEvent($,Z){this.appendTeamEvent($,Z.type,Z)}}function Ej($={}){try{let Z=new A8($);return Z.init(),Z}catch{let Z=new S9({teamDir:$.teamDir});return Z.init(),Z}}function o7($,Z){return ah($,Z)}function th($,Z){let Q=Z?.["*"]??{},J=Z?.[$]??{};return{...Q,...J}.enabled!==!1}function eh($,Z){return $.filter((Q)=>th(Q.name,Z))}function Cj($,Z){return n1(eh($,Z))}var $I={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 ZI($){let Z=$.trim().toLowerCase();return $I[Z]??Z}function QI($,Z){if(Z.tools===void 0)return $;let Q=new Set(Z.tools.map(ZI));if(Z.skills!==void 0)Q.add("skills");return $.filter((J)=>Q.has(J.name))}function t7(){return`team-${sh(5)}`}function s7($,Z,Q,J,W,X,j,Y,V){let B=Q1[j$({mode:Q})],H=X6(Z,J,Q,W??W6);return Cj(i2({cwd:$,telemetry:V,...B,enableSkills:!!j,...H,executors:{...j?{skills:j}:{},...Y??{}}}),X)}function JI($){return s7($.cwd,$.providerId,$.mode,$.modelId,$.toolRoutingRules,$.toolPolicies,WI,$.toolExecutors).some((Z)=>Z.name==="skills")}var WI=async()=>"";async function XI($){let Z=W0();if(!U$({filePath:Z}))return{tools:[]};let Q=new V8({clientFactory:I6({settingsPath:Z})}),J;try{J=await Y8(Q,{filePath:Z})}catch(Y){await Q.dispose().catch(()=>{});let V=Y instanceof Error?Y.message:String(Y);return $?.log(`[mcp] Failed to load MCP settings, skipping MCP tools: ${V}`),{tools:[]}}let W=J.filter((Y)=>Y.disabled!==!0),X=await Promise.allSettled(W.map((Y)=>g6({serverName:Y.name,provider:Q,timeoutMs:oh(Y.timeoutSeconds)*1000}))),j=[];for(let[Y,V]of X.entries())if(V.status==="fulfilled")j.push(...V.value);else{let B=V.reason instanceof Error?V.reason.message:String(V.reason);$?.log(`[mcp] Failed to load tools from MCP server "${W[Y].name}", skipping: ${B}`)}return{tools:j,shutdown:async()=>{await Q.dispose()}}}function jI($,Z){if(!$)return;for(let Q of $.getTeammateIds())try{$.shutdownTeammate(Q,Z)}catch{}}function YI($){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 VI($){let Z=Q1[j$({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 Z4{teamRuntimeEntries=new Map;async build($){let{config:Z,hooks:Q,extensions:J,logger:W,telemetry:X,createSpawnTool:j,onTeamRestored:Y,userInstructionService:V,configExtensions:B,toolExecutors:H}=$,K=$.onTeamEvent??(()=>{}),G=VI(Z),F=Z.workspaceRoot??Z.cwd,U=$.toolPolicies??Z.toolPolicies,_=f1(),L=[],O=Z.teamName?.trim()||t7(),D=Z.sessionId?.trim()||O,q=G.enableSpawnAgent?u6({workspaceRoot:F}):{configs:[],errors:[]},T=q.configs.some((i)=>i.skills!==void 0),z=o7(B,"rules"),A=o7(B,"skills"),R=A||T,N=o7(B,"workflows"),S=o7(B,"plugins"),y=z||A||N,s=!1,c=Boolean(V),b=V,r;for(let i of q.errors)(W??Z.logger)?.log?.(`[agents] Failed to load agent config at ${i.path}: ${i.error.message}`);if(!b&&(y||T))b=Q2({skills:R?{workspacePath:F,includePluginSkills:S,pluginSkillDirectories:S?$.pluginSkillDirectories:void 0,pluginPaths:Z.pluginPaths,cwd:Z.cwd}:{workspacePath:F},rules:{workspacePath:Z.cwd},workflows:{workspacePath:Z.cwd}});if(b)await b.start().catch(()=>{});let O0=G.enableTools&&A&&Boolean(b)&&b?.hasConfiguredSkills(Z.skills)===!0&&JI({cwd:Z.cwd,providerId:Z.providerId,mode:G.mode,modelId:Z.modelId,toolRoutingRules:Z.toolRoutingRules,toolPolicies:U,toolExecutors:H}),N$=b&&y?b.createExtension({includeRules:z,includeSkills:A,includeWorkflows:N,registerSkillsTool:O0,allowedSkillNames:Z.skills}):void 0,f$=N$?[...J??Z.extensions??[],N$]:J??Z.extensions;if(G.enableTools){if(L.push(...s7(Z.cwd,Z.providerId,G.mode,Z.modelId,Z.toolRoutingRules,U,void 0,H,X??Z.telemetry)),!G.disableMcpSettingsTools){let i=await XI(Z.logger);L.push(...i.tools),r=i.shutdown}}let X0,u1=G.enableAgentTeams?Ej():void 0,R$=u1?.loadRuntime(D),q1=R$?.state,p0=R$?.teammates??[],M$=new Map(p0.map((i)=>[i.agentId,i])),R0=Z.sessionId||O,h0,z1=[],u=!1,x0=i$({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,reasoningEffort:Z.reasoningEffort,thinkingBudgetTokens:Z.thinkingBudgetTokens,maxTokensPerTurn:Z.maxTokensPerTurn,temperature:Z.temperature,maxIterations:Z.maxIterations,hooks:Q,extensions:f$,logger:W??Z.logger,telemetry:$.telemetry??Z.telemetry,workspaceMetadata:Z.workspaceMetadata});if(G.enableSpawnAgent){if(q.configs.length>0)L.push(...Cj(d6({configProvider:x0,agents:q.configs,createSubAgentTools:(i)=>G.enableTools?QI(s7(Z.cwd,i.providerId??Z.providerId,G.mode,i.modelId??Z.modelId,Z.toolRoutingRules,U,i.skills!==void 0&&b?.createSkillsExecutor?b.createSkillsExecutor(i.skills):void 0,H,X??Z.telemetry),i):[],hookErrorMode:Z.hookErrorMode,toolPolicies:U,requestToolApproval:$.requestToolApproval,onSubAgentEvent:$.onSubAgentEvent,onSubAgentStart:$.onSubAgentStart,onSubAgentEnd:$.onSubAgentEnd}),U))}if(!this.teamRuntimeEntries.has(R0))this.teamRuntimeEntries.set(R0,{delegatedAgentConfigProvider:x0});let I=()=>{if(!G.enableAgentTeams)return;let i=this.teamRuntimeEntries.get(R0)??{delegatedAgentConfigProvider:x0};if(this.teamRuntimeEntries.set(R0,i),X0=i.runtime,!X0){if(X0=new G8({teamName:O,leadAgentId:Z.sessionId||"lead",missionLogIntervalSteps:G.missionLogIntervalSteps,missionLogIntervalMs:G.missionLogIntervalMs,onTeamEvent:(G0)=>{if(K(G0),X0&&u1){if(G0.type==="teammate_spawned"&&G0.teammate?.rolePrompt){let d1={agentId:G0.agentId,rolePrompt:G0.teammate.rolePrompt,modelId:G0.teammate.modelId,maxIterations:G0.teammate.maxIterations};M$.set(d1.agentId,d1)}if(G0.type==="teammate_shutdown"&&!YI(G0.reason))M$.delete(G0.agentId);u1.handleTeamEvent(D,G0),u1.persistRuntime(D,X0.exportState(),Array.from(M$.values()))}}}),q1)X0.hydrateState(q1),u=!0;i.runtime=X0}if(!s){if(!X0)return;s=!0;let G0=B6({runtime:X0,leadAgentId:Z.sessionId||"lead",restoredFromPersistence:Boolean(q1),restoredTeammates:p0,includeLeadSpawnTool:!0,includeLeadManagementTools:!0,onLeadToolsUnlocked:(d1)=>{z1=d1,h0?.addTools(d1)},createBaseTools:G.enableTools?()=>s7(Z.cwd,Z.providerId,G.mode,Z.modelId,Z.toolRoutingRules,U,void 0,H,X??Z.telemetry):void 0,teammateConfigProvider:x0});if(u)X0.recoverActiveRuns("runtime_recovered");if(G0.restoredFromPersistence)Y?.();L.push(...G0.tools)}return X0};if(G.enableSpawnAgent&&j){let i=j();L.push({...i,execute:async(G0,d1)=>{return I(),i.execute(G0,d1)}})}if(G.enableAgentTeams)I();let H0=Cj(L,U),M0=H0.some((i)=>i.name==="submit_and_exit"&&i.lifecycle?.completesRun===!0),E0=G.enableAgentTeams?()=>{let i=this.teamRuntimeEntries.get(R0)?.runtime;if(!i)return;let G0=i.listTasks(),d1=G0.some((E$)=>E$.status==="in_progress"||E$.status==="pending"),UV=i.listRuns({}),EO=UV.some((E$)=>E$.status==="running"||E$.status==="queued");if(d1||EO){let E$=G0.filter((s0)=>s0.status==="in_progress"||s0.status==="pending").map((s0)=>`${s0.id} (${s0.status}): ${s0.title}`).join(", "),DV=UV.filter((s0)=>s0.status==="running"||s0.status==="queued").map((s0)=>`${s0.id} (${s0.status})`).join(", "),u3=[];if(E$)u3.push(`Unfinished tasks: ${E$}`);if(DV)u3.push(`Active runs: ${DV}`);return`[SYSTEM] You still have team obligations. ${u3.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,U2=M0?{requireCompletionTool:!0,...E0?{completionGuard:E0}:{}}:E0?{completionGuard:E0}:void 0;return{tools:H0,logger:W??Z.logger,telemetry:X??Z.telemetry,teamRuntime:X0,teamRestoredFromPersistence:Boolean(q1),delegatedAgentConfigProvider:this.teamRuntimeEntries.get(R0)?.delegatedAgentConfigProvider??x0,extensions:f$,completionPolicy:U2,registerLeadAgent:(i)=>{if(h0=i,z1.length>0)i.addTools(n1(z1,[..._]))},shutdown:async(i)=>{if(jI(X0,i),this.teamRuntimeEntries.delete(R0),await r?.(),!c)b?.stop()}}}}var s_={};w(s_,{RuntimeOAuthTokenManager:()=>Q4,OAuthReauthRequiredError:()=>O8});function BI($,Z){let Q=$?.expiresAt,J=Z?.expiresAt;return $?.accessToken===Z?.accessToken&&$?.refreshToken===Z?.refreshToken&&$?.accountId===Z?.accountId&&Q===J}class O8 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 Q4{providerSettingsManager;telemetry;refreshInFlight=new Map;constructor($){this.providerSettingsManager=$?.providerSettingsManager??new v1,this.telemetry=$?.telemetry}async resolveProviderApiKey($){let Z=U0($.providerId);if(!Z)return null;return this.resolveWithSingleFlight(Z.providerId,Z.storageProviderId,$.forceRefresh)}async resolveWithSingleFlight($,Z,Q=!1){let J=this.refreshInFlight.get(Z);if(J)return J;let W=this.resolveProviderApiKeyInternal($,Z,Q).catch((X)=>{throw X}).finally(()=>{this.refreshInFlight.delete(Z)});return this.refreshInFlight.set(Z,W),W}async resolveProviderApiKeyInternal($,Z,Q){let J=U0($);if(!J)return null;let W=this.providerSettingsManager.getProviderSettings(Z);if(!W)return t(`oauth.resolve providerId=${$} storageProviderId=${Z} outcome=no_settings`),null;let X=d4($,W);if(!X)return t(`oauth.resolve providerId=${$} storageProviderId=${Z} outcome=no_credentials`),null;t(`oauth.resolve.start providerId=${$} storageProviderId=${Z} forceRefresh=${Q} accessTokenHash=${P0(X.access)} refreshTokenHash=${P0(X.refresh)}`);let j=await J.refresh({settings:W,credentials:X,forceRefresh:Q,telemetry:this.telemetry});if(!j)throw t(`oauth.resolve providerId=${$} outcome=refresh_returned_null`),new O8($);let Y=M2({manager:this.providerSettingsManager,providerId:$,settings:W,credentials:j,setLastUsed:!1,save:!1}),V=!BI(W.auth,Y.auth);if(V)t(`oauth.resolve.refreshed providerId=${$} newAccessTokenHash=${P0(j.access)} newRefreshTokenHash=${P0(j.refresh)} savingToDisk=true`),this.providerSettingsManager.saveProviderSettings(Y,{setLastUsed:!1,tokenSource:"oauth"});else t(`oauth.resolve providerId=${$} outcome=not_refreshed`);return{apiKey:J.getApiKey(Y)??j.access,accountId:j.accountId,refreshed:V}}}var e_={};w(e_,{requestDesktopToolApproval:()=>Pj});import{mkdir as HI,readFile as KI,unlink as GI,writeFile as FI}from"node:fs/promises";import{join as t_}from"node:path";function UI($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function DI($){return new Promise((Z)=>setTimeout(Z,$))}async function wj($){try{await GI($)}catch{}}async function Pj($,Z={}){let Q=Z.approvalDir?.trim(),J=Z.sessionId?.trim();if(!Q||!J)return{approved:!1,reason:"Desktop tool approval IPC is not configured"};await HI(Q,{recursive:!0});let W=UI(`${$.toolCallId}`),X=t_(Q,`${J}.request.${W}.json`),j=t_(Q,`${J}.decision.${W}.json`),Y=Z.nowIso??(()=>new Date().toISOString());await FI(X,`${JSON.stringify({requestId:W,sessionId:J,createdAt:Y(),toolCallId:$.toolCallId,toolName:$.toolName,input:$.input,iteration:$.iteration,agentId:$.agentId,conversationId:$.conversationId},null,2)}
748
- `,"utf8");let V=Z.timeoutMs??300000,B=Z.pollIntervalMs??200,H=Date.now();while(Date.now()-H<V){try{let K=await KI(j,"utf8"),G=JSON.parse(K),F={approved:G.approved===!0,reason:typeof G.reason==="string"?G.reason:void 0};return await Promise.all([wj(j),wj(X)]),F}catch{}await DI(B)}return await wj(X),{approved:!1,reason:"Tool approval request timed out"}}var QL={};w(QL,{listActiveConnectors:()=>b9});import{existsSync as _I,readdirSync as LI,readFileSync as AI}from"node:fs";import{join as $L}from"node:path";import{listConnectorCatalog as OI}from"@cline/shared";import{resolveConnectorDataDir as qI}from"@cline/shared/storage";var ZL={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},zI={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 TI($){if(!Number.isInteger($)||$<=0)return!1;try{return process.kill($,0),!0}catch{return!1}}function NI($,Z){let Q;try{let V=JSON.parse(AI(Z,"utf8"));if(!V||typeof V!=="object"||Array.isArray(V))return;Q=V}catch{return}let J=typeof Q.pid==="number"?Q.pid:void 0,W=typeof Q.hubUrl==="string"?Q.hubUrl:typeof Q.rpcAddress==="string"?Q.rpcAddress:void 0;if(!J||!W||!TI(J))return;let X=zI[$];if(!X)return;let j={};for(let V of X.required){let B=ZL[V](Q);if(!B||typeof B==="string"&&!B.trim())return;j[V]=B}for(let V of X.optional){let B=ZL[V](Q);if(B!==void 0)j[V]=B}let Y=$==="telegram"?j.botUsername:$==="discord"?j.applicationId:$==="whatsapp"&&typeof Q.instanceKey==="string"?Q.instanceKey:j.userName;if(!Y)return;return{id:`${$}:${Y}`,type:$,instanceId:Y,pid:J,hubUrl:W,...j}}function b9(){let $=[];for(let{name:Z}of OI()){let Q=$L(qI(),Z);if(!_I(Q))continue;for(let J of LI(Q)){if(!J.endsWith(".json")||J.endsWith(".threads.json"))continue;let W=NI(Z,$L(Q,J));if(W)$.push(W)}}return $.sort((Z,Q)=>{if(Z.type!==Q.type)return Z.type.localeCompare(Q.type);let J=Z.botUsername??Z.userName??"",W=Q.botUsername??Q.userName??"";return J.localeCompare(W)})}var JL={};w(JL,{removePersistedConnectorConnection:()=>kj,reconnectPersistedConnectors:()=>hj,persistConnectorConnection:()=>Sj,getPersistedConnectorConnection:()=>yj,disableConnectorAutostart:()=>bj});import{withConnectorStore as y9}from"@cline/shared/db";var fI=new Set(["-i","--interactive"]);function RI($,Z){let Q=$.filter((W)=>!fI.has(W));return Q.some((W)=>W==="--cwd"||W.startsWith("--cwd="))?Q:[...Q,"--cwd",Z]}function Sj($,Z,Q,J=process.cwd()){try{let W=RI(Q,J);y9((X)=>X.recordConnected($,Z,W))}catch{}}function bj($,Z){try{y9((Q)=>{if($)Q.setEnabled($,!1,Z);else Q.disableAll()})}catch{}}function yj($,Z){try{return y9((Q)=>Q.getConnection($,Z))}catch{return}}function kj($,Z){try{y9((Q)=>Q.deleteConnection($,Z))}catch{}}async function hj($){let Z=$.log??(()=>{}),Q;try{Q=y9((W)=>W.listConnections()).filter((W)=>W.enabled).map((W)=>({channel:W.channel,instanceId:W.instanceId,args:W.connectArgs}))}catch(W){return Z(`[connect] failed to read persisted connectors: ${W instanceof Error?W.message:String(W)}`),[]}let J=[];for(let W of Q){let{channel:X,instanceId:j}=W;if($.isHealthy?.(W))continue;Z(`[connect] reconnecting ${X} connector ${j}`);try{let Y=await $.start(W);if(J.push({channel:X,instanceId:j,ok:Y}),!Y)Z(`[connect] failed to reconnect ${X} connector ${j}`)}catch(Y){let V=Y instanceof Error?Y.message:String(Y);J.push({channel:X,instanceId:j,ok:!1,error:V}),Z(`[connect] failed to reconnect ${X} connector ${j}: ${V}`)}}return J}H1();var LL={};w(LL,{uninstallMarketplaceSkill:()=>j3,uninstallMarketplacePlugin:()=>Y3,uninstallMarketplaceMcpServerFromSettings:()=>W3,uninstallMarketplaceEntry:()=>sj,resolveMarketplaceMcpServerName:()=>v9,marketplaceEntryKey:()=>oj,isMarketplaceSkillInstalled:()=>X3,getMarketplaceSkillCandidates:()=>m9,getGlobalMarketplaceSkillPaths:()=>c9,findInstalledGlobalMarketplaceSkillName:()=>u9});import{spawn as Vx}from"node:child_process";import{existsSync as DL,rmSync as Bx}from"node:fs";import{homedir as Hx,platform as Kx}from"node:os";import{dirname as Gx,join as UL}from"node:path";import{resolveClineDir as Fx,resolveMcpSettingsPath as Ux}from"@cline/shared/storage";var XL={};w(XL,{parseMcpInstallArgs:()=>k9,installMcpServer:()=>Ij,buildMcpInstallTransport:()=>e7});function MI($){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 EI($){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 CI($){let Z=$.indexOf(":");if(Z<=0)throw Error(`Invalid MCP header "${$}". Expected "Header-Name: header value".`);let Q=$.slice(0,Z).trim(),J=$.slice(Z+1).trim();if(!Q||!J)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,J]}function wI($){let Z=$.indexOf("<");return Z>=0&&$.indexOf(">",Z+1)>Z+1}function WL($){let Z=[...$.headers??[]],Q=[],J=$.transport,W=$.targetArgs??[];for(let X=0;X<W.length;X++){let j=W[X];if($.parseTransport&&j==="--transport"){let Y=W[X+1];if(!Y)throw Error("--transport requires a value");J=Y,X++;continue}if($.parseTransport&&j?.startsWith("--transport=")){J=j.slice(12);continue}if(j==="--header"){let Y=W[X+1];if(!Y)throw Error("--header requires a value");Z.push(Y),X++;continue}if(j?.startsWith("--header=")){Z.push(j.slice(9));continue}Q.push(j)}return{headers:Z,targetArgs:Q,transport:J}}function PI($){if($.length===0)return{warnings:[]};let Z={},Q=[];for(let J of $){let[W,X]=CI(J);if(Z[W]=X,wI(X))Q.push(`Header "${W}" looks like it contains a placeholder. Update it in MCP settings before using this server.`)}return{headers:Z,warnings:Q}}function e7($){let Z=$.name.trim();if(!Z)throw Error("MCP server name is required");let{headers:Q,targetArgs:J,transport:W}=WL({headers:$.headers,targetArgs:$.targetArgs,transport:$.transport}),X=MI(W),{headers:j,warnings:Y}=PI(Q);if(X==="stdio"){if(Q.length>0)throw Error("Stdio MCP installs do not support request headers.");let[B,...H]=J;if(!B?.trim())throw Error("Stdio MCP install requires a command after the server name, for example: cline mcp install fs --yes -- npx -y @modelcontextprotocol/server-filesystem /tmp");return{name:Z,transport:{type:X,command:B,args:H.length>0?H:void 0},warnings:Y}}if(J.length!==1)throw Error("Remote MCP install requires exactly one URL argument after the server name.");let V=J[0]?.trim()??"";return EI(V),{name:Z,transport:j?{type:X,url:V,headers:j}:{type:X,url:V},warnings:Y}}function k9($){let[Z,...Q]=$;if(!Z)throw Error("Marketplace MCP install args must start with a server name.");return{name:Z,...WL({parseTransport:!0,targetArgs:Q})}}function SI($,Z,Q){A1(Q,(J)=>{let W=J.mcpServers,X=W&&typeof W==="object"&&!Array.isArray(W)?{...W}:{};X[$]={transport:Z},J.mcpServers=X})}function Ij($){let{name:Z,transport:Q,warnings:J}=e7($);return SI(Z,Q,$.settingsPath??W0()),{name:Z,status:"installed",transport:Q,warnings:J}}H1();var FL={};w(FL,{uninstallPlugin:()=>x9});import{existsSync as W4,readdirSync as mI,readFileSync as cI,rmdirSync as uI,rmSync as dI,statSync as pI}from"node:fs";import{basename as V1,dirname as B2,extname as lI,isAbsolute as iI,join as O$,relative as rI,resolve as J4,sep as cj}from"node:path";import{discoverPluginModulePaths as nI,resolvePluginConfigSearchPaths as aI}from"@cline/shared/storage";var BL={};w(BL,{syncPluginMcpServersToSettings:()=>h9,removePluginMcpServersFromSettings:()=>I9,disablePluginMcpServersInSettings:()=>mj});import{existsSync as bI,mkdirSync as yI,readFileSync as kI,writeFileSync as hI}from"node:fs";import{dirname as YL,isAbsolute as II,relative as xI,resolve as jL}from"node:path";function q8($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function $3($,Z){let Q=xI(jL($),jL(Z));return Q===""||!Q.startsWith("..")&&!II(Q)}function xj($){if(!bI($))return{mcpServers:{}};try{let Z=JSON.parse(kI($,"utf8"));if(q8(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 gj($){if(q8($.mcpServers))return{...$.mcpServers};return{}}function vj($,Z,Q){yI(YL($),{recursive:!0}),hI($,`${JSON.stringify({...Z,mcpServers:Q},null,2)}
749
- `,"utf8")}function VL($){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 Q3($){if(!q8($))return;let Z=$.metadata;return q8(Z)?Z:void 0}function Z3($,Z){let Q=Q3($);if(!Q||Q.source!=="plugin")return!1;let J=typeof Q.pluginName==="string"?Q.pluginName:typeof Q.plugin==="string"?Q.plugin:void 0,W=typeof Q.pluginPath==="string"?Q.pluginPath:void 0;if(Z.pluginName&&J===Z.pluginName){if(!Z.pluginPath||W===Z.pluginPath)return!0}if(W&&Z.pluginPath&&(W===Z.pluginPath||$3(Z.pluginPath,W)||$3(W,Z.pluginPath)))return!0;if(J&&Z.pluginNames?.some((X)=>X===J))return!0;if(W&&Z.pluginPaths?.some((X)=>W===X||$3(X,W)||$3(W,X)))return!0;return!1}function gI($){let Z=q8($.existing?.oauth)?{oauth:$.existing.oauth}:{};return{transport:$.registration.transport.type==="stdio"&&$.registration.transport.cwd===void 0?{...$.registration.transport,cwd:YL($.pluginPath)}:$.registration.transport,...$.disabled?{disabled:!0}:{},...Z,metadata:{...$.registration.metadata??{},source:"plugin",pluginName:$.pluginName,pluginPath:$.pluginPath}}}async function vI($){if($.pluginPaths.length===0)return{plugins:[],servers:[],failures:[]};let Z=await A6({pluginPaths:[...$.pluginPaths],cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,workspaceInfo:$.workspacePath?{rootPath:$.workspacePath}:void 0});try{let Q=[],J=[],W=(Z.failures??[]).map((X)=>({pluginPath:X.pluginPath,pluginName:X.pluginName,message:X.message}));for(let X of Z.extensions??[]){let j=X.__clinePluginPath;if(!j)continue;if(!X.setup){Q.push({pluginName:X.name,pluginPath:j});continue}let Y=[],V={registerTool:(B)=>{},registerCommand:()=>{},registerMessageBuilder:()=>{},registerRule:()=>{},registerProvider:()=>{},registerAutomationEventType:()=>{},registerMcpServer:(B)=>{if(!X.manifest.capabilities.includes("mcp"))throw Error('registerMcpServer requires the "mcp" capability');Y.push(B)}};try{await X.setup(V,{workspaceInfo:$.workspacePath?{rootPath:$.workspacePath}:void 0})}catch(B){W.push({pluginPath:j,pluginName:X.name,message:B instanceof Error?B.message:String(B)});continue}Q.push({pluginName:X.name,pluginPath:j});for(let B of Y)J.push({pluginName:X.name,pluginPath:j,server:{...B,metadata:{...B.metadata??{},source:"plugin",pluginName:X.name,pluginPath:j}}})}return{plugins:Q,servers:J,failures:W}}finally{await Z.shutdown().catch(()=>{})}}async function h9($){let Z=$.settingsPath??W0(),Q={mutations:[],failures:[]},J;try{J=await vI($)}catch(B){for(let H of $.pluginPaths)Q.failures.push({pluginPath:H,message:B instanceof Error?B.message:String(B)});return Q}Q.failures.push(...J.failures);let W;try{W=xj(Z)}catch(B){for(let H of $.pluginPaths)Q.failures.push({pluginPath:H,message:B instanceof Error?B.message:String(B)});return Q}let X=gj(W),j=new Map,Y=new Map;for(let B of J.plugins)j.set(B.pluginPath,new Set),Y.set(B.pluginPath,B.pluginName);let V=E7(J.servers.map((B)=>({server:B.server,owner:B,ownerLabel:B.pluginName})));for(let B of V){let H=B.owner;if(!j.has(H.pluginPath))j.set(H.pluginPath,new Set);if(B.name)j.get(H.pluginPath)?.add(B.name);if(!B.registration){Q.mutations.push({name:B.name,pluginName:H.pluginName,pluginPath:H.pluginPath,action:"skipped",reason:B.loadError??"invalid MCP server registration"});continue}let K=X[B.registration.name];if(K!==void 0){if(!Z3(K,{pluginName:H.pluginName,pluginPath:H.pluginPath})){Q.mutations.push({name:B.registration.name,pluginName:H.pluginName,pluginPath:H.pluginPath,action:"skipped",reason:"MCP server name is already configured"});continue}}X[B.registration.name]=gI({registration:B.registration,pluginName:H.pluginName,pluginPath:H.pluginPath,existing:q8(K)?K:void 0}),Q.mutations.push({name:B.registration.name,pluginName:H.pluginName,pluginPath:H.pluginPath,action:K===void 0?"created":"updated"})}for(let[B,H]of Object.entries(X)){let K=Q3(H),G=typeof K?.pluginPath==="string"?K.pluginPath:"",F=j.get(G);if(F&&Z3(H,{pluginPath:G})&&!F.has(B))delete X[B],Q.mutations.push({name:B,pluginName:typeof K?.pluginName==="string"?K.pluginName:Y.get(G)??"plugin",pluginPath:G,action:"removed",reason:"plugin no longer declares this MCP server"})}if(Q.mutations.some((B)=>B.action!=="skipped"))try{vj(Z,W,X)}catch(B){for(let H of $.pluginPaths)Q.failures.push({pluginPath:H,message:B instanceof Error?B.message:String(B)})}return Q}function mj($){let Z=$.settingsPath??W0(),Q;try{Q=xj(Z)}catch{return[]}let J=gj(Q),W=VL($),X=[];for(let[j,Y]of Object.entries(J)){if(!q8(Y)||!Z3(Y,W))continue;let V=Q3(Y);J[j]={...Y,disabled:!0},X.push({name:j,pluginName:typeof V?.pluginName==="string"?V.pluginName:"plugin",pluginPath:typeof V?.pluginPath==="string"?V.pluginPath:"",action:"disabled"})}if(X.length>0)vj(Z,Q,J);return X}function I9($){let Z=$.settingsPath??W0(),Q;try{Q=xj(Z)}catch{return[]}let J=gj(Q),W=VL($),X=[];for(let[j,Y]of Object.entries(J)){if(!Z3(Y,W))continue;let V=Q3(Y);delete J[j],X.push({name:j,pluginName:typeof V?.pluginName==="string"?V.pluginName:"plugin",pluginPath:typeof V?.pluginPath==="string"?V.pluginPath:"",action:"removed"})}if(X.length>0)vj(Z,Q,J);return X}var ij="_installed",oI="package",sI=new Map([["git",2],["local",1],["npm",1],["official",1],["remote",1]]);function uj($){return $.trim().toLowerCase()}function O1($,Z){let Q=Z?.trim();if(!Q)return;$.add(Q)}function tI($){return $.replace(/-[0-9a-f]{12}$/i,"")}function dj($){let Z=lI($);return Z?$.slice(0,-Z.length):$}function pj($){if(!W4($))return;try{let Z=JSON.parse(cI($,"utf8"));return typeof Z.name==="string"?Z.name.trim():void 0}catch{return}}function rj($,Z){let Q=rI(Z,$);return Q===""||!Q.startsWith("..")&&!iI(Q)}function HL($){let Q=J4($).split(cj),J=Q.lastIndexOf(ij);if(J<0)return;let W=Q[J+1];if(!W)return;let X=sI.get(W)??1,j=J+2+X;if(Q.length<j)return;let Y=Q.slice(0,j).join(cj)||cj;return W4(Y)?Y:void 0}function J3($){try{return mI($,{withFileTypes:!0})}catch{return[]}}function eI($){let Z=O$($,ij);if(!W4(Z))return[];let Q=[];for(let J of J3(Z)){if(!J.isDirectory())continue;let W=O$(Z,J.name);if(J.name==="git"){for(let X of J3(W)){if(!X.isDirectory())continue;let j=O$(W,X.name);for(let Y of J3(j))if(Y.isDirectory())Q.push(O$(j,Y.name))}continue}for(let X of J3(W))if(X.isDirectory())Q.push(O$(W,X.name))}return Q.sort((J,W)=>J.localeCompare(W))}function KL($){try{return nI($)}catch{return[]}}function lj($){let Z=KL($),Q=new Set;O1(Q,V1($)),O1(Q,tI(V1($))),O1(Q,pj(O$($,"package.json"))),O1(Q,pj(O$($,oI,"package.json")));for(let J of Z)O1(Q,V1(J)),O1(Q,dj(V1(J)));return{installPath:$,entryPaths:Z,names:[...Q].sort((J,W)=>J.localeCompare(W)),installed:!0}}function $x($,Z){let Q=J4($),J=Z.find((j)=>rj(Q,j));if(!J)return;let W=B2(Q);while(W!==J&&W!==B2(W)){if(W4(O$(W,"package.json")))return W;W=B2(W)}let X=V1(Q);if((X==="index.ts"||X==="index.js")&&B2(Q)!==J)return B2(Q);return Q}function GL($,Z){let Q=$x($,Z);if(!Q)return;let J=new Set;return O1(J,V1($)),O1(J,dj(V1($))),O1(J,V1(Q)),O1(J,dj(V1(Q))),O1(J,pj(O$(Q,"package.json"))),{installPath:Q,entryPaths:[$],names:[...J].sort((W,X)=>W.localeCompare(X)),installed:!1}}function Zx($){let Z=$.workspaceRoot?.trim()||$.cwd?.trim()||process.cwd();return aI(Z).filter((Q)=>W4(Q))}function Qx($){let Z=new Map;for(let Q of $){for(let J of eI(Q))Z.set(J,lj(J));for(let J of KL(Q)){let W=HL(J);if(W){if(!Z.has(W))Z.set(W,lj(W));continue}let X=GL(J,$);if(X)Z.set(X.installPath,X)}}return[...Z.values()].sort((Q,J)=>Q.installPath.localeCompare(J.installPath))}function Jx($,Z){let Q=uj(Z);if(!Q)return!1;if(uj($.installPath)===Q)return!0;return $.names.some((J)=>uj(J)===Q)}function Wx($,Z,Q){let J=J4($);for(let X of Z){if(rj(J,X.installPath))return X;if(X.entryPaths.some((j)=>J4(j)===J))return X}let W=HL(J);if(W)return lj(W);if(W4(J))return GL(J,Q);return}function Xx($){let Z=j0(),Q=Z.disabledPlugins;if(!Q?.length)return;let J=Q.filter((W)=>{let X=J4(W);if(rj(X,$.installPath))return!1;return!$.entryPaths.some((j)=>J4(j)===X)});if(J.length===Q.length)return;g0({...Z,disabledPlugins:J})}function jx($){let Z=B2($);while(Z!==B2(Z)&&V1(Z)!==ij){try{uI(Z)}catch{return}Z=B2(Z)}}function Yx($){return`${$.names[0]??V1($.installPath)} at ${$.installPath}`}async function x9($){let Z=Zx($),Q=Qx(Z),J=$.path?.trim(),W=$.name?.trim(),X;if(J){if(X=Wx(J,Q,Z),!X)throw Error(`No plugin found at ${J}`)}else{if(!W)throw Error("plugin uninstall requires a plugin name");let Y=Q.filter((V)=>Jx(V,W));if(Y.length===0)throw Error(`No plugin found matching "${W}"`);if(Y.length>1)throw Error(`Multiple plugins match "${W}": ${Y.map(Yx).join(", ")}`);X=Y[0]}let j=pI(X.installPath,{throwIfNoEntry:!1});if(!j)throw Error(`Plugin install path does not exist: ${X.installPath}`);if(I9({pluginPaths:[X.installPath,...X.entryPaths],pluginNames:X.names}),dI(X.installPath,{recursive:j.isDirectory(),force:!0}),Xx(X),X.installed)jx(X.installPath);return{name:W||X.names[0]||V1(X.installPath),installPath:X.installPath,removedPaths:[X.installPath],entryPaths:X.entryPaths}}var nj=120000,g9=12000,Dx=/(api[_ -]?key|access[_ -]?token|refresh[_ -]?token|auth(?:orization)?[_ -]?token|token|secret|password|authorization|credential)/i,_x=/((?:^|[^\w])(?:[a-z0-9_]*?(?:api[_ -]?key|access[_ -]?token|refresh[_ -]?token|auth(?:orization)?[_ -]?token|token|secret|password|credential)[a-z0-9_]*)\s*[:=]\s*)(.+)$/gi,Lx=/((?:^|[^\w])authorization\s*[:=]\s*)bearer\s+([^\s,"'}\]]+)/gi,Ax=/((?:^|[^\w])authorization\s*[:=])(?!\s*bearer\b)\s*(.+)$/gi;function aj($){return $.install?.args??[]}function Ox(){return process.env.HOME?.trim()||process.env.USERPROFILE?.trim()||Hx()}function qx($){let Z=0,Q=$.length;while(Z<Q&&($[Z]==="."||$[Z]==="-"))Z++;while(Q>Z&&($[Q-1]==="."||$[Q-1]==="-"))Q--;return $.slice(Z,Q)}function zx($){return qx($.toLowerCase().replace(/[^a-z0-9._]+/g,"-")).slice(0,255)||"skill"}function _L($){return $.split(/\r?\n/).map((Z)=>{if(!Dx.test(Z))return Z;return Z.replace(_x,"$1[redacted]").replace(Lx,"$1Bearer [redacted]").replace(/\b(Bearer)\s+(?!\[redacted\])([^\s,"'}\]]+)/gi,"$1 [redacted]").replace(Ax,"$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(`
750
- `).slice(-g9)}function Tx($){let Z=_L([$.stdout,$.stderr].filter(Boolean).join(`
751
- `)).trim();return Z.length>0?Z:void 0}function Nx($){if($==="")return'""';if(/^[a-zA-Z0-9_./:=@%+,-]+$/.test($))return $;return JSON.stringify($)}function fx($,Z){return[$,...Z].map((Q)=>Nx(_L(Q).trim())).join(" ")}var Rx=async($,Z)=>new Promise((Q,J)=>{let W=!1,X=!1,j=Vx($,Z,{env:process.env,shell:Kx()==="win32",stdio:["ignore","pipe","pipe"],windowsHide:!0}),Y="",V="",B=setTimeout(()=>{if(!W)j.kill("SIGKILL")},nj+5000),H=setTimeout(()=>{X=!0,V+=`
752
- Timed out after ${nj/1000}s.`,j.kill("SIGTERM")},nj);B.unref?.(),H.unref?.(),j.stdout?.on("data",(K)=>{if(Y+=String(K),Y.length>g9*2)Y=Y.slice(-g9)}),j.stderr?.on("data",(K)=>{if(V+=String(K),V.length>g9*2)V=V.slice(-g9)}),j.once("error",(K)=>{clearTimeout(H),clearTimeout(B),J(K)}),j.once("close",(K,G)=>{W=!0,clearTimeout(H),clearTimeout(B),Q({exitCode:X?124:K??(G==="SIGINT"?130:1),stdout:Y,stderr:V})})});function oj($){return`${$.type}:${$.id}`}function v9($){let Z=aj($);if(Z.length===0)throw Error("Marketplace install args are required.");return k9(Z).name}function W3($,Z={}){let Q=v9($),J=Z.mcpSettingsPath??Ux(),W=A1(J,(X)=>{let j=X.mcpServers&&typeof X.mcpServers==="object"&&!Array.isArray(X.mcpServers)?X.mcpServers:{},Y=Object.hasOwn(j,Q);if(Y)delete j[Q];return X.mcpServers=j,Y});return{name:Q,deleted:W}}function m9($){let Z=new Set,Q=(W)=>{let X=zx(W??"");if(X&&X!=="skill")Z.add(X)};Q($.id),Q($.name);let J=aj($);for(let W=0;W<J.length;W++){let X=J[W];if((X==="--skill"||X==="-s")&&J[W+1]){Q(J[W+1]),W++;continue}let j=X.split("@").at(1);if(j)Q(j)}return[...Z]}function c9($){return[UL(Fx(),"skills",$,"SKILL.md"),UL(Ox(),".agents","skills",$,"SKILL.md")].filter((Z,Q,J)=>J.indexOf(Z)===Q)}function u9($){if($.type!=="skill")return;return m9($).find((Z)=>c9(Z).some((Q)=>DL(Q)))}function X3($){return u9($)!==void 0}function Mx($){let Z=[];if($.type!=="skill")return Z;for(let Q of m9($))for(let J of c9(Q)){if(!DL(J))continue;let W=Gx(J);Bx(W,{recursive:!0,force:!0}),Z.push(W)}return Z}async function j3($,Z={}){let Q=u9($);if(!Q)return{id:$.id,type:"skill",status:"uninstalled",message:`${$.name??$.id} is not installed.`};let J="npx",W=["-y","skills@latest","remove",Q,"-g","-y"],X=fx(J,W),j=Z.spawnCommand??Rx,Y;try{Y=await j(J,W)}catch(H){throw Error(`Failed to start ${$.name??$.id} uninstall command:
747
+ WHERE team_name = ? AND status IN ('queued', 'running')`,[Z,W,Q]),J.map((X)=>X.run_id)}handleTeamEvent($,Z){this.appendTeamEvent($,Z.type,Z)}}function Ej($={}){try{let Z=new O8($);return Z.init(),Z}catch{let Z=new S9({teamDir:$.teamDir});return Z.init(),Z}}function o7($,Z){return oh($,Z)}function eh($,Z){let Q=Z?.["*"]??{},J=Z?.[$]??{};return{...Q,...J}.enabled!==!1}function $I($,Z){return $.filter((Q)=>eh(Q.name,Z))}function Cj($,Z){return n1($I($,Z))}var ZI={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 QI($){let Z=$.trim().toLowerCase();return ZI[Z]??Z}function JI($,Z){if(Z.tools===void 0)return $;let Q=new Set(Z.tools.map(QI));if(Z.skills!==void 0)Q.add("skills");return $.filter((J)=>Q.has(J.name))}function t7(){return`team-${th(5)}`}function s7($,Z,Q,J,W,X,j,Y,V){let B=Q1[j$({mode:Q})],H=j6(Z,J,Q,W??X6);return Cj(r2({cwd:$,telemetry:V,...B,enableSkills:!!j,...H,executors:{...j?{skills:j}:{},...Y??{}}}),X)}function WI($){return s7($.cwd,$.providerId,$.mode,$.modelId,$.toolRoutingRules,$.toolPolicies,XI,$.toolExecutors).some((Z)=>Z.name==="skills")}var XI=async()=>"";async function jI($){let Z=W0();if(!U$({filePath:Z}))return{tools:[]};let Q=new B8({clientFactory:I6({settingsPath:Z})}),J;try{J=await V8(Q,{filePath:Z})}catch(Y){await Q.dispose().catch(()=>{});let V=Y instanceof Error?Y.message:String(Y);return $?.log(`[mcp] Failed to load MCP settings, skipping MCP tools: ${V}`),{tools:[]}}let W=J.filter((Y)=>Y.disabled!==!0),X=await Promise.allSettled(W.map((Y)=>g6({serverName:Y.name,provider:Q,timeoutMs:sh(Y.timeoutSeconds)*1000}))),j=[];for(let[Y,V]of X.entries())if(V.status==="fulfilled")j.push(...V.value);else{let B=V.reason instanceof Error?V.reason.message:String(V.reason);$?.log(`[mcp] Failed to load tools from MCP server "${W[Y].name}", skipping: ${B}`)}return{tools:j,shutdown:async()=>{await Q.dispose()}}}function YI($,Z){if(!$)return;for(let Q of $.getTeammateIds())try{$.shutdownTeammate(Q,Z)}catch{}}function VI($){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 BI($){let Z=Q1[j$({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 Z4{teamRuntimeEntries=new Map;async build($){let{config:Z,hooks:Q,extensions:J,logger:W,telemetry:X,createSpawnTool:j,onTeamRestored:Y,userInstructionService:V,configExtensions:B,toolExecutors:H}=$,K=$.onTeamEvent??(()=>{}),G=BI(Z),F=Z.workspaceRoot??Z.cwd,U=$.toolPolicies??Z.toolPolicies,_=f1(),L=[],O=Z.teamName?.trim()||t7(),D=Z.sessionId?.trim()||O,q=G.enableSpawnAgent?u6({workspaceRoot:F}):{configs:[],errors:[]},T=q.configs.some((i)=>i.skills!==void 0),z=o7(B,"rules"),A=o7(B,"skills"),R=A||T,N=o7(B,"workflows"),S=o7(B,"plugins"),y=z||A||N,s=!1,c=Boolean(V),b=V,r;for(let i of q.errors)(W??Z.logger)?.log?.(`[agents] Failed to load agent config at ${i.path}: ${i.error.message}`);if(!b&&(y||T))b=J2({skills:R?{workspacePath:F,includePluginSkills:S,pluginSkillDirectories:S?$.pluginSkillDirectories:void 0,pluginPaths:Z.pluginPaths,cwd:Z.cwd}:{workspacePath:F},rules:{workspacePath:Z.cwd},workflows:{workspacePath:Z.cwd}});if(b)await b.start().catch(()=>{});let O0=G.enableTools&&A&&Boolean(b)&&b?.hasConfiguredSkills(Z.skills)===!0&&WI({cwd:Z.cwd,providerId:Z.providerId,mode:G.mode,modelId:Z.modelId,toolRoutingRules:Z.toolRoutingRules,toolPolicies:U,toolExecutors:H}),N$=b&&y?b.createExtension({includeRules:z,includeSkills:A,includeWorkflows:N,registerSkillsTool:O0,allowedSkillNames:Z.skills}):void 0,f$=N$?[...J??Z.extensions??[],N$]:J??Z.extensions;if(G.enableTools){if(L.push(...s7(Z.cwd,Z.providerId,G.mode,Z.modelId,Z.toolRoutingRules,U,void 0,H,X??Z.telemetry)),!G.disableMcpSettingsTools){let i=await jI(Z.logger);L.push(...i.tools),r=i.shutdown}}let X0,u1=G.enableAgentTeams?Ej():void 0,R$=u1?.loadRuntime(D),q1=R$?.state,p0=R$?.teammates??[],M$=new Map(p0.map((i)=>[i.agentId,i])),R0=Z.sessionId||O,h0,z1=[],u=!1,x0=i$({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,reasoningEffort:Z.reasoningEffort,thinkingBudgetTokens:Z.thinkingBudgetTokens,maxTokensPerTurn:Z.maxTokensPerTurn,temperature:Z.temperature,maxIterations:Z.maxIterations,hooks:Q,extensions:f$,logger:W??Z.logger,telemetry:$.telemetry??Z.telemetry,workspaceMetadata:Z.workspaceMetadata});if(G.enableSpawnAgent){if(q.configs.length>0)L.push(...Cj(d6({configProvider:x0,agents:q.configs,createSubAgentTools:(i)=>G.enableTools?JI(s7(Z.cwd,i.providerId??Z.providerId,G.mode,i.modelId??Z.modelId,Z.toolRoutingRules,U,i.skills!==void 0&&b?.createSkillsExecutor?b.createSkillsExecutor(i.skills):void 0,H,X??Z.telemetry),i):[],hookErrorMode:Z.hookErrorMode,toolPolicies:U,requestToolApproval:$.requestToolApproval,onSubAgentEvent:$.onSubAgentEvent,onSubAgentStart:$.onSubAgentStart,onSubAgentEnd:$.onSubAgentEnd}),U))}if(!this.teamRuntimeEntries.has(R0))this.teamRuntimeEntries.set(R0,{delegatedAgentConfigProvider:x0});let I=()=>{if(!G.enableAgentTeams)return;let i=this.teamRuntimeEntries.get(R0)??{delegatedAgentConfigProvider:x0};if(this.teamRuntimeEntries.set(R0,i),X0=i.runtime,!X0){if(X0=new F8({teamName:O,leadAgentId:Z.sessionId||"lead",missionLogIntervalSteps:G.missionLogIntervalSteps,missionLogIntervalMs:G.missionLogIntervalMs,onTeamEvent:(G0)=>{if(K(G0),X0&&u1){if(G0.type==="teammate_spawned"&&G0.teammate?.rolePrompt){let d1={agentId:G0.agentId,rolePrompt:G0.teammate.rolePrompt,modelId:G0.teammate.modelId,maxIterations:G0.teammate.maxIterations};M$.set(d1.agentId,d1)}if(G0.type==="teammate_shutdown"&&!VI(G0.reason))M$.delete(G0.agentId);u1.handleTeamEvent(D,G0),u1.persistRuntime(D,X0.exportState(),Array.from(M$.values()))}}}),q1)X0.hydrateState(q1),u=!0;i.runtime=X0}if(!s){if(!X0)return;s=!0;let G0=H6({runtime:X0,leadAgentId:Z.sessionId||"lead",restoredFromPersistence:Boolean(q1),restoredTeammates:p0,includeLeadSpawnTool:!0,includeLeadManagementTools:!0,onLeadToolsUnlocked:(d1)=>{z1=d1,h0?.addTools(d1)},createBaseTools:G.enableTools?()=>s7(Z.cwd,Z.providerId,G.mode,Z.modelId,Z.toolRoutingRules,U,void 0,H,X??Z.telemetry):void 0,teammateConfigProvider:x0});if(u)X0.recoverActiveRuns("runtime_recovered");if(G0.restoredFromPersistence)Y?.();L.push(...G0.tools)}return X0};if(G.enableSpawnAgent&&j){let i=j();L.push({...i,execute:async(G0,d1)=>{return I(),i.execute(G0,d1)}})}if(G.enableAgentTeams)I();let H0=Cj(L,U),M0=H0.some((i)=>i.name==="submit_and_exit"&&i.lifecycle?.completesRun===!0),E0=G.enableAgentTeams?()=>{let i=this.teamRuntimeEntries.get(R0)?.runtime;if(!i)return;let G0=i.listTasks(),d1=G0.some((E$)=>E$.status==="in_progress"||E$.status==="pending"),DV=i.listRuns({}),CO=DV.some((E$)=>E$.status==="running"||E$.status==="queued");if(d1||CO){let E$=G0.filter((s0)=>s0.status==="in_progress"||s0.status==="pending").map((s0)=>`${s0.id} (${s0.status}): ${s0.title}`).join(", "),_V=DV.filter((s0)=>s0.status==="running"||s0.status==="queued").map((s0)=>`${s0.id} (${s0.status})`).join(", "),u3=[];if(E$)u3.push(`Unfinished tasks: ${E$}`);if(_V)u3.push(`Active runs: ${_V}`);return`[SYSTEM] You still have team obligations. ${u3.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,D2=M0?{requireCompletionTool:!0,...E0?{completionGuard:E0}:{}}:E0?{completionGuard:E0}:void 0;return{tools:H0,logger:W??Z.logger,telemetry:X??Z.telemetry,teamRuntime:X0,teamRestoredFromPersistence:Boolean(q1),delegatedAgentConfigProvider:this.teamRuntimeEntries.get(R0)?.delegatedAgentConfigProvider??x0,extensions:f$,completionPolicy:D2,registerLeadAgent:(i)=>{if(h0=i,z1.length>0)i.addTools(n1(z1,[..._]))},shutdown:async(i)=>{if(YI(X0,i),this.teamRuntimeEntries.delete(R0),await r?.(),!c)b?.stop()}}}}var t_={};w(t_,{RuntimeOAuthTokenManager:()=>Q4,OAuthReauthRequiredError:()=>q8});function HI($,Z){let Q=$?.expiresAt,J=Z?.expiresAt;return $?.accessToken===Z?.accessToken&&$?.refreshToken===Z?.refreshToken&&$?.accountId===Z?.accountId&&Q===J}class q8 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 Q4{providerSettingsManager;telemetry;refreshInFlight=new Map;constructor($){this.providerSettingsManager=$?.providerSettingsManager??new v1,this.telemetry=$?.telemetry}async resolveProviderApiKey($){let Z=U0($.providerId);if(!Z)return null;return this.resolveWithSingleFlight(Z.providerId,Z.storageProviderId,$.forceRefresh)}async resolveWithSingleFlight($,Z,Q=!1){let J=this.refreshInFlight.get(Z);if(J)return J;let W=this.resolveProviderApiKeyInternal($,Z,Q).catch((X)=>{throw X}).finally(()=>{this.refreshInFlight.delete(Z)});return this.refreshInFlight.set(Z,W),W}async resolveProviderApiKeyInternal($,Z,Q){let J=U0($);if(!J)return null;let W=this.providerSettingsManager.getProviderSettings(Z);if(!W)return t(`oauth.resolve providerId=${$} storageProviderId=${Z} outcome=no_settings`),null;let X=d4($,W);if(!X)return t(`oauth.resolve providerId=${$} storageProviderId=${Z} outcome=no_credentials`),null;t(`oauth.resolve.start providerId=${$} storageProviderId=${Z} forceRefresh=${Q} accessTokenHash=${P0(X.access)} refreshTokenHash=${P0(X.refresh)}`);let j=await J.refresh({settings:W,credentials:X,forceRefresh:Q,telemetry:this.telemetry});if(!j)throw t(`oauth.resolve providerId=${$} outcome=refresh_returned_null`),new q8($);let Y=E2({manager:this.providerSettingsManager,providerId:$,settings:W,credentials:j,setLastUsed:!1,save:!1}),V=!HI(W.auth,Y.auth);if(V)t(`oauth.resolve.refreshed providerId=${$} newAccessTokenHash=${P0(j.access)} newRefreshTokenHash=${P0(j.refresh)} savingToDisk=true`),this.providerSettingsManager.saveProviderSettings(Y,{setLastUsed:!1,tokenSource:"oauth"});else t(`oauth.resolve providerId=${$} outcome=not_refreshed`);return{apiKey:J.getApiKey(Y)??j.access,accountId:j.accountId,refreshed:V}}}var $L={};w($L,{requestDesktopToolApproval:()=>Pj});import{mkdir as KI,readFile as GI,unlink as FI,writeFile as UI}from"node:fs/promises";import{join as e_}from"node:path";function DI($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function _I($){return new Promise((Z)=>setTimeout(Z,$))}async function wj($){try{await FI($)}catch{}}async function Pj($,Z={}){let Q=Z.approvalDir?.trim(),J=Z.sessionId?.trim();if(!Q||!J)return{approved:!1,reason:"Desktop tool approval IPC is not configured"};await KI(Q,{recursive:!0});let W=DI(`${$.toolCallId}`),X=e_(Q,`${J}.request.${W}.json`),j=e_(Q,`${J}.decision.${W}.json`),Y=Z.nowIso??(()=>new Date().toISOString());await UI(X,`${JSON.stringify({requestId:W,sessionId:J,createdAt:Y(),toolCallId:$.toolCallId,toolName:$.toolName,input:$.input,iteration:$.iteration,agentId:$.agentId,conversationId:$.conversationId},null,2)}
748
+ `,"utf8");let V=Z.timeoutMs??300000,B=Z.pollIntervalMs??200,H=Date.now();while(Date.now()-H<V){try{let K=await GI(j,"utf8"),G=JSON.parse(K),F={approved:G.approved===!0,reason:typeof G.reason==="string"?G.reason:void 0};return await Promise.all([wj(j),wj(X)]),F}catch{}await _I(B)}return await wj(X),{approved:!1,reason:"Tool approval request timed out"}}var JL={};w(JL,{listActiveConnectors:()=>b9});import{existsSync as LI,readdirSync as AI,readFileSync as OI}from"node:fs";import{join as ZL}from"node:path";import{listConnectorCatalog as qI}from"@cline/shared";import{resolveConnectorDataDir as zI}from"@cline/shared/storage";var QL={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},TI={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 NI($){if(!Number.isInteger($)||$<=0)return!1;try{return process.kill($,0),!0}catch{return!1}}function fI($,Z){let Q;try{let V=JSON.parse(OI(Z,"utf8"));if(!V||typeof V!=="object"||Array.isArray(V))return;Q=V}catch{return}let J=typeof Q.pid==="number"?Q.pid:void 0,W=typeof Q.hubUrl==="string"?Q.hubUrl:typeof Q.rpcAddress==="string"?Q.rpcAddress:void 0;if(!J||!W||!NI(J))return;let X=TI[$];if(!X)return;let j={};for(let V of X.required){let B=QL[V](Q);if(!B||typeof B==="string"&&!B.trim())return;j[V]=B}for(let V of X.optional){let B=QL[V](Q);if(B!==void 0)j[V]=B}let Y=$==="telegram"?j.botUsername:$==="discord"?j.applicationId:$==="whatsapp"&&typeof Q.instanceKey==="string"?Q.instanceKey:j.userName;if(!Y)return;return{id:`${$}:${Y}`,type:$,instanceId:Y,pid:J,hubUrl:W,...j}}function b9(){let $=[];for(let{name:Z}of qI()){let Q=ZL(zI(),Z);if(!LI(Q))continue;for(let J of AI(Q)){if(!J.endsWith(".json")||J.endsWith(".threads.json"))continue;let W=fI(Z,ZL(Q,J));if(W)$.push(W)}}return $.sort((Z,Q)=>{if(Z.type!==Q.type)return Z.type.localeCompare(Q.type);let J=Z.botUsername??Z.userName??"",W=Q.botUsername??Q.userName??"";return J.localeCompare(W)})}var WL={};w(WL,{removePersistedConnectorConnection:()=>kj,reconnectPersistedConnectors:()=>hj,persistConnectorConnection:()=>Sj,getPersistedConnectorConnection:()=>yj,disableConnectorAutostart:()=>bj});import{withConnectorStore as y9}from"@cline/shared/db";var RI=new Set(["-i","--interactive"]);function MI($,Z){let Q=$.filter((W)=>!RI.has(W));return Q.some((W)=>W==="--cwd"||W.startsWith("--cwd="))?Q:[...Q,"--cwd",Z]}function Sj($,Z,Q,J=process.cwd()){try{let W=MI(Q,J);y9((X)=>X.recordConnected($,Z,W))}catch{}}function bj($,Z){try{y9((Q)=>{if($)Q.setEnabled($,!1,Z);else Q.disableAll()})}catch{}}function yj($,Z){try{return y9((Q)=>Q.getConnection($,Z))}catch{return}}function kj($,Z){try{y9((Q)=>Q.deleteConnection($,Z))}catch{}}async function hj($){let Z=$.log??(()=>{}),Q;try{Q=y9((W)=>W.listConnections()).filter((W)=>W.enabled).map((W)=>({channel:W.channel,instanceId:W.instanceId,args:W.connectArgs}))}catch(W){return Z(`[connect] failed to read persisted connectors: ${W instanceof Error?W.message:String(W)}`),[]}let J=[];for(let W of Q){let{channel:X,instanceId:j}=W;if($.isHealthy?.(W))continue;Z(`[connect] reconnecting ${X} connector ${j}`);try{let Y=await $.start(W);if(J.push({channel:X,instanceId:j,ok:Y}),!Y)Z(`[connect] failed to reconnect ${X} connector ${j}`)}catch(Y){let V=Y instanceof Error?Y.message:String(Y);J.push({channel:X,instanceId:j,ok:!1,error:V}),Z(`[connect] failed to reconnect ${X} connector ${j}: ${V}`)}}return J}H1();var AL={};w(AL,{uninstallMarketplaceSkill:()=>j3,uninstallMarketplacePlugin:()=>Y3,uninstallMarketplaceMcpServerFromSettings:()=>W3,uninstallMarketplaceEntry:()=>sj,resolveMarketplaceMcpServerName:()=>v9,marketplaceEntryKey:()=>oj,isMarketplaceSkillInstalled:()=>X3,getMarketplaceSkillCandidates:()=>m9,getGlobalMarketplaceSkillPaths:()=>c9,findInstalledGlobalMarketplaceSkillName:()=>u9});import{spawn as Bx}from"node:child_process";import{existsSync as _L,rmSync as Hx}from"node:fs";import{homedir as Kx,platform as Gx}from"node:os";import{dirname as Fx,join as DL}from"node:path";import{resolveClineDir as Ux,resolveMcpSettingsPath as Dx}from"@cline/shared/storage";var jL={};w(jL,{parseMcpInstallArgs:()=>k9,installMcpServer:()=>Ij,buildMcpInstallTransport:()=>e7});function EI($){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 CI($){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 wI($){let Z=$.indexOf(":");if(Z<=0)throw Error(`Invalid MCP header "${$}". Expected "Header-Name: header value".`);let Q=$.slice(0,Z).trim(),J=$.slice(Z+1).trim();if(!Q||!J)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,J]}function PI($){let Z=$.indexOf("<");return Z>=0&&$.indexOf(">",Z+1)>Z+1}function XL($){let Z=[...$.headers??[]],Q=[],J=$.transport,W=$.targetArgs??[];for(let X=0;X<W.length;X++){let j=W[X];if($.parseTransport&&j==="--transport"){let Y=W[X+1];if(!Y)throw Error("--transport requires a value");J=Y,X++;continue}if($.parseTransport&&j?.startsWith("--transport=")){J=j.slice(12);continue}if(j==="--header"){let Y=W[X+1];if(!Y)throw Error("--header requires a value");Z.push(Y),X++;continue}if(j?.startsWith("--header=")){Z.push(j.slice(9));continue}Q.push(j)}return{headers:Z,targetArgs:Q,transport:J}}function SI($){if($.length===0)return{warnings:[]};let Z={},Q=[];for(let J of $){let[W,X]=wI(J);if(Z[W]=X,PI(X))Q.push(`Header "${W}" looks like it contains a placeholder. Update it in MCP settings before using this server.`)}return{headers:Z,warnings:Q}}function e7($){let Z=$.name.trim();if(!Z)throw Error("MCP server name is required");let{headers:Q,targetArgs:J,transport:W}=XL({headers:$.headers,targetArgs:$.targetArgs,transport:$.transport}),X=EI(W),{headers:j,warnings:Y}=SI(Q);if(X==="stdio"){if(Q.length>0)throw Error("Stdio MCP installs do not support request headers.");let[B,...H]=J;if(!B?.trim())throw Error("Stdio MCP install requires a command after the server name, for example: cline mcp install fs --yes -- npx -y @modelcontextprotocol/server-filesystem /tmp");return{name:Z,transport:{type:X,command:B,args:H.length>0?H:void 0},warnings:Y}}if(J.length!==1)throw Error("Remote MCP install requires exactly one URL argument after the server name.");let V=J[0]?.trim()??"";return CI(V),{name:Z,transport:j?{type:X,url:V,headers:j}:{type:X,url:V},warnings:Y}}function k9($){let[Z,...Q]=$;if(!Z)throw Error("Marketplace MCP install args must start with a server name.");return{name:Z,...XL({parseTransport:!0,targetArgs:Q})}}function bI($,Z,Q){A1(Q,(J)=>{let W=J.mcpServers,X=W&&typeof W==="object"&&!Array.isArray(W)?{...W}:{};X[$]={transport:Z},J.mcpServers=X})}function Ij($){let{name:Z,transport:Q,warnings:J}=e7($);return bI(Z,Q,$.settingsPath??W0()),{name:Z,status:"installed",transport:Q,warnings:J}}H1();var UL={};w(UL,{uninstallPlugin:()=>x9});import{existsSync as W4,readdirSync as cI,readFileSync as uI,rmdirSync as dI,rmSync as pI,statSync as lI}from"node:fs";import{basename as V1,dirname as H2,extname as iI,isAbsolute as rI,join as O$,relative as nI,resolve as J4,sep as cj}from"node:path";import{discoverPluginModulePaths as aI,resolvePluginConfigSearchPaths as oI}from"@cline/shared/storage";var HL={};w(HL,{syncPluginMcpServersToSettings:()=>h9,removePluginMcpServersFromSettings:()=>I9,disablePluginMcpServersInSettings:()=>mj});import{existsSync as yI,mkdirSync as kI,readFileSync as hI,writeFileSync as II}from"node:fs";import{dirname as VL,isAbsolute as xI,relative as gI,resolve as YL}from"node:path";function z8($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function $3($,Z){let Q=gI(YL($),YL(Z));return Q===""||!Q.startsWith("..")&&!xI(Q)}function xj($){if(!yI($))return{mcpServers:{}};try{let Z=JSON.parse(hI($,"utf8"));if(z8(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 gj($){if(z8($.mcpServers))return{...$.mcpServers};return{}}function vj($,Z,Q){kI(VL($),{recursive:!0}),II($,`${JSON.stringify({...Z,mcpServers:Q},null,2)}
749
+ `,"utf8")}function BL($){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 Q3($){if(!z8($))return;let Z=$.metadata;return z8(Z)?Z:void 0}function Z3($,Z){let Q=Q3($);if(!Q||Q.source!=="plugin")return!1;let J=typeof Q.pluginName==="string"?Q.pluginName:typeof Q.plugin==="string"?Q.plugin:void 0,W=typeof Q.pluginPath==="string"?Q.pluginPath:void 0;if(Z.pluginName&&J===Z.pluginName){if(!Z.pluginPath||W===Z.pluginPath)return!0}if(W&&Z.pluginPath&&(W===Z.pluginPath||$3(Z.pluginPath,W)||$3(W,Z.pluginPath)))return!0;if(J&&Z.pluginNames?.some((X)=>X===J))return!0;if(W&&Z.pluginPaths?.some((X)=>W===X||$3(X,W)||$3(W,X)))return!0;return!1}function vI($){let Z=z8($.existing?.oauth)?{oauth:$.existing.oauth}:{};return{transport:$.registration.transport.type==="stdio"&&$.registration.transport.cwd===void 0?{...$.registration.transport,cwd:VL($.pluginPath)}:$.registration.transport,...$.disabled?{disabled:!0}:{},...Z,metadata:{...$.registration.metadata??{},source:"plugin",pluginName:$.pluginName,pluginPath:$.pluginPath}}}async function mI($){if($.pluginPaths.length===0)return{plugins:[],servers:[],failures:[]};let Z=await O6({pluginPaths:[...$.pluginPaths],cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,workspaceInfo:$.workspacePath?{rootPath:$.workspacePath}:void 0});try{let Q=[],J=[],W=(Z.failures??[]).map((X)=>({pluginPath:X.pluginPath,pluginName:X.pluginName,message:X.message}));for(let X of Z.extensions??[]){let j=X.__clinePluginPath;if(!j)continue;if(!X.setup){Q.push({pluginName:X.name,pluginPath:j});continue}let Y=[],V={registerTool:(B)=>{},registerCommand:()=>{},registerMessageBuilder:()=>{},registerRule:()=>{},registerProvider:()=>{},registerAutomationEventType:()=>{},registerMcpServer:(B)=>{if(!X.manifest.capabilities.includes("mcp"))throw Error('registerMcpServer requires the "mcp" capability');Y.push(B)}};try{await X.setup(V,{workspaceInfo:$.workspacePath?{rootPath:$.workspacePath}:void 0})}catch(B){W.push({pluginPath:j,pluginName:X.name,message:B instanceof Error?B.message:String(B)});continue}Q.push({pluginName:X.name,pluginPath:j});for(let B of Y)J.push({pluginName:X.name,pluginPath:j,server:{...B,metadata:{...B.metadata??{},source:"plugin",pluginName:X.name,pluginPath:j}}})}return{plugins:Q,servers:J,failures:W}}finally{await Z.shutdown().catch(()=>{})}}async function h9($){let Z=$.settingsPath??W0(),Q={mutations:[],failures:[]},J;try{J=await mI($)}catch(B){for(let H of $.pluginPaths)Q.failures.push({pluginPath:H,message:B instanceof Error?B.message:String(B)});return Q}Q.failures.push(...J.failures);let W;try{W=xj(Z)}catch(B){for(let H of $.pluginPaths)Q.failures.push({pluginPath:H,message:B instanceof Error?B.message:String(B)});return Q}let X=gj(W),j=new Map,Y=new Map;for(let B of J.plugins)j.set(B.pluginPath,new Set),Y.set(B.pluginPath,B.pluginName);let V=E7(J.servers.map((B)=>({server:B.server,owner:B,ownerLabel:B.pluginName})));for(let B of V){let H=B.owner;if(!j.has(H.pluginPath))j.set(H.pluginPath,new Set);if(B.name)j.get(H.pluginPath)?.add(B.name);if(!B.registration){Q.mutations.push({name:B.name,pluginName:H.pluginName,pluginPath:H.pluginPath,action:"skipped",reason:B.loadError??"invalid MCP server registration"});continue}let K=X[B.registration.name];if(K!==void 0){if(!Z3(K,{pluginName:H.pluginName,pluginPath:H.pluginPath})){Q.mutations.push({name:B.registration.name,pluginName:H.pluginName,pluginPath:H.pluginPath,action:"skipped",reason:"MCP server name is already configured"});continue}}X[B.registration.name]=vI({registration:B.registration,pluginName:H.pluginName,pluginPath:H.pluginPath,existing:z8(K)?K:void 0}),Q.mutations.push({name:B.registration.name,pluginName:H.pluginName,pluginPath:H.pluginPath,action:K===void 0?"created":"updated"})}for(let[B,H]of Object.entries(X)){let K=Q3(H),G=typeof K?.pluginPath==="string"?K.pluginPath:"",F=j.get(G);if(F&&Z3(H,{pluginPath:G})&&!F.has(B))delete X[B],Q.mutations.push({name:B,pluginName:typeof K?.pluginName==="string"?K.pluginName:Y.get(G)??"plugin",pluginPath:G,action:"removed",reason:"plugin no longer declares this MCP server"})}if(Q.mutations.some((B)=>B.action!=="skipped"))try{vj(Z,W,X)}catch(B){for(let H of $.pluginPaths)Q.failures.push({pluginPath:H,message:B instanceof Error?B.message:String(B)})}return Q}function mj($){let Z=$.settingsPath??W0(),Q;try{Q=xj(Z)}catch{return[]}let J=gj(Q),W=BL($),X=[];for(let[j,Y]of Object.entries(J)){if(!z8(Y)||!Z3(Y,W))continue;let V=Q3(Y);J[j]={...Y,disabled:!0},X.push({name:j,pluginName:typeof V?.pluginName==="string"?V.pluginName:"plugin",pluginPath:typeof V?.pluginPath==="string"?V.pluginPath:"",action:"disabled"})}if(X.length>0)vj(Z,Q,J);return X}function I9($){let Z=$.settingsPath??W0(),Q;try{Q=xj(Z)}catch{return[]}let J=gj(Q),W=BL($),X=[];for(let[j,Y]of Object.entries(J)){if(!Z3(Y,W))continue;let V=Q3(Y);delete J[j],X.push({name:j,pluginName:typeof V?.pluginName==="string"?V.pluginName:"plugin",pluginPath:typeof V?.pluginPath==="string"?V.pluginPath:"",action:"removed"})}if(X.length>0)vj(Z,Q,J);return X}var ij="_installed",sI="package",tI=new Map([["git",2],["local",1],["npm",1],["official",1],["remote",1]]);function uj($){return $.trim().toLowerCase()}function O1($,Z){let Q=Z?.trim();if(!Q)return;$.add(Q)}function eI($){return $.replace(/-[0-9a-f]{12}$/i,"")}function dj($){let Z=iI($);return Z?$.slice(0,-Z.length):$}function pj($){if(!W4($))return;try{let Z=JSON.parse(uI($,"utf8"));return typeof Z.name==="string"?Z.name.trim():void 0}catch{return}}function rj($,Z){let Q=nI(Z,$);return Q===""||!Q.startsWith("..")&&!rI(Q)}function KL($){let Q=J4($).split(cj),J=Q.lastIndexOf(ij);if(J<0)return;let W=Q[J+1];if(!W)return;let X=tI.get(W)??1,j=J+2+X;if(Q.length<j)return;let Y=Q.slice(0,j).join(cj)||cj;return W4(Y)?Y:void 0}function J3($){try{return cI($,{withFileTypes:!0})}catch{return[]}}function $x($){let Z=O$($,ij);if(!W4(Z))return[];let Q=[];for(let J of J3(Z)){if(!J.isDirectory())continue;let W=O$(Z,J.name);if(J.name==="git"){for(let X of J3(W)){if(!X.isDirectory())continue;let j=O$(W,X.name);for(let Y of J3(j))if(Y.isDirectory())Q.push(O$(j,Y.name))}continue}for(let X of J3(W))if(X.isDirectory())Q.push(O$(W,X.name))}return Q.sort((J,W)=>J.localeCompare(W))}function GL($){try{return aI($)}catch{return[]}}function lj($){let Z=GL($),Q=new Set;O1(Q,V1($)),O1(Q,eI(V1($))),O1(Q,pj(O$($,"package.json"))),O1(Q,pj(O$($,sI,"package.json")));for(let J of Z)O1(Q,V1(J)),O1(Q,dj(V1(J)));return{installPath:$,entryPaths:Z,names:[...Q].sort((J,W)=>J.localeCompare(W)),installed:!0}}function Zx($,Z){let Q=J4($),J=Z.find((j)=>rj(Q,j));if(!J)return;let W=H2(Q);while(W!==J&&W!==H2(W)){if(W4(O$(W,"package.json")))return W;W=H2(W)}let X=V1(Q);if((X==="index.ts"||X==="index.js")&&H2(Q)!==J)return H2(Q);return Q}function FL($,Z){let Q=Zx($,Z);if(!Q)return;let J=new Set;return O1(J,V1($)),O1(J,dj(V1($))),O1(J,V1(Q)),O1(J,dj(V1(Q))),O1(J,pj(O$(Q,"package.json"))),{installPath:Q,entryPaths:[$],names:[...J].sort((W,X)=>W.localeCompare(X)),installed:!1}}function Qx($){let Z=$.workspaceRoot?.trim()||$.cwd?.trim()||process.cwd();return oI(Z).filter((Q)=>W4(Q))}function Jx($){let Z=new Map;for(let Q of $){for(let J of $x(Q))Z.set(J,lj(J));for(let J of GL(Q)){let W=KL(J);if(W){if(!Z.has(W))Z.set(W,lj(W));continue}let X=FL(J,$);if(X)Z.set(X.installPath,X)}}return[...Z.values()].sort((Q,J)=>Q.installPath.localeCompare(J.installPath))}function Wx($,Z){let Q=uj(Z);if(!Q)return!1;if(uj($.installPath)===Q)return!0;return $.names.some((J)=>uj(J)===Q)}function Xx($,Z,Q){let J=J4($);for(let X of Z){if(rj(J,X.installPath))return X;if(X.entryPaths.some((j)=>J4(j)===J))return X}let W=KL(J);if(W)return lj(W);if(W4(J))return FL(J,Q);return}function jx($){let Z=j0(),Q=Z.disabledPlugins;if(!Q?.length)return;let J=Q.filter((W)=>{let X=J4(W);if(rj(X,$.installPath))return!1;return!$.entryPaths.some((j)=>J4(j)===X)});if(J.length===Q.length)return;g0({...Z,disabledPlugins:J})}function Yx($){let Z=H2($);while(Z!==H2(Z)&&V1(Z)!==ij){try{dI(Z)}catch{return}Z=H2(Z)}}function Vx($){return`${$.names[0]??V1($.installPath)} at ${$.installPath}`}async function x9($){let Z=Qx($),Q=Jx(Z),J=$.path?.trim(),W=$.name?.trim(),X;if(J){if(X=Xx(J,Q,Z),!X)throw Error(`No plugin found at ${J}`)}else{if(!W)throw Error("plugin uninstall requires a plugin name");let Y=Q.filter((V)=>Wx(V,W));if(Y.length===0)throw Error(`No plugin found matching "${W}"`);if(Y.length>1)throw Error(`Multiple plugins match "${W}": ${Y.map(Vx).join(", ")}`);X=Y[0]}let j=lI(X.installPath,{throwIfNoEntry:!1});if(!j)throw Error(`Plugin install path does not exist: ${X.installPath}`);if(I9({pluginPaths:[X.installPath,...X.entryPaths],pluginNames:X.names}),pI(X.installPath,{recursive:j.isDirectory(),force:!0}),jx(X),X.installed)Yx(X.installPath);return{name:W||X.names[0]||V1(X.installPath),installPath:X.installPath,removedPaths:[X.installPath],entryPaths:X.entryPaths}}var nj=120000,g9=12000,_x=/(api[_ -]?key|access[_ -]?token|refresh[_ -]?token|auth(?:orization)?[_ -]?token|token|secret|password|authorization|credential)/i,Lx=/((?:^|[^\w])(?:[a-z0-9_]*?(?:api[_ -]?key|access[_ -]?token|refresh[_ -]?token|auth(?:orization)?[_ -]?token|token|secret|password|credential)[a-z0-9_]*)\s*[:=]\s*)(.+)$/gi,Ax=/((?:^|[^\w])authorization\s*[:=]\s*)bearer\s+([^\s,"'}\]]+)/gi,Ox=/((?:^|[^\w])authorization\s*[:=])(?!\s*bearer\b)\s*(.+)$/gi;function aj($){return $.install?.args??[]}function qx(){return process.env.HOME?.trim()||process.env.USERPROFILE?.trim()||Kx()}function zx($){let Z=0,Q=$.length;while(Z<Q&&($[Z]==="."||$[Z]==="-"))Z++;while(Q>Z&&($[Q-1]==="."||$[Q-1]==="-"))Q--;return $.slice(Z,Q)}function Tx($){return zx($.toLowerCase().replace(/[^a-z0-9._]+/g,"-")).slice(0,255)||"skill"}function LL($){return $.split(/\r?\n/).map((Z)=>{if(!_x.test(Z))return Z;return Z.replace(Lx,"$1[redacted]").replace(Ax,"$1Bearer [redacted]").replace(/\b(Bearer)\s+(?!\[redacted\])([^\s,"'}\]]+)/gi,"$1 [redacted]").replace(Ox,"$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(`
750
+ `).slice(-g9)}function Nx($){let Z=LL([$.stdout,$.stderr].filter(Boolean).join(`
751
+ `)).trim();return Z.length>0?Z:void 0}function fx($){if($==="")return'""';if(/^[a-zA-Z0-9_./:=@%+,-]+$/.test($))return $;return JSON.stringify($)}function Rx($,Z){return[$,...Z].map((Q)=>fx(LL(Q).trim())).join(" ")}var Mx=async($,Z)=>new Promise((Q,J)=>{let W=!1,X=!1,j=Bx($,Z,{env:process.env,shell:Gx()==="win32",stdio:["ignore","pipe","pipe"],windowsHide:!0}),Y="",V="",B=setTimeout(()=>{if(!W)j.kill("SIGKILL")},nj+5000),H=setTimeout(()=>{X=!0,V+=`
752
+ Timed out after ${nj/1000}s.`,j.kill("SIGTERM")},nj);B.unref?.(),H.unref?.(),j.stdout?.on("data",(K)=>{if(Y+=String(K),Y.length>g9*2)Y=Y.slice(-g9)}),j.stderr?.on("data",(K)=>{if(V+=String(K),V.length>g9*2)V=V.slice(-g9)}),j.once("error",(K)=>{clearTimeout(H),clearTimeout(B),J(K)}),j.once("close",(K,G)=>{W=!0,clearTimeout(H),clearTimeout(B),Q({exitCode:X?124:K??(G==="SIGINT"?130:1),stdout:Y,stderr:V})})});function oj($){return`${$.type}:${$.id}`}function v9($){let Z=aj($);if(Z.length===0)throw Error("Marketplace install args are required.");return k9(Z).name}function W3($,Z={}){let Q=v9($),J=Z.mcpSettingsPath??Dx(),W=A1(J,(X)=>{let j=X.mcpServers&&typeof X.mcpServers==="object"&&!Array.isArray(X.mcpServers)?X.mcpServers:{},Y=Object.hasOwn(j,Q);if(Y)delete j[Q];return X.mcpServers=j,Y});return{name:Q,deleted:W}}function m9($){let Z=new Set,Q=(W)=>{let X=Tx(W??"");if(X&&X!=="skill")Z.add(X)};Q($.id),Q($.name);let J=aj($);for(let W=0;W<J.length;W++){let X=J[W];if((X==="--skill"||X==="-s")&&J[W+1]){Q(J[W+1]),W++;continue}let j=X.split("@").at(1);if(j)Q(j)}return[...Z]}function c9($){return[DL(Ux(),"skills",$,"SKILL.md"),DL(qx(),".agents","skills",$,"SKILL.md")].filter((Z,Q,J)=>J.indexOf(Z)===Q)}function u9($){if($.type!=="skill")return;return m9($).find((Z)=>c9(Z).some((Q)=>_L(Q)))}function X3($){return u9($)!==void 0}function Ex($){let Z=[];if($.type!=="skill")return Z;for(let Q of m9($))for(let J of c9(Q)){if(!_L(J))continue;let W=Fx(J);Hx(W,{recursive:!0,force:!0}),Z.push(W)}return Z}async function j3($,Z={}){let Q=u9($);if(!Q)return{id:$.id,type:"skill",status:"uninstalled",message:`${$.name??$.id} is not installed.`};let J="npx",W=["-y","skills@latest","remove",Q,"-g","-y"],X=Rx(J,W),j=Z.spawnCommand??Mx,Y;try{Y=await j(J,W)}catch(H){throw Error(`Failed to start ${$.name??$.id} uninstall command:
753
753
  ${X}
754
- ${H instanceof Error?H.message:String(H)}`)}let V=Tx(Y);if(Y.exitCode!==0)throw Error(`${$.name??$.id} uninstall failed with exit code ${Y.exitCode}.
754
+ ${H instanceof Error?H.message:String(H)}`)}let V=Nx(Y);if(Y.exitCode!==0)throw Error(`${$.name??$.id} uninstall failed with exit code ${Y.exitCode}.
755
755
  Command:
756
756
  ${X}${V?`
757
757
 
758
- ${V}`:""}`);let B=Mx($);if(X3($))throw Error(`Skill uninstall completed, but ${$.name??$.id} is still present in Cline's global skills directories.`);return{id:$.id,type:"skill",status:"uninstalled",message:`Uninstalled ${$.name??$.id}.`,output:[V,...B.map((H)=>`Removed: ${H}`)].filter(Boolean).join(`
758
+ ${V}`:""}`);let B=Ex($);if(X3($))throw Error(`Skill uninstall completed, but ${$.name??$.id} is still present in Cline's global skills directories.`);return{id:$.id,type:"skill",status:"uninstalled",message:`Uninstalled ${$.name??$.id}.`,output:[V,...B.map((H)=>`Removed: ${H}`)].filter(Boolean).join(`
759
759
  `)||void 0}}async function Y3($,Z={}){let[Q]=aj($),J=Q?.trim()||$.id;if(!J)throw Error("Plugin marketplace uninstalls require a plugin name.");let W=await x9({name:J,workspaceRoot:Z.workspaceRoot});return{id:$.id,type:"plugin",status:"uninstalled",message:`Uninstalled ${$.name??W.name??$.id}.`,output:[`Path: ${W.installPath}`,...W.removedPaths.map((X)=>`Removed: ${X}`)].join(`
760
- `)}}async function sj($,Z={}){if($.type==="mcp"){let Q=v9($);if(Z.deleteMcpServer)await Z.deleteMcpServer(Q);else W3($,Z);return{id:$.id,type:$.type,status:"uninstalled",message:`Uninstalled ${$.name??Q??$.id}.`}}if($.type==="skill")return j3($,Z);if($.type==="plugin")return Y3($,Z);throw Error(`Unsupported marketplace entry type: ${$.type}`)}var SL={};w(SL,{parsePluginSource:()=>_3,isOfficialPluginSlug:()=>D3,installPlugin:()=>JY,collectPluginMcpOAuthCandidates:()=>L3});import{spawn as Ex}from"node:child_process";import{createHash as Cx}from"node:crypto";import{existsSync as m1,mkdirSync as $Y,readdirSync as wx,readFileSync as Px,renameSync as V3,rmSync as K3,statSync as ZY}from"node:fs";import{cp as ej,mkdir as RL,writeFile as G3}from"node:fs/promises";import{homedir as AL}from"node:os";import{basename as z$,dirname as OL,extname as Sx,join as e,relative as ML,resolve as H2,sep as bx}from"node:path";import{isPluginModulePath as H3,resolveClineDir as yx,resolvePluginModuleEntries as kx}from"@cline/shared/storage";var X4="_installed",F3="package",hx="https://github.com/cline/plugins.git",qL=30000,B3=10485760,zL="@cline/",Ix=["dependencies","devDependencies","optionalDependencies","peerDependencies"],xx={name:"cline-installed-plugin",private:!0,cline:{plugins:[]}};function U3($){if($==="~")return AL();if($.startsWith("~/"))return e(AL(),$.slice(2));return $}function EL($){return $.split(bx).join("/")}function z8($){return Cx("sha256").update($).digest("hex").slice(0,12)}function gx($){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,J=$.startsWith("@")?$.slice(1):$;for(let X of J.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 gx(Z)||"plugin"}function D3($){return/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test($.trim())}function vx($){return $?.trim()||hx}function TL($){let Q=$.trim().match(/^(@?[^@/]+(?:\/[^@/]+)?)(?:@.+)?$/);if(!Q?.[1])throw Error(`Invalid npm plugin source: npm:${$}`);return{name:Q[1]}}function mx($){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 cx($){let Z=$.match(/^git@([^:]+):(.+)$/);if(Z){let j=Z[2]??"",Y=j.indexOf("@");if(Y<0)return{repo:$};return{repo:`git@${Z[1]}:${j.slice(0,Y)}`,ref:j.slice(Y+1)||void 0}}if($.includes("://"))try{let j=new URL($),Y=j.pathname.replace(/^\/+/,""),V=Y.indexOf("@");if(V<0)return{repo:$};return j.pathname=`/${Y.slice(0,V)}`,{repo:j.toString().replace(/\/$/,""),ref:Y.slice(V+1)||void 0}}catch{return{repo:$}}let Q=$.indexOf("/");if(Q<0)return{repo:$};let J=$.slice(0,Q),W=$.slice(Q+1),X=W.indexOf("@");if(X<0)return{repo:$};return{repo:`${J}/${W.slice(0,X)}`,ref:W.slice(X+1)||void 0}}function ux($){try{return decodeURIComponent($)}catch{return $}}function dx($){return z$(ux($))||"plugin"}function px($){let Z=$.split("/").filter(Boolean);return Z.length>=5&&(Z[2]==="blob"||Z[2]==="raw")}function NL($){if(!/^https?:\/\//i.test($))return null;let Z;try{Z=new URL($)}catch{return null}let Q=Z.hostname.toLowerCase(),J=dx(Z.pathname),W=H3(J),X=(Q==="github.com"||Q==="www.github.com")&&px(Z.pathname);if(Z.protocol!=="https:"){if(X||Q==="raw.githubusercontent.com"||W)throw Error(`Remote plugin file URLs must use https: ${$}`);return null}if(Q==="github.com"||Q==="www.github.com"){let j=Z.pathname.split("/").filter(Boolean);if(!X)return null;if(!W)throw Error(`Remote plugin file must be .js or .ts: ${$}`);return{type:"remote",url:`https://raw.githubusercontent.com/${[j[0],j[1],...j.slice(3)].join("/")}`,filename:J}}if(Q==="raw.githubusercontent.com"){if(!W)throw Error(`Remote plugin file must be .js or .ts: ${$}`);return{type:"remote",url:Z.toString(),filename:J}}if(!W)return null;return{type:"remote",url:Z.toString(),filename:J}}function fL($,Z={}){let Q=$.trim(),J=Q.startsWith("git:")&&!Q.startsWith("git://"),W=J?Q.slice(4).trim():Q;if(!Z.force&&!J&&!/^(https?|ssh|git):\/\//i.test(W))return null;let{repo:X,ref:j}=cx(W),Y="",V="";if(X.startsWith("git@")){let K=X.match(/^git@([^:]+):(.+)$/);Y=K?.[1]??"",V=K?.[2]??""}else if(/^(https?|ssh|git):\/\//i.test(X)){let K=new URL(X);Y=K.hostname,V=K.pathname.replace(/^\/+/,"")}else{let K=X.indexOf("/");if(K<0)return null;Y=X.slice(0,K),V=X.slice(K+1)}let B=V.replace(/\.git$/,"").replace(/^\/+/,"");if(!Y||!B||B.split("/").length<2)return null;return{type:"git",repo:X.startsWith("git@")||/^(https?|ssh|git):\/\//i.test(X)?X:`https://${X}`,ref:j,host:Y,path:B}}function _3($,Z){let Q=$.trim();if(!Q)throw Error("plugin install requires a source");if(Z==="npm"){let j=Q.startsWith("npm:")?Q.slice(4).trim():Q,{name:Y}=TL(j);return{type:"npm",spec:j,name:Y}}if(Z==="git"){let j=fL(Q,{force:!0});if(!j)throw Error(`Invalid git plugin source: ${$}`);return j}if(Z==="local")return{type:"local",path:$};if(Z==="remote"){let j=NL(Q);if(!j)throw Error(`Invalid remote plugin source: ${$}`);return j}if(Q.startsWith("npm:")){let j=Q.slice(4).trim(),{name:Y}=TL(j);return{type:"npm",spec:j,name:Y}}if(Q.startsWith(".")||Q.startsWith("/")||Q==="~"||Q.startsWith("~/")||/^[A-Za-z]:[\\/]|^\\\\/.test(Q))return{type:"local",path:$};let W=NL(Q);if(W)return W;let X=fL(Q);if(X)return X;if(D3(Q))return{type:"official",slug:Q};if(mx(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 lx($){return $?e($,".cline","plugins"):e(yx(),"plugins")}function ix($,Z,Q){if(Z.type==="npm")return e($,X4,"npm",`${q$(Z.name)}-${z8(Q)}`);if(Z.type==="git")return e($,X4,"git",q$(Z.host),`${q$(Z.path)}-${z8(Q)}`);if(Z.type==="remote")return e($,X4,"remote",`${q$(Z.filename)}-${z8(Q)}`);if(Z.type==="official")return e($,X4,"official",`${q$(Z.slug)}-${z8(Q)}`);return e($,X4,"local",`${q$(z$(U3(Z.path)))}-${z8(Q)}`)}function rx($,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:${H2(Z,U3($.path))}`}function nx($,Z){if($.type==="npm")return $.name;if($.type==="git")return q$(z$($.path));if($.type==="remote")return q$(z$($.filename,Sx($.filename)));if($.type==="official")return $.slug;return q$(z$(H2(Z,U3($.path))))}async function j4($,Z,Q={}){await new Promise((J,W)=>{let X=Ex($,Z,{cwd:Q.cwd,stdio:["ignore","ignore","pipe"],env:process.env,windowsHide:!0}),j="";X.stderr.on("data",(Y)=>{j+=String(Y)}),X.on("error",W),X.on("close",(Y)=>{if(Y===0){J();return}let V=j.trim();W(Error(`${$} ${Z.join(" ")} failed with exit code ${Y}${V?`: ${V}`:""}`))})})}function CL($){let Z=e($,"package.json");if(!m1(Z))return null;try{return JSON.parse(Px(Z,"utf8"))}catch{return null}}function ax($){let Z=$?.cline?.plugins;if(!Array.isArray(Z))return[];return Z.flatMap((Q)=>{if(typeof Q==="string")return[Q];return Q.paths??[]})}async function ox($){let Z=e($,"package.json"),Q=CL($);if(!Q)return;let J=!1;for(let W of Ix){let X=Q[W];if(!X||typeof X!=="object")continue;for(let j of Object.keys(X)){if(!j.startsWith(zL))continue;delete X[j],delete Q.peerDependenciesMeta?.[j],J=!0}if(Object.keys(X).length===0)delete Q[W]}if(Q.peerDependenciesMeta){for(let W of Object.keys(Q.peerDependenciesMeta)){if(!W.startsWith(zL))continue;delete Q.peerDependenciesMeta[W],J=!0}if(Object.keys(Q.peerDependenciesMeta).length===0)delete Q.peerDependenciesMeta}if(!J)return;await G3(Z,`${JSON.stringify(Q,null,2)}
761
- `,"utf8")}function sx($,Z){let Q=e($,"node_modules","@cline");if(!m1(Q))return;for(let J of PL(Q)){if(`@cline/${J.name}`===Z)continue;K3(e(Q,J.name),{recursive:!0,force:!0})}}function wL($){let Z=ax(CL($)).map((X)=>H2($,X)).filter((X)=>m1(X)&&ZY(X).isFile()&&H3(X));if(Z.length>0)return Z;let Q=kx($);if(Q?.length)return Q;let J=[],W=[$];while(W.length>0){let X=W.pop();if(!X)continue;for(let j of PL(X)){let Y=e(X,j.name);if(j.name==="node_modules"||j.name===".git")continue;if(j.isDirectory()){W.push(Y);continue}if(j.isFile()&&!j.name.startsWith(".")&&H3(Y))J.push(Y)}}return J.sort((X,j)=>X.localeCompare(j))}function PL($){try{return wx($,{withFileTypes:!0})}catch{return[]}}function tx($,Z){let Q=wL(Z);if(Q.length===0)throw Error(`No plugin entry files found in ${Z}`);return Q.map((J)=>`./${EL(ML($,J))}`)}async function ex($,Z,Q){let J=tx($,Z);return await G3(e($,"package.json"),JSON.stringify({...xx,name:Q,cline:{plugins:[{paths:J}]}},null,2),"utf8"),J}async function $g($,Z,Q){let J=e(Z,F3);return await RL(J,{recursive:!0}),await G3(e(J,"package.json"),JSON.stringify({name:"cline-plugin-install",private:!0},null,2),"utf8"),await j4(Q,["install",$.spec,"--prefix",J,"--omit=dev","--omit=peer","--legacy-peer-deps","--no-audit","--no-fund","--package-lock=false"]),sx(J,$.name),e(J,"node_modules",$.name)}async function QY($,Z){if(!m1(e($,"package.json")))return;await ox($),await j4(Z,["install","--omit=dev","--omit=peer","--legacy-peer-deps","--no-audit","--no-fund","--package-lock=false"],{cwd:$})}async function Zg($,Z,Q){if($.ref?.startsWith("-"))throw Error(`Invalid git ref "${$.ref}".`);let J=e(Z,F3),W=["clone","--filter=blob:none"];if($.ref)W.push("--branch",$.ref);W.push("--",$.repo,J);try{await j4("git",W)}catch(X){if(!$.ref)throw X;await j4("git",["clone","--filter=blob:none","--",$.repo,J]),await j4("git",["checkout","--detach",$.ref],{cwd:J})}return await QY(J,Q),J}async function Qg($,Z,Q,J){let W=e(Z,"repo");await j4("git",["clone","--filter=blob:none","--depth","1","--",J,W]);let X=e(W,"plugins",$.slug);if(!m1(X)||!ZY(X).isDirectory())throw Error(`Official Cline plugin "${$.slug}" was not found at plugins/${$.slug} in ${J}`);let j=e(Z,F3);return await ej(X,j,{recursive:!0,filter:(Y)=>{let V=z$(Y);return V!==".git"&&V!=="node_modules"}}),K3(W,{recursive:!0,force:!0}),await QY(j,Q),j}function tj($){return Error(`Remote plugin file from ${$} exceeds the ${B3} byte limit`)}function Jg($){let Z=$.headers.get("content-length");if(!Z)return;let Q=Number(Z);if(!Number.isFinite(Q)||Q<0)return;return Q}async function Wg($,Z){let Q=Jg($);if(Q!==void 0&&Q>B3)throw tj(Z);if(!$.body){let j=Buffer.from(await $.text(),"utf8");if(j.byteLength>B3)throw tj(Z);return j}let J=$.body.getReader(),W=[],X=0;try{while(!0){let{done:j,value:Y}=await J.read();if(j)break;let V=Buffer.from(Y);if(X+=V.byteLength,X>B3)throw await J.cancel().catch(()=>{return}),tj(Z);W.push(V)}return Buffer.concat(W,X)}finally{J.releaseLock()}}async function Xg($,Z){let Q=new AbortController,J=setTimeout(()=>{Q.abort()},qL);try{let W=await fetch($.url,{signal:Q.signal});if(!W.ok){let j=W.statusText?` ${W.statusText}`:"";throw Error(`Failed to download plugin file from ${$.url}: ${W.status}${j}`)}let X=await Wg(W,$.url);return $Y(Z,{recursive:!0}),await G3(e(Z,$.filename),X),Z}catch(W){if(W instanceof Error&&W.name==="AbortError")throw Error(`Timed out downloading plugin file from ${$.url} after ${qL}ms`);throw W}finally{clearTimeout(J)}}async function jg($,Z,Q,J){let W=H2(Q,U3($.path));if(!m1(W))throw Error(`Plugin source path does not exist: ${W}`);let X=ZY(W);if(X.isFile()){if(!H3(W))throw Error(`Plugin file must be .js or .ts: ${W}`);$Y(Z,{recursive:!0});let Y=e(Z,z$(W));return await ej(W,Y),Z}if(!X.isDirectory())throw Error(`Plugin source must be a file or directory: ${W}`);let j=e(Z,F3);return await ej(W,j,{recursive:!0,filter:(Y)=>{let V=z$(Y);return V!==".git"&&V!=="node_modules"}}),await QY(j,J),j}function Yg($,Z){if(m1($)&&!Z)throw Error(`Plugin is already installed at ${$}. Use --force to replace it.`)}function Vg($,Z,Q){if($Y(OL(Z),{recursive:!0}),!m1(Z)){V3($,Z);return}if(!Q)throw Error(`Plugin is already installed at ${Z}. Use --force to replace it.`);let J=e(OL(Z),`.replace-${z$(Z)}-${Date.now()}-${process.pid}-${z8(`${Z}:${Math.random()}`)}`);V3(Z,J);try{V3($,Z)}catch(W){if(!m1(Z)&&m1(J))V3(J,Z);throw W}try{K3(J,{recursive:!0,force:!0})}catch{}}function Bg($){let Z=$.transport;if(Z.type==="stdio")return!1;return Z.headers!==void 0&&Object.keys(Z.headers).length>0}function Hg($){let Z=$.oauth?.tokens?.access_token;return typeof Z==="string"&&Z.trim().length>0}function Kg($){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 L3($){let Z=new Set($.pluginPaths.map((W)=>H2(W)));if(Z.size===0)return[];let Q;try{Q=W1({filePath:$.settingsPath??W0()})}catch{return[]}let J=[];for(let W of Q){let X=Kg(W);if(!X||!Z.has(H2(X.pluginPath)))continue;let j=W.transport.type;if(j==="stdio")continue;if(Bg(W)||Hg(W))continue;J.push({name:W.name,pluginName:X.pluginName,pluginPath:X.pluginPath,transportType:j,lastError:W.oauth?.lastError})}return J.sort((W,X)=>W.name.localeCompare(X.name))}async function JY($){let Z=$.source.trim(),Q=_3(Z,$.sourceType),J=$.cwd?.trim(),W=J?H2(J):process.cwd(),X=lx(J?W:void 0),j=vx($.officialPluginsRepo),Y=rx(Q,W,j),V=ix(X,Q,Y),B=nx(Q,W),H=e(X,X4,".tmp"),K=e(H,`${Date.now()}-${process.pid}-${z8(`${Z}:${Math.random()}`)}`),G=$.npmCommand??(process.env.CLINE_NPM_COMMAND?.trim()||"npm"),F=$.force===!0;Yg(V,F),await RL(H,{recursive:!0});let U;try{if(Q.type==="npm")U=await $g(Q,K,G);else if(Q.type==="git")U=await Zg(Q,K,G);else if(Q.type==="official")U=await Qg(Q,K,G,j);else if(Q.type==="remote")U=await Xg(Q,K);else U=await jg(Q,K,W,G);let _=(Q.type==="local"||Q.type==="remote")&&U===K?wL(K).map((D)=>`./${EL(ML(K,D))}`):await ex(K,U,B);if(_.length===0)throw Error(`No plugin entry files found for ${Z}`);Vg(K,V,F);let L={source:Z,installPath:V,entryPaths:_.map((D)=>H2(V,D)),mcpSyncFailures:[],mcpOAuthCandidates:[]},O=await h9({pluginPaths:L.entryPaths,cwd:W,workspacePath:W});return L.mcpSyncFailures=O.failures,L.mcpOAuthCandidates=L3({pluginPaths:L.entryPaths}),L}catch(_){throw K3(K,{recursive:!0,force:!0}),_}}var cL={};w(cL,{writeModelsFileSync:()=>l9,writeModelsFile:()=>i9,toProviderModel:()=>BY,syncStoredProviderRegistration:()=>HY,resolveModelsRegistryPath:()=>c1,registerProviderSettingsProvider:()=>mL,registerCustomProvider:()=>N8,registerConfiguredProvidersFromSettings:()=>r9,readModelsFileSync:()=>Y4,readModelsFile:()=>T8,parseModelsFile:()=>VY,ensureCustomProvidersLoadedSync:()=>n9,ensureCustomProvidersLoaded:()=>a9,emptyModelsFile:()=>p9,StoredProviderMetadataSchema:()=>yL,StoredProviderEntrySchema:()=>jY,StoredModelsFileSchema:()=>YY,StoredModelEntrySchema:()=>bL});import{existsSync as Gg,mkdirSync as Fg,readFileSync as Ug,renameSync as Dg,rmSync as _g,writeFileSync as Lg}from"node:fs";import{mkdir as Ag,readFile as Og,rename as qg,rm as zg,writeFile as Tg}from"node:fs/promises";import{dirname as XY,join as Ng}from"node:path";import*as A0 from"@cline/llms";import{ApiFormatSchema as fg,ModelCapabilitySchema as Rg,ProviderCapabilitySchema as Mg,ProviderClientSchema as Eg,ProviderProtocolSchema as Cg}from"@cline/shared";import{z as $0}from"zod";var WY=$0.number().finite().positive().optional().catch(void 0),d9=$0.number().finite().nonnegative().optional().catch(void 0),bL=$0.object({id:$0.string().optional(),name:$0.string().optional(),maxTokens:WY,contextWindow:WY,maxInputTokens:WY,capabilities:$0.array(Rg).optional(),supportsVision:$0.boolean().optional(),supportsAttachments:$0.boolean().optional(),supportsReasoning:$0.boolean().optional(),inputPrice:d9,outputPrice:d9,cacheReadsPrice:d9,cacheWritesPrice:d9,temperature:d9,apiFormat:fg.optional()}).passthrough(),yL=$0.object({name:$0.string(),baseUrl:$0.string(),defaultModelId:$0.string().optional(),protocol:Cg.optional(),client:Eg.optional(),capabilities:$0.array(Mg).optional(),modelsSourceUrl:$0.string().optional()}).passthrough(),jY=$0.object({provider:yL.optional(),models:$0.record($0.string(),bL).optional()}).passthrough(),YY=$0.object({version:$0.literal(1),providers:$0.record($0.string(),jY)}),wg=$0.object({version:$0.literal(1),providers:$0.record($0.string(),$0.unknown())}),A3=new Set;function kL($){return $.split(/[-_]/).filter(Boolean).map((Z)=>Z.charAt(0).toUpperCase()+Z.slice(1)).join(" ")}function c1($){return Ng(XY($.getFilePath()),"models.json")}function p9(){return{version:1,providers:{}}}function VY($){let Z=wg.safeParse($);if(!Z.success)return t("models.json content is not a valid models file envelope; starting from an empty registry"),p9();let Q={};for(let[J,W]of Object.entries(Z.data.providers)){let X=jY.safeParse(W);if(X.success)Q[J]=X.data;else t(`models.json: dropping invalid entry for provider=${J}`)}return{version:1,providers:Q}}function Y4($){if(!Gg($))return p9();try{let Z=Ug($,"utf8");return VY(JSON.parse(Z))}catch{t(`models.json at ${$} exists but is unreadable or invalid JSON; treating as an empty registry`)}return p9()}async function T8($){try{let Z=await Og($,"utf8");return VY(JSON.parse(Z))}catch(Z){if(Z?.code!=="ENOENT")t(`models.json at ${$} exists but is unreadable or invalid JSON; treating as an empty registry`)}return p9()}function l9($,Z){Fg(XY($),{recursive:!0});let Q=YY.parse(Z),J=`${$}.${process.pid}.tmp`;try{Lg(J,`${JSON.stringify(Q,null,2)}
762
- `,"utf8"),Dg(J,$)}catch(W){throw _g(J,{force:!0}),W}}async function i9($,Z){await Ag(XY($),{recursive:!0});let Q=YY.parse(Z),J=`${$}.${process.pid}.tmp`;try{await Tg(J,`${JSON.stringify(Q,null,2)}
763
- `,"utf8"),await qg(J,$)}catch(W){throw await zg(J,{force:!0}).catch(()=>{}),W}}function BY($,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 hL($){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 IL($){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 Pg($){return $!=null&&typeof $.name==="string"&&typeof $.baseUrl==="string"}function xL($,Z){return $??Z??"openai-chat"}function gL($,Z,Q){return $??Q??(Z==="openai-responses"?"openai":"openai-compatible")}function vL($,Z,Q){let J=new Set(Z?.capabilities??Q??[]);if(Z?.supportsVision!==void 0)if(Z.supportsVision)J.add("images");else J.delete("images");if(Z?.supportsAttachments!==void 0)if(Z.supportsAttachments)J.add("files");else J.delete("files");if(Z?.supportsReasoning!==void 0)if(Z.supportsReasoning)J.add("reasoning");else J.delete("reasoning");let W=Z?.apiFormat,X=Z?.inputPrice!==void 0||Z?.outputPrice!==void 0||Z?.cacheReadsPrice!==void 0||Z?.cacheWritesPrice!==void 0;return{id:$,name:Z?.name??$,...Z?.maxTokens!==void 0?{maxTokens:Z.maxTokens}:{},...Z?.contextWindow!==void 0?{contextWindow:Z.contextWindow}:{},...Z?.maxInputTokens!==void 0?{maxInputTokens:Z.maxInputTokens}:{},...J.size>0?{capabilities:[...J]}:{},...Z?.temperature!==void 0?{temperature:Z.temperature}:{},...W!==void 0?{apiFormat:W}:{},...X?{pricing:{...Z?.inputPrice!==void 0?{input:Z.inputPrice}:{},...Z?.outputPrice!==void 0?{output:Z.outputPrice}:{},...Z?.cacheReadsPrice!==void 0?{cacheRead:Z.cacheReadsPrice}:{},...Z?.cacheWritesPrice!==void 0?{cacheWrite:Z.cacheWritesPrice}:{}}}:{}}}function Sg($,Z){for(let[Q,J]of Object.entries(Z??{})){let W=J.id?.trim()||Q.trim();if(!W)continue;A0.registerModel($,W,vL(W,J))}}function bg($,Z,Q){return{...Z??{},id:$,name:Z?.name??$,capabilities:Z?.capabilities??Q}}function yg($){return Object.assign({},...A0.resolveProviderModelCatalogKeys($).map((Q)=>A0.getGeneratedModelsForProvider(Q)))}function mL($){let Z=$.provider.trim();if(!Z||A0.isBuiltInProviderId(Z))return;let Q=$.baseUrl?.trim();if(!Q)return;let J=A0.MODEL_COLLECTIONS_BY_PROVIDER_ID[Z],W=yg(Z),X=IL($.capabilities),j=X.length>0?X:void 0,Y=$.model?.trim(),V={...W,...J?.models??{}};if(Y)V[Y]=bg(Y,V[Y],j);let B=Object.keys(V).filter(Boolean),H=Y||B[0];if(!H)return;let K=xL($.protocol,J?.provider.protocol),G=gL($.client,K,J?.provider.client);A0.registerProvider({provider:{id:Z,name:J?.provider.name??kL(Z),description:J?.provider.description,protocol:K,client:G,baseUrl:Q,modelsSourceUrl:J?.provider.modelsSourceUrl,defaultModelId:H,capabilities:hL($.capabilities)??J?.provider.capabilities,source:"file"},models:V})}function r9($){for(let Z of Object.values($.providers))mL(Z.settings)}function N8($,Z){let Q=Z.models??{};if(!Pg(Z.provider)){Sg($,Q);return}let J=IL(Z.provider.capabilities),W=Object.entries(Q).map(([B,H])=>({id:H.id?.trim()||B.trim(),model:H})).filter(({id:B})=>B.length>0),X=Z.provider.defaultModelId?.trim()||W[0]?.id||"default",j=xL(Z.provider.protocol,void 0),Y=gL(Z.provider.client,j,void 0),V=Object.fromEntries(W.map(({id:B,model:H})=>[B,{...vL(B,H,J.length>0?J:void 0),status:"active"}]));A0.registerProvider({provider:{id:$,name:Z.provider.name.trim()||kL($),protocol:j,client:Y,baseUrl:Z.provider.baseUrl,modelsSourceUrl:Z.provider.modelsSourceUrl,defaultModelId:X,capabilities:hL(Z.provider.capabilities),source:"file"},models:V})}function HY($,Z,Q){let J=Q?.models??{},W=new Set;for(let[Y,V]of Object.entries(Z?.models??{})){if(Object.hasOwn(J,Y))continue;let B=V.id?.trim()||Y.trim();if(B)W.add(B),A0.unregisterModel($,B)}if(!Q)return;let X=A0.getProviderCollectionSync($);N8($,Q);let j=A0.getProviderCollectionSync($);if(X&&j&&j!==X){let Y=Object.fromEntries(Object.entries(X.models).filter(([V])=>!W.has(V)));A0.registerProvider({...j,models:{...Y,...j.models}})}}function n9($){let Z=c1($);if(A3.has(Z))return;let Q=Y4(Z);for(let[J,W]of Object.entries(Q.providers))N8(J,W);A3.add(Z)}async function a9($){let Z=c1($);if(A3.has(Z))return;let Q=await T8(Z);for(let[J,W]of Object.entries(Q.providers))N8(J,W);A3.add(Z)}var oL={};w(oL,{updateLocalProvider:()=>z3,saveLocalProviderSettings:()=>LY,saveLocalProviderOAuthCredentials:()=>zY,resolveLocalClineAuthToken:()=>NY,refreshProviderModelsFromSource:()=>AY,normalizeOAuthProvider:()=>OY,markLocalProviderEnabled:()=>UY,loginLocalProvider:()=>qY,loginAndSaveLocalProviderOAuthCredentials:()=>TY,listLocalProviders:()=>DY,getLocalProviderModels:()=>_Y,ensureCustomProvidersLoaded:()=>a9,deleteLocalProvider:()=>T3,addLocalProvider:()=>FY});import*as u0 from"@cline/llms";var dL="cline-pass";function kg($){return $.apiKey??$.auth?.apiKey}function hg($){return($.auth?.accessToken?.trim()??"").length>0}function pL($){return $.split(/[-_]/).filter(Boolean).map((Z)=>Z.charAt(0).toUpperCase()+Z.slice(1)).join(" ")}function Ig($){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 xg($){let Z=["#c4956a","#6b8aad","#e8963a","#5b9bd5","#6bbd7b","#9b7dd4","#d07f68","#57a6a1"],Q=0;for(let J of $)Q=Q*31+J.charCodeAt(0)>>>0;return Z[Q%Z.length]}function lL($){return Object.entries($).sort(([Z],[Q])=>Z.localeCompare(Q)).map(([Z,Q])=>BY(Z,Q))}async function gg($,Z){let Q=await u0.getModelsForProvider($),J=$===dL;if(!Z&&!J)return Q;let W=await x5($,{loadLatestOnInit:J,loadPrivateOnAuth:!0,failOnError:!1},Z);if($==="litellm"&&W?.knownModels)return W.knownModels;if(J&&W?.knownModels)return W.knownModels;return W?.knownModels?{...Q,...W.knownModels}:Q}function KY($){return[...new Set(($??[]).map((Z)=>Z.trim()).filter(Boolean))]}function vg($){if(!$?.length)return;return[...new Set($)]}function mg($,Z){return vg([...$??[],...Z??[]])}function cg($){let Z=$?.popularRank;return typeof Z==="number"&&Number.isFinite(Z)?Z:Number.MAX_SAFE_INTEGER}function ug($){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 dg($){let Z=$?.configFields;if(!Array.isArray(Z))return;return Z.filter(ug)}var O3={path:"apiKey",label:"API Key",type:"password",placeholder:"Enter API key...",description:"API key issued by the provider.",secret:!0},uL={path:"baseUrl",label:"Base URL",type:"url",placeholder:"https://...",description:"Base endpoint used for provider requests."};function pg($){if(!$)return[O3];if($.source!=="system")return $.baseUrl?[O3,uL]:[O3];let Z=[];if($.env?.length)Z.push(O3);if($.baseUrl)Z.push(uL);return Z}function lg($,Z){return Z.split(".").reduce((Q,J)=>{if(!Q||typeof Q!=="object")return;return Q[J]},$)}function ig($){if(typeof $==="string"||typeof $==="number"||typeof $==="boolean"||$===null)return $;return}function rg($,Z,Q){if(!$?.length)return;let J={};for(let W of $){let j=ig(W.path==="baseUrl"&&Z?.baseUrl===void 0?Q?.baseUrl:lg(Z,W.path))??W.defaultValue;if(j!==void 0)J[W.path]=j}return J}function iL($){let Z=Object.entries($??{}).filter(([Q])=>Q.trim().length>0);return Z.length>0?Object.fromEntries(Z):void 0}function GY($,Z){let Q=Z?.includes("vision")??!1,J=Z?.includes("reasoning")??!1;return Object.fromEntries($.map((W)=>[W,{id:W,name:W,supportsVision:Q,supportsAttachments:Q,supportsReasoning:J}]))}async function rL($){if(!$.shouldRecompute)return $.fallbackModelIds??[];let Z=$.modelsSourceUrl?await uQ($.modelsSourceUrl,$.providerId):[];return[...new Set([...$.explicitModels??[],...Z])]}function nL($,Z){let Q=$.read(),J=!1;if(Q.providers[Z])delete Q.providers[Z],J=!0;if(Q.lastUsedProvider===Z)delete Q.lastUsedProvider,J=!0;if(J)$.write(Q);u0.unregisterProvider(Z)}async function FY($,Z){let Q=Z.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let J=Z.baseUrl.trim(),W=Z.apiKey?.trim()??"";if(!J&&!W){let U=c1($);if((await T8(U)).providers[Q]){let L=await T3($,{providerId:Q});return{providerId:Q,settingsPath:L.settingsPath,modelsPath:L.modelsPath,modelsCount:0}}return nL($,Q),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:U,modelsCount:0}}if(u0.hasProvider(Q))throw Error(`provider "${Q}" already exists`);let X=Z.name.trim();if(!X)throw Error("name is required");if(!J)throw Error("baseUrl is required");let j=KY(Z.models),Y=Z.modelsSourceUrl?.trim(),V=await rL({providerId:Q,explicitModels:j,modelsSourceUrl:Y,shouldRecompute:!0});if(V.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let B=Z.defaultModelId?.trim()&&V.includes(Z.defaultModelId.trim())?Z.defaultModelId.trim():V[0],H=Z.capabilities?.length?[...new Set(Z.capabilities)]:void 0,K=iL(Z.headers);$.saveProviderSettings({provider:Q,apiKey:W||void 0,baseUrl:J,headers:K,timeout:Z.timeoutMs,model:B,protocol:Z.protocol,client:Z.client},{setLastUsed:!1});let G=c1($),F=await T8(G);return F.providers[Q]={provider:{name:X,baseUrl:J,defaultModelId:B,protocol:Z.protocol,client:Z.client,capabilities:H,modelsSourceUrl:Y},models:GY(V,H)},await i9(G,F),N8(Q,F.providers[Q]),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:G,modelsCount:V.length}}async function z3($,Z){let Q=Z.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let J=c1($),W=await T8(J),X=W.providers[Q];if(!X){let T=$.getProviderSettings(Q);if(!T)throw Error(`provider "${Q}" does not exist`);let z=Z.modelsSourceUrl?.trim(),A=KY(Z.models)[0]??T.model?.trim();if(!A&&!z)throw Error(`provider "${Q}" cannot be updated because no model is configured`);X={provider:{name:Z.name?.trim()||pL(Q),baseUrl:Z.baseUrl?.trim()??T.baseUrl?.trim()??"",defaultModelId:A,protocol:T.protocol,client:T.client,capabilities:T.capabilities},models:A?GY([A],T.capabilities):{}}}if(!X.provider)throw Error(`provider "${Q}" cannot be updated because it is a model overlay (no provider metadata)`);let j=Z.name?.trim()??X.provider.name.trim();if(!j)throw Error("name is required");let Y=Z.baseUrl?.trim()??X.provider.baseUrl.trim();if(!Y)throw Error("baseUrl is required");let V=Z.capabilities===void 0?X.provider.capabilities:Z.capabilities===null?void 0:[...new Set(Z.capabilities)],B=Z.protocol===void 0?X.provider.protocol:Z.protocol??void 0,H=Z.client===void 0?X.provider.client:Z.client??void 0,K=KY(Z.models),G=Z.modelsSourceUrl===void 0?X.provider.modelsSourceUrl:Z.modelsSourceUrl?.trim()||void 0,F=Z.models!==void 0||Z.modelsSourceUrl!==void 0&&!!G,U=Object.keys(X.models??{}).map((T)=>T.trim()).filter(Boolean),_=await rL({providerId:Q,explicitModels:K,modelsSourceUrl:G,fallbackModelIds:U,shouldRecompute:F});if(_.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let L=Z.defaultModelId===void 0?X.provider.defaultModelId?.trim():Z.defaultModelId?.trim(),O=L&&_.includes(L)?L:_[0],q={...$.getProviderSettings(Q)??{},provider:Q,baseUrl:Y,model:O};if(B)q.protocol=B;else delete q.protocol;if(H)q.client=H;else delete q.client;if(Z.apiKey!==void 0){let T=Z.apiKey?.trim()??"";if(T)q.apiKey=T;else delete q.apiKey}if(Z.headers!==void 0){let T=iL(Z.headers);if(T)q.headers=T;else delete q.headers}if(Z.timeoutMs!==void 0)if(typeof Z.timeoutMs==="number")q.timeout=Z.timeoutMs;else delete q.timeout;return $.saveProviderSettings(q,{setLastUsed:!1}),W.providers[Q]={provider:{name:j,baseUrl:Y,defaultModelId:O,protocol:B,client:H,capabilities:V,modelsSourceUrl:G},models:GY(_,V)},await i9(J,W),N8(Q,W.providers[Q]),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:J,modelsCount:_.length}}async function T3($,Z){let Q=Z.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let J=c1($),W=await T8(J);if(!W.providers[Q])throw Error(`provider "${Q}" does not exist`);return delete W.providers[Q],await i9(J,W),u0.unregisterProvider(Q),nL($,Q),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:J}}function UY($,Z,Q={}){let J=Z.trim();if(!J)throw Error("providerId is required");let W=$.read().providers[J]?.settings;return $.saveProviderSettings({...W??{},provider:J},{setLastUsed:!1,tokenSource:Q.tokenSource}),{providerId:J,enabled:!0,settingsPath:$.getFilePath()}}async function DY($,Z={}){let Q=$.read(),J=u0.getProviderIds(),W=await Promise.all(J.map(async(j)=>{let[Y,V]=await Promise.all([u0.getProvider(j),u0.getModelsForProvider(j)]),B=lL(V),H=Q.providers[j]?.settings,K=$.getProviderSettings(j),G=Y?.name??pL(j),F=mg(Y?.capabilities,K?.capabilities),U=dg(Y?.metadata)??pg(Y);return{provider:{id:j,name:G,models:B.length,color:xg(j),letter:Ig(G),enabled:Boolean(H),apiKey:K?kg(K):void 0,oauthAccessTokenPresent:K?hg(K):void 0,baseUrl:K?.baseUrl??Y?.baseUrl,defaultModelId:Y?.defaultModelId,protocol:K?.protocol??Y?.protocol,client:K?.client??Y?.client,capabilities:F,authDescription:"This provider uses API keys for authentication.",baseUrlDescription:"The base endpoint to use for provider requests.",configFields:U,configValues:rg(U,K,Y),modelList:B},rank:cg(Y?.metadata)}}));W.sort((j,Y)=>{if(j.rank!==Y.rank)return j.rank-Y.rank;return j.provider.name.localeCompare(Y.provider.name)||j.provider.id.localeCompare(Y.provider.id)});let X=W.map((j)=>j.provider);if(Z.isClinePassEnabled!==!0)X=X.filter((j)=>j.id!==dL);return{providers:X,settingsPath:$.getFilePath()}}async function _Y($,Z){let Q=$.trim(),J=await gg(Q,Z),W=lL(J);return{providerId:Q,models:W}}function q3($){return $!=null&&typeof $==="object"&&!Array.isArray($)}function aL($,Z){if(!q3(Z))return q3($)?{...$}:void 0;let Q=q3($)?{...$}:{};for(let[J,W]of Object.entries(Z)){if(W==null||W===""){delete Q[J];continue}if(q3(W)){let X=aL(Q[J],W);if(X&&Object.keys(X).length>0)Q[J]=X;else delete Q[J];continue}Q[J]=W}return Object.keys(Q).length>0?Q:void 0}function LY($,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 W={...$.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 W[X];else W[X]=Z[X];for(let X of["maxTokens","contextWindow","timeout","apiLine","protocol","client","routingProviderId","capabilities"])if(Object.hasOwn(Z,X))W[X]=Z[X];for(let X of["auth","headers","reasoning","aws","gcp","azure","sap","oca"])if(Object.hasOwn(Z,X)&&Z[X]!=null){let j=aL(W[X],Z[X]);if(j)W[X]=j;else delete W[X]}return $.saveProviderSettings(W,{setLastUsed:!1}),{providerId:Q,enabled:!0,settingsPath:$.getFilePath()}}async function AY($,Z){let Q=Z.trim(),J=$.getProviderSettings(Q),X=u0.MODEL_COLLECTIONS_BY_PROVIDER_ID[Q]?.provider,j=J?.baseUrl?.trim()||X?.baseUrl?.trim(),Y=dQ(j,X?.baseUrl,X?.modelsSourceUrl);if(!J||!X||!j||!Y)return{providerId:Q,refreshed:!1};let V=await z3($,{providerId:Q,name:X.name,baseUrl:j,apiKey:J.apiKey,headers:J.headers??null,timeoutMs:J.timeout??null,modelsSourceUrl:Y,protocol:J.protocol??X.protocol??null,client:J.client??X.client??null,capabilities:J.capabilities??null});return{providerId:Q,refreshed:!0,modelsCount:V.modelsCount}}function OY($){let Z=$.trim().toLowerCase(),Q=U0(Z);if(Q)return Q.providerId;throw Error(`provider "${$}" does not support OAuth login`)}async function qY($,Z,Q,J){let W=U0($);if(!W)throw Error(`provider "${$}" does not support OAuth login`);let X=w6({onPrompt:async(j)=>j.defaultValue??"",openUrl:Q,onOpenUrlError:({error:j})=>{throw j instanceof Error?j:Error(String(j))}});return W.login({settings:Z,callbacks:X,telemetry:J})}function zY($,Z,Q,J,W){return M2({manager:$,providerId:Z,settings:Q,credentials:J,setLastUsed:W?.setLastUsed})}async function TY($,Z,Q,J){let W=w6({onPrompt:async(X)=>X.defaultValue??"",openUrl:Q,onOpenUrlError:({error:X})=>{throw X instanceof Error?X:Error(String(X))}});return u4($,Z,{callbacks:W,telemetry:J})}function NY($){let Z=$?.auth?.accessToken?.trim()||$?.apiKey?.trim();return Z&&Z.length>0?Z:void 0}var sL={};w(sL,{getProviderConfigFields:()=>fY});import*as N3 from"@cline/llms";var ng=["apiKey","baseUrl","azureApiVersion","awsRegion","awsProfile","gcpProjectId","gcpRegion","sapClientId","sapClientSecret","sapTokenUrl","sapResourceGroup","sapDeploymentId"],ag={"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 og($,Z){let Q={};for(let J of ng){let W=$[J],X=Z[J];if(W||X)Q[J]={...W,...X}}return Q}function sg($){let Z=ag[$.providerId];if(!Z)return $;return{...$,description:Z.description??$.description,fields:Z.mode==="replace"?Z.fields:og($.fields,Z.fields)}}var tg=new Set(["ollama","lmstudio","litellm","openai-compatible"]);function eg($,Z){if(!Z?.provider.baseUrl)return!1;if(Z.provider.source!=="system")return!0;return tg.has($)}function fY($){let Z=N3.normalizeProviderId($);if(I$(Z))return{providerId:Z,authMethod:"oauth",fields:{}};let Q=N3.MODEL_COLLECTIONS_BY_PROVIDER_ID[Z];if(Q?.provider.capabilities?.includes("local-auth"))return{providerId:Z,authMethod:"local",fields:{}};let J=Q?.provider.baseUrl,W={apiKey:{}};if(eg(Z,Q))W.baseUrl={defaultValue:J};return sg({providerId:Z,authMethod:"api-key",fields:W})}var eL={};w(eL,{resolveLegacyClineAuth:()=>EY,migrateLegacyProviderSettings:()=>s9});import{existsSync as $v,readFileSync as Zv}from"node:fs";import{dirname as Qv,join as RY}from"node:path";import*as T$ from"@cline/llms";import{ReasoningLevelSchema as Jv}from"@cline/shared";import{resolveClineDataDir as Wv}from"@cline/shared/storage";var f3="openai",Xv=T$.BUILT_IN_PROVIDER.OPENAI_COMPATIBLE,jv=128000;function EY($){let Z=$?.trim();if(!Z)return;try{let Q=JSON.parse(Z);if(!Q)return;let J=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:J,accountId:Q.userInfo?.id}}catch{return}}function C($){let Z=$?.trim();return Z?Z:void 0}function Yv($){return $==="credentials"?"iam":$}function tL($){if(!$v($))return;try{let Z=Zv($,"utf8"),Q=JSON.parse(Z);if(Q&&typeof Q==="object"&&!Array.isArray(Q))return Q}catch{}return}function Vv($){let Z=$.dataDir??Wv(),Q=$.globalStatePath??RY(Z,"globalState.json"),J=$.secretsPath??RY(Z,"secrets.json"),W=tL(Q),X=tL(J);if(!W&&!X)return;return{globalState:W??{},secrets:X??{}}}function MY($){return T$.normalizeProviderId($)}function R3($){if($===f3)return $;return T$.normalizeProviderId($)}function Bv($,Z,Q,J){let W=Q==="plan"?"planMode":"actMode",X=Z===J?C(Q==="plan"?$.planModeApiModelId:$.actModeApiModelId):void 0,Y={openrouter:`${W}OpenRouterModelId`,cline:`${W}ClineModelId`,openai:`${W}OpenAiModelId`,ollama:`${W}OllamaModelId`,lmstudio:`${W}LmStudioModelId`,litellm:`${W}LiteLlmModelId`,requesty:`${W}RequestyModelId`,together:`${W}TogetherModelId`,fireworks:`${W}FireworksModelId`,sapaicore:`${W}SapAiCoreModelId`,groq:`${W}GroqModelId`,baseten:`${W}BasetenModelId`,huggingface:`${W}HuggingFaceModelId`,"huawei-cloud-maas":`${W}HuaweiCloudMaasModelId`,oca:`${W}OcaModelId`,aihubmix:`${W}AihubmixModelId`,hicap:`${W}HicapModelId`,nousResearch:`${W}NousResearchModelId`,"vercel-ai-gateway":`${W}VercelAiGatewayModelId`}[Z];return(Y?C(typeof $[Y]==="string"?$[Y]:void 0):void 0)??X}function Hv($,Z,Q){let J=Q==="plan"?$.planModeThinkingBudgetTokens:$.actModeThinkingBudgetTokens,W=[...Z==="oca"?[$.actModeOcaReasoningEffort,$.planModeOcaReasoningEffort]:[],...Z==="gemini"?[$.geminiActModeThinkingLevel,$.geminiPlanModeThinkingLevel]:[],$.actModeReasoningEffort,$.planModeReasoningEffort].map(C).find(Boolean),X=Jv.safeParse(W),j=X.success?X.data:void 0,Y=typeof J==="number"&&Number.isInteger(J)&&J>0?J:void 0;if(!j&&Y===void 0)return;return{...j?{effort:j}:{},...Y!==void 0?{budgetTokens:Y}:{}}}function Kv($){let Z=$["openai-codex-oauth-credentials"];if(!Z)return;try{let Q=JSON.parse(Z),J=C(Q.access_token),W=C(Q.refresh_token),X=C(Q.accountId);if(!J&&!W&&!X)return;return{...J?{apiKey:J}:{},auth:{...J?{accessToken:J}:{},...W?{refreshToken:W}:{},...X?{accountId:X}:{}}}}catch{return}}function Gv($){let Z=T$.getGeneratedModelsForProvider($),J=T$.getProviderCollectionSync($)?.provider.defaultModelId;if(J&&Z[J])return J;return Object.keys(Z)[0]??void 0}function Fv($,Z,Q,J){let W=MY($),X=C(J==="plan"?Z.planModeApiProvider:Z.actModeApiProvider),j=X?R3(X):void 0,Y=Bv(Z,$,J,j)??Gv(W),V=Hv(Z,W,J),B=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},K={};if($==="openai-codex")Object.assign(K,Kv(Q));if($==="cline")try{let D=C(Q["cline:clineAccountId"]);if(D)K.auth={...K.auth??{},...EY(D)}}catch{}if($===f3&&Z.openAiHeaders)K.headers=Z.openAiHeaders;if($==="bedrock"){let D=Yv(Z.awsAuthentication),q=D==="profile"||Z.awsUseProfile===!0;K.aws={accessKey:C(Q.awsAccessKey),secretKey:C(Q.awsSecretKey),sessionToken:C(Q.awsSessionToken),region:C(Z.awsRegion),authentication:D,profile:q?C(Z.awsProfile):void 0,usePromptCache:Z.awsBedrockUsePromptCache,useCrossRegionInference:Z.awsUseCrossRegionInference,useGlobalInference:Z.awsUseGlobalInference,endpoint:C(Z.awsBedrockEndpoint),customModelBaseId:C(J==="plan"?Z.planModeAwsBedrockCustomModelBaseId:Z.actModeAwsBedrockCustomModelBaseId)}}if($==="vertex")K.gcp={projectId:C(Z.vertexProjectId),region:C(Z.vertexRegion)};if($===f3&&(Z.azureApiVersion||Z.azureIdentity!==void 0))K.azure={apiVersion:C(Z.azureApiVersion),useIdentity:Z.azureIdentity};if($==="sapaicore"){let D=Z.sapAiCoreUseOrchestrationMode??!0;K.sap={clientId:C(Q.sapAiCoreClientId),clientSecret:C(Q.sapAiCoreClientSecret),tokenUrl:C(Z.sapAiCoreTokenUrl),resourceGroup:C(Z.sapAiResourceGroup),deploymentId:D?void 0:C(J==="plan"?Z.planModeSapAiCoreDeploymentId:Z.actModeSapAiCoreDeploymentId),useOrchestrationMode:D}}if($==="oca"){K.oca={mode:Z.ocaMode};let D=C(Q.ocaRefreshToken);if(D)K.auth={...K.auth??{},refreshToken:D}}if($==="qwen")K.apiLine=Z.qwenApiLine;if($==="moonshot")K.apiLine=Z.moonshotApiLine;if($==="zai")K.apiLine=Z.zaiApiLine;if($==="minimax")K.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},F=C(H[$]),U=C(G[$]),_={provider:W,...F?{apiKey:F}:{},...Y?{model:Y}:{},...U?{baseUrl:U}:{},...V?{reasoning:V}:{},...B?{timeout:B}:{},...K},L=M6.safeParse(_);if(!L.success)return;return Object.keys(_).filter((D)=>D!=="provider").length>0?L.data:void 0}function o9($){return typeof $==="number"&&Number.isFinite($)&&$>0?$:void 0}function Uv($,Z,Q){if($!==Xv)return;if(!Z.baseUrl||!Z.model)return;let J=o9(Q?.contextWindow)??jv,W=o9(Q?.maxTokens),X=o9(Q?.inputPrice),j=o9(Q?.outputPrice),Y=o9(Q?.temperature),V=["streaming","tools"];if(Q?.supportsImages!==!1)V.push("images");if(Q?.supportsPromptCache===!0)V.push("prompt-cache");return{provider:{name:"OpenAI Compatible",baseUrl:Z.baseUrl,defaultModelId:Z.model},models:{[Z.model]:{id:Z.model,name:Z.model,contextWindow:J,maxInputTokens:J,capabilities:V,...W!==void 0?{maxTokens:W}:{},...X!==void 0?{inputPrice:X}:{},...j!==void 0?{outputPrice:j}:{},...Y!==void 0?{temperature:Y}:{}}}}}function Dv($,Z){let Q=new Set;for(let W of[$.actModeApiProvider,$.planModeApiProvider]){let X=C(W);if(X)Q.add(R3(X))}if(C(Z.apiKey))Q.add("anthropic");if(C(Z.openRouterApiKey))Q.add("openrouter");if(C(Z.openAiApiKey))Q.add(f3);if(C(Z.openAiNativeApiKey))Q.add("openai-native");if(C(Z["openai-codex-oauth-credentials"]))Q.add("openai-codex");if(C(Z.geminiApiKey))Q.add("gemini");if(C(Z.ollamaApiKey))Q.add("ollama");if(C(Z.deepSeekApiKey))Q.add("deepseek");if(C(Z.requestyApiKey))Q.add("requesty");if(C(Z.togetherApiKey))Q.add("together");if(C(Z.fireworksApiKey))Q.add("fireworks");if(C(Z.qwenApiKey))Q.add("qwen");if(C(Z.doubaoApiKey))Q.add("doubao");if(C(Z.mistralApiKey))Q.add("mistral");if(C(Z.liteLlmApiKey))Q.add("litellm");if(C(Z.asksageApiKey))Q.add("asksage");if(C(Z.xaiApiKey))Q.add("xai");if(C(Z.moonshotApiKey))Q.add("moonshot");if(C(Z.zaiApiKey))Q.add("zai");if(C(Z.huggingFaceApiKey))Q.add("huggingface");if(C(Z.nebiusApiKey))Q.add("nebius");if(C(Z.sambanovaApiKey))Q.add("sambanova");if(C(Z.cerebrasApiKey))Q.add("cerebras");if(C(Z.groqApiKey))Q.add("groq");if(C(Z.huaweiCloudMaasApiKey))Q.add("huawei-cloud-maas");if(C(Z.basetenApiKey))Q.add("baseten");if(C(Z.vercelAiGatewayApiKey))Q.add("vercel-ai-gateway");if(C(Z.difyApiKey))Q.add("dify");if(C(Z.minimaxApiKey))Q.add("minimax");if(C(Z.hicapApiKey))Q.add("hicap");if(C(Z.aihubmixApiKey))Q.add("aihubmix");if(C(Z.nousResearchApiKey))Q.add("nousResearch");if(C(Z.awsAccessKey)||C(Z.awsBedrockApiKey)||$.awsAuthentication!==void 0||$.awsUseProfile===!0||C($.awsProfile))Q.add("bedrock");if(C($.vertexProjectId)||C($.vertexRegion))Q.add("vertex");if(C(Z.clineApiKey))Q.add("cline");let J=EY(C(Z["cline:clineAccountId"]));if(J?.accessToken||J?.refreshToken||J?.accountId)Q.add("cline");if(C(Z.ocaApiKey))Q.add("oca");if(C(Z.sapAiCoreClientId)||C(Z.sapAiCoreClientSecret)||C($.sapAiCoreTokenUrl)||C($.sapAiCoreBaseUrl)||C($.sapAiResourceGroup)||$.sapAiCoreUseOrchestrationMode!==void 0)Q.add("sapaicore");return Q}function s9($){let Z=$.providerSettingsManager.read(),Q=Vv($);if(!Q)return{migrated:!1,providerCount:Object.keys(Z.providers).length,lastUsedProvider:Z.lastUsedProvider};let{globalState:J,secrets:W}=Q,X=J.mode==="plan"?"plan":"act",j=X==="plan"?"act":"plan",Y=C(X==="plan"?J.planModeApiProvider:J.actModeApiProvider),V=Y?R3(Y):void 0,B=C(X==="plan"?J.actModeApiProvider:J.planModeApiProvider),H=B?R3(B):void 0,K=Dv(J,W),G=Z2();G.providers={...Z.providers},G.lastUsedProvider=Z.lastUsedProvider;let F=new Date().toISOString(),U=0,_=RY(Qv($.providerSettingsManager.getFilePath()),"models.json"),L=Y4(_),O=0;for(let T of K){let z=MY(T);if(G.providers[z])continue;let A=T!==V&&T===H?j:X,R=Fv(T,J,W,A);if(!R)continue;G.providers[z]={settings:R,updatedAt:F,tokenSource:"migration"},U+=1;let N=Uv(z,R,A==="plan"?J.planModeOpenAiModelInfo:J.actModeOpenAiModelInfo);if(N&&!L.providers[z])L.providers[z]=N,O+=1}if(U===0&&O===0)return{migrated:!1,providerCount:Object.keys(Z.providers).length,lastUsedProvider:Z.lastUsedProvider};let D=C(X==="plan"?J.planModeApiProvider:J.actModeApiProvider),q=D?MY(D):void 0;if(G.lastUsedProvider=Z.lastUsedProvider??(q&&G.providers[q]?q:Object.keys(G.providers)[0]),$.providerSettingsManager.write(G),O>0)l9(_,L);return{migrated:U>0||O>0,providerCount:Object.keys(G.providers).length,lastUsedProvider:G.lastUsedProvider}}i7();C0();IZ();var $A={};w($A,{SessionVersioningService:()=>K2,SessionVersioningError:()=>d0});class d0 extends Error{code;constructor($,Z){super(Z);this.code=$;this.name="SessionVersioningError"}}function _v($){let Z=$.sessionId.trim();if(!Z)throw new d0("invalid_restore","sessionId is required");if(!$.restoreMessages&&!$.restoreWorkspace)throw new d0("invalid_restore","restore.messages or restore.workspace must be true");if($.restoreMessages&&$.requiresStart)throw new d0("invalid_restore","start is required when restore.messages is true");if(!Number.isInteger($.checkpointRunCount)||$.checkpointRunCount<1)throw new d0("invalid_restore","checkpointRunCount must be a positive integer");return Z}class K2{async restoreCheckpoint($){let Z=$.restore?.messages!==!1,Q=$.restore?.workspace!==!1,J=_v({sessionId:$.sessionId,restoreMessages:Z,restoreWorkspace:Q,requiresStart:$.start===void 0,checkpointRunCount:$.checkpointRunCount}),W=await $.getSession(J);if(!W)throw new d0("session_not_found",`Session ${J} not found`);let X=Z?await $.readMessages(J):void 0;if(Z&&X?.length===0)throw new d0("session_messages_not_found",`No messages found for session ${J}`);let j=Oj({session:W,messages:X,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd,restoreMessages:Z}),Y=b1({session:W,messages:X}),V,B=[],H,K;if(Z){let{startSession:O,getStartedSessionId:D,cleanupStartedSession:q}=$;if(!$.start||!O||!D||!q)throw new d0("invalid_restore","startSession, getStartedSessionId, and cleanupStartedSession are required when restore.messages is true");K={startSession:O,getStartedSessionId:D,cleanupStartedSession:q},V=E9(W,$.checkpointRunCount),B=$.restore?.omitCheckpointMessageFromSession?C9(X??[],$.checkpointRunCount):j.messages??[];let T={sourceSession:W,sourceMessages:X,sourceSnapshot:Y,plan:j,restoredCheckpointMetadata:V,initialMessages:B,restoreMessages:Z,restoreWorkspace:Q,checkpointRunCount:$.checkpointRunCount};H=$.buildStartInput?await $.buildStartInput(T,$.start):$.start}let G=$.applyWorkspaceCheckpoint??qj,F=$.beginWorkspaceRestoreTransaction??($.applyWorkspaceCheckpoint?void 0:Aj),U=Q&&F?await F(j.cwd):void 0,_=!1,L;try{if(Q)await G(j.cwd,j.checkpoint);if(!K)return await U?.commit(),_=!0,{checkpoint:j.checkpoint,sourceSnapshot:Y};let O=await K.startSession(H);L={result:O,cleanup:K.cleanupStartedSession};let D=K.getStartedSessionId(O);if(!D)throw new d0("invalid_restore","Restored session did not return a session id");await($.retainCheckpointRefs??yF)(j.cwd,D,V?.history??[]);let q=$.readRestoredSession?await $.readRestoredSession(D):void 0,T=q?b1({session:q,messages:B}):void 0;return await U?.commit(),_=!0,{sessionId:D,startResult:O,messages:j.messages,checkpoint:j.checkpoint,sourceSnapshot:Y,...T?{restoredSnapshot:T}:{}}}catch(O){let D=[];if(L)try{await L.cleanup(L.result)}catch(q){D.push(q)}if(U&&!_)try{await U.rollback()}catch(q){D.push(q)}if(D.length>0)throw AggregateError([O,...D],"Checkpoint restore failed and recovery did not complete");throw O}}}var ZA={};w(ZA,{FileTeamPersistenceStore:()=>M3});import{appendFileSync as Lv,existsSync as CY,mkdirSync as Av,readFileSync as Ov,renameSync as qv,unlinkSync as zv,writeFileSync as Tv}from"node:fs";import{join as wY}from"node:path";import{resolveTeamDataDir as Nv}from"@cline/shared/storage";function fv($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}class M3{dirPath;statePath;taskHistoryPath;teammateSpecs=new Map;constructor($){let Z=fv($.teamName),Q=$.baseDir?.trim()||Nv();this.dirPath=wY(Q,Z),this.statePath=wY(this.dirPath,"state.json"),this.taskHistoryPath=wY(this.dirPath,"task-history.jsonl")}loadState(){if(!CY(this.statePath))return;try{let $=Ov(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 O_(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`;Tv(Q,`${JSON.stringify(Z,null,2)}
764
- `,"utf8"),qv(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(),Lv(this.taskHistoryPath,`${JSON.stringify({ts:new Date().toISOString(),type:$.type,task:Z})}
765
- `,"utf8")}ensureDir(){if(!CY(this.dirPath))Av(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(CY(this.statePath))zv(this.statePath)}}var QA={};w(QA,{ChatViewStateSchema:()=>PY,ChatSummarySchema:()=>b3,ChatSessionStatusSchema:()=>C3,ChatSessionConfigSchema:()=>E3,ChatMessageSchema:()=>S3,ChatMessageRoleSchema:()=>w3,ChatMessageImageSchema:()=>P3});import{z as h}from"zod";var E3=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()}),C3=h.enum(["idle","starting","running","pending","stopping","completed","cancelled","failed","error"]),w3=h.enum(["user","assistant","tool","system","status","error"]),P3=h.object({id:h.string().min(1),mediaType:h.enum(["image/png","image/jpeg","image/gif","image/webp"]),data:h.string().min(1)}),S3=h.object({id:h.string().min(1),sessionId:h.string().nullable(),role:w3,content:h.string(),images:h.array(P3).optional(),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()}),b3=h.object({toolCalls:h.number().int().nonnegative(),tokensIn:h.number().int().nonnegative(),tokensOut:h.number().int().nonnegative()}),PY=h.object({sessionId:h.string().nullable(),status:C3,config:E3,messages:h.array(S3),rawTranscript:h.string(),error:h.string().nullable(),summary:b3});var JA={};w(JA,{CORE_BUILD_VERSION:()=>SY});var SY=g8;import{Agent as Em,createAgentRuntime as Cm}from"@cline/agents";var WA={};w(WA,{fetchClineRecommendedModels:()=>yY,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>y3});import{getClineEnvironmentConfig as Rv}from"@cline/shared";var Mv=5000,y3={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 Ev($){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 bY($){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 Cv($){if(!$||typeof $!=="object")return null;let Z=$,Q=Array.isArray(Z.recommended)?Z.recommended:[],J=Array.isArray(Z.free)?Z.free:[],W=Array.isArray(Z.clinePass)?Z.clinePass:[],X=Q.map(bY).filter((V)=>V!==null),j=J.map(bY).filter((V)=>V!==null),Y=W.map(bY).filter((V)=>V!==null);if(X.length===0&&j.length===0&&Y.length===0)return null;return{recommended:X,free:j,clinePass:Y}}function wv($){let Z=$.baseUrl?.trim();if(Z)return Z;let Q=Rv().apiBaseUrl;try{return($.providerSettingsManager??new v1).getProviderSettings("cline")?.baseUrl?.trim()||Q}catch{return Q}}async function Pv($,Z,Q){let J=new AbortController,W=setTimeout(()=>J.abort(),Q);try{return await $(Z,{signal:J.signal})}finally{clearTimeout(W)}}async function yY($={}){try{let Z=wv($),Q=$.fetchImpl??fetch,J=await Pv(Q,`${Z}/api/v1/ai/cline/recommended-models`,$.timeoutMs??Mv);if(!J.ok)throw Error(`HTTP ${J.status}`);let W=await J.json(),X=Cv(W);if(X)return X}catch{}return Ev(y3)}var XA={};w(XA,{loadLlmsConfigFromFile:()=>hY,defineLlmsConfig:()=>kY});import{readFile as Sv}from"node:fs/promises";import bv from"node:path";function kY($){return $}async function hY($){let Z=bv.resolve($),Q=await Sv(Z,"utf8"),J;try{J=JSON.parse(Q)}catch(W){let X=W instanceof Error?W.message:String(W);throw Error(`Failed to parse JSON config at "${Z}": ${X}`)}return yv(J,Z)}function yv($,Z){if(!$||typeof $!=="object")throw Error(`Invalid llms config in "${Z}": expected an object.`);let J=$.providers;if(!Array.isArray(J))throw Error(`Invalid llms config in "${Z}": "providers" must be an array.`);if(!J.length)throw Error(`Invalid llms config in "${Z}": "providers" cannot be empty.`);return $}var KA={};w(KA,{createLlmsSdk:()=>xY,DefaultLlmsSdk:()=>t9});import{BUILT_IN_PROVIDER_IDS as VA,createHandler as Iv,createHandlerAsync as xv,getProviderCollection as gv,hasProvider as BA,registerAsyncHandler as vv,registerHandler as mv,registerModel as cv,registerProvider as HA}from"@cline/llms";function jA($){return $?{...$}:{}}function kv($,Z){if($)return $;if(!Z)return;let Q=globalThis.process;if(!Q?.env)return;return Q.env[Z]}function hv($,Z){if(!Z.length)throw Error(`Provider "${$}" must include at least one model.`)}function YA($){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 IY{providers=new Map;register($){hv($.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??{},...jA($.defaults)}})}registerSelectionConfig($){this.register({id:$.id,models:$.models,defaultModel:$.defaultModel,defaults:{apiKey:kv($.apiKey,$.apiKeyEnv),routingProviderId:$.builtinProviderId,baseUrl:$.baseUrl,headers:$.headers,timeoutMs:$.timeoutMs,capabilities:$.capabilities,...jA($.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 t9{configuredProviders=new IY;constructor($){this.applyConfig($)}createHandler($){return Iv(this.configuredProviders.createHandlerConfig($))}async createHandlerAsync($){return xv(this.configuredProviders.createHandlerConfig($))}registerProvider($){if(HA($.collection),$.handlerFactory&&$.asyncHandlerFactory)throw Error(`Provider "${$.collection.provider.id}" cannot register both sync and async handlers.`);if($.handlerFactory)mv($.collection.provider.id,$.handlerFactory);if($.asyncHandlerFactory)vv($.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.`);HA({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($){cv($.providerId,$.modelId,$.info),this.configuredProviders.registerModel($.providerId,$.modelId)}getProviders(){return this.configuredProviders.list()}getBuiltInProviderIds(){return[...VA]}async getBuiltInProviders(){return(await Promise.all(VA.map((Z)=>gv(Z)))).filter((Z)=>Z!==void 0).map((Z)=>YA({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=BA(Z.id),J=this.configuredProviders.createHandlerConfig({providerId:Z.id,modelId:Z.defaultModel}).routingProviderId,W=typeof J==="string"&&BA(J);if(!Q&&!W)throw Error(`Provider "${Z.id}" is not known. Register it through customProviders/registerProvider, registerBuiltinProvider, or use a built-in provider ID.`)}}}function xY($){return new t9($)}WJ();async function uv(){return Promise.resolve().then(() => (i7(),u_))}function hm(){return new Date().toISOString()}var Im="cline",xm="cline-pass";function gm($){if(OA($)!=="providers.json")return;let Z=mY($);if(OA(Z)!=="settings")return;return mY(Z)}class v1{filePath;dataDir;constructor($={}){if(this.filePath=$.filePath??km(),this.dataDir=$.dataDir??gm(this.filePath),this.dataDir||!$.filePath)s9({providerSettingsManager:this,dataDir:this.dataDir});if(n9(this),r9(this.read()),vY(this.filePath))try{AA(this.filePath,384)}catch{}}getFilePath(){return this.filePath}read(){if(!vY(this.filePath))return Z2();try{let $=Pm(this.filePath,"utf8"),Z=JSON.parse($),Q=E6.safeParse(Z);if(Q.success){r9(Q.data);let J=Q.data.providers.cline?.settings?.auth;return t(`providers.read providers=[${Object.keys(Q.data.providers).join(",")}] lastUsed=${Q.data.lastUsedProvider??"none"} clineAuthPresent=${!!J?.accessToken} clineAccessTokenHash=${P0(J?.accessToken)} clineRefreshTokenHash=${P0(J?.refreshToken)}`),Q.data}}catch{}return Z2()}write($){let Z=E6.parse($),Q=mY(this.filePath);if(!vY(Q))wm(Q,{recursive:!0,mode:448});let J=`${this.filePath}.${process.pid}.tmp`;try{ym(J,`${JSON.stringify(Z,null,2)}
766
- `,{encoding:"utf8",mode:384}),Sm(J,this.filePath)}catch(W){throw bm(J,{force:!0}),W}try{AA(this.filePath,384)}catch{}r9(Z)}saveProviderSettings($,Z={}){let Q=M6.parse($),J=this.read(),W=Q.provider,X=Z.setLastUsed!==!1,j=J.providers[W],Y=Z.tokenSource??j?.tokenSource??"manual",V={...J,providers:{...J.providers,[W]:{settings:Q,updatedAt:hm(),tokenSource:Y}},lastUsedProvider:X?W:J.lastUsedProvider};this.write(V);let B=J.providers.cline?.settings?.auth,H=Q.provider==="cline"?Q.auth:V.providers.cline?.settings?.auth,K=!!B?.accessToken&&!H?.accessToken;return t(`providers.save providerId=${W} tokenSource=${Y} clineAuthWasPresent=${!!B?.accessToken} clineAuthIsPresent=${!!H?.accessToken} authDropped=${K}`),V}resolveProviderSettings($,Z){let Q=$.providers[Z]?.settings,W=U0(Z)?.storageProviderId;if(!W||W===Z)return Q;let X=$.providers[W]?.settings;if(!X)return Q;return M6.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===xm&&Z.isClinePassEnabled===!1)return Im;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 J1(Q,Z)}getLastUsedProviderConfig($={}){let Z=this.getLastUsedProviderSettings($);if(!Z)return;return J1(Z,$)}async refreshCatalog(){try{await f6({})}catch{}}}C0();O2();import{mkdir as vm,writeFile as mm}from"node:fs/promises";import{join as cm}from"node:path";import{AGENTS_RULES_FILE_NAME as um,resolveChatWorkspacePath as dm}from"@cline/shared/storage";var pm=`# Cline chat workspace
760
+ `)}}async function sj($,Z={}){if($.type==="mcp"){let Q=v9($);if(Z.deleteMcpServer)await Z.deleteMcpServer(Q);else W3($,Z);return{id:$.id,type:$.type,status:"uninstalled",message:`Uninstalled ${$.name??Q??$.id}.`}}if($.type==="skill")return j3($,Z);if($.type==="plugin")return Y3($,Z);throw Error(`Unsupported marketplace entry type: ${$.type}`)}var bL={};w(bL,{parsePluginSource:()=>_3,isOfficialPluginSlug:()=>D3,installPlugin:()=>JY,collectPluginMcpOAuthCandidates:()=>L3});import{spawn as Cx}from"node:child_process";import{createHash as wx}from"node:crypto";import{existsSync as m1,mkdirSync as $Y,readdirSync as Px,readFileSync as Sx,renameSync as V3,rmSync as K3,statSync as ZY}from"node:fs";import{cp as ej,mkdir as ML,writeFile as G3}from"node:fs/promises";import{homedir as OL}from"node:os";import{basename as z$,dirname as qL,extname as bx,join as e,relative as EL,resolve as K2,sep as yx}from"node:path";import{isPluginModulePath as H3,resolveClineDir as kx,resolvePluginModuleEntries as hx}from"@cline/shared/storage";var X4="_installed",F3="package",Ix="https://github.com/cline/plugins.git",zL=30000,B3=10485760,TL="@cline/",xx=["dependencies","devDependencies","optionalDependencies","peerDependencies"],gx={name:"cline-installed-plugin",private:!0,cline:{plugins:[]}};function U3($){if($==="~")return OL();if($.startsWith("~/"))return e(OL(),$.slice(2));return $}function CL($){return $.split(yx).join("/")}function T8($){return wx("sha256").update($).digest("hex").slice(0,12)}function vx($){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,J=$.startsWith("@")?$.slice(1):$;for(let X of J.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 vx(Z)||"plugin"}function D3($){return/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test($.trim())}function mx($){return $?.trim()||Ix}function NL($){let Q=$.trim().match(/^(@?[^@/]+(?:\/[^@/]+)?)(?:@.+)?$/);if(!Q?.[1])throw Error(`Invalid npm plugin source: npm:${$}`);return{name:Q[1]}}function cx($){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 ux($){let Z=$.match(/^git@([^:]+):(.+)$/);if(Z){let j=Z[2]??"",Y=j.indexOf("@");if(Y<0)return{repo:$};return{repo:`git@${Z[1]}:${j.slice(0,Y)}`,ref:j.slice(Y+1)||void 0}}if($.includes("://"))try{let j=new URL($),Y=j.pathname.replace(/^\/+/,""),V=Y.indexOf("@");if(V<0)return{repo:$};return j.pathname=`/${Y.slice(0,V)}`,{repo:j.toString().replace(/\/$/,""),ref:Y.slice(V+1)||void 0}}catch{return{repo:$}}let Q=$.indexOf("/");if(Q<0)return{repo:$};let J=$.slice(0,Q),W=$.slice(Q+1),X=W.indexOf("@");if(X<0)return{repo:$};return{repo:`${J}/${W.slice(0,X)}`,ref:W.slice(X+1)||void 0}}function dx($){try{return decodeURIComponent($)}catch{return $}}function px($){return z$(dx($))||"plugin"}function lx($){let Z=$.split("/").filter(Boolean);return Z.length>=5&&(Z[2]==="blob"||Z[2]==="raw")}function fL($){if(!/^https?:\/\//i.test($))return null;let Z;try{Z=new URL($)}catch{return null}let Q=Z.hostname.toLowerCase(),J=px(Z.pathname),W=H3(J),X=(Q==="github.com"||Q==="www.github.com")&&lx(Z.pathname);if(Z.protocol!=="https:"){if(X||Q==="raw.githubusercontent.com"||W)throw Error(`Remote plugin file URLs must use https: ${$}`);return null}if(Q==="github.com"||Q==="www.github.com"){let j=Z.pathname.split("/").filter(Boolean);if(!X)return null;if(!W)throw Error(`Remote plugin file must be .js or .ts: ${$}`);return{type:"remote",url:`https://raw.githubusercontent.com/${[j[0],j[1],...j.slice(3)].join("/")}`,filename:J}}if(Q==="raw.githubusercontent.com"){if(!W)throw Error(`Remote plugin file must be .js or .ts: ${$}`);return{type:"remote",url:Z.toString(),filename:J}}if(!W)return null;return{type:"remote",url:Z.toString(),filename:J}}function RL($,Z={}){let Q=$.trim(),J=Q.startsWith("git:")&&!Q.startsWith("git://"),W=J?Q.slice(4).trim():Q;if(!Z.force&&!J&&!/^(https?|ssh|git):\/\//i.test(W))return null;let{repo:X,ref:j}=ux(W),Y="",V="";if(X.startsWith("git@")){let K=X.match(/^git@([^:]+):(.+)$/);Y=K?.[1]??"",V=K?.[2]??""}else if(/^(https?|ssh|git):\/\//i.test(X)){let K=new URL(X);Y=K.hostname,V=K.pathname.replace(/^\/+/,"")}else{let K=X.indexOf("/");if(K<0)return null;Y=X.slice(0,K),V=X.slice(K+1)}let B=V.replace(/\.git$/,"").replace(/^\/+/,"");if(!Y||!B||B.split("/").length<2)return null;return{type:"git",repo:X.startsWith("git@")||/^(https?|ssh|git):\/\//i.test(X)?X:`https://${X}`,ref:j,host:Y,path:B}}function _3($,Z){let Q=$.trim();if(!Q)throw Error("plugin install requires a source");if(Z==="npm"){let j=Q.startsWith("npm:")?Q.slice(4).trim():Q,{name:Y}=NL(j);return{type:"npm",spec:j,name:Y}}if(Z==="git"){let j=RL(Q,{force:!0});if(!j)throw Error(`Invalid git plugin source: ${$}`);return j}if(Z==="local")return{type:"local",path:$};if(Z==="remote"){let j=fL(Q);if(!j)throw Error(`Invalid remote plugin source: ${$}`);return j}if(Q.startsWith("npm:")){let j=Q.slice(4).trim(),{name:Y}=NL(j);return{type:"npm",spec:j,name:Y}}if(Q.startsWith(".")||Q.startsWith("/")||Q==="~"||Q.startsWith("~/")||/^[A-Za-z]:[\\/]|^\\\\/.test(Q))return{type:"local",path:$};let W=fL(Q);if(W)return W;let X=RL(Q);if(X)return X;if(D3(Q))return{type:"official",slug:Q};if(cx(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 ix($){return $?e($,".cline","plugins"):e(kx(),"plugins")}function rx($,Z,Q){if(Z.type==="npm")return e($,X4,"npm",`${q$(Z.name)}-${T8(Q)}`);if(Z.type==="git")return e($,X4,"git",q$(Z.host),`${q$(Z.path)}-${T8(Q)}`);if(Z.type==="remote")return e($,X4,"remote",`${q$(Z.filename)}-${T8(Q)}`);if(Z.type==="official")return e($,X4,"official",`${q$(Z.slug)}-${T8(Q)}`);return e($,X4,"local",`${q$(z$(U3(Z.path)))}-${T8(Q)}`)}function nx($,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:${K2(Z,U3($.path))}`}function ax($,Z){if($.type==="npm")return $.name;if($.type==="git")return q$(z$($.path));if($.type==="remote")return q$(z$($.filename,bx($.filename)));if($.type==="official")return $.slug;return q$(z$(K2(Z,U3($.path))))}async function j4($,Z,Q={}){await new Promise((J,W)=>{let X=Cx($,Z,{cwd:Q.cwd,stdio:["ignore","ignore","pipe"],env:process.env,windowsHide:!0}),j="";X.stderr.on("data",(Y)=>{j+=String(Y)}),X.on("error",W),X.on("close",(Y)=>{if(Y===0){J();return}let V=j.trim();W(Error(`${$} ${Z.join(" ")} failed with exit code ${Y}${V?`: ${V}`:""}`))})})}function wL($){let Z=e($,"package.json");if(!m1(Z))return null;try{return JSON.parse(Sx(Z,"utf8"))}catch{return null}}function ox($){let Z=$?.cline?.plugins;if(!Array.isArray(Z))return[];return Z.flatMap((Q)=>{if(typeof Q==="string")return[Q];return Q.paths??[]})}async function sx($){let Z=e($,"package.json"),Q=wL($);if(!Q)return;let J=!1;for(let W of xx){let X=Q[W];if(!X||typeof X!=="object")continue;for(let j of Object.keys(X)){if(!j.startsWith(TL))continue;delete X[j],delete Q.peerDependenciesMeta?.[j],J=!0}if(Object.keys(X).length===0)delete Q[W]}if(Q.peerDependenciesMeta){for(let W of Object.keys(Q.peerDependenciesMeta)){if(!W.startsWith(TL))continue;delete Q.peerDependenciesMeta[W],J=!0}if(Object.keys(Q.peerDependenciesMeta).length===0)delete Q.peerDependenciesMeta}if(!J)return;await G3(Z,`${JSON.stringify(Q,null,2)}
761
+ `,"utf8")}function tx($,Z){let Q=e($,"node_modules","@cline");if(!m1(Q))return;for(let J of SL(Q)){if(`@cline/${J.name}`===Z)continue;K3(e(Q,J.name),{recursive:!0,force:!0})}}function PL($){let Z=ox(wL($)).map((X)=>K2($,X)).filter((X)=>m1(X)&&ZY(X).isFile()&&H3(X));if(Z.length>0)return Z;let Q=hx($);if(Q?.length)return Q;let J=[],W=[$];while(W.length>0){let X=W.pop();if(!X)continue;for(let j of SL(X)){let Y=e(X,j.name);if(j.name==="node_modules"||j.name===".git")continue;if(j.isDirectory()){W.push(Y);continue}if(j.isFile()&&!j.name.startsWith(".")&&H3(Y))J.push(Y)}}return J.sort((X,j)=>X.localeCompare(j))}function SL($){try{return Px($,{withFileTypes:!0})}catch{return[]}}function ex($,Z){let Q=PL(Z);if(Q.length===0)throw Error(`No plugin entry files found in ${Z}`);return Q.map((J)=>`./${CL(EL($,J))}`)}async function $g($,Z,Q){let J=ex($,Z);return await G3(e($,"package.json"),JSON.stringify({...gx,name:Q,cline:{plugins:[{paths:J}]}},null,2),"utf8"),J}async function Zg($,Z,Q){let J=e(Z,F3);return await ML(J,{recursive:!0}),await G3(e(J,"package.json"),JSON.stringify({name:"cline-plugin-install",private:!0},null,2),"utf8"),await j4(Q,["install",$.spec,"--prefix",J,"--omit=dev","--omit=peer","--legacy-peer-deps","--no-audit","--no-fund","--package-lock=false"]),tx(J,$.name),e(J,"node_modules",$.name)}async function QY($,Z){if(!m1(e($,"package.json")))return;await sx($),await j4(Z,["install","--omit=dev","--omit=peer","--legacy-peer-deps","--no-audit","--no-fund","--package-lock=false"],{cwd:$})}async function Qg($,Z,Q){if($.ref?.startsWith("-"))throw Error(`Invalid git ref "${$.ref}".`);let J=e(Z,F3),W=["clone","--filter=blob:none"];if($.ref)W.push("--branch",$.ref);W.push("--",$.repo,J);try{await j4("git",W)}catch(X){if(!$.ref)throw X;await j4("git",["clone","--filter=blob:none","--",$.repo,J]),await j4("git",["checkout","--detach",$.ref],{cwd:J})}return await QY(J,Q),J}async function Jg($,Z,Q,J){let W=e(Z,"repo");await j4("git",["clone","--filter=blob:none","--depth","1","--",J,W]);let X=e(W,"plugins",$.slug);if(!m1(X)||!ZY(X).isDirectory())throw Error(`Official Cline plugin "${$.slug}" was not found at plugins/${$.slug} in ${J}`);let j=e(Z,F3);return await ej(X,j,{recursive:!0,filter:(Y)=>{let V=z$(Y);return V!==".git"&&V!=="node_modules"}}),K3(W,{recursive:!0,force:!0}),await QY(j,Q),j}function tj($){return Error(`Remote plugin file from ${$} exceeds the ${B3} byte limit`)}function Wg($){let Z=$.headers.get("content-length");if(!Z)return;let Q=Number(Z);if(!Number.isFinite(Q)||Q<0)return;return Q}async function Xg($,Z){let Q=Wg($);if(Q!==void 0&&Q>B3)throw tj(Z);if(!$.body){let j=Buffer.from(await $.text(),"utf8");if(j.byteLength>B3)throw tj(Z);return j}let J=$.body.getReader(),W=[],X=0;try{while(!0){let{done:j,value:Y}=await J.read();if(j)break;let V=Buffer.from(Y);if(X+=V.byteLength,X>B3)throw await J.cancel().catch(()=>{return}),tj(Z);W.push(V)}return Buffer.concat(W,X)}finally{J.releaseLock()}}async function jg($,Z){let Q=new AbortController,J=setTimeout(()=>{Q.abort()},zL);try{let W=await fetch($.url,{signal:Q.signal});if(!W.ok){let j=W.statusText?` ${W.statusText}`:"";throw Error(`Failed to download plugin file from ${$.url}: ${W.status}${j}`)}let X=await Xg(W,$.url);return $Y(Z,{recursive:!0}),await G3(e(Z,$.filename),X),Z}catch(W){if(W instanceof Error&&W.name==="AbortError")throw Error(`Timed out downloading plugin file from ${$.url} after ${zL}ms`);throw W}finally{clearTimeout(J)}}async function Yg($,Z,Q,J){let W=K2(Q,U3($.path));if(!m1(W))throw Error(`Plugin source path does not exist: ${W}`);let X=ZY(W);if(X.isFile()){if(!H3(W))throw Error(`Plugin file must be .js or .ts: ${W}`);$Y(Z,{recursive:!0});let Y=e(Z,z$(W));return await ej(W,Y),Z}if(!X.isDirectory())throw Error(`Plugin source must be a file or directory: ${W}`);let j=e(Z,F3);return await ej(W,j,{recursive:!0,filter:(Y)=>{let V=z$(Y);return V!==".git"&&V!=="node_modules"}}),await QY(j,J),j}function Vg($,Z){if(m1($)&&!Z)throw Error(`Plugin is already installed at ${$}. Use --force to replace it.`)}function Bg($,Z,Q){if($Y(qL(Z),{recursive:!0}),!m1(Z)){V3($,Z);return}if(!Q)throw Error(`Plugin is already installed at ${Z}. Use --force to replace it.`);let J=e(qL(Z),`.replace-${z$(Z)}-${Date.now()}-${process.pid}-${T8(`${Z}:${Math.random()}`)}`);V3(Z,J);try{V3($,Z)}catch(W){if(!m1(Z)&&m1(J))V3(J,Z);throw W}try{K3(J,{recursive:!0,force:!0})}catch{}}function Hg($){let Z=$.transport;if(Z.type==="stdio")return!1;return Z.headers!==void 0&&Object.keys(Z.headers).length>0}function Kg($){let Z=$.oauth?.tokens?.access_token;return typeof Z==="string"&&Z.trim().length>0}function Gg($){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 L3($){let Z=new Set($.pluginPaths.map((W)=>K2(W)));if(Z.size===0)return[];let Q;try{Q=W1({filePath:$.settingsPath??W0()})}catch{return[]}let J=[];for(let W of Q){let X=Gg(W);if(!X||!Z.has(K2(X.pluginPath)))continue;let j=W.transport.type;if(j==="stdio")continue;if(Hg(W)||Kg(W))continue;J.push({name:W.name,pluginName:X.pluginName,pluginPath:X.pluginPath,transportType:j,lastError:W.oauth?.lastError})}return J.sort((W,X)=>W.name.localeCompare(X.name))}async function JY($){let Z=$.source.trim(),Q=_3(Z,$.sourceType),J=$.cwd?.trim(),W=J?K2(J):process.cwd(),X=ix(J?W:void 0),j=mx($.officialPluginsRepo),Y=nx(Q,W,j),V=rx(X,Q,Y),B=ax(Q,W),H=e(X,X4,".tmp"),K=e(H,`${Date.now()}-${process.pid}-${T8(`${Z}:${Math.random()}`)}`),G=$.npmCommand??(process.env.CLINE_NPM_COMMAND?.trim()||"npm"),F=$.force===!0;Vg(V,F),await ML(H,{recursive:!0});let U;try{if(Q.type==="npm")U=await Zg(Q,K,G);else if(Q.type==="git")U=await Qg(Q,K,G);else if(Q.type==="official")U=await Jg(Q,K,G,j);else if(Q.type==="remote")U=await jg(Q,K);else U=await Yg(Q,K,W,G);let _=(Q.type==="local"||Q.type==="remote")&&U===K?PL(K).map((D)=>`./${CL(EL(K,D))}`):await $g(K,U,B);if(_.length===0)throw Error(`No plugin entry files found for ${Z}`);Bg(K,V,F);let L={source:Z,installPath:V,entryPaths:_.map((D)=>K2(V,D)),mcpSyncFailures:[],mcpOAuthCandidates:[]},O=await h9({pluginPaths:L.entryPaths,cwd:W,workspacePath:W});return L.mcpSyncFailures=O.failures,L.mcpOAuthCandidates=L3({pluginPaths:L.entryPaths}),L}catch(_){throw K3(K,{recursive:!0,force:!0}),_}}var uL={};w(uL,{writeModelsFileSync:()=>l9,writeModelsFile:()=>i9,toProviderModel:()=>BY,syncStoredProviderRegistration:()=>HY,resolveModelsRegistryPath:()=>c1,registerProviderSettingsProvider:()=>cL,registerCustomProvider:()=>f8,registerConfiguredProvidersFromSettings:()=>r9,readModelsFileSync:()=>Y4,readModelsFile:()=>N8,parseModelsFile:()=>VY,ensureCustomProvidersLoadedSync:()=>n9,ensureCustomProvidersLoaded:()=>a9,emptyModelsFile:()=>p9,StoredProviderMetadataSchema:()=>kL,StoredProviderEntrySchema:()=>jY,StoredModelsFileSchema:()=>YY,StoredModelEntrySchema:()=>yL});import{existsSync as Fg,mkdirSync as Ug,readFileSync as Dg,renameSync as _g,rmSync as Lg,writeFileSync as Ag}from"node:fs";import{mkdir as Og,readFile as qg,rename as zg,rm as Tg,writeFile as Ng}from"node:fs/promises";import{dirname as XY,join as fg}from"node:path";import*as A0 from"@cline/llms";import{ApiFormatSchema as Rg,ModelCapabilitySchema as Mg,ProviderCapabilitySchema as Eg,ProviderClientSchema as Cg,ProviderProtocolSchema as wg}from"@cline/shared";import{z as $0}from"zod";var WY=$0.number().finite().positive().optional().catch(void 0),d9=$0.number().finite().nonnegative().optional().catch(void 0),yL=$0.object({id:$0.string().optional(),name:$0.string().optional(),maxTokens:WY,contextWindow:WY,maxInputTokens:WY,capabilities:$0.array(Mg).optional(),supportsVision:$0.boolean().optional(),supportsAttachments:$0.boolean().optional(),supportsReasoning:$0.boolean().optional(),inputPrice:d9,outputPrice:d9,cacheReadsPrice:d9,cacheWritesPrice:d9,temperature:d9,apiFormat:Rg.optional()}).passthrough(),kL=$0.object({name:$0.string(),baseUrl:$0.string(),defaultModelId:$0.string().optional(),protocol:wg.optional(),client:Cg.optional(),capabilities:$0.array(Eg).optional(),modelsSourceUrl:$0.string().optional()}).passthrough(),jY=$0.object({provider:kL.optional(),models:$0.record($0.string(),yL).optional()}).passthrough(),YY=$0.object({version:$0.literal(1),providers:$0.record($0.string(),jY)}),Pg=$0.object({version:$0.literal(1),providers:$0.record($0.string(),$0.unknown())}),A3=new Set;function hL($){return $.split(/[-_]/).filter(Boolean).map((Z)=>Z.charAt(0).toUpperCase()+Z.slice(1)).join(" ")}function c1($){return fg(XY($.getFilePath()),"models.json")}function p9(){return{version:1,providers:{}}}function VY($){let Z=Pg.safeParse($);if(!Z.success)return t("models.json content is not a valid models file envelope; starting from an empty registry"),p9();let Q={};for(let[J,W]of Object.entries(Z.data.providers)){let X=jY.safeParse(W);if(X.success)Q[J]=X.data;else t(`models.json: dropping invalid entry for provider=${J}`)}return{version:1,providers:Q}}function Y4($){if(!Fg($))return p9();try{let Z=Dg($,"utf8");return VY(JSON.parse(Z))}catch{t(`models.json at ${$} exists but is unreadable or invalid JSON; treating as an empty registry`)}return p9()}async function N8($){try{let Z=await qg($,"utf8");return VY(JSON.parse(Z))}catch(Z){if(Z?.code!=="ENOENT")t(`models.json at ${$} exists but is unreadable or invalid JSON; treating as an empty registry`)}return p9()}function l9($,Z){Ug(XY($),{recursive:!0});let Q=YY.parse(Z),J=`${$}.${process.pid}.tmp`;try{Ag(J,`${JSON.stringify(Q,null,2)}
762
+ `,"utf8"),_g(J,$)}catch(W){throw Lg(J,{force:!0}),W}}async function i9($,Z){await Og(XY($),{recursive:!0});let Q=YY.parse(Z),J=`${$}.${process.pid}.tmp`;try{await Ng(J,`${JSON.stringify(Q,null,2)}
763
+ `,"utf8"),await zg(J,$)}catch(W){throw await Tg(J,{force:!0}).catch(()=>{}),W}}function BY($,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 IL($){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 xL($){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 Sg($){return $!=null&&typeof $.name==="string"&&typeof $.baseUrl==="string"}function gL($,Z){return $??Z??"openai-chat"}function vL($,Z,Q){return $??Q??(Z==="openai-responses"?"openai":"openai-compatible")}function mL($,Z,Q){let J=new Set(Z?.capabilities??Q??[]);if(Z?.supportsVision!==void 0)if(Z.supportsVision)J.add("images");else J.delete("images");if(Z?.supportsAttachments!==void 0)if(Z.supportsAttachments)J.add("files");else J.delete("files");if(Z?.supportsReasoning!==void 0)if(Z.supportsReasoning)J.add("reasoning");else J.delete("reasoning");let W=Z?.apiFormat,X=Z?.inputPrice!==void 0||Z?.outputPrice!==void 0||Z?.cacheReadsPrice!==void 0||Z?.cacheWritesPrice!==void 0;return{id:$,name:Z?.name??$,...Z?.maxTokens!==void 0?{maxTokens:Z.maxTokens}:{},...Z?.contextWindow!==void 0?{contextWindow:Z.contextWindow}:{},...Z?.maxInputTokens!==void 0?{maxInputTokens:Z.maxInputTokens}:{},...J.size>0?{capabilities:[...J]}:{},...Z?.temperature!==void 0?{temperature:Z.temperature}:{},...W!==void 0?{apiFormat:W}:{},...X?{pricing:{...Z?.inputPrice!==void 0?{input:Z.inputPrice}:{},...Z?.outputPrice!==void 0?{output:Z.outputPrice}:{},...Z?.cacheReadsPrice!==void 0?{cacheRead:Z.cacheReadsPrice}:{},...Z?.cacheWritesPrice!==void 0?{cacheWrite:Z.cacheWritesPrice}:{}}}:{}}}function bg($,Z){for(let[Q,J]of Object.entries(Z??{})){let W=J.id?.trim()||Q.trim();if(!W)continue;A0.registerModel($,W,mL(W,J))}}function yg($,Z,Q){return{...Z??{},id:$,name:Z?.name??$,capabilities:Z?.capabilities??Q}}function kg($){return Object.assign({},...A0.resolveProviderModelCatalogKeys($).map((Q)=>A0.getGeneratedModelsForProvider(Q)))}function cL($){let Z=$.provider.trim();if(!Z||A0.isBuiltInProviderId(Z))return;let Q=$.baseUrl?.trim();if(!Q)return;let J=A0.MODEL_COLLECTIONS_BY_PROVIDER_ID[Z],W=kg(Z),X=xL($.capabilities),j=X.length>0?X:void 0,Y=$.model?.trim(),V={...W,...J?.models??{}};if(Y)V[Y]=yg(Y,V[Y],j);let B=Object.keys(V).filter(Boolean),H=Y||B[0];if(!H)return;let K=gL($.protocol,J?.provider.protocol),G=vL($.client,K,J?.provider.client);A0.registerProvider({provider:{id:Z,name:J?.provider.name??hL(Z),description:J?.provider.description,protocol:K,client:G,baseUrl:Q,modelsSourceUrl:J?.provider.modelsSourceUrl,defaultModelId:H,capabilities:IL($.capabilities)??J?.provider.capabilities,source:"file"},models:V})}function r9($){for(let Z of Object.values($.providers))cL(Z.settings)}function f8($,Z){let Q=Z.models??{};if(!Sg(Z.provider)){bg($,Q);return}let J=xL(Z.provider.capabilities),W=Object.entries(Q).map(([B,H])=>({id:H.id?.trim()||B.trim(),model:H})).filter(({id:B})=>B.length>0),X=Z.provider.defaultModelId?.trim()||W[0]?.id||"default",j=gL(Z.provider.protocol,void 0),Y=vL(Z.provider.client,j,void 0),V=Object.fromEntries(W.map(({id:B,model:H})=>[B,{...mL(B,H,J.length>0?J:void 0),status:"active"}]));A0.registerProvider({provider:{id:$,name:Z.provider.name.trim()||hL($),protocol:j,client:Y,baseUrl:Z.provider.baseUrl,modelsSourceUrl:Z.provider.modelsSourceUrl,defaultModelId:X,capabilities:IL(Z.provider.capabilities),source:"file"},models:V})}function HY($,Z,Q){let J=Q?.models??{},W=new Set;for(let[Y,V]of Object.entries(Z?.models??{})){if(Object.hasOwn(J,Y))continue;let B=V.id?.trim()||Y.trim();if(B)W.add(B),A0.unregisterModel($,B)}if(!Q)return;let X=A0.getProviderCollectionSync($);f8($,Q);let j=A0.getProviderCollectionSync($);if(X&&j&&j!==X){let Y=Object.fromEntries(Object.entries(X.models).filter(([V])=>!W.has(V)));A0.registerProvider({...j,models:{...Y,...j.models}})}}function n9($){let Z=c1($);if(A3.has(Z))return;let Q=Y4(Z);for(let[J,W]of Object.entries(Q.providers))f8(J,W);A3.add(Z)}async function a9($){let Z=c1($);if(A3.has(Z))return;let Q=await N8(Z);for(let[J,W]of Object.entries(Q.providers))f8(J,W);A3.add(Z)}var sL={};w(sL,{updateLocalProvider:()=>z3,saveLocalProviderSettings:()=>LY,saveLocalProviderOAuthCredentials:()=>zY,resolveLocalClineAuthToken:()=>NY,refreshProviderModelsFromSource:()=>AY,normalizeOAuthProvider:()=>OY,markLocalProviderEnabled:()=>UY,loginLocalProvider:()=>qY,loginAndSaveLocalProviderOAuthCredentials:()=>TY,listLocalProviders:()=>DY,getLocalProviderModels:()=>_Y,ensureCustomProvidersLoaded:()=>a9,deleteLocalProvider:()=>T3,addLocalProvider:()=>FY});import*as u0 from"@cline/llms";var pL="cline-pass";function hg($){return $.apiKey??$.auth?.apiKey}function Ig($){return($.auth?.accessToken?.trim()??"").length>0}function lL($){return $.split(/[-_]/).filter(Boolean).map((Z)=>Z.charAt(0).toUpperCase()+Z.slice(1)).join(" ")}function xg($){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 gg($){let Z=["#c4956a","#6b8aad","#e8963a","#5b9bd5","#6bbd7b","#9b7dd4","#d07f68","#57a6a1"],Q=0;for(let J of $)Q=Q*31+J.charCodeAt(0)>>>0;return Z[Q%Z.length]}function iL($){return Object.entries($).sort(([Z],[Q])=>Z.localeCompare(Q)).map(([Z,Q])=>BY(Z,Q))}async function vg($,Z){let Q=await u0.getModelsForProvider($),J=$===pL;if(!Z&&!J)return Q;let W=await x5($,{loadLatestOnInit:J,loadPrivateOnAuth:!0,failOnError:!1},Z);if($==="litellm"&&W?.knownModels)return W.knownModels;if(J&&W?.knownModels)return W.knownModels;return W?.knownModels?{...Q,...W.knownModels}:Q}function KY($){return[...new Set(($??[]).map((Z)=>Z.trim()).filter(Boolean))]}function mg($){if(!$?.length)return;return[...new Set($)]}function cg($,Z){return mg([...$??[],...Z??[]])}function ug($){let Z=$?.popularRank;return typeof Z==="number"&&Number.isFinite(Z)?Z:Number.MAX_SAFE_INTEGER}function dg($){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 pg($){let Z=$?.configFields;if(!Array.isArray(Z))return;return Z.filter(dg)}var O3={path:"apiKey",label:"API Key",type:"password",placeholder:"Enter API key...",description:"API key issued by the provider.",secret:!0},dL={path:"baseUrl",label:"Base URL",type:"url",placeholder:"https://...",description:"Base endpoint used for provider requests."};function lg($){if(!$)return[O3];if($.source!=="system")return $.baseUrl?[O3,dL]:[O3];let Z=[];if($.env?.length)Z.push(O3);if($.baseUrl)Z.push(dL);return Z}function ig($,Z){return Z.split(".").reduce((Q,J)=>{if(!Q||typeof Q!=="object")return;return Q[J]},$)}function rg($){if(typeof $==="string"||typeof $==="number"||typeof $==="boolean"||$===null)return $;return}function ng($,Z,Q){if(!$?.length)return;let J={};for(let W of $){let j=rg(W.path==="baseUrl"&&Z?.baseUrl===void 0?Q?.baseUrl:ig(Z,W.path))??W.defaultValue;if(j!==void 0)J[W.path]=j}return J}function rL($){let Z=Object.entries($??{}).filter(([Q])=>Q.trim().length>0);return Z.length>0?Object.fromEntries(Z):void 0}function GY($,Z){let Q=Z?.includes("vision")??!1,J=Z?.includes("reasoning")??!1;return Object.fromEntries($.map((W)=>[W,{id:W,name:W,supportsVision:Q,supportsAttachments:Q,supportsReasoning:J}]))}async function nL($){if(!$.shouldRecompute)return $.fallbackModelIds??[];let Z=$.modelsSourceUrl?await uQ($.modelsSourceUrl,$.providerId):[];return[...new Set([...$.explicitModels??[],...Z])]}function aL($,Z){let Q=$.read(),J=!1;if(Q.providers[Z])delete Q.providers[Z],J=!0;if(Q.lastUsedProvider===Z)delete Q.lastUsedProvider,J=!0;if(J)$.write(Q);u0.unregisterProvider(Z)}async function FY($,Z){let Q=Z.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let J=Z.baseUrl.trim(),W=Z.apiKey?.trim()??"";if(!J&&!W){let U=c1($);if((await N8(U)).providers[Q]){let L=await T3($,{providerId:Q});return{providerId:Q,settingsPath:L.settingsPath,modelsPath:L.modelsPath,modelsCount:0}}return aL($,Q),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:U,modelsCount:0}}if(u0.hasProvider(Q))throw Error(`provider "${Q}" already exists`);let X=Z.name.trim();if(!X)throw Error("name is required");if(!J)throw Error("baseUrl is required");let j=KY(Z.models),Y=Z.modelsSourceUrl?.trim(),V=await nL({providerId:Q,explicitModels:j,modelsSourceUrl:Y,shouldRecompute:!0});if(V.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let B=Z.defaultModelId?.trim()&&V.includes(Z.defaultModelId.trim())?Z.defaultModelId.trim():V[0],H=Z.capabilities?.length?[...new Set(Z.capabilities)]:void 0,K=rL(Z.headers);$.saveProviderSettings({provider:Q,apiKey:W||void 0,baseUrl:J,headers:K,timeout:Z.timeoutMs,model:B,protocol:Z.protocol,client:Z.client},{setLastUsed:!1});let G=c1($),F=await N8(G);return F.providers[Q]={provider:{name:X,baseUrl:J,defaultModelId:B,protocol:Z.protocol,client:Z.client,capabilities:H,modelsSourceUrl:Y},models:GY(V,H)},await i9(G,F),f8(Q,F.providers[Q]),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:G,modelsCount:V.length}}async function z3($,Z){let Q=Z.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let J=c1($),W=await N8(J),X=W.providers[Q];if(!X){let T=$.getProviderSettings(Q);if(!T)throw Error(`provider "${Q}" does not exist`);let z=Z.modelsSourceUrl?.trim(),A=KY(Z.models)[0]??T.model?.trim();if(!A&&!z)throw Error(`provider "${Q}" cannot be updated because no model is configured`);X={provider:{name:Z.name?.trim()||lL(Q),baseUrl:Z.baseUrl?.trim()??T.baseUrl?.trim()??"",defaultModelId:A,protocol:T.protocol,client:T.client,capabilities:T.capabilities},models:A?GY([A],T.capabilities):{}}}if(!X.provider)throw Error(`provider "${Q}" cannot be updated because it is a model overlay (no provider metadata)`);let j=Z.name?.trim()??X.provider.name.trim();if(!j)throw Error("name is required");let Y=Z.baseUrl?.trim()??X.provider.baseUrl.trim();if(!Y)throw Error("baseUrl is required");let V=Z.capabilities===void 0?X.provider.capabilities:Z.capabilities===null?void 0:[...new Set(Z.capabilities)],B=Z.protocol===void 0?X.provider.protocol:Z.protocol??void 0,H=Z.client===void 0?X.provider.client:Z.client??void 0,K=KY(Z.models),G=Z.modelsSourceUrl===void 0?X.provider.modelsSourceUrl:Z.modelsSourceUrl?.trim()||void 0,F=Z.models!==void 0||Z.modelsSourceUrl!==void 0&&!!G,U=Object.keys(X.models??{}).map((T)=>T.trim()).filter(Boolean),_=await nL({providerId:Q,explicitModels:K,modelsSourceUrl:G,fallbackModelIds:U,shouldRecompute:F});if(_.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let L=Z.defaultModelId===void 0?X.provider.defaultModelId?.trim():Z.defaultModelId?.trim(),O=L&&_.includes(L)?L:_[0],q={...$.getProviderSettings(Q)??{},provider:Q,baseUrl:Y,model:O};if(B)q.protocol=B;else delete q.protocol;if(H)q.client=H;else delete q.client;if(Z.apiKey!==void 0){let T=Z.apiKey?.trim()??"";if(T)q.apiKey=T;else delete q.apiKey}if(Z.headers!==void 0){let T=rL(Z.headers);if(T)q.headers=T;else delete q.headers}if(Z.timeoutMs!==void 0)if(typeof Z.timeoutMs==="number")q.timeout=Z.timeoutMs;else delete q.timeout;return $.saveProviderSettings(q,{setLastUsed:!1}),W.providers[Q]={provider:{name:j,baseUrl:Y,defaultModelId:O,protocol:B,client:H,capabilities:V,modelsSourceUrl:G},models:GY(_,V)},await i9(J,W),f8(Q,W.providers[Q]),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:J,modelsCount:_.length}}async function T3($,Z){let Q=Z.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let J=c1($),W=await N8(J);if(!W.providers[Q])throw Error(`provider "${Q}" does not exist`);return delete W.providers[Q],await i9(J,W),u0.unregisterProvider(Q),aL($,Q),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:J}}function UY($,Z,Q={}){let J=Z.trim();if(!J)throw Error("providerId is required");let W=$.read().providers[J]?.settings;return $.saveProviderSettings({...W??{},provider:J},{setLastUsed:!1,tokenSource:Q.tokenSource}),{providerId:J,enabled:!0,settingsPath:$.getFilePath()}}async function DY($,Z={}){let Q=$.read(),J=u0.getProviderIds(),W=await Promise.all(J.map(async(j)=>{let[Y,V]=await Promise.all([u0.getProvider(j),u0.getModelsForProvider(j)]),B=iL(V),H=Q.providers[j]?.settings,K=$.getProviderSettings(j),G=Y?.name??lL(j),F=cg(Y?.capabilities,K?.capabilities),U=pg(Y?.metadata)??lg(Y);return{provider:{id:j,name:G,models:B.length,color:gg(j),letter:xg(G),enabled:Boolean(H),apiKey:K?hg(K):void 0,oauthAccessTokenPresent:K?Ig(K):void 0,baseUrl:K?.baseUrl??Y?.baseUrl,defaultModelId:Y?.defaultModelId,protocol:K?.protocol??Y?.protocol,client:K?.client??Y?.client,capabilities:F,authDescription:"This provider uses API keys for authentication.",baseUrlDescription:"The base endpoint to use for provider requests.",configFields:U,configValues:ng(U,K,Y),modelList:B},rank:ug(Y?.metadata)}}));W.sort((j,Y)=>{if(j.rank!==Y.rank)return j.rank-Y.rank;return j.provider.name.localeCompare(Y.provider.name)||j.provider.id.localeCompare(Y.provider.id)});let X=W.map((j)=>j.provider);if(Z.isClinePassEnabled!==!0)X=X.filter((j)=>j.id!==pL);return{providers:X,settingsPath:$.getFilePath()}}async function _Y($,Z){let Q=$.trim(),J=await vg(Q,Z),W=iL(J);return{providerId:Q,models:W}}function q3($){return $!=null&&typeof $==="object"&&!Array.isArray($)}function oL($,Z){if(!q3(Z))return q3($)?{...$}:void 0;let Q=q3($)?{...$}:{};for(let[J,W]of Object.entries(Z)){if(W==null||W===""){delete Q[J];continue}if(q3(W)){let X=oL(Q[J],W);if(X&&Object.keys(X).length>0)Q[J]=X;else delete Q[J];continue}Q[J]=W}return Object.keys(Q).length>0?Q:void 0}function LY($,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 W={...$.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 W[X];else W[X]=Z[X];for(let X of["maxTokens","contextWindow","timeout","apiLine","protocol","client","routingProviderId","capabilities"])if(Object.hasOwn(Z,X))W[X]=Z[X];for(let X of["auth","headers","reasoning","aws","gcp","azure","sap","oca"])if(Object.hasOwn(Z,X)&&Z[X]!=null){let j=oL(W[X],Z[X]);if(j)W[X]=j;else delete W[X]}return $.saveProviderSettings(W,{setLastUsed:!1}),{providerId:Q,enabled:!0,settingsPath:$.getFilePath()}}async function AY($,Z){let Q=Z.trim(),J=$.getProviderSettings(Q),X=u0.MODEL_COLLECTIONS_BY_PROVIDER_ID[Q]?.provider,j=J?.baseUrl?.trim()||X?.baseUrl?.trim(),Y=dQ(j,X?.baseUrl,X?.modelsSourceUrl);if(!J||!X||!j||!Y)return{providerId:Q,refreshed:!1};let V=await z3($,{providerId:Q,name:X.name,baseUrl:j,apiKey:J.apiKey,headers:J.headers??null,timeoutMs:J.timeout??null,modelsSourceUrl:Y,protocol:J.protocol??X.protocol??null,client:J.client??X.client??null,capabilities:J.capabilities??null});return{providerId:Q,refreshed:!0,modelsCount:V.modelsCount}}function OY($){let Z=$.trim().toLowerCase(),Q=U0(Z);if(Q)return Q.providerId;throw Error(`provider "${$}" does not support OAuth login`)}async function qY($,Z,Q,J){let W=U0($);if(!W)throw Error(`provider "${$}" does not support OAuth login`);let X=w6({onPrompt:async(j)=>j.defaultValue??"",openUrl:Q,onOpenUrlError:({error:j})=>{throw j instanceof Error?j:Error(String(j))}});return W.login({settings:Z,callbacks:X,telemetry:J})}function zY($,Z,Q,J,W){return E2({manager:$,providerId:Z,settings:Q,credentials:J,setLastUsed:W?.setLastUsed})}async function TY($,Z,Q,J){let W=w6({onPrompt:async(X)=>X.defaultValue??"",openUrl:Q,onOpenUrlError:({error:X})=>{throw X instanceof Error?X:Error(String(X))}});return u4($,Z,{callbacks:W,telemetry:J})}function NY($){let Z=$?.auth?.accessToken?.trim()||$?.apiKey?.trim();return Z&&Z.length>0?Z:void 0}var tL={};w(tL,{getProviderConfigFields:()=>fY});import*as N3 from"@cline/llms";var ag=["apiKey","baseUrl","azureApiVersion","awsRegion","awsProfile","gcpProjectId","gcpRegion","sapClientId","sapClientSecret","sapTokenUrl","sapResourceGroup","sapDeploymentId"],og={"openai-compatible":{description:"For Azure AI Foundry deployments, use a Base URL ending at /openai/deployments/<deployment> and set the Azure API version.",fields:{azureApiVersion:{label:"Azure API Version (optional)",placeholder:"2025-01-01-preview",note:"Required for Azure AI Foundry deployment URLs.",optional:!0}}},vertex:{mode:"replace",description:"Vertex AI can use Google Cloud Application Default Credentials with a project/region. An API key is optional for supported Gemini models.",fields:{gcpProjectId:{label:"Google Cloud Project ID",placeholder:"my-gcp-project"},gcpRegion:{label:"Google Cloud Region",placeholder:"us-central1",defaultValue:"us-central1"},apiKey:{label:"API Key (optional)",placeholder:"Leave blank to use Google Cloud credentials",optional:!0}}},bedrock:{mode:"replace",description:"AWS region is required for Bedrock. It can be auto-filled from AWS_REGION, AWS_DEFAULT_REGION, or ~/.aws/config.",fields:{awsRegion:{label:"AWS Region",placeholder:"us-east-1"},apiKey:{label:"AWS Bedrock API Key (optional)",placeholder:"Leave blank to use AWS profile/default chain",optional:!0},awsProfile:{label:"AWS Profile Name (optional)",placeholder:"default",optional:!0}}},ollama:{fields:{apiKey:{note:"Keep empty if no API key for local inference."}}},sapaicore:{mode:"replace",description:"SAP AI Core uses OAuth client credentials and an AI Core API URL, not a generic API key.",fields:{baseUrl:{label:"AI Core Base URL",placeholder:"https://api.ai.<region>.aws.ml.hana.ondemand.com"},sapClientId:{label:"Client ID",placeholder:"sb-...|xsuaa_std!b..."},sapClientSecret:{label:"Client Secret",placeholder:"SAP AI Core client secret"},sapTokenUrl:{label:"Token URL",placeholder:"https://<subdomain>.authentication.sap.hana.ondemand.com"},sapResourceGroup:{label:"Resource Group",placeholder:"default",optional:!0},sapDeploymentId:{label:"Deployment ID",placeholder:"SAP AI Core deployment id",optional:!0}}}};function sg($,Z){let Q={};for(let J of ag){let W=$[J],X=Z[J];if(W||X)Q[J]={...W,...X}}return Q}function tg($){let Z=og[$.providerId];if(!Z)return $;return{...$,description:Z.description??$.description,fields:Z.mode==="replace"?Z.fields:sg($.fields,Z.fields)}}var eg=new Set(["ollama","lmstudio","litellm","openai-compatible"]);function $v($,Z){if(!Z?.provider.baseUrl)return!1;if(Z.provider.source!=="system")return!0;return eg.has($)}function fY($){let Z=N3.normalizeProviderId($);if(I$(Z))return{providerId:Z,authMethod:"oauth",fields:{}};let Q=N3.MODEL_COLLECTIONS_BY_PROVIDER_ID[Z];if(Q?.provider.capabilities?.includes("local-auth"))return{providerId:Z,authMethod:"local",fields:{}};let J=Q?.provider.baseUrl,W={apiKey:{}};if($v(Z,Q))W.baseUrl={defaultValue:J};return tg({providerId:Z,authMethod:"api-key",fields:W})}var $A={};w($A,{resolveLegacyClineAuth:()=>EY,migrateLegacyProviderSettings:()=>s9});import{existsSync as Zv,readFileSync as Qv}from"node:fs";import{dirname as Jv,join as RY}from"node:path";import*as T$ from"@cline/llms";import{ReasoningLevelSchema as Wv}from"@cline/shared";import{resolveClineDataDir as Xv}from"@cline/shared/storage";var f3="openai",jv=T$.BUILT_IN_PROVIDER.OPENAI_COMPATIBLE,Yv=128000;function EY($){let Z=$?.trim();if(!Z)return;try{let Q=JSON.parse(Z);if(!Q)return;let J=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:J,accountId:Q.userInfo?.id}}catch{return}}function C($){let Z=$?.trim();return Z?Z:void 0}function Vv($){return $==="credentials"?"iam":$}function eL($){if(!Zv($))return;try{let Z=Qv($,"utf8"),Q=JSON.parse(Z);if(Q&&typeof Q==="object"&&!Array.isArray(Q))return Q}catch{}return}function Bv($){let Z=$.dataDir??Xv(),Q=$.globalStatePath??RY(Z,"globalState.json"),J=$.secretsPath??RY(Z,"secrets.json"),W=eL(Q),X=eL(J);if(!W&&!X)return;return{globalState:W??{},secrets:X??{}}}function MY($){return T$.normalizeProviderId($)}function R3($){if($===f3)return $;return T$.normalizeProviderId($)}function Hv($,Z,Q,J){let W=Q==="plan"?"planMode":"actMode",X=Z===J?C(Q==="plan"?$.planModeApiModelId:$.actModeApiModelId):void 0,Y={openrouter:`${W}OpenRouterModelId`,cline:`${W}ClineModelId`,openai:`${W}OpenAiModelId`,ollama:`${W}OllamaModelId`,lmstudio:`${W}LmStudioModelId`,litellm:`${W}LiteLlmModelId`,requesty:`${W}RequestyModelId`,together:`${W}TogetherModelId`,fireworks:`${W}FireworksModelId`,sapaicore:`${W}SapAiCoreModelId`,groq:`${W}GroqModelId`,baseten:`${W}BasetenModelId`,huggingface:`${W}HuggingFaceModelId`,"huawei-cloud-maas":`${W}HuaweiCloudMaasModelId`,oca:`${W}OcaModelId`,aihubmix:`${W}AihubmixModelId`,hicap:`${W}HicapModelId`,nousResearch:`${W}NousResearchModelId`,"vercel-ai-gateway":`${W}VercelAiGatewayModelId`}[Z];return(Y?C(typeof $[Y]==="string"?$[Y]:void 0):void 0)??X}function Kv($,Z,Q){let J=Q==="plan"?$.planModeThinkingBudgetTokens:$.actModeThinkingBudgetTokens,W=[...Z==="oca"?[$.actModeOcaReasoningEffort,$.planModeOcaReasoningEffort]:[],...Z==="gemini"?[$.geminiActModeThinkingLevel,$.geminiPlanModeThinkingLevel]:[],$.actModeReasoningEffort,$.planModeReasoningEffort].map(C).find(Boolean),X=Wv.safeParse(W),j=X.success?X.data:void 0,Y=typeof J==="number"&&Number.isInteger(J)&&J>0?J:void 0;if(!j&&Y===void 0)return;return{...j?{effort:j}:{},...Y!==void 0?{budgetTokens:Y}:{}}}function Gv($){let Z=$["openai-codex-oauth-credentials"];if(!Z)return;try{let Q=JSON.parse(Z),J=C(Q.access_token),W=C(Q.refresh_token),X=C(Q.accountId);if(!J&&!W&&!X)return;return{...J?{apiKey:J}:{},auth:{...J?{accessToken:J}:{},...W?{refreshToken:W}:{},...X?{accountId:X}:{}}}}catch{return}}function Fv($){let Z=T$.getGeneratedModelsForProvider($),J=T$.getProviderCollectionSync($)?.provider.defaultModelId;if(J&&Z[J])return J;return Object.keys(Z)[0]??void 0}function Uv($,Z,Q,J){let W=MY($),X=C(J==="plan"?Z.planModeApiProvider:Z.actModeApiProvider),j=X?R3(X):void 0,Y=Hv(Z,$,J,j)??Fv(W),V=Kv(Z,W,J),B=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},K={};if($==="openai-codex")Object.assign(K,Gv(Q));if($==="cline")try{let D=C(Q["cline:clineAccountId"]);if(D)K.auth={...K.auth??{},...EY(D)}}catch{}if($===f3&&Z.openAiHeaders)K.headers=Z.openAiHeaders;if($==="bedrock"){let D=Vv(Z.awsAuthentication),q=D==="profile"||Z.awsUseProfile===!0;K.aws={accessKey:C(Q.awsAccessKey),secretKey:C(Q.awsSecretKey),sessionToken:C(Q.awsSessionToken),region:C(Z.awsRegion),authentication:D,profile:q?C(Z.awsProfile):void 0,usePromptCache:Z.awsBedrockUsePromptCache,useCrossRegionInference:Z.awsUseCrossRegionInference,useGlobalInference:Z.awsUseGlobalInference,endpoint:C(Z.awsBedrockEndpoint),customModelBaseId:C(J==="plan"?Z.planModeAwsBedrockCustomModelBaseId:Z.actModeAwsBedrockCustomModelBaseId)}}if($==="vertex")K.gcp={projectId:C(Z.vertexProjectId),region:C(Z.vertexRegion)};if($===f3&&(Z.azureApiVersion||Z.azureIdentity!==void 0))K.azure={apiVersion:C(Z.azureApiVersion),useIdentity:Z.azureIdentity};if($==="sapaicore"){let D=Z.sapAiCoreUseOrchestrationMode??!0;K.sap={clientId:C(Q.sapAiCoreClientId),clientSecret:C(Q.sapAiCoreClientSecret),tokenUrl:C(Z.sapAiCoreTokenUrl),resourceGroup:C(Z.sapAiResourceGroup),deploymentId:D?void 0:C(J==="plan"?Z.planModeSapAiCoreDeploymentId:Z.actModeSapAiCoreDeploymentId),useOrchestrationMode:D}}if($==="oca"){K.oca={mode:Z.ocaMode};let D=C(Q.ocaRefreshToken);if(D)K.auth={...K.auth??{},refreshToken:D}}if($==="qwen")K.apiLine=Z.qwenApiLine;if($==="moonshot")K.apiLine=Z.moonshotApiLine;if($==="zai")K.apiLine=Z.zaiApiLine;if($==="minimax")K.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},F=C(H[$]),U=C(G[$]),_={provider:W,...F?{apiKey:F}:{},...Y?{model:Y}:{},...U?{baseUrl:U}:{},...V?{reasoning:V}:{},...B?{timeout:B}:{},...K},L=M6.safeParse(_);if(!L.success)return;return Object.keys(_).filter((D)=>D!=="provider").length>0?L.data:void 0}function o9($){return typeof $==="number"&&Number.isFinite($)&&$>0?$:void 0}function Dv($,Z,Q){if($!==jv)return;if(!Z.baseUrl||!Z.model)return;let J=o9(Q?.contextWindow)??Yv,W=o9(Q?.maxTokens),X=o9(Q?.inputPrice),j=o9(Q?.outputPrice),Y=o9(Q?.temperature),V=["streaming","tools"];if(Q?.supportsImages!==!1)V.push("images");if(Q?.supportsPromptCache===!0)V.push("prompt-cache");return{provider:{name:"OpenAI Compatible",baseUrl:Z.baseUrl,defaultModelId:Z.model},models:{[Z.model]:{id:Z.model,name:Z.model,contextWindow:J,maxInputTokens:J,capabilities:V,...W!==void 0?{maxTokens:W}:{},...X!==void 0?{inputPrice:X}:{},...j!==void 0?{outputPrice:j}:{},...Y!==void 0?{temperature:Y}:{}}}}}function _v($,Z){let Q=new Set;for(let W of[$.actModeApiProvider,$.planModeApiProvider]){let X=C(W);if(X)Q.add(R3(X))}if(C(Z.apiKey))Q.add("anthropic");if(C(Z.openRouterApiKey))Q.add("openrouter");if(C(Z.openAiApiKey))Q.add(f3);if(C(Z.openAiNativeApiKey))Q.add("openai-native");if(C(Z["openai-codex-oauth-credentials"]))Q.add("openai-codex");if(C(Z.geminiApiKey))Q.add("gemini");if(C(Z.ollamaApiKey))Q.add("ollama");if(C(Z.deepSeekApiKey))Q.add("deepseek");if(C(Z.requestyApiKey))Q.add("requesty");if(C(Z.togetherApiKey))Q.add("together");if(C(Z.fireworksApiKey))Q.add("fireworks");if(C(Z.qwenApiKey))Q.add("qwen");if(C(Z.doubaoApiKey))Q.add("doubao");if(C(Z.mistralApiKey))Q.add("mistral");if(C(Z.liteLlmApiKey))Q.add("litellm");if(C(Z.asksageApiKey))Q.add("asksage");if(C(Z.xaiApiKey))Q.add("xai");if(C(Z.moonshotApiKey))Q.add("moonshot");if(C(Z.zaiApiKey))Q.add("zai");if(C(Z.huggingFaceApiKey))Q.add("huggingface");if(C(Z.nebiusApiKey))Q.add("nebius");if(C(Z.sambanovaApiKey))Q.add("sambanova");if(C(Z.cerebrasApiKey))Q.add("cerebras");if(C(Z.groqApiKey))Q.add("groq");if(C(Z.huaweiCloudMaasApiKey))Q.add("huawei-cloud-maas");if(C(Z.basetenApiKey))Q.add("baseten");if(C(Z.vercelAiGatewayApiKey))Q.add("vercel-ai-gateway");if(C(Z.difyApiKey))Q.add("dify");if(C(Z.minimaxApiKey))Q.add("minimax");if(C(Z.hicapApiKey))Q.add("hicap");if(C(Z.aihubmixApiKey))Q.add("aihubmix");if(C(Z.nousResearchApiKey))Q.add("nousResearch");if(C(Z.awsAccessKey)||C(Z.awsBedrockApiKey)||$.awsAuthentication!==void 0||$.awsUseProfile===!0||C($.awsProfile))Q.add("bedrock");if(C($.vertexProjectId)||C($.vertexRegion))Q.add("vertex");if(C(Z.clineApiKey))Q.add("cline");let J=EY(C(Z["cline:clineAccountId"]));if(J?.accessToken||J?.refreshToken||J?.accountId)Q.add("cline");if(C(Z.ocaApiKey))Q.add("oca");if(C(Z.sapAiCoreClientId)||C(Z.sapAiCoreClientSecret)||C($.sapAiCoreTokenUrl)||C($.sapAiCoreBaseUrl)||C($.sapAiResourceGroup)||$.sapAiCoreUseOrchestrationMode!==void 0)Q.add("sapaicore");return Q}function s9($){let Z=$.providerSettingsManager.read(),Q=Bv($);if(!Q)return{migrated:!1,providerCount:Object.keys(Z.providers).length,lastUsedProvider:Z.lastUsedProvider};let{globalState:J,secrets:W}=Q,X=J.mode==="plan"?"plan":"act",j=X==="plan"?"act":"plan",Y=C(X==="plan"?J.planModeApiProvider:J.actModeApiProvider),V=Y?R3(Y):void 0,B=C(X==="plan"?J.actModeApiProvider:J.planModeApiProvider),H=B?R3(B):void 0,K=_v(J,W),G=Q2();G.providers={...Z.providers},G.lastUsedProvider=Z.lastUsedProvider;let F=new Date().toISOString(),U=0,_=RY(Jv($.providerSettingsManager.getFilePath()),"models.json"),L=Y4(_),O=0;for(let T of K){let z=MY(T);if(G.providers[z])continue;let A=T!==V&&T===H?j:X,R=Uv(T,J,W,A);if(!R)continue;G.providers[z]={settings:R,updatedAt:F,tokenSource:"migration"},U+=1;let N=Dv(z,R,A==="plan"?J.planModeOpenAiModelInfo:J.actModeOpenAiModelInfo);if(N&&!L.providers[z])L.providers[z]=N,O+=1}if(U===0&&O===0)return{migrated:!1,providerCount:Object.keys(Z.providers).length,lastUsedProvider:Z.lastUsedProvider};let D=C(X==="plan"?J.planModeApiProvider:J.actModeApiProvider),q=D?MY(D):void 0;if(G.lastUsedProvider=Z.lastUsedProvider??(q&&G.providers[q]?q:Object.keys(G.providers)[0]),$.providerSettingsManager.write(G),O>0)l9(_,L);return{migrated:U>0||O>0,providerCount:Object.keys(G.providers).length,lastUsedProvider:G.lastUsedProvider}}i7();C0();IZ();var ZA={};w(ZA,{SessionVersioningService:()=>G2,SessionVersioningError:()=>d0});class d0 extends Error{code;constructor($,Z){super(Z);this.code=$;this.name="SessionVersioningError"}}function Lv($){let Z=$.sessionId.trim();if(!Z)throw new d0("invalid_restore","sessionId is required");if(!$.restoreMessages&&!$.restoreWorkspace)throw new d0("invalid_restore","restore.messages or restore.workspace must be true");if($.restoreMessages&&$.requiresStart)throw new d0("invalid_restore","start is required when restore.messages is true");if(!Number.isInteger($.checkpointRunCount)||$.checkpointRunCount<1)throw new d0("invalid_restore","checkpointRunCount must be a positive integer");return Z}class G2{async restoreCheckpoint($){let Z=$.restore?.messages!==!1,Q=$.restore?.workspace!==!1,J=Lv({sessionId:$.sessionId,restoreMessages:Z,restoreWorkspace:Q,requiresStart:$.start===void 0,checkpointRunCount:$.checkpointRunCount}),W=await $.getSession(J);if(!W)throw new d0("session_not_found",`Session ${J} not found`);let X=Z?await $.readMessages(J):void 0;if(Z&&X?.length===0)throw new d0("session_messages_not_found",`No messages found for session ${J}`);let j=Oj({session:W,messages:X,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd,restoreMessages:Z}),Y=b1({session:W,messages:X}),V,B=[],H,K;if(Z){let{startSession:O,getStartedSessionId:D,cleanupStartedSession:q}=$;if(!$.start||!O||!D||!q)throw new d0("invalid_restore","startSession, getStartedSessionId, and cleanupStartedSession are required when restore.messages is true");K={startSession:O,getStartedSessionId:D,cleanupStartedSession:q},V=E9(W,$.checkpointRunCount),B=$.restore?.omitCheckpointMessageFromSession?C9(X??[],$.checkpointRunCount):j.messages??[];let T={sourceSession:W,sourceMessages:X,sourceSnapshot:Y,plan:j,restoredCheckpointMetadata:V,initialMessages:B,restoreMessages:Z,restoreWorkspace:Q,checkpointRunCount:$.checkpointRunCount};H=$.buildStartInput?await $.buildStartInput(T,$.start):$.start}let G=$.applyWorkspaceCheckpoint??qj,F=$.beginWorkspaceRestoreTransaction??($.applyWorkspaceCheckpoint?void 0:Aj),U=Q&&F?await F(j.cwd):void 0,_=!1,L;try{if(Q)await G(j.cwd,j.checkpoint);if(!K)return await U?.commit(),_=!0,{checkpoint:j.checkpoint,sourceSnapshot:Y};let O=await K.startSession(H);L={result:O,cleanup:K.cleanupStartedSession};let D=K.getStartedSessionId(O);if(!D)throw new d0("invalid_restore","Restored session did not return a session id");await($.retainCheckpointRefs??kF)(j.cwd,D,V?.history??[]);let q=$.readRestoredSession?await $.readRestoredSession(D):void 0,T=q?b1({session:q,messages:B}):void 0;return await U?.commit(),_=!0,{sessionId:D,startResult:O,messages:j.messages,checkpoint:j.checkpoint,sourceSnapshot:Y,...T?{restoredSnapshot:T}:{}}}catch(O){let D=[];if(L)try{await L.cleanup(L.result)}catch(q){D.push(q)}if(U&&!_)try{await U.rollback()}catch(q){D.push(q)}if(D.length>0)throw AggregateError([O,...D],"Checkpoint restore failed and recovery did not complete");throw O}}}var QA={};w(QA,{FileTeamPersistenceStore:()=>M3});import{appendFileSync as Av,existsSync as CY,mkdirSync as Ov,readFileSync as qv,renameSync as zv,unlinkSync as Tv,writeFileSync as Nv}from"node:fs";import{join as wY}from"node:path";import{resolveTeamDataDir as fv}from"@cline/shared/storage";function Rv($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}class M3{dirPath;statePath;taskHistoryPath;teammateSpecs=new Map;constructor($){let Z=Rv($.teamName),Q=$.baseDir?.trim()||fv();this.dirPath=wY(Q,Z),this.statePath=wY(this.dirPath,"state.json"),this.taskHistoryPath=wY(this.dirPath,"task-history.jsonl")}loadState(){if(!CY(this.statePath))return;try{let $=qv(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 q_(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`;Nv(Q,`${JSON.stringify(Z,null,2)}
764
+ `,"utf8"),zv(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(),Av(this.taskHistoryPath,`${JSON.stringify({ts:new Date().toISOString(),type:$.type,task:Z})}
765
+ `,"utf8")}ensureDir(){if(!CY(this.dirPath))Ov(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(CY(this.statePath))Tv(this.statePath)}}var JA={};w(JA,{ChatViewStateSchema:()=>PY,ChatSummarySchema:()=>b3,ChatSessionStatusSchema:()=>C3,ChatSessionConfigSchema:()=>E3,ChatMessageSchema:()=>S3,ChatMessageRoleSchema:()=>w3,ChatMessageImageSchema:()=>P3});import{z as h}from"zod";var E3=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()}),C3=h.enum(["idle","starting","running","pending","stopping","completed","cancelled","failed","error"]),w3=h.enum(["user","assistant","tool","system","status","error"]),P3=h.object({id:h.string().min(1),mediaType:h.enum(["image/png","image/jpeg","image/gif","image/webp"]),data:h.string().min(1)}),S3=h.object({id:h.string().min(1),sessionId:h.string().nullable(),role:w3,content:h.string(),images:h.array(P3).optional(),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()}),b3=h.object({toolCalls:h.number().int().nonnegative(),tokensIn:h.number().int().nonnegative(),tokensOut:h.number().int().nonnegative()}),PY=h.object({sessionId:h.string().nullable(),status:C3,config:E3,messages:h.array(S3),rawTranscript:h.string(),error:h.string().nullable(),summary:b3});var WA={};w(WA,{CORE_BUILD_VERSION:()=>SY});var SY=v8;import{Agent as ym,createAgentRuntime as km}from"@cline/agents";var XA={};w(XA,{fetchClineRecommendedModels:()=>kY,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>y3});import{VERCEL_OPENROUTER_MODEL_ID_ALIAS_RULES as Mv}from"@cline/llms";import{getClineEnvironmentConfig as Ev}from"@cline/shared";var Cv=5000,y3={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 wv($){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 bY($){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 Pv($){if(!$||typeof $!=="object")return null;let Z=$,Q=Array.isArray(Z.recommended)?Z.recommended:[],J=Array.isArray(Z.free)?Z.free:[],W=Array.isArray(Z.clinePass)?Z.clinePass:[],X=Q.map(bY).filter((V)=>V!==null),j=J.map(bY).filter((V)=>V!==null),Y=W.map(bY).filter((V)=>V!==null);if(X.length===0&&j.length===0&&Y.length===0)return null;return{recommended:X,free:j,clinePass:Y}}function Sv($){let Z=$.baseUrl?.trim();if(Z)return Z;let Q=Ev().apiBaseUrl;try{return($.providerSettingsManager??new v1).getProviderSettings("cline")?.baseUrl?.trim()||Q}catch{return Q}}async function bv($,Z,Q){let J=new AbortController,W=setTimeout(()=>J.abort(),Q);try{return await $(Z,{signal:J.signal})}finally{clearTimeout(W)}}function yY($){return $.replace(/\s*\(free\)\s*$/i,"").replace(/:free$/i,"").trim()}function yv($){let Z=[$];for(let Q of Mv)if($.startsWith(Q.canonicalPrefix))Z.push(`${Q.aliasPrefix}${$.slice(Q.canonicalPrefix.length)}`);else if($.startsWith(Q.aliasPrefix))Z.push(`${Q.canonicalPrefix}${$.slice(Q.aliasPrefix.length)}`);return Z}function kv($,Z){for(let W of Z)for(let X of yv($.id)){let j=W?.[X]?.name?.trim();if(j)return yY(j)}let Q=$.name?.trim();if(Q&&Q!==$.id)return yY(Q);let J=$.id.split("/").at(-1)??$.id;return yY(J)}async function hv($,Z){let Q;try{return await Promise.race([$(),new Promise((J)=>{Q=setTimeout(()=>J(void 0),Z)})])}catch{return}finally{clearTimeout(Q)}}async function Iv($,Z,Q){let J=await hv(Z,Q),W=(X,j)=>X.map((Y)=>({...Y,name:kv(Y,j)}));return{recommended:W($.recommended,[J?.openrouter]),free:W($.free,[J?.cline,J?.openrouter]),clinePass:W($.clinePass,[J?.["cline-pass"]])}}async function kY($={}){let Z=$.timeoutMs??Cv,Q=Date.now()+Z;try{let J=Sv($),W=$.fetchImpl??fetch,X=await bv(W,`${J}/api/v1/ai/cline/recommended-models`,Z);if(!X.ok)throw Error(`HTTP ${X.status}`);let j=await X.json(),Y=Pv(j);if(Y)return await Iv(Y,$.catalogLoader??e$,Math.max(0,Q-Date.now()))}catch{}return wv(y3)}var jA={};w(jA,{loadLlmsConfigFromFile:()=>IY,defineLlmsConfig:()=>hY});import{readFile as xv}from"node:fs/promises";import gv from"node:path";function hY($){return $}async function IY($){let Z=gv.resolve($),Q=await xv(Z,"utf8"),J;try{J=JSON.parse(Q)}catch(W){let X=W instanceof Error?W.message:String(W);throw Error(`Failed to parse JSON config at "${Z}": ${X}`)}return vv(J,Z)}function vv($,Z){if(!$||typeof $!=="object")throw Error(`Invalid llms config in "${Z}": expected an object.`);let J=$.providers;if(!Array.isArray(J))throw Error(`Invalid llms config in "${Z}": "providers" must be an array.`);if(!J.length)throw Error(`Invalid llms config in "${Z}": "providers" cannot be empty.`);return $}var GA={};w(GA,{createLlmsSdk:()=>gY,DefaultLlmsSdk:()=>t9});import{BUILT_IN_PROVIDER_IDS as BA,createHandler as uv,createHandlerAsync as dv,getProviderCollection as pv,hasProvider as HA,registerAsyncHandler as lv,registerHandler as iv,registerModel as rv,registerProvider as KA}from"@cline/llms";function YA($){return $?{...$}:{}}function mv($,Z){if($)return $;if(!Z)return;let Q=globalThis.process;if(!Q?.env)return;return Q.env[Z]}function cv($,Z){if(!Z.length)throw Error(`Provider "${$}" must include at least one model.`)}function VA($){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 xY{providers=new Map;register($){cv($.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??{},...YA($.defaults)}})}registerSelectionConfig($){this.register({id:$.id,models:$.models,defaultModel:$.defaultModel,defaults:{apiKey:mv($.apiKey,$.apiKeyEnv),routingProviderId:$.builtinProviderId,baseUrl:$.baseUrl,headers:$.headers,timeoutMs:$.timeoutMs,capabilities:$.capabilities,...YA($.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 t9{configuredProviders=new xY;constructor($){this.applyConfig($)}createHandler($){return uv(this.configuredProviders.createHandlerConfig($))}async createHandlerAsync($){return dv(this.configuredProviders.createHandlerConfig($))}registerProvider($){if(KA($.collection),$.handlerFactory&&$.asyncHandlerFactory)throw Error(`Provider "${$.collection.provider.id}" cannot register both sync and async handlers.`);if($.handlerFactory)iv($.collection.provider.id,$.handlerFactory);if($.asyncHandlerFactory)lv($.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.`);KA({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($){rv($.providerId,$.modelId,$.info),this.configuredProviders.registerModel($.providerId,$.modelId)}getProviders(){return this.configuredProviders.list()}getBuiltInProviderIds(){return[...BA]}async getBuiltInProviders(){return(await Promise.all(BA.map((Z)=>pv(Z)))).filter((Z)=>Z!==void 0).map((Z)=>VA({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=HA(Z.id),J=this.configuredProviders.createHandlerConfig({providerId:Z.id,modelId:Z.defaultModel}).routingProviderId,W=typeof J==="string"&&HA(J);if(!Q&&!W)throw Error(`Provider "${Z.id}" is not known. Register it through customProviders/registerProvider, registerBuiltinProvider, or use a built-in provider ID.`)}}}function gY($){return new t9($)}WJ();async function nv(){return Promise.resolve().then(() => (i7(),d_))}function cm(){return new Date().toISOString()}var um="cline",dm="cline-pass";function pm($){if(qA($)!=="providers.json")return;let Z=cY($);if(qA(Z)!=="settings")return;return cY(Z)}class v1{filePath;dataDir;constructor($={}){if(this.filePath=$.filePath??mm(),this.dataDir=$.dataDir??pm(this.filePath),this.dataDir||!$.filePath)s9({providerSettingsManager:this,dataDir:this.dataDir});if(n9(this),r9(this.read()),mY(this.filePath))try{OA(this.filePath,384)}catch{}}getFilePath(){return this.filePath}read(){if(!mY(this.filePath))return Q2();try{let $=Im(this.filePath,"utf8"),Z=JSON.parse($),Q=E6.safeParse(Z);if(Q.success){r9(Q.data);let J=Q.data.providers.cline?.settings?.auth;return t(`providers.read providers=[${Object.keys(Q.data.providers).join(",")}] lastUsed=${Q.data.lastUsedProvider??"none"} clineAuthPresent=${!!J?.accessToken} clineAccessTokenHash=${P0(J?.accessToken)} clineRefreshTokenHash=${P0(J?.refreshToken)}`),Q.data}}catch{}return Q2()}write($){let Z=E6.parse($),Q=cY(this.filePath);if(!mY(Q))hm(Q,{recursive:!0,mode:448});let J=`${this.filePath}.${process.pid}.tmp`;try{vm(J,`${JSON.stringify(Z,null,2)}
766
+ `,{encoding:"utf8",mode:384}),xm(J,this.filePath)}catch(W){throw gm(J,{force:!0}),W}try{OA(this.filePath,384)}catch{}r9(Z)}saveProviderSettings($,Z={}){let Q=M6.parse($),J=this.read(),W=Q.provider,X=Z.setLastUsed!==!1,j=J.providers[W],Y=Z.tokenSource??j?.tokenSource??"manual",V={...J,providers:{...J.providers,[W]:{settings:Q,updatedAt:cm(),tokenSource:Y}},lastUsedProvider:X?W:J.lastUsedProvider};this.write(V);let B=J.providers.cline?.settings?.auth,H=Q.provider==="cline"?Q.auth:V.providers.cline?.settings?.auth,K=!!B?.accessToken&&!H?.accessToken;return t(`providers.save providerId=${W} tokenSource=${Y} clineAuthWasPresent=${!!B?.accessToken} clineAuthIsPresent=${!!H?.accessToken} authDropped=${K}`),V}resolveProviderSettings($,Z){let Q=$.providers[Z]?.settings,W=U0(Z)?.storageProviderId;if(!W||W===Z)return Q;let X=$.providers[W]?.settings;if(!X)return Q;return M6.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===dm&&Z.isClinePassEnabled===!1)return um;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 J1(Q,Z)}getLastUsedProviderConfig($={}){let Z=this.getLastUsedProviderSettings($);if(!Z)return;return J1(Z,$)}async refreshCatalog(){try{await e$({})}catch{}}}C0();q2();import{mkdir as lm,writeFile as im}from"node:fs/promises";import{join as rm}from"node:path";import{AGENTS_RULES_FILE_NAME as nm,resolveChatWorkspacePath as am}from"@cline/shared/storage";var om=`# Cline chat workspace
767
767
 
768
768
  This directory is Cline's shared workspace for chat sessions that were
769
769
  started without a project. It is not a project of its own, and other chat
@@ -781,23 +781,23 @@ Projects from earlier chat sessions may already exist as folders here; the
781
781
  user may refer back to them. Never assume loose files in this directory
782
782
  belong to the current conversation, and keep new work inside a named folder
783
783
  rather than at the top level.
784
- `;async function lm(){let $=dm();await vm($,{recursive:!0,mode:448});let Z=cm($,um);try{await mm(Z,pm,{flag:"wx"})}catch(Q){if(Q.code!=="EEXIST")throw Q}return $}async function qA($){let Z=$.cwd?.trim()??"",Q=$.workspaceRoot?.trim()??"",J=Z||Q||await lm();return{...$,cwd:Z||J,workspaceRoot:Q||J}}import{normalizeUserInput as im}from"@cline/shared";import{nanoid as rm}from"nanoid";class zA{list($){return $?B1($):[]}update($,Z){if(!$)return{sessionId:Z.sessionId,prompts:[],updated:!1};let Q=Z.promptId.trim(),J=$.pendingPrompts.findIndex((V)=>V.id===Q);if(J<0)return{sessionId:Z.sessionId,prompts:B1($),updated:!1};let W=$.pendingPrompts[J];if(!W)return{sessionId:Z.sessionId,prompts:B1($),updated:!1};let X=Z.prompt===void 0?W.prompt:im(Z.prompt).trim();if(!X)throw Error("prompt cannot be empty");let j=Z.delivery??W.delivery,Y={...W,prompt:X,mode:Z.mode??W.mode,delivery:j};return $.pendingPrompts.splice(J,1),nm($,Y,J,W.delivery),{sessionId:Z.sessionId,prompts:B1($),prompt:x3(Y),updated:!0}}delete($,Z){if(!$)return{sessionId:Z.sessionId,prompts:[],removed:!1};let Q=Z.promptId.trim(),J=$.pendingPrompts.findIndex((X)=>X.id===Q);if(J<0)return{sessionId:Z.sessionId,prompts:B1($),removed:!1};let[W]=$.pendingPrompts.splice(J,1);return{sessionId:Z.sessionId,prompts:B1($),prompt:W?x3(W):void 0,removed:!0}}enqueue($,Z){let{prompt:Q,mode:J,delivery:W,userImages:X,userFiles:j}=Z,Y=$.pendingPrompts.findIndex((V)=>V.prompt===Q);if(Y>=0){let[V]=$.pendingPrompts.splice(Y,1),B={...V,prompt:Q,mode:J??V.mode,userImages:X??V.userImages,userFiles:j??V.userFiles};if(W==="steer"||V.delivery==="steer")$.pendingPrompts.unshift({...B,delivery:"steer"});else $.pendingPrompts.push(B)}else{let V={id:`pending_${Date.now()}_${rm(5)}`,prompt:Q,mode:J,delivery:W,userImages:X,userFiles:j};if(W==="steer")$.pendingPrompts.unshift(V);else $.pendingPrompts.push(V)}return B1($)}consumeSteer($){let Z=$.pendingPrompts.findIndex((J)=>J.delivery==="steer");if(Z<0)return{prompts:B1($)};let[Q]=$.pendingPrompts.splice(Z,1);return{entry:Q,prompts:B1($)}}shiftNext($){return{entry:$.pendingPrompts.shift(),prompts:B1($)}}requeueFront($,Z){return $.pendingPrompts.unshift(Z),B1($)}clear($){return $.pendingPrompts.length=0,[]}}class cY{deps;service=new zA;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:B1($)}})}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 J=!0;try{await this.deps.send({sessionId:$,prompt:Q.prompt,...Q.mode?{mode:Q.mode}:{},userImages:Q.userImages,userFiles:Q.userFiles})}catch{J=!1,this.service.requeueFront(Z,Q),this.emitPrompts(Z)}finally{if(Z.drainingPendingPrompts=!1,J&&Z.pendingPrompts.length>0&&Z.status!=="failed"&&Z.status!=="cancelled")queueMicrotask(()=>{this.drain($)})}}emitSubmitted($,Z){let Q=x3(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 x3($){return{id:$.id,prompt:$.prompt,delivery:$.delivery,attachmentCount:($.userImages?.length??0)+($.userFiles?.length??0),userImages:$.userImages,userFiles:$.userFiles}}function B1($){return $.pendingPrompts.map(x3)}function nm($,Z,Q,J){if(Z.delivery==="steer")$.pendingPrompts.unshift(Z);else if(J==="steer")$.pendingPrompts.push(Z);else $.pendingPrompts.splice(Q,0,Z)}C0();class dY{deps;constructor($){this.deps=$}dispatchAgentEvent($,Z,Q){let J=this.deps.getSession($),W={sessionId:$,config:Z,liveSession:J,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit},X=gW(Q),j=!!J&&(!X.agentId||X.agentId===uY(J.agent));vW(W,Q,j?{isPrimaryAgentEvent:!0,agentId:uY(J.agent),conversationId:J.agent.getConversationId(),...J?.runtime.teamRuntime?{teamRole:"lead"}:{}}:{isPrimaryAgentEvent:!1})}async handleTeamEvent($,Z){let Q=this.deps.getSession($);if(Q){if(Jj(Q,Z),Z.type==="agent_event"){let J={sessionId:$,config:Q.config,liveSession:Q,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit};vW(J,Z.event,{agentId:Z.agentId,teamRole:"teammate",teamAgentId:Z.agentId,isPrimaryAgentEvent:!1})}if(Z.type==="teammate_spawned"){let J=V$({agentId:Z.teammate.runtimeAgentId??Z.agentId,conversationId:Z.teammate.conversationId,parentAgentId:Z.teammate.parentAgentId,createdByAgentId:uY(Q.agent),teamId:Q.runtime.teamRuntime?.getTeamId(),teamName:Q.runtime.teamRuntime?.getTeamName(),teamRole:"teammate",teamAgentId:Z.agentId});if(J)b$(Q.config.telemetry,{ulid:$,modelId:Z.teammate.modelId??Q.config.modelId,provider:Q.config.providerId,...J})}}if(await Wj($,Z,this.deps.invokeBackendOptional),Q)Xj(Q,$,Z,this.deps.emit)}async handlePluginEvent($,Z,Q,J){if(Z.name==="plugin_log"){this.handlePluginLog($,Z.payload);return}if(Z.name==="plugin_telemetry"){this.handlePluginTelemetry($,Z.payload,J);return}if(Z.name==="automation_event"){let B=this.deps.getSession($)?.config.extensionContext?.automation??Q;if(!B)return;let H=Z.payload&&typeof Z.payload==="object"?Z.payload:void 0;if(!H)return;await B.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,X=typeof W?.sessionId==="string"&&W.sessionId.trim().length>0?W.sessionId.trim():$,j=typeof W?.prompt==="string"?W.prompt.trim():"";if(!j)return;let Y=Z.name==="steer_message"?"steer":Z.name==="queue_message"?"queue":W?.delivery==="steer"?"steer":"queue";this.deps.enqueuePendingPrompt(X,{prompt:j,delivery:Y})}handlePluginTelemetry($,Z,Q){let W=this.deps.getSession($)?.config.telemetry??Q;if(!W||!Z||typeof Z!=="object")return;let X=Z,j=typeof X.pluginName==="string"&&X.pluginName?X.pluginName:"unknown";if(X.kind==="event"){let Y=typeof X.event==="string"?X.event.trim():"";if(!Y)return;let V={...X.properties&&typeof X.properties==="object"?X.properties:{},plugin_name:j,session_id:$};if(X.required===!0)W.captureRequired(`plugin.${Y}`,V);else W.capture({event:`plugin.${Y}`,properties:V});return}if(X.kind==="metric"){let Y=typeof X.name==="string"?X.name.trim():"",V=typeof X.value==="number"?X.value:NaN;if(!Y||Number.isNaN(V))return;let B={...X.attributes&&typeof X.attributes==="object"?X.attributes:{},plugin_name:j},H=typeof X.description==="string"?X.description:void 0,K=X.required===!0,G=`plugin.${Y}`;if(X.metric==="counter")W.recordCounter(G,V,B,H,K);else if(X.metric==="histogram")W.recordHistogram(G,V,B,H,K);else if(X.metric==="gauge")W.recordGauge(G,V,B,H,K)}}handlePluginLog($,Z,Q){let J=this.deps.getSession($),W=Q??J?.config.extensionContext?.logger??J?.config.logger;if(!W||!Z||typeof Z!=="object")return;let X=Z,j=typeof X.message==="string"?X.message:"";if(!j)return;let Y=X.metadata&&typeof X.metadata==="object"?{...X.metadata}:{};if(Y.sessionId??=$,typeof X.pluginName==="string"&&X.pluginName)Y.pluginName=X.pluginName;if(X.level==="debug"){W.debug(j,Y);return}if(X.level==="error"){if(W.error)W.error(j,Y);else W.log(j,{...Y,severity:"error"});return}W.log(j,Y)}}function uY($){return $.getAgentId()}function pY($){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:B$($.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 lY($,Z){let Q=$[Z];return typeof Q==="function"?Q:null}async function TA($,Z,...Q){let J=lY($,Z);if(!J)throw Error(`session service method not available: ${Z}`);return Promise.resolve(J.apply($,Q))}async function NA($,Z,...Q){let J=lY($,Z);if(!J)return;await Promise.resolve(J.apply($,Q))}async function fA($,Z,...Q){let J=lY($,Z);if(!J)return;return await Promise.resolve(J.apply($,Q))}H1();C0();function iY($,Z,Q){return{onSubAgentEvent:(J)=>$.onAgentEvent(Q,Z,J),onSubAgentStart:(J)=>{let W=$.getSession(Q)?.runtime.teamRuntime;$.subAgentStarts.set(J.subAgentId,{startedAt:Date.now(),rootSessionId:Q});let X=V$({agentId:J.subAgentId,conversationId:J.conversationId,parentAgentId:J.parentAgentId,teamId:W?.getTeamId(),teamName:W?.getTeamName(),createdByAgentId:J.parentAgentId});if(X)b$(Z.telemetry,{ulid:Q,modelId:Z.modelId,provider:Z.providerId,...X});T4(Z.telemetry,{event:"started",ulid:Q,durationMs:0,parentId:J.parentAgentId,agentId:J.subAgentId,...X}),$.invokeBackendOptional("handleSubAgentStart",Q,J)},onSubAgentEnd:(J)=>{let W=$.getSession(Q)?.runtime.teamRuntime,X=$.subAgentStarts.get(J.subAgentId),j=X?Date.now()-X.startedAt:0,Y=J.result?.text?J.result.text.split(`
785
- `).length:0;T4(Z.telemetry,{event:"ended",ulid:Q,durationMs:j,outputLines:Y,errorMessage:J.error?String(J.error):void 0,agentId:J.subAgentId,parentId:J.parentAgentId,...V$({agentId:J.subAgentId,conversationId:J.conversationId,parentAgentId:J.parentAgentId,teamId:W?.getTeamId(),teamName:W?.getTeamName(),createdByAgentId:J.parentAgentId})}),$.subAgentStarts.delete(J.subAgentId),$.invokeBackendOptional("handleSubAgentEnd",Q,J)}}}function rY($,Z,Q,J){let W=iY($,Z,Q);return n$({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 j=Z.enableTools?i2({cwd:Z.cwd,telemetry:Z.telemetry,...Q1[j$({mode:Z.mode})],executors:J}):[];if(Z.enableSpawnAgent)j.push(rY($,Z,Q,J));return n1(j)},...W})}import{readFile as am,stat as om}from"node:fs/promises";var sm=20480000;async function RA($){let Z=await om($);if(!Z.isFile())throw Error("Path is not a file");if(Z.size>sm)throw Error("File is too large to read into context.");let Q=await am($,"utf8");if(Q.includes("\x00"))throw Error("Cannot read binary file into context.");return Q}var MA=5000;function JZ($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function Xc($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$,Q=JZ(Z.inputTokens),J=JZ(Z.outputTokens),W=JZ(Z.cacheReadTokens),X=JZ(Z.cacheWriteTokens),j=JZ(Z.totalCost);if(Q===void 0||J===void 0||W===void 0||X===void 0||j===void 0)return;return{inputTokens:Q,outputTokens:J,cacheReadTokens:W,cacheWriteTokens:X,totalCost:j}}function jc($,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)}}function EA($,Z){if(!Z)return!1;if($.source_message_count!==Z.source_message_count)return $.source_message_count<Z.source_message_count;return Date.parse($.updated_at)<Date.parse(Z.updated_at)}class g1{runtimeAddress=void 0;pendingPrompts;sessionService;runtimeBuilder;createAgentInstance;toolExecutors;defaultCapabilities;defaultToolPolicies;providerSettingsManager;oauthTokenManager;defaultTelemetry;defaultLogger;defaultFetch;events=new D9;sessions=new Map;manifestMutationQueues=new Map;usageBySession=new Map;aggregateUsageBySession=new Map;subAgentStarts=new Map;pendingPromptsController;eventBridge;sessionVersioning=new K2;constructor($){let Z=em();if(Z)Wc(Z);let Q=l0($.distinctId);this.sessionService=$.sessionService,this.runtimeBuilder=$.runtimeBuilder??new Z4,this.createAgentInstance=$.createAgent??((J)=>new l$(J)),this.defaultCapabilities=y0($.capabilities),this.toolExecutors=this.defaultCapabilities?.toolExecutors,this.defaultToolPolicies=$.toolPolicies,this.providerSettingsManager=$.providerSettingsManager??new v1,this.oauthTokenManager=$.oauthTokenManager??new Q4({providerSettingsManager:this.providerSettingsManager,telemetry:$.telemetry}),this.defaultTelemetry=$.telemetry,this.defaultLogger=$.logger,this.defaultTelemetry?.setDistinctId(Q),this.defaultFetch=$.fetch,this.pendingPromptsController=new cY({getSession:(J)=>this.sessions.get(J),emit:(J)=>this.emit(J),send:(J)=>this.runTurn(J)}),this.pendingPrompts={list:async(J)=>this.pendingPromptsController.list(J.sessionId),update:async(J)=>this.pendingPromptsController.update(J),delete:async(J)=>this.pendingPromptsController.delete(J)},this.eventBridge=new dY({getSession:(J)=>this.sessions.get(J),usageBySession:this.usageBySession,aggregateUsageBySession:this.aggregateUsageBySession,emit:(J)=>this.emit(J),persistMessages:(J,W,X)=>{this.invoke("persistSessionMessages",J,W,X)},enqueuePendingPrompt:(J,W)=>this.pendingPromptsController.enqueue(J,W),invokeBackendOptional:(J,...W)=>this.invokeOptional(J,...W)})}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=$.config.sessionId?.trim()??"",Q=Z||Zc(),J=Z.length>0&&($.initialMessages?.length??0)>0&&!$.prompt?.trim(),W=Boolean($.config.cwd?.trim()||$.config.workspaceRoot?.trim()),X=J&&!W?await this.invokeOptionalValue("readSessionManifest",Q):void 0,j=X?{...$.config,cwd:X.cwd,workspaceRoot:X.workspace_root}:await qA($.config);return await this.startResolvedSession({...$,config:j},Q,Z.length>0,X)}async startResolvedSession($,Z,Q,J){let W=$.source??L0.CLI,X=V0(),j=await this.applyInitialOAuthCredentials($),Y=j.initialMessages??[],V=Y.length>0?F6(Y):w0(),B=await this.invokeOptionalValue("ensureSessionsDir")??"";if(!B)throw Error("session service method not available: ensureSessionsDir");let H=nY(B,Z),K=nY(H,`${Z}.messages.json`),G=nY(H,`${Z}.json`),F=B$($.config),U=n0.parse({version:1,session_id:Z,source:W,pid:process.pid,started_at:X,status:"running",interactive:$.interactive===!0,provider:j.config.providerId,model:j.config.modelId,cwd:j.config.cwd,workspace_root:F,team_name:j.config.teamName,enable_tools:j.config.enableTools,enable_spawn:j.config.enableSpawnAgent,enable_teams:j.config.enableAgentTeams,prompt:j.prompt?.trim()||void 0,messages_path:K}),_,L;if(Q&&Y.length>0&&!j.prompt?.trim()){let I=J??await this.invokeOptionalValue("readSessionManifest",Z);if(I)U=I,_={manifestPath:G,messagesPath:I.messages_path||K,compactionPath:I.compaction_path,manifest:I},L=await this.invokeOptionalValue("readSessionCompactionState",Z)}let D=await this.seedAggregateUsageFromArtifacts({initialUsage:V,sessionDir:H,rootMessagesPath:_?.messagesPath??K,manifest:U});this.usageBySession.set(Z,V),this.aggregateUsageBySession.set(Z,D);let q=y0(this.defaultCapabilities,$.capabilities),T=q?.toolExecutors??this.toolExecutors,z=$.localRuntime,A=z?.extensionContext?.logger??z?.logger,R=z?.extensionContext?.automation,N=z?.extensionContext?.telemetry??z?.telemetry??this.defaultTelemetry,S,y={getSession:(I)=>this.sessions.get(I),subAgentStarts:this.subAgentStarts,onAgentEvent:(I,H0,M0)=>this.eventBridge.dispatchAgentEvent(I,H0,M0),invokeBackendOptional:(I,...H0)=>this.invokeOptional(I,...H0)};S=await QU({input:j,localRuntime:$.localRuntime,sessionId:Z,providerSettingsManager:this.providerSettingsManager,defaultTelemetry:this.defaultTelemetry,defaultLogger:this.defaultLogger,defaultCapabilities:q,defaultToolPolicies:this.defaultToolPolicies,defaultFetch:this.defaultFetch,onPluginEvent:(I)=>{if(I.name==="plugin_log"){this.eventBridge.handlePluginLog(Z,I.payload,A);return}this.eventBridge.handlePluginEvent(Z,I,R,N)},onTeamEvent:(I)=>{this.eventBridge.handleTeamEvent(Z,I),S.config.onTeamEvent?.(I)},createSpawnTool:()=>rY(y,S.config,Z,T),createSubAgentLifecycleCallbacks:(I)=>iY(y,I,Z),readSessionMetadata:async()=>(await this.getSession(Z))?.metadata,writeSessionMetadata:async(I)=>{await this.persistSessionMetadata(Z,()=>I)}});let s=VZ({..._?.manifest.metadata??{},...j.sessionMetadata??{}},S.gitState);if(!_)U.metadata=s;let c=await this.runtimeBuilder.build(S.runtimeBuilderInput),b=S.config,r=S.providerConfig;if(c.teamRuntime&&!b.teamName?.trim())b.teamName=c.teamRuntime.getTeamName();let O0=async()=>{let I=this.sessions.get(Z);if(!I||!I$(I.config.providerId))return!1;try{return await this.syncOAuthCredentials(I,{forceRefresh:!0}),!0}catch{return!1}};c.delegatedAgentConfigProvider?.updateConnectionDefaults({onAuthError:O0});let N$=[...c.tools,...b.extraTools??[]],f$=c.extensions??S.extensions,X0=j.initialCompactionState,u1,R$=o4(b),q1=X0??L,p0=q1?{...q1,conversation_id:q1.conversation_id?.trim()||Z}:void 0,M$=s4({compact:R$,getState:()=>u1?.compactionState,saveState:async(I,H0)=>{let M0=u1;if(!M0)return;let E0={...I,conversation_id:M0.sessionId};try{if(!(await this.persistActiveSessionCompactionState(M0,E0,H0)).updated)b.logger?.debug?.("Skipped stale session compaction state",{sessionId:M0.sessionId,sourceMessageCount:E0.source_message_count})}catch(U2){b.logger?.error?.("Failed to persist session compaction state",{sessionId:M0.sessionId,error:U2}),G2(b.telemetry,{component:"core",operation:"session.persist_compaction_state",severity:"warn",handled:!0,error:U2,context:{sessionId:M0.sessionId,providerId:b.providerId,modelId:b.modelId}})}}}),R0={sessionId:Z,providerId:r.providerId,modelId:r.modelId,apiKey:r.apiKey,baseUrl:r.baseUrl,headers:r.headers,onAuthError:O0,knownModels:r.knownModels,providerConfig:r,thinking:b.thinking,reasoningEffort:b.reasoningEffort??r.reasoningEffort,thinkingBudgetTokens:b.thinkingBudgetTokens,maxTokensPerTurn:b.maxTokensPerTurn,temperature:b.temperature,systemPrompt:b.systemPrompt,maxIterations:b.maxIterations,execution:b.execution,prepareTurn:M$,tools:N$,hooks:S.hooks,extensions:f$,hookErrorMode:b.hookErrorMode,initialMessages:S.effectiveInput.initialMessages,userFileContentLoader:RA,toolPolicies:S.toolPolicies,requestToolApproval:S.requestToolApproval?async(I)=>{let H0=S.requestToolApproval,M0=this.sessions.get(Z);if(M0)await this.markTurnPending(M0);try{if(!H0)return{approved:!1,reason:"Tool approval callback is not configured."};return await H0(I)}finally{let E0=this.sessions.get(Z);if(E0?.status==="pending")await this.markTurnRunning(E0)}}:void 0,telemetry:b.telemetry,onConsecutiveMistakeLimitReached:b.onConsecutiveMistakeLimitReached,completionPolicy:c.completionPolicy,consumePendingUserMessage:()=>{let I=this.pendingPromptsController.consumeSteer(Z);return I?f9(I.prompt,I.mode??b.mode):void 0},logger:c.logger??b.logger,extensionContext:b.extensionContext,onEvent:(I)=>this.eventBridge.dispatchAgentEvent(Z,b,I)};R0.hooks={...R0.hooks,onEvent:async(I)=>{if(await S.hooks?.onEvent?.(I),I.type!=="assistant-message")return;let H0=this.sessions.get(Z);if(!H0)return;let M0=H0.agent.getMessages();try{await this.invoke("persistSessionMessages",Z,M0,b.systemPrompt)}catch(E0){b.logger?.error?.("Failed to persist session messages after assistant response",{sessionId:Z,error:E0}),G2(b.telemetry,{component:"core",operation:"session.persist_messages_after_assistant_response",error:E0,severity:"warn",handled:!0,context:{sessionId:Z,providerId:b.providerId,modelId:b.modelId}})}}};let h0=this.createAgentInstance(R0);if(R0.onEvent)h0.subscribeEvents(R0.onEvent);c.registerLeadAgent?.(h0);let z1=V$({agentId:h0.getAgentId(),conversationId:h0.getConversationId(),teamId:c.teamRuntime?.getTeamId(),teamName:c.teamRuntime?.getTeamName(),teamRole:c.teamRuntime?"lead":void 0});if(WU(b,Z,Q,F,z1),z1)b$(b.telemetry,{ulid:Z,modelId:b.modelId,provider:b.providerId,...z1});if(c.teamRuntime)MZ(b.telemetry,{ulid:Z,teamId:c.teamRuntime.getTeamId(),teamName:c.teamRuntime.getTeamName(),leadAgentId:h0.getAgentId(),restoredFromPersistence:c.teamRestoredFromPersistence===!0});let u={sessionId:Z,config:b,sessionMetadata:s,..._?{artifacts:_}:{},source:W,startedAt:_?.manifest.started_at??X,updatedAt:_?.manifest.ended_at??_?.manifest.started_at??X,pendingPrompt:U.prompt,runtime:c,agent:h0,started:!1,status:_?.manifest.status??"running",aborting:!1,interactive:$.interactive===!0,persistedMessages:Y,compactionState:p0,activeTeamRunIds:new Set,pendingTeamRunUpdates:[],teamRunWaiters:[],pendingPrompts:[],drainingPendingPrompts:!1,pluginSandboxShutdown:S.pluginSandboxShutdown,submitAndExitObserved:!1,lastInteractiveTurnFinishReason:void 0};if(u1=u,u.compactionState&&!this.isCompactionStateForSession(u.sessionId,u.compactionState,u))u.config.logger?.log?.("Ignoring session compaction state for a different conversation",{severity:"warn",sessionId:u.sessionId,conversationId:u.compactionState.conversation_id}),u.compactionState=void 0;if(this.sessions.set(Z,u),_)await this.refreshActiveSessionGitMetadata(u,S.gitState);if(this.emitStatus(Z,"running"),Y.length>0&&!_){if(await this.ensureSessionPersisted(u),await this.invoke("persistSessionMessages",u.sessionId,Y,u.config.systemPrompt),u.compactionState){if(!(await this.persistActiveSessionCompactionState(u,u.compactionState)).updated)u.compactionState=void 0}if(!j.prompt?.trim())await this.updateStatus(u,"completed",0)}let x0;try{if(j.prompt?.trim())if(x0=await this.executeTurn(u,{prompt:j.prompt,userImages:j.userImages,userFiles:j.userFiles}),!u.interactive)await this.finalizeSingleRun(u,x0.finishReason);else await this.completeInteractiveTurn(u,x0.finishReason)}catch(I){if(u.interactive&&u.aborting)x0=await this.completeAbortedInteractiveTurn(u);else{G2(u.config.telemetry,{component:"core",operation:"session.start",error:I,severity:"error",handled:!1,context:{sessionId:u.sessionId,providerId:u.config.providerId,modelId:u.config.modelId}});try{await this.failSession(u)}catch(H0){u.config.logger?.error?.("Session failure cleanup threw",{sessionId:u.sessionId,error:H0})}throw I}}return{sessionId:Z,manifest:U,manifestPath:G,messagesPath:K,result:x0}}async restoreSession($){return this.sessionVersioning.restoreCheckpoint({...$,getSession:(Z)=>this.getSession(Z),readMessages:(Z)=>this.readSessionMessages(Z),buildStartInput:(Z,Q)=>{let J=Z.restoredCheckpointMetadata?{...Q.sessionMetadata??{},checkpoint:Z.restoredCheckpointMetadata}:Q.sessionMetadata;return{...Q,...J?{sessionMetadata:J}:{},initialMessages:Z.initialMessages}},startSession:(Z)=>this.startSession(Z),getStartedSessionId:(Z)=>Z.sessionId,cleanupStartedSession:async(Z)=>{if(!await this.deleteSession(Z.sessionId))throw Error(`Failed to clean up restored session ${Z.sessionId}`)},readRestoredSession:(Z)=>this.getSession(Z)})}async runTurn($){let Z=this.getSessionOrThrow($.sessionId),Q=Z.agent.canStartRun(),J=$.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:J??"immediate"}}),J==="queue"||J==="steer"){this.pendingPromptsController.enqueue($.sessionId,{prompt:$.prompt,mode:$.mode,delivery:J,userImages:$.userImages,userFiles:$.userFiles});return}try{let W=await this.executeTurn(Z,{prompt:$.prompt,mode:$.mode,userImages:$.userImages,userFiles:$.userFiles});if(!Z.interactive)await this.finalizeSingleRun(Z,W.finishReason);else await this.completeInteractiveTurn(Z,W.finishReason);if(W.finishReason==="error"||W.finishReason==="aborted")return W;return queueMicrotask(()=>{this.pendingPromptsController.drain($.sessionId)}),W}catch(W){if(Z.interactive&&Z.aborting)return await this.completeAbortedInteractiveTurn(Z);throw G2(Z.config.telemetry,{component:"core",operation:"session.submit",error:W,severity:"error",handled:!1,context:{sessionId:Z.sessionId,providerId:Z.config.providerId,modelId:Z.config.modelId}}),await this.failSession(Z),W}}async getAccumulatedUsage($){let Z=iX(this.usageBySession.get($)),Q=iX(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&&!_0(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&&!_0(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 pY(Z);let Q=$.trim();if(!Q)return;let J=await this.getRow(Q);if(J)return z5(J);let W=await this.readManifest(Q);return W?y7(W):void 0}async listSessions($=200){let Q=(await this.listRows($)).map(z5),J=new Set(Q.map((W)=>W.sessionId));for(let W of this.sessions.values()){if(J.has(W.sessionId))continue;Q.unshift(pY(W))}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 updateSessionCompactionState($,Z){let Q=$.trim();if(!Q)return{updated:!1};let J=this.sessions.get(Q),W=J?void 0:await this.getSession(Q);if(!(J??W))return{updated:!1};if(J){let Y=await this.readSessionMessages(Q),V=Z.source_message_count>0&&Y.length>=Z.source_message_count,B=V?Y:void 0;if(V){if(!await this.canPersistCompactionState(Q,Z,J,void 0,Y))return{updated:!1};J.agent.restore(Y)}return await this.persistActiveSessionCompactionState(J,Z,B)}if(!await this.canPersistCompactionState(Q,Z,void 0,W))return{updated:!1};let j=await this.invokeOptionalValue("readSessionCompactionState",Q);if(EA(Z,j))return{updated:!1};return await this.invoke("persistSessionCompactionState",Q,Z),{updated:!0}}async readSessionCompactionState($){let Z=$.trim();if(!Z)return;let Q=this.sessions.get(Z);if(Q)for(;;){let J=Q.compactionStateWriteQueue;if(!J)return Q.compactionState;await J.catch(()=>{return})}return await this.invokeOptionalValue("readSessionCompactionState",Z)}isCompactionStateForSession($,Z,Q,J){let W=Z.conversation_id?.trim();if(!W)return!0;if(W===$)return!0;let X=Q?.agent.getConversationId()?.trim()||J?.conversationId?.trim();return X?W===X:!1}async canPersistCompactionState($,Z,Q,J,W){if(!Z.conversation_id?.trim())return!1;if(!this.isCompactionStateForSession($,Z,Q,J))return!1;let X=W??Q?.agent.getMessages()??await this.readSessionMessages($);return x$(Z,X)!==void 0}async persistActiveSessionCompactionState($,Z,Q){if(!await this.canPersistCompactionState($.sessionId,Z,$,void 0,Q))return{updated:!1};return await this.enqueueCompactionStateWrite($,async()=>{let J=$.compactionState,W=J!==void 0&&x$(J,Q??$.agent.getMessages())!==void 0;if(J&&(W?EA(Z,J):Date.parse(Z.updated_at)<Date.parse(J.updated_at)))return{updated:!1};return await this.invoke("persistSessionCompactionState",$.sessionId,Z),$.compactionState=Z,{updated:!0}})}async enqueueCompactionStateWrite($,Z){let J=($.compactionStateWriteQueue??Promise.resolve()).catch(()=>{return}).then(Z),W=J.then(()=>{return},()=>{return});$.compactionStateWriteQueue=W;try{return await J}finally{if($.compactionStateWriteQueue===W)$.compactionStateWriteQueue=void 0}}async readLiveSessionMessages($){let Z=$.trim();if(!Z)return[];let Q=this.sessions.get(Z);if(Q){let J=Q.agent.getMessages();if(J.length>0)return J}return this.readSessionMessages(Z)}async readSessionMessages($){let Z=$.trim();if(!Z)return[];let Q=await this.getRow(Z);if(Q?.messagesPath)return j2(Q.messagesPath);let J=await this.readManifest(Z);return j2(J?.messages_path)}async dispatchHookEvent($){await CD($,{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){await this.updateSessionConnection($,{modelId:Z})}async updateSessionConnection($,Z){let Q=c2(Z),J=this.getSessionOrThrow($);if(Q.providerId!==void 0)J.config.providerId=Q.providerId;if(Q.modelId!==void 0)J.config.modelId=Q.modelId;if(Q.apiKey!==void 0)J.config.apiKey=Q.apiKey;if(Q.baseUrl!==void 0)J.config.baseUrl=Q.baseUrl;if(Q.headers!==void 0)J.config.headers=Q.headers;if(Q.providerConfig!==void 0)J.config.providerConfig=Q.providerConfig;if(Object.hasOwn(Q,"reasoningEffort"))J.config.reasoningEffort=Q.reasoningEffort??void 0;if(Object.hasOwn(Q,"thinkingBudgetTokens"))J.config.thinkingBudgetTokens=Q.thinkingBudgetTokens??void 0;if(Object.hasOwn(Q,"thinking")){if(J.config.thinking=Q.thinking??void 0,Q.thinking===!1||Q.thinking===null)J.config.reasoningEffort=void 0,J.config.thinkingBudgetTokens=void 0}let W={...Q.providerId!==void 0?{providerId:Q.providerId}:{},...Q.modelId!==void 0?{modelId:Q.modelId}:{},...Q.apiKey!==void 0?{apiKey:Q.apiKey}:{},...Q.baseUrl!==void 0?{baseUrl:Q.baseUrl}:{},...Q.headers!==void 0?{headers:Q.headers}:{},...Q.providerConfig!==void 0?{providerConfig:Q.providerConfig}:{},...Object.hasOwn(Q,"reasoningEffort")?{reasoningEffort:Q.reasoningEffort??void 0}:{},...Object.hasOwn(Q,"thinking")?{thinking:Q.thinking??void 0}:{},...Object.hasOwn(Q,"thinkingBudgetTokens")?{thinkingBudgetTokens:Q.thinkingBudgetTokens??void 0}:{}};if(Q.thinking===!1||Q.thinking===null)W.reasoningEffort=void 0,W.thinkingBudgetTokens=void 0;let X={...Q.apiKey!==void 0?{apiKey:Q.apiKey}:{},...Q.baseUrl!==void 0?{baseUrl:Q.baseUrl}:{},...Q.headers!==void 0?{headers:Q.headers}:{}};if(J.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults(W),J.agent.updateConnection(Q),J.runtime.teamRuntime?.updateTeammateConnections(X),Q.providerId||Q.modelId)await this.mutateSessionManifest(J,(j)=>{if(Q.providerId)j.provider=Q.providerId;if(Q.modelId)j.model=Q.modelId})}async mutateSessionManifest($,Z){let Q=$.artifacts;if(!Q)return;let J=$.sessionId,X=(this.manifestMutationQueues.get(J)??Promise.resolve()).then(async()=>{let Y=await this.invokeOptionalValue("readSessionManifest",J)??Q.manifest;return Z(Y),Q.manifest=Y,await this.invoke("writeSessionManifest",Q.manifestPath,Y),Y}),j=X.then(()=>{return},()=>{return});this.manifestMutationQueues.set(J,j);try{return await X}finally{if(this.manifestMutationQueues.get(J)===j)this.manifestMutationQueues.delete(J)}}handlePluginEvent($,Z,Q){return this.eventBridge.handlePluginEvent($,Z,Q)}async executeTurn($,Z){let Q=await this.prepareTurnInput($,Z),J=Q.prompt.trim(),W=Q?.userImages?.length,X=Q?.userFiles?.length;if(!J&&!W&&!X)throw Error("prompt cannot be empty");if(!$.artifacts&&!$.pendingPrompt)$.pendingPrompt=J;await this.ensureSessionPersisted($),await this.refreshActiveSessionGitMetadata($),await this.syncOAuthCredentials($),await this.markTurnRunning($);try{let j=await this.executeAgentTurn($,J,Q.userImages,Q.userFiles);while(jj($,j.finishReason)){let Y=await Yj($);if(Y.length===0)break;let V=Vj($,Y);j=await this.executeAgentTurn($,V)}return j}finally{await this.refreshActiveSessionGitMetadata($)}}async completeInteractiveTurn($,Z){if(N9($))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(),J=w0();return $.persistedMessages=Q,$.started=$.started||Q.length>0,this.eventBridge.dispatchAgentEvent($.sessionId,$.config,{type:"done",reason:"aborted",text:"",iterations:0,usage:J}),await this.completeInteractiveTurn($,"aborted"),{text:"",usage:J,messages:Q,toolCalls:[],iterations:0,finishReason:"aborted",model:{id:$.config.modelId,provider:$.config.providerId},startedAt:Z,endedAt:Z,durationMs:0}}async executeAgentTurn($,Z,Q,J){let W=$.started||$.agent.getMessages().length>0,X=$.persistedMessages??$.agent.getMessages(),j=this.usageBySession.get($.sessionId)??w0(),Y=this.aggregateUsageBySession.get($.sessionId)??j;$.turnUsageBaseline=j,$.turnAggregateUsageBaseline=Y,$.turnPrimaryUsage=w0(),$.turnUsageByAgent=new Map,OZ($.config.telemetry,$.sessionId,$.config.mode),b8($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,model:$.config.modelId,source:"user",mode:$.config.mode,...this.getSessionAgentTelemetryIdentity($)});try{let V=W?()=>$.agent.continue(Z,Q,J):()=>$.agent.run(Z,Q,J),B=await this.runWithAuthRetry($,V,X);$.started=!0;let H=bQ(B.messages,B,X);$.persistedMessages=H;let K=N5($.turnUsageByAgent?.values()??[]),G=f0(j,B.usage),F=f0(f0(w0(),B.usage),K),U=f0(Y,F);return this.usageBySession.set($.sessionId,G),this.aggregateUsageBySession.set($.sessionId,U),await this.persistSessionMetadata($.sessionId,(_)=>({..._??{},totalCost:G.totalCost,aggregatedAgentsCost:U.totalCost,usage:G,aggregateUsage:U})),await this.invoke("persistSessionMessages",$.sessionId,H,$.config.systemPrompt),this.observeTaskCompletionTool($,B),B}catch(V){throw G2($.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((J)=>J.name===F0.SUBMIT_AND_EXIT&&J.error===void 0))return;$.submitAndExitObserved=!0,q4($.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=B$($.config),J=Jc(Z.prompt).trim();if(!J)return{prompt:"",userImages:Z.userImages,userFiles:this.resolveAbsoluteFilePaths($.config.cwd,Z.userFiles)};let W=await Q6(J,Q);XU($.config.telemetry,W);let X=f9(W.prompt,Z.mode??$.config.mode),j=this.resolveAbsoluteFilePaths($.config.cwd,Z.userFiles),Y=this.resolveAbsoluteFilePaths(Q,W.matchedFiles),V=Array.from(new Set([...j,...Y]));return{prompt:X,userImages:Z.userImages,userFiles:V.length>0?V:void 0}}async ensureSessionPersisted($){if($.artifacts)return;let Z=B$($.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 refreshActiveSessionGitMetadata($,Z){try{let Q=Z??await i3(B$($.config));if(!Q||!$.artifacts)return;if(l3($.artifacts.manifest.metadata,Q))return;await this.persistSessionMetadata($.sessionId,(J)=>VZ({...J??{},...$.sessionMetadata??{}},Q))}catch(Q){$.config.logger?.debug?.("Failed to refresh session git metadata",{sessionId:$.sessionId,error:Q})}}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($),J=await this.invokeOptionalValue("readSessionManifest",$)??Q?.artifacts?.manifest,W=Z(J?.metadata);if(!Q?.artifacts)return;if((await this.invokeOptionalValue("updateSession",{sessionId:$,metadata:W}))?.updated===!1)return;Q.sessionMetadata=W,Q.artifacts.manifest.metadata=W}async finalizeSingleRun($,Z){if(N9($))return;let Q=Z==="aborted"||$.aborting,J=Z==="error";await this.shutdownSession($,{status:Q?"cancelled":J?"failed":"completed",exitCode:J?1:0,shutdownReason:J?"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)q4($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"shutdown",...this.getSessionAgentTelemetryIdentity($)});v7($);let Q=[],J=(W,X)=>{Q.push(X),$.config.logger?.log("Session shutdown cleanup failed",{sessionId:$.sessionId,stage:W,error:X,severity:"warn"}),G2($.config.telemetry,{component:"core",operation:"session.shutdown_cleanup",error:X,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:W,status:Z.status,shutdownReason:Z.shutdownReason,providerId:$.config.providerId,modelId:$.config.modelId}})};if($.artifacts){await this.refreshActiveSessionGitMetadata($);try{await this.updateStatus($,Z.status,Z.exitCode)}catch(W){J("update_status",W)}try{await $.agent.shutdown(Z.shutdownReason)}catch(W){J("agent_shutdown",W)}}try{await Promise.resolve($.runtime.shutdown(Z.shutdownReason))}catch(W){J("runtime_shutdown",W)}try{await $.pluginSandboxShutdown?.()}catch(W){J("plugin_sandbox_shutdown",W)}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=[],J=(W,X)=>{Q.push(X),$.config.logger?.log("Session runtime cleanup failed",{sessionId:$.sessionId,stage:W,error:X,severity:"warn"}),G2($.config.telemetry,{component:"core",operation:"session.runtime_cleanup",error:X,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:W,reason:Z,providerId:$.config.providerId,modelId:$.config.modelId}})};try{await $.agent.shutdown(Z)}catch(W){J("agent_shutdown",W)}try{await Promise.resolve($.runtime.shutdown(Z))}catch(W){J("runtime_shutdown",W)}try{await $.pluginSandboxShutdown?.()}catch(W){J("plugin_sandbox_shutdown",W)}if(this.sessions.delete($.sessionId),Q.length>0)throw Q[0]}async updateStatus($,Z,Q){if(!$.artifacts)return;let J=await this.invoke("updateSessionStatus",$.sessionId,Z,Q);if(!J.updated)return;let W=await this.mutateSessionManifest($,(X)=>{if(X.status=Z,_0(Z))delete X.ended_at,X.exit_code=null;else X.ended_at=J.endedAt??V0(),X.exit_code=typeof Q==="number"?Q:null});if(!W)return;$.status=Z,$.updatedAt=J.endedAt??V0(),$.endedAt=_0(Z)?null:W.ended_at,$.exitCode=W.exit_code,this.emitStatus($.sessionId,Z)}async runWithAuthRetry($,Z,Q){try{return await Z()}catch(J){if(!I$($.config.providerId)||!Qc(J))throw J;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(J){if(J instanceof O8)throw Error(`${J.providerId} requires re-authentication.`);throw J}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 o1($);throw G2(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((J)=>J.trim()).filter((J)=>J.length>0).map((J)=>$c(J)?J:aY($,J));return Array.from(new Set(Q))}getSessionAgentTelemetryIdentity($){return V$({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 J=aY(Z),W=`${Q}.messages.json`,X;try{X=tm($)}catch{return w0()}let j=w0();for(let Y of X){if(!Y.endsWith(".messages.json"))continue;if(Y===W)continue;let V=aY($,Y);if(V===J)continue;let B=await j2(V);if(B.length===0)continue;j=f0(j,F6(B))}return j}withPersistedAggregateUsageFloor($,Z){let Q=Xc(Z.metadata?.aggregateUsage);if(Q)return jc($,Q);let J=Z.metadata?.aggregatedAgentsCost;if(typeof J!=="number"||!Number.isFinite(J)||J<=$.totalCost)return $;return{...$,totalCost:J}}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:b1({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($)),MA))}async getRow($){let Z=$.trim();if(!Z)return;return(await this.listRows(MA)).find((J)=>J.sessionId===Z)}async readManifest($){let Z=$.trim();if(!Z)return;return await this.invokeOptionalValue("readSessionManifest",Z)}invoke($,...Z){return TA(this.sessionService,$,...Z)}invokeOptional($,...Z){return NA(this.sessionService,$,...Z)}invokeOptionalValue($,...Z){return fA(this.sessionService,$,...Z)}}function Vc($){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 Bc($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}function UA($={}){let Z=async(J)=>J,Q=new g1({sessionService:new x1(new h1),capabilities:{toolExecutors:{submit:Z}},fetch:$.fetch,telemetry:$.telemetry});return{async startSession(J){let W=(J.cwd?.trim()||J.workspaceRoot).trim(),X=await Q.startSession({source:J.source?.trim()||L0.CLI,interactive:!1,config:{providerId:Yc(J.provider),modelId:J.model,apiKey:J.apiKey?.trim()||void 0,cwd:W,workspaceRoot:J.workspaceRoot,systemPrompt:J.systemPrompt??"",mode:Bc(J),maxIterations:J.maxIterations,enableTools:J.enableTools!==!1,enableSpawnAgent:J.enableSpawn!==!1,enableAgentTeams:J.enableTeams!==!1,disableMcpSettingsTools:J.disableMcpSettingsTools,missionLogIntervalSteps:J.missionStepInterval,missionLogIntervalMs:J.missionTimeIntervalMs},toolPolicies:J.toolPolicies??{"*":{autoApprove:J.autoApproveTools!==!1}},localRuntime:{configExtensions:J.configExtensions}});return{sessionId:X.sessionId,startResult:{sessionId:X.sessionId,manifestPath:X.manifestPath,messagesPath:X.messagesPath}}},async sendSession(J,W){let X=await Q.runTurn({sessionId:J,prompt:W.prompt,userImages:W.attachments?.userImages,userFiles:W.attachments?.userFiles?.map((j)=>j.content)});if(!X)throw Error("local hub schedule runtime returned no turn result");return{result:Vc(X)}},async abortSession(J){return await Q.abort(J,Error("hub schedule abort")),{applied:!0}},async stopSession(J){return await Q.stopSession(J),{applied:!0}}}}import{resolveClineBuildEnv as RO}from"@cline/shared";function Hc($){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(`
786
- `).trim()||void 0}var CA=120,oY="...";function e9($){let Z=$.trim();if(!Z)return"";if(Buffer.byteLength(Z,"utf8")<=CA)return Z;let Q=CA-Buffer.byteLength(oY,"utf8");if(Q<=0)return oY;let J="";for(let W of Z){if(Buffer.byteLength(J+W,"utf8")>Q)break;J+=W}return`${J}${oY}`}async function wA($){let Z=$?.sessionId?.trim()||"unknown",Q=typeof $?.metadata?.messagesPath==="string"?$.metadata.messagesPath:void 0,W=[...await j2(Q)].reverse().find((V)=>V.role==="assistant"),X=W?Hc(W.content):void 0,j=$?.workspaceRoot?.trim()||"workspace",Y=typeof $?.metadata?.prompt==="string"?$.metadata.prompt.trim():j;return{title:`Task completed (${Z})`,body:e9(X&&X.length>0?X:Y.length>0?Y:j),severity:"info"}}import{captureSdkError as c3,createSessionId as Zu}from"@cline/shared";import{createSessionId as Uc}from"@cline/shared";import{createSessionId as Fc}from"@cline/shared";function Kc($){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 Gc($){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 g3($,Z,Q,J){return{sessionId:$.sessionId,workspaceRoot:$.workspaceRoot,cwd:$.cwd,createdAt:Date.parse($.startedAt),updatedAt:Date.parse($.updatedAt),createdByClientId:Z?.createdByClientId??"hub",status:Kc($.status),participants:Z?[...Z.participants.values()]:[],metadata:Gc($),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}}:{},...J?{aggregateUsage:{...J}}:{}}}function l($,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 B4($){return $&&typeof $==="object"&&!Array.isArray($)?$:void 0}function k0($){if(typeof $.payload?.sessionId==="string")return $.payload.sessionId.trim();return $.sessionId?.trim()??""}function f8($,Z,Q){return{version:"v1",event:$,eventId:Fc("hevt_"),sessionId:Q,timestamp:Date.now(),payload:Z}}async function I0($,Z){let Q=await $.sessionHost.getSession(Z);if(!Q)return;let J=await $.sessionHost.getAccumulatedUsage?.(Z);return g3(Q,$.sessionState.get(Z),J?.usage,J?.aggregateUsage)}async function o0($,Z){let Q=await $.sessionHost.getSession(Z);if(!Q)return;let[J,W]=await Promise.all([typeof $.sessionHost.readSessionMessages==="function"?$.sessionHost.readSessionMessages(Z):[],$.sessionHost.getAccumulatedUsage?.(Z)]);return b1({session:Q,messages:J,usage:W?.usage,aggregateUsage:W?.aggregateUsage})}function sY($,Z,Q,J,W={}){let X=$.sessionState.get(Z);if(X){if(W.interactive!==void 0)X.interactive=W.interactive;if(J==="creator"&&!X.createdByClientId)X.createdByClientId=Q;if(!X.participants.has(Q))X.participants.set(Q,{clientId:Q,attachedAt:Date.now(),role:J});return X}let j={createdByClientId:Q,interactive:W.interactive??!0,participants:new Map([[Q,{clientId:Q,attachedAt:Date.now(),role:J}]])};return $.sessionState.set(Z,j),j}function PA($,Z,Q,J,W={}){let X=$.sessionState.get(Z);if(X){if(W.interactive!==void 0)X.interactive=W.interactive;if(!X.participants.has(Q))X.participants.set(Q,{clientId:Q,attachedAt:Date.now(),role:J});return X}let j={interactive:W.interactive??!0,participants:new Map([[Q,{clientId:Q,attachedAt:Date.now(),role:J}]])};return $.sessionState.set(Z,j),j}async function tY($,Z){let Q=Uc("approval_"),J=Z.sessionId;if($.sessionState.get(J)?.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:J,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},J))})}function eY($,Z,Q){let J=$.pendingApprovals.get(Z);if(!J)return;return $.pendingApprovals.delete(Z),J.resolve(Q),{sessionId:J.sessionId}}function $V($,Z,Q){let J=0;for(let[W,X]of[...$.pendingApprovals.entries()]){if(!Z({approvalId:W,sessionId:X.sessionId}))continue;$.pendingApprovals.delete(W),X.resolve({approved:!1,reason:Q}),$.publish($.buildEvent("approval.resolved",{approvalId:W,approved:!1,cancelled:!0,reason:Q},X.sessionId)),J+=1}return J}async function SA($,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 W=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,j=eY($,Q,{approved:X,reason:W});if(!j)return x(Z,"approval_not_found",`Unknown approval: ${Q}`);return $.publish($.buildEvent("approval.resolved",{approvalId:Q,approved:X,reason:W},j.sessionId)),l(Z,{approvalId:Q,approved:X})}import{createSessionId as Lc}from"@cline/shared";function Dc($){if($ instanceof Error)return{name:$.name,message:$.message,stack:$.stack};if($===void 0)return;return $}var bA={debug:10,info:20,warn:30,error:40,silent:50};function _c(){let $=process.env.CLINE_HUB_LOG_LEVEL?.trim().toLowerCase();if($==="debug"||$==="info"||$==="warn"||$==="error"||$==="silent")return $;return process.env.VITEST?"error":"info"}function a($,Z,Q={}){if(bA[$]<bA[_c()])return;let J=JSON.stringify({ts:new Date().toISOString(),level:$,component:"hub",message:Z,...Object.fromEntries(Object.entries(Q).map(([W,X])=>[W,Dc(X)]).filter(([,W])=>W!==void 0))});if($==="error"||$==="warn"){console.error(`[hub] ${J}`);return}console.log(`[hub] ${J}`)}function ZV($,Z){let Q=Z instanceof Error?Z.stack||Z.message:String(Z);a("error",$,{error:Q})}async function yA($,Z,Q,J,W,X){let j=Lc("capreq_"),Y=performance.now();return a("info","capability.request.start",{requestId:j,sessionId:Z,capabilityName:Q,targetClientId:W}),await new Promise((V,B)=>{$.pendingCapabilityRequests.set(j,{sessionId:Z,targetClientId:W,capabilityName:Q,onProgress:X,resolve:(H)=>{if(a(H.ok?"info":"warn","capability.request.end",{requestId:j,sessionId:Z,capabilityName:Q,targetClientId:W,ok:H.ok,error:H.error,durationMs:Math.round(performance.now()-Y)}),!H.ok){B(Error(H.error||`Capability ${Q} was rejected by ${W}.`));return}V(H.payload)}}),$.publish($.buildEvent("capability.requested",{requestId:j,targetClientId:W,capabilityName:Q,payload:J},Z)),a("info","capability.request.published",{requestId:j,sessionId:Z,capabilityName:Q,targetClientId:W})})}function kA($,Z){let Q=typeof Z.payload?.requestId==="string"?Z.payload.requestId.trim():"",J=$.pendingCapabilityRequests.get(Q);if(!J)return x(Z,"capability_not_found",`Unknown capability request: ${Q}`);if((Z.clientId?.trim()||"")!==J.targetClientId)return x(Z,"capability_wrong_client",`Capability request ${Q} is owned by ${J.targetClientId}`);if(Z.sessionId?.trim()&&Z.sessionId.trim()!==J.sessionId)return x(Z,"capability_wrong_session",`Capability request ${Q} belongs to session ${J.sessionId}`);let X=Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)?Z.payload.payload:{};return J.onProgress?.(X),l(Z,{requestId:Q})}function F2($,Z,Q){let J=0;for(let[W,X]of[...$.pendingCapabilityRequests.entries()]){if(!Z({requestId:W,...X}))continue;$.pendingCapabilityRequests.delete(W),a("warn","capability.request.cancelled",{requestId:W,sessionId:X.sessionId,capabilityName:X.capabilityName,targetClientId:X.targetClientId,reason:Q}),X.resolve({ok:!1,error:Q}),$.publish($.buildEvent("capability.resolved",{requestId:W,capabilityName:X.capabilityName,targetClientId:X.targetClientId,ok:!1,cancelled:!0,error:Q},X.sessionId)),J+=1}return J}async function hA($,Z){let Q=typeof Z.payload?.sessionId==="string"?Z.payload.sessionId.trim():Z.sessionId?.trim()||"",J=typeof Z.payload?.capabilityName==="string"?Z.payload.capabilityName.trim():"",W=typeof Z.payload?.targetClientId==="string"?Z.payload.targetClientId.trim():"";if(!Q||!J||!W)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:{},j=await $.requestCapability(Q,J,X,W);return l(Z,j)}catch(X){return x(Z,"capability_request_failed",X instanceof Error?X.message:String(X))}}function IA($,Z){let Q=typeof Z.payload?.requestId==="string"?Z.payload.requestId.trim():"",J=$.pendingCapabilityRequests.get(Q);if(!J)return x(Z,"capability_not_found",`Unknown capability request: ${Q}`);let W=Z.clientId?.trim()||"";if(W!==J.targetClientId)return x(Z,"capability_wrong_client",`Capability request ${Q} is owned by ${J.targetClientId}`);if(Z.sessionId?.trim()&&Z.sessionId.trim()!==J.sessionId)return x(Z,"capability_wrong_session",`Capability request ${Q} belongs to session ${J.sessionId}`);$.pendingCapabilityRequests.delete(Q);let X=Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)?Z.payload.payload:void 0,j=typeof Z.payload?.error==="string"?Z.payload.error:void 0,Y=Z.payload?.ok===!0;return a(Y?"info":"warn","capability.respond",{requestId:Q,sessionId:J.sessionId,capabilityName:J.capabilityName,targetClientId:J.targetClientId,respondedByClientId:W,ok:Y,error:j}),J.resolve({ok:Y,payload:X,error:j}),$.publish($.buildEvent("capability.resolved",{requestId:Q,capabilityName:J.capabilityName,targetClientId:J.targetClientId,respondedByClientId:W,ok:Y,payload:X,error:j},J.sessionId)),l(Z,{requestId:Q,ok:Y})}import{createSessionId as Ac}from"@cline/shared";function xA($,Z){let Q=Z.payload,J=Q?.clientId?.trim()||Z.clientId?.trim()||Ac("client_");return $.clients.set(J,{clientId:J,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:J,clientType:Q?.clientType??"unknown",displayName:Q?.displayName,connectedAt:Date.now()})),l(Z,{clientId:J})}function gA($,Z){let Q=Z.clientId?.trim(),J=Q?$.clients.get(Q):void 0;if(!Q||!J)return x(Z,"client_not_found","Client is not registered with this hub.");let W=B4(Z.payload?.metadata);if(J.lastSeenAt=Date.now(),W)J.metadata=JSON.parse(JSON.stringify(W));return l(Z)}function vA($,Z,Q){let J=Z.clientId?.trim();if(J)$.clients.delete(J),Q(J),$.publish($.buildEvent("hub.client.disconnected",{clientId:J}));return l(Z)}function mA($,Z){return l(Z,{clients:[...$.clients.values()]})}import{buildConnectorConnectArgs as Oc,CONNECTOR_PLATFORMS as qc,connectorChannelsFromPlatforms as zc,listConnectorCatalog as Tc,mergeConnectorConnectArgs as Nc,shouldIncludeConnectorField as fc}from"@cline/shared";import{withConnectorStore as JV}from"@cline/shared/db";C0();function v3($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function uA($){return typeof $==="string"?$.trim():void 0}function cA($){if(!v3($))return{};let Z={};for(let[Q,J]of Object.entries($))if(typeof J==="string")Z[Q]=J.trim();return Z}function Rc(){return JV(($)=>$.listConfigs()).map(($)=>({id:$.channel,type:$.type,configuredAt:$.configuredAt,updatedAt:$.updatedAt})).sort(($,Z)=>$.type.localeCompare(Z.type))}function WV(){return{available:zc(),active:b9(),configured:Rc()}}function Mc($,Z){if($.required&&!Z[$.flag]?.trim())throw Error(`${$.label} is required`)}function Ec($,Z){let Q={};for(let W of $.fields)Q[W.flag]=Z[W.flag]??W.initialValue??"";let J={};for(let W of $.fields){if(!fc(W,Q))continue;Mc(W,Q),J[W.flag]=Q[W.flag]}return J}function Cc($){if(!v3($))throw Error("connector.configure payload must be an object.");let Z=uA($.channel);if(!Z)throw Error("channel is required");let Q=qc.find((K)=>K.id===Z);if(!Q)throw Error(`unknown connector channel: ${Z}`);if(!new Set(Tc().map((K)=>K.name)).has(Q.id))throw Error(`connector channel is not available: ${Z}`);let W=cA($.values),X=Ec(Q,W),j=v3($.security)?$.security:{},Y=j.enabled===!0,V=cA(j.values);if(Y&&Q.security)for(let K of Q.security.fields){let G=V[K.key];if(!G)throw Error(K.requiredMessage);let F=K.validate?.(G);if(F)throw Error(F)}let B=Y?{enabled:!0,values:V}:{enabled:!1,values:{}},H=Oc(Q,X,B);return JV((K)=>K.upsertConfig({channel:Z,type:Z,values:X,security:B,updateConnectArgs:(G)=>Nc(Q,G.connection.connectArgs,H,{replaceSecurityArgs:G.config?.security?.enabled===!0||B.enabled})})),WV()}function wc($){if(!v3($))throw Error("connector.delete_config payload must be an object.");let Z=uA($.channel);if(!Z)throw Error("channel is required");return JV((Q)=>Q.deleteConfig(Z)),WV()}function Pc($){return $==="connector.configure"||$==="connector.delete_config"}function QV($,Z,Q){if(!Pc(Z.command))return;y8($.telemetry,{ulid:Z.sessionId??Z.requestId??"hub",tool:Z.command,success:Q})}async function dA($,Z){try{if(Z.command==="connector.channels")return l(Z,WV());if(Z.command==="connector.configure"){let Q=Cc(Z.payload);return QV($,Z,!0),l(Z,Q)}if(Z.command==="connector.delete_config"){let Q=wc(Z.payload);return QV($,Z,!0),l(Z,Q)}return x(Z,"unsupported_connector_command",`unsupported connector command: ${Z.command}`)}catch(Q){return QV($,Z,!1),x(Z,"connector_command_failed",Q instanceof Error?Q.message:String(Q))}}var Sc=30000;function bc($){if($==="aborted")return"run.aborted";if($==="error"||$==="failed")return"run.failed";return"run.completed"}function yc($){if($.finishReason!=="error")return;return $.text.trim()||void 0}function kc($,Z,Q){let J=Q instanceof Error&&Q.message.trim()?Q.message:`Unknown session: ${Z}`;return x($,q2,J)}function hc($){return $?$:void 0}function Ic($){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 xc($,Z,Q,J){let W=performance.now(),X=!1,j={command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Q.sessionId,timeoutMs:J},Y=setInterval(()=>{if(X)return;let H=Math.round(performance.now()-W);a("warn","run.heartbeat",{...j,elapsedMs:H}),$.publish($.buildEvent("run.heartbeat",{requestId:Z.requestId,elapsedMs:H,...J?{timeoutMs:J}:{}},Q.sessionId))},Sc),V=$.sessionHost.runTurn(Q);V.then((H)=>{if(!X)return;a("warn","run.late_end",{...j,elapsedMs:Math.round(performance.now()-W),finishReason:H?.finishReason})},(H)=>{if(!X)return;a("error","run.late_error",{...j,elapsedMs:Math.round(performance.now()-W),error:H})});let B;try{if(!J)return await V;return await Promise.race([V,new Promise((H,K)=>{B=setTimeout(()=>{let G=`Hub run ${Z.command} timed out after ${J}ms.`;X=!0,clearInterval(Y),K(Error(G)),a("error","run.timeout",{...j,elapsedMs:Math.round(performance.now()-W)}),$V($,(F)=>F.sessionId===Q.sessionId,G),F2($,(F)=>F.sessionId===Q.sessionId,G),$.sessionHost.abort(Q.sessionId,G).catch((F)=>{a("error","run.timeout_abort_failed",{...j,error:F})})},J)})])}finally{if(X=!0,clearInterval(Y),B)clearTimeout(B)}}async function pA($,Z){let Q=k0(Z),J=Z.payload&&typeof Z.payload==="object"?Z.payload:{},W=typeof J.prompt==="string"?J.prompt:typeof J.input==="string"?J.input:"";if(!W.trim())return x(Z,"invalid_session_input","session input requires a prompt string");$.publish($.buildEvent("run.started",void 0,Q));let X=J.attachments&&typeof J.attachments==="object"&&!Array.isArray(J.attachments)?J.attachments:void 0,j=Array.isArray(X?.userFiles)?X.userFiles.filter((H)=>typeof H==="string"):void 0,Y=Ic(J);$.suppressNextTerminalEventBySession.set(Q,"run.start.reply");let V;try{V=await xc($,Z,{sessionId:Q,prompt:W,mode:hc(J.mode),delivery:J.delivery==="queue"||J.delivery==="steer"?J.delivery:void 0,userImages:Array.isArray(X?.userImages)?X.userImages:void 0,userFiles:j,timeoutMs:Y},Y)}catch(H){if($.suppressNextTerminalEventBySession.get(Q)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Q);if(s1(H))return kc(Z,Q,H);throw $.publish($.buildEvent("run.failed",{reason:"error",error:H instanceof Error?H.message:String(H)},Q)),H}if(V){let H=await o0($,Q),K=yc(V);if($.publish($.buildEvent(bc(V.finishReason),{reason:V.finishReason,...K?{error:K}:{},result:V,...H?{snapshot:H}:{}},Q)),$.suppressNextTerminalEventBySession.get(Q)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Q)}else $.suppressNextTerminalEventBySession.delete(Q);let B=await o0($,Q);return l(Z,V||B?{...V?{result:V}:{},...B?{snapshot:B}:{}}:void 0)}async function lA($,Z){let Q=k0(Z),J=typeof Z.payload?.reason==="string"?Z.payload.reason:"Run was aborted before pending approval or capability request was resolved.";$V($,(W)=>W.sessionId===Q,J);try{await $.sessionHost.abort(Q,Z.payload?.reason)}catch(W){a("warn","run.abort_failed",{command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Q,error:W})}finally{F2($,(W)=>W.sessionId===Q,J)}return l(Z,{applied:!0})}async function iA($,Z){let Q=s6(Z.payload?.payload);if(!Q)return x(Z,"invalid_hook_payload","session.hook requires a valid hook event payload");return await $.sessionHost.dispatchHookEvent(Q),l(Z,{applied:!0})}async function rA($,Z){switch(Z.type){case"chunk":return;case"agent_event":await gc($,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,J]=await Promise.all([I0($,Z.payload.sessionId),o0($,Z.payload.sessionId)]);if(Q)$.publish($.buildEvent("session.updated",{session:Q,...J?{snapshot:J}:{}},Z.payload.sessionId));return}case"ended":await vc($,Z);return;default:return}}async function gc($,Z){let{sessionId:Q,event:J}=Z.payload;if(J.type==="iteration_start"){$.publish($.buildEvent("iteration.started",{iteration:J.iteration},Q));return}if(J.type==="iteration_end"){$.publish($.buildEvent("iteration.finished",{iteration:J.iteration,hadToolCalls:J.hadToolCalls,toolCallCount:J.toolCallCount},Q));return}if(J.type==="content_start"){if(J.contentType==="text"&&typeof J.text==="string"&&J.text.length>0){$.publish($.buildEvent("assistant.delta",{text:J.text},Q));return}if(J.contentType==="reasoning"){if(J.redacted&&!J.reasoning){$.publish($.buildEvent("reasoning.delta",{text:"",redacted:!0},Q));return}if(typeof J.reasoning==="string"&&J.reasoning.length>0)$.publish($.buildEvent("reasoning.delta",{text:J.reasoning,redacted:J.redacted===!0},Q));return}if(J.contentType==="tool"){$.publish($.buildEvent("tool.started",{toolCallId:J.toolCallId,toolName:J.toolName,input:J.input},Q));return}}if(J.type==="content_end"){switch(J.contentType){case"text":$.publish($.buildEvent("assistant.finished",{text:J.text},Q));break;case"reasoning":$.publish($.buildEvent("reasoning.finished",{reasoning:J.reasoning},Q));break;case"tool":$.publish($.buildEvent("tool.finished",{toolCallId:J.toolCallId,toolName:J.toolName,output:J.output,error:J.error},Q));break}return}if(J.type==="notice"){$.publish($.buildEvent("session.notice",{sessionId:Q,message:J.message,noticeType:J.noticeType,...J.displayRole?{displayRole:J.displayRole}:{},...J.reason?{reason:J.reason}:{},...J.metadata?{metadata:J.metadata}:{},agent:{kind:Z.payload.teamRole==="teammate"?"teammate":J.parentAgentId?"subagent":"lead",agentId:J.agentId,conversationId:J.conversationId,parentAgentId:J.parentAgentId,teamAgentId:Z.payload.teamAgentId,teamRole:Z.payload.teamRole}},Q));return}if(J.type==="usage"){let W;try{W=await $.sessionHost.getAccumulatedUsage?.(Q)}catch{W=void 0}$.publish($.buildEvent("usage.updated",{sessionId:Q,delta:{inputTokens:J.inputTokens,outputTokens:J.outputTokens,cacheReadTokens:J.cacheReadTokens??0,cacheWriteTokens:J.cacheWriteTokens??0,totalCost:J.cost??0},totals:{inputTokens:J.totalInputTokens,outputTokens:J.totalOutputTokens,cacheReadTokens:J.totalCacheReadTokens??0,cacheWriteTokens:J.totalCacheWriteTokens??0,totalCost:J.totalCost??0},usage:W?.usage,aggregateUsage:W?.aggregateUsage,agent:{kind:Z.payload.teamRole==="teammate"?"teammate":J.parentAgentId?"subagent":"lead",agentId:J.agentId,conversationId:J.conversationId,parentAgentId:J.parentAgentId,teamAgentId:Z.payload.teamAgentId,teamRole:Z.payload.teamRole}},Q));return}if(J.type==="done")$.publish($.buildEvent("agent.done",{reason:J.reason,text:J.text,iterations:J.iterations,usage:J.usage},Q))}async function vc($,Z){let Q=$.suppressNextTerminalEventBySession.get(Z.payload.sessionId),J=Q===Z.payload.reason||Q==="run.start.reply";if(J)$.suppressNextTerminalEventBySession.delete(Z.payload.sessionId);let[W,X]=await Promise.all([I0($,Z.payload.sessionId),o0($,Z.payload.sessionId)]);if(Z.payload.reason==="completed"){let j=await wA(W);$.publish($.buildEvent("ui.notify",j,Z.payload.sessionId))}if(J)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 sA,parseRuntimeConfigExtensions as tA,ReasoningEffortSchema as oc}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as D40,HUB_COMPACTION_CAPABILITY as _40,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as L40,HUB_HOOK_CAPABILITY_PREFIX as A40,HUB_MISTAKE_LIMIT_CAPABILITY as O40,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as q40,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as z40,isHubToolExecutorName as mc}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as M40,HUB_COMPACTION_CAPABILITY as E40,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as C40,HUB_HOOK_CAPABILITY_PREFIX as w40,HUB_MISTAKE_LIMIT_CAPABILITY as P40,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as S40,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as b40}from"@cline/shared";var cc=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function R8($){return $&&typeof $==="object"&&!Array.isArray($)?JSON.parse(JSON.stringify($)):void 0}function uc($,Z){let Q=typeof $.name==="string"?$.name.trim():"",J=typeof $.description==="string"?$.description:"",W=typeof $.capabilityName==="string"?$.capabilityName.trim():"",X=R8($.inputSchema);if(!Q||!J||!X||!W||Z.has(W))return;return Z.add(W),{kind:"tool",capabilityName:W,name:Q,description:J,inputSchema:X,...R8($.lifecycle)?{lifecycle:R8($.lifecycle)}:{}}}function jV($){if(!Array.isArray($))return[];let Z=[],Q=new Set;for(let J of $){if(!J||typeof J!=="object"||Array.isArray(J))continue;let W=J,X=W.kind,j=typeof W.capabilityName==="string"?W.capabilityName.trim():"";if(!j||Q.has(j))continue;if(X==="tool"){let Y=uc(W,Q);if(Y)Z.push(Y);continue}if(X==="toolExecutor"){let Y=W.executor;if(!mc(Y))continue;Q.add(j),Z.push({kind:"toolExecutor",capabilityName:j,executor:Y});continue}if(X==="hook"){let Y=typeof W.name==="string"?W.name.trim():"";if(!Y)continue;Q.add(j),Z.push({kind:"hook",capabilityName:j,name:Y});continue}if(X==="compaction"){Q.add(j),Z.push({kind:"compaction",capabilityName:j,...R8(W.config)?{config:R8(W.config)}:{}});continue}if(X==="checkpoint"){Q.add(j),Z.push({kind:"checkpoint",capabilityName:j,...R8(W.config)?{config:R8(W.config)}:{}});continue}if(X==="mistakeLimit"){Q.add(j),Z.push({kind:"mistakeLimit",capabilityName:j});continue}if(X==="userInstructionService")Q.add(j),Z.push({kind:"userInstructionService",capabilityName:j})}return Z}function aA($){let Z=$.metadata?{...$.metadata}:void 0;return{agentId:$.agentId,conversationId:$.conversationId,iteration:$.iteration,metadata:Z&&Object.keys(Z).length>0?Z:void 0}}function dc($){return Object.hasOwn($,"update")?$.update:$}function WZ($){return $.trim().replace(/^\/+/,"").toLowerCase()}function pc($){let Z=($??[]).map(WZ).filter(Boolean);return Z.length>0?new Set(Z):void 0}function lc($,Z,Q){if(!Q)return!0;let J=WZ($),W=WZ(Z),X=J.includes(":")?J.split(":").at(-1)??J:J,j=W.includes(":")?W.split(":").at(-1)??W:W;return Q.has(J)||Q.has(W)||Q.has(X)||Q.has(j)}function XV($,Z){let Q=pc(Z);return $.records.skill.map((J)=>({id:J.id,name:J.item.name,description:"description"in J.item&&typeof J.item.description==="string"?J.item.description:void 0,disabled:J.item.disabled===!0,skill:J.item})).filter((J)=>lc(J.id,J.name,Q))}function nA($,Z){let Q=async(J,W)=>{let X=WZ(J),Y=XV($,Z).filter((G)=>G.id===X||WZ(G.name)===X||G.id.endsWith(`:${X}`)).filter((G)=>!G.disabled);if(Y.length!==1)return Y.length>1?`Skill "${J}" is ambiguous. Use one of: ${Y.map((G)=>G.id).join(", ")}`:`Skill "${J}" not found.`;let V=Y[0].skill,B=W?.trim(),H=B?`
784
+ `;async function sm(){let $=am();await lm($,{recursive:!0,mode:448});let Z=rm($,nm);try{await im(Z,om,{flag:"wx"})}catch(Q){if(Q.code!=="EEXIST")throw Q}return $}async function zA($){let Z=$.cwd?.trim()??"",Q=$.workspaceRoot?.trim()??"",J=Z||Q||await sm();return{...$,cwd:Z||J,workspaceRoot:Q||J}}import{normalizeUserInput as tm}from"@cline/shared";import{nanoid as em}from"nanoid";class TA{list($){return $?B1($):[]}update($,Z){if(!$)return{sessionId:Z.sessionId,prompts:[],updated:!1};let Q=Z.promptId.trim(),J=$.pendingPrompts.findIndex((V)=>V.id===Q);if(J<0)return{sessionId:Z.sessionId,prompts:B1($),updated:!1};let W=$.pendingPrompts[J];if(!W)return{sessionId:Z.sessionId,prompts:B1($),updated:!1};let X=Z.prompt===void 0?W.prompt:tm(Z.prompt).trim();if(!X)throw Error("prompt cannot be empty");let j=Z.delivery??W.delivery,Y={...W,prompt:X,mode:Z.mode??W.mode,delivery:j};return $.pendingPrompts.splice(J,1),$c($,Y,J,W.delivery),{sessionId:Z.sessionId,prompts:B1($),prompt:x3(Y),updated:!0}}delete($,Z){if(!$)return{sessionId:Z.sessionId,prompts:[],removed:!1};let Q=Z.promptId.trim(),J=$.pendingPrompts.findIndex((X)=>X.id===Q);if(J<0)return{sessionId:Z.sessionId,prompts:B1($),removed:!1};let[W]=$.pendingPrompts.splice(J,1);return{sessionId:Z.sessionId,prompts:B1($),prompt:W?x3(W):void 0,removed:!0}}enqueue($,Z){let{prompt:Q,mode:J,delivery:W,userImages:X,userFiles:j}=Z,Y=$.pendingPrompts.findIndex((V)=>V.prompt===Q);if(Y>=0){let[V]=$.pendingPrompts.splice(Y,1),B={...V,prompt:Q,mode:J??V.mode,userImages:X??V.userImages,userFiles:j??V.userFiles};if(W==="steer"||V.delivery==="steer")$.pendingPrompts.unshift({...B,delivery:"steer"});else $.pendingPrompts.push(B)}else{let V={id:`pending_${Date.now()}_${em(5)}`,prompt:Q,mode:J,delivery:W,userImages:X,userFiles:j};if(W==="steer")$.pendingPrompts.unshift(V);else $.pendingPrompts.push(V)}return B1($)}consumeSteer($){let Z=$.pendingPrompts.findIndex((J)=>J.delivery==="steer");if(Z<0)return{prompts:B1($)};let[Q]=$.pendingPrompts.splice(Z,1);return{entry:Q,prompts:B1($)}}shiftNext($){return{entry:$.pendingPrompts.shift(),prompts:B1($)}}requeueFront($,Z){return $.pendingPrompts.unshift(Z),B1($)}clear($){return $.pendingPrompts.length=0,[]}}class uY{deps;service=new TA;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:B1($)}})}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 J=!0;try{await this.deps.send({sessionId:$,prompt:Q.prompt,...Q.mode?{mode:Q.mode}:{},userImages:Q.userImages,userFiles:Q.userFiles})}catch{J=!1,this.service.requeueFront(Z,Q),this.emitPrompts(Z)}finally{if(Z.drainingPendingPrompts=!1,J&&Z.pendingPrompts.length>0&&Z.status!=="failed"&&Z.status!=="cancelled")queueMicrotask(()=>{this.drain($)})}}emitSubmitted($,Z){let Q=x3(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 x3($){return{id:$.id,prompt:$.prompt,delivery:$.delivery,attachmentCount:($.userImages?.length??0)+($.userFiles?.length??0),userImages:$.userImages,userFiles:$.userFiles}}function B1($){return $.pendingPrompts.map(x3)}function $c($,Z,Q,J){if(Z.delivery==="steer")$.pendingPrompts.unshift(Z);else if(J==="steer")$.pendingPrompts.push(Z);else $.pendingPrompts.splice(Q,0,Z)}C0();class pY{deps;constructor($){this.deps=$}dispatchAgentEvent($,Z,Q){let J=this.deps.getSession($),W={sessionId:$,config:Z,liveSession:J,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit},X=gW(Q),j=!!J&&(!X.agentId||X.agentId===dY(J.agent));vW(W,Q,j?{isPrimaryAgentEvent:!0,agentId:dY(J.agent),conversationId:J.agent.getConversationId(),...J?.runtime.teamRuntime?{teamRole:"lead"}:{}}:{isPrimaryAgentEvent:!1})}async handleTeamEvent($,Z){let Q=this.deps.getSession($);if(Q){if(Jj(Q,Z),Z.type==="agent_event"){let J={sessionId:$,config:Q.config,liveSession:Q,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit};vW(J,Z.event,{agentId:Z.agentId,teamRole:"teammate",teamAgentId:Z.agentId,isPrimaryAgentEvent:!1})}if(Z.type==="teammate_spawned"){let J=V$({agentId:Z.teammate.runtimeAgentId??Z.agentId,conversationId:Z.teammate.conversationId,parentAgentId:Z.teammate.parentAgentId,createdByAgentId:dY(Q.agent),teamId:Q.runtime.teamRuntime?.getTeamId(),teamName:Q.runtime.teamRuntime?.getTeamName(),teamRole:"teammate",teamAgentId:Z.agentId});if(J)b$(Q.config.telemetry,{ulid:$,modelId:Z.teammate.modelId??Q.config.modelId,provider:Q.config.providerId,...J})}}if(await Wj($,Z,this.deps.invokeBackendOptional),Q)Xj(Q,$,Z,this.deps.emit)}async handlePluginEvent($,Z,Q,J){if(Z.name==="plugin_log"){this.handlePluginLog($,Z.payload);return}if(Z.name==="plugin_telemetry"){this.handlePluginTelemetry($,Z.payload,J);return}if(Z.name==="automation_event"){let B=this.deps.getSession($)?.config.extensionContext?.automation??Q;if(!B)return;let H=Z.payload&&typeof Z.payload==="object"?Z.payload:void 0;if(!H)return;await B.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,X=typeof W?.sessionId==="string"&&W.sessionId.trim().length>0?W.sessionId.trim():$,j=typeof W?.prompt==="string"?W.prompt.trim():"";if(!j)return;let Y=Z.name==="steer_message"?"steer":Z.name==="queue_message"?"queue":W?.delivery==="steer"?"steer":"queue";this.deps.enqueuePendingPrompt(X,{prompt:j,delivery:Y})}handlePluginTelemetry($,Z,Q){let W=this.deps.getSession($)?.config.telemetry??Q;if(!W||!Z||typeof Z!=="object")return;let X=Z,j=typeof X.pluginName==="string"&&X.pluginName?X.pluginName:"unknown";if(X.kind==="event"){let Y=typeof X.event==="string"?X.event.trim():"";if(!Y)return;let V={...X.properties&&typeof X.properties==="object"?X.properties:{},plugin_name:j,session_id:$};if(X.required===!0)W.captureRequired(`plugin.${Y}`,V);else W.capture({event:`plugin.${Y}`,properties:V});return}if(X.kind==="metric"){let Y=typeof X.name==="string"?X.name.trim():"",V=typeof X.value==="number"?X.value:NaN;if(!Y||Number.isNaN(V))return;let B={...X.attributes&&typeof X.attributes==="object"?X.attributes:{},plugin_name:j},H=typeof X.description==="string"?X.description:void 0,K=X.required===!0,G=`plugin.${Y}`;if(X.metric==="counter")W.recordCounter(G,V,B,H,K);else if(X.metric==="histogram")W.recordHistogram(G,V,B,H,K);else if(X.metric==="gauge")W.recordGauge(G,V,B,H,K)}}handlePluginLog($,Z,Q){let J=this.deps.getSession($),W=Q??J?.config.extensionContext?.logger??J?.config.logger;if(!W||!Z||typeof Z!=="object")return;let X=Z,j=typeof X.message==="string"?X.message:"";if(!j)return;let Y=X.metadata&&typeof X.metadata==="object"?{...X.metadata}:{};if(Y.sessionId??=$,typeof X.pluginName==="string"&&X.pluginName)Y.pluginName=X.pluginName;if(X.level==="debug"){W.debug(j,Y);return}if(X.level==="error"){if(W.error)W.error(j,Y);else W.log(j,{...Y,severity:"error"});return}W.log(j,Y)}}function dY($){return $.getAgentId()}function lY($){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:B$($.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 iY($,Z){let Q=$[Z];return typeof Q==="function"?Q:null}async function NA($,Z,...Q){let J=iY($,Z);if(!J)throw Error(`session service method not available: ${Z}`);return Promise.resolve(J.apply($,Q))}async function fA($,Z,...Q){let J=iY($,Z);if(!J)return;await Promise.resolve(J.apply($,Q))}async function RA($,Z,...Q){let J=iY($,Z);if(!J)return;return await Promise.resolve(J.apply($,Q))}H1();C0();function rY($,Z,Q){return{onSubAgentEvent:(J)=>$.onAgentEvent(Q,Z,J),onSubAgentStart:(J)=>{let W=$.getSession(Q)?.runtime.teamRuntime;$.subAgentStarts.set(J.subAgentId,{startedAt:Date.now(),rootSessionId:Q});let X=V$({agentId:J.subAgentId,conversationId:J.conversationId,parentAgentId:J.parentAgentId,teamId:W?.getTeamId(),teamName:W?.getTeamName(),createdByAgentId:J.parentAgentId});if(X)b$(Z.telemetry,{ulid:Q,modelId:Z.modelId,provider:Z.providerId,...X});T4(Z.telemetry,{event:"started",ulid:Q,durationMs:0,parentId:J.parentAgentId,agentId:J.subAgentId,...X}),$.invokeBackendOptional("handleSubAgentStart",Q,J)},onSubAgentEnd:(J)=>{let W=$.getSession(Q)?.runtime.teamRuntime,X=$.subAgentStarts.get(J.subAgentId),j=X?Date.now()-X.startedAt:0,Y=J.result?.text?J.result.text.split(`
785
+ `).length:0;T4(Z.telemetry,{event:"ended",ulid:Q,durationMs:j,outputLines:Y,errorMessage:J.error?String(J.error):void 0,agentId:J.subAgentId,parentId:J.parentAgentId,...V$({agentId:J.subAgentId,conversationId:J.conversationId,parentAgentId:J.parentAgentId,teamId:W?.getTeamId(),teamName:W?.getTeamName(),createdByAgentId:J.parentAgentId})}),$.subAgentStarts.delete(J.subAgentId),$.invokeBackendOptional("handleSubAgentEnd",Q,J)}}}function nY($,Z,Q,J){let W=rY($,Z,Q);return n$({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 j=Z.enableTools?r2({cwd:Z.cwd,telemetry:Z.telemetry,...Q1[j$({mode:Z.mode})],executors:J}):[];if(Z.enableSpawnAgent)j.push(nY($,Z,Q,J));return n1(j)},...W})}import{readFile as Zc,stat as Qc}from"node:fs/promises";var Jc=20480000;async function MA($){let Z=await Qc($);if(!Z.isFile())throw Error("Path is not a file");if(Z.size>Jc)throw Error("File is too large to read into context.");let Q=await Zc($,"utf8");if(Q.includes("\x00"))throw Error("Cannot read binary file into context.");return Q}var EA=5000;function JZ($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function Kc($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$,Q=JZ(Z.inputTokens),J=JZ(Z.outputTokens),W=JZ(Z.cacheReadTokens),X=JZ(Z.cacheWriteTokens),j=JZ(Z.totalCost);if(Q===void 0||J===void 0||W===void 0||X===void 0||j===void 0)return;return{inputTokens:Q,outputTokens:J,cacheReadTokens:W,cacheWriteTokens:X,totalCost:j}}function Gc($,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)}}function CA($,Z){if(!Z)return!1;if($.source_message_count!==Z.source_message_count)return $.source_message_count<Z.source_message_count;return Date.parse($.updated_at)<Date.parse(Z.updated_at)}class g1{runtimeAddress=void 0;pendingPrompts;sessionService;runtimeBuilder;createAgentInstance;toolExecutors;defaultCapabilities;defaultToolPolicies;providerSettingsManager;oauthTokenManager;defaultTelemetry;defaultLogger;defaultFetch;events=new D9;sessions=new Map;manifestMutationQueues=new Map;usageBySession=new Map;aggregateUsageBySession=new Map;subAgentStarts=new Map;pendingPromptsController;eventBridge;sessionVersioning=new G2;constructor($){let Z=Xc();if(Z)Hc(Z);let Q=l0($.distinctId);this.sessionService=$.sessionService,this.runtimeBuilder=$.runtimeBuilder??new Z4,this.createAgentInstance=$.createAgent??((J)=>new l$(J)),this.defaultCapabilities=y0($.capabilities),this.toolExecutors=this.defaultCapabilities?.toolExecutors,this.defaultToolPolicies=$.toolPolicies,this.providerSettingsManager=$.providerSettingsManager??new v1,this.oauthTokenManager=$.oauthTokenManager??new Q4({providerSettingsManager:this.providerSettingsManager,telemetry:$.telemetry}),this.defaultTelemetry=$.telemetry,this.defaultLogger=$.logger,this.defaultTelemetry?.setDistinctId(Q),this.defaultFetch=$.fetch,this.pendingPromptsController=new uY({getSession:(J)=>this.sessions.get(J),emit:(J)=>this.emit(J),send:(J)=>this.runTurn(J)}),this.pendingPrompts={list:async(J)=>this.pendingPromptsController.list(J.sessionId),update:async(J)=>this.pendingPromptsController.update(J),delete:async(J)=>this.pendingPromptsController.delete(J)},this.eventBridge=new pY({getSession:(J)=>this.sessions.get(J),usageBySession:this.usageBySession,aggregateUsageBySession:this.aggregateUsageBySession,emit:(J)=>this.emit(J),persistMessages:(J,W,X)=>{this.invoke("persistSessionMessages",J,W,X)},enqueuePendingPrompt:(J,W)=>this.pendingPromptsController.enqueue(J,W),invokeBackendOptional:(J,...W)=>this.invokeOptional(J,...W)})}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=$.config.sessionId?.trim()??"",Q=Z||Yc(),J=Z.length>0&&($.initialMessages?.length??0)>0&&!$.prompt?.trim(),W=Boolean($.config.cwd?.trim()||$.config.workspaceRoot?.trim()),X=J&&!W?await this.invokeOptionalValue("readSessionManifest",Q):void 0,j=X?{...$.config,cwd:X.cwd,workspaceRoot:X.workspace_root}:await zA($.config);return await this.startResolvedSession({...$,config:j},Q,Z.length>0,X)}async startResolvedSession($,Z,Q,J){let W=$.source??L0.CLI,X=V0(),j=await this.applyInitialOAuthCredentials($),Y=j.initialMessages??[],V=Y.length>0?U6(Y):w0(),B=await this.invokeOptionalValue("ensureSessionsDir")??"";if(!B)throw Error("session service method not available: ensureSessionsDir");let H=aY(B,Z),K=aY(H,`${Z}.messages.json`),G=aY(H,`${Z}.json`),F=B$($.config),U=n0.parse({version:1,session_id:Z,source:W,pid:process.pid,started_at:X,status:"running",interactive:$.interactive===!0,provider:j.config.providerId,model:j.config.modelId,cwd:j.config.cwd,workspace_root:F,team_name:j.config.teamName,enable_tools:j.config.enableTools,enable_spawn:j.config.enableSpawnAgent,enable_teams:j.config.enableAgentTeams,prompt:j.prompt?.trim()||void 0,messages_path:K}),_,L;if(Q&&Y.length>0&&!j.prompt?.trim()){let I=J??await this.invokeOptionalValue("readSessionManifest",Z);if(I)U=I,_={manifestPath:G,messagesPath:I.messages_path||K,compactionPath:I.compaction_path,manifest:I},L=await this.invokeOptionalValue("readSessionCompactionState",Z)}let D=await this.seedAggregateUsageFromArtifacts({initialUsage:V,sessionDir:H,rootMessagesPath:_?.messagesPath??K,manifest:U});this.usageBySession.set(Z,V),this.aggregateUsageBySession.set(Z,D);let q=y0(this.defaultCapabilities,$.capabilities),T=q?.toolExecutors??this.toolExecutors,z=$.localRuntime,A=z?.extensionContext?.logger??z?.logger,R=z?.extensionContext?.automation,N=z?.extensionContext?.telemetry??z?.telemetry??this.defaultTelemetry,S,y={getSession:(I)=>this.sessions.get(I),subAgentStarts:this.subAgentStarts,onAgentEvent:(I,H0,M0)=>this.eventBridge.dispatchAgentEvent(I,H0,M0),invokeBackendOptional:(I,...H0)=>this.invokeOptional(I,...H0)};S=await JU({input:j,localRuntime:$.localRuntime,sessionId:Z,providerSettingsManager:this.providerSettingsManager,defaultTelemetry:this.defaultTelemetry,defaultLogger:this.defaultLogger,defaultCapabilities:q,defaultToolPolicies:this.defaultToolPolicies,defaultFetch:this.defaultFetch,onPluginEvent:(I)=>{if(I.name==="plugin_log"){this.eventBridge.handlePluginLog(Z,I.payload,A);return}this.eventBridge.handlePluginEvent(Z,I,R,N)},onTeamEvent:(I)=>{this.eventBridge.handleTeamEvent(Z,I),S.config.onTeamEvent?.(I)},createSpawnTool:()=>nY(y,S.config,Z,T),createSubAgentLifecycleCallbacks:(I)=>rY(y,I,Z),readSessionMetadata:async()=>(await this.getSession(Z))?.metadata,writeSessionMetadata:async(I)=>{await this.persistSessionMetadata(Z,()=>I)}});let s=VZ({..._?.manifest.metadata??{},...j.sessionMetadata??{}},S.gitState);if(!_)U.metadata=s;let c=await this.runtimeBuilder.build(S.runtimeBuilderInput),b=S.config,r=S.providerConfig;if(c.teamRuntime&&!b.teamName?.trim())b.teamName=c.teamRuntime.getTeamName();let O0=async()=>{let I=this.sessions.get(Z);if(!I||!I$(I.config.providerId))return!1;try{return await this.syncOAuthCredentials(I,{forceRefresh:!0}),!0}catch{return!1}};c.delegatedAgentConfigProvider?.updateConnectionDefaults({onAuthError:O0});let N$=[...c.tools,...b.extraTools??[]],f$=c.extensions??S.extensions,X0=j.initialCompactionState,u1,R$=o4(b),q1=X0??L,p0=q1?{...q1,conversation_id:q1.conversation_id?.trim()||Z}:void 0,M$=s4({compact:R$,getState:()=>u1?.compactionState,saveState:async(I,H0)=>{let M0=u1;if(!M0)return;let E0={...I,conversation_id:M0.sessionId};try{if(!(await this.persistActiveSessionCompactionState(M0,E0,H0)).updated)b.logger?.debug?.("Skipped stale session compaction state",{sessionId:M0.sessionId,sourceMessageCount:E0.source_message_count})}catch(D2){b.logger?.error?.("Failed to persist session compaction state",{sessionId:M0.sessionId,error:D2}),F2(b.telemetry,{component:"core",operation:"session.persist_compaction_state",severity:"warn",handled:!0,error:D2,context:{sessionId:M0.sessionId,providerId:b.providerId,modelId:b.modelId}})}}}),R0={sessionId:Z,providerId:r.providerId,modelId:r.modelId,apiKey:r.apiKey,baseUrl:r.baseUrl,headers:r.headers,onAuthError:O0,knownModels:r.knownModels,providerConfig:r,thinking:b.thinking,reasoningEffort:b.reasoningEffort??r.reasoningEffort,thinkingBudgetTokens:b.thinkingBudgetTokens,maxTokensPerTurn:b.maxTokensPerTurn,temperature:b.temperature,systemPrompt:b.systemPrompt,maxIterations:b.maxIterations,execution:b.execution,prepareTurn:M$,tools:N$,hooks:S.hooks,extensions:f$,hookErrorMode:b.hookErrorMode,initialMessages:S.effectiveInput.initialMessages,userFileContentLoader:MA,toolPolicies:S.toolPolicies,requestToolApproval:S.requestToolApproval?async(I)=>{let H0=S.requestToolApproval,M0=this.sessions.get(Z);if(M0)await this.markTurnPending(M0);try{if(!H0)return{approved:!1,reason:"Tool approval callback is not configured."};return await H0(I)}finally{let E0=this.sessions.get(Z);if(E0?.status==="pending")await this.markTurnRunning(E0)}}:void 0,telemetry:b.telemetry,onConsecutiveMistakeLimitReached:b.onConsecutiveMistakeLimitReached,completionPolicy:c.completionPolicy,consumePendingUserMessage:()=>{let I=this.pendingPromptsController.consumeSteer(Z);return I?f9(I.prompt,I.mode??b.mode):void 0},logger:c.logger??b.logger,extensionContext:b.extensionContext,onEvent:(I)=>this.eventBridge.dispatchAgentEvent(Z,b,I)};R0.hooks={...R0.hooks,onEvent:async(I)=>{if(await S.hooks?.onEvent?.(I),I.type!=="assistant-message")return;let H0=this.sessions.get(Z);if(!H0)return;let M0=H0.agent.getMessages();try{await this.invoke("persistSessionMessages",Z,M0,b.systemPrompt)}catch(E0){b.logger?.error?.("Failed to persist session messages after assistant response",{sessionId:Z,error:E0}),F2(b.telemetry,{component:"core",operation:"session.persist_messages_after_assistant_response",error:E0,severity:"warn",handled:!0,context:{sessionId:Z,providerId:b.providerId,modelId:b.modelId}})}}};let h0=this.createAgentInstance(R0);if(R0.onEvent)h0.subscribeEvents(R0.onEvent);c.registerLeadAgent?.(h0);let z1=V$({agentId:h0.getAgentId(),conversationId:h0.getConversationId(),teamId:c.teamRuntime?.getTeamId(),teamName:c.teamRuntime?.getTeamName(),teamRole:c.teamRuntime?"lead":void 0});if(XU(b,Z,Q,F,z1),z1)b$(b.telemetry,{ulid:Z,modelId:b.modelId,provider:b.providerId,...z1});if(c.teamRuntime)MZ(b.telemetry,{ulid:Z,teamId:c.teamRuntime.getTeamId(),teamName:c.teamRuntime.getTeamName(),leadAgentId:h0.getAgentId(),restoredFromPersistence:c.teamRestoredFromPersistence===!0});let u={sessionId:Z,config:b,sessionMetadata:s,..._?{artifacts:_}:{},source:W,startedAt:_?.manifest.started_at??X,updatedAt:_?.manifest.ended_at??_?.manifest.started_at??X,pendingPrompt:U.prompt,runtime:c,agent:h0,started:!1,status:_?.manifest.status??"running",aborting:!1,interactive:$.interactive===!0,persistedMessages:Y,compactionState:p0,activeTeamRunIds:new Set,pendingTeamRunUpdates:[],teamRunWaiters:[],pendingPrompts:[],drainingPendingPrompts:!1,pluginSandboxShutdown:S.pluginSandboxShutdown,submitAndExitObserved:!1,lastInteractiveTurnFinishReason:void 0};if(u1=u,u.compactionState&&!this.isCompactionStateForSession(u.sessionId,u.compactionState,u))u.config.logger?.log?.("Ignoring session compaction state for a different conversation",{severity:"warn",sessionId:u.sessionId,conversationId:u.compactionState.conversation_id}),u.compactionState=void 0;if(this.sessions.set(Z,u),_)await this.refreshActiveSessionGitMetadata(u,S.gitState);if(this.emitStatus(Z,"running"),Y.length>0&&!_){if(await this.ensureSessionPersisted(u),await this.invoke("persistSessionMessages",u.sessionId,Y,u.config.systemPrompt),u.compactionState){if(!(await this.persistActiveSessionCompactionState(u,u.compactionState)).updated)u.compactionState=void 0}if(!j.prompt?.trim())await this.updateStatus(u,"completed",0)}let x0;try{if(j.prompt?.trim())if(x0=await this.executeTurn(u,{prompt:j.prompt,userImages:j.userImages,userFiles:j.userFiles}),!u.interactive)await this.finalizeSingleRun(u,x0.finishReason);else await this.completeInteractiveTurn(u,x0.finishReason)}catch(I){if(u.interactive&&u.aborting)x0=await this.completeAbortedInteractiveTurn(u);else{F2(u.config.telemetry,{component:"core",operation:"session.start",error:I,severity:"error",handled:!1,context:{sessionId:u.sessionId,providerId:u.config.providerId,modelId:u.config.modelId}});try{await this.failSession(u)}catch(H0){u.config.logger?.error?.("Session failure cleanup threw",{sessionId:u.sessionId,error:H0})}throw I}}return{sessionId:Z,manifest:U,manifestPath:G,messagesPath:K,result:x0}}async restoreSession($){return this.sessionVersioning.restoreCheckpoint({...$,getSession:(Z)=>this.getSession(Z),readMessages:(Z)=>this.readSessionMessages(Z),buildStartInput:(Z,Q)=>{let J=Z.restoredCheckpointMetadata?{...Q.sessionMetadata??{},checkpoint:Z.restoredCheckpointMetadata}:Q.sessionMetadata;return{...Q,...J?{sessionMetadata:J}:{},initialMessages:Z.initialMessages}},startSession:(Z)=>this.startSession(Z),getStartedSessionId:(Z)=>Z.sessionId,cleanupStartedSession:async(Z)=>{if(!await this.deleteSession(Z.sessionId))throw Error(`Failed to clean up restored session ${Z.sessionId}`)},readRestoredSession:(Z)=>this.getSession(Z)})}async runTurn($){let Z=this.getSessionOrThrow($.sessionId),Q=Z.agent.canStartRun(),J=$.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:J??"immediate"}}),J==="queue"||J==="steer"){this.pendingPromptsController.enqueue($.sessionId,{prompt:$.prompt,mode:$.mode,delivery:J,userImages:$.userImages,userFiles:$.userFiles});return}try{let W=await this.executeTurn(Z,{prompt:$.prompt,mode:$.mode,userImages:$.userImages,userFiles:$.userFiles});if(!Z.interactive)await this.finalizeSingleRun(Z,W.finishReason);else await this.completeInteractiveTurn(Z,W.finishReason);if(W.finishReason==="error"||W.finishReason==="aborted")return W;return queueMicrotask(()=>{this.pendingPromptsController.drain($.sessionId)}),W}catch(W){if(Z.interactive&&Z.aborting)return await this.completeAbortedInteractiveTurn(Z);throw F2(Z.config.telemetry,{component:"core",operation:"session.submit",error:W,severity:"error",handled:!1,context:{sessionId:Z.sessionId,providerId:Z.config.providerId,modelId:Z.config.modelId}}),await this.failSession(Z),W}}async getAccumulatedUsage($){let Z=iX(this.usageBySession.get($)),Q=iX(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&&!_0(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&&!_0(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 lY(Z);let Q=$.trim();if(!Q)return;let J=await this.getRow(Q);if(J)return z5(J);let W=await this.readManifest(Q);return W?y7(W):void 0}async listSessions($=200){let Q=(await this.listRows($)).map(z5),J=new Set(Q.map((W)=>W.sessionId));for(let W of this.sessions.values()){if(J.has(W.sessionId))continue;Q.unshift(lY(W))}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 updateSessionCompactionState($,Z){let Q=$.trim();if(!Q)return{updated:!1};let J=this.sessions.get(Q),W=J?void 0:await this.getSession(Q);if(!(J??W))return{updated:!1};if(J){let Y=await this.readSessionMessages(Q),V=Z.source_message_count>0&&Y.length>=Z.source_message_count,B=V?Y:void 0;if(V){if(!await this.canPersistCompactionState(Q,Z,J,void 0,Y))return{updated:!1};J.agent.restore(Y)}return await this.persistActiveSessionCompactionState(J,Z,B)}if(!await this.canPersistCompactionState(Q,Z,void 0,W))return{updated:!1};let j=await this.invokeOptionalValue("readSessionCompactionState",Q);if(CA(Z,j))return{updated:!1};return await this.invoke("persistSessionCompactionState",Q,Z),{updated:!0}}async readSessionCompactionState($){let Z=$.trim();if(!Z)return;let Q=this.sessions.get(Z);if(Q)for(;;){let J=Q.compactionStateWriteQueue;if(!J)return Q.compactionState;await J.catch(()=>{return})}return await this.invokeOptionalValue("readSessionCompactionState",Z)}isCompactionStateForSession($,Z,Q,J){let W=Z.conversation_id?.trim();if(!W)return!0;if(W===$)return!0;let X=Q?.agent.getConversationId()?.trim()||J?.conversationId?.trim();return X?W===X:!1}async canPersistCompactionState($,Z,Q,J,W){if(!Z.conversation_id?.trim())return!1;if(!this.isCompactionStateForSession($,Z,Q,J))return!1;let X=W??Q?.agent.getMessages()??await this.readSessionMessages($);return x$(Z,X)!==void 0}async persistActiveSessionCompactionState($,Z,Q){if(!await this.canPersistCompactionState($.sessionId,Z,$,void 0,Q))return{updated:!1};return await this.enqueueCompactionStateWrite($,async()=>{let J=$.compactionState,W=J!==void 0&&x$(J,Q??$.agent.getMessages())!==void 0;if(J&&(W?CA(Z,J):Date.parse(Z.updated_at)<Date.parse(J.updated_at)))return{updated:!1};return await this.invoke("persistSessionCompactionState",$.sessionId,Z),$.compactionState=Z,{updated:!0}})}async enqueueCompactionStateWrite($,Z){let J=($.compactionStateWriteQueue??Promise.resolve()).catch(()=>{return}).then(Z),W=J.then(()=>{return},()=>{return});$.compactionStateWriteQueue=W;try{return await J}finally{if($.compactionStateWriteQueue===W)$.compactionStateWriteQueue=void 0}}async readLiveSessionMessages($){let Z=$.trim();if(!Z)return[];let Q=this.sessions.get(Z);if(Q){let J=Q.agent.getMessages();if(J.length>0)return J}return this.readSessionMessages(Z)}async readSessionMessages($){let Z=$.trim();if(!Z)return[];let Q=await this.getRow(Z);if(Q?.messagesPath)return Y2(Q.messagesPath);let J=await this.readManifest(Z);return Y2(J?.messages_path)}async dispatchHookEvent($){await wD($,{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){await this.updateSessionConnection($,{modelId:Z})}async updateSessionConnection($,Z){let Q=u2(Z),J=this.getSessionOrThrow($);if(Q.providerId!==void 0)J.config.providerId=Q.providerId;if(Q.modelId!==void 0)J.config.modelId=Q.modelId;if(Q.apiKey!==void 0)J.config.apiKey=Q.apiKey;if(Q.baseUrl!==void 0)J.config.baseUrl=Q.baseUrl;if(Q.headers!==void 0)J.config.headers=Q.headers;if(Q.providerConfig!==void 0)J.config.providerConfig=Q.providerConfig;if(Object.hasOwn(Q,"reasoningEffort"))J.config.reasoningEffort=Q.reasoningEffort??void 0;if(Object.hasOwn(Q,"thinkingBudgetTokens"))J.config.thinkingBudgetTokens=Q.thinkingBudgetTokens??void 0;if(Object.hasOwn(Q,"thinking")){if(J.config.thinking=Q.thinking??void 0,Q.thinking===!1||Q.thinking===null)J.config.reasoningEffort=void 0,J.config.thinkingBudgetTokens=void 0}let W={...Q.providerId!==void 0?{providerId:Q.providerId}:{},...Q.modelId!==void 0?{modelId:Q.modelId}:{},...Q.apiKey!==void 0?{apiKey:Q.apiKey}:{},...Q.baseUrl!==void 0?{baseUrl:Q.baseUrl}:{},...Q.headers!==void 0?{headers:Q.headers}:{},...Q.providerConfig!==void 0?{providerConfig:Q.providerConfig}:{},...Object.hasOwn(Q,"reasoningEffort")?{reasoningEffort:Q.reasoningEffort??void 0}:{},...Object.hasOwn(Q,"thinking")?{thinking:Q.thinking??void 0}:{},...Object.hasOwn(Q,"thinkingBudgetTokens")?{thinkingBudgetTokens:Q.thinkingBudgetTokens??void 0}:{}};if(Q.thinking===!1||Q.thinking===null)W.reasoningEffort=void 0,W.thinkingBudgetTokens=void 0;let X={...Q.apiKey!==void 0?{apiKey:Q.apiKey}:{},...Q.baseUrl!==void 0?{baseUrl:Q.baseUrl}:{},...Q.headers!==void 0?{headers:Q.headers}:{}};if(J.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults(W),J.agent.updateConnection(Q),J.runtime.teamRuntime?.updateTeammateConnections(X),Q.providerId||Q.modelId)await this.mutateSessionManifest(J,(j)=>{if(Q.providerId)j.provider=Q.providerId;if(Q.modelId)j.model=Q.modelId})}async mutateSessionManifest($,Z){let Q=$.artifacts;if(!Q)return;let J=$.sessionId,X=(this.manifestMutationQueues.get(J)??Promise.resolve()).then(async()=>{let Y=await this.invokeOptionalValue("readSessionManifest",J)??Q.manifest;return Z(Y),Q.manifest=Y,await this.invoke("writeSessionManifest",Q.manifestPath,Y),Y}),j=X.then(()=>{return},()=>{return});this.manifestMutationQueues.set(J,j);try{return await X}finally{if(this.manifestMutationQueues.get(J)===j)this.manifestMutationQueues.delete(J)}}handlePluginEvent($,Z,Q){return this.eventBridge.handlePluginEvent($,Z,Q)}async executeTurn($,Z){let Q=await this.prepareTurnInput($,Z),J=Q.prompt.trim(),W=Q?.userImages?.length,X=Q?.userFiles?.length;if(!J&&!W&&!X)throw Error("prompt cannot be empty");if(!$.artifacts&&!$.pendingPrompt)$.pendingPrompt=J;await this.ensureSessionPersisted($),await this.refreshActiveSessionGitMetadata($),await this.syncOAuthCredentials($),await this.markTurnRunning($);try{let j=await this.executeAgentTurn($,J,Q.userImages,Q.userFiles);while(jj($,j.finishReason)){let Y=await Yj($);if(Y.length===0)break;let V=Vj($,Y);j=await this.executeAgentTurn($,V)}return j}finally{await this.refreshActiveSessionGitMetadata($)}}async completeInteractiveTurn($,Z){if(N9($))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(),J=w0();return $.persistedMessages=Q,$.started=$.started||Q.length>0,this.eventBridge.dispatchAgentEvent($.sessionId,$.config,{type:"done",reason:"aborted",text:"",iterations:0,usage:J}),await this.completeInteractiveTurn($,"aborted"),{text:"",usage:J,messages:Q,toolCalls:[],iterations:0,finishReason:"aborted",model:{id:$.config.modelId,provider:$.config.providerId},startedAt:Z,endedAt:Z,durationMs:0}}async executeAgentTurn($,Z,Q,J){let W=$.started||$.agent.getMessages().length>0,X=$.persistedMessages??$.agent.getMessages(),j=this.usageBySession.get($.sessionId)??w0(),Y=this.aggregateUsageBySession.get($.sessionId)??j;$.turnUsageBaseline=j,$.turnAggregateUsageBaseline=Y,$.turnPrimaryUsage=w0(),$.turnUsageByAgent=new Map,OZ($.config.telemetry,$.sessionId,$.config.mode),y8($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,model:$.config.modelId,source:"user",mode:$.config.mode,...this.getSessionAgentTelemetryIdentity($)});try{let V=W?()=>$.agent.continue(Z,Q,J):()=>$.agent.run(Z,Q,J),B=await this.runWithAuthRetry($,V,X);$.started=!0;let H=bQ(B.messages,B,X);$.persistedMessages=H;let K=N5($.turnUsageByAgent?.values()??[]),G=f0(j,B.usage),F=f0(f0(w0(),B.usage),K),U=f0(Y,F);return this.usageBySession.set($.sessionId,G),this.aggregateUsageBySession.set($.sessionId,U),await this.persistSessionMetadata($.sessionId,(_)=>({..._??{},totalCost:G.totalCost,aggregatedAgentsCost:U.totalCost,usage:G,aggregateUsage:U})),await this.invoke("persistSessionMessages",$.sessionId,H,$.config.systemPrompt),this.observeTaskCompletionTool($,B),B}catch(V){throw F2($.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((J)=>J.name===F0.SUBMIT_AND_EXIT&&J.error===void 0))return;$.submitAndExitObserved=!0,q4($.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=B$($.config),J=Bc(Z.prompt).trim();if(!J)return{prompt:"",userImages:Z.userImages,userFiles:this.resolveAbsoluteFilePaths($.config.cwd,Z.userFiles)};let W=await J6(J,Q);jU($.config.telemetry,W);let X=f9(W.prompt,Z.mode??$.config.mode),j=this.resolveAbsoluteFilePaths($.config.cwd,Z.userFiles),Y=this.resolveAbsoluteFilePaths(Q,W.matchedFiles),V=Array.from(new Set([...j,...Y]));return{prompt:X,userImages:Z.userImages,userFiles:V.length>0?V:void 0}}async ensureSessionPersisted($){if($.artifacts)return;let Z=B$($.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 refreshActiveSessionGitMetadata($,Z){try{let Q=Z??await i3(B$($.config));if(!Q||!$.artifacts)return;if(l3($.artifacts.manifest.metadata,Q))return;await this.persistSessionMetadata($.sessionId,(J)=>VZ({...J??{},...$.sessionMetadata??{}},Q))}catch(Q){$.config.logger?.debug?.("Failed to refresh session git metadata",{sessionId:$.sessionId,error:Q})}}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($),J=await this.invokeOptionalValue("readSessionManifest",$)??Q?.artifacts?.manifest,W=Z(J?.metadata);if(!Q?.artifacts)return;if((await this.invokeOptionalValue("updateSession",{sessionId:$,metadata:W}))?.updated===!1)return;Q.sessionMetadata=W,Q.artifacts.manifest.metadata=W}async finalizeSingleRun($,Z){if(N9($))return;let Q=Z==="aborted"||$.aborting,J=Z==="error";await this.shutdownSession($,{status:Q?"cancelled":J?"failed":"completed",exitCode:J?1:0,shutdownReason:J?"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)q4($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"shutdown",...this.getSessionAgentTelemetryIdentity($)});v7($);let Q=[],J=(W,X)=>{Q.push(X),$.config.logger?.log("Session shutdown cleanup failed",{sessionId:$.sessionId,stage:W,error:X,severity:"warn"}),F2($.config.telemetry,{component:"core",operation:"session.shutdown_cleanup",error:X,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:W,status:Z.status,shutdownReason:Z.shutdownReason,providerId:$.config.providerId,modelId:$.config.modelId}})};if($.artifacts){await this.refreshActiveSessionGitMetadata($);try{await this.updateStatus($,Z.status,Z.exitCode)}catch(W){J("update_status",W)}try{await $.agent.shutdown(Z.shutdownReason)}catch(W){J("agent_shutdown",W)}}try{await Promise.resolve($.runtime.shutdown(Z.shutdownReason))}catch(W){J("runtime_shutdown",W)}try{await $.pluginSandboxShutdown?.()}catch(W){J("plugin_sandbox_shutdown",W)}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=[],J=(W,X)=>{Q.push(X),$.config.logger?.log("Session runtime cleanup failed",{sessionId:$.sessionId,stage:W,error:X,severity:"warn"}),F2($.config.telemetry,{component:"core",operation:"session.runtime_cleanup",error:X,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:W,reason:Z,providerId:$.config.providerId,modelId:$.config.modelId}})};try{await $.agent.shutdown(Z)}catch(W){J("agent_shutdown",W)}try{await Promise.resolve($.runtime.shutdown(Z))}catch(W){J("runtime_shutdown",W)}try{await $.pluginSandboxShutdown?.()}catch(W){J("plugin_sandbox_shutdown",W)}if(this.sessions.delete($.sessionId),Q.length>0)throw Q[0]}async updateStatus($,Z,Q){if(!$.artifacts)return;let J=await this.invoke("updateSessionStatus",$.sessionId,Z,Q);if(!J.updated)return;let W=await this.mutateSessionManifest($,(X)=>{if(X.status=Z,_0(Z))delete X.ended_at,X.exit_code=null;else X.ended_at=J.endedAt??V0(),X.exit_code=typeof Q==="number"?Q:null});if(!W)return;$.status=Z,$.updatedAt=J.endedAt??V0(),$.endedAt=_0(Z)?null:W.ended_at,$.exitCode=W.exit_code,this.emitStatus($.sessionId,Z)}async runWithAuthRetry($,Z,Q){try{return await Z()}catch(J){if(!I$($.config.providerId)||!Vc(J))throw J;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(J){if(J instanceof q8)throw Error(`${J.providerId} requires re-authentication.`);throw J}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 o1($);throw F2(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((J)=>J.trim()).filter((J)=>J.length>0).map((J)=>jc(J)?J:oY($,J));return Array.from(new Set(Q))}getSessionAgentTelemetryIdentity($){return V$({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 J=oY(Z),W=`${Q}.messages.json`,X;try{X=Wc($)}catch{return w0()}let j=w0();for(let Y of X){if(!Y.endsWith(".messages.json"))continue;if(Y===W)continue;let V=oY($,Y);if(V===J)continue;let B=await Y2(V);if(B.length===0)continue;j=f0(j,U6(B))}return j}withPersistedAggregateUsageFloor($,Z){let Q=Kc(Z.metadata?.aggregateUsage);if(Q)return Gc($,Q);let J=Z.metadata?.aggregatedAgentsCost;if(typeof J!=="number"||!Number.isFinite(J)||J<=$.totalCost)return $;return{...$,totalCost:J}}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:b1({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($)),EA))}async getRow($){let Z=$.trim();if(!Z)return;return(await this.listRows(EA)).find((J)=>J.sessionId===Z)}async readManifest($){let Z=$.trim();if(!Z)return;return await this.invokeOptionalValue("readSessionManifest",Z)}invoke($,...Z){return NA(this.sessionService,$,...Z)}invokeOptional($,...Z){return fA(this.sessionService,$,...Z)}invokeOptionalValue($,...Z){return RA(this.sessionService,$,...Z)}}function Uc($){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 Dc($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}function DA($={}){let Z=async(J)=>J,Q=new g1({sessionService:new x1(new h1),capabilities:{toolExecutors:{submit:Z}},fetch:$.fetch,telemetry:$.telemetry});return{async startSession(J){let W=(J.cwd?.trim()||J.workspaceRoot).trim(),X=await Q.startSession({source:J.source?.trim()||L0.CLI,interactive:!1,config:{providerId:Fc(J.provider),modelId:J.model,apiKey:J.apiKey?.trim()||void 0,cwd:W,workspaceRoot:J.workspaceRoot,systemPrompt:J.systemPrompt??"",mode:Dc(J),maxIterations:J.maxIterations,enableTools:J.enableTools!==!1,enableSpawnAgent:J.enableSpawn!==!1,enableAgentTeams:J.enableTeams!==!1,disableMcpSettingsTools:J.disableMcpSettingsTools,missionLogIntervalSteps:J.missionStepInterval,missionLogIntervalMs:J.missionTimeIntervalMs},toolPolicies:J.toolPolicies??{"*":{autoApprove:J.autoApproveTools!==!1}},localRuntime:{configExtensions:J.configExtensions}});return{sessionId:X.sessionId,startResult:{sessionId:X.sessionId,manifestPath:X.manifestPath,messagesPath:X.messagesPath}}},async sendSession(J,W){let X=await Q.runTurn({sessionId:J,prompt:W.prompt,userImages:W.attachments?.userImages,userFiles:W.attachments?.userFiles?.map((j)=>j.content)});if(!X)throw Error("local hub schedule runtime returned no turn result");return{result:Uc(X)}},async abortSession(J){return await Q.abort(J,Error("hub schedule abort")),{applied:!0}},async stopSession(J){return await Q.stopSession(J),{applied:!0}}}}import{resolveClineBuildEnv as MO}from"@cline/shared";function _c($){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(`
786
+ `).trim()||void 0}var wA=120,sY="...";function e9($){let Z=$.trim();if(!Z)return"";if(Buffer.byteLength(Z,"utf8")<=wA)return Z;let Q=wA-Buffer.byteLength(sY,"utf8");if(Q<=0)return sY;let J="";for(let W of Z){if(Buffer.byteLength(J+W,"utf8")>Q)break;J+=W}return`${J}${sY}`}async function PA($){let Z=$?.sessionId?.trim()||"unknown",Q=typeof $?.metadata?.messagesPath==="string"?$.metadata.messagesPath:void 0,W=[...await Y2(Q)].reverse().find((V)=>V.role==="assistant"),X=W?_c(W.content):void 0,j=$?.workspaceRoot?.trim()||"workspace",Y=typeof $?.metadata?.prompt==="string"?$.metadata.prompt.trim():j;return{title:`Task completed (${Z})`,body:e9(X&&X.length>0?X:Y.length>0?Y:j),severity:"info"}}import{captureSdkError as c3,createSessionId as Yu}from"@cline/shared";import{createSessionId as qc}from"@cline/shared";import{createSessionId as Oc}from"@cline/shared";function Lc($){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 Ac($){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 g3($,Z,Q,J){return{sessionId:$.sessionId,workspaceRoot:$.workspaceRoot,cwd:$.cwd,createdAt:Date.parse($.startedAt),updatedAt:Date.parse($.updatedAt),createdByClientId:Z?.createdByClientId??"hub",status:Lc($.status),participants:Z?[...Z.participants.values()]:[],metadata:Ac($),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}}:{},...J?{aggregateUsage:{...J}}:{}}}function l($,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 B4($){return $&&typeof $==="object"&&!Array.isArray($)?$:void 0}function k0($){if(typeof $.payload?.sessionId==="string")return $.payload.sessionId.trim();return $.sessionId?.trim()??""}function R8($,Z,Q){return{version:"v1",event:$,eventId:Oc("hevt_"),sessionId:Q,timestamp:Date.now(),payload:Z}}async function I0($,Z){let Q=await $.sessionHost.getSession(Z);if(!Q)return;let J=await $.sessionHost.getAccumulatedUsage?.(Z);return g3(Q,$.sessionState.get(Z),J?.usage,J?.aggregateUsage)}async function o0($,Z){let Q=await $.sessionHost.getSession(Z);if(!Q)return;let[J,W]=await Promise.all([typeof $.sessionHost.readSessionMessages==="function"?$.sessionHost.readSessionMessages(Z):[],$.sessionHost.getAccumulatedUsage?.(Z)]);return b1({session:Q,messages:J,usage:W?.usage,aggregateUsage:W?.aggregateUsage})}function tY($,Z,Q,J,W={}){let X=$.sessionState.get(Z);if(X){if(W.interactive!==void 0)X.interactive=W.interactive;if(J==="creator"&&!X.createdByClientId)X.createdByClientId=Q;if(!X.participants.has(Q))X.participants.set(Q,{clientId:Q,attachedAt:Date.now(),role:J});return X}let j={createdByClientId:Q,interactive:W.interactive??!0,participants:new Map([[Q,{clientId:Q,attachedAt:Date.now(),role:J}]])};return $.sessionState.set(Z,j),j}function SA($,Z,Q,J,W={}){let X=$.sessionState.get(Z);if(X){if(W.interactive!==void 0)X.interactive=W.interactive;if(!X.participants.has(Q))X.participants.set(Q,{clientId:Q,attachedAt:Date.now(),role:J});return X}let j={interactive:W.interactive??!0,participants:new Map([[Q,{clientId:Q,attachedAt:Date.now(),role:J}]])};return $.sessionState.set(Z,j),j}async function eY($,Z){let Q=qc("approval_"),J=Z.sessionId;if($.sessionState.get(J)?.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:J,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},J))})}function $V($,Z,Q){let J=$.pendingApprovals.get(Z);if(!J)return;return $.pendingApprovals.delete(Z),J.resolve(Q),{sessionId:J.sessionId}}function ZV($,Z,Q){let J=0;for(let[W,X]of[...$.pendingApprovals.entries()]){if(!Z({approvalId:W,sessionId:X.sessionId}))continue;$.pendingApprovals.delete(W),X.resolve({approved:!1,reason:Q}),$.publish($.buildEvent("approval.resolved",{approvalId:W,approved:!1,cancelled:!0,reason:Q},X.sessionId)),J+=1}return J}async function bA($,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 W=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,j=$V($,Q,{approved:X,reason:W});if(!j)return x(Z,"approval_not_found",`Unknown approval: ${Q}`);return $.publish($.buildEvent("approval.resolved",{approvalId:Q,approved:X,reason:W},j.sessionId)),l(Z,{approvalId:Q,approved:X})}import{createSessionId as Nc}from"@cline/shared";function zc($){if($ instanceof Error)return{name:$.name,message:$.message,stack:$.stack};if($===void 0)return;return $}var yA={debug:10,info:20,warn:30,error:40,silent:50};function Tc(){let $=process.env.CLINE_HUB_LOG_LEVEL?.trim().toLowerCase();if($==="debug"||$==="info"||$==="warn"||$==="error"||$==="silent")return $;return process.env.VITEST?"error":"info"}function a($,Z,Q={}){if(yA[$]<yA[Tc()])return;let J=JSON.stringify({ts:new Date().toISOString(),level:$,component:"hub",message:Z,...Object.fromEntries(Object.entries(Q).map(([W,X])=>[W,zc(X)]).filter(([,W])=>W!==void 0))});if($==="error"||$==="warn"){console.error(`[hub] ${J}`);return}console.log(`[hub] ${J}`)}function QV($,Z){let Q=Z instanceof Error?Z.stack||Z.message:String(Z);a("error",$,{error:Q})}async function kA($,Z,Q,J,W,X){let j=Nc("capreq_"),Y=performance.now();return a("info","capability.request.start",{requestId:j,sessionId:Z,capabilityName:Q,targetClientId:W}),await new Promise((V,B)=>{$.pendingCapabilityRequests.set(j,{sessionId:Z,targetClientId:W,capabilityName:Q,onProgress:X,resolve:(H)=>{if(a(H.ok?"info":"warn","capability.request.end",{requestId:j,sessionId:Z,capabilityName:Q,targetClientId:W,ok:H.ok,error:H.error,durationMs:Math.round(performance.now()-Y)}),!H.ok){B(Error(H.error||`Capability ${Q} was rejected by ${W}.`));return}V(H.payload)}}),$.publish($.buildEvent("capability.requested",{requestId:j,targetClientId:W,capabilityName:Q,payload:J},Z)),a("info","capability.request.published",{requestId:j,sessionId:Z,capabilityName:Q,targetClientId:W})})}function hA($,Z){let Q=typeof Z.payload?.requestId==="string"?Z.payload.requestId.trim():"",J=$.pendingCapabilityRequests.get(Q);if(!J)return x(Z,"capability_not_found",`Unknown capability request: ${Q}`);if((Z.clientId?.trim()||"")!==J.targetClientId)return x(Z,"capability_wrong_client",`Capability request ${Q} is owned by ${J.targetClientId}`);if(Z.sessionId?.trim()&&Z.sessionId.trim()!==J.sessionId)return x(Z,"capability_wrong_session",`Capability request ${Q} belongs to session ${J.sessionId}`);let X=Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)?Z.payload.payload:{};return J.onProgress?.(X),l(Z,{requestId:Q})}function U2($,Z,Q){let J=0;for(let[W,X]of[...$.pendingCapabilityRequests.entries()]){if(!Z({requestId:W,...X}))continue;$.pendingCapabilityRequests.delete(W),a("warn","capability.request.cancelled",{requestId:W,sessionId:X.sessionId,capabilityName:X.capabilityName,targetClientId:X.targetClientId,reason:Q}),X.resolve({ok:!1,error:Q}),$.publish($.buildEvent("capability.resolved",{requestId:W,capabilityName:X.capabilityName,targetClientId:X.targetClientId,ok:!1,cancelled:!0,error:Q},X.sessionId)),J+=1}return J}async function IA($,Z){let Q=typeof Z.payload?.sessionId==="string"?Z.payload.sessionId.trim():Z.sessionId?.trim()||"",J=typeof Z.payload?.capabilityName==="string"?Z.payload.capabilityName.trim():"",W=typeof Z.payload?.targetClientId==="string"?Z.payload.targetClientId.trim():"";if(!Q||!J||!W)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:{},j=await $.requestCapability(Q,J,X,W);return l(Z,j)}catch(X){return x(Z,"capability_request_failed",X instanceof Error?X.message:String(X))}}function xA($,Z){let Q=typeof Z.payload?.requestId==="string"?Z.payload.requestId.trim():"",J=$.pendingCapabilityRequests.get(Q);if(!J)return x(Z,"capability_not_found",`Unknown capability request: ${Q}`);let W=Z.clientId?.trim()||"";if(W!==J.targetClientId)return x(Z,"capability_wrong_client",`Capability request ${Q} is owned by ${J.targetClientId}`);if(Z.sessionId?.trim()&&Z.sessionId.trim()!==J.sessionId)return x(Z,"capability_wrong_session",`Capability request ${Q} belongs to session ${J.sessionId}`);$.pendingCapabilityRequests.delete(Q);let X=Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)?Z.payload.payload:void 0,j=typeof Z.payload?.error==="string"?Z.payload.error:void 0,Y=Z.payload?.ok===!0;return a(Y?"info":"warn","capability.respond",{requestId:Q,sessionId:J.sessionId,capabilityName:J.capabilityName,targetClientId:J.targetClientId,respondedByClientId:W,ok:Y,error:j}),J.resolve({ok:Y,payload:X,error:j}),$.publish($.buildEvent("capability.resolved",{requestId:Q,capabilityName:J.capabilityName,targetClientId:J.targetClientId,respondedByClientId:W,ok:Y,payload:X,error:j},J.sessionId)),l(Z,{requestId:Q,ok:Y})}import{createSessionId as fc}from"@cline/shared";function gA($,Z){let Q=Z.payload,J=Q?.clientId?.trim()||Z.clientId?.trim()||fc("client_");return $.clients.set(J,{clientId:J,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:J,clientType:Q?.clientType??"unknown",displayName:Q?.displayName,connectedAt:Date.now()})),l(Z,{clientId:J})}function vA($,Z){let Q=Z.clientId?.trim(),J=Q?$.clients.get(Q):void 0;if(!Q||!J)return x(Z,"client_not_found","Client is not registered with this hub.");let W=B4(Z.payload?.metadata);if(J.lastSeenAt=Date.now(),W)J.metadata=JSON.parse(JSON.stringify(W));return l(Z)}function mA($,Z,Q){let J=Z.clientId?.trim();if(J)$.clients.delete(J),Q(J),$.publish($.buildEvent("hub.client.disconnected",{clientId:J}));return l(Z)}function cA($,Z){return l(Z,{clients:[...$.clients.values()]})}import{buildConnectorConnectArgs as Rc,CONNECTOR_PLATFORMS as Mc,connectorChannelsFromPlatforms as Ec,listConnectorCatalog as Cc,mergeConnectorConnectArgs as wc,shouldIncludeConnectorField as Pc}from"@cline/shared";import{withConnectorStore as WV}from"@cline/shared/db";C0();function v3($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function dA($){return typeof $==="string"?$.trim():void 0}function uA($){if(!v3($))return{};let Z={};for(let[Q,J]of Object.entries($))if(typeof J==="string")Z[Q]=J.trim();return Z}function Sc(){return WV(($)=>$.listConfigs()).map(($)=>({id:$.channel,type:$.type,configuredAt:$.configuredAt,updatedAt:$.updatedAt})).sort(($,Z)=>$.type.localeCompare(Z.type))}function XV(){return{available:Ec(),active:b9(),configured:Sc()}}function bc($,Z){if($.required&&!Z[$.flag]?.trim())throw Error(`${$.label} is required`)}function yc($,Z){let Q={};for(let W of $.fields)Q[W.flag]=Z[W.flag]??W.initialValue??"";let J={};for(let W of $.fields){if(!Pc(W,Q))continue;bc(W,Q),J[W.flag]=Q[W.flag]}return J}function kc($){if(!v3($))throw Error("connector.configure payload must be an object.");let Z=dA($.channel);if(!Z)throw Error("channel is required");let Q=Mc.find((K)=>K.id===Z);if(!Q)throw Error(`unknown connector channel: ${Z}`);if(!new Set(Cc().map((K)=>K.name)).has(Q.id))throw Error(`connector channel is not available: ${Z}`);let W=uA($.values),X=yc(Q,W),j=v3($.security)?$.security:{},Y=j.enabled===!0,V=uA(j.values);if(Y&&Q.security)for(let K of Q.security.fields){let G=V[K.key];if(!G)throw Error(K.requiredMessage);let F=K.validate?.(G);if(F)throw Error(F)}let B=Y?{enabled:!0,values:V}:{enabled:!1,values:{}},H=Rc(Q,X,B);return WV((K)=>K.upsertConfig({channel:Z,type:Z,values:X,security:B,updateConnectArgs:(G)=>wc(Q,G.connection.connectArgs,H,{replaceSecurityArgs:G.config?.security?.enabled===!0||B.enabled})})),XV()}function hc($){if(!v3($))throw Error("connector.delete_config payload must be an object.");let Z=dA($.channel);if(!Z)throw Error("channel is required");return WV((Q)=>Q.deleteConfig(Z)),XV()}function Ic($){return $==="connector.configure"||$==="connector.delete_config"}function JV($,Z,Q){if(!Ic(Z.command))return;k8($.telemetry,{ulid:Z.sessionId??Z.requestId??"hub",tool:Z.command,success:Q})}async function pA($,Z){try{if(Z.command==="connector.channels")return l(Z,XV());if(Z.command==="connector.configure"){let Q=kc(Z.payload);return JV($,Z,!0),l(Z,Q)}if(Z.command==="connector.delete_config"){let Q=hc(Z.payload);return JV($,Z,!0),l(Z,Q)}return x(Z,"unsupported_connector_command",`unsupported connector command: ${Z.command}`)}catch(Q){return JV($,Z,!1),x(Z,"connector_command_failed",Q instanceof Error?Q.message:String(Q))}}var xc=30000;function gc($){if($==="aborted")return"run.aborted";if($==="error"||$==="failed")return"run.failed";return"run.completed"}function vc($){if($.finishReason!=="error")return;return $.text.trim()||void 0}function mc($,Z,Q){let J=Q instanceof Error&&Q.message.trim()?Q.message:`Unknown session: ${Z}`;return x($,z2,J)}function cc($){return $?$:void 0}function uc($){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 dc($,Z,Q,J){let W=performance.now(),X=!1,j={command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Q.sessionId,timeoutMs:J},Y=setInterval(()=>{if(X)return;let H=Math.round(performance.now()-W);a("warn","run.heartbeat",{...j,elapsedMs:H}),$.publish($.buildEvent("run.heartbeat",{requestId:Z.requestId,elapsedMs:H,...J?{timeoutMs:J}:{}},Q.sessionId))},xc),V=$.sessionHost.runTurn(Q);V.then((H)=>{if(!X)return;a("warn","run.late_end",{...j,elapsedMs:Math.round(performance.now()-W),finishReason:H?.finishReason})},(H)=>{if(!X)return;a("error","run.late_error",{...j,elapsedMs:Math.round(performance.now()-W),error:H})});let B;try{if(!J)return await V;return await Promise.race([V,new Promise((H,K)=>{B=setTimeout(()=>{let G=`Hub run ${Z.command} timed out after ${J}ms.`;X=!0,clearInterval(Y),K(Error(G)),a("error","run.timeout",{...j,elapsedMs:Math.round(performance.now()-W)}),ZV($,(F)=>F.sessionId===Q.sessionId,G),U2($,(F)=>F.sessionId===Q.sessionId,G),$.sessionHost.abort(Q.sessionId,G).catch((F)=>{a("error","run.timeout_abort_failed",{...j,error:F})})},J)})])}finally{if(X=!0,clearInterval(Y),B)clearTimeout(B)}}async function lA($,Z){let Q=k0(Z),J=Z.payload&&typeof Z.payload==="object"?Z.payload:{},W=typeof J.prompt==="string"?J.prompt:typeof J.input==="string"?J.input:"";if(!W.trim())return x(Z,"invalid_session_input","session input requires a prompt string");$.publish($.buildEvent("run.started",void 0,Q));let X=J.attachments&&typeof J.attachments==="object"&&!Array.isArray(J.attachments)?J.attachments:void 0,j=Array.isArray(X?.userFiles)?X.userFiles.filter((H)=>typeof H==="string"):void 0,Y=uc(J);$.suppressNextTerminalEventBySession.set(Q,"run.start.reply");let V;try{V=await dc($,Z,{sessionId:Q,prompt:W,mode:cc(J.mode),delivery:J.delivery==="queue"||J.delivery==="steer"?J.delivery:void 0,userImages:Array.isArray(X?.userImages)?X.userImages:void 0,userFiles:j,timeoutMs:Y},Y)}catch(H){if($.suppressNextTerminalEventBySession.get(Q)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Q);if(s1(H))return mc(Z,Q,H);throw $.publish($.buildEvent("run.failed",{reason:"error",error:H instanceof Error?H.message:String(H)},Q)),H}if(V){let H=await o0($,Q),K=vc(V);if($.publish($.buildEvent(gc(V.finishReason),{reason:V.finishReason,...K?{error:K}:{},result:V,...H?{snapshot:H}:{}},Q)),$.suppressNextTerminalEventBySession.get(Q)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Q)}else $.suppressNextTerminalEventBySession.delete(Q);let B=await o0($,Q);return l(Z,V||B?{...V?{result:V}:{},...B?{snapshot:B}:{}}:void 0)}async function iA($,Z){let Q=k0(Z),J=typeof Z.payload?.reason==="string"?Z.payload.reason:"Run was aborted before pending approval or capability request was resolved.";ZV($,(W)=>W.sessionId===Q,J);try{await $.sessionHost.abort(Q,Z.payload?.reason)}catch(W){a("warn","run.abort_failed",{command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Q,error:W})}finally{U2($,(W)=>W.sessionId===Q,J)}return l(Z,{applied:!0})}async function rA($,Z){let Q=s6(Z.payload?.payload);if(!Q)return x(Z,"invalid_hook_payload","session.hook requires a valid hook event payload");return await $.sessionHost.dispatchHookEvent(Q),l(Z,{applied:!0})}async function nA($,Z){switch(Z.type){case"chunk":return;case"agent_event":await pc($,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,J]=await Promise.all([I0($,Z.payload.sessionId),o0($,Z.payload.sessionId)]);if(Q)$.publish($.buildEvent("session.updated",{session:Q,...J?{snapshot:J}:{}},Z.payload.sessionId));return}case"ended":await lc($,Z);return;default:return}}async function pc($,Z){let{sessionId:Q,event:J}=Z.payload;if(J.type==="iteration_start"){$.publish($.buildEvent("iteration.started",{iteration:J.iteration},Q));return}if(J.type==="iteration_end"){$.publish($.buildEvent("iteration.finished",{iteration:J.iteration,hadToolCalls:J.hadToolCalls,toolCallCount:J.toolCallCount},Q));return}if(J.type==="content_start"){if(J.contentType==="text"&&typeof J.text==="string"&&J.text.length>0){$.publish($.buildEvent("assistant.delta",{text:J.text},Q));return}if(J.contentType==="reasoning"){if(J.redacted&&!J.reasoning){$.publish($.buildEvent("reasoning.delta",{text:"",redacted:!0},Q));return}if(typeof J.reasoning==="string"&&J.reasoning.length>0)$.publish($.buildEvent("reasoning.delta",{text:J.reasoning,redacted:J.redacted===!0},Q));return}if(J.contentType==="tool"){$.publish($.buildEvent("tool.started",{toolCallId:J.toolCallId,toolName:J.toolName,input:J.input},Q));return}}if(J.type==="content_end"){switch(J.contentType){case"text":$.publish($.buildEvent("assistant.finished",{text:J.text},Q));break;case"reasoning":$.publish($.buildEvent("reasoning.finished",{reasoning:J.reasoning},Q));break;case"tool":$.publish($.buildEvent("tool.finished",{toolCallId:J.toolCallId,toolName:J.toolName,output:J.output,error:J.error},Q));break}return}if(J.type==="notice"){$.publish($.buildEvent("session.notice",{sessionId:Q,message:J.message,noticeType:J.noticeType,...J.displayRole?{displayRole:J.displayRole}:{},...J.reason?{reason:J.reason}:{},...J.metadata?{metadata:J.metadata}:{},agent:{kind:Z.payload.teamRole==="teammate"?"teammate":J.parentAgentId?"subagent":"lead",agentId:J.agentId,conversationId:J.conversationId,parentAgentId:J.parentAgentId,teamAgentId:Z.payload.teamAgentId,teamRole:Z.payload.teamRole}},Q));return}if(J.type==="usage"){let W;try{W=await $.sessionHost.getAccumulatedUsage?.(Q)}catch{W=void 0}$.publish($.buildEvent("usage.updated",{sessionId:Q,delta:{inputTokens:J.inputTokens,outputTokens:J.outputTokens,cacheReadTokens:J.cacheReadTokens??0,cacheWriteTokens:J.cacheWriteTokens??0,totalCost:J.cost??0},totals:{inputTokens:J.totalInputTokens,outputTokens:J.totalOutputTokens,cacheReadTokens:J.totalCacheReadTokens??0,cacheWriteTokens:J.totalCacheWriteTokens??0,totalCost:J.totalCost??0},usage:W?.usage,aggregateUsage:W?.aggregateUsage,agent:{kind:Z.payload.teamRole==="teammate"?"teammate":J.parentAgentId?"subagent":"lead",agentId:J.agentId,conversationId:J.conversationId,parentAgentId:J.parentAgentId,teamAgentId:Z.payload.teamAgentId,teamRole:Z.payload.teamRole}},Q));return}if(J.type==="done")$.publish($.buildEvent("agent.done",{reason:J.reason,text:J.text,iterations:J.iterations,usage:J.usage},Q))}async function lc($,Z){let Q=$.suppressNextTerminalEventBySession.get(Z.payload.sessionId),J=Q===Z.payload.reason||Q==="run.start.reply";if(J)$.suppressNextTerminalEventBySession.delete(Z.payload.sessionId);let[W,X]=await Promise.all([I0($,Z.payload.sessionId),o0($,Z.payload.sessionId)]);if(Z.payload.reason==="completed"){let j=await PA(W);$.publish($.buildEvent("ui.notify",j,Z.payload.sessionId))}if(J)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 tA,parseRuntimeConfigExtensions as eA,ReasoningEffortSchema as Qu}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as N40,HUB_COMPACTION_CAPABILITY as f40,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as R40,HUB_HOOK_CAPABILITY_PREFIX as M40,HUB_MISTAKE_LIMIT_CAPABILITY as E40,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as C40,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as w40,isHubToolExecutorName as ic}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as k40,HUB_COMPACTION_CAPABILITY as h40,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as I40,HUB_HOOK_CAPABILITY_PREFIX as x40,HUB_MISTAKE_LIMIT_CAPABILITY as g40,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as v40,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as m40}from"@cline/shared";var rc=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function M8($){return $&&typeof $==="object"&&!Array.isArray($)?JSON.parse(JSON.stringify($)):void 0}function nc($,Z){let Q=typeof $.name==="string"?$.name.trim():"",J=typeof $.description==="string"?$.description:"",W=typeof $.capabilityName==="string"?$.capabilityName.trim():"",X=M8($.inputSchema);if(!Q||!J||!X||!W||Z.has(W))return;return Z.add(W),{kind:"tool",capabilityName:W,name:Q,description:J,inputSchema:X,...M8($.lifecycle)?{lifecycle:M8($.lifecycle)}:{}}}function YV($){if(!Array.isArray($))return[];let Z=[],Q=new Set;for(let J of $){if(!J||typeof J!=="object"||Array.isArray(J))continue;let W=J,X=W.kind,j=typeof W.capabilityName==="string"?W.capabilityName.trim():"";if(!j||Q.has(j))continue;if(X==="tool"){let Y=nc(W,Q);if(Y)Z.push(Y);continue}if(X==="toolExecutor"){let Y=W.executor;if(!ic(Y))continue;Q.add(j),Z.push({kind:"toolExecutor",capabilityName:j,executor:Y});continue}if(X==="hook"){let Y=typeof W.name==="string"?W.name.trim():"";if(!Y)continue;Q.add(j),Z.push({kind:"hook",capabilityName:j,name:Y});continue}if(X==="compaction"){Q.add(j),Z.push({kind:"compaction",capabilityName:j,...M8(W.config)?{config:M8(W.config)}:{}});continue}if(X==="checkpoint"){Q.add(j),Z.push({kind:"checkpoint",capabilityName:j,...M8(W.config)?{config:M8(W.config)}:{}});continue}if(X==="mistakeLimit"){Q.add(j),Z.push({kind:"mistakeLimit",capabilityName:j});continue}if(X==="userInstructionService")Q.add(j),Z.push({kind:"userInstructionService",capabilityName:j})}return Z}function oA($){let Z=$.metadata?{...$.metadata}:void 0;return{agentId:$.agentId,conversationId:$.conversationId,iteration:$.iteration,metadata:Z&&Object.keys(Z).length>0?Z:void 0}}function ac($){return Object.hasOwn($,"update")?$.update:$}function WZ($){return $.trim().replace(/^\/+/,"").toLowerCase()}function oc($){let Z=($??[]).map(WZ).filter(Boolean);return Z.length>0?new Set(Z):void 0}function sc($,Z,Q){if(!Q)return!0;let J=WZ($),W=WZ(Z),X=J.includes(":")?J.split(":").at(-1)??J:J,j=W.includes(":")?W.split(":").at(-1)??W:W;return Q.has(J)||Q.has(W)||Q.has(X)||Q.has(j)}function jV($,Z){let Q=oc(Z);return $.records.skill.map((J)=>({id:J.id,name:J.item.name,description:"description"in J.item&&typeof J.item.description==="string"?J.item.description:void 0,disabled:J.item.disabled===!0,skill:J.item})).filter((J)=>sc(J.id,J.name,Q))}function aA($,Z){let Q=async(J,W)=>{let X=WZ(J),Y=jV($,Z).filter((G)=>G.id===X||WZ(G.name)===X||G.id.endsWith(`:${X}`)).filter((G)=>!G.disabled);if(Y.length!==1)return Y.length>1?`Skill "${J}" is ambiguous. Use one of: ${Y.map((G)=>G.id).join(", ")}`:`Skill "${J}" not found.`;let V=Y[0].skill,B=W?.trim(),H=B?`
787
787
  <command-args>${B}</command-args>`:"",K=V.description?.trim()?`Description: ${V.description.trim()}
788
788
 
789
789
  `:"";return`<command-name>${V.name}</command-name>${H}
790
790
  <command-instructions>
791
791
  ${K}${V.instructions}
792
- </command-instructions>`};return Object.defineProperty(Q,"configuredSkills",{get:()=>XV($,Z).map(({skill:J,...W})=>W),enumerable:!0}),Q}function ic($,Z,Q,J){let W={records:{skill:[],rule:[],workflow:[]},runtimeCommands:[]},X=async()=>{let j=await J($,Q.capabilityName,{},Z);if(j?.snapshot)W=j.snapshot};return{start:X,stop:()=>{},refreshType:async()=>{await X()},listRecords:(j)=>[...W.records[j]],listRuntimeCommands:()=>[...W.runtimeCommands],resolveRuntimeSlashCommand:(j)=>{if(!j.startsWith("/")||j.length<2)return j;let V=j.match(/^\/(\S+)/)?.[1];if(!V)return j;let B=W.runtimeCommands.find((H)=>H.name===V);return B?`${B.instructions}${j.slice(V.length+1)}`:j},hasConfiguredSkills:(j)=>XV(W,j).some((Y)=>!Y.disabled),createSkillsExecutor:(j)=>nA(W,j),createExtension:(j)=>({name:"cline-hub-user-instructions",manifest:{capabilities:[j.includeRules?"rules":void 0,j.registerSkillsTool?"tools":void 0,j.includeSkills||j.includeWorkflows?"commands":void 0].filter((Y)=>Boolean(Y))},setup(Y){if(j.includeRules)Y.registerRule({id:"cline-hub-user-instructions:rules",source:"hub-user-instructions",content:()=>E8(W.records.rule.map((V)=>V.item).filter((V)=>V.disabled!==!0))});if(j.registerSkillsTool)Y.registerTool(k2(nA(W,j.allowedSkillNames)));for(let V of W.runtimeCommands.filter((B)=>B.kind==="skill"&&j.includeSkills||B.kind==="workflow"&&j.includeWorkflows))Y.registerCommand({name:V.name,description:V.description,handler:(B)=>{let H=B.trim();return H?`${V.instructions}
792
+ </command-instructions>`};return Object.defineProperty(Q,"configuredSkills",{get:()=>jV($,Z).map(({skill:J,...W})=>W),enumerable:!0}),Q}function tc($,Z,Q,J){let W={records:{skill:[],rule:[],workflow:[]},runtimeCommands:[]},X=async()=>{let j=await J($,Q.capabilityName,{},Z);if(j?.snapshot)W=j.snapshot};return{start:X,stop:()=>{},refreshType:async()=>{await X()},listRecords:(j)=>[...W.records[j]],listRuntimeCommands:()=>[...W.runtimeCommands],resolveRuntimeSlashCommand:(j)=>{if(!j.startsWith("/")||j.length<2)return j;let V=j.match(/^\/(\S+)/)?.[1];if(!V)return j;let B=W.runtimeCommands.find((H)=>H.name===V);return B?`${B.instructions}${j.slice(V.length+1)}`:j},hasConfiguredSkills:(j)=>jV(W,j).some((Y)=>!Y.disabled),createSkillsExecutor:(j)=>aA(W,j),createExtension:(j)=>({name:"cline-hub-user-instructions",manifest:{capabilities:[j.includeRules?"rules":void 0,j.registerSkillsTool?"tools":void 0,j.includeSkills||j.includeWorkflows?"commands":void 0].filter((Y)=>Boolean(Y))},setup(Y){if(j.includeRules)Y.registerRule({id:"cline-hub-user-instructions:rules",source:"hub-user-instructions",content:()=>C8(W.records.rule.map((V)=>V.item).filter((V)=>V.disabled!==!0))});if(j.registerSkillsTool)Y.registerTool(h2(aA(W,j.allowedSkillNames)));for(let V of W.runtimeCommands.filter((B)=>B.kind==="skill"&&j.includeSkills||B.kind==="workflow"&&j.includeWorkflows))Y.registerCommand({name:V.name,description:V.description,handler:(B)=>{let H=B.trim();return H?`${V.instructions}
793
793
 
794
- ${H}`:V.instructions}})}})}}function rc($,Z,Q,J){let W=Q.map((X)=>[X.executor,async(...j)=>{let Y=j.at(-1),V=j.slice(0,-1);return(await J($,X.capabilityName,{executor:X.executor,args:V,context:aA(Y)},Z))?.result}]);return W.length>0?Object.fromEntries(W):void 0}function nc($,Z,Q,J){if(Q.length===0)return;return Q.map((W)=>({name:W.name,description:W.description,inputSchema:W.inputSchema,lifecycle:W.lifecycle,async execute(X,j){return(await J($,W.capabilityName,{toolName:W.name,input:X,context:aA(j)},Z,j.emitUpdate?(V)=>{j.emitUpdate?.(dc(V))}:void 0))?.result}}))}function ac($,Z,Q,J){let W=new Map(Q.map((j)=>[j.name,j])),X={};for(let j of cc){let Y=W.get(j);if(!Y)continue;X[j]=async(V)=>{return(await J($,Y.capabilityName,{context:V},Z))?.control}}return Object.keys(X).length>0?X:void 0}function YV($){let Z=$.contributions.filter((V)=>V.kind==="toolExecutor"),Q=$.contributions.filter((V)=>V.kind==="tool"),J=$.contributions.filter((V)=>V.kind==="hook"),W=$.contributions.find((V)=>V.kind==="compaction"),X=$.contributions.find((V)=>V.kind==="checkpoint"),j=$.contributions.find((V)=>V.kind==="mistakeLimit"),Y=$.contributions.find((V)=>V.kind==="userInstructionService");return{hasClientContributions:$.contributions.length>0,toolExecutors:rc($.sessionId,$.targetClientId,Z,$.requestCapability),localRuntime:{...J.length>0?{hooks:ac($.sessionId,$.targetClientId,J,$.requestCapability)}:{},...Q.length>0?{extraTools:nc($.sessionId,$.targetClientId,Q,$.requestCapability)}:{},...W?{compaction:{...$.sessionConfig?.compaction??{},...W.config,compact:async(V)=>{return(await $.requestCapability($.sessionId,W.capabilityName,{context:V},$.targetClientId))?.result}}}:{},...X?{checkpoint:{...$.sessionConfig?.checkpoint??{},...X.config,createCheckpoint:async(V)=>{return(await $.requestCapability($.sessionId,X.capabilityName,{context:V},$.targetClientId))?.result}}}:{},...j?{onConsecutiveMistakeLimitReached:async(V)=>{return(await $.requestCapability($.sessionId,j.capabilityName,{context:V},$.targetClientId))?.result}}:{},...Y?{userInstructionService:ic($.sessionId,$.targetClientId,Y,$.requestCapability)}:{}}}}var oA="hubCapabilityOwnerClientId";function m3($){return typeof $==="string"&&$.trim().length>0?$.trim():void 0}function sc($){if($===null)return null;let Z=oc.safeParse($);return Z.success?Z.data:void 0}function tc($){let Z=B4($)??{},Q={},J=m3(Z.providerId);if(J)Q.providerId=J;let W=m3(Z.modelId);if(W)Q.modelId=W;let X=m3(Z.apiKey);if(X!==void 0)Q.apiKey=X;let j=m3(Z.baseUrl);if(j!==void 0)Q.baseUrl=j;if(Z.headers&&typeof Z.headers==="object")Q.headers=Z.headers;if(Z.providerConfig&&typeof Z.providerConfig==="object")Q.providerConfig=Z.providerConfig;if(Object.hasOwn(Z,"thinking")){if(typeof Z.thinking==="boolean"||Z.thinking===null)Q.thinking=Z.thinking}if(Object.hasOwn(Z,"reasoningEffort")){let Y=sc(Z.reasoningEffort);if(Y!==void 0)Q.reasoningEffort=Y}if(Object.hasOwn(Z,"thinkingBudgetTokens")){if(typeof Z.thinkingBudgetTokens==="number"&&Number.isFinite(Z.thinkingBudgetTokens)&&Z.thinkingBudgetTokens>0)Q.thinkingBudgetTokens=Math.trunc(Z.thinkingBudgetTokens);else if(Z.thinkingBudgetTokens===null)Q.thinkingBudgetTokens=null}return c2(Q)}function ec($,Z){return $.sessionState.get(Z)?.createdByClientId}function $u($){if(!$||!(oA in $))return $;let Z={...$};return delete Z[oA],Z}function eA($){let Z=ec($.ctx,$.sessionId);if(!Z)return x($.envelope,"session_wrong_client",`Session ${$.sessionId} has no owner`);if(Z!==$.clientId)return x($.envelope,"session_wrong_client",`Session ${$.sessionId} is owned by ${Z}`);return}async function $O($,Z,Q){let J=performance.now(),W={command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Z.sessionId};a("info","session.create.begin",W);let X=Z.payload&&typeof Z.payload==="object"?Z.payload:{},j=X.metadata&&typeof X.metadata==="object"?JSON.parse(JSON.stringify(X.metadata)):{},Y=X.sessionConfig&&typeof X.sessionConfig==="object"?JSON.parse(JSON.stringify(X.sessionConfig)):void 0,V=X.runtimeOptions&&typeof X.runtimeOptions==="object"?X.runtimeOptions:{},B=D1(X.initialCompactionState);if(typeof Y?.mode==="string")j.mode=Y.mode;else if(typeof V.mode==="string")j.mode=V.mode;if(typeof Y?.systemPrompt==="string")j.systemPrompt=Y.systemPrompt;else if(typeof V.systemPrompt==="string")j.systemPrompt=V.systemPrompt;if(Y?.checkpoint?.enabled===!0)j.checkpointEnabled=!0;else if(V.checkpointEnabled===!0)j.checkpointEnabled=!0;let H=X.modelSelection&&typeof X.modelSelection==="object"?X.modelSelection:{},K=typeof X.workspaceRoot==="string"&&X.workspaceRoot.trim()?X.workspaceRoot.trim():typeof X.cwd==="string"&&X.cwd.trim()?X.cwd.trim():void 0,G=Z.clientId?.trim()||"hub-client",F=jV(V.clientContributions);a("info","session.create.contributions_parsed",{...W,clientId:G,workspaceRoot:K,cwd:typeof X.cwd==="string"?X.cwd:void 0,contributionCount:F.length});let _=(typeof Y?.sessionId==="string"?Y.sessionId.trim():"")||sA(),L=tA(V.configExtensions);a("info","session.create.runtime_build.begin",{...W,sessionId:_,configExtensionCount:L?.length??0});let O=YV({sessionId:_,targetClientId:G,contributions:F,sessionConfig:Y,requestCapability:$.requestCapability});a("info","session.create.start_session.begin",{...W,sessionId:_,provider:Y?.providerId??(typeof H.provider==="string"?H.provider:typeof j.provider==="string"?j.provider:"hub"),model:Y?.modelId??(typeof H.model==="string"?H.model:typeof j.model==="string"?j.model:"hub")});let D=await $.sessionHost.startSession({source:typeof j.source==="string"?j.source:void 0,interactive:j.interactive!==!1,sessionMetadata:Object.keys(j).length>0?j:void 0,initialMessages:Array.isArray(X.initialMessages)?X.initialMessages:void 0,initialCompactionState:B,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:L,...O.localRuntime},capabilities:{toolExecutors:O.toolExecutors,requestToolApproval:Q},config:{...Y??{},sessionId:_,providerId:Y?.providerId??(typeof H.provider==="string"?H.provider:typeof j.provider==="string"?j.provider:"hub"),modelId:Y?.modelId??(typeof H.model==="string"?H.model:typeof j.model==="string"?j.model:"hub"),apiKey:Y?.apiKey??(typeof H.apiKey==="string"?H.apiKey:void 0),cwd:Y?.cwd??(typeof X.cwd==="string"&&X.cwd.trim()?X.cwd.trim():K),workspaceRoot:Y?.workspaceRoot??K,systemPrompt:Y?.systemPrompt??(typeof V.systemPrompt==="string"?V.systemPrompt:""),mode:Y?.mode??(V.mode==="plan"||V.mode==="yolo"?V.mode:"act"),maxIterations:Y?.maxIterations??(typeof V.maxIterations==="number"?V.maxIterations:void 0),enableTools:Y?.enableTools??V.enableTools!==!1,enableSpawnAgent:Y?.enableSpawnAgent??V.enableSpawn!==!1,enableAgentTeams:Y?.enableAgentTeams??V.enableTeams!==!1,checkpoint:Y?.checkpoint??(V.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:Y?.teamName??(typeof j.teamName==="string"?j.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});a("info","session.create.start_session.end",{...W,sessionId:D.sessionId,elapsedMs:Math.round(performance.now()-J),hasImmediateResult:!!D.result}),sY($,D.sessionId,G,"creator",{interactive:j.interactive!==!1}),a("info","session.create.read_records.begin",{...W,sessionId:D.sessionId});let[q,T]=await Promise.all([I0($,D.sessionId),o0($,D.sessionId)]);if(a("info","session.create.read_records.end",{...W,sessionId:D.sessionId,hasSession:!!q,hasSnapshot:!!T,elapsedMs:Math.round(performance.now()-J)}),q)$.publish($.buildEvent("session.created",{session:q,...T?{snapshot:T}:{}},D.sessionId));return a("info","session.create.reply",{...W,sessionId:D.sessionId,elapsedMs:Math.round(performance.now()-J)}),l(Z,{session:q,...T?{snapshot:T}:{}})}async function ZO($,Z,Q){let J=Z.payload&&typeof Z.payload==="object"?Z.payload:{},W=typeof J.sessionId==="string"?J.sessionId.trim():Z.sessionId?.trim()||"",X=J.checkpointRunCount;if(!W)return x(Z,"invalid_restore","session.restore requires a session id");let j=J.restore&&typeof J.restore==="object"?J.restore:{},Y=j.messages!==!1;if(typeof X!=="number")return x(Z,"invalid_restore","checkpointRunCount must be a positive integer");try{let V=J.sessionConfig&&typeof J.sessionConfig==="object"?JSON.parse(JSON.stringify(J.sessionConfig)):void 0;if(Y&&!V)return x(Z,"invalid_restore","sessionConfig is required when restore.messages is true");let B=J.runtimeOptions&&typeof J.runtimeOptions==="object"?J.runtimeOptions:{},H=D1(J.initialCompactionState),K=J.metadata&&typeof J.metadata==="object"?JSON.parse(JSON.stringify(J.metadata)):{};if(typeof V?.mode==="string")K.mode=V.mode;else if(typeof B.mode==="string")K.mode=B.mode;if(typeof V?.systemPrompt==="string")K.systemPrompt=V.systemPrompt;else if(typeof B.systemPrompt==="string")K.systemPrompt=B.systemPrompt;if(V?.checkpoint?.enabled===!0)K.checkpointEnabled=!0;else if(B.checkpointEnabled===!0)K.checkpointEnabled=!0;let G=J.modelSelection&&typeof J.modelSelection==="object"?J.modelSelection:{},F=Z.clientId?.trim()||"hub-client",U=jV(B.clientContributions),L=(typeof V?.sessionId==="string"?V.sessionId.trim():"")||sA(),O=tA(B.configExtensions),D=YV({sessionId:L,targetClientId:F,contributions:U,sessionConfig:V,requestCapability:$.requestCapability}),T=await new K2().restoreCheckpoint({sessionId:W,checkpointRunCount:X,restore:{messages:j.messages,workspace:j.workspace,omitCheckpointMessageFromSession:j.omitCheckpointMessageFromSession===!0},start:V,cwd:typeof V?.cwd==="string"&&V.cwd.trim()||typeof V?.workspaceRoot==="string"&&V.workspaceRoot.trim()||void 0,getSession:(N)=>$.sessionHost.getSession(N),readMessages:(N)=>$.sessionHost.readSessionMessages(N),buildStartInput:(N)=>{if(N.restoredCheckpointMetadata)K.checkpoint=N.restoredCheckpointMetadata;let S=typeof J.workspaceRoot==="string"&&J.workspaceRoot.trim()?J.workspaceRoot.trim():typeof J.cwd==="string"&&J.cwd.trim()?J.cwd.trim():N.sourceSession.workspaceRoot||N.sourceSession.cwd;return{source:typeof K.source==="string"?K.source:void 0,interactive:K.interactive!==!1,sessionMetadata:{...K,restoredFromSessionId:W,restoredCheckpointRunCount:X},initialMessages:N.initialMessages,initialCompactionState:H,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:O,...D.localRuntime},capabilities:{toolExecutors:D.toolExecutors,requestToolApproval:Q},config:{...V??{},sessionId:L,providerId:V?.providerId??(typeof G.provider==="string"?G.provider:N.sourceSession.provider),modelId:V?.modelId??(typeof G.model==="string"?G.model:N.sourceSession.model),apiKey:V?.apiKey??(typeof G.apiKey==="string"?G.apiKey:""),cwd:V?.cwd??N.plan.cwd,workspaceRoot:V?.workspaceRoot??S,systemPrompt:V?.systemPrompt??(typeof B.systemPrompt==="string"?B.systemPrompt:""),mode:V?.mode??(B.mode==="plan"||B.mode==="yolo"?B.mode:"act"),maxIterations:V?.maxIterations??(typeof B.maxIterations==="number"?B.maxIterations:void 0),enableTools:V?.enableTools??B.enableTools!==!1,enableSpawnAgent:V?.enableSpawnAgent??B.enableSpawn!==!1,enableAgentTeams:V?.enableAgentTeams??B.enableTeams!==!1,checkpoint:V?.checkpoint??(B.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:V?.teamName??(typeof K.teamName==="string"?K.teamName:void 0)},toolPolicies:J.toolPolicies&&typeof J.toolPolicies==="object"&&!Array.isArray(J.toolPolicies)?JSON.parse(JSON.stringify(J.toolPolicies)):B.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0}},startSession:(N)=>$.sessionHost.startSession(N),getStartedSessionId:(N)=>N.sessionId,cleanupStartedSession:async(N)=>{if(!await $.sessionHost.deleteSession(N.sessionId))throw Error(`Failed to clean up restored session ${N.sessionId}`)},readRestoredSession:(N)=>$.sessionHost.getSession(N)});if(!Y)return l(Z,{checkpoint:T.checkpoint});let z=T.startResult;if(!z)return x(Z,"restore_failed","Checkpoint restore did not start a session");sY($,z.sessionId,F,"creator",{interactive:K.interactive!==!1});let[A,R]=await Promise.all([I0($,z.sessionId),o0($,z.sessionId)]);if(A)$.publish($.buildEvent("session.created",{session:A,...R?{snapshot:R}:{}},z.sessionId));return l(Z,{session:A,...R?{snapshot:R}:{},messages:T.messages??[],checkpoint:T.checkpoint})}catch(V){if(V instanceof d0)return x(Z,V.code,V.code==="session_not_found"?`Unknown session: ${W}`:V.message);return x(Z,"restore_failed",V instanceof Error?V.message:String(V))}}async function QO($,Z){let Q=k0(Z);if(!Q)return x(Z,"invalid_session_attach","session.attach requires a session id");let J=await I0($,Q);if(!J)return x(Z,"session_not_found",`Unknown session: ${Q}`);PA($,Q,Z.clientId?.trim()||"hub-client","participant");let W=await I0($,Q);return $.publish($.buildEvent("session.attached",{session:W??J},Q)),l(Z,{session:W??J})}async function JO($,Z){let Q=k0(Z);if(!Q)return x(Z,"invalid_session_detach","session.detach requires a session id");let J=Z.clientId?.trim()||"hub-client",W=$.sessionState.get(Q);if(W){if(W.participants.delete(J),W.createdByClientId===J)W.createdByClientId=void 0;if(W.participants.size===0)$.sessionState.delete(Q)}F2($,(Y)=>Y.sessionId===Q&&Y.targetClientId===J,`Capability owner client ${J} detached before request was resolved.`);let[X,j]=await Promise.all([I0($,Q),o0($,Q)]);return $.publish($.buildEvent("session.detached",X?{session:X,...j?{snapshot:j}:{},clientId:J}:{clientId:J},Q)),l(Z)}async function WO($,Z){let Q=k0(Z),J=Z.payload?.includeSnapshot===!0,[W,X]=await Promise.all([I0($,Q),J?o0($,Q):Promise.resolve(void 0)]);return W?l(Z,{session:W,...X?{snapshot:X}:{}}):x(Z,"session_not_found",`Unknown session: ${Q}`)}async function XO($,Z){let Q=k0(Z);if(!Q)return x(Z,"invalid_session_id","session.messages requires a session id");if(!await I0($,Q))return x(Z,"session_not_found",`Unknown session: ${Q}`);let W=await $.sessionHost.readSessionMessages(Q);return l(Z,{sessionId:Q,messages:W})}async function jO($,Z){let Q=k0(Z);if(!Q)return x(Z,"invalid_session_id","session.compaction.get requires a session id");if(!await I0($,Q))return x(Z,"session_not_found",`Unknown session: ${Q}`);let W=Z.clientId?.trim()||"hub-client",X=eA({sessionId:Q,ctx:$,clientId:W,envelope:Z});if(X)return X;let j=await $.sessionHost.readSessionCompactionState(Q);return l(Z,{sessionId:Q,state:j})}async function YO($,Z){let Q=typeof Z.payload?.limit==="number"?Z.payload.limit:200,W=(await $.sessionHost.listSessions(Q)).map((X)=>g3(X,$.sessionState.get(X.sessionId)));return l(Z,{sessions:W})}async function VO($,Z){let Q=k0(Z),J=$u(B4(Z.payload?.metadata)),W=await $.sessionHost.updateSession(Q,{metadata:J}),[X,j]=await Promise.all([I0($,Q),o0($,Q)]);if(X)$.publish($.buildEvent("session.updated",{session:X,...j?{snapshot:j}:{}},Q));return{version:Z.version,requestId:Z.requestId,ok:W.updated,payload:{updated:W.updated,session:X,...j?{snapshot:j}:{}}}}async function BO($,Z){let Q=k0(Z);if(!Q)return x(Z,"invalid_session_update_connection","session.update_connection requires a session id");let J=$.sessionHost.updateSessionConnection;if(!J)return x(Z,"unsupported_session_update_connection","runtime host does not support session connection updates");let W=B4(Z.payload),X=tc(W?.updates);return await J.call($.sessionHost,Q,X),l(Z,{sessionId:Q,updated:!0})}async function HO($,Z){let Q=k0(Z);if(!Q)return x(Z,"invalid_session_id","session.compaction.update requires a session id");let J=Z.clientId?.trim()||"hub-client",W=await I0($,Q);if(!W)return x(Z,"session_not_found",`Unknown session: ${Q}`);let X=eA({sessionId:Q,ctx:$,clientId:J,envelope:Z});if(X)return X;let j=Z.payload&&typeof Z.payload==="object"?Z.payload:{},Y=D1(j.state);if(!Y)return x(Z,"invalid_compaction_state","session.compaction.update requires a valid compaction state");let V=await $.sessionHost.updateSessionCompactionState(Q,Y),[B,H]=V.updated?await Promise.all([I0($,Q),o0($,Q)]):[W,void 0];if(V.updated)$.publish($.buildEvent("session.updated",{session:B??W,...H?{snapshot:H}:{}},Q));return{version:Z.version,requestId:Z.requestId,ok:!0,payload:{updated:V.updated,session:B??W,...H?{snapshot:H}:{}}}}async function KO($,Z){let Q=k0(Z),J=await $.sessionHost.deleteSession(Q);return $.sessionState.delete(Q),l(Z,{deleted:J})}async function GO($,Z){let Q=k0(Z),J=$.sessionHost.pendingPrompts;if(!J)return x(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let W=await J.list({sessionId:Q});return l(Z,{sessionId:Q,prompts:W})}async function FO($,Z){let Q=k0(Z),J=typeof Z.payload?.promptId==="string"?Z.payload.promptId.trim():"",W=typeof Z.payload?.prompt==="string"?Z.payload.prompt:void 0,X=Z.payload?.delivery==="queue"||Z.payload?.delivery==="steer"?Z.payload.delivery:void 0,j=$.sessionHost.pendingPrompts;if(!j)return x(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let Y=await j.update({sessionId:Q,promptId:J,prompt:W,delivery:X});return l(Z,Y)}async function UO($,Z){let Q=k0(Z),J=typeof Z.payload?.promptId==="string"?Z.payload.promptId.trim():"",W=$.sessionHost.pendingPrompts;if(!W)return x(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let X=await W.delete({sessionId:Q,promptId:J});return l(Z,X)}function DO($){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 Qu=new Set(["skills","workflows","rules","tools","mcp"]);function VV($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function XZ($,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 Ju($,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 _O($){if($===void 0)return{};if(!VV($))throw Error("settings.list payload must be an object.");return{cwd:XZ($,"cwd"),workspaceRoot:XZ($,"workspaceRoot"),availabilityContext:VV($.availabilityContext)?$.availabilityContext:void 0}}function Wu($){if(!VV($))throw Error("settings.toggle payload must be an object.");let{type:Z}=$;if(typeof Z!=="string"||!Qu.has(Z))throw Error("settings.toggle payload 'type' must be one of: skills, workflows, rules, tools, mcp.");return{..._O($),type:Z,id:XZ($,"id"),path:XZ($,"path"),name:XZ($,"name"),enabled:Ju($,"enabled")}}class V4{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=Zu("hub_");ctx;constructor($){this.options=$;if(this.sessionHost=$.sessionHost??new g1({sessionService:new x1(new h1),fetch:$.fetch,logger:$.logger,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:f8,requestCapability:(Z,Q,J,W,X)=>yA(this.ctx,Z,Q,J,W,X)},this.schedules=new S8({...$.scheduleOptions,runtimeHandlers:$.runtimeHandlers,eventPublisher:(Z,Q)=>{let J=Z==="schedule.execution.completed"?"schedule.execution_completed":Z==="schedule.execution.failed"?"schedule.execution_failed":void 0;if(!J)return;this.publish(f8(J,Q&&typeof Q==="object"?Q:void 0))}}),this.scheduleCommands=new M8(this.schedules),this.settings=$.settingsService??new X2,$.cronOptions)this.cronService=new U9({runtimeHandlers:$.runtimeHandlers,...$.cronOptions});this.sessionHost.subscribe((Z)=>{rA(this.ctx,Z).catch((Q)=>{ZV("session event handling failed",Q),c3(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())eY(this.ctx,$,{approved:!1,reason:"Hub shutting down before approval was resolved."});if(F2(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 c3(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 xA(this.ctx,$);case"client.update":return gA(this.ctx,$);case"client.unregister":return vA(this.ctx,$,(Z)=>{this.listeners.delete(Z),this.detachClientFromSessions(Z)});case"client.list":return mA(this.ctx,$);case"session.create":return await $O(this.ctx,$,(Z)=>tY(this.ctx,Z));case"session.restore":return await ZO(this.ctx,$,(Z)=>tY(this.ctx,Z));case"session.attach":return await QO(this.ctx,$);case"session.detach":return await JO(this.ctx,$);case"session.get":return await WO(this.ctx,$);case"session.messages":return await XO(this.ctx,$);case"session.compaction.get":return await jO(this.ctx,$);case"session.list":return await YO(this.ctx,$);case"session.update":return await VO(this.ctx,$);case"session.update_connection":return await BO(this.ctx,$);case"session.compaction.update":return await HO(this.ctx,$);case"session.pending_prompts":return await GO(this.ctx,$);case"session.update_pending_prompt":return await FO(this.ctx,$);case"session.remove_pending_prompt":return await UO(this.ctx,$);case"session.delete":return await KO(this.ctx,$);case"session.hook":return await iA(this.ctx,$);case"run.start":case"session.send_input":return await pA(this.ctx,$);case"run.abort":return await lA(this.ctx,$);case"capability.request":return await hA(this.ctx,$);case"approval.respond":return await SA(this.ctx,$);case"capability.respond":return IA(this.ctx,$);case"capability.progress":return kA(this.ctx,$);case"ui.notify":return this.publish(f8("ui.notify",$.payload??{})),l($);case"ui.show_window":return this.publish(f8("ui.show_window",$.payload??{})),l($);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 dA(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=DO($.command);if(Q)this.publish(f8(Q,Z.payload))}return Z}}}captureFailedReply($,Z){if(Z.ok||!Z.error||!Xu(Z.error.code))return;c3(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(_O($.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(Wu($.payload));return this.publish(f8("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 J=this.listeners.get($)??new Set,W={sessionId:Q?.sessionId,listener:Z};return J.add(W),this.listeners.set($,J),()=>{let X=this.listeners.get($);if(!X)return;if(X.delete(W),X.size===0)this.listeners.delete($)}}detachClientFromSessions($){for(let[Z,Q]of this.sessionState.entries()){if(Q.participants.delete($),Q.createdByClientId===$)Q.createdByClientId=void 0;if(Q.participants.size===0)this.sessionState.delete(Z)}F2(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(J){ZV(`listener threw while publishing ${$.event}`,J),c3(this.options.telemetry,{component:"core",operation:"hub.publish",error:J,severity:"warn",handled:!0,context:{event:$.event,sessionId:$.sessionId}})}}}}function Xu($){return $==="session_not_found"||$==="session_messages_not_found"||$==="hub_command_timeout"||$.endsWith("_failed")}import{timingSafeEqual as Bu}from"node:crypto";import Hu from"node:http";import Ku from"node:net";import{URL as GV}from"node:url";import{CURRENT_HUB_PROTOCOL_VERSION as OO,HUB_CAPABILITIES as Gu,isHubProtocolCompatible as Fu,MAX_CLIENT_HUB_PROTOCOL_VERSION as qO,MIN_CLIENT_HUB_PROTOCOL_VERSION as zO}from"@cline/shared";import{WebSocketServer as Uu}from"ws";import{captureSdkError as LO,HUB_COMMAND_SLOW_LOG_MS as ju,resolveHubCommandTimeoutMs as Yu,safeJsonParse as Vu}from"@cline/shared";function BV($){return{command:$.envelope.command,requestId:$.envelope.requestId,clientId:$.envelope.clientId,sessionId:$.envelope.sessionId}}function AO($,Z,Q){return{version:$.envelope.version,requestId:$.envelope.requestId,ok:!1,error:{code:Z,message:Q}}}class $Z{transport;telemetry;constructor($,Z){this.transport=$;this.telemetry=Z}attach($){let Z=new Map,Q=new Set,J=!1,W=(V)=>{try{$.send(JSON.stringify(V))}catch(B){console.error(`[hub] failed to send websocket frame: ${B instanceof Error?B.stack||B.message:String(B)}`)}},X=(V)=>{W({kind:"event",envelope:V})},j=async(V)=>{try{let B=JSON.parse(V.data);switch(B.kind){case"command":{let H=performance.now(),K=!1,G=BV(B);a("info","command.start",G);let F=setTimeout(()=>{if(K)return;a("warn","command.slow",{...G,elapsedMs:Math.round(performance.now()-H)})},ju),U=this.transport.command(B.envelope);U.then((T)=>{if(!K)return;a(T.ok?"warn":"error","command.late_end",{...G,elapsedMs:Math.round(performance.now()-H),ok:T.ok,errorCode:T.error?.code,errorMessage:T.error?.message})},(T)=>{if(!K)return;a("error","command.late_error",{...G,elapsedMs:Math.round(performance.now()-H),error:T})});let _=!1,L,O,D=Yu(B.envelope.command,B.envelope.timeoutMs);try{O=D===null?await U:await Promise.race([U,new Promise((T)=>{L=setTimeout(()=>{_=!0,LO(this.telemetry,{component:"core",operation:"hub.command_timeout",error:Error(`Hub command ${B.envelope.command} did not complete within ${D}ms.`),severity:"error",handled:!0,context:{...G,timeoutMs:D}}),T(AO(B,"hub_command_timeout",`Hub command ${B.envelope.command} did not complete within ${D}ms. Check hub-daemon.log for command.start/command.slow logs with requestId ${B.envelope.requestId}.`))},D)})])}catch(T){if(clearTimeout(F),L)clearTimeout(L);throw T}if(K=_,clearTimeout(F),L)clearTimeout(L);let q=Math.round(performance.now()-H);if(_)a("error","command.timeout",{...G,durationMs:q,timeoutMs:D});else a(O.ok?"info":"warn","command.end",{...G,durationMs:q,ok:O.ok,errorCode:O.error?.code,errorMessage:O.error?.message});if(B.envelope.command==="client.register"&&O.ok){let z=(B.envelope.payload??{}).clientId?.trim()||B.envelope.clientId?.trim();if(z)Q.add(z)}else if(B.envelope.command==="client.unregister"&&O.ok){let T=B.envelope.clientId?.trim();if(T)Q.delete(T)}W({kind:"reply",envelope:O});break}case"stream.subscribe":{let H=`${B.clientId}:${B.sessionId??"*"}`;if(Z.has(H))break;let K=await this.transport.subscribe(B.clientId,X,{sessionId:B.sessionId});Z.set(H,K);break}case"stream.unsubscribe":{let H=`${B.clientId}:${B.sessionId??"*"}`;Z.get(H)?.(),Z.delete(H);break}case"reply":case"event":break}}catch(B){let H=typeof V.data==="string"?Vu(V.data):void 0;if(!H||H.kind!=="command"){a("error","rejected malformed websocket frame",{error:B});return}a("error","command.error",{...BV(H),error:B}),LO(this.telemetry,{component:"core",operation:"hub.websocket_command",error:B,severity:"error",handled:!0,context:BV(H)}),W({kind:"reply",envelope:AO(H,"command_failed",B instanceof Error?B.message:"Unknown hub error")})}},Y=()=>{if(J)return;J=!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",j),$.removeEventListener("close",Y)};return $.addEventListener("message",j),$.addEventListener("close",Y),Y}}class ZZ{transport;constructor($){this.transport=$}command($){return this.transport.handleCommand($)}subscribe($,Z,Q){return this.transport.subscribe($,Z,Q)}}function Du($){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 _u($){return{send(Z){$.send(Z)},addEventListener(Z,Q){if(Z==="message"){$.on("message",(J)=>{Q({data:Du(J)})});return}$.on("close",Q)},removeEventListener(){}}}function Lu($){try{$.write(`HTTP/1.1 400 Bad Request\r
794
+ ${H}`:V.instructions}})}})}}function ec($,Z,Q,J){let W=Q.map((X)=>[X.executor,async(...j)=>{let Y=j.at(-1),V=j.slice(0,-1);return(await J($,X.capabilityName,{executor:X.executor,args:V,context:oA(Y)},Z))?.result}]);return W.length>0?Object.fromEntries(W):void 0}function $u($,Z,Q,J){if(Q.length===0)return;return Q.map((W)=>({name:W.name,description:W.description,inputSchema:W.inputSchema,lifecycle:W.lifecycle,async execute(X,j){return(await J($,W.capabilityName,{toolName:W.name,input:X,context:oA(j)},Z,j.emitUpdate?(V)=>{j.emitUpdate?.(ac(V))}:void 0))?.result}}))}function Zu($,Z,Q,J){let W=new Map(Q.map((j)=>[j.name,j])),X={};for(let j of rc){let Y=W.get(j);if(!Y)continue;X[j]=async(V)=>{return(await J($,Y.capabilityName,{context:V},Z))?.control}}return Object.keys(X).length>0?X:void 0}function VV($){let Z=$.contributions.filter((V)=>V.kind==="toolExecutor"),Q=$.contributions.filter((V)=>V.kind==="tool"),J=$.contributions.filter((V)=>V.kind==="hook"),W=$.contributions.find((V)=>V.kind==="compaction"),X=$.contributions.find((V)=>V.kind==="checkpoint"),j=$.contributions.find((V)=>V.kind==="mistakeLimit"),Y=$.contributions.find((V)=>V.kind==="userInstructionService");return{hasClientContributions:$.contributions.length>0,toolExecutors:ec($.sessionId,$.targetClientId,Z,$.requestCapability),localRuntime:{...J.length>0?{hooks:Zu($.sessionId,$.targetClientId,J,$.requestCapability)}:{},...Q.length>0?{extraTools:$u($.sessionId,$.targetClientId,Q,$.requestCapability)}:{},...W?{compaction:{...$.sessionConfig?.compaction??{},...W.config,compact:async(V)=>{return(await $.requestCapability($.sessionId,W.capabilityName,{context:V},$.targetClientId))?.result}}}:{},...X?{checkpoint:{...$.sessionConfig?.checkpoint??{},...X.config,createCheckpoint:async(V)=>{return(await $.requestCapability($.sessionId,X.capabilityName,{context:V},$.targetClientId))?.result}}}:{},...j?{onConsecutiveMistakeLimitReached:async(V)=>{return(await $.requestCapability($.sessionId,j.capabilityName,{context:V},$.targetClientId))?.result}}:{},...Y?{userInstructionService:tc($.sessionId,$.targetClientId,Y,$.requestCapability)}:{}}}}var sA="hubCapabilityOwnerClientId";function m3($){return typeof $==="string"&&$.trim().length>0?$.trim():void 0}function Ju($){if($===null)return null;let Z=Qu.safeParse($);return Z.success?Z.data:void 0}function Wu($){let Z=B4($)??{},Q={},J=m3(Z.providerId);if(J)Q.providerId=J;let W=m3(Z.modelId);if(W)Q.modelId=W;let X=m3(Z.apiKey);if(X!==void 0)Q.apiKey=X;let j=m3(Z.baseUrl);if(j!==void 0)Q.baseUrl=j;if(Z.headers&&typeof Z.headers==="object")Q.headers=Z.headers;if(Z.providerConfig&&typeof Z.providerConfig==="object")Q.providerConfig=Z.providerConfig;if(Object.hasOwn(Z,"thinking")){if(typeof Z.thinking==="boolean"||Z.thinking===null)Q.thinking=Z.thinking}if(Object.hasOwn(Z,"reasoningEffort")){let Y=Ju(Z.reasoningEffort);if(Y!==void 0)Q.reasoningEffort=Y}if(Object.hasOwn(Z,"thinkingBudgetTokens")){if(typeof Z.thinkingBudgetTokens==="number"&&Number.isFinite(Z.thinkingBudgetTokens)&&Z.thinkingBudgetTokens>0)Q.thinkingBudgetTokens=Math.trunc(Z.thinkingBudgetTokens);else if(Z.thinkingBudgetTokens===null)Q.thinkingBudgetTokens=null}return u2(Q)}function Xu($,Z){return $.sessionState.get(Z)?.createdByClientId}function ju($){if(!$||!(sA in $))return $;let Z={...$};return delete Z[sA],Z}function $O($){let Z=Xu($.ctx,$.sessionId);if(!Z)return x($.envelope,"session_wrong_client",`Session ${$.sessionId} has no owner`);if(Z!==$.clientId)return x($.envelope,"session_wrong_client",`Session ${$.sessionId} is owned by ${Z}`);return}async function ZO($,Z,Q){let J=performance.now(),W={command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Z.sessionId};a("info","session.create.begin",W);let X=Z.payload&&typeof Z.payload==="object"?Z.payload:{},j=X.metadata&&typeof X.metadata==="object"?JSON.parse(JSON.stringify(X.metadata)):{},Y=X.sessionConfig&&typeof X.sessionConfig==="object"?JSON.parse(JSON.stringify(X.sessionConfig)):void 0,V=X.runtimeOptions&&typeof X.runtimeOptions==="object"?X.runtimeOptions:{},B=D1(X.initialCompactionState);if(typeof Y?.mode==="string")j.mode=Y.mode;else if(typeof V.mode==="string")j.mode=V.mode;if(typeof Y?.systemPrompt==="string")j.systemPrompt=Y.systemPrompt;else if(typeof V.systemPrompt==="string")j.systemPrompt=V.systemPrompt;if(Y?.checkpoint?.enabled===!0)j.checkpointEnabled=!0;else if(V.checkpointEnabled===!0)j.checkpointEnabled=!0;let H=X.modelSelection&&typeof X.modelSelection==="object"?X.modelSelection:{},K=typeof X.workspaceRoot==="string"&&X.workspaceRoot.trim()?X.workspaceRoot.trim():typeof X.cwd==="string"&&X.cwd.trim()?X.cwd.trim():void 0,G=Z.clientId?.trim()||"hub-client",F=YV(V.clientContributions);a("info","session.create.contributions_parsed",{...W,clientId:G,workspaceRoot:K,cwd:typeof X.cwd==="string"?X.cwd:void 0,contributionCount:F.length});let _=(typeof Y?.sessionId==="string"?Y.sessionId.trim():"")||tA(),L=eA(V.configExtensions);a("info","session.create.runtime_build.begin",{...W,sessionId:_,configExtensionCount:L?.length??0});let O=VV({sessionId:_,targetClientId:G,contributions:F,sessionConfig:Y,requestCapability:$.requestCapability});a("info","session.create.start_session.begin",{...W,sessionId:_,provider:Y?.providerId??(typeof H.provider==="string"?H.provider:typeof j.provider==="string"?j.provider:"hub"),model:Y?.modelId??(typeof H.model==="string"?H.model:typeof j.model==="string"?j.model:"hub")});let D=await $.sessionHost.startSession({source:typeof j.source==="string"?j.source:void 0,interactive:j.interactive!==!1,sessionMetadata:Object.keys(j).length>0?j:void 0,initialMessages:Array.isArray(X.initialMessages)?X.initialMessages:void 0,initialCompactionState:B,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:L,...O.localRuntime},capabilities:{toolExecutors:O.toolExecutors,requestToolApproval:Q},config:{...Y??{},sessionId:_,providerId:Y?.providerId??(typeof H.provider==="string"?H.provider:typeof j.provider==="string"?j.provider:"hub"),modelId:Y?.modelId??(typeof H.model==="string"?H.model:typeof j.model==="string"?j.model:"hub"),apiKey:Y?.apiKey??(typeof H.apiKey==="string"?H.apiKey:void 0),cwd:Y?.cwd??(typeof X.cwd==="string"&&X.cwd.trim()?X.cwd.trim():K),workspaceRoot:Y?.workspaceRoot??K,systemPrompt:Y?.systemPrompt??(typeof V.systemPrompt==="string"?V.systemPrompt:""),mode:Y?.mode??(V.mode==="plan"||V.mode==="yolo"?V.mode:"act"),maxIterations:Y?.maxIterations??(typeof V.maxIterations==="number"?V.maxIterations:void 0),enableTools:Y?.enableTools??V.enableTools!==!1,enableSpawnAgent:Y?.enableSpawnAgent??V.enableSpawn!==!1,enableAgentTeams:Y?.enableAgentTeams??V.enableTeams!==!1,checkpoint:Y?.checkpoint??(V.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:Y?.teamName??(typeof j.teamName==="string"?j.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});a("info","session.create.start_session.end",{...W,sessionId:D.sessionId,elapsedMs:Math.round(performance.now()-J),hasImmediateResult:!!D.result}),tY($,D.sessionId,G,"creator",{interactive:j.interactive!==!1}),a("info","session.create.read_records.begin",{...W,sessionId:D.sessionId});let[q,T]=await Promise.all([I0($,D.sessionId),o0($,D.sessionId)]);if(a("info","session.create.read_records.end",{...W,sessionId:D.sessionId,hasSession:!!q,hasSnapshot:!!T,elapsedMs:Math.round(performance.now()-J)}),q)$.publish($.buildEvent("session.created",{session:q,...T?{snapshot:T}:{}},D.sessionId));return a("info","session.create.reply",{...W,sessionId:D.sessionId,elapsedMs:Math.round(performance.now()-J)}),l(Z,{session:q,...T?{snapshot:T}:{}})}async function QO($,Z,Q){let J=Z.payload&&typeof Z.payload==="object"?Z.payload:{},W=typeof J.sessionId==="string"?J.sessionId.trim():Z.sessionId?.trim()||"",X=J.checkpointRunCount;if(!W)return x(Z,"invalid_restore","session.restore requires a session id");let j=J.restore&&typeof J.restore==="object"?J.restore:{},Y=j.messages!==!1;if(typeof X!=="number")return x(Z,"invalid_restore","checkpointRunCount must be a positive integer");try{let V=J.sessionConfig&&typeof J.sessionConfig==="object"?JSON.parse(JSON.stringify(J.sessionConfig)):void 0;if(Y&&!V)return x(Z,"invalid_restore","sessionConfig is required when restore.messages is true");let B=J.runtimeOptions&&typeof J.runtimeOptions==="object"?J.runtimeOptions:{},H=D1(J.initialCompactionState),K=J.metadata&&typeof J.metadata==="object"?JSON.parse(JSON.stringify(J.metadata)):{};if(typeof V?.mode==="string")K.mode=V.mode;else if(typeof B.mode==="string")K.mode=B.mode;if(typeof V?.systemPrompt==="string")K.systemPrompt=V.systemPrompt;else if(typeof B.systemPrompt==="string")K.systemPrompt=B.systemPrompt;if(V?.checkpoint?.enabled===!0)K.checkpointEnabled=!0;else if(B.checkpointEnabled===!0)K.checkpointEnabled=!0;let G=J.modelSelection&&typeof J.modelSelection==="object"?J.modelSelection:{},F=Z.clientId?.trim()||"hub-client",U=YV(B.clientContributions),L=(typeof V?.sessionId==="string"?V.sessionId.trim():"")||tA(),O=eA(B.configExtensions),D=VV({sessionId:L,targetClientId:F,contributions:U,sessionConfig:V,requestCapability:$.requestCapability}),T=await new G2().restoreCheckpoint({sessionId:W,checkpointRunCount:X,restore:{messages:j.messages,workspace:j.workspace,omitCheckpointMessageFromSession:j.omitCheckpointMessageFromSession===!0},start:V,cwd:typeof V?.cwd==="string"&&V.cwd.trim()||typeof V?.workspaceRoot==="string"&&V.workspaceRoot.trim()||void 0,getSession:(N)=>$.sessionHost.getSession(N),readMessages:(N)=>$.sessionHost.readSessionMessages(N),buildStartInput:(N)=>{if(N.restoredCheckpointMetadata)K.checkpoint=N.restoredCheckpointMetadata;let S=typeof J.workspaceRoot==="string"&&J.workspaceRoot.trim()?J.workspaceRoot.trim():typeof J.cwd==="string"&&J.cwd.trim()?J.cwd.trim():N.sourceSession.workspaceRoot||N.sourceSession.cwd;return{source:typeof K.source==="string"?K.source:void 0,interactive:K.interactive!==!1,sessionMetadata:{...K,restoredFromSessionId:W,restoredCheckpointRunCount:X},initialMessages:N.initialMessages,initialCompactionState:H,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:O,...D.localRuntime},capabilities:{toolExecutors:D.toolExecutors,requestToolApproval:Q},config:{...V??{},sessionId:L,providerId:V?.providerId??(typeof G.provider==="string"?G.provider:N.sourceSession.provider),modelId:V?.modelId??(typeof G.model==="string"?G.model:N.sourceSession.model),apiKey:V?.apiKey??(typeof G.apiKey==="string"?G.apiKey:""),cwd:V?.cwd??N.plan.cwd,workspaceRoot:V?.workspaceRoot??S,systemPrompt:V?.systemPrompt??(typeof B.systemPrompt==="string"?B.systemPrompt:""),mode:V?.mode??(B.mode==="plan"||B.mode==="yolo"?B.mode:"act"),maxIterations:V?.maxIterations??(typeof B.maxIterations==="number"?B.maxIterations:void 0),enableTools:V?.enableTools??B.enableTools!==!1,enableSpawnAgent:V?.enableSpawnAgent??B.enableSpawn!==!1,enableAgentTeams:V?.enableAgentTeams??B.enableTeams!==!1,checkpoint:V?.checkpoint??(B.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:V?.teamName??(typeof K.teamName==="string"?K.teamName:void 0)},toolPolicies:J.toolPolicies&&typeof J.toolPolicies==="object"&&!Array.isArray(J.toolPolicies)?JSON.parse(JSON.stringify(J.toolPolicies)):B.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0}},startSession:(N)=>$.sessionHost.startSession(N),getStartedSessionId:(N)=>N.sessionId,cleanupStartedSession:async(N)=>{if(!await $.sessionHost.deleteSession(N.sessionId))throw Error(`Failed to clean up restored session ${N.sessionId}`)},readRestoredSession:(N)=>$.sessionHost.getSession(N)});if(!Y)return l(Z,{checkpoint:T.checkpoint});let z=T.startResult;if(!z)return x(Z,"restore_failed","Checkpoint restore did not start a session");tY($,z.sessionId,F,"creator",{interactive:K.interactive!==!1});let[A,R]=await Promise.all([I0($,z.sessionId),o0($,z.sessionId)]);if(A)$.publish($.buildEvent("session.created",{session:A,...R?{snapshot:R}:{}},z.sessionId));return l(Z,{session:A,...R?{snapshot:R}:{},messages:T.messages??[],checkpoint:T.checkpoint})}catch(V){if(V instanceof d0)return x(Z,V.code,V.code==="session_not_found"?`Unknown session: ${W}`:V.message);return x(Z,"restore_failed",V instanceof Error?V.message:String(V))}}async function JO($,Z){let Q=k0(Z);if(!Q)return x(Z,"invalid_session_attach","session.attach requires a session id");let J=await I0($,Q);if(!J)return x(Z,"session_not_found",`Unknown session: ${Q}`);SA($,Q,Z.clientId?.trim()||"hub-client","participant");let W=await I0($,Q);return $.publish($.buildEvent("session.attached",{session:W??J},Q)),l(Z,{session:W??J})}async function WO($,Z){let Q=k0(Z);if(!Q)return x(Z,"invalid_session_detach","session.detach requires a session id");let J=Z.clientId?.trim()||"hub-client",W=$.sessionState.get(Q);if(W){if(W.participants.delete(J),W.createdByClientId===J)W.createdByClientId=void 0;if(W.participants.size===0)$.sessionState.delete(Q)}U2($,(Y)=>Y.sessionId===Q&&Y.targetClientId===J,`Capability owner client ${J} detached before request was resolved.`);let[X,j]=await Promise.all([I0($,Q),o0($,Q)]);return $.publish($.buildEvent("session.detached",X?{session:X,...j?{snapshot:j}:{},clientId:J}:{clientId:J},Q)),l(Z)}async function XO($,Z){let Q=k0(Z),J=Z.payload?.includeSnapshot===!0,[W,X]=await Promise.all([I0($,Q),J?o0($,Q):Promise.resolve(void 0)]);return W?l(Z,{session:W,...X?{snapshot:X}:{}}):x(Z,"session_not_found",`Unknown session: ${Q}`)}async function jO($,Z){let Q=k0(Z);if(!Q)return x(Z,"invalid_session_id","session.messages requires a session id");if(!await I0($,Q))return x(Z,"session_not_found",`Unknown session: ${Q}`);let W=await $.sessionHost.readSessionMessages(Q);return l(Z,{sessionId:Q,messages:W})}async function YO($,Z){let Q=k0(Z);if(!Q)return x(Z,"invalid_session_id","session.compaction.get requires a session id");if(!await I0($,Q))return x(Z,"session_not_found",`Unknown session: ${Q}`);let W=Z.clientId?.trim()||"hub-client",X=$O({sessionId:Q,ctx:$,clientId:W,envelope:Z});if(X)return X;let j=await $.sessionHost.readSessionCompactionState(Q);return l(Z,{sessionId:Q,state:j})}async function VO($,Z){let Q=typeof Z.payload?.limit==="number"?Z.payload.limit:200,W=(await $.sessionHost.listSessions(Q)).map((X)=>g3(X,$.sessionState.get(X.sessionId)));return l(Z,{sessions:W})}async function BO($,Z){let Q=k0(Z),J=ju(B4(Z.payload?.metadata)),W=await $.sessionHost.updateSession(Q,{metadata:J}),[X,j]=await Promise.all([I0($,Q),o0($,Q)]);if(X)$.publish($.buildEvent("session.updated",{session:X,...j?{snapshot:j}:{}},Q));return{version:Z.version,requestId:Z.requestId,ok:W.updated,payload:{updated:W.updated,session:X,...j?{snapshot:j}:{}}}}async function HO($,Z){let Q=k0(Z);if(!Q)return x(Z,"invalid_session_update_connection","session.update_connection requires a session id");let J=$.sessionHost.updateSessionConnection;if(!J)return x(Z,"unsupported_session_update_connection","runtime host does not support session connection updates");let W=B4(Z.payload),X=Wu(W?.updates);return await J.call($.sessionHost,Q,X),l(Z,{sessionId:Q,updated:!0})}async function KO($,Z){let Q=k0(Z);if(!Q)return x(Z,"invalid_session_id","session.compaction.update requires a session id");let J=Z.clientId?.trim()||"hub-client",W=await I0($,Q);if(!W)return x(Z,"session_not_found",`Unknown session: ${Q}`);let X=$O({sessionId:Q,ctx:$,clientId:J,envelope:Z});if(X)return X;let j=Z.payload&&typeof Z.payload==="object"?Z.payload:{},Y=D1(j.state);if(!Y)return x(Z,"invalid_compaction_state","session.compaction.update requires a valid compaction state");let V=await $.sessionHost.updateSessionCompactionState(Q,Y),[B,H]=V.updated?await Promise.all([I0($,Q),o0($,Q)]):[W,void 0];if(V.updated)$.publish($.buildEvent("session.updated",{session:B??W,...H?{snapshot:H}:{}},Q));return{version:Z.version,requestId:Z.requestId,ok:!0,payload:{updated:V.updated,session:B??W,...H?{snapshot:H}:{}}}}async function GO($,Z){let Q=k0(Z),J=await $.sessionHost.deleteSession(Q);return $.sessionState.delete(Q),l(Z,{deleted:J})}async function FO($,Z){let Q=k0(Z),J=$.sessionHost.pendingPrompts;if(!J)return x(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let W=await J.list({sessionId:Q});return l(Z,{sessionId:Q,prompts:W})}async function UO($,Z){let Q=k0(Z),J=typeof Z.payload?.promptId==="string"?Z.payload.promptId.trim():"",W=typeof Z.payload?.prompt==="string"?Z.payload.prompt:void 0,X=Z.payload?.delivery==="queue"||Z.payload?.delivery==="steer"?Z.payload.delivery:void 0,j=$.sessionHost.pendingPrompts;if(!j)return x(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let Y=await j.update({sessionId:Q,promptId:J,prompt:W,delivery:X});return l(Z,Y)}async function DO($,Z){let Q=k0(Z),J=typeof Z.payload?.promptId==="string"?Z.payload.promptId.trim():"",W=$.sessionHost.pendingPrompts;if(!W)return x(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let X=await W.delete({sessionId:Q,promptId:J});return l(Z,X)}function _O($){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 Vu=new Set(["skills","workflows","rules","tools","mcp"]);function BV($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function XZ($,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 Bu($,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 LO($){if($===void 0)return{};if(!BV($))throw Error("settings.list payload must be an object.");return{cwd:XZ($,"cwd"),workspaceRoot:XZ($,"workspaceRoot"),availabilityContext:BV($.availabilityContext)?$.availabilityContext:void 0}}function Hu($){if(!BV($))throw Error("settings.toggle payload must be an object.");let{type:Z}=$;if(typeof Z!=="string"||!Vu.has(Z))throw Error("settings.toggle payload 'type' must be one of: skills, workflows, rules, tools, mcp.");return{...LO($),type:Z,id:XZ($,"id"),path:XZ($,"path"),name:XZ($,"name"),enabled:Bu($,"enabled")}}class V4{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=Yu("hub_");ctx;constructor($){this.options=$;if(this.sessionHost=$.sessionHost??new g1({sessionService:new x1(new h1),fetch:$.fetch,logger:$.logger,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:R8,requestCapability:(Z,Q,J,W,X)=>kA(this.ctx,Z,Q,J,W,X)},this.schedules=new b8({...$.scheduleOptions,runtimeHandlers:$.runtimeHandlers,eventPublisher:(Z,Q)=>{let J=Z==="schedule.execution.completed"?"schedule.execution_completed":Z==="schedule.execution.failed"?"schedule.execution_failed":void 0;if(!J)return;this.publish(R8(J,Q&&typeof Q==="object"?Q:void 0))}}),this.scheduleCommands=new E8(this.schedules),this.settings=$.settingsService??new j2,$.cronOptions)this.cronService=new U9({runtimeHandlers:$.runtimeHandlers,...$.cronOptions});this.sessionHost.subscribe((Z)=>{nA(this.ctx,Z).catch((Q)=>{QV("session event handling failed",Q),c3(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())$V(this.ctx,$,{approved:!1,reason:"Hub shutting down before approval was resolved."});if(U2(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 c3(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 gA(this.ctx,$);case"client.update":return vA(this.ctx,$);case"client.unregister":return mA(this.ctx,$,(Z)=>{this.listeners.delete(Z),this.detachClientFromSessions(Z)});case"client.list":return cA(this.ctx,$);case"session.create":return await ZO(this.ctx,$,(Z)=>eY(this.ctx,Z));case"session.restore":return await QO(this.ctx,$,(Z)=>eY(this.ctx,Z));case"session.attach":return await JO(this.ctx,$);case"session.detach":return await WO(this.ctx,$);case"session.get":return await XO(this.ctx,$);case"session.messages":return await jO(this.ctx,$);case"session.compaction.get":return await YO(this.ctx,$);case"session.list":return await VO(this.ctx,$);case"session.update":return await BO(this.ctx,$);case"session.update_connection":return await HO(this.ctx,$);case"session.compaction.update":return await KO(this.ctx,$);case"session.pending_prompts":return await FO(this.ctx,$);case"session.update_pending_prompt":return await UO(this.ctx,$);case"session.remove_pending_prompt":return await DO(this.ctx,$);case"session.delete":return await GO(this.ctx,$);case"session.hook":return await rA(this.ctx,$);case"run.start":case"session.send_input":return await lA(this.ctx,$);case"run.abort":return await iA(this.ctx,$);case"capability.request":return await IA(this.ctx,$);case"approval.respond":return await bA(this.ctx,$);case"capability.respond":return xA(this.ctx,$);case"capability.progress":return hA(this.ctx,$);case"ui.notify":return this.publish(R8("ui.notify",$.payload??{})),l($);case"ui.show_window":return this.publish(R8("ui.show_window",$.payload??{})),l($);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 pA(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=_O($.command);if(Q)this.publish(R8(Q,Z.payload))}return Z}}}captureFailedReply($,Z){if(Z.ok||!Z.error||!Ku(Z.error.code))return;c3(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(LO($.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(Hu($.payload));return this.publish(R8("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 J=this.listeners.get($)??new Set,W={sessionId:Q?.sessionId,listener:Z};return J.add(W),this.listeners.set($,J),()=>{let X=this.listeners.get($);if(!X)return;if(X.delete(W),X.size===0)this.listeners.delete($)}}detachClientFromSessions($){for(let[Z,Q]of this.sessionState.entries()){if(Q.participants.delete($),Q.createdByClientId===$)Q.createdByClientId=void 0;if(Q.participants.size===0)this.sessionState.delete(Z)}U2(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(J){QV(`listener threw while publishing ${$.event}`,J),c3(this.options.telemetry,{component:"core",operation:"hub.publish",error:J,severity:"warn",handled:!0,context:{event:$.event,sessionId:$.sessionId}})}}}}function Ku($){return $==="session_not_found"||$==="session_messages_not_found"||$==="hub_command_timeout"||$.endsWith("_failed")}import{timingSafeEqual as Du}from"node:crypto";import _u from"node:http";import Lu from"node:net";import{URL as FV}from"node:url";import{CURRENT_HUB_PROTOCOL_VERSION as qO,HUB_CAPABILITIES as Au,isHubProtocolCompatible as Ou,MAX_CLIENT_HUB_PROTOCOL_VERSION as zO,MIN_CLIENT_HUB_PROTOCOL_VERSION as TO}from"@cline/shared";import{WebSocketServer as qu}from"ws";import{captureSdkError as AO,HUB_COMMAND_SLOW_LOG_MS as Gu,resolveHubCommandTimeoutMs as Fu,safeJsonParse as Uu}from"@cline/shared";function HV($){return{command:$.envelope.command,requestId:$.envelope.requestId,clientId:$.envelope.clientId,sessionId:$.envelope.sessionId}}function OO($,Z,Q){return{version:$.envelope.version,requestId:$.envelope.requestId,ok:!1,error:{code:Z,message:Q}}}class $Z{transport;telemetry;constructor($,Z){this.transport=$;this.telemetry=Z}attach($){let Z=new Map,Q=new Set,J=!1,W=(V)=>{try{$.send(JSON.stringify(V))}catch(B){console.error(`[hub] failed to send websocket frame: ${B instanceof Error?B.stack||B.message:String(B)}`)}},X=(V)=>{W({kind:"event",envelope:V})},j=async(V)=>{try{let B=JSON.parse(V.data);switch(B.kind){case"command":{let H=performance.now(),K=!1,G=HV(B);a("info","command.start",G);let F=setTimeout(()=>{if(K)return;a("warn","command.slow",{...G,elapsedMs:Math.round(performance.now()-H)})},Gu),U=this.transport.command(B.envelope);U.then((T)=>{if(!K)return;a(T.ok?"warn":"error","command.late_end",{...G,elapsedMs:Math.round(performance.now()-H),ok:T.ok,errorCode:T.error?.code,errorMessage:T.error?.message})},(T)=>{if(!K)return;a("error","command.late_error",{...G,elapsedMs:Math.round(performance.now()-H),error:T})});let _=!1,L,O,D=Fu(B.envelope.command,B.envelope.timeoutMs);try{O=D===null?await U:await Promise.race([U,new Promise((T)=>{L=setTimeout(()=>{_=!0,AO(this.telemetry,{component:"core",operation:"hub.command_timeout",error:Error(`Hub command ${B.envelope.command} did not complete within ${D}ms.`),severity:"error",handled:!0,context:{...G,timeoutMs:D}}),T(OO(B,"hub_command_timeout",`Hub command ${B.envelope.command} did not complete within ${D}ms. Check hub-daemon.log for command.start/command.slow logs with requestId ${B.envelope.requestId}.`))},D)})])}catch(T){if(clearTimeout(F),L)clearTimeout(L);throw T}if(K=_,clearTimeout(F),L)clearTimeout(L);let q=Math.round(performance.now()-H);if(_)a("error","command.timeout",{...G,durationMs:q,timeoutMs:D});else a(O.ok?"info":"warn","command.end",{...G,durationMs:q,ok:O.ok,errorCode:O.error?.code,errorMessage:O.error?.message});if(B.envelope.command==="client.register"&&O.ok){let z=(B.envelope.payload??{}).clientId?.trim()||B.envelope.clientId?.trim();if(z)Q.add(z)}else if(B.envelope.command==="client.unregister"&&O.ok){let T=B.envelope.clientId?.trim();if(T)Q.delete(T)}W({kind:"reply",envelope:O});break}case"stream.subscribe":{let H=`${B.clientId}:${B.sessionId??"*"}`;if(Z.has(H))break;let K=await this.transport.subscribe(B.clientId,X,{sessionId:B.sessionId});Z.set(H,K);break}case"stream.unsubscribe":{let H=`${B.clientId}:${B.sessionId??"*"}`;Z.get(H)?.(),Z.delete(H);break}case"reply":case"event":break}}catch(B){let H=typeof V.data==="string"?Uu(V.data):void 0;if(!H||H.kind!=="command"){a("error","rejected malformed websocket frame",{error:B});return}a("error","command.error",{...HV(H),error:B}),AO(this.telemetry,{component:"core",operation:"hub.websocket_command",error:B,severity:"error",handled:!0,context:HV(H)}),W({kind:"reply",envelope:OO(H,"command_failed",B instanceof Error?B.message:"Unknown hub error")})}},Y=()=>{if(J)return;J=!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",j),$.removeEventListener("close",Y)};return $.addEventListener("message",j),$.addEventListener("close",Y),Y}}class ZZ{transport;constructor($){this.transport=$}command($){return this.transport.handleCommand($)}subscribe($,Z,Q){return this.transport.subscribe($,Z,Q)}}function zu($){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 Tu($){return{send(Z){$.send(Z)},addEventListener(Z,Q){if(Z==="message"){$.on("message",(J)=>{Q({data:zu(J)})});return}$.on("close",Q)},removeEventListener(){}}}function Nu($){try{$.write(`HTTP/1.1 400 Bad Request\r
795
795
  Connection: close\r
796
796
  Content-Length: 0\r
797
797
  \r
798
- `),$.end()}catch{$.destroy()}}function Au($){try{$.write(`HTTP/1.1 401 Unauthorized\r
798
+ `),$.end()}catch{$.destroy()}}function fu($){try{$.write(`HTTP/1.1 401 Unauthorized\r
799
799
  Connection: close\r
800
800
  Content-Length: 0\r
801
801
  \r
802
- `),$.end()}catch{$.destroy()}}function HV($,Z){if(!$||!Z)return!1;let Q=Buffer.from($,"utf8"),J=Buffer.from(Z,"utf8");return Q.length===J.length&&Bu(Q,J)}function TO($,Z){let Q=$&&typeof $==="object"&&"code"in $&&typeof $.code==="string"?$.code:void 0,J=$ instanceof Error?$.message:typeof $==="string"?$:"Unknown startup error",W=`Failed to start hub server on ${Z.host}:${Z.port}${Z.pathname}: ${J}`,X=Error(Q?`${W} (${Q})`:W);if(Q)$.code=Q,X.code=Q;if($ instanceof Error&&$.stack)X.stack=`${X.name}: ${X.message}
803
- Caused by: ${$.stack}`;return X}async function Ou($){return await new Promise((Z,Q)=>{let J=Ku.createServer();J.once("error",Q),J.listen(0,$,()=>{let W=J.address();if(!W||typeof W==="string"){J.close(()=>Q(Error("Failed to resolve free port")));return}let X=W.port;J.close((j)=>{if(j){Q(j);return}Z(X)})})})}function qu($){return $ instanceof Error&&"code"in $&&$.code==="EADDRINUSE"}var KV=new Map,NO="cline-hub-auth.",zu=30000;function FV($){return Array.isArray($)?$.join(","):$??""}function fO($){return $===32||$===9}function k3($){let Z=FV($).trim(),Q="bearer";if(Z.length<=6||Z.slice(0,6).toLowerCase()!=="bearer"||!fO(Z.charCodeAt(6)))return null;let J=7;while(J<Z.length&&fO(Z.charCodeAt(J)))J+=1;return Z.slice(J).trim()||null}function Tu($){for(let Z of FV($).split(",")){let Q=Z.trim();if(Q.startsWith(NO))return Q.slice(NO.length).trim()||null}return null}function h3($){let Z=$.trim().toLowerCase();return Z==="localhost"||Z==="127.0.0.1"||Z==="::1"||Z==="[::1]"}function gY($){let Z=FV($).trim();if(!Z)return!1;try{return h3(new GV(Z).hostname)}catch{return!1}}async function QZ($){let Z=$.owner??t1(),Q=$.host??"127.0.0.1",J=$.pathname??"/hub",W=$.port??v8(),X=W===0?await Ou(Q):W,j=X,Y=K1(Q,X,J),V=gZ(),B=xZ(),H=new V4($);await H.start();let K=new $Z(new ZZ(H),$.telemetry),G=new Set,F=new Date().toISOString(),U={protocolVersion:OO,minClientProtocolVersion:zO,maxClientProtocolVersion:qO,capabilities:Gu,coreVersion:P4.version,buildId:V,pid:process.pid,startedAt:F},_=new Set,L,O,D=async()=>{if(O)return O;return O=(async()=>{if(L)clearInterval(L),L=void 0;for(let A of _)A.terminate?.();_.clear();for(let A of G)A();if(G.clear(),await new Promise((A,R)=>{T.close((N)=>{if(N){R(N);return}A()})}),await new Promise((A,R)=>{q.close((N)=>{if(N){R(N);return}A()})}),await H.stop(),(await z0(Z.discoveryPath))?.url===Y)await i0(Z.discoveryPath)})(),O},q=Hu.createServer((z,A)=>{if((z.url??"/")==="/health"){let N=JSON.stringify({ok:!0,protocolVersion:U.protocolVersion,minClientProtocolVersion:U.minClientProtocolVersion,maxClientProtocolVersion:U.maxClientProtocolVersion,coreVersion:U.coreVersion,host:Q,port:j,url:Y});A.statusCode=200,A.setHeader("content-type","application/json"),A.end(N);return}if((z.url??"/")==="/status"){if(!HV(k3(z.headers.authorization),B)){A.statusCode=401,A.end("Unauthorized");return}let N=JSON.stringify({hubId:H.getHubId(),...U,authToken:B,host:Q,port:j,url:Y,updatedAt:new Date().toISOString()});A.statusCode=200,A.setHeader("content-type","application/json"),A.end(N);return}if((z.url??"/")==="/version"){A.statusCode=200,A.setHeader("content-type","application/json"),A.end(JSON.stringify(U));return}if(new GV(z.url??"/",`http://${Q}:${j}`).pathname==="/shutdown"&&z.method==="POST"){if(!HV(k3(z.headers.authorization),B)){A.statusCode=401,A.end("Unauthorized");return}A.statusCode=202,A.setHeader("content-type","application/json"),A.end(JSON.stringify({ok:!0})),queueMicrotask(()=>{D()});return}A.statusCode=404,A.end("Not found")}),T=new Uu({noServer:!0});L=setInterval(()=>{for(let z of _){if(z.isAlive===!1){try{z.terminate?.()}catch{}_.delete(z);continue}z.isAlive=!1;try{z.ping?.()}catch{try{z.terminate?.()}catch{}_.delete(z)}}},zu),q.on("upgrade",(z,A,R)=>{if(new GV(z.url??"/",`http://${Q}:${j}`).pathname!==J){A.destroy();return}if(!(HV(Tu(z.headers["sec-websocket-protocol"]),B)||h3(Q)&&gY(z.headers.origin))){Au(A);return}try{T.handleUpgrade(z,A,R,(y)=>{let s=y;s.isAlive=!0,s.on("pong",()=>{s.isAlive=!0}),_.add(s);let c=K.attach(_u(y));G.add(c),y.once("close",()=>{_.delete(s),c(),G.delete(c)})})}catch{Lu(A)}});try{await new Promise((z,A)=>{q.once("error",(R)=>{A(TO(R,{host:Q,port:X,pathname:J}))}),q.listen(X,Q,()=>{let R=q.address();if(!R||typeof R==="string"){A(TO(Error("Failed to resolve hub port"),{host:Q,port:X,pathname:J}));return}j=R.port,Y=K1(Q,j,J),z()})})}catch(z){if(L)clearInterval(L),L=void 0;throw await H.stop().catch(()=>{return}),z}return await vZ(Z.discoveryPath,{hubId:H.getHubId(),protocolVersion:OO,minClientProtocolVersion:zO,maxClientProtocolVersion:qO,capabilities:[...U.capabilities],coreVersion:P4.version,buildId:V,authToken:B,host:Q,port:j,url:Y,pid:process.pid,startedAt:F,updatedAt:F}),{host:Q,port:j,url:Y,authToken:B,close:D}}async function I3($){let Z=$.owner??t1(),Q=$.host!==void 0||$.port!==void 0||$.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),J=$.host??"127.0.0.1",W=$.port??v8(),X=$.pathname??"/hub",j=K1(J,W,X),Y=Z.discoveryPath,V=(H)=>{if(!Q)y$(H.url,H.authToken);return H},B=KV.get(Y);if(B){let H=await B;if(H.url===j)return V({server:H,url:H.url,authToken:H.authToken,action:"reuse"})}return await mZ(Z.discoveryPath,async()=>{let H=await z0(Z.discoveryPath);if(H?.url&&(H.url===j||$.allowPortFallback===!0)){let F=await e1(H.url,{authToken:H.authToken});if(F?.url&&Fu(F).compatible&&await E1(F.url,{authToken:H.authToken}))return V({url:F.url,authToken:H.authToken,action:"reuse"})}if(H?.url)await i0(Z.discoveryPath);let G=async(F)=>{let U=QZ({...F,owner:Z});KV.set(Y,U);try{let _=await U;return V({server:_,url:_.url,authToken:_.authToken,action:"started"})}catch(_){throw KV.delete(Y),_}};try{return await G($)}catch(F){if(!$.allowPortFallback||!qu(F))throw F;return await G({...$,port:0})}})}function MO(){return RO()==="production"?M1():G1()}function Nu($){return RO()!=="production"&&!$}async function DA($){let Z=R1({host:$.host,port:$.port,pathname:$.pathname});return await QZ({...$,...Z,owner:MO()})}async function _A($){let Z=$.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Q=R1({host:$.host,port:$.port,pathname:$.pathname});return await I3({...$,...Q,allowPortFallback:$.allowPortFallback??Nu(Z),owner:MO()})}export{vZ as writeHubDiscovery,mZ as withHubStartupLock,E1 as verifyHubConnection,e9 as truncateNotificationBody,HJ as toHubStatusUrl,cZ as toHubHealthUrl,TJ as stopLocalHubServerGracefully,QZ as startHubWebSocketServer,DA as startHubServer,m8 as spawnDetachedHubServerWithRetry,_J as spawnDetachedHubServer,aB as sendHubCommand,iZ as restartLocalHubIfIdleAfterStartupTimeout,bB as resolveWorkspaceHubOwnerContext,G1 as resolveSharedHubOwnerContext,M1 as resolveProductionHubOwnerContext,NJ as resolveHubUrl,t1 as resolveHubOwnerContext,R1 as resolveHubEndpointOptions,gZ as resolveHubBuildId,v8 as resolveDefaultHubPort,DJ as resolveDefaultHubPathname,UJ as resolveDefaultHubHost,y4 as resolveCompatibleLocalHubUrl,CB as resolveClineDir,z2 as resolveClineDataDir,b4 as requestHubShutdown,y$ as rememberRecoverableLocalHubUrl,z0 as readHubDiscovery,k3 as readBearerToken,e1 as probeHubServer,nB as probeHubConnection,dZ as prewarmDetachedHubServer,k$ as normalizeHubWebSocketUrl,gY as isLocalHubOrigin,h3 as isLocalHubHostName,qJ as isHubReconnectableTransportError,lZ as isHubCommandTimeoutError,PB as isDiscoveryFilePresent,I3 as ensureHubWebSocketServer,_A as ensureHubServer,gB as ensureDetachedHubServer,f2 as ensureCompatibleLocalHubUrl,UA as createLocalHubScheduleRuntimeHandlers,wB as createInMemoryHubOwnerContext,K1 as createHubServerUrl,xZ as createHubAuthToken,a1 as createConfiguredTelemetryService,x8 as createConfiguredTelemetryHandle,rZ as connectToHub,i0 as clearHubDiscovery,F1 as NodeHubClient,ZZ as NativeHubTransportAdapter,MJ as HubUIClient,v0 as HubTransportError,RJ as HubSessionClient,V4 as HubServerTransport,S8 as HubScheduleService,M8 as HubScheduleCommandService,c8 as HubCommandError,GJ as DEFAULT_HUB_PORT,FJ as DEFAULT_HUB_PATHNAME,KJ as DEFAULT_HUB_HOST,$Z as BrowserWebSocketHubAdapter};
802
+ `),$.end()}catch{$.destroy()}}function KV($,Z){if(!$||!Z)return!1;let Q=Buffer.from($,"utf8"),J=Buffer.from(Z,"utf8");return Q.length===J.length&&Du(Q,J)}function NO($,Z){let Q=$&&typeof $==="object"&&"code"in $&&typeof $.code==="string"?$.code:void 0,J=$ instanceof Error?$.message:typeof $==="string"?$:"Unknown startup error",W=`Failed to start hub server on ${Z.host}:${Z.port}${Z.pathname}: ${J}`,X=Error(Q?`${W} (${Q})`:W);if(Q)$.code=Q,X.code=Q;if($ instanceof Error&&$.stack)X.stack=`${X.name}: ${X.message}
803
+ Caused by: ${$.stack}`;return X}async function Ru($){return await new Promise((Z,Q)=>{let J=Lu.createServer();J.once("error",Q),J.listen(0,$,()=>{let W=J.address();if(!W||typeof W==="string"){J.close(()=>Q(Error("Failed to resolve free port")));return}let X=W.port;J.close((j)=>{if(j){Q(j);return}Z(X)})})})}function Mu($){return $ instanceof Error&&"code"in $&&$.code==="EADDRINUSE"}var GV=new Map,fO="cline-hub-auth.",Eu=30000;function UV($){return Array.isArray($)?$.join(","):$??""}function RO($){return $===32||$===9}function k3($){let Z=UV($).trim(),Q="bearer";if(Z.length<=6||Z.slice(0,6).toLowerCase()!=="bearer"||!RO(Z.charCodeAt(6)))return null;let J=7;while(J<Z.length&&RO(Z.charCodeAt(J)))J+=1;return Z.slice(J).trim()||null}function Cu($){for(let Z of UV($).split(",")){let Q=Z.trim();if(Q.startsWith(fO))return Q.slice(fO.length).trim()||null}return null}function h3($){let Z=$.trim().toLowerCase();return Z==="localhost"||Z==="127.0.0.1"||Z==="::1"||Z==="[::1]"}function vY($){let Z=UV($).trim();if(!Z)return!1;try{return h3(new FV(Z).hostname)}catch{return!1}}async function QZ($){let Z=$.owner??t1(),Q=$.host??"127.0.0.1",J=$.pathname??"/hub",W=$.port??m8(),X=W===0?await Ru(Q):W,j=X,Y=K1(Q,X,J),V=gZ(),B=xZ(),H=new V4($);await H.start();let K=new $Z(new ZZ(H),$.telemetry),G=new Set,F=new Date().toISOString(),U={protocolVersion:qO,minClientProtocolVersion:TO,maxClientProtocolVersion:zO,capabilities:Au,coreVersion:P4.version,buildId:V,pid:process.pid,startedAt:F},_=new Set,L,O,D=async()=>{if(O)return O;return O=(async()=>{if(L)clearInterval(L),L=void 0;for(let A of _)A.terminate?.();_.clear();for(let A of G)A();if(G.clear(),await new Promise((A,R)=>{T.close((N)=>{if(N){R(N);return}A()})}),await new Promise((A,R)=>{q.close((N)=>{if(N){R(N);return}A()})}),await H.stop(),(await z0(Z.discoveryPath))?.url===Y)await i0(Z.discoveryPath)})(),O},q=_u.createServer((z,A)=>{if((z.url??"/")==="/health"){let N=JSON.stringify({ok:!0,protocolVersion:U.protocolVersion,minClientProtocolVersion:U.minClientProtocolVersion,maxClientProtocolVersion:U.maxClientProtocolVersion,coreVersion:U.coreVersion,host:Q,port:j,url:Y});A.statusCode=200,A.setHeader("content-type","application/json"),A.end(N);return}if((z.url??"/")==="/status"){if(!KV(k3(z.headers.authorization),B)){A.statusCode=401,A.end("Unauthorized");return}let N=JSON.stringify({hubId:H.getHubId(),...U,authToken:B,host:Q,port:j,url:Y,updatedAt:new Date().toISOString()});A.statusCode=200,A.setHeader("content-type","application/json"),A.end(N);return}if((z.url??"/")==="/version"){A.statusCode=200,A.setHeader("content-type","application/json"),A.end(JSON.stringify(U));return}if(new FV(z.url??"/",`http://${Q}:${j}`).pathname==="/shutdown"&&z.method==="POST"){if(!KV(k3(z.headers.authorization),B)){A.statusCode=401,A.end("Unauthorized");return}A.statusCode=202,A.setHeader("content-type","application/json"),A.end(JSON.stringify({ok:!0})),queueMicrotask(()=>{D()});return}A.statusCode=404,A.end("Not found")}),T=new qu({noServer:!0});L=setInterval(()=>{for(let z of _){if(z.isAlive===!1){try{z.terminate?.()}catch{}_.delete(z);continue}z.isAlive=!1;try{z.ping?.()}catch{try{z.terminate?.()}catch{}_.delete(z)}}},Eu),q.on("upgrade",(z,A,R)=>{if(new FV(z.url??"/",`http://${Q}:${j}`).pathname!==J){A.destroy();return}if(!(KV(Cu(z.headers["sec-websocket-protocol"]),B)||h3(Q)&&vY(z.headers.origin))){fu(A);return}try{T.handleUpgrade(z,A,R,(y)=>{let s=y;s.isAlive=!0,s.on("pong",()=>{s.isAlive=!0}),_.add(s);let c=K.attach(Tu(y));G.add(c),y.once("close",()=>{_.delete(s),c(),G.delete(c)})})}catch{Nu(A)}});try{await new Promise((z,A)=>{q.once("error",(R)=>{A(NO(R,{host:Q,port:X,pathname:J}))}),q.listen(X,Q,()=>{let R=q.address();if(!R||typeof R==="string"){A(NO(Error("Failed to resolve hub port"),{host:Q,port:X,pathname:J}));return}j=R.port,Y=K1(Q,j,J),z()})})}catch(z){if(L)clearInterval(L),L=void 0;throw await H.stop().catch(()=>{return}),z}return await vZ(Z.discoveryPath,{hubId:H.getHubId(),protocolVersion:qO,minClientProtocolVersion:TO,maxClientProtocolVersion:zO,capabilities:[...U.capabilities],coreVersion:P4.version,buildId:V,authToken:B,host:Q,port:j,url:Y,pid:process.pid,startedAt:F,updatedAt:F}),{host:Q,port:j,url:Y,authToken:B,close:D}}async function I3($){let Z=$.owner??t1(),Q=$.host!==void 0||$.port!==void 0||$.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),J=$.host??"127.0.0.1",W=$.port??m8(),X=$.pathname??"/hub",j=K1(J,W,X),Y=Z.discoveryPath,V=(H)=>{if(!Q)y$(H.url,H.authToken);return H},B=GV.get(Y);if(B){let H=await B;if(H.url===j)return V({server:H,url:H.url,authToken:H.authToken,action:"reuse"})}return await mZ(Z.discoveryPath,async()=>{let H=await z0(Z.discoveryPath);if(H?.url&&(H.url===j||$.allowPortFallback===!0)){let F=await e1(H.url,{authToken:H.authToken});if(F?.url&&Ou(F).compatible&&await E1(F.url,{authToken:H.authToken}))return V({url:F.url,authToken:H.authToken,action:"reuse"})}if(H?.url)await i0(Z.discoveryPath);let G=async(F)=>{let U=QZ({...F,owner:Z});GV.set(Y,U);try{let _=await U;return V({server:_,url:_.url,authToken:_.authToken,action:"started"})}catch(_){throw GV.delete(Y),_}};try{return await G($)}catch(F){if(!$.allowPortFallback||!Mu(F))throw F;return await G({...$,port:0})}})}function EO(){return MO()==="production"?M1():G1()}function wu($){return MO()!=="production"&&!$}async function _A($){let Z=R1({host:$.host,port:$.port,pathname:$.pathname});return await QZ({...$,...Z,owner:EO()})}async function LA($){let Z=$.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Q=R1({host:$.host,port:$.port,pathname:$.pathname});return await I3({...$,...Q,allowPortFallback:$.allowPortFallback??wu(Z),owner:EO()})}export{vZ as writeHubDiscovery,mZ as withHubStartupLock,E1 as verifyHubConnection,e9 as truncateNotificationBody,HJ as toHubStatusUrl,cZ as toHubHealthUrl,TJ as stopLocalHubServerGracefully,QZ as startHubWebSocketServer,_A as startHubServer,c8 as spawnDetachedHubServerWithRetry,_J as spawnDetachedHubServer,oB as sendHubCommand,iZ as restartLocalHubIfIdleAfterStartupTimeout,yB as resolveWorkspaceHubOwnerContext,G1 as resolveSharedHubOwnerContext,M1 as resolveProductionHubOwnerContext,NJ as resolveHubUrl,t1 as resolveHubOwnerContext,R1 as resolveHubEndpointOptions,gZ as resolveHubBuildId,m8 as resolveDefaultHubPort,DJ as resolveDefaultHubPathname,UJ as resolveDefaultHubHost,y4 as resolveCompatibleLocalHubUrl,wB as resolveClineDir,T2 as resolveClineDataDir,b4 as requestHubShutdown,y$ as rememberRecoverableLocalHubUrl,z0 as readHubDiscovery,k3 as readBearerToken,e1 as probeHubServer,aB as probeHubConnection,dZ as prewarmDetachedHubServer,k$ as normalizeHubWebSocketUrl,vY as isLocalHubOrigin,h3 as isLocalHubHostName,qJ as isHubReconnectableTransportError,lZ as isHubCommandTimeoutError,SB as isDiscoveryFilePresent,I3 as ensureHubWebSocketServer,LA as ensureHubServer,vB as ensureDetachedHubServer,R2 as ensureCompatibleLocalHubUrl,DA as createLocalHubScheduleRuntimeHandlers,PB as createInMemoryHubOwnerContext,K1 as createHubServerUrl,xZ as createHubAuthToken,a1 as createConfiguredTelemetryService,g8 as createConfiguredTelemetryHandle,rZ as connectToHub,i0 as clearHubDiscovery,F1 as NodeHubClient,ZZ as NativeHubTransportAdapter,MJ as HubUIClient,v0 as HubTransportError,RJ as HubSessionClient,V4 as HubServerTransport,b8 as HubScheduleService,E8 as HubScheduleCommandService,u8 as HubCommandError,GJ as DEFAULT_HUB_PORT,FJ as DEFAULT_HUB_PATHNAME,KJ as DEFAULT_HUB_HOST,$Z as BrowserWebSocketHubAdapter};