@cline/core 0.0.55 → 0.0.56
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/hub/daemon/entry.js +71 -71
- package/dist/hub/index.js +59 -59
- package/dist/index.js +58 -58
- package/package.json +4 -4
package/dist/hub/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import{createRequire as MD}from"node:module";var{defineProperty:QW,getOwnPropertyNames:TD}=Object;var Wj=Object.prototype.hasOwnProperty;function Jj($){return this[$]}var R=($,Z,Q)=>{var W=TD(Z);for(let J of W)if(!Wj.call($,J)&&J!=="default")QW($,J,{get:Jj.bind(Z,J),enumerable:!0});if(Q){for(let J of W)if(!Wj.call(Q,J)&&J!=="default")QW(Q,J,{get:Jj.bind(Z,J),enumerable:!0});return Q}};var OD=($)=>$;function qD($,Z){this[$]=OD.bind(null,Z)}var N=($,Z)=>{for(var Q in Z)QW($,Q,{get:Z[Q],enumerable:!0,configurable:!0,set:qD.bind(Z,Q)})};var p$=($,Z)=>()=>($&&(Z=$($=0)),Z);var Xj=MD(import.meta.url);import{AGENT_UNEXPECTED_REASONING_TOKENS_EVENT as jL,captureAgentUnexpectedReasoningTokens as Rj,SDK_ERROR_TELEMETRY_EVENT as VL}from"@cline/shared";function i($,Z,Q){$?.capture({event:Z,properties:Q})}function z9($){if(!$)return;return $.substring(0,HL)}function BL($){if(typeof $==="string")return"Error";return $.name?.trim()||$.constructor?.name||"Error"}function GL($){return typeof $==="string"?$:$.message}function Mj($,Z){return $.some((Q)=>Z.has(Q.trim().toLowerCase()))}function Ej($){i($,m.CLIENT.EXTENSION_ACTIVATED)}function T9($,Z){let Q=[...Z.vcs_types],W={root_count:Z.root_count,vcs_types:Q,is_multi_root:Z.root_count>1,has_git:Mj(Q,new Set(["git"])),has_mercurial:Mj(Q,new Set(["mercurial","hg"]))};if(Z.init_duration_ms!==void 0)W.init_duration_ms=Z.init_duration_ms;if(Z.feature_flag_enabled!==void 0)W.feature_flag_enabled=Z.feature_flag_enabled;if(Z.is_remote_workspace!==void 0)W.is_remote_workspace=Z.is_remote_workspace;i($,m.WORKSPACE.INITIALIZED,W)}function O9($,Z,Q){i($,m.WORKSPACE.INIT_ERROR,{error_type:BL(Z),error_message:z9(GL(Z)),fallback_to_single_root:Q.fallback_to_single_root,workspace_count:Q.workspace_count??0})}function Nj($,Z){i($,m.WORKSPACE.PATH_RESOLVED,{...Z})}function C1($,Z){i($,m.USER.AUTH_STARTED,{provider:Z})}function P1($,Z){i($,m.USER.AUTH_SUCCEEDED,{provider:Z})}function S1($,Z,Q){i($,m.USER.AUTH_FAILED,{provider:Z,errorMessage:z9(Q)})}function V$($,Z,Q){i($,m.USER.AUTH_LOGGED_OUT,{provider:Z,reason:Q})}function wj($,Z){i($,m.USER.PROVIDER_CONFIGURED,{provider:Z})}function Cj($,Z){$?.captureRequired(m.USER.TELEMETRY_OPT_OUT,Z)}function b1($,Z){let Q=Z.id?.trim();if(Q)$?.setDistinctId(Q);$?.updateCommonProperties({account_id:Z.id,account_email:Z.email,provider:Z.provider,organization_id:Z.organizationId,organization_name:Z.organizationName,member_id:Z.memberId})}function q9($,Z){i($,m.TASK.CREATED,Z)}function M9($,Z){i($,m.TASK.RESTARTED,Z)}function g4($,Z){i($,m.TASK.COMPLETED,Z)}function Q8($,Z){i($,m.TASK.CONVERSATION_TURN,{...Z,timestamp:new Date().toISOString()})}function R9($,Z){i($,m.TASK.TOKEN_USAGE,Z)}function E9($,Z,Q){i($,m.TASK.MODE_SWITCH,{ulid:Z,mode:Q})}function W8($,Z){i($,m.TASK.TOOL_USED,Z)}function N9($,Z){i($,m.TASK.SKILL_USED,Z)}function w9($,Z){i($,m.TASK.DIFF_EDIT_FAILED,Z)}function m4($,Z){i($,m.TASK.PROVIDER_API_ERROR,{...Z,errorMessage:z9(Z.errorMessage)??"unknown",timestamp:new Date().toISOString()})}function Pj($,Z){i($,m.SDK.TOOL_TIMEOUT,KL(Z))}function KL($){let Z={};for(let[Q,W]of Object.entries($))if(W!==void 0)Z[Q]=W;return Z}function C9($,Z,Q){i($,m.TASK.MENTION_USED,{mentionType:Z,contentLength:Q,timestamp:new Date().toISOString()})}function P9($,Z,Q,W){i($,m.TASK.MENTION_FAILED,{mentionType:Z,errorType:Q,errorMessage:z9(W),timestamp:new Date().toISOString()})}function S9($,Z,Q,W,J){i($,m.TASK.MENTION_SEARCH_RESULTS,{queryLength:Z.length,resultCount:Q,searchType:W,isEmpty:J,timestamp:new Date().toISOString()})}function H$($,Z){i($,m.TASK.AGENT_CREATED,{...Z,timestamp:new Date().toISOString()})}function b9($,Z){i($,m.TASK.AGENT_TEAM_CREATED,{...Z,timestamp:new Date().toISOString()})}function v4($,Z){i($,Z.event==="ended"?m.TASK.SUBAGENT_COMPLETED:m.TASK.SUBAGENT_STARTED,{...Z,timestamp:new Date().toISOString()})}function y9($,Z,Q,W){i($,m.HOOKS.DISCOVERY_COMPLETED,{hookName:Z,globalCount:Q,workspaceCount:W,totalCount:Q+W,timestamp:new Date().toISOString()})}function h9($,Z){i($,m.TASK.COMPACTION_EXECUTED,{...Z,timestamp:new Date().toISOString()})}function k9($,Z){i($,m.TASK.COMPACTION_SKIPPED,{...Z,timestamp:new Date().toISOString()})}var HL=500,m;var _0=p$(()=>{m={CLIENT:{EXTENSION_ACTIVATED:"user.extension_activated"},SESSION:{STARTED:"session.started",ENDED:"session.ended"},AGENT:{UNEXPECTED_REASONING_TOKENS:jL},USER:{AUTH_STARTED:"user.auth_started",AUTH_SUCCEEDED:"user.auth_succeeded",AUTH_FAILED:"user.auth_failed",AUTH_LOGGED_OUT:"user.auth_logged_out",PROVIDER_CONFIGURED:"user.provider_configured",TELEMETRY_OPT_OUT:"user.opt_out"},TASK:{CREATED:"task.created",RESTARTED:"task.restarted",COMPLETED:"task.completed",CONVERSATION_TURN:"task.conversation_turn",TOKEN_USAGE:"task.tokens",MODE_SWITCH:"task.mode",TOOL_USED:"task.tool_used",SKILL_USED:"task.skill_used",DIFF_EDIT_FAILED:"task.diff_edit_failed",PROVIDER_API_ERROR:"task.provider_api_error",MENTION_USED:"task.mention_used",MENTION_FAILED:"task.mention_failed",MENTION_SEARCH_RESULTS:"task.mention_search_results",AGENT_CREATED:"task.agent_created",AGENT_TEAM_CREATED:"task.agent_team_created",SUBAGENT_STARTED:"task.subagent_started",SUBAGENT_COMPLETED:"task.subagent_completed",COMPACTION_EXECUTED:"task.compaction_executed",COMPACTION_SKIPPED:"task.compaction_skipped"},HOOKS:{DISCOVERY_COMPLETED:"hooks.discovery_completed"},WORKSPACE:{INITIALIZED:"workspace.initialized",INIT_ERROR:"workspace.init_error",PATH_RESOLVED:"workspace.path_resolved"},SDK:{ERROR:VL,TOOL_TIMEOUT:"sdk.tool_timeout"},FEATURE_FLAGS:{FLAG_CALLED:"$feature_flag_called"}}});import{mkdirSync as FL,readFileSync as AL,statSync as fL,writeFileSync as UL}from"node:fs";import{dirname as DL}from"node:path";import{resolveGlobalSettingsPath as bj}from"@cline/shared/storage";import{z as a$}from"zod";function I9(){return c4.parse({})}function _L(){x9=void 0}function zL($){if($.disabledTools)Object.freeze($.disabledTools);if($.disabledPlugins)Object.freeze($.disabledPlugins);return Object.freeze($)}function TL($){let Z;try{Z=AL($,"utf8")}catch{return I9()}try{let Q=c4.safeParse(JSON.parse(Z));return Q.success?Q.data:I9()}catch{return I9()}}function OL(){let $=bj(),Z=fL($,{throwIfNoEntry:!1}),Q=Z?.mtimeMs??0,W=Z?.size??0,J=x9;if(J&&J.path===$&&J.mtimeMs===Q&&J.size===W)return J;let X=zL(Z?TL($):I9());return x9={path:$,mtimeMs:Q,size:W,value:X},x9}function z0(){return OL().value}function B1($,Z={}){let Q=bj(),W=z0();FL(DL(Q),{recursive:!0});let J=c4.parse($);if(!W.telemetryOptOut&&J.telemetryOptOut)Cj(Z.telemetry);UL(Q,`${JSON.stringify(J,null,2)}
|
|
2
2
|
`,"utf8"),_L()}function g9(){return z0().telemetryOptOut}function yj($,Z={}){B1({...z0(),telemetryOptOut:$},Z)}function hj(){return z0().autoUpdateEnabled}function kj($,Z={}){B1({...z0(),autoUpdateEnabled:$},Z)}function Ij(){return z0().compactionStrategy??"basic"}function xj($){B1({...z0(),compactionStrategy:$})}function G1($){return new Set($??z0().disabledTools??[])}function u4($){return new Set($??z0().disabledPlugins??[])}function gj($){return G1().has($)}function m9($){let Z=z0(),Q=new Set(Z.disabledTools??[]),W=Q.has($);if(W)Q.delete($);else Q.add($);return B1({...Z,disabledTools:[...Q]}),!W}function fW($,Z){let Q=[...new Set($.map((X)=>X.trim()).filter(Boolean))];if(Q.length===0)return;let W=z0(),J=G1(W.disabledTools);for(let X of Q)if(Z)J.add(X);else J.delete(X);B1({...W,disabledTools:[...J]})}function mj($,Z){return fW([$],Z),Z}function vj($){return u4().has($)}function cj($,Z){let Q=$.trim();if(!Q)return;let W=z0(),J=u4(W.disabledPlugins);if(Z)J.add(Q);else J.delete(Q);B1({...W,disabledPlugins:[...J]})}function v9($,Z){let Q=u4(Z);if(Q.size===0)return[...$];return $.filter((W)=>!Q.has(W))}function y1($,Z){let Q=G1(Z);if(Q.size===0)return[...$];return $.filter((W)=>!Q.has(W.name))}function c9($,Z){if(!$||$.length===0)return $;let Q=G1(Z);if(Q.size===0)return $;return $.map((W)=>{if(!W.setup)return W;return{...W,setup:(J,X)=>W.setup?.({...J,registerTool:(Y)=>{if(!Q.has(Y.name))J.registerTool(Y)}},X)}})}var Sj,LL,c4,x9;var $1=p$(()=>{_0();Sj=a$.preprocess(($)=>Array.isArray($)?$.filter((Z)=>typeof Z==="string").map((Z)=>Z.trim()).filter(Boolean):void 0,a$.array(a$.string()).optional()).transform(($)=>{if(!$)return;let Z=[...new Set($)].sort((Q,W)=>Q.localeCompare(W));return Z.length>0?Z:void 0}),LL=a$.enum(["basic","agentic"]).catch("basic"),c4=a$.object({telemetryOptOut:a$.boolean().default(!1).catch(!1),autoUpdateEnabled:a$.boolean().default(!0).catch(!0),compactionStrategy:LL.optional(),disabledTools:Sj.optional(),disabledPlugins:Sj.optional()}).strip().transform(($)=>{let Z={autoUpdateEnabled:$.autoUpdateEnabled,telemetryOptOut:$.telemetryOptOut};if($.compactionStrategy)Z.compactionStrategy=$.compactionStrategy;if($.disabledTools?.length)Z.disabledTools=$.disabledTools;if($.disabledPlugins?.length)Z.disabledPlugins=$.disabledPlugins;return Z})});import{existsSync as qL,mkdirSync as ML,readFileSync as RL,writeFileSync as EL}from"node:fs";import{resolve as NL}from"node:path";import{resolveSessionDataDir as wL}from"@cline/shared/storage";import{nanoid as CL}from"nanoid";import*as PL from"node-machine-id";function P0($){let Z=$?.trim();if(Z)return Z;let Q=yL();if(Q)return Q;return hL()}function bL(){let $=PL;return $.machineIdSync??$.default?.machineIdSync}function yL(){try{let $=bL();if(!$)return;return $().trim()||void 0}catch{return}}function hL(){let $=wL(),Z=NL($,SL);try{if(qL(Z)){let W=RL(Z,"utf8").trim();if(W.length>0)return W}}catch{}let Q=`cl-${CL()}`;try{ML($,{recursive:!0}),EL(Z,Q,"utf8")}catch{}return Q}var SL="machine-id";var J8=()=>{};class l4{name;metadata;meter;logger;enabled;distinctId;commonProperties;counters=new Map;histograms=new Map;gauges=new Map;gaugeValues=new Map;meterProvider;loggerProvider;constructor($){this.name=$.name??"OpenTelemetryAdapter",this.metadata={...$.metadata},this.meterProvider=$.meterProvider,this.loggerProvider=$.loggerProvider,this.meter=$.meterProvider?.getMeter("cline")??null,this.logger=$.loggerProvider?.getLogger("cline")??null,this.enabled=$.enabled??!0,this.distinctId=$.distinctId,this.commonProperties=$.commonProperties?{...$.commonProperties}:{}}emit($,Z){if(!this.isEnabled())return;this.emitLog($,Z,!1)}emitRequired($,Z){this.emitLog($,Z,!0)}recordCounter($,Z,Q,W,J=!1){if(!this.meter||!J&&!this.isEnabled())return;let X=this.counters.get($);if(!X)X=this.meter.createCounter($,W?{description:W}:void 0),this.counters.set($,X);X.add(Z,this.flattenProperties(this.buildAttributes(Q)))}recordHistogram($,Z,Q,W,J=!1){if(!this.meter||!J&&!this.isEnabled())return;let X=this.histograms.get($);if(!X)X=this.meter.createHistogram($,W?{description:W}:void 0),this.histograms.set($,X);X.record(Z,this.flattenProperties(this.buildAttributes(Q)))}recordGauge($,Z,Q,W,J=!1){if(!this.meter||!J&&!this.isEnabled())return;let X=this.buildAttributes(Q),Y=JSON.stringify(X),j=this.gaugeValues.get($);if(Z===null){if(j){if(j.delete(Y),j.size===0)this.gaugeValues.delete($),this.gauges.delete($)}return}let V=j;if(!V)V=new Map,this.gaugeValues.set($,V);if(!this.gauges.has($)){let H=this.meter.createObservableGauge($,W?{description:W}:void 0);H.addCallback((B)=>{for(let G of this.snapshotGaugeSeries($))B.observe(G.value,this.flattenProperties(G.attributes))}),this.gauges.set($,H)}V.set(Y,{value:Z,attributes:X})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}setDistinctId($){this.distinctId=$}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}async flush(){await Promise.all([this.meterProvider?.forceFlush?.(),this.loggerProvider?.forceFlush?.()])}async dispose(){await Promise.all([this.meterProvider?.shutdown?.(),this.loggerProvider?.shutdown?.()])}emitLog($,Z,Q){if(!this.logger)return;let W=this.flattenProperties(this.buildAttributes(Z,Q));this.logger.emit({severityText:"INFO",body:$,attributes:W})}buildAttributes($,Z=!1){return{...this.commonProperties,...this.metadata,...$,...this.distinctId?{distinct_id:this.distinctId}:{},...Z?{_required:!0}:{}}}snapshotGaugeSeries($){let Z=this.gaugeValues.get($);if(!Z)return[];return Array.from(Z.values(),(Q)=>({value:Q.value,attributes:Q.attributes?{...Q.attributes}:void 0}))}flattenProperties($,Z="",Q=new WeakSet,W=0){if(!$)return{};let J={},X=100,Y=10;for(let[j,V]of Object.entries($)){if(j==="__proto__"||j==="constructor"||j==="prototype")continue;let H=Z?`${Z}.${j}`:j;if(V===null||V===void 0){J[H]=String(V);continue}if(Array.isArray(V)){let B=V.length>X?V.slice(0,X):V;try{J[H]=JSON.stringify(B)}catch{J[H]="[UnserializableArray]"}if(V.length>X)J[`${H}_truncated`]=!0,J[`${H}_original_length`]=V.length;continue}if(typeof V==="object"){if(V instanceof Date){J[H]=V.toISOString();continue}if(V instanceof Error){J[H]=V.message;continue}if(Q.has(V)){J[H]="[Circular]";continue}if(W>=Y){J[H]="[MaxDepthExceeded]";continue}Q.add(V),Object.assign(J,this.flattenProperties(V,H,Q,W+1));continue}if(kL(V)){J[H]=V;continue}try{J[H]=JSON.stringify(V)}catch{J[H]=String(V)}}return J}}function kL($){return typeof $==="string"||typeof $==="number"||typeof $==="boolean"}class p4{name;logger;enabled;constructor($={}){this.name=$.name??"TelemetryLoggerSink",this.logger=$.logger,this.enabled=$.enabled??!0}emit($,Z){if(!this.isEnabled())return;this.logger?.log("telemetry.event",{telemetrySink:this.name,event:$,properties:Z})}emitRequired($,Z){this.logger?.log("telemetry.required_event",{telemetrySink:this.name,severity:"warn",event:$,properties:Z})}recordCounter($,Z,Q,W,J){if(!J&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"counter",name:$,value:Z,attributes:Q,description:W,required:J===!0})}recordHistogram($,Z,Q,W,J){if(!J&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"histogram",name:$,value:Z,attributes:Q,description:W,required:J===!0})}recordGauge($,Z,Q,W,J){if(!J&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"gauge",name:$,value:Z,attributes:Q,description:W,required:J===!0})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}async flush(){}async dispose(){}}class X8{adapters;metadata;distinctId;commonProperties;constructor($={}){if(this.adapters=[...$.adapters??[]],$.logger)this.adapters.push(new p4({logger:$.logger}));this.metadata={...$.metadata??{}},this.distinctId=$.distinctId,this.commonProperties={...$.commonProperties??{}}}addAdapter($){this.adapters.push($)}setDistinctId($){this.distinctId=$}setMetadata($){this.metadata={...$}}updateMetadata($){this.metadata={...this.metadata,...$}}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}isEnabled(){return this.adapters.some(($)=>$.isEnabled())}capture($){let Z=this.buildAttributes($.properties);for(let Q of this.adapters)Q.emit($.event,Z)}captureRequired($,Z){let Q=this.buildAttributes(Z);for(let W of this.adapters)W.emitRequired($,Q)}recordCounter($,Z,Q,W,J=!1){let X=this.buildAttributes(Q);for(let Y of this.adapters)Y.recordCounter($,Z,X,W,J)}recordHistogram($,Z,Q,W,J=!1){let X=this.buildAttributes(Q);for(let Y of this.adapters)Y.recordHistogram($,Z,X,W,J)}recordGauge($,Z,Q,W,J=!1){let X=this.buildAttributes(Q);for(let Y of this.adapters)Y.recordGauge($,Z,X,W,J)}async flush(){await Promise.all(this.adapters.map(($)=>$.flush()))}async dispose(){await Promise.all(this.adapters.map(($)=>$.dispose()))}buildAttributes($){return{...this.commonProperties,...$,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{}}}}var UW=()=>{};import{metrics as IL,trace as xL}from"@opentelemetry/api";import{logs as gL}from"@opentelemetry/api-logs";import{OTLPLogExporter as mL}from"@opentelemetry/exporter-logs-otlp-http";import{OTLPMetricExporter as vL}from"@opentelemetry/exporter-metrics-otlp-http";import{OTLPTraceExporter as cL}from"@opentelemetry/exporter-trace-otlp-http";import{resourceFromAttributes as uL}from"@opentelemetry/resources";import{BatchLogRecordProcessor as dL,ConsoleLogRecordExporter as lL,LoggerProvider as pL}from"@opentelemetry/sdk-logs";import{ConsoleMetricExporter as rL,MeterProvider as iL,PeriodicExportingMetricReader as uj}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as nL,ConsoleSpanExporter as aL,SimpleSpanProcessor as sL}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as oL}from"@opentelemetry/sdk-trace-node";import{ATTR_SERVICE_NAME as tL,ATTR_SERVICE_VERSION as eL}from"@opentelemetry/semantic-conventions";class dj{distinctId;metadata;commonProperties;constructor($={}){this.distinctId=$.distinctId,this.metadata={...$.metadata??{}},this.commonProperties={...$.commonProperties??{}}}setDistinctId($){this.distinctId=$}setMetadata($){this.metadata={...$}}updateMetadata($){this.metadata={...this.metadata,...$}}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}isEnabled(){return!1}capture($){this.resolveProperties($.properties)}captureRequired($,Z){this.resolveProperties(Z)}recordCounter(){}recordHistogram(){}recordGauge(){}async flush(){}async dispose(){}resolveProperties($){return{...this.commonProperties,...$,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{}}}}class Y8{meterProvider;loggerProvider;tracerProvider;options;constructor($={}){this.options=$;let Z=uL({[tL]:$.serviceName??"cline",...$.serviceVersion?{[eL]:$.serviceVersion}:{}});if(this.meterProvider=this.createMeterProvider(Z),this.loggerProvider=this.createLoggerProvider(Z),this.tracerProvider=this.createTracerProvider(Z),this.meterProvider)IL.setGlobalMeterProvider(this.meterProvider);if(this.loggerProvider)gL.setGlobalLoggerProvider(this.loggerProvider);if(this.tracerProvider)this.tracerProvider.register()}getTracer($="cline",Z){return xL.getTracer($,Z??this.options.serviceVersion)}createAdapter($){return new l4({...$,meterProvider:this.meterProvider,loggerProvider:this.loggerProvider})}createTelemetryService($){let Z=this.createAdapter({name:$.name,enabled:this.options.enabled,metadata:$.metadata});return new X8({...$,adapters:[Z],distinctId:P0($.distinctId)})}async forceFlush(){await Promise.all([this.meterProvider?.forceFlush?.(),this.loggerProvider?.forceFlush?.(),this.tracerProvider?.forceFlush?.()])}async dispose(){await Promise.all([this.meterProvider?.shutdown?.(),this.loggerProvider?.shutdown?.(),this.tracerProvider?.shutdown?.()])}createMeterProvider($){let Z=DW(this.options.metricsExporter);if(Z.length===0)return null;let Q=Math.max(1000,this.options.metricExportIntervalMs??this.options.metricExportInterval??60000),W=Math.min(30000,Math.floor(Q*0.8)),J=Z.map((X)=>Q_(X,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json",interval:Q,timeout:W})).filter((X)=>X!==null);if(J.length===0)return null;return new iL({resource:$,readers:J})}createTracerProvider($){let Z=DW(this.options.tracesExporter);if(Z.length===0)return null;let Q=this.options.otlpTracesEndpoint??this.options.otlpEndpoint,W=this.options.otlpTracesHeaders??this.options.otlpHeaders,J=[];for(let X of Z){let Y=Z_(X,{endpoint:Q,headers:W,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(Y)J.push(Y)}if(J.length===0)return null;return new oL({resource:$,spanProcessors:J})}createLoggerProvider($){let Z=DW(this.options.logsExporter);if(Z.length===0)return null;let Q=Z.map((W)=>{let J=$_(W,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(!J)return null;return new dL(J,{maxQueueSize:this.options.logMaxQueueSize??2048,maxExportBatchSize:this.options.logBatchSize??512,scheduledDelayMillis:this.options.logBatchTimeoutMs??this.options.logBatchTimeout??5000})}).filter((W)=>W!==null);if(Q.length===0)return null;return new pL({resource:$,processors:Q})}}function r4($){let Z=new Y8($),Q=Z.createTelemetryService($);return Q.captureRequired("telemetry.provider_created",{provider:"opentelemetry",enabled:$.enabled??!0,logsExporter:Array.isArray($.logsExporter)?$.logsExporter.join(","):$.logsExporter,metricsExporter:Array.isArray($.metricsExporter)?$.metricsExporter.join(","):$.metricsExporter,tracesExporter:Array.isArray($.tracesExporter)?$.tracesExporter.join(","):$.tracesExporter,otlpProtocol:$.otlpProtocol,hasOtlpEndpoint:Boolean($.otlpEndpoint),serviceName:$.serviceName,serviceVersion:$.serviceVersion}),{provider:Z,telemetry:Q}}function h1($){if(g9())return{telemetry:new dj($)};if($.enabled!==!0)return{telemetry:new X8({...$,distinctId:P0($.distinctId)})};return r4($)}function j8($){let{telemetry:Z,provider:Q}=h1($);return{telemetry:Z,provider:Q,flush:async()=>{let X=Q;if(X&&typeof X.forceFlush==="function")try{await X.forceFlush()}catch{}},dispose:async()=>{await Promise.allSettled([Z.dispose(),Q?.dispose()])}}}function DW($){if(!$)return[];return(Array.isArray($)?$:$.split(",")).map((Q)=>Q.trim()).filter((Q)=>Q==="console"||Q==="otlp")}function $_($,Z){if($==="console")return new lL;if(!Z.endpoint)return null;let Q=LW(Z.endpoint,"/v1/logs");return new mL({url:Q,headers:Z.headers})}function Z_($,Z){if($==="console")return new sL(new aL);if(!Z.endpoint)return null;let Q=LW(Z.endpoint,"/v1/traces");return new nL(new cL({url:Q,headers:Z.headers}))}function Q_($,Z){if($==="console")return new uj({exporter:new rL,exportIntervalMillis:Z.interval,exportTimeoutMillis:Z.timeout});if(!Z.endpoint)return null;let Q=LW(Z.endpoint,"/v1/metrics");return new uj({exporter:new vL({url:Q,headers:Z.headers}),exportIntervalMillis:Z.interval,exportTimeoutMillis:Z.timeout})}function LW($,Z){let Q=new URL($),W=Q.pathname.endsWith("/")?Q.pathname.slice(0,-1):Q.pathname;return Q.pathname=W.endsWith(Z)?W:`${W}${Z}`,Q.toString()}var u9=p$(()=>{$1();J8();UW()});var _B={};N(_B,{normalizeUserMessage:()=>nq,buildInitialUserContent:()=>iq});async function iq($,Z,Q,W){let J=aq(Z),X=await oq(Q,W);if(J.length===0&&!X)return $;let Y=[{type:"text",text:$},...J];if(X)Y.push(...X);return Y}function nq($){if($==null)return"";if(typeof $==="string")return $;let Z=$.content;if(typeof Z==="string")return Z;if(!Array.isArray(Z))return"";let Q=[];for(let W of Z)if(W&&typeof W==="object"&&W.type==="text"){let J=W.text;if(typeof J==="string")Q.push(J)}return Q.join(`
|
|
3
|
-
`)}function aq($){if(!$||$.length===0)return[];let Z=[];for(let Q of $){let W=sq(Q);if(W)Z.push(W)}return Z}function sq($){let Z=$.trim();if(!Z)return;let Q=Z.match(/^data:([^;,]+);base64,(.+)$/);if(Q){let W=Q[1],J=Q[2];if(!W||!J)return;return{type:"image",mediaType:W,data:J}}return{type:"image",mediaType:"image/png",data:Z}}async function oq($,Z){if(!$||$.length===0)return;let Q=Z??(async()=>{throw Error("File loading is not configured in this runtime. Provide userFileContentLoader to enable userFiles support.")}),W=await Promise.all($.map(async(J)=>{let X=J.replace(/\\/g,"/");try{let Y=await Q(J);return{type:"file",path:X,content:Y}}catch(Y){let j=Y instanceof Error?Y.message:String(Y);return{type:"file",path:X,content:`Error fetching content: ${j}`}}}));if(W.length===0)return;return W}var pK={};N(pK,{updateMcpSettingsFileSync:()=>j1,updateMcpSettingsFile:()=>t8,updateMcpServerOAuthStateAsync:()=>O5,updateMcpServerOAuthState:()=>P2,setMcpServerDisabled:()=>w2,resolveMcpServerRegistrations:()=>p0,resolveDefaultMcpSettingsPath:()=>Z0,registerMcpServersFromSettingsFile:()=>S2,normalizeMcpServerOAuthState:()=>e8,loadMcpSettingsFile:()=>N2,listMcpServerOAuthStatuses:()=>q5,hasMcpSettingsFile:()=>s1,getMcpServerOAuthState:()=>C2,McpSettingsUpdateSkippedError:()=>o8,McpSettingsMutatorPurityError:()=>y$,McpSettingsLockTimeoutError:()=>h$});import{existsSync as PK,mkdirSync as qJ,readFileSync as SK,renameSync as EJ,rmdirSync as
|
|
4
|
-
`),J}finally{wQ.delete($.lockDir),Fw($)}}function j1($,Z,Q={}){let W=Aw($,Q);return uK(W,$,Z)}async function t8($,Z,Q={}){let W=await fw($,Q);return uK(W,$,Z)}function Uw($){let Z=_w($);if(!Z.mcpServers||typeof Z.mcpServers!=="object"||Array.isArray(Z.mcpServers))Z.mcpServers={};return Z}function Dw($,Z){let Q=JSON.stringify($),W=JSON.parse(Q),J=Z(W),X=JSON.stringify(W),Y=Z($);if(JSON.stringify($)!==X)throw new y$("MCP settings mutator must be deterministic and free of side effects; repeated calls produced different settings.");if(JSON.stringify(Y)!==JSON.stringify(J))throw new y$("MCP settings mutator must be deterministic and free of side effects; repeated calls produced different return values.");return Y}function Lw($){let Z=SK($,"utf8"),Q;try{Q=JSON.parse(Z)}catch(W){let J=W instanceof Error?W.message:String(W);throw Error(`Failed to parse MCP settings JSON at "${$}": ${J}`)}if(!Q||typeof Q!=="object"||Array.isArray(Q))throw Error(`Invalid MCP settings at "${$}": expected object.`);return Q}function _w($){try{return Lw($)}catch(Z){if(Z.code==="ENOENT")return{};throw Z}}function dK($,Z){if(!Object.hasOwn($,Z))return;let Q=$[Z];if(!Q||typeof Q!=="object"||Array.isArray(Q))return;return Q}function zw($,Z,Q){Object.defineProperty($,Z,{value:Q,enumerable:!0,configurable:!0,writable:!0})}function N2($={}){let Z=$.filePath??Z0(),Q=SK(Z,"utf8"),W;try{W=JSON.parse(Q)}catch(X){let Y=X instanceof Error?X.message:String(X);throw Error(`Failed to parse MCP settings JSON at "${Z}": ${Y}`)}let J=Vw.safeParse(W);if(!J.success){let X=J.error.issues.map((Y)=>{let j=Y.path.join(".");return j?`${j}: ${Y.message}`:Y.message}).join("; ");throw Error(`Invalid MCP settings at "${Z}": ${X}`)}return J.data}function e8($){if(!$)return;let Z={...$.clientInformation?{clientInformation:$.clientInformation}:{},...$.tokens?{tokens:$.tokens}:{},...$.codeVerifier?{codeVerifier:$.codeVerifier}:{},...$.discoveryState?{discoveryState:$.discoveryState}:{},...$.redirectUrl?{redirectUrl:$.redirectUrl}:{},...$.lastError?{lastError:$.lastError}:{},...$.lastAuthenticatedAt?{lastAuthenticatedAt:$.lastAuthenticatedAt}:{}};return Object.keys(Z).length>0?Z:void 0}function Tw($){if($===void 0)return;let Z=NJ.safeParse($);if(!Z.success)return;return e8(Z.data)}function s1($={}){let Z=$.filePath??Z0();return PK(Z)}function p0($={}){let Z=N2($);return Object.entries(Z.mcpServers).map(([Q,W])=>({name:Q,transport:W.transport,disabled:W.disabled,metadata:W.metadata,oauth:W.oauth}))}function w2($){let Z=$.filePath??Z0(),Q=$.name.trim();if(!Q)throw Error("MCP server settings toggle requires a server name.");j1(Z,(W)=>{let J=W.mcpServers;if(!J||typeof J!=="object"||Array.isArray(J))throw Error(`Invalid MCP settings at "${Z}": mcpServers must be an object.`);let X={...J},Y=dK(X,Q);if(!Y)throw Error(`Unknown MCP server: ${Q}`);let j={...Y};if($.disabled)j.disabled=!0;else delete j.disabled;zw(X,Q,j),W.mcpServers=X})}function C2($,Z={}){let Q=N2(Z);if(!Object.hasOwn(Q.mcpServers,$))return;return e8(Q.mcpServers[$]?.oauth)}function lK($,Z){return(Q)=>{let W=Q.mcpServers,J=dK(W,$);if(!J)throw Error(`Unknown MCP server: ${$}`);let X=Tw(J.oauth)??{},Y=e8(Z(X));if(Y)J.oauth=Y;else delete J.oauth;return Y??{}}}function P2($,Z,Q={}){let W=Q.filePath??Z0();return j1(W,lK($,Z))}async function O5($,Z,Q={}){let W=Q.filePath??Z0();return t8(W,lK($,Z))}function q5($={}){return p0($).map((Q)=>{let W=Q.transport.type!=="stdio",J=Q.oauth?.tokens?.access_token;return{serverName:Q.name,oauthSupported:W,oauthConfigured:W&&typeof J==="string"&&J.trim().length>0,lastError:Q.oauth?.lastError,lastAuthenticatedAt:Q.oauth?.lastAuthenticatedAt}}).sort((Q,W)=>Q.serverName.localeCompare(W.serverName))}async function S2($,Z={}){let Q=p0(Z);for(let W of Q)await $.registerServer(W);return Q}var T5,kK,NJ,eN,$w,Zw,Qw,Ww,Jw,IK,Xw,Yw,jw,Vw,o8,h$,y$,wJ=1e4,xK=25,Bw,wQ;var CQ=p$(()=>{T5=S.record(S.string(),S.string()),kK=S.record(S.string(),S.unknown()),NJ=S.object({clientInformation:S.record(S.string(),S.unknown()).optional(),tokens:S.record(S.string(),S.unknown()).optional(),codeVerifier:S.string().optional(),discoveryState:S.record(S.string(),S.unknown()).optional(),redirectUrl:S.string().url().optional(),lastError:S.string().optional(),lastAuthenticatedAt:S.number().int().positive().optional()}).strip(),eN=S.object({type:S.literal("stdio"),command:S.string().min(1),args:S.array(S.string()).optional(),cwd:S.string().min(1).optional(),env:T5.optional()}),$w=S.object({type:S.literal("sse"),url:S.string().url(),headers:T5.optional()}),Zw=S.object({type:S.literal("streamableHttp"),url:S.string().url(),headers:T5.optional()}),Qw=S.discriminatedUnion("type",[eN,$w,Zw]),Ww=S.object({transport:Qw,disabled:S.boolean().optional(),metadata:kK.optional(),oauth:NJ.optional()}),Jw=S.enum(["stdio","sse","http","streamableHttp"]).optional(),IK=S.object({type:S.enum(["stdio","sse","streamableHttp"]).optional(),transportType:Jw,disabled:S.boolean().optional(),metadata:kK.optional(),oauth:NJ.optional()});Xw=IK.extend({command:S.string().min(1),args:S.array(S.string()).optional(),cwd:S.string().min(1).optional(),env:T5.optional()}).superRefine(($,Z)=>{let Q=$.type??RJ($.transportType);if(Q&&Q!=="stdio")Z.addIssue({code:S.ZodIssueCode.custom,message:'Expected type "stdio" for command-based MCP server',path:["type"]})}).transform(($)=>({transport:{type:"stdio",command:$.command,args:$.args,cwd:$.cwd,env:$.env},disabled:$.disabled,metadata:$.metadata,oauth:$.oauth})),Yw=IK.extend({url:S.string().url(),headers:T5.optional()}).superRefine(($,Z)=>{let Q=$.type??RJ($.transportType)??"sse";if(Q!=="sse"&&Q!=="streamableHttp")Z.addIssue({code:S.ZodIssueCode.custom,message:'Expected type "sse" or "streamableHttp" for URL-based MCP server',path:["type"]})}).transform(($)=>{if(($.type??RJ($.transportType)??"sse")==="streamableHttp")return{transport:{type:"streamableHttp",url:$.url,headers:$.headers},disabled:$.disabled,metadata:$.metadata,oauth:$.oauth};return{transport:{type:"sse",url:$.url,headers:$.headers},disabled:$.disabled,metadata:$.metadata,oauth:$.oauth}}),jw=S.union([Ww,Xw,Yw]),Vw=S.object({mcpServers:S.record(S.string(),jw)}).passthrough();o8=class o8 extends Error{constructor($){super($);this.name="McpSettingsUpdateSkippedError"}};h$=class h$ extends Error{constructor($){super($);this.name="McpSettingsLockTimeoutError"}};y$=class y$ extends Error{constructor($){super($);this.name="McpSettingsMutatorPurityError"}};Bw=new Int32Array(new SharedArrayBuffer(4)),wQ=new Set});var IA={};N(IA,{resolveCoreDistinctId:()=>P0,createOpenTelemetryTelemetryService:()=>r4,createConfiguredTelemetryService:()=>h1,createConfiguredTelemetryHandle:()=>j8,OpenTelemetryProvider:()=>Y8,OpenTelemetryAdapter:()=>l4});var $7=p$(()=>{J8();u9()});var GU={};N(GU,{writeHubDiscovery:()=>p9,withHubStartupLock:()=>r9,verifyHubConnection:()=>A1,truncateNotificationBody:()=>J9,toHubStatusUrl:()=>OW,toHubHealthUrl:()=>i9,stopLocalHubServerGracefully:()=>hW,startHubWebSocketServer:()=>j9,startHubServer:()=>HU,spawnDetachedHubServerWithRetry:()=>H8,spawnDetachedHubServer:()=>wW,sendHubCommand:()=>_V,restartLocalHubIfIdleAfterStartupTimeout:()=>t9,resolveWorkspaceHubOwnerContext:()=>QV,resolveSharedHubOwnerContext:()=>Q1,resolveProductionHubOwnerContext:()=>F1,resolveHubUrl:()=>kW,resolveHubOwnerContext:()=>x1,resolveHubEndpointOptions:()=>K1,resolveHubBuildId:()=>l9,resolveDefaultHubPort:()=>V8,resolveDefaultHubPathname:()=>NW,resolveDefaultHubHost:()=>EW,resolveCompatibleLocalHubUrl:()=>o4,resolveClineDir:()=>tj,resolveClineDataDir:()=>o$,requestHubShutdown:()=>s4,rememberRecoverableLocalHubUrl:()=>B$,readHubDiscovery:()=>K0,readBearerToken:()=>l7,probeHubServer:()=>g1,probeHubConnection:()=>LV,prewarmDetachedHubServer:()=>a9,normalizeHubWebSocketUrl:()=>G$,isLocalHubOrigin:()=>MY,isLocalHubHostName:()=>p7,isHubReconnectableTransportError:()=>bW,isHubCommandTimeoutError:()=>o9,isDiscoveryFilePresent:()=>$V,ensureHubWebSocketServer:()=>r7,ensureHubServer:()=>BU,ensureDetachedHubServer:()=>VV,ensureCompatibleLocalHubUrl:()=>$2,createLocalHubScheduleRuntimeHandlers:()=>VU,createInMemoryHubOwnerContext:()=>ej,createHubServerUrl:()=>Z1,createHubAuthToken:()=>d9,createConfiguredTelemetryService:()=>h1,createConfiguredTelemetryHandle:()=>j8,connectToHub:()=>e9,clearHubDiscovery:()=>S0,NodeHubClient:()=>W1,NativeHubTransportAdapter:()=>Y9,HubUIClient:()=>gW,HubTransportError:()=>R0,HubSessionClient:()=>xW,HubServerTransport:()=>w4,HubScheduleService:()=>Z8,HubScheduleCommandService:()=>o2,HubCommandError:()=>B8,DEFAULT_HUB_PORT:()=>MW,DEFAULT_HUB_PATHNAME:()=>RW,DEFAULT_HUB_HOST:()=>qW,BrowserWebSocketHubAdapter:()=>X9});import{createSessionId as RD}from"@cline/shared";function g0($,Z){return{version:$.version,requestId:$.requestId,ok:!0,payload:Z}}function Yj($,Z,Q){return{version:$.version,requestId:$.requestId??RD("hubreq_"),ok:!1,error:{code:Z,message:Q}}}class o2{schedules;constructor($){this.schedules=$}async handleCommand($){try{switch($.command){case"schedule.create":return g0($,{schedule:this.schedules.createSchedule(this.toCreateInput($.payload??{}))});case"schedule.list":return g0($,{schedules:this.schedules.listSchedules({enabled:typeof $.payload?.enabled==="boolean"?$.payload.enabled:void 0,limit:typeof $.payload?.limit==="number"?$.payload.limit:void 0,tags:Array.isArray($.payload?.tags)?$.payload?.tags:void 0})});case"schedule.get":return g0($,{schedule:this.schedules.getSchedule(String($.payload?.scheduleId??""))});case"schedule.update":return g0($,{schedule:this.schedules.updateSchedule(String($.payload?.scheduleId??""),this.toUpdateInput($.payload??{}))});case"schedule.delete":return g0($,{deleted:this.schedules.deleteSchedule(String($.payload?.scheduleId??""))});case"schedule.enable":return g0($,{schedule:this.schedules.resumeSchedule(String($.payload?.scheduleId??""))});case"schedule.disable":return g0($,{schedule:this.schedules.pauseSchedule(String($.payload?.scheduleId??""))});case"schedule.trigger":return g0($,{execution:$.payload?.wait===!1?this.schedules.triggerScheduleNowDetached(String($.payload?.scheduleId??"")):await this.schedules.triggerScheduleNow(String($.payload?.scheduleId??""))});case"schedule.list_executions":return g0($,{executions:this.schedules.listScheduleExecutions({scheduleId:typeof $.payload?.scheduleId==="string"?$.payload.scheduleId:void 0,status:typeof $.payload?.status==="string"?$.payload.status:void 0,limit:typeof $.payload?.limit==="number"?$.payload.limit:void 0})});case"schedule.stats":return g0($,{stats:this.schedules.getScheduleStats(String($.payload?.scheduleId??""))});case"schedule.active":return g0($,{executions:this.schedules.getActiveExecutions()});case"schedule.upcoming":return g0($,{runs:this.schedules.getUpcomingRuns(typeof $.payload?.limit==="number"?$.payload.limit:void 0)});default:return Yj($,"unsupported_command",`Unsupported hub schedule command: ${$.command}`)}}catch(Z){return Yj($,"schedule_command_failed",Z instanceof Error?Z.message:String(Z))}}toCreateInput($){let Z=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider&&$.model?{providerId:String($.provider),modelId:String($.model)}:void 0;return{...$,modelSelection:Z}}toUpdateInput($){let Z=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider||$.model?{providerId:typeof $.provider==="string"?$.provider:"",modelId:typeof $.model==="string"?$.model:""}:void 0;return{...$,modelSelection:Z}}}class P4{store;nowFn;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now())}materializeAll(){let $={oneOffQueued:0,scheduleQueued:0},Z=this.store.listSpecs({triggerKind:"one_off",enabled:!0,parseStatus:"valid"});for(let W of Z)if(this.materializeOneOff(W))$.oneOffQueued+=1;let Q=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let W of Q)try{if(this.materializeSchedule(W))$.scheduleQueued+=1}catch{}return $}materializeOneOff($){if($.triggerKind!=="one_off")return!1;if(!$.enabled||$.removed)return!1;if(this.store.hasOneOffRunForRevision($.specId,$.revision))return!1;return this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"one_off",scheduledFor:new Date(this.nowFn()).toISOString()}),!0}materializeSchedule($){if($.triggerKind!=="schedule")return!1;if(!$.enabled||$.removed)return!1;if(!$.scheduleExpr)return!1;return this.store.materializeDueScheduleRun({specId:$.specId,nowMs:this.nowFn()}).queued}}import{basename as kD}from"node:path";import{buildClineSystemPrompt as ID}from"@cline/shared";import{nowIso as Kj}from"@cline/shared/db";var U0={READ_FILES:"read_files",SEARCH_CODEBASE:"search_codebase",RUN_COMMANDS:"run_commands",FETCH_WEB_CONTENT:"fetch_web_content",APPLY_PATCH:"apply_patch",EDITOR:"editor",SKILLS:"skills",ASK:"ask_question",SUBMIT_AND_EXIT:"submit_and_exit"},X$=[U0.READ_FILES,U0.SEARCH_CODEBASE,U0.RUN_COMMANDS,U0.FETCH_WEB_CONTENT,U0.APPLY_PATCH,U0.EDITOR,U0.SKILLS,U0.ASK,U0.SUBMIT_AND_EXIT];var Vj={};N(Vj,{mergeRulesForSystemPrompt:()=>e2,loadRulesForSystemPromptFromWatcher:()=>WW,listEnabledRulesFromWatcher:()=>jj,isRuleEnabled:()=>f9,formatRulesForSystemPrompt:()=>t2});function f9($){return $.disabled!==!0}function t2($){if($.length===0)return"";return`
|
|
3
|
+
`)}function aq($){if(!$||$.length===0)return[];let Z=[];for(let Q of $){let W=sq(Q);if(W)Z.push(W)}return Z}function sq($){let Z=$.trim();if(!Z)return;let Q=Z.match(/^data:([^;,]+);base64,(.+)$/);if(Q){let W=Q[1],J=Q[2];if(!W||!J)return;return{type:"image",mediaType:W,data:J}}return{type:"image",mediaType:"image/png",data:Z}}async function oq($,Z){if(!$||$.length===0)return;let Q=Z??(async()=>{throw Error("File loading is not configured in this runtime. Provide userFileContentLoader to enable userFiles support.")}),W=await Promise.all($.map(async(J)=>{let X=J.replace(/\\/g,"/");try{let Y=await Q(J);return{type:"file",path:X,content:Y}}catch(Y){let j=Y instanceof Error?Y.message:String(Y);return{type:"file",path:X,content:`Error fetching content: ${j}`}}}));if(W.length===0)return;return W}var pK={};N(pK,{updateMcpSettingsFileSync:()=>j1,updateMcpSettingsFile:()=>t8,updateMcpServerOAuthStateAsync:()=>O5,updateMcpServerOAuthState:()=>P2,setMcpServerDisabled:()=>w2,resolveMcpServerRegistrations:()=>p0,resolveDefaultMcpSettingsPath:()=>Z0,registerMcpServersFromSettingsFile:()=>S2,normalizeMcpServerOAuthState:()=>e8,loadMcpSettingsFile:()=>N2,listMcpServerOAuthStatuses:()=>q5,hasMcpSettingsFile:()=>s1,getMcpServerOAuthState:()=>C2,McpSettingsUpdateSkippedError:()=>o8,McpSettingsMutatorPurityError:()=>y$,McpSettingsLockTimeoutError:()=>h$});import{existsSync as PK,mkdirSync as qJ,readFileSync as SK,renameSync as EJ,rmdirSync as aN,rmSync as MJ,statSync as sN,unlinkSync as bK,writeFileSync as yK}from"node:fs";import{randomUUID as oN}from"node:crypto";import{dirname as hK,join as CK}from"node:path";import{setTimeout as tN}from"node:timers/promises";import{resolveMcpSettingsPath as eN}from"@cline/shared/storage";import{z as S}from"zod";function RJ($){if(!$)return;if($==="http")return"streamableHttp";return $}function Z0(){return eN()}function Bw($,Z){qJ(hK($),{recursive:!0});let Q=`${$}.tmp.${process.pid}.${Date.now()}.${Math.random().toString(36).slice(2)}`;try{yK(Q,Z,{encoding:"utf8",flag:"wx"}),EJ(Q,$)}catch(W){try{bK(Q)}catch{}throw W}}function Kw($){Atomics.wait(Gw,0,0,$)}function Fw($){return`${$}.lock`}function gK(){return`${process.pid}.${Date.now()}.${oN()}`}function mK($,Z){qJ(hK($),{recursive:!0});let Q=`${$}.tmp.${Z}`;MJ(Q,{recursive:!0,force:!0}),qJ(Q,{recursive:!0}),yK(CK(Q,`owner.${Z}`),Z,{encoding:"utf8",flag:"wx"});try{return EJ(Q,$),{lockDir:$,ownerFile:CK($,`owner.${Z}`)}}catch(W){if(MJ(Q,{recursive:!0,force:!0}),PK($))return;throw W}}function vK($,Z){let Q;try{Q=Date.now()-sN($).mtimeMs}catch(J){if(J.code==="ENOENT")return;throw J}if(Q<wJ)return;Z.logger?.log(`[mcp-settings] Stale lock directory at ${$} (age ${Q}ms); reclaiming.`,{severity:"warn"});let W=`${$}.stale.${gK()}`;try{EJ($,W)}catch(J){if(J.code==="ENOENT")return;throw J}MJ(W,{recursive:!0,force:!0})}function Aw($){try{bK($.ownerFile)}catch(Z){if(Z.code!=="ENOENT")throw Z}try{aN($.lockDir)}catch(Z){let Q=Z.code;if(Q!=="ENOENT"&&Q!=="ENOTEMPTY"&&Q!=="EEXIST")throw Z}}function cK($){let Z=Fw($);if(wQ.has(Z))throw Error(`Reentrant MCP settings update for ${$}. Keep mutators pure: compute values up front and do not call back into the settings API.`);return{lockDir:Z,token:gK()}}function fw($,Z){let{lockDir:Q,token:W}=cK($),J=Z.timeoutMs??wJ,X=Date.now();while(!0){let Y=mK(Q,W);if(Y)return wQ.add(Q),Y;if(Date.now()-X>J)throw new h$(`Timed out waiting for MCP settings lock at ${Q} after ${J}ms.`);vK(Q,Z),Kw(xK)}}async function Uw($,Z){let{lockDir:Q,token:W}=cK($),J=Z.timeoutMs??wJ,X=Date.now();while(!0){let Y=mK(Q,W);if(Y)return wQ.add(Q),Y;if(Date.now()-X>J)throw new h$(`Timed out waiting for MCP settings lock at ${Q} after ${J}ms.`);vK(Q,Z),await tN(xK)}}function uK($,Z,Q){try{let W=Dw(Z),J=Lw(W,Q);return Bw(Z,`${JSON.stringify(W,null,2)}
|
|
4
|
+
`),J}finally{wQ.delete($.lockDir),Aw($)}}function j1($,Z,Q={}){let W=fw($,Q);return uK(W,$,Z)}async function t8($,Z,Q={}){let W=await Uw($,Q);return uK(W,$,Z)}function Dw($){let Z=zw($);if(!Z.mcpServers||typeof Z.mcpServers!=="object"||Array.isArray(Z.mcpServers))Z.mcpServers={};return Z}function Lw($,Z){let Q=JSON.stringify($),W=JSON.parse(Q),J=Z(W),X=JSON.stringify(W),Y=Z($);if(JSON.stringify($)!==X)throw new y$("MCP settings mutator must be deterministic and free of side effects; repeated calls produced different settings.");if(JSON.stringify(Y)!==JSON.stringify(J))throw new y$("MCP settings mutator must be deterministic and free of side effects; repeated calls produced different return values.");return Y}function _w($){let Z=SK($,"utf8"),Q;try{Q=JSON.parse(Z)}catch(W){let J=W instanceof Error?W.message:String(W);throw Error(`Failed to parse MCP settings JSON at "${$}": ${J}`)}if(!Q||typeof Q!=="object"||Array.isArray(Q))throw Error(`Invalid MCP settings at "${$}": expected object.`);return Q}function zw($){try{return _w($)}catch(Z){if(Z.code==="ENOENT")return{};throw Z}}function dK($,Z){if(!Object.hasOwn($,Z))return;let Q=$[Z];if(!Q||typeof Q!=="object"||Array.isArray(Q))return;return Q}function Tw($,Z,Q){Object.defineProperty($,Z,{value:Q,enumerable:!0,configurable:!0,writable:!0})}function N2($={}){let Z=$.filePath??Z0(),Q=SK(Z,"utf8"),W;try{W=JSON.parse(Q)}catch(X){let Y=X instanceof Error?X.message:String(X);throw Error(`Failed to parse MCP settings JSON at "${Z}": ${Y}`)}let J=Hw.safeParse(W);if(!J.success){let X=J.error.issues.map((Y)=>{let j=Y.path.join(".");return j?`${j}: ${Y.message}`:Y.message}).join("; ");throw Error(`Invalid MCP settings at "${Z}": ${X}`)}return J.data}function e8($){if(!$)return;let Z={...$.clientInformation?{clientInformation:$.clientInformation}:{},...$.tokens?{tokens:$.tokens}:{},...$.codeVerifier?{codeVerifier:$.codeVerifier}:{},...$.discoveryState?{discoveryState:$.discoveryState}:{},...$.redirectUrl?{redirectUrl:$.redirectUrl}:{},...$.lastError?{lastError:$.lastError}:{},...$.lastAuthenticatedAt?{lastAuthenticatedAt:$.lastAuthenticatedAt}:{}};return Object.keys(Z).length>0?Z:void 0}function Ow($){if($===void 0)return;let Z=NJ.safeParse($);if(!Z.success)return;return e8(Z.data)}function s1($={}){let Z=$.filePath??Z0();return PK(Z)}function p0($={}){let Z=N2($);return Object.entries(Z.mcpServers).map(([Q,W])=>({name:Q,transport:W.transport,disabled:W.disabled,metadata:W.metadata,oauth:W.oauth}))}function w2($){let Z=$.filePath??Z0(),Q=$.name.trim();if(!Q)throw Error("MCP server settings toggle requires a server name.");j1(Z,(W)=>{let J=W.mcpServers;if(!J||typeof J!=="object"||Array.isArray(J))throw Error(`Invalid MCP settings at "${Z}": mcpServers must be an object.`);let X={...J},Y=dK(X,Q);if(!Y)throw Error(`Unknown MCP server: ${Q}`);let j={...Y};if($.disabled)j.disabled=!0;else delete j.disabled;Tw(X,Q,j),W.mcpServers=X})}function C2($,Z={}){let Q=N2(Z);if(!Object.hasOwn(Q.mcpServers,$))return;return e8(Q.mcpServers[$]?.oauth)}function lK($,Z){return(Q)=>{let W=Q.mcpServers,J=dK(W,$);if(!J)throw Error(`Unknown MCP server: ${$}`);let X=Ow(J.oauth)??{},Y=e8(Z(X));if(Y)J.oauth=Y;else delete J.oauth;return Y??{}}}function P2($,Z,Q={}){let W=Q.filePath??Z0();return j1(W,lK($,Z))}async function O5($,Z,Q={}){let W=Q.filePath??Z0();return t8(W,lK($,Z))}function q5($={}){return p0($).map((Q)=>{let W=Q.transport.type!=="stdio",J=Q.oauth?.tokens?.access_token;return{serverName:Q.name,oauthSupported:W,oauthConfigured:W&&typeof J==="string"&&J.trim().length>0,lastError:Q.oauth?.lastError,lastAuthenticatedAt:Q.oauth?.lastAuthenticatedAt}}).sort((Q,W)=>Q.serverName.localeCompare(W.serverName))}async function S2($,Z={}){let Q=p0(Z);for(let W of Q)await $.registerServer(W);return Q}var T5,kK,NJ,$w,Zw,Qw,Ww,Jw,Xw,IK,Yw,jw,Vw,Hw,o8,h$,y$,wJ=1e4,xK=25,Gw,wQ;var CQ=p$(()=>{T5=S.record(S.string(),S.string()),kK=S.record(S.string(),S.unknown()),NJ=S.object({clientInformation:S.record(S.string(),S.unknown()).optional(),tokens:S.record(S.string(),S.unknown()).optional(),codeVerifier:S.string().optional(),discoveryState:S.record(S.string(),S.unknown()).optional(),redirectUrl:S.string().url().optional(),lastError:S.string().optional(),lastAuthenticatedAt:S.number().int().positive().optional()}).strip(),$w=S.object({type:S.literal("stdio"),command:S.string().min(1),args:S.array(S.string()).optional(),cwd:S.string().min(1).optional(),env:T5.optional()}),Zw=S.object({type:S.literal("sse"),url:S.string().url(),headers:T5.optional()}),Qw=S.object({type:S.literal("streamableHttp"),url:S.string().url(),headers:T5.optional()}),Ww=S.discriminatedUnion("type",[$w,Zw,Qw]),Jw=S.object({transport:Ww,disabled:S.boolean().optional(),metadata:kK.optional(),oauth:NJ.optional()}),Xw=S.enum(["stdio","sse","http","streamableHttp"]).optional(),IK=S.object({type:S.enum(["stdio","sse","streamableHttp"]).optional(),transportType:Xw,disabled:S.boolean().optional(),metadata:kK.optional(),oauth:NJ.optional()});Yw=IK.extend({command:S.string().min(1),args:S.array(S.string()).optional(),cwd:S.string().min(1).optional(),env:T5.optional()}).superRefine(($,Z)=>{let Q=$.type??RJ($.transportType);if(Q&&Q!=="stdio")Z.addIssue({code:S.ZodIssueCode.custom,message:'Expected type "stdio" for command-based MCP server',path:["type"]})}).transform(($)=>({transport:{type:"stdio",command:$.command,args:$.args,cwd:$.cwd,env:$.env},disabled:$.disabled,metadata:$.metadata,oauth:$.oauth})),jw=IK.extend({url:S.string().url(),headers:T5.optional()}).superRefine(($,Z)=>{let Q=$.type??RJ($.transportType)??"sse";if(Q!=="sse"&&Q!=="streamableHttp")Z.addIssue({code:S.ZodIssueCode.custom,message:'Expected type "sse" or "streamableHttp" for URL-based MCP server',path:["type"]})}).transform(($)=>{if(($.type??RJ($.transportType)??"sse")==="streamableHttp")return{transport:{type:"streamableHttp",url:$.url,headers:$.headers},disabled:$.disabled,metadata:$.metadata,oauth:$.oauth};return{transport:{type:"sse",url:$.url,headers:$.headers},disabled:$.disabled,metadata:$.metadata,oauth:$.oauth}}),Vw=S.union([Jw,Yw,jw]),Hw=S.object({mcpServers:S.record(S.string(),Vw)}).passthrough();o8=class o8 extends Error{constructor($){super($);this.name="McpSettingsUpdateSkippedError"}};h$=class h$ extends Error{constructor($){super($);this.name="McpSettingsLockTimeoutError"}};y$=class y$ extends Error{constructor($){super($);this.name="McpSettingsMutatorPurityError"}};Gw=new Int32Array(new SharedArrayBuffer(4)),wQ=new Set});var IA={};N(IA,{resolveCoreDistinctId:()=>P0,createOpenTelemetryTelemetryService:()=>r4,createConfiguredTelemetryService:()=>h1,createConfiguredTelemetryHandle:()=>j8,OpenTelemetryProvider:()=>Y8,OpenTelemetryAdapter:()=>l4});var $7=p$(()=>{J8();u9()});var GU={};N(GU,{writeHubDiscovery:()=>p9,withHubStartupLock:()=>r9,verifyHubConnection:()=>A1,truncateNotificationBody:()=>J9,toHubStatusUrl:()=>OW,toHubHealthUrl:()=>i9,stopLocalHubServerGracefully:()=>hW,startHubWebSocketServer:()=>j9,startHubServer:()=>HU,spawnDetachedHubServerWithRetry:()=>H8,spawnDetachedHubServer:()=>wW,sendHubCommand:()=>_V,restartLocalHubIfIdleAfterStartupTimeout:()=>t9,resolveWorkspaceHubOwnerContext:()=>QV,resolveSharedHubOwnerContext:()=>Q1,resolveProductionHubOwnerContext:()=>F1,resolveHubUrl:()=>kW,resolveHubOwnerContext:()=>x1,resolveHubEndpointOptions:()=>K1,resolveHubBuildId:()=>l9,resolveDefaultHubPort:()=>V8,resolveDefaultHubPathname:()=>NW,resolveDefaultHubHost:()=>EW,resolveCompatibleLocalHubUrl:()=>o4,resolveClineDir:()=>tj,resolveClineDataDir:()=>o$,requestHubShutdown:()=>s4,rememberRecoverableLocalHubUrl:()=>B$,readHubDiscovery:()=>K0,readBearerToken:()=>l7,probeHubServer:()=>g1,probeHubConnection:()=>LV,prewarmDetachedHubServer:()=>a9,normalizeHubWebSocketUrl:()=>G$,isLocalHubOrigin:()=>MY,isLocalHubHostName:()=>p7,isHubReconnectableTransportError:()=>bW,isHubCommandTimeoutError:()=>o9,isDiscoveryFilePresent:()=>$V,ensureHubWebSocketServer:()=>r7,ensureHubServer:()=>BU,ensureDetachedHubServer:()=>VV,ensureCompatibleLocalHubUrl:()=>$2,createLocalHubScheduleRuntimeHandlers:()=>VU,createInMemoryHubOwnerContext:()=>ej,createHubServerUrl:()=>Z1,createHubAuthToken:()=>d9,createConfiguredTelemetryService:()=>h1,createConfiguredTelemetryHandle:()=>j8,connectToHub:()=>e9,clearHubDiscovery:()=>S0,NodeHubClient:()=>W1,NativeHubTransportAdapter:()=>Y9,HubUIClient:()=>gW,HubTransportError:()=>R0,HubSessionClient:()=>xW,HubServerTransport:()=>w4,HubScheduleService:()=>Z8,HubScheduleCommandService:()=>o2,HubCommandError:()=>B8,DEFAULT_HUB_PORT:()=>MW,DEFAULT_HUB_PATHNAME:()=>RW,DEFAULT_HUB_HOST:()=>qW,BrowserWebSocketHubAdapter:()=>X9});import{createSessionId as RD}from"@cline/shared";function g0($,Z){return{version:$.version,requestId:$.requestId,ok:!0,payload:Z}}function Yj($,Z,Q){return{version:$.version,requestId:$.requestId??RD("hubreq_"),ok:!1,error:{code:Z,message:Q}}}class o2{schedules;constructor($){this.schedules=$}async handleCommand($){try{switch($.command){case"schedule.create":return g0($,{schedule:this.schedules.createSchedule(this.toCreateInput($.payload??{}))});case"schedule.list":return g0($,{schedules:this.schedules.listSchedules({enabled:typeof $.payload?.enabled==="boolean"?$.payload.enabled:void 0,limit:typeof $.payload?.limit==="number"?$.payload.limit:void 0,tags:Array.isArray($.payload?.tags)?$.payload?.tags:void 0})});case"schedule.get":return g0($,{schedule:this.schedules.getSchedule(String($.payload?.scheduleId??""))});case"schedule.update":return g0($,{schedule:this.schedules.updateSchedule(String($.payload?.scheduleId??""),this.toUpdateInput($.payload??{}))});case"schedule.delete":return g0($,{deleted:this.schedules.deleteSchedule(String($.payload?.scheduleId??""))});case"schedule.enable":return g0($,{schedule:this.schedules.resumeSchedule(String($.payload?.scheduleId??""))});case"schedule.disable":return g0($,{schedule:this.schedules.pauseSchedule(String($.payload?.scheduleId??""))});case"schedule.trigger":return g0($,{execution:$.payload?.wait===!1?this.schedules.triggerScheduleNowDetached(String($.payload?.scheduleId??"")):await this.schedules.triggerScheduleNow(String($.payload?.scheduleId??""))});case"schedule.list_executions":return g0($,{executions:this.schedules.listScheduleExecutions({scheduleId:typeof $.payload?.scheduleId==="string"?$.payload.scheduleId:void 0,status:typeof $.payload?.status==="string"?$.payload.status:void 0,limit:typeof $.payload?.limit==="number"?$.payload.limit:void 0})});case"schedule.stats":return g0($,{stats:this.schedules.getScheduleStats(String($.payload?.scheduleId??""))});case"schedule.active":return g0($,{executions:this.schedules.getActiveExecutions()});case"schedule.upcoming":return g0($,{runs:this.schedules.getUpcomingRuns(typeof $.payload?.limit==="number"?$.payload.limit:void 0)});default:return Yj($,"unsupported_command",`Unsupported hub schedule command: ${$.command}`)}}catch(Z){return Yj($,"schedule_command_failed",Z instanceof Error?Z.message:String(Z))}}toCreateInput($){let Z=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider&&$.model?{providerId:String($.provider),modelId:String($.model)}:void 0;return{...$,modelSelection:Z}}toUpdateInput($){let Z=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider||$.model?{providerId:typeof $.provider==="string"?$.provider:"",modelId:typeof $.model==="string"?$.model:""}:void 0;return{...$,modelSelection:Z}}}class P4{store;nowFn;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now())}materializeAll(){let $={oneOffQueued:0,scheduleQueued:0},Z=this.store.listSpecs({triggerKind:"one_off",enabled:!0,parseStatus:"valid"});for(let W of Z)if(this.materializeOneOff(W))$.oneOffQueued+=1;let Q=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let W of Q)try{if(this.materializeSchedule(W))$.scheduleQueued+=1}catch{}return $}materializeOneOff($){if($.triggerKind!=="one_off")return!1;if(!$.enabled||$.removed)return!1;if(this.store.hasOneOffRunForRevision($.specId,$.revision))return!1;return this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"one_off",scheduledFor:new Date(this.nowFn()).toISOString()}),!0}materializeSchedule($){if($.triggerKind!=="schedule")return!1;if(!$.enabled||$.removed)return!1;if(!$.scheduleExpr)return!1;return this.store.materializeDueScheduleRun({specId:$.specId,nowMs:this.nowFn()}).queued}}import{basename as kD}from"node:path";import{buildClineSystemPrompt as ID}from"@cline/shared";import{nowIso as Kj}from"@cline/shared/db";var U0={READ_FILES:"read_files",SEARCH_CODEBASE:"search_codebase",RUN_COMMANDS:"run_commands",FETCH_WEB_CONTENT:"fetch_web_content",APPLY_PATCH:"apply_patch",EDITOR:"editor",SKILLS:"skills",ASK:"ask_question",SUBMIT_AND_EXIT:"submit_and_exit"},X$=[U0.READ_FILES,U0.SEARCH_CODEBASE,U0.RUN_COMMANDS,U0.FETCH_WEB_CONTENT,U0.APPLY_PATCH,U0.EDITOR,U0.SKILLS,U0.ASK,U0.SUBMIT_AND_EXIT];var Vj={};N(Vj,{mergeRulesForSystemPrompt:()=>e2,loadRulesForSystemPromptFromWatcher:()=>WW,listEnabledRulesFromWatcher:()=>jj,isRuleEnabled:()=>f9,formatRulesForSystemPrompt:()=>t2});function f9($){return $.disabled!==!0}function t2($){if($.length===0)return"";return`
|
|
5
5
|
|
|
6
6
|
# Rules
|
|
7
7
|
${$.map((Q)=>`## ${Q.name}
|
|
@@ -273,9 +273,9 @@ ${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
|
|
|
273
273
|
error = ?,
|
|
274
274
|
scheduled_for = COALESCE(?, scheduled_for),
|
|
275
275
|
updated_at = ?
|
|
276
|
-
WHERE run_id = ? AND claim_token = ?`).run($.error??null,$.scheduledFor??null,Z,$.runId,$.claimToken).changes??0)>0}attachSessionIdToRun($,Z){this.db.prepare("UPDATE cron_runs SET session_id = ?, updated_at = ? WHERE run_id = ?").run(Z,L0(),$)}attachReportPathToRun($,Z){this.db.prepare("UPDATE cron_runs SET report_path = ?, updated_at = ? WHERE run_id = ?").run(Z,L0(),$)}}function _9($){return $?new Date($).getTime():void 0}function XL($){let Z=$.metadata?{...$.metadata}:void 0;if(Z)delete Z.__hubScheduleCreatedBy,delete Z.__hubScheduleCwd,delete Z.__hubRuntimeOptions;return Z}function L9($){let Z=$.metadata;return{scheduleId:$.externalId,name:$.title,cronPattern:$.scheduleExpr??"",prompt:$.prompt??"",workspaceRoot:$.workspaceRoot??"",cwd:typeof Z?.__hubScheduleCwd==="string"?Z.__hubScheduleCwd:void 0,modelSelection:$.providerId||$.modelId?{providerId:$.providerId??"",modelId:$.modelId??""}:void 0,enabled:$.enabled&&!$.removed&&$.parseStatus==="valid",mode:$.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act",systemPrompt:$.systemPrompt,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,maxParallel:$.maxParallel??1,createdAt:new Date($.createdAt).getTime(),updatedAt:new Date($.updatedAt).getTime(),nextRunAt:_9($.nextRunAt),lastRunAt:_9($.lastRunAt),createdBy:typeof Z?.__hubScheduleCreatedBy==="string"?Z.__hubScheduleCreatedBy:void 0,tags:$.tags,runtimeOptions:Z?.__hubRuntimeOptions&&typeof Z.__hubRuntimeOptions==="object"&&!Array.isArray(Z.__hubRuntimeOptions)?Z.__hubRuntimeOptions:void 0,metadata:XL($)}}function YL($){switch($){case"done":return"success";case"cancelled":return"aborted";case"running":return"running";case"queued":return"pending";default:return"failed"}}function AW($,Z){return{executionId:$.runId,scheduleId:Z,sessionId:$.sessionId,triggeredAt:new Date($.scheduledFor??$.createdAt).getTime(),startedAt:_9($.startedAt),endedAt:_9($.completedAt),status:YL($.status),errorMessage:$.error}}class Z8{store;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new x4({dbPath:$.dbPath}),this.materializer=new P4({store:this.store}),this.runner=new y4({store:this.store,materializer:this.materializer,runtimeHandlers:$.runtimeHandlers,eventPublisher:$.eventPublisher,workspaceRoot:"",logger:$.logger,pollIntervalMs:$.pollIntervalMs,claimLeaseSeconds:$.claimLeaseSeconds,globalMaxConcurrency:$.globalMaxConcurrency})}async start(){if(this.disposed)throw Error("HubScheduleService has been disposed");if(this.started)return;this.started=!0,await this.runner.start()}async stop(){await this.runner.stop(),this.started=!1}async dispose(){if(this.disposed)return;this.disposed=!0,await this.runner.dispose(),this.store.close()}createSchedule($){if(BW($.cronPattern),!$.workspaceRoot?.trim())throw Error("workspaceRoot is required for schedules");return L9(this.store.createHubSchedule($))}getSchedule($){let Z=this.store.getHubSchedule($);return Z?L9(Z):void 0}listSchedules($={}){return this.store.listHubSchedules($).map((Z)=>L9(Z))}updateSchedule($,Z){if(Z.cronPattern!==void 0)BW(Z.cronPattern);let Q=this.store.getHubSchedule($);if(!Q)return;let W=Z.workspaceRoot!==void 0?Z.workspaceRoot.trim():Q.workspaceRoot;if((Z.enabled??Q.enabled)&&!W)throw Error("workspaceRoot is required for enabled schedules");let X=this.store.updateHubSchedule($,{...Z,scheduleId:$});return X?L9(X):void 0}deleteSchedule($){return this.store.deleteHubSchedule($)}pauseSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!1})}resumeSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!0})}async triggerScheduleNow($){let Z=this.store.enqueueHubScheduleRun($,"manual");if(!Z)return;await this.runner.tick();let Q=this.store.getRun(Z.runId)??Z;return AW(Q,$)}triggerScheduleNowDetached($){let Z=this.store.enqueueHubScheduleRun($,"manual");if(!Z)return;return this.runner.tick().catch(()=>{return}),AW(Z,$)}listScheduleExecutions($){let Z=$.scheduleId?this.store.getHubSchedule($.scheduleId):void 0,Q={specId:Z?.specId,limit:$.limit};return this.store.listRuns(Q).map((J)=>{let X=Z??this.store.getSpec(J.specId);if(!X||X.source!=="hub-schedule")return;return AW(J,X.externalId)}).filter((J)=>{if(!J)return!1;return!$.status||J.status===$.status})}getScheduleStats($){let Z=this.listScheduleExecutions({scheduleId:$,limit:1e4});if(Z.length===0)return{totalRuns:0,successRate:0,avgDurationSeconds:0};let Q=0,W=0,J=0,X;for(let Y of Z){if(Y.status==="success"||Y.status==="completed")Q+=1;if(!X&&Y.status!=="success"&&Y.status!=="completed")X=Y;if(Y.startedAt&&Y.endedAt)J+=Y.endedAt-Y.startedAt,W+=1}return{totalRuns:Z.length,successRate:Q/Z.length,avgDurationSeconds:W>0?J/W/1000:0,lastFailure:X}}getActiveExecutions(){return this.runner.getActiveRuns().flatMap(($)=>{let Z=this.store.getSpec($.specId);if(!Z||Z.source!=="hub-schedule"||!$.sessionId)return[];return[{executionId:$.runId,scheduleId:Z.externalId,sessionId:$.sessionId,startedAt:$.startedAt??new Date().toISOString(),timeoutAt:Z.timeoutSeconds&&$.startedAt?new Date(new Date($.startedAt).getTime()+Z.timeoutSeconds*1000).toISOString():void 0}]})}getUpcomingRuns($=20){let Z={triggerKind:"schedule",enabled:!0,limit:$};return this.store.listSpecs(Z).flatMap((Q)=>Q.source==="hub-schedule"&&Q.nextRunAt?[{spec:Q,nextRunAt:Q.nextRunAt}]:[]).sort((Q,W)=>String(Q.nextRunAt).localeCompare(String(W.nextRunAt))).slice(0,$).map(({spec:Q,nextRunAt:W})=>({scheduleId:Q.externalId,name:Q.title,nextRunAt:W}))}}u9();import{createSessionId as s_,isHubProtocolCompatible as o_,resolveClineBuildEnv as t_,resolveHubCommandTimeoutMs as e_}from"@cline/shared";var lj={};N(lj,{splitCoreSessionConfig:()=>i4,isSessionNotFoundError:()=>I1,SessionNotFoundError:()=>k1,SESSION_NOT_FOUND_ERROR_CODE:()=>s$});var s$="session_not_found";class k1 extends Error{sessionId;code="session_not_found";constructor($,Z){super(Z??($?`session not found: ${$}`:"session not found"));this.sessionId=$;this.name="SessionNotFoundError"}}function I1($){return $ instanceof k1||typeof $==="object"&&$!==null&&"code"in $&&$.code==="session_not_found"}function i4($){let{hooks:Z,logger:Q,telemetry:W,extensionContext:J,extraTools:X,extensions:Y,onTeamEvent:j,onConsecutiveMistakeLimitReached:V,checkpoint:H,compaction:B,...G}=$,K={};if(Z)K.hooks=Z;if(Q)K.logger=Q;if(W)K.telemetry=W;if(J)K.extensionContext=J;if(X)K.extraTools=X;if(Y)K.extensions=Y;if(j)K.onTeamEvent=j;if(V)K.onConsecutiveMistakeLimitReached=V;if(H?.createCheckpoint)K.checkpoint=H;if(B?.compact)K.compaction=B;let F=Object.keys(K).length>0?K:void 0;return{config:{...G,...H?{checkpoint:{enabled:H.enabled}}:{},...B?{compaction:{enabled:B.enabled,strategy:B.strategy,thresholdRatio:B.thresholdRatio,reserveTokens:B.reserveTokens,preserveRecentTokens:B.preserveRecentTokens,maxInputTokens:B.maxInputTokens,summarizer:B.summarizer}}:{}},...F?{localRuntime:F}:{}}}import{spawn as N_}from"node:child_process";import{closeSync as w_,mkdirSync as C_,openSync as P_}from"node:fs";import{basename as S_,dirname as b_,join as y_}from"node:path";import{fileURLToPath as h_}from"node:url";import{CLINE_RUN_AS_HUB_DAEMON_ENV as k_,isHubDaemonProcess as JV,isHubProtocolCompatible as I_,resolveClineBuildEnv as XV,withResolvedClineBuildEnv as x_}from"@cline/shared";import{createHash as W_,randomBytes as J_}from"node:crypto";import{existsSync as X_}from"node:fs";import{chmod as Y_,mkdir as _W,readFile as aj,rm as zW,writeFile as sj}from"node:fs/promises";import{dirname as oj,join as TW}from"node:path";import{resolveClineDataDir as o$,resolveClineDir as tj}from"@cline/shared/storage";var rj="0.0.55";var n4={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:rj,repository:{type:"git",url:"https://github.com/cline/cline",directory:"sdk/packages/core"},type:"module",types:"./dist/index.d.ts",main:"./dist/index.js",private:!1,publishConfig:{access:"public"},exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.js"},"./hub":{types:"./dist/hub/index.d.ts",import:"./dist/hub/index.js"},"./hub/daemon-entry":{types:"./dist/hub/daemon/entry.d.ts",import:"./dist/hub/daemon/entry.js"},"./telemetry":{types:"./dist/services/telemetry/index.d.ts",import:"./dist/services/telemetry/index.js"},"./services/feature-flags/posthog":{types:"./dist/services/feature-flags/posthog.d.ts",import:"./dist/services/feature-flags/posthog.js"}},scripts:{build:"bun run ./bun.mts && bun tsc -p tsconfig.build.json",typecheck:"bun tsc -p tsconfig.dev.json --noEmit && bun run typecheck:smoke","typecheck:smoke":"bun tsc -p tsconfig.smoke.json --noEmit",test:"bun run test:unit && bun run test:e2e","test:live":"vitest run --config vitest.config.ts src/extensions/context/compaction.live.test.ts","test:unit":"vitest run --config vitest.config.ts","test:e2e":"vitest run --config vitest.e2e.config.ts","verify:routines":"zsh -lc 'bunx vitest run src/cron/schedule-service.test.ts --config vitest.config.ts'","test:watch":"vitest --config vitest.config.ts"},dependencies:{"@cline/agents":"workspace:*","@cline/shared":"workspace:*","@cline/llms":"workspace:*","@modelcontextprotocol/sdk":"^1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.214.0","@opentelemetry/exporter-logs-otlp-http":"^0.214.0","@opentelemetry/exporter-metrics-otlp-http":"^0.214.0","@opentelemetry/exporter-trace-otlp-http":"^0.214.0","@opentelemetry/resources":"^2.6.1","@opentelemetry/sdk-logs":"^0.214.0","@opentelemetry/sdk-metrics":"^2.6.1","@opentelemetry/sdk-trace-base":"^2.6.1","@opentelemetry/sdk-trace-node":"^2.6.1","@opentelemetry/semantic-conventions":"^1.40.0",jiti:"^2.7.0","node-machine-id":"^1.1.12",nanoid:"^5.1.7","simple-git":"3.36.0",ws:"^8.20.0",yaml:"^2.8.2",zod:"^4.3.6"},peerDependencies:{"posthog-node":"^5.8.0"},peerDependenciesMeta:{"posthog-node":{optional:!0}},devDependencies:{"@types/ws":"^8.18.1","posthog-node":"^5.8.0"},engines:{node:">=22"},files:["dist","!dist/**/*.d.ts.map"]};var j_="CLINE_HUB_DISCOVERY_PATH",V_="CLINE_HUB_BUILD_ID",ij=30000,H_=15000,B_=100;function G_($){return $.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function K_($){return W_("sha256").update($).digest("hex").slice(0,12)}function F_($){if(!Number.isInteger($)||!$||$<=0)return!1;try{return process.kill($,0),!0}catch(Z){return Z instanceof Error&&"code"in Z?String(Z.code)==="EPERM":!1}}function d9(){return J_(32).toString("hex")}function A_($){return new Promise((Z)=>setTimeout(Z,$))}function f_($){return`${$}.lock`}async function U_($){try{let Z=JSON.parse(await aj(TW($,"owner.json"),"utf8"));if(typeof Z.pid!=="number"||typeof Z.acquiredAt!=="string")return;return{pid:Z.pid,acquiredAt:Z.acquiredAt}}catch{return}}async function nj($){await zW($,{recursive:!0,force:!0}).catch(()=>{return})}function l9(){return process.env[V_]?.trim()||String(n4.version)}function x1($=process.argv[1]?.trim()||process.cwd()){let Z=`hub-${K_($)}`,Q=process.env[j_]?.trim()||TW(o$(),"locks","hub","owners",`${G_(Z)}.json`);return{ownerId:Z,discoveryPath:Q}}function ej($=`hub-${Date.now().toString(36)}`){return x1($)}async function K0($){try{let Z=JSON.parse(await aj($,"utf8"));if(typeof Z.hubId!=="string"||typeof Z.protocolVersion!=="string"||typeof Z.authToken!=="string"||typeof Z.host!=="string"||typeof Z.port!=="number"||typeof Z.url!=="string"||typeof Z.startedAt!=="string"||typeof Z.updatedAt!=="string")return;return{hubId:Z.hubId,protocolVersion:Z.protocolVersion,minClientProtocolVersion:typeof Z.minClientProtocolVersion==="string"?Z.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof Z.maxClientProtocolVersion==="string"?Z.maxClientProtocolVersion:void 0,capabilities:Array.isArray(Z.capabilities)?Z.capabilities.filter((Q)=>typeof Q==="string"):void 0,coreVersion:typeof Z.coreVersion==="string"?Z.coreVersion:void 0,buildId:typeof Z.buildId==="string"?Z.buildId:void 0,authToken:Z.authToken,host:Z.host,port:Z.port,url:Z.url,pid:typeof Z.pid==="number"?Z.pid:void 0,startedAt:Z.startedAt,updatedAt:Z.updatedAt}}catch{return}}async function p9($,Z){await _W(oj($),{recursive:!0}),await zW($,{force:!0}).catch(()=>{return}),await sj($,`${JSON.stringify(Z,null,2)}
|
|
276
|
+
WHERE run_id = ? AND claim_token = ?`).run($.error??null,$.scheduledFor??null,Z,$.runId,$.claimToken).changes??0)>0}attachSessionIdToRun($,Z){this.db.prepare("UPDATE cron_runs SET session_id = ?, updated_at = ? WHERE run_id = ?").run(Z,L0(),$)}attachReportPathToRun($,Z){this.db.prepare("UPDATE cron_runs SET report_path = ?, updated_at = ? WHERE run_id = ?").run(Z,L0(),$)}}function _9($){return $?new Date($).getTime():void 0}function XL($){let Z=$.metadata?{...$.metadata}:void 0;if(Z)delete Z.__hubScheduleCreatedBy,delete Z.__hubScheduleCwd,delete Z.__hubRuntimeOptions;return Z}function L9($){let Z=$.metadata;return{scheduleId:$.externalId,name:$.title,cronPattern:$.scheduleExpr??"",prompt:$.prompt??"",workspaceRoot:$.workspaceRoot??"",cwd:typeof Z?.__hubScheduleCwd==="string"?Z.__hubScheduleCwd:void 0,modelSelection:$.providerId||$.modelId?{providerId:$.providerId??"",modelId:$.modelId??""}:void 0,enabled:$.enabled&&!$.removed&&$.parseStatus==="valid",mode:$.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act",systemPrompt:$.systemPrompt,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,maxParallel:$.maxParallel??1,createdAt:new Date($.createdAt).getTime(),updatedAt:new Date($.updatedAt).getTime(),nextRunAt:_9($.nextRunAt),lastRunAt:_9($.lastRunAt),createdBy:typeof Z?.__hubScheduleCreatedBy==="string"?Z.__hubScheduleCreatedBy:void 0,tags:$.tags,runtimeOptions:Z?.__hubRuntimeOptions&&typeof Z.__hubRuntimeOptions==="object"&&!Array.isArray(Z.__hubRuntimeOptions)?Z.__hubRuntimeOptions:void 0,metadata:XL($)}}function YL($){switch($){case"done":return"success";case"cancelled":return"aborted";case"running":return"running";case"queued":return"pending";default:return"failed"}}function AW($,Z){return{executionId:$.runId,scheduleId:Z,sessionId:$.sessionId,triggeredAt:new Date($.scheduledFor??$.createdAt).getTime(),startedAt:_9($.startedAt),endedAt:_9($.completedAt),status:YL($.status),errorMessage:$.error}}class Z8{store;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new x4({dbPath:$.dbPath}),this.materializer=new P4({store:this.store}),this.runner=new y4({store:this.store,materializer:this.materializer,runtimeHandlers:$.runtimeHandlers,eventPublisher:$.eventPublisher,workspaceRoot:"",logger:$.logger,pollIntervalMs:$.pollIntervalMs,claimLeaseSeconds:$.claimLeaseSeconds,globalMaxConcurrency:$.globalMaxConcurrency})}async start(){if(this.disposed)throw Error("HubScheduleService has been disposed");if(this.started)return;this.started=!0,await this.runner.start()}async stop(){await this.runner.stop(),this.started=!1}async dispose(){if(this.disposed)return;this.disposed=!0,await this.runner.dispose(),this.store.close()}createSchedule($){if(BW($.cronPattern),!$.workspaceRoot?.trim())throw Error("workspaceRoot is required for schedules");return L9(this.store.createHubSchedule($))}getSchedule($){let Z=this.store.getHubSchedule($);return Z?L9(Z):void 0}listSchedules($={}){return this.store.listHubSchedules($).map((Z)=>L9(Z))}updateSchedule($,Z){if(Z.cronPattern!==void 0)BW(Z.cronPattern);let Q=this.store.getHubSchedule($);if(!Q)return;let W=Z.workspaceRoot!==void 0?Z.workspaceRoot.trim():Q.workspaceRoot;if((Z.enabled??Q.enabled)&&!W)throw Error("workspaceRoot is required for enabled schedules");let X=this.store.updateHubSchedule($,{...Z,scheduleId:$});return X?L9(X):void 0}deleteSchedule($){return this.store.deleteHubSchedule($)}pauseSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!1})}resumeSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!0})}async triggerScheduleNow($){let Z=this.store.enqueueHubScheduleRun($,"manual");if(!Z)return;await this.runner.tick();let Q=this.store.getRun(Z.runId)??Z;return AW(Q,$)}triggerScheduleNowDetached($){let Z=this.store.enqueueHubScheduleRun($,"manual");if(!Z)return;return this.runner.tick().catch(()=>{return}),AW(Z,$)}listScheduleExecutions($){let Z=$.scheduleId?this.store.getHubSchedule($.scheduleId):void 0,Q={specId:Z?.specId,limit:$.limit};return this.store.listRuns(Q).map((J)=>{let X=Z??this.store.getSpec(J.specId);if(!X||X.source!=="hub-schedule")return;return AW(J,X.externalId)}).filter((J)=>{if(!J)return!1;return!$.status||J.status===$.status})}getScheduleStats($){let Z=this.listScheduleExecutions({scheduleId:$,limit:1e4});if(Z.length===0)return{totalRuns:0,successRate:0,avgDurationSeconds:0};let Q=0,W=0,J=0,X;for(let Y of Z){if(Y.status==="success"||Y.status==="completed")Q+=1;if(!X&&Y.status!=="success"&&Y.status!=="completed")X=Y;if(Y.startedAt&&Y.endedAt)J+=Y.endedAt-Y.startedAt,W+=1}return{totalRuns:Z.length,successRate:Q/Z.length,avgDurationSeconds:W>0?J/W/1000:0,lastFailure:X}}getActiveExecutions(){return this.runner.getActiveRuns().flatMap(($)=>{let Z=this.store.getSpec($.specId);if(!Z||Z.source!=="hub-schedule"||!$.sessionId)return[];return[{executionId:$.runId,scheduleId:Z.externalId,sessionId:$.sessionId,startedAt:$.startedAt??new Date().toISOString(),timeoutAt:Z.timeoutSeconds&&$.startedAt?new Date(new Date($.startedAt).getTime()+Z.timeoutSeconds*1000).toISOString():void 0}]})}getUpcomingRuns($=20){let Z={triggerKind:"schedule",enabled:!0,limit:$};return this.store.listSpecs(Z).flatMap((Q)=>Q.source==="hub-schedule"&&Q.nextRunAt?[{spec:Q,nextRunAt:Q.nextRunAt}]:[]).sort((Q,W)=>String(Q.nextRunAt).localeCompare(String(W.nextRunAt))).slice(0,$).map(({spec:Q,nextRunAt:W})=>({scheduleId:Q.externalId,name:Q.title,nextRunAt:W}))}}u9();import{createSessionId as s_,isHubProtocolCompatible as o_,resolveClineBuildEnv as t_,resolveHubCommandTimeoutMs as e_}from"@cline/shared";var lj={};N(lj,{splitCoreSessionConfig:()=>i4,isSessionNotFoundError:()=>I1,SessionNotFoundError:()=>k1,SESSION_NOT_FOUND_ERROR_CODE:()=>s$});var s$="session_not_found";class k1 extends Error{sessionId;code="session_not_found";constructor($,Z){super(Z??($?`session not found: ${$}`:"session not found"));this.sessionId=$;this.name="SessionNotFoundError"}}function I1($){return $ instanceof k1||typeof $==="object"&&$!==null&&"code"in $&&$.code==="session_not_found"}function i4($){let{hooks:Z,logger:Q,telemetry:W,extensionContext:J,extraTools:X,extensions:Y,onTeamEvent:j,onConsecutiveMistakeLimitReached:V,checkpoint:H,compaction:B,...G}=$,K={};if(Z)K.hooks=Z;if(Q)K.logger=Q;if(W)K.telemetry=W;if(J)K.extensionContext=J;if(X)K.extraTools=X;if(Y)K.extensions=Y;if(j)K.onTeamEvent=j;if(V)K.onConsecutiveMistakeLimitReached=V;if(H?.createCheckpoint)K.checkpoint=H;if(B?.compact)K.compaction=B;let F=Object.keys(K).length>0?K:void 0;return{config:{...G,...H?{checkpoint:{enabled:H.enabled}}:{},...B?{compaction:{enabled:B.enabled,strategy:B.strategy,thresholdRatio:B.thresholdRatio,reserveTokens:B.reserveTokens,preserveRecentTokens:B.preserveRecentTokens,maxInputTokens:B.maxInputTokens,summarizer:B.summarizer}}:{}},...F?{localRuntime:F}:{}}}import{spawn as N_}from"node:child_process";import{closeSync as w_,mkdirSync as C_,openSync as P_}from"node:fs";import{basename as S_,dirname as b_,join as y_}from"node:path";import{fileURLToPath as h_}from"node:url";import{CLINE_RUN_AS_HUB_DAEMON_ENV as k_,isHubDaemonProcess as JV,isHubProtocolCompatible as I_,resolveClineBuildEnv as XV,withResolvedClineBuildEnv as x_}from"@cline/shared";import{createHash as W_,randomBytes as J_}from"node:crypto";import{existsSync as X_}from"node:fs";import{chmod as Y_,mkdir as _W,readFile as aj,rm as zW,writeFile as sj}from"node:fs/promises";import{dirname as oj,join as TW}from"node:path";import{resolveClineDataDir as o$,resolveClineDir as tj}from"@cline/shared/storage";var rj="0.0.56";var n4={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:rj,repository:{type:"git",url:"https://github.com/cline/cline",directory:"sdk/packages/core"},type:"module",types:"./dist/index.d.ts",main:"./dist/index.js",private:!1,publishConfig:{access:"public"},exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.js"},"./hub":{types:"./dist/hub/index.d.ts",import:"./dist/hub/index.js"},"./hub/daemon-entry":{types:"./dist/hub/daemon/entry.d.ts",import:"./dist/hub/daemon/entry.js"},"./telemetry":{types:"./dist/services/telemetry/index.d.ts",import:"./dist/services/telemetry/index.js"},"./services/feature-flags/posthog":{types:"./dist/services/feature-flags/posthog.d.ts",import:"./dist/services/feature-flags/posthog.js"}},scripts:{build:"bun run ./bun.mts && bun tsc -p tsconfig.build.json",typecheck:"bun tsc -p tsconfig.dev.json --noEmit && bun run typecheck:smoke","typecheck:smoke":"bun tsc -p tsconfig.smoke.json --noEmit",test:"bun run test:unit && bun run test:e2e","test:live":"vitest run --config vitest.config.ts src/extensions/context/compaction.live.test.ts","test:unit":"vitest run --config vitest.config.ts","test:e2e":"vitest run --config vitest.e2e.config.ts","verify:routines":"zsh -lc 'bunx vitest run src/cron/schedule-service.test.ts --config vitest.config.ts'","test:watch":"vitest --config vitest.config.ts"},dependencies:{"@cline/agents":"workspace:*","@cline/shared":"workspace:*","@cline/llms":"workspace:*","@modelcontextprotocol/sdk":"^1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.214.0","@opentelemetry/exporter-logs-otlp-http":"^0.214.0","@opentelemetry/exporter-metrics-otlp-http":"^0.214.0","@opentelemetry/exporter-trace-otlp-http":"^0.214.0","@opentelemetry/resources":"^2.6.1","@opentelemetry/sdk-logs":"^0.214.0","@opentelemetry/sdk-metrics":"^2.6.1","@opentelemetry/sdk-trace-base":"^2.6.1","@opentelemetry/sdk-trace-node":"^2.6.1","@opentelemetry/semantic-conventions":"^1.40.0",jiti:"^2.7.0","node-machine-id":"^1.1.12",nanoid:"^5.1.7","simple-git":"3.36.0",ws:"^8.20.0",yaml:"^2.8.2",zod:"^4.3.6"},peerDependencies:{"posthog-node":"^5.8.0"},peerDependenciesMeta:{"posthog-node":{optional:!0}},devDependencies:{"@types/ws":"^8.18.1","posthog-node":"^5.8.0"},engines:{node:">=22"},files:["dist","!dist/**/*.d.ts.map"]};var j_="CLINE_HUB_DISCOVERY_PATH",V_="CLINE_HUB_BUILD_ID",ij=30000,H_=15000,B_=100;function G_($){return $.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function K_($){return W_("sha256").update($).digest("hex").slice(0,12)}function F_($){if(!Number.isInteger($)||!$||$<=0)return!1;try{return process.kill($,0),!0}catch(Z){return Z instanceof Error&&"code"in Z?String(Z.code)==="EPERM":!1}}function d9(){return J_(32).toString("hex")}function A_($){return new Promise((Z)=>setTimeout(Z,$))}function f_($){return`${$}.lock`}async function U_($){try{let Z=JSON.parse(await aj(TW($,"owner.json"),"utf8"));if(typeof Z.pid!=="number"||typeof Z.acquiredAt!=="string")return;return{pid:Z.pid,acquiredAt:Z.acquiredAt}}catch{return}}async function nj($){await zW($,{recursive:!0,force:!0}).catch(()=>{return})}function l9(){return process.env[V_]?.trim()||String(n4.version)}function x1($=process.argv[1]?.trim()||process.cwd()){let Z=`hub-${K_($)}`,Q=process.env[j_]?.trim()||TW(o$(),"locks","hub","owners",`${G_(Z)}.json`);return{ownerId:Z,discoveryPath:Q}}function ej($=`hub-${Date.now().toString(36)}`){return x1($)}async function K0($){try{let Z=JSON.parse(await aj($,"utf8"));if(typeof Z.hubId!=="string"||typeof Z.protocolVersion!=="string"||typeof Z.authToken!=="string"||typeof Z.host!=="string"||typeof Z.port!=="number"||typeof Z.url!=="string"||typeof Z.startedAt!=="string"||typeof Z.updatedAt!=="string")return;return{hubId:Z.hubId,protocolVersion:Z.protocolVersion,minClientProtocolVersion:typeof Z.minClientProtocolVersion==="string"?Z.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof Z.maxClientProtocolVersion==="string"?Z.maxClientProtocolVersion:void 0,capabilities:Array.isArray(Z.capabilities)?Z.capabilities.filter((Q)=>typeof Q==="string"):void 0,coreVersion:typeof Z.coreVersion==="string"?Z.coreVersion:void 0,buildId:typeof Z.buildId==="string"?Z.buildId:void 0,authToken:Z.authToken,host:Z.host,port:Z.port,url:Z.url,pid:typeof Z.pid==="number"?Z.pid:void 0,startedAt:Z.startedAt,updatedAt:Z.updatedAt}}catch{return}}async function p9($,Z){await _W(oj($),{recursive:!0}),await zW($,{force:!0}).catch(()=>{return}),await sj($,`${JSON.stringify(Z,null,2)}
|
|
277
277
|
`,{encoding:"utf8",mode:384}),await Y_($,384)}async function S0($){await zW($,{force:!0}).catch(()=>{return})}async function r9($,Z){let Q=f_($);await _W(oj(Q),{recursive:!0});let W=Date.now()+H_;while(!0)try{await _W(Q,{recursive:!1}),await sj(TW(Q,"owner.json"),`${JSON.stringify({pid:process.pid,acquiredAt:new Date().toISOString()},null,2)}
|
|
278
|
-
`,"utf8");try{return await Z()}finally{await nj(Q)}}catch(J){if((J instanceof Error&&"code"in J?String(J.code):"")!=="EEXIST")throw J;let Y=await U_(Q),j=Y?Date.now()-Date.parse(Y.acquiredAt):ij+1;if(!Y||!F_(Y.pid)||j>ij){await nj(Q);continue}if(Date.now()>=W)throw Error(`Timed out waiting for hub startup lock ${Q}`);await A_(B_)}}async function g1($,Z){try{let Q=await fetch(Z?.authToken?OW($):i9($),{headers:Z?.authToken?{authorization:`Bearer ${Z.authToken}`}:void 0});if(!Q.ok)return;let W=await Q.json();if(typeof W.protocolVersion!=="string"||typeof W.host!=="string"||typeof W.port!=="number"||typeof W.url!=="string")return;return{protocolVersion:W.protocolVersion,minClientProtocolVersion:typeof W.minClientProtocolVersion==="string"?W.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof W.maxClientProtocolVersion==="string"?W.maxClientProtocolVersion:void 0,capabilities:Array.isArray(W.capabilities)?W.capabilities.filter((J)=>typeof J==="string"):void 0,coreVersion:typeof W.coreVersion==="string"?W.coreVersion:void 0,buildId:typeof W.buildId==="string"?W.buildId:void 0,host:W.host,port:W.port,url:W.url,hubId:typeof W.hubId==="string"?W.hubId:void 0,authToken:typeof W.authToken==="string"?W.authToken:void 0,pid:typeof W.pid==="number"?W.pid:void 0,startedAt:typeof W.startedAt==="string"?W.startedAt:void 0,updatedAt:typeof W.updatedAt==="string"?W.updatedAt:void 0}}catch{return}}function Z1($,Z,Q="/hub"){return new URL(`ws://${$}:${Z}${Q}`).toString()}function i9($){let Z=new URL($);return Z.protocol=Z.protocol==="wss:"?"https:":"http:",Z.pathname="/health",Z.search="",Z.toString()}function OW($){let Z=new URL(i9($));return Z.pathname="/status",Z.toString()}function $V($){return X_($)}import{CLINE_HUB_DEV_PORT as D_,CLINE_HUB_PORT as L_,resolveClineBuildEnv as __}from"@cline/shared";var z_="CLINE_HUB_HOST",T_="CLINE_HUB_PORT",O_="CLINE_HUB_PATHNAME",qW="127.0.0.1",MW=L_,RW="/hub";function ZV($){return __($)==="development"?D_:MW}function EW($={}){return($.env??process.env)[z_]?.trim()||qW}function V8($={}){let Q=($.env??process.env)[T_]?.trim();if(!Q)return ZV($);let W=Number.parseInt(Q,10);if(!Number.isInteger(W)||W<1||W>65535)return ZV($);return W}function NW($={}){return($.env??process.env)[O_]?.trim()||RW}function K1($={},Z={}){return{host:$.host??EW(Z),port:$.port??V8(Z),pathname:$.pathname??NW(Z)}}import{join as q_}from"node:path";var M_="shared:cline",R_="CLINE_HUB_DISCOVERY_PATH",E_="hub-production";function QV($){let Z=w1($.trim());return x1(`workspace:${Z||$.trim()}`)}function Q1($=M_){return x1($)}function F1(){return{ownerId:E_,discoveryPath:process.env[R_]?.trim()||q_(o$(),"locks","hub","production.json")}}var g_=8000,m_=200,v_=3000,c_=100,u_=[100,250,500,1000,2000],d_="--cline-hub-daemon";function l_($){return[...$.host?["--host",$.host]:[],...typeof $.port==="number"?["--port",String($.port)]:[],...$.pathname?["--pathname",$.pathname]:[]]}function p_(){try{let $=y_(o$(),"logs","hub-daemon.log");return C_(b_($),{recursive:!0}),{fd:P_($,"a"),logPath:$}}catch{return}}function YV(){return XV()==="production"?F1():Q1()}function t$($){return I_($).compatible}function WV($,Z,Q){if(!Z||Z.url!==Q)return $;return{...$,authToken:$.authToken??Z.authToken,pid:$.pid??Z.pid}}async function e$($,Z){try{return await g1($,{authToken:Z})}catch{return}}async function r_($,Z){let Q=Date.now()+Z;while(Date.now()<Q){if(!(await e$($))?.url)return!0;await new Promise((J)=>setTimeout(J,c_))}return!1}async function n9($,Z){if(await s4($.url,$.authToken).catch(()=>!1),$.pid)try{process.kill($.pid,"SIGTERM")}catch{}let Q=await r_($.url,v_);return await S0(Z).catch(()=>{return}),Q}async function a4($,Z){if(t$($))return!0;return n9($,Z)}async function jV($){if(XV()!=="production")return;let Z=Q1();if(Z.discoveryPath===$.discoveryPath)return;let Q=await K0(Z.discoveryPath);if(Q?.url)await n9(Q,Z.discoveryPath);else await S0(Z.discoveryPath).catch(()=>{return})}function i_(){let $=import.meta.url.endsWith(".ts")?"ts":"js";return h_(new URL(`./entry.${$}`,import.meta.url))}function n_($,Z){let Q=i_(),W=process.execPath?.trim();if(!W)throw Error("unable to resolve runtime executable for hub daemon");let J=S_(W).toLowerCase().includes("bun"),X=Q.startsWith("/$bunfs/"),Y=J&&Q.toLowerCase().endsWith(".ts"),j=X?[d_]:[...Y?["--conditions=development"]:[],Q];return{launcher:W,args:[...j,"--cwd",$,...l_(Z)],cwd:$,env:{...x_(process.env),CLINE_NO_INTERACTIVE:"1",[k_]:"1"}}}function a_($){if(!$||typeof $!=="object")return!1;if(("code"in $?$.code:void 0)==="ETXTBSY")return!0;let Q="message"in $?$.message:void 0;return typeof Q==="string"&&Q.includes("ETXTBSY")}function wW($,Z={}){if(JV())return;let Q=n_($,Z),W=p_();try{N_(Q.launcher,Q.args,{detached:!0,stdio:W?["ignore",W.fd,W.fd]:"ignore",env:Q.env,cwd:Q.cwd,windowsHide:!0}).unref()}finally{if(W)w_(W.fd)}}async function H8($,Z={}){for(let Q=0;;Q++)try{wW($,Z);return}catch(W){let J=u_[Q];if(!a_(W)||J===void 0)throw W;await new Promise((X)=>setTimeout(X,J))}}function a9($,Z={}){if(JV())return;let Q=YV(),W=K1(Z),J=Z1(W.host,W.port,W.pathname),X=Z.allowPortFallback===!0&&W.port!==0;jV(Q).catch(()=>{return}).then(()=>K0(Q.discoveryPath)).then(async(Y)=>{let j=!1;if(Y?.url)if(!Y.authToken){if(j=!0,!await n9(Y,Q.discoveryPath)&&!X)return}else{let B=await e$(Y.url,Y.authToken);if(B?.url&&t$(B)&&await A1(B.url,{authToken:Y.authToken}))return;if(B?.url)await a4({...B,authToken:Y.authToken},Q.discoveryPath);else await S0(Q.discoveryPath).catch(()=>{return})}let V=await e$(J);if(V?.url){if(t$(V)){if(!X||!j)return}else if(!await a4({...V,authToken:void 0},Q.discoveryPath)&&!X)return}let H=X?{...W,port:0}:W;await H8($,H)}).catch(()=>{})}async function VV($,Z={}){let Q=YV(),W=Z.host!==void 0||Z.port!==void 0||Z.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),J=K1(Z),X=Z1(J.host,J.port,J.pathname),Y=(F)=>{if(!W)B$(F.url,F.authToken);return F};await jV(Q).catch(()=>{return});let j=await K0(Q.discoveryPath),V=!1;if(j?.url){let F=j.authToken;if(!F)V=!0,await n9(j,Q.discoveryPath);else{let A=await e$(j.url,F);if(A?.url&&t$(A)&&await A1(A.url,{authToken:F}))return Y({url:A.url,authToken:F});if(A?.url)await a4({...A,authToken:F},Q.discoveryPath);else await S0(Q.discoveryPath).catch(()=>{return})}}let H=await e$(X);if(H?.url){let F=WV(H,j,X);if(t$(H))throw Error(`A compatible Cline Hub is already running at ${X}, but its discovery record is missing or unreadable. Run 'cline doctor fix' to repair local hub discovery.${V?" This can happen immediately after upgrading from a build that wrote an empty hub auth token; run 'cline doctor fix' to stop the old daemon and repair local hub discovery.":""}`);if(!await a4(F,Q.discoveryPath)&&Z.allowPortFallback!==!0&&J.port!==0)throw Error(`An incompatible Cline Hub is already running at ${X} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}let G=Z.allowPortFallback===!0&&J.port!==0?{...J,port:0}:J;await H8($,G);let K=Date.now()+g_;while(Date.now()<K){let F=await K0(Q.discoveryPath);if(F?.url&&F.authToken){let L=await e$(F.url,F.authToken);if(L?.url&&t$(L)&&await A1(L.url,{authToken:F.authToken}))return Y({url:L.url,authToken:F.authToken})}let A=await e$(X);if(A?.url&&!t$(A)){let L=WV(A,F,X);if(!await a4(L,Q.discoveryPath)&&Z.allowPortFallback!==!0&&J.port!==0)throw Error(`An incompatible Cline Hub is still running at ${X} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}await new Promise((L)=>setTimeout(L,m_))}throw Error("Timed out waiting for detached hub startup.")}function s9(){return t_()==="production"?F1():Q1()}function $z(){let $=globalThis.WebSocket;if(!$)throw Error("Global WebSocket is not available in this runtime. Node 22+ is required for hub mode.");return $}function FV($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString();if($ instanceof ArrayBuffer)return Buffer.from($).toString();if(Array.isArray($))return Buffer.concat($.map((Z)=>Buffer.from(Z))).toString();if($&&typeof $==="object"&&"data"in $&&typeof $.data<"u")return FV($.data);return String($)}function Zz($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString("utf8");if($ instanceof ArrayBuffer)return Buffer.from($).toString("utf8");return""}function HV($){let Z=$,Q=Zz(Z.reason);return new R0("hub_connection_closed",Z.code||Q?`Hub connection closed (code=${Z.code??0}${Q?`, reason=${Q}`:""})`:CW,{closeCode:Z.code,closeReason:Q||void 0})}function Qz($,Z){if($ instanceof R0)return $;if($ instanceof Error)return new R0("hub_connect_failed",$.message);if($&&typeof $==="object"&&"error"in $&&$.error instanceof Error)return new R0("hub_connect_failed",$.error.message);let Q=$&&typeof $==="object"&&"message"in $&&typeof $.message==="string"?$.message.trim():"";if(Q)return new R0("hub_connect_failed",Q);let W=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return new R0("hub_connect_failed",W?`Failed to connect to hub at ${Z.toString()} (${W} event before socket open).`:`Failed to connect to hub at ${Z.toString()}.`)}var Wz=8000,Jz=200,BV="*",GV=8000,Xz="cline-hub-auth.",AV=new Map,fV=new Set,Yz=3000,jz=3000,Vz=100,CW="Hub connection closed",Hz=250,Bz=5000,KV=0.5;class R0 extends Error{code;details;constructor($,Z,Q){super(Z);this.code=$;this.details=Q;this.name="HubTransportError"}}function bW($){return $ instanceof R0}class B8 extends Error{command;code;constructor($,Z,Q){super(Q);this.command=$;this.code=Z;this.name="HubCommandError"}}function o9($,Z){return $ instanceof B8&&$.code==="hub_command_timeout"&&(Z===void 0||$.command===Z)}function UV($){let Z=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),Z)return Z;let Q=yW($.toString());return Q?AV.get(Q):void 0}function Gz($){try{let Q=new URL($).hostname.toLowerCase().replace(/^\[|\]$/g,"");return Q==="localhost"||Q==="127.0.0.1"||Q==="::1"}catch{return!1}}function yW($){if(!Gz($))return;let Z=new URL(G$($));return Z.search="",Z.hash="",Z.toString()}function PW($){let Z=yW($);return!!Z&&fV.has(Z)}function B$($,Z){let Q=yW($);if(Q){if(fV.add(Q),Z?.trim())AV.set(Q,Z)}return $}class W1{options;socket;connectPromise;clientId;currentUrl;recoveryPromise;pendingReplies=new Map;listeners=new Set;subscriptionCounts=new Map;reconnectTimer;reconnectAttempt=0;closedByClient=!1;lastCloseError=new R0("hub_connection_closed",CW);sawSocketClose=!1;registered=!1;constructor($){this.options=$;this.clientId=$.clientId??`core-${Math.random().toString(36).slice(2,10)}-${Date.now().toString(36)}`,this.currentUrl=$.url}getClientId(){return this.clientId}getUrl(){return this.currentUrl}async connect(){if(this.socket&&(this.socket.readyState===1||this.socket.readyState===0))return this.connectPromise??Promise.resolve();this.closedByClient=!1,this.clearReconnectTimer();let $=new URL(this.currentUrl),Z=this.options.authToken?.trim()||UV($);$.hash="";let W=new($z())($.toString(),Z?[`${Xz}${Z}`]:void 0);this.socket=W;let J=!1;this.connectPromise=new Promise((X,Y)=>{let j=!1,V=setTimeout(()=>{if(j)return;j=!0,J=!0,this.lastCloseError=new R0("hub_connect_timeout",`Timed out connecting to hub after ${GV}ms`),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0;try{W.close()}catch{}Y(this.lastCloseError)},GV);W.addEventListener("open",()=>{if(j)return;j=!0,clearTimeout(V),X()}),W.addEventListener("error",(H)=>{if(j)return;j=!0,clearTimeout(V),this.lastCloseError=Qz(H,$),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0,Y(this.lastCloseError)}),W.addEventListener("close",(H)=>{if(j)return;if(j=!0,clearTimeout(V),!J)this.lastCloseError=HV(H),this.sawSocketClose=!0;this.connectPromise=void 0,this.socket=void 0,Y(this.lastCloseError)})}),W.addEventListener("message",(X)=>{this.handleFrame(JSON.parse(FV(X)))}),W.addEventListener("close",(X)=>{if(this.socket!==W)return;if(!J)this.lastCloseError=HV(X),this.sawSocketClose=!0;this.registered=!1;for(let Y of this.pendingReplies.values())Y.reject(this.lastCloseError);if(this.pendingReplies.clear(),this.connectPromise=void 0,this.socket=void 0,!this.closedByClient&&this.hasActiveSubscriptions())this.scheduleReconnect()}),await this.connectPromise,await this.command("client.register",{clientId:this.clientId,clientType:this.options.clientType??"core",displayName:this.options.displayName??"core",transport:"native",actorKind:"client",workspaceContext:{workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}}),this.registered=!0;for(let X of this.subscriptionCounts.keys())this.sendSubscriptionFrame("stream.subscribe",this.subscriptionSessionIdFromKey(X));this.reconnectAttempt=0}subscribe($,Z){let Q=Z?.sessionId?.trim()||void 0,W={listener:$,sessionId:Q};return this.listeners.add(W),this.adjustSubscriptionCount(Q,1),()=>{if(!this.listeners.delete(W))return;this.adjustSubscriptionCount(Q,-1)}}async command($,Z,Q,W){let J=0,X=$!=="client.register"&&$!=="client.unregister";while(!0)try{return await this.commandOnce($,Z,Q,W)}catch(Y){if(!X||J>=1||!await this.recoverLocalHubTransport(Y))throw Y;J+=1}}async commandOnce($,Z,Q,W){await this.connect();let J=s_("hubreq_"),X=e_($,W?.timeoutMs),Y=new Promise((V,H)=>{let B=X===null?void 0:setTimeout(()=>{if(!this.pendingReplies.delete(J))return;H(new B8($,"hub_command_timeout",`Hub command ${$} timed out after ${X}ms (hub=${this.currentUrl}, requestId=${J}, clientId=${this.clientId}). Check hub-daemon.log for matching command.start/command.slow entries, or run 'cline doctor fix' to restart the hub.`))},X);this.pendingReplies.set(J,{resolve:(G)=>{if(B)clearTimeout(B);V(G)},reject:(G)=>{if(B)clearTimeout(B);H(G)}})});try{this.sendFrame({kind:"command",envelope:{version:"v1",command:$,requestId:J,clientId:this.clientId,sessionId:Q,timeoutMs:X,payload:Z}})}catch(V){throw this.pendingReplies.delete(J),V}let j=await Y;if(!j.ok){if(j.error?.code===s$){let V=Q??(typeof Z?.sessionId==="string"?Z.sessionId:void 0);throw new k1(V,j.error.message)}throw new B8($,j.error?.code,j.error?.message??`Hub command ${$} failed`)}return j}async recoverLocalHubTransport($){if(!PW(this.currentUrl)||!bW($))return!1;if(this.recoveryPromise)return await this.recoveryPromise;return this.recoveryPromise=(async()=>{let Z=await $2({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}).catch(()=>{return});if(!Z)return!1;return this.currentUrl=Z,this.close(),!0})().finally(()=>{this.recoveryPromise=void 0}),await this.recoveryPromise}hasActiveSubscriptions(){return this.subscriptionCounts.size>0}clearReconnectTimer(){if(!this.reconnectTimer)return;clearTimeout(this.reconnectTimer),this.reconnectTimer=void 0}scheduleReconnect(){if(this.reconnectTimer||this.closedByClient||!this.hasActiveSubscriptions())return;let $=Math.min(Hz*2**this.reconnectAttempt,Bz),Z=Math.round($*(1-KV)+Math.random()*$*KV);this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=void 0,this.reconnectSubscribedTransport()},Z)}async reconnectSubscribedTransport(){if(this.closedByClient||!this.hasActiveSubscriptions())return;try{await this.connect(),this.reconnectAttempt=0}catch{if(!PW(this.currentUrl)){this.reconnectAttempt+=1,this.scheduleReconnect();return}try{let $=await $2({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd});if($){this.currentUrl=$,await this.connect(),this.reconnectAttempt=0;return}}catch{}this.reconnectAttempt+=1,this.scheduleReconnect()}}close(){let $=this.socket;if(this.closedByClient=!0,this.clearReconnectTimer(),this.registered=!1,!$)return;this.lastCloseError=new R0("hub_connection_closed",CW),this.sawSocketClose=!1;for(let Z of this.pendingReplies.values())Z.reject(this.lastCloseError);this.pendingReplies.clear(),this.connectPromise=void 0,this.socket=void 0;try{$.close()}catch{}}async dispose(){if(this.socket?.readyState===1&&this.registered)try{await this.command("client.unregister",void 0,void 0,{timeoutMs:2000})}catch{}this.close()}sendFrame($){if(!this.socket||this.socket.readyState!==1){if(this.lastCloseError.code==="hub_connection_closed"&&!this.sawSocketClose)throw new R0("hub_connection_not_open","Hub connection is not open.");throw this.lastCloseError}this.socket.send(JSON.stringify($))}sendSubscriptionFrame($,Z){this.sendFrame({kind:$,clientId:this.clientId,...Z?{sessionId:Z}:{}})}adjustSubscriptionCount($,Z){let Q=this.subscriptionKeyForSessionId($),W=(this.subscriptionCounts.get(Q)??0)+Z;if(W<=0){if(this.subscriptionCounts.delete(Q),!this.hasActiveSubscriptions())this.clearReconnectTimer();if(Z<0&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.unsubscribe",$);return}if(this.subscriptionCounts.set(Q,W),Z>0&&W===1&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.subscribe",$)}subscriptionKeyForSessionId($){return $??BV}subscriptionSessionIdFromKey($){return $===BV?void 0:$}handleFrame($){switch($.kind){case"reply":{let Z=$.envelope.requestId;if(!Z)return;let Q=this.pendingReplies.get(Z);if(!Q)return;this.pendingReplies.delete(Z),Q.resolve($.envelope);return}case"event":for(let Z of this.listeners){if(Z.sessionId&&Z.sessionId!==$.envelope.sessionId?.trim())continue;Z.listener($.envelope)}return;case"command":case"stream.subscribe":case"stream.unsubscribe":return}}}function G$($){let Z=new URL($);if(Z.protocol==="http:")Z.protocol="ws:";else if(Z.protocol==="https:")Z.protocol="wss:";return Z.toString()}async function A1($,Z){let Q=new W1({url:$,authToken:Z?.authToken,clientType:"hub-healthcheck",displayName:"hub healthcheck",workspaceRoot:Z?.workspaceRoot,cwd:Z?.cwd});try{return await Q.connect(),!0}catch{return!1}finally{Q.close()}}async function SW($,Z){let Q=G$($),W=await g1(Q,{authToken:Z?.authToken});if(!W)return{status:"unreachable",url:Q};if(!o_(W).compatible)return{status:"protocol_mismatch",url:Q};if(Z?.verifyConnection===!0&&!await A1(Q,{workspaceRoot:Z.workspaceRoot,cwd:Z.cwd,authToken:Z.authToken}))return{status:"unreachable",url:Q};return{status:"compatible",url:Q}}async function Kz($){let Z=Date.now()+Wz;while(Date.now()<Z){let Q=await K0($.discoveryPath);if(Q?.url){let W=await SW(Q.url,{verifyConnection:!0,authToken:Q.authToken});if(W.status==="compatible")return B$(W.url,Q.authToken)}await new Promise((W)=>setTimeout(W,Jz))}return}async function Fz($){let Z=Date.now()+jz;while(Date.now()<Z){if(!(await g1($).catch(()=>{return}))?.url)return!0;await new Promise((W)=>setTimeout(W,Vz))}return!1}function Az($,Z){try{return G$($)===G$(Z)}catch{return!1}}function fz($){return($&&typeof $==="object"&&Array.isArray($.sessions)?$.sessions:[]).some((Q)=>{if(!Q||typeof Q!=="object")return!1;let W=Q;if(W.status==="running"||W.status==="idle"||W.status==="pending")return!0;return Array.isArray(W.participants)&&W.participants.length>0})}async function Uz($,Z,Q){let W=new W1({url:$,authToken:Z,clientType:"hub-recovery-check",displayName:"hub recovery check",workspaceRoot:Q?.workspaceRoot,cwd:Q?.cwd});try{let J=await W.command("session.list",{limit:500},void 0,{timeoutMs:Yz});return!fz(J.payload)}catch{return!1}finally{await W.dispose().catch(()=>{return})}}async function o4($={}){if($.endpoint?.trim()){let J=await SW($.endpoint);return J.status==="compatible"?J.url:void 0}let Z=s9(),Q=await K0(Z.discoveryPath);if(!Q?.url)return;let W=await SW(Q.url,{authToken:Q.authToken});if(W.status==="compatible")return B$(W.url,Q.authToken);if(W.status==="protocol_mismatch")await S0(Z.discoveryPath).catch(()=>{return});return}async function $2($={}){let Z=await o4($);if(Z&&await A1(Z,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return Z;if($.endpoint?.trim())return;let Q=s9();return await H8($.workspaceRoot??process.cwd()),await Kz(Q)}async function s4($,Z){let Q=new URL($),W=Z?.trim()||UV(Q);if(Q.protocol==="ws:")Q.protocol="http:";else if(Q.protocol==="wss:")Q.protocol="https:";return Q.pathname="/shutdown",Q.hash="",(await fetch(Q,{method:"POST",headers:W?{authorization:`Bearer ${W}`}:void 0})).ok}async function hW($=s9()){let Z=await K0($.discoveryPath);if(!Z?.url)return!1;try{if(await s4(Z.url,Z.authToken))return!0}catch{}return!1}async function t9($){if(!PW($.url))return;let Z=s9(),Q=await K0(Z.discoveryPath);if(!Q?.url||!Az(Q.url,$.url))return;if(!await Uz(Q.url,Q.authToken,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return;if(!await hW())return;if(!await Fz(Q.url))return;return await S0(Z.discoveryPath).catch(()=>{return}),await $2({workspaceRoot:$.workspaceRoot,cwd:$.cwd})}import{resolveClineBuildEnv as Dz}from"@cline/shared";function Lz($,Z){if($ instanceof Error)return $;if($&&typeof $==="object"&&"message"in $&&typeof $.message==="string"&&$.message.trim())return Error($.message.trim());let Q=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return Error(Q?`Failed to connect to hub at ${Z} (${Q} event before socket open).`:`Failed to connect to hub at ${Z}.`)}var _z="cline-hub-auth.";function zz($){return $.host!==void 0||$.port!==void 0||$.pathname!==void 0}function Tz($,Z){let Q=new URL($),W=new URL(Z);return Q.search="",Q.hash="",W.search="",W.hash="",Q.toString()===W.toString()}function DV(){return Dz()==="production"?F1():Q1()}async function Oz($){let Z=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),Z)return Z;let Q=DV(),W=await K0(Q.discoveryPath);if(W?.url&&Tz($.toString(),W.url))return W.authToken;return}async function kW($={}){let Z=K1($);if(!zz($)){let Q=DV(),W=await K0(Q.discoveryPath);if(W?.url)return W.url}return Z1(Z.host,Z.port,Z.pathname)}async function e9($){return await new Promise((Z,Q)=>{(async()=>{let W=new URL($),J=await Oz(W);W.hash="";let X=new WebSocket(W.toString(),J?[`${_z}${J}`]:void 0),Y=new Map,j=0;X.addEventListener("open",()=>{Z({send(V){let H=V.requestId??`hub-client-${++j}`;return new Promise((B,G)=>{Y.set(H,{resolve:B,reject:G});let K={kind:"command",envelope:{...V,requestId:H}};X.send(JSON.stringify(K))})},close(){X.close()}})}),X.addEventListener("message",(V)=>{let H=JSON.parse(String(V.data));if(H.kind==="reply"&&H.envelope.requestId){let B=Y.get(H.envelope.requestId);if(B)Y.delete(H.envelope.requestId),B.resolve(H.envelope)}}),X.addEventListener("close",()=>{for(let V of Y.values())V.reject(Error("Hub connection closed"));Y.clear()}),X.addEventListener("error",(V)=>{Q(Lz(V,$))})})().catch(Q)})}async function LV($){try{return(await e9($)).close(),!0}catch{return!1}}async function _V($,Z){let Q=await kW($),W=await e9(Q);try{return await W.send({version:Z.version??"v1",clientId:Z.clientId??"hub-client",...Z})}finally{W.close()}}function IW($){return $?JSON.parse(JSON.stringify($)):{}}function $Z($){let Z=$?.session&&typeof $.session==="object"?$.session:void 0;if(!Z)return;let Q=Z.metadata&&typeof Z.metadata==="object"?IW(Z.metadata):void 0;return{sessionId:typeof Z.sessionId==="string"?Z.sessionId:"",parentSessionId:typeof Q?.parentSessionId==="string"?Q.parentSessionId:void 0,messagesPath:typeof Q?.messagesPath==="string"?Q.messagesPath:void 0,metadata:Q}}function zV($,Z){return $.error?.message??`hub command failed: ${Z}`}function qz($){let Z=IW($);if(typeof Z.error==="string"&&Z.error.trim())return{...Z,error:Z.error.trim()};let Q=Z.result&&typeof Z.result==="object"?Z.result:void 0;if(typeof Q?.text==="string"&&Q.text.trim())return{...Z,error:Q.text.trim()};let W=Q?.error&&typeof Q.error==="object"?Q.error:void 0;if(typeof W?.message==="string"&&W.message.trim())return{...Z,error:W.message.trim()};return Z}function TV($){let Z=$?.sessionId;return typeof Z==="string"&&Z.trim()?Z.trim():void 0}function Mz($){let Z=$?.checkpoint;if(!Z||typeof Z!=="object"||Array.isArray(Z))throw Error("hub checkpoint restore returned no checkpoint");let Q=Z;if(typeof Q.ref!=="string"||typeof Q.createdAt!=="number"||typeof Q.runCount!=="number")throw Error("hub checkpoint restore returned an invalid checkpoint");return Q}function Rz($){let Z=IW($.payload);if($.event==="schedule.execution_completed")return{sessionId:$.sessionId?.trim()||TV(Z)||"",eventType:"schedule.execution.completed",payload:Z};if($.event==="schedule.execution_failed")return{sessionId:$.sessionId?.trim()||TV(Z)||"",eventType:"schedule.execution.failed",payload:Z};let Q=$.sessionId?.trim();if(!Q)return;switch($.event){case"iteration.started":return{sessionId:Q,eventType:"runtime.chat.iteration_start",payload:Z};case"iteration.finished":return{sessionId:Q,eventType:"runtime.chat.iteration_end",payload:Z};case"assistant.delta":return{sessionId:Q,eventType:"runtime.chat.text_delta",payload:Z};case"usage.updated":return{sessionId:Q,eventType:"runtime.chat.usage",payload:Z};case"tool.started":return{sessionId:Q,eventType:"runtime.chat.tool_call_start",payload:Z};case"tool.finished":return{sessionId:Q,eventType:"runtime.chat.tool_call_end",payload:Z};case"approval.requested":return{sessionId:Q,eventType:"approval.requested",payload:Z};case"run.aborted":return{sessionId:Q,eventType:"runtime.chat.aborted",payload:Z};case"run.failed":return{sessionId:Q,eventType:"runtime.chat.failed",payload:qz($.payload)};case"run.completed":return{sessionId:Q,eventType:"runtime.chat.completed",payload:Z};default:return}}class xW{options;client;metadataApplied=!1;constructor($){this.options=$;this.client=new W1({url:$.address,authToken:$.authToken,clientId:$.clientId,clientType:$.clientType??"hub-session-client",displayName:$.displayName??"hub session client",workspaceRoot:$.workspaceRoot,cwd:$.cwd})}async ensureMetadataApplied(){if(this.metadataApplied||!this.options.metadata){if(!this.options.metadata)await this.client.connect();return}await this.client.connect(),await this.client.command("client.update",{metadata:this.options.metadata}),this.metadataApplied=!0}async connect(){await this.ensureMetadataApplied()}close(){this.client.close()}async dispose(){await this.client.dispose()}async startRuntimeSession($){await this.ensureMetadataApplied();let Z=await this.client.command("session.create",{workspaceRoot:$.workspaceRoot,cwd:$.cwd,sessionConfig:{providerId:$.provider,modelId:$.model,apiKey:$.apiKey,cwd:$.cwd??$.workspaceRoot,workspaceRoot:$.workspaceRoot,systemPrompt:$.systemPrompt??"",mode:$.mode??"act",rules:$.rules,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,enableTools:$.enableTools,enableSpawnAgent:$.enableSpawn!==!1,enableAgentTeams:$.enableTeams!==!1,disableMcpSettingsTools:$.disableMcpSettingsTools,missionLogIntervalSteps:$.missionStepInterval,missionLogIntervalMs:$.missionTimeIntervalMs},metadata:{source:$.source??"cli",provider:$.provider,model:$.model,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,prompt:void 0,interactive:$.interactive!==!1},runtimeOptions:{mode:$.mode,systemPrompt:$.systemPrompt,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,autoApproveTools:$.autoApproveTools,toolExecutors:$.toolExecutors,configExtensions:$.configExtensions},modelSelection:{provider:$.provider,model:$.model,apiKey:$.apiKey},toolPolicies:$.toolPolicies}),Q=$Z(Z.payload);if(!Q?.sessionId)throw Error("hub session create returned no session id");return{sessionId:Q.sessionId,startResult:{sessionId:Q.sessionId,manifestPath:"",messagesPath:Q.messagesPath??""}}}async sendRuntimeSession($,Z,Q){return await this.ensureMetadataApplied(),{result:(await this.client.command("session.send_input",{prompt:Z.prompt,mode:Z.config.mode,attachments:Z.attachments,delivery:Z.delivery,timeoutSeconds:Z.config.timeoutSeconds},$,Q)).payload?.result}}async stopRuntimeSession($){return await this.ensureMetadataApplied(),await this.client.command("session.detach",{sessionId:$},$),{applied:!0}}async abortRuntimeSession($){return await this.ensureMetadataApplied(),await this.client.command("run.abort",{sessionId:$},$),{applied:!0}}async updateSession($){return await this.ensureMetadataApplied(),await this.client.command("session.update",{sessionId:$.sessionId,metadata:$.metadata},$.sessionId),{updated:!0}}async getSession($){await this.ensureMetadataApplied();let Z;try{Z=await this.client.command("session.get",void 0,$)}catch(Q){if(I1(Q))return;throw Q}return $Z(Z.payload)}async readMessages($){let Z=$.trim();if(!Z)return[];await this.ensureMetadataApplied();let Q=await this.client.command("session.messages",{sessionId:Z},Z);if(!Q.ok)throw Error(zV(Q,"session.messages"));let W=Q.payload?.messages;return Array.isArray(W)?W:[]}async restore($){let Z=$.sessionId.trim();if(!Z)throw Error("sessionId is required");let Q=$.restore?.messages!==!1;if(Q&&!$.config)throw Error("config is required when restore.messages is true");await this.ensureMetadataApplied();let W=$.config,J=await this.client.command("session.restore",{sessionId:Z,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...W?{workspaceRoot:W.workspaceRoot,cwd:W.cwd,sessionConfig:{providerId:W.provider,modelId:W.model,apiKey:W.apiKey,cwd:W.cwd??W.workspaceRoot,workspaceRoot:W.workspaceRoot,systemPrompt:W.systemPrompt??"",mode:W.mode??"act",rules:W.rules,maxIterations:W.maxIterations,enableTools:W.enableTools,enableSpawnAgent:W.enableSpawn!==!1,enableAgentTeams:W.enableTeams!==!1,disableMcpSettingsTools:W.disableMcpSettingsTools,missionLogIntervalSteps:W.missionStepInterval,missionLogIntervalMs:W.missionTimeIntervalMs},metadata:{source:W.source??"cli",provider:W.provider,model:W.model,enableTools:W.enableTools,enableSpawn:W.enableSpawn,enableTeams:W.enableTeams,prompt:void 0,interactive:W.interactive!==!1},runtimeOptions:{mode:W.mode,systemPrompt:W.systemPrompt,maxIterations:W.maxIterations,enableTools:W.enableTools,enableSpawn:W.enableSpawn,enableTeams:W.enableTeams,autoApproveTools:W.autoApproveTools,configExtensions:W.configExtensions},modelSelection:{provider:W.provider,model:W.model,apiKey:W.apiKey},toolPolicies:W.toolPolicies}:{}},Z);if(!J.ok)throw Error(zV(J,"session.restore"));let X=$Z(J.payload);if(Q&&!X?.sessionId)throw Error("hub checkpoint restore returned no session id");let Y=Array.isArray(J.payload?.messages)?J.payload.messages:void 0,j=Mz(J.payload);return{sessionId:X?.sessionId,startResult:X?.sessionId?{sessionId:X.sessionId,manifestPath:"",messagesPath:X.messagesPath??""}:void 0,...Y?{messages:Y}:{},checkpoint:j}}async listSessions($){await this.ensureMetadataApplied();let Z=await this.client.command("session.list",{limit:$?.limit??200});return(Array.isArray(Z.payload?.sessions)?Z.payload?.sessions:[]).map((W)=>$Z({session:W})).filter((W)=>Boolean(W?.sessionId))}async deleteSession($,Z=!0){return await this.ensureMetadataApplied(),(await this.client.command("session.delete",{sessionId:$,deleteCheckpointRefs:Z})).payload?.deleted===!0}async respondToolApproval($){await this.ensureMetadataApplied(),await this.client.command("approval.respond",{approvalId:$.approvalId,approved:$.approved,payload:$.reason?{reason:$.reason}:void 0,responderClientId:$.responderClientId})}streamEvents($,Z){let Q=new Set(($.sessionIds??[]).map((J)=>J.trim()).filter(Boolean)),W=this.client.subscribe((J)=>{let X=Rz(J);if(!X)return;if(Q.size>0&&!Q.has(X.sessionId))return;Z.onEvent?.(X)});return this.ensureMetadataApplied().catch((J)=>{Z.onError?.(J instanceof Error?J:Error(String(J)))}),W}streamTeamProgress($,Z){let Q=this.client.subscribe((W)=>{if(W.event!=="team.progress"||!W.payload)return;Z.onProjection?.(W.payload)});return this.ensureMetadataApplied().catch((W)=>{Z.onError?.(W instanceof Error?W:Error(String(W)))}),Q}async createSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.create",$)).payload?.schedule}async listSchedules($){await this.ensureMetadataApplied();let Z=await this.client.command("schedule.list");return Array.isArray(Z.payload?.schedules)?Z.payload?.schedules:[]}async getSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.get",{scheduleId:$})).payload?.schedule}async updateSchedule($,Z){return await this.ensureMetadataApplied(),(await this.client.command("schedule.update",{scheduleId:$,...Z})).payload?.schedule}async pauseSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.disable",{scheduleId:$})).payload?.schedule}async resumeSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.enable",{scheduleId:$})).payload?.schedule}async deleteSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.delete",{scheduleId:$})).payload?.deleted===!0}async triggerScheduleNow($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.trigger",{scheduleId:$})).payload?.execution}async listScheduleExecutions($,Z){await this.ensureMetadataApplied();let Q=await this.client.command("schedule.list_executions",{scheduleId:$,limit:Z});return Array.isArray(Q.payload?.executions)?Q.payload?.executions:[]}async getScheduleStats(){return await this.ensureMetadataApplied(),(await this.client.command("schedule.stats")).payload?.stats}async getActiveScheduledExecutions(){await this.ensureMetadataApplied();let $=await this.client.command("schedule.active");return Array.isArray($.payload?.executions)?$.payload?.executions:[]}async getUpcomingScheduledRuns($){await this.ensureMetadataApplied();let Z=await this.client.command("schedule.upcoming",{limit:$});return Array.isArray(Z.payload?.upcoming)?Z.payload?.upcoming:[]}}class gW{client;constructor($){this.client=new W1({url:$.address,authToken:$.authToken,clientId:$.clientId,clientType:$.clientType??"hub-ui-client",displayName:$.displayName??"hub ui client"})}async connect(){await this.client.connect()}close(){this.client.close()}async dispose(){await this.client.dispose()}getClientId(){return this.client.getClientId()}async sendNotify($){await this.client.command("ui.notify",$)}async sendShowWindow($){await this.client.command("ui.show_window",$??{})}async listClients(){let $=await this.client.command("client.list");return Array.isArray($.payload?.clients)?$.payload.clients:[]}async listSessions($=200){let Z=await this.client.command("session.list",{limit:$});return Array.isArray(Z.payload?.sessions)?Z.payload.sessions:[]}subscribeUI($){return this.client.subscribe((Z)=>{switch(Z.event){case"ui.notify":$.onNotify?.(Z.payload);break;case"ui.show_window":$.onShowWindow?.(Z.payload);break;case"hub.client.registered":$.onClientRegistered?.(Z.payload??{});break;case"hub.client.disconnected":$.onClientDisconnected?.(Z.payload??{});break;case"session.created":$.onSessionCreated?.(Z.payload??{});break;case"session.updated":$.onSessionUpdated?.(Z.payload??{});break;case"session.detached":$.onSessionDetached?.(Z.payload??{});break}})}}import{normalizeProviderId as jx}from"@cline/llms";var jU={};N(jU,{LocalRuntimeHost:()=>T1});import{readdirSync as tI}from"node:fs";import{homedir as eI}from"node:os";import{isAbsolute as $x,join as kY,resolve as IY}from"node:path";import{captureSdkError as p2,createSessionId as Zx,isLikelyAuthError as Qx,normalizeUserInput as Wx}from"@cline/shared";import{setHomeDirIfUnset as Jx}from"@cline/shared/storage";var sV={};N(sV,{saveProviderOAuthCredentials:()=>W2,resolveProviderApiKeyFromSettings:()=>sW,loginAndSaveProviderOAuthCredentials:()=>X6,isOAuthProvider:()=>Q2,getProviderOAuthCredentialsFromSettings:()=>Y6,getProviderAuthStorageId:()=>aW,getProviderAuthHandler:()=>j0,getPersistedProviderApiKey:()=>U8,formatProviderOAuthApiKey:()=>oW});import{getClineEnvironmentConfig as nV}from"@cline/shared";_0();var SV={};N(SV,{startClineDeviceAuth:()=>lW,refreshClineToken:()=>JZ,loginClineOAuth:()=>t4,getValidClineCredentials:()=>e4,completeClineDeviceAuth:()=>pW});import{getClineEnvironmentConfig as mW}from"@cline/shared";var OV={};N(OV,{startLocalOAuthServer:()=>J1});function Ez(){let $;return{promise:new Promise((Q)=>{$=Q}),resolve:$}}async function J1($){let Z=await import("node:http"),Q=$.host??"127.0.0.1",W=$.timeoutMs??300000,J=$.successHtml??Nz,X=Ez(),Y=!1,j=null,V=null,H=null,B=(F)=>{if(Y)return;Y=!0,X.resolve(F)},G=()=>{if(j)clearTimeout(j),j=null;let F=H;if(H=null,V)V.close(),V.closeAllConnections?.(),V=null;if(F!==null&&$.onClose)Promise.resolve($.onClose({host:Q,port:F})).catch(()=>{})},K=async()=>{return j=setTimeout(()=>{G(),B(null)},W),X.promise};for(let F of $.ports){let A=Z.createServer((f,D)=>{try{let U=new URL(f.url||"",`http://${Q}:${F}`);if(U.pathname!==$.callbackPath){D.statusCode=404,D.end("Not found");return}let T={url:U,code:U.searchParams.get("code")??void 0,state:U.searchParams.get("state")??void 0,provider:U.searchParams.get("provider")??void 0,error:U.searchParams.get("error")??void 0};if(T.error){D.statusCode=400,D.end(`Authentication failed: ${T.error}`),G(),B(T);return}if(!T.code){D.statusCode=400,D.end("Missing authorization code");return}if($.expectedState&&T.state!==$.expectedState){D.statusCode=400,D.end("State mismatch");return}D.statusCode=200,D.setHeader("Content-Type","text/html; charset=utf-8"),D.end(J),G(),B(T)}catch{D.statusCode=500,D.end("Internal error")}}),L=await new Promise((f)=>{let D=(U)=>{A.off("error",D),f({bound:!1,error:U})};A.once("error",D),A.listen(F,Q,()=>{A.off("error",D),V=A,f({bound:!0})})});if(L.error){if(L.error.code==="EADDRINUSE")continue;throw G(),L.error}if(L.bound){H=F;let f=`http://${Q}:${F}${$.callbackPath}`;if($.onListening)await Promise.resolve($.onListening({host:Q,port:F,callbackUrl:f})).catch(()=>{});return{callbackUrl:f,waitForCallback:K,cancelWait:()=>{G(),B(null)},close:()=>{G(),B(null)}}}}return{callbackUrl:"",waitForCallback:async()=>null,cancelWait:()=>{},close:()=>{}}}var Nz=`<!DOCTYPE html>
|
|
278
|
+
`,"utf8");try{return await Z()}finally{await nj(Q)}}catch(J){if((J instanceof Error&&"code"in J?String(J.code):"")!=="EEXIST")throw J;let Y=await U_(Q),j=Y?Date.now()-Date.parse(Y.acquiredAt):ij+1;if(!Y||!F_(Y.pid)||j>ij){await nj(Q);continue}if(Date.now()>=W)throw Error(`Timed out waiting for hub startup lock ${Q}`);await A_(B_)}}async function g1($,Z){try{let Q=await fetch(Z?.authToken?OW($):i9($),{headers:Z?.authToken?{authorization:`Bearer ${Z.authToken}`}:void 0});if(!Q.ok)return;let W=await Q.json();if(typeof W.protocolVersion!=="string"||typeof W.host!=="string"||typeof W.port!=="number"||typeof W.url!=="string")return;return{protocolVersion:W.protocolVersion,minClientProtocolVersion:typeof W.minClientProtocolVersion==="string"?W.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof W.maxClientProtocolVersion==="string"?W.maxClientProtocolVersion:void 0,capabilities:Array.isArray(W.capabilities)?W.capabilities.filter((J)=>typeof J==="string"):void 0,coreVersion:typeof W.coreVersion==="string"?W.coreVersion:void 0,buildId:typeof W.buildId==="string"?W.buildId:void 0,host:W.host,port:W.port,url:W.url,hubId:typeof W.hubId==="string"?W.hubId:void 0,authToken:typeof W.authToken==="string"?W.authToken:void 0,pid:typeof W.pid==="number"?W.pid:void 0,startedAt:typeof W.startedAt==="string"?W.startedAt:void 0,updatedAt:typeof W.updatedAt==="string"?W.updatedAt:void 0}}catch{return}}function Z1($,Z,Q="/hub"){return new URL(`ws://${$}:${Z}${Q}`).toString()}function i9($){let Z=new URL($);return Z.protocol=Z.protocol==="wss:"?"https:":"http:",Z.pathname="/health",Z.search="",Z.toString()}function OW($){let Z=new URL(i9($));return Z.pathname="/status",Z.toString()}function $V($){return X_($)}import{CLINE_HUB_DEV_PORT as D_,CLINE_HUB_PORT as L_,resolveClineBuildEnv as __}from"@cline/shared";var z_="CLINE_HUB_HOST",T_="CLINE_HUB_PORT",O_="CLINE_HUB_PATHNAME",qW="127.0.0.1",MW=L_,RW="/hub";function ZV($){return __($)==="development"?D_:MW}function EW($={}){return($.env??process.env)[z_]?.trim()||qW}function V8($={}){let Q=($.env??process.env)[T_]?.trim();if(!Q)return ZV($);let W=Number.parseInt(Q,10);if(!Number.isInteger(W)||W<1||W>65535)return ZV($);return W}function NW($={}){return($.env??process.env)[O_]?.trim()||RW}function K1($={},Z={}){return{host:$.host??EW(Z),port:$.port??V8(Z),pathname:$.pathname??NW(Z)}}import{join as q_}from"node:path";var M_="shared:cline",R_="CLINE_HUB_DISCOVERY_PATH",E_="hub-production";function QV($){let Z=w1($.trim());return x1(`workspace:${Z||$.trim()}`)}function Q1($=M_){return x1($)}function F1(){return{ownerId:E_,discoveryPath:process.env[R_]?.trim()||q_(o$(),"locks","hub","production.json")}}var g_=8000,m_=200,v_=3000,c_=100,u_=[100,250,500,1000,2000],d_="--cline-hub-daemon";function l_($){return[...$.host?["--host",$.host]:[],...typeof $.port==="number"?["--port",String($.port)]:[],...$.pathname?["--pathname",$.pathname]:[]]}function p_(){try{let $=y_(o$(),"logs","hub-daemon.log");return C_(b_($),{recursive:!0}),{fd:P_($,"a"),logPath:$}}catch{return}}function YV(){return XV()==="production"?F1():Q1()}function t$($){return I_($).compatible}function WV($,Z,Q){if(!Z||Z.url!==Q)return $;return{...$,authToken:$.authToken??Z.authToken,pid:$.pid??Z.pid}}async function e$($,Z){try{return await g1($,{authToken:Z})}catch{return}}async function r_($,Z){let Q=Date.now()+Z;while(Date.now()<Q){if(!(await e$($))?.url)return!0;await new Promise((J)=>setTimeout(J,c_))}return!1}async function n9($,Z){if(await s4($.url,$.authToken).catch(()=>!1),$.pid)try{process.kill($.pid,"SIGTERM")}catch{}let Q=await r_($.url,v_);return await S0(Z).catch(()=>{return}),Q}async function a4($,Z){if(t$($))return!0;return n9($,Z)}async function jV($){if(XV()!=="production")return;let Z=Q1();if(Z.discoveryPath===$.discoveryPath)return;let Q=await K0(Z.discoveryPath);if(Q?.url)await n9(Q,Z.discoveryPath);else await S0(Z.discoveryPath).catch(()=>{return})}function i_(){let $=import.meta.url.endsWith(".ts")?"ts":"js";return h_(new URL(`./entry.${$}`,import.meta.url))}function n_($,Z){let Q=i_(),W=process.execPath?.trim();if(!W)throw Error("unable to resolve runtime executable for hub daemon");let J=S_(W).toLowerCase().includes("bun"),X=Q.startsWith("/$bunfs/"),Y=J&&Q.toLowerCase().endsWith(".ts"),j=X?[d_]:[...Y?["--conditions=development"]:[],Q];return{launcher:W,args:[...j,"--cwd",$,...l_(Z)],cwd:$,env:{...x_(process.env),CLINE_NO_INTERACTIVE:"1",[k_]:"1"}}}function a_($){if(!$||typeof $!=="object")return!1;if(("code"in $?$.code:void 0)==="ETXTBSY")return!0;let Q="message"in $?$.message:void 0;return typeof Q==="string"&&Q.includes("ETXTBSY")}function wW($,Z={}){if(JV())return;let Q=n_($,Z),W=p_();try{N_(Q.launcher,Q.args,{detached:!0,stdio:W?["ignore",W.fd,W.fd]:"ignore",env:Q.env,cwd:Q.cwd,windowsHide:!0}).unref()}finally{if(W)w_(W.fd)}}async function H8($,Z={}){for(let Q=0;;Q++)try{wW($,Z);return}catch(W){let J=u_[Q];if(!a_(W)||J===void 0)throw W;await new Promise((X)=>setTimeout(X,J))}}function a9($,Z={}){if(JV())return;let Q=YV(),W=K1(Z),J=Z1(W.host,W.port,W.pathname),X=Z.allowPortFallback===!0&&W.port!==0;jV(Q).catch(()=>{return}).then(()=>K0(Q.discoveryPath)).then(async(Y)=>{let j=!1;if(Y?.url)if(!Y.authToken){if(j=!0,!await n9(Y,Q.discoveryPath)&&!X)return}else{let B=await e$(Y.url,Y.authToken);if(B?.url&&t$(B)&&await A1(B.url,{authToken:Y.authToken}))return;if(B?.url)await a4({...B,authToken:Y.authToken},Q.discoveryPath);else await S0(Q.discoveryPath).catch(()=>{return})}let V=await e$(J);if(V?.url){if(t$(V)){if(!X||!j)return}else if(!await a4({...V,authToken:void 0},Q.discoveryPath)&&!X)return}let H=X?{...W,port:0}:W;await H8($,H)}).catch(()=>{})}async function VV($,Z={}){let Q=YV(),W=Z.host!==void 0||Z.port!==void 0||Z.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),J=K1(Z),X=Z1(J.host,J.port,J.pathname),Y=(F)=>{if(!W)B$(F.url,F.authToken);return F};await jV(Q).catch(()=>{return});let j=await K0(Q.discoveryPath),V=!1;if(j?.url){let F=j.authToken;if(!F)V=!0,await n9(j,Q.discoveryPath);else{let A=await e$(j.url,F);if(A?.url&&t$(A)&&await A1(A.url,{authToken:F}))return Y({url:A.url,authToken:F});if(A?.url)await a4({...A,authToken:F},Q.discoveryPath);else await S0(Q.discoveryPath).catch(()=>{return})}}let H=await e$(X);if(H?.url){let F=WV(H,j,X);if(t$(H))throw Error(`A compatible Cline Hub is already running at ${X}, but its discovery record is missing or unreadable. Run 'cline doctor fix' to repair local hub discovery.${V?" This can happen immediately after upgrading from a build that wrote an empty hub auth token; run 'cline doctor fix' to stop the old daemon and repair local hub discovery.":""}`);if(!await a4(F,Q.discoveryPath)&&Z.allowPortFallback!==!0&&J.port!==0)throw Error(`An incompatible Cline Hub is already running at ${X} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}let G=Z.allowPortFallback===!0&&J.port!==0?{...J,port:0}:J;await H8($,G);let K=Date.now()+g_;while(Date.now()<K){let F=await K0(Q.discoveryPath);if(F?.url&&F.authToken){let L=await e$(F.url,F.authToken);if(L?.url&&t$(L)&&await A1(L.url,{authToken:F.authToken}))return Y({url:L.url,authToken:F.authToken})}let A=await e$(X);if(A?.url&&!t$(A)){let L=WV(A,F,X);if(!await a4(L,Q.discoveryPath)&&Z.allowPortFallback!==!0&&J.port!==0)throw Error(`An incompatible Cline Hub is still running at ${X} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}await new Promise((L)=>setTimeout(L,m_))}throw Error("Timed out waiting for detached hub startup.")}function s9(){return t_()==="production"?F1():Q1()}function $z(){let $=globalThis.WebSocket;if(!$)throw Error("Global WebSocket is not available in this runtime. Node 22+ is required for hub mode.");return $}function FV($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString();if($ instanceof ArrayBuffer)return Buffer.from($).toString();if(Array.isArray($))return Buffer.concat($.map((Z)=>Buffer.from(Z))).toString();if($&&typeof $==="object"&&"data"in $&&typeof $.data<"u")return FV($.data);return String($)}function Zz($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString("utf8");if($ instanceof ArrayBuffer)return Buffer.from($).toString("utf8");return""}function HV($){let Z=$,Q=Zz(Z.reason);return new R0("hub_connection_closed",Z.code||Q?`Hub connection closed (code=${Z.code??0}${Q?`, reason=${Q}`:""})`:CW,{closeCode:Z.code,closeReason:Q||void 0})}function Qz($,Z){if($ instanceof R0)return $;if($ instanceof Error)return new R0("hub_connect_failed",$.message);if($&&typeof $==="object"&&"error"in $&&$.error instanceof Error)return new R0("hub_connect_failed",$.error.message);let Q=$&&typeof $==="object"&&"message"in $&&typeof $.message==="string"?$.message.trim():"";if(Q)return new R0("hub_connect_failed",Q);let W=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return new R0("hub_connect_failed",W?`Failed to connect to hub at ${Z.toString()} (${W} event before socket open).`:`Failed to connect to hub at ${Z.toString()}.`)}var Wz=8000,Jz=200,BV="*",GV=8000,Xz="cline-hub-auth.",AV=new Map,fV=new Set,Yz=3000,jz=3000,Vz=100,CW="Hub connection closed",Hz=250,Bz=5000,KV=0.5;class R0 extends Error{code;details;constructor($,Z,Q){super(Z);this.code=$;this.details=Q;this.name="HubTransportError"}}function bW($){return $ instanceof R0}class B8 extends Error{command;code;constructor($,Z,Q){super(Q);this.command=$;this.code=Z;this.name="HubCommandError"}}function o9($,Z){return $ instanceof B8&&$.code==="hub_command_timeout"&&(Z===void 0||$.command===Z)}function UV($){let Z=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),Z)return Z;let Q=yW($.toString());return Q?AV.get(Q):void 0}function Gz($){try{let Q=new URL($).hostname.toLowerCase().replace(/^\[|\]$/g,"");return Q==="localhost"||Q==="127.0.0.1"||Q==="::1"}catch{return!1}}function yW($){if(!Gz($))return;let Z=new URL(G$($));return Z.search="",Z.hash="",Z.toString()}function PW($){let Z=yW($);return!!Z&&fV.has(Z)}function B$($,Z){let Q=yW($);if(Q){if(fV.add(Q),Z?.trim())AV.set(Q,Z)}return $}class W1{options;socket;connectPromise;clientId;currentUrl;recoveryPromise;pendingReplies=new Map;listeners=new Set;subscriptionCounts=new Map;reconnectTimer;reconnectAttempt=0;closedByClient=!1;lastCloseError=new R0("hub_connection_closed",CW);sawSocketClose=!1;registered=!1;constructor($){this.options=$;this.clientId=$.clientId??`core-${Math.random().toString(36).slice(2,10)}-${Date.now().toString(36)}`,this.currentUrl=$.url}getClientId(){return this.clientId}getUrl(){return this.currentUrl}async connect(){if(this.socket&&(this.socket.readyState===1||this.socket.readyState===0))return this.connectPromise??Promise.resolve();this.closedByClient=!1,this.clearReconnectTimer();let $=new URL(this.currentUrl),Z=this.options.authToken?.trim()||UV($);$.hash="";let W=new($z())($.toString(),Z?[`${Xz}${Z}`]:void 0);this.socket=W;let J=!1;this.connectPromise=new Promise((X,Y)=>{let j=!1,V=setTimeout(()=>{if(j)return;j=!0,J=!0,this.lastCloseError=new R0("hub_connect_timeout",`Timed out connecting to hub after ${GV}ms`),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0;try{W.close()}catch{}Y(this.lastCloseError)},GV);W.addEventListener("open",()=>{if(j)return;j=!0,clearTimeout(V),X()}),W.addEventListener("error",(H)=>{if(j)return;j=!0,clearTimeout(V),this.lastCloseError=Qz(H,$),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0,Y(this.lastCloseError)}),W.addEventListener("close",(H)=>{if(j)return;if(j=!0,clearTimeout(V),!J)this.lastCloseError=HV(H),this.sawSocketClose=!0;this.connectPromise=void 0,this.socket=void 0,Y(this.lastCloseError)})}),W.addEventListener("message",(X)=>{this.handleFrame(JSON.parse(FV(X)))}),W.addEventListener("close",(X)=>{if(this.socket!==W)return;if(!J)this.lastCloseError=HV(X),this.sawSocketClose=!0;this.registered=!1;for(let Y of this.pendingReplies.values())Y.reject(this.lastCloseError);if(this.pendingReplies.clear(),this.connectPromise=void 0,this.socket=void 0,!this.closedByClient&&this.hasActiveSubscriptions())this.scheduleReconnect()}),await this.connectPromise,await this.command("client.register",{clientId:this.clientId,clientType:this.options.clientType??"core",displayName:this.options.displayName??"core",transport:"native",actorKind:"client",workspaceContext:{workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}}),this.registered=!0;for(let X of this.subscriptionCounts.keys())this.sendSubscriptionFrame("stream.subscribe",this.subscriptionSessionIdFromKey(X));this.reconnectAttempt=0}subscribe($,Z){let Q=Z?.sessionId?.trim()||void 0,W={listener:$,sessionId:Q};return this.listeners.add(W),this.adjustSubscriptionCount(Q,1),()=>{if(!this.listeners.delete(W))return;this.adjustSubscriptionCount(Q,-1)}}async command($,Z,Q,W){let J=0,X=$!=="client.register"&&$!=="client.unregister";while(!0)try{return await this.commandOnce($,Z,Q,W)}catch(Y){if(!X||J>=1||!await this.recoverLocalHubTransport(Y))throw Y;J+=1}}async commandOnce($,Z,Q,W){await this.connect();let J=s_("hubreq_"),X=e_($,W?.timeoutMs),Y=new Promise((V,H)=>{let B=X===null?void 0:setTimeout(()=>{if(!this.pendingReplies.delete(J))return;H(new B8($,"hub_command_timeout",`Hub command ${$} timed out after ${X}ms (hub=${this.currentUrl}, requestId=${J}, clientId=${this.clientId}). Check hub-daemon.log for matching command.start/command.slow entries, or run 'cline doctor fix' to restart the hub.`))},X);this.pendingReplies.set(J,{resolve:(G)=>{if(B)clearTimeout(B);V(G)},reject:(G)=>{if(B)clearTimeout(B);H(G)}})});try{this.sendFrame({kind:"command",envelope:{version:"v1",command:$,requestId:J,clientId:this.clientId,sessionId:Q,timeoutMs:X,payload:Z}})}catch(V){throw this.pendingReplies.delete(J),V}let j=await Y;if(!j.ok){if(j.error?.code===s$){let V=Q??(typeof Z?.sessionId==="string"?Z.sessionId:void 0);throw new k1(V,j.error.message)}throw new B8($,j.error?.code,j.error?.message??`Hub command ${$} failed`)}return j}async recoverLocalHubTransport($){if(!PW(this.currentUrl)||!bW($))return!1;if(this.recoveryPromise)return await this.recoveryPromise;return this.recoveryPromise=(async()=>{let Z=await $2({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}).catch(()=>{return});if(!Z)return!1;return this.currentUrl=Z,this.close(),!0})().finally(()=>{this.recoveryPromise=void 0}),await this.recoveryPromise}hasActiveSubscriptions(){return this.subscriptionCounts.size>0}clearReconnectTimer(){if(!this.reconnectTimer)return;clearTimeout(this.reconnectTimer),this.reconnectTimer=void 0}scheduleReconnect(){if(this.reconnectTimer||this.closedByClient||!this.hasActiveSubscriptions())return;let $=Math.min(Hz*2**this.reconnectAttempt,Bz),Z=Math.round($*(1-KV)+Math.random()*$*KV);this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=void 0,this.reconnectSubscribedTransport()},Z)}async reconnectSubscribedTransport(){if(this.closedByClient||!this.hasActiveSubscriptions())return;try{await this.connect(),this.reconnectAttempt=0}catch{if(!PW(this.currentUrl)){this.reconnectAttempt+=1,this.scheduleReconnect();return}try{let $=await $2({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd});if($){this.currentUrl=$,await this.connect(),this.reconnectAttempt=0;return}}catch{}this.reconnectAttempt+=1,this.scheduleReconnect()}}close(){let $=this.socket;if(this.closedByClient=!0,this.clearReconnectTimer(),this.registered=!1,!$)return;this.lastCloseError=new R0("hub_connection_closed",CW),this.sawSocketClose=!1;for(let Z of this.pendingReplies.values())Z.reject(this.lastCloseError);this.pendingReplies.clear(),this.connectPromise=void 0,this.socket=void 0;try{$.close()}catch{}}async dispose(){if(this.socket?.readyState===1&&this.registered)try{await this.command("client.unregister",void 0,void 0,{timeoutMs:2000})}catch{}this.close()}sendFrame($){if(!this.socket||this.socket.readyState!==1){if(this.lastCloseError.code==="hub_connection_closed"&&!this.sawSocketClose)throw new R0("hub_connection_not_open","Hub connection is not open.");throw this.lastCloseError}this.socket.send(JSON.stringify($))}sendSubscriptionFrame($,Z){this.sendFrame({kind:$,clientId:this.clientId,...Z?{sessionId:Z}:{}})}adjustSubscriptionCount($,Z){let Q=this.subscriptionKeyForSessionId($),W=(this.subscriptionCounts.get(Q)??0)+Z;if(W<=0){if(this.subscriptionCounts.delete(Q),!this.hasActiveSubscriptions())this.clearReconnectTimer();if(Z<0&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.unsubscribe",$);return}if(this.subscriptionCounts.set(Q,W),Z>0&&W===1&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.subscribe",$)}subscriptionKeyForSessionId($){return $??BV}subscriptionSessionIdFromKey($){return $===BV?void 0:$}handleFrame($){switch($.kind){case"reply":{let Z=$.envelope.requestId;if(!Z)return;let Q=this.pendingReplies.get(Z);if(!Q)return;this.pendingReplies.delete(Z),Q.resolve($.envelope);return}case"event":for(let Z of this.listeners){if(Z.sessionId&&Z.sessionId!==$.envelope.sessionId?.trim())continue;Z.listener($.envelope)}return;case"command":case"stream.subscribe":case"stream.unsubscribe":return}}}function G$($){let Z=new URL($);if(Z.protocol==="http:")Z.protocol="ws:";else if(Z.protocol==="https:")Z.protocol="wss:";return Z.toString()}async function A1($,Z){let Q=new W1({url:$,authToken:Z?.authToken,clientType:"hub-healthcheck",displayName:"hub healthcheck",workspaceRoot:Z?.workspaceRoot,cwd:Z?.cwd});try{return await Q.connect(),!0}catch{return!1}finally{Q.close()}}async function SW($,Z){let Q=G$($),W=await g1(Q,{authToken:Z?.authToken});if(!W)return{status:"unreachable",url:Q};if(!o_(W).compatible)return{status:"protocol_mismatch",url:Q};if(Z?.verifyConnection===!0&&!await A1(Q,{workspaceRoot:Z.workspaceRoot,cwd:Z.cwd,authToken:Z.authToken}))return{status:"unreachable",url:Q};return{status:"compatible",url:Q}}async function Kz($){let Z=Date.now()+Wz;while(Date.now()<Z){let Q=await K0($.discoveryPath);if(Q?.url){let W=await SW(Q.url,{verifyConnection:!0,authToken:Q.authToken});if(W.status==="compatible")return B$(W.url,Q.authToken)}await new Promise((W)=>setTimeout(W,Jz))}return}async function Fz($){let Z=Date.now()+jz;while(Date.now()<Z){if(!(await g1($).catch(()=>{return}))?.url)return!0;await new Promise((W)=>setTimeout(W,Vz))}return!1}function Az($,Z){try{return G$($)===G$(Z)}catch{return!1}}function fz($){return($&&typeof $==="object"&&Array.isArray($.sessions)?$.sessions:[]).some((Q)=>{if(!Q||typeof Q!=="object")return!1;let W=Q;if(W.status==="running"||W.status==="idle"||W.status==="pending")return!0;return Array.isArray(W.participants)&&W.participants.length>0})}async function Uz($,Z,Q){let W=new W1({url:$,authToken:Z,clientType:"hub-recovery-check",displayName:"hub recovery check",workspaceRoot:Q?.workspaceRoot,cwd:Q?.cwd});try{let J=await W.command("session.list",{limit:500},void 0,{timeoutMs:Yz});return!fz(J.payload)}catch{return!1}finally{await W.dispose().catch(()=>{return})}}async function o4($={}){if($.endpoint?.trim()){let J=await SW($.endpoint);return J.status==="compatible"?J.url:void 0}let Z=s9(),Q=await K0(Z.discoveryPath);if(!Q?.url)return;let W=await SW(Q.url,{authToken:Q.authToken});if(W.status==="compatible")return B$(W.url,Q.authToken);if(W.status==="protocol_mismatch")await S0(Z.discoveryPath).catch(()=>{return});return}async function $2($={}){let Z=await o4($);if(Z&&await A1(Z,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return Z;if($.endpoint?.trim())return;let Q=s9();return await H8($.workspaceRoot??process.cwd()),await Kz(Q)}async function s4($,Z){let Q=new URL($),W=Z?.trim()||UV(Q);if(Q.protocol==="ws:")Q.protocol="http:";else if(Q.protocol==="wss:")Q.protocol="https:";return Q.pathname="/shutdown",Q.hash="",(await fetch(Q,{method:"POST",headers:W?{authorization:`Bearer ${W}`}:void 0})).ok}async function hW($=s9()){let Z=await K0($.discoveryPath);if(!Z?.url)return!1;try{if(await s4(Z.url,Z.authToken))return!0}catch{}return!1}async function t9($){if(!PW($.url))return;let Z=s9(),Q=await K0(Z.discoveryPath);if(!Q?.url||!Az(Q.url,$.url))return;if(!await Uz(Q.url,Q.authToken,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return;if(!await hW())return;if(!await Fz(Q.url))return;return await S0(Z.discoveryPath).catch(()=>{return}),await $2({workspaceRoot:$.workspaceRoot,cwd:$.cwd})}import{resolveClineBuildEnv as Dz}from"@cline/shared";function Lz($,Z){if($ instanceof Error)return $;if($&&typeof $==="object"&&"message"in $&&typeof $.message==="string"&&$.message.trim())return Error($.message.trim());let Q=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return Error(Q?`Failed to connect to hub at ${Z} (${Q} event before socket open).`:`Failed to connect to hub at ${Z}.`)}var _z="cline-hub-auth.";function zz($){return $.host!==void 0||$.port!==void 0||$.pathname!==void 0}function Tz($,Z){let Q=new URL($),W=new URL(Z);return Q.search="",Q.hash="",W.search="",W.hash="",Q.toString()===W.toString()}function DV(){return Dz()==="production"?F1():Q1()}async function Oz($){let Z=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),Z)return Z;let Q=DV(),W=await K0(Q.discoveryPath);if(W?.url&&Tz($.toString(),W.url))return W.authToken;return}async function kW($={}){let Z=K1($);if(!zz($)){let Q=DV(),W=await K0(Q.discoveryPath);if(W?.url)return W.url}return Z1(Z.host,Z.port,Z.pathname)}async function e9($){return await new Promise((Z,Q)=>{(async()=>{let W=new URL($),J=await Oz(W);W.hash="";let X=new WebSocket(W.toString(),J?[`${_z}${J}`]:void 0),Y=new Map,j=0;X.addEventListener("open",()=>{Z({send(V){let H=V.requestId??`hub-client-${++j}`;return new Promise((B,G)=>{Y.set(H,{resolve:B,reject:G});let K={kind:"command",envelope:{...V,requestId:H}};X.send(JSON.stringify(K))})},close(){X.close()}})}),X.addEventListener("message",(V)=>{let H=JSON.parse(String(V.data));if(H.kind==="reply"&&H.envelope.requestId){let B=Y.get(H.envelope.requestId);if(B)Y.delete(H.envelope.requestId),B.resolve(H.envelope)}}),X.addEventListener("close",()=>{for(let V of Y.values())V.reject(Error("Hub connection closed"));Y.clear()}),X.addEventListener("error",(V)=>{Q(Lz(V,$))})})().catch(Q)})}async function LV($){try{return(await e9($)).close(),!0}catch{return!1}}async function _V($,Z){let Q=await kW($),W=await e9(Q);try{return await W.send({version:Z.version??"v1",clientId:Z.clientId??"hub-client",...Z})}finally{W.close()}}function IW($){return $?JSON.parse(JSON.stringify($)):{}}function $Z($){let Z=$?.session&&typeof $.session==="object"?$.session:void 0;if(!Z)return;let Q=Z.metadata&&typeof Z.metadata==="object"?IW(Z.metadata):void 0;return{sessionId:typeof Z.sessionId==="string"?Z.sessionId:"",parentSessionId:typeof Q?.parentSessionId==="string"?Q.parentSessionId:void 0,messagesPath:typeof Q?.messagesPath==="string"?Q.messagesPath:void 0,metadata:Q}}function zV($,Z){return $.error?.message??`hub command failed: ${Z}`}function qz($){let Z=IW($);if(typeof Z.error==="string"&&Z.error.trim())return{...Z,error:Z.error.trim()};let Q=Z.result&&typeof Z.result==="object"?Z.result:void 0;if(typeof Q?.text==="string"&&Q.text.trim())return{...Z,error:Q.text.trim()};let W=Q?.error&&typeof Q.error==="object"?Q.error:void 0;if(typeof W?.message==="string"&&W.message.trim())return{...Z,error:W.message.trim()};return Z}function TV($){let Z=$?.sessionId;return typeof Z==="string"&&Z.trim()?Z.trim():void 0}function Mz($){let Z=$?.checkpoint;if(!Z||typeof Z!=="object"||Array.isArray(Z))throw Error("hub checkpoint restore returned no checkpoint");let Q=Z;if(typeof Q.ref!=="string"||typeof Q.createdAt!=="number"||typeof Q.runCount!=="number")throw Error("hub checkpoint restore returned an invalid checkpoint");return Q}function Rz($){let Z=IW($.payload);if($.event==="schedule.execution_completed")return{sessionId:$.sessionId?.trim()||TV(Z)||"",eventType:"schedule.execution.completed",payload:Z};if($.event==="schedule.execution_failed")return{sessionId:$.sessionId?.trim()||TV(Z)||"",eventType:"schedule.execution.failed",payload:Z};let Q=$.sessionId?.trim();if(!Q)return;switch($.event){case"iteration.started":return{sessionId:Q,eventType:"runtime.chat.iteration_start",payload:Z};case"iteration.finished":return{sessionId:Q,eventType:"runtime.chat.iteration_end",payload:Z};case"assistant.delta":return{sessionId:Q,eventType:"runtime.chat.text_delta",payload:Z};case"usage.updated":return{sessionId:Q,eventType:"runtime.chat.usage",payload:Z};case"tool.started":return{sessionId:Q,eventType:"runtime.chat.tool_call_start",payload:Z};case"tool.finished":return{sessionId:Q,eventType:"runtime.chat.tool_call_end",payload:Z};case"approval.requested":return{sessionId:Q,eventType:"approval.requested",payload:Z};case"run.aborted":return{sessionId:Q,eventType:"runtime.chat.aborted",payload:Z};case"run.failed":return{sessionId:Q,eventType:"runtime.chat.failed",payload:qz($.payload)};case"run.completed":return{sessionId:Q,eventType:"runtime.chat.completed",payload:Z};default:return}}class xW{options;client;metadataApplied=!1;constructor($){this.options=$;this.client=new W1({url:$.address,authToken:$.authToken,clientId:$.clientId,clientType:$.clientType??"hub-session-client",displayName:$.displayName??"hub session client",workspaceRoot:$.workspaceRoot,cwd:$.cwd})}async ensureMetadataApplied(){if(this.metadataApplied||!this.options.metadata){if(!this.options.metadata)await this.client.connect();return}await this.client.connect(),await this.client.command("client.update",{metadata:this.options.metadata}),this.metadataApplied=!0}async connect(){await this.ensureMetadataApplied()}close(){this.client.close()}async dispose(){await this.client.dispose()}async startRuntimeSession($){await this.ensureMetadataApplied();let Z=await this.client.command("session.create",{workspaceRoot:$.workspaceRoot,cwd:$.cwd,sessionConfig:{providerId:$.provider,modelId:$.model,apiKey:$.apiKey,cwd:$.cwd??$.workspaceRoot,workspaceRoot:$.workspaceRoot,systemPrompt:$.systemPrompt??"",mode:$.mode??"act",rules:$.rules,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,enableTools:$.enableTools,enableSpawnAgent:$.enableSpawn!==!1,enableAgentTeams:$.enableTeams!==!1,disableMcpSettingsTools:$.disableMcpSettingsTools,missionLogIntervalSteps:$.missionStepInterval,missionLogIntervalMs:$.missionTimeIntervalMs},metadata:{source:$.source??"cli",provider:$.provider,model:$.model,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,prompt:void 0,interactive:$.interactive!==!1},runtimeOptions:{mode:$.mode,systemPrompt:$.systemPrompt,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,autoApproveTools:$.autoApproveTools,toolExecutors:$.toolExecutors,configExtensions:$.configExtensions},modelSelection:{provider:$.provider,model:$.model,apiKey:$.apiKey},toolPolicies:$.toolPolicies}),Q=$Z(Z.payload);if(!Q?.sessionId)throw Error("hub session create returned no session id");return{sessionId:Q.sessionId,startResult:{sessionId:Q.sessionId,manifestPath:"",messagesPath:Q.messagesPath??""}}}async sendRuntimeSession($,Z,Q){return await this.ensureMetadataApplied(),{result:(await this.client.command("session.send_input",{prompt:Z.prompt,mode:Z.config.mode,attachments:Z.attachments,delivery:Z.delivery,timeoutSeconds:Z.config.timeoutSeconds},$,Q)).payload?.result}}async stopRuntimeSession($){return await this.ensureMetadataApplied(),await this.client.command("session.detach",{sessionId:$},$),{applied:!0}}async abortRuntimeSession($){return await this.ensureMetadataApplied(),await this.client.command("run.abort",{sessionId:$},$),{applied:!0}}async updateSession($){return await this.ensureMetadataApplied(),await this.client.command("session.update",{sessionId:$.sessionId,metadata:$.metadata},$.sessionId),{updated:!0}}async getSession($){await this.ensureMetadataApplied();let Z;try{Z=await this.client.command("session.get",void 0,$)}catch(Q){if(I1(Q))return;throw Q}return $Z(Z.payload)}async readMessages($){let Z=$.trim();if(!Z)return[];await this.ensureMetadataApplied();let Q=await this.client.command("session.messages",{sessionId:Z},Z);if(!Q.ok)throw Error(zV(Q,"session.messages"));let W=Q.payload?.messages;return Array.isArray(W)?W:[]}async restore($){let Z=$.sessionId.trim();if(!Z)throw Error("sessionId is required");let Q=$.restore?.messages!==!1;if(Q&&!$.config)throw Error("config is required when restore.messages is true");await this.ensureMetadataApplied();let W=$.config,J=await this.client.command("session.restore",{sessionId:Z,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...W?{workspaceRoot:W.workspaceRoot,cwd:W.cwd,sessionConfig:{providerId:W.provider,modelId:W.model,apiKey:W.apiKey,cwd:W.cwd??W.workspaceRoot,workspaceRoot:W.workspaceRoot,systemPrompt:W.systemPrompt??"",mode:W.mode??"act",rules:W.rules,maxIterations:W.maxIterations,enableTools:W.enableTools,enableSpawnAgent:W.enableSpawn!==!1,enableAgentTeams:W.enableTeams!==!1,disableMcpSettingsTools:W.disableMcpSettingsTools,missionLogIntervalSteps:W.missionStepInterval,missionLogIntervalMs:W.missionTimeIntervalMs},metadata:{source:W.source??"cli",provider:W.provider,model:W.model,enableTools:W.enableTools,enableSpawn:W.enableSpawn,enableTeams:W.enableTeams,prompt:void 0,interactive:W.interactive!==!1},runtimeOptions:{mode:W.mode,systemPrompt:W.systemPrompt,maxIterations:W.maxIterations,enableTools:W.enableTools,enableSpawn:W.enableSpawn,enableTeams:W.enableTeams,autoApproveTools:W.autoApproveTools,configExtensions:W.configExtensions},modelSelection:{provider:W.provider,model:W.model,apiKey:W.apiKey},toolPolicies:W.toolPolicies}:{}},Z);if(!J.ok)throw Error(zV(J,"session.restore"));let X=$Z(J.payload);if(Q&&!X?.sessionId)throw Error("hub checkpoint restore returned no session id");let Y=Array.isArray(J.payload?.messages)?J.payload.messages:void 0,j=Mz(J.payload);return{sessionId:X?.sessionId,startResult:X?.sessionId?{sessionId:X.sessionId,manifestPath:"",messagesPath:X.messagesPath??""}:void 0,...Y?{messages:Y}:{},checkpoint:j}}async listSessions($){await this.ensureMetadataApplied();let Z=await this.client.command("session.list",{limit:$?.limit??200});return(Array.isArray(Z.payload?.sessions)?Z.payload?.sessions:[]).map((W)=>$Z({session:W})).filter((W)=>Boolean(W?.sessionId))}async deleteSession($,Z=!0){return await this.ensureMetadataApplied(),(await this.client.command("session.delete",{sessionId:$,deleteCheckpointRefs:Z})).payload?.deleted===!0}async respondToolApproval($){await this.ensureMetadataApplied(),await this.client.command("approval.respond",{approvalId:$.approvalId,approved:$.approved,payload:$.reason?{reason:$.reason}:void 0,responderClientId:$.responderClientId})}streamEvents($,Z){let Q=new Set(($.sessionIds??[]).map((J)=>J.trim()).filter(Boolean)),W=this.client.subscribe((J)=>{let X=Rz(J);if(!X)return;if(Q.size>0&&!Q.has(X.sessionId))return;Z.onEvent?.(X)});return this.ensureMetadataApplied().catch((J)=>{Z.onError?.(J instanceof Error?J:Error(String(J)))}),W}streamTeamProgress($,Z){let Q=this.client.subscribe((W)=>{if(W.event!=="team.progress"||!W.payload)return;Z.onProjection?.(W.payload)});return this.ensureMetadataApplied().catch((W)=>{Z.onError?.(W instanceof Error?W:Error(String(W)))}),Q}async createSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.create",$)).payload?.schedule}async listSchedules($){await this.ensureMetadataApplied();let Z=await this.client.command("schedule.list");return Array.isArray(Z.payload?.schedules)?Z.payload?.schedules:[]}async getSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.get",{scheduleId:$})).payload?.schedule}async updateSchedule($,Z){return await this.ensureMetadataApplied(),(await this.client.command("schedule.update",{scheduleId:$,...Z})).payload?.schedule}async pauseSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.disable",{scheduleId:$})).payload?.schedule}async resumeSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.enable",{scheduleId:$})).payload?.schedule}async deleteSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.delete",{scheduleId:$})).payload?.deleted===!0}async triggerScheduleNow($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.trigger",{scheduleId:$})).payload?.execution}async listScheduleExecutions($,Z){await this.ensureMetadataApplied();let Q=await this.client.command("schedule.list_executions",{scheduleId:$,limit:Z});return Array.isArray(Q.payload?.executions)?Q.payload?.executions:[]}async getScheduleStats(){return await this.ensureMetadataApplied(),(await this.client.command("schedule.stats")).payload?.stats}async getActiveScheduledExecutions(){await this.ensureMetadataApplied();let $=await this.client.command("schedule.active");return Array.isArray($.payload?.executions)?$.payload?.executions:[]}async getUpcomingScheduledRuns($){await this.ensureMetadataApplied();let Z=await this.client.command("schedule.upcoming",{limit:$});return Array.isArray(Z.payload?.upcoming)?Z.payload?.upcoming:[]}}class gW{client;constructor($){this.client=new W1({url:$.address,authToken:$.authToken,clientId:$.clientId,clientType:$.clientType??"hub-ui-client",displayName:$.displayName??"hub ui client"})}async connect(){await this.client.connect()}close(){this.client.close()}async dispose(){await this.client.dispose()}getClientId(){return this.client.getClientId()}async sendNotify($){await this.client.command("ui.notify",$)}async sendShowWindow($){await this.client.command("ui.show_window",$??{})}async listClients(){let $=await this.client.command("client.list");return Array.isArray($.payload?.clients)?$.payload.clients:[]}async listSessions($=200){let Z=await this.client.command("session.list",{limit:$});return Array.isArray(Z.payload?.sessions)?Z.payload.sessions:[]}subscribeUI($){return this.client.subscribe((Z)=>{switch(Z.event){case"ui.notify":$.onNotify?.(Z.payload);break;case"ui.show_window":$.onShowWindow?.(Z.payload);break;case"hub.client.registered":$.onClientRegistered?.(Z.payload??{});break;case"hub.client.disconnected":$.onClientDisconnected?.(Z.payload??{});break;case"session.created":$.onSessionCreated?.(Z.payload??{});break;case"session.updated":$.onSessionUpdated?.(Z.payload??{});break;case"session.detached":$.onSessionDetached?.(Z.payload??{});break}})}}import{normalizeProviderId as Vx}from"@cline/llms";var jU={};N(jU,{LocalRuntimeHost:()=>T1});import{readdirSync as eI}from"node:fs";import{homedir as $x}from"node:os";import{isAbsolute as Zx,join as kY,resolve as IY}from"node:path";import{captureSdkError as p2,createSessionId as Qx,isLikelyAuthError as Wx,normalizeUserInput as Jx}from"@cline/shared";import{setHomeDirIfUnset as Xx}from"@cline/shared/storage";var sV={};N(sV,{saveProviderOAuthCredentials:()=>W2,resolveProviderApiKeyFromSettings:()=>sW,loginAndSaveProviderOAuthCredentials:()=>X6,isOAuthProvider:()=>Q2,getProviderOAuthCredentialsFromSettings:()=>Y6,getProviderAuthStorageId:()=>aW,getProviderAuthHandler:()=>j0,getPersistedProviderApiKey:()=>U8,formatProviderOAuthApiKey:()=>oW});import{getClineEnvironmentConfig as nV}from"@cline/shared";_0();var SV={};N(SV,{startClineDeviceAuth:()=>lW,refreshClineToken:()=>JZ,loginClineOAuth:()=>t4,getValidClineCredentials:()=>e4,completeClineDeviceAuth:()=>pW});import{getClineEnvironmentConfig as mW}from"@cline/shared";var OV={};N(OV,{startLocalOAuthServer:()=>J1});function Ez(){let $;return{promise:new Promise((Q)=>{$=Q}),resolve:$}}async function J1($){let Z=await import("node:http"),Q=$.host??"127.0.0.1",W=$.timeoutMs??300000,J=$.successHtml??Nz,X=Ez(),Y=!1,j=null,V=null,H=null,B=(F)=>{if(Y)return;Y=!0,X.resolve(F)},G=()=>{if(j)clearTimeout(j),j=null;let F=H;if(H=null,V)V.close(),V.closeAllConnections?.(),V=null;if(F!==null&&$.onClose)Promise.resolve($.onClose({host:Q,port:F})).catch(()=>{})},K=async()=>{return j=setTimeout(()=>{G(),B(null)},W),X.promise};for(let F of $.ports){let A=Z.createServer((f,D)=>{try{let U=new URL(f.url||"",`http://${Q}:${F}`);if(U.pathname!==$.callbackPath){D.statusCode=404,D.end("Not found");return}let T={url:U,code:U.searchParams.get("code")??void 0,state:U.searchParams.get("state")??void 0,provider:U.searchParams.get("provider")??void 0,error:U.searchParams.get("error")??void 0};if(T.error){D.statusCode=400,D.end(`Authentication failed: ${T.error}`),G(),B(T);return}if(!T.code){D.statusCode=400,D.end("Missing authorization code");return}if($.expectedState&&T.state!==$.expectedState){D.statusCode=400,D.end("State mismatch");return}D.statusCode=200,D.setHeader("Content-Type","text/html; charset=utf-8"),D.end(J),G(),B(T)}catch{D.statusCode=500,D.end("Internal error")}}),L=await new Promise((f)=>{let D=(U)=>{A.off("error",D),f({bound:!1,error:U})};A.once("error",D),A.listen(F,Q,()=>{A.off("error",D),V=A,f({bound:!0})})});if(L.error){if(L.error.code==="EADDRINUSE")continue;throw G(),L.error}if(L.bound){H=F;let f=`http://${Q}:${F}${$.callbackPath}`;if($.onListening)await Promise.resolve($.onListening({host:Q,port:F,callbackUrl:f})).catch(()=>{});return{callbackUrl:f,waitForCallback:K,cancelWait:()=>{G(),B(null)},close:()=>{G(),B(null)}}}}return{callbackUrl:"",waitForCallback:async()=>null,cancelWait:()=>{},close:()=>{}}}var Nz=`<!DOCTYPE html>
|
|
279
279
|
<html lang="en">
|
|
280
280
|
<head>
|
|
281
281
|
<meta charset="utf-8">
|
|
@@ -316,7 +316,7 @@ ${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
|
|
|
316
316
|
</div>
|
|
317
317
|
<script>setTimeout(() => window.close(), 3000);</script>
|
|
318
318
|
</body>
|
|
319
|
-
</html>`;function qV($){let Z="";for(let Q=0;Q<$.length;Q+=1)Z+=String.fromCharCode($[Q]??0);return btoa(Z).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}async function wz($){let Q=new TextEncoder().encode($),W=await crypto.subtle.digest("SHA-256",Q);return new Uint8Array(W)}function Cz($=32){let Z=new Uint8Array($);return crypto.getRandomValues(Z),qV(Z)}async function ZZ(){let $=Cz(),Z=qV(await wz($));return{verifier:$,challenge:Z}}function QZ($){return $.endsWith("/")?$.slice(0,-1):$}function Z2($,Z){return new URL(Z,`${QZ($)}/`).toString()}function G8($,Z={}){let Q=$.trim();if(!Q)return{};try{let W=new URL(Q);return{code:W.searchParams.get("code")??void 0,state:W.searchParams.get("state")??void 0,provider:Z.includeProvider?W.searchParams.get("provider")??void 0:void 0}}catch{}if(Z.allowHashCodeState&&Q.includes("#")){let[W,J]=Q.split("#",2);return{code:W||void 0,state:J||void 0}}if(Q.includes("code=")){let W=new URLSearchParams(Q);return{code:W.get("code")??void 0,state:W.get("state")??void 0,provider:Z.includeProvider?W.get("provider")??void 0:void 0}}return{code:Q}}function Pz($){if(typeof atob==="function")try{return atob($)}catch{return null}if(typeof Buffer<"u")try{return Buffer.from($,"base64").toString("utf8")}catch{return null}return null}function E0($){if(!$)return null;try{let Z=$.split(".");if(Z.length!==3)return null;let Q=Z[1];if(!Q)return null;let W=Q.replace(/-/g,"+").replace(/_/g,"/"),J=W.padEnd(W.length+(4-W.length%4)%4,"="),X=Pz(J);if(!X)return null;return JSON.parse(X)}catch{return null}}function K8($){try{let Z=JSON.parse($),Q=Z.error,W=typeof Q==="string"?Q:Q&&typeof Q==="object"&&typeof Q.type==="string"?Q.type:void 0,J=typeof Z.error_description==="string"?Z.error_description:typeof Z.message==="string"?Z.message:Q&&typeof Q==="object"&&typeof Q.message==="string"?Q.message:void 0;return{code:W,message:J}}catch{return{}}}function F8($,Z){return Date.now()>=$.expires-Z}async function A8($){if(!$.onManualCodeInput){let X=await $.waitForCallback();return{code:X?.code,state:X?.state,provider:X?.provider,error:X?.error}}let Z,Q,W=$.onManualCodeInput().then((X)=>{Z=X,$.cancelWait()}).catch((X)=>{Q=X instanceof Error?X:Error(String(X)),$.cancelWait()}),J=await $.waitForCallback();if(Q)throw Q;if(J?.code||J?.error)return{code:J.code,state:J.state,provider:J.provider,error:J.error};if(Z)return G8(Z,$.parseOptions);if(await W,Q)throw Q;if(Z)return G8(Z,$.parseOptions);return{}}var WZ={authorize:"/api/v1/auth/authorize",token:"/api/v1/auth/token",register:"/api/v1/auth/register",refresh:"/api/v1/auth/refresh"},NV={deviceAuthorization:"/user_management/authorize/device",authenticate:"/user_management/authenticate"},vW="https://api.workos.com",Sz="/auth",MV=Array.from({length:11},($,Z)=>48801+Z),bz=300000,yz=30000,f8=30000,hz=300,kz=5;class K$ extends Error{status;errorCode;constructor($,Z){super($);this.name="ClineOAuthTokenError",this.status=Z?.status,this.errorCode=Z?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant|invalid_token|unauthorized/i.test(this.errorCode))return!0;if(this.status===400||this.status===401||this.status===403)return/invalid|expired|revoked|unauthorized/i.test(this.message);return!1}}function Iz($){let Z=Date.parse($);if(Number.isNaN(Z))throw Error(`Invalid expiresAt value: ${$}`);return Z}function cW($,Z,Q={}){let W=$.userInfo.clineUserId??Q.accountId,J=$.refreshToken??Q.refresh;if(!J)throw Error("Token response did not include a refresh token");return{access:$.accessToken,refresh:J,expires:Iz($.expiresAt),accountId:W??void 0,email:$.userInfo.email||Q.email,metadata:{provider:Z,tokenType:$.tokenType,userInfo:$.userInfo}}}async function uW($){if(!$)return{};return typeof $==="function"?await $():$}function RV($,Z){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return Z;return Math.floor($)}async function EV($){await new Promise((Z)=>setTimeout(Z,$))}function dW($,Z){if(!$.success||!$.data?.accessToken)throw Error(Z);return $.data}async function wV($,Z){let Q=await fetch(Z2(vW,NV.deviceAuthorization),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({client_id:$}),signal:AbortSignal.timeout(Z?.requestTimeoutMs??f8)}),W=await Q.json().catch(()=>({}));if(!Q.ok)throw new K$(`Device authorization failed: ${Q.status}${W.error_description?` - ${W.error_description}`:""}`,{status:Q.status,errorCode:W.error});if(!W.device_code||!W.user_code||!W.verification_uri)throw Error("Invalid WorkOS device authorization response");return{deviceCode:W.device_code,userCode:W.user_code,verificationUri:W.verification_uri,verificationUriComplete:W.verification_uri_complete,expiresInSeconds:RV(W.expires_in,hz),pollIntervalSeconds:RV(W.interval,kz)}}async function CV($){let Z=Date.now()+$.expiresInSeconds*1000,Q=Math.max(1,$.initialPollIntervalSeconds);while(Date.now()<=Z){let W=await fetch(Z2($.workosApiBaseUrl,NV.authenticate),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"urn:ietf:params:oauth:grant-type:device_code",device_code:$.deviceCode,client_id:$.clientId}),signal:AbortSignal.timeout($.requestTimeoutMs)}),J=await W.json().catch(()=>({}));if(W.ok){if(!J.access_token||!J.refresh_token)throw Error("Invalid WorkOS token response");return{accessToken:J.access_token,refreshToken:J.refresh_token,tokenType:J.token_type??"Bearer"}}switch(J.error){case"authorization_pending":{await EV(Q*1000);break}case"slow_down":{Q+=1,await EV(Q*1000);break}case"access_denied":case"expired_token":case"invalid_grant":throw new K$(J.error_description||"WorkOS authorization failed",{status:W.status,errorCode:J.error});default:throw new K$(`WorkOS token polling failed: ${W.status}${J.error_description?` - ${J.error_description}`:""}`,{status:W.status,errorCode:J.error})}$.onProgress?.("Waiting for browser authentication confirmation...")}throw Error("WorkOS device authorization timed out")}async function PV($,Z,Q){let W={accessToken:$.accessToken,refreshToken:$.refreshToken},J=await fetch(Z2(Z.apiBaseUrl,WZ.register),{method:"POST",headers:{"Content-Type":"application/json",...await uW(Z.headers)},body:JSON.stringify(W),signal:AbortSignal.timeout(Z.requestTimeoutMs??f8)});if(!J.ok){let Y=await J.text().catch(()=>""),j=K8(Y);throw new K$(`Token registration failed: ${J.status}${j.message?` - ${j.message}`:""}`,{status:J.status,errorCode:j.code})}let X=await J.json();return cW(dW(X,"Invalid token exchange response"),Q??Z.provider)}async function xz($,Z,Q,W){let J={grant_type:"authorization_code",code:$,client_type:"extension",redirect_uri:Z,provider:W??Q.provider},X=await fetch(Z2(Q.apiBaseUrl,WZ.token),{method:"POST",headers:{"Content-Type":"application/json",...await uW(Q.headers)},body:JSON.stringify(J),signal:AbortSignal.timeout(Q.requestTimeoutMs??f8)});if(!X.ok){let j=await X.text().catch(()=>""),V=K8(j);throw new K$(`Token exchange failed: ${X.status}${V.message?` - ${V.message}`:""}`,{status:X.status,errorCode:V.code})}let Y=await X.json();return cW(dW(Y,"Invalid token exchange response"),W??Q.provider)}async function t4($){C1($.telemetry,$.provider??"cline");let Z=$.useWorkOSDeviceAuth??!0,Q=$.callbackPorts?.length?$.callbackPorts:MV,W=$.callbackPath??Sz,J=Z?null:await J1({ports:Q,callbackPath:W,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),X=J?.callbackUrl||`http://127.0.0.1:${Q[0]??MV[0]}${W}`;try{let Y;if(Z){let j=mW().workOsClientId,V=await wV(j,$);$.callbacks.onAuth({url:V.verificationUriComplete??V.verificationUri,instructions:`Enter this code in your browser: ${V.userCode}`});let H=await CV({clientId:j,deviceCode:V.deviceCode,expiresInSeconds:V.expiresInSeconds,initialPollIntervalSeconds:V.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??f8,workosApiBaseUrl:vW,onProgress:$.callbacks.onProgress});Y=await PV(H,$,$.provider)}else{let j=new URL(Z2($.apiBaseUrl,WZ.authorize));j.searchParams.set("client_type","extension"),j.searchParams.set("callback_url",X),j.searchParams.set("redirect_uri",X),$.callbacks.onAuth({url:j.toString(),instructions:"Continue the authentication process in your browser."});let V,H=$.provider,B=await A8({waitForCallback:J?.waitForCallback??(async()=>null),cancelWait:J?.cancelWait??(()=>{}),onManualCodeInput:$.callbacks.onManualCodeInput,parseOptions:{includeProvider:!0}});if(B.error)throw Error(`OAuth error: ${B.error}`);if(V=B.code,H=B.provider??H,!V){let G=await $.callbacks.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),K=G8(G,{includeProvider:!0});V=K.code,H=K.provider??H}if(!V)throw Error("Missing authorization code");Y=await xz(V,X,$,H)}return P1($.telemetry,$.provider??"cline"),b1($.telemetry,{id:Y.accountId,email:Y.email,provider:$.provider??"cline"}),Y}catch(Y){throw S1($.telemetry,$.provider??"cline",Y instanceof Error?Y.message:String(Y)),Y}finally{J?.close()}}async function lW($){return await wV(mW().workOsClientId,$)}async function pW($){let Z=$.provider??"cline";C1($.telemetry,Z);try{let Q=await CV({clientId:mW().workOsClientId,deviceCode:$.deviceCode,expiresInSeconds:$.expiresInSeconds,initialPollIntervalSeconds:$.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??f8,workosApiBaseUrl:vW}),W=await PV(Q,{apiBaseUrl:$.apiBaseUrl,headers:$.headers,requestTimeoutMs:$.requestTimeoutMs,provider:$.provider},$.provider);return P1($.telemetry,Z),b1($.telemetry,{id:W.accountId,email:W.email,provider:Z}),W}catch(Q){throw S1($.telemetry,Z,Q instanceof Error?Q.message:String(Q)),Q}}async function JZ($,Z){let Q=await fetch(Z2(Z.apiBaseUrl,WZ.refresh),{method:"POST",headers:{"Content-Type":"application/json",...await uW(Z.headers)},body:JSON.stringify({refreshToken:$.refresh,grantType:"refresh_token"}),signal:AbortSignal.timeout(Z.requestTimeoutMs??f8)});if(!Q.ok){let X=await Q.text().catch(()=>""),Y=K8(X);throw new K$(`Token refresh failed: ${Q.status}${Y.message?` - ${Y.message}`:""}`,{status:Q.status,errorCode:Y.code})}let W=await Q.json(),J=$.metadata?.provider??Z.provider;return cW(dW(W,"Invalid token refresh response"),J,$)}async function e4($,Z,Q){if(!$)return null;let W=Q?.refreshBufferMs??bz,J=Q?.retryableTokenGraceMs??yz;if(Q?.forceRefresh!==!0&&!F8($,W))return $;try{return await JZ($,Z)}catch(Y){if(Y instanceof K$&&Y.isLikelyInvalidGrant())return V$(Z.telemetry,Z.provider??"cline","invalid_grant"),null;if($.expires-Date.now()>J)return $;return null}}_0();var yV={};N(yV,{refreshOpenAICodexToken:()=>YZ,loginOpenAICodex:()=>$6,getValidOpenAICodexCredentials:()=>Z6,OPENAI_CODEX_OAUTH_CONFIG:()=>X0});import{nanoid as gz}from"nanoid";var X0={authorizationEndpoint:"https://auth.openai.com/oauth/authorize",tokenEndpoint:"https://auth.openai.com/oauth/token",clientId:"app_EMoamEEZ73f0CkXaXp7hrann",redirectUri:"http://localhost:1455/auth/callback",scopes:"openid profile email offline_access",callbackPort:1455,jwtClaimPath:"https://api.openai.com/auth",refreshBufferMs:300000,retryableTokenGraceMs:30000,httpTimeoutMs:30000};class XZ extends Error{status;errorCode;constructor($,Z){super($);this.name="OpenAICodexOAuthTokenError",this.status=Z?.status,this.errorCode=Z?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant/i.test(this.errorCode))return!0;if(this.status===400||this.status===401||this.status===403)return/invalid_grant|revoked|expired|invalid refresh/i.test(this.message);return!1}}async function mz($,Z,Q=X0.redirectUri){let W=await fetch(X0.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"authorization_code",client_id:X0.clientId,code:$,code_verifier:Z,redirect_uri:Q}),signal:AbortSignal.timeout(X0.httpTimeoutMs)});if(!W.ok)return{type:"failed"};let J=await W.json();if(!J.access_token||!J.refresh_token||typeof J.expires_in!=="number")return{type:"failed"};return{type:"success",access:J.access_token,refresh:J.refresh_token,expires:Date.now()+J.expires_in*1000,email:J.email,idToken:J.id_token}}async function vz($){try{let Z=await fetch(X0.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:$,client_id:X0.clientId}),signal:AbortSignal.timeout(X0.httpTimeoutMs)});if(!Z.ok){let W=await Z.text().catch(()=>""),J=K8(W);throw new XZ(`Token refresh failed: ${Z.status}${J.message?` - ${J.message}`:""}`,{status:Z.status,errorCode:J.code})}let Q=await Z.json();if(!Q.access_token||!Q.refresh_token||typeof Q.expires_in!=="number")return{type:"failed"};return{type:"success",access:Q.access_token,refresh:Q.refresh_token,expires:Date.now()+Q.expires_in*1000,email:Q.email,idToken:Q.id_token}}catch(Z){if(Z instanceof XZ)throw Z;return{type:"failed"}}}async function cz($="pi"){let{verifier:Z,challenge:Q}=await ZZ(),W=gz(32),J=new URL(X0.authorizationEndpoint);return J.searchParams.set("response_type","code"),J.searchParams.set("client_id",X0.clientId),J.searchParams.set("redirect_uri",X0.redirectUri),J.searchParams.set("scope",X0.scopes),J.searchParams.set("code_challenge",Q),J.searchParams.set("code_challenge_method","S256"),J.searchParams.set("state",W),J.searchParams.set("id_token_add_organizations","true"),J.searchParams.set("codex_cli_simplified_flow","true"),J.searchParams.set("originator",$),{verifier:Z,state:W,url:J.toString()}}function uz(){try{let $=new URL(X0.redirectUri),Z=$.port.length>0?Number.parseInt($.port,10):X0.callbackPort;return{host:$.hostname||"localhost",port:Number.isFinite(Z)?Z:X0.callbackPort,callbackPath:$.pathname||"/auth/callback",redirectUri:$.toString()}}catch{return{host:"localhost",port:X0.callbackPort,callbackPath:"/auth/callback",redirectUri:X0.redirectUri}}}function dz($,Z){let Q=Z?E0(Z):E0($),W=Q?Q:E0($),X=W?.[X0.jwtClaimPath]?.chatgpt_account_id;if(typeof X==="string"&&X.length>0)return X;let Y=W?.organizations;if(Array.isArray(Y)&&Y.length>0){let V=Y[0];if(typeof V?.id==="string"&&V.id.length>0)return V.id}let j=W?.chatgpt_account_id;if(typeof j==="string"&&j.length>0)return j;return null}function bV($,Z){let Q=dz($.access,$.idToken)??Z?.accountId;if(!Q)throw Error("Failed to extract accountId from token");return{access:$.access,refresh:$.refresh||Z?.refresh||"",expires:$.expires,accountId:Q,email:$.email??Z?.email,metadata:{...Z?.metadata??{},provider:"openai-codex"}}}async function $6($){C1($.telemetry,"openai-codex");let Z=uz(),{verifier:Q,state:W,url:J}=await cz($.originator),X=await J1({host:Z.host,ports:[Z.port],callbackPath:Z.callbackPath,expectedState:W});$.onAuth({url:J,instructions:"Continue the authentication process in your browser."});let Y;try{let j=await A8({waitForCallback:X.waitForCallback,cancelWait:X.cancelWait,onManualCodeInput:$.onManualCodeInput,parseOptions:{allowHashCodeState:!0}});if(j.state&&j.state!==W)throw Error("State mismatch");if(Y=j.code,!Y){let B=await $.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),G=G8(B,{allowHashCodeState:!0});if(G.state&&G.state!==W)throw Error("State mismatch");Y=G.code}if(!Y)throw Error("Missing authorization code");let V=await mz(Y,Q,Z.redirectUri);if(V.type!=="success")throw Error("Token exchange failed");let H=bV(V);return P1($.telemetry,"openai-codex"),b1($.telemetry,{id:H.accountId,email:H.email,provider:"openai-codex"}),H}catch(j){throw S1($.telemetry,"openai-codex",j instanceof Error?j.message:String(j)),j}finally{X.close()}}async function YZ($,Z){let Q=await vz($);if(Q.type!=="success")throw Error("Failed to refresh OpenAI Codex token");let W=bV(Q,Z);if(!W.refresh)throw Error("Failed to refresh OpenAI Codex token: missing refresh token");return W}async function Z6($,Z){if(!$)return null;let Q=Z?.refreshBufferMs??X0.refreshBufferMs,W=Z?.retryableTokenGraceMs??X0.retryableTokenGraceMs;if(Z?.forceRefresh!==!0&&!F8($,Q))return $;try{return await YZ($.refresh,$)}catch(X){if(X instanceof XZ&&X.isLikelyInvalidGrant())return V$(Z?.telemetry,"openai-codex","invalid_grant"),null;if($.expires-Date.now()>W)return $;return null}}_0();var iV={};N(iV,{refreshOcaToken:()=>BZ,loginOcaOAuth:()=>W6,getValidOcaCredentials:()=>J6,OCI_HEADER_OPC_REQUEST_ID:()=>lz,DEFAULT_INTERNAL_OCA_BASE_URL:()=>jZ,DEFAULT_INTERNAL_IDCS_URL:()=>IV,DEFAULT_INTERNAL_IDCS_SCOPES:()=>xV,DEFAULT_INTERNAL_IDCS_CLIENT_ID:()=>kV,DEFAULT_EXTERNAL_OCA_BASE_URL:()=>VZ,DEFAULT_EXTERNAL_IDCS_URL:()=>mV,DEFAULT_EXTERNAL_IDCS_SCOPES:()=>vV,DEFAULT_EXTERNAL_IDCS_CLIENT_ID:()=>gV});import{nanoid as hV}from"nanoid";class rW{ttlMs;maxEntries;entries=new Map;constructor($,Z){this.ttlMs=$;this.maxEntries=Z}get($,Z=Date.now()){this.pruneExpired(Z);let Q=this.entries.get($);if(!Q)return;return this.entries.delete($),this.entries.set($,Q),Q.value}set($,Z,Q=Date.now(),W=this.ttlMs){this.pruneExpired(Q),this.entries.delete($);while(this.entries.size>=this.maxEntries){let J=this.entries.keys().next().value;if(J===void 0)break;this.entries.delete(J)}this.entries.set($,{value:Z,expiresAt:Q+W})}pruneExpired($){for(let[Z,Q]of this.entries)if(Q.expiresAt<=$)this.entries.delete(Z)}}var kV="a8331954c0cf48ba99b5dd223a14c6ea",IV="https://idcs-9dc693e80d9b469480d7afe00e743931.identity.oraclecloud.com",xV="openid offline_access",jZ="https://code-internal.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",gV="c1aba3deed5740659981a752714eba33",mV="https://login-ext.identity.oraclecloud.com",vV="openid offline_access",VZ="https://code.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",lz="opc-request-id",pz="/auth/oca",rz=Array.from({length:11},($,Z)=>48801+Z),iz=300000,nz=30000,cV=30000,az=600000;class HZ extends Error{status;errorCode;constructor($,Z){super($);this.name="OcaOAuthTokenError",this.status=Z?.status,this.errorCode=Z?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant|invalid_token|unauthorized/i.test(this.errorCode))return!0;return this.status===400||this.status===401||this.status===403}}var F$={internal:{clientId:kV,idcsUrl:IV,scopes:xV,baseUrl:jZ},external:{clientId:gV,idcsUrl:mV,scopes:vV,baseUrl:VZ}},Q6=new Map,sz=86400000,oz=300000,tz=32,iW=new rW(sz,tz);function uV($){if(typeof $==="function")return $();return $??"internal"}function dV($){return{internal:{clientId:$?.internal?.clientId??F$.internal.clientId,idcsUrl:$?.internal?.idcsUrl??F$.internal.idcsUrl,scopes:$?.internal?.scopes??F$.internal.scopes,baseUrl:$?.internal?.baseUrl??F$.internal.baseUrl},external:{clientId:$?.external?.clientId??F$.external.clientId,idcsUrl:$?.external?.idcsUrl??F$.external.idcsUrl,scopes:$?.external?.scopes??F$.external.scopes,baseUrl:$?.external?.baseUrl??F$.external.baseUrl}}}function ez($=Date.now()){let Z=$-az;for(let[Q,W]of Q6.entries())if(W.createdAt<Z)Q6.delete(Q)}function $T($,Z,Q){if(typeof $.expires_in==="number"&&$.expires_in>0)return Date.now()+$.expires_in*1000;let J=E0(Z)?.exp;if(typeof J==="number"&&J>0)return J*1000;let Y=E0(Q)?.exp;if(typeof Y==="number"&&Y>0)return Y*1000;return Date.now()+3600000}function lV($,Z,Q){let W=$.access_token;if(!W)throw Error("Token response did not include an access token");let J=$.refresh_token??Q?.refresh;if(!J)throw Error("Token response did not include a refresh token");let X=E0($.id_token),Y=E0(W),j=X?.sub??Y?.sub,V=X?.email??Y?.email;return{access:W,refresh:J,expires:$T($,W,$.id_token),accountId:j??Q?.accountId,email:V??Q?.email,metadata:{...Q?.metadata??{},provider:"oca",mode:Z,subject:j,idToken:$.id_token}}}async function pV($,Z){let Q=QZ($),W=iW.get(Q);if(W)return W;let J=`${Q}/.well-known/openid-configuration`,X=await fetch(J,{method:"GET",signal:AbortSignal.timeout(Z)});if(!X.ok){let V=`${Q}/oauth2/v1/token`;return iW.set(Q,V,Date.now(),oz),V}let j=(await X.json()).token_endpoint||`${Q}/oauth2/v1/token`;return iW.set(Q,j),j}function rV($){return{code:$.error,message:$.error_description}}async function ZT($){let Z=Q6.get($.state);if(!Z)throw Error("No PKCE verifier found for this state");Q6.delete($.state);let Q=$.mode==="external"?$.config.external:$.config.internal,W=await pV(Q.idcsUrl,$.requestTimeoutMs),J=new URLSearchParams({grant_type:"authorization_code",code:$.code,redirect_uri:Z.redirectUri,client_id:Q.clientId,code_verifier:Z.verifier}),X=await fetch(W,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:J,signal:AbortSignal.timeout($.requestTimeoutMs)}),Y=await X.json();if(!X.ok){let V=rV(Y);throw new HZ(`Token exchange failed: ${X.status}${V.message?` - ${V.message}`:""}`,{status:X.status,errorCode:V.code})}let j=E0(Y.id_token);if(!Y.id_token||!j)throw Error("No ID token received from OCA");if(j.nonce!==Z.nonce)throw Error("OIDC nonce verification failed");return lV(Y,$.mode)}function QT($){let Z=$.mode==="external"?$.config.external:$.config.internal,Q=new URL(`${QZ(Z.idcsUrl)}/oauth2/v1/authorize`);return Q.searchParams.set("client_id",Z.clientId),Q.searchParams.set("response_type","code"),Q.searchParams.set("scope",Z.scopes),Q.searchParams.set("code_challenge",$.challenge),Q.searchParams.set("code_challenge_method","S256"),Q.searchParams.set("redirect_uri",$.callbackUrl),Q.searchParams.set("state",$.state),Q.searchParams.set("nonce",$.nonce),Q.toString()}async function W6($){C1($.telemetry,"oca");let Z=dV($.config),Q=uV($.mode),W=$.callbackPorts?.length?$.callbackPorts:rz,J=$.callbackPath??pz,X=$.requestTimeoutMs??cV,Y=await J1({ports:W,callbackPath:J,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),j=Y.callbackUrl;if(!j)throw Error("Unable to bind local OAuth callback server");let V=hV(16),H=hV(16),{verifier:B,challenge:G}=await ZZ();ez(),Q6.set(V,{verifier:B,nonce:H,mode:Q,redirectUri:j,createdAt:Date.now()});let K=QT({callbackUrl:j,mode:Q,state:V,nonce:H,challenge:G,config:Z});$.callbacks.onAuth({url:K,instructions:"Continue the authentication process in your browser."});try{let F=await A8({waitForCallback:Y.waitForCallback,cancelWait:Y.cancelWait,onManualCodeInput:$.callbacks.onManualCodeInput}),A=F.code,L=F.state;if(F.error)throw Error(`OAuth error: ${F.error}`);if(!A){if(!$.callbacks.onManualCodeInput)throw Error("Timed out waiting for OCA callback");throw Error("Missing authorization code")}if(!L||L!==V)throw Error("State mismatch");let f=await ZT({code:A,state:L,mode:Q,config:Z,requestTimeoutMs:X});return P1($.telemetry,"oca"),b1($.telemetry,{id:f.accountId,email:f.email,provider:"oca"}),f}catch(F){throw S1($.telemetry,"oca",F instanceof Error?F.message:String(F)),F}finally{Y.close()}}async function BZ($,Z={}){let Q=dV(Z.config),W=Z.requestTimeoutMs??cV,J=$.metadata?.mode,X=J==="internal"||J==="external"?J:uV(Z.mode),Y=X==="external"?Q.external:Q.internal,j=await pV(Y.idcsUrl,W),V=new URLSearchParams({grant_type:"refresh_token",refresh_token:$.refresh,client_id:Y.clientId}),H=await fetch(j,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:V,signal:AbortSignal.timeout(W)}),B=await H.json();if(!H.ok){let G=rV(B);throw new HZ(`Token refresh failed: ${H.status}${G.message?` - ${G.message}`:""}`,{status:H.status,errorCode:G.code})}return lV(B,X,$)}async function J6($,Z,Q){if(!$)return null;let W=Z?.refreshBufferMs??Q?.refreshBufferMs??iz,J=Z?.retryableTokenGraceMs??Q?.retryableTokenGraceMs??nz;if(Z?.forceRefresh!==!0&&!F8($,W))return $;try{return await BZ($,Q)}catch(Y){if(Y instanceof HZ&&Y.isLikelyInvalidGrant())return V$(Q?.telemetry,"oca","invalid_grant"),null;if($.expires-Date.now()>J)return $;return null}}var GZ="workos:";function WT($){let Z=$.trim();return Z.toLowerCase().startsWith(GZ)?Z:`${GZ}${Z}`}function JT($){let Z=$.trim();return Z.toLowerCase().startsWith(GZ)?Z.slice(GZ.length):Z}function XT($){let Q=E0($)?.exp;if(typeof Q==="number"&&Q>0)return Q*1000;return null}function YT($,Z){let Q=$.auth?.expiresAt;if(typeof Q==="number"&&Number.isFinite(Q)&&Q>0)return Q;let W=XT(Z);if(W)return W;return Date.now()-1}function jT($,Z){let Q=$.auth?.accessToken?.trim(),W=$.auth?.refreshToken?.trim();if(!Q||!W)return null;let J=Z?.normalizeAccessToken?.(Q)??Q;if(!J)return null;return{access:J,refresh:W,expires:YT($,J),accountId:$.auth?.accountId}}function VT($){let Z=$.formatAccessToken?.($.credentials.access)??$.credentials.access,Q={...$.settings?.auth??{},accessToken:Z,refreshToken:$.credentials.refresh,accountId:$.credentials.accountId,expiresAt:$.credentials.expires},W={...$.settings??{provider:$.storageProviderId},provider:$.storageProviderId,auth:Q};if($.save!==!1)$.manager.saveProviderSettings(W,{...$.setLastUsed===void 0?{}:{setLastUsed:$.setLastUsed},tokenSource:"oauth"});return W}function nW($){let Z=$.storageProviderId??$.providerId;return{providerId:$.providerId,storageProviderId:Z,getApiKey(Q){let W=Q?.auth?.accessToken?.trim();if(W)return $.formatAccessToken?.(W)??W;return Q?.apiKey?.trim()||Q?.auth?.apiKey?.trim()||void 0},login:$.login,refresh:$.refresh,saveCredentials(Q){return VT({...Q,storageProviderId:Z,formatAccessToken:$.formatAccessToken})},isConfigured(Q){return!!Q?.auth?.accessToken},normalizeStoredAccessToken:$.normalizeStoredAccessToken}}function aV($){return nW({providerId:$.providerId,storageProviderId:$.storageProviderId,formatAccessToken:WT,normalizeStoredAccessToken:JT,login:({settings:Z,callbacks:Q,telemetry:W})=>t4({apiBaseUrl:Z?.baseUrl?.trim()||nV().apiBaseUrl,useWorkOSDeviceAuth:!0,callbacks:Q,telemetry:W}),refresh:({settings:Z,credentials:Q,forceRefresh:W,telemetry:J})=>e4(Q,{apiBaseUrl:Z.baseUrl?.trim()||nV().apiBaseUrl,telemetry:J},{forceRefresh:W})})}var HT=[aV({providerId:"cline"}),aV({providerId:"cline-pass",storageProviderId:"cline"}),nW({providerId:"oca",login:({settings:$,callbacks:Z,telemetry:Q})=>W6({mode:$?.oca?.mode,callbacks:Z,telemetry:Q}),refresh:({settings:$,credentials:Z,forceRefresh:Q,telemetry:W})=>J6(Z,{forceRefresh:Q,telemetry:W},{mode:$.oca?.mode,telemetry:W})}),nW({providerId:"openai-codex",login:({callbacks:$,telemetry:Z})=>$6({onAuth:$.onAuth,onPrompt:$.onPrompt,onProgress:$.onProgress,onManualCodeInput:$.onManualCodeInput,telemetry:Z}),refresh:({credentials:$,forceRefresh:Z,telemetry:Q})=>Z6($,{forceRefresh:Z,telemetry:Q})})],BT=new Map(HT.map(($)=>[$.providerId,$]));function j0($){return BT.get($.trim().toLowerCase())}function Q2($){return j0($)!==void 0}function aW($){return j0($)?.storageProviderId}function sW($,Z){let Q=j0(Z),W=Q?.storageProviderId??Z,J=$.getProviderSettings(W);return Q?.getApiKey(J)??U8(Z,J)}async function X6($,Z,Q){let W=j0(Z);if(!W)throw Error(`Provider "${Z}" does not support OAuth login`);let J=$.getProviderSettings(W.storageProviderId),X=await W.login({settings:J,callbacks:Q.callbacks,telemetry:Q.telemetry});return W.saveCredentials({manager:$,settings:J,credentials:X})}function Y6($,Z){let Q=j0($);if(!Q)return null;return jT(Z,{normalizeAccessToken:Q.normalizeStoredAccessToken})}function W2($){let Z=j0($.providerId);if(!Z)throw Error(`Provider "${$.providerId}" does not support OAuth credentials`);return Z.saveCredentials({manager:$.manager,settings:$.settings,credentials:$.credentials,setLastUsed:$.setLastUsed,save:$.save})}function U8($,Z){let Q=j0($);if(Q)return Q.getApiKey(Z);return Z?.auth?.accessToken?.trim()||Z?.apiKey?.trim()||Z?.auth?.apiKey?.trim()||void 0}function oW($,Z){let Q=j0($);if(!Q)return Z.access;return Q.getApiKey({provider:Q.storageProviderId,auth:{accessToken:Z.access}})??Z.access}_0();var qH={};N(qH,{createContextCompactionPrepareTurn:()=>F6});import{createHandlerAsync as fT}from"@cline/llms";import{CHARS_PER_TOKEN as $c,estimateTokens as tW}from"@cline/shared";var eV=200000,$H=0.9,KZ=0.7,ZH=16384,eW=20000,oV=1024,tV=2000,QH=2000,WH=8;function H6($,Z){if($.length<=Z)return $;return`${$.slice(0,Z)}
|
|
319
|
+
</html>`;function qV($){let Z="";for(let Q=0;Q<$.length;Q+=1)Z+=String.fromCharCode($[Q]??0);return btoa(Z).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}async function wz($){let Q=new TextEncoder().encode($),W=await crypto.subtle.digest("SHA-256",Q);return new Uint8Array(W)}function Cz($=32){let Z=new Uint8Array($);return crypto.getRandomValues(Z),qV(Z)}async function ZZ(){let $=Cz(),Z=qV(await wz($));return{verifier:$,challenge:Z}}function QZ($){return $.endsWith("/")?$.slice(0,-1):$}function Z2($,Z){return new URL(Z,`${QZ($)}/`).toString()}function G8($,Z={}){let Q=$.trim();if(!Q)return{};try{let W=new URL(Q);return{code:W.searchParams.get("code")??void 0,state:W.searchParams.get("state")??void 0,provider:Z.includeProvider?W.searchParams.get("provider")??void 0:void 0}}catch{}if(Z.allowHashCodeState&&Q.includes("#")){let[W,J]=Q.split("#",2);return{code:W||void 0,state:J||void 0}}if(Q.includes("code=")){let W=new URLSearchParams(Q);return{code:W.get("code")??void 0,state:W.get("state")??void 0,provider:Z.includeProvider?W.get("provider")??void 0:void 0}}return{code:Q}}function Pz($){if(typeof atob==="function")try{return atob($)}catch{return null}if(typeof Buffer<"u")try{return Buffer.from($,"base64").toString("utf8")}catch{return null}return null}function E0($){if(!$)return null;try{let Z=$.split(".");if(Z.length!==3)return null;let Q=Z[1];if(!Q)return null;let W=Q.replace(/-/g,"+").replace(/_/g,"/"),J=W.padEnd(W.length+(4-W.length%4)%4,"="),X=Pz(J);if(!X)return null;return JSON.parse(X)}catch{return null}}function K8($){try{let Z=JSON.parse($),Q=Z.error,W=typeof Q==="string"?Q:Q&&typeof Q==="object"&&typeof Q.type==="string"?Q.type:void 0,J=typeof Z.error_description==="string"?Z.error_description:typeof Z.message==="string"?Z.message:Q&&typeof Q==="object"&&typeof Q.message==="string"?Q.message:void 0;return{code:W,message:J}}catch{return{}}}function F8($,Z){return Date.now()>=$.expires-Z}async function A8($){if(!$.onManualCodeInput){let X=await $.waitForCallback();return{code:X?.code,state:X?.state,provider:X?.provider,error:X?.error}}let Z,Q,W=$.onManualCodeInput().then((X)=>{Z=X,$.cancelWait()}).catch((X)=>{Q=X instanceof Error?X:Error(String(X)),$.cancelWait()}),J=await $.waitForCallback();if(Q)throw Q;if(J?.code||J?.error)return{code:J.code,state:J.state,provider:J.provider,error:J.error};if(Z)return G8(Z,$.parseOptions);if(await W,Q)throw Q;if(Z)return G8(Z,$.parseOptions);return{}}var WZ={authorize:"/api/v1/auth/authorize",token:"/api/v1/auth/token",register:"/api/v1/auth/register",refresh:"/api/v1/auth/refresh"},NV={deviceAuthorization:"/user_management/authorize/device",authenticate:"/user_management/authenticate"},vW="https://api.workos.com",Sz="/auth",MV=Array.from({length:11},($,Z)=>48801+Z),bz=300000,yz=30000,f8=30000,hz=300,kz=5;class K$ extends Error{status;errorCode;constructor($,Z){super($);this.name="ClineOAuthTokenError",this.status=Z?.status,this.errorCode=Z?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant|invalid_token|unauthorized/i.test(this.errorCode))return!0;if(this.status===400||this.status===401||this.status===403)return/invalid|expired|revoked|unauthorized/i.test(this.message);return!1}}function Iz($){let Z=Date.parse($);if(Number.isNaN(Z))throw Error(`Invalid expiresAt value: ${$}`);return Z}function cW($,Z,Q={}){let W=$.userInfo.clineUserId??Q.accountId,J=$.refreshToken??Q.refresh;if(!J)throw Error("Token response did not include a refresh token");return{access:$.accessToken,refresh:J,expires:Iz($.expiresAt),accountId:W??void 0,email:$.userInfo.email||Q.email,metadata:{provider:Z,tokenType:$.tokenType,userInfo:$.userInfo}}}async function uW($){if(!$)return{};return typeof $==="function"?await $():$}function RV($,Z){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return Z;return Math.floor($)}async function EV($){await new Promise((Z)=>setTimeout(Z,$))}function dW($,Z){if(!$.success||!$.data?.accessToken)throw Error(Z);return $.data}async function wV($,Z){let Q=await fetch(Z2(vW,NV.deviceAuthorization),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({client_id:$}),signal:AbortSignal.timeout(Z?.requestTimeoutMs??f8)}),W=await Q.json().catch(()=>({}));if(!Q.ok)throw new K$(`Device authorization failed: ${Q.status}${W.error_description?` - ${W.error_description}`:""}`,{status:Q.status,errorCode:W.error});if(!W.device_code||!W.user_code||!W.verification_uri)throw Error("Invalid WorkOS device authorization response");return{deviceCode:W.device_code,userCode:W.user_code,verificationUri:W.verification_uri,verificationUriComplete:W.verification_uri_complete,expiresInSeconds:RV(W.expires_in,hz),pollIntervalSeconds:RV(W.interval,kz)}}async function CV($){let Z=Date.now()+$.expiresInSeconds*1000,Q=Math.max(1,$.initialPollIntervalSeconds);while(Date.now()<=Z){let W=await fetch(Z2($.workosApiBaseUrl,NV.authenticate),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"urn:ietf:params:oauth:grant-type:device_code",device_code:$.deviceCode,client_id:$.clientId}),signal:AbortSignal.timeout($.requestTimeoutMs)}),J=await W.json().catch(()=>({}));if(W.ok){if(!J.access_token||!J.refresh_token)throw Error("Invalid WorkOS token response");return{accessToken:J.access_token,refreshToken:J.refresh_token,tokenType:J.token_type??"Bearer"}}switch(J.error){case"authorization_pending":{await EV(Q*1000);break}case"slow_down":{Q+=1,await EV(Q*1000);break}case"access_denied":case"expired_token":case"invalid_grant":throw new K$(J.error_description||"WorkOS authorization failed",{status:W.status,errorCode:J.error});default:throw new K$(`WorkOS token polling failed: ${W.status}${J.error_description?` - ${J.error_description}`:""}`,{status:W.status,errorCode:J.error})}$.onProgress?.("Waiting for browser authentication confirmation...")}throw Error("WorkOS device authorization timed out")}async function PV($,Z,Q){let W={accessToken:$.accessToken,refreshToken:$.refreshToken},J=await fetch(Z2(Z.apiBaseUrl,WZ.register),{method:"POST",headers:{"Content-Type":"application/json",...await uW(Z.headers)},body:JSON.stringify(W),signal:AbortSignal.timeout(Z.requestTimeoutMs??f8)});if(!J.ok){let Y=await J.text().catch(()=>""),j=K8(Y);throw new K$(`Token registration failed: ${J.status}${j.message?` - ${j.message}`:""}`,{status:J.status,errorCode:j.code})}let X=await J.json();return cW(dW(X,"Invalid token exchange response"),Q??Z.provider)}async function xz($,Z,Q,W){let J={grant_type:"authorization_code",code:$,client_type:"extension",redirect_uri:Z,provider:W??Q.provider},X=await fetch(Z2(Q.apiBaseUrl,WZ.token),{method:"POST",headers:{"Content-Type":"application/json",...await uW(Q.headers)},body:JSON.stringify(J),signal:AbortSignal.timeout(Q.requestTimeoutMs??f8)});if(!X.ok){let j=await X.text().catch(()=>""),V=K8(j);throw new K$(`Token exchange failed: ${X.status}${V.message?` - ${V.message}`:""}`,{status:X.status,errorCode:V.code})}let Y=await X.json();return cW(dW(Y,"Invalid token exchange response"),W??Q.provider)}async function t4($){C1($.telemetry,$.provider??"cline");let Z=$.useWorkOSDeviceAuth??!0,Q=$.callbackPorts?.length?$.callbackPorts:MV,W=$.callbackPath??Sz,J=Z?null:await J1({ports:Q,callbackPath:W,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),X=J?.callbackUrl||`http://127.0.0.1:${Q[0]??MV[0]}${W}`;try{let Y;if(Z){let j=mW().workOsClientId,V=await wV(j,$);$.callbacks.onAuth({url:V.verificationUriComplete??V.verificationUri,instructions:`Enter this code in your browser: ${V.userCode}`});let H=await CV({clientId:j,deviceCode:V.deviceCode,expiresInSeconds:V.expiresInSeconds,initialPollIntervalSeconds:V.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??f8,workosApiBaseUrl:vW,onProgress:$.callbacks.onProgress});Y=await PV(H,$,$.provider)}else{let j=new URL(Z2($.apiBaseUrl,WZ.authorize));j.searchParams.set("client_type","extension"),j.searchParams.set("callback_url",X),j.searchParams.set("redirect_uri",X),$.callbacks.onAuth({url:j.toString(),instructions:"Continue the authentication process in your browser."});let V,H=$.provider,B=await A8({waitForCallback:J?.waitForCallback??(async()=>null),cancelWait:J?.cancelWait??(()=>{}),onManualCodeInput:$.callbacks.onManualCodeInput,parseOptions:{includeProvider:!0}});if(B.error)throw Error(`OAuth error: ${B.error}`);if(V=B.code,H=B.provider??H,!V){let G=await $.callbacks.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),K=G8(G,{includeProvider:!0});V=K.code,H=K.provider??H}if(!V)throw Error("Missing authorization code");Y=await xz(V,X,$,H)}return P1($.telemetry,$.provider??"cline"),b1($.telemetry,{id:Y.accountId,email:Y.email,provider:$.provider??"cline"}),Y}catch(Y){throw S1($.telemetry,$.provider??"cline",Y instanceof Error?Y.message:String(Y)),Y}finally{J?.close()}}async function lW($){return await wV(mW().workOsClientId,$)}async function pW($){let Z=$.provider??"cline";C1($.telemetry,Z);try{let Q=await CV({clientId:mW().workOsClientId,deviceCode:$.deviceCode,expiresInSeconds:$.expiresInSeconds,initialPollIntervalSeconds:$.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??f8,workosApiBaseUrl:vW}),W=await PV(Q,{apiBaseUrl:$.apiBaseUrl,headers:$.headers,requestTimeoutMs:$.requestTimeoutMs,provider:$.provider},$.provider);return P1($.telemetry,Z),b1($.telemetry,{id:W.accountId,email:W.email,provider:Z}),W}catch(Q){throw S1($.telemetry,Z,Q instanceof Error?Q.message:String(Q)),Q}}async function JZ($,Z){let Q=await fetch(Z2(Z.apiBaseUrl,WZ.refresh),{method:"POST",headers:{"Content-Type":"application/json",...await uW(Z.headers)},body:JSON.stringify({refreshToken:$.refresh,grantType:"refresh_token"}),signal:AbortSignal.timeout(Z.requestTimeoutMs??f8)});if(!Q.ok){let X=await Q.text().catch(()=>""),Y=K8(X);throw new K$(`Token refresh failed: ${Q.status}${Y.message?` - ${Y.message}`:""}`,{status:Q.status,errorCode:Y.code})}let W=await Q.json(),J=$.metadata?.provider??Z.provider;return cW(dW(W,"Invalid token refresh response"),J,$)}async function e4($,Z,Q){if(!$)return null;let W=Q?.refreshBufferMs??bz,J=Q?.retryableTokenGraceMs??yz;if(Q?.forceRefresh!==!0&&!F8($,W))return $;try{return await JZ($,Z)}catch(Y){if(Y instanceof K$&&Y.isLikelyInvalidGrant())return V$(Z.telemetry,Z.provider??"cline","invalid_grant"),null;if($.expires-Date.now()>J)return $;return null}}_0();var yV={};N(yV,{refreshOpenAICodexToken:()=>YZ,loginOpenAICodex:()=>$6,getValidOpenAICodexCredentials:()=>Z6,OPENAI_CODEX_OAUTH_CONFIG:()=>X0});import{nanoid as gz}from"nanoid";var X0={authorizationEndpoint:"https://auth.openai.com/oauth/authorize",tokenEndpoint:"https://auth.openai.com/oauth/token",clientId:"app_EMoamEEZ73f0CkXaXp7hrann",redirectUri:"http://localhost:1455/auth/callback",scopes:"openid profile email offline_access",callbackPort:1455,jwtClaimPath:"https://api.openai.com/auth",refreshBufferMs:300000,retryableTokenGraceMs:30000,httpTimeoutMs:30000};class XZ extends Error{status;errorCode;constructor($,Z){super($);this.name="OpenAICodexOAuthTokenError",this.status=Z?.status,this.errorCode=Z?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant/i.test(this.errorCode))return!0;if(this.status===400||this.status===401||this.status===403)return/invalid_grant|revoked|expired|invalid refresh/i.test(this.message);return!1}}async function mz($,Z,Q=X0.redirectUri){let W=await fetch(X0.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"authorization_code",client_id:X0.clientId,code:$,code_verifier:Z,redirect_uri:Q}),signal:AbortSignal.timeout(X0.httpTimeoutMs)});if(!W.ok)return{type:"failed"};let J=await W.json();if(!J.access_token||!J.refresh_token||typeof J.expires_in!=="number")return{type:"failed"};return{type:"success",access:J.access_token,refresh:J.refresh_token,expires:Date.now()+J.expires_in*1000,email:J.email,idToken:J.id_token}}async function vz($){try{let Z=await fetch(X0.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:$,client_id:X0.clientId}),signal:AbortSignal.timeout(X0.httpTimeoutMs)});if(!Z.ok){let W=await Z.text().catch(()=>""),J=K8(W);throw new XZ(`Token refresh failed: ${Z.status}${J.message?` - ${J.message}`:""}`,{status:Z.status,errorCode:J.code})}let Q=await Z.json();if(!Q.access_token||!Q.refresh_token||typeof Q.expires_in!=="number")return{type:"failed"};return{type:"success",access:Q.access_token,refresh:Q.refresh_token,expires:Date.now()+Q.expires_in*1000,email:Q.email,idToken:Q.id_token}}catch(Z){if(Z instanceof XZ)throw Z;return{type:"failed"}}}async function cz($="pi"){let{verifier:Z,challenge:Q}=await ZZ(),W=gz(32),J=new URL(X0.authorizationEndpoint);return J.searchParams.set("response_type","code"),J.searchParams.set("client_id",X0.clientId),J.searchParams.set("redirect_uri",X0.redirectUri),J.searchParams.set("scope",X0.scopes),J.searchParams.set("code_challenge",Q),J.searchParams.set("code_challenge_method","S256"),J.searchParams.set("state",W),J.searchParams.set("id_token_add_organizations","true"),J.searchParams.set("codex_cli_simplified_flow","true"),J.searchParams.set("originator",$),{verifier:Z,state:W,url:J.toString()}}function uz(){try{let $=new URL(X0.redirectUri),Z=$.port.length>0?Number.parseInt($.port,10):X0.callbackPort;return{host:$.hostname||"localhost",port:Number.isFinite(Z)?Z:X0.callbackPort,callbackPath:$.pathname||"/auth/callback",redirectUri:$.toString()}}catch{return{host:"localhost",port:X0.callbackPort,callbackPath:"/auth/callback",redirectUri:X0.redirectUri}}}function dz($,Z){let Q=Z?E0(Z):E0($),W=Q?Q:E0($),X=W?.[X0.jwtClaimPath]?.chatgpt_account_id;if(typeof X==="string"&&X.length>0)return X;let Y=W?.organizations;if(Array.isArray(Y)&&Y.length>0){let V=Y[0];if(typeof V?.id==="string"&&V.id.length>0)return V.id}let j=W?.chatgpt_account_id;if(typeof j==="string"&&j.length>0)return j;return null}function bV($,Z){let Q=dz($.access,$.idToken)??Z?.accountId;if(!Q)throw Error("Failed to extract accountId from token");return{access:$.access,refresh:$.refresh||Z?.refresh||"",expires:$.expires,accountId:Q,email:$.email??Z?.email,metadata:{...Z?.metadata??{},provider:"openai-codex"}}}async function $6($){C1($.telemetry,"openai-codex");let Z=uz(),{verifier:Q,state:W,url:J}=await cz($.originator),X=await J1({host:Z.host,ports:[Z.port],callbackPath:Z.callbackPath,expectedState:W});$.onAuth({url:J,instructions:"Continue the authentication process in your browser."});let Y;try{let j=await A8({waitForCallback:X.waitForCallback,cancelWait:X.cancelWait,onManualCodeInput:$.onManualCodeInput,parseOptions:{allowHashCodeState:!0}});if(j.state&&j.state!==W)throw Error("State mismatch");if(Y=j.code,!Y){let B=await $.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),G=G8(B,{allowHashCodeState:!0});if(G.state&&G.state!==W)throw Error("State mismatch");Y=G.code}if(!Y)throw Error("Missing authorization code");let V=await mz(Y,Q,Z.redirectUri);if(V.type!=="success")throw Error("Token exchange failed");let H=bV(V);return P1($.telemetry,"openai-codex"),b1($.telemetry,{id:H.accountId,email:H.email,provider:"openai-codex"}),H}catch(j){throw S1($.telemetry,"openai-codex",j instanceof Error?j.message:String(j)),j}finally{X.close()}}async function YZ($,Z){let Q=await vz($);if(Q.type!=="success")throw Error("Failed to refresh OpenAI Codex token");let W=bV(Q,Z);if(!W.refresh)throw Error("Failed to refresh OpenAI Codex token: missing refresh token");return W}async function Z6($,Z){if(!$)return null;let Q=Z?.refreshBufferMs??X0.refreshBufferMs,W=Z?.retryableTokenGraceMs??X0.retryableTokenGraceMs;if(Z?.forceRefresh!==!0&&!F8($,Q))return $;try{return await YZ($.refresh,$)}catch(X){if(X instanceof XZ&&X.isLikelyInvalidGrant())return V$(Z?.telemetry,"openai-codex","invalid_grant"),null;if($.expires-Date.now()>W)return $;return null}}_0();var iV={};N(iV,{refreshOcaToken:()=>BZ,loginOcaOAuth:()=>W6,getValidOcaCredentials:()=>J6,OCI_HEADER_OPC_REQUEST_ID:()=>lz,DEFAULT_INTERNAL_OCA_BASE_URL:()=>jZ,DEFAULT_INTERNAL_IDCS_URL:()=>IV,DEFAULT_INTERNAL_IDCS_SCOPES:()=>xV,DEFAULT_INTERNAL_IDCS_CLIENT_ID:()=>kV,DEFAULT_EXTERNAL_OCA_BASE_URL:()=>VZ,DEFAULT_EXTERNAL_IDCS_URL:()=>mV,DEFAULT_EXTERNAL_IDCS_SCOPES:()=>vV,DEFAULT_EXTERNAL_IDCS_CLIENT_ID:()=>gV});import{nanoid as hV}from"nanoid";class rW{ttlMs;maxEntries;entries=new Map;constructor($,Z){this.ttlMs=$;this.maxEntries=Z}get($,Z=Date.now()){this.pruneExpired(Z);let Q=this.entries.get($);if(!Q)return;return this.entries.delete($),this.entries.set($,Q),Q.value}set($,Z,Q=Date.now(),W=this.ttlMs){this.pruneExpired(Q),this.entries.delete($);while(this.entries.size>=this.maxEntries){let J=this.entries.keys().next().value;if(J===void 0)break;this.entries.delete(J)}this.entries.set($,{value:Z,expiresAt:Q+W})}pruneExpired($){for(let[Z,Q]of this.entries)if(Q.expiresAt<=$)this.entries.delete(Z)}}var kV="a8331954c0cf48ba99b5dd223a14c6ea",IV="https://idcs-9dc693e80d9b469480d7afe00e743931.identity.oraclecloud.com",xV="openid offline_access",jZ="https://code-internal.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",gV="c1aba3deed5740659981a752714eba33",mV="https://login-ext.identity.oraclecloud.com",vV="openid offline_access",VZ="https://code.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",lz="opc-request-id",pz="/auth/oca",rz=Array.from({length:11},($,Z)=>48801+Z),iz=300000,nz=30000,cV=30000,az=600000;class HZ extends Error{status;errorCode;constructor($,Z){super($);this.name="OcaOAuthTokenError",this.status=Z?.status,this.errorCode=Z?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant|invalid_token|unauthorized/i.test(this.errorCode))return!0;return this.status===400||this.status===401||this.status===403}}var F$={internal:{clientId:kV,idcsUrl:IV,scopes:xV,baseUrl:jZ},external:{clientId:gV,idcsUrl:mV,scopes:vV,baseUrl:VZ}},Q6=new Map,sz=86400000,oz=300000,tz=32,iW=new rW(sz,tz);function uV($){if(typeof $==="function")return $();return $??"internal"}function dV($){return{internal:{clientId:$?.internal?.clientId??F$.internal.clientId,idcsUrl:$?.internal?.idcsUrl??F$.internal.idcsUrl,scopes:$?.internal?.scopes??F$.internal.scopes,baseUrl:$?.internal?.baseUrl??F$.internal.baseUrl},external:{clientId:$?.external?.clientId??F$.external.clientId,idcsUrl:$?.external?.idcsUrl??F$.external.idcsUrl,scopes:$?.external?.scopes??F$.external.scopes,baseUrl:$?.external?.baseUrl??F$.external.baseUrl}}}function ez($=Date.now()){let Z=$-az;for(let[Q,W]of Q6.entries())if(W.createdAt<Z)Q6.delete(Q)}function $T($,Z,Q){if(typeof $.expires_in==="number"&&$.expires_in>0)return Date.now()+$.expires_in*1000;let J=E0(Z)?.exp;if(typeof J==="number"&&J>0)return J*1000;let Y=E0(Q)?.exp;if(typeof Y==="number"&&Y>0)return Y*1000;return Date.now()+3600000}function lV($,Z,Q){let W=$.access_token;if(!W)throw Error("Token response did not include an access token");let J=$.refresh_token??Q?.refresh;if(!J)throw Error("Token response did not include a refresh token");let X=E0($.id_token),Y=E0(W),j=X?.sub??Y?.sub,V=X?.email??Y?.email;return{access:W,refresh:J,expires:$T($,W,$.id_token),accountId:j??Q?.accountId,email:V??Q?.email,metadata:{...Q?.metadata??{},provider:"oca",mode:Z,subject:j,idToken:$.id_token}}}async function pV($,Z){let Q=QZ($),W=iW.get(Q);if(W)return W;let J=`${Q}/.well-known/openid-configuration`,X=await fetch(J,{method:"GET",signal:AbortSignal.timeout(Z)});if(!X.ok){let V=`${Q}/oauth2/v1/token`;return iW.set(Q,V,Date.now(),oz),V}let j=(await X.json()).token_endpoint||`${Q}/oauth2/v1/token`;return iW.set(Q,j),j}function rV($){return{code:$.error,message:$.error_description}}async function ZT($){let Z=Q6.get($.state);if(!Z)throw Error("No PKCE verifier found for this state");Q6.delete($.state);let Q=$.mode==="external"?$.config.external:$.config.internal,W=await pV(Q.idcsUrl,$.requestTimeoutMs),J=new URLSearchParams({grant_type:"authorization_code",code:$.code,redirect_uri:Z.redirectUri,client_id:Q.clientId,code_verifier:Z.verifier}),X=await fetch(W,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:J,signal:AbortSignal.timeout($.requestTimeoutMs)}),Y=await X.json();if(!X.ok){let V=rV(Y);throw new HZ(`Token exchange failed: ${X.status}${V.message?` - ${V.message}`:""}`,{status:X.status,errorCode:V.code})}let j=E0(Y.id_token);if(!Y.id_token||!j)throw Error("No ID token received from OCA");if(j.nonce!==Z.nonce)throw Error("OIDC nonce verification failed");return lV(Y,$.mode)}function QT($){let Z=$.mode==="external"?$.config.external:$.config.internal,Q=new URL(`${QZ(Z.idcsUrl)}/oauth2/v1/authorize`);return Q.searchParams.set("client_id",Z.clientId),Q.searchParams.set("response_type","code"),Q.searchParams.set("scope",Z.scopes),Q.searchParams.set("code_challenge",$.challenge),Q.searchParams.set("code_challenge_method","S256"),Q.searchParams.set("redirect_uri",$.callbackUrl),Q.searchParams.set("state",$.state),Q.searchParams.set("nonce",$.nonce),Q.toString()}async function W6($){C1($.telemetry,"oca");let Z=dV($.config),Q=uV($.mode),W=$.callbackPorts?.length?$.callbackPorts:rz,J=$.callbackPath??pz,X=$.requestTimeoutMs??cV,Y=await J1({ports:W,callbackPath:J,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),j=Y.callbackUrl;if(!j)throw Error("Unable to bind local OAuth callback server");let V=hV(16),H=hV(16),{verifier:B,challenge:G}=await ZZ();ez(),Q6.set(V,{verifier:B,nonce:H,mode:Q,redirectUri:j,createdAt:Date.now()});let K=QT({callbackUrl:j,mode:Q,state:V,nonce:H,challenge:G,config:Z});$.callbacks.onAuth({url:K,instructions:"Continue the authentication process in your browser."});try{let F=await A8({waitForCallback:Y.waitForCallback,cancelWait:Y.cancelWait,onManualCodeInput:$.callbacks.onManualCodeInput}),A=F.code,L=F.state;if(F.error)throw Error(`OAuth error: ${F.error}`);if(!A){if(!$.callbacks.onManualCodeInput)throw Error("Timed out waiting for OCA callback");throw Error("Missing authorization code")}if(!L||L!==V)throw Error("State mismatch");let f=await ZT({code:A,state:L,mode:Q,config:Z,requestTimeoutMs:X});return P1($.telemetry,"oca"),b1($.telemetry,{id:f.accountId,email:f.email,provider:"oca"}),f}catch(F){throw S1($.telemetry,"oca",F instanceof Error?F.message:String(F)),F}finally{Y.close()}}async function BZ($,Z={}){let Q=dV(Z.config),W=Z.requestTimeoutMs??cV,J=$.metadata?.mode,X=J==="internal"||J==="external"?J:uV(Z.mode),Y=X==="external"?Q.external:Q.internal,j=await pV(Y.idcsUrl,W),V=new URLSearchParams({grant_type:"refresh_token",refresh_token:$.refresh,client_id:Y.clientId}),H=await fetch(j,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:V,signal:AbortSignal.timeout(W)}),B=await H.json();if(!H.ok){let G=rV(B);throw new HZ(`Token refresh failed: ${H.status}${G.message?` - ${G.message}`:""}`,{status:H.status,errorCode:G.code})}return lV(B,X,$)}async function J6($,Z,Q){if(!$)return null;let W=Z?.refreshBufferMs??Q?.refreshBufferMs??iz,J=Z?.retryableTokenGraceMs??Q?.retryableTokenGraceMs??nz;if(Z?.forceRefresh!==!0&&!F8($,W))return $;try{return await BZ($,Q)}catch(Y){if(Y instanceof HZ&&Y.isLikelyInvalidGrant())return V$(Q?.telemetry,"oca","invalid_grant"),null;if($.expires-Date.now()>J)return $;return null}}var GZ="workos:";function WT($){let Z=$.trim();return Z.toLowerCase().startsWith(GZ)?Z:`${GZ}${Z}`}function JT($){let Z=$.trim();return Z.toLowerCase().startsWith(GZ)?Z.slice(GZ.length):Z}function XT($){let Q=E0($)?.exp;if(typeof Q==="number"&&Q>0)return Q*1000;return null}function YT($,Z){let Q=$.auth?.expiresAt;if(typeof Q==="number"&&Number.isFinite(Q)&&Q>0)return Q;let W=XT(Z);if(W)return W;return Date.now()-1}function jT($,Z){let Q=$.auth?.accessToken?.trim(),W=$.auth?.refreshToken?.trim();if(!Q||!W)return null;let J=Z?.normalizeAccessToken?.(Q)??Q;if(!J)return null;return{access:J,refresh:W,expires:YT($,J),accountId:$.auth?.accountId}}function VT($){let Z=$.formatAccessToken?.($.credentials.access)??$.credentials.access,Q={...$.settings?.auth??{},accessToken:Z,refreshToken:$.credentials.refresh,accountId:$.credentials.accountId,expiresAt:$.credentials.expires},W={...$.settings??{provider:$.storageProviderId},provider:$.storageProviderId,auth:Q};if($.save!==!1)$.manager.saveProviderSettings(W,{...$.setLastUsed===void 0?{}:{setLastUsed:$.setLastUsed},tokenSource:"oauth"});return W}function nW($){let Z=$.storageProviderId??$.providerId;return{providerId:$.providerId,storageProviderId:Z,getApiKey(Q){let W=Q?.auth?.accessToken?.trim();if(W)return $.formatAccessToken?.(W)??W;return Q?.apiKey?.trim()||Q?.auth?.apiKey?.trim()||void 0},login:$.login,refresh:$.refresh,saveCredentials(Q){return VT({...Q,storageProviderId:Z,formatAccessToken:$.formatAccessToken})},isConfigured(Q){return!!Q?.auth?.accessToken},normalizeStoredAccessToken:$.normalizeStoredAccessToken}}function aV($){return nW({providerId:$.providerId,storageProviderId:$.storageProviderId,formatAccessToken:WT,normalizeStoredAccessToken:JT,login:({settings:Z,callbacks:Q,telemetry:W})=>t4({apiBaseUrl:Z?.baseUrl?.trim()||nV().apiBaseUrl,useWorkOSDeviceAuth:!0,callbacks:Q,telemetry:W}),refresh:({settings:Z,credentials:Q,forceRefresh:W,telemetry:J})=>e4(Q,{apiBaseUrl:Z.baseUrl?.trim()||nV().apiBaseUrl,telemetry:J},{forceRefresh:W})})}var HT=[aV({providerId:"cline"}),aV({providerId:"cline-pass",storageProviderId:"cline"}),nW({providerId:"oca",login:({settings:$,callbacks:Z,telemetry:Q})=>W6({mode:$?.oca?.mode,callbacks:Z,telemetry:Q}),refresh:({settings:$,credentials:Z,forceRefresh:Q,telemetry:W})=>J6(Z,{forceRefresh:Q,telemetry:W},{mode:$.oca?.mode,telemetry:W})}),nW({providerId:"openai-codex",login:({callbacks:$,telemetry:Z})=>$6({onAuth:$.onAuth,onPrompt:$.onPrompt,onProgress:$.onProgress,onManualCodeInput:$.onManualCodeInput,telemetry:Z}),refresh:({credentials:$,forceRefresh:Z,telemetry:Q})=>Z6($,{forceRefresh:Z,telemetry:Q})})],BT=new Map(HT.map(($)=>[$.providerId,$]));function j0($){return BT.get($.trim().toLowerCase())}function Q2($){return j0($)!==void 0}function aW($){return j0($)?.storageProviderId}function sW($,Z){let Q=j0(Z),W=Q?.storageProviderId??Z,J=$.getProviderSettings(W);return Q?.getApiKey(J)??U8(Z,J)}async function X6($,Z,Q){let W=j0(Z);if(!W)throw Error(`Provider "${Z}" does not support OAuth login`);let J=$.getProviderSettings(W.storageProviderId),X=await W.login({settings:J,callbacks:Q.callbacks,telemetry:Q.telemetry});return W.saveCredentials({manager:$,settings:J,credentials:X})}function Y6($,Z){let Q=j0($);if(!Q)return null;return jT(Z,{normalizeAccessToken:Q.normalizeStoredAccessToken})}function W2($){let Z=j0($.providerId);if(!Z)throw Error(`Provider "${$.providerId}" does not support OAuth credentials`);return Z.saveCredentials({manager:$.manager,settings:$.settings,credentials:$.credentials,setLastUsed:$.setLastUsed,save:$.save})}function U8($,Z){let Q=j0($);if(Q)return Q.getApiKey(Z);return Z?.auth?.accessToken?.trim()||Z?.apiKey?.trim()||Z?.auth?.apiKey?.trim()||void 0}function oW($,Z){let Q=j0($);if(!Q)return Z.access;return Q.getApiKey({provider:Q.storageProviderId,auth:{accessToken:Z.access}})??Z.access}_0();var qH={};N(qH,{createContextCompactionPrepareTurn:()=>F6});import{createHandlerAsync as fT}from"@cline/llms";import{CHARS_PER_TOKEN as Zc,estimateTokens as tW}from"@cline/shared";var eV=200000,$H=0.9,KZ=0.7,ZH=16384,eW=20000,oV=1024,tV=2000,QH=2000,WH=8;function H6($,Z){if($.length<=Z)return $;return`${$.slice(0,Z)}
|
|
320
320
|
...[truncated ${$.length-Z} chars]`}function GT($){let Z=$3($);if(typeof Z==="string")return Z;return Z.map((Q)=>{switch(Q.type){case"text":return Q.text;case"file":return`<file path="${Q.path}">
|
|
321
321
|
${Q.content}
|
|
322
322
|
</file>`;case"image":return`[image:${Q.mediaType}]`;default:return""}}).join(`
|
|
@@ -468,14 +468,14 @@ Searched ${L} files.`;let D=[`Found ${A.length} result${A.length===1?"":"s"} for
|
|
|
468
468
|
`);if(Q&&W)return`${Q}
|
|
469
469
|
|
|
470
470
|
${W}`;return Q||W}function WM($,Z){let Q=Z?.["*"]??{},W=Z?.[$]??{};return{...Q,...W}.enabled!==!1}function JM($,Z){return $.filter((Q)=>WM(Q.name,Z))}function XM($,Z){return y1(JM($,Z))}function YM($){let Z=$.filter((Q)=>Q!==void 0);if(Z.length===0)return{};return{beforeRun:async(Q)=>{for(let W of Z){let J=await W.beforeRun?.(Q);if(J?.stop)return J}return},afterRun:async(Q)=>{for(let W of Z)await W.afterRun?.(Q)},beforeModel:async(Q)=>{let W=Q.request,J;for(let X of Z){let Y=await X.beforeModel?.({...Q,request:W});if(!Y)continue;if(Y.stop)return Y;J={...J,...Y,options:zB(J?.options,Y.options)},W={...W,...Y.messages?{messages:Y.messages}:{},...Y.tools?{tools:Y.tools}:{},...Y.options?{options:zB(W.options,Y.options)}:{}}}return J},afterModel:async(Q)=>{for(let W of Z){let J=await W.afterModel?.(Q);if(J?.stop)return J}return},beforeTool:async(Q)=>{let W=Q.input,J;for(let X of Z){let Y=await X.beforeTool?.({...Q,input:W});if(!Y)continue;if(Y.stop||Y.skip)return Y;if(J={...J,...Y},Object.hasOwn(Y,"input"))W=Y.input}return J},afterTool:async(Q)=>{let W=Q.result,J;for(let X of Z){let Y=await X.afterTool?.({...Q,result:W});if(!Y)continue;if(Y.stop)return Y;if(J={...J,...Y},Y.result)W=Y.result}return J},onEvent:async(Q)=>{for(let W of Z)await W.onEvent?.(Q)}}}class z${config;agentId;parentAgentId;logger;telemetry;conversation;mistakeTracker;loopTracker;loopDetectionDisabled;messageBuilder;contributionRegistry;extensionsInitialized=!1;listeners=new Set;createAgentRuntimeImpl;activeRunId=null;running=!1;abortRequested=!1;abortReason;activeRuntime=null;activeRunPromise=null;eventAdapter=new E3;shutdownCalled=!1;currentRunToolCalls=[];currentRunUsage={inputTokens:0,outputTokens:0};toolStartedAt=new Map;toolInputs=new Map;currentTurnSuccessfulTools=0;currentTurnFailedTools=0;currentTurnFailureDetails=[];activeTrackerWork=Promise.resolve();trackerAbortInFlight=!1;constructor($,Z={}){this.config=$,this.agentId=`agent_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,this.parentAgentId=$.parentAgentId,this.logger=Z.logger??$.logger,this.telemetry=Z.telemetry??$.telemetry,this.createAgentRuntimeImpl=Z.createAgentRuntimeImpl??tq,this.conversation=new O3($.initialMessages),this.messageBuilder=new _3(fB()),this.contributionRegistry=eq({extensions:$.extensions?[...$.extensions]:[],setupContext:{session:$.extensionContext?.session,client:$.extensionContext?.client,user:$.extensionContext?.user,workspaceInfo:$.extensionContext?.workspace,automation:$.extensionContext?.automation,logger:$.extensionContext?.logger??this.logger,telemetry:$.extensionContext?.telemetry??this.telemetry}}),this.contributionRegistry.resolve(),this.contributionRegistry.validate();let Q=$.execution?.maxConsecutiveMistakes??6;this.mistakeTracker=new R3({maxConsecutiveMistakes:Q,onLimitReached:$.onConsecutiveMistakeLimitReached,emit:(X)=>this.emitLegacyEvent(X),log:(X,Y,j)=>jM(this.logger,X,Y,j),agentId:this.agentId,getConversationId:()=>this.conversation.getConversationId(),getActiveRunId:()=>this.activeRunId??"",appendRecoveryNotice:(X,Y)=>{this.conversation.appendMessage({role:"user",content:[{type:"text",text:X}]})}});let W=$.execution?.loopDetection;this.loopDetectionDisabled=W===!1;let J=W===!1||W===void 0?void 0:W;this.loopTracker=new M3(J)}getAgentId(){return this.agentId}getConversationId(){return this.conversation.getConversationId()}getMessages(){return this.conversation.getMessages()}canStartRun(){return!this.running&&!this.shutdownCalled}getExtensionRegistry(){return this.contributionRegistry.getRegistrySnapshot()}addTools($){if($.length===0)return;let Z=new Set(this.config.tools.map((W)=>W.name)),Q=[...this.config.tools];for(let W of $)if(!Z.has(W.name))Q.push(W),Z.add(W.name);this.config={...this.config,tools:Q}}updateConnection($){let Z={...this.config};if($.providerId!==void 0)Z.providerId=$.providerId;if($.modelId!==void 0)Z.modelId=$.modelId;if($.apiKey!==void 0)Z.apiKey=$.apiKey;if($.baseUrl!==void 0)Z.baseUrl=$.baseUrl;if($.headers!==void 0)Z.headers=$.headers;if($.providerConfig!==void 0)Z.providerConfig=$.providerConfig;if($.reasoningEffort!==void 0)Z.reasoningEffort=$.reasoningEffort;if($.thinking!==void 0)Z.thinking=$.thinking;if($.thinkingBudgetTokens!==void 0)Z.thinkingBudgetTokens=$.thinkingBudgetTokens;this.config=Z}clearHistory(){this.conversation.clearHistory(),this.resetConversationBoundaryTrackers()}restore($){this.conversation.restore($),this.resetConversationBoundaryTrackers()}resetConversationBoundaryTrackers(){this.messageBuilder.resetConversationState(),this.mistakeTracker.reset(),this.loopTracker.reset()}subscribeEvents($){return this.listeners.add($),()=>{this.listeners.delete($)}}abort($){let Z=typeof $==="string"?$:$ instanceof Error?$.message:$===void 0?void 0:String($);if(this.abortRequested=!0,this.abortReason=Z,this.activeRunPromise)this.activeRunPromise.catch(()=>{});this.activeRuntime?.abort(Z)}async shutdown($,Z){if(this.running){if(!this.abortRequested||!this.activeRunPromise)throw Error(`SessionRuntime.shutdown called while a run is in progress (agentId=${this.agentId})`);await this.activeRunPromise}if(this.shutdownCalled)return;this.shutdownCalled=!0}run($,Z,Q){return this.conversation.resetForRun(),this.resetConversationBoundaryTrackers(),this.executeRun({userMessage:$,userImages:Z,userFiles:Q,isContinue:!1})}continue($,Z,Q){return this.executeRun({userMessage:$,userImages:Z,userFiles:Q,isContinue:!0})}async composeSystemPrompt(){let $=[];for(let Z of this.contributionRegistry.getRegisteredRules()){let Q=await ZM(Z);if(Q)$.push(Q)}return QM(this.config.systemPrompt,$)}executeRun($){let Z;return Z=this.executeRunInternal($).finally(()=>{if(this.activeRunPromise===Z)this.activeRunPromise=null}),this.activeRunPromise=Z,Z}async executeRunInternal($){if(this.shutdownCalled)throw Error(`SessionRuntime.run called after shutdown (agentId=${this.agentId})`);if(this.running)throw Error(`SessionRuntime state is "running"; call canStartRun() first (agentId=${this.agentId})`);this.running=!0,this.abortRequested=!1,this.abortReason=void 0,this.activeRunId=`run_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,await this.ensureExtensionsInitialized(),this.eventAdapter.reset(),this.currentRunToolCalls=[],this.currentRunUsage={inputTokens:0,outputTokens:0},this.toolStartedAt.clear(),this.toolInputs.clear(),this.currentTurnSuccessfulTools=0,this.currentTurnFailedTools=0,this.currentTurnFailureDetails=[],this.activeTrackerWork=Promise.resolve(),this.trackerAbortInFlight=!1;let Z=new Date,Q=$.userMessage;if(Q!==void 0){let U=await HM(Q,$.userImages,$.userFiles,this.config.userFileContentLoader);this.conversation.appendMessage({role:"user",content:U})}let W=await this.composeSystemPrompt(),J=YB(this.config,this.logger,this.telemetry),X=new Map;for(let U of this.contributionRegistry.getRegisteredTools())X.set(U.name,U);let Y=XM([...X.values()],this.config.toolPolicies),j=new Map;for(let U of Y)j.set(U.name,U);for(let U of this.config.tools)j.set(U.name,U);let V=this.conversation.getConversationId(),H=TB(this.config),B=Array.from(j.values()),G=RZ(this.conversation.getMessages()),K=DB({agentConfig:this.config,sessionId:this.config.sessionId,agentId:this.agentId,conversationId:V,parentAgentId:this.parentAgentId,model:J,logger:this.logger,telemetry:this.telemetry,tools:B,toolContextMetadata:{modelSupportsImages:H?.capabilities?.includes("images")??!0,...this.config.toolContextMetadata,[MH]:this.telemetry},hooks:this.createRuntimeHooks(),prepareTurn:this.createRuntimePrepareTurn(H,B),initialMessages:G,systemPrompt:W}),F=this.createAgentRuntimeImpl(K);if(this.activeRuntime=F,this.abortRequested)F.abort(this.abortReason);let A=F.subscribe((U)=>{this.handleRuntimeEvent(U)}),L,f;try{if($.isContinue)L=await F.continue(void 0);else L=await F.run("")}catch(U){f=U instanceof Error?U:Error(String(U))}finally{A();try{await this.activeTrackerWork}catch(U){this.logger?.error?.("SessionRuntime tracker work failed during drain",{agentId:this.agentId,error:U})}this.activeRuntime=null,this.running=!1,this.abortRequested=!1,this.abortReason=void 0}if(L&&L.messages.length>0){let U=R8(L.messages);this.conversation.replaceMessages(U)}let D=new Date;try{return this.buildLegacyResult({runResult:L,thrownError:f,startedAt:Z,endedAt:D})}finally{this.activeRunId=null}}async ensureExtensionsInitialized(){if(this.extensionsInitialized)return;try{await this.contributionRegistry.initialize({tolerateSetupErrors:this.config.hookErrorMode!=="throw"})}catch($){if(this.config.hookErrorMode==="throw")throw $;this.emitLegacyEvent({type:"error",error:$ instanceof Error?$:Error(String($)),recoverable:!0,iteration:0})}this.extensionsInitialized=!0}createRuntimeHooks(){let $=YM([this.config.hooks,...this.contributionRegistry.getValidatedExtensions().map((Z)=>Z.hooks)]);return{...$,beforeModel:async(Z)=>{let Q=await $.beforeModel?.(Z);if(Q?.stop)return Q;let W=Q?.messages??Z.request.messages,J=await this.prepareMessagesForModelRequest(W);return{...Q,messages:J}}}}createRuntimePrepareTurn($,Z){let Q=this.config.prepareTurn;if(!Q)return;return async(W)=>{let J=R8(W.messages),X=await this.prepareProviderMessagesForApi(J),Y=await Q({agentId:W.agentId,conversationId:W.conversationId??this.conversation.getConversationId(),parentAgentId:W.parentAgentId??null,iteration:W.iteration,messages:J,apiMessages:X,abortSignal:W.signal??new AbortController().signal,systemPrompt:W.systemPrompt??"",tools:Z,model:{id:this.config.modelId,provider:this.config.providerId,info:$},emitStatusNotice:W.emitStatusNotice});if(!Y)return;return{...Y.messages?{messages:RZ(Y.messages)}:{},...Y.systemPrompt!==void 0?{systemPrompt:Y.systemPrompt}:{}}}}async prepareMessagesForModelRequest($){let Z=await this.prepareProviderMessagesForApi(EZ($));return RZ(Z)}async prepareProviderMessagesForApi($){let Z=$,Q=this.contributionRegistry.getRegistrySnapshot().messageBuilder;for(let W of Q)Z=await W.build(Z);return this.messageBuilder.buildForApi(Z)}handleRuntimeEvent($){switch($.type){case"message-added":case"assistant-message":{this.syncConversationFromRuntimeMessage($.snapshot.messages,[$.message]);break}case"turn-started":{this.currentTurnSuccessfulTools=0,this.currentTurnFailedTools=0,this.currentTurnFailureDetails=[];break}case"tool-started":{this.toolStartedAt.set($.toolCall.toolCallId,new Date),this.toolInputs.set($.toolCall.toolCallId,$.toolCall.input),this.inspectLoopForToolCall($.toolCall.toolName,$.toolCall.input,$.iteration);break}case"tool-finished":{let Z=this.toolStartedAt.get($.toolCall.toolCallId),Q=new Date,W=this.toolInputs.get($.toolCall.toolCallId);this.toolStartedAt.delete($.toolCall.toolCallId),this.toolInputs.delete($.toolCall.toolCallId);let J=$.message.content.find((V)=>V.type==="tool-result"),X=J?.type==="tool-result"&&J.isError===!0,Y=X?$M(J?.type==="tool-result"?J.output:void 0):void 0,j={id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:W,output:J?.type==="tool-result"?J.output:void 0,error:Y,durationMs:Z===void 0?0:Q.getTime()-Z.getTime(),startedAt:Z??Q,endedAt:Q};if(this.currentRunToolCalls.push(j),X){if(this.currentTurnFailedTools+=1,Y)this.currentTurnFailureDetails.push(`[${$.toolCall.toolName}] ${Y}`)}else this.currentTurnSuccessfulTools+=1;break}case"turn-finished":{let Z=this.currentTurnFailedTools,Q=this.currentTurnSuccessfulTools;if(Z>0&&Q===0){let W=this.currentTurnFailureDetails.join("; ");this.enqueueMistakeRecord({iteration:$.iteration,reason:"tool_execution_failed",details:`${Z} tool call(s) failed${W?`: ${W}`:""}`})}else if(Q>0)this.mistakeTracker.reset();break}case"usage-updated":{this.currentRunUsage={inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens>0?$.usage.cacheReadTokens:void 0,cacheWriteTokens:$.usage.cacheWriteTokens>0?$.usage.cacheWriteTokens:void 0,totalCost:$.usage.totalCost};break}default:break}for(let Z of this.eventAdapter.translate($))this.emitLegacyEvent(Z)}syncConversationFromRuntimeMessage($,Z){if($.length>0){this.conversation.replaceMessages(R8($));return}if(Z.length===0)return;let Q=new Set(this.conversation.getMessages().map((J)=>J.id).filter((J)=>typeof J==="string")),W=R8(Z).filter((J)=>!J.id||!Q.has(J.id));if(W.length===0)return;this.conversation.replaceMessages([...this.conversation.getMessages(),...W])}emitLegacyEvent($){for(let Z of this.listeners)try{Z($)}catch(Q){this.logger?.error?.("SessionRuntime event listener threw",{agentId:this.agentId,error:Q})}}inspectLoopForToolCall($,Z,Q){if(this.trackerAbortInFlight||this.loopDetectionDisabled)return;let W=this.loopTracker.inspect({name:$,input:Z});if(W.kind==="ok")return;if(W.kind==="soft"){if(W.message)this.conversation.appendMessage({role:"user",content:[{type:"text",text:W.message}]});return}this.enqueueMistakeRecord({iteration:Q,reason:"tool_execution_failed",forceAtLimit:!0,details:W.message??`Detected repeated tool calls to \`${$}\`; stopping to avoid a loop.`})}enqueueMistakeRecord($){if(this.trackerAbortInFlight)return;this.activeTrackerWork=this.activeTrackerWork.then(async()=>{if(this.trackerAbortInFlight)return;let Z=await this.mistakeTracker.record($);if(Z.action==="stop")this.trackerAbortInFlight=!0,this.conversation.appendMessage({role:"user",content:[{type:"text",text:Z.message}]}),this.activeRuntime?.abort(Z.reason??Z.message)})}buildLegacyResult($){let{runResult:Z,thrownError:Q,startedAt:W,endedAt:J}=$,X=J.getTime()-W.getTime(),Y=Q?"error":VM(Z),j=(Z?.status==="failed"?Z.error?.message:void 0)||Z?.outputText||"",V=Z?{inputTokens:Z.usage.inputTokens,outputTokens:Z.usage.outputTokens,cacheReadTokens:Z.usage.cacheReadTokens>0?Z.usage.cacheReadTokens:void 0,cacheWriteTokens:Z.usage.cacheWriteTokens>0?Z.usage.cacheWriteTokens:void 0,totalCost:Z.usage.totalCost}:this.currentRunUsage,H=Z?R8(Z.messages):this.conversation.getMessages(),B=TB(this.config);if(Q)throw Q;return{text:j,usage:V,messages:H,toolCalls:this.currentRunToolCalls,iterations:Z?.iterations??0,finishReason:Y,model:{id:this.config.modelId,provider:this.config.providerId,info:B},startedAt:W,endedAt:J,durationMs:X}}}function jM($,Z,Q,W){if(!$)return;if(Z==="debug"){$.debug(Q,W);return}if(Z==="error"&&$.error){$.error(Q,W);return}let J=Z==="warn"?"warn":Z==="error"?"error":"info";$.log(Q,{...W,severity:J})}function VM($){if(!$)return"error";switch($.status){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}async function HM($,Z,Q,W){let{buildInitialUserContent:J}=await Promise.resolve().then(() => _B);return J($,Z,Q,W)}function TB($){if($.knownModels?.[$.modelId])return $.knownModels[$.modelId];let Z=U3($);if(Z?.[$.modelId])return Z[$.modelId];return}import{buildClineSystemPrompt as OB}from"@cline/shared";function qB($,Z){let Q=$.trim();if(Z.providerId.toLowerCase()!=="cline")return Q;return OB({ide:Z.clineIdeName?.trim()||"Terminal",workspaceRoot:Z.cwd?.trim()||"/",providerId:Z.providerId,rules:`# Team Teammate Role
|
|
471
|
-
${Q}`,platform:Z.clinePlatform,metadata:Z.workspaceMetadata})}function MB($,Z){let Q=$.trim();if(Z.providerId.toLowerCase()!=="cline")return Q;return OB({ide:Z.clineIdeName||"Terminal",workspaceRoot:Z.cwd?.trim()||"/",providerId:Z.providerId,overridePrompt:Q,metadata:Z.workspaceMetadata,platform:Z.clinePlatform})}function T$($){let Z={...$};return{getRuntimeConfig:()=>Z,getConnectionConfig:()=>({providerId:Z.providerId,modelId:Z.modelId,apiKey:Z.apiKey,baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking,maxTokensPerTurn:Z.maxTokensPerTurn}),updateConnectionDefaults:(Q)=>{Z={...Z,...Q}}}}function K2($){let Z=$.configProvider.getRuntimeConfig(),Q=$.kind==="teammate"?qB($.prompt,Z):MB($.prompt,Z);return{...$.configProvider.getConnectionConfig(),systemPrompt:Q,tools:$.tools,maxIterations:$.maxIterations??Z.maxIterations,parentAgentId:$.parentAgentId,abortSignal:$.abortSignal,onEvent:$.onEvent,hooks:Z.hooks,extensions:Z.extensions,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval,logger:Z.logger,role:$.role}}function O$($){let Z=K2($),Q=new z$(Z);if(Z.onEvent)Q.subscribeEvents(Z.onEvent);return Q}var KM=N3.object({systemPrompt:N3.string().describe("System prompt defining the sub-agent's behavior"),task:N3.string().describe("Task for the sub-agent to complete")});function q$($){return BM({name:"spawn_agent",description:"Spawn a sub-agent with a custom system prompt for specialized tasks. Use when delegating work that benefits from focused expertise.",inputSchema:GM(KM),execute:async(Z,Q)=>{let W=$.createSubAgentTools?await $.createSubAgentTools(Z,Q):$.subAgentTools??[],J=O$({kind:"subagent",prompt:Z.systemPrompt,configProvider:$.configProvider,tools:W,maxIterations:$.defaultMaxIterations,parentAgentId:Q.agentId,abortSignal:Q.signal,onEvent:$.onSubAgentEvent,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval}),X=J.getAgentId(),Y=J.getConversationId(),j=Q.agentId;if($.onSubAgentStart)try{await $.onSubAgentStart({subAgentId:X,conversationId:Y,parentAgentId:j,input:Z})}catch{}try{let V=await J.run(Z.task),H={text:V.text,iterations:V.iterations,finishReason:V.finishReason,usage:{inputTokens:V.usage.inputTokens,outputTokens:V.usage.outputTokens}};if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:X,conversationId:Y,parentAgentId:j,input:Z,result:H,agentResult:V})}catch{}return H}catch(V){if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:X,conversationId:Y,parentAgentId:j,input:Z,error:V instanceof Error?V:Error(String(V))})}catch{}throw V}},timeoutMs:300000,retryable:!1})}import{createTool as F0,TEAM_AWAIT_TIMEOUT_MS as FM,TEAM_RUN_MESSAGE_PREVIEW_LIMIT as AM,TEAM_RUN_TEXT_PREVIEW_LIMIT as fM,TEAM_TASK_IGNORED_FIELDS_BY_ACTION as UM,TeamAttachOutcomeFragmentInputSchema as RB,TeamAwaitRunsInputSchema as EB,TeamBroadcastInputSchema as NB,TeamBroadcastToolResultSchema as DM,TeamCancelRunInputSchema as wB,TeamCancelRunToolResultSchema as LM,TeamCleanupInputSchema as CB,TeamCleanupToolResultSchema as _M,TeamCreateOutcomeInputSchema as PB,TeamCreateOutcomeToolResultSchema as zM,TeamFinalizeOutcomeInputSchema as SB,TeamFinalizeOutcomeToolResultSchema as TM,TeamListOutcomesInputSchema as bB,TeamListRunsInputSchema as yB,TeamMailboxMessageToolResultSchema as OM,TeamMissionLogInputSchema as hB,TeamMissionLogToolResultSchema as qM,TeamOutcomeFragmentToolResultSchema as kB,TeamOutcomeToolResultSchema as MM,TeamReadMailboxInputSchema as IB,TeamReviewOutcomeFragmentInputSchema as xB,TeamRunTaskInputSchema as gB,TeamRunTaskToolResultSchema as w3,TeamRunToolSummarySchema as C3,TeamSendMessageInputSchema as mB,TeamSendMessageToolResultSchema as RM,TeamShutdownTeammateInputSchema as vB,TeamSimpleAgentStatusToolResultSchema as cB,TeamSpawnTeammateInputSchema as uB,TeamStatusInputSchema as dB,TeamStatusToolResultSchema as EM,TeamTaskInputSchema as lB,TeamTaskToolResultSchema as h6,validateWithZod as k,zodToJsonSchema as A0}from"@cline/shared";function pB($,Z){let Q=$.replace(/\s+/g," ").trim();if(Q.length<=Z)return Q;return`${Q.slice(0,Math.max(0,Z-3)).trimEnd()}...`}function F2($,Z){if($===void 0)throw Error(`Missing required field: ${Z}`);return $}function NM($){let Z=$.result;if(!Z)return;return{textPreview:pB(Z.text,fM),iterations:Z.iterations,finishReason:Z.finishReason,durationMs:Z.durationMs,usage:{inputTokens:Z.usage.inputTokens,outputTokens:Z.usage.outputTokens,cacheReadTokens:Z.usage.cacheReadTokens,cacheWriteTokens:Z.usage.cacheWriteTokens,totalCost:Z.usage.totalCost}}}function PZ($){return $?.toISOString()}function P3($){return{id:$.id,agentId:$.agentId,taskId:$.taskId,status:$.status,messagePreview:pB($.message,AM),priority:$.priority,retryCount:$.retryCount,maxRetries:$.maxRetries,nextAttemptAt:PZ($.nextAttemptAt),continueConversation:$.continueConversation,startedAt:$.startedAt.toISOString(),endedAt:PZ($.endedAt),leaseOwner:$.leaseOwner,heartbeatAt:PZ($.heartbeatAt),lastProgressAt:PZ($.lastProgressAt),lastProgressMessage:$.lastProgressMessage,currentActivity:$.currentActivity,error:$.error,resultSummary:NM($)}}function wM($){if($.status==="failed")throw Error(`Run "${$.id}" failed${$.error?`: ${$.error}`:""}`);if($.status==="cancelled")throw Error(`Run "${$.id}" was cancelled${$.error?`: ${$.error}`:""}`);if($.status==="interrupted")throw Error(`Run "${$.id}" was interrupted${$.error?`: ${$.error}`:""}`)}var N8=["team_spawn_teammate","team_shutdown_teammate","team_status","team_task","team_run_task","team_cancel_run","team_list_runs","team_await_runs","team_send_message","team_broadcast","team_read_mailbox","team_mission_log","team_cleanup","team_create_outcome","team_attach_outcome_fragment","team_review_outcome_fragment","team_finalize_outcome","team_list_outcomes"];function rB($){let Z=[];if($.createBaseTools)Z.push(...$.createBaseTools());Z.push(...A2({runtime:$.runtime,requesterId:$.spec.agentId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!1})),$.runtime.spawnTeammate({agentId:$.spec.agentId,config:K2({kind:"teammate",prompt:$.spec.rolePrompt,role:$.spec.rolePrompt,configProvider:$.teammateConfigProvider,tools:Z,maxIterations:$.spec.maxIterations,cwd:$.teammateConfigProvider.getRuntimeConfig().cwd})})}function w8($){let Z=$.leadAgentId??"lead",Q=$.restoredFromPersistence===!0,W=A2({runtime:$.runtime,requesterId:Z,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!0,includeSpawnTool:$.includeLeadSpawnTool,includeManagementTools:$.includeLeadManagementTools,onLeadToolsUnlocked:$.onLeadToolsUnlocked}),J=[];for(let X of $.restoredTeammates??[]){if($.runtime.isTeammateActive(X.agentId))continue;rB({runtime:$.runtime,requesterId:Z,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:X}),J.push(X.agentId)}return{tools:W,restoredFromPersistence:Q,restoredTeammates:J}}function A2($){let Z=$.allowSpawn??!0,Q=$.includeSpawnTool??!0,W=$.includeManagementTools??!0,J=[];if(Q)J.push(F0({name:"team_spawn_teammate",description:"Spawn a teammate with a required agentId and rolePrompt.",inputSchema:A0(uB),execute:async(Y)=>{let j=k(uB,Y);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");if(!Z)throw Error("Spawning teammates is disabled in this context.");let V={agentId:j.agentId,rolePrompt:j.rolePrompt};if(rB({runtime:$.runtime,requesterId:$.requesterId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:V}),!W)$.onLeadToolsUnlocked?.(A2({...$,includeSpawnTool:!1,includeManagementTools:!0,onLeadToolsUnlocked:void 0}));return k(cB,{agentId:j.agentId,status:"spawned"})}}));if(!W)return J;J.push(F0({name:"team_shutdown_teammate",description:"Shutdown a teammate by agentId.",inputSchema:A0(vB),execute:async(Y)=>{let j=k(vB,Y);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");return $.runtime.shutdownTeammate(j.agentId,j.reason),k(cB,{agentId:j.agentId,status:"stopped"})}})),J.push(F0({name:"team_status",description:"Return a snapshot of team members, task counts, mailbox, and mission log stats.",inputSchema:A0(dB),execute:async(Y)=>{return k(dB,Y),k(EM,$.runtime.getSnapshot())}})),J.push(F0({name:"team_task",description:"Manage shared team tasks with action-specific payloads. create requires title and description, with optional dependsOn and assignee. list accepts optional status, assignee. claim requires taskId. complete requires taskId and summary. block requires taskId and reason. Do not include fields from other actions.",inputSchema:A0(lB),execute:async(Y)=>{let j=k(lB,Y);switch(j.action){case"create":{let V=new Set(UM.create??[]),H=Object.entries(Y).filter(([G,K])=>V.has(G)&&K!=null).map(([G])=>G),B=$.runtime.createTask({title:F2(j.title,"title"),description:F2(j.description,"description"),dependsOn:j.dependsOn,assignee:j.assignee,createdBy:$.requesterId});return k(h6,{action:"create",taskId:B.id,status:B.status,...H.length>0?{ignoredFields:H,note:`Ignored fields for action=create: ${H.join(", ")}`}:{}})}case"list":return k(h6,{action:"list",tasks:$.runtime.listTaskItems({status:j.status,assignee:j.assignee})});case"claim":{let V=$.runtime.claimTask(F2(j.taskId,"taskId"),$.requesterId);return k(h6,{action:"claim",taskId:V.id,status:V.status,nextStep:"Task is now in_progress. Execute the work using team_run_task or your own tools, then call team_task with action=complete when done."})}case"complete":{let V=$.runtime.completeTask(F2(j.taskId,"taskId"),$.requesterId,F2(j.summary,"summary"));return k(h6,{action:"complete",taskId:V.id,status:V.status})}case"block":{let V=$.runtime.blockTask(F2(j.taskId,"taskId"),$.requesterId,F2(j.reason,"reason"));return k(h6,{action:"block",taskId:V.id,status:V.status})}}}}));let X=new Map;return J.push(F0({name:"team_run_task",description:"Route a delegated task to a teammate. Choose sync (wait) or async (run in background).",inputSchema:A0(gB),execute:async(Y)=>{let j=k(gB,Y);if(j.runMode==="async"){let B=$.runtime.startTeammateRun(j.agentId,j.task,{taskId:j.taskId||void 0,fromAgentId:$.requesterId,continueConversation:j.continueConversation||void 0});return k(w3,{agentId:j.agentId,mode:"async",status:"queued",dispatched:!0,message:`Task dispatched to ${j.agentId} and queued as ${B.id}.`,runId:B.id})}let V=X.get(j.agentId);if(V){let B=await V;return k(w3,{...B,status:"joined",deduped:!0,message:`Task for ${j.agentId} was already dispatched in this tool batch; joined the existing in-flight run.`})}let H=$.runtime.routeToTeammate(j.agentId,j.task,{taskId:j.taskId||void 0,fromAgentId:$.requesterId,continueConversation:j.continueConversation||void 0}).then((B)=>k(w3,{agentId:j.agentId,mode:"sync",status:"running",dispatched:!0,message:`Task dispatched to ${j.agentId} and completed in sync mode.`,text:B.text,iterations:B.iterations})).finally(()=>{X.delete(j.agentId)});return X.set(j.agentId,H),await H}})),J.push(F0({name:"team_cancel_run",description:"Cancel one async teammate run.",inputSchema:A0(wB),execute:async(Y)=>{let j=k(wB,Y),V=$.runtime.cancelRun(j.runId,j.reason);return k(LM,{runId:V.id,status:V.status})}})),J.push(F0({name:"team_list_runs",description:"List teammate runs started with team_run_task in async mode, including live activity/progress fields when available.",inputSchema:A0(yB),execute:async(Y)=>k(C3.array(),$.runtime.listRuns(k(yB,Y)).map(P3))})),J.push(F0({name:"team_await_runs",description:"Wait for async teammate runs. Provide runId to wait for one run, or omit it to wait for all active async runs. Uses a long timeout for legitimate teammate work.",inputSchema:A0(EB),timeoutMs:FM,execute:async(Y)=>{let j=k(EB,Y);if(j.runId){let B=await $.runtime.awaitRun(j.runId);return wM(B),k(C3,P3(B))}let V=await $.runtime.awaitAllRuns(),H=V.filter((B)=>["failed","cancelled","interrupted"].includes(B.status));if(H.length>0){let B=H.map((G)=>`${G.id}:${G.status}${G.error?`(${G.error})`:""}`).join(", ");throw Error(`One or more runs did not complete successfully: ${B}`)}return k(C3.array(),V.map(P3))}})),J.push(F0({name:"team_send_message",description:"Send a mailbox message to a specific teammate.",inputSchema:A0(mB),execute:async(Y)=>{let j=k(mB,Y),V=$.runtime.sendMessage($.requesterId,j.toAgentId,j.subject,j.body,j.taskId??void 0);return k(RM,{id:V.id,toAgentId:V.toAgentId})}})),J.push(F0({name:"team_broadcast",description:"Broadcast a message to all teammates.",inputSchema:A0(NB),execute:async(Y)=>{let j=k(NB,Y),V=$.runtime.broadcast($.requesterId,j.subject,j.body,{taskId:j.taskId??void 0});return k(DM,{delivered:V.length})}})),J.push(F0({name:"team_read_mailbox",description:"Read the current agent mailbox.",inputSchema:A0(IB),execute:async(Y)=>{let j=k(IB,Y);return k(OM.array(),$.runtime.listMailbox($.requesterId,{unreadOnly:j.unreadOnly,markRead:!0}))}})),J.push(F0({name:"team_mission_log",description:"Append a mission log update for your team.",inputSchema:A0(hB),execute:async(Y)=>{let j=k(hB,Y),V=$.runtime.appendMissionLog({agentId:$.requesterId,taskId:j.taskId||void 0,kind:j.kind,summary:j.summary,evidence:j.evidence?.length?j.evidence:void 0,nextAction:j.nextAction||void 0});return k(qM,{id:V.id})}})),J.push(F0({name:"team_cleanup",description:"Clean up the team runtime. Fails if teammates are still running.",inputSchema:A0(CB),execute:async(Y)=>{if(k(CB,Y),$.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can run cleanup.");return $.runtime.cleanup(),k(_M,{status:"cleaned"})}})),J.push(F0({name:"team_create_outcome",description:"Create a converged team outcome.",inputSchema:A0(PB),execute:async(Y)=>{let j=k(PB,Y),V=$.runtime.createOutcome({title:j.title,requiredSections:j.requiredSections,createdBy:$.requesterId});return k(zM,{outcomeId:V.id,status:V.status,requiredSections:V.requiredSections})}})),J.push(F0({name:"team_attach_outcome_fragment",description:"Attach a fragment to an outcome section.",inputSchema:A0(RB),execute:async(Y)=>{let j=k(RB,Y),V=$.runtime.attachOutcomeFragment({outcomeId:j.outcomeId,section:j.section,sourceAgentId:$.requesterId,sourceRunId:j.sourceRunId||void 0,content:j.content});return k(kB,{fragmentId:V.id,status:V.status})}})),J.push(F0({name:"team_review_outcome_fragment",description:"Review one outcome fragment.",inputSchema:A0(xB),execute:async(Y)=>{let j=k(xB,Y),V=$.runtime.reviewOutcomeFragment({fragmentId:j.fragmentId,reviewedBy:$.requesterId,approved:j.approved});return k(kB,{fragmentId:V.id,status:V.status})}})),J.push(F0({name:"team_finalize_outcome",description:"Finalize one outcome.",inputSchema:A0(SB),execute:async(Y)=>{let j=k(SB,Y),V=$.runtime.finalizeOutcome(j.outcomeId);return k(TM,{outcomeId:V.id,status:V.status})}})),J.push(F0({name:"team_list_outcomes",description:"List team outcomes.",inputSchema:A0(bB),execute:async(Y)=>{return k(bB,Y),k(MM.array(),$.runtime.listOutcomes())}})),J}function SZ($){return{...$,tasks:$.tasks.map((Z)=>({...Z,createdAt:new Date(Z.createdAt),updatedAt:new Date(Z.updatedAt)})),mailbox:$.mailbox.map((Z)=>({...Z,sentAt:new Date(Z.sentAt),readAt:Z.readAt?new Date(Z.readAt):void 0})),missionLog:$.missionLog.map((Z)=>({...Z,ts:new Date(Z.ts)})),runs:($.runs??[]).map((Z)=>({...Z,startedAt:new Date(Z.startedAt),endedAt:Z.endedAt?new Date(Z.endedAt):void 0,nextAttemptAt:Z.nextAttemptAt?new Date(Z.nextAttemptAt):void 0,heartbeatAt:Z.heartbeatAt?new Date(Z.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),finalizedAt:Z.finalizedAt?new Date(Z.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),reviewedAt:Z.reviewedAt?new Date(Z.reviewedAt):void 0}))}}function iB($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}var CM=[{id:"read_files",description:"Read the content of text or image files at the provided absolute paths, or return only an inclusive one-based line range when start_line/end_line are provided. Long files are windowed; page with start_line/end_line.",headlessToolNames:["read_files"]},{id:"search_codebase",description:"Perform regex pattern searches across the codebase for code patterns, definitions, imports, and other text matches.",headlessToolNames:["search_codebase"]},{id:"run_commands",description:"Run shell commands from the root of the workspace for listing files, checking git status, builds, tests, and similar tasks.",headlessToolNames:["run_commands"]},{id:"editor",description:"Make controlled filesystem edits on text files with create, replace, and insert operations.",headlessToolNames:["editor"]},{id:"fetch_web_content",description:"Fetch URL content and analyze it with a prompt describing what to extract.",headlessToolNames:["fetch_web_content"]},{id:"skills",description:"Execute a configured skill within the main conversation when a matching skill exists for the task.",headlessToolNames:["skills"]},{id:"ask_question",description:"Ask the user a single clarifying question with 2-5 selectable options.",headlessToolNames:["ask_question"]},{id:"spawn_agent",description:q$({configProvider:{}}).description,headlessToolNames:["spawn_agent"]},{id:"teams",description:"Enable team collaboration tools for teammate management, task coordination, mailbox messaging, mission logs, and outcomes.",headlessToolNames:[...N8]}],PM={read_files:"enableReadFiles",search_codebase:"enableSearch",run_commands:"enableBash",fetch_web_content:"enableWebFetch",apply_patch:"enableApplyPatch",editor:"enableEditor",skills:"enableSkills",ask_question:"enableAskQuestion"};function SM($){return $==="plan"||$==="yolo"?$:"act"}function aB($){let Z=SM($.mode),Q=u0[l1({mode:Z})],W=M8($.providerId??"",$.modelId??"",Z,q8);return{mode:Z,flags:{...Q,...W,...typeof $.enableSpawnAgent==="boolean"?{enableSpawnAgent:$.enableSpawnAgent}:{},...typeof $.enableAgentTeams==="boolean"?{enableAgentTeams:$.enableAgentTeams}:{}}}}function nB($,Z){if(Z.disabledToolIds?.has($))return!1;let{flags:Q}=aB(Z);if($==="spawn_agent")return Q.enableSpawnAgent===!0;if($==="teams")return Q.enableAgentTeams===!0;if($==="editor")return Q.enableEditor===!0||Q.enableApplyPatch===!0;let W=PM[$];return W?Q[W]===!0:!1}function bM($,Z){if($.id==="editor"){let{flags:Q}=aB(Z),W=Q.enableApplyPatch===!0&&Q.enableEditor!==!0;return{...$,defaultEnabled:nB($.id,Z),headlessToolNames:[W?"apply_patch":"editor"]}}return{...$,defaultEnabled:nB($.id,Z)}}function f2($={}){return CM.map((Z)=>bM(Z,$))}function bZ($={}){return f2($).filter((Z)=>Z.defaultEnabled).map((Z)=>Z.id)}function yZ($){if(!$.enabled)return new Set;let Z=f2($.availabilityContext),Q=new Set(Z.map((W)=>W.id));if(!$.allowlist||$.allowlist.length===0)return new Set(Z.filter((W)=>W.defaultEnabled).map((W)=>W.id));for(let W of $.allowlist)if(!Q.has(W))throw Error(`Unknown tool "${W}". Available tools: ${Z.map((J)=>J.id).join(", ")}`);return new Set($.allowlist)}function k6($,Z={}){return f2(Z).filter((Q)=>$.has(Q.id)).flatMap((Q)=>Q.headlessToolNames)}function hZ($,Z={}){return k6($,Z)}function U2($={}){let{executorOptions:Z={},executors:Q,...W}=$,J={...O8(Z),...Q??{}};return D$({...W,executors:J})}import{mkdirSync as gM,writeFileSync as mM}from"node:fs";import{dirname as vM}from"node:path";import{normalizeUserInput as cM}from"@cline/shared";import{nanoid as uM}from"nanoid";var oB={};N(oB,{sanitizeSessionToken:()=>D2,parseTeamTaskSubSessionId:()=>P8,parseSubSessionId:()=>x6,makeTeamTaskSubSessionId:()=>I6,makeSubSessionId:()=>C8,deriveSubsessionStatus:()=>g6});import{nanoid as kM}from"nanoid";function D2($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function C8($,Z){let Q=D2($),W=D2(Z),J=`${Q}__${W}`;return J.length>180?J.slice(0,180):J}function I6($,Z){let Q=D2($),W=D2(Z);return`${Q}__teamtask__${W}__${kM(6)}`}function P8($){let Q=$.indexOf("__teamtask__");if(Q<=0)return null;let W=$.slice(0,Q),J=$.slice(Q+12),X=J.lastIndexOf("__");if(X<=0)return null;let Y=J.slice(0,X),j=J.slice(X+2);if(!W||!Y||!j)return null;return{rootSessionId:W,agentId:Y,teamTaskId:j}}function x6($){if(P8($))return null;let Z="__",Q=$.indexOf(Z);if(Q<=0)return null;let W=$.slice(0,Q),J=$.slice(Q+Z.length);if(!W||!J)return null;return{rootSessionId:W,agentId:J}}function g6($){switch($.hookName){case"agent_end":return"completed";case"agent_error":return"failed";case"session_shutdown":{let Z=String($.reason??"").toLowerCase();if(Z.includes("cancel")||Z.includes("abort")||Z.includes("interrupt"))return"cancelled";if(Z.includes("fail")||Z.includes("error"))return"failed";return"completed"}default:return"running"}}import{z as $0}from"zod";var $G={};N($G,{isTerminalSessionStatus:()=>eB,isNonTerminalSessionStatus:()=>H0,SessionSource:()=>T0,SESSION_STATUSES:()=>m6,NON_TERMINAL_SESSION_STATUSES:()=>tB});import{SESSION_STATUS_VALUES as IM}from"@cline/shared";var m6=IM,tB=["idle","running","pending"];function eB($){return!tB.includes($)}function H0($){return!eB($)}var T0={CORE:"core",CLI:"cli",SUBAGENT:"subagent",DESKTOP:"desktop",KANBAN:"kanban",API:"api",WEB:"web",VSCODE:"vscode",ENTERPRISE:"enterprise",IDE:"ide",JETBRAINS:"jetbrains",NEOVIM:"neovim",UNKNOWN:"unknown"};var xM=$0.enum(m6),b0=$0.object({version:$0.literal(1),session_id:$0.string().min(1),source:$0.string().min(1),pid:$0.number().int(),started_at:$0.string().min(1),ended_at:$0.string().min(1).optional(),exit_code:$0.number().int().nullable().optional(),status:xM,interactive:$0.boolean(),provider:$0.string().min(1),model:$0.string().min(1),cwd:$0.string().min(1),workspace_root:$0.string().min(1),team_name:$0.string().min(1).optional(),enable_tools:$0.boolean(),enable_spawn:$0.boolean(),enable_teams:$0.boolean(),prompt:$0.string().optional(),metadata:$0.record($0.string(),$0.unknown()).optional(),messages_path:$0.string().min(1).optional()});function ZG($){if(!$)return!1;return Object.values($).some((Z)=>typeof Z==="function")}function b3($,Z){let Q=[...$??[],...Z??[]];if(Q.length===0)return;let W=[],J=new Set;for(let X of Q){if(J.has(X.name))continue;J.add(X.name),W.push(X)}return W}function QG($){return JSON.stringify($,(Z,Q)=>{if(Q instanceof Error)return{name:Q.name,message:Q.message,stack:Q.stack};return Q})}function p1($){return typeof $==="string"&&$.trim()?$.trim():void 0}function S3($,Z){let Q={...$};Q.id=p1(Q.id)??uM();let W=Q.modelInfo&&typeof Q.modelInfo==="object"?{...Q.modelInfo}:void 0,J={id:p1(W?.id)??p1(Q.modelId)??p1(Z?.id),provider:p1(W?.provider)??p1(Q.providerId)??p1(Z?.provider),family:p1(W?.family)??p1(Z?.family)};if(delete Q.providerId,delete Q.modelId,J.id&&J.provider)Q.modelInfo={id:J.id,provider:J.provider,...J.family?{family:J.family}:{}};else delete Q.modelInfo;return Q}function kZ($){return $.map((Z)=>S3(Z))}function IZ($,Z,Q=[]){let W=$.map((V,H)=>{let B=Q[H],K=B?.role===V.role&&JSON.stringify(B.content)===JSON.stringify(V.content)?{...B,...V}:{...V};return S3(K)}),J=Q.length,X=[];for(let V=J;V<W.length;V+=1)if(W[V]?.role==="assistant")X.push(V);if(X.length===0){let V=[...W].reverse().findIndex((H)=>H.role==="assistant");if(V===-1)return W;X.push(W.length-1-V)}let Y=X[X.length-1],j=X.some((V)=>W[V]?.metrics);for(let V of X){let H=W[V],B=H.metrics;if(!B&&V===Y&&!j){let G=Z.usage;B={inputTokens:G.inputTokens,outputTokens:G.outputTokens,cacheReadTokens:G.cacheReadTokens??0,cacheWriteTokens:G.cacheWriteTokens??0,cost:G.totalCost}}W[V]={...S3(H,{id:Z.model.id,provider:Z.model.provider,family:Z.model.info?.family}),...B?{metrics:B}:{},ts:H.ts??Z.endedAt.getTime()}}return W}function v6($){return{sessionId:$.sessionId,source:$.source,pid:$.pid,startedAt:$.startedAt,endedAt:$.endedAt??null,exitCode:$.exitCode??null,status:$.status,interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspaceRoot:$.workspaceRoot,teamName:$.teamName??void 0,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,parentSessionId:$.parentSessionId??void 0,parentAgentId:$.parentAgentId??void 0,agentId:$.agentId??void 0,conversationId:$.conversationId??void 0,isSubagent:$.isSubagent,prompt:$.prompt??void 0,metadata:$.metadata??void 0,messagesPath:$.messagesPath??void 0,updatedAt:$.updatedAt}}var dM=120;function L2($){let Z=$?.trim();return Z?Z.slice(0,dM):void 0}function y3($){let Z=cM($??"").trim();if(!Z)return;return L2(Z.split(`
|
|
471
|
+
${Q}`,platform:Z.clinePlatform,metadata:Z.workspaceMetadata})}function MB($,Z){let Q=$.trim();if(Z.providerId.toLowerCase()!=="cline")return Q;return OB({ide:Z.clineIdeName||"Terminal",workspaceRoot:Z.cwd?.trim()||"/",providerId:Z.providerId,overridePrompt:Q,metadata:Z.workspaceMetadata,platform:Z.clinePlatform})}function T$($){let Z={...$};return{getRuntimeConfig:()=>Z,getConnectionConfig:()=>({providerId:Z.providerId,modelId:Z.modelId,apiKey:Z.apiKey,baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking,maxTokensPerTurn:Z.maxTokensPerTurn}),updateConnectionDefaults:(Q)=>{Z={...Z,...Q}}}}function K2($){let Z=$.configProvider.getRuntimeConfig(),Q=$.kind==="teammate"?qB($.prompt,Z):MB($.prompt,Z);return{...$.configProvider.getConnectionConfig(),systemPrompt:Q,tools:$.tools,maxIterations:$.maxIterations??Z.maxIterations,parentAgentId:$.parentAgentId,abortSignal:$.abortSignal,onEvent:$.onEvent,hooks:Z.hooks,extensions:Z.extensions,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval,logger:Z.logger,role:$.role}}function O$($){let Z=K2($),Q=new z$(Z);if(Z.onEvent)Q.subscribeEvents(Z.onEvent);return Q}var KM=N3.object({systemPrompt:N3.string().describe("System prompt defining the sub-agent's behavior"),task:N3.string().describe("Task for the sub-agent to complete")});function q$($){return BM({name:"spawn_agent",description:"Spawn a sub-agent with a custom system prompt for specialized tasks. Use when delegating work that benefits from focused expertise.",inputSchema:GM(KM),execute:async(Z,Q)=>{let W=$.createSubAgentTools?await $.createSubAgentTools(Z,Q):$.subAgentTools??[],J=O$({kind:"subagent",prompt:Z.systemPrompt,configProvider:$.configProvider,tools:W,maxIterations:$.defaultMaxIterations,parentAgentId:Q.agentId,abortSignal:Q.signal,onEvent:$.onSubAgentEvent,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval}),X=J.getAgentId(),Y=J.getConversationId(),j=Q.agentId;if($.onSubAgentStart)try{await $.onSubAgentStart({subAgentId:X,conversationId:Y,parentAgentId:j,input:Z})}catch{}try{let V=await J.run(Z.task),H={text:V.text,iterations:V.iterations,finishReason:V.finishReason,usage:{inputTokens:V.usage.inputTokens,outputTokens:V.usage.outputTokens}};if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:X,conversationId:Y,parentAgentId:j,input:Z,result:H,agentResult:V})}catch{}return H}catch(V){if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:X,conversationId:Y,parentAgentId:j,input:Z,error:V instanceof Error?V:Error(String(V))})}catch{}throw V}},timeoutMs:300000,retryable:!1})}import{createTool as F0,TEAM_AWAIT_TIMEOUT_MS as FM,TEAM_RUN_MESSAGE_PREVIEW_LIMIT as AM,TEAM_RUN_TEXT_PREVIEW_LIMIT as fM,TEAM_TASK_IGNORED_FIELDS_BY_ACTION as UM,TeamAttachOutcomeFragmentInputSchema as RB,TeamAwaitRunsInputSchema as EB,TeamBroadcastInputSchema as NB,TeamBroadcastToolResultSchema as DM,TeamCancelRunInputSchema as wB,TeamCancelRunToolResultSchema as LM,TeamCleanupInputSchema as CB,TeamCleanupToolResultSchema as _M,TeamCreateOutcomeInputSchema as PB,TeamCreateOutcomeToolResultSchema as zM,TeamFinalizeOutcomeInputSchema as SB,TeamFinalizeOutcomeToolResultSchema as TM,TeamListOutcomesInputSchema as bB,TeamListRunsInputSchema as yB,TeamMailboxMessageToolResultSchema as OM,TeamMissionLogInputSchema as hB,TeamMissionLogToolResultSchema as qM,TeamOutcomeFragmentToolResultSchema as kB,TeamOutcomeToolResultSchema as MM,TeamReadMailboxInputSchema as IB,TeamReviewOutcomeFragmentInputSchema as xB,TeamRunTaskInputSchema as gB,TeamRunTaskToolResultSchema as w3,TeamRunToolSummarySchema as C3,TeamSendMessageInputSchema as mB,TeamSendMessageToolResultSchema as RM,TeamShutdownTeammateInputSchema as vB,TeamSimpleAgentStatusToolResultSchema as cB,TeamSpawnTeammateInputSchema as uB,TeamStatusInputSchema as dB,TeamStatusToolResultSchema as EM,TeamTaskInputSchema as lB,TeamTaskToolResultSchema as h6,validateWithZod as k,zodToJsonSchema as A0}from"@cline/shared";function pB($,Z){let Q=$.replace(/\s+/g," ").trim();if(Q.length<=Z)return Q;return`${Q.slice(0,Math.max(0,Z-3)).trimEnd()}...`}function F2($,Z){if($===void 0)throw Error(`Missing required field: ${Z}`);return $}function NM($){let Z=$.result;if(!Z)return;return{textPreview:pB(Z.text,fM),iterations:Z.iterations,finishReason:Z.finishReason,durationMs:Z.durationMs,usage:{inputTokens:Z.usage.inputTokens,outputTokens:Z.usage.outputTokens,cacheReadTokens:Z.usage.cacheReadTokens,cacheWriteTokens:Z.usage.cacheWriteTokens,totalCost:Z.usage.totalCost}}}function PZ($){return $?.toISOString()}function P3($){return{id:$.id,agentId:$.agentId,taskId:$.taskId,status:$.status,messagePreview:pB($.message,AM),priority:$.priority,retryCount:$.retryCount,maxRetries:$.maxRetries,nextAttemptAt:PZ($.nextAttemptAt),continueConversation:$.continueConversation,startedAt:$.startedAt.toISOString(),endedAt:PZ($.endedAt),leaseOwner:$.leaseOwner,heartbeatAt:PZ($.heartbeatAt),lastProgressAt:PZ($.lastProgressAt),lastProgressMessage:$.lastProgressMessage,currentActivity:$.currentActivity,error:$.error,resultSummary:NM($)}}function wM($){if($.status==="failed")throw Error(`Run "${$.id}" failed${$.error?`: ${$.error}`:""}`);if($.status==="cancelled")throw Error(`Run "${$.id}" was cancelled${$.error?`: ${$.error}`:""}`);if($.status==="interrupted")throw Error(`Run "${$.id}" was interrupted${$.error?`: ${$.error}`:""}`)}var N8=["team_spawn_teammate","team_shutdown_teammate","team_status","team_task","team_run_task","team_cancel_run","team_list_runs","team_await_runs","team_send_message","team_broadcast","team_read_mailbox","team_mission_log","team_cleanup","team_create_outcome","team_attach_outcome_fragment","team_review_outcome_fragment","team_finalize_outcome","team_list_outcomes"];function rB($){let Z=[];if($.createBaseTools)Z.push(...$.createBaseTools());Z.push(...A2({runtime:$.runtime,requesterId:$.spec.agentId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!1})),$.runtime.spawnTeammate({agentId:$.spec.agentId,config:K2({kind:"teammate",prompt:$.spec.rolePrompt,role:$.spec.rolePrompt,configProvider:$.teammateConfigProvider,tools:Z,maxIterations:$.spec.maxIterations,cwd:$.teammateConfigProvider.getRuntimeConfig().cwd})})}function w8($){let Z=$.leadAgentId??"lead",Q=$.restoredFromPersistence===!0,W=A2({runtime:$.runtime,requesterId:Z,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!0,includeSpawnTool:$.includeLeadSpawnTool,includeManagementTools:$.includeLeadManagementTools,onLeadToolsUnlocked:$.onLeadToolsUnlocked}),J=[];for(let X of $.restoredTeammates??[]){if($.runtime.isTeammateActive(X.agentId))continue;rB({runtime:$.runtime,requesterId:Z,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:X}),J.push(X.agentId)}return{tools:W,restoredFromPersistence:Q,restoredTeammates:J}}function A2($){let Z=$.allowSpawn??!0,Q=$.includeSpawnTool??!0,W=$.includeManagementTools??!0,J=[];if(Q)J.push(F0({name:"team_spawn_teammate",description:"Spawn a teammate with a required agentId and rolePrompt.",inputSchema:A0(uB),execute:async(Y)=>{let j=k(uB,Y);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");if(!Z)throw Error("Spawning teammates is disabled in this context.");let V={agentId:j.agentId,rolePrompt:j.rolePrompt};if(rB({runtime:$.runtime,requesterId:$.requesterId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:V}),!W)$.onLeadToolsUnlocked?.(A2({...$,includeSpawnTool:!1,includeManagementTools:!0,onLeadToolsUnlocked:void 0}));return k(cB,{agentId:j.agentId,status:"spawned"})}}));if(!W)return J;J.push(F0({name:"team_shutdown_teammate",description:"Shutdown a teammate by agentId.",inputSchema:A0(vB),execute:async(Y)=>{let j=k(vB,Y);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");return $.runtime.shutdownTeammate(j.agentId,j.reason),k(cB,{agentId:j.agentId,status:"stopped"})}})),J.push(F0({name:"team_status",description:"Return a snapshot of team members, task counts, mailbox, and mission log stats.",inputSchema:A0(dB),execute:async(Y)=>{return k(dB,Y),k(EM,$.runtime.getSnapshot())}})),J.push(F0({name:"team_task",description:"Manage shared team tasks with action-specific payloads. create requires title and description, with optional dependsOn and assignee. list accepts optional status, assignee. claim requires taskId. complete requires taskId and summary. block requires taskId and reason. Do not include fields from other actions.",inputSchema:A0(lB),execute:async(Y)=>{let j=k(lB,Y);switch(j.action){case"create":{let V=new Set(UM.create??[]),H=Object.entries(Y).filter(([G,K])=>V.has(G)&&K!=null).map(([G])=>G),B=$.runtime.createTask({title:F2(j.title,"title"),description:F2(j.description,"description"),dependsOn:j.dependsOn,assignee:j.assignee,createdBy:$.requesterId});return k(h6,{action:"create",taskId:B.id,status:B.status,...H.length>0?{ignoredFields:H,note:`Ignored fields for action=create: ${H.join(", ")}`}:{}})}case"list":return k(h6,{action:"list",tasks:$.runtime.listTaskItems({status:j.status,assignee:j.assignee})});case"claim":{let V=$.runtime.claimTask(F2(j.taskId,"taskId"),$.requesterId);return k(h6,{action:"claim",taskId:V.id,status:V.status,nextStep:"Task is now in_progress. Execute the work using team_run_task or your own tools, then call team_task with action=complete when done."})}case"complete":{let V=$.runtime.completeTask(F2(j.taskId,"taskId"),$.requesterId,F2(j.summary,"summary"));return k(h6,{action:"complete",taskId:V.id,status:V.status})}case"block":{let V=$.runtime.blockTask(F2(j.taskId,"taskId"),$.requesterId,F2(j.reason,"reason"));return k(h6,{action:"block",taskId:V.id,status:V.status})}}}}));let X=new Map;return J.push(F0({name:"team_run_task",description:"Route a delegated task to a teammate. Choose sync (wait) or async (run in background).",inputSchema:A0(gB),execute:async(Y)=>{let j=k(gB,Y);if(j.runMode==="async"){let B=$.runtime.startTeammateRun(j.agentId,j.task,{taskId:j.taskId||void 0,fromAgentId:$.requesterId,continueConversation:j.continueConversation||void 0});return k(w3,{agentId:j.agentId,mode:"async",status:"queued",dispatched:!0,message:`Task dispatched to ${j.agentId} and queued as ${B.id}.`,runId:B.id})}let V=X.get(j.agentId);if(V){let B=await V;return k(w3,{...B,status:"joined",deduped:!0,message:`Task for ${j.agentId} was already dispatched in this tool batch; joined the existing in-flight run.`})}let H=$.runtime.routeToTeammate(j.agentId,j.task,{taskId:j.taskId||void 0,fromAgentId:$.requesterId,continueConversation:j.continueConversation||void 0}).then((B)=>k(w3,{agentId:j.agentId,mode:"sync",status:"running",dispatched:!0,message:`Task dispatched to ${j.agentId} and completed in sync mode.`,text:B.text,iterations:B.iterations})).finally(()=>{X.delete(j.agentId)});return X.set(j.agentId,H),await H}})),J.push(F0({name:"team_cancel_run",description:"Cancel one async teammate run.",inputSchema:A0(wB),execute:async(Y)=>{let j=k(wB,Y),V=$.runtime.cancelRun(j.runId,j.reason);return k(LM,{runId:V.id,status:V.status})}})),J.push(F0({name:"team_list_runs",description:"List teammate runs started with team_run_task in async mode, including live activity/progress fields when available.",inputSchema:A0(yB),execute:async(Y)=>k(C3.array(),$.runtime.listRuns(k(yB,Y)).map(P3))})),J.push(F0({name:"team_await_runs",description:"Wait for async teammate runs. Provide runId to wait for one run, or omit it to wait for all active async runs. Uses a long timeout for legitimate teammate work.",inputSchema:A0(EB),timeoutMs:FM,execute:async(Y)=>{let j=k(EB,Y);if(j.runId){let B=await $.runtime.awaitRun(j.runId);return wM(B),k(C3,P3(B))}let V=await $.runtime.awaitAllRuns(),H=V.filter((B)=>["failed","cancelled","interrupted"].includes(B.status));if(H.length>0){let B=H.map((G)=>`${G.id}:${G.status}${G.error?`(${G.error})`:""}`).join(", ");throw Error(`One or more runs did not complete successfully: ${B}`)}return k(C3.array(),V.map(P3))}})),J.push(F0({name:"team_send_message",description:"Send a mailbox message to a specific teammate.",inputSchema:A0(mB),execute:async(Y)=>{let j=k(mB,Y),V=$.runtime.sendMessage($.requesterId,j.toAgentId,j.subject,j.body,j.taskId??void 0);return k(RM,{id:V.id,toAgentId:V.toAgentId})}})),J.push(F0({name:"team_broadcast",description:"Broadcast a message to all teammates.",inputSchema:A0(NB),execute:async(Y)=>{let j=k(NB,Y),V=$.runtime.broadcast($.requesterId,j.subject,j.body,{taskId:j.taskId??void 0});return k(DM,{delivered:V.length})}})),J.push(F0({name:"team_read_mailbox",description:"Read the current agent mailbox.",inputSchema:A0(IB),execute:async(Y)=>{let j=k(IB,Y);return k(OM.array(),$.runtime.listMailbox($.requesterId,{unreadOnly:j.unreadOnly,markRead:!0}))}})),J.push(F0({name:"team_mission_log",description:"Append a mission log update for your team.",inputSchema:A0(hB),execute:async(Y)=>{let j=k(hB,Y),V=$.runtime.appendMissionLog({agentId:$.requesterId,taskId:j.taskId||void 0,kind:j.kind,summary:j.summary,evidence:j.evidence?.length?j.evidence:void 0,nextAction:j.nextAction||void 0});return k(qM,{id:V.id})}})),J.push(F0({name:"team_cleanup",description:"Clean up the team runtime. Fails if teammates are still running.",inputSchema:A0(CB),execute:async(Y)=>{if(k(CB,Y),$.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can run cleanup.");return $.runtime.cleanup(),k(_M,{status:"cleaned"})}})),J.push(F0({name:"team_create_outcome",description:"Create a converged team outcome.",inputSchema:A0(PB),execute:async(Y)=>{let j=k(PB,Y),V=$.runtime.createOutcome({title:j.title,requiredSections:j.requiredSections,createdBy:$.requesterId});return k(zM,{outcomeId:V.id,status:V.status,requiredSections:V.requiredSections})}})),J.push(F0({name:"team_attach_outcome_fragment",description:"Attach a fragment to an outcome section.",inputSchema:A0(RB),execute:async(Y)=>{let j=k(RB,Y),V=$.runtime.attachOutcomeFragment({outcomeId:j.outcomeId,section:j.section,sourceAgentId:$.requesterId,sourceRunId:j.sourceRunId||void 0,content:j.content});return k(kB,{fragmentId:V.id,status:V.status})}})),J.push(F0({name:"team_review_outcome_fragment",description:"Review one outcome fragment.",inputSchema:A0(xB),execute:async(Y)=>{let j=k(xB,Y),V=$.runtime.reviewOutcomeFragment({fragmentId:j.fragmentId,reviewedBy:$.requesterId,approved:j.approved});return k(kB,{fragmentId:V.id,status:V.status})}})),J.push(F0({name:"team_finalize_outcome",description:"Finalize one outcome.",inputSchema:A0(SB),execute:async(Y)=>{let j=k(SB,Y),V=$.runtime.finalizeOutcome(j.outcomeId);return k(TM,{outcomeId:V.id,status:V.status})}})),J.push(F0({name:"team_list_outcomes",description:"List team outcomes.",inputSchema:A0(bB),execute:async(Y)=>{return k(bB,Y),k(MM.array(),$.runtime.listOutcomes())}})),J}function SZ($){return{...$,tasks:$.tasks.map((Z)=>({...Z,createdAt:new Date(Z.createdAt),updatedAt:new Date(Z.updatedAt)})),mailbox:$.mailbox.map((Z)=>({...Z,sentAt:new Date(Z.sentAt),readAt:Z.readAt?new Date(Z.readAt):void 0})),missionLog:$.missionLog.map((Z)=>({...Z,ts:new Date(Z.ts)})),runs:($.runs??[]).map((Z)=>({...Z,startedAt:new Date(Z.startedAt),endedAt:Z.endedAt?new Date(Z.endedAt):void 0,nextAttemptAt:Z.nextAttemptAt?new Date(Z.nextAttemptAt):void 0,heartbeatAt:Z.heartbeatAt?new Date(Z.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),finalizedAt:Z.finalizedAt?new Date(Z.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),reviewedAt:Z.reviewedAt?new Date(Z.reviewedAt):void 0}))}}function iB($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}var CM=[{id:"read_files",description:"Read the content of text or image files at the provided absolute paths, or return only an inclusive one-based line range when start_line/end_line are provided. Long files are windowed; page with start_line/end_line.",headlessToolNames:["read_files"]},{id:"search_codebase",description:"Perform regex pattern searches across the codebase for code patterns, definitions, imports, and other text matches.",headlessToolNames:["search_codebase"]},{id:"run_commands",description:"Run shell commands from the root of the workspace for listing files, checking git status, builds, tests, and similar tasks.",headlessToolNames:["run_commands"]},{id:"editor",description:"Make controlled filesystem edits on text files with create, replace, and insert operations.",headlessToolNames:["editor"]},{id:"fetch_web_content",description:"Fetch URL content and analyze it with a prompt describing what to extract.",headlessToolNames:["fetch_web_content"]},{id:"skills",description:"Execute a configured skill within the main conversation when a matching skill exists for the task.",headlessToolNames:["skills"]},{id:"ask_question",description:"Ask the user a single clarifying question with 2-5 selectable options.",headlessToolNames:["ask_question"]},{id:"spawn_agent",description:q$({configProvider:{}}).description,headlessToolNames:["spawn_agent"]},{id:"teams",description:"Enable team collaboration tools for teammate management, task coordination, mailbox messaging, mission logs, and outcomes.",headlessToolNames:[...N8]}],PM={read_files:"enableReadFiles",search_codebase:"enableSearch",run_commands:"enableBash",fetch_web_content:"enableWebFetch",apply_patch:"enableApplyPatch",editor:"enableEditor",skills:"enableSkills",ask_question:"enableAskQuestion"};function SM($){return $==="plan"||$==="yolo"?$:"act"}function aB($){let Z=SM($.mode),Q=u0[l1({mode:Z})],W=M8($.providerId??"",$.modelId??"",Z,q8);return{mode:Z,flags:{...Q,...W,...typeof $.enableSpawnAgent==="boolean"?{enableSpawnAgent:$.enableSpawnAgent}:{},...typeof $.enableAgentTeams==="boolean"?{enableAgentTeams:$.enableAgentTeams}:{}}}}function nB($,Z){if(Z.disabledToolIds?.has($))return!1;let{flags:Q}=aB(Z);if($==="spawn_agent")return Q.enableSpawnAgent===!0;if($==="teams")return Q.enableAgentTeams===!0;if($==="editor")return Q.enableEditor===!0||Q.enableApplyPatch===!0;let W=PM[$];return W?Q[W]===!0:!1}function bM($,Z){if($.id==="editor"){let{flags:Q}=aB(Z),W=Q.enableApplyPatch===!0&&Q.enableEditor!==!0;return{...$,defaultEnabled:nB($.id,Z),headlessToolNames:[W?"apply_patch":"editor"]}}return{...$,defaultEnabled:nB($.id,Z)}}function f2($={}){return CM.map((Z)=>bM(Z,$))}function bZ($={}){return f2($).filter((Z)=>Z.defaultEnabled).map((Z)=>Z.id)}function yZ($){if(!$.enabled)return new Set;let Z=f2($.availabilityContext),Q=new Set(Z.map((W)=>W.id));if(!$.allowlist||$.allowlist.length===0)return new Set(Z.filter((W)=>W.defaultEnabled).map((W)=>W.id));for(let W of $.allowlist)if(!Q.has(W))throw Error(`Unknown tool "${W}". Available tools: ${Z.map((J)=>J.id).join(", ")}`);return new Set($.allowlist)}function k6($,Z={}){return f2(Z).filter((Q)=>$.has(Q.id)).flatMap((Q)=>Q.headlessToolNames)}function hZ($,Z={}){return k6($,Z)}function U2($={}){let{executorOptions:Z={},executors:Q,...W}=$,J={...O8(Z),...Q??{}};return D$({...W,executors:J})}import{mkdirSync as gM,writeFileSync as mM}from"node:fs";import{dirname as vM}from"node:path";import{normalizeUserInput as cM,stripModeNotices as uM}from"@cline/shared";import{nanoid as dM}from"nanoid";var oB={};N(oB,{sanitizeSessionToken:()=>D2,parseTeamTaskSubSessionId:()=>P8,parseSubSessionId:()=>x6,makeTeamTaskSubSessionId:()=>I6,makeSubSessionId:()=>C8,deriveSubsessionStatus:()=>g6});import{nanoid as kM}from"nanoid";function D2($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function C8($,Z){let Q=D2($),W=D2(Z),J=`${Q}__${W}`;return J.length>180?J.slice(0,180):J}function I6($,Z){let Q=D2($),W=D2(Z);return`${Q}__teamtask__${W}__${kM(6)}`}function P8($){let Q=$.indexOf("__teamtask__");if(Q<=0)return null;let W=$.slice(0,Q),J=$.slice(Q+12),X=J.lastIndexOf("__");if(X<=0)return null;let Y=J.slice(0,X),j=J.slice(X+2);if(!W||!Y||!j)return null;return{rootSessionId:W,agentId:Y,teamTaskId:j}}function x6($){if(P8($))return null;let Z="__",Q=$.indexOf(Z);if(Q<=0)return null;let W=$.slice(0,Q),J=$.slice(Q+Z.length);if(!W||!J)return null;return{rootSessionId:W,agentId:J}}function g6($){switch($.hookName){case"agent_end":return"completed";case"agent_error":return"failed";case"session_shutdown":{let Z=String($.reason??"").toLowerCase();if(Z.includes("cancel")||Z.includes("abort")||Z.includes("interrupt"))return"cancelled";if(Z.includes("fail")||Z.includes("error"))return"failed";return"completed"}default:return"running"}}import{z as $0}from"zod";var $G={};N($G,{isTerminalSessionStatus:()=>eB,isNonTerminalSessionStatus:()=>H0,SessionSource:()=>T0,SESSION_STATUSES:()=>m6,NON_TERMINAL_SESSION_STATUSES:()=>tB});import{SESSION_STATUS_VALUES as IM}from"@cline/shared";var m6=IM,tB=["idle","running","pending"];function eB($){return!tB.includes($)}function H0($){return!eB($)}var T0={CORE:"core",CLI:"cli",SUBAGENT:"subagent",DESKTOP:"desktop",KANBAN:"kanban",API:"api",WEB:"web",VSCODE:"vscode",ENTERPRISE:"enterprise",IDE:"ide",JETBRAINS:"jetbrains",NEOVIM:"neovim",UNKNOWN:"unknown"};var xM=$0.enum(m6),b0=$0.object({version:$0.literal(1),session_id:$0.string().min(1),source:$0.string().min(1),pid:$0.number().int(),started_at:$0.string().min(1),ended_at:$0.string().min(1).optional(),exit_code:$0.number().int().nullable().optional(),status:xM,interactive:$0.boolean(),provider:$0.string().min(1),model:$0.string().min(1),cwd:$0.string().min(1),workspace_root:$0.string().min(1),team_name:$0.string().min(1).optional(),enable_tools:$0.boolean(),enable_spawn:$0.boolean(),enable_teams:$0.boolean(),prompt:$0.string().optional(),metadata:$0.record($0.string(),$0.unknown()).optional(),messages_path:$0.string().min(1).optional()});function ZG($){if(!$)return!1;return Object.values($).some((Z)=>typeof Z==="function")}function b3($,Z){let Q=[...$??[],...Z??[]];if(Q.length===0)return;let W=[],J=new Set;for(let X of Q){if(J.has(X.name))continue;J.add(X.name),W.push(X)}return W}function QG($){return JSON.stringify($,(Z,Q)=>{if(Q instanceof Error)return{name:Q.name,message:Q.message,stack:Q.stack};return Q})}function p1($){return typeof $==="string"&&$.trim()?$.trim():void 0}function S3($,Z){let Q={...$};Q.id=p1(Q.id)??dM();let W=Q.modelInfo&&typeof Q.modelInfo==="object"?{...Q.modelInfo}:void 0,J={id:p1(W?.id)??p1(Q.modelId)??p1(Z?.id),provider:p1(W?.provider)??p1(Q.providerId)??p1(Z?.provider),family:p1(W?.family)??p1(Z?.family)};if(delete Q.providerId,delete Q.modelId,J.id&&J.provider)Q.modelInfo={id:J.id,provider:J.provider,...J.family?{family:J.family}:{}};else delete Q.modelInfo;return Q}function kZ($){return $.map((Z)=>S3(Z))}function IZ($,Z,Q=[]){let W=$.map((V,H)=>{let B=Q[H],K=B?.role===V.role&&JSON.stringify(B.content)===JSON.stringify(V.content)?{...B,...V}:{...V};return S3(K)}),J=Q.length,X=[];for(let V=J;V<W.length;V+=1)if(W[V]?.role==="assistant")X.push(V);if(X.length===0){let V=[...W].reverse().findIndex((H)=>H.role==="assistant");if(V===-1)return W;X.push(W.length-1-V)}let Y=X[X.length-1],j=X.some((V)=>W[V]?.metrics);for(let V of X){let H=W[V],B=H.metrics;if(!B&&V===Y&&!j){let G=Z.usage;B={inputTokens:G.inputTokens,outputTokens:G.outputTokens,cacheReadTokens:G.cacheReadTokens??0,cacheWriteTokens:G.cacheWriteTokens??0,cost:G.totalCost}}W[V]={...S3(H,{id:Z.model.id,provider:Z.model.provider,family:Z.model.info?.family}),...B?{metrics:B}:{},ts:H.ts??Z.endedAt.getTime()}}return W}function v6($){return{sessionId:$.sessionId,source:$.source,pid:$.pid,startedAt:$.startedAt,endedAt:$.endedAt??null,exitCode:$.exitCode??null,status:$.status,interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspaceRoot:$.workspaceRoot,teamName:$.teamName??void 0,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,parentSessionId:$.parentSessionId??void 0,parentAgentId:$.parentAgentId??void 0,agentId:$.agentId??void 0,conversationId:$.conversationId??void 0,isSubagent:$.isSubagent,prompt:$.prompt??void 0,metadata:$.metadata??void 0,messagesPath:$.messagesPath??void 0,updatedAt:$.updatedAt}}var lM=120;function L2($){let Z=$?.trim();return Z?Z.slice(0,lM):void 0}function y3($){let Z=uM(cM($??"")).trim();if(!Z)return;return L2(Z.split(`
|
|
472
472
|
`)[0]?.trim())}function M$($){if(!$)return;let Z={...$},Q=L2(typeof Z.title==="string"?Z.title:void 0);if(Q)Z.title=Q;else delete Z.title;return Object.keys(Z).length>0?Z:void 0}function c6($){let Z=M$($.metadata)??{},Q=$.title!==void 0?L2($.title):y3($.prompt);if(Q)Z.title=Q;return Object.keys(Z).length>0?Z:void 0}function h3($){let Z=P8($);if(Z)return{agent:"teammate",sessionId:Z.rootSessionId,taskType:"team"};let Q=x6($);if(Q)return{agent:"subagent",sessionId:Q.rootSessionId,taskType:"subagent_task"};return{agent:"lead",sessionId:$}}function k3($){return{version:1,updated_at:$.updatedAt,agent:$.context.agent,sessionId:$.context.sessionId,...$.context.taskType?{taskType:$.context.taskType}:{},messages:kZ($.messages),...$.systemPrompt?{system_prompt:$.systemPrompt}:{}}}function WG($,Z,Q){gM(vM($),{recursive:!0}),mM($,`${JSON.stringify(k3({updatedAt:Z,context:Q,messages:[]}),null,2)}
|
|
473
|
-
`,"utf8")}function JG($,Z){return b0.parse({version:1,session_id:$.sessionId,source:$.source,pid:$.pid,started_at:$.startedAt,ended_at:Z?.endedAt??$.endedAt??void 0,exit_code:Z?.exitCode??$.exitCode??void 0,status:Z?.status??$.status,interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspace_root:$.workspaceRoot,team_name:$.teamName??void 0,enable_tools:$.enableTools,enable_spawn:$.enableSpawn,enable_teams:$.enableTeams,prompt:$.prompt??void 0,metadata:Z?.metadata??$.metadata??void 0,messages_path:$.messagesPath??void 0})}async function XG($,Z,Q){let W=0;while(!0){let J=await $();if(J===void 0)return{updated:!1};let X=await Z(J);if(typeof X==="object"&&X!==null&&"updated"in X&&X.updated===!1){if(W+=1,W>=Q)return X;continue}return X}}_0();var YG={};N(YG,{summarizeUsageFromMessages:()=>b8,sumUsageTotals:()=>u6,getCurrentContextSize:()=>I3,createInitialAccumulatedUsage:()=>D0,accumulateUsageTotals:()=>f0});function D0(){return{inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0}}function f0($,Z){return{inputTokens:$.inputTokens+Math.max(0,Z.inputTokens??0),outputTokens:$.outputTokens+Math.max(0,Z.outputTokens??0),cacheReadTokens:$.cacheReadTokens+Math.max(0,Z.cacheReadTokens??0),cacheWriteTokens:$.cacheWriteTokens+Math.max(0,Z.cacheWriteTokens??0),totalCost:$.totalCost+Math.max(0,Z.totalCost??0)}}function u6($){let Z=D0();for(let Q of $)Z=f0(Z,Q);return Z}function S8($){return typeof $==="number"&&Number.isFinite($)?$:0}function b8($){let Z=D0();for(let Q of $){let W=Q.metrics;if(!W)continue;Z=f0(Z,{inputTokens:S8(W.inputTokens),outputTokens:S8(W.outputTokens),cacheReadTokens:S8(W.cacheReadTokens),cacheWriteTokens:S8(W.cacheWriteTokens),totalCost:S8(W.cost)})}return Z}function I3($){for(let Z=$.length-1;Z>=0;Z-=1){let Q=$[Z];if(Q?.role!=="assistant")continue;let W=S8(Q.metrics?.inputTokens);return W>0?W:void 0}return}function lM($){if(!$||typeof $!=="object")return;let Z=$,Q=Z.skill??Z.skill_name??Z.skillName;if(typeof Q!=="string")return;let W=Q.trim();return W.length>0?W:void 0}function x3($){if(!$||typeof $!=="object")return{};let Z=$;return{agentId:typeof Z.agentId==="string"?Z.agentId:void 0,conversationId:typeof Z.conversationId==="string"?Z.conversationId:void 0,parentAgentId:typeof Z.parentAgentId==="string"?Z.parentAgentId:void 0}}function r1($){let Z=$.agentId?.trim();if(!Z)return;let Q=$.parentAgentId?.trim()||void 0,W=$.teamRole,J="root";if(W==="teammate")J="team_teammate";else if(W==="lead")J="team_lead";else if(Q)J="subagent";return{agentId:Z,agentKind:J,conversationId:$.conversationId?.trim()||void 0,parentAgentId:Q,createdByAgentId:$.createdByAgentId?.trim()||Q||void 0,isSubagent:Boolean(Q),teamId:$.teamId?.trim()||void 0,teamName:$.teamName?.trim()||void 0,teamRole:W,teamAgentId:$.teamAgentId?.trim()||void 0}}function pM($){return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheWriteTokens:$.cacheWriteTokens,cacheReadTokens:$.cacheReadTokens,totalCost:$.cost}}function rM($){let Z=$.isPrimaryAgentEvent?[$.overrides?.agentId,$.eventMetadata.agentId,$.overrides?.teamAgentId]:[$.overrides?.teamAgentId,$.overrides?.agentId,$.eventMetadata.agentId,$.eventMetadata.conversationId];for(let Q of Z){let W=Q?.trim();if(W)return W}return $.isPrimaryAgentEvent?"root":"unknown"}function g3($,Z,Q){let{sessionId:W,config:J,liveSession:X,emit:Y}=$,j=J.telemetry,V=X?.runtime.teamRuntime,H=Q?.isPrimaryAgentEvent??!0,B=x3(Z),G=r1({agentId:Q?.agentId??B.agentId,conversationId:Q?.conversationId??B.conversationId,parentAgentId:Q?.parentAgentId??B.parentAgentId,createdByAgentId:Q?.createdByAgentId,teamId:Q?.teamId??V?.getTeamId(),teamName:Q?.teamName??V?.getTeamName(),teamRole:Q?.teamRole,teamAgentId:Q?.teamAgentId});if(Z.type==="content_start"&&Z.contentType==="tool"&&Z.toolName==="skills"){let K=lM(Z.input);if(K)N9(j,{ulid:W,skillName:K,skillSource:"project",skillsAvailableGlobal:0,skillsAvailableProject:0,provider:J.providerId,modelId:J.modelId,...G})}if(Z.type==="content_end"&&Z.contentType==="tool"){let K=Z.toolName??"unknown",F=!Z.error;if(W8(j,{ulid:W,tool:K,autoApproved:void 0,success:F,modelId:J.modelId,provider:J.providerId,...G}),!F&&(K==="editor"||K==="apply_patch"))w9(j,{ulid:W,modelId:J.modelId,provider:J.providerId,errorType:Z.error,...G})}if(Z.type==="notice"&&Z.reason==="api_error")m4(j,{ulid:W,model:J.modelId,provider:J.providerId,errorMessage:Z.message,...G});if(Z.type==="error")m4(j,{ulid:W,model:J.modelId,provider:J.providerId,errorMessage:Z.error?.message??"unknown error",...G});if(Z.type==="usage"&&X?.turnUsageBaseline){let K=pM(Z);if(H){X.turnPrimaryUsage=f0(X.turnPrimaryUsage??D0(),K);let A=f0(X.turnUsageBaseline,X.turnPrimaryUsage);$.usageBySession.set(W,A),Q8(j,{ulid:W,provider:J.providerId,model:J.modelId,source:"assistant",mode:J.mode,...G}),R9(j,{ulid:W,tokensIn:Z.inputTokens,tokensOut:Z.outputTokens,cacheWriteTokens:Z.cacheWriteTokens,cacheReadTokens:Z.cacheReadTokens,totalCost:Z.cost,model:J.modelId,...G})}else{let A=rM({isPrimaryAgentEvent:H,overrides:Q,eventMetadata:B}),L=X.turnUsageByAgent??new Map;X.turnUsageByAgent=L,L.set(A,f0(L.get(A)??D0(),K))}let F=f0(X.turnPrimaryUsage??D0(),u6(X.turnUsageByAgent?.values()??[]));$.aggregateUsageBySession.set(W,f0(X.turnAggregateUsageBaseline??X.turnUsageBaseline,F))}if(Z.type==="iteration_end"&&H)$.persistMessages(W,X?.agent.getMessages()??[],X?.config.systemPrompt);Y({type:"agent_event",payload:{sessionId:W,event:Z,teamAgentId:Q?.teamAgentId,teamRole:Q!==void 0?Q.teamRole??(H?"lead":void 0):void 0}}),Y({type:"chunk",payload:{sessionId:W,stream:"agent",chunk:QG(Z),ts:Date.now()}})}function R$($){return $.workspaceRoot??$.cwd}import{hasRuntimeConfigExtension as $N}from"@cline/shared";$1();import{existsSync as uZ,readFileSync as yR,statSync as hR}from"node:fs";import{basename as kR,dirname as vZ,join as dZ,resolve as cZ}from"node:path";import{discoverPluginModulePaths as IR,resolveConfiguredPluginModulePaths as NG,resolvePluginConfigSearchPaths as xR,SKILLS_CONFIG_DIRECTORY_NAME as gR}from"@cline/shared/storage";import{resolve as KR}from"node:path";import{normalizePluginManifest as FR}from"@cline/shared";import{existsSync as O0,readFileSync as h8}from"node:fs";import{builtinModules as iM,createRequire as u3}from"node:module";import{dirname as E$,extname as l6,isAbsolute as nM,resolve as p}from"node:path";import{fileURLToPath as VG}from"node:url";import{PLUGIN_FILE_EXTENSIONS as aM}from"@cline/shared";var HG=E$(VG(import.meta.url)),sM=u3(import.meta.url),oM=p(HG,"..","..","..","..",".."),m3=$R(oM),tM=["@cline/sdk","@cline/agents","@cline/core","@cline/core/hub","@cline/core/hub/daemon-entry","@cline/core/telemetry","@cline/llms","@cline/llms/browser","@cline/shared","@cline/shared/automation","@cline/shared/browser","@cline/shared/storage","@cline/shared/db","@cline/shared/types"],d3=new Set(iM.flatMap(($)=>[$,$.replace(/^node:/,"")])),d6=new Set(aM),eM=["development","node","import","require","default"];function $R($){let Z={},Q={"@cline/sdk":p($,"packages/sdk/src/index.ts"),"@cline/agents":p($,"packages/agents/src/index.ts"),"@cline/core":p($,"packages/core/src/index.ts"),"@cline/llms":p($,"packages/llms/src/index.ts"),"@cline/shared":p($,"packages/shared/src/index.ts"),"@cline/shared/storage":p($,"packages/shared/src/storage/index.ts"),"@cline/shared/db":p($,"packages/shared/src/db/index.ts")};for(let[W,J]of Object.entries(Q))if(O0(J))Z[W]=J;for(let W of["agents","core","llms","shared"]){let J=p($,"packages",W),X=p(J,"package.json");if(!O0(X))continue;try{let Y=JSON.parse(h8(X,"utf8"));if(typeof Y.name!=="string"||!Y.exports)continue;if(typeof Y.exports==="string"){let j=p(J,Y.exports);if(O0(j))Z[Y.name]=j;continue}if(typeof Y.exports!=="object")continue;for(let[j,V]of Object.entries(Y.exports)){let H=ZR(J,V);if(!H)continue;let B=j==="."?Y.name:`${Y.name}/${j.replace(/^\.\//,"")}`;Z[B]=H}}catch{}}return Z}function ZR($,Z){let Q=l3(Z);if(!Q)return null;let W=BG($,Q);for(let J of W)if(O0(J))return J;return null}function l3($,Z=new Set){if(typeof $==="string")return $;if(!$||typeof $!=="object")return null;if(Z.has($))return null;Z.add($);let Q=$;for(let W of eM){let J=l3(Q[W],Z);if(J)return J}return null}function BG($,Z){let Q=Z.replace(/^\.\//,""),W=[p($,Z)];if(Q.startsWith("dist/")){let J=Q.replace(/^dist\//,"src/").replace(/\.(mjs|cjs|js)$/,"");return[p($,`${J}.ts`),p($,`${J}.tsx`),p($,`${J}.mts`),p($,`${J}.cts`),...W]}return W}function QR($){return Object.fromEntries(Object.entries($).sort(([Z],[Q])=>Q.length-Z.length))}function xZ($){return!($.startsWith(".")||$.startsWith("/")||$.startsWith("file:")||$.startsWith("data:")||$.startsWith("http:")||$.startsWith("https:"))}function y8($){if($.startsWith("@")){let[Z,Q]=$.split("/",3);return Q?`${Z}/${Q}`:$}return $.split("/",1)[0]??$}function WR($){let Z=y8($);if($===Z)return".";return`.${$.slice(Z.length)}`}function GG($){return y8($).startsWith("@cline/")}function v3($,Z){let Q=y8(Z),W=E$($);while(!0){let J=p(W,"node_modules",Q);if(O0(J)||O0(p(J,"package.json")))return!0;let X=p(W,"..");if(X===W)return!1;W=X}}function jG($){return c3($)!==null}function c3($){try{return sM.resolve($)}catch{}return JR($)}function JR($){let Z=y8($),Q=KG(Z);if(!Q)return null;let W=p(Q,"package.json");try{let J=JSON.parse(h8(W,"utf8")),X=WR($),Y=X==="."&&typeof J.exports==="string"?J.exports:J.exports&&typeof J.exports==="object"&&Object.hasOwn(J.exports,X)?J.exports[X]:void 0,j=l3(Y)??(X==="."&&typeof J.main==="string"?J.main:null);if(!j)return null;let V=p(Q,j),H=[V,...BG(Q,j).filter((B)=>B!==V)];for(let B of H)if(O0(B))return B;return null}catch{return null}}function XR(){let $=[HG],Z=process.env.CLINE_WRAPPER_PATH?.trim();if(Z)$.push(E$(E$(Z)));let Q=process.execPath?.trim();if(Q)$.push(E$(Q));return[...new Set($.map((W)=>p(W)))]}function YR($,Z){let Q=$;while(!0){let W=p(Q,"package.json");if(O0(W))try{if(JSON.parse(h8(W,"utf8")).name===Z)return Q}catch{}let J=p(Q,"node_modules",Z,"package.json");if(O0(J))return E$(J);let X=p(Q,"..");if(X===Q)return null;Q=X}}function KG($){for(let Z of XR()){let Q=YR(Z,$);if(Q)return Q}return null}function jR($){let Q=E$($);for(let W=0;W<4;W++){let J=p(Q,"package.json");if(O0(J))try{let Y=JSON.parse(h8(J,"utf8"));return Y!=null&&typeof Y==="object"&&"cline"in Y}catch{return!1}let X=p(Q,"..");if(X===Q)return!1;Q=X}return!1}function FG($,Z){let Q=Z.startsWith("file:")?VG(Z):nM(Z)?Z:p(E$($),Z);if(O0(Q)&&d6.has(l6(Q)))return Q;for(let W of d6){let J=`${Q}${W}`;if(O0(J))return J}for(let W of d6){let J=p(Q,`index${W}`);if(O0(J))return J}return null}function AG($){let Z=new Set,Q=[/\bimport\s+(?:type\s+)?[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bexport\s+[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bimport\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g,/\brequire\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g];for(let W of Q)for(let J of $.matchAll(W)){let X=J[1];if(X)Z.add(X)}return[...Z]}function VR($){return l6($)!==".ts"}function fG($,Z,Q=new Set){if(Q.has($)||!O0($))return;if(Q.add($),!d6.has(l6($)))return;let W=h8($,"utf8"),J=VR($);for(let X of AG(W)){if(X.startsWith("node:")||d3.has(X))continue;if(xZ(X)){if(!J)continue;if(Object.hasOwn(m3,X)||Object.hasOwn(m3,y8(X))||v3($,X)||GG(X)&&jG(X)||Z&&jG(X))continue;throw Error(`Cannot find module '${y8(X)}'`)}let Y=FG($,X);if(Y)fG(Y,Z,Q)}}function UG($,Z=new Set,Q=new Set){if(Z.has($)||!O0($))return Q;if(Z.add($),!d6.has(l6($)))return Q;let W=h8($,"utf8");for(let J of AG(W)){if(Q.add(J),xZ(J))continue;let X=FG($,J);if(X)UG(X,Z,Q)}return Q}function HR($,Z){let Q=u3($),W={},J=UG($),X=new Set(tM);for(let[Y,j]of Object.entries(m3)){try{Q.resolve(Y);continue}catch{}W[Y]=j}for(let Y of J)if(xZ(Y)&&(GG(Y)||Z))X.add(Y);for(let Y of X){if(Object.hasOwn(W,Y)||v3($,Y))continue;let j=c3(Y);if(j)W[Y]=j}if(!Z)return W;for(let Y of J){if(!xZ(Y)||Object.hasOwn(W,Y)||v3($,Y)||Y.startsWith("node:")||d3.has(Y))continue;let j=c3(Y);if(j)W[Y]=j}return W}function BR($){let Z=l6($);return Z===".ts"||Z===".tsx"||Z===".mts"||Z===".cts"}var _2;function GR(){if(_2!==void 0)return _2;let $=KG("jiti");if(!$)return _2=null,null;let Z=p($,"dist","babel.cjs");if(!O0(Z))return _2=null,null;try{let W=u3(Z)(Z);_2=typeof W==="function"?W:null}catch{_2=null}return _2}async function DG($,Z={}){let Q=!jR($);fG($,Q);let W=HR($,Q),J=QR(W),X=await import("jiti"),Y=typeof X==="function"?X:typeof X.default==="function"?X.default:void 0;if(!Y)throw Error("Unable to load jiti");let j=Object.entries(J).filter(([,G])=>BR(G)).map(([G])=>G),V=GR(),H=V?(G)=>V({...G,interopDefault:!0}):void 0;return await Y($,{alias:J,cache:Z.useCache,requireCache:Z.useCache,esmResolve:!0,interopDefault:!1,nativeModules:[...d3],transformModules:j,tryNative:!1,...H?{transform:H}:{}}).import($,{})}function LG($,Z){if(!$)return!0;if($.providerIds?.length){if(!Z?.providerId||!$.providerIds.includes(Z.providerId))return!1}if($.modelIds?.length){if(!Z?.modelId||!$.modelIds.includes(Z.modelId))return!1}return!0}function _G($){return typeof $==="object"&&$!==null}function p3($){return Array.isArray($)&&$.every((Z)=>typeof Z==="string")}function AR($,Z){if(!_G($.manifest))throw Error(`Invalid plugin module at ${Z}: missing required "manifest"`);if(!p3($.manifest.capabilities))throw Error(`Invalid plugin module at ${Z}: manifest.capabilities must be a string array`);if($.manifest.capabilities.length===0)throw Error(`Invalid plugin module at ${Z}: manifest.capabilities cannot be empty`);if(Object.hasOwn($.manifest,"providerIds")&&!p3($.manifest.providerIds))throw Error(`Invalid plugin module at ${Z}: manifest.providerIds must be a string array when provided`);if(Object.hasOwn($.manifest,"modelIds")&&!p3($.manifest.modelIds))throw Error(`Invalid plugin module at ${Z}: manifest.modelIds must be a string array when provided`)}function fR($,Z){if(!_G($))throw Error(`Invalid plugin module at ${Z}: expected object export`);if(typeof $.name!=="string"||$.name.length===0)throw Error(`Invalid plugin module at ${Z}: expected non-empty "name"`);if(!Object.hasOwn($,"manifest"))throw Error(`Invalid plugin module at ${Z}: missing required "manifest"`);AR($,Z)}async function p6($,Z={}){let Q=KR(Z.cwd??process.cwd(),$),W=await DG(Q,{useCache:Z.useCache}),J=Z.exportName??"plugin",X=W.default??W[J];fR(X,Q);let Y=X,j=Y.setup,V=j?(H,B)=>{let G={...Z.session,...B.session},K={...B,session:Object.keys(G).length>0?G:void 0,client:Z.client??B.client,user:Z.user??B.user,workspaceInfo:Z.workspaceInfo??B.workspaceInfo,automation:Z.automation??B.automation,logger:Z.logger??B.logger,telemetry:Z.telemetry??B.telemetry};return j(H,K)}:void 0;return{...Y,manifest:FR(Y.manifest),setup:V}}async function gZ($,Z={}){return(await z2($,Z)).plugins}async function z2($,Z={}){let Q=[],W=[],J=new Map,X=0;for(let j of $)try{let V=await p6(j,Z);if(!LG(V.manifest,Z))continue;let H=J.get(V.name);if(H)W.push({type:"duplicate_plugin_override",pluginName:V.name,pluginPath:j,overriddenPluginPath:H.pluginPath,message:`Plugin "${V.name}" from ${j} overrides ${H.pluginPath}`});J.set(V.name,{plugin:V,pluginPath:j,order:X++})}catch(V){let H=V instanceof Error?V.message:String(V);Q.push({pluginPath:j,phase:"load",message:H,stack:V instanceof Error?V.stack:void 0})}let Y=[...J.values()].sort((j,V)=>j.order-V.order);return{plugins:Y.map((j)=>j.plugin),pluginPaths:Y.map((j)=>j.pluginPath),failures:Q,warnings:W}}import{existsSync as a3}from"node:fs";import{createRequire as EG}from"node:module";import{dirname as mZ,join as I8}from"node:path";import{fileURLToPath as zR}from"node:url";var MG={};N(MG,{resolveSubprocessRuntimeExecutable:()=>r3,buildSubprocessSandboxCommand:()=>qG,SubprocessSandbox:()=>k8,CLINE_JS_RUNTIME_PATH_ENV:()=>OG});import{spawn as UR}from"node:child_process";import{basename as DR}from"node:path";import{augmentNodeCommandForDebug as LR,withResolvedClineBuildEnv as _R}from"@cline/shared";function zG($){if($ instanceof Error)return $;return Error(String($))}var OG="CLINE_JS_RUNTIME_PATH";function TG($){let Z=$?.trim();if(!Z)return!1;let Q=DR(Z).toLowerCase();return Q==="node"||Q==="node.exe"||Q==="bun"||Q==="bun.exe"}function r3($={}){let Z=$.env??process.env,Q=$.runtimeExecutable?.trim()||Z[OG]?.trim();if(Q)return Q;let W=$.execPath?.trim()||process.execPath;if(TG(W))return W;for(let J of[Z.BUN_EXEC_PATH,Z.npm_node_execpath,Z.NODE]){let X=J?.trim();if(X&&TG(X))return X}return"node"}function qG($,Z={}){let Q=r3({env:Z.env,execPath:Z.execPath,runtimeExecutable:Z.runtimeExecutable});return LR([Q,...$],{env:Z.env,execArgv:Z.execArgv,debugRole:Z.name==="plugin-sandbox"?"plugin-sandbox":"sandbox"})}class k8{options;process=null;requestCounter=0;pending=new Map;constructor($){this.options=$}get processLabel(){return this.options.name??"sandbox"}clearPendingRequest($){let Z=this.pending.get($);if(!Z)return;if(this.pending.delete($),Z.timeout)clearTimeout(Z.timeout);return Z}start(){if(this.process&&this.process.exitCode===null)return;let $=this.options.bootstrapFile?[this.options.bootstrapFile]:["-e",this.options.bootstrapScript??""],Z=qG($,{name:this.options.name,runtimeExecutable:this.options.runtimeExecutable}),Q=UR(Z[0]??r3(this.options),Z.slice(1),{stdio:["ignore","ignore","pipe","ipc"],env:_R(process.env),windowsHide:!0});this.process=Q;let W="",J=(X)=>{let Y=W+X;W=Y.length>4000?Y.slice(-4000):Y};Q.stderr?.setEncoding("utf8"),Q.stderr?.on("data",(X)=>{J(X)}),Q.on("message",(X)=>{this.onMessage(X)}),Q.on("error",(X)=>{this.failPending(Error(`${this.processLabel} process error: ${zG(X).message}`))}),Q.on("exit",(X,Y)=>{this.process=null;let j=W.trim();this.failPending(Error(`${this.options.name??"sandbox"} process exited (code=${String(X)}, signal=${String(Y)})${j?`: ${j}`:""}`))})}async call($,Z,Q={}){this.start();let W=this.process;if(!W||W.exitCode!==null)throw Error(`${this.processLabel} process is not available`);let J=`req_${++this.requestCounter}`,X={type:"call",id:J,method:$,args:Z};return await new Promise((Y,j)=>{let V={resolve:(H)=>Y(H),reject:j};if((Q.timeoutMs??0)>0)V.timeout=setTimeout(()=>{this.clearPendingRequest(J),this.shutdown().catch(()=>{}),j(Error(`${this.processLabel} call timed out after ${Q.timeoutMs}ms: ${$}`))},Q.timeoutMs);this.pending.set(J,V),W.send(X,(H)=>{if(!H)return;let B=this.clearPendingRequest(J);if(!B)return;B.reject(Error(`${this.processLabel} failed to send call "${$}": ${zG(H).message}`))})})}async shutdown(){let $=this.process;if(this.process=null,!$||$.exitCode!==null){this.failPending(Error(`${this.processLabel} shutdown`));return}await new Promise((Z)=>{let Q=setTimeout(()=>{try{$.kill("SIGKILL")}catch{}Z()},300);$.once("exit",()=>{clearTimeout(Q),Z()});try{$.kill("SIGTERM")}catch{clearTimeout(Q),Z()}}),this.failPending(Error(`${this.processLabel} shutdown`))}onMessage($){if(!$)return;if($.type==="event"){if(typeof $.name==="string"&&$.name.length>0)this.options.onEvent?.({name:$.name,payload:$.payload});return}if($.type!=="response"||!$.id)return;let Z=this.clearPendingRequest($.id);if(!Z)return;if($.ok){Z.resolve($.result);return}Z.reject(Error($.error?.message||`${this.processLabel} call failed`))}failPending($){for(let[Z,Q]of this.pending.entries()){if(this.pending.delete(Z),Q.timeout)clearTimeout(Q.timeout);Q.reject($)}}}function TR($){return{...$,contributions:{tools:$.contributions?.tools??[],commands:$.contributions?.commands??[],rules:$.contributions?.rules??[],messageBuilders:$.contributions?.messageBuilders??[],providers:$.contributions?.providers??[],automationEventTypes:$.contributions?.automationEventTypes??[],mcpServers:$.contributions?.mcpServers??[],shortcuts:$.contributions?.shortcuts??[],flags:$.contributions?.flags??[]}}}function r6($){return($ instanceof Error?$.message:String($)).includes("Unknown sandbox plugin id:")}function OR(){return`@cline/cli-${process.platform==="win32"?"windows":process.platform}-${process.arch}`}function qR(){let $=process.env.CLINE_WRAPPER_PATH?.trim();if(!$)return;try{let Q=EG($).resolve(`${OR()}/package.json`),W=I8(mZ(Q),"extensions","plugin-sandbox-bootstrap.js");return a3(W)?W:void 0}catch{return}}function MR(){let $=process.execPath?.trim();if(!$)return;let Z=I8(mZ(mZ($)),"extensions","plugin-sandbox-bootstrap.js");return a3(Z)?Z:void 0}function RR(){let $=mZ(zR(import.meta.url)),Z=EG(import.meta.url),Q=[I8($,"plugin-sandbox-bootstrap.js"),I8($,"extensions","plugin-sandbox-bootstrap.js"),I8($,"agents","plugin-sandbox-bootstrap.js"),qR(),MR()];for(let X of Q.filter((Y)=>typeof Y==="string"))if(a3(X))return{file:X};let W=I8($,"plugin-sandbox-bootstrap.ts"),J="jiti";try{J=Z.resolve("jiti")}catch{}return{script:[`const createJiti = require(${JSON.stringify(J)});`,`const jiti = createJiti(${JSON.stringify(W)}, { cache: false, requireCache: false, esmResolve: true, interopDefault: false });`,`Promise.resolve(jiti.import(${JSON.stringify(W)}, {})).catch((error) => {`," console.error(error);"," process.exitCode = 1;","});"].join(`
|
|
474
|
-
`)}}var i3=
|
|
475
|
-
`).filter(Boolean);await Promise.allSettled(J.map((X)=>T2($,["update-ref","-d",X])))}catch{}}async function bG($,Z,Q){if(!$||Q.length===0)return;await Promise.allSettled(Q.map((W)=>T2($,["update-ref",`refs/cline/checkpoints/${Z}/${W.runCount}`,W.ref])))}function
|
|
476
|
-
`),W=[...$.appendMessages??[],...Z.appendMessages??[]];return{cancel:$.cancel===!0||Z.cancel===!0?!0:void 0,review:$.review===!0||Z.review===!0?!0:void 0,context:Q||void 0,overrideInput:Z.overrideInput!==void 0?Z.overrideInput:$.overrideInput,systemPrompt:Z.systemPrompt!==void 0?Z.systemPrompt:$.systemPrompt,appendMessages:W.length>0?W:void 0}}function
|
|
477
|
-
`).map((X)=>X.trim()).filter(Boolean).filter((X)=>X.startsWith("HOOK_CONTROL\t")).map((X)=>X.slice(13)),J=W.length>0?W[W.length-1]:Z;try{return{parsedJson:JSON.parse(J)}}catch(X){return{parseError:X instanceof Error?X.message:"Failed to parse hook stdout JSON"}}}async function
|
|
478
|
-
`,Y=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??VE(hG(),"hooks.jsonl");hG(Y),YE(Y,J,"utf8")};return{beforeRun:async(W)=>{let J=QJ(W,"");Q({...q0(J,Z),hookName:"agent_start",taskStart:{taskMetadata:{}}});return},beforeTool:async(W)=>{let J=mG(W);Q({...q0(J,Z),hookName:"tool_call",iteration:J.iteration,tool_call:{id:J.call.id,name:J.call.name,input:J.call.input},preToolUse:{toolName:J.call.name,parameters:rZ(J.call.input)}});return},afterTool:async(W)=>{let J=vG(W);Q({...q0(J,Z),hookName:"tool_result",iteration:J.iteration,tool_result:J.record,postToolUse:{toolName:J.record.name,parameters:rZ(J.record.input),result:typeof J.record.output==="string"?J.record.output:JSON.stringify(J.record.output),success:!J.record.error,executionTimeMs:J.record.durationMs}});return},afterRun:async({snapshot:W,result:J})=>{let X=w$(W);if(J.status==="completed"){Q({...q0(X,Z),hookName:"agent_end",iteration:J.iterations,turn:{outputText:J.outputText,status:J.status},taskComplete:{taskMetadata:{}}});return}if(J.status==="aborted"||ZJ(J.error?.message)){Q({...q0(X,Z),hookName:"agent_abort",reason:J.error?.message,taskCancel:{taskMetadata:{}}});return}if(J.error)Q({...q0(X,Z),hookName:"agent_error",iteration:J.iterations,error:{name:J.error.name,message:J.error.message,stack:J.error.stack}})},onEvent:async(W)=>{if(W.type!=="message-added"||W.message.role!=="user")return;let J=QJ({snapshot:W.snapshot},cG(W.message.content));Q({...q0(J,Z),hookName:"prompt_submit",userPromptSubmit:{prompt:J.userMessage,attachments:[]}})}}}function t6($){let Z=DE($.workspacePath);if(!Object.values(Z).some((G)=>G.length>0))return;let W=async(G,K)=>{let F=Z[K]??[];if(F.length===0)return;O2({commands:F,cwd:$.cwd,logger:$.logger,payload:K==="agent_resume"?{...q0(G,$),hookName:K,taskResume:{taskMetadata:{},previousState:{}}}:{...q0(G,$),hookName:K,taskStart:{taskMetadata:{}}}})},J=async(G)=>{let K=Z.prompt_submit??[];if(K.length>0)O2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...q0(G,$),hookName:"prompt_submit",userPromptSubmit:{prompt:G.userMessage,attachments:[]}}})},X=async(G)=>{let K=Z.tool_call??[];if(K.length===0)return;return LE({commands:K,cwd:$.cwd,logger:$.logger,timeoutMs:$.toolCallTimeoutMs??120000,payload:{...q0(G,$),hookName:"tool_call",iteration:G.iteration,tool_call:{id:G.call.id,name:G.call.name,input:G.call.input},preToolUse:{toolName:G.call.name,parameters:rZ(G.call.input)}}})},Y=async(G)=>{let K=Z.tool_result??[];if(K.length===0)return;O2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...q0(G,$),hookName:"tool_result",iteration:G.iteration,tool_result:G.record,postToolUse:{toolName:G.record.name,parameters:rZ(G.record.input),result:typeof G.record.output==="string"?G.record.output:JSON.stringify(G.record.output),success:!G.record.error,executionTimeMs:G.record.durationMs}}})},j=async(G)=>{let K=Z.agent_end??[];if(K.length===0)return;O2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...q0(G,$),hookName:"agent_end",iteration:G.iteration,turn:G.turn,taskComplete:{taskMetadata:{}}}})},V=async(G)=>{let K=Z.agent_error??[];if(K.length===0)return;O2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...q0(G,$),hookName:"agent_error",iteration:G.iteration,error:{name:G.error.name,message:G.error.message,stack:G.error.stack}}})},H=async(G)=>{if(ZJ(G.reason)){let F=Z.agent_abort??[];if(F.length>0)O2({commands:F,cwd:$.cwd,logger:$.logger,payload:{...q0(G,$),hookName:"agent_abort",reason:G.reason,taskCancel:{taskMetadata:{}}}})}let K=Z.session_shutdown??[];if(K.length===0)return;O2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...q0(G,$),hookName:"session_shutdown",reason:G.reason}})},B={};if((Z.agent_start?.length??0)>0||(Z.agent_resume?.length??0)>0||(Z.prompt_submit?.length??0)>0){if((Z.agent_start?.length??0)>0||(Z.agent_resume?.length??0)>0)B.beforeRun=async(G)=>{let K=process.env.CLINE_HOOK_AGENT_RESUME==="1"?"agent_resume":"agent_start";await W(w$(G.snapshot),K);return};if((Z.prompt_submit?.length??0)>0)B.onEvent=async(G)=>{if(G.type!=="message-added"||G.message.role!=="user")return;await J(QJ({snapshot:G.snapshot},cG(G.message.content)))}}if((Z.tool_call?.length??0)>0)B.beforeTool=async(G)=>{let K=await X(mG(G));return _E(K)};if((Z.tool_result?.length??0)>0)B.afterTool=async(G)=>{await Y(vG(G));return};if((Z.agent_end?.length??0)>0)B.afterRun=async({snapshot:G,result:K})=>{if(K.status!=="completed")return;await j({...w$(G),iteration:K.iterations,turn:{outputText:K.outputText,status:K.status}})};if((Z.agent_error?.length??0)>0||(Z.agent_abort?.length??0)>0||(Z.session_shutdown?.length??0)>0){let G=B.afterRun;B.afterRun=async(K)=>{await G?.(K);let{snapshot:F,result:A}=K;if(A.status==="aborted"||ZJ(A.error?.message)){await H({...w$(F),reason:A.error?.message});return}if(A.error)await V({...w$(F),iteration:A.iterations,error:A.error})}}return B}function u8($){return m8("core.hook_config_files",t6($))}function q2($,Z){let Q=$.map((W)=>W[Z]).filter((W)=>typeof W==="function");if(Q.length===0)return;return async(W)=>{let J;for(let X of Q){let Y=await X(W);if(!Y||typeof Y!=="object")continue;let j=Y;J={...J??{},...j,stop:J?.stop===!0||j.stop===!0?!0:j.stop,options:J?.options||j.options?{...J?.options??{},...j.options??{}}:void 0}}return J}}function M2($){let Z=$.filter((Q)=>Q!==void 0);if(Z.length===0)return;return{beforeRun:q2(Z,"beforeRun"),afterRun:q2(Z,"afterRun"),beforeModel:q2(Z,"beforeModel"),afterModel:q2(Z,"afterModel"),beforeTool:q2(Z,"beforeTool"),afterTool:q2(Z,"afterTool"),onEvent:q2(Z,"onEvent")}}var uG={};N(uG,{normalizeRuntimeCapabilities:()=>M0});function M0(...$){let Z,Q;for(let J of $){if(!J)continue;if(J.toolExecutors)Z={...Z??{},...J.toolExecutors};if(J.requestToolApproval)Q=J.requestToolApproval}let W=Z&&Object.keys(Z).length>0;if(!W&&!Q)return;return{...W?{toolExecutors:Z}:{},...Q?{requestToolApproval:Q}:{}}}var oG={};N(oG,{toProviderConfig:()=>l0,emptyStoredProviderSettings:()=>S$,StoredProviderSettingsSchema:()=>r8,StoredProviderSettingsEntrySchema:()=>fQ,ProviderSettingsSchemaTyped:()=>p8});import{z as P$}from"zod";var sG={};N(sG,{toProviderConfig:()=>l0,safeParseSettings:()=>AQ,safeCreateProviderConfig:()=>FJ,parseSettings:()=>FQ,normalizeProviderId:()=>l8,isBuiltInProviderId:()=>GJ,createProviderConfig:()=>KJ,SapSettingsSchema:()=>BQ,ReasoningSettingsSchema:()=>YQ,ProviderSettingsSchema:()=>C$,ProviderProtocolSchema:()=>WQ,ProviderIdSchema:()=>W5,ProviderClientSchema:()=>JQ,OcaSettingsSchema:()=>GQ,ModelCatalogSettingsSchema:()=>KQ,GcpSettingsSchema:()=>VQ,BUILT_IN_PROVIDER_IDS:()=>BJ,BUILT_IN_PROVIDER:()=>Q5,AzureSettingsSchema:()=>HQ,AwsSettingsSchema:()=>jQ,AuthSettingsSchema:()=>XQ});import*as d0 from"@cline/llms";import{z as w}from"zod";var aG={};N(aG,{resolveProviderConfig:()=>Z5,getProviderConfig:()=>QQ,getLiveModelsCatalog:()=>d8,clearPublicModelsCatalogCache:()=>uE,clearPrivateModelsCatalogCache:()=>HJ,clearLiveModelsCatalogCache:()=>VJ,OPENAI_COMPATIBLE_PROVIDERS:()=>$5,DEFAULT_MODELS_CATALOG_URL:()=>tZ});import*as s from"@cline/llms";function JJ($){if(!Array.isArray($))return[];return $.map((Z)=>{if(typeof Z==="string")return Z.trim();if(Z&&typeof Z==="object"){let Q=Z;for(let W of[Q.id,Q.name,Q.model])if(typeof W==="string"&&W.trim())return W.trim()}return""}).filter((Z)=>Z.length>0)}function zE($,Z){let Q=JJ($);if(Q.length>0)return Q;if(!$||typeof $!=="object")return[];let W=$,J=JJ(W.data??W.models);if(J.length>0)return J;if(W.models&&typeof W.models==="object"&&!Array.isArray(W.models)){let Y=Object.keys(W.models).filter((j)=>j.trim().length>0);if(Y.length>0)return Y}let X=W.providers?.[Z];if(X&&typeof X==="object"){let j=JJ(X.models??X);if(j.length>0)return j}return[]}async function iZ($,Z){let Q=await fetch($,{method:"GET"});if(!Q.ok)throw Error(`failed to fetch models from ${$}: HTTP ${Q.status}`);return zE(await Q.json(),Z)}function dG($){return $.replace(/\/+$/,"")}function nZ($,Z,Q){let W=Q?.trim();if(!W)return;let J=$?.trim();if(!J||!Z?.trim())return W;try{let X=new URL(W),Y=new URL(Z),j=new URL(J);if(X.origin!==Y.origin)return W;let V=dG(Y.pathname),H=dG(j.pathname);if(V&&X.pathname.startsWith(`${V}/`)){let B=X.pathname.slice(V.length);j.pathname=`${H}${B}`}else j.pathname=X.pathname;return j.search=X.search,j.hash=X.hash,j.toString()}catch{return W}}function TE($){return Object.fromEntries(Object.entries($).map(([Z,Q])=>[Z,{...Q}]))}function OE($){if($.baseUrl.length===0)return!1;switch($.client){case"openai-compatible":case"openai":case"openai-r1":case"fetch":return!0;default:return $.protocol==="openai-chat"}}var qE=Object.values(s.MODEL_COLLECTIONS_BY_PROVIDER_ID).map(($)=>({id:$.provider.id,baseUrl:$.provider.baseUrl??"",modelsSourceUrl:$.provider.modelsSourceUrl,modelId:$.provider.defaultModelId,knownModels:TE($.models),capabilities:$.provider.capabilities?[...$.provider.capabilities]:void 0,env:$.provider.env?[...$.provider.env]:void 0,client:$.provider.client,protocol:$.provider.protocol})),pG=Object.fromEntries(qE.map(($)=>[$.id,$]));function ME($){return pG[$]}function RE(){return Object.fromEntries(Object.entries(pG).filter(([,$])=>OE($)))}function rG($=[]){let Z=$.flatMap((Q)=>{switch(Q){case"reasoning":case"prompt-cache":case"tools":case"oauth":return[Q];default:return[]}});return Z.length>0?Z:void 0}var tZ="https://models.dev/api.json",EE=600000,iG=300000,NE=5000,oZ=new Map,e6=new Map,XJ=new Map,aZ=new Map;async function wE(){return s.getGeneratedProviderModels()}async function CE($,Z={},Q={},W={},J={},X={}){if($==="litellm")return s.sortModelsByReleaseDate(W);let Y=await wE(),j=s.resolveProviderModelCatalogKeys($),V=Object.assign({},...j.map((K)=>Y[K]??{})),H=Boolean(s.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl),B=Object.keys(J).length>0;if(H&&B)return s.sortModelsByReleaseDate({...J,...X});if($==="openai-codex")return s.sortModelsByReleaseDate({...Z,...s.filterOpenAICodexModels(Q),...J,...X});if($==="cline-pass"&&Object.keys(Q).length>0)return s.sortModelsByReleaseDate({...Q,...X});let G=s.sortModelsByReleaseDate({...V,...Z,...Q,...W,...J});if($==="cline")return s.sortModelsByReleaseDate({...s.preferCanonicalModelIds(G,s.VERCEL_OPENROUTER_MODEL_ID_ALIAS_RULES),...X});return s.sortModelsByReleaseDate({...G,...X})}function PE($,Z){let Q=s.resolveProviderModelCatalogKeys($);return Object.assign({},...Q.map((W)=>Z[W]??{}))}function eZ($){let Z=$?.trim();return Z&&Z.length>0?Z:""}function jJ($){let Z=$.apiKey?.trim()||$.accessToken?.trim();return Z&&Z.length>0?Z:void 0}function SE($){let Z=2166136261;for(let Q=0;Q<$.length;Q+=1)Z^=$.charCodeAt(Q),Z+=(Z<<1)+(Z<<4)+(Z<<7)+(Z<<8)+(Z<<24);return(Z>>>0).toString(16)}function bE($,Z){return`${$}:${eZ(Z.baseUrl)}:${SE(jJ(Z)??"")}`}async function $Q($,Z,Q=NE){let W=new AbortController,J=setTimeout(()=>W.abort(),Q);try{return await fetch($,{...Z,signal:W.signal})}finally{clearTimeout(J)}}function R2($,Z,Q){if(Q&&!$.includes(Z))$.push(Z)}function ZQ($,Z){let Q=["streaming","tools"];return R2(Q,"images",Boolean(Z.supportsImages)),R2(Q,"prompt-cache",Boolean(Z.supportsPromptCache)),R2(Q,"reasoning",Boolean(Z.supportsReasoning)),{id:$,name:Z.name??$,contextWindow:Z.contextWindow,maxInputTokens:Z.maxInputTokens,maxTokens:Z.maxTokens,capabilities:Q,releaseDate:Z.releaseDate,status:"active"}}async function yE($,Z){let Q=await $Q("https://inference.baseten.co/v1/models",{method:"GET",headers:{Authorization:`Bearer ${Z}`,"Content-Type":"application/json"}});if(!Q.ok)throw Error(`Baseten model refresh failed: HTTP ${Q.status}`);let J=(await Q.json())?.data??[],X={};for(let Y of J){let j=Y.id?.trim();if(!j)continue;if(j.includes("whisper")||j.includes("tts")||j.includes("embedding"))continue;let V=Y.supported_features??[];X[j]=ZQ(j,{name:j,contextWindow:Y.context_length,maxInputTokens:Y.context_length,maxTokens:Y.max_completion_tokens,supportsReasoning:V.includes("reasoning")||V.includes("reasoning_effort"),supportsImages:!1})}return X}function lG($){if(typeof $==="number")return Number.isFinite($)?$:void 0;if(typeof $==="string"){let Z=Number($);return Number.isFinite(Z)?Z:void 0}return}async function hE($,Z){let Q=await $Q("https://api.hicap.ai/v2/openai/models",{method:"GET",headers:{"api-key":Z}});if(!Q.ok)throw Error(`Hicap model refresh failed: HTTP ${Q.status}`);let J=(await Q.json())?.data??[],X={};for(let Y of J){let j=Y.id?.trim();if(!j)continue;X[j]=ZQ(j,{name:j,maxInputTokens:128000,supportsImages:!0,supportsPromptCache:!0})}return X}async function kE($,Z){let W=`${(eZ($.baseUrl)||"https://inference.poolside.ai/v1").replace(/\/+$/,"")}/models`,J=await $Q(W,{method:"GET",headers:{Authorization:`Bearer ${Z}`,accept:"application/json"}});if(!J.ok)throw Error(`Poolside model refresh failed: HTTP ${J.status}`);let Y=(await J.json())?.data??[],j={};for(let V of Y){let H=V.id?.trim();if(!H)continue;let B=V.supported_features??[],G=V.supported_sampling_parameters??[],K=V.input_modalities??[],F=["streaming"];R2(F,"tools",B.includes("tools")),R2(F,"reasoning",B.includes("reasoning")),R2(F,"temperature",G.includes("temperature")),R2(F,"images",K.includes("image"));let A={input:lG(V.pricing?.prompt),output:lG(V.pricing?.completion)};j[H]={id:H,name:V.name??H,description:V.description,contextWindow:V.context_length,maxInputTokens:V.context_length,maxTokens:V.max_completion_tokens,capabilities:F,pricing:A.input!==void 0||A.output!==void 0?A:void 0,status:"active"}}return j}function IE($){let Z=eZ($).replace(/\/+$/,"");if(!Z)return"http://localhost:4000";return Z.endsWith("/v1")?Z.slice(0,-3):Z}function xE($){return[`${$}/v1/model/info`,`${$}/model/info`]}async function gE($){let Z=(await $.text().catch(()=>"")).replace(/\s+/g," ").trim(),Q=500,W=Z?`: ${Z.slice(0,500)}${Z.length>500?"...":""}`:"";return`HTTP ${$.status}${W}`}async function mE($,Z){let Q=IE($.baseUrl),W=[],J=[["x-litellm-api-key",{"x-litellm-api-key":Z}],["Authorization",{Authorization:`Bearer ${Z}`}]];for(let X of xE(Q))for(let[Y,j]of J)try{let V=await $Q(X,{method:"GET",headers:{accept:"application/json",...j}});if(V.ok){let B=(await V.json())?.data??[],G={};for(let K of B){let F=K.model_name?.trim(),L=K.litellm_params?.model?.trim()||F;if(!L)continue;let f=K.model_info,D=ZQ(L,{name:F??L,maxTokens:f?.max_output_tokens??f?.max_tokens,maxInputTokens:f?.max_input_tokens??f?.max_tokens,supportsImages:f?.supports_vision,supportsPromptCache:f?.supports_prompt_caching,supportsReasoning:f?.supports_reasoning});if(G[L]=D,F)G[F]={...D,id:F,name:F}}return G}W.push(`${new URL(X).pathname} (${Y}): ${await gE(V)}`)}catch(V){let H=V instanceof Error?V.message:String(V);W.push(`${new URL(X).pathname} (${Y}): ${H}`)}throw Error(`LiteLLM model refresh failed. Attempts: ${W.join("; ")}`)}var nG={baseten:yE,hicap:hE,litellm:mE,poolside:kE},YJ=new Map,sZ=new Map;function vE($,Z){return`${$}:${eZ(Z.baseUrl)}`}async function cE($,Z,Q){let W=s.MODEL_COLLECTIONS_BY_PROVIDER_ID[$],J=nZ(Q.baseUrl,W?.provider.baseUrl,W?.provider.modelsSourceUrl);if(!J)return{};let X=Z?.cacheTtlMs??iG,Y=vE($,Q),j=Date.now(),V=YJ.get(Y);if(V&&V.expiresAt>j)return V.data;let H=sZ.get(Y);if(H)return H;let B=iZ(J,$).then((G)=>{let K=Object.fromEntries(G.map((F)=>[F,ZQ(F,{name:F})]));return YJ.set(Y,{data:K,expiresAt:j+X}),K}).finally(()=>{sZ.delete(Y)});return sZ.set(Y,B),B}function uE(){YJ.clear(),sZ.clear()}async function dE($,Z){let Q=jJ(Z);if(!Q)return{};let W=nG[$];if(!W)return{};return W(Z,Q)}function lE($,Z,Q){if(!Q)return!1;if(!nG[$])return!1;if(Z?.loadPrivateOnAuth===!1)return!1;return Boolean(jJ(Q))}async function pE($,Z,Q){let W=Z?.cacheTtlMs??iG,J=bE($,Q),X=Date.now(),Y=XJ.get(J);if(Y&&Y.expiresAt>X)return Y.data;let j=aZ.get(J);if(j)return j;let V=dE($,Q).then((H)=>{return XJ.set(J,{data:H,expiresAt:X+W}),H}).finally(()=>{aZ.delete(J)});return aZ.set(J,V),V}async function rE($){return s.fetchLiveProviderModels($,globalThis.fetch)}async function d8($={}){let Z=$.url??tZ,Q=$.cacheTtlMs??EE,W=Date.now(),J=oZ.get(Z);if(J&&J.expiresAt>W)return J.data;let X=e6.get(Z);if(X)return X;let Y=rE(Z).then((j)=>{return oZ.set(Z,{data:j,expiresAt:W+Q}),j}).finally(()=>{e6.delete(Z)});return e6.set(Z,Y),Y}function VJ($){if($){oZ.delete($),e6.delete($);return}oZ.clear(),e6.clear()}function HJ(){XJ.clear(),aZ.clear()}function iE($){return Object.fromEntries(Object.entries($).map(([Z,Q])=>[Z,{baseUrl:Q.baseUrl,modelId:Q.modelId,capabilities:rG(Q.capabilities)}]))}var $5=iE(RE());function QQ($){let Z=ME($);if(!Z)return;return{baseUrl:Z.baseUrl||void 0,modelId:Z.modelId,knownModels:Z.knownModels,capabilities:rG(Z.capabilities)}}async function Z5($,Z,Q){let W=QQ($);if(!W)return;try{let J=Z?.loadLatestOnInit?await d8(Z):void 0,X=J?PE($,J):{},Y=Q&&lE($,Z,Q)?await pE($,Z,Q):{},V=Boolean(s.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl)?Q??{providerId:$,modelId:W.modelId,baseUrl:W.baseUrl}:Q,H=V?await cE($,Z,V).catch(()=>({})):{},B=await CE($,W.knownModels,X,Y,H,Q?.knownModels);return{...W,knownModels:B}}catch(J){if(Z?.failOnError)throw J;if($==="litellm")return{...W,knownModels:{}};return W}}var Q5=d0.BUILT_IN_PROVIDER,BJ=d0.BUILT_IN_PROVIDER_IDS,GJ=d0.isBuiltInProviderId,l8=d0.normalizeProviderId,W5=w.string().min(1).regex(/^[a-z0-9][a-z0-9-]*$/i),WQ=w.enum(["anthropic","gemini","openai-chat","openai-responses","openai-r1","ai-sdk"]),JQ=w.enum(["anthropic","ai-sdk","ai-sdk-community","openai","openai-compatible","openai-r1","gemini","bedrock","custom","fetch","vertex"]),XQ=w.object({apiKey:w.string().optional(),accessToken:w.string().optional(),refreshToken:w.string().optional(),expiresAt:w.number().int().positive().optional(),accountId:w.string().optional()}),nE=w.enum(["none","low","medium","high","xhigh"]),YQ=w.object({enabled:w.boolean().optional(),effort:nE.optional(),budgetTokens:w.number().int().positive().optional()}),jQ=w.object({accessKey:w.string().optional(),secretKey:w.string().optional(),sessionToken:w.string().optional(),region:w.string().optional(),profile:w.string().optional(),authentication:w.enum(["iam","api-key","apikey","profile"]).optional(),usePromptCache:w.boolean().optional(),useCrossRegionInference:w.boolean().optional(),useGlobalInference:w.boolean().optional(),endpoint:w.string().url().optional(),customModelBaseId:w.string().optional()}),VQ=w.object({projectId:w.string().optional(),region:w.string().optional()}),HQ=w.object({apiVersion:w.string().optional(),useIdentity:w.boolean().optional()}),BQ=w.object({clientId:w.string().optional(),clientSecret:w.string().optional(),tokenUrl:w.string().url().optional(),resourceGroup:w.string().optional(),deploymentId:w.string().optional(),useOrchestrationMode:w.boolean().optional(),api:w.enum(["orchestration","foundation-models"]).optional(),defaultSettings:w.record(w.string(),w.unknown()).optional()}),GQ=w.object({mode:w.enum(["internal","external"]).optional(),usePromptCache:w.boolean().optional()}),KQ=w.object({loadLatestOnInit:w.boolean().optional(),loadPrivateOnAuth:w.boolean().optional(),url:w.string().url().optional(),cacheTtlMs:w.number().int().positive().optional(),failOnError:w.boolean().optional()}),C$=w.object({provider:W5,apiKey:w.string().optional(),auth:XQ.optional(),model:w.string().optional(),protocol:WQ.optional(),client:JQ.optional(),routingProviderId:W5.optional(),maxTokens:w.number().int().positive().optional(),contextWindow:w.number().int().positive().optional(),baseUrl:w.string().url().optional(),headers:w.record(w.string(),w.string()).optional(),timeout:w.number().int().positive().optional(),reasoning:YQ.optional(),aws:jQ.optional(),gcp:VQ.optional(),azure:HQ.optional(),sap:BQ.optional(),oca:GQ.optional(),region:w.string().optional(),apiLine:w.enum(["china","international"]).optional(),capabilities:w.array(w.enum(["reasoning","prompt-cache","streaming","tools","vision","computer-use","oauth","popular"])).optional(),modelCatalog:KQ.optional()});function FQ($){return C$.parse($)}function AQ($){return C$.safeParse($)}function aE($){return $.protocol==="openai-responses"||$.client==="openai"}function l0($,Z={}){let Q=$.provider,W=l8(Q),J=Z.includeKnownModels!==!1,X=$.reasoning?.effort||"none",Y=X==="none"?void 0:X,j=$5[W],V=Object.assign({},...d0.resolveProviderModelCatalogKeys(W).map((L)=>d0.getGeneratedModelsForProvider(L))),H=Object.keys(V)[0],B=U8(W,$),G=$.baseUrl??(W==="oca"?$.oca?.mode==="internal"?jZ:VZ:j?.baseUrl),K=$.routingProviderId??(aE($)&&W!==Q5.OPENAI_NATIVE?Q5.OPENAI_NATIVE:void 0),F=J?j?.knownModels??(Object.keys(V).length>0?V:void 0):void 0,A={providerId:Q,clientType:$.client,routingProviderId:K,modelId:$.model??j?.modelId??H??"default",...J?{knownModels:F}:{},apiKey:B,accessToken:$.auth?.accessToken,refreshToken:$.auth?.refreshToken,accountId:$.auth?.accountId,baseUrl:G,headers:$.headers,timeoutMs:$.timeout,maxOutputTokens:$.maxTokens,maxInputTokens:$.contextWindow,thinking:$.reasoning?.enabled,reasoningEffort:Y,thinkingBudgetTokens:$.reasoning?.budgetTokens,region:$.region??$.aws?.region??$.gcp?.region,apiLine:$.apiLine,useCrossRegionInference:$.aws?.useCrossRegionInference,useGlobalInference:$.aws?.useGlobalInference,aws:$.aws?{accessKey:$.aws.accessKey,secretKey:$.aws.secretKey,sessionToken:$.aws.sessionToken,authentication:$.aws.authentication,profile:$.aws.profile,usePromptCache:$.aws.usePromptCache,endpoint:$.aws.endpoint,customModelBaseId:$.aws.customModelBaseId}:void 0,gcp:$.gcp?{projectId:$.gcp.projectId,region:$.gcp.region}:void 0,azure:$.azure,sap:$.sap,oca:$.oca,capabilities:$.capabilities??j?.capabilities,modelCatalog:$.modelCatalog?{loadLatestOnInit:$.modelCatalog.loadLatestOnInit,loadPrivateOnAuth:$.modelCatalog.loadPrivateOnAuth,url:$.modelCatalog.url,cacheTtlMs:$.modelCatalog.cacheTtlMs,failOnError:$.modelCatalog.failOnError}:void 0};return Object.fromEntries(Object.entries(A).filter(([L,f])=>f!==void 0))}function KJ($){let Z=FQ($);return l0(Z)}function FJ($){let Z=AQ($);if(Z.success)return{success:!0,config:l0(Z.data)};return{success:!1,error:Z.error}}var p8=C$;var fQ=P$.object({settings:C$,updatedAt:P$.string().datetime(),tokenSource:P$.enum(["manual","oauth","migration"]).default("manual")}),r8=P$.object({version:P$.literal(1),lastUsedProvider:P$.string().min(1).optional(),providers:P$.record(P$.string(),fQ)});function S$(){return{version:1,providers:{}}}$1();var tG={};N(tG,{InMemoryWorkspaceManager:()=>i8});import{upsertWorkspaceInfo as sE,WorkspaceManifestSchema as AJ}from"@cline/shared";class i8{manifest;listeners=new Set;constructor($){this.manifest=AJ.parse($??{workspaces:{}})}async addWorkspacePath($){let Z=await $8($);return this.manifest=sE(this.manifest,Z),this.emit({type:"workspace_added",workspace:Z}),Z}async switchWorkspace($){let Z=w1($),Q=this.manifest.workspaces[Z];if(Q)return this.manifest=AJ.parse({...this.manifest,currentWorkspacePath:Z}),this.emit({type:"workspace_switched",workspace:Q}),Q;let W=await this.addWorkspacePath(Z);return this.manifest=AJ.parse({...this.manifest,currentWorkspacePath:W.rootPath}),this.emit({type:"workspace_switched",workspace:W}),W}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}getCurrentWorkspace(){let $=this.manifest.currentWorkspacePath;if(!$)return;return this.manifest.workspaces[$]}getWorkspace($){let Z=w1($);return this.manifest.workspaces[Z]}listWorkspaces(){return Object.values(this.manifest.workspaces)}getManifest(){return this.manifest}emit($){for(let Z of this.listeners)Z($)}}_0();import{createHash as oE}from"node:crypto";var eG=new Set,$K=new Set;function tE($){return oE("sha256").update($).digest("hex")}function eE($){if($.vcsTypes&&$.vcsTypes.length>0)return $.vcsTypes;return[$.vcsType==="git"?"git":"none"]}function ZK($){if(!$.telemetry)return;let Z=tE($.rootPath),Q=$.rootCount??1;if(!eG.has(Z))eG.add(Z),T9($.telemetry,{root_count:Q,vcs_types:eE($),init_duration_ms:$.durationMs,feature_flag_enabled:$.featureFlagEnabled??!0,is_remote_workspace:$.isRemoteWorkspace});if($.initError&&!$K.has(Z)){$K.add(Z);let W=Error($.initError.message);W.name=$.initError.errorType||"Error",O9($.telemetry,W,{fallback_to_single_root:!0,workspace_count:Q})}}function ZN($){return`${$.pluginName??$.pluginPath}: ${$.message}`}function QN($,Z,Q){if(Z.length>0)for(let X of Z)Q?.log(X.message,{severity:"warn"});if($.length===0)return;let W=$.slice(0,3).map(ZN).join("; "),J=$.length>3?`; and ${$.length-3} more`:"";Q?.log(`Some plugins failed to initialize. ${W}${J}. Use --verbose for more details.`,{severity:"warn"});for(let X of $)Q?.log(`Plugin initialization failed (${X.phase}) for ${X.pluginPath}`,{severity:"warn",stack:X.stack,pluginPath:X.pluginPath,pluginName:X.pluginName})}function WN($,Z){let Q=typeof $.thinking==="boolean",W=typeof $.reasoningEffort==="string";if(!Q&&!W)return Z;return{...Z??{},...Q?{enabled:$.thinking}:{},...W?{effort:$.reasoningEffort}:{}}}function QK($,Z){return $N($,Z)}function JN($){let Z=0;for(let Q of $??[]){if(Q.role!=="user")continue;if(("metadata"in Q&&Q.metadata&&typeof Q.metadata==="object"&&!Array.isArray(Q.metadata)?Q.metadata:void 0)?.kind==="recovery_notice")continue;Z+=1}return Z}function XN($){let Z={...$.storedHeaders??{},...$.configHeaders??{}},Q=$.accountId?.trim()||YN($.accessToken);if(Z.originator="cline",Z.session_id=$.sessionId,Z["User-Agent"]=`Cline/${process.env.npm_package_version||"1.0.0"}`,Q)Z["ChatGPT-Account-Id"]=Q;return Z}function YN($){let Z=$?.trim();if(!Z)return;let Q=E0(Z),W=Q?.["https://api.openai.com/auth"]?.chatgpt_account_id;if(typeof W==="string"&&W.length>0)return W;let J=Q?.organizations?.[0]?.id;if(typeof J==="string"&&J.length>0)return J;let X=Q?.chatgpt_account_id;if(typeof X==="string"&&X.length>0)return X;return}function jN($,Z,Q,W,J){let X=Q.getProviderSettings($.providerId),Y=W||X?.modelCatalog?{...W??{},...X?.modelCatalog??{}}:void 0,j=$.providerConfig?.providerId===$.providerId?$.providerConfig:void 0,V={...X??{},provider:$.providerId,model:$.modelId,apiKey:$.apiKey??X?.apiKey,baseUrl:$.baseUrl??X?.baseUrl,headers:$.providerId==="openai-codex"?XN({sessionId:Z,configHeaders:$.headers,storedHeaders:X?.headers,accountId:X?.auth?.accountId,accessToken:$.apiKey??X?.auth?.accessToken??X?.apiKey}):$.headers??X?.headers,reasoning:WN($,X?.reasoning),modelCatalog:Y},H={...l0(V),...j??{}};if($.knownModels)H.knownModels=$.knownModels;if($.extensionContext)H.extensionContext=$.extensionContext;let G=$.fetch??H.fetch??J;if(G)H.fetch=G;return H}async function WK($){let{input:Z,sessionId:Q,providerSettingsManager:W,defaultTelemetry:J,defaultCapabilities:X,defaultToolPolicies:Y,defaultFetch:j,onPluginEvent:V,onTeamEvent:H,createSubAgentLifecycleCallbacks:B,createSpawnTool:G,localRuntime:K,readSessionMetadata:F,writeSessionMetadata:A}=$,L=R$(Z.config),{modelCatalogDefaults:f,userInstructionService:D,configExtensions:U,onTeamRestored:T,...q}=K??{},z=Object.keys(q).length>0?q:void 0,{workspaceInfo:_,workspaceMetadata:E,durationMs:C,vcsType:y,initError:l}=await JW(L),o=z?.extensionContext,t={...o??{},workspace:{..._,...o?.workspace??{}},session:{...o?.session??{},sessionId:Q},logger:o?.logger??z?.logger,telemetry:o?.telemetry??z?.telemetry??J};ZK({telemetry:t.telemetry,rootPath:_.rootPath,workspaceInfo:_,rootCount:1,vcsType:y,durationMs:C,initError:l,featureFlagEnabled:!0});let Q0=u8({cwd:Z.config.cwd,workspacePath:L,rootSessionId:Q,logger:z?.logger,workspaceInfo:_}),e0=ZG(z?.hooks)?void 0:c8({rootSessionId:Q,workspacePath:L,workspaceInfo:_}),l$=M2([z?.hooks,e0]),r;if(QK(U,"plugins"))try{r=await g8({pluginPaths:z?.pluginPaths,workspacePath:L,cwd:Z.config.cwd,onEvent:V,providerId:Z.config.providerId,modelId:Z.config.modelId,workspaceInfo:_,session:t.session,client:t.client,user:t.user,logger:t.logger,telemetry:t.telemetry,automation:t.automation}),QN(r.failures,r.warnings,z?.logger)}catch(s2){let $W=s2 instanceof Error?s2.message:String(s2);z?.logger?.log?.(`plugin loading failed; continuing without plugins (${$W})`)}let P=b3(Q0?[Q0]:void 0,b3(z?.extensions,c9(r?.extensions))),B0=QK(U,"plugins")?n1(r?.pluginPaths??[]):void 0,G0={...Z.config,...z??{},sessionId:Q,hooks:l$,extensions:P,extensionContext:t,telemetry:t.telemetry},C0=jN(G0,Q,W,f,j),n2=M2([G0.hooks,G0.checkpoint?.enabled===!0?yG({cwd:G0.cwd,sessionId:Q,logger:G0.logger,createCheckpoint:G0.checkpoint?.createCheckpoint,initialRunCount:JN(Z.initialMessages),readSessionMetadata:F,writeSessionMetadata:A}):void 0]),R1={...G0,providerConfig:C0,workspaceMetadata:E,hooks:n2},H1=Z.toolPolicies??G0.toolPolicies??Y,C4=M0(X,Z.capabilities),a2=C4?.requestToolApproval,K9=C4?.toolExecutors,E1=B?.(R1),F9=new i8({currentWorkspacePath:_.rootPath,workspaces:{[_.rootPath]:_}});return{effectiveInput:Z,config:R1,providerConfig:C0,workspaceMetadata:E,workspaceInfo:_,extensions:P,hooks:n2,toolPolicies:H1,requestToolApproval:a2,pluginSandboxShutdown:r?.shutdown,runtimeBuilderInput:{config:R1,hooks:n2,extensions:P,onTeamEvent:H,createSpawnTool:G,onTeamRestored:T,onSubAgentEvent:E1?.onSubAgentEvent,onSubAgentStart:E1?.onSubAgentStart,onSubAgentEnd:E1?.onSubAgentEnd,userInstructionService:D,pluginSkillDirectories:B0,configExtensions:U,toolExecutors:K9,toolPolicies:H1,workspaceManager:F9,logger:R1.logger,telemetry:R1.telemetry,requestToolApproval:a2}}}import{existsSync as DQ,mkdirSync as VN,readdirSync as HN,rmdirSync as BN,rmSync as GN,unlinkSync as KN}from"node:fs";import{dirname as JK,join as UQ}from"node:path";function J0(){return new Date().toISOString()}function J5($){if(!$||!DQ($))return;try{KN($)}catch{}}function FN($){let Z=P8($);if(Z)return{rootSessionId:Z.rootSessionId,fileStem:`${Z.agentId}__${Z.teamTaskId}`};let Q=x6($);if(Q)return{rootSessionId:Q.rootSessionId,fileStem:Q.agentId};return{rootSessionId:$,fileStem:$}}class fJ{ensureSessionsDir;constructor($){this.ensureSessionsDir=$}sessionArtifactsDir($){return UQ(this.ensureSessionsDir(),$)}ensureSessionArtifactsDir($){let Z=this.sessionArtifactsDir($);if(!DQ(Z))VN(Z,{recursive:!0});return Z}sessionMessagesPath($){return UQ(this.sessionArtifactsDir($),`${$}.messages.json`)}sessionManifestPath($,Z=!1){let Q=Z?this.ensureSessionArtifactsDir($):this.sessionArtifactsDir($);return UQ(Q,`${$}.json`)}removeSessionDirIfEmpty($){let Z=this.sessionArtifactsDir($),Q=this.ensureSessionsDir();while(Z.startsWith(Q)&&Z!==Q){if(!DQ(Z)){Z=JK(Z);continue}try{if(HN(Z).length>0)break;BN(Z)}catch{break}Z=JK(Z)}}removeSessionDir($){this.removeDir(this.sessionArtifactsDir($))}removeDir($){if(!DQ($))return;try{GN($,{recursive:!0,force:!0})}catch{}}subagentArtifactPaths($,Z,Q){let{rootSessionId:W,fileStem:J}=FN($),X=this.sessionArtifactsDir(W);return{messagesPath:UQ(X,`${J}.messages.json`)}}}import{resolveDocumentsExtensionPath as AN}from"@cline/shared/storage";_0();function XK($,Z,Q,W,J){if(Q)M9($.telemetry,{ulid:Z,apiProvider:$.providerId,...J});else q9($.telemetry,{ulid:Z,apiProvider:$.providerId,...J});fN($.telemetry,{workspacePath:W})}function fN($,Z){let Q=AN("Hooks"),W=N$(Z.workspacePath),J=new Map;for(let X of W){let Y=X.hookEventName??"unknown",j=J.get(Y)??{global:0,workspace:0};if(X.path===Q||X.path.startsWith(`${Q}/`))j.global+=1;else j.workspace+=1;J.set(Y,j)}for(let[X,Y]of J.entries())y9($,X,Y.global,Y.workspace)}function YK($,Z){for(let Q of Z.mentions)S9($,Q,Z.matchedFiles.includes(Q)?1:0,"file",!Z.matchedFiles.includes(Q));for(let Q of Z.matchedFiles)C9($,"file",Q.length);for(let Q of Z.ignoredMentions)P9($,"file","not_found",Q)}var YU={};N(YU,{ProviderSettingsManager:()=>q1});import{chmodSync as KU,existsSync as RY,mkdirSync as xI,readFileSync as gI,writeFileSync as mI}from"node:fs";import{basename as FU,dirname as EY}from"node:path";import{resolveProviderSettingsPath as vI}from"@cline/shared/storage";var M={};N(M,{writeHubDiscovery:()=>p9,writeGlobalSettings:()=>B1,withHubStartupLock:()=>r9,verifyHubConnection:()=>A1,updateMcpSettingsFileSync:()=>j1,updateMcpSettingsFile:()=>t8,updateMcpServerOAuthStateAsync:()=>O5,updateMcpServerOAuthState:()=>P2,updateLocalProvider:()=>y7,uninstallPlugin:()=>a5,uninstallMarketplaceSkill:()=>A7,uninstallMarketplacePlugin:()=>f7,uninstallMarketplaceMcpServerFromSettings:()=>K7,uninstallMarketplaceEntry:()=>dX,truncateNotificationBody:()=>J9,truncateCommandOutput:()=>Y2,toggleDisabledTool:()=>m9,toTeamProgressLifecycleEvent:()=>H4,toProviderConfig:()=>l0,toHubStatusUrl:()=>OW,toHubHealthUrl:()=>i9,toHookConfigFileName:()=>o6,syncPluginMcpServersToSettings:()=>i5,summarizeUsageFromMessages:()=>b8,stopLocalHubServerGracefully:()=>hW,startLocalOAuthServer:()=>J1,startHubWebSocketServer:()=>j9,startHubServer:()=>HU,startClineDeviceAuth:()=>lW,splitCoreSessionConfig:()=>i4,spawnDetachedHubServerWithRetry:()=>H8,spawnDetachedHubServer:()=>wW,setTelemetryOptOutGlobally:()=>yj,setMcpServerDisabled:()=>w2,setDisabledTools:()=>fW,setDisabledPlugin:()=>cj,setCompactionStrategyGlobally:()=>xj,setAutoUpdateEnabledGlobally:()=>kj,sendHubCommand:()=>_V,saveProviderOAuthCredentials:()=>W2,saveLocalProviderSettings:()=>WY,saveLocalProviderOAuthCredentials:()=>jY,sanitizeSessionToken:()=>D2,safeParseSettings:()=>AQ,safeCreateProviderConfig:()=>FJ,runSubprocessEvent:()=>U4,runHook:()=>L4,reviveTeamStateDates:()=>SZ,restartLocalHubIfIdleAfterStartupTimeout:()=>t9,resolveWorkspaceHubOwnerContext:()=>QV,resolveWorkflowsConfigSearchPaths:()=>f5,resolveSkillsConfigSearchPaths:()=>F5,resolveSharedHubOwnerContext:()=>Q1,resolveSessionBackend:()=>KX,resolveRulesConfigSearchPaths:()=>A5,resolveProviderConfig:()=>Z5,resolveProviderApiKeyFromSettings:()=>sW,resolveProductionHubOwnerContext:()=>F1,resolvePluginSkillDirectoriesFromPaths:()=>n1,resolvePluginConfigSearchPaths:()=>i6,resolveMcpServerRegistrations:()=>p0,resolveMarketplaceMcpServerName:()=>o5,resolveLocalClineAuthToken:()=>HY,resolveHubUrl:()=>kW,resolveHubOwnerContext:()=>x1,resolveHubEndpointOptions:()=>K1,resolveHubBuildId:()=>l9,resolveHooksConfigSearchPaths:()=>a6,resolveDisabledToolNames:()=>G1,resolveDisabledPluginPaths:()=>u4,resolveDefaultMcpSettingsPath:()=>Z0,resolveDefaultHubPort:()=>V8,resolveDefaultHubPathname:()=>NW,resolveDefaultHubHost:()=>EW,resolveCoreSelectedToolIds:()=>yZ,resolveCoreDistinctId:()=>P0,resolveCompatibleLocalHubUrl:()=>o4,resolveClineDir:()=>tj,resolveClineDataDir:()=>o$,resolveAndLoadAgentPlugins:()=>g8,resolveAgentPluginPaths:()=>i1,requestHubShutdown:()=>s4,requestDesktopToolApproval:()=>NX,removePluginMcpServersFromSettings:()=>n5,rememberRecoverableLocalHubUrl:()=>B$,registerRemoteConfigSessionBlobUpload:()=>W7,registerMcpServersFromSettingsFile:()=>S2,registerDisposable:()=>yI,refreshProviderModelsFromSource:()=>JY,refreshOpenAICodexToken:()=>YZ,refreshOcaToken:()=>BZ,refreshClineToken:()=>JZ,readSessionCheckpointHistory:()=>I2,readRemoteConfigSessionBlobUploadMetadata:()=>LX,readHubDiscovery:()=>K0,readGlobalSettings:()=>z0,readCompactionStrategyGlobally:()=>Ij,readBearerToken:()=>l7,probeHubServer:()=>g1,probeHubConnection:()=>LV,prewarmFileIndex:()=>TZ,prewarmDetachedHubServer:()=>a9,prepareRemoteConfigCoreIntegration:()=>zX,parseWorkflowConfigFromMarkdown:()=>K5,parseUserCommandEnvelope:()=>bI,parseSkillConfigFromMarkdown:()=>B5,parseSettings:()=>FQ,parseRuleConfigFromMarkdown:()=>G5,parsePluginSource:()=>M7,parseMcpInstallArgs:()=>r5,parseHookEventPayload:()=>D4,parseConfiguredAgentConfig:()=>I5,normalizeWorkspacePath:()=>w1,normalizeUserInput:()=>SI,normalizeSdkError:()=>PI,normalizeRuntimeCapabilities:()=>M0,normalizeProviderId:()=>l8,normalizeOAuthProvider:()=>XY,normalizeHubWebSocketUrl:()=>G$,noopBasicLogger:()=>CI,migrateLegacyProviderSettings:()=>Q9,mergeRulesForSystemPrompt:()=>e2,mergeAgentHooks:()=>M2,marketplaceEntryKey:()=>uX,makeTeamTaskSubSessionId:()=>I6,makeSubSessionId:()=>C8,loginOpenAICodex:()=>$6,loginOcaOAuth:()=>W6,loginLocalProvider:()=>YY,loginClineOAuth:()=>t4,loginAndSaveProviderOAuthCredentials:()=>X6,loginAndSaveLocalProviderOAuthCredentials:()=>VY,loadOpenTelemetryAdapter:()=>YI,loadMcpSettingsFile:()=>N2,loadLlmsConfigFromFile:()=>TY,loadConfiguredAgentConfigs:()=>Y4,loadAgentPluginsFromPathsWithDiagnostics:()=>z2,loadAgentPluginsFromPaths:()=>gZ,loadAgentPluginFromPath:()=>p6,listSessionHistoryFromBackend:()=>rJ,listPluginToolsWithDiagnostics:()=>xQ,listPluginTools:()=>R5,listMcpServerOAuthStatuses:()=>q5,listLocalProviders:()=>ZY,listHookConfigFiles:()=>N$,isToolDisabledGlobally:()=>gj,isTelemetryOptedOutGlobally:()=>g9,isSessionNotFoundError:()=>I1,isRuleEnabled:()=>f9,isPluginDisabledGlobally:()=>vj,isOfficialPluginSlug:()=>q7,isOAuthProvider:()=>Q2,isMarketplaceSkillInstalled:()=>F7,isLocalHubOrigin:()=>MY,isLocalHubHostName:()=>p7,isHubReconnectableTransportError:()=>bW,isHubCommandTimeoutError:()=>o9,isDiscoveryFilePresent:()=>$V,isClineOrgIndividualInferenceSubscriptionMessage:()=>UI,isClineOrgIndividualInferenceSubscriptionError:()=>fI,isClineNotSubscribedMessage:()=>AI,isClineNotSubscribedError:()=>FI,isClineAccountActionRequest:()=>LQ,isBuiltInProviderId:()=>GJ,isAutoUpdateEnabledGlobally:()=>hj,installPlugin:()=>aX,installMcpServer:()=>wX,identifyAccount:()=>b1,hasMcpSettingsFile:()=>s1,getValidOpenAICodexCredentials:()=>Z6,getValidOcaCredentials:()=>J6,getValidClineCredentials:()=>e4,getProviderOAuthCredentialsFromSettings:()=>Y6,getProviderConfigFields:()=>BY,getProviderConfig:()=>QQ,getProviderAuthStorageId:()=>aW,getProviderAuthHandler:()=>j0,getPersistedProviderApiKey:()=>U8,getMcpServerOAuthState:()=>C2,getMarketplaceSkillCandidates:()=>t5,getLocalProviderModels:()=>QY,getLiveModelsCatalog:()=>d8,getGlobalMarketplaceSkillPaths:()=>e5,getFileIndex:()=>d1,getCurrentContextSize:()=>I3,getCoreHeadlessToolNames:()=>k6,getCoreDefaultEnabledToolIds:()=>bZ,getCoreBuiltinToolCatalog:()=>f2,getCoreAcpToolNames:()=>hZ,getClinePassSubscriptionUrl:()=>KI,getClineOrgIndividualInferenceSubscriptionMessage:()=>BI,getClineNotSubscribedMessage:()=>GI,getClineDefaultSystemPrompt:()=>DI,generateWorkspaceInfoWithDiagnostics:()=>S4,generateWorkspaceInfo:()=>$8,formatRulesForSystemPrompt:()=>t2,formatProviderOAuthApiKey:()=>oW,formatDisplayUserInput:()=>wI,findInstalledGlobalMarketplaceSkillName:()=>$9,findCheckpointForRun:()=>A4,filterExtensionToolRegistrations:()=>c9,filterDisabledTools:()=>y1,filterDisabledPluginPaths:()=>v9,fetchClineRecommendedModels:()=>_Y,executeClineAccountAction:()=>_Q,ensureHubWebSocketServer:()=>r7,ensureHubServer:()=>BU,ensureDetachedHubServer:()=>VV,ensureCustomProvidersLoaded:()=>P7,ensureCompatibleLocalHubUrl:()=>$2,enrichPromptWithMentions:()=>T8,emptyWorkspaceManifest:()=>RI,emptyStoredProviderSettings:()=>S$,discoverPluginModulePaths:()=>n6,disablePluginMcpServersInSettings:()=>bX,deriveSubsessionStatus:()=>g6,deleteLocalProvider:()=>h7,defineLlmsConfig:()=>zY,createWorkflowsConfigDefinition:()=>L5,createUserInstructionConfigService:()=>b$,createToolPoliciesWithPreset:()=>qZ,createTool:()=>MI,createTeamName:()=>Y7,createSubprocessHooks:()=>eQ,createSpawnAgentTool:()=>q$,createSkillsConfigDefinition:()=>U5,createShellTool:()=>M6,createShellExecutor:()=>j2,createSessionHost:()=>K4,createRuntimeHost:()=>K4,createRulesConfigDefinition:()=>D5,createRemoteConfigSessionMessagesArtifactUploader:()=>_X,createProviderConfig:()=>KJ,createOpenTelemetryTelemetryService:()=>r4,createOAuthClientCallbacks:()=>n8,createMcpTools:()=>Q4,createLocalHubScheduleRuntimeHandlers:()=>VU,createLlmsSdk:()=>qY,createInitialAccumulatedUsage:()=>D0,createInMemoryHubOwnerContext:()=>ej,createHubServerUrl:()=>Z1,createHubAuthToken:()=>d9,createHookConfigFileHooks:()=>t6,createHookConfigFileExtension:()=>u8,createHookAuditHooks:()=>c8,createDisabledMcpToolPolicy:()=>M5,createDisabledMcpToolPolicies:()=>IQ,createDelegatedAgentConfigProvider:()=>T$,createDelegatedAgent:()=>O$,createDefaultToolsWithPreset:()=>MZ,createDefaultTools:()=>D$,createDefaultShellExecutor:()=>P6,createDefaultMcpServerClientFactory:()=>$4,createDefaultExecutors:()=>O8,createCoreSettingsService:()=>y2,createCoreSessionSnapshot:()=>U1,createContributionRegistry:()=>qI,createContextCompactionPrepareTurn:()=>F6,createConfiguredTelemetryService:()=>h1,createConfiguredTelemetryHandle:()=>j8,createConfiguredAgentTools:()=>j4,createClineTelemetryServiceMetadata:()=>OI,createClineTelemetryServiceConfig:()=>TI,createCheckpointComparePlan:()=>aQ,createBuiltinTools:()=>U2,createAgentTeamsTools:()=>A2,createAgentRuntime:()=>II,createAgentHooksExtension:()=>m8,connectToHub:()=>e9,completeClineDeviceAuth:()=>pW,compareCheckpointToWorkspace:()=>d5,collectPluginMcpOAuthCandidates:()=>R7,clearPrivateModelsCatalogCache:()=>HJ,clearLiveModelsCatalogCache:()=>VJ,clearHubDiscovery:()=>S0,captureWorkspacePathResolved:()=>Nj,captureWorkspaceInitialized:()=>T9,captureWorkspaceInitError:()=>O9,captureToolUsage:()=>W8,captureTokenUsage:()=>R9,captureTaskRestarted:()=>M9,captureTaskCreated:()=>q9,captureTaskCompleted:()=>g4,captureSubagentExecution:()=>v4,captureSkillUsed:()=>N9,captureSdkError:()=>zI,captureProviderConfigured:()=>wj,captureProviderApiError:()=>m4,captureModeSwitch:()=>E9,captureMentionUsed:()=>C9,captureMentionSearchResults:()=>S9,captureMentionFailed:()=>P9,captureHookDiscovery:()=>y9,captureExtensionActivated:()=>Ej,captureDiffEditFailure:()=>w9,captureConversationTurnEvent:()=>Q8,captureCompactionSkipped:()=>k9,captureCompactionExecuted:()=>h9,captureAuthSucceeded:()=>P1,captureAuthStarted:()=>C1,captureAuthLoggedOut:()=>V$,captureAuthFailed:()=>S1,captureAgentUnexpectedReasoningTokens:()=>Rj,captureAgentTeamCreated:()=>b9,captureAgentCreated:()=>H$,buildWorkspaceMetadata:()=>b4,buildTeamProgressSummary:()=>V4,buildSdkErrorProperties:()=>LI,buildRemoteConfigSessionBlobUploadMetadata:()=>Z7,buildMcpInstallTransport:()=>j7,buildDelegatedAgentConfig:()=>K2,buildConfiguredAgentToolName:()=>x5,buildConfiguredAgentToolDescriptors:()=>g5,buildCheckpointWorkspaceDiff:()=>sQ,bootstrapAgentTeams:()=>w8,authorizeMcpServerOAuth:()=>bQ,addLocalProvider:()=>$Y,accumulateUsageTotals:()=>f0,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>H5,UnifiedConfigFileWatcher:()=>E2,ToolPresets:()=>u0,TelemetryService:()=>X8,TelemetryLoggerSink:()=>p4,TEAM_TOOL_NAMES:()=>N8,SubprocessSandbox:()=>k8,StructuredCommandInputSchema:()=>J2,StoredProviderSettingsSchema:()=>r8,StoredProviderSettingsEntrySchema:()=>fQ,SqliteTeamStore:()=>c2,SqliteSessionStore:()=>L1,SessionVersioningService:()=>c$,SessionVersioningError:()=>k0,SessionSource:()=>T0,SessionNotFoundError:()=>k1,SapSettingsSchema:()=>BQ,SKILLS_CONFIG_DIRECTORY_NAME:()=>V5,SESSION_STATUSES:()=>m6,SESSION_NOT_FOUND_ERROR_CODE:()=>s$,SDK_ERROR_TELEMETRY_EVENT:()=>hI,RpcClineAccountService:()=>Y5,RemoteRuntimeHost:()=>X4,ReasoningSettingsSchema:()=>YQ,RULES_CONFIG_DIRECTORY_NAME:()=>EQ,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY:()=>Q7,ProviderSettingsSchema:()=>C$,ProviderSettingsManager:()=>q1,ProviderProtocolSchema:()=>WQ,ProviderIdSchema:()=>W5,ProviderClientSchema:()=>JQ,OpenTelemetryProvider:()=>Y8,OcaSettingsSchema:()=>GQ,OPENAI_COMPATIBLE_PROVIDERS:()=>$5,NodeHubClient:()=>W1,NoOpFeatureFlagsProvider:()=>g2,NativeHubTransportAdapter:()=>Y9,ModelCatalogSettingsSchema:()=>KQ,McpSettingsUpdateSkippedError:()=>o8,McpSettingsMutatorPurityError:()=>y$,McpSettingsLockTimeoutError:()=>h$,MAX_COMMAND_OUTPUT_CHARS:()=>c1,LocalRuntimeHost:()=>T1,Llms:()=>jI,InMemoryWorkspaceManager:()=>i8,InMemoryMcpManager:()=>b2,HubUIClient:()=>gW,HubTransportError:()=>R0,HubSessionClient:()=>xW,HubServerTransport:()=>w4,HubScheduleService:()=>Z8,HubScheduleCommandService:()=>o2,HubRuntimeHost:()=>o1,HubCommandError:()=>B8,HookEventPayloadSchema:()=>tQ,HookEventNameSchema:()=>oQ,HookConfigFileName:()=>v8,HOOK_CONFIG_FILE_EVENT_MAP:()=>s6,HOOKS_CONFIG_DIRECTORY_NAME:()=>lZ,GlobalSettingsSchema:()=>c4,GcpSettingsSchema:()=>VQ,FileTeamPersistenceStore:()=>x7,FeatureFlagsService:()=>x2,FeatureFlagDefaultValue:()=>NI,FEATURE_FLAGS:()=>EI,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>d7,DefaultToolNames:()=>U0,DefaultRuntimeBuilder:()=>T4,DefaultLlmsSdk:()=>W9,DEFAULT_MODELS_CATALOG_URL:()=>tZ,DEFAULT_HUB_PORT:()=>MW,DEFAULT_HUB_PATHNAME:()=>RW,DEFAULT_HUB_HOST:()=>qW,CoreSettingsService:()=>k$,CoreSessionService:()=>z1,ContributionRegistry:()=>_I,ClineOrgIndividualInferenceSubscriptionError:()=>HI,ClineNotSubscribedError:()=>VI,ClineCore:()=>l5,ClineAccountService:()=>X5,ChatViewStateSchema:()=>UY,ChatSummarySchema:()=>u7,ChatSessionStatusSchema:()=>m7,ChatSessionConfigSchema:()=>g7,ChatMessageSchema:()=>c7,ChatMessageRoleSchema:()=>v7,CORE_TELEMETRY_EVENTS:()=>m,CORE_BUILD_VERSION:()=>DY,BrowserWebSocketHubAdapter:()=>X9,BUILT_IN_PROVIDER_IDS:()=>BJ,BUILT_IN_PROVIDER:()=>Q5,AzureSettingsSchema:()=>HQ,AwsSettingsSchema:()=>jQ,AuthSettingsSchema:()=>XQ,AgentTeamsRuntime:()=>k2,AgentTeam:()=>G4,Agent:()=>kI,ALL_DEFAULT_TOOL_NAMES:()=>X$});R(M,po);import*as jI from"@cline/llms";import{ClineNotSubscribedError as VI,ClineOrgIndividualInferenceSubscriptionError as HI,getClineOrgIndividualInferenceSubscriptionMessage as BI,getClineNotSubscribedMessage as GI,getClinePassSubscriptionUrl as KI,isClineNotSubscribedError as FI,isClineNotSubscribedMessage as AI,isClineOrgIndividualInferenceSubscriptionError as fI,isClineOrgIndividualInferenceSubscriptionMessage as UI}from"@cline/llms";import{buildClineSystemPrompt as DI,buildSdkErrorProperties as LI,ContributionRegistry as _I,captureSdkError as zI,createClineTelemetryServiceConfig as TI,createClineTelemetryServiceMetadata as OI,createContributionRegistry as qI,createTool as MI,emptyWorkspaceManifest as RI,FEATURE_FLAGS as EI,FeatureFlagDefaultValue as NI,formatDisplayUserInput as wI,noopBasicLogger as CI,normalizeSdkError as PI,normalizeUserInput as SI,parseUserCommandEnvelope as bI,registerDisposable as yI,SDK_ERROR_TELEMETRY_EVENT as hI}from"@cline/shared";import"@cline/shared/storage";var VK={};N(VK,{isClineAccountActionRequest:()=>LQ,executeClineAccountAction:()=>_Q,RpcClineAccountService:()=>Y5,ClineAccountService:()=>X5});function UN($){if(typeof $!=="object"||$===null||!("error"in $))return;let Z=$.error;return typeof Z==="string"&&Z.trim()?Z:void 0}function jK($,Z,Q){let W=UN(Q);if(W)return W;let J=Z.trim();if(J){let X=J.length>200?`${J.slice(0,200)}...`:J;return`Cline account request failed with status ${$}: ${X}`}return`Cline account request failed with status ${$}`}class X5{apiBaseUrl;getAuthTokenFn;getCurrentUserIdFn;getOrganizationMemberIdFn;getHeadersFn;requestTimeoutMs;fetchImpl;constructor($){let Z=$.apiBaseUrl.trim();if(!Z)throw Error("apiBaseUrl is required");this.apiBaseUrl=Z,this.getAuthTokenFn=$.getAuthToken,this.getCurrentUserIdFn=$.getCurrentUserId,this.getOrganizationMemberIdFn=$.getOrganizationMemberId,this.getHeadersFn=$.getHeaders,this.requestTimeoutMs=$.requestTimeoutMs??30000,this.fetchImpl=$.fetchImpl??fetch}async fetchMe(){return this.request("/api/v1/users/me")}async fetchRemoteConfig(){return this.request("/api/v1/users/me/remote-config")}async fetchFeaturebaseToken(){try{return await this.request("/api/v1/users/me/featurebase-token")}catch{return}}async fetchBalance($){let Z=await this.resolveUserId($);return this.request(`/api/v1/users/${encodeURIComponent(Z)}/balance`)}async fetchUsageTransactions($){let Z=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(Z)}/usages`)).items??[]}async fetchPaymentTransactions($){let Z=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(Z)}/payments`)).paymentTransactions??[]}async fetchUserOrganizations(){return(await this.fetchMe()).organizations??[]}async fetchAvailableSubscriptionPlans($){let Z=new URL("/api/v1/plans",this.apiBaseUrl);if($?.type)Z.searchParams.set("type",$.type);return this.request(`${Z.pathname}${Z.search}`)}async fetchCurrentUserPlan(){return this.request("/api/v1/users/me/plan")}async fetchOrganization($){let Z=$.trim();if(!Z)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(Z)}`)}async fetchOrganizationBalance($){let Z=$.trim();if(!Z)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(Z)}/balance`)}async fetchOrganizationUsageTransactions($){let Z=$.organizationId.trim();if(!Z)throw Error("organizationId is required");let Q=await this.resolveOrganizationMemberId(Z,$.memberId);return(await this.request(`/api/v1/organizations/${encodeURIComponent(Z)}/members/${encodeURIComponent(Q)}/usages`)).items??[]}async switchAccount($){await this.request("/api/v1/users/active-account",{method:"PUT",body:{organizationId:$?.trim()||null},expectNoContent:!0})}async resolveUserId($){let Z=$?.trim();if(Z)return Z;let W=(this.getCurrentUserIdFn?await this.getCurrentUserIdFn():void 0)?.trim();if(W)return W;let J=await this.fetchMe();if(!J.id?.trim())throw Error("Unable to resolve current user id");return J.id}async resolveOrganizationMemberId($,Z){let Q=Z?.trim();if(Q)return Q;let J=(this.getOrganizationMemberIdFn?await this.getOrganizationMemberIdFn($):void 0)?.trim();if(J)return J;let Y=(await this.fetchUserOrganizations()).find((j)=>j.organizationId===$)?.memberId;if(!Y?.trim())throw Error(`Unable to resolve memberId for organization ${$}`);return Y}async request($,Z){let Q=(await this.getAuthTokenFn())?.trim();if(!Q)throw Error("No Cline account auth token found");let W=this.getHeadersFn?await this.getHeadersFn():{},J=new AbortController,X=setTimeout(()=>J.abort(),this.requestTimeoutMs);try{let Y=await this.fetchImpl(new URL($,this.apiBaseUrl),{method:Z?.method??"GET",headers:{Authorization:`Bearer ${Q}`,"Content-Type":"application/json",...W??{}},body:Z?.body!==void 0?JSON.stringify(Z.body):void 0,signal:J.signal});if(Y.status===204||Z?.expectNoContent){if(!Y.ok)throw Error(`Cline account request failed with status ${Y.status}`);return}let j=await Y.text(),V;if(j.trim())try{V=JSON.parse(j)}catch{if(!Y.ok)throw Error(jK(Y.status,j,void 0));throw Error("Cline account response was not valid JSON")}if(!Y.ok)throw Error(jK(Y.status,j,V));if(typeof V==="object"&&V!==null){let H=V;if(typeof H.success==="boolean"){if(!H.success)throw Error(H.error||"Cline account request failed");return H.data}}if(V===void 0||V===null)throw Error("Cline account response payload was empty");return V}finally{clearTimeout(X)}}}function LQ($){return $.action==="clineAccount"}async function _Q($,Z){switch($.operation){case"fetchMe":return Z.fetchMe();case"fetchBalance":return Z.fetchBalance($.userId);case"fetchUsageTransactions":return Z.fetchUsageTransactions($.userId);case"fetchPaymentTransactions":return Z.fetchPaymentTransactions($.userId);case"fetchUserOrganizations":return Z.fetchUserOrganizations();case"fetchOrganizationBalance":return Z.fetchOrganizationBalance($.organizationId);case"fetchOrganizationUsageTransactions":return Z.fetchOrganizationUsageTransactions({organizationId:$.organizationId,memberId:$.memberId});case"switchAccount":return await Z.switchAccount($.organizationId),{updated:!0};case"fetchFeaturebaseToken":return Z.fetchFeaturebaseToken?.();default:throw Error(`Unsupported Cline account operation: ${String($)}`)}}class Y5{executor;constructor($){this.executor=$}async fetchMe(){return this.request({action:"clineAccount",operation:"fetchMe"})}async fetchBalance($){return this.request({action:"clineAccount",operation:"fetchBalance",...$?.trim()?{userId:$.trim()}:{}})}async fetchUsageTransactions($){return this.request({action:"clineAccount",operation:"fetchUsageTransactions",...$?.trim()?{userId:$.trim()}:{}})}async fetchPaymentTransactions($){return this.request({action:"clineAccount",operation:"fetchPaymentTransactions",...$?.trim()?{userId:$.trim()}:{}})}async fetchUserOrganizations(){return this.request({action:"clineAccount",operation:"fetchUserOrganizations"})}async fetchOrganizationBalance($){let Z=$.trim();if(!Z)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationBalance",organizationId:Z})}async fetchOrganizationUsageTransactions($){let Z=$.organizationId.trim();if(!Z)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationUsageTransactions",organizationId:Z,...$.memberId?.trim()?{memberId:$.memberId.trim()}:{}})}async switchAccount($){await this.request({action:"clineAccount",operation:"switchAccount",organizationId:$?.trim()||null})}async fetchFeaturebaseToken(){return this.request({action:"clineAccount",operation:"fetchFeaturebaseToken"})}async request($){return(await this.executor.runProviderAction($)).result}}var HK={};N(HK,{createOAuthClientCallbacks:()=>n8});function n8($){return{onAuth:({url:Z,instructions:Q})=>{if($.onOutput?.(Q??"Complete sign-in in your browser."),$.openUrl)try{Promise.resolve($.openUrl(Z)).catch((W)=>{$.onOpenUrlError?.({url:Z,error:W})})}catch(W){$.onOpenUrlError?.({url:Z,error:W})}$.onOutput?.(Z)},onPrompt:$.onPrompt,onServerListening:$.onServerListening,onServerClose:$.onServerClose}}var SA={};N(SA,{ClineCore:()=>l5});function BK($){if($===!0)return{};if(!$)return;return $}function GK($){if($==="user")return"global";return $}class UJ{getService;constructor($){this.getService=$}async start(){await this.getService().start()}async stop(){await this.getService().stop()}async reconcileNow(){await this.getService().reconcileNow()}ingestEvent($){let Z=this.getService().ingestEvent($);return{event:Z.event,duplicate:Z.duplicate,matchedSpecIds:Z.matchedSpecs.map((Q)=>Q.specId),queuedRuns:Z.queuedRuns,suppressions:Z.suppressions}}listEvents($){return this.getService().listEventLogs($)}getEvent($){return this.getService().getEventLog($)}listSpecs($){return this.getService().listSpecs($)}listRuns($){return this.getService().listRuns($)}}function KK($){let{host:Z}=$;return{async startSession(Q){let W=(Q.cwd?.trim()||Q.workspaceRoot).trim(),J=await Z.startSession({source:Q.source?.trim()||T0.CLI,interactive:!1,config:{providerId:l8(Q.provider),modelId:Q.model,apiKey:Q.apiKey?.trim()||void 0,cwd:W,workspaceRoot:Q.workspaceRoot,systemPrompt:Q.systemPrompt??"",mode:_N(Q),maxIterations:Q.maxIterations,enableTools:Q.enableTools!==!1,enableSpawnAgent:Q.enableSpawn!==!1,enableAgentTeams:Q.enableTeams!==!1,disableMcpSettingsTools:Q.disableMcpSettingsTools,missionLogIntervalSteps:Q.missionStepInterval,missionLogIntervalMs:Q.missionTimeIntervalMs},toolPolicies:Q.toolPolicies??{"*":{autoApprove:Q.autoApproveTools!==!1}},localRuntime:{extensionContext:$.getExtensionContext(),configExtensions:Q.configExtensions}});return{sessionId:J.sessionId,startResult:{sessionId:J.sessionId,manifestPath:J.manifestPath,messagesPath:J.messagesPath}}},async sendSession(Q,W){let J=await Z.runTurn({sessionId:Q,prompt:W.prompt,userImages:W.attachments?.userImages,userFiles:W.attachments?.userFiles?.map((X)=>X.content),delivery:W.delivery});if(!J)throw Error("ClineCore automation runtime returned no result");return{result:LN(J)}},async abortSession(Q){return await Z.abort(Q,Error("ClineCore automation abort")),{applied:!0}},async stopSession(Q){return await Z.stopSession(Q),{applied:!0}}}}function zQ($){let Z=DN($.automationService,$.automation),Q=$.context?.client??($.clientName?{name:$.clientName}:void 0),W=$.context?.user??($.distinctId?{distinctId:$.distinctId}:void 0),J=$.context?.logger??$.logger,X=$.context?.telemetry??$.telemetry;if(!Z&&!Q&&!W&&!J&&!X)return $.context;return{...$.context??{},...Q?{client:Q}:{},...W?{user:W}:{},...J?{logger:J}:{},...X?{telemetry:X}:{},...Z?{automation:Z}:{}}}function DN($,Z){if(!$)return;return{ingestEvent:(Q)=>{Z.ingestEvent(Q)}}}function LN($){return{text:$.text,usage:{inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens,cacheWriteTokens:$.usage.cacheWriteTokens,totalCost:$.usage.totalCost},inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,iterations:$.iterations,finishReason:$.finishReason,toolCalls:$.toolCalls.map((Z)=>({name:Z.name,input:Z.input,output:Z.output,error:Z.error,durationMs:Z.durationMs}))}}function _N($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}var AF={};N(AF,{createCoreSettingsService:()=>y2,CoreSettingsService:()=>k$});import{existsSync as N5,readFileSync as JC}from"node:fs";import{basename as bJ,dirname as jF,extname as XC,isAbsolute as BF,join as YC,relative as GF,resolve as VF}from"node:path";var RK={};N(RK,{resolveWorkflowsConfigSearchPaths:()=>f5,resolveSkillsConfigSearchPaths:()=>F5,resolveRulesConfigSearchPaths:()=>A5,parseWorkflowConfigFromMarkdown:()=>K5,parseSkillConfigFromMarkdown:()=>B5,parseRuleConfigFromMarkdown:()=>G5,createWorkflowsConfigDefinition:()=>L5,createUserInstructionConfigService:()=>b$,createSkillsConfigDefinition:()=>U5,createRulesConfigDefinition:()=>D5,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>H5,UnifiedConfigFileWatcher:()=>E2,SKILLS_CONFIG_DIRECTORY_NAME:()=>V5,RULES_CONFIG_DIRECTORY_NAME:()=>EQ});import{createHash as zN}from"node:crypto";import{watch as TN}from"node:fs";import{readdir as ON,readFile as qN}from"node:fs/promises";import{join as MN}from"node:path";function RN($){return zN("sha1").update($).digest("hex")}function fK($){return Boolean($&&typeof $==="object"&&"code"in $)}function FK($){return fK($)&&$.code==="ENOENT"}function AK($){return fK($)&&($.code==="EACCES"||$.code==="EPERM")}class E2{definitions;debounceMs;emitParseErrors;listeners=new Set;recordsByType=new Map;watchersByDirectory=new Map;baseTypesByDirectory=new Map;watchedTypesByDirectory=new Map;discoveredDirectoriesByType=new Map;definitionsByType=new Map;pendingTypes=new Set;flushTimer;refreshQueue=Promise.resolve();started=!1;constructor($,Z){if($.length===0)throw Error("UnifiedConfigFileWatcher requires at least one definition.");this.definitions=$,this.debounceMs=Z?.debounceMs??75,this.emitParseErrors=Z?.emitParseErrors??!1;for(let Q of $){if(this.definitionsByType.has(Q.type))throw Error(`Duplicate unified config definition type '${Q.type}'.`);this.definitionsByType.set(Q.type,Q),this.recordsByType.set(Q.type,new Map),this.discoveredDirectoriesByType.set(Q.type,new Set);for(let W of Q.directories){let J=this.baseTypesByDirectory.get(W);if(J)J.add(Q.type);else this.baseTypesByDirectory.set(W,new Set([Q.type]))}}}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}async start(){if(this.started)return;this.started=!0,await this.refreshAll(),this.startDirectoryWatchers()}stop(){if(this.started=!1,this.flushTimer)clearTimeout(this.flushTimer),this.flushTimer=void 0;this.pendingTypes.clear();for(let $ of this.watchersByDirectory.values())$.close();this.watchersByDirectory.clear(),this.watchedTypesByDirectory=new Map}async refreshAll(){await this.enqueueRefresh(async()=>{for(let $ of this.definitions)await this.refreshTypeInternal($)})}async refreshType($){let Z=this.definitionsByType.get($);if(!Z)throw Error(`Unknown unified config type '${$}'.`);await this.enqueueRefresh(async()=>{await this.refreshTypeInternal(Z)})}getSnapshot($){let Z=this.recordsByType.get($);return new Map([...Z?.entries()??[]].map(([Q,W])=>[Q,{...W}]))}getAllSnapshots(){let $=new Map;for(let[Z,Q]of this.recordsByType.entries())$.set(Z,new Map([...Q.entries()].map(([W,J])=>[W,{...J}])));return $}emit($){for(let Z of this.listeners)Z($)}enqueueRefresh($){return this.refreshQueue=this.refreshQueue.then($,$),this.refreshQueue}startDirectoryWatchers(){this.syncDirectoryWatchers()}syncDirectoryWatchers(){let $=this.buildDesiredTypesByDirectory();for(let[Z,Q]of this.watchersByDirectory.entries()){if($.has(Z))continue;Q.close(),this.watchersByDirectory.delete(Z)}this.watchedTypesByDirectory=$;for(let Z of $.keys()){if(this.watchersByDirectory.has(Z))continue;try{let Q=TN(Z,()=>{let W=this.watchedTypesByDirectory.get(Z);if(!W)return;for(let J of W)this.pendingTypes.add(J);this.scheduleFlush()});this.watchersByDirectory.set(Z,Q),Q.on("error",(W)=>{let J=this.watchedTypesByDirectory.get(Z);if(!J)return;for(let X of J)this.emit({kind:"error",type:X,error:W,filePath:Z})})}catch(Q){if(!FK(Q)&&!AK(Q)){let W=$.get(Z);if(!W)continue;for(let J of W)this.emit({kind:"error",type:J,error:Q,filePath:Z})}}}}scheduleFlush(){if(this.flushTimer)clearTimeout(this.flushTimer);this.flushTimer=setTimeout(()=>{this.flushTimer=void 0;let $=[...this.pendingTypes];this.pendingTypes.clear(),this.enqueueRefresh(async()=>{for(let Z of $){let Q=this.definitionsByType.get(Z);if(!Q)continue;await this.refreshTypeInternal(Q)}})},this.debounceMs)}async refreshTypeInternal($){let{records:Z,discoveredDirectories:Q}=await this.loadDefinition($),W=this.recordsByType.get($.type)??new Map;for(let[J,X]of W.entries()){if(Z.has(J))continue;this.emit({kind:"remove",type:$.type,id:J,filePath:X.filePath})}for(let[J,X]of Z.entries()){let Y=W.get(J);if(Y&&Y.filePath===X.filePath&&Y.fingerprint===X.fingerprint)continue;this.emit({kind:"upsert",record:{type:X.type,id:J,item:X.item,filePath:X.filePath}})}if(this.recordsByType.set($.type,Z),this.discoveredDirectoriesByType.set($.type,Q),this.started)this.syncDirectoryWatchers()}async loadDefinition($){let Z=new Map,Q=new Set;for(let W of $.directories){Q.add(W);let J=$.discoverFiles?await $.discoverFiles(W):await this.readDirectoryFileCandidates(W);for(let X of J){let{fileName:Y,filePath:j}=X;if(Q.add(X.directoryPath),$.includeFile&&!$.includeFile(Y,j))continue;try{let V=await qN(j,"utf8"),H={type:$.type,directoryPath:X.directoryPath,fileName:Y,filePath:j,content:V},B=$.parseFile(H),G=$.resolveId(B,H).trim();if(!G)continue;Z.set(G,{type:$.type,id:G,item:B,filePath:j,fingerprint:RN(V)})}catch(V){if(this.emitParseErrors)this.emit({kind:"error",type:$.type,error:V,filePath:j})}}}return{records:Z,discoveredDirectories:Q}}buildDesiredTypesByDirectory(){let $=new Map;for(let[Z,Q]of this.baseTypesByDirectory.entries())$.set(Z,new Set(Q));for(let[Z,Q]of this.discoveredDirectoriesByType.entries())for(let W of Q){let J=$.get(W);if(J)J.add(Z);else $.set(W,new Set([Z]))}return $}async readDirectoryFileCandidates($){try{return(await ON($,{withFileTypes:!0})).filter((Q)=>Q.isFile()).map((Q)=>({directoryPath:$,fileName:Q.name,filePath:MN($,Q.name)})).sort((Q,W)=>Q.fileName.localeCompare(W.fileName))}catch(Z){if(FK(Z)||AK(Z))return[];throw Z}}}import{readdir as LJ,readFile as EN,stat as DJ}from"node:fs/promises";import{basename as a1,dirname as NN,extname as OQ,join as y0,resolve as j5}from"node:path";import{AGENTS_RULES_FILE_NAME as UK,RULES_CONFIG_DIRECTORY_NAME as EQ,resolveGlobalAgentsRulesPath as wN,resolveRulesConfigSearchPaths as CN,resolveSkillsConfigSearchPaths as PN,resolveWorkflowsConfigSearchPaths as SN,SKILLS_CONFIG_DIRECTORY_NAME as V5,WORKFLOWS_CONFIG_DIRECTORY_NAME as H5}from"@cline/shared/storage";import bN from"yaml";var TQ="SKILL.md",yN="managed.json",hN=new Set([".md",".markdown",".txt"]);function _J($){return $.trim().toLowerCase()}function a8($){let Z=$;return Z?.code==="ENOENT"||Z?.code==="EACCES"||Z?.code==="EPERM"||Z?.code==="ELOOP"}function qQ($){return hN.has(OQ($).toLowerCase())}function DK($){let Z=[],Q=new Set;for(let W of $){let J=j5(W);if(Q.has(J))continue;Q.add(J),Z.push(W)}return Z}function kN($){let Z=[...$?.directories??F5($?.workspacePath)];if($?.pluginSkillDirectories)Z.push(...$.pluginSkillDirectories);else if($?.includePluginSkills)Z.push(...SG({pluginPaths:$.pluginPaths,workspacePath:$.workspacePath,cwd:$.cwd??$.workspacePath}));return DK(Z)}async function zJ($){try{let Z=await LJ($,{withFileTypes:!0}),Q=[];for(let W of Z){if(!W.isDirectory())continue;let J=y0($,W.name),X=y0(J,yN);try{let Y=await EN(X,"utf8"),j=JSON.parse(Y);if(j&&typeof j==="object")Q.push(J)}catch(Y){if(a8(Y))continue;if(Y?.name==="SyntaxError")continue;throw Y}}return Q.sort((W,J)=>W.localeCompare(J))}catch(Z){if(a8(Z))return[];throw Z}}function TJ($){let Z=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,Q=$.match(Z);if(!Q)return{data:{},body:$,hadFrontmatter:!1};let[,W,J]=Q;try{let X=bN.parse(W);return{data:X&&typeof X==="object"&&!Array.isArray(X)?X:{},body:J,hadFrontmatter:!0}}catch(X){let Y=X instanceof Error?X.message:String(X);return{data:{},body:$,hadFrontmatter:!0,parseError:Y}}}function MQ($,Z,Q){if($===void 0||$===null){if(Q)throw Error(`Missing required frontmatter field '${Z}'.`);return}if(typeof $!=="string")throw Error(`Frontmatter field '${Z}' must be a string.`);let W=$.trim();if(!W&&Q)throw Error(`Frontmatter field '${Z}' cannot be empty.`);return W||void 0}function s8($,Z){if($===void 0||$===null)return;if(typeof $!=="boolean")throw Error(`Frontmatter field '${Z}' must be a boolean.`);return $}function IN($,Z){if(a1($.filePath).toLowerCase()!==UK.toLowerCase())return a1($.filePath,OQ($.filePath));if(Z&&j5($.filePath)===j5(Z,UK))return"Workspace AGENTS.md";if(j5($.filePath)===j5(wN()))return"Global AGENTS.md";return a1($.filePath,OQ($.filePath))}function B5($,Z){let{data:Q,body:W,parseError:J}=TJ($);if(J)throw Error(`Failed to parse YAML frontmatter: ${J}`);let X=W.trim();if(!X)throw Error("Missing instructions body in skill file.");let j=MQ(Q.name,"name",!1)??Z.trim();if(!j)throw Error("Missing skill name.");return{name:j,description:MQ(Q.description,"description",!1),disabled:s8(Q.disabled,"disabled")??(s8(Q.enabled,"enabled")===!1?!0:void 0),instructions:X,frontmatter:Q}}function G5($,Z){let{data:Q,body:W,parseError:J}=TJ($);if(J)throw Error(`Failed to parse YAML frontmatter: ${J}`);let X=W.trim();if(!X)throw Error("Missing instructions body in rule file.");let Y=MQ(Q.name,"name",!1)??Z.trim();if(!Y)throw Error("Missing rule name.");return{name:Y,disabled:s8(Q.disabled,"disabled")??(s8(Q.enabled,"enabled")===!1?!0:void 0),instructions:X,frontmatter:Q}}function K5($,Z){let{data:Q,body:W,parseError:J}=TJ($);if(J)throw Error(`Failed to parse YAML frontmatter: ${J}`);let X=W.trim();if(!X)throw Error("Missing instructions body in workflow file.");let Y=MQ(Q.name,"name",!1)??Z.trim();if(!Y)throw Error("Missing workflow name.");return{name:Y,disabled:s8(Q.disabled,"disabled")??(s8(Q.enabled,"enabled")===!1?!0:void 0),instructions:X,frontmatter:Q}}function F5($){return PN($)}function A5($){return CN($)}function f5($){return SN($)}async function LK($){if(a1($)===".cline"){let Z=await zJ($);return(await Promise.all(Z.map((W)=>LK(y0(W,V5))))).flat()}try{let Z=await LJ($,{withFileTypes:!0}),Q=[];for(let W of Z){if(W.isFile()&&W.name===TQ){Q.push({directoryPath:$,fileName:W.name,filePath:y0($,W.name)});continue}let J=y0($,W.name);if(W.isDirectory()||W.isSymbolicLink()&&await DJ(J).then((Y)=>Y.isDirectory()).catch((Y)=>{if(a8(Y))return!1;throw Y}))Q.push({directoryPath:J,fileName:TQ,filePath:y0(J,TQ)})}return Q}catch(Z){if(a8(Z))return[];throw Z}}async function RQ($){if(a1($)===".cline"){let Z=await zJ($);return(await Promise.all(Z.map((W)=>RQ(y0(W,"rules.md"))))).flat()}try{if((await DJ($)).isFile())return[{directoryPath:NN($),fileName:a1($),filePath:$}]}catch(Z){if(!a8(Z))throw Z}try{let Q=(await LJ($,{withFileTypes:!0})).filter((J)=>J.isFile()&&qQ(J.name)).map((J)=>({directoryPath:$,fileName:J.name,filePath:y0($,J.name)})),W=y0($,"AGENTS.md");try{if((await DJ(W)).isFile()){if(!Q.some((Y)=>Y.fileName==="AGENTS.md"))Q.push({directoryPath:$,fileName:"AGENTS.md",filePath:W})}}catch{}return Q}catch(Z){if(a8(Z))return[];throw Z}}async function xN($){if(a1($)===".cline"){let Z=await zJ($);return(await Promise.all(Z.map((W)=>RQ(y0(W,H5))))).flat()}return RQ($)}function U5($){let Z=kN($),Q=$?.workspacePath?y0($.workspacePath,".cline"):void 0;return{type:"skill",directories:Q?DK([...Z,Q]):Z,discoverFiles:LK,includeFile:(W)=>W===TQ,parseFile:(W)=>B5(W.content,a1(W.directoryPath)),resolveId:(W)=>_J(W.name)}}function D5($){let Z=$?.directories??A5($?.workspacePath),Q=$?.workspacePath?y0($.workspacePath,".cline"):void 0;return{type:"rule",directories:Q?[...Z,Q]:Z,discoverFiles:RQ,includeFile:(W,J)=>W===".clinerules"||qQ(W)||qQ(J),parseFile:(W)=>G5(W.content,IN(W,$?.workspacePath)),resolveId:(W)=>_J(W.name)}}function L5($){let Z=$?.directories??f5($?.workspacePath),Q=$?.workspacePath?y0($.workspacePath,".cline"):void 0;return{type:"workflow",directories:Q?[...Z,Q]:Z,discoverFiles:xN,includeFile:(W)=>qQ(W),parseFile:(W)=>K5(W.content,a1(W.filePath,OQ(W.filePath))),resolveId:(W)=>_J(W.name)}}function _K($){let Z=[U5($?.skills),D5($?.rules),L5($?.workflows)];return new E2(Z,{debounceMs:$?.debounceMs,emitParseErrors:$?.emitParseErrors})}import{truncateSplit as zK}from"@cline/shared";function gN($,Z){if($.description?.trim())return zK($.description,".");if(Z==="workflow")return;return zK($.instructions,".")}function mN($){return $.disabled!==!0}function TK($,Z){return[...$.getSnapshot(Z).entries()].map(([Q,W])=>({id:Q,record:W})).filter(({record:Q})=>mN(Q.item)).map(({id:Q,record:W})=>({id:Q,name:W.item.name,instructions:W.item.instructions,description:gN(W.item,Z),kind:Z})).sort((Q,W)=>Q.name.localeCompare(W.name))}function _5($){let Z=new Map;for(let Q of[...TK($,"workflow"),...TK($,"skill")])if(!Z.has(Q.name))Z.set(Q.name,Q);return[...Z.values()].sort((Q,W)=>Q.name.localeCompare(W.name))}function OK($,Z){if(!$.startsWith("/")||$.length<2)return $;let Q=$.match(/^\/(\S+)/);if(!Q)return $;let W=Q[1];if(!W)return $;let J=W.length+1,X=$.slice(J),Y=_5(Z).find((j)=>j.name===W);return Y?`${Y.instructions}${X}`:$}function NQ($){return $.trim().replace(/^\/+/,"").toLowerCase()}function vN($){if(!$||$.length===0)return;let Z=$.map(NQ).filter((Q)=>Q.length>0);return Z.length>0?new Set(Z):void 0}function cN($,Z,Q){if(!Q)return!0;let W=NQ($),J=NQ(Z),X=W.includes(":")?W.split(":").at(-1)??W:W,Y=J.includes(":")?J.split(":").at(-1)??J:J;return Q.has(W)||Q.has(J)||Q.has(X)||Q.has(Y)}function z5($,Z){let Q=vN(Z);return[...$.getSnapshot("skill").entries()].map(([J,X])=>{let Y=X.item;return{id:J,name:Y.name.trim(),description:Y.description?.trim(),disabled:Y.disabled===!0,skill:Y}}).filter((J)=>cN(J.id,J.name,Q))}function uN($,Z){return z5($,Z).filter((Q)=>!Q.disabled).map((Q)=>Q.name.trim()).filter((Q)=>Q.length>0).sort((Q,W)=>Q.localeCompare(W))}function dN($,Z,Q){let W=NQ(Z);if(!W)return{error:"Missing skill name."};let J=z5($,Q),X=J.find((B)=>B.id===W);if(X){let{skill:B}=X;if(B.disabled===!0)return{error:`Skill "${B.name}" is configured but disabled.`};return{id:X.id,skill:B}}let Y=W.includes(":")?W.split(":").at(-1)??W:W,j=J.filter(({id:B})=>{if(B===Y)return!0;return B.endsWith(`:${Y}`)}),V=j.filter(({skill:B})=>B.disabled!==!0);if(V.length===1){let{id:B,skill:G}=V[0];return{id:B,skill:G}}if(V.length>1)return{error:`Skill "${Z}" is ambiguous. Use one of: ${V.map(({id:B})=>B).join(", ")}`};if(j.length===1){let{skill:B}=j[0];return{error:`Skill "${B.name}" is configured but disabled.`}}if(j.length>1)return{error:`Skill "${Z}" is ambiguous, and all matches are disabled: ${j.map(({id:B})=>B).join(", ")}`};let H=uN($,Q);return{error:H.length>0?`Skill "${Z}" not found. Available skills: ${H.join(", ")}`:"No skills are currently available."}}function OJ($,Z=Promise.resolve(),Q){let W=new Set,J=async(X,Y)=>{await Z;let j=dN($,X,Q);if("error"in j)return j.error;let{id:V,skill:H}=j;if(W.has(V))return`Skill "${H.name}" is already running.`;W.add(V);try{let B=Y?.trim(),G=B?`
|
|
473
|
+
`,"utf8")}function JG($,Z){return b0.parse({version:1,session_id:$.sessionId,source:$.source,pid:$.pid,started_at:$.startedAt,ended_at:Z?.endedAt??$.endedAt??void 0,exit_code:Z?.exitCode??$.exitCode??void 0,status:Z?.status??$.status,interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspace_root:$.workspaceRoot,team_name:$.teamName??void 0,enable_tools:$.enableTools,enable_spawn:$.enableSpawn,enable_teams:$.enableTeams,prompt:$.prompt??void 0,metadata:Z?.metadata??$.metadata??void 0,messages_path:$.messagesPath??void 0})}async function XG($,Z,Q){let W=0;while(!0){let J=await $();if(J===void 0)return{updated:!1};let X=await Z(J);if(typeof X==="object"&&X!==null&&"updated"in X&&X.updated===!1){if(W+=1,W>=Q)return X;continue}return X}}_0();var YG={};N(YG,{summarizeUsageFromMessages:()=>b8,sumUsageTotals:()=>u6,getCurrentContextSize:()=>I3,createInitialAccumulatedUsage:()=>D0,accumulateUsageTotals:()=>f0});function D0(){return{inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0}}function f0($,Z){return{inputTokens:$.inputTokens+Math.max(0,Z.inputTokens??0),outputTokens:$.outputTokens+Math.max(0,Z.outputTokens??0),cacheReadTokens:$.cacheReadTokens+Math.max(0,Z.cacheReadTokens??0),cacheWriteTokens:$.cacheWriteTokens+Math.max(0,Z.cacheWriteTokens??0),totalCost:$.totalCost+Math.max(0,Z.totalCost??0)}}function u6($){let Z=D0();for(let Q of $)Z=f0(Z,Q);return Z}function S8($){return typeof $==="number"&&Number.isFinite($)?$:0}function b8($){let Z=D0();for(let Q of $){let W=Q.metrics;if(!W)continue;Z=f0(Z,{inputTokens:S8(W.inputTokens),outputTokens:S8(W.outputTokens),cacheReadTokens:S8(W.cacheReadTokens),cacheWriteTokens:S8(W.cacheWriteTokens),totalCost:S8(W.cost)})}return Z}function I3($){for(let Z=$.length-1;Z>=0;Z-=1){let Q=$[Z];if(Q?.role!=="assistant")continue;let W=S8(Q.metrics?.inputTokens);return W>0?W:void 0}return}function pM($){if(!$||typeof $!=="object")return;let Z=$,Q=Z.skill??Z.skill_name??Z.skillName;if(typeof Q!=="string")return;let W=Q.trim();return W.length>0?W:void 0}function x3($){if(!$||typeof $!=="object")return{};let Z=$;return{agentId:typeof Z.agentId==="string"?Z.agentId:void 0,conversationId:typeof Z.conversationId==="string"?Z.conversationId:void 0,parentAgentId:typeof Z.parentAgentId==="string"?Z.parentAgentId:void 0}}function r1($){let Z=$.agentId?.trim();if(!Z)return;let Q=$.parentAgentId?.trim()||void 0,W=$.teamRole,J="root";if(W==="teammate")J="team_teammate";else if(W==="lead")J="team_lead";else if(Q)J="subagent";return{agentId:Z,agentKind:J,conversationId:$.conversationId?.trim()||void 0,parentAgentId:Q,createdByAgentId:$.createdByAgentId?.trim()||Q||void 0,isSubagent:Boolean(Q),teamId:$.teamId?.trim()||void 0,teamName:$.teamName?.trim()||void 0,teamRole:W,teamAgentId:$.teamAgentId?.trim()||void 0}}function rM($){return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheWriteTokens:$.cacheWriteTokens,cacheReadTokens:$.cacheReadTokens,totalCost:$.cost}}function iM($){let Z=$.isPrimaryAgentEvent?[$.overrides?.agentId,$.eventMetadata.agentId,$.overrides?.teamAgentId]:[$.overrides?.teamAgentId,$.overrides?.agentId,$.eventMetadata.agentId,$.eventMetadata.conversationId];for(let Q of Z){let W=Q?.trim();if(W)return W}return $.isPrimaryAgentEvent?"root":"unknown"}function g3($,Z,Q){let{sessionId:W,config:J,liveSession:X,emit:Y}=$,j=J.telemetry,V=X?.runtime.teamRuntime,H=Q?.isPrimaryAgentEvent??!0,B=x3(Z),G=r1({agentId:Q?.agentId??B.agentId,conversationId:Q?.conversationId??B.conversationId,parentAgentId:Q?.parentAgentId??B.parentAgentId,createdByAgentId:Q?.createdByAgentId,teamId:Q?.teamId??V?.getTeamId(),teamName:Q?.teamName??V?.getTeamName(),teamRole:Q?.teamRole,teamAgentId:Q?.teamAgentId});if(Z.type==="content_start"&&Z.contentType==="tool"&&Z.toolName==="skills"){let K=pM(Z.input);if(K)N9(j,{ulid:W,skillName:K,skillSource:"project",skillsAvailableGlobal:0,skillsAvailableProject:0,provider:J.providerId,modelId:J.modelId,...G})}if(Z.type==="content_end"&&Z.contentType==="tool"){let K=Z.toolName??"unknown",F=!Z.error;if(W8(j,{ulid:W,tool:K,autoApproved:void 0,success:F,modelId:J.modelId,provider:J.providerId,...G}),!F&&(K==="editor"||K==="apply_patch"))w9(j,{ulid:W,modelId:J.modelId,provider:J.providerId,errorType:Z.error,...G})}if(Z.type==="notice"&&Z.reason==="api_error")m4(j,{ulid:W,model:J.modelId,provider:J.providerId,errorMessage:Z.message,...G});if(Z.type==="error")m4(j,{ulid:W,model:J.modelId,provider:J.providerId,errorMessage:Z.error?.message??"unknown error",...G});if(Z.type==="usage"&&X?.turnUsageBaseline){let K=rM(Z);if(H){X.turnPrimaryUsage=f0(X.turnPrimaryUsage??D0(),K);let A=f0(X.turnUsageBaseline,X.turnPrimaryUsage);$.usageBySession.set(W,A),Q8(j,{ulid:W,provider:J.providerId,model:J.modelId,source:"assistant",mode:J.mode,...G}),R9(j,{ulid:W,tokensIn:Z.inputTokens,tokensOut:Z.outputTokens,cacheWriteTokens:Z.cacheWriteTokens,cacheReadTokens:Z.cacheReadTokens,totalCost:Z.cost,model:J.modelId,...G})}else{let A=iM({isPrimaryAgentEvent:H,overrides:Q,eventMetadata:B}),L=X.turnUsageByAgent??new Map;X.turnUsageByAgent=L,L.set(A,f0(L.get(A)??D0(),K))}let F=f0(X.turnPrimaryUsage??D0(),u6(X.turnUsageByAgent?.values()??[]));$.aggregateUsageBySession.set(W,f0(X.turnAggregateUsageBaseline??X.turnUsageBaseline,F))}if(Z.type==="iteration_end"&&H)$.persistMessages(W,X?.agent.getMessages()??[],X?.config.systemPrompt);Y({type:"agent_event",payload:{sessionId:W,event:Z,teamAgentId:Q?.teamAgentId,teamRole:Q!==void 0?Q.teamRole??(H?"lead":void 0):void 0}}),Y({type:"chunk",payload:{sessionId:W,stream:"agent",chunk:QG(Z),ts:Date.now()}})}function R$($){return $.workspaceRoot??$.cwd}import{hasRuntimeConfigExtension as ZN}from"@cline/shared";$1();import{existsSync as uZ,readFileSync as hR,statSync as kR}from"node:fs";import{basename as IR,dirname as vZ,join as dZ,resolve as cZ}from"node:path";import{discoverPluginModulePaths as xR,resolveConfiguredPluginModulePaths as NG,resolvePluginConfigSearchPaths as gR,SKILLS_CONFIG_DIRECTORY_NAME as mR}from"@cline/shared/storage";import{resolve as FR}from"node:path";import{normalizePluginManifest as AR}from"@cline/shared";import{existsSync as O0,readFileSync as h8}from"node:fs";import{builtinModules as nM,createRequire as u3}from"node:module";import{dirname as E$,extname as l6,isAbsolute as aM,resolve as p}from"node:path";import{fileURLToPath as VG}from"node:url";import{PLUGIN_FILE_EXTENSIONS as sM}from"@cline/shared";var HG=E$(VG(import.meta.url)),oM=u3(import.meta.url),tM=p(HG,"..","..","..","..",".."),m3=ZR(tM),eM=["@cline/sdk","@cline/agents","@cline/core","@cline/core/hub","@cline/core/hub/daemon-entry","@cline/core/telemetry","@cline/llms","@cline/llms/browser","@cline/shared","@cline/shared/automation","@cline/shared/browser","@cline/shared/storage","@cline/shared/db","@cline/shared/types"],d3=new Set(nM.flatMap(($)=>[$,$.replace(/^node:/,"")])),d6=new Set(sM),$R=["development","node","import","require","default"];function ZR($){let Z={},Q={"@cline/sdk":p($,"packages/sdk/src/index.ts"),"@cline/agents":p($,"packages/agents/src/index.ts"),"@cline/core":p($,"packages/core/src/index.ts"),"@cline/llms":p($,"packages/llms/src/index.ts"),"@cline/shared":p($,"packages/shared/src/index.ts"),"@cline/shared/storage":p($,"packages/shared/src/storage/index.ts"),"@cline/shared/db":p($,"packages/shared/src/db/index.ts")};for(let[W,J]of Object.entries(Q))if(O0(J))Z[W]=J;for(let W of["agents","core","llms","shared"]){let J=p($,"packages",W),X=p(J,"package.json");if(!O0(X))continue;try{let Y=JSON.parse(h8(X,"utf8"));if(typeof Y.name!=="string"||!Y.exports)continue;if(typeof Y.exports==="string"){let j=p(J,Y.exports);if(O0(j))Z[Y.name]=j;continue}if(typeof Y.exports!=="object")continue;for(let[j,V]of Object.entries(Y.exports)){let H=QR(J,V);if(!H)continue;let B=j==="."?Y.name:`${Y.name}/${j.replace(/^\.\//,"")}`;Z[B]=H}}catch{}}return Z}function QR($,Z){let Q=l3(Z);if(!Q)return null;let W=BG($,Q);for(let J of W)if(O0(J))return J;return null}function l3($,Z=new Set){if(typeof $==="string")return $;if(!$||typeof $!=="object")return null;if(Z.has($))return null;Z.add($);let Q=$;for(let W of $R){let J=l3(Q[W],Z);if(J)return J}return null}function BG($,Z){let Q=Z.replace(/^\.\//,""),W=[p($,Z)];if(Q.startsWith("dist/")){let J=Q.replace(/^dist\//,"src/").replace(/\.(mjs|cjs|js)$/,"");return[p($,`${J}.ts`),p($,`${J}.tsx`),p($,`${J}.mts`),p($,`${J}.cts`),...W]}return W}function WR($){return Object.fromEntries(Object.entries($).sort(([Z],[Q])=>Q.length-Z.length))}function xZ($){return!($.startsWith(".")||$.startsWith("/")||$.startsWith("file:")||$.startsWith("data:")||$.startsWith("http:")||$.startsWith("https:"))}function y8($){if($.startsWith("@")){let[Z,Q]=$.split("/",3);return Q?`${Z}/${Q}`:$}return $.split("/",1)[0]??$}function JR($){let Z=y8($);if($===Z)return".";return`.${$.slice(Z.length)}`}function GG($){return y8($).startsWith("@cline/")}function v3($,Z){let Q=y8(Z),W=E$($);while(!0){let J=p(W,"node_modules",Q);if(O0(J)||O0(p(J,"package.json")))return!0;let X=p(W,"..");if(X===W)return!1;W=X}}function jG($){return c3($)!==null}function c3($){try{return oM.resolve($)}catch{}return XR($)}function XR($){let Z=y8($),Q=KG(Z);if(!Q)return null;let W=p(Q,"package.json");try{let J=JSON.parse(h8(W,"utf8")),X=JR($),Y=X==="."&&typeof J.exports==="string"?J.exports:J.exports&&typeof J.exports==="object"&&Object.hasOwn(J.exports,X)?J.exports[X]:void 0,j=l3(Y)??(X==="."&&typeof J.main==="string"?J.main:null);if(!j)return null;let V=p(Q,j),H=[V,...BG(Q,j).filter((B)=>B!==V)];for(let B of H)if(O0(B))return B;return null}catch{return null}}function YR(){let $=[HG],Z=process.env.CLINE_WRAPPER_PATH?.trim();if(Z)$.push(E$(E$(Z)));let Q=process.execPath?.trim();if(Q)$.push(E$(Q));return[...new Set($.map((W)=>p(W)))]}function jR($,Z){let Q=$;while(!0){let W=p(Q,"package.json");if(O0(W))try{if(JSON.parse(h8(W,"utf8")).name===Z)return Q}catch{}let J=p(Q,"node_modules",Z,"package.json");if(O0(J))return E$(J);let X=p(Q,"..");if(X===Q)return null;Q=X}}function KG($){for(let Z of YR()){let Q=jR(Z,$);if(Q)return Q}return null}function VR($){let Q=E$($);for(let W=0;W<4;W++){let J=p(Q,"package.json");if(O0(J))try{let Y=JSON.parse(h8(J,"utf8"));return Y!=null&&typeof Y==="object"&&"cline"in Y}catch{return!1}let X=p(Q,"..");if(X===Q)return!1;Q=X}return!1}function FG($,Z){let Q=Z.startsWith("file:")?VG(Z):aM(Z)?Z:p(E$($),Z);if(O0(Q)&&d6.has(l6(Q)))return Q;for(let W of d6){let J=`${Q}${W}`;if(O0(J))return J}for(let W of d6){let J=p(Q,`index${W}`);if(O0(J))return J}return null}function AG($){let Z=new Set,Q=[/\bimport\s+(?:type\s+)?[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bexport\s+[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bimport\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g,/\brequire\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g];for(let W of Q)for(let J of $.matchAll(W)){let X=J[1];if(X)Z.add(X)}return[...Z]}function HR($){return l6($)!==".ts"}function fG($,Z,Q=new Set){if(Q.has($)||!O0($))return;if(Q.add($),!d6.has(l6($)))return;let W=h8($,"utf8"),J=HR($);for(let X of AG(W)){if(X.startsWith("node:")||d3.has(X))continue;if(xZ(X)){if(!J)continue;if(Object.hasOwn(m3,X)||Object.hasOwn(m3,y8(X))||v3($,X)||GG(X)&&jG(X)||Z&&jG(X))continue;throw Error(`Cannot find module '${y8(X)}'`)}let Y=FG($,X);if(Y)fG(Y,Z,Q)}}function UG($,Z=new Set,Q=new Set){if(Z.has($)||!O0($))return Q;if(Z.add($),!d6.has(l6($)))return Q;let W=h8($,"utf8");for(let J of AG(W)){if(Q.add(J),xZ(J))continue;let X=FG($,J);if(X)UG(X,Z,Q)}return Q}function BR($,Z){let Q=u3($),W={},J=UG($),X=new Set(eM);for(let[Y,j]of Object.entries(m3)){try{Q.resolve(Y);continue}catch{}W[Y]=j}for(let Y of J)if(xZ(Y)&&(GG(Y)||Z))X.add(Y);for(let Y of X){if(Object.hasOwn(W,Y)||v3($,Y))continue;let j=c3(Y);if(j)W[Y]=j}if(!Z)return W;for(let Y of J){if(!xZ(Y)||Object.hasOwn(W,Y)||v3($,Y)||Y.startsWith("node:")||d3.has(Y))continue;let j=c3(Y);if(j)W[Y]=j}return W}function GR($){let Z=l6($);return Z===".ts"||Z===".tsx"||Z===".mts"||Z===".cts"}var _2;function KR(){if(_2!==void 0)return _2;let $=KG("jiti");if(!$)return _2=null,null;let Z=p($,"dist","babel.cjs");if(!O0(Z))return _2=null,null;try{let W=u3(Z)(Z);_2=typeof W==="function"?W:null}catch{_2=null}return _2}async function DG($,Z={}){let Q=!VR($);fG($,Q);let W=BR($,Q),J=WR(W),X=await import("jiti"),Y=typeof X==="function"?X:typeof X.default==="function"?X.default:void 0;if(!Y)throw Error("Unable to load jiti");let j=Object.entries(J).filter(([,G])=>GR(G)).map(([G])=>G),V=KR(),H=V?(G)=>V({...G,interopDefault:!0}):void 0;return await Y($,{alias:J,cache:Z.useCache,requireCache:Z.useCache,esmResolve:!0,interopDefault:!1,nativeModules:[...d3],transformModules:j,tryNative:!1,...H?{transform:H}:{}}).import($,{})}function LG($,Z){if(!$)return!0;if($.providerIds?.length){if(!Z?.providerId||!$.providerIds.includes(Z.providerId))return!1}if($.modelIds?.length){if(!Z?.modelId||!$.modelIds.includes(Z.modelId))return!1}return!0}function _G($){return typeof $==="object"&&$!==null}function p3($){return Array.isArray($)&&$.every((Z)=>typeof Z==="string")}function fR($,Z){if(!_G($.manifest))throw Error(`Invalid plugin module at ${Z}: missing required "manifest"`);if(!p3($.manifest.capabilities))throw Error(`Invalid plugin module at ${Z}: manifest.capabilities must be a string array`);if($.manifest.capabilities.length===0)throw Error(`Invalid plugin module at ${Z}: manifest.capabilities cannot be empty`);if(Object.hasOwn($.manifest,"providerIds")&&!p3($.manifest.providerIds))throw Error(`Invalid plugin module at ${Z}: manifest.providerIds must be a string array when provided`);if(Object.hasOwn($.manifest,"modelIds")&&!p3($.manifest.modelIds))throw Error(`Invalid plugin module at ${Z}: manifest.modelIds must be a string array when provided`)}function UR($,Z){if(!_G($))throw Error(`Invalid plugin module at ${Z}: expected object export`);if(typeof $.name!=="string"||$.name.length===0)throw Error(`Invalid plugin module at ${Z}: expected non-empty "name"`);if(!Object.hasOwn($,"manifest"))throw Error(`Invalid plugin module at ${Z}: missing required "manifest"`);fR($,Z)}async function p6($,Z={}){let Q=FR(Z.cwd??process.cwd(),$),W=await DG(Q,{useCache:Z.useCache}),J=Z.exportName??"plugin",X=W.default??W[J];UR(X,Q);let Y=X,j=Y.setup,V=j?(H,B)=>{let G={...Z.session,...B.session},K={...B,session:Object.keys(G).length>0?G:void 0,client:Z.client??B.client,user:Z.user??B.user,workspaceInfo:Z.workspaceInfo??B.workspaceInfo,automation:Z.automation??B.automation,logger:Z.logger??B.logger,telemetry:Z.telemetry??B.telemetry};return j(H,K)}:void 0;return{...Y,manifest:AR(Y.manifest),setup:V}}async function gZ($,Z={}){return(await z2($,Z)).plugins}async function z2($,Z={}){let Q=[],W=[],J=new Map,X=0;for(let j of $)try{let V=await p6(j,Z);if(!LG(V.manifest,Z))continue;let H=J.get(V.name);if(H)W.push({type:"duplicate_plugin_override",pluginName:V.name,pluginPath:j,overriddenPluginPath:H.pluginPath,message:`Plugin "${V.name}" from ${j} overrides ${H.pluginPath}`});J.set(V.name,{plugin:V,pluginPath:j,order:X++})}catch(V){let H=V instanceof Error?V.message:String(V);Q.push({pluginPath:j,phase:"load",message:H,stack:V instanceof Error?V.stack:void 0})}let Y=[...J.values()].sort((j,V)=>j.order-V.order);return{plugins:Y.map((j)=>j.plugin),pluginPaths:Y.map((j)=>j.pluginPath),failures:Q,warnings:W}}import{existsSync as a3}from"node:fs";import{createRequire as EG}from"node:module";import{dirname as mZ,join as I8}from"node:path";import{fileURLToPath as TR}from"node:url";var MG={};N(MG,{resolveSubprocessRuntimeExecutable:()=>r3,buildSubprocessSandboxCommand:()=>qG,SubprocessSandbox:()=>k8,CLINE_JS_RUNTIME_PATH_ENV:()=>OG});import{spawn as DR}from"node:child_process";import{basename as LR}from"node:path";import{augmentNodeCommandForDebug as _R,withResolvedClineBuildEnv as zR}from"@cline/shared";function zG($){if($ instanceof Error)return $;return Error(String($))}var OG="CLINE_JS_RUNTIME_PATH";function TG($){let Z=$?.trim();if(!Z)return!1;let Q=LR(Z).toLowerCase();return Q==="node"||Q==="node.exe"||Q==="bun"||Q==="bun.exe"}function r3($={}){let Z=$.env??process.env,Q=$.runtimeExecutable?.trim()||Z[OG]?.trim();if(Q)return Q;let W=$.execPath?.trim()||process.execPath;if(TG(W))return W;for(let J of[Z.BUN_EXEC_PATH,Z.npm_node_execpath,Z.NODE]){let X=J?.trim();if(X&&TG(X))return X}return"node"}function qG($,Z={}){let Q=r3({env:Z.env,execPath:Z.execPath,runtimeExecutable:Z.runtimeExecutable});return _R([Q,...$],{env:Z.env,execArgv:Z.execArgv,debugRole:Z.name==="plugin-sandbox"?"plugin-sandbox":"sandbox"})}class k8{options;process=null;requestCounter=0;pending=new Map;constructor($){this.options=$}get processLabel(){return this.options.name??"sandbox"}clearPendingRequest($){let Z=this.pending.get($);if(!Z)return;if(this.pending.delete($),Z.timeout)clearTimeout(Z.timeout);return Z}start(){if(this.process&&this.process.exitCode===null)return;let $=this.options.bootstrapFile?[this.options.bootstrapFile]:["-e",this.options.bootstrapScript??""],Z=qG($,{name:this.options.name,runtimeExecutable:this.options.runtimeExecutable}),Q=DR(Z[0]??r3(this.options),Z.slice(1),{stdio:["ignore","ignore","pipe","ipc"],env:zR(process.env),windowsHide:!0});this.process=Q;let W="",J=(X)=>{let Y=W+X;W=Y.length>4000?Y.slice(-4000):Y};Q.stderr?.setEncoding("utf8"),Q.stderr?.on("data",(X)=>{J(X)}),Q.on("message",(X)=>{this.onMessage(X)}),Q.on("error",(X)=>{this.failPending(Error(`${this.processLabel} process error: ${zG(X).message}`))}),Q.on("exit",(X,Y)=>{this.process=null;let j=W.trim();this.failPending(Error(`${this.options.name??"sandbox"} process exited (code=${String(X)}, signal=${String(Y)})${j?`: ${j}`:""}`))})}async call($,Z,Q={}){this.start();let W=this.process;if(!W||W.exitCode!==null)throw Error(`${this.processLabel} process is not available`);let J=`req_${++this.requestCounter}`,X={type:"call",id:J,method:$,args:Z};return await new Promise((Y,j)=>{let V={resolve:(H)=>Y(H),reject:j};if((Q.timeoutMs??0)>0)V.timeout=setTimeout(()=>{this.clearPendingRequest(J),this.shutdown().catch(()=>{}),j(Error(`${this.processLabel} call timed out after ${Q.timeoutMs}ms: ${$}`))},Q.timeoutMs);this.pending.set(J,V),W.send(X,(H)=>{if(!H)return;let B=this.clearPendingRequest(J);if(!B)return;B.reject(Error(`${this.processLabel} failed to send call "${$}": ${zG(H).message}`))})})}async shutdown(){let $=this.process;if(this.process=null,!$||$.exitCode!==null){this.failPending(Error(`${this.processLabel} shutdown`));return}await new Promise((Z)=>{let Q=setTimeout(()=>{try{$.kill("SIGKILL")}catch{}Z()},300);$.once("exit",()=>{clearTimeout(Q),Z()});try{$.kill("SIGTERM")}catch{clearTimeout(Q),Z()}}),this.failPending(Error(`${this.processLabel} shutdown`))}onMessage($){if(!$)return;if($.type==="event"){if(typeof $.name==="string"&&$.name.length>0)this.options.onEvent?.({name:$.name,payload:$.payload});return}if($.type!=="response"||!$.id)return;let Z=this.clearPendingRequest($.id);if(!Z)return;if($.ok){Z.resolve($.result);return}Z.reject(Error($.error?.message||`${this.processLabel} call failed`))}failPending($){for(let[Z,Q]of this.pending.entries()){if(this.pending.delete(Z),Q.timeout)clearTimeout(Q.timeout);Q.reject($)}}}function OR($){return{...$,contributions:{tools:$.contributions?.tools??[],commands:$.contributions?.commands??[],rules:$.contributions?.rules??[],messageBuilders:$.contributions?.messageBuilders??[],providers:$.contributions?.providers??[],automationEventTypes:$.contributions?.automationEventTypes??[],mcpServers:$.contributions?.mcpServers??[],shortcuts:$.contributions?.shortcuts??[],flags:$.contributions?.flags??[]}}}function r6($){return($ instanceof Error?$.message:String($)).includes("Unknown sandbox plugin id:")}function qR(){return`@cline/cli-${process.platform==="win32"?"windows":process.platform}-${process.arch}`}function MR(){let $=process.env.CLINE_WRAPPER_PATH?.trim();if(!$)return;try{let Q=EG($).resolve(`${qR()}/package.json`),W=I8(mZ(Q),"extensions","plugin-sandbox-bootstrap.js");return a3(W)?W:void 0}catch{return}}function RR(){let $=process.execPath?.trim();if(!$)return;let Z=I8(mZ(mZ($)),"extensions","plugin-sandbox-bootstrap.js");return a3(Z)?Z:void 0}function ER(){let $=mZ(TR(import.meta.url)),Z=EG(import.meta.url),Q=[I8($,"plugin-sandbox-bootstrap.js"),I8($,"extensions","plugin-sandbox-bootstrap.js"),I8($,"agents","plugin-sandbox-bootstrap.js"),MR(),RR()];for(let X of Q.filter((Y)=>typeof Y==="string"))if(a3(X))return{file:X};let W=I8($,"plugin-sandbox-bootstrap.ts"),J="jiti";try{J=Z.resolve("jiti")}catch{}return{script:[`const createJiti = require(${JSON.stringify(J)});`,`const jiti = createJiti(${JSON.stringify(W)}, { cache: false, requireCache: false, esmResolve: true, interopDefault: false });`,`Promise.resolve(jiti.import(${JSON.stringify(W)}, {})).catch((error) => {`," console.error(error);"," process.exitCode = 1;","});"].join(`
|
|
474
|
+
`)}}var i3=ER();function n3($,Z,Q){if(typeof $==="number"&&$>0)return $;if(Q){let W=process.env[Q];if(W){let J=Number(W);if(Number.isInteger(J)&&J>0)return J}}return Z}async function x8($){let Z=new k8({name:"plugin-sandbox",..."file"in i3?{bootstrapFile:i3.file}:{bootstrapScript:i3.script},onEvent:$.onEvent}),Q=n3($.importTimeoutMs,4000,"CLINE_PLUGIN_IMPORT_TIMEOUT_MS"),W=n3($.hookTimeoutMs,3000),J=n3($.contributionTimeoutMs,60000),X={pluginPaths:$.pluginPaths,exportName:$.exportName,providerId:$.providerId,modelId:$.modelId,cwd:$.cwd,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,loggerEnabled:Boolean($.logger)},Y,j=()=>{return Y??=Z.call("initialize",X,{timeoutMs:Q}).finally(()=>{Y=void 0}),Y},V;try{V=await Z.call("initialize",X,{timeoutMs:Q})}catch(G){throw await Z.shutdown().catch(()=>{}),G}let H=V.plugins.map(OR);return{extensions:H.map((G)=>{let K={name:G.name,__clinePluginPath:G.pluginPath,manifest:G.manifest,setup:(F)=>{NR(F,Z,G,J,j),wR(F,Z,G,J,j),CR(F,Z,G,J,j),SR(F,Z,G,J,j),PR(F,G)}};return K.hooks=yR(Z,G,W,j),K}),failures:V.failures,pluginPaths:H.map((G)=>G.pluginPath),shutdown:async()=>{await Z.shutdown()},warnings:V.warnings}}function NR($,Z,Q,W,J){for(let X of Q.contributions?.tools??[]){let Y={name:X.name,description:X.description??"",inputSchema:X.inputSchema??{type:"object",properties:{}},timeoutMs:X.timeoutMs,retryable:X.retryable,execute:async(j,V)=>{try{return await Z.call("executeTool",{pluginId:Q.pluginId,contributionId:X.id,input:j,context:V},{timeoutMs:W})}catch(H){if(!r6(H))throw H;return await J(),await Z.call("executeTool",{pluginId:Q.pluginId,contributionId:X.id,input:j,context:V},{timeoutMs:W})}}};$.registerTool(Y)}}function wR($,Z,Q,W,J){for(let X of Q.contributions?.commands??[])$.registerCommand({name:X.name,description:X.description,handler:async(Y)=>{try{return await Z.call("executeCommand",{pluginId:Q.pluginId,contributionId:X.id,input:Y},{timeoutMs:W})}catch(j){if(!r6(j))throw j;return await J(),await Z.call("executeCommand",{pluginId:Q.pluginId,contributionId:X.id,input:Y},{timeoutMs:W})}}})}function CR($,Z,Q,W,J){for(let X of Q.contributions?.rules??[])$.registerRule({id:X.ruleId,source:X.source,content:X.hasContentHandler===!0?async()=>{try{return await Z.call("resolveRuleContent",{pluginId:Q.pluginId,contributionId:X.id},{timeoutMs:W})}catch(Y){if(!r6(Y))throw Y;return await J(),await Z.call("resolveRuleContent",{pluginId:Q.pluginId,contributionId:X.id},{timeoutMs:W})}}:X.content??""})}function PR($,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 SR($,Z,Q,W,J){for(let X of Q.contributions?.messageBuilders??[])$.registerMessageBuilder({name:X.name,async build(Y){try{let j=await Z.call("buildMessages",{pluginId:Q.pluginId,contributionId:X.id,messages:Y},{timeoutMs:W});return RG(j)?j:Y}catch(j){if(!r6(j))throw j;await J();let V=await Z.call("buildMessages",{pluginId:Q.pluginId,contributionId:X.id,messages:Y},{timeoutMs:W});return RG(V)?V:Y}}})}function RG($){return Array.isArray($)&&$.every((Z)=>typeof Z==="object"&&Z!==null&&("role"in Z)&&("content"in Z))}function bR($,Z,Q,W,J){return async(X)=>{try{return await $.call("invokeHook",{pluginId:Z,hookName:Q,payload:X},{timeoutMs:W})}catch(Y){if(!r6(Y))throw Y;return await J(),await $.call("invokeHook",{pluginId:Z,hookName:Q,payload:X},{timeoutMs:W})}}}function yR($,Z,Q,W){let J={};for(let X of Z.hooks??[])J[X]=bR($,Z.pluginId,X,Q,W);return Object.keys(J).length>0?J:void 0}var o3="package.json",vR="package";function i6($){return gR($)}function n6($){return xR($)}function cR($){try{return uZ($)&&kR($).isDirectory()}catch{return!1}}function t3($){let Z=[],Q=new Set;for(let W of $){let J=cZ(W);if(Q.has(J))continue;Q.add(J),Z.push(J)}return Z}function wG($){let Z=t3($);return v9(Z)}function CG($){return i6($).flatMap((Z)=>n6(Z)).filter((Z)=>uZ(Z))}function uR($,Z){let Q=[];for(let W of $)try{Q.push(...NG([W],Z))}catch{}return Q}function s3($){return typeof $==="object"&&$!==null}function dR($){try{let Z=JSON.parse(hR(dZ($,o3),"utf8"));if(!s3(Z)||!s3(Z.cline))return[];let Q=Z.cline.plugins;if(!Array.isArray(Q))return[];let W=[];for(let J of Q){if(typeof J==="string"){W.push(J);continue}if(!s3(J)||!Array.isArray(J.paths))continue;for(let X of J.paths)if(typeof X==="string")W.push(X)}return W}catch{return[]}}function PG($,Z){let Q=cZ(Z);return dR($).some((W)=>cZ($,W)===Q)}function lR($,Z){return IR($)===vR&&uZ(dZ(vZ($),o3))&&PG(vZ($),Z)}function pR($){let Z=cZ($),Q=[],W=vZ(Z);while(!0){if(lR(W,Z)){Q.push(W);break}if(uZ(dZ(W,o3))){if(PG(W,Z))Q.push(W);break}let J=vZ(W);if(J===W)break;W=J}return t3(Q)}function i1($={}){let Z=$.cwd??process.cwd(),Q=CG($.workspacePath),W=NG($.pluginPaths??[],Z);return wG([...W,...Q])}function rR($={}){let Z=$.cwd??process.cwd(),Q=CG($.workspacePath),W=uR($.pluginPaths??[],Z);return wG([...W,...Q])}function n1($){let Z=[];for(let Q of $)for(let W of pR(Q)){let J=dZ(W,mR);if(cR(J))Z.push(J)}return t3(Z)}function SG($={}){return n1(rR($))}async function g8($={}){let Z=i1($);if(Z.length===0)return{extensions:[],failures:[],warnings:[],pluginPaths:[]};if($.mode==="in_process"){let W=await z2(Z,{cwd:$.cwd,exportName:$.exportName,providerId:$.providerId,modelId:$.modelId,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,automation:$.automation,logger:$.logger,telemetry:$.telemetry});return{extensions:W.plugins,failures:W.failures,pluginPaths:W.pluginPaths,warnings:W.warnings}}let Q=await x8({pluginPaths:Z,exportName:$.exportName,importTimeoutMs:$.importTimeoutMs,hookTimeoutMs:$.hookTimeoutMs,contributionTimeoutMs:$.contributionTimeoutMs,onEvent:$.onEvent,providerId:$.providerId,modelId:$.modelId,cwd:$.cwd,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,logger:$.logger});return{extensions:Q.extensions??[],shutdown:Q.shutdown,failures:Q.failures,pluginPaths:Q.pluginPaths,warnings:Q.warnings}}import{execFile as iR}from"node:child_process";import{promisify as nR}from"node:util";var aR=nR(iR);function e3($,Z){$?.log(Z,{severity:"warn"})}function sR($){let Z=$?.checkpoint;if(!Z||typeof Z!=="object"||Array.isArray(Z))return;let Q=Z;if(!Q.latest||!Array.isArray(Q.history))return;let W=Q.latest,J=Q.history.filter((X)=>!!X&&typeof X==="object"&&typeof X.ref==="string"&&typeof X.createdAt==="number"&&typeof X.runCount==="number");if(typeof W.ref!=="string"||typeof W.createdAt!=="number"||typeof W.runCount!=="number")return;return{latest:W,history:J}}async function T2($,Z){let Q=await aR("git",["-C",$,...Z],{windowsHide:!0});return{stdout:Q.stdout.trim(),stderr:Q.stderr.trim()}}async function $J($,Z){if(!$)return;let Q=`refs/cline/checkpoints/${Z}/`;try{let{stdout:W}=await T2($,["for-each-ref","--format=%(refname)",Q]),J=W.trim().split(`
|
|
475
|
+
`).filter(Boolean);await Promise.allSettled(J.map((X)=>T2($,["update-ref","-d",X])))}catch{}}async function bG($,Z,Q){if(!$||Q.length===0)return;await Promise.allSettled(Q.map((W)=>T2($,["update-ref",`refs/cline/checkpoints/${Z}/${W.runCount}`,W.ref])))}function oR($,Z){let Q=$.findIndex((W)=>W.runCount===Z.runCount);if(Q<0)return[...$,Z];return $.map((W,J)=>J===Q?Z:W)}function yG($){let Z=$.initialRunCount??0,Q,W=async()=>{if(Q!==void 0)return Q;try{Q=(await T2($.cwd,["rev-parse","--is-inside-work-tree"])).stdout==="true"}catch{Q=!1}return Q},J=async()=>{if($.createCheckpoint)return await $.createCheckpoint({cwd:$.cwd,sessionId:$.sessionId,runCount:Z});if(!await W())return;let X=async(H)=>{try{let G=(await T2($.cwd,["rev-parse","HEAD"])).stdout.trim();if(!G)return;return{ref:G,createdAt:Date.now(),runCount:Z,kind:"commit"}}catch(B){e3($.logger,`${H}: ${B instanceof Error?B.message:String(B)}`);return}},Y=`cline checkpoint session=${$.sessionId} run=${Z}`,j="";try{j=(await T2($.cwd,["stash","create",Y])).stdout.trim()}catch(H){return e3($.logger,`Checkpoint snapshot failed: ${H instanceof Error?H.message:String(H)}`),X("Checkpoint HEAD fallback failed")}if(!j)return X("Checkpoint HEAD fallback failed");let V=`refs/cline/checkpoints/${$.sessionId}/${Z}`;try{await T2($.cwd,["update-ref",V,j])}catch(H){e3($.logger,`Checkpoint store failed: ${H instanceof Error?H.message:String(H)}`);return}return{ref:j,createdAt:Date.now(),runCount:Z,kind:"stash"}};return{beforeRun:async({snapshot:X})=>{if(X.parentAgentId!=null)return;Z+=1;return},beforeModel:async({snapshot:X})=>{if(X.parentAgentId!=null||X.iteration!==1||Z<1)return;let Y=await J();if(!Y)return;let j=await $.readSessionMetadata(),V=sR(j);if(V?.latest.ref===Y.ref)return;let H=oR(V?.history??[],Y);await $.writeSessionMetadata({...j??{},checkpoint:{latest:Y,history:H}});return}}}import{spawn as YE}from"node:child_process";import{appendFileSync as jE,readFileSync as VE}from"node:fs";import{join as HE}from"node:path";import{augmentNodeCommandForDebug as IG,withResolvedClineBuildEnv as WJ}from"@cline/shared";import{ensureHookLogDir as hG}from"@cline/shared/storage";function m8($,Z){if(!Z)return;return{name:$,manifest:{capabilities:["hooks"]},hooks:Z}}import{existsSync as tR,readdirSync as eR}from"node:fs";import{basename as $E,extname as ZE,join as QE}from"node:path";import{HOOKS_CONFIG_DIRECTORY_NAME as lZ,resolveHooksConfigSearchPaths as WE}from"@cline/shared/storage";function a6($){return WE($)}var v8;((B)=>{B.TaskStart="TaskStart";B.TaskResume="TaskResume";B.TaskCancel="TaskCancel";B.TaskComplete="TaskComplete";B.TaskError="TaskError";B.PreToolUse="PreToolUse";B.PostToolUse="PostToolUse";B.UserPromptSubmit="UserPromptSubmit";B.PreCompact="PreCompact";B.SessionShutdown="SessionShutdown"})(v8||={});var s6={["TaskStart"]:"agent_start",["TaskResume"]:"agent_resume",["TaskCancel"]:"agent_abort",["TaskComplete"]:"agent_end",["TaskError"]:"agent_error",["PreToolUse"]:"tool_call",["PostToolUse"]:"tool_result",["UserPromptSubmit"]:"prompt_submit",["PreCompact"]:void 0,["SessionShutdown"]:"session_shutdown"},JE=new Map(Object.values(v8).map(($)=>[$.toLowerCase(),$])),XE=new Set(["",".sh",".bash",".zsh",".js",".mjs",".cjs",".ts",".mts",".cts",".py",".ps1"]);function o6($){let Z=ZE($).toLowerCase();if(!XE.has(Z))return;let Q=$E($,Z).trim().toLowerCase();return JE.get(Q)}function N$($){let Z=[],Q=new Set,W=a6($).filter((J)=>tR(J));for(let J of W)try{for(let X of eR(J,{withFileTypes:!0})){if(!X.isFile())continue;let Y=o6(X.name);if(!Y)continue;let j=QE(J,X.name);if(Q.has(j))continue;Q.add(j),Z.push({fileName:Y,hookEventName:s6[Y],path:j})}}catch{}return Z.sort((J,X)=>J.path.localeCompare(X.path))}function rZ($){if(!$||typeof $!=="object")return{};let Z={};for(let[Q,W]of Object.entries($))Z[Q]=typeof W==="string"?W:JSON.stringify(W);return Z}function pZ($,Z,Q){let W=Q instanceof Error?`: ${Q.message}`:"",J=`${Z}${W}`;if($){try{$.log(J,{severity:"warn",...Q!==void 0?{error:Q}:{}})}catch{}return}console.warn(J)}function BE($,Z){if(!Z)return $;if(!$)return{...Z};let Q=[$.context,Z.context].filter((J)=>typeof J==="string"&&J.length>0).join(`
|
|
476
|
+
`),W=[...$.appendMessages??[],...Z.appendMessages??[]];return{cancel:$.cancel===!0||Z.cancel===!0?!0:void 0,review:$.review===!0||Z.review===!0?!0:void 0,context:Q||void 0,overrideInput:Z.overrideInput!==void 0?Z.overrideInput:$.overrideInput,systemPrompt:Z.systemPrompt!==void 0?Z.systemPrompt:$.systemPrompt,appendMessages:W.length>0?W:void 0}}function GE($){if(!$||typeof $!=="object")return;let Z=$,Q=typeof Z.context==="string"?Z.context:typeof Z.contextModification==="string"?Z.contextModification:typeof Z.errorMessage==="string"?Z.errorMessage:void 0;return{cancel:typeof Z.cancel==="boolean"?Z.cancel:void 0,review:typeof Z.review==="boolean"?Z.review:void 0,context:Q,overrideInput:Object.hasOwn(Z,"overrideInput")?Z.overrideInput:void 0}}function ZJ($){let Z=String($??"").toLowerCase();return Z.includes("cancel")||Z.includes("abort")||Z.includes("interrupt")}function q0($,Z){let Q=process.env.CLINE_USER_ID?.trim()||process.env.USER?.trim()||"unknown",W={rootSessionId:Z.rootSessionId||$.conversationId};return{clineVersion:process.env.CLINE_VERSION?.trim()||"",timestamp:new Date().toISOString(),taskId:$.conversationId,sessionContext:W,workspaceRoots:Z.workspacePath?[Z.workspacePath]:[],workspaceInfo:Z.workspaceInfo,userId:Q,agent_id:$.agentId,parent_agent_id:$.parentAgentId}}function KE($){let Z=$.trim();if(!Z)return{};let W=Z.split(`
|
|
477
|
+
`).map((X)=>X.trim()).filter(Boolean).filter((X)=>X.startsWith("HOOK_CONTROL\t")).map((X)=>X.slice(13)),J=W.length>0?W[W.length-1]:Z;try{return{parsedJson:JSON.parse(J)}}catch(X){return{parseError:X instanceof Error?X.message:"Failed to parse hook stdout JSON"}}}async function FE($,Z){let Q=$.stdin;if(!Q)throw Error("hook command failed to create stdin");await new Promise((W,J)=>{let X=!1,Y=()=>{Q.off("error",V),Q.off("finish",H),$.off("close",B)},j=(G)=>{if(X)return;if(X=!0,Y(),G){let K=G.code;if(K==="EPIPE"||K==="ERR_STREAM_DESTROYED"){W();return}J(G);return}W()},V=(G)=>j(G),H=()=>j(),B=()=>j();Q.on("error",V),Q.once("finish",H),$.once("close",B);try{Q.end(Z)}catch(G){j(G)}})}async function xG($,Z){if(Z.command.length===0)throw Error("runHookCommand requires non-empty command");try{return await kG($,Z)}catch(Q){let W=UE(Z.command,process.platform,Q);if(!W)throw Q;return await kG($,{...Z,command:W})}}async function kG($,Z){let Q=IG(Z.command,{env:Z.env,debugRole:"hook"}),W=YE(Q[0],Q.slice(1),{cwd:Z.cwd,env:WJ(Z.env),stdio:Z.detached?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:Z.detached,windowsHide:!0}),J=new Promise((K)=>{W.once("spawn",()=>K())}),X=new Promise((K,F)=>{W.once("error",(A)=>F(A))}),Y=JSON.stringify($);if(await Promise.race([J,X]),await FE(W,Y),Z.detached){W.unref();return}if(!W.stdout||!W.stderr)throw Error("hook command failed to create stdout/stderr");let j="",V="",H=!1,B;W.stdout.on("data",(K)=>{j+=K.toString()}),W.stderr.on("data",(K)=>{V+=K.toString()});let G=new Promise((K)=>{if((Z.timeoutMs??0)>0)B=setTimeout(()=>{H=!0,W.kill("SIGKILL")},Z.timeoutMs);W.once("close",(F)=>{if(B)clearTimeout(B);let{parsedJson:A,parseError:L}=KE(j);K({exitCode:F,stdout:j,stderr:V,parsedJson:A,parseError:L,timedOut:H})})});return await Promise.race([G,X])}function AE($){try{let Q=VE($,"utf8").split(/\r?\n/,1)[0]?.trim();if(!Q?.startsWith("#!"))return;let W=Q.slice(2).trim();if(!W)return;let J=W.split(/\s+/).filter(Boolean);return J.length>0?J:void 0}catch{return}}function fE($){return!!($&&typeof $==="object"&&("code"in $)&&$.code==="ENOENT")}function UE($,Z=process.platform,Q){if(Z!=="win32"||!fE(Q))return;if($[0]!=="py"||$[1]!=="-3")return;return["python",...$.slice(2)]}function gG($){if($.length===0)return;let[Z,...Q]=$,W=Z.replace(/\\/g,"/").toLowerCase(),J=W.split("/").at(-1)??W;if(J==="env")return gG(Q);if(J==="bash"||J==="sh"||J==="zsh")return[J,...Q];if(J==="python3"||J==="python")return process.platform==="win32"?["py","-3",...Q]:[J,...Q];return $}function DE($){let Z=AE($);if(Z&&Z.length>0)return[...gG(Z)??Z,$];let Q=$.toLowerCase();if(Q.endsWith(".sh")||Q.endsWith(".bash")||Q.endsWith(".zsh"))return["bash",$];if(Q.endsWith(".js")||Q.endsWith(".mjs")||Q.endsWith(".cjs"))return IG(["node",$],{debugRole:"hook"});if(Q.endsWith(".ts")||Q.endsWith(".mts")||Q.endsWith(".cts"))return["bun","run",$];if(Q.endsWith(".py"))return process.platform==="win32"?["py","-3",$]:["python3",$];if(Q.endsWith(".ps1"))return[process.platform==="win32"?"powershell":"pwsh","-File",$];return["bash",$]}function LE($){let Z={};for(let Q of N$($)){if(!Q.hookEventName)continue;let W=Q.hookEventName,J=Z[W]??[];J.push(DE(Q.path)),Z[W]=J}return Z}async function _E($){let Z;for(let Q of $.commands){let W=Q.join(" ");try{let J=await xG($.payload,{command:Q,cwd:$.cwd,env:WJ(process.env),detached:!1,timeoutMs:$.timeoutMs});if(J?.timedOut){pZ($.logger,`hook command timed out: ${W}`);continue}if(J?.parseError){pZ($.logger,`hook command returned invalid JSON control output: ${W} (${J.parseError})`);continue}Z=BE(Z,GE(J?.parsedJson))}catch(J){pZ($.logger,`hook command failed: ${W}`,J)}}return Z}function O2($){for(let Z of $.commands){let Q=Z.join(" ");xG($.payload,{command:Z,cwd:$.cwd,env:WJ(process.env),detached:!0}).catch((W)=>{pZ($.logger,`hook command failed: ${Q}`,W)})}}function w$($){return{agentId:$.agentId,conversationId:$.conversationId??$.runId??$.agentId,parentAgentId:$.parentAgentId??null}}function QJ($,Z){return{...w$($.snapshot),userMessage:Z}}function mG($){return{...w$($.snapshot),iteration:$.snapshot.iteration,call:{id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:$.input}}}function vG($){return{...w$($.snapshot),iteration:$.snapshot.iteration,record:{id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:$.input,output:$.result.output,error:$.result.isError?String($.result.output):void 0,durationMs:$.durationMs,startedAt:$.startedAt,endedAt:$.endedAt}}}function cG($){return $.filter((Z)=>Z.type==="text"&&typeof Z.text==="string").map((Z)=>Z.text).join("")}function zE($){if(!$)return;let Z={};if($.cancel===!0)Z.stop=!0;if($.overrideInput!==void 0)Z.input=$.overrideInput;return Object.keys(Z).length>0?Z:void 0}function c8($){let Z={cwd:$.workspacePath,workspacePath:$.workspacePath,rootSessionId:$.rootSessionId,workspaceInfo:$.workspaceInfo},Q=(W)=>{let J=`${JSON.stringify({ts:new Date().toISOString(),...W})}
|
|
478
|
+
`,Y=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??HE(hG(),"hooks.jsonl");hG(Y),jE(Y,J,"utf8")};return{beforeRun:async(W)=>{let J=QJ(W,"");Q({...q0(J,Z),hookName:"agent_start",taskStart:{taskMetadata:{}}});return},beforeTool:async(W)=>{let J=mG(W);Q({...q0(J,Z),hookName:"tool_call",iteration:J.iteration,tool_call:{id:J.call.id,name:J.call.name,input:J.call.input},preToolUse:{toolName:J.call.name,parameters:rZ(J.call.input)}});return},afterTool:async(W)=>{let J=vG(W);Q({...q0(J,Z),hookName:"tool_result",iteration:J.iteration,tool_result:J.record,postToolUse:{toolName:J.record.name,parameters:rZ(J.record.input),result:typeof J.record.output==="string"?J.record.output:JSON.stringify(J.record.output),success:!J.record.error,executionTimeMs:J.record.durationMs}});return},afterRun:async({snapshot:W,result:J})=>{let X=w$(W);if(J.status==="completed"){Q({...q0(X,Z),hookName:"agent_end",iteration:J.iterations,turn:{outputText:J.outputText,status:J.status},taskComplete:{taskMetadata:{}}});return}if(J.status==="aborted"||ZJ(J.error?.message)){Q({...q0(X,Z),hookName:"agent_abort",reason:J.error?.message,taskCancel:{taskMetadata:{}}});return}if(J.error)Q({...q0(X,Z),hookName:"agent_error",iteration:J.iterations,error:{name:J.error.name,message:J.error.message,stack:J.error.stack}})},onEvent:async(W)=>{if(W.type!=="message-added"||W.message.role!=="user")return;let J=QJ({snapshot:W.snapshot},cG(W.message.content));Q({...q0(J,Z),hookName:"prompt_submit",userPromptSubmit:{prompt:J.userMessage,attachments:[]}})}}}function t6($){let Z=LE($.workspacePath);if(!Object.values(Z).some((G)=>G.length>0))return;let W=async(G,K)=>{let F=Z[K]??[];if(F.length===0)return;O2({commands:F,cwd:$.cwd,logger:$.logger,payload:K==="agent_resume"?{...q0(G,$),hookName:K,taskResume:{taskMetadata:{},previousState:{}}}:{...q0(G,$),hookName:K,taskStart:{taskMetadata:{}}}})},J=async(G)=>{let K=Z.prompt_submit??[];if(K.length>0)O2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...q0(G,$),hookName:"prompt_submit",userPromptSubmit:{prompt:G.userMessage,attachments:[]}}})},X=async(G)=>{let K=Z.tool_call??[];if(K.length===0)return;return _E({commands:K,cwd:$.cwd,logger:$.logger,timeoutMs:$.toolCallTimeoutMs??120000,payload:{...q0(G,$),hookName:"tool_call",iteration:G.iteration,tool_call:{id:G.call.id,name:G.call.name,input:G.call.input},preToolUse:{toolName:G.call.name,parameters:rZ(G.call.input)}}})},Y=async(G)=>{let K=Z.tool_result??[];if(K.length===0)return;O2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...q0(G,$),hookName:"tool_result",iteration:G.iteration,tool_result:G.record,postToolUse:{toolName:G.record.name,parameters:rZ(G.record.input),result:typeof G.record.output==="string"?G.record.output:JSON.stringify(G.record.output),success:!G.record.error,executionTimeMs:G.record.durationMs}}})},j=async(G)=>{let K=Z.agent_end??[];if(K.length===0)return;O2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...q0(G,$),hookName:"agent_end",iteration:G.iteration,turn:G.turn,taskComplete:{taskMetadata:{}}}})},V=async(G)=>{let K=Z.agent_error??[];if(K.length===0)return;O2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...q0(G,$),hookName:"agent_error",iteration:G.iteration,error:{name:G.error.name,message:G.error.message,stack:G.error.stack}}})},H=async(G)=>{if(ZJ(G.reason)){let F=Z.agent_abort??[];if(F.length>0)O2({commands:F,cwd:$.cwd,logger:$.logger,payload:{...q0(G,$),hookName:"agent_abort",reason:G.reason,taskCancel:{taskMetadata:{}}}})}let K=Z.session_shutdown??[];if(K.length===0)return;O2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...q0(G,$),hookName:"session_shutdown",reason:G.reason}})},B={};if((Z.agent_start?.length??0)>0||(Z.agent_resume?.length??0)>0||(Z.prompt_submit?.length??0)>0){if((Z.agent_start?.length??0)>0||(Z.agent_resume?.length??0)>0)B.beforeRun=async(G)=>{let K=process.env.CLINE_HOOK_AGENT_RESUME==="1"?"agent_resume":"agent_start";await W(w$(G.snapshot),K);return};if((Z.prompt_submit?.length??0)>0)B.onEvent=async(G)=>{if(G.type!=="message-added"||G.message.role!=="user")return;await J(QJ({snapshot:G.snapshot},cG(G.message.content)))}}if((Z.tool_call?.length??0)>0)B.beforeTool=async(G)=>{let K=await X(mG(G));return zE(K)};if((Z.tool_result?.length??0)>0)B.afterTool=async(G)=>{await Y(vG(G));return};if((Z.agent_end?.length??0)>0)B.afterRun=async({snapshot:G,result:K})=>{if(K.status!=="completed")return;await j({...w$(G),iteration:K.iterations,turn:{outputText:K.outputText,status:K.status}})};if((Z.agent_error?.length??0)>0||(Z.agent_abort?.length??0)>0||(Z.session_shutdown?.length??0)>0){let G=B.afterRun;B.afterRun=async(K)=>{await G?.(K);let{snapshot:F,result:A}=K;if(A.status==="aborted"||ZJ(A.error?.message)){await H({...w$(F),reason:A.error?.message});return}if(A.error)await V({...w$(F),iteration:A.iterations,error:A.error})}}return B}function u8($){return m8("core.hook_config_files",t6($))}function q2($,Z){let Q=$.map((W)=>W[Z]).filter((W)=>typeof W==="function");if(Q.length===0)return;return async(W)=>{let J;for(let X of Q){let Y=await X(W);if(!Y||typeof Y!=="object")continue;let j=Y;J={...J??{},...j,stop:J?.stop===!0||j.stop===!0?!0:j.stop,options:J?.options||j.options?{...J?.options??{},...j.options??{}}:void 0}}return J}}function M2($){let Z=$.filter((Q)=>Q!==void 0);if(Z.length===0)return;return{beforeRun:q2(Z,"beforeRun"),afterRun:q2(Z,"afterRun"),beforeModel:q2(Z,"beforeModel"),afterModel:q2(Z,"afterModel"),beforeTool:q2(Z,"beforeTool"),afterTool:q2(Z,"afterTool"),onEvent:q2(Z,"onEvent")}}var uG={};N(uG,{normalizeRuntimeCapabilities:()=>M0});function M0(...$){let Z,Q;for(let J of $){if(!J)continue;if(J.toolExecutors)Z={...Z??{},...J.toolExecutors};if(J.requestToolApproval)Q=J.requestToolApproval}let W=Z&&Object.keys(Z).length>0;if(!W&&!Q)return;return{...W?{toolExecutors:Z}:{},...Q?{requestToolApproval:Q}:{}}}var oG={};N(oG,{toProviderConfig:()=>l0,emptyStoredProviderSettings:()=>S$,StoredProviderSettingsSchema:()=>r8,StoredProviderSettingsEntrySchema:()=>fQ,ProviderSettingsSchemaTyped:()=>p8});import{z as P$}from"zod";var sG={};N(sG,{toProviderConfig:()=>l0,safeParseSettings:()=>AQ,safeCreateProviderConfig:()=>FJ,parseSettings:()=>FQ,normalizeProviderId:()=>l8,isBuiltInProviderId:()=>GJ,createProviderConfig:()=>KJ,SapSettingsSchema:()=>BQ,ReasoningSettingsSchema:()=>YQ,ProviderSettingsSchema:()=>C$,ProviderProtocolSchema:()=>WQ,ProviderIdSchema:()=>W5,ProviderClientSchema:()=>JQ,OcaSettingsSchema:()=>GQ,ModelCatalogSettingsSchema:()=>KQ,GcpSettingsSchema:()=>VQ,BUILT_IN_PROVIDER_IDS:()=>BJ,BUILT_IN_PROVIDER:()=>Q5,AzureSettingsSchema:()=>HQ,AwsSettingsSchema:()=>jQ,AuthSettingsSchema:()=>XQ});import*as d0 from"@cline/llms";import{z as w}from"zod";var aG={};N(aG,{resolveProviderConfig:()=>Z5,getProviderConfig:()=>QQ,getLiveModelsCatalog:()=>d8,clearPublicModelsCatalogCache:()=>dE,clearPrivateModelsCatalogCache:()=>HJ,clearLiveModelsCatalogCache:()=>VJ,OPENAI_COMPATIBLE_PROVIDERS:()=>$5,DEFAULT_MODELS_CATALOG_URL:()=>tZ});import*as s from"@cline/llms";function JJ($){if(!Array.isArray($))return[];return $.map((Z)=>{if(typeof Z==="string")return Z.trim();if(Z&&typeof Z==="object"){let Q=Z;for(let W of[Q.id,Q.name,Q.model])if(typeof W==="string"&&W.trim())return W.trim()}return""}).filter((Z)=>Z.length>0)}function TE($,Z){let Q=JJ($);if(Q.length>0)return Q;if(!$||typeof $!=="object")return[];let W=$,J=JJ(W.data??W.models);if(J.length>0)return J;if(W.models&&typeof W.models==="object"&&!Array.isArray(W.models)){let Y=Object.keys(W.models).filter((j)=>j.trim().length>0);if(Y.length>0)return Y}let X=W.providers?.[Z];if(X&&typeof X==="object"){let j=JJ(X.models??X);if(j.length>0)return j}return[]}async function iZ($,Z){let Q=await fetch($,{method:"GET"});if(!Q.ok)throw Error(`failed to fetch models from ${$}: HTTP ${Q.status}`);return TE(await Q.json(),Z)}function dG($){return $.replace(/\/+$/,"")}function nZ($,Z,Q){let W=Q?.trim();if(!W)return;let J=$?.trim();if(!J||!Z?.trim())return W;try{let X=new URL(W),Y=new URL(Z),j=new URL(J);if(X.origin!==Y.origin)return W;let V=dG(Y.pathname),H=dG(j.pathname);if(V&&X.pathname.startsWith(`${V}/`)){let B=X.pathname.slice(V.length);j.pathname=`${H}${B}`}else j.pathname=X.pathname;return j.search=X.search,j.hash=X.hash,j.toString()}catch{return W}}function OE($){return Object.fromEntries(Object.entries($).map(([Z,Q])=>[Z,{...Q}]))}function qE($){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 ME=Object.values(s.MODEL_COLLECTIONS_BY_PROVIDER_ID).map(($)=>({id:$.provider.id,baseUrl:$.provider.baseUrl??"",modelsSourceUrl:$.provider.modelsSourceUrl,modelId:$.provider.defaultModelId,knownModels:OE($.models),capabilities:$.provider.capabilities?[...$.provider.capabilities]:void 0,env:$.provider.env?[...$.provider.env]:void 0,client:$.provider.client,protocol:$.provider.protocol})),pG=Object.fromEntries(ME.map(($)=>[$.id,$]));function RE($){return pG[$]}function EE(){return Object.fromEntries(Object.entries(pG).filter(([,$])=>qE($)))}function rG($=[]){let Z=$.flatMap((Q)=>{switch(Q){case"reasoning":case"prompt-cache":case"tools":case"oauth":return[Q];default:return[]}});return Z.length>0?Z:void 0}var tZ="https://models.dev/api.json",NE=600000,iG=300000,wE=5000,oZ=new Map,e6=new Map,XJ=new Map,aZ=new Map;async function CE(){return s.getGeneratedProviderModels()}async function PE($,Z={},Q={},W={},J={},X={}){if($==="litellm")return s.sortModelsByReleaseDate(W);let Y=await CE(),j=s.resolveProviderModelCatalogKeys($),V=Object.assign({},...j.map((K)=>Y[K]??{})),H=Boolean(s.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl),B=Object.keys(J).length>0;if(H&&B)return s.sortModelsByReleaseDate({...J,...X});if($==="openai-codex")return s.sortModelsByReleaseDate({...Z,...s.filterOpenAICodexModels(Q),...J,...X});if($==="cline-pass"&&Object.keys(Q).length>0)return s.sortModelsByReleaseDate({...Q,...X});let G=s.sortModelsByReleaseDate({...V,...Z,...Q,...W,...J});if($==="cline")return s.sortModelsByReleaseDate({...s.preferCanonicalModelIds(G,s.VERCEL_OPENROUTER_MODEL_ID_ALIAS_RULES),...X});return s.sortModelsByReleaseDate({...G,...X})}function SE($,Z){let Q=s.resolveProviderModelCatalogKeys($);return Object.assign({},...Q.map((W)=>Z[W]??{}))}function eZ($){let Z=$?.trim();return Z&&Z.length>0?Z:""}function jJ($){let Z=$.apiKey?.trim()||$.accessToken?.trim();return Z&&Z.length>0?Z:void 0}function bE($){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 yE($,Z){return`${$}:${eZ(Z.baseUrl)}:${bE(jJ(Z)??"")}`}async function $Q($,Z,Q=wE){let W=new AbortController,J=setTimeout(()=>W.abort(),Q);try{return await fetch($,{...Z,signal:W.signal})}finally{clearTimeout(J)}}function R2($,Z,Q){if(Q&&!$.includes(Z))$.push(Z)}function ZQ($,Z){let Q=["streaming","tools"];return R2(Q,"images",Boolean(Z.supportsImages)),R2(Q,"prompt-cache",Boolean(Z.supportsPromptCache)),R2(Q,"reasoning",Boolean(Z.supportsReasoning)),{id:$,name:Z.name??$,contextWindow:Z.contextWindow,maxInputTokens:Z.maxInputTokens,maxTokens:Z.maxTokens,capabilities:Q,releaseDate:Z.releaseDate,status:"active"}}async function hE($,Z){let Q=await $Q("https://inference.baseten.co/v1/models",{method:"GET",headers:{Authorization:`Bearer ${Z}`,"Content-Type":"application/json"}});if(!Q.ok)throw Error(`Baseten model refresh failed: HTTP ${Q.status}`);let J=(await Q.json())?.data??[],X={};for(let Y of J){let j=Y.id?.trim();if(!j)continue;if(j.includes("whisper")||j.includes("tts")||j.includes("embedding"))continue;let V=Y.supported_features??[];X[j]=ZQ(j,{name:j,contextWindow:Y.context_length,maxInputTokens:Y.context_length,maxTokens:Y.max_completion_tokens,supportsReasoning:V.includes("reasoning")||V.includes("reasoning_effort"),supportsImages:!1})}return X}function lG($){if(typeof $==="number")return Number.isFinite($)?$:void 0;if(typeof $==="string"){let Z=Number($);return Number.isFinite(Z)?Z:void 0}return}async function kE($,Z){let Q=await $Q("https://api.hicap.ai/v2/openai/models",{method:"GET",headers:{"api-key":Z}});if(!Q.ok)throw Error(`Hicap model refresh failed: HTTP ${Q.status}`);let J=(await Q.json())?.data??[],X={};for(let Y of J){let j=Y.id?.trim();if(!j)continue;X[j]=ZQ(j,{name:j,maxInputTokens:128000,supportsImages:!0,supportsPromptCache:!0})}return X}async function IE($,Z){let W=`${(eZ($.baseUrl)||"https://inference.poolside.ai/v1").replace(/\/+$/,"")}/models`,J=await $Q(W,{method:"GET",headers:{Authorization:`Bearer ${Z}`,accept:"application/json"}});if(!J.ok)throw Error(`Poolside model refresh failed: HTTP ${J.status}`);let Y=(await J.json())?.data??[],j={};for(let V of Y){let H=V.id?.trim();if(!H)continue;let B=V.supported_features??[],G=V.supported_sampling_parameters??[],K=V.input_modalities??[],F=["streaming"];R2(F,"tools",B.includes("tools")),R2(F,"reasoning",B.includes("reasoning")),R2(F,"temperature",G.includes("temperature")),R2(F,"images",K.includes("image"));let A={input:lG(V.pricing?.prompt),output:lG(V.pricing?.completion)};j[H]={id:H,name:V.name??H,description:V.description,contextWindow:V.context_length,maxInputTokens:V.context_length,maxTokens:V.max_completion_tokens,capabilities:F,pricing:A.input!==void 0||A.output!==void 0?A:void 0,status:"active"}}return j}function xE($){let Z=eZ($).replace(/\/+$/,"");if(!Z)return"http://localhost:4000";return Z.endsWith("/v1")?Z.slice(0,-3):Z}function gE($){return[`${$}/v1/model/info`,`${$}/model/info`]}async function mE($){let Z=(await $.text().catch(()=>"")).replace(/\s+/g," ").trim(),Q=500,W=Z?`: ${Z.slice(0,500)}${Z.length>500?"...":""}`:"";return`HTTP ${$.status}${W}`}async function vE($,Z){let Q=xE($.baseUrl),W=[],J=[["x-litellm-api-key",{"x-litellm-api-key":Z}],["Authorization",{Authorization:`Bearer ${Z}`}]];for(let X of gE(Q))for(let[Y,j]of J)try{let V=await $Q(X,{method:"GET",headers:{accept:"application/json",...j}});if(V.ok){let B=(await V.json())?.data??[],G={};for(let K of B){let F=K.model_name?.trim(),L=K.litellm_params?.model?.trim()||F;if(!L)continue;let f=K.model_info,D=ZQ(L,{name:F??L,maxTokens:f?.max_output_tokens??f?.max_tokens,maxInputTokens:f?.max_input_tokens??f?.max_tokens,supportsImages:f?.supports_vision,supportsPromptCache:f?.supports_prompt_caching,supportsReasoning:f?.supports_reasoning});if(G[L]=D,F)G[F]={...D,id:F,name:F}}return G}W.push(`${new URL(X).pathname} (${Y}): ${await mE(V)}`)}catch(V){let H=V instanceof Error?V.message:String(V);W.push(`${new URL(X).pathname} (${Y}): ${H}`)}throw Error(`LiteLLM model refresh failed. Attempts: ${W.join("; ")}`)}var nG={baseten:hE,hicap:kE,litellm:vE,poolside:IE},YJ=new Map,sZ=new Map;function cE($,Z){return`${$}:${eZ(Z.baseUrl)}`}async function uE($,Z,Q){let W=s.MODEL_COLLECTIONS_BY_PROVIDER_ID[$],J=nZ(Q.baseUrl,W?.provider.baseUrl,W?.provider.modelsSourceUrl);if(!J)return{};let X=Z?.cacheTtlMs??iG,Y=cE($,Q),j=Date.now(),V=YJ.get(Y);if(V&&V.expiresAt>j)return V.data;let H=sZ.get(Y);if(H)return H;let B=iZ(J,$).then((G)=>{let K=Object.fromEntries(G.map((F)=>[F,ZQ(F,{name:F})]));return YJ.set(Y,{data:K,expiresAt:j+X}),K}).finally(()=>{sZ.delete(Y)});return sZ.set(Y,B),B}function dE(){YJ.clear(),sZ.clear()}async function lE($,Z){let Q=jJ(Z);if(!Q)return{};let W=nG[$];if(!W)return{};return W(Z,Q)}function pE($,Z,Q){if(!Q)return!1;if(!nG[$])return!1;if(Z?.loadPrivateOnAuth===!1)return!1;return Boolean(jJ(Q))}async function rE($,Z,Q){let W=Z?.cacheTtlMs??iG,J=yE($,Q),X=Date.now(),Y=XJ.get(J);if(Y&&Y.expiresAt>X)return Y.data;let j=aZ.get(J);if(j)return j;let V=lE($,Q).then((H)=>{return XJ.set(J,{data:H,expiresAt:X+W}),H}).finally(()=>{aZ.delete(J)});return aZ.set(J,V),V}async function iE($){return s.fetchLiveProviderModels($,globalThis.fetch)}async function d8($={}){let Z=$.url??tZ,Q=$.cacheTtlMs??NE,W=Date.now(),J=oZ.get(Z);if(J&&J.expiresAt>W)return J.data;let X=e6.get(Z);if(X)return X;let Y=iE(Z).then((j)=>{return oZ.set(Z,{data:j,expiresAt:W+Q}),j}).finally(()=>{e6.delete(Z)});return e6.set(Z,Y),Y}function VJ($){if($){oZ.delete($),e6.delete($);return}oZ.clear(),e6.clear()}function HJ(){XJ.clear(),aZ.clear()}function nE($){return Object.fromEntries(Object.entries($).map(([Z,Q])=>[Z,{baseUrl:Q.baseUrl,modelId:Q.modelId,capabilities:rG(Q.capabilities)}]))}var $5=nE(EE());function QQ($){let Z=RE($);if(!Z)return;return{baseUrl:Z.baseUrl||void 0,modelId:Z.modelId,knownModels:Z.knownModels,capabilities:rG(Z.capabilities)}}async function Z5($,Z,Q){let W=QQ($);if(!W)return;try{let J=Z?.loadLatestOnInit?await d8(Z):void 0,X=J?SE($,J):{},Y=Q&&pE($,Z,Q)?await rE($,Z,Q):{},V=Boolean(s.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl)?Q??{providerId:$,modelId:W.modelId,baseUrl:W.baseUrl}:Q,H=V?await uE($,Z,V).catch(()=>({})):{},B=await PE($,W.knownModels,X,Y,H,Q?.knownModels);return{...W,knownModels:B}}catch(J){if(Z?.failOnError)throw J;if($==="litellm")return{...W,knownModels:{}};return W}}var Q5=d0.BUILT_IN_PROVIDER,BJ=d0.BUILT_IN_PROVIDER_IDS,GJ=d0.isBuiltInProviderId,l8=d0.normalizeProviderId,W5=w.string().min(1).regex(/^[a-z0-9][a-z0-9-]*$/i),WQ=w.enum(["anthropic","gemini","openai-chat","openai-responses","openai-r1","ai-sdk"]),JQ=w.enum(["anthropic","ai-sdk","ai-sdk-community","openai","openai-compatible","openai-r1","gemini","bedrock","custom","fetch","vertex"]),XQ=w.object({apiKey:w.string().optional(),accessToken:w.string().optional(),refreshToken:w.string().optional(),expiresAt:w.number().int().positive().optional(),accountId:w.string().optional()}),aE=w.enum(["none","low","medium","high","xhigh"]),YQ=w.object({enabled:w.boolean().optional(),effort:aE.optional(),budgetTokens:w.number().int().positive().optional()}),jQ=w.object({accessKey:w.string().optional(),secretKey:w.string().optional(),sessionToken:w.string().optional(),region:w.string().optional(),profile:w.string().optional(),authentication:w.enum(["iam","api-key","apikey","profile"]).optional(),usePromptCache:w.boolean().optional(),useCrossRegionInference:w.boolean().optional(),useGlobalInference:w.boolean().optional(),endpoint:w.string().url().optional(),customModelBaseId:w.string().optional()}),VQ=w.object({projectId:w.string().optional(),region:w.string().optional()}),HQ=w.object({apiVersion:w.string().optional(),useIdentity:w.boolean().optional()}),BQ=w.object({clientId:w.string().optional(),clientSecret:w.string().optional(),tokenUrl:w.string().url().optional(),resourceGroup:w.string().optional(),deploymentId:w.string().optional(),useOrchestrationMode:w.boolean().optional(),api:w.enum(["orchestration","foundation-models"]).optional(),defaultSettings:w.record(w.string(),w.unknown()).optional()}),GQ=w.object({mode:w.enum(["internal","external"]).optional(),usePromptCache:w.boolean().optional()}),KQ=w.object({loadLatestOnInit:w.boolean().optional(),loadPrivateOnAuth:w.boolean().optional(),url:w.string().url().optional(),cacheTtlMs:w.number().int().positive().optional(),failOnError:w.boolean().optional()}),C$=w.object({provider:W5,apiKey:w.string().optional(),auth:XQ.optional(),model:w.string().optional(),protocol:WQ.optional(),client:JQ.optional(),routingProviderId:W5.optional(),maxTokens:w.number().int().positive().optional(),contextWindow:w.number().int().positive().optional(),baseUrl:w.string().url().optional(),headers:w.record(w.string(),w.string()).optional(),timeout:w.number().int().positive().optional(),reasoning:YQ.optional(),aws:jQ.optional(),gcp:VQ.optional(),azure:HQ.optional(),sap:BQ.optional(),oca:GQ.optional(),region:w.string().optional(),apiLine:w.enum(["china","international"]).optional(),capabilities:w.array(w.enum(["reasoning","prompt-cache","streaming","tools","vision","computer-use","oauth","popular"])).optional(),modelCatalog:KQ.optional()});function FQ($){return C$.parse($)}function AQ($){return C$.safeParse($)}function sE($){return $.protocol==="openai-responses"||$.client==="openai"}function l0($,Z={}){let Q=$.provider,W=l8(Q),J=Z.includeKnownModels!==!1,X=$.reasoning?.effort||"none",Y=X==="none"?void 0:X,j=$5[W],V=Object.assign({},...d0.resolveProviderModelCatalogKeys(W).map((L)=>d0.getGeneratedModelsForProvider(L))),H=Object.keys(V)[0],B=U8(W,$),G=$.baseUrl??(W==="oca"?$.oca?.mode==="internal"?jZ:VZ:j?.baseUrl),K=$.routingProviderId??(sE($)&&W!==Q5.OPENAI_NATIVE?Q5.OPENAI_NATIVE:void 0),F=J?j?.knownModels??(Object.keys(V).length>0?V:void 0):void 0,A={providerId:Q,clientType:$.client,routingProviderId:K,modelId:$.model??j?.modelId??H??"default",...J?{knownModels:F}:{},apiKey:B,accessToken:$.auth?.accessToken,refreshToken:$.auth?.refreshToken,accountId:$.auth?.accountId,baseUrl:G,headers:$.headers,timeoutMs:$.timeout,maxOutputTokens:$.maxTokens,maxInputTokens:$.contextWindow,thinking:$.reasoning?.enabled,reasoningEffort:Y,thinkingBudgetTokens:$.reasoning?.budgetTokens,region:$.region??$.aws?.region??$.gcp?.region,apiLine:$.apiLine,useCrossRegionInference:$.aws?.useCrossRegionInference,useGlobalInference:$.aws?.useGlobalInference,aws:$.aws?{accessKey:$.aws.accessKey,secretKey:$.aws.secretKey,sessionToken:$.aws.sessionToken,authentication:$.aws.authentication,profile:$.aws.profile,usePromptCache:$.aws.usePromptCache,endpoint:$.aws.endpoint,customModelBaseId:$.aws.customModelBaseId}:void 0,gcp:$.gcp?{projectId:$.gcp.projectId,region:$.gcp.region}:void 0,azure:$.azure,sap:$.sap,oca:$.oca,capabilities:$.capabilities??j?.capabilities,modelCatalog:$.modelCatalog?{loadLatestOnInit:$.modelCatalog.loadLatestOnInit,loadPrivateOnAuth:$.modelCatalog.loadPrivateOnAuth,url:$.modelCatalog.url,cacheTtlMs:$.modelCatalog.cacheTtlMs,failOnError:$.modelCatalog.failOnError}:void 0};return Object.fromEntries(Object.entries(A).filter(([L,f])=>f!==void 0))}function KJ($){let Z=FQ($);return l0(Z)}function FJ($){let Z=AQ($);if(Z.success)return{success:!0,config:l0(Z.data)};return{success:!1,error:Z.error}}var p8=C$;var fQ=P$.object({settings:C$,updatedAt:P$.string().datetime(),tokenSource:P$.enum(["manual","oauth","migration"]).default("manual")}),r8=P$.object({version:P$.literal(1),lastUsedProvider:P$.string().min(1).optional(),providers:P$.record(P$.string(),fQ)});function S$(){return{version:1,providers:{}}}$1();var tG={};N(tG,{InMemoryWorkspaceManager:()=>i8});import{upsertWorkspaceInfo as oE,WorkspaceManifestSchema as AJ}from"@cline/shared";class i8{manifest;listeners=new Set;constructor($){this.manifest=AJ.parse($??{workspaces:{}})}async addWorkspacePath($){let Z=await $8($);return this.manifest=oE(this.manifest,Z),this.emit({type:"workspace_added",workspace:Z}),Z}async switchWorkspace($){let Z=w1($),Q=this.manifest.workspaces[Z];if(Q)return this.manifest=AJ.parse({...this.manifest,currentWorkspacePath:Z}),this.emit({type:"workspace_switched",workspace:Q}),Q;let W=await this.addWorkspacePath(Z);return this.manifest=AJ.parse({...this.manifest,currentWorkspacePath:W.rootPath}),this.emit({type:"workspace_switched",workspace:W}),W}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}getCurrentWorkspace(){let $=this.manifest.currentWorkspacePath;if(!$)return;return this.manifest.workspaces[$]}getWorkspace($){let Z=w1($);return this.manifest.workspaces[Z]}listWorkspaces(){return Object.values(this.manifest.workspaces)}getManifest(){return this.manifest}emit($){for(let Z of this.listeners)Z($)}}_0();import{createHash as tE}from"node:crypto";var eG=new Set,$K=new Set;function eE($){return tE("sha256").update($).digest("hex")}function $N($){if($.vcsTypes&&$.vcsTypes.length>0)return $.vcsTypes;return[$.vcsType==="git"?"git":"none"]}function ZK($){if(!$.telemetry)return;let Z=eE($.rootPath),Q=$.rootCount??1;if(!eG.has(Z))eG.add(Z),T9($.telemetry,{root_count:Q,vcs_types:$N($),init_duration_ms:$.durationMs,feature_flag_enabled:$.featureFlagEnabled??!0,is_remote_workspace:$.isRemoteWorkspace});if($.initError&&!$K.has(Z)){$K.add(Z);let W=Error($.initError.message);W.name=$.initError.errorType||"Error",O9($.telemetry,W,{fallback_to_single_root:!0,workspace_count:Q})}}function QN($){return`${$.pluginName??$.pluginPath}: ${$.message}`}function WN($,Z,Q){if(Z.length>0)for(let X of Z)Q?.log(X.message,{severity:"warn"});if($.length===0)return;let W=$.slice(0,3).map(QN).join("; "),J=$.length>3?`; and ${$.length-3} more`:"";Q?.log(`Some plugins failed to initialize. ${W}${J}. Use --verbose for more details.`,{severity:"warn"});for(let X of $)Q?.log(`Plugin initialization failed (${X.phase}) for ${X.pluginPath}`,{severity:"warn",stack:X.stack,pluginPath:X.pluginPath,pluginName:X.pluginName})}function JN($,Z){let Q=typeof $.thinking==="boolean",W=typeof $.reasoningEffort==="string";if(!Q&&!W)return Z;return{...Z??{},...Q?{enabled:$.thinking}:{},...W?{effort:$.reasoningEffort}:{}}}function QK($,Z){return ZN($,Z)}function XN($){let Z=0;for(let Q of $??[]){if(Q.role!=="user")continue;if(("metadata"in Q&&Q.metadata&&typeof Q.metadata==="object"&&!Array.isArray(Q.metadata)?Q.metadata:void 0)?.kind==="recovery_notice")continue;Z+=1}return Z}function YN($){let Z={...$.storedHeaders??{},...$.configHeaders??{}},Q=$.accountId?.trim()||jN($.accessToken);if(Z.originator="cline",Z.session_id=$.sessionId,Z["User-Agent"]=`Cline/${process.env.npm_package_version||"1.0.0"}`,Q)Z["ChatGPT-Account-Id"]=Q;return Z}function jN($){let Z=$?.trim();if(!Z)return;let Q=E0(Z),W=Q?.["https://api.openai.com/auth"]?.chatgpt_account_id;if(typeof W==="string"&&W.length>0)return W;let J=Q?.organizations?.[0]?.id;if(typeof J==="string"&&J.length>0)return J;let X=Q?.chatgpt_account_id;if(typeof X==="string"&&X.length>0)return X;return}function VN($,Z,Q,W,J){let X=Q.getProviderSettings($.providerId),Y=W||X?.modelCatalog?{...W??{},...X?.modelCatalog??{}}:void 0,j=$.providerConfig?.providerId===$.providerId?$.providerConfig:void 0,V={...X??{},provider:$.providerId,model:$.modelId,apiKey:$.apiKey??X?.apiKey,baseUrl:$.baseUrl??X?.baseUrl,headers:$.providerId==="openai-codex"?YN({sessionId:Z,configHeaders:$.headers,storedHeaders:X?.headers,accountId:X?.auth?.accountId,accessToken:$.apiKey??X?.auth?.accessToken??X?.apiKey}):$.headers??X?.headers,reasoning:JN($,X?.reasoning),modelCatalog:Y},H={...l0(V),...j??{}};if($.knownModels)H.knownModels=$.knownModels;if($.extensionContext)H.extensionContext=$.extensionContext;let G=$.fetch??H.fetch??J;if(G)H.fetch=G;return H}async function WK($){let{input:Z,sessionId:Q,providerSettingsManager:W,defaultTelemetry:J,defaultCapabilities:X,defaultToolPolicies:Y,defaultFetch:j,onPluginEvent:V,onTeamEvent:H,createSubAgentLifecycleCallbacks:B,createSpawnTool:G,localRuntime:K,readSessionMetadata:F,writeSessionMetadata:A}=$,L=R$(Z.config),{modelCatalogDefaults:f,userInstructionService:D,configExtensions:U,onTeamRestored:T,...q}=K??{},z=Object.keys(q).length>0?q:void 0,{workspaceInfo:_,workspaceMetadata:E,durationMs:C,vcsType:y,initError:l}=await JW(L),o=z?.extensionContext,t={...o??{},workspace:{..._,...o?.workspace??{}},session:{...o?.session??{},sessionId:Q},logger:o?.logger??z?.logger,telemetry:o?.telemetry??z?.telemetry??J};ZK({telemetry:t.telemetry,rootPath:_.rootPath,workspaceInfo:_,rootCount:1,vcsType:y,durationMs:C,initError:l,featureFlagEnabled:!0});let Q0=u8({cwd:Z.config.cwd,workspacePath:L,rootSessionId:Q,logger:z?.logger,workspaceInfo:_}),e0=ZG(z?.hooks)?void 0:c8({rootSessionId:Q,workspacePath:L,workspaceInfo:_}),l$=M2([z?.hooks,e0]),r;if(QK(U,"plugins"))try{r=await g8({pluginPaths:z?.pluginPaths,workspacePath:L,cwd:Z.config.cwd,onEvent:V,providerId:Z.config.providerId,modelId:Z.config.modelId,workspaceInfo:_,session:t.session,client:t.client,user:t.user,logger:t.logger,telemetry:t.telemetry,automation:t.automation}),WN(r.failures,r.warnings,z?.logger)}catch(s2){let $W=s2 instanceof Error?s2.message:String(s2);z?.logger?.log?.(`plugin loading failed; continuing without plugins (${$W})`)}let P=b3(Q0?[Q0]:void 0,b3(z?.extensions,c9(r?.extensions))),B0=QK(U,"plugins")?n1(r?.pluginPaths??[]):void 0,G0={...Z.config,...z??{},sessionId:Q,hooks:l$,extensions:P,extensionContext:t,telemetry:t.telemetry},C0=VN(G0,Q,W,f,j),n2=M2([G0.hooks,G0.checkpoint?.enabled===!0?yG({cwd:G0.cwd,sessionId:Q,logger:G0.logger,createCheckpoint:G0.checkpoint?.createCheckpoint,initialRunCount:XN(Z.initialMessages),readSessionMetadata:F,writeSessionMetadata:A}):void 0]),R1={...G0,providerConfig:C0,workspaceMetadata:E,hooks:n2},H1=Z.toolPolicies??G0.toolPolicies??Y,C4=M0(X,Z.capabilities),a2=C4?.requestToolApproval,K9=C4?.toolExecutors,E1=B?.(R1),F9=new i8({currentWorkspacePath:_.rootPath,workspaces:{[_.rootPath]:_}});return{effectiveInput:Z,config:R1,providerConfig:C0,workspaceMetadata:E,workspaceInfo:_,extensions:P,hooks:n2,toolPolicies:H1,requestToolApproval:a2,pluginSandboxShutdown:r?.shutdown,runtimeBuilderInput:{config:R1,hooks:n2,extensions:P,onTeamEvent:H,createSpawnTool:G,onTeamRestored:T,onSubAgentEvent:E1?.onSubAgentEvent,onSubAgentStart:E1?.onSubAgentStart,onSubAgentEnd:E1?.onSubAgentEnd,userInstructionService:D,pluginSkillDirectories:B0,configExtensions:U,toolExecutors:K9,toolPolicies:H1,workspaceManager:F9,logger:R1.logger,telemetry:R1.telemetry,requestToolApproval:a2}}}import{existsSync as DQ,mkdirSync as HN,readdirSync as BN,rmdirSync as GN,rmSync as KN,unlinkSync as FN}from"node:fs";import{dirname as JK,join as UQ}from"node:path";function J0(){return new Date().toISOString()}function J5($){if(!$||!DQ($))return;try{FN($)}catch{}}function AN($){let Z=P8($);if(Z)return{rootSessionId:Z.rootSessionId,fileStem:`${Z.agentId}__${Z.teamTaskId}`};let Q=x6($);if(Q)return{rootSessionId:Q.rootSessionId,fileStem:Q.agentId};return{rootSessionId:$,fileStem:$}}class fJ{ensureSessionsDir;constructor($){this.ensureSessionsDir=$}sessionArtifactsDir($){return UQ(this.ensureSessionsDir(),$)}ensureSessionArtifactsDir($){let Z=this.sessionArtifactsDir($);if(!DQ(Z))HN(Z,{recursive:!0});return Z}sessionMessagesPath($){return UQ(this.sessionArtifactsDir($),`${$}.messages.json`)}sessionManifestPath($,Z=!1){let Q=Z?this.ensureSessionArtifactsDir($):this.sessionArtifactsDir($);return UQ(Q,`${$}.json`)}removeSessionDirIfEmpty($){let Z=this.sessionArtifactsDir($),Q=this.ensureSessionsDir();while(Z.startsWith(Q)&&Z!==Q){if(!DQ(Z)){Z=JK(Z);continue}try{if(BN(Z).length>0)break;GN(Z)}catch{break}Z=JK(Z)}}removeSessionDir($){this.removeDir(this.sessionArtifactsDir($))}removeDir($){if(!DQ($))return;try{KN($,{recursive:!0,force:!0})}catch{}}subagentArtifactPaths($,Z,Q){let{rootSessionId:W,fileStem:J}=AN($),X=this.sessionArtifactsDir(W);return{messagesPath:UQ(X,`${J}.messages.json`)}}}import{resolveDocumentsExtensionPath as fN}from"@cline/shared/storage";_0();function XK($,Z,Q,W,J){if(Q)M9($.telemetry,{ulid:Z,apiProvider:$.providerId,...J});else q9($.telemetry,{ulid:Z,apiProvider:$.providerId,...J});UN($.telemetry,{workspacePath:W})}function UN($,Z){let Q=fN("Hooks"),W=N$(Z.workspacePath),J=new Map;for(let X of W){let Y=X.hookEventName??"unknown",j=J.get(Y)??{global:0,workspace:0};if(X.path===Q||X.path.startsWith(`${Q}/`))j.global+=1;else j.workspace+=1;J.set(Y,j)}for(let[X,Y]of J.entries())y9($,X,Y.global,Y.workspace)}function YK($,Z){for(let Q of Z.mentions)S9($,Q,Z.matchedFiles.includes(Q)?1:0,"file",!Z.matchedFiles.includes(Q));for(let Q of Z.matchedFiles)C9($,"file",Q.length);for(let Q of Z.ignoredMentions)P9($,"file","not_found",Q)}var YU={};N(YU,{ProviderSettingsManager:()=>q1});import{chmodSync as KU,existsSync as RY,mkdirSync as gI,readFileSync as mI,writeFileSync as vI}from"node:fs";import{basename as FU,dirname as EY}from"node:path";import{resolveProviderSettingsPath as cI}from"@cline/shared/storage";var M={};N(M,{writeHubDiscovery:()=>p9,writeGlobalSettings:()=>B1,withHubStartupLock:()=>r9,verifyHubConnection:()=>A1,updateMcpSettingsFileSync:()=>j1,updateMcpSettingsFile:()=>t8,updateMcpServerOAuthStateAsync:()=>O5,updateMcpServerOAuthState:()=>P2,updateLocalProvider:()=>y7,uninstallPlugin:()=>a5,uninstallMarketplaceSkill:()=>A7,uninstallMarketplacePlugin:()=>f7,uninstallMarketplaceMcpServerFromSettings:()=>K7,uninstallMarketplaceEntry:()=>dX,truncateNotificationBody:()=>J9,truncateCommandOutput:()=>Y2,toggleDisabledTool:()=>m9,toTeamProgressLifecycleEvent:()=>H4,toProviderConfig:()=>l0,toHubStatusUrl:()=>OW,toHubHealthUrl:()=>i9,toHookConfigFileName:()=>o6,syncPluginMcpServersToSettings:()=>i5,summarizeUsageFromMessages:()=>b8,stopLocalHubServerGracefully:()=>hW,startLocalOAuthServer:()=>J1,startHubWebSocketServer:()=>j9,startHubServer:()=>HU,startClineDeviceAuth:()=>lW,splitCoreSessionConfig:()=>i4,spawnDetachedHubServerWithRetry:()=>H8,spawnDetachedHubServer:()=>wW,setTelemetryOptOutGlobally:()=>yj,setMcpServerDisabled:()=>w2,setDisabledTools:()=>fW,setDisabledPlugin:()=>cj,setCompactionStrategyGlobally:()=>xj,setAutoUpdateEnabledGlobally:()=>kj,sendHubCommand:()=>_V,saveProviderOAuthCredentials:()=>W2,saveLocalProviderSettings:()=>WY,saveLocalProviderOAuthCredentials:()=>jY,sanitizeSessionToken:()=>D2,safeParseSettings:()=>AQ,safeCreateProviderConfig:()=>FJ,runSubprocessEvent:()=>U4,runHook:()=>L4,reviveTeamStateDates:()=>SZ,restartLocalHubIfIdleAfterStartupTimeout:()=>t9,resolveWorkspaceHubOwnerContext:()=>QV,resolveWorkflowsConfigSearchPaths:()=>f5,resolveSkillsConfigSearchPaths:()=>F5,resolveSharedHubOwnerContext:()=>Q1,resolveSessionBackend:()=>KX,resolveRulesConfigSearchPaths:()=>A5,resolveProviderConfig:()=>Z5,resolveProviderApiKeyFromSettings:()=>sW,resolveProductionHubOwnerContext:()=>F1,resolvePluginSkillDirectoriesFromPaths:()=>n1,resolvePluginConfigSearchPaths:()=>i6,resolveMcpServerRegistrations:()=>p0,resolveMarketplaceMcpServerName:()=>o5,resolveLocalClineAuthToken:()=>HY,resolveHubUrl:()=>kW,resolveHubOwnerContext:()=>x1,resolveHubEndpointOptions:()=>K1,resolveHubBuildId:()=>l9,resolveHooksConfigSearchPaths:()=>a6,resolveDisabledToolNames:()=>G1,resolveDisabledPluginPaths:()=>u4,resolveDefaultMcpSettingsPath:()=>Z0,resolveDefaultHubPort:()=>V8,resolveDefaultHubPathname:()=>NW,resolveDefaultHubHost:()=>EW,resolveCoreSelectedToolIds:()=>yZ,resolveCoreDistinctId:()=>P0,resolveCompatibleLocalHubUrl:()=>o4,resolveClineDir:()=>tj,resolveClineDataDir:()=>o$,resolveAndLoadAgentPlugins:()=>g8,resolveAgentPluginPaths:()=>i1,requestHubShutdown:()=>s4,requestDesktopToolApproval:()=>NX,removePluginMcpServersFromSettings:()=>n5,rememberRecoverableLocalHubUrl:()=>B$,registerRemoteConfigSessionBlobUpload:()=>W7,registerMcpServersFromSettingsFile:()=>S2,registerDisposable:()=>hI,refreshProviderModelsFromSource:()=>JY,refreshOpenAICodexToken:()=>YZ,refreshOcaToken:()=>BZ,refreshClineToken:()=>JZ,readSessionCheckpointHistory:()=>I2,readRemoteConfigSessionBlobUploadMetadata:()=>LX,readHubDiscovery:()=>K0,readGlobalSettings:()=>z0,readCompactionStrategyGlobally:()=>Ij,readBearerToken:()=>l7,probeHubServer:()=>g1,probeHubConnection:()=>LV,prewarmFileIndex:()=>TZ,prewarmDetachedHubServer:()=>a9,prepareRemoteConfigCoreIntegration:()=>zX,parseWorkflowConfigFromMarkdown:()=>K5,parseUserCommandEnvelope:()=>yI,parseSkillConfigFromMarkdown:()=>B5,parseSettings:()=>FQ,parseRuleConfigFromMarkdown:()=>G5,parsePluginSource:()=>M7,parseMcpInstallArgs:()=>r5,parseHookEventPayload:()=>D4,parseConfiguredAgentConfig:()=>I5,normalizeWorkspacePath:()=>w1,normalizeUserInput:()=>bI,normalizeSdkError:()=>SI,normalizeRuntimeCapabilities:()=>M0,normalizeProviderId:()=>l8,normalizeOAuthProvider:()=>XY,normalizeHubWebSocketUrl:()=>G$,noopBasicLogger:()=>PI,migrateLegacyProviderSettings:()=>Q9,mergeRulesForSystemPrompt:()=>e2,mergeAgentHooks:()=>M2,marketplaceEntryKey:()=>uX,makeTeamTaskSubSessionId:()=>I6,makeSubSessionId:()=>C8,loginOpenAICodex:()=>$6,loginOcaOAuth:()=>W6,loginLocalProvider:()=>YY,loginClineOAuth:()=>t4,loginAndSaveProviderOAuthCredentials:()=>X6,loginAndSaveLocalProviderOAuthCredentials:()=>VY,loadOpenTelemetryAdapter:()=>jI,loadMcpSettingsFile:()=>N2,loadLlmsConfigFromFile:()=>TY,loadConfiguredAgentConfigs:()=>Y4,loadAgentPluginsFromPathsWithDiagnostics:()=>z2,loadAgentPluginsFromPaths:()=>gZ,loadAgentPluginFromPath:()=>p6,listSessionHistoryFromBackend:()=>rJ,listPluginToolsWithDiagnostics:()=>xQ,listPluginTools:()=>R5,listMcpServerOAuthStatuses:()=>q5,listLocalProviders:()=>ZY,listHookConfigFiles:()=>N$,isToolDisabledGlobally:()=>gj,isTelemetryOptedOutGlobally:()=>g9,isSessionNotFoundError:()=>I1,isRuleEnabled:()=>f9,isPluginDisabledGlobally:()=>vj,isOfficialPluginSlug:()=>q7,isOAuthProvider:()=>Q2,isMarketplaceSkillInstalled:()=>F7,isLocalHubOrigin:()=>MY,isLocalHubHostName:()=>p7,isHubReconnectableTransportError:()=>bW,isHubCommandTimeoutError:()=>o9,isDiscoveryFilePresent:()=>$V,isClineOrgIndividualInferenceSubscriptionMessage:()=>DI,isClineOrgIndividualInferenceSubscriptionError:()=>UI,isClineNotSubscribedMessage:()=>fI,isClineNotSubscribedError:()=>AI,isClineAccountActionRequest:()=>LQ,isBuiltInProviderId:()=>GJ,isAutoUpdateEnabledGlobally:()=>hj,installPlugin:()=>aX,installMcpServer:()=>wX,identifyAccount:()=>b1,hasMcpSettingsFile:()=>s1,getValidOpenAICodexCredentials:()=>Z6,getValidOcaCredentials:()=>J6,getValidClineCredentials:()=>e4,getProviderOAuthCredentialsFromSettings:()=>Y6,getProviderConfigFields:()=>BY,getProviderConfig:()=>QQ,getProviderAuthStorageId:()=>aW,getProviderAuthHandler:()=>j0,getPersistedProviderApiKey:()=>U8,getMcpServerOAuthState:()=>C2,getMarketplaceSkillCandidates:()=>t5,getLocalProviderModels:()=>QY,getLiveModelsCatalog:()=>d8,getGlobalMarketplaceSkillPaths:()=>e5,getFileIndex:()=>d1,getCurrentContextSize:()=>I3,getCoreHeadlessToolNames:()=>k6,getCoreDefaultEnabledToolIds:()=>bZ,getCoreBuiltinToolCatalog:()=>f2,getCoreAcpToolNames:()=>hZ,getClinePassSubscriptionUrl:()=>FI,getClineOrgIndividualInferenceSubscriptionMessage:()=>GI,getClineNotSubscribedMessage:()=>KI,getClineDefaultSystemPrompt:()=>LI,generateWorkspaceInfoWithDiagnostics:()=>S4,generateWorkspaceInfo:()=>$8,formatRulesForSystemPrompt:()=>t2,formatProviderOAuthApiKey:()=>oW,formatDisplayUserInput:()=>CI,findInstalledGlobalMarketplaceSkillName:()=>$9,findCheckpointForRun:()=>A4,filterExtensionToolRegistrations:()=>c9,filterDisabledTools:()=>y1,filterDisabledPluginPaths:()=>v9,fetchClineRecommendedModels:()=>_Y,executeClineAccountAction:()=>_Q,ensureHubWebSocketServer:()=>r7,ensureHubServer:()=>BU,ensureDetachedHubServer:()=>VV,ensureCustomProvidersLoaded:()=>P7,ensureCompatibleLocalHubUrl:()=>$2,enrichPromptWithMentions:()=>T8,emptyWorkspaceManifest:()=>EI,emptyStoredProviderSettings:()=>S$,discoverPluginModulePaths:()=>n6,disablePluginMcpServersInSettings:()=>bX,deriveSubsessionStatus:()=>g6,deleteLocalProvider:()=>h7,defineLlmsConfig:()=>zY,createWorkflowsConfigDefinition:()=>L5,createUserInstructionConfigService:()=>b$,createToolPoliciesWithPreset:()=>qZ,createTool:()=>RI,createTeamName:()=>Y7,createSubprocessHooks:()=>eQ,createSpawnAgentTool:()=>q$,createSkillsConfigDefinition:()=>U5,createShellTool:()=>M6,createShellExecutor:()=>j2,createSessionHost:()=>K4,createRuntimeHost:()=>K4,createRulesConfigDefinition:()=>D5,createRemoteConfigSessionMessagesArtifactUploader:()=>_X,createProviderConfig:()=>KJ,createOpenTelemetryTelemetryService:()=>r4,createOAuthClientCallbacks:()=>n8,createMcpTools:()=>Q4,createLocalHubScheduleRuntimeHandlers:()=>VU,createLlmsSdk:()=>qY,createInitialAccumulatedUsage:()=>D0,createInMemoryHubOwnerContext:()=>ej,createHubServerUrl:()=>Z1,createHubAuthToken:()=>d9,createHookConfigFileHooks:()=>t6,createHookConfigFileExtension:()=>u8,createHookAuditHooks:()=>c8,createDisabledMcpToolPolicy:()=>M5,createDisabledMcpToolPolicies:()=>IQ,createDelegatedAgentConfigProvider:()=>T$,createDelegatedAgent:()=>O$,createDefaultToolsWithPreset:()=>MZ,createDefaultTools:()=>D$,createDefaultShellExecutor:()=>P6,createDefaultMcpServerClientFactory:()=>$4,createDefaultExecutors:()=>O8,createCoreSettingsService:()=>y2,createCoreSessionSnapshot:()=>U1,createContributionRegistry:()=>MI,createContextCompactionPrepareTurn:()=>F6,createConfiguredTelemetryService:()=>h1,createConfiguredTelemetryHandle:()=>j8,createConfiguredAgentTools:()=>j4,createClineTelemetryServiceMetadata:()=>qI,createClineTelemetryServiceConfig:()=>OI,createCheckpointComparePlan:()=>aQ,createBuiltinTools:()=>U2,createAgentTeamsTools:()=>A2,createAgentRuntime:()=>xI,createAgentHooksExtension:()=>m8,connectToHub:()=>e9,completeClineDeviceAuth:()=>pW,compareCheckpointToWorkspace:()=>d5,collectPluginMcpOAuthCandidates:()=>R7,clearPrivateModelsCatalogCache:()=>HJ,clearLiveModelsCatalogCache:()=>VJ,clearHubDiscovery:()=>S0,captureWorkspacePathResolved:()=>Nj,captureWorkspaceInitialized:()=>T9,captureWorkspaceInitError:()=>O9,captureToolUsage:()=>W8,captureTokenUsage:()=>R9,captureTaskRestarted:()=>M9,captureTaskCreated:()=>q9,captureTaskCompleted:()=>g4,captureSubagentExecution:()=>v4,captureSkillUsed:()=>N9,captureSdkError:()=>TI,captureProviderConfigured:()=>wj,captureProviderApiError:()=>m4,captureModeSwitch:()=>E9,captureMentionUsed:()=>C9,captureMentionSearchResults:()=>S9,captureMentionFailed:()=>P9,captureHookDiscovery:()=>y9,captureExtensionActivated:()=>Ej,captureDiffEditFailure:()=>w9,captureConversationTurnEvent:()=>Q8,captureCompactionSkipped:()=>k9,captureCompactionExecuted:()=>h9,captureAuthSucceeded:()=>P1,captureAuthStarted:()=>C1,captureAuthLoggedOut:()=>V$,captureAuthFailed:()=>S1,captureAgentUnexpectedReasoningTokens:()=>Rj,captureAgentTeamCreated:()=>b9,captureAgentCreated:()=>H$,buildWorkspaceMetadata:()=>b4,buildTeamProgressSummary:()=>V4,buildSdkErrorProperties:()=>_I,buildRemoteConfigSessionBlobUploadMetadata:()=>Z7,buildMcpInstallTransport:()=>j7,buildDelegatedAgentConfig:()=>K2,buildConfiguredAgentToolName:()=>x5,buildConfiguredAgentToolDescriptors:()=>g5,buildCheckpointWorkspaceDiff:()=>sQ,bootstrapAgentTeams:()=>w8,authorizeMcpServerOAuth:()=>bQ,addLocalProvider:()=>$Y,accumulateUsageTotals:()=>f0,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>H5,UnifiedConfigFileWatcher:()=>E2,ToolPresets:()=>u0,TelemetryService:()=>X8,TelemetryLoggerSink:()=>p4,TEAM_TOOL_NAMES:()=>N8,SubprocessSandbox:()=>k8,StructuredCommandInputSchema:()=>J2,StoredProviderSettingsSchema:()=>r8,StoredProviderSettingsEntrySchema:()=>fQ,SqliteTeamStore:()=>c2,SqliteSessionStore:()=>L1,SessionVersioningService:()=>c$,SessionVersioningError:()=>k0,SessionSource:()=>T0,SessionNotFoundError:()=>k1,SapSettingsSchema:()=>BQ,SKILLS_CONFIG_DIRECTORY_NAME:()=>V5,SESSION_STATUSES:()=>m6,SESSION_NOT_FOUND_ERROR_CODE:()=>s$,SDK_ERROR_TELEMETRY_EVENT:()=>kI,RpcClineAccountService:()=>Y5,RemoteRuntimeHost:()=>X4,ReasoningSettingsSchema:()=>YQ,RULES_CONFIG_DIRECTORY_NAME:()=>EQ,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY:()=>Q7,ProviderSettingsSchema:()=>C$,ProviderSettingsManager:()=>q1,ProviderProtocolSchema:()=>WQ,ProviderIdSchema:()=>W5,ProviderClientSchema:()=>JQ,OpenTelemetryProvider:()=>Y8,OcaSettingsSchema:()=>GQ,OPENAI_COMPATIBLE_PROVIDERS:()=>$5,NodeHubClient:()=>W1,NoOpFeatureFlagsProvider:()=>g2,NativeHubTransportAdapter:()=>Y9,ModelCatalogSettingsSchema:()=>KQ,McpSettingsUpdateSkippedError:()=>o8,McpSettingsMutatorPurityError:()=>y$,McpSettingsLockTimeoutError:()=>h$,MAX_COMMAND_OUTPUT_CHARS:()=>c1,LocalRuntimeHost:()=>T1,Llms:()=>VI,InMemoryWorkspaceManager:()=>i8,InMemoryMcpManager:()=>b2,HubUIClient:()=>gW,HubTransportError:()=>R0,HubSessionClient:()=>xW,HubServerTransport:()=>w4,HubScheduleService:()=>Z8,HubScheduleCommandService:()=>o2,HubRuntimeHost:()=>o1,HubCommandError:()=>B8,HookEventPayloadSchema:()=>tQ,HookEventNameSchema:()=>oQ,HookConfigFileName:()=>v8,HOOK_CONFIG_FILE_EVENT_MAP:()=>s6,HOOKS_CONFIG_DIRECTORY_NAME:()=>lZ,GlobalSettingsSchema:()=>c4,GcpSettingsSchema:()=>VQ,FileTeamPersistenceStore:()=>x7,FeatureFlagsService:()=>x2,FeatureFlagDefaultValue:()=>wI,FEATURE_FLAGS:()=>NI,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>d7,DefaultToolNames:()=>U0,DefaultRuntimeBuilder:()=>T4,DefaultLlmsSdk:()=>W9,DEFAULT_MODELS_CATALOG_URL:()=>tZ,DEFAULT_HUB_PORT:()=>MW,DEFAULT_HUB_PATHNAME:()=>RW,DEFAULT_HUB_HOST:()=>qW,CoreSettingsService:()=>k$,CoreSessionService:()=>z1,ContributionRegistry:()=>zI,ClineOrgIndividualInferenceSubscriptionError:()=>BI,ClineNotSubscribedError:()=>HI,ClineCore:()=>l5,ClineAccountService:()=>X5,ChatViewStateSchema:()=>UY,ChatSummarySchema:()=>u7,ChatSessionStatusSchema:()=>m7,ChatSessionConfigSchema:()=>g7,ChatMessageSchema:()=>c7,ChatMessageRoleSchema:()=>v7,CORE_TELEMETRY_EVENTS:()=>m,CORE_BUILD_VERSION:()=>DY,BrowserWebSocketHubAdapter:()=>X9,BUILT_IN_PROVIDER_IDS:()=>BJ,BUILT_IN_PROVIDER:()=>Q5,AzureSettingsSchema:()=>HQ,AwsSettingsSchema:()=>jQ,AuthSettingsSchema:()=>XQ,AgentTeamsRuntime:()=>k2,AgentTeam:()=>G4,Agent:()=>II,ALL_DEFAULT_TOOL_NAMES:()=>X$});R(M,ro);import*as VI from"@cline/llms";import{ClineNotSubscribedError as HI,ClineOrgIndividualInferenceSubscriptionError as BI,getClineOrgIndividualInferenceSubscriptionMessage as GI,getClineNotSubscribedMessage as KI,getClinePassSubscriptionUrl as FI,isClineNotSubscribedError as AI,isClineNotSubscribedMessage as fI,isClineOrgIndividualInferenceSubscriptionError as UI,isClineOrgIndividualInferenceSubscriptionMessage as DI}from"@cline/llms";import{buildClineSystemPrompt as LI,buildSdkErrorProperties as _I,ContributionRegistry as zI,captureSdkError as TI,createClineTelemetryServiceConfig as OI,createClineTelemetryServiceMetadata as qI,createContributionRegistry as MI,createTool as RI,emptyWorkspaceManifest as EI,FEATURE_FLAGS as NI,FeatureFlagDefaultValue as wI,formatDisplayUserInput as CI,noopBasicLogger as PI,normalizeSdkError as SI,normalizeUserInput as bI,parseUserCommandEnvelope as yI,registerDisposable as hI,SDK_ERROR_TELEMETRY_EVENT as kI}from"@cline/shared";import"@cline/shared/storage";var VK={};N(VK,{isClineAccountActionRequest:()=>LQ,executeClineAccountAction:()=>_Q,RpcClineAccountService:()=>Y5,ClineAccountService:()=>X5});function DN($){if(typeof $!=="object"||$===null||!("error"in $))return;let Z=$.error;return typeof Z==="string"&&Z.trim()?Z:void 0}function jK($,Z,Q){let W=DN(Q);if(W)return W;let J=Z.trim();if(J){let X=J.length>200?`${J.slice(0,200)}...`:J;return`Cline account request failed with status ${$}: ${X}`}return`Cline account request failed with status ${$}`}class X5{apiBaseUrl;getAuthTokenFn;getCurrentUserIdFn;getOrganizationMemberIdFn;getHeadersFn;requestTimeoutMs;fetchImpl;constructor($){let Z=$.apiBaseUrl.trim();if(!Z)throw Error("apiBaseUrl is required");this.apiBaseUrl=Z,this.getAuthTokenFn=$.getAuthToken,this.getCurrentUserIdFn=$.getCurrentUserId,this.getOrganizationMemberIdFn=$.getOrganizationMemberId,this.getHeadersFn=$.getHeaders,this.requestTimeoutMs=$.requestTimeoutMs??30000,this.fetchImpl=$.fetchImpl??fetch}async fetchMe(){return this.request("/api/v1/users/me")}async fetchRemoteConfig(){return this.request("/api/v1/users/me/remote-config")}async fetchFeaturebaseToken(){try{return await this.request("/api/v1/users/me/featurebase-token")}catch{return}}async fetchBalance($){let Z=await this.resolveUserId($);return this.request(`/api/v1/users/${encodeURIComponent(Z)}/balance`)}async fetchUsageTransactions($){let Z=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(Z)}/usages`)).items??[]}async fetchPaymentTransactions($){let Z=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(Z)}/payments`)).paymentTransactions??[]}async fetchUserOrganizations(){return(await this.fetchMe()).organizations??[]}async fetchAvailableSubscriptionPlans($){let Z=new URL("/api/v1/plans",this.apiBaseUrl);if($?.type)Z.searchParams.set("type",$.type);return this.request(`${Z.pathname}${Z.search}`)}async fetchCurrentUserPlan(){return this.request("/api/v1/users/me/plan")}async fetchOrganization($){let Z=$.trim();if(!Z)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(Z)}`)}async fetchOrganizationBalance($){let Z=$.trim();if(!Z)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(Z)}/balance`)}async fetchOrganizationUsageTransactions($){let Z=$.organizationId.trim();if(!Z)throw Error("organizationId is required");let Q=await this.resolveOrganizationMemberId(Z,$.memberId);return(await this.request(`/api/v1/organizations/${encodeURIComponent(Z)}/members/${encodeURIComponent(Q)}/usages`)).items??[]}async switchAccount($){await this.request("/api/v1/users/active-account",{method:"PUT",body:{organizationId:$?.trim()||null},expectNoContent:!0})}async resolveUserId($){let Z=$?.trim();if(Z)return Z;let W=(this.getCurrentUserIdFn?await this.getCurrentUserIdFn():void 0)?.trim();if(W)return W;let J=await this.fetchMe();if(!J.id?.trim())throw Error("Unable to resolve current user id");return J.id}async resolveOrganizationMemberId($,Z){let Q=Z?.trim();if(Q)return Q;let J=(this.getOrganizationMemberIdFn?await this.getOrganizationMemberIdFn($):void 0)?.trim();if(J)return J;let Y=(await this.fetchUserOrganizations()).find((j)=>j.organizationId===$)?.memberId;if(!Y?.trim())throw Error(`Unable to resolve memberId for organization ${$}`);return Y}async request($,Z){let Q=(await this.getAuthTokenFn())?.trim();if(!Q)throw Error("No Cline account auth token found");let W=this.getHeadersFn?await this.getHeadersFn():{},J=new AbortController,X=setTimeout(()=>J.abort(),this.requestTimeoutMs);try{let Y=await this.fetchImpl(new URL($,this.apiBaseUrl),{method:Z?.method??"GET",headers:{Authorization:`Bearer ${Q}`,"Content-Type":"application/json",...W??{}},body:Z?.body!==void 0?JSON.stringify(Z.body):void 0,signal:J.signal});if(Y.status===204||Z?.expectNoContent){if(!Y.ok)throw Error(`Cline account request failed with status ${Y.status}`);return}let j=await Y.text(),V;if(j.trim())try{V=JSON.parse(j)}catch{if(!Y.ok)throw Error(jK(Y.status,j,void 0));throw Error("Cline account response was not valid JSON")}if(!Y.ok)throw Error(jK(Y.status,j,V));if(typeof V==="object"&&V!==null){let H=V;if(typeof H.success==="boolean"){if(!H.success)throw Error(H.error||"Cline account request failed");return H.data}}if(V===void 0||V===null)throw Error("Cline account response payload was empty");return V}finally{clearTimeout(X)}}}function LQ($){return $.action==="clineAccount"}async function _Q($,Z){switch($.operation){case"fetchMe":return Z.fetchMe();case"fetchBalance":return Z.fetchBalance($.userId);case"fetchUsageTransactions":return Z.fetchUsageTransactions($.userId);case"fetchPaymentTransactions":return Z.fetchPaymentTransactions($.userId);case"fetchUserOrganizations":return Z.fetchUserOrganizations();case"fetchOrganizationBalance":return Z.fetchOrganizationBalance($.organizationId);case"fetchOrganizationUsageTransactions":return Z.fetchOrganizationUsageTransactions({organizationId:$.organizationId,memberId:$.memberId});case"switchAccount":return await Z.switchAccount($.organizationId),{updated:!0};case"fetchFeaturebaseToken":return Z.fetchFeaturebaseToken?.();default:throw Error(`Unsupported Cline account operation: ${String($)}`)}}class Y5{executor;constructor($){this.executor=$}async fetchMe(){return this.request({action:"clineAccount",operation:"fetchMe"})}async fetchBalance($){return this.request({action:"clineAccount",operation:"fetchBalance",...$?.trim()?{userId:$.trim()}:{}})}async fetchUsageTransactions($){return this.request({action:"clineAccount",operation:"fetchUsageTransactions",...$?.trim()?{userId:$.trim()}:{}})}async fetchPaymentTransactions($){return this.request({action:"clineAccount",operation:"fetchPaymentTransactions",...$?.trim()?{userId:$.trim()}:{}})}async fetchUserOrganizations(){return this.request({action:"clineAccount",operation:"fetchUserOrganizations"})}async fetchOrganizationBalance($){let Z=$.trim();if(!Z)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationBalance",organizationId:Z})}async fetchOrganizationUsageTransactions($){let Z=$.organizationId.trim();if(!Z)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationUsageTransactions",organizationId:Z,...$.memberId?.trim()?{memberId:$.memberId.trim()}:{}})}async switchAccount($){await this.request({action:"clineAccount",operation:"switchAccount",organizationId:$?.trim()||null})}async fetchFeaturebaseToken(){return this.request({action:"clineAccount",operation:"fetchFeaturebaseToken"})}async request($){return(await this.executor.runProviderAction($)).result}}var HK={};N(HK,{createOAuthClientCallbacks:()=>n8});function n8($){return{onAuth:({url:Z,instructions:Q})=>{if($.onOutput?.(Q??"Complete sign-in in your browser."),$.openUrl)try{Promise.resolve($.openUrl(Z)).catch((W)=>{$.onOpenUrlError?.({url:Z,error:W})})}catch(W){$.onOpenUrlError?.({url:Z,error:W})}$.onOutput?.(Z)},onPrompt:$.onPrompt,onServerListening:$.onServerListening,onServerClose:$.onServerClose}}var SA={};N(SA,{ClineCore:()=>l5});function BK($){if($===!0)return{};if(!$)return;return $}function GK($){if($==="user")return"global";return $}class UJ{getService;constructor($){this.getService=$}async start(){await this.getService().start()}async stop(){await this.getService().stop()}async reconcileNow(){await this.getService().reconcileNow()}ingestEvent($){let Z=this.getService().ingestEvent($);return{event:Z.event,duplicate:Z.duplicate,matchedSpecIds:Z.matchedSpecs.map((Q)=>Q.specId),queuedRuns:Z.queuedRuns,suppressions:Z.suppressions}}listEvents($){return this.getService().listEventLogs($)}getEvent($){return this.getService().getEventLog($)}listSpecs($){return this.getService().listSpecs($)}listRuns($){return this.getService().listRuns($)}}function KK($){let{host:Z}=$;return{async startSession(Q){let W=(Q.cwd?.trim()||Q.workspaceRoot).trim(),J=await Z.startSession({source:Q.source?.trim()||T0.CLI,interactive:!1,config:{providerId:l8(Q.provider),modelId:Q.model,apiKey:Q.apiKey?.trim()||void 0,cwd:W,workspaceRoot:Q.workspaceRoot,systemPrompt:Q.systemPrompt??"",mode:zN(Q),maxIterations:Q.maxIterations,enableTools:Q.enableTools!==!1,enableSpawnAgent:Q.enableSpawn!==!1,enableAgentTeams:Q.enableTeams!==!1,disableMcpSettingsTools:Q.disableMcpSettingsTools,missionLogIntervalSteps:Q.missionStepInterval,missionLogIntervalMs:Q.missionTimeIntervalMs},toolPolicies:Q.toolPolicies??{"*":{autoApprove:Q.autoApproveTools!==!1}},localRuntime:{extensionContext:$.getExtensionContext(),configExtensions:Q.configExtensions}});return{sessionId:J.sessionId,startResult:{sessionId:J.sessionId,manifestPath:J.manifestPath,messagesPath:J.messagesPath}}},async sendSession(Q,W){let J=await Z.runTurn({sessionId:Q,prompt:W.prompt,userImages:W.attachments?.userImages,userFiles:W.attachments?.userFiles?.map((X)=>X.content),delivery:W.delivery});if(!J)throw Error("ClineCore automation runtime returned no result");return{result:_N(J)}},async abortSession(Q){return await Z.abort(Q,Error("ClineCore automation abort")),{applied:!0}},async stopSession(Q){return await Z.stopSession(Q),{applied:!0}}}}function zQ($){let Z=LN($.automationService,$.automation),Q=$.context?.client??($.clientName?{name:$.clientName}:void 0),W=$.context?.user??($.distinctId?{distinctId:$.distinctId}:void 0),J=$.context?.logger??$.logger,X=$.context?.telemetry??$.telemetry;if(!Z&&!Q&&!W&&!J&&!X)return $.context;return{...$.context??{},...Q?{client:Q}:{},...W?{user:W}:{},...J?{logger:J}:{},...X?{telemetry:X}:{},...Z?{automation:Z}:{}}}function LN($,Z){if(!$)return;return{ingestEvent:(Q)=>{Z.ingestEvent(Q)}}}function _N($){return{text:$.text,usage:{inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens,cacheWriteTokens:$.usage.cacheWriteTokens,totalCost:$.usage.totalCost},inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,iterations:$.iterations,finishReason:$.finishReason,toolCalls:$.toolCalls.map((Z)=>({name:Z.name,input:Z.input,output:Z.output,error:Z.error,durationMs:Z.durationMs}))}}function zN($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}var AF={};N(AF,{createCoreSettingsService:()=>y2,CoreSettingsService:()=>k$});import{existsSync as N5,readFileSync as XC}from"node:fs";import{basename as bJ,dirname as jF,extname as YC,isAbsolute as BF,join as jC,relative as GF,resolve as VF}from"node:path";var RK={};N(RK,{resolveWorkflowsConfigSearchPaths:()=>f5,resolveSkillsConfigSearchPaths:()=>F5,resolveRulesConfigSearchPaths:()=>A5,parseWorkflowConfigFromMarkdown:()=>K5,parseSkillConfigFromMarkdown:()=>B5,parseRuleConfigFromMarkdown:()=>G5,createWorkflowsConfigDefinition:()=>L5,createUserInstructionConfigService:()=>b$,createSkillsConfigDefinition:()=>U5,createRulesConfigDefinition:()=>D5,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>H5,UnifiedConfigFileWatcher:()=>E2,SKILLS_CONFIG_DIRECTORY_NAME:()=>V5,RULES_CONFIG_DIRECTORY_NAME:()=>EQ});import{createHash as TN}from"node:crypto";import{watch as ON}from"node:fs";import{readdir as qN,readFile as MN}from"node:fs/promises";import{join as RN}from"node:path";function EN($){return TN("sha1").update($).digest("hex")}function fK($){return Boolean($&&typeof $==="object"&&"code"in $)}function FK($){return fK($)&&$.code==="ENOENT"}function AK($){return fK($)&&($.code==="EACCES"||$.code==="EPERM")}class E2{definitions;debounceMs;emitParseErrors;listeners=new Set;recordsByType=new Map;watchersByDirectory=new Map;baseTypesByDirectory=new Map;watchedTypesByDirectory=new Map;discoveredDirectoriesByType=new Map;definitionsByType=new Map;pendingTypes=new Set;flushTimer;refreshQueue=Promise.resolve();started=!1;constructor($,Z){if($.length===0)throw Error("UnifiedConfigFileWatcher requires at least one definition.");this.definitions=$,this.debounceMs=Z?.debounceMs??75,this.emitParseErrors=Z?.emitParseErrors??!1;for(let Q of $){if(this.definitionsByType.has(Q.type))throw Error(`Duplicate unified config definition type '${Q.type}'.`);this.definitionsByType.set(Q.type,Q),this.recordsByType.set(Q.type,new Map),this.discoveredDirectoriesByType.set(Q.type,new Set);for(let W of Q.directories){let J=this.baseTypesByDirectory.get(W);if(J)J.add(Q.type);else this.baseTypesByDirectory.set(W,new Set([Q.type]))}}}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}async start(){if(this.started)return;this.started=!0,await this.refreshAll(),this.startDirectoryWatchers()}stop(){if(this.started=!1,this.flushTimer)clearTimeout(this.flushTimer),this.flushTimer=void 0;this.pendingTypes.clear();for(let $ of this.watchersByDirectory.values())$.close();this.watchersByDirectory.clear(),this.watchedTypesByDirectory=new Map}async refreshAll(){await this.enqueueRefresh(async()=>{for(let $ of this.definitions)await this.refreshTypeInternal($)})}async refreshType($){let Z=this.definitionsByType.get($);if(!Z)throw Error(`Unknown unified config type '${$}'.`);await this.enqueueRefresh(async()=>{await this.refreshTypeInternal(Z)})}getSnapshot($){let Z=this.recordsByType.get($);return new Map([...Z?.entries()??[]].map(([Q,W])=>[Q,{...W}]))}getAllSnapshots(){let $=new Map;for(let[Z,Q]of this.recordsByType.entries())$.set(Z,new Map([...Q.entries()].map(([W,J])=>[W,{...J}])));return $}emit($){for(let Z of this.listeners)Z($)}enqueueRefresh($){return this.refreshQueue=this.refreshQueue.then($,$),this.refreshQueue}startDirectoryWatchers(){this.syncDirectoryWatchers()}syncDirectoryWatchers(){let $=this.buildDesiredTypesByDirectory();for(let[Z,Q]of this.watchersByDirectory.entries()){if($.has(Z))continue;Q.close(),this.watchersByDirectory.delete(Z)}this.watchedTypesByDirectory=$;for(let Z of $.keys()){if(this.watchersByDirectory.has(Z))continue;try{let Q=ON(Z,()=>{let W=this.watchedTypesByDirectory.get(Z);if(!W)return;for(let J of W)this.pendingTypes.add(J);this.scheduleFlush()});this.watchersByDirectory.set(Z,Q),Q.on("error",(W)=>{let J=this.watchedTypesByDirectory.get(Z);if(!J)return;for(let X of J)this.emit({kind:"error",type:X,error:W,filePath:Z})})}catch(Q){if(!FK(Q)&&!AK(Q)){let W=$.get(Z);if(!W)continue;for(let J of W)this.emit({kind:"error",type:J,error:Q,filePath:Z})}}}}scheduleFlush(){if(this.flushTimer)clearTimeout(this.flushTimer);this.flushTimer=setTimeout(()=>{this.flushTimer=void 0;let $=[...this.pendingTypes];this.pendingTypes.clear(),this.enqueueRefresh(async()=>{for(let Z of $){let Q=this.definitionsByType.get(Z);if(!Q)continue;await this.refreshTypeInternal(Q)}})},this.debounceMs)}async refreshTypeInternal($){let{records:Z,discoveredDirectories:Q}=await this.loadDefinition($),W=this.recordsByType.get($.type)??new Map;for(let[J,X]of W.entries()){if(Z.has(J))continue;this.emit({kind:"remove",type:$.type,id:J,filePath:X.filePath})}for(let[J,X]of Z.entries()){let Y=W.get(J);if(Y&&Y.filePath===X.filePath&&Y.fingerprint===X.fingerprint)continue;this.emit({kind:"upsert",record:{type:X.type,id:J,item:X.item,filePath:X.filePath}})}if(this.recordsByType.set($.type,Z),this.discoveredDirectoriesByType.set($.type,Q),this.started)this.syncDirectoryWatchers()}async loadDefinition($){let Z=new Map,Q=new Set;for(let W of $.directories){Q.add(W);let J=$.discoverFiles?await $.discoverFiles(W):await this.readDirectoryFileCandidates(W);for(let X of J){let{fileName:Y,filePath:j}=X;if(Q.add(X.directoryPath),$.includeFile&&!$.includeFile(Y,j))continue;try{let V=await MN(j,"utf8"),H={type:$.type,directoryPath:X.directoryPath,fileName:Y,filePath:j,content:V},B=$.parseFile(H),G=$.resolveId(B,H).trim();if(!G)continue;Z.set(G,{type:$.type,id:G,item:B,filePath:j,fingerprint:EN(V)})}catch(V){if(this.emitParseErrors)this.emit({kind:"error",type:$.type,error:V,filePath:j})}}}return{records:Z,discoveredDirectories:Q}}buildDesiredTypesByDirectory(){let $=new Map;for(let[Z,Q]of this.baseTypesByDirectory.entries())$.set(Z,new Set(Q));for(let[Z,Q]of this.discoveredDirectoriesByType.entries())for(let W of Q){let J=$.get(W);if(J)J.add(Z);else $.set(W,new Set([Z]))}return $}async readDirectoryFileCandidates($){try{return(await qN($,{withFileTypes:!0})).filter((Q)=>Q.isFile()).map((Q)=>({directoryPath:$,fileName:Q.name,filePath:RN($,Q.name)})).sort((Q,W)=>Q.fileName.localeCompare(W.fileName))}catch(Z){if(FK(Z)||AK(Z))return[];throw Z}}}import{readdir as LJ,readFile as NN,stat as DJ}from"node:fs/promises";import{basename as a1,dirname as wN,extname as OQ,join as y0,resolve as j5}from"node:path";import{AGENTS_RULES_FILE_NAME as UK,RULES_CONFIG_DIRECTORY_NAME as EQ,resolveGlobalAgentsRulesPath as CN,resolveRulesConfigSearchPaths as PN,resolveSkillsConfigSearchPaths as SN,resolveWorkflowsConfigSearchPaths as bN,SKILLS_CONFIG_DIRECTORY_NAME as V5,WORKFLOWS_CONFIG_DIRECTORY_NAME as H5}from"@cline/shared/storage";import yN from"yaml";var TQ="SKILL.md",hN="managed.json",kN=new Set([".md",".markdown",".txt"]);function _J($){return $.trim().toLowerCase()}function a8($){let Z=$;return Z?.code==="ENOENT"||Z?.code==="EACCES"||Z?.code==="EPERM"||Z?.code==="ELOOP"}function qQ($){return kN.has(OQ($).toLowerCase())}function DK($){let Z=[],Q=new Set;for(let W of $){let J=j5(W);if(Q.has(J))continue;Q.add(J),Z.push(W)}return Z}function IN($){let Z=[...$?.directories??F5($?.workspacePath)];if($?.pluginSkillDirectories)Z.push(...$.pluginSkillDirectories);else if($?.includePluginSkills)Z.push(...SG({pluginPaths:$.pluginPaths,workspacePath:$.workspacePath,cwd:$.cwd??$.workspacePath}));return DK(Z)}async function zJ($){try{let Z=await LJ($,{withFileTypes:!0}),Q=[];for(let W of Z){if(!W.isDirectory())continue;let J=y0($,W.name),X=y0(J,hN);try{let Y=await NN(X,"utf8"),j=JSON.parse(Y);if(j&&typeof j==="object")Q.push(J)}catch(Y){if(a8(Y))continue;if(Y?.name==="SyntaxError")continue;throw Y}}return Q.sort((W,J)=>W.localeCompare(J))}catch(Z){if(a8(Z))return[];throw Z}}function TJ($){let Z=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,Q=$.match(Z);if(!Q)return{data:{},body:$,hadFrontmatter:!1};let[,W,J]=Q;try{let X=yN.parse(W);return{data:X&&typeof X==="object"&&!Array.isArray(X)?X:{},body:J,hadFrontmatter:!0}}catch(X){let Y=X instanceof Error?X.message:String(X);return{data:{},body:$,hadFrontmatter:!0,parseError:Y}}}function MQ($,Z,Q){if($===void 0||$===null){if(Q)throw Error(`Missing required frontmatter field '${Z}'.`);return}if(typeof $!=="string")throw Error(`Frontmatter field '${Z}' must be a string.`);let W=$.trim();if(!W&&Q)throw Error(`Frontmatter field '${Z}' cannot be empty.`);return W||void 0}function s8($,Z){if($===void 0||$===null)return;if(typeof $!=="boolean")throw Error(`Frontmatter field '${Z}' must be a boolean.`);return $}function xN($,Z){if(a1($.filePath).toLowerCase()!==UK.toLowerCase())return a1($.filePath,OQ($.filePath));if(Z&&j5($.filePath)===j5(Z,UK))return"Workspace AGENTS.md";if(j5($.filePath)===j5(CN()))return"Global AGENTS.md";return a1($.filePath,OQ($.filePath))}function B5($,Z){let{data:Q,body:W,parseError:J}=TJ($);if(J)throw Error(`Failed to parse YAML frontmatter: ${J}`);let X=W.trim();if(!X)throw Error("Missing instructions body in skill file.");let j=MQ(Q.name,"name",!1)??Z.trim();if(!j)throw Error("Missing skill name.");return{name:j,description:MQ(Q.description,"description",!1),disabled:s8(Q.disabled,"disabled")??(s8(Q.enabled,"enabled")===!1?!0:void 0),instructions:X,frontmatter:Q}}function G5($,Z){let{data:Q,body:W,parseError:J}=TJ($);if(J)throw Error(`Failed to parse YAML frontmatter: ${J}`);let X=W.trim();if(!X)throw Error("Missing instructions body in rule file.");let Y=MQ(Q.name,"name",!1)??Z.trim();if(!Y)throw Error("Missing rule name.");return{name:Y,disabled:s8(Q.disabled,"disabled")??(s8(Q.enabled,"enabled")===!1?!0:void 0),instructions:X,frontmatter:Q}}function K5($,Z){let{data:Q,body:W,parseError:J}=TJ($);if(J)throw Error(`Failed to parse YAML frontmatter: ${J}`);let X=W.trim();if(!X)throw Error("Missing instructions body in workflow file.");let Y=MQ(Q.name,"name",!1)??Z.trim();if(!Y)throw Error("Missing workflow name.");return{name:Y,disabled:s8(Q.disabled,"disabled")??(s8(Q.enabled,"enabled")===!1?!0:void 0),instructions:X,frontmatter:Q}}function F5($){return SN($)}function A5($){return PN($)}function f5($){return bN($)}async function LK($){if(a1($)===".cline"){let Z=await zJ($);return(await Promise.all(Z.map((W)=>LK(y0(W,V5))))).flat()}try{let Z=await LJ($,{withFileTypes:!0}),Q=[];for(let W of Z){if(W.isFile()&&W.name===TQ){Q.push({directoryPath:$,fileName:W.name,filePath:y0($,W.name)});continue}let J=y0($,W.name);if(W.isDirectory()||W.isSymbolicLink()&&await DJ(J).then((Y)=>Y.isDirectory()).catch((Y)=>{if(a8(Y))return!1;throw Y}))Q.push({directoryPath:J,fileName:TQ,filePath:y0(J,TQ)})}return Q}catch(Z){if(a8(Z))return[];throw Z}}async function RQ($){if(a1($)===".cline"){let Z=await zJ($);return(await Promise.all(Z.map((W)=>RQ(y0(W,"rules.md"))))).flat()}try{if((await DJ($)).isFile())return[{directoryPath:wN($),fileName:a1($),filePath:$}]}catch(Z){if(!a8(Z))throw Z}try{let Q=(await LJ($,{withFileTypes:!0})).filter((J)=>J.isFile()&&qQ(J.name)).map((J)=>({directoryPath:$,fileName:J.name,filePath:y0($,J.name)})),W=y0($,"AGENTS.md");try{if((await DJ(W)).isFile()){if(!Q.some((Y)=>Y.fileName==="AGENTS.md"))Q.push({directoryPath:$,fileName:"AGENTS.md",filePath:W})}}catch{}return Q}catch(Z){if(a8(Z))return[];throw Z}}async function gN($){if(a1($)===".cline"){let Z=await zJ($);return(await Promise.all(Z.map((W)=>RQ(y0(W,H5))))).flat()}return RQ($)}function U5($){let Z=IN($),Q=$?.workspacePath?y0($.workspacePath,".cline"):void 0;return{type:"skill",directories:Q?DK([...Z,Q]):Z,discoverFiles:LK,includeFile:(W)=>W===TQ,parseFile:(W)=>B5(W.content,a1(W.directoryPath)),resolveId:(W)=>_J(W.name)}}function D5($){let Z=$?.directories??A5($?.workspacePath),Q=$?.workspacePath?y0($.workspacePath,".cline"):void 0;return{type:"rule",directories:Q?[...Z,Q]:Z,discoverFiles:RQ,includeFile:(W,J)=>W===".clinerules"||qQ(W)||qQ(J),parseFile:(W)=>G5(W.content,xN(W,$?.workspacePath)),resolveId:(W)=>_J(W.name)}}function L5($){let Z=$?.directories??f5($?.workspacePath),Q=$?.workspacePath?y0($.workspacePath,".cline"):void 0;return{type:"workflow",directories:Q?[...Z,Q]:Z,discoverFiles:gN,includeFile:(W)=>qQ(W),parseFile:(W)=>K5(W.content,a1(W.filePath,OQ(W.filePath))),resolveId:(W)=>_J(W.name)}}function _K($){let Z=[U5($?.skills),D5($?.rules),L5($?.workflows)];return new E2(Z,{debounceMs:$?.debounceMs,emitParseErrors:$?.emitParseErrors})}import{truncateSplit as zK}from"@cline/shared";function mN($,Z){if($.description?.trim())return zK($.description,".");if(Z==="workflow")return;return zK($.instructions,".")}function vN($){return $.disabled!==!0}function TK($,Z){return[...$.getSnapshot(Z).entries()].map(([Q,W])=>({id:Q,record:W})).filter(({record:Q})=>vN(Q.item)).map(({id:Q,record:W})=>({id:Q,name:W.item.name,instructions:W.item.instructions,description:mN(W.item,Z),kind:Z})).sort((Q,W)=>Q.name.localeCompare(W.name))}function _5($){let Z=new Map;for(let Q of[...TK($,"workflow"),...TK($,"skill")])if(!Z.has(Q.name))Z.set(Q.name,Q);return[...Z.values()].sort((Q,W)=>Q.name.localeCompare(W.name))}function OK($,Z){if(!$.startsWith("/")||$.length<2)return $;let Q=$.match(/^\/(\S+)/);if(!Q)return $;let W=Q[1];if(!W)return $;let J=W.length+1,X=$.slice(J),Y=_5(Z).find((j)=>j.name===W);return Y?`${Y.instructions}${X}`:$}function NQ($){return $.trim().replace(/^\/+/,"").toLowerCase()}function cN($){if(!$||$.length===0)return;let Z=$.map(NQ).filter((Q)=>Q.length>0);return Z.length>0?new Set(Z):void 0}function uN($,Z,Q){if(!Q)return!0;let W=NQ($),J=NQ(Z),X=W.includes(":")?W.split(":").at(-1)??W:W,Y=J.includes(":")?J.split(":").at(-1)??J:J;return Q.has(W)||Q.has(J)||Q.has(X)||Q.has(Y)}function z5($,Z){let Q=cN(Z);return[...$.getSnapshot("skill").entries()].map(([J,X])=>{let Y=X.item;return{id:J,name:Y.name.trim(),description:Y.description?.trim(),disabled:Y.disabled===!0,skill:Y}}).filter((J)=>uN(J.id,J.name,Q))}function dN($,Z){return z5($,Z).filter((Q)=>!Q.disabled).map((Q)=>Q.name.trim()).filter((Q)=>Q.length>0).sort((Q,W)=>Q.localeCompare(W))}function lN($,Z,Q){let W=NQ(Z);if(!W)return{error:"Missing skill name."};let J=z5($,Q),X=J.find((B)=>B.id===W);if(X){let{skill:B}=X;if(B.disabled===!0)return{error:`Skill "${B.name}" is configured but disabled.`};return{id:X.id,skill:B}}let Y=W.includes(":")?W.split(":").at(-1)??W:W,j=J.filter(({id:B})=>{if(B===Y)return!0;return B.endsWith(`:${Y}`)}),V=j.filter(({skill:B})=>B.disabled!==!0);if(V.length===1){let{id:B,skill:G}=V[0];return{id:B,skill:G}}if(V.length>1)return{error:`Skill "${Z}" is ambiguous. Use one of: ${V.map(({id:B})=>B).join(", ")}`};if(j.length===1){let{skill:B}=j[0];return{error:`Skill "${B.name}" is configured but disabled.`}}if(j.length>1)return{error:`Skill "${Z}" is ambiguous, and all matches are disabled: ${j.map(({id:B})=>B).join(", ")}`};let H=dN($,Q);return{error:H.length>0?`Skill "${Z}" not found. Available skills: ${H.join(", ")}`:"No skills are currently available."}}function OJ($,Z=Promise.resolve(),Q){let W=new Set,J=async(X,Y)=>{await Z;let j=lN($,X,Q);if("error"in j)return j.error;let{id:V,skill:H}=j;if(W.has(V))return`Skill "${H.name}" is already running.`;W.add(V);try{let B=Y?.trim(),G=B?`
|
|
479
479
|
<command-args>${B}</command-args>`:"",K=H.description?.trim()?`Description: ${H.description.trim()}
|
|
480
480
|
|
|
481
481
|
`:"";return`<command-name>${H.name}</command-name>${G}
|
|
@@ -483,23 +483,23 @@ ${Q}`,platform:Z.clinePlatform,metadata:Z.workspaceMetadata})}function MB($,Z){l
|
|
|
483
483
|
${K}${H.instructions}
|
|
484
484
|
</command-instructions>`}finally{W.delete(V)}};return Object.defineProperty(J,"configuredSkills",{get:()=>z5($,Q).map(({skill:X,...Y})=>Y),enumerable:!0,configurable:!1}),J}function qK($){let Z=$.watcherReady??Promise.resolve();return{name:"cline-user-instructions",manifest:{capabilities:[$.includeRules?"rules":void 0,$.registerSkillsTool?"tools":void 0,$.includeSkills||$.includeWorkflows?"commands":void 0].filter((W)=>Boolean(W))},async setup(W){if(await Z,$.includeRules)W.registerRule({id:"cline-user-instructions:rules",source:"user-instruction-watcher",content:()=>WW($.watcher)});if($.registerSkillsTool)W.registerTool(V2(OJ($.watcher,Z,$.allowedSkillNames)));for(let J of _5($.watcher).filter((X)=>X.kind==="skill"&&$.includeSkills||X.kind==="workflow"&&$.includeWorkflows))W.registerCommand({name:J.name,description:J.description,handler:(X)=>{let Y=X.trim();return Y?`${J.instructions}
|
|
485
485
|
|
|
486
|
-
${Y}`:J.instructions}})}}}class MK{watcher;ready;stopped=!1;constructor($){this.watcher=_K($)}start(){if(!this.ready)this.stopped=!1,this.ready=this.watcher.start();return this.ready}stop(){if(this.stopped)return;this.stopped=!0,this.watcher.stop(),this.ready=void 0}async refreshType($){await this.start(),await this.watcher.refreshType($)}listRecords($){return[...this.watcher.getSnapshot($).entries()].map(([Z,Q])=>({type:$,id:Z,filePath:Q.filePath,item:Q.item}))}listRuntimeCommands(){return _5(this.watcher)}resolveRuntimeSlashCommand($){return OK($,this.watcher)}hasConfiguredSkills($){return z5(this.watcher,$).some((Z)=>!Z.disabled)}createSkillsExecutor($){return OJ(this.watcher,(this.ready??Promise.resolve()).catch(()=>{}),$)}createExtension($){return qK({...$,watcher:this.watcher,watcherReady:(this.ready??Promise.resolve()).catch(()=>{})})}}function b$($){return new MK($)}import{readFile as
|
|
486
|
+
${Y}`:J.instructions}})}}}class MK{watcher;ready;stopped=!1;constructor($){this.watcher=_K($)}start(){if(!this.ready)this.stopped=!1,this.ready=this.watcher.start();return this.ready}stop(){if(this.stopped)return;this.stopped=!0,this.watcher.stop(),this.ready=void 0}async refreshType($){await this.start(),await this.watcher.refreshType($)}listRecords($){return[...this.watcher.getSnapshot($).entries()].map(([Z,Q])=>({type:$,id:Z,filePath:Q.filePath,item:Q.item}))}listRuntimeCommands(){return _5(this.watcher)}resolveRuntimeSlashCommand($){return OK($,this.watcher)}hasConfiguredSkills($){return z5(this.watcher,$).some((Z)=>!Z.disabled)}createSkillsExecutor($){return OJ(this.watcher,(this.ready??Promise.resolve()).catch(()=>{}),$)}createExtension($){return qK({...$,watcher:this.watcher,watcherReady:(this.ready??Promise.resolve()).catch(()=>{})})}}function b$($){return new MK($)}import{readFile as pN,writeFile as rN}from"node:fs/promises";import NK from"yaml";function iN($){let Z=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,Q=$.match(Z);if(!Q)return{data:{},body:$,hadFrontmatter:!1};let[,W,J]=Q,X=NK.parse(W);return{data:X&&typeof X==="object"&&!Array.isArray(X)?X:{},body:J,hadFrontmatter:!0}}function EK($,Z){return`---
|
|
487
487
|
${NK.stringify($).trimEnd()}
|
|
488
488
|
---
|
|
489
|
-
${Z}`}function
|
|
489
|
+
${Z}`}function nN($,Z){let{data:Q,body:W,hadFrontmatter:J}=iN($);if(!J&&Z)return $;if(Z){if(delete Q.disabled,Q.enabled===!1)delete Q.enabled;if(Object.keys(Q).length===0)return W;return EK(Q,W)}return Q.disabled=!0,EK(Q,W)}async function wK({filePath:$,enabled:Z}){let Q=await pN($,"utf8"),W=nN(Q,Z);return await rN($,W),{filePath:$,enabled:Z,disabled:!Z}}var WF={};N(WF,{updateMcpSettingsFileSync:()=>j1,updateMcpSettingsFile:()=>t8,updateMcpServerOAuthStateAsync:()=>O5,updateMcpServerOAuthState:()=>P2,setMcpServerDisabled:()=>w2,resolvePluginMcpServerRegistrations:()=>hQ,resolveMcpServerRegistrations:()=>p0,resolveDefaultMcpSettingsPath:()=>Z0,registerMcpServersFromSettingsFile:()=>S2,normalizePluginMcpServerRegistration:()=>SJ,loadMcpSettingsFile:()=>N2,listMcpServerOAuthStatuses:()=>q5,hasMcpSettingsFile:()=>s1,getMcpServerOAuthState:()=>C2,createMcpTools:()=>Q4,createDisabledMcpToolPolicy:()=>M5,createDisabledMcpToolPolicies:()=>IQ,createDefaultMcpServerClientFactory:()=>$4,authorizeMcpServerOAuth:()=>bQ,McpSettingsUpdateSkippedError:()=>o8,McpSettingsMutatorPurityError:()=>y$,McpSettingsLockTimeoutError:()=>h$,InMemoryMcpManager:()=>b2});import{spawn as yw}from"node:child_process";import{StringDecoder as oK}from"node:string_decoder";import{UnauthorizedError as iK}from"@modelcontextprotocol/sdk/client/auth.js";import{Client as hw}from"@modelcontextprotocol/sdk/client/index.js";import{randomUUID as qw}from"node:crypto";import{UnauthorizedError as Mw}from"@modelcontextprotocol/sdk/client/auth.js";import{Client as Rw}from"@modelcontextprotocol/sdk/client/index.js";import{SSEClientTransport as Ew}from"@modelcontextprotocol/sdk/client/sse.js";import{StreamableHTTPClientTransport as Nw}from"@modelcontextprotocol/sdk/client/streamableHttp.js";CQ();var ww="/mcp/oauth/callback",Cw=[1456,1457,1458],Pw=300000;function Sw($){if($ instanceof Error){let Z=$.message.trim();if(Z.length>0)return Z}return String($)}function bw($){return{client_name:"Cline",redirect_uris:[$],grant_types:["authorization_code","refresh_token"],response_types:["code"],token_endpoint_auth_method:"none"}}function SQ($){let Z={};try{Z=C2($.serverName,{filePath:$.settingsPath})??{}}catch{Z={}}let Q,W,J=async(Y)=>{let j=e8(Y(Z))??{};try{Z=P2($.serverName,()=>j,{filePath:$.settingsPath})}catch{Z=j}};return{provider:{get redirectUrl(){return Z.redirectUrl??$.redirectUrl},get clientMetadata(){return bw(Z.redirectUrl??$.redirectUrl)},state:()=>{return W=qw(),W},clientInformation:()=>Z.clientInformation,saveClientInformation:async(Y)=>{await J((j)=>({...j,clientInformation:Y,redirectUrl:$.redirectUrl,lastError:void 0}))},tokens:()=>Z.tokens,saveTokens:async(Y)=>{let j=Date.now();await J((V)=>({...V,tokens:Y,redirectUrl:$.redirectUrl,lastError:void 0,lastAuthenticatedAt:j}))},redirectToAuthorization:async(Y)=>{Q=Y.toString(),await $.onAuthorizationUrl?.(Q)},saveCodeVerifier:async(Y)=>{await J((j)=>({...j,codeVerifier:Y,redirectUrl:$.redirectUrl}))},codeVerifier:()=>{if(!Z.codeVerifier)throw Error(`Missing OAuth code verifier for MCP server "${$.serverName}".`);return Z.codeVerifier},invalidateCredentials:async(Y)=>{await J((j)=>{if(Y==="all")return{lastError:j.lastError,redirectUrl:j.redirectUrl};return{...j,...Y==="client"?{clientInformation:void 0}:{},...Y==="tokens"?{tokens:void 0,lastAuthenticatedAt:void 0}:{},...Y==="verifier"?{codeVerifier:void 0}:{},...Y==="discovery"?{discoveryState:void 0}:{}}})},saveDiscoveryState:async(Y)=>{await J((j)=>({...j,discoveryState:Y}))},discoveryState:()=>Z.discoveryState},getLastAuthorizationUrl:()=>Q,getLastOAuthState:()=>W,resetInteractiveState:async()=>{await J((Y)=>({...Y,clientInformation:void 0,codeVerifier:void 0,discoveryState:void 0,lastError:void 0,redirectUrl:$.redirectUrl}))},markError:async(Y)=>{await J((j)=>({...j,lastError:Y}))},clearError:async()=>{await J((Y)=>({...Y,lastError:void 0}))}}}function PQ($){let Z=$.registration.transport;if(Z.type==="stdio")throw Error(`MCP server "${$.registration.name}" uses stdio transport and does not support OAuth browser flow.`);let Q=Z.headers?{headers:Z.headers}:void 0;if(Z.type==="sse")return new Ew(new URL(Z.url),{authProvider:$.oauthProvider,requestInit:Q,fetch:$.fetch});return new Nw(new URL(Z.url),{authProvider:$.oauthProvider,requestInit:Q,fetch:$.fetch})}function rK($){return new Rw({name:$.clientName?.trim()||"@cline/core",version:$.clientVersion?.trim()||"0.0.0"})}async function bQ($){let Z=$.serverName.trim();if(!Z)throw Error("MCP server name cannot be empty.");let{resolveMcpServerRegistrations:Q}=await Promise.resolve().then(() => (CQ(),pK)),W=Q({filePath:$.filePath}).find((V)=>V.name===Z);if(!W)throw Error(`MCP server "${Z}" is not configured.`);if(W.disabled)throw Error(`MCP server "${Z}" is disabled. Enable it before running OAuth.`);if(W.transport.type==="stdio")throw Error(`MCP server "${Z}" uses stdio transport and does not support OAuth browser flow.`);let J=await J1({host:$.callbackHost,ports:$.callbackPorts?.length?$.callbackPorts:Cw,callbackPath:$.callbackPath??ww,timeoutMs:$.timeoutMs??Pw,successHtml:$.successHtml,onListening:$.onServerListening,onClose:$.onServerClose});if(!J.callbackUrl)throw Error("Unable to bind local MCP OAuth callback server.");let X=SQ({settingsPath:$.filePath,serverName:Z,redirectUrl:J.callbackUrl,onAuthorizationUrl:async(V)=>{await $.openUrl?.(V)}});await X.resetInteractiveState();let Y=rK($),j;try{let V=PQ({registration:W,oauthProvider:X.provider,fetch:$.fetch});try{return await Y.connect(V),await Y.listTools(),await X.clearError(),{serverName:Z,authorized:!0,message:`MCP server "${Z}" is already authorized.`}}catch(H){if(!(H instanceof Mw))throw H;if(!X.getLastAuthorizationUrl())throw Error(`MCP server "${Z}" did not provide an authorization URL.`);let G=await J.waitForCallback();if(!G)throw Error("Timed out waiting for MCP OAuth authorization callback.");if(G.error)throw Error(`OAuth authorization failed: ${G.error}`);if(!G.code)throw Error("OAuth callback did not include an authorization code.");let K=X.getLastOAuthState();if(!K)throw Error(`MCP server "${Z}" did not start an OAuth stateful authorization flow.`);if(G.state!==K)throw Error("OAuth authorization failed: state mismatch.");await V.finishAuth(G.code),j=rK($);let F=PQ({registration:W,oauthProvider:X.provider,fetch:$.fetch});return await j.connect(F),await j.listTools(),await X.clearError(),{serverName:Z,authorized:!0,message:`MCP server "${Z}" OAuth authorization completed.`}}}catch(V){let H=Sw(V);throw await X.markError(H),Error(H)}finally{await Y.close().catch(()=>{return}),await j?.close().catch(()=>{return}),J.close()}}var kw="2024-11-05",Iw=5000,xw=1500,nK="http://127.0.0.1:1456/mcp/oauth/callback";function yQ($){return $ instanceof Error?$.message:String($)}function aK($){let Z=Buffer.from(JSON.stringify($),"utf8"),Q=Buffer.from(`Content-Length: ${Z.byteLength}\r
|
|
490
490
|
\r
|
|
491
491
|
`,"utf8");return Buffer.concat([Q,Z])}function sK($){return Buffer.from(`${JSON.stringify($)}
|
|
492
492
|
`,"utf8")}class CJ{buffer="";decoder=new oK("utf8");push($){this.buffer+=this.decoder.write($);let Z=[];while(!0){let Q=this.buffer.indexOf(`\r
|
|
493
493
|
\r
|
|
494
494
|
`);if(Q<0)break;let J=this.buffer.slice(0,Q).match(/(?:^|\r\n)Content-Length:\s*(\d+)(?:\r\n|$)/i);if(!J)throw Error("Invalid MCP stdio frame: missing Content-Length header.");let X=Number.parseInt(J[1],10),Y=Q+4,j=Y+X;if(this.buffer.length<j)break;Z.push(this.buffer.slice(Y,j)),this.buffer=this.buffer.slice(j)}return Z}}class PJ{buffer="";decoder=new oK("utf8");push($){this.buffer+=this.decoder.write($);let Z=[];while(!0){let Q=this.buffer.indexOf(`
|
|
495
|
-
`);if(Q<0)break;let W=this.buffer.slice(0,Q).trim();if(this.buffer=this.buffer.slice(Q+1),W.length>0)Z.push(W)}return Z}}class tK{registration;process;nextRequestId=1;pending=new Map;framedParser=new CJ;newlineParser=new PJ;stderrBuffer="";connected=!1;protocolMode="newline";constructor($){this.registration=$}async connect(){if(this.connected)return;if(this.registration.transport.type!=="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${this.registration.transport.type}`);let $=["newline","framed"],Z;for(let Q of $){await this.disconnect().catch(()=>{}),this.spawnProcess(Q);try{await this.request("initialize",{protocolVersion:hw,capabilities:{},clientInfo:{name:"@cline/core",version:"0.0.0"}},Iw),this.notify("notifications/initialized"),this.connected=!0,this.protocolMode=Q;return}catch(W){Z=W instanceof Error?W:Error(String(W))}}throw Z??Error(`Failed to connect to MCP server "${this.registration.name}".`)}async disconnect(){let $=this.process;if(this.connected=!1,this.process=void 0,this.failAllPending(Error(`Disconnected from MCP server "${this.registration.name}".`)),!$)return;$.kill()}async listTools(){return((await this.request("tools/list")).tools??[]).filter((Z)=>typeof Z?.name==="string"&&typeof Z.inputSchema==="object"&&Z.inputSchema!==null).map((Z)=>({name:Z.name,description:Z.description,inputSchema:Z.inputSchema}))}async callTool($){return this.request("tools/call",{name:$.name,arguments:$.arguments??{}})}spawnProcess($){let Z=this.registration.transport;if(Z.type!=="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${Z.type}`);this.framedParser=new CJ,this.newlineParser=new PJ,this.stderrBuffer="",this.protocolMode=$;let Q=process.platform==="win32"?{windowsHide:!0,shell:!0}:{},W=bw(Z.command,Z.args??[],{cwd:Z.cwd,env:{...process.env,...Z.env??{}},stdio:["pipe","pipe","pipe"],...Q});this.process=W,W.stdout.on("data",(J)=>this.handleStdout(J)),W.stderr.on("data",(J)=>{if(this.process!==W)return;if(this.stderrBuffer+=J.toString("utf8"),this.stderrBuffer.length>16384)this.stderrBuffer=this.stderrBuffer.slice(-16384)}),W.once("error",(J)=>{if(this.process!==W)return;this.failAllPending(Error(`MCP process error: ${yQ(J)}`))}),W.once("exit",(J,X)=>{if(this.process!==W)return;this.connected=!1,this.process=void 0;let Y=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`MCP process exited for "${this.registration.name}" (code=${J??"null"}, signal=${X??"null"}).${Y}`))})}handleStdout($){try{let Z=this.protocolMode==="framed"?this.framedParser.push($):this.newlineParser.push($);for(let Q of Z){let W=JSON.parse(Q);if(typeof W.id!=="number")continue;let J=this.pending.get(W.id);if(!J)continue;if(this.pending.delete(W.id),clearTimeout(J.timeout),W.error){let X=W.error.message||`MCP request failed with code ${W.error.code??"unknown"}`;J.reject(Error(X));continue}J.resolve(W.result)}}catch(Z){this.handleProtocolFailure(Z)}}handleProtocolFailure($){let Z=this.process;if(!Z)return;this.connected=!1,this.process=void 0;let Q=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`Invalid MCP response from "${this.registration.name}": ${yQ($)}.${Q}`)),Z.kill()}async request($,Z,Q=kw){let W=this.process;if(!W?.stdin.writable)throw Error(`MCP server "${this.registration.name}" is not connected.`);let J=this.nextRequestId++,X={jsonrpc:"2.0",id:J,method:$,...Z?{params:Z}:{}},Y=new Promise((j,V)=>{let H=setTimeout(()=>{this.pending.delete(J),V(Error(`MCP request timed out for "${this.registration.name}" (${$}).`))},Q);this.pending.set(J,{resolve:j,reject:V,timeout:H})});try{W.stdin.write(this.protocolMode==="framed"?aK(X):sK(X))}catch(j){let V=this.pending.get(J);if(V)clearTimeout(V.timeout),this.pending.delete(J);throw j}return Y}notify($,Z){let Q=this.process;if(!Q?.stdin.writable)return;let W={jsonrpc:"2.0",method:$,...Z?{params:Z}:{}};Q.stdin.write(this.protocolMode==="framed"?aK(W):sK(W))}failAllPending($){for(let[Z,Q]of this.pending)clearTimeout(Q.timeout),this.pending.delete(Z),Q.reject($)}}class eK{registration;options;client;authContext;constructor($,Z){this.registration=$;this.options=Z}async connect(){if(this.client)return;if(this.registration.transport.type==="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${this.registration.transport.type}`);let $=SQ({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??nK});this.authContext=$;try{let Z=new yw({name:this.options.clientName?.trim()||"@cline/core",version:this.options.clientVersion?.trim()||"0.0.0"}),Q=PQ({registration:this.registration,oauthProvider:$.provider,fetch:this.options.fetch});await Z.connect(Q),await $.clearError(),this.client=Z}catch(Z){let Q=Z instanceof iK?this.formatUnauthorizedMessage($.getLastAuthorizationUrl()):yQ(Z);throw await $.markError(Q),Error(Q)}}async disconnect(){let $=this.client;this.client=void 0,await $?.close()}async listTools(){let $=await this.ensureConnectedClient();try{return(await $.listTools()).tools.map((Q)=>({name:Q.name,description:Q.description,inputSchema:Q.inputSchema&&typeof Q.inputSchema==="object"&&!Array.isArray(Q.inputSchema)?Q.inputSchema:{}}))}catch(Z){return await this.handleOperationError(Z)}}async callTool($){let Z=await this.ensureConnectedClient();try{return await Z.callTool({name:$.name,arguments:$.arguments??{}})}catch(Q){return await this.handleOperationError(Q)}}async ensureConnectedClient(){if(!this.client)await this.connect();if(!this.client)throw Error(`MCP server "${this.registration.name}" is not connected.`);return this.client}formatUnauthorizedMessage($){let Z=`MCP server "${this.registration.name}" requires OAuth authorization.`;if(!$)return`${Z} Run authorizeMcpServerOAuth for this server.`;return`${Z} Run authorizeMcpServerOAuth for this server and complete this URL: ${$}`}async handleOperationError($){let Z=this.authContext??SQ({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??nK}),Q=$ instanceof iK?this.formatUnauthorizedMessage(Z.getLastAuthorizationUrl()):yQ($);throw await Z.markError(Q),Error(Q)}}function $4($={}){return(Z)=>Z.transport.type==="stdio"?new tK(Z):new eK(Z,$)}CQ();function r0(){return Date.now()}function xw($){return $.map((Z)=>({name:Z.name,description:Z.description,inputSchema:Z.inputSchema}))}class b2{toolsCacheTtlMs;clientFactory;servers=new Map;operationLocks=new Map;constructor($){this.clientFactory=$.clientFactory,this.toolsCacheTtlMs=$.toolsCacheTtlMs??5000}async registerServer($){await this.runExclusive($.name,async()=>{let Z=this.servers.get($.name);if(!Z){this.servers.set($.name,{registration:{...$},status:"disconnected",updatedAt:r0()});return}let Q=JSON.stringify(Z.registration.transport)!==JSON.stringify($.transport);if(Z.registration={...$},Z.updatedAt=r0(),Q)await this.disconnectState(Z),Z.client=void 0,Z.toolCache=void 0,Z.toolCacheUpdatedAt=void 0})}async unregisterServer($){await this.runExclusive($,async()=>{let Z=this.requireServer($);await this.disconnectState(Z),this.servers.delete($)})}async connectServer($){await this.runExclusive($,async()=>{let Z=this.requireServer($);await this.connectState(Z)})}async disconnectServer($){await this.runExclusive($,async()=>{let Z=this.requireServer($);await this.disconnectState(Z)})}async setServerDisabled($,Z){await this.runExclusive($,async()=>{let Q=this.requireServer($);if(Q.registration={...Q.registration,disabled:Z},Q.updatedAt=r0(),Z)await this.disconnectState(Q)})}listServers(){return[...this.servers.values()].map(($)=>({name:$.registration.name,status:$.status,disabled:$.registration.disabled===!0,lastError:$.lastError,toolCount:$.toolCache?.length??0,updatedAt:$.updatedAt,metadata:$.registration.metadata})).sort(($,Z)=>$.name.localeCompare(Z.name))}async listTools($){let Z=this.requireServer($),Q=Z.toolCacheUpdatedAt??0;if(Z.toolCache&&r0()-Q<=this.toolsCacheTtlMs)return Z.toolCache;return this.refreshTools($)}async refreshTools($){return this.runExclusive($,async()=>{let Z=this.requireServer($),W=await(await this.ensureConnectedClient(Z)).listTools(),J=xw(W);return Z.toolCache=J,Z.toolCacheUpdatedAt=r0(),Z.updatedAt=r0(),J})}async callTool($){return this.runExclusive($.serverName,async()=>{let Z=this.requireServer($.serverName),Q=await this.ensureConnectedClient(Z);return Z.updatedAt=r0(),Q.callTool({name:$.toolName,arguments:$.arguments,context:$.context})})}async dispose(){let $=[...this.servers.keys()];for(let Z of $)await this.unregisterServer(Z)}async ensureConnectedClient($){if(await this.connectState($),!$.client)throw Error(`MCP server "${$.registration.name}" does not have an initialized client.`);return $.client}async connectState($){if($.registration.disabled)throw Error(`MCP server "${$.registration.name}" is disabled and cannot be connected.`);if($.status==="connected"&&$.client)return;$.status="connecting",$.updatedAt=r0();try{let Z=$.client??await this.clientFactory($.registration);await Z.connect(),$.client=Z,$.status="connected",$.lastError=void 0,$.updatedAt=r0()}catch(Z){throw $.status="disconnected",$.lastError=Z instanceof Error?Z.message:String(Z),$.updatedAt=r0(),Z}}async disconnectState($){if(!$.client){$.status="disconnected",$.updatedAt=r0();return}try{await $.client.disconnect()}finally{$.status="disconnected",$.updatedAt=r0()}}requireServer($){let Z=this.servers.get($);if(!Z)throw Error(`Unknown MCP server: ${$}`);return Z}async runExclusive($,Z){let Q=this.operationLocks.get($)??Promise.resolve(),W,J=new Promise((Y)=>{W=Y}),X=Q.catch(()=>{return}).then(()=>J);this.operationLocks.set($,X),await Q.catch(()=>{return});try{return await Z()}finally{if(W?.(),this.operationLocks.get($)===X)this.operationLocks.delete($)}}}function Z4($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function $F($){return Z4($)&&Object.values($).every((Z)=>typeof Z==="string")}function gw($){return Array.isArray($)&&$.every((Z)=>typeof Z==="string")}function mw($){if(!Z4($))return!1;return($.fromEnv===void 0||typeof $.fromEnv==="string")&&($.value===void 0||typeof $.value==="string")&&($.required===void 0||typeof $.required==="boolean")}function vw($){let Z=$.env?Object.entries($.env):[];if(Z.length===0)return{ok:!0};let Q={};for(let[W,J]of Z){if(typeof J==="string"){Q[W]=J;continue}let X=J.fromEnv?.trim()||W,Y=process.env[X];if(typeof Y==="string"&&Y.length>0){Q[W]=Y;continue}if(typeof J.value==="string"){Q[W]=J.value;continue}if(J.required===!0)return{ok:!1,reason:`required environment variable "${X}" is not set`}}return{ok:!0,env:Object.keys(Q).length>0?Q:void 0}}function SJ($){if(!Z4($))return{name:"",loadError:"invalid MCP server registration"};let Z=typeof $.name==="string"?$.name.trim():"";if(!Z)return{name:Z,loadError:"empty MCP server name"};let Q=$.env,W=Q===void 0?void 0:Q;if(W!==void 0){if(!Z4(W))return{name:Z,loadError:"invalid env"};for(let[V,H]of Object.entries(W))if(typeof H!=="string"&&!mw(H))return{name:Z,loadError:`invalid env "${V}"`}}let J=$.transport;if(!Z4(J))return{name:Z,loadError:"invalid MCP transport"};let X=J.type;if(X!=="stdio"&&X!=="sse"&&X!=="streamableHttp")return{name:Z,loadError:"invalid MCP transport type"};if(X!=="stdio"&&W!==void 0)return{name:Z,loadError:"top-level env is only supported for stdio MCP transports"};let Y=Z4($.metadata)?$.metadata:void 0;if(X==="stdio"){let V=J.command;if(typeof V!=="string"||!V.trim())return{name:Z,loadError:"stdio MCP transport requires command"};let H=J.args;if(H!==void 0&&!gw(H))return{name:Z,loadError:"stdio MCP transport args must be strings"};let B=J.cwd;if(B!==void 0&&typeof B!=="string")return{name:Z,loadError:"stdio MCP transport cwd must be a string"};let G=J.env;if(G!==void 0&&!$F(G))return{name:Z,loadError:"stdio MCP transport env must be strings"};let K=vw({name:Z,transport:{type:"stdio",command:V,args:H,cwd:B,env:G},env:W,metadata:Y});if(!K.ok)return{name:Z,loadError:K.reason};let F=G||K.env?{...G??{},...K.env??{}}:void 0;return{name:Z,registration:{name:Z,transport:{type:"stdio",command:V,args:H,cwd:B,env:F},metadata:Y}}}if(typeof J.url!=="string"||!J.url.trim())return{name:Z,loadError:`${X} MCP transport requires url`};let j=J.headers;if(j!==void 0&&!$F(j))return{name:Z,loadError:`${X} MCP transport headers must be strings`};return{name:Z,registration:{name:Z,transport:X==="sse"?{type:"sse",url:J.url,headers:j}:{type:"streamableHttp",url:J.url,headers:j},metadata:Y}}}function hQ($){let Z=new Map;return $.map(({server:Q,owner:W,ownerLabel:J})=>{let X=SJ(Q);if(!X.registration)return{owner:W,name:X.name,loadError:X.loadError??"invalid MCP server registration"};let Y=Z.get(X.registration.name);if(Z.has(X.registration.name)){let j=Y?` already registered by ${Y}`:"";return{owner:W,name:X.registration.name,loadError:`duplicate MCP server name "${X.registration.name}"${j}`}}return Z.set(X.registration.name,J),{owner:W,name:X.registration.name,registration:X.registration}})}import{createHash as cw}from"node:crypto";var ZF=64,uw=/[^a-zA-Z0-9_-]+/g,QF=8,dw=1,lw="mcp_tool";function pw($){return cw("sha1").update($).digest("hex").slice(0,QF)}function rw($){return $.replace(uw,"_")}var kQ=({serverName:$,toolName:Z})=>{let Q=`${$}__${Z}`,W=rw(Q);if(W===Q&&Q.length<=ZF)return Q;let J=pw(Q),X=ZF-dw-QF;return`${W.slice(0,X)||lw}_${J}`};function M5($){return{[($.nameTransform??kQ)({serverName:$.serverName,toolName:$.toolName})]:{enabled:!1}}}function IQ($){let Z={};for(let Q of $.toolNames)Object.assign(Z,M5({serverName:$.serverName,toolName:Q,nameTransform:$.nameTransform}));return Z}import{createTool as iw}from"@cline/shared";function nw($,Z){let Q=Z.description?.trim();if(Q)return Q;return`Execute MCP tool "${Z.name}" from server "${$}".`}async function Q4($){let Z=await $.provider.listTools($.serverName),Q=$.nameTransform??kQ;return Z.map((W)=>{let J=Q({serverName:$.serverName,toolName:W.name});return iw({name:J,description:nw($.serverName,W),inputSchema:W.inputSchema,timeoutMs:$.timeoutMs,retryable:$.retryable,maxRetries:$.maxRetries,execute:async(X,Y)=>$.provider.callTool({serverName:$.serverName,toolName:W.name,arguments:X&&typeof X==="object"&&!Array.isArray(X)?X:void 0,context:Y})})})}$1();var YF={};N(YF,{listPluginToolsWithDiagnostics:()=>xQ,listPluginTools:()=>R5});import{stat as aw}from"node:fs/promises";import{isAbsolute as sw,relative as ow,resolve as JF}from"node:path";$1();function tw($,Z){let Q=ow(JF($),JF(Z));return Q===""||!Q.startsWith("..")&&!sw(Q)}var ew=32,W4=new Map;function $C($,Z){if(!W4.has($)&&W4.size>=ew){let Q=W4.keys().next().value;if(Q)W4.delete(Q)}W4.set($,Z)}async function ZC($){let Z=await Promise.all($.pluginPaths.map(async(Q)=>{try{let W=await aw(Q);return`${Q}:${W.mtimeMs}:${W.size}`}catch{return`${Q}:missing`}}));return JSON.stringify({workspacePath:$.workspacePath,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,pathStats:Z})}function XF($,Z){return $.map((Q)=>({...Q,enabled:!Z.has(Q.name)}))}function QC($){return $.sort((Z,Q)=>{let W=Z.name.localeCompare(Q.name);if(W!==0)return W;return Z.path.localeCompare(Q.path)})}async function WC($,Z){if(!$.setup)return{tools:[]};let Q=[],W={registerTool:(J)=>Q.push(J),registerCommand:()=>{},registerMessageBuilder:()=>{},registerRule:()=>{},registerProvider:()=>{},registerAutomationEventType:()=>{},registerMcpServer:(J)=>{if(!$.manifest.capabilities.includes("mcp"))throw Error('registerMcpServer requires the "mcp" capability')}};return await $.setup(W,{workspaceInfo:Z}),{tools:Q}}async function xQ($){let Z=i1({workspacePath:$.workspacePath,cwd:$.cwd}),Q=G1($.disabledToolNames);if(Z.length===0)return{tools:[],failures:[],warnings:[]};let W=await ZC({pluginPaths:Z,workspacePath:$.workspacePath,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId}),J=W4.get(W);if(J)return{tools:XF(J.tools,Q),failures:J.failures,warnings:J.warnings};let X=[],Y=[],j=[],V;try{V=await x8({pluginPaths:Z,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,workspaceInfo:{rootPath:$.workspacePath}}),Y=[...V.failures],j=[...V.warnings];for(let B of V.extensions??[]){let G=B.__clinePluginPath;if(!G)continue;let K=tw($.workspacePath,G)?"workspace-plugin":"global-plugin",F;try{F=await WC(B,{rootPath:$.workspacePath})}catch(A){Y.push({pluginPath:G,pluginName:B.name,phase:"setup",message:A instanceof Error?A.message:String(A),stack:A instanceof Error?A.stack:void 0});continue}for(let A of F.tools)X.push({name:A.name,pluginName:B.name,path:G,source:K,description:A.description?.trim()||void 0})}}catch(B){Y=Z.map((G)=>({pluginPath:G,phase:"load",message:B instanceof Error?B.message:String(B),stack:B instanceof Error?B.stack:void 0}))}finally{await V?.shutdown().catch(()=>{})}let H=QC(X);return $C(W,{tools:H,failures:Y,warnings:j}),{tools:XF(H,Q),failures:Y,warnings:j}}async function R5($){return(await xQ($)).tools}function w5($,Z){if(!Z)return"global";let Q=GF(Z,$);return!Q.startsWith("..")&&!BF(Q)?"workspace":"global"}function jC($,Z){return w5($,Z)==="workspace"?"workspace-plugin":"global-plugin"}function VC($,Z){let Q=GF(VF($),VF(Z));return Q===""||!Q.startsWith("..")&&!BF(Q)}function HC($){try{let Z=JSON.parse(JC($,"utf8"));return typeof Z.name==="string"&&Z.name.trim()?Z.name.trim():void 0}catch{return}}function BC($){let Z=jF($);while(!0){let Q=YC(Z,"package.json");if(N5(Q)){let J=HC(Q);if(J)return J;break}let W=jF(Z);if(W===Z)break;Z=W}return bJ($,XC($))}function GC($){let Z=[];for(let Q of i1({workspacePath:$.workspaceRoot||void 0,cwd:$.cwd}))for(let W of n1([Q]))Z.push({directory:W,pluginName:BC(Q),pluginPath:Q,source:$.workspaceRoot?jC(Q,$.workspaceRoot):"global-plugin"});return Z.sort((Q,W)=>W.directory.length-Q.directory.length)}function KC($,Z){return Z.find((Q)=>VC(Q.directory,$))}function E5($){return[...$].sort((Z,Q)=>{let W=(J)=>{switch(J){case"workspace":case"workspace-plugin":return 0;case"global":case"global-plugin":return 1;case"builtin":return 2}};if(Z.source!==Q.source)return W(Z.source)-W(Q.source);return Z.name.localeCompare(Q.name)})}function KF($){return $.workspaceRoot?.trim()||$.cwd?.trim()||""}function FF($,Z){return $.cwd?.trim()||Z||process.cwd()}async function HF($,Z){if($.userInstructionService)return await Z($.userInstructionService);let Q=KF($),W=FF($,Q),J=b$({skills:{workspacePath:Q||void 0,includePluginSkills:!0,cwd:W},rules:{workspacePath:Q||void 0},workflows:{workspacePath:Q||void 0}});try{return await J.start(),await Z(J)}finally{J.stop()}}function FC($,Z){if(!$)return;let Q=$.listRecords("skill");if(Z.id){let W=Q.find((J)=>J.id===Z.id);if(W)return W}for(let W of Q)if(W.filePath===Z.path||W.item.name===Z.name||W.id===Z.name)return W;return}class k${async list($={}){return await HF($,async(Z)=>{let Q=KF($),W=GC({workspaceRoot:Q,cwd:FF($,Q)}),J=[],X=[],Y=[],j=[],V=[];if(Z){for(let B of Z.listRecords("workflow")){let G=B.item;J.push({id:B.id,name:G.name,path:B.filePath,enabled:G.disabled!==!0,kind:"workflow",source:w5(B.filePath,Q),description:G.instructions,toggleable:!1})}for(let B of Z.listRecords("rule")){let G=B.item;X.push({id:B.id,name:G.name,path:B.filePath,enabled:G.disabled!==!0,kind:"rule",source:w5(B.filePath,Q),description:G.instructions,toggleable:!1})}for(let B of Z.listRecords("skill")){let G=B.item,K=KC(B.filePath,W);Y.push({id:B.id,name:G.name,path:B.filePath,enabled:G.disabled!==!0,kind:"skill",source:K?.source??w5(B.filePath,Q),description:G.description,pluginName:K?.pluginName,pluginPath:K?.pluginPath,toggleable:!0})}}if(Q)try{for(let B of await R5({workspacePath:Q,cwd:$.cwd,providerId:$.availabilityContext?.providerId,modelId:$.availabilityContext?.modelId}))j.push({id:`${B.pluginName}:${B.name}:${B.path}`,name:B.name,path:B.path,enabled:B.enabled,kind:"tool",source:B.source,description:B.description,toggleable:!0})}catch{}let H=Z0();if(s1({filePath:H}))try{for(let B of p0({filePath:H}))V.push({id:B.name,name:B.name,path:H,enabled:B.disabled!==!0,kind:"mcp",source:w5(H,Q),description:B.transport.type,toggleable:!0})}catch{}return{workflows:E5(J.filter((B)=>N5(B.path))),rules:E5(X.filter((B)=>N5(B.path))),skills:E5(Y.filter((B)=>N5(B.path))),tools:E5(j),mcp:E5(V.filter((B)=>N5(B.path)))}})}async toggle($){if($.type==="skills")return await HF($,async(Z)=>{let Q=FC(Z,$),W=Q?.filePath;if(!W)throw Error(`Unable to resolve skill setting '${$.id??$.name??bJ($.path??"")}'.`);let J=Q?.item&&"disabled"in Q.item?Q.item.disabled!==!0:void 0,X=$.enabled??(J!==void 0?!J:void 0);if(X===void 0)throw Error(`Cannot determine toggle state for skill '${$.id??$.name??bJ($.path??"")}'; provide an explicit enabled value or a resolvable workspace context.`);return await wK({filePath:W,enabled:X}),await Z?.refreshType("skill"),{snapshot:await this.list({...$,userInstructionService:Z}),changedTypes:["skills"]}});if($.type==="tools"){if(!$.name?.trim())throw Error("Tool settings toggle requires a tool name.");if($.enabled===void 0)m9($.name);else mj($.name,!$.enabled);return{snapshot:await this.list($),changedTypes:["tools"]}}if($.type==="mcp"){let Z=$.name?.trim()||$.id?.trim();if(!Z)throw Error("MCP server settings toggle requires a server name.");let Q=$.path?.trim()||Z0(),W=$.enabled;if(W===void 0){let J=p0({filePath:Q}).find((X)=>X.name===Z);if(!J)throw Error(`Unknown MCP server: ${Z}`);W=J.disabled===!0}return w2({filePath:Q,name:Z,disabled:!W}),{snapshot:await this.list($),changedTypes:["mcp"]}}throw Error(`Settings type '${$.type}' does not support toggles.`)}}function y2(){return new k$}function fF($){return{async list(Z){let Q=$;if(Q.listSettings)return await Q.listSettings(Z);return await y2().list(Z)},async toggle(Z){let Q=$;if(Q.toggleSetting)return await Q.toggleSetting(Z);return await y2().toggle(Z)}}}function UF($){function Z(){let Q=$.pendingPrompts;if(!Q)throw Error("Pending prompt service is not available.");return Q}return{list(Q){return Z().list(Q)},update(Q){return Z().update(Q)},delete(Q){return Z().delete(Q)}}}function DF($){let Z=$.config;return"providerId"in Z?{...$,config:{...Z,...AC($.localRuntime)},localRuntime:$.localRuntime}:$}function yJ($,Z={}){let Q=i4($.config),W=M0(Z.defaultCapabilities,$.capabilities),J=fC(Q.localRuntime,$.localRuntime),X=Z.withExtensionContext?.(J?.extensionContext);if(X)J={...J??{},extensionContext:X};return{...$,...Q,...J?{localRuntime:J}:{},...W?{capabilities:W}:{}}}function AC($){if(!$)return{};let{modelCatalogDefaults:Z,userInstructionService:Q,configExtensions:W,onTeamRestored:J,...X}=$;return X}function fC(...$){let Z={};for(let Q of $)if(Q)Object.assign(Z,Q);return Object.keys(Z).length>0?Z:void 0}_0();function LF($){let Z=$.input.config.telemetry??$.telemetry;if(!Z)return;Z.capture({event:m.SESSION.STARTED,properties:{sessionId:$.sessionId,source:$.input.source??T0.CORE,providerId:$.input.config.providerId,modelId:$.input.config.modelId,enableTools:$.input.config.enableTools,enableSpawnAgent:$.input.config.enableSpawnAgent,enableAgentTeams:$.input.config.enableAgentTeams,clientName:$.clientName,runtimeAddress:$.runtimeAddress}})}function C5($){return!!$&&typeof $==="object"&&!Array.isArray($)}function hJ($){let Z=$?.trim();return Z?Z:void 0}function UC($,Z){let Q=$?.trim();if(!Q)return Z;let W=Date.parse(Q);if(!Number.isFinite(W))return Z;return new Date(W).toISOString()}function _F($,Z){return new Date(new Date($).getTime()+Math.max(0,Math.floor(Z))*1000).toISOString()}function zF($,Z){return new Date(new Date($).getTime()-Math.max(0,Math.floor(Z))*1000).toISOString()}function DC($,Z){if(!$)return Z;return new Date($).getTime()>=new Date(Z).getTime()?$:Z}function LC($,Z){let Q=$.eventId.trim(),W=$.eventType.trim(),J=$.source.trim(),X=hJ($.subject),Y=hJ($.dedupeKey)??`${W}:${J}:${X??Q}`;return{eventId:Q,eventType:W,source:J,subject:X,occurredAt:UC($.occurredAt,Z),workspaceRoot:hJ($.workspaceRoot),payload:C5($.payload)?$.payload:void 0,attributes:C5($.attributes)?$.attributes:void 0,dedupeKey:Y}}function kJ($,Z){if(!Z)return;let Q=Z.split("."),W=$;for(let J of Q){if(!C5(W))return;W=W[J]}return W}function _C($,Z){if($.attributes&&Object.hasOwn($.attributes,Z))return $.attributes[Z];if($.payload&&Object.hasOwn($.payload,Z))return $.payload[Z];let Q={eventId:$.eventId,eventType:$.eventType,source:$.source,subject:$.subject,occurredAt:$.occurredAt,workspaceRoot:$.workspaceRoot,dedupeKey:$.dedupeKey,attributes:$.attributes,payload:$.payload},W=kJ(Q,Z);if(W!==void 0)return W;if($.attributes){let J=kJ($.attributes,Z);if(J!==void 0)return J}if($.payload)return kJ($.payload,Z);return}function gQ($,Z){if(Array.isArray(Z))return Z.some((Q)=>gQ($,Q));if(Array.isArray($))return $.some((Q)=>gQ(Q,Z));if(C5(Z)){if(!C5($))return!1;return Object.entries(Z).every(([Q,W])=>gQ($[Q],W))}return Object.is($,Z)}function zC($,Z){if(!Z||Object.keys(Z).length===0)return!0;return Object.entries(Z).every(([Q,W])=>gQ(_C($,Q),W))}class IJ{store;nowFn;logger;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now()),this.logger=$.logger}ingestEvent($){let Z=new Date(this.nowFn()).toISOString(),Q=LC($,Z),W=this.store.insertEventLog(Q,{receivedAtIso:Z});if(!W.created)return this.logger?.debug("cron.event.duplicate",{eventId:W.record.eventId,eventType:W.record.eventType,source:W.record.source}),{event:W.record,duplicate:!0,matchedSpecs:[],queuedRuns:[],suppressions:[{reason:"duplicate_event",dedupeKey:W.record.dedupeKey}]};try{let J=this.store.listEventSpecsForType(Q.eventType),X=[],Y=[],j=[];for(let B of J){if(!zC(Q,B.filters)){X.push({specId:B.specId,externalId:B.externalId,reason:"filter_mismatch",dedupeKey:Q.dedupeKey});continue}Y.push(B);let G=this.materializeForSpec(B,Q,W.record.receivedAt);if(G.run)j.push(G.run);else X.push({specId:B.specId,externalId:B.externalId,reason:G.reason,dedupeKey:Q.dedupeKey})}let V=Y.length===0?"unmatched":j.length>0?"queued":"suppressed";this.store.updateEventLogProcessing(W.record.eventId,{status:V,matchedSpecCount:Y.length,queuedRunCount:j.length,suppressedCount:X.filter((B)=>B.reason!=="filter_mismatch").length});let H=this.store.getEventLog(W.record.eventId);return this.logger?.debug("cron.event.processed",{eventId:W.record.eventId,eventType:W.record.eventType,status:V,matchedSpecCount:Y.length,queuedRunCount:j.length}),{event:H??W.record,duplicate:!1,matchedSpecs:Y,queuedRuns:j,suppressions:X}}catch(J){if(this.store.updateEventLogProcessing(W.record.eventId,{status:"failed",error:J instanceof Error?J.message:String(J)}),this.logger?.error)this.logger.error("cron.event.failed",{eventId:W.record.eventId,eventType:W.record.eventType,error:J});throw J}}materializeForSpec($,Z,Q){let W=Z.dedupeKey??Z.eventId,J=$.debounceSeconds??0;if(J>0){let V=this.store.findQueuedEventRunForDedupe({specId:$.specId,dedupeKey:W});if(V){let H=DC(V.scheduledFor,_F(Q,J)),B=this.store.updateQueuedEventRunForDebounce({runId:V.runId,triggerEventId:Z.eventId,scheduledFor:H});if(B)return{run:B,reason:"dedupe_window"}}}let X=$.dedupeWindowSeconds??0;if(X>0&&this.store.hasRecentEventRunForDedupe({specId:$.specId,dedupeKey:W,sinceIso:zF(Q,X)}))return{reason:"dedupe_window"};let Y=$.cooldownSeconds??0;if(Y>0&&this.store.hasRecentEventRunForSpec({specId:$.specId,sinceIso:zF(Q,Y)}))return{reason:"cooldown"};return{run:this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"event",triggerEventId:Z.eventId,scheduledFor:J>0?_F(Q,J):Q}),reason:"dedupe_window"}}}import{existsSync as IC,readdirSync as xC,readFileSync as gC,statSync as mC}from"node:fs";import{relative as vC}from"node:path";import{resolveCronSpecsDir as cC}from"@cline/shared/storage";import{createHash as TC}from"node:crypto";import OC from"yaml";function qC($){let Z=$.replace(/\\/g,"/");if(Z.startsWith("events/")&&Z.endsWith(".event.md"))return"event";if(Z.endsWith(".cron.md"))return"schedule";return"one_off"}function MC($){let Z=$.replace(/\r\n/g,`
|
|
495
|
+
`);if(Q<0)break;let W=this.buffer.slice(0,Q).trim();if(this.buffer=this.buffer.slice(Q+1),W.length>0)Z.push(W)}return Z}}class tK{registration;process;nextRequestId=1;pending=new Map;framedParser=new CJ;newlineParser=new PJ;stderrBuffer="";connected=!1;protocolMode="newline";constructor($){this.registration=$}async connect(){if(this.connected)return;if(this.registration.transport.type!=="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${this.registration.transport.type}`);let $=["newline","framed"],Z;for(let Q of $){await this.disconnect().catch(()=>{}),this.spawnProcess(Q);try{await this.request("initialize",{protocolVersion:kw,capabilities:{},clientInfo:{name:"@cline/core",version:"0.0.0"}},xw),this.notify("notifications/initialized"),this.connected=!0,this.protocolMode=Q;return}catch(W){Z=W instanceof Error?W:Error(String(W))}}throw Z??Error(`Failed to connect to MCP server "${this.registration.name}".`)}async disconnect(){let $=this.process;if(this.connected=!1,this.process=void 0,this.failAllPending(Error(`Disconnected from MCP server "${this.registration.name}".`)),!$)return;$.kill()}async listTools(){return((await this.request("tools/list")).tools??[]).filter((Z)=>typeof Z?.name==="string"&&typeof Z.inputSchema==="object"&&Z.inputSchema!==null).map((Z)=>({name:Z.name,description:Z.description,inputSchema:Z.inputSchema}))}async callTool($){return this.request("tools/call",{name:$.name,arguments:$.arguments??{}})}spawnProcess($){let Z=this.registration.transport;if(Z.type!=="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${Z.type}`);this.framedParser=new CJ,this.newlineParser=new PJ,this.stderrBuffer="",this.protocolMode=$;let Q=process.platform==="win32"?{windowsHide:!0,shell:!0}:{},W=yw(Z.command,Z.args??[],{cwd:Z.cwd,env:{...process.env,...Z.env??{}},stdio:["pipe","pipe","pipe"],...Q});this.process=W,W.stdout.on("data",(J)=>this.handleStdout(J)),W.stderr.on("data",(J)=>{if(this.process!==W)return;if(this.stderrBuffer+=J.toString("utf8"),this.stderrBuffer.length>16384)this.stderrBuffer=this.stderrBuffer.slice(-16384)}),W.once("error",(J)=>{if(this.process!==W)return;this.failAllPending(Error(`MCP process error: ${yQ(J)}`))}),W.once("exit",(J,X)=>{if(this.process!==W)return;this.connected=!1,this.process=void 0;let Y=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`MCP process exited for "${this.registration.name}" (code=${J??"null"}, signal=${X??"null"}).${Y}`))})}handleStdout($){try{let Z=this.protocolMode==="framed"?this.framedParser.push($):this.newlineParser.push($);for(let Q of Z){let W=JSON.parse(Q);if(typeof W.id!=="number")continue;let J=this.pending.get(W.id);if(!J)continue;if(this.pending.delete(W.id),clearTimeout(J.timeout),W.error){let X=W.error.message||`MCP request failed with code ${W.error.code??"unknown"}`;J.reject(Error(X));continue}J.resolve(W.result)}}catch(Z){this.handleProtocolFailure(Z)}}handleProtocolFailure($){let Z=this.process;if(!Z)return;this.connected=!1,this.process=void 0;let Q=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`Invalid MCP response from "${this.registration.name}": ${yQ($)}.${Q}`)),Z.kill()}async request($,Z,Q=Iw){let W=this.process;if(!W?.stdin.writable)throw Error(`MCP server "${this.registration.name}" is not connected.`);let J=this.nextRequestId++,X={jsonrpc:"2.0",id:J,method:$,...Z?{params:Z}:{}},Y=new Promise((j,V)=>{let H=setTimeout(()=>{this.pending.delete(J),V(Error(`MCP request timed out for "${this.registration.name}" (${$}).`))},Q);this.pending.set(J,{resolve:j,reject:V,timeout:H})});try{W.stdin.write(this.protocolMode==="framed"?aK(X):sK(X))}catch(j){let V=this.pending.get(J);if(V)clearTimeout(V.timeout),this.pending.delete(J);throw j}return Y}notify($,Z){let Q=this.process;if(!Q?.stdin.writable)return;let W={jsonrpc:"2.0",method:$,...Z?{params:Z}:{}};Q.stdin.write(this.protocolMode==="framed"?aK(W):sK(W))}failAllPending($){for(let[Z,Q]of this.pending)clearTimeout(Q.timeout),this.pending.delete(Z),Q.reject($)}}class eK{registration;options;client;authContext;constructor($,Z){this.registration=$;this.options=Z}async connect(){if(this.client)return;if(this.registration.transport.type==="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${this.registration.transport.type}`);let $=SQ({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??nK});this.authContext=$;try{let Z=new hw({name:this.options.clientName?.trim()||"@cline/core",version:this.options.clientVersion?.trim()||"0.0.0"}),Q=PQ({registration:this.registration,oauthProvider:$.provider,fetch:this.options.fetch});await Z.connect(Q),await $.clearError(),this.client=Z}catch(Z){let Q=Z instanceof iK?this.formatUnauthorizedMessage($.getLastAuthorizationUrl()):yQ(Z);throw await $.markError(Q),Error(Q)}}async disconnect(){let $=this.client;this.client=void 0,await $?.close()}async listTools(){let $=await this.ensureConnectedClient();try{return(await $.listTools()).tools.map((Q)=>({name:Q.name,description:Q.description,inputSchema:Q.inputSchema&&typeof Q.inputSchema==="object"&&!Array.isArray(Q.inputSchema)?Q.inputSchema:{}}))}catch(Z){return await this.handleOperationError(Z)}}async callTool($){let Z=await this.ensureConnectedClient();try{return await Z.callTool({name:$.name,arguments:$.arguments??{}})}catch(Q){return await this.handleOperationError(Q)}}async ensureConnectedClient(){if(!this.client)await this.connect();if(!this.client)throw Error(`MCP server "${this.registration.name}" is not connected.`);return this.client}formatUnauthorizedMessage($){let Z=`MCP server "${this.registration.name}" requires OAuth authorization.`;if(!$)return`${Z} Run authorizeMcpServerOAuth for this server.`;return`${Z} Run authorizeMcpServerOAuth for this server and complete this URL: ${$}`}async handleOperationError($){let Z=this.authContext??SQ({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??nK}),Q=$ instanceof iK?this.formatUnauthorizedMessage(Z.getLastAuthorizationUrl()):yQ($);throw await Z.markError(Q),Error(Q)}}function $4($={}){return(Z)=>Z.transport.type==="stdio"?new tK(Z):new eK(Z,$)}CQ();function r0(){return Date.now()}function gw($){return $.map((Z)=>({name:Z.name,description:Z.description,inputSchema:Z.inputSchema}))}class b2{toolsCacheTtlMs;clientFactory;servers=new Map;operationLocks=new Map;constructor($){this.clientFactory=$.clientFactory,this.toolsCacheTtlMs=$.toolsCacheTtlMs??5000}async registerServer($){await this.runExclusive($.name,async()=>{let Z=this.servers.get($.name);if(!Z){this.servers.set($.name,{registration:{...$},status:"disconnected",updatedAt:r0()});return}let Q=JSON.stringify(Z.registration.transport)!==JSON.stringify($.transport);if(Z.registration={...$},Z.updatedAt=r0(),Q)await this.disconnectState(Z),Z.client=void 0,Z.toolCache=void 0,Z.toolCacheUpdatedAt=void 0})}async unregisterServer($){await this.runExclusive($,async()=>{let Z=this.requireServer($);await this.disconnectState(Z),this.servers.delete($)})}async connectServer($){await this.runExclusive($,async()=>{let Z=this.requireServer($);await this.connectState(Z)})}async disconnectServer($){await this.runExclusive($,async()=>{let Z=this.requireServer($);await this.disconnectState(Z)})}async setServerDisabled($,Z){await this.runExclusive($,async()=>{let Q=this.requireServer($);if(Q.registration={...Q.registration,disabled:Z},Q.updatedAt=r0(),Z)await this.disconnectState(Q)})}listServers(){return[...this.servers.values()].map(($)=>({name:$.registration.name,status:$.status,disabled:$.registration.disabled===!0,lastError:$.lastError,toolCount:$.toolCache?.length??0,updatedAt:$.updatedAt,metadata:$.registration.metadata})).sort(($,Z)=>$.name.localeCompare(Z.name))}async listTools($){let Z=this.requireServer($),Q=Z.toolCacheUpdatedAt??0;if(Z.toolCache&&r0()-Q<=this.toolsCacheTtlMs)return Z.toolCache;return this.refreshTools($)}async refreshTools($){return this.runExclusive($,async()=>{let Z=this.requireServer($),W=await(await this.ensureConnectedClient(Z)).listTools(),J=gw(W);return Z.toolCache=J,Z.toolCacheUpdatedAt=r0(),Z.updatedAt=r0(),J})}async callTool($){return this.runExclusive($.serverName,async()=>{let Z=this.requireServer($.serverName),Q=await this.ensureConnectedClient(Z);return Z.updatedAt=r0(),Q.callTool({name:$.toolName,arguments:$.arguments,context:$.context})})}async dispose(){let $=[...this.servers.keys()];for(let Z of $)await this.unregisterServer(Z)}async ensureConnectedClient($){if(await this.connectState($),!$.client)throw Error(`MCP server "${$.registration.name}" does not have an initialized client.`);return $.client}async connectState($){if($.registration.disabled)throw Error(`MCP server "${$.registration.name}" is disabled and cannot be connected.`);if($.status==="connected"&&$.client)return;$.status="connecting",$.updatedAt=r0();try{let Z=$.client??await this.clientFactory($.registration);await Z.connect(),$.client=Z,$.status="connected",$.lastError=void 0,$.updatedAt=r0()}catch(Z){throw $.status="disconnected",$.lastError=Z instanceof Error?Z.message:String(Z),$.updatedAt=r0(),Z}}async disconnectState($){if(!$.client){$.status="disconnected",$.updatedAt=r0();return}try{await $.client.disconnect()}finally{$.status="disconnected",$.updatedAt=r0()}}requireServer($){let Z=this.servers.get($);if(!Z)throw Error(`Unknown MCP server: ${$}`);return Z}async runExclusive($,Z){let Q=this.operationLocks.get($)??Promise.resolve(),W,J=new Promise((Y)=>{W=Y}),X=Q.catch(()=>{return}).then(()=>J);this.operationLocks.set($,X),await Q.catch(()=>{return});try{return await Z()}finally{if(W?.(),this.operationLocks.get($)===X)this.operationLocks.delete($)}}}function Z4($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function $F($){return Z4($)&&Object.values($).every((Z)=>typeof Z==="string")}function mw($){return Array.isArray($)&&$.every((Z)=>typeof Z==="string")}function vw($){if(!Z4($))return!1;return($.fromEnv===void 0||typeof $.fromEnv==="string")&&($.value===void 0||typeof $.value==="string")&&($.required===void 0||typeof $.required==="boolean")}function cw($){let Z=$.env?Object.entries($.env):[];if(Z.length===0)return{ok:!0};let Q={};for(let[W,J]of Z){if(typeof J==="string"){Q[W]=J;continue}let X=J.fromEnv?.trim()||W,Y=process.env[X];if(typeof Y==="string"&&Y.length>0){Q[W]=Y;continue}if(typeof J.value==="string"){Q[W]=J.value;continue}if(J.required===!0)return{ok:!1,reason:`required environment variable "${X}" is not set`}}return{ok:!0,env:Object.keys(Q).length>0?Q:void 0}}function SJ($){if(!Z4($))return{name:"",loadError:"invalid MCP server registration"};let Z=typeof $.name==="string"?$.name.trim():"";if(!Z)return{name:Z,loadError:"empty MCP server name"};let Q=$.env,W=Q===void 0?void 0:Q;if(W!==void 0){if(!Z4(W))return{name:Z,loadError:"invalid env"};for(let[V,H]of Object.entries(W))if(typeof H!=="string"&&!vw(H))return{name:Z,loadError:`invalid env "${V}"`}}let J=$.transport;if(!Z4(J))return{name:Z,loadError:"invalid MCP transport"};let X=J.type;if(X!=="stdio"&&X!=="sse"&&X!=="streamableHttp")return{name:Z,loadError:"invalid MCP transport type"};if(X!=="stdio"&&W!==void 0)return{name:Z,loadError:"top-level env is only supported for stdio MCP transports"};let Y=Z4($.metadata)?$.metadata:void 0;if(X==="stdio"){let V=J.command;if(typeof V!=="string"||!V.trim())return{name:Z,loadError:"stdio MCP transport requires command"};let H=J.args;if(H!==void 0&&!mw(H))return{name:Z,loadError:"stdio MCP transport args must be strings"};let B=J.cwd;if(B!==void 0&&typeof B!=="string")return{name:Z,loadError:"stdio MCP transport cwd must be a string"};let G=J.env;if(G!==void 0&&!$F(G))return{name:Z,loadError:"stdio MCP transport env must be strings"};let K=cw({name:Z,transport:{type:"stdio",command:V,args:H,cwd:B,env:G},env:W,metadata:Y});if(!K.ok)return{name:Z,loadError:K.reason};let F=G||K.env?{...G??{},...K.env??{}}:void 0;return{name:Z,registration:{name:Z,transport:{type:"stdio",command:V,args:H,cwd:B,env:F},metadata:Y}}}if(typeof J.url!=="string"||!J.url.trim())return{name:Z,loadError:`${X} MCP transport requires url`};let j=J.headers;if(j!==void 0&&!$F(j))return{name:Z,loadError:`${X} MCP transport headers must be strings`};return{name:Z,registration:{name:Z,transport:X==="sse"?{type:"sse",url:J.url,headers:j}:{type:"streamableHttp",url:J.url,headers:j},metadata:Y}}}function hQ($){let Z=new Map;return $.map(({server:Q,owner:W,ownerLabel:J})=>{let X=SJ(Q);if(!X.registration)return{owner:W,name:X.name,loadError:X.loadError??"invalid MCP server registration"};let Y=Z.get(X.registration.name);if(Z.has(X.registration.name)){let j=Y?` already registered by ${Y}`:"";return{owner:W,name:X.registration.name,loadError:`duplicate MCP server name "${X.registration.name}"${j}`}}return Z.set(X.registration.name,J),{owner:W,name:X.registration.name,registration:X.registration}})}import{createHash as uw}from"node:crypto";var ZF=64,dw=/[^a-zA-Z0-9_-]+/g,QF=8,lw=1,pw="mcp_tool";function rw($){return uw("sha1").update($).digest("hex").slice(0,QF)}function iw($){return $.replace(dw,"_")}var kQ=({serverName:$,toolName:Z})=>{let Q=`${$}__${Z}`,W=iw(Q);if(W===Q&&Q.length<=ZF)return Q;let J=rw(Q),X=ZF-lw-QF;return`${W.slice(0,X)||pw}_${J}`};function M5($){return{[($.nameTransform??kQ)({serverName:$.serverName,toolName:$.toolName})]:{enabled:!1}}}function IQ($){let Z={};for(let Q of $.toolNames)Object.assign(Z,M5({serverName:$.serverName,toolName:Q,nameTransform:$.nameTransform}));return Z}import{createTool as nw}from"@cline/shared";function aw($,Z){let Q=Z.description?.trim();if(Q)return Q;return`Execute MCP tool "${Z.name}" from server "${$}".`}async function Q4($){let Z=await $.provider.listTools($.serverName),Q=$.nameTransform??kQ;return Z.map((W)=>{let J=Q({serverName:$.serverName,toolName:W.name});return nw({name:J,description:aw($.serverName,W),inputSchema:W.inputSchema,timeoutMs:$.timeoutMs,retryable:$.retryable,maxRetries:$.maxRetries,execute:async(X,Y)=>$.provider.callTool({serverName:$.serverName,toolName:W.name,arguments:X&&typeof X==="object"&&!Array.isArray(X)?X:void 0,context:Y})})})}$1();var YF={};N(YF,{listPluginToolsWithDiagnostics:()=>xQ,listPluginTools:()=>R5});import{stat as sw}from"node:fs/promises";import{isAbsolute as ow,relative as tw,resolve as JF}from"node:path";$1();function ew($,Z){let Q=tw(JF($),JF(Z));return Q===""||!Q.startsWith("..")&&!ow(Q)}var $C=32,W4=new Map;function ZC($,Z){if(!W4.has($)&&W4.size>=$C){let Q=W4.keys().next().value;if(Q)W4.delete(Q)}W4.set($,Z)}async function QC($){let Z=await Promise.all($.pluginPaths.map(async(Q)=>{try{let W=await sw(Q);return`${Q}:${W.mtimeMs}:${W.size}`}catch{return`${Q}:missing`}}));return JSON.stringify({workspacePath:$.workspacePath,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,pathStats:Z})}function XF($,Z){return $.map((Q)=>({...Q,enabled:!Z.has(Q.name)}))}function WC($){return $.sort((Z,Q)=>{let W=Z.name.localeCompare(Q.name);if(W!==0)return W;return Z.path.localeCompare(Q.path)})}async function JC($,Z){if(!$.setup)return{tools:[]};let Q=[],W={registerTool:(J)=>Q.push(J),registerCommand:()=>{},registerMessageBuilder:()=>{},registerRule:()=>{},registerProvider:()=>{},registerAutomationEventType:()=>{},registerMcpServer:(J)=>{if(!$.manifest.capabilities.includes("mcp"))throw Error('registerMcpServer requires the "mcp" capability')}};return await $.setup(W,{workspaceInfo:Z}),{tools:Q}}async function xQ($){let Z=i1({workspacePath:$.workspacePath,cwd:$.cwd}),Q=G1($.disabledToolNames);if(Z.length===0)return{tools:[],failures:[],warnings:[]};let W=await QC({pluginPaths:Z,workspacePath:$.workspacePath,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId}),J=W4.get(W);if(J)return{tools:XF(J.tools,Q),failures:J.failures,warnings:J.warnings};let X=[],Y=[],j=[],V;try{V=await x8({pluginPaths:Z,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,workspaceInfo:{rootPath:$.workspacePath}}),Y=[...V.failures],j=[...V.warnings];for(let B of V.extensions??[]){let G=B.__clinePluginPath;if(!G)continue;let K=ew($.workspacePath,G)?"workspace-plugin":"global-plugin",F;try{F=await JC(B,{rootPath:$.workspacePath})}catch(A){Y.push({pluginPath:G,pluginName:B.name,phase:"setup",message:A instanceof Error?A.message:String(A),stack:A instanceof Error?A.stack:void 0});continue}for(let A of F.tools)X.push({name:A.name,pluginName:B.name,path:G,source:K,description:A.description?.trim()||void 0})}}catch(B){Y=Z.map((G)=>({pluginPath:G,phase:"load",message:B instanceof Error?B.message:String(B),stack:B instanceof Error?B.stack:void 0}))}finally{await V?.shutdown().catch(()=>{})}let H=WC(X);return ZC(W,{tools:H,failures:Y,warnings:j}),{tools:XF(H,Q),failures:Y,warnings:j}}async function R5($){return(await xQ($)).tools}function w5($,Z){if(!Z)return"global";let Q=GF(Z,$);return!Q.startsWith("..")&&!BF(Q)?"workspace":"global"}function VC($,Z){return w5($,Z)==="workspace"?"workspace-plugin":"global-plugin"}function HC($,Z){let Q=GF(VF($),VF(Z));return Q===""||!Q.startsWith("..")&&!BF(Q)}function BC($){try{let Z=JSON.parse(XC($,"utf8"));return typeof Z.name==="string"&&Z.name.trim()?Z.name.trim():void 0}catch{return}}function GC($){let Z=jF($);while(!0){let Q=jC(Z,"package.json");if(N5(Q)){let J=BC(Q);if(J)return J;break}let W=jF(Z);if(W===Z)break;Z=W}return bJ($,YC($))}function KC($){let Z=[];for(let Q of i1({workspacePath:$.workspaceRoot||void 0,cwd:$.cwd}))for(let W of n1([Q]))Z.push({directory:W,pluginName:GC(Q),pluginPath:Q,source:$.workspaceRoot?VC(Q,$.workspaceRoot):"global-plugin"});return Z.sort((Q,W)=>W.directory.length-Q.directory.length)}function FC($,Z){return Z.find((Q)=>HC(Q.directory,$))}function E5($){return[...$].sort((Z,Q)=>{let W=(J)=>{switch(J){case"workspace":case"workspace-plugin":return 0;case"global":case"global-plugin":return 1;case"builtin":return 2}};if(Z.source!==Q.source)return W(Z.source)-W(Q.source);return Z.name.localeCompare(Q.name)})}function KF($){return $.workspaceRoot?.trim()||$.cwd?.trim()||""}function FF($,Z){return $.cwd?.trim()||Z||process.cwd()}async function HF($,Z){if($.userInstructionService)return await Z($.userInstructionService);let Q=KF($),W=FF($,Q),J=b$({skills:{workspacePath:Q||void 0,includePluginSkills:!0,cwd:W},rules:{workspacePath:Q||void 0},workflows:{workspacePath:Q||void 0}});try{return await J.start(),await Z(J)}finally{J.stop()}}function AC($,Z){if(!$)return;let Q=$.listRecords("skill");if(Z.id){let W=Q.find((J)=>J.id===Z.id);if(W)return W}for(let W of Q)if(W.filePath===Z.path||W.item.name===Z.name||W.id===Z.name)return W;return}class k${async list($={}){return await HF($,async(Z)=>{let Q=KF($),W=KC({workspaceRoot:Q,cwd:FF($,Q)}),J=[],X=[],Y=[],j=[],V=[];if(Z){for(let B of Z.listRecords("workflow")){let G=B.item;J.push({id:B.id,name:G.name,path:B.filePath,enabled:G.disabled!==!0,kind:"workflow",source:w5(B.filePath,Q),description:G.instructions,toggleable:!1})}for(let B of Z.listRecords("rule")){let G=B.item;X.push({id:B.id,name:G.name,path:B.filePath,enabled:G.disabled!==!0,kind:"rule",source:w5(B.filePath,Q),description:G.instructions,toggleable:!1})}for(let B of Z.listRecords("skill")){let G=B.item,K=FC(B.filePath,W);Y.push({id:B.id,name:G.name,path:B.filePath,enabled:G.disabled!==!0,kind:"skill",source:K?.source??w5(B.filePath,Q),description:G.description,pluginName:K?.pluginName,pluginPath:K?.pluginPath,toggleable:!0})}}if(Q)try{for(let B of await R5({workspacePath:Q,cwd:$.cwd,providerId:$.availabilityContext?.providerId,modelId:$.availabilityContext?.modelId}))j.push({id:`${B.pluginName}:${B.name}:${B.path}`,name:B.name,path:B.path,enabled:B.enabled,kind:"tool",source:B.source,description:B.description,toggleable:!0})}catch{}let H=Z0();if(s1({filePath:H}))try{for(let B of p0({filePath:H}))V.push({id:B.name,name:B.name,path:H,enabled:B.disabled!==!0,kind:"mcp",source:w5(H,Q),description:B.transport.type,toggleable:!0})}catch{}return{workflows:E5(J.filter((B)=>N5(B.path))),rules:E5(X.filter((B)=>N5(B.path))),skills:E5(Y.filter((B)=>N5(B.path))),tools:E5(j),mcp:E5(V.filter((B)=>N5(B.path)))}})}async toggle($){if($.type==="skills")return await HF($,async(Z)=>{let Q=AC(Z,$),W=Q?.filePath;if(!W)throw Error(`Unable to resolve skill setting '${$.id??$.name??bJ($.path??"")}'.`);let J=Q?.item&&"disabled"in Q.item?Q.item.disabled!==!0:void 0,X=$.enabled??(J!==void 0?!J:void 0);if(X===void 0)throw Error(`Cannot determine toggle state for skill '${$.id??$.name??bJ($.path??"")}'; provide an explicit enabled value or a resolvable workspace context.`);return await wK({filePath:W,enabled:X}),await Z?.refreshType("skill"),{snapshot:await this.list({...$,userInstructionService:Z}),changedTypes:["skills"]}});if($.type==="tools"){if(!$.name?.trim())throw Error("Tool settings toggle requires a tool name.");if($.enabled===void 0)m9($.name);else mj($.name,!$.enabled);return{snapshot:await this.list($),changedTypes:["tools"]}}if($.type==="mcp"){let Z=$.name?.trim()||$.id?.trim();if(!Z)throw Error("MCP server settings toggle requires a server name.");let Q=$.path?.trim()||Z0(),W=$.enabled;if(W===void 0){let J=p0({filePath:Q}).find((X)=>X.name===Z);if(!J)throw Error(`Unknown MCP server: ${Z}`);W=J.disabled===!0}return w2({filePath:Q,name:Z,disabled:!W}),{snapshot:await this.list($),changedTypes:["mcp"]}}throw Error(`Settings type '${$.type}' does not support toggles.`)}}function y2(){return new k$}function fF($){return{async list(Z){let Q=$;if(Q.listSettings)return await Q.listSettings(Z);return await y2().list(Z)},async toggle(Z){let Q=$;if(Q.toggleSetting)return await Q.toggleSetting(Z);return await y2().toggle(Z)}}}function UF($){function Z(){let Q=$.pendingPrompts;if(!Q)throw Error("Pending prompt service is not available.");return Q}return{list(Q){return Z().list(Q)},update(Q){return Z().update(Q)},delete(Q){return Z().delete(Q)}}}function DF($){let Z=$.config;return"providerId"in Z?{...$,config:{...Z,...fC($.localRuntime)},localRuntime:$.localRuntime}:$}function yJ($,Z={}){let Q=i4($.config),W=M0(Z.defaultCapabilities,$.capabilities),J=UC(Q.localRuntime,$.localRuntime),X=Z.withExtensionContext?.(J?.extensionContext);if(X)J={...J??{},extensionContext:X};return{...$,...Q,...J?{localRuntime:J}:{},...W?{capabilities:W}:{}}}function fC($){if(!$)return{};let{modelCatalogDefaults:Z,userInstructionService:Q,configExtensions:W,onTeamRestored:J,...X}=$;return X}function UC(...$){let Z={};for(let Q of $)if(Q)Object.assign(Z,Q);return Object.keys(Z).length>0?Z:void 0}_0();function LF($){let Z=$.input.config.telemetry??$.telemetry;if(!Z)return;Z.capture({event:m.SESSION.STARTED,properties:{sessionId:$.sessionId,source:$.input.source??T0.CORE,providerId:$.input.config.providerId,modelId:$.input.config.modelId,enableTools:$.input.config.enableTools,enableSpawnAgent:$.input.config.enableSpawnAgent,enableAgentTeams:$.input.config.enableAgentTeams,clientName:$.clientName,runtimeAddress:$.runtimeAddress}})}function C5($){return!!$&&typeof $==="object"&&!Array.isArray($)}function hJ($){let Z=$?.trim();return Z?Z:void 0}function DC($,Z){let Q=$?.trim();if(!Q)return Z;let W=Date.parse(Q);if(!Number.isFinite(W))return Z;return new Date(W).toISOString()}function _F($,Z){return new Date(new Date($).getTime()+Math.max(0,Math.floor(Z))*1000).toISOString()}function zF($,Z){return new Date(new Date($).getTime()-Math.max(0,Math.floor(Z))*1000).toISOString()}function LC($,Z){if(!$)return Z;return new Date($).getTime()>=new Date(Z).getTime()?$:Z}function _C($,Z){let Q=$.eventId.trim(),W=$.eventType.trim(),J=$.source.trim(),X=hJ($.subject),Y=hJ($.dedupeKey)??`${W}:${J}:${X??Q}`;return{eventId:Q,eventType:W,source:J,subject:X,occurredAt:DC($.occurredAt,Z),workspaceRoot:hJ($.workspaceRoot),payload:C5($.payload)?$.payload:void 0,attributes:C5($.attributes)?$.attributes:void 0,dedupeKey:Y}}function kJ($,Z){if(!Z)return;let Q=Z.split("."),W=$;for(let J of Q){if(!C5(W))return;W=W[J]}return W}function zC($,Z){if($.attributes&&Object.hasOwn($.attributes,Z))return $.attributes[Z];if($.payload&&Object.hasOwn($.payload,Z))return $.payload[Z];let Q={eventId:$.eventId,eventType:$.eventType,source:$.source,subject:$.subject,occurredAt:$.occurredAt,workspaceRoot:$.workspaceRoot,dedupeKey:$.dedupeKey,attributes:$.attributes,payload:$.payload},W=kJ(Q,Z);if(W!==void 0)return W;if($.attributes){let J=kJ($.attributes,Z);if(J!==void 0)return J}if($.payload)return kJ($.payload,Z);return}function gQ($,Z){if(Array.isArray(Z))return Z.some((Q)=>gQ($,Q));if(Array.isArray($))return $.some((Q)=>gQ(Q,Z));if(C5(Z)){if(!C5($))return!1;return Object.entries(Z).every(([Q,W])=>gQ($[Q],W))}return Object.is($,Z)}function TC($,Z){if(!Z||Object.keys(Z).length===0)return!0;return Object.entries(Z).every(([Q,W])=>gQ(zC($,Q),W))}class IJ{store;nowFn;logger;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now()),this.logger=$.logger}ingestEvent($){let Z=new Date(this.nowFn()).toISOString(),Q=_C($,Z),W=this.store.insertEventLog(Q,{receivedAtIso:Z});if(!W.created)return this.logger?.debug("cron.event.duplicate",{eventId:W.record.eventId,eventType:W.record.eventType,source:W.record.source}),{event:W.record,duplicate:!0,matchedSpecs:[],queuedRuns:[],suppressions:[{reason:"duplicate_event",dedupeKey:W.record.dedupeKey}]};try{let J=this.store.listEventSpecsForType(Q.eventType),X=[],Y=[],j=[];for(let B of J){if(!TC(Q,B.filters)){X.push({specId:B.specId,externalId:B.externalId,reason:"filter_mismatch",dedupeKey:Q.dedupeKey});continue}Y.push(B);let G=this.materializeForSpec(B,Q,W.record.receivedAt);if(G.run)j.push(G.run);else X.push({specId:B.specId,externalId:B.externalId,reason:G.reason,dedupeKey:Q.dedupeKey})}let V=Y.length===0?"unmatched":j.length>0?"queued":"suppressed";this.store.updateEventLogProcessing(W.record.eventId,{status:V,matchedSpecCount:Y.length,queuedRunCount:j.length,suppressedCount:X.filter((B)=>B.reason!=="filter_mismatch").length});let H=this.store.getEventLog(W.record.eventId);return this.logger?.debug("cron.event.processed",{eventId:W.record.eventId,eventType:W.record.eventType,status:V,matchedSpecCount:Y.length,queuedRunCount:j.length}),{event:H??W.record,duplicate:!1,matchedSpecs:Y,queuedRuns:j,suppressions:X}}catch(J){if(this.store.updateEventLogProcessing(W.record.eventId,{status:"failed",error:J instanceof Error?J.message:String(J)}),this.logger?.error)this.logger.error("cron.event.failed",{eventId:W.record.eventId,eventType:W.record.eventType,error:J});throw J}}materializeForSpec($,Z,Q){let W=Z.dedupeKey??Z.eventId,J=$.debounceSeconds??0;if(J>0){let V=this.store.findQueuedEventRunForDedupe({specId:$.specId,dedupeKey:W});if(V){let H=LC(V.scheduledFor,_F(Q,J)),B=this.store.updateQueuedEventRunForDebounce({runId:V.runId,triggerEventId:Z.eventId,scheduledFor:H});if(B)return{run:B,reason:"dedupe_window"}}}let X=$.dedupeWindowSeconds??0;if(X>0&&this.store.hasRecentEventRunForDedupe({specId:$.specId,dedupeKey:W,sinceIso:zF(Q,X)}))return{reason:"dedupe_window"};let Y=$.cooldownSeconds??0;if(Y>0&&this.store.hasRecentEventRunForSpec({specId:$.specId,sinceIso:zF(Q,Y)}))return{reason:"cooldown"};return{run:this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"event",triggerEventId:Z.eventId,scheduledFor:J>0?_F(Q,J):Q}),reason:"dedupe_window"}}}import{existsSync as xC,readdirSync as gC,readFileSync as mC,statSync as vC}from"node:fs";import{relative as cC}from"node:path";import{resolveCronSpecsDir as uC}from"@cline/shared/storage";import{createHash as OC}from"node:crypto";import qC from"yaml";function MC($){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 RC($){let Z=$.replace(/\r\n/g,`
|
|
496
496
|
`);if(!Z.startsWith(`---
|
|
497
497
|
`))return{frontmatter:void 0,body:$};let Q=Z.slice(4),W=Q.indexOf(`
|
|
498
498
|
---`);if(W===-1)return{frontmatter:void 0,body:$};let J=Q.slice(0,W),X=Q.slice(W+4);if(X.startsWith(`
|
|
499
|
-
`))X=X.slice(1);return{frontmatter:J,body:X}}function i0($){if(typeof $!=="string")return;let Z=$.trim();return Z.length>0?Z:void 0}function
|
|
500
|
-
`),Q.update(Z),Q.digest("hex")}function bC($){return($.split("/").pop()??$).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}var yC=["schedule","timezone"],hC=["event","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds","maxParallel"],kC=["cwd"];function TF($,Z,Q,W,J){return{externalId:$,relativePath:$,triggerKind:Z,body:Q,contentHash:qF(W,Q),error:J}}function f1($,Z,Q,W,J,X){return{externalId:$,relativePath:Z,triggerKind:Q,body:W,contentHash:J,error:X}}function MF($){let Z=$.relativePath.replace(/\\/g,"/"),Q=qC(Z),{frontmatter:W,body:J}=MC($.raw),X={};if(W!==void 0&&W.trim().length>0)try{let U=OC.parse(W);if(U&&typeof U==="object"&&!Array.isArray(U))X=U;else if(U!==null&&U!==void 0)return TF(Z,Q,J,{},"frontmatter must be a YAML mapping")}catch(U){return TF(Z,Q,J,{},U instanceof Error?`failed to parse frontmatter: ${U.message}`:"failed to parse frontmatter")}let Y=qF(X,J),j=i0(X.id),V=j??Z;if(Q!=="schedule"){for(let U of yC)if(X[U]!==void 0)return f1(V,Z,Q,J,Y,`field "${U}" is only allowed on *.cron.md specs`)}for(let U of kC)if(X[U]!==void 0)return f1(V,Z,Q,J,Y,`field "${U}" is no longer supported; cron specs use workspaceRoot as cwd`);if(Q!=="event"){for(let U of hC)if(X[U]!==void 0)return f1(V,Z,Q,J,Y,`field "${U}" is only allowed on .event.md specs`)}let H=i0(X.prompt),B=J.trim(),G=H??(B.length>0?B:void 0);if(!G)return f1(V,Z,Q,J,Y,"prompt is required (frontmatter `prompt` or markdown body)");let K=i0(X.workspaceRoot);if(!K)return f1(V,Z,Q,J,Y,"workspaceRoot is required");let F,A;try{F=CC(X.tools),A=SC(X.extensions)}catch(U){return f1(V,Z,Q,J,Y,U instanceof Error?U.message:String(U))}let L=NC(X.mode);if(X.mode!==void 0&&L===void 0)return f1(V,Z,Q,J,Y,"mode must be one of: act, plan, yolo");let f={id:j,title:i0(X.title)??j??bC(Z),prompt:G,workspaceRoot:K,mode:L??"yolo",systemPrompt:i0(X.systemPrompt),modelSelection:EC(X.modelSelection),maxIterations:xJ(X.maxIterations),timeoutSeconds:xJ(X.timeoutSeconds),tools:F,notesDirectory:i0(X.notesDirectory),extensions:A,source:i0(X.source)??"user",tags:RC(X.tags),enabled:typeof X.enabled==="boolean"?X.enabled:!0,metadata:mJ(X.metadata)},D;if(Q==="schedule"){let U=i0(X.schedule);if(!U)return f1(V,Z,Q,J,Y,"schedule is required for *.cron.md specs");let T=i0(X.timezone);try{Uj(U,T)}catch(z){return f1(V,Z,Q,J,Y,z instanceof Error?z.message:String(z))}D={...f,triggerKind:"schedule",schedule:U,timezone:T}}else if(Q==="event"){let U=i0(X.event);if(!U)return f1(V,Z,Q,J,Y,"event is required for .event.md specs");D={...f,triggerKind:"event",event:U,filters:mJ(X.filters),debounceSeconds:gJ(X.debounceSeconds),dedupeWindowSeconds:gJ(X.dedupeWindowSeconds),cooldownSeconds:gJ(X.cooldownSeconds),maxParallel:xJ(X.maxParallel)}}else D={...f,triggerKind:"one_off"};return{externalId:V,relativePath:Z,triggerKind:Q,body:J,contentHash:Y,spec:D}}function uC($,Z){return vC($,Z).replace(/\\/g,"/")}function dC($){if(!IC($))return[];let Z=[],Q=[$];while(Q.length>0){let W=Q.pop();if(!W)continue;let J;try{J=xC(W,{withFileTypes:!0})}catch{continue}for(let X of J){let Y=`${W}/${X.name}`;if(X.isDirectory()){if(X.name==="reports")continue;Q.push(Y);continue}if(!X.isFile())continue;if(!X.name.endsWith(".md"))continue;Z.push(Y)}}return Z}class cJ{store;cronDir;constructor($){this.store=$.store,this.cronDir=cC($.specs??($.workspaceRoot?{scope:"workspace",workspaceRoot:$.workspaceRoot}:void 0))}getCronDir(){return this.cronDir}async reconcileAll(){let $={scanned:0,upserted:0,invalidParses:0,removed:0,changes:[]},Z=dC(this.cronDir),Q=new Set;for(let J of Z){let X=uC(this.cronDir,J);Q.add(X),$.scanned+=1;let Y=await this.reconcileFile(X,J);if(Y){if($.changes.push(Y),$.upserted+=1,Y.parse.error)$.invalidParses+=1}}let W=this.store.listSpecs({includeRemoved:!1,limit:1e4});for(let J of W)if(!Q.has(J.sourcePath))this.handleFileDeleted(J),$.removed+=1;return this.refreshScheduleNextRunAt(),$}async reconcileFile($,Z){let Q=this.store.getSpecBySourcePath($),W,J;try{W=gC(Z,"utf8"),J=mC(Z).mtimeMs}catch{return}let Y=MF({relativePath:$,raw:W}),j=this.store.upsertSpec({externalId:Y.externalId,sourcePath:$,triggerKind:Y.triggerKind,sourceMtimeMs:J,sourceHash:Y.contentHash,parseStatus:Y.error?"invalid":"valid",parseError:Y.error,spec:Y.spec});if(!Y.error&&Y.triggerKind==="schedule"&&j.record.enabled)this.applyScheduleNextRunAt(j.record,{forceReset:!Q||Q.removed||!Q.enabled||Q.scheduleExpr!==j.record.scheduleExpr||Q.timezone!==j.record.timezone});return{relativePath:$,result:j,parse:Y}}handleFileDeleted($){this.store.markSpecRemoved($.specId),this.store.cancelQueuedRunsForSpec($.specId)}refreshScheduleNextRunAt(){let $=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let Z of $)this.applyScheduleNextRunAt(Z,{forceReset:!1})}applyScheduleNextRunAt($,Z){if(!$.scheduleExpr)return;if(!Z.forceReset&&$.nextRunAt)return;try{let Q=Date.now(),W=$.lastRunAt?Math.max(Q,new Date($.lastRunAt).getTime()):Q,J=i$($.scheduleExpr,W,$.timezone),X=new Date(J).toISOString();if($.nextRunAt!==X)this.store.updateSpecNextRunAt($.specId,X)}catch{}}}import{existsSync as lC,mkdirSync as pC,watch as rC}from"node:fs";import{relative as iC,resolve as nC}from"node:path";var aC=250;class uJ{reconciler;debounceMs;onError;onReconciled;watcher;pending=new Map;disposed=!1;constructor($){this.reconciler=$.reconciler,this.debounceMs=Math.max(0,$.debounceMs??aC),this.onError=$.onError??(()=>{}),this.onReconciled=$.onReconciled??(()=>{})}start(){if(this.disposed)throw Error("CronWatcher disposed");if(this.watcher)return;let $=this.reconciler.getCronDir();try{pC($,{recursive:!0}),this.watcher=rC($,{recursive:!0},(Z,Q)=>{if(!Q)return;let W=String(Q).replace(/\\/g,"/");if(!W.endsWith(".md"))return;if(W.startsWith("reports/"))return;this.scheduleReconcile(W)}),this.watcher.on("error",this.onError)}catch(Z){this.onError(Z)}}stop(){for(let $ of this.pending.values())clearTimeout($);this.pending.clear(),this.watcher?.close(),this.watcher=void 0}dispose(){this.disposed=!0,this.stop()}scheduleReconcile($){let Z=this.pending.get($);if(Z)clearTimeout(Z);let Q=setTimeout(()=>{this.pending.delete($),this.reconcileNow($)},this.debounceMs);this.pending.set($,Q)}async reconcileNow($){try{let Z=nC(this.reconciler.getCronDir(),$);if(!lC(Z)){await this.reconciler.reconcileAll(),await this.onReconciled();return}let Q=iC(this.reconciler.getCronDir(),Z).replace(/\\/g,"/");await this.reconciler.reconcileFile(Q,Z),await this.onReconciled()}catch(Z){this.onError(Z)}}}class P5{store;reconciler;watcher;eventIngress;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new x4({dbPath:$.dbPath});let Z=$.specs;this.reconciler=new cJ({store:this.store,specs:Z}),this.materializer=new P4({store:this.store}),this.eventIngress=new IJ({store:this.store,logger:$.logger}),this.runner=new y4({store:this.store,materializer:this.materializer,runtimeHandlers:$.runtimeHandlers,workspaceRoot:$.workspaceRoot,specs:Z,logger:$.logger,pollIntervalMs:$.pollIntervalMs,claimLeaseSeconds:$.claimLeaseSeconds,globalMaxConcurrency:$.globalMaxConcurrency}),this.watcher=new uJ({reconciler:this.reconciler,debounceMs:$.watcherDebounceMs,onReconciled:()=>{this.materializer.materializeAll()},onError:(Q)=>{let W=$.logger;if(W)if(W.error)W.error("cron.watcher.failed",{error:Q});else W.log("cron.watcher.failed",{error:Q})}})}async start(){if(this.disposed)throw Error("CronService disposed");if(this.started)return;this.started=!0,await this.reconciler.reconcileAll(),this.materializer.materializeAll(),this.watcher.start(),await this.runner.start()}async stop(){this.watcher.stop(),await this.runner.stop(),this.started=!1}async dispose(){if(this.disposed)return;this.disposed=!0,this.watcher.dispose(),await this.runner.dispose(),this.store.close()}listSpecs($){return this.store.listSpecs($)}getSpec($){return this.store.getSpec($)}listRuns($){return this.store.listRuns($)}getRun($){return this.store.getRun($)}listActiveRuns(){return this.store.listRuns({status:"running",limit:200})}listUpcomingRuns($=20){return this.store.listRuns({status:"queued",limit:$})}async reconcileNow(){await this.reconciler.reconcileAll(),this.materializer.materializeAll()}ingestEvent($){return this.eventIngress.ingestEvent($)}listEventLogs($){return this.store.listEventLogs($)}getEventLog($){return this.store.getEventLog($)}}var yF={};N(yF,{manifestToSessionRecord:()=>vQ,listSessionHistoryFromBackend:()=>rJ,listSessionHistory:()=>cQ,hydrateSessionHistory:()=>bF});import{readdir as eC,readFile as CF}from"node:fs/promises";import{join as PF}from"node:path";import{formatDisplayUserInput as $P,normalizeUserInput as ZP}from"@cline/shared";import{resolveSessionDataDir as SF}from"@cline/shared/storage";import{existsSync as sC}from"node:fs";import{readFile as oC}from"node:fs/promises";import{formatDisplayUserInput as RF}from"@cline/shared";class S5{listeners=new Set;subscribe($,Z){let Q={listener:$,sessionId:Z?.sessionId?.trim()||void 0};return this.listeners.add(Q),()=>{this.listeners.delete(Q)}}emit($){let Z=$.payload.sessionId?.trim();for(let Q of this.listeners){if(Q.sessionId&&Q.sessionId!==Z)continue;Q.listener($)}}get size(){return this.listeners.size}}async function I$($){let Z=$?.trim();if(!Z||!sC(Z))return[];try{let Q=(await oC(Z,"utf8")).trim();if(!Q)return[];let W=JSON.parse(Q);if(Array.isArray(W))return EF(W);if(W&&typeof W==="object"&&!Array.isArray(W)){let J=W.messages;if(Array.isArray(J))return EF(J)}return[]}catch{return[]}}function tC($){if($.role!=="user")return $;if(typeof $.content==="string")return{...$,content:RF($.content)};return{...$,content:$.content.map((Z)=>{if(Z.type!=="text"||typeof Z.text!=="string")return Z;return{...Z,text:RF(Z.text)}})}}function EF($){return $.map(tC)}function dJ($){return $?{...$}:void 0}async function NF($,Z){if(!($.hookName==="tool_call"||!!$.parent_agent_id))return;await Z.queueSpawnRequest($);let W=await Z.upsertSubagentSessionFromHook($);if(!W)return;await Z.appendSubagentHookAudit(W,$),await Z.applySubagentStatus(W,$)}function b5($){if(typeof $!=="string")return;let Z=$.trim();return Z.length>0?Z:void 0}function n0($){let Z=b5($);if(!Z)return;return Z.toLowerCase()==="unknown"?void 0:Z}function mQ($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function QP($){if(!$||typeof $!=="object"||Array.isArray($))return;return{...$}}function pJ($){let Z=$??200;return Number.isFinite(Z)?Math.max(0,Math.floor(Z)):200}function WP($){if($===0)return 0;return Math.min(Math.max($*2,20),2000)}function JP($){return $.isSubagent!==!0&&!b5($.parentSessionId)}function XP($){let Z=$.match(/\d{13,}/g);if(!Z||Z.length===0)return 0;let Q=0;for(let W of Z){let J=Number.parseInt(W,10);if(Number.isFinite(J)&&J>Q)Q=J}return Q}function vQ($){return{sessionId:$.session_id,source:$.source,pid:$.pid,startedAt:$.started_at,endedAt:$.ended_at??null,exitCode:$.exit_code??null,status:$.status,interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspaceRoot:$.workspace_root,teamName:$.team_name,enableTools:$.enable_tools,enableSpawn:$.enable_spawn,enableTeams:$.enable_teams,isSubagent:!1,prompt:$.prompt,metadata:$.metadata,messagesPath:$.messages_path,updatedAt:$.ended_at??$.started_at}}async function YP($){let Z=pJ($);if(Z===0)return[];let Q=SF(),J=(await eC(Q,{withFileTypes:!0}).catch(()=>[])).filter((Y)=>Y.isDirectory()).map((Y)=>({entry:Y,recency:XP(Y.name.trim())})).sort((Y,j)=>j.recency-Y.recency||j.entry.name.localeCompare(Y.entry.name));return(await Promise.all(J.map(async({entry:Y})=>{let j=Y.name.trim();if(!j)return;let V=PF(Q,j,`${j}.json`),H=await CF(V,"utf8").catch(()=>{return});if(!H)return;let B;try{B=JSON.parse(H)}catch{return}let G=b0.safeParse(B);if(!G.success)return;return vQ(G.data)}))).filter((Y)=>Boolean(Y)).sort((Y,j)=>j.startedAt.localeCompare(Y.startedAt)).slice(0,Z)}async function jP($,Z,Q){let W=pJ(Z);if(W===0)return await $.listSessions(0),[];let J=Q.includeSubagents?W:WP(W),X=await $.listSessions(J);return(Q.includeSubagents?X:X.filter(JP)).slice(0,W)}function VP($){if(typeof $==="string")return $.trim();let Z=[];for(let Q of $){if(!Q||typeof Q!=="object")continue;let W=Q;if(W.type!=="text")continue;let J=W.text?.trim();if(J)Z.push(J)}return Z.join(`
|
|
501
|
-
`).trim()}function wF($){return $.replace(/\s+/g," ").trim()}function
|
|
502
|
-
`)[0]??J);return HP(X,50)}return}function GP($){let Z=0;for(let Q of $)Z+=mQ(Q.metrics?.cost)??0;return Z}function KP($){let Z,Q;for(let W=$.length-1;W>=0;W-=1){let J=$[W];if(!Z)Z=n0(J.modelInfo?.provider);if(!Q)Q=n0(J.modelInfo?.id);if(Z&&Q)break}return{provider:Z,model:Q}}function FP($){return n0($?.provider)??n0($?.provider&&typeof $.provider==="object"&&!Array.isArray($.provider)?$.provider.id:void 0)}function AP($){return n0($?.model)??n0($?.model&&typeof $.model==="object"&&!Array.isArray($.model)?$.model.id:void 0)}function lJ($,Z){let Q=QP($.metadata),W=b5(Z?.title)??b5(Q?.title),J=mQ(Z?.totalCost)??mQ(Q?.totalCost),X=Q||W!==void 0||J!==void 0?{...Q??{},...W!==void 0?{title:W}:{},...J!==void 0?{totalCost:J}:{}}:void 0;return{...$,provider:n0(Z?.provider)??n0($.provider)??FP(Q)??"",model:n0(Z?.model)??n0($.model)??AP(Q)??"",metadata:X}}function fP($){let Z=$.content;if(!Array.isArray(Z))return!1;return Z.some((Q)=>!!Q&&typeof Q==="object"&&Q.type==="tool-call")}function UP($,Z){if($.status!=="running"||$.interactive!==!0)return!1;let Q=Z.at(-1);return Q?.role==="assistant"&&!fP(Q)}async function DP($,Z){return await Promise.all(Z.map(async(Q)=>{if(Q.status!=="running"||Q.interactive!==!0)return Q;let W=await $.readSessionMessages(Q.sessionId);return UP(Q,W)?{...Q,status:"idle"}:Q}))}async function bF($,Z){return await Promise.all(Z.map(async(Q)=>{let W=lJ(Q),J=Boolean(b5(W.metadata?.title)),X=Boolean(n0(W.provider)),Y=Boolean(n0(W.model)),j=mQ(W.metadata?.totalCost),V=j!==void 0&&j>0;if(J&&X&&Y&&V)return W;let H=await $.readSessionMessages(Q.sessionId);if(H.length===0)return W;let B=KP(H),G=GP(H);return lJ(Q,{title:J?void 0:BP(H),provider:X?void 0:B.provider,model:Y?void 0:B.model,totalCost:V||G<=0?void 0:G})}))}async function cQ($,Z={}){let Q=pJ(Z.limit),W=Z.includeSubagents===!0,J=await jP($,Q,{includeSubagents:W}),X=Z.includeManifestFallback===!0&&J.length<Q?await YP(Math.min(Math.max(Q*2,100),500)):[],Y=new Map;for(let H of[...J,...X]){if(Y.has(H.sessionId))continue;Y.set(H.sessionId,H)}let j=X.length===0?J:Array.from(Y.values()).sort((H,B)=>B.startedAt.localeCompare(H.startedAt)).slice(0,Q),V=await DP($,j);if(Z.hydrate===!1)return V.map((H)=>lJ(H));return await bF($,V)}async function LP($){let Z=$.trim();if(!Z)return;let Q=PF(SF(),Z,`${Z}.json`),W=await CF(Q,"utf8").catch(()=>{return});if(!W)return;try{let J=b0.safeParse(JSON.parse(W));return J.success?J.data.messages_path:void 0}catch{return}}async function rJ($,Z={}){let Q=new Map;return await cQ({listSessions:async(J)=>{let X=await $.listSessions(J);Q.clear();for(let Y of X)Q.set(Y.sessionId,Y);return X.map(v6)},readSessionMessages:async(J)=>{let X=Q.get(J)?.messagesPath??await LP(J);return await I$(X)}},Z)}var zA={};N(zA,{resolveSessionBackend:()=>KX,createRuntimeHost:()=>K4});import{captureSdkError as LA}from"@cline/shared";var rF={};N(rF,{HubRuntimeHost:()=>o1});import{captureSdkError as kF,createSessionId as IF,HUB_CHECKPOINT_CAPABILITY as OP,HUB_COMPACTION_CAPABILITY as qP,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as MP,HUB_HOOK_CAPABILITY_PREFIX as RP,HUB_MISTAKE_LIMIT_CAPABILITY as EP,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as NP,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as wP,isHubToolExecutorName as CP}from"@cline/shared";var hF={};N(hF,{createCoreSessionSnapshot:()=>U1,coreSessionSnapshotToRecord:()=>uQ});function _P($){return $?JSON.parse(JSON.stringify($)):void 0}function zP($){return $?JSON.parse(JSON.stringify($)):void 0}function TP($){let Z=$?.checkpoint&&typeof $.checkpoint==="object"&&!Array.isArray($.checkpoint)?$.checkpoint:void 0,W=(Array.isArray(Z?.history)?Z.history:[]).filter((Y)=>!!Y&&typeof Y==="object"&&!Array.isArray(Y)).flatMap((Y)=>{let j=typeof Y.ref==="string"?Y.ref.trim():"",V=Number(Y.createdAt),H=Number(Y.runCount);if(!j||!Number.isFinite(V)||!Number.isInteger(H))return[];return[{ref:j,createdAt:V,runCount:H,...Y.kind==="stash"||Y.kind==="commit"?{kind:Y.kind}:{}}]}),J=W.at(-1),X=$?.checkpointEnabled===!0?!0:void 0;if(!X&&W.length===0)return;return{...X?{enabled:X}:{},...J?{latest:J}:{},history:W}}function U1($){let{session:Z}=$,Q=_P(Z.metadata);return{version:1,sessionId:Z.sessionId,source:Z.source,status:Z.status,createdAt:Z.startedAt,updatedAt:Z.updatedAt,endedAt:Z.endedAt??null,exitCode:Z.exitCode??null,interactive:Z.interactive,workspace:{cwd:Z.cwd,root:Z.workspaceRoot},model:{providerId:Z.provider,modelId:Z.model},capabilities:{enableTools:Z.enableTools,enableSpawn:Z.enableSpawn,enableTeams:Z.enableTeams},lineage:{...Z.parentSessionId?{parentSessionId:Z.parentSessionId}:{},...Z.parentAgentId?{parentAgentId:Z.parentAgentId}:{},...Z.agentId?{agentId:Z.agentId}:{},...Z.conversationId?{conversationId:Z.conversationId}:{},isSubagent:Z.isSubagent},...Z.teamName?{team:{name:Z.teamName}}:{},...Z.prompt?{prompt:Z.prompt}:{},...Q?{metadata:Q}:{},...Z.messagesPath?{artifacts:{messagesPath:Z.messagesPath}}:{},...$.messages?{messages:zP($.messages)}:{},...$.usage?{usage:{...$.usage}}:{},...$.aggregateUsage?{aggregateUsage:{...$.aggregateUsage}}:{},...(()=>{let W=TP(Q);return W?{checkpoint:W}:{}})()}}function uQ($){return{sessionId:$.sessionId,parentSessionId:$.lineage.parentSessionId,agentId:$.lineage.agentId,parentAgentId:$.lineage.parentAgentId,conversationId:$.lineage.conversationId,isSubagent:$.lineage.isSubagent,source:$.source,startedAt:$.createdAt,endedAt:$.endedAt??void 0,exitCode:$.exitCode??void 0,status:$.status,interactive:$.interactive,provider:$.model.providerId,model:$.model.modelId,cwd:$.workspace.cwd,workspaceRoot:$.workspace.root,teamName:$.team?.name,enableTools:$.capabilities.enableTools,enableSpawn:$.capabilities.enableSpawn,enableTeams:$.capabilities.enableTeams,prompt:$.prompt,metadata:$.metadata,updatedAt:$.updatedAt,messagesPath:$.artifacts?.messagesPath}}function J4($){if(!$)return;return JSON.parse(JSON.stringify($))}var PP=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function xF($){if(!$||typeof $!=="object"||Array.isArray($))return;return JSON.parse(JSON.stringify($))}function gF($){if(!$)return;let{userInstructionService:Z,...Q}=$;return JSON.parse(JSON.stringify(Q))}function mF($){let Z=$&&typeof $==="object"&&!Array.isArray($)?$:{};return{agentId:typeof Z.agentId==="string"?Z.agentId:"",conversationId:typeof Z.conversationId==="string"?Z.conversationId:"",iteration:typeof Z.iteration==="number"?Z.iteration:0,metadata:Z.metadata&&typeof Z.metadata==="object"&&!Array.isArray(Z.metadata)?Z.metadata:void 0}}function h2($,Z,Q){$.manifest.push(Z),$.handlers.set(Z.capabilityName,Q)}function vF($,Z){let Q={manifest:[],handlers:new Map};for(let J of Object.keys(Z.toolExecutors??{}).filter(CP)){let X=Z.toolExecutors?.[J];if(typeof X!=="function")continue;h2(Q,{kind:"toolExecutor",executor:J,capabilityName:`${NP}${J}`},async({payload:Y,abortSignal:j})=>{let V=Array.isArray(Y.args)?[...Y.args]:[],H={...mF(Y.context),signal:j};return{result:await X(...V,H)}})}for(let J of $?.extraTools??[])h2(Q,{kind:"tool",name:J.name,description:J.description,inputSchema:J4(J.inputSchema)??{},...J.lifecycle?{lifecycle:J4(J.lifecycle)}:{},capabilityName:`${MP}${J.name}`},async({payload:X,abortSignal:Y,progress:j})=>{let V={...mF(X.context),signal:Y};return{result:await J.execute(X.input,{...V,emitUpdate:(B)=>{j({update:B})}})}});let W=$?.hooks;if(W)for(let J of PP){let X=W[J];if(typeof X!=="function")continue;h2(Q,{kind:"hook",name:J,capabilityName:`${RP}${J}`},async({payload:Y})=>({control:await X(Y.context)}))}if($?.compaction?.compact){let J=$.compaction.compact;h2(Q,{kind:"compaction",capabilityName:qP,config:xF($.compaction)},async({payload:X})=>({result:await J(X.context)}))}if($?.checkpoint?.createCheckpoint){let J=$.checkpoint.createCheckpoint;h2(Q,{kind:"checkpoint",capabilityName:OP,config:xF($.checkpoint)},async({payload:X})=>({result:await J(X.context)}))}if($?.onConsecutiveMistakeLimitReached){let J=$.onConsecutiveMistakeLimitReached;h2(Q,{kind:"mistakeLimit",capabilityName:EP},async({payload:X})=>({result:await J(X.context)}))}if($?.userInstructionService){let J=$.userInstructionService;h2(Q,{kind:"userInstructionService",capabilityName:wP},async()=>{return await J.start().catch(()=>{}),{snapshot:{records:{skill:J.listRecords("skill"),rule:J.listRecords("rule"),workflow:J.listRecords("workflow")},runtimeCommands:J.listRuntimeCommands()}}})}return Q}function lF($){if(typeof $==="string"&&$.trim())return $.trim();if($ instanceof Error)return $.message.trim()||void 0;if($&&typeof $==="object"&&"message"in $){let Z=$.message;if(typeof Z==="string"&&Z.trim())return Z.trim()}return}function SP($){return lF($)??"Capability request was cancelled."}function bP($){if(typeof $!=="string")return $;try{return JSON.parse($)}catch{return $}}function yP($){return $==="completed"||$==="max_iterations"||$==="aborted"||$==="mistake_limit"||$==="error"}function hP($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$,Q=typeof Z.inputTokens==="number"?Z.inputTokens:void 0,W=typeof Z.outputTokens==="number"?Z.outputTokens:void 0;if(Q===void 0||W===void 0)return;return{inputTokens:Q,outputTokens:W,cacheReadTokens:typeof Z.cacheReadTokens==="number"?Z.cacheReadTokens:0,cacheWriteTokens:typeof Z.cacheWriteTokens==="number"?Z.cacheWriteTokens:0,totalCost:typeof Z.totalCost==="number"?Z.totalCost:0}}function cF($){if(!$)return;return{inputTokens:typeof $.inputTokens==="number"?$.inputTokens:0,outputTokens:typeof $.outputTokens==="number"?$.outputTokens:0,cacheReadTokens:typeof $.cacheReadTokens==="number"?$.cacheReadTokens:0,cacheWriteTokens:typeof $.cacheWriteTokens==="number"?$.cacheWriteTokens:0,totalCost:typeof $.totalCost==="number"?$.totalCost:0}}function iJ($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function x$($,Z){return iJ($?.[Z])??0}function kP($){let Z=$?.delta&&typeof $.delta==="object"?$.delta:void 0,Q=$?.totals&&typeof $.totals==="object"?$.totals:void 0,W=$?.agent&&typeof $.agent==="object"?$.agent:void 0,J=W?.teamRole==="teammate"||W?.teamRole==="lead"?W.teamRole:void 0;return{event:{type:"usage",agentId:typeof W?.agentId==="string"?W.agentId:void 0,conversationId:typeof W?.conversationId==="string"?W.conversationId:void 0,parentAgentId:typeof W?.parentAgentId==="string"?W.parentAgentId:void 0,inputTokens:x$(Z,"inputTokens"),outputTokens:x$(Z,"outputTokens"),cacheReadTokens:x$(Z,"cacheReadTokens"),cacheWriteTokens:x$(Z,"cacheWriteTokens"),cost:iJ(Z?.totalCost),totalInputTokens:x$(Q,"inputTokens"),totalOutputTokens:x$(Q,"outputTokens"),totalCacheReadTokens:x$(Q,"cacheReadTokens"),totalCacheWriteTokens:x$(Q,"cacheWriteTokens"),totalCost:iJ(Q?.totalCost)},teamAgentId:typeof W?.teamAgentId==="string"?W.teamAgentId:void 0,teamRole:J}}function IP($){let Z=$?.result&&typeof $.result==="object"&&!Array.isArray($.result)?$.result:void 0,Q=$?.reason??Z?.finishReason,W=yP(Q)?Q:Q==="failed"?"error":"completed",J=hP($?.usage??Z?.usage);return{type:"done",reason:W,text:typeof $?.text==="string"?$.text:typeof Z?.text==="string"?Z.text:"",iterations:typeof $?.iterations==="number"?$.iterations:typeof Z?.iterations==="number"?Z.iterations:0,usage:J}}function dQ($,Z){return $.error?.message??`hub command failed: ${Z}`}function y5($){switch($){case"idle":case"completed":return"completed";case"failed":return"failed";case"aborted":return"cancelled";default:return"running"}}function pF($){let Z=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):void 0;return{sessionId:$.sessionId,parentSessionId:typeof Z?.parentSessionId==="string"?Z.parentSessionId:void 0,agentId:$.runtimeSession?.agentId||(typeof Z?.agentId==="string"?Z.agentId:void 0),parentAgentId:typeof Z?.parentAgentId==="string"?Z.parentAgentId:void 0,conversationId:typeof Z?.conversationId==="string"?Z.conversationId:void 0,isSubagent:typeof Z?.isSubagent==="boolean"?Z.isSubagent:!1,source:typeof Z?.source==="string"?Z.source:T0.CORE,pid:typeof Z?.pid==="number"?Z.pid:void 0,startedAt:new Date($.createdAt).toISOString(),endedAt:y5($.status)==="running"?void 0:new Date($.updatedAt).toISOString(),exitCode:y5($.status)==="completed"?0:y5($.status)==="failed"?1:void 0,status:y5($.status),interactive:Z?.interactive===!0,provider:typeof Z?.provider==="string"?Z.provider:"hub",model:typeof Z?.model==="string"?Z.model:"hub",cwd:$.cwd?.trim()||$.workspaceRoot,workspaceRoot:$.workspaceRoot,teamName:typeof Z?.teamName==="string"?Z.teamName:void 0,enableTools:$.runtimeOptions?.enableTools??Z?.enableTools===!0,enableSpawn:$.runtimeOptions?.enableSpawn??Z?.enableSpawn===!0,enableTeams:$.runtimeOptions?.enableTeams??Z?.enableTeams===!0,prompt:typeof Z?.prompt==="string"?Z.prompt:void 0,metadata:Z,updatedAt:new Date($.updatedAt).toISOString(),messagesPath:typeof Z?.messagesPath==="string"?Z.messagesPath:void 0,hookPath:typeof Z?.hookPath==="string"?Z.hookPath:void 0}}function g$($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$;return Z.version===1&&typeof Z.sessionId==="string"?JSON.parse(JSON.stringify(Z)):void 0}function xP($){let Z=g$($?.snapshot);if(Z)return uQ(Z);let Q=$?.session;return Q?pF(Q):void 0}function uF($,Z,Q){let W=Q?.workspaceRoot?.trim()||Z.config.workspaceRoot||Z.config.cwd;return b0.parse({version:1,session_id:$,source:Z.source??T0.CORE,pid:process.pid,started_at:new Date(Q?.createdAt??Date.now()).toISOString(),status:y5(Q?.status),interactive:Z.interactive===!0,provider:Z.config.providerId,model:Z.config.modelId,cwd:Q?.cwd?.trim()||Z.config.cwd,workspace_root:W,team_name:Z.config.teamName,enable_tools:Z.config.enableTools,enable_spawn:Z.config.enableSpawnAgent,enable_teams:Z.config.enableAgentTeams,prompt:Z.prompt?.trim()||void 0,metadata:Z.sessionMetadata&&Object.keys(Z.sessionMetadata).length>0?Z.sessionMetadata:void 0})}function dF($,Z){return b0.parse({version:1,session_id:$.sessionId,source:$.source,pid:process.pid,started_at:$.createdAt,status:$.status,interactive:$.interactive,provider:$.model.providerId,model:$.model.modelId,cwd:$.workspace.cwd,workspace_root:$.workspace.root,team_name:$.team?.name,enable_tools:$.capabilities.enableTools,enable_spawn:$.capabilities.enableSpawn,enable_teams:$.capabilities.enableTeams,prompt:($.prompt??Z.prompt?.trim())||void 0,metadata:$.metadata,messages_path:$.artifacts?.messagesPath})}class o1{runtimeAddress;pendingPrompts;client;clientOptions;clientContext;events=new S5;sessionCapabilities=new Map;sessionClientContributionHandlers=new Map;sessionSubscriptions=new Map;pendingApprovalToolCallIds=new Set;agentDoneEmittedForCurrentRunBySession=new Set;activeCapabilityAbortControllers=new Map;defaultCapabilities;telemetry;constructor($,Z){this.clientContext=Z,this.clientOptions={authToken:$.authToken,clientType:$.clientType??"core-hub-runtime",displayName:$.displayName??"core hub runtime",workspaceRoot:Z?.workspaceRoot,cwd:Z?.cwd},this.defaultCapabilities=M0($.capabilities)??{},this.telemetry=$.telemetry,this.runtimeAddress=$.url,this.pendingPrompts={list:(Q)=>this.requestPendingPromptsList(Q),update:(Q)=>this.requestPendingPromptUpdate(Q),delete:(Q)=>this.requestPendingPromptDelete(Q)},this.client=this.createClient($.url)}createClient($){return new W1({...this.clientOptions,url:$})}async replaceClient($){let Z=this.client;this.client=this.createClient($),this.runtimeAddress=$,await Promise.resolve(Z.dispose()).catch(()=>{return})}async recoverLocalHubStartupDeadlock($){if(!o9($,"session.create"))return!1;let Z=await t9({url:this.client.getUrl(),workspaceRoot:this.clientContext?.workspaceRoot,cwd:this.clientContext?.cwd}).catch(()=>{return});if(!Z)return!1;return await this.replaceClient(Z),!0}registerPlannedSession($,Z,Q){if(this.sessionCapabilities.set($,Z),Q.size>0)this.sessionClientContributionHandlers.set($,Q);this.ensureSessionSubscription($)}cleanupPlannedSession($){this.sessionCapabilities.delete($),this.sessionClientContributionHandlers.delete($),this.disposeSessionSubscription($)}async connect(){await this.client.connect()}async startSession($){let Z=this.resolveCapabilities($),Q=vF($.localRuntime,Z),W=$.config.sessionId?.trim()||IF(),J=()=>this.client.command("session.create",{workspaceRoot:$.config.workspaceRoot?.trim()||$.config.cwd,cwd:$.config.cwd,sessionConfig:J4({...$.config,sessionId:W}),metadata:{...$.sessionMetadata??{},source:$.source??T0.CORE,provider:$.config.providerId,model:$.config.modelId,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,teamName:$.config.teamName,prompt:$.prompt,interactive:$.interactive===!0},runtimeOptions:{...Q.manifest.length>0?{clientContributions:Q.manifest}:{},...$.localRuntime?.configExtensions?{configExtensions:$.localRuntime.configExtensions}:{}},toolPolicies:J4($.toolPolicies),initialMessages:$.initialMessages});this.registerPlannedSession(W,Z,Q.handlers);let X;try{X=await J()}catch(H){if(this.cleanupPlannedSession(W),await this.recoverLocalHubStartupDeadlock(H)){this.registerPlannedSession(W,Z,Q.handlers);try{X=await J()}catch(B){throw this.cleanupPlannedSession(W),B}}else throw H}let Y=g$(X.payload?.snapshot),j=X.payload?.session,V=(Y?.sessionId??j?.sessionId)?.trim();if(!V)throw this.cleanupPlannedSession(W),Error("Hub runtime did not return a session id.");if(V!==W)this.cleanupPlannedSession(W),this.registerPlannedSession(V,Z,Q.handlers);return{sessionId:V,manifest:Y?dF(Y,$):uF(V,$,j),manifestPath:"",messagesPath:"",result:void 0}}async restoreSession($){let Z=$.sessionId.trim();if(!Z)throw Error("sessionId is required");let Q=$.restore?.messages!==!1;if(Q&&!$.start)throw Error("start is required when restore.messages is true");let W=$.start,J=W?this.resolveCapabilities(W):void 0,X=W?vF(W.localRuntime,J??{}):{manifest:[],handlers:new Map},Y=W?W.config.sessionId?.trim()||IF():void 0;if(Y&&J)this.sessionCapabilities.set(Y,J);if(Y&&X.handlers.size>0)this.sessionClientContributionHandlers.set(Y,X.handlers),this.ensureSessionSubscription(Y);let j;try{j=await this.client.command("session.restore",{sessionId:Z,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...W?{workspaceRoot:W.config.workspaceRoot?.trim()||W.config.cwd,cwd:W.config.cwd??$.cwd,sessionConfig:J4({...W.config,sessionId:Y}),metadata:{...W.sessionMetadata??{},source:W.source??T0.CORE,provider:W.config.providerId,model:W.config.modelId,enableTools:W.config.enableTools,enableSpawn:W.config.enableSpawnAgent,enableTeams:W.config.enableAgentTeams,teamName:W.config.teamName,prompt:W.prompt,interactive:W.interactive===!0},runtimeOptions:{...X.manifest.length>0?{clientContributions:X.manifest}:{},...W.localRuntime?.configExtensions?{configExtensions:W.localRuntime.configExtensions}:{}},toolPolicies:J4(W.toolPolicies)}:{}},Z)}catch(F){if(Y)this.sessionCapabilities.delete(Y),this.sessionClientContributionHandlers.delete(Y),this.disposeSessionSubscription(Y);throw F}if(!j.ok){let F=typeof j.payload?.error==="string"?j.payload.error:"session.restore failed";if(Y)this.sessionCapabilities.delete(Y),this.sessionClientContributionHandlers.delete(Y),this.disposeSessionSubscription(Y);throw Error(F)}let V=g$(j.payload?.snapshot),H=j.payload?.session,B=(V?.sessionId??H?.sessionId)?.trim();if(Q&&!B){if(Y)this.sessionCapabilities.delete(Y),this.sessionClientContributionHandlers.delete(Y),this.disposeSessionSubscription(Y);throw Error("Hub checkpoint restore returned no session id")}if(B&&Y&&B!==Y)this.sessionCapabilities.delete(Y),this.sessionClientContributionHandlers.delete(Y),this.disposeSessionSubscription(Y);if(B&&J)this.sessionCapabilities.set(B,J);if(B&&X.handlers.size>0)this.sessionClientContributionHandlers.set(B,X.handlers);if(B)this.ensureSessionSubscription(B);let G=Array.isArray(j.payload?.messages)?j.payload.messages:void 0,K=j.payload?.checkpoint;if(!K)throw Error("Hub checkpoint restore returned no checkpoint");return{sessionId:B,startResult:B?{sessionId:B,manifest:V?dF(V,W??{}):uF(B,W??{},H),manifestPath:"",messagesPath:"",result:void 0}:void 0,messages:G,checkpoint:K}}async runTurn($){return this.ensureSessionSubscription($.sessionId),(await this.client.command("run.start",{sessionId:$.sessionId,input:$.prompt,mode:$.mode,attachments:($.userImages?.length??0)>0||($.userFiles?.length??0)>0?{...$.userImages?.length?{userImages:$.userImages}:{},...$.userFiles?.length?{userFiles:$.userFiles}:{}}:void 0,delivery:$.delivery,timeoutMs:$.timeoutMs},$.sessionId,{timeoutMs:null})).payload?.result}async requestPendingPromptsList($){this.ensureSessionSubscription($.sessionId);let Z=await this.client.command("session.pending_prompts",{sessionId:$.sessionId},$.sessionId);return Array.isArray(Z.payload?.prompts)?Z.payload.prompts:[]}async requestPendingPromptUpdate($){this.ensureSessionSubscription($.sessionId);let Z=await this.client.command("session.update_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(Z.payload?.prompts)?Z.payload.prompts:[],prompt:Z.payload?.prompt,updated:Z.payload?.updated===!0}}async requestPendingPromptDelete($){this.ensureSessionSubscription($.sessionId);let Z=await this.client.command("session.remove_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(Z.payload?.prompts)?Z.payload.prompts:[],prompt:Z.payload?.prompt,removed:Z.payload?.removed===!0}}async getAccumulatedUsage($){let Z=await this.client.command("session.get",{includeSnapshot:!0},$),Q=g$(Z.payload?.snapshot);if(Q){let Y=Q.usage?{...Q.usage}:void 0,j=Q.aggregateUsage?{...Q.aggregateUsage}:void 0;return Y||j?{usage:Y,aggregateUsage:j}:void 0}let W=Z.payload?.session,J=cF(W?.usage),X=cF(W?.aggregateUsage);return J||X?{usage:J,aggregateUsage:X}:void 0}async abort($,Z){await this.client.command("run.abort",{sessionId:$,reason:lF(Z)},$)}async stopSession($){this.sessionCapabilities.delete($),this.disposeSessionSubscription($),await this.client.command("session.detach",{sessionId:$},$)}async dispose(){for(let[$,Z]of this.sessionSubscriptions){Z();try{await this.client.command("session.detach",{sessionId:$},$)}catch{}}this.sessionSubscriptions.clear(),this.sessionCapabilities.clear(),this.agentDoneEmittedForCurrentRunBySession.clear();for(let $ of this.activeCapabilityAbortControllers.values())$.abort("Hub runtime host disposed.");this.activeCapabilityAbortControllers.clear(),await this.client.dispose()}async getSession($){let Z;try{Z=await this.client.command("session.get",void 0,$)}catch(Q){if(I1(Q))return;throw Q}return xP(Z.payload)}async listSessions($=100){let Z=await this.client.command("session.list",{limit:$}),Q=Array.isArray(Z.payload?.snapshots)?Z.payload.snapshots.flatMap((J)=>{let X=g$(J);return X?[uQ(X)]:[]}):[];if(Q.length>0)return Q;return(Z.payload?.sessions??[]).map(pF)}async listSettings($){let Z=await this.client.command("settings.list",gF($));if(!Z.ok)throw Error(dQ(Z,"settings.list"));return Z.payload?.snapshot}async toggleSetting($){let Z=await this.client.command("settings.toggle",gF($));if(!Z.ok)throw Error(dQ(Z,"settings.toggle"));return{snapshot:Z.payload?.snapshot,changedTypes:Array.isArray(Z.payload?.changedTypes)?Z.payload.changedTypes:[]}}async deleteSession($){return this.sessionCapabilities.delete($),this.disposeSessionSubscription($),(await this.client.command("session.delete",{sessionId:$})).payload?.deleted===!0}async updateSession($,Z){let Q={...Z.metadata??{}};if(typeof Z.prompt==="string")Q.prompt=Z.prompt;if(typeof Z.title==="string")Q.title=Z.title;return{updated:(await this.client.command("session.update",{sessionId:$,metadata:Q})).ok}}async readSessionMessages($){let Z=$.trim();if(!Z)return[];let Q=await this.client.command("session.messages",{sessionId:Z},Z);if(!Q.ok)throw kF(this.telemetry,{component:"core",operation:"hub.runtime_host.read_session_messages",error:Error(dQ(Q,"session.messages")),severity:Q.error?.code==="session_not_found"?"warn":"error",handled:!0,context:{command:"session.messages",sessionId:Z,errorCode:Q.error?.code,runtimeAddress:this.runtimeAddress}}),Error(dQ(Q,"session.messages"));let W=Q.payload?.messages;return Array.isArray(W)?W:[]}async dispatchHookEvent($){await this.client.command("session.hook",{payload:$})}subscribe($,Z){return this.events.subscribe($,Z)}ensureSessionSubscription($){let Z=$.trim();if(!Z||this.sessionSubscriptions.has(Z))return;let Q=this.client.subscribe((W)=>{this.handleHubEvent(W)},{sessionId:Z});this.sessionSubscriptions.set(Z,typeof Q==="function"?Q:()=>{})}disposeSessionSubscription($){let Z=$.trim();if(!Z)return;this.sessionSubscriptions.get(Z)?.(),this.sessionSubscriptions.delete(Z),this.agentDoneEmittedForCurrentRunBySession.delete(Z)}resolveCapabilities($){return M0(this.defaultCapabilities,$.capabilities)??{}}emitToolCallContentStart($){this.events.emit({type:"agent_event",payload:{sessionId:$.sessionId,event:{type:"content_start",contentType:"tool",toolCallId:$.toolCallId,toolName:$.toolName,input:$.toolInput}}})}emitAgentDoneIfNeeded($){if(this.agentDoneEmittedForCurrentRunBySession.has($.sessionId))return;this.agentDoneEmittedForCurrentRunBySession.add($.sessionId),this.events.emit({type:"agent_event",payload:{sessionId:$.sessionId,event:IP($.payload)}})}handleHubEvent($){let Z=$.sessionId?.trim();if($.event==="capability.requested"){this.handleCapabilityRequest($).catch((Q)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_request",Q,$)});return}if($.event==="capability.resolved"){this.handleCapabilityResolved($);return}if($.event==="approval.requested"){this.handleApprovalRequested($).catch((Q)=>{this.captureDetachedHubEventError("hub.runtime_host.approval_request",Q,$)});return}if(!Z)return;switch($.event){case"run.started":{this.agentDoneEmittedForCurrentRunBySession.delete(Z);let Q=g$($.payload?.snapshot),W=$.payload?.session;if(Q)this.events.emit({type:"session_snapshot",payload:{sessionId:Z,snapshot:Q}});this.events.emit({type:"status",payload:{sessionId:Z,status:W?.status??"running"}});return}case"iteration.started":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"iteration_start",iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0}}});return}case"iteration.finished":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"iteration_end",iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0,hadToolCalls:$.payload?.hadToolCalls===!0,toolCallCount:typeof $.payload?.toolCallCount==="number"?$.payload.toolCallCount:0}}});return}case"assistant.delta":{let Q=typeof $.payload?.text==="string"?$.payload.text:"";if(!Q)return;this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_start",contentType:"text",text:Q}}});return}case"assistant.finished":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_end",contentType:"text",text:typeof $.payload?.text==="string"?$.payload.text:void 0}}});return}case"reasoning.delta":{let Q=typeof $.payload?.text==="string"?$.payload.text:"",W=$.payload?.redacted===!0;if(!Q&&!W)return;this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_start",contentType:"reasoning",reasoning:Q,redacted:W}}});return}case"reasoning.finished":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_end",contentType:"reasoning",reasoning:typeof $.payload?.reasoning==="string"?$.payload.reasoning:void 0}}});return}case"agent.done":{this.emitAgentDoneIfNeeded({sessionId:Z,payload:$.payload});return}case"usage.updated":{let Q=kP($.payload);this.events.emit({type:"agent_event",payload:{sessionId:Z,event:Q.event,teamAgentId:Q.teamAgentId,teamRole:Q.teamRole}});return}case"tool.started":{let Q=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(Q&&this.pendingApprovalToolCallIds.delete(Q))return;this.emitToolCallContentStart({sessionId:Z,toolCallId:Q,toolName:typeof $.payload?.toolName==="string"?$.payload.toolName:void 0,toolInput:$.payload?.input});return}case"tool.finished":{let Q=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(Q)this.pendingApprovalToolCallIds.delete(Q);this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_end",contentType:"tool",toolCallId:Q,toolName:typeof $.payload?.toolName==="string"?$.payload.toolName:void 0,output:$.payload?.output,error:typeof $.payload?.error==="string"?$.payload.error:void 0}}});return}case"session.created":case"session.updated":case"session.attached":case"session.detached":{let Q=g$($.payload?.snapshot),W=$.payload?.session;if(Q)this.events.emit({type:"session_snapshot",payload:{sessionId:Z,snapshot:Q}});this.events.emit({type:"status",payload:{sessionId:Z,status:W?.status??"running"}});return}case"session.pending_prompts":{this.events.emit({type:"pending_prompts",payload:{sessionId:Z,prompts:Array.isArray($.payload?.prompts)?$.payload.prompts:[]}});return}case"session.pending_prompt_submitted":{let Q=$.payload?.prompt;if(!Q)return;this.events.emit({type:"pending_prompt_submitted",payload:{sessionId:Z,id:Q.id,prompt:Q.prompt,delivery:Q.delivery,attachmentCount:Q.attachmentCount,userImages:Q.userImages,userFiles:Q.userFiles}});return}case"run.completed":case"run.failed":case"run.aborted":{let Q=g$($.payload?.snapshot),W=typeof $.payload?.reason==="string"?$.payload.reason:$.event==="run.aborted"?"aborted":$.event==="run.failed"?"error":"completed";if(this.emitAgentDoneIfNeeded({sessionId:Z,payload:{...$.payload,reason:W}}),Q?.interactive===!0&&H0(Q.status))return;this.events.emit({type:"ended",payload:{sessionId:Z,reason:W,ts:$.timestamp??Date.now()}});return}default:return}}captureDetachedHubEventError($,Z,Q){try{kF(this.telemetry,{component:"core",operation:$,error:Z,severity:"warn",handled:!0,context:{event:Q.event,sessionId:Q.sessionId,runtimeAddress:this.runtimeAddress}})}catch{}}async handleCapabilityRequest($){let Z=$.sessionId?.trim();if(!Z)return;let Q=typeof $.payload?.targetClientId==="string"?$.payload.targetClientId:void 0;if(Q&&Q!==this.client.getClientId())return;let W=typeof $.payload?.requestId==="string"?$.payload.requestId:"",J=typeof $.payload?.capabilityName==="string"?$.payload.capabilityName:"";if(!W)return;let X=this.sessionClientContributionHandlers.get(Z)?.get(J);if(!X){await this.client.command("capability.respond",{requestId:W,ok:!1,error:`No client contribution handler registered for capability ${J} in session ${Z}.`},Z).catch(()=>{});return}let Y=$.payload?.payload&&typeof $.payload.payload==="object"&&!Array.isArray($.payload.payload)?$.payload.payload:{},j=new AbortController;this.activeCapabilityAbortControllers.set(W,j);let V=(H)=>{this.client.command("capability.progress",{requestId:W,payload:H},Z).catch((B)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_progress",B,$)})};try{let H=await X({payload:Y,abortSignal:j.signal,progress:V});if(j.signal.aborted)return;await this.client.command("capability.respond",{requestId:W,ok:!0,payload:H},Z)}catch(H){if(j.signal.aborted)return;await this.client.command("capability.respond",{requestId:W,ok:!1,error:H instanceof Error?H.message:String(H)},Z)}finally{this.activeCapabilityAbortControllers.delete(W)}}handleCapabilityResolved($){if($.payload?.cancelled!==!0)return;let Z=typeof $.payload.requestId==="string"?$.payload.requestId.trim():"";if(!Z)return;let Q=this.activeCapabilityAbortControllers.get(Z);if(!Q)return;Q.abort(SP($.payload.error))}async handleApprovalRequested($){let Z=$.sessionId?.trim();if(!Z)return;let Q=this.sessionCapabilities.get(Z)?.requestToolApproval??this.defaultCapabilities.requestToolApproval;if(!Q)return;let W=typeof $.payload?.approvalId==="string"?$.payload.approvalId.trim():"",J=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:"",X=typeof $.payload?.toolName==="string"?$.payload.toolName:"";if(!W||!J||!X)return;let Y=$.payload?.policy&&typeof $.payload.policy==="object"&&!Array.isArray($.payload.policy)?$.payload.policy:{autoApprove:!1},j=bP($.payload?.inputJson);this.pendingApprovalToolCallIds.add(J),this.emitToolCallContentStart({sessionId:Z,toolCallId:J,toolName:X,toolInput:j});let V=await Promise.resolve(Q({sessionId:Z,agentId:typeof $.payload?.agentId==="string"?$.payload.agentId:"",conversationId:typeof $.payload?.conversationId==="string"?$.payload.conversationId:Z,iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0,toolCallId:J,toolName:X,input:j,policy:Y})).catch((H)=>({approved:!1,reason:H instanceof Error?H.message:`Tool approval request failed: ${String(H)}`}));await this.client.command("approval.respond",{approvalId:W,approved:V.approved,reason:V.reason},Z).catch(()=>{})}}var iF={};N(iF,{RemoteRuntimeHost:()=>X4});class X4 extends o1{constructor($){super({url:G$($.endpoint),authToken:$.authToken,clientType:$.clientType??"core-remote-runtime",displayName:$.displayName??"core remote runtime",capabilities:$.capabilities},{workspaceRoot:$.workspaceRoot,cwd:$.cwd})}}var nF={};N(nF,{SqliteSessionStore:()=>L1});import{existsSync as gP,mkdirSync as mP}from"node:fs";import{join as vP}from"node:path";import{asBool as h5,asOptionalString as D1,asString as t1,ensureSessionSchema as cP,loadSqliteDb as uP,nowIso as lQ,toBoolInt as k5}from"@cline/shared/db";import{resolveDbDataDir as dP}from"@cline/shared/storage";class L1{sessionsDirPath;db;constructor($={}){this.sessionsDirPath=$.sessionsDir??dP()}init(){this.getRawDb()}ensureSessionsDir(){if(!gP(this.sessionsDirPath))mP(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}sessionDbPath(){return vP(this.ensureSessionsDir(),"sessions.db")}getRawDb(){if(this.db)return this.db;let $=uP(this.sessionDbPath());return cP($,{includeLegacyMigrations:!0}),this.db=$,$}close(){this.db?.close?.(),this.db=void 0}run($,Z=[]){return this.getRawDb().prepare($).run(...Z)}queryOne($,Z=[]){return this.getRawDb().prepare($).get(...Z)??void 0}queryAll($,Z=[]){return this.getRawDb().prepare($).all(...Z)}create($){let Z=lQ();this.run(`INSERT OR REPLACE INTO sessions (
|
|
499
|
+
`))X=X.slice(1);return{frontmatter:J,body:X}}function i0($){if(typeof $!=="string")return;let Z=$.trim();return Z.length>0?Z:void 0}function EC($){if(!Array.isArray($))return;let Z=$.map((Q)=>typeof Q==="string"?Q.trim():"").filter((Q)=>Q.length>0);return Z.length>0?Z:void 0}function mJ($){if(!$||typeof $!=="object"||Array.isArray($))return;return $}function NC($){let Z=mJ($);if(!Z)return;let Q=i0(Z.providerId),W=i0(Z.modelId);if(Q===void 0&&W===void 0)return;return{providerId:Q,modelId:W}}function wC($){if(typeof $!=="string")return;let Z=$.trim().toLowerCase();if(Z==="act"||Z==="plan"||Z==="yolo")return Z;return}function OF($,Z={}){let Q=Array.isArray($)?$:typeof $==="string"?$.split(","):void 0;if(!Q)return;let W=[...new Set(Q.map((J)=>typeof J==="string"?J.trim():"").filter((J)=>J.length>0))];if(Array.isArray($)&&Z.preserveEmptyArray)return W;return W.length>0?W:void 0}var CC=new Set(X$);function PC($){let Z=OF($,{preserveEmptyArray:!0});if(!Z)return;let Q=Z.filter((W)=>!CC.has(W));if(Q.length>0)throw Error(`unknown tool(s): ${Q.join(", ")}`);return Z}var SC=new Set(["rules","skills","plugins"]);function bC($){let Z=OF($,{preserveEmptyArray:!0});if(!Z)return;let Q=Z.filter((W)=>!SC.has(W));if(Q.length>0)throw Error(`unknown extension(s): ${Q.join(", ")}`);return Z}function xJ($){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return;return Math.floor($)}function gJ($){if(typeof $!=="number"||!Number.isFinite($)||$<0)return;return Math.floor($)}function vJ($){if($===null||typeof $!=="object")return JSON.stringify($??null);if(Array.isArray($))return`[${$.map((Q)=>vJ(Q)).join(",")}]`;let Z=Object.entries($).filter(([,Q])=>Q!==void 0);return Z.sort(([Q],[W])=>Q<W?-1:Q>W?1:0),`{${Z.map(([Q,W])=>`${JSON.stringify(Q)}:${vJ(W)}`).join(",")}}`}function qF($,Z){let Q=OC("sha256");return Q.update(vJ($)),Q.update(`
|
|
500
|
+
`),Q.update(Z),Q.digest("hex")}function yC($){return($.split("/").pop()??$).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}var hC=["schedule","timezone"],kC=["event","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds","maxParallel"],IC=["cwd"];function TF($,Z,Q,W,J){return{externalId:$,relativePath:$,triggerKind:Z,body:Q,contentHash:qF(W,Q),error:J}}function f1($,Z,Q,W,J,X){return{externalId:$,relativePath:Z,triggerKind:Q,body:W,contentHash:J,error:X}}function MF($){let Z=$.relativePath.replace(/\\/g,"/"),Q=MC(Z),{frontmatter:W,body:J}=RC($.raw),X={};if(W!==void 0&&W.trim().length>0)try{let U=qC.parse(W);if(U&&typeof U==="object"&&!Array.isArray(U))X=U;else if(U!==null&&U!==void 0)return TF(Z,Q,J,{},"frontmatter must be a YAML mapping")}catch(U){return TF(Z,Q,J,{},U instanceof Error?`failed to parse frontmatter: ${U.message}`:"failed to parse frontmatter")}let Y=qF(X,J),j=i0(X.id),V=j??Z;if(Q!=="schedule"){for(let U of hC)if(X[U]!==void 0)return f1(V,Z,Q,J,Y,`field "${U}" is only allowed on *.cron.md specs`)}for(let U of IC)if(X[U]!==void 0)return f1(V,Z,Q,J,Y,`field "${U}" is no longer supported; cron specs use workspaceRoot as cwd`);if(Q!=="event"){for(let U of kC)if(X[U]!==void 0)return f1(V,Z,Q,J,Y,`field "${U}" is only allowed on .event.md specs`)}let H=i0(X.prompt),B=J.trim(),G=H??(B.length>0?B:void 0);if(!G)return f1(V,Z,Q,J,Y,"prompt is required (frontmatter `prompt` or markdown body)");let K=i0(X.workspaceRoot);if(!K)return f1(V,Z,Q,J,Y,"workspaceRoot is required");let F,A;try{F=PC(X.tools),A=bC(X.extensions)}catch(U){return f1(V,Z,Q,J,Y,U instanceof Error?U.message:String(U))}let L=wC(X.mode);if(X.mode!==void 0&&L===void 0)return f1(V,Z,Q,J,Y,"mode must be one of: act, plan, yolo");let f={id:j,title:i0(X.title)??j??yC(Z),prompt:G,workspaceRoot:K,mode:L??"yolo",systemPrompt:i0(X.systemPrompt),modelSelection:NC(X.modelSelection),maxIterations:xJ(X.maxIterations),timeoutSeconds:xJ(X.timeoutSeconds),tools:F,notesDirectory:i0(X.notesDirectory),extensions:A,source:i0(X.source)??"user",tags:EC(X.tags),enabled:typeof X.enabled==="boolean"?X.enabled:!0,metadata:mJ(X.metadata)},D;if(Q==="schedule"){let U=i0(X.schedule);if(!U)return f1(V,Z,Q,J,Y,"schedule is required for *.cron.md specs");let T=i0(X.timezone);try{Uj(U,T)}catch(z){return f1(V,Z,Q,J,Y,z instanceof Error?z.message:String(z))}D={...f,triggerKind:"schedule",schedule:U,timezone:T}}else if(Q==="event"){let U=i0(X.event);if(!U)return f1(V,Z,Q,J,Y,"event is required for .event.md specs");D={...f,triggerKind:"event",event:U,filters:mJ(X.filters),debounceSeconds:gJ(X.debounceSeconds),dedupeWindowSeconds:gJ(X.dedupeWindowSeconds),cooldownSeconds:gJ(X.cooldownSeconds),maxParallel:xJ(X.maxParallel)}}else D={...f,triggerKind:"one_off"};return{externalId:V,relativePath:Z,triggerKind:Q,body:J,contentHash:Y,spec:D}}function dC($,Z){return cC($,Z).replace(/\\/g,"/")}function lC($){if(!xC($))return[];let Z=[],Q=[$];while(Q.length>0){let W=Q.pop();if(!W)continue;let J;try{J=gC(W,{withFileTypes:!0})}catch{continue}for(let X of J){let Y=`${W}/${X.name}`;if(X.isDirectory()){if(X.name==="reports")continue;Q.push(Y);continue}if(!X.isFile())continue;if(!X.name.endsWith(".md"))continue;Z.push(Y)}}return Z}class cJ{store;cronDir;constructor($){this.store=$.store,this.cronDir=uC($.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=lC(this.cronDir),Q=new Set;for(let J of Z){let X=dC(this.cronDir,J);Q.add(X),$.scanned+=1;let Y=await this.reconcileFile(X,J);if(Y){if($.changes.push(Y),$.upserted+=1,Y.parse.error)$.invalidParses+=1}}let W=this.store.listSpecs({includeRemoved:!1,limit:1e4});for(let J of W)if(!Q.has(J.sourcePath))this.handleFileDeleted(J),$.removed+=1;return this.refreshScheduleNextRunAt(),$}async reconcileFile($,Z){let Q=this.store.getSpecBySourcePath($),W,J;try{W=mC(Z,"utf8"),J=vC(Z).mtimeMs}catch{return}let Y=MF({relativePath:$,raw:W}),j=this.store.upsertSpec({externalId:Y.externalId,sourcePath:$,triggerKind:Y.triggerKind,sourceMtimeMs:J,sourceHash:Y.contentHash,parseStatus:Y.error?"invalid":"valid",parseError:Y.error,spec:Y.spec});if(!Y.error&&Y.triggerKind==="schedule"&&j.record.enabled)this.applyScheduleNextRunAt(j.record,{forceReset:!Q||Q.removed||!Q.enabled||Q.scheduleExpr!==j.record.scheduleExpr||Q.timezone!==j.record.timezone});return{relativePath:$,result:j,parse:Y}}handleFileDeleted($){this.store.markSpecRemoved($.specId),this.store.cancelQueuedRunsForSpec($.specId)}refreshScheduleNextRunAt(){let $=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let Z of $)this.applyScheduleNextRunAt(Z,{forceReset:!1})}applyScheduleNextRunAt($,Z){if(!$.scheduleExpr)return;if(!Z.forceReset&&$.nextRunAt)return;try{let Q=Date.now(),W=$.lastRunAt?Math.max(Q,new Date($.lastRunAt).getTime()):Q,J=i$($.scheduleExpr,W,$.timezone),X=new Date(J).toISOString();if($.nextRunAt!==X)this.store.updateSpecNextRunAt($.specId,X)}catch{}}}import{existsSync as pC,mkdirSync as rC,watch as iC}from"node:fs";import{relative as nC,resolve as aC}from"node:path";var sC=250;class uJ{reconciler;debounceMs;onError;onReconciled;watcher;pending=new Map;disposed=!1;constructor($){this.reconciler=$.reconciler,this.debounceMs=Math.max(0,$.debounceMs??sC),this.onError=$.onError??(()=>{}),this.onReconciled=$.onReconciled??(()=>{})}start(){if(this.disposed)throw Error("CronWatcher disposed");if(this.watcher)return;let $=this.reconciler.getCronDir();try{rC($,{recursive:!0}),this.watcher=iC($,{recursive:!0},(Z,Q)=>{if(!Q)return;let W=String(Q).replace(/\\/g,"/");if(!W.endsWith(".md"))return;if(W.startsWith("reports/"))return;this.scheduleReconcile(W)}),this.watcher.on("error",this.onError)}catch(Z){this.onError(Z)}}stop(){for(let $ of this.pending.values())clearTimeout($);this.pending.clear(),this.watcher?.close(),this.watcher=void 0}dispose(){this.disposed=!0,this.stop()}scheduleReconcile($){let Z=this.pending.get($);if(Z)clearTimeout(Z);let Q=setTimeout(()=>{this.pending.delete($),this.reconcileNow($)},this.debounceMs);this.pending.set($,Q)}async reconcileNow($){try{let Z=aC(this.reconciler.getCronDir(),$);if(!pC(Z)){await this.reconciler.reconcileAll(),await this.onReconciled();return}let Q=nC(this.reconciler.getCronDir(),Z).replace(/\\/g,"/");await this.reconciler.reconcileFile(Q,Z),await this.onReconciled()}catch(Z){this.onError(Z)}}}class P5{store;reconciler;watcher;eventIngress;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new x4({dbPath:$.dbPath});let Z=$.specs;this.reconciler=new cJ({store:this.store,specs:Z}),this.materializer=new P4({store:this.store}),this.eventIngress=new IJ({store:this.store,logger:$.logger}),this.runner=new y4({store:this.store,materializer:this.materializer,runtimeHandlers:$.runtimeHandlers,workspaceRoot:$.workspaceRoot,specs:Z,logger:$.logger,pollIntervalMs:$.pollIntervalMs,claimLeaseSeconds:$.claimLeaseSeconds,globalMaxConcurrency:$.globalMaxConcurrency}),this.watcher=new uJ({reconciler:this.reconciler,debounceMs:$.watcherDebounceMs,onReconciled:()=>{this.materializer.materializeAll()},onError:(Q)=>{let W=$.logger;if(W)if(W.error)W.error("cron.watcher.failed",{error:Q});else W.log("cron.watcher.failed",{error:Q})}})}async start(){if(this.disposed)throw Error("CronService disposed");if(this.started)return;this.started=!0,await this.reconciler.reconcileAll(),this.materializer.materializeAll(),this.watcher.start(),await this.runner.start()}async stop(){this.watcher.stop(),await this.runner.stop(),this.started=!1}async dispose(){if(this.disposed)return;this.disposed=!0,this.watcher.dispose(),await this.runner.dispose(),this.store.close()}listSpecs($){return this.store.listSpecs($)}getSpec($){return this.store.getSpec($)}listRuns($){return this.store.listRuns($)}getRun($){return this.store.getRun($)}listActiveRuns(){return this.store.listRuns({status:"running",limit:200})}listUpcomingRuns($=20){return this.store.listRuns({status:"queued",limit:$})}async reconcileNow(){await this.reconciler.reconcileAll(),this.materializer.materializeAll()}ingestEvent($){return this.eventIngress.ingestEvent($)}listEventLogs($){return this.store.listEventLogs($)}getEventLog($){return this.store.getEventLog($)}}var yF={};N(yF,{manifestToSessionRecord:()=>vQ,listSessionHistoryFromBackend:()=>rJ,listSessionHistory:()=>cQ,hydrateSessionHistory:()=>bF});import{readdir as $P,readFile as CF}from"node:fs/promises";import{join as PF}from"node:path";import{formatDisplayUserInput as ZP,normalizeUserInput as QP}from"@cline/shared";import{resolveSessionDataDir as SF}from"@cline/shared/storage";import{existsSync as oC}from"node:fs";import{readFile as tC}from"node:fs/promises";import{formatDisplayUserInput as RF}from"@cline/shared";class S5{listeners=new Set;subscribe($,Z){let Q={listener:$,sessionId:Z?.sessionId?.trim()||void 0};return this.listeners.add(Q),()=>{this.listeners.delete(Q)}}emit($){let Z=$.payload.sessionId?.trim();for(let Q of this.listeners){if(Q.sessionId&&Q.sessionId!==Z)continue;Q.listener($)}}get size(){return this.listeners.size}}async function I$($){let Z=$?.trim();if(!Z||!oC(Z))return[];try{let Q=(await tC(Z,"utf8")).trim();if(!Q)return[];let W=JSON.parse(Q);if(Array.isArray(W))return EF(W);if(W&&typeof W==="object"&&!Array.isArray(W)){let J=W.messages;if(Array.isArray(J))return EF(J)}return[]}catch{return[]}}function eC($){if($.role!=="user")return $;if(typeof $.content==="string")return{...$,content:RF($.content)};return{...$,content:$.content.map((Z)=>{if(Z.type!=="text"||typeof Z.text!=="string")return Z;return{...Z,text:RF(Z.text)}})}}function EF($){return $.map(eC)}function dJ($){return $?{...$}:void 0}async function NF($,Z){if(!($.hookName==="tool_call"||!!$.parent_agent_id))return;await Z.queueSpawnRequest($);let W=await Z.upsertSubagentSessionFromHook($);if(!W)return;await Z.appendSubagentHookAudit(W,$),await Z.applySubagentStatus(W,$)}function b5($){if(typeof $!=="string")return;let Z=$.trim();return Z.length>0?Z:void 0}function n0($){let Z=b5($);if(!Z)return;return Z.toLowerCase()==="unknown"?void 0:Z}function mQ($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function WP($){if(!$||typeof $!=="object"||Array.isArray($))return;return{...$}}function pJ($){let Z=$??200;return Number.isFinite(Z)?Math.max(0,Math.floor(Z)):200}function JP($){if($===0)return 0;return Math.min(Math.max($*2,20),2000)}function XP($){return $.isSubagent!==!0&&!b5($.parentSessionId)}function YP($){let Z=$.match(/\d{13,}/g);if(!Z||Z.length===0)return 0;let Q=0;for(let W of Z){let J=Number.parseInt(W,10);if(Number.isFinite(J)&&J>Q)Q=J}return Q}function vQ($){return{sessionId:$.session_id,source:$.source,pid:$.pid,startedAt:$.started_at,endedAt:$.ended_at??null,exitCode:$.exit_code??null,status:$.status,interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspaceRoot:$.workspace_root,teamName:$.team_name,enableTools:$.enable_tools,enableSpawn:$.enable_spawn,enableTeams:$.enable_teams,isSubagent:!1,prompt:$.prompt,metadata:$.metadata,messagesPath:$.messages_path,updatedAt:$.ended_at??$.started_at}}async function jP($){let Z=pJ($);if(Z===0)return[];let Q=SF(),J=(await $P(Q,{withFileTypes:!0}).catch(()=>[])).filter((Y)=>Y.isDirectory()).map((Y)=>({entry:Y,recency:YP(Y.name.trim())})).sort((Y,j)=>j.recency-Y.recency||j.entry.name.localeCompare(Y.entry.name));return(await Promise.all(J.map(async({entry:Y})=>{let j=Y.name.trim();if(!j)return;let V=PF(Q,j,`${j}.json`),H=await CF(V,"utf8").catch(()=>{return});if(!H)return;let B;try{B=JSON.parse(H)}catch{return}let G=b0.safeParse(B);if(!G.success)return;return vQ(G.data)}))).filter((Y)=>Boolean(Y)).sort((Y,j)=>j.startedAt.localeCompare(Y.startedAt)).slice(0,Z)}async function VP($,Z,Q){let W=pJ(Z);if(W===0)return await $.listSessions(0),[];let J=Q.includeSubagents?W:JP(W),X=await $.listSessions(J);return(Q.includeSubagents?X:X.filter(XP)).slice(0,W)}function HP($){if(typeof $==="string")return $.trim();let Z=[];for(let Q of $){if(!Q||typeof Q!=="object")continue;let W=Q;if(W.type!=="text")continue;let J=W.text?.trim();if(J)Z.push(J)}return Z.join(`
|
|
501
|
+
`).trim()}function wF($){return $.replace(/\s+/g," ").trim()}function BP($,Z){if($.length<=Z)return $;return`${$.slice(0,Math.max(0,Z-3)).trimEnd()}...`}function GP($){for(let Z of["user","assistant"])for(let Q of $){if(Q.role!==Z)continue;let W=wF(HP(Q.content));if(!W)continue;let J=Z==="user"?wF(ZP(W)):W,X=QP(J.split(`
|
|
502
|
+
`)[0]??J);return BP(X,50)}return}function KP($){let Z=0;for(let Q of $)Z+=mQ(Q.metrics?.cost)??0;return Z}function FP($){let Z,Q;for(let W=$.length-1;W>=0;W-=1){let J=$[W];if(!Z)Z=n0(J.modelInfo?.provider);if(!Q)Q=n0(J.modelInfo?.id);if(Z&&Q)break}return{provider:Z,model:Q}}function AP($){return n0($?.provider)??n0($?.provider&&typeof $.provider==="object"&&!Array.isArray($.provider)?$.provider.id:void 0)}function fP($){return n0($?.model)??n0($?.model&&typeof $.model==="object"&&!Array.isArray($.model)?$.model.id:void 0)}function lJ($,Z){let Q=WP($.metadata),W=b5(Z?.title)??b5(Q?.title),J=mQ(Z?.totalCost)??mQ(Q?.totalCost),X=Q||W!==void 0||J!==void 0?{...Q??{},...W!==void 0?{title:W}:{},...J!==void 0?{totalCost:J}:{}}:void 0;return{...$,provider:n0(Z?.provider)??n0($.provider)??AP(Q)??"",model:n0(Z?.model)??n0($.model)??fP(Q)??"",metadata:X}}function UP($){let Z=$.content;if(!Array.isArray(Z))return!1;return Z.some((Q)=>!!Q&&typeof Q==="object"&&Q.type==="tool-call")}function DP($,Z){if($.status!=="running"||$.interactive!==!0)return!1;let Q=Z.at(-1);return Q?.role==="assistant"&&!UP(Q)}async function LP($,Z){return await Promise.all(Z.map(async(Q)=>{if(Q.status!=="running"||Q.interactive!==!0)return Q;let W=await $.readSessionMessages(Q.sessionId);return DP(Q,W)?{...Q,status:"idle"}:Q}))}async function bF($,Z){return await Promise.all(Z.map(async(Q)=>{let W=lJ(Q),J=Boolean(b5(W.metadata?.title)),X=Boolean(n0(W.provider)),Y=Boolean(n0(W.model)),j=mQ(W.metadata?.totalCost),V=j!==void 0&&j>0;if(J&&X&&Y&&V)return W;let H=await $.readSessionMessages(Q.sessionId);if(H.length===0)return W;let B=FP(H),G=KP(H);return lJ(Q,{title:J?void 0:GP(H),provider:X?void 0:B.provider,model:Y?void 0:B.model,totalCost:V||G<=0?void 0:G})}))}async function cQ($,Z={}){let Q=pJ(Z.limit),W=Z.includeSubagents===!0,J=await VP($,Q,{includeSubagents:W}),X=Z.includeManifestFallback===!0&&J.length<Q?await jP(Math.min(Math.max(Q*2,100),500)):[],Y=new Map;for(let H of[...J,...X]){if(Y.has(H.sessionId))continue;Y.set(H.sessionId,H)}let j=X.length===0?J:Array.from(Y.values()).sort((H,B)=>B.startedAt.localeCompare(H.startedAt)).slice(0,Q),V=await LP($,j);if(Z.hydrate===!1)return V.map((H)=>lJ(H));return await bF($,V)}async function _P($){let Z=$.trim();if(!Z)return;let Q=PF(SF(),Z,`${Z}.json`),W=await CF(Q,"utf8").catch(()=>{return});if(!W)return;try{let J=b0.safeParse(JSON.parse(W));return J.success?J.data.messages_path:void 0}catch{return}}async function rJ($,Z={}){let Q=new Map;return await cQ({listSessions:async(J)=>{let X=await $.listSessions(J);Q.clear();for(let Y of X)Q.set(Y.sessionId,Y);return X.map(v6)},readSessionMessages:async(J)=>{let X=Q.get(J)?.messagesPath??await _P(J);return await I$(X)}},Z)}var zA={};N(zA,{resolveSessionBackend:()=>KX,createRuntimeHost:()=>K4});import{captureSdkError as LA}from"@cline/shared";var rF={};N(rF,{HubRuntimeHost:()=>o1});import{captureSdkError as kF,createSessionId as IF,HUB_CHECKPOINT_CAPABILITY as qP,HUB_COMPACTION_CAPABILITY as MP,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as RP,HUB_HOOK_CAPABILITY_PREFIX as EP,HUB_MISTAKE_LIMIT_CAPABILITY as NP,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as wP,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as CP,isHubToolExecutorName as PP}from"@cline/shared";var hF={};N(hF,{createCoreSessionSnapshot:()=>U1,coreSessionSnapshotToRecord:()=>uQ});function zP($){return $?JSON.parse(JSON.stringify($)):void 0}function TP($){return $?JSON.parse(JSON.stringify($)):void 0}function OP($){let Z=$?.checkpoint&&typeof $.checkpoint==="object"&&!Array.isArray($.checkpoint)?$.checkpoint:void 0,W=(Array.isArray(Z?.history)?Z.history:[]).filter((Y)=>!!Y&&typeof Y==="object"&&!Array.isArray(Y)).flatMap((Y)=>{let j=typeof Y.ref==="string"?Y.ref.trim():"",V=Number(Y.createdAt),H=Number(Y.runCount);if(!j||!Number.isFinite(V)||!Number.isInteger(H))return[];return[{ref:j,createdAt:V,runCount:H,...Y.kind==="stash"||Y.kind==="commit"?{kind:Y.kind}:{}}]}),J=W.at(-1),X=$?.checkpointEnabled===!0?!0:void 0;if(!X&&W.length===0)return;return{...X?{enabled:X}:{},...J?{latest:J}:{},history:W}}function U1($){let{session:Z}=$,Q=zP(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:TP($.messages)}:{},...$.usage?{usage:{...$.usage}}:{},...$.aggregateUsage?{aggregateUsage:{...$.aggregateUsage}}:{},...(()=>{let W=OP(Q);return W?{checkpoint:W}:{}})()}}function uQ($){return{sessionId:$.sessionId,parentSessionId:$.lineage.parentSessionId,agentId:$.lineage.agentId,parentAgentId:$.lineage.parentAgentId,conversationId:$.lineage.conversationId,isSubagent:$.lineage.isSubagent,source:$.source,startedAt:$.createdAt,endedAt:$.endedAt??void 0,exitCode:$.exitCode??void 0,status:$.status,interactive:$.interactive,provider:$.model.providerId,model:$.model.modelId,cwd:$.workspace.cwd,workspaceRoot:$.workspace.root,teamName:$.team?.name,enableTools:$.capabilities.enableTools,enableSpawn:$.capabilities.enableSpawn,enableTeams:$.capabilities.enableTeams,prompt:$.prompt,metadata:$.metadata,updatedAt:$.updatedAt,messagesPath:$.artifacts?.messagesPath}}function J4($){if(!$)return;return JSON.parse(JSON.stringify($))}var SP=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function xF($){if(!$||typeof $!=="object"||Array.isArray($))return;return JSON.parse(JSON.stringify($))}function gF($){if(!$)return;let{userInstructionService:Z,...Q}=$;return JSON.parse(JSON.stringify(Q))}function mF($){let Z=$&&typeof $==="object"&&!Array.isArray($)?$:{};return{agentId:typeof Z.agentId==="string"?Z.agentId:"",conversationId:typeof Z.conversationId==="string"?Z.conversationId:"",iteration:typeof Z.iteration==="number"?Z.iteration:0,metadata:Z.metadata&&typeof Z.metadata==="object"&&!Array.isArray(Z.metadata)?Z.metadata:void 0}}function h2($,Z,Q){$.manifest.push(Z),$.handlers.set(Z.capabilityName,Q)}function vF($,Z){let Q={manifest:[],handlers:new Map};for(let J of Object.keys(Z.toolExecutors??{}).filter(PP)){let X=Z.toolExecutors?.[J];if(typeof X!=="function")continue;h2(Q,{kind:"toolExecutor",executor:J,capabilityName:`${wP}${J}`},async({payload:Y,abortSignal:j})=>{let V=Array.isArray(Y.args)?[...Y.args]:[],H={...mF(Y.context),signal:j};return{result:await X(...V,H)}})}for(let J of $?.extraTools??[])h2(Q,{kind:"tool",name:J.name,description:J.description,inputSchema:J4(J.inputSchema)??{},...J.lifecycle?{lifecycle:J4(J.lifecycle)}:{},capabilityName:`${RP}${J.name}`},async({payload:X,abortSignal:Y,progress:j})=>{let V={...mF(X.context),signal:Y};return{result:await J.execute(X.input,{...V,emitUpdate:(B)=>{j({update:B})}})}});let W=$?.hooks;if(W)for(let J of SP){let X=W[J];if(typeof X!=="function")continue;h2(Q,{kind:"hook",name:J,capabilityName:`${EP}${J}`},async({payload:Y})=>({control:await X(Y.context)}))}if($?.compaction?.compact){let J=$.compaction.compact;h2(Q,{kind:"compaction",capabilityName:MP,config:xF($.compaction)},async({payload:X})=>({result:await J(X.context)}))}if($?.checkpoint?.createCheckpoint){let J=$.checkpoint.createCheckpoint;h2(Q,{kind:"checkpoint",capabilityName:qP,config:xF($.checkpoint)},async({payload:X})=>({result:await J(X.context)}))}if($?.onConsecutiveMistakeLimitReached){let J=$.onConsecutiveMistakeLimitReached;h2(Q,{kind:"mistakeLimit",capabilityName:NP},async({payload:X})=>({result:await J(X.context)}))}if($?.userInstructionService){let J=$.userInstructionService;h2(Q,{kind:"userInstructionService",capabilityName:CP},async()=>{return await J.start().catch(()=>{}),{snapshot:{records:{skill:J.listRecords("skill"),rule:J.listRecords("rule"),workflow:J.listRecords("workflow")},runtimeCommands:J.listRuntimeCommands()}}})}return Q}function lF($){if(typeof $==="string"&&$.trim())return $.trim();if($ instanceof Error)return $.message.trim()||void 0;if($&&typeof $==="object"&&"message"in $){let Z=$.message;if(typeof Z==="string"&&Z.trim())return Z.trim()}return}function bP($){return lF($)??"Capability request was cancelled."}function yP($){if(typeof $!=="string")return $;try{return JSON.parse($)}catch{return $}}function hP($){return $==="completed"||$==="max_iterations"||$==="aborted"||$==="mistake_limit"||$==="error"}function kP($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$,Q=typeof Z.inputTokens==="number"?Z.inputTokens:void 0,W=typeof Z.outputTokens==="number"?Z.outputTokens:void 0;if(Q===void 0||W===void 0)return;return{inputTokens:Q,outputTokens:W,cacheReadTokens:typeof Z.cacheReadTokens==="number"?Z.cacheReadTokens:0,cacheWriteTokens:typeof Z.cacheWriteTokens==="number"?Z.cacheWriteTokens:0,totalCost:typeof Z.totalCost==="number"?Z.totalCost:0}}function cF($){if(!$)return;return{inputTokens:typeof $.inputTokens==="number"?$.inputTokens:0,outputTokens:typeof $.outputTokens==="number"?$.outputTokens:0,cacheReadTokens:typeof $.cacheReadTokens==="number"?$.cacheReadTokens:0,cacheWriteTokens:typeof $.cacheWriteTokens==="number"?$.cacheWriteTokens:0,totalCost:typeof $.totalCost==="number"?$.totalCost:0}}function iJ($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function x$($,Z){return iJ($?.[Z])??0}function IP($){let Z=$?.delta&&typeof $.delta==="object"?$.delta:void 0,Q=$?.totals&&typeof $.totals==="object"?$.totals:void 0,W=$?.agent&&typeof $.agent==="object"?$.agent:void 0,J=W?.teamRole==="teammate"||W?.teamRole==="lead"?W.teamRole:void 0;return{event:{type:"usage",agentId:typeof W?.agentId==="string"?W.agentId:void 0,conversationId:typeof W?.conversationId==="string"?W.conversationId:void 0,parentAgentId:typeof W?.parentAgentId==="string"?W.parentAgentId:void 0,inputTokens:x$(Z,"inputTokens"),outputTokens:x$(Z,"outputTokens"),cacheReadTokens:x$(Z,"cacheReadTokens"),cacheWriteTokens:x$(Z,"cacheWriteTokens"),cost:iJ(Z?.totalCost),totalInputTokens:x$(Q,"inputTokens"),totalOutputTokens:x$(Q,"outputTokens"),totalCacheReadTokens:x$(Q,"cacheReadTokens"),totalCacheWriteTokens:x$(Q,"cacheWriteTokens"),totalCost:iJ(Q?.totalCost)},teamAgentId:typeof W?.teamAgentId==="string"?W.teamAgentId:void 0,teamRole:J}}function xP($){let Z=$?.result&&typeof $.result==="object"&&!Array.isArray($.result)?$.result:void 0,Q=$?.reason??Z?.finishReason,W=hP(Q)?Q:Q==="failed"?"error":"completed",J=kP($?.usage??Z?.usage);return{type:"done",reason:W,text:typeof $?.text==="string"?$.text:typeof Z?.text==="string"?Z.text:"",iterations:typeof $?.iterations==="number"?$.iterations:typeof Z?.iterations==="number"?Z.iterations:0,usage:J}}function dQ($,Z){return $.error?.message??`hub command failed: ${Z}`}function y5($){switch($){case"idle":case"completed":return"completed";case"failed":return"failed";case"aborted":return"cancelled";default:return"running"}}function pF($){let Z=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):void 0;return{sessionId:$.sessionId,parentSessionId:typeof Z?.parentSessionId==="string"?Z.parentSessionId:void 0,agentId:$.runtimeSession?.agentId||(typeof Z?.agentId==="string"?Z.agentId:void 0),parentAgentId:typeof Z?.parentAgentId==="string"?Z.parentAgentId:void 0,conversationId:typeof Z?.conversationId==="string"?Z.conversationId:void 0,isSubagent:typeof Z?.isSubagent==="boolean"?Z.isSubagent:!1,source:typeof Z?.source==="string"?Z.source:T0.CORE,pid:typeof Z?.pid==="number"?Z.pid:void 0,startedAt:new Date($.createdAt).toISOString(),endedAt:y5($.status)==="running"?void 0:new Date($.updatedAt).toISOString(),exitCode:y5($.status)==="completed"?0:y5($.status)==="failed"?1:void 0,status:y5($.status),interactive:Z?.interactive===!0,provider:typeof Z?.provider==="string"?Z.provider:"hub",model:typeof Z?.model==="string"?Z.model:"hub",cwd:$.cwd?.trim()||$.workspaceRoot,workspaceRoot:$.workspaceRoot,teamName:typeof Z?.teamName==="string"?Z.teamName:void 0,enableTools:$.runtimeOptions?.enableTools??Z?.enableTools===!0,enableSpawn:$.runtimeOptions?.enableSpawn??Z?.enableSpawn===!0,enableTeams:$.runtimeOptions?.enableTeams??Z?.enableTeams===!0,prompt:typeof Z?.prompt==="string"?Z.prompt:void 0,metadata:Z,updatedAt:new Date($.updatedAt).toISOString(),messagesPath:typeof Z?.messagesPath==="string"?Z.messagesPath:void 0,hookPath:typeof Z?.hookPath==="string"?Z.hookPath:void 0}}function g$($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$;return Z.version===1&&typeof Z.sessionId==="string"?JSON.parse(JSON.stringify(Z)):void 0}function gP($){let Z=g$($?.snapshot);if(Z)return uQ(Z);let Q=$?.session;return Q?pF(Q):void 0}function uF($,Z,Q){let W=Q?.workspaceRoot?.trim()||Z.config.workspaceRoot||Z.config.cwd;return b0.parse({version:1,session_id:$,source:Z.source??T0.CORE,pid:process.pid,started_at:new Date(Q?.createdAt??Date.now()).toISOString(),status:y5(Q?.status),interactive:Z.interactive===!0,provider:Z.config.providerId,model:Z.config.modelId,cwd:Q?.cwd?.trim()||Z.config.cwd,workspace_root:W,team_name:Z.config.teamName,enable_tools:Z.config.enableTools,enable_spawn:Z.config.enableSpawnAgent,enable_teams:Z.config.enableAgentTeams,prompt:Z.prompt?.trim()||void 0,metadata:Z.sessionMetadata&&Object.keys(Z.sessionMetadata).length>0?Z.sessionMetadata:void 0})}function dF($,Z){return b0.parse({version:1,session_id:$.sessionId,source:$.source,pid:process.pid,started_at:$.createdAt,status:$.status,interactive:$.interactive,provider:$.model.providerId,model:$.model.modelId,cwd:$.workspace.cwd,workspace_root:$.workspace.root,team_name:$.team?.name,enable_tools:$.capabilities.enableTools,enable_spawn:$.capabilities.enableSpawn,enable_teams:$.capabilities.enableTeams,prompt:($.prompt??Z.prompt?.trim())||void 0,metadata:$.metadata,messages_path:$.artifacts?.messagesPath})}class o1{runtimeAddress;pendingPrompts;client;clientOptions;clientContext;events=new S5;sessionCapabilities=new Map;sessionClientContributionHandlers=new Map;sessionSubscriptions=new Map;pendingApprovalToolCallIds=new Set;agentDoneEmittedForCurrentRunBySession=new Set;activeCapabilityAbortControllers=new Map;defaultCapabilities;telemetry;constructor($,Z){this.clientContext=Z,this.clientOptions={authToken:$.authToken,clientType:$.clientType??"core-hub-runtime",displayName:$.displayName??"core hub runtime",workspaceRoot:Z?.workspaceRoot,cwd:Z?.cwd},this.defaultCapabilities=M0($.capabilities)??{},this.telemetry=$.telemetry,this.runtimeAddress=$.url,this.pendingPrompts={list:(Q)=>this.requestPendingPromptsList(Q),update:(Q)=>this.requestPendingPromptUpdate(Q),delete:(Q)=>this.requestPendingPromptDelete(Q)},this.client=this.createClient($.url)}createClient($){return new W1({...this.clientOptions,url:$})}async replaceClient($){let Z=this.client;this.client=this.createClient($),this.runtimeAddress=$,await Promise.resolve(Z.dispose()).catch(()=>{return})}async recoverLocalHubStartupDeadlock($){if(!o9($,"session.create"))return!1;let Z=await t9({url:this.client.getUrl(),workspaceRoot:this.clientContext?.workspaceRoot,cwd:this.clientContext?.cwd}).catch(()=>{return});if(!Z)return!1;return await this.replaceClient(Z),!0}registerPlannedSession($,Z,Q){if(this.sessionCapabilities.set($,Z),Q.size>0)this.sessionClientContributionHandlers.set($,Q);this.ensureSessionSubscription($)}cleanupPlannedSession($){this.sessionCapabilities.delete($),this.sessionClientContributionHandlers.delete($),this.disposeSessionSubscription($)}async connect(){await this.client.connect()}async startSession($){let Z=this.resolveCapabilities($),Q=vF($.localRuntime,Z),W=$.config.sessionId?.trim()||IF(),J=()=>this.client.command("session.create",{workspaceRoot:$.config.workspaceRoot?.trim()||$.config.cwd,cwd:$.config.cwd,sessionConfig:J4({...$.config,sessionId:W}),metadata:{...$.sessionMetadata??{},source:$.source??T0.CORE,provider:$.config.providerId,model:$.config.modelId,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,teamName:$.config.teamName,prompt:$.prompt,interactive:$.interactive===!0},runtimeOptions:{...Q.manifest.length>0?{clientContributions:Q.manifest}:{},...$.localRuntime?.configExtensions?{configExtensions:$.localRuntime.configExtensions}:{}},toolPolicies:J4($.toolPolicies),initialMessages:$.initialMessages});this.registerPlannedSession(W,Z,Q.handlers);let X;try{X=await J()}catch(H){if(this.cleanupPlannedSession(W),await this.recoverLocalHubStartupDeadlock(H)){this.registerPlannedSession(W,Z,Q.handlers);try{X=await J()}catch(B){throw this.cleanupPlannedSession(W),B}}else throw H}let Y=g$(X.payload?.snapshot),j=X.payload?.session,V=(Y?.sessionId??j?.sessionId)?.trim();if(!V)throw this.cleanupPlannedSession(W),Error("Hub runtime did not return a session id.");if(V!==W)this.cleanupPlannedSession(W),this.registerPlannedSession(V,Z,Q.handlers);return{sessionId:V,manifest:Y?dF(Y,$):uF(V,$,j),manifestPath:"",messagesPath:"",result:void 0}}async restoreSession($){let Z=$.sessionId.trim();if(!Z)throw Error("sessionId is required");let Q=$.restore?.messages!==!1;if(Q&&!$.start)throw Error("start is required when restore.messages is true");let W=$.start,J=W?this.resolveCapabilities(W):void 0,X=W?vF(W.localRuntime,J??{}):{manifest:[],handlers:new Map},Y=W?W.config.sessionId?.trim()||IF():void 0;if(Y&&J)this.sessionCapabilities.set(Y,J);if(Y&&X.handlers.size>0)this.sessionClientContributionHandlers.set(Y,X.handlers),this.ensureSessionSubscription(Y);let j;try{j=await this.client.command("session.restore",{sessionId:Z,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...W?{workspaceRoot:W.config.workspaceRoot?.trim()||W.config.cwd,cwd:W.config.cwd??$.cwd,sessionConfig:J4({...W.config,sessionId:Y}),metadata:{...W.sessionMetadata??{},source:W.source??T0.CORE,provider:W.config.providerId,model:W.config.modelId,enableTools:W.config.enableTools,enableSpawn:W.config.enableSpawnAgent,enableTeams:W.config.enableAgentTeams,teamName:W.config.teamName,prompt:W.prompt,interactive:W.interactive===!0},runtimeOptions:{...X.manifest.length>0?{clientContributions:X.manifest}:{},...W.localRuntime?.configExtensions?{configExtensions:W.localRuntime.configExtensions}:{}},toolPolicies:J4(W.toolPolicies)}:{}},Z)}catch(F){if(Y)this.sessionCapabilities.delete(Y),this.sessionClientContributionHandlers.delete(Y),this.disposeSessionSubscription(Y);throw F}if(!j.ok){let F=typeof j.payload?.error==="string"?j.payload.error:"session.restore failed";if(Y)this.sessionCapabilities.delete(Y),this.sessionClientContributionHandlers.delete(Y),this.disposeSessionSubscription(Y);throw Error(F)}let V=g$(j.payload?.snapshot),H=j.payload?.session,B=(V?.sessionId??H?.sessionId)?.trim();if(Q&&!B){if(Y)this.sessionCapabilities.delete(Y),this.sessionClientContributionHandlers.delete(Y),this.disposeSessionSubscription(Y);throw Error("Hub checkpoint restore returned no session id")}if(B&&Y&&B!==Y)this.sessionCapabilities.delete(Y),this.sessionClientContributionHandlers.delete(Y),this.disposeSessionSubscription(Y);if(B&&J)this.sessionCapabilities.set(B,J);if(B&&X.handlers.size>0)this.sessionClientContributionHandlers.set(B,X.handlers);if(B)this.ensureSessionSubscription(B);let G=Array.isArray(j.payload?.messages)?j.payload.messages:void 0,K=j.payload?.checkpoint;if(!K)throw Error("Hub checkpoint restore returned no checkpoint");return{sessionId:B,startResult:B?{sessionId:B,manifest:V?dF(V,W??{}):uF(B,W??{},H),manifestPath:"",messagesPath:"",result:void 0}:void 0,messages:G,checkpoint:K}}async runTurn($){return this.ensureSessionSubscription($.sessionId),(await this.client.command("run.start",{sessionId:$.sessionId,input:$.prompt,mode:$.mode,attachments:($.userImages?.length??0)>0||($.userFiles?.length??0)>0?{...$.userImages?.length?{userImages:$.userImages}:{},...$.userFiles?.length?{userFiles:$.userFiles}:{}}:void 0,delivery:$.delivery,timeoutMs:$.timeoutMs},$.sessionId,{timeoutMs:null})).payload?.result}async requestPendingPromptsList($){this.ensureSessionSubscription($.sessionId);let Z=await this.client.command("session.pending_prompts",{sessionId:$.sessionId},$.sessionId);return Array.isArray(Z.payload?.prompts)?Z.payload.prompts:[]}async requestPendingPromptUpdate($){this.ensureSessionSubscription($.sessionId);let Z=await this.client.command("session.update_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(Z.payload?.prompts)?Z.payload.prompts:[],prompt:Z.payload?.prompt,updated:Z.payload?.updated===!0}}async requestPendingPromptDelete($){this.ensureSessionSubscription($.sessionId);let Z=await this.client.command("session.remove_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(Z.payload?.prompts)?Z.payload.prompts:[],prompt:Z.payload?.prompt,removed:Z.payload?.removed===!0}}async getAccumulatedUsage($){let Z=await this.client.command("session.get",{includeSnapshot:!0},$),Q=g$(Z.payload?.snapshot);if(Q){let Y=Q.usage?{...Q.usage}:void 0,j=Q.aggregateUsage?{...Q.aggregateUsage}:void 0;return Y||j?{usage:Y,aggregateUsage:j}:void 0}let W=Z.payload?.session,J=cF(W?.usage),X=cF(W?.aggregateUsage);return J||X?{usage:J,aggregateUsage:X}:void 0}async abort($,Z){await this.client.command("run.abort",{sessionId:$,reason:lF(Z)},$)}async stopSession($){this.sessionCapabilities.delete($),this.disposeSessionSubscription($),await this.client.command("session.detach",{sessionId:$},$)}async dispose(){for(let[$,Z]of this.sessionSubscriptions){Z();try{await this.client.command("session.detach",{sessionId:$},$)}catch{}}this.sessionSubscriptions.clear(),this.sessionCapabilities.clear(),this.agentDoneEmittedForCurrentRunBySession.clear();for(let $ of this.activeCapabilityAbortControllers.values())$.abort("Hub runtime host disposed.");this.activeCapabilityAbortControllers.clear(),await this.client.dispose()}async getSession($){let Z;try{Z=await this.client.command("session.get",void 0,$)}catch(Q){if(I1(Q))return;throw Q}return gP(Z.payload)}async listSessions($=100){let Z=await this.client.command("session.list",{limit:$}),Q=Array.isArray(Z.payload?.snapshots)?Z.payload.snapshots.flatMap((J)=>{let X=g$(J);return X?[uQ(X)]:[]}):[];if(Q.length>0)return Q;return(Z.payload?.sessions??[]).map(pF)}async listSettings($){let Z=await this.client.command("settings.list",gF($));if(!Z.ok)throw Error(dQ(Z,"settings.list"));return Z.payload?.snapshot}async toggleSetting($){let Z=await this.client.command("settings.toggle",gF($));if(!Z.ok)throw Error(dQ(Z,"settings.toggle"));return{snapshot:Z.payload?.snapshot,changedTypes:Array.isArray(Z.payload?.changedTypes)?Z.payload.changedTypes:[]}}async deleteSession($){return this.sessionCapabilities.delete($),this.disposeSessionSubscription($),(await this.client.command("session.delete",{sessionId:$})).payload?.deleted===!0}async updateSession($,Z){let Q={...Z.metadata??{}};if(typeof Z.prompt==="string")Q.prompt=Z.prompt;if(typeof Z.title==="string")Q.title=Z.title;return{updated:(await this.client.command("session.update",{sessionId:$,metadata:Q})).ok}}async readSessionMessages($){let Z=$.trim();if(!Z)return[];let Q=await this.client.command("session.messages",{sessionId:Z},Z);if(!Q.ok)throw kF(this.telemetry,{component:"core",operation:"hub.runtime_host.read_session_messages",error:Error(dQ(Q,"session.messages")),severity:Q.error?.code==="session_not_found"?"warn":"error",handled:!0,context:{command:"session.messages",sessionId:Z,errorCode:Q.error?.code,runtimeAddress:this.runtimeAddress}}),Error(dQ(Q,"session.messages"));let W=Q.payload?.messages;return Array.isArray(W)?W:[]}async dispatchHookEvent($){await this.client.command("session.hook",{payload:$})}subscribe($,Z){return this.events.subscribe($,Z)}ensureSessionSubscription($){let Z=$.trim();if(!Z||this.sessionSubscriptions.has(Z))return;let Q=this.client.subscribe((W)=>{this.handleHubEvent(W)},{sessionId:Z});this.sessionSubscriptions.set(Z,typeof Q==="function"?Q:()=>{})}disposeSessionSubscription($){let Z=$.trim();if(!Z)return;this.sessionSubscriptions.get(Z)?.(),this.sessionSubscriptions.delete(Z),this.agentDoneEmittedForCurrentRunBySession.delete(Z)}resolveCapabilities($){return M0(this.defaultCapabilities,$.capabilities)??{}}emitToolCallContentStart($){this.events.emit({type:"agent_event",payload:{sessionId:$.sessionId,event:{type:"content_start",contentType:"tool",toolCallId:$.toolCallId,toolName:$.toolName,input:$.toolInput}}})}emitAgentDoneIfNeeded($){if(this.agentDoneEmittedForCurrentRunBySession.has($.sessionId))return;this.agentDoneEmittedForCurrentRunBySession.add($.sessionId),this.events.emit({type:"agent_event",payload:{sessionId:$.sessionId,event:xP($.payload)}})}handleHubEvent($){let Z=$.sessionId?.trim();if($.event==="capability.requested"){this.handleCapabilityRequest($).catch((Q)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_request",Q,$)});return}if($.event==="capability.resolved"){this.handleCapabilityResolved($);return}if($.event==="approval.requested"){this.handleApprovalRequested($).catch((Q)=>{this.captureDetachedHubEventError("hub.runtime_host.approval_request",Q,$)});return}if(!Z)return;switch($.event){case"run.started":{this.agentDoneEmittedForCurrentRunBySession.delete(Z);let Q=g$($.payload?.snapshot),W=$.payload?.session;if(Q)this.events.emit({type:"session_snapshot",payload:{sessionId:Z,snapshot:Q}});this.events.emit({type:"status",payload:{sessionId:Z,status:W?.status??"running"}});return}case"iteration.started":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"iteration_start",iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0}}});return}case"iteration.finished":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"iteration_end",iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0,hadToolCalls:$.payload?.hadToolCalls===!0,toolCallCount:typeof $.payload?.toolCallCount==="number"?$.payload.toolCallCount:0}}});return}case"assistant.delta":{let Q=typeof $.payload?.text==="string"?$.payload.text:"";if(!Q)return;this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_start",contentType:"text",text:Q}}});return}case"assistant.finished":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_end",contentType:"text",text:typeof $.payload?.text==="string"?$.payload.text:void 0}}});return}case"reasoning.delta":{let Q=typeof $.payload?.text==="string"?$.payload.text:"",W=$.payload?.redacted===!0;if(!Q&&!W)return;this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_start",contentType:"reasoning",reasoning:Q,redacted:W}}});return}case"reasoning.finished":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_end",contentType:"reasoning",reasoning:typeof $.payload?.reasoning==="string"?$.payload.reasoning:void 0}}});return}case"agent.done":{this.emitAgentDoneIfNeeded({sessionId:Z,payload:$.payload});return}case"usage.updated":{let Q=IP($.payload);this.events.emit({type:"agent_event",payload:{sessionId:Z,event:Q.event,teamAgentId:Q.teamAgentId,teamRole:Q.teamRole}});return}case"tool.started":{let Q=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(Q&&this.pendingApprovalToolCallIds.delete(Q))return;this.emitToolCallContentStart({sessionId:Z,toolCallId:Q,toolName:typeof $.payload?.toolName==="string"?$.payload.toolName:void 0,toolInput:$.payload?.input});return}case"tool.finished":{let Q=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(Q)this.pendingApprovalToolCallIds.delete(Q);this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_end",contentType:"tool",toolCallId:Q,toolName:typeof $.payload?.toolName==="string"?$.payload.toolName:void 0,output:$.payload?.output,error:typeof $.payload?.error==="string"?$.payload.error:void 0}}});return}case"session.created":case"session.updated":case"session.attached":case"session.detached":{let Q=g$($.payload?.snapshot),W=$.payload?.session;if(Q)this.events.emit({type:"session_snapshot",payload:{sessionId:Z,snapshot:Q}});this.events.emit({type:"status",payload:{sessionId:Z,status:W?.status??"running"}});return}case"session.pending_prompts":{this.events.emit({type:"pending_prompts",payload:{sessionId:Z,prompts:Array.isArray($.payload?.prompts)?$.payload.prompts:[]}});return}case"session.pending_prompt_submitted":{let Q=$.payload?.prompt;if(!Q)return;this.events.emit({type:"pending_prompt_submitted",payload:{sessionId:Z,id:Q.id,prompt:Q.prompt,delivery:Q.delivery,attachmentCount:Q.attachmentCount,userImages:Q.userImages,userFiles:Q.userFiles}});return}case"run.completed":case"run.failed":case"run.aborted":{let Q=g$($.payload?.snapshot),W=typeof $.payload?.reason==="string"?$.payload.reason:$.event==="run.aborted"?"aborted":$.event==="run.failed"?"error":"completed";if(this.emitAgentDoneIfNeeded({sessionId:Z,payload:{...$.payload,reason:W}}),Q?.interactive===!0&&H0(Q.status))return;this.events.emit({type:"ended",payload:{sessionId:Z,reason:W,ts:$.timestamp??Date.now()}});return}default:return}}captureDetachedHubEventError($,Z,Q){try{kF(this.telemetry,{component:"core",operation:$,error:Z,severity:"warn",handled:!0,context:{event:Q.event,sessionId:Q.sessionId,runtimeAddress:this.runtimeAddress}})}catch{}}async handleCapabilityRequest($){let Z=$.sessionId?.trim();if(!Z)return;let Q=typeof $.payload?.targetClientId==="string"?$.payload.targetClientId:void 0;if(Q&&Q!==this.client.getClientId())return;let W=typeof $.payload?.requestId==="string"?$.payload.requestId:"",J=typeof $.payload?.capabilityName==="string"?$.payload.capabilityName:"";if(!W)return;let X=this.sessionClientContributionHandlers.get(Z)?.get(J);if(!X){await this.client.command("capability.respond",{requestId:W,ok:!1,error:`No client contribution handler registered for capability ${J} in session ${Z}.`},Z).catch(()=>{});return}let Y=$.payload?.payload&&typeof $.payload.payload==="object"&&!Array.isArray($.payload.payload)?$.payload.payload:{},j=new AbortController;this.activeCapabilityAbortControllers.set(W,j);let V=(H)=>{this.client.command("capability.progress",{requestId:W,payload:H},Z).catch((B)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_progress",B,$)})};try{let H=await X({payload:Y,abortSignal:j.signal,progress:V});if(j.signal.aborted)return;await this.client.command("capability.respond",{requestId:W,ok:!0,payload:H},Z)}catch(H){if(j.signal.aborted)return;await this.client.command("capability.respond",{requestId:W,ok:!1,error:H instanceof Error?H.message:String(H)},Z)}finally{this.activeCapabilityAbortControllers.delete(W)}}handleCapabilityResolved($){if($.payload?.cancelled!==!0)return;let Z=typeof $.payload.requestId==="string"?$.payload.requestId.trim():"";if(!Z)return;let Q=this.activeCapabilityAbortControllers.get(Z);if(!Q)return;Q.abort(bP($.payload.error))}async handleApprovalRequested($){let Z=$.sessionId?.trim();if(!Z)return;let Q=this.sessionCapabilities.get(Z)?.requestToolApproval??this.defaultCapabilities.requestToolApproval;if(!Q)return;let W=typeof $.payload?.approvalId==="string"?$.payload.approvalId.trim():"",J=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:"",X=typeof $.payload?.toolName==="string"?$.payload.toolName:"";if(!W||!J||!X)return;let Y=$.payload?.policy&&typeof $.payload.policy==="object"&&!Array.isArray($.payload.policy)?$.payload.policy:{autoApprove:!1},j=yP($.payload?.inputJson);this.pendingApprovalToolCallIds.add(J),this.emitToolCallContentStart({sessionId:Z,toolCallId:J,toolName:X,toolInput:j});let V=await Promise.resolve(Q({sessionId:Z,agentId:typeof $.payload?.agentId==="string"?$.payload.agentId:"",conversationId:typeof $.payload?.conversationId==="string"?$.payload.conversationId:Z,iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0,toolCallId:J,toolName:X,input:j,policy:Y})).catch((H)=>({approved:!1,reason:H instanceof Error?H.message:`Tool approval request failed: ${String(H)}`}));await this.client.command("approval.respond",{approvalId:W,approved:V.approved,reason:V.reason},Z).catch(()=>{})}}var iF={};N(iF,{RemoteRuntimeHost:()=>X4});class X4 extends o1{constructor($){super({url:G$($.endpoint),authToken:$.authToken,clientType:$.clientType??"core-remote-runtime",displayName:$.displayName??"core remote runtime",capabilities:$.capabilities},{workspaceRoot:$.workspaceRoot,cwd:$.cwd})}}var nF={};N(nF,{SqliteSessionStore:()=>L1});import{existsSync as mP,mkdirSync as vP}from"node:fs";import{join as cP}from"node:path";import{asBool as h5,asOptionalString as D1,asString as t1,ensureSessionSchema as uP,loadSqliteDb as dP,nowIso as lQ,toBoolInt as k5}from"@cline/shared/db";import{resolveDbDataDir as lP}from"@cline/shared/storage";class L1{sessionsDirPath;db;constructor($={}){this.sessionsDirPath=$.sessionsDir??lP()}init(){this.getRawDb()}ensureSessionsDir(){if(!mP(this.sessionsDirPath))vP(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}sessionDbPath(){return cP(this.ensureSessionsDir(),"sessions.db")}getRawDb(){if(this.db)return this.db;let $=dP(this.sessionDbPath());return uP($,{includeLegacyMigrations:!0}),this.db=$,$}close(){this.db?.close?.(),this.db=void 0}run($,Z=[]){return this.getRawDb().prepare($).run(...Z)}queryOne($,Z=[]){return this.getRawDb().prepare($).get(...Z)??void 0}queryAll($,Z=[]){return this.getRawDb().prepare($).all(...Z)}create($){let Z=lQ();this.run(`INSERT OR REPLACE INTO sessions (
|
|
503
503
|
session_id, source, pid, started_at, ended_at, exit_code, status, status_lock, interactive,
|
|
504
504
|
provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
|
|
505
505
|
parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
|
|
@@ -509,26 +509,26 @@ ${Z}`}function iN($,Z){let{data:Q,body:W,hadFrontmatter:J}=rN($);if(!J&&Z)return
|
|
|
509
509
|
enable_tools, enable_spawn, enable_teams,
|
|
510
510
|
parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent,
|
|
511
511
|
prompt, metadata_json, hook_path, messages_path, updated_at
|
|
512
|
-
FROM sessions WHERE session_id = ?`,[$]);if(!Z)return;return{sessionId:t1(Z.session_id),source:t1(Z.source),pid:Number(Z.pid??0),startedAt:t1(Z.started_at),endedAt:Z.ended_at??null,exitCode:Z.exit_code??null,status:t1(Z.status),interactive:h5(Z.interactive),provider:t1(Z.provider),model:t1(Z.model),cwd:t1(Z.cwd),workspaceRoot:t1(Z.workspace_root),teamName:D1(Z.team_name),enableTools:h5(Z.enable_tools),enableSpawn:h5(Z.enable_spawn),enableTeams:h5(Z.enable_teams),parentSessionId:D1(Z.parent_session_id),parentAgentId:D1(Z.parent_agent_id),agentId:D1(Z.agent_id),conversationId:D1(Z.conversation_id),isSubagent:h5(Z.is_subagent),prompt:D1(Z.prompt),metadata:(()=>{let Q=D1(Z.metadata_json);if(!Q)return;try{let W=JSON.parse(Q);if(W&&typeof W==="object"&&!Array.isArray(W))return W}catch{}return})(),hookPath:D1(Z.hook_path),messagesPath:D1(Z.messages_path),updatedAt:D1(Z.updated_at)??lQ()}}list($=200){let Z=this.queryAll("SELECT session_id FROM sessions ORDER BY started_at DESC LIMIT ?",[$]),Q=[];for(let W of Z){let J=this.get(t1(W.session_id));if(J)Q.push(J)}return Q}delete($,Z=!1){let Q=this.run("DELETE FROM sessions WHERE session_id = ?",[$]).changes??0;if(Z)this.run("DELETE FROM sessions WHERE parent_session_id = ?",[$]);return Q>0}}J8();import{existsSync as YX,mkdirSync as
|
|
513
|
-
`,"utf8")}readSessionManifest($){return this.readManifestFile($).manifest}readManifestFile($){let Z=this.artifacts.sessionManifestPath($,!1);if(!
|
|
514
|
-
`;if(aF(oF(W),{recursive:!0}),sF(W,X,"utf8"),!this.messagesArtifactUploader)return;try{let Y=await this.adapter.getSession($);await this.messagesArtifactUploader.uploadMessagesFile({sessionId:$,path:W,contents:X,row:Y})}catch(Y){this.logger?.debug("Failed to upload persisted session messages",{sessionId:$,error:Y})}}appendStaleSessionHookLog($,Z,Q,W,J){let Y=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??
|
|
515
|
-
`,"utf8")}}import{appendFileSync as
|
|
516
|
-
`,"utf8")}}import{formatUserInputBlock as
|
|
512
|
+
FROM sessions WHERE session_id = ?`,[$]);if(!Z)return;return{sessionId:t1(Z.session_id),source:t1(Z.source),pid:Number(Z.pid??0),startedAt:t1(Z.started_at),endedAt:Z.ended_at??null,exitCode:Z.exit_code??null,status:t1(Z.status),interactive:h5(Z.interactive),provider:t1(Z.provider),model:t1(Z.model),cwd:t1(Z.cwd),workspaceRoot:t1(Z.workspace_root),teamName:D1(Z.team_name),enableTools:h5(Z.enable_tools),enableSpawn:h5(Z.enable_spawn),enableTeams:h5(Z.enable_teams),parentSessionId:D1(Z.parent_session_id),parentAgentId:D1(Z.parent_agent_id),agentId:D1(Z.agent_id),conversationId:D1(Z.conversation_id),isSubagent:h5(Z.is_subagent),prompt:D1(Z.prompt),metadata:(()=>{let Q=D1(Z.metadata_json);if(!Q)return;try{let W=JSON.parse(Q);if(W&&typeof W==="object"&&!Array.isArray(W))return W}catch{}return})(),hookPath:D1(Z.hook_path),messagesPath:D1(Z.messages_path),updatedAt:D1(Z.updated_at)??lQ()}}list($=200){let Z=this.queryAll("SELECT session_id FROM sessions ORDER BY started_at DESC LIMIT ?",[$]),Q=[];for(let W of Z){let J=this.get(t1(W.session_id));if(J)Q.push(J)}return Q}delete($,Z=!1){let Q=this.run("DELETE FROM sessions WHERE session_id = ?",[$]).changes??0;if(Z)this.run("DELETE FROM sessions WHERE parent_session_id = ?",[$]);return Q>0}}J8();import{existsSync as YX,mkdirSync as MS,readFileSync as BA,renameSync as RS,writeFileSync as ES}from"node:fs";import{join as GA}from"node:path";import{resolveSessionDataDir as NS}from"@cline/shared/storage";import{dirname as OS}from"node:path";import{nanoid as qS}from"nanoid";import{appendFileSync as pP,existsSync as rP,mkdirSync as aF,readFileSync as iP,writeFileSync as sF}from"node:fs";import{dirname as oF,join as nP}from"node:path";import{ensureHookLogDir as aP}from"@cline/shared/storage";class nJ{adapter;messagesArtifactUploader;logger;artifacts;constructor($,Z,Q){this.adapter=$;this.messagesArtifactUploader=Z;this.logger=Q;this.artifacts=new fJ(()=>this.ensureSessionsDir())}ensureSessionsDir(){return this.adapter.ensureSessionsDir()}initializeMessagesFile($,Z,Q){WG(Z,Q,h3($))}writeSessionManifest($,Z){aF(oF($),{recursive:!0}),sF($,`${JSON.stringify(b0.parse(Z),null,2)}
|
|
513
|
+
`,"utf8")}readSessionManifest($){return this.readManifestFile($).manifest}readManifestFile($){let Z=this.artifacts.sessionManifestPath($,!1);if(!rP(Z))return{path:Z};try{return{path:Z,manifest:b0.parse(JSON.parse(iP(Z,"utf8")))}}catch{return{path:Z}}}async resolveArtifactPath($,Z,Q){let J=(await this.adapter.getSession($))?.[Z];return typeof J==="string"&&J.trim().length>0?J:Q($)}async persistSessionMessages($,Z,Q){let W=await this.resolveArtifactPath($,"messagesPath",(Y)=>this.artifacts.sessionMessagesPath(Y)),J=k3({updatedAt:J0(),context:h3($),messages:Z,systemPrompt:Q}),X=`${JSON.stringify(J,null,2)}
|
|
514
|
+
`;if(aF(oF(W),{recursive:!0}),sF(W,X,"utf8"),!this.messagesArtifactUploader)return;try{let Y=await this.adapter.getSession($);await this.messagesArtifactUploader.uploadMessagesFile({sessionId:$,path:W,contents:X,row:Y})}catch(Y){this.logger?.debug("Failed to upload persisted session messages",{sessionId:$,error:Y})}}appendStaleSessionHookLog($,Z,Q,W,J){let Y=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??nP(aP(),"hooks.jsonl");pP(Y,`${JSON.stringify({ts:$,hookName:"session_shutdown",reason:W,sessionId:Z,pid:Q,source:J})}
|
|
515
|
+
`,"utf8")}}import{appendFileSync as sP}from"node:fs";import{join as oP}from"node:path";import{resolveRootSessionId as tF}from"@cline/shared";import{ensureHookLogDir as tP}from"@cline/shared/storage";import{z as aJ}from"zod";var eP="subagent",$S=aJ.looseObject({task:aJ.string().optional(),systemPrompt:aJ.string().optional()});class pQ{adapter;manifestStore;toPersistedMessages;heartbeatLogIntervalMs;teamTaskSessionsByAgent=new Map;teamTaskLastHeartbeatBySession=new Map;teamTaskLastProgressLineBySession=new Map;constructor($,Z,Q,W){this.adapter=$;this.manifestStore=Z;this.toPersistedMessages=Q;this.heartbeatLogIntervalMs=W}teamTaskQueueKey($,Z){return`${$}::${Z}`}activeTeamTaskSessionId($,Z){return this.teamTaskSessionsByAgent.get(this.teamTaskQueueKey($,Z))?.at(-1)}buildSubsessionRow($,Z){return{sessionId:Z.sessionId,source:eP,pid:process.ppid,startedAt:Z.startedAt,endedAt:null,exitCode:null,status:"running",statusLock:0,interactive:!1,provider:$.provider,model:$.model,cwd:$.cwd,workspaceRoot:$.workspaceRoot,teamName:$.teamName??null,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,parentSessionId:Z.parentSessionId,parentAgentId:Z.parentAgentId,agentId:Z.agentId,conversationId:Z.conversationId??null,isSubagent:!0,prompt:Z.prompt,metadata:c6({prompt:Z.prompt}),hookPath:"",messagesPath:Z.messagesPath,updatedAt:Z.startedAt}}async queueSpawnRequest($){if($.hookName!=="tool_call"||$.parent_agent_id!==null)return;if($.tool_call?.name!=="spawn_agent")return;let Z=tF($.sessionContext);if(!Z)return;let Q=$S.safeParse($.tool_call.input);await this.adapter.enqueueSpawnRequest({rootSessionId:Z,parentAgentId:$.agent_id,task:Q.success?Q.data.task:void 0,systemPrompt:Q.success?Q.data.systemPrompt:void 0})}async upsertSubagentSession($){let Z=$.rootSessionId;if(!Z)return;let Q=await this.adapter.getSession(Z);if(!Q)return;let W=C8(Z,$.agentId),J=await this.adapter.getSession(W),X=J0(),Y=this.manifestStore.artifacts.subagentArtifactPaths(W,$.agentId,this.activeTeamTaskSessionId(Z,$.parentAgentId)),j=$.prompt??J?.prompt??void 0;if(!j)j=await this.adapter.claimSpawnRequest(Z,$.parentAgentId)??`Subagent run by ${$.parentAgentId}`;if(!J)return await this.adapter.upsertSession(this.buildSubsessionRow(Q,{sessionId:W,parentSessionId:Z,parentAgentId:$.parentAgentId,agentId:$.agentId,conversationId:$.conversationId,prompt:j,startedAt:X,...Y})),this.manifestStore.initializeMessagesFile(W,Y.messagesPath,X),W;return await this.adapter.updateSession({sessionId:W,setRunning:!0,parentSessionId:Z,parentAgentId:$.parentAgentId,agentId:$.agentId,conversationId:$.conversationId,prompt:J.prompt??j??null,metadata:c6({metadata:J.metadata??void 0,prompt:J.prompt??j??null}),expectedStatusLock:J.statusLock}),W}async upsertSubagentSessionFromHook($){if(!$.parent_agent_id)return;let Z=tF($.sessionContext);if(!Z)return;if($.hookName==="session_shutdown"){let Q=C8(Z,$.agent_id);return await this.adapter.getSession(Q)?Q:void 0}return await this.upsertSubagentSession({agentId:$.agent_id,parentAgentId:$.parent_agent_id,conversationId:$.taskId,rootSessionId:Z})}async applySubagentStatus($,Z){await this.applySubagentStatusBySessionId($,g6(Z))}async applySubagentStatusBySessionId($,Z){let Q=await this.adapter.getSession($);if(!Q)return;let W=H0(Z)?null:J0(),J=H0(Z)?null:Z==="failed"?1:0;await this.adapter.updateSession({sessionId:$,status:Z,endedAt:W,exitCode:J,expectedStatusLock:Q.statusLock})}async applyStatusToRunningChildSessions($,Z){if(!$)return;let Q=await this.adapter.listSessions({limit:2000,parentSessionId:$,status:"running"});for(let W of Q)await this.applySubagentStatusBySessionId(W.sessionId,Z)}async onTeamTaskStart($,Z,Q){let W=await this.adapter.getSession($);if(!W)return;let J=I6($,Z),X=J0(),{messagesPath:Y}=this.manifestStore.artifacts.subagentArtifactPaths(J,Z);await this.adapter.upsertSession(this.buildSubsessionRow(W,{sessionId:J,parentSessionId:$,parentAgentId:"lead",agentId:Z,prompt:Q||`Team task for ${Z}`,startedAt:X,messagesPath:Y})),this.manifestStore.initializeMessagesFile(J,Y,X);let j=this.teamTaskQueueKey($,Z),V=this.teamTaskSessionsByAgent.get(j)??[];V.push(J),this.teamTaskSessionsByAgent.set(j,V)}async onTeamTaskEnd($,Z,Q,W,J,X){let Y=this.teamTaskQueueKey($,Z),j=this.teamTaskSessionsByAgent.get(Y);if(!j||j.length===0)return;let V=j.shift();if(j.length===0)this.teamTaskSessionsByAgent.delete(Y);if(!V)return;let H=J?.messages??X,B=this.toPersistedMessages(H,J,X);if(B)await this.manifestStore.persistSessionMessages(V,B);await this.applySubagentStatusBySessionId(V,Q),this.teamTaskLastHeartbeatBySession.delete(V),this.teamTaskLastProgressLineBySession.delete(V)}async onTeamTaskProgress($,Z,Q,W){let J=this.teamTaskQueueKey($,Z),X=this.teamTaskSessionsByAgent.get(J)?.[0];if(!X)return;let Y=Q.trim();if(!Y)return;let j=W?.kind??"progress";if(j==="heartbeat"){let H=Date.now(),B=this.teamTaskLastHeartbeatBySession.get(X)??0;if(H-B<this.heartbeatLogIntervalMs)return;this.teamTaskLastHeartbeatBySession.set(X,H)}let V=j==="heartbeat"?"[progress] heartbeat":j==="text"?`[progress] text: ${Y}`:`[progress] ${Y}`;if(this.teamTaskLastProgressLineBySession.get(X)===V)return;this.teamTaskLastProgressLineBySession.set(X,V)}async handleSubAgentStart($,Z){let Q=await this.upsertSubagentSession({agentId:Z.subAgentId,parentAgentId:Z.parentAgentId,conversationId:Z.conversationId,prompt:Z.input.task,rootSessionId:$});if(!Q)return;await this.applySubagentStatusBySessionId(Q,"running")}async handleSubAgentEnd($,Z){let Q=await this.upsertSubagentSession({agentId:Z.subAgentId,parentAgentId:Z.parentAgentId,conversationId:Z.conversationId,prompt:Z.input.task,rootSessionId:$});if(!Q)return;if(Z.error){await this.applySubagentStatusBySessionId(Q,"failed");return}let W=this.toPersistedMessages(Z.agentResult?.messages,Z.agentResult);if(W)await this.manifestStore.persistSessionMessages(Q,W);let J=Z.result?.finishReason??"completed";await this.applySubagentStatusBySessionId(Q,J==="aborted"?"cancelled":"completed")}appendSubagentHookAudit($){let Q=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??oP(tP(),"hooks.jsonl");sP(Q,`${JSON.stringify({ts:J0(),...$})}
|
|
516
|
+
`,"utf8")}}import{formatUserInputBlock as TS}from"@cline/shared";var HA={};N(HA,{toTeamProgressLifecycleEvent:()=>H4,sanitizeTeamName:()=>iB,reviveTeamStateDates:()=>SZ,parseConfiguredAgentConfig:()=>I5,loadConfiguredAgentConfigs:()=>Y4,createWorkerReviewerTeam:()=>VA,createSpawnAgentTool:()=>q$,createDelegatedAgentConfigProvider:()=>T$,createDelegatedAgent:()=>O$,createConfiguredAgentTools:()=>j4,createAgentTeamsTools:()=>A2,createAgentTeam:()=>tJ,buildTeamProgressSummary:()=>V4,buildDelegatedAgentConfig:()=>K2,buildConfiguredAgentToolName:()=>x5,buildConfiguredAgentToolDescriptors:()=>g5,bootstrapAgentTeams:()=>w8,AgentTeamsRuntime:()=>k2,AgentTeam:()=>G4});import{existsSync as ZS,readdirSync as QS,readFileSync as WS}from"node:fs";import{basename as eF,extname as JS,join as XS}from"node:path";import{resolveAgentConfigSearchPaths as YS}from"@cline/shared/storage";import ZA from"yaml";import{z as N0}from"zod";var QA=N0.object({name:N0.string().trim().min(1),description:N0.string().trim().min(1),tools:N0.union([N0.string(),N0.array(N0.string())]).optional(),skills:N0.union([N0.string(),N0.array(N0.string())]).optional(),providerId:N0.string().trim().min(1).optional(),modelId:N0.string().trim().min(1).optional(),maxIterations:N0.number().int().positive().optional()});function jS($){let Z=$.match(/^(---)[^\S\r\n]*(?:\r?\n|$)/);if(!Z)throw Error("Missing YAML frontmatter block in agent config file.");let Q=Z[0].length,W=/^---[^\S\r\n]*(?:\r?\n|$)/gm;W.lastIndex=Q;let J,X=Array.from($.matchAll(W)).filter((Y)=>Y.index>=Q);for(let Y of X){let j=Y.index,V=$.slice(Q,j);try{let H=ZA.parse(V);if(!H||typeof H!=="object"||Array.isArray(H))continue;QA.parse(H);let B=$.slice(j+Y[0].length);J={frontmatter:V,body:B}}catch{}}if(J)return J;throw Error("Missing closing YAML frontmatter delimiter in agent config file.")}function $A($){if($===void 0)return;let Z=Array.isArray($)?$:$.split(",");return Array.from(new Set(Z.map((Q)=>Q.trim()).filter((Q)=>Q.length>0)))}function VS($){return $.trim().toLowerCase()}function HS($){let Z=JS($).toLowerCase();return Z===".yml"||Z===".yaml"}function I5($,Z={}){let{frontmatter:Q,body:W}=jS($),J=ZA.parse(Q);if(!J||typeof J!=="object"||Array.isArray(J))throw Error("Agent config frontmatter must be a YAML mapping.");let X=QA.parse(J),Y=W.trim();if(!Y)throw Error("Missing system prompt body in agent config file.");return{name:X.name,description:X.description,tools:$A(X.tools),skills:$A(X.skills),providerId:X.providerId,modelId:X.modelId,maxIterations:X.maxIterations,systemPrompt:Y,path:Z.path}}function Y4($){let Z=$.searchPaths??YS($.workspaceRoot),Q=new Map,W=[];for(let X of Z.filter(Boolean)){if(!ZS(X))continue;let Y;try{Y=QS(X,{withFileTypes:!0})}catch(j){W.push({path:X,error:j instanceof Error?j:Error(String(j))});continue}for(let j of Y){if(!j.isFile()||!HS(j.name))continue;let V=XS(X,j.name);try{let H=WS(V,"utf8"),B=I5(H,{path:V}),G=VS(B.name);if(!Q.has(G))Q.set(G,B)}catch(H){W.push({path:V,error:H instanceof Error?H:Error(String(H))})}}}return{configs:Array.from(Q.values()).sort((X,Y)=>(X.path?eF(X.path):X.name).localeCompare(Y.path?eF(Y.path):Y.name)),errors:W}}import{createTool as BS,zodToJsonSchema as GS}from"@cline/shared";import{z as WA}from"zod";var sJ="subagent_",rQ=64,KS=WA.object({prompt:WA.string().trim().min(1).describe("Task for the subagent to perform")});function FS($){let Z="",Q=!0;for(let W of $.trim().toLowerCase()){let J=W.charCodeAt(0);if(!(J>=97&&J<=122||J>=48&&J<=57||W==="_")||W==="_"){if(!Q)Z+="_",Q=!0;continue}Z+=W,Q=!1}return Q?Z.slice(0,-1):Z}function AS($){let Z=2166136261;for(let Q=0;Q<$.length;Q++)Z^=$.charCodeAt(Q),Z=Math.imul(Z,16777619);return(Z>>>0).toString(36)}function x5($){let Z=FS($)||"agent",Q=AS($).slice(0,6),W=`${sJ}${Z}`;if(W.length<=rQ)return W;let J=rQ-sJ.length-Q.length-1,X=Z.slice(0,Math.max(1,J));return`${sJ}${X}_${Q}`.slice(0,rQ)}function g5($){let Z=new Set,Q=[];for(let W of[...$].sort((J,X)=>J.name.localeCompare(X.name))){let J=x5(W.name),X=J,Y=2;while(Z.has(X)){let j=`_${Y++}`,V=Math.max(1,rQ-j.length);X=`${J.slice(0,V)}${j}`}Z.add(X),Q.push({toolName:X,config:W})}return Q}function fS($,Z){return{...$,providerId:Z.providerId??$.providerId,modelId:Z.modelId??$.modelId,maxIterations:Z.maxIterations??$.maxIterations}}function j4($){return g5($.agents).map(({toolName:Z,config:Q})=>{return BS({name:Z,description:`Use the "${Q.name}" subagent: ${Q.description}`,inputSchema:GS(KS),execute:async(J,X)=>{let Y=$.configProvider.getRuntimeConfig(),j=T$(fS(Y,Q)),V=$.createSubAgentTools?await $.createSubAgentTools(Q,J,X):[],H=O$({kind:"subagent",prompt:Q.systemPrompt,configProvider:j,tools:V,maxIterations:Q.maxIterations,parentAgentId:X.agentId,abortSignal:X.signal,onEvent:$.onSubAgentEvent,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval}),B=H.getAgentId(),G=H.getConversationId(),K=X.agentId,F={systemPrompt:Q.systemPrompt,task:J.prompt};if($.onSubAgentStart)try{await $.onSubAgentStart({subAgentId:B,conversationId:G,parentAgentId:K,input:F})}catch{}try{let A=await H.run(J.prompt),L={text:A.text,iterations:A.iterations,finishReason:A.finishReason,usage:{inputTokens:A.usage.inputTokens,outputTokens:A.usage.outputTokens}};if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:B,conversationId:G,parentAgentId:K,input:F,result:L,agentResult:A})}catch{}return L}catch(A){if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:B,conversationId:G,parentAgentId:K,input:F,error:A instanceof Error?A:Error(String(A))})}catch{}throw A}},timeoutMs:300000,retryable:!1})})}function _1(){return new Date().toISOString()}function JA($,Z){if(Z<=0)return 0;return Math.round($/Z*100)}function US($,Z){let Q=new Set;for(let J of Z)if(J.status==="reviewed")Q.add(`${J.outcomeId}:${J.section}`);let W=new Set;for(let J of $){if(J.status==="finalized")continue;for(let X of J.requiredSections)if(!Q.has(`${J.id}:${X}`))W.add(`${J.id}:${X}`)}return[...W].sort((J,X)=>J.localeCompare(X))}function V4($,Z){let Q={idle:0,running:0,stopped:0},W={pending:0,in_progress:0,blocked:0,completed:0},J={queued:0,running:0,completed:0,failed:0,cancelled:0,interrupted:0},X={draft:0,in_review:0,finalized:0},Y={draft:0,reviewed:0,rejected:0},j=0,V=0;for(let f of Z.members)if(Q[f.status]+=1,f.role==="lead")j+=1;else V+=1;let H=[],B=[],G=Z.tasks.filter((f)=>f.status==="completed").length,K=new Map(Z.tasks.map((f)=>[f.id,f]));for(let f of Z.tasks){if(W[f.status]+=1,f.status==="blocked"){H.push(f.id);continue}if(f.status!=="pending")continue;if(f.dependsOn.every((U)=>{return K.get(U)?.status==="completed"}))B.push(f.id)}let F=[],A,L=0;for(let f of Z.runs){if(J[f.status]+=1,f.status==="queued"||f.status==="running")F.push(f.id);let D=f.startedAt.getTime();if(D>=L)L=D,A=f.id}for(let f of Z.outcomes)X[f.status]+=1;for(let f of Z.outcomeFragments)Y[f.status]+=1;return{teamName:$,updatedAt:_1(),members:{total:Z.members.length,byStatus:Q,leadCount:j,teammateCount:V},tasks:{total:Z.tasks.length,byStatus:W,blockedTaskIds:H,readyTaskIds:B,completionPct:JA(G,Z.tasks.length)},runs:{total:Z.runs.length,byStatus:J,activeRunIds:F,latestRunId:A},outcomes:{total:Z.outcomes.length,byStatus:X,finalizedPct:JA(X.finalized,Z.outcomes.length),missingRequiredSections:US(Z.outcomes,Z.outcomeFragments)},fragments:{total:Z.outcomeFragments.length,byStatus:Y}}}function H4($){let{event:Z}=$;switch(Z.type){case"team_task_updated":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:_1(),taskId:Z.task.id,agentId:Z.task.assignee??Z.task.createdBy};case"run_queued":case"run_started":case"run_completed":case"run_failed":case"run_cancelled":case"run_interrupted":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:_1(),runId:Z.run.id,taskId:Z.run.taskId,agentId:Z.run.agentId,message:Z.run.error};case"run_progress":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:_1(),runId:Z.run.id,taskId:Z.run.taskId,agentId:Z.run.agentId,message:Z.message};case"outcome_created":case"outcome_finalized":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:_1(),outcomeId:Z.outcome.id};case"outcome_fragment_attached":case"outcome_fragment_reviewed":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:_1(),outcomeId:Z.fragment.outcomeId,fragmentId:Z.fragment.id,agentId:Z.fragment.sourceAgentId};case"team_message":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:_1(),taskId:Z.message.taskId,agentId:Z.message.fromAgentId,message:Z.message.subject};case"team_mission_log":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:_1(),taskId:Z.entry.taskId,agentId:Z.entry.agentId,message:Z.entry.summary};case"teammate_spawned":case"teammate_shutdown":case"task_start":case"task_end":case"agent_event":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:_1(),agentId:Z.agentId}}return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:_1()}}import{sanitizeFileName as DS,TeamMessageType as I}from"@cline/shared";import{nanoid as LS}from"nanoid";import{TeamMessageType as wn}from"@cline/shared";function oJ($){if(typeof DOMException<"u"&&$ instanceof DOMException&&$.name==="AbortError")return!0;if(!($ instanceof Error))return!1;return $.name==="AbortError"||$.message.toLowerCase().includes("aborted")}function XA($,Z){return $?.status==="stopped"&&oJ(Z)}var _S=600000,YA="recovered_queued";function zS($){return`This is an automatic recovery of interrupted team run ${$.id}. The previous process stopped before completion. Continue the task safely, inspect the current workspace state before making changes, and avoid duplicating completed work.
|
|
517
517
|
|
|
518
518
|
${$.message}`}class G4{agents=new Map;configs=new Map;onTeamEvent;constructor($,Z){if(this.onTeamEvent=Z,$)for(let[Q,W]of Object.entries($))this.addAgent(Q,W)}addAgent($,Z){if(this.agents.has($))throw Error(`Agent with id "${$}" already exists in the team`);let Q={...Z,onEvent:(J)=>{Z.onEvent?.(J),this.emitEvent({type:I.AgentEvent,agentId:$,event:J})}},W=new z$(Q);if(Q.onEvent)W.subscribeEvents(Q.onEvent);this.agents.set($,W),this.configs.set($,Z)}removeAgent($){return this.configs.delete($),this.agents.delete($)}getAgent($){return this.agents.get($)}getAgentIds(){return Array.from(this.agents.keys())}get size(){return this.agents.size}async routeTo($,Z){let Q=this.agents.get($);if(!Q)throw Error(`Agent "${$}" not found in team`);this.emitEvent({type:I.TaskStart,agentId:$,message:Z});try{let W=await Q.run(Z);return this.emitEvent({type:I.TaskEnd,agentId:$,result:W}),W}catch(W){let J=W instanceof Error?W:Error(String(W));throw this.emitEvent({type:I.TaskEnd,agentId:$,error:J,messages:Q.getMessages()}),W}}async continueTo($,Z){let Q=this.agents.get($);if(!Q)throw Error(`Agent "${$}" not found in team`);this.emitEvent({type:I.TaskStart,agentId:$,message:Z});try{let W=await Q.continue(Z);return this.emitEvent({type:I.TaskEnd,agentId:$,result:W}),W}catch(W){let J=W instanceof Error?W:Error(String(W));throw this.emitEvent({type:I.TaskEnd,agentId:$,error:J,messages:Q.getMessages()}),W}}async runParallel($){let Z=$.map(async(Q)=>{let W=this.agents.get(Q.agentId);if(!W)return{agentId:Q.agentId,result:void 0,error:Error(`Agent "${Q.agentId}" not found in team`),metadata:Q.metadata};this.emitEvent({type:I.TaskStart,agentId:Q.agentId,message:Q.message});try{let J=await W.run(Q.message);return this.emitEvent({type:I.TaskEnd,agentId:Q.agentId,result:J}),{agentId:Q.agentId,result:J,metadata:Q.metadata}}catch(J){let X=J instanceof Error?J:Error(String(J));return this.emitEvent({type:I.TaskEnd,agentId:Q.agentId,error:X,messages:W.getMessages()}),{agentId:Q.agentId,result:void 0,error:X,metadata:Q.metadata}}});return Promise.all(Z)}async runSequential($){let Z=[];for(let Q of $){let W=this.agents.get(Q.agentId);if(!W){Z.push({agentId:Q.agentId,result:void 0,error:Error(`Agent "${Q.agentId}" not found in team`),metadata:Q.metadata});continue}this.emitEvent({type:I.TaskStart,agentId:Q.agentId,message:Q.message});try{let J=await W.run(Q.message);this.emitEvent({type:I.TaskEnd,agentId:Q.agentId,result:J}),Z.push({agentId:Q.agentId,result:J,metadata:Q.metadata})}catch(J){let X=J instanceof Error?J:Error(String(J));this.emitEvent({type:I.TaskEnd,agentId:Q.agentId,error:X,messages:W.getMessages()}),Z.push({agentId:Q.agentId,result:void 0,error:X,metadata:Q.metadata})}}return Z}async runPipeline($,Z,Q){let W=[],J=Z;for(let X of $){let Y=this.agents.get(X);if(!Y){W.push({agentId:X,result:void 0,error:Error(`Agent "${X}" not found in team`)});break}this.emitEvent({type:I.TaskStart,agentId:X,message:J});try{let j=await Y.run(J);this.emitEvent({type:I.TaskEnd,agentId:X,result:j}),W.push({agentId:X,result:j});let V=$.indexOf(X)+1;if(V<$.length){let H=$[V];J=Q?Q(j,H):`Previous agent output:
|
|
519
519
|
${j.text}
|
|
520
520
|
|
|
521
521
|
Please continue from here.`}}catch(j){let V=j instanceof Error?j:Error(String(j));this.emitEvent({type:I.TaskEnd,agentId:X,error:V,messages:Y.getMessages()}),W.push({agentId:X,result:void 0,error:V});break}}return W}abortAll(){for(let $ of this.agents.values())$.abort(Error("Agent team abortAll requested"))}clear(){this.abortAll(),this.agents.clear(),this.configs.clear()}emitEvent($){try{this.onTeamEvent?.($)}catch{}}}function tJ($,Z){return new G4($,Z)}function VA($){let Z=tJ({worker:$.worker,reviewer:$.reviewer}),Q=Z;return Q.doAndReview=async(W)=>{let J=await Z.routeTo("worker",W),X=await Z.routeTo("reviewer",`Please review this work:
|
|
522
522
|
|
|
523
|
-
${J.text}`);return{workerResult:J,reviewResult:X}},Q}class k2{teamId;teamName;onTeamEvent;members=new Map;tasks=new Map;missionLog=[];mailbox=[];missionStepCounter=0;taskCounter=0;messageCounter=0;missionCounter=0;runCounter=0;outcomeCounter=0;outcomeFragmentCounter=0;runs=new Map;runQueue=[];queuedRunDispatchTimer;outcomes=new Map;outcomeFragments=new Map;missionLogIntervalSteps;missionLogIntervalMs;maxConcurrentRuns;constructor($){this.teamName=$.teamName,this.teamId=`t_${
|
|
523
|
+
${J.text}`);return{workerResult:J,reviewResult:X}},Q}class k2{teamId;teamName;onTeamEvent;members=new Map;tasks=new Map;missionLog=[];mailbox=[];missionStepCounter=0;taskCounter=0;messageCounter=0;missionCounter=0;runCounter=0;outcomeCounter=0;outcomeFragmentCounter=0;runs=new Map;runQueue=[];queuedRunDispatchTimer;outcomes=new Map;outcomeFragments=new Map;missionLogIntervalSteps;missionLogIntervalMs;maxConcurrentRuns;constructor($){this.teamName=$.teamName,this.teamId=`t_${DS(LS(10))}`,this.onTeamEvent=$.onTeamEvent,this.missionLogIntervalSteps=Math.max(1,$.missionLogIntervalSteps??3),this.missionLogIntervalMs=Math.max(1000,$.missionLogIntervalMs??120000),this.maxConcurrentRuns=Math.max(1,$.maxConcurrentRuns??2);let Z=$.leadAgentId??"lead";this.members.set(Z,{agentId:Z,role:"lead",status:"idle",runningCount:0,lastMissionStep:0,lastMissionAt:Date.now()})}getTeamId(){return this.teamId}getTeamName(){return this.teamName}getMemberRole($){return this.members.get($)?.role}getMemberIds(){return Array.from(this.members.keys())}getTeammateIds(){return Array.from(this.members.values()).filter(($)=>$.role==="teammate").map(($)=>$.agentId)}getTask($){return this.tasks.get($)}listTasks(){return Array.from(this.tasks.values())}listTaskItems($){return Array.from(this.tasks.values()).map((Z)=>{let Q=this.getUnresolvedDependencies(Z);return{...Z,blockedBy:Q,isReady:Z.status==="pending"&&!Z.assignee&&Q.length===0}}).filter((Z)=>{if($?.status&&Z.status!==$.status)return!1;if($?.assignee&&Z.assignee!==$.assignee)return!1;return!0})}listMissionLog($){if(!$||$<=0)return[...this.missionLog];return this.missionLog.slice(Math.max(0,this.missionLog.length-$))}listMailbox($,Z){let Q=Z?.unreadOnly??!0,W=Z?.markRead??!0,J=Z?.limit,X=this.mailbox.filter((j)=>j.toAgentId===$&&(!Q||!j.readAt)),Y=typeof J==="number"&&J>0?X.slice(Math.max(0,X.length-J)):X;if(W){let j=new Date;for(let V of Y)if(!V.readAt)V.readAt=j}return Y.map((j)=>({...j}))}getSnapshot(){let $={pending:0,in_progress:0,blocked:0,completed:0};for(let Q of this.tasks.values())$[Q.status]++;let Z={draft:0,in_review:0,finalized:0};for(let Q of this.outcomes.values())Z[Q.status]++;return{teamId:this.teamId,teamName:this.teamName,members:Array.from(this.members.values()).map((Q)=>({agentId:Q.agentId,role:Q.role,description:Q.description,status:Q.status})),taskCounts:$,unreadMessages:this.mailbox.filter((Q)=>!Q.readAt).length,missionLogEntries:this.missionLog.length,activeRuns:Array.from(this.runs.values()).filter((Q)=>Q.status==="running").length,queuedRuns:Array.from(this.runs.values()).filter((Q)=>Q.status==="queued").length,outcomeCounts:Z}}exportState(){return{teamId:this.teamId,teamName:this.teamName,members:Array.from(this.members.values()).map(($)=>({agentId:$.agentId,role:$.role,description:$.description,status:$.status})),tasks:Array.from(this.tasks.values()).map(($)=>({...$})),mailbox:this.mailbox.map(($)=>({...$})),missionLog:this.missionLog.map(($)=>({...$})),runs:Array.from(this.runs.values()).map(($)=>({...$})),outcomes:Array.from(this.outcomes.values()).map(($)=>({...$})),outcomeFragments:Array.from(this.outcomeFragments.values()).map(($)=>({...$}))}}hydrateState($){this.clearQueuedRunDispatchTimer(),this.tasks.clear();for(let Q of $.tasks)this.tasks.set(Q.id,{...Q});this.mailbox.length=0,this.mailbox.push(...$.mailbox.map((Q)=>({...Q}))),this.missionLog.length=0,this.missionLog.push(...$.missionLog.map((Q)=>({...Q}))),this.runs.clear();for(let Q of $.runs??[])this.runs.set(Q.id,{...Q});this.runQueue.length=0,this.runQueue.push(...Array.from(this.runs.values()).filter((Q)=>Q.status==="queued").map((Q)=>Q.id)),this.outcomes.clear();for(let Q of $.outcomes??[])this.outcomes.set(Q.id,{...Q});this.outcomeFragments.clear();for(let Q of $.outcomeFragments??[])this.outcomeFragments.set(Q.id,{...Q});let Z=Array.from(this.members.values()).filter((Q)=>Q.role==="lead");this.members.clear();for(let Q of Z)this.members.set(Q.agentId,{...Q,status:"idle",runningCount:0,lastMissionStep:this.missionStepCounter,lastMissionAt:Date.now()});for(let Q of $.members){if(Q.role!=="teammate")continue;this.members.set(Q.agentId,{agentId:Q.agentId,role:"teammate",description:Q.description,status:"stopped",agent:void 0,runningCount:0,lastMissionStep:this.missionStepCounter,lastMissionAt:Date.now()})}this.taskCounter=Math.max(this.taskCounter,B4($.tasks.map((Q)=>Q.id),"task_")),this.messageCounter=Math.max(this.messageCounter,B4($.mailbox.map((Q)=>Q.id),"msg_")),this.missionCounter=Math.max(this.missionCounter,B4($.missionLog.map((Q)=>Q.id),"log_")),this.runCounter=Math.max(this.runCounter,B4(($.runs??[]).map((Q)=>Q.id),"run_")),this.outcomeCounter=Math.max(this.outcomeCounter,B4(($.outcomes??[]).map((Q)=>Q.id),"out_")),this.outcomeFragmentCounter=Math.max(this.outcomeFragmentCounter,B4(($.outcomeFragments??[]).map((Q)=>Q.id),"frag_"))}isTeammateActive($){let Z=this.members.get($);return!!Z&&Z.role==="teammate"&&!!Z.agent}spawnTeammate({agentId:$,config:Z}){let Q=this.members.get($);if(Q&&Q.role!=="teammate")throw Error(`Team member "${$}" already exists and is not a teammate`);if(Q&&Q.runningCount>0)throw Error(`Teammate "${$}" is currently running and cannot be respawned`);let W={...Z,apiTimeoutMs:_S,consumePendingUserMessage:()=>{let Y=this.members.get($);if(!Y||!Y.pendingSteerMessage)return;let j=Y.pendingSteerMessage;return Y.pendingSteerMessage=void 0,j},onEvent:(Y)=>{Z.onEvent?.(Y),this.emitEvent({type:I.AgentEvent,agentId:$,event:Y}),this.trackMeaningfulEvent($,Y)}},J=new z$(W);if(W.onEvent)J.subscribeEvents(W.onEvent);let X={agentId:$,role:"teammate",description:Z.role,status:"idle",agent:J,runningCount:0,lastMissionStep:0,lastMissionAt:Date.now()};return this.members.set($,X),this.emitEvent({type:I.TeammateSpawned,agentId:$,role:Z.role,teammate:{rolePrompt:Z.systemPrompt,modelId:Z.modelId,maxIterations:Z.maxIterations,runtimeAgentId:J.getAgentId(),conversationId:J.getConversationId(),parentAgentId:null}}),{agentId:X.agentId,role:X.role,description:X.description,status:X.status}}shutdownTeammate($,Z){let Q=this.members.get($);if(!Q||Q.role!=="teammate")throw Error(`Teammate "${$}" was not found`);try{Q.agent?.abort()}catch(W){if(!oJ(W))throw W}Q.status="stopped",this.emitEvent({type:I.TeammateShutdown,agentId:$,reason:Z})}updateTeammateConnections($){for(let Z of this.members.values()){if(Z.role!=="teammate"||!Z.agent)continue;Z.agent.updateConnection($)}}createTask($){let Z=`task_${String(++this.taskCounter).padStart(4,"0")}`,Q=new Date,W={id:Z,title:$.title,description:$.description,status:$.assignee?"in_progress":"pending",createdAt:Q,updatedAt:Q,createdBy:$.createdBy,assignee:$.assignee,dependsOn:$.dependsOn??[]};return this.tasks.set(Z,W),this.emitEvent({type:I.TeamTaskUpdated,task:{...W}}),{...W}}claimTask($,Z){let Q=this.requireTask($);return this.assertDependenciesResolved(Q),Q.status="in_progress",Q.assignee=Z,Q.updatedAt=new Date,this.emitEvent({type:I.TeamTaskUpdated,task:{...Q}}),this.appendMissionLog({agentId:Z,taskId:$,kind:"progress",summary:`Claimed task "${Q.title}"`}),{...Q}}blockTask($,Z,Q){let W=this.requireTask($);return W.status="blocked",W.updatedAt=new Date,W.summary=Q,this.emitEvent({type:I.TeamTaskUpdated,task:{...W}}),this.appendMissionLog({agentId:Z,taskId:$,kind:"blocked",summary:Q}),{...W}}completeTask($,Z,Q){let W=this.requireTask($);if(W.status="completed",W.updatedAt=new Date,W.summary=Q,!W.assignee)W.assignee=Z;return this.emitEvent({type:I.TeamTaskUpdated,task:{...W}}),this.appendMissionLog({agentId:Z,taskId:$,kind:"done",summary:Q}),{...W}}async routeToTeammate($,Z,Q){let W=this.members.get($);if(!W||W.role!=="teammate"||!W.agent)throw Error(`Teammate "${$}" was not found`);if(!W.agent.canStartRun())throw Error("Cannot start a new run while another run is already in progress");W.runningCount++,W.status="running",this.emitEvent({type:I.TaskStart,agentId:$,message:Z});try{let J=this.listMailbox($,{unreadOnly:!0,markRead:!0}),X=J.length>0?`${this.buildMailboxNotification(J)}
|
|
524
524
|
|
|
525
|
-
${Z}`:Z,Y=Q?.continueConversation?await W.agent.continue(X):await W.agent.run(X);return this.emitEvent({type:I.TaskEnd,agentId:$,result:Y}),this.recordProgressStep($,`Completed a delegated run (${Y.iterations} iterations)`,Q?.taskId,!0),Y}catch(J){let X=J instanceof Error?J:Error(String(J));if(this.emitEvent({type:I.TaskEnd,agentId:$,error:X,messages:W.agent.getMessages()}),!XA(W,X))this.appendMissionLog({agentId:$,taskId:Q?.taskId,kind:"error",summary:X.message});throw X}finally{if(W.runningCount--,W.runningCount<=0&&this.members.get($)?.status!=="stopped")W.status="idle"}}startTeammateRun($,Z,Q){let W=`run_${String(++this.runCounter).padStart(5,"0")}`,J={id:W,agentId:$,taskId:Q?.taskId,status:"queued",message:Z,priority:Q?.priority??0,retryCount:0,maxRetries:Math.max(0,Q?.maxRetries??0),continueConversation:Q?.continueConversation,startedAt:new Date(0),leaseOwner:Q?.leaseOwner,heartbeatAt:void 0,lastProgressAt:new Date,lastProgressMessage:"queued",currentActivity:"queued"};return this.runs.set(W,J),this.runQueue.push(W),this.emitEvent({type:I.RunQueued,run:{...J}}),this.dispatchQueuedRuns(),{...J}}dispatchQueuedRuns(){this.clearQueuedRunDispatchTimer();let $;while(this.countActiveRuns()<this.maxConcurrentRuns&&this.runQueue.length>0){let Z=this.selectNextDispatchableQueuedRun();$=Z.nextDelayedAttemptAt;let Q=Z.index;if(Q<0){this.scheduleQueuedRunDispatch($);return}let[W]=this.runQueue.splice(Q,1),J=W?this.runs.get(W):void 0;if(!J||J.status!=="queued")continue;this.executeQueuedRun(J)}this.scheduleQueuedRunDispatch($)}selectNextDispatchableQueuedRun(){let $=-1,Z=Number.NEGATIVE_INFINITY,Q,W=Date.now();for(let J=0;J<this.runQueue.length;J++){let X=this.runs.get(this.runQueue[J]);if(!X||X.status!=="queued")continue;if(X.nextAttemptAt&&X.nextAttemptAt.getTime()>W){if(!Q||X.nextAttemptAt<Q)Q=X.nextAttemptAt;continue}if(X.priority>Z)Z=X.priority,$=J}return{index:$,nextDelayedAttemptAt:Q}}scheduleQueuedRunDispatch($){if(!$)return;let Z=Math.max(0,$.getTime()-Date.now());this.queuedRunDispatchTimer=setTimeout(()=>{this.queuedRunDispatchTimer=void 0,this.dispatchQueuedRuns()},Z)}clearQueuedRunDispatchTimer(){if(!this.queuedRunDispatchTimer)return;clearTimeout(this.queuedRunDispatchTimer),this.queuedRunDispatchTimer=void 0}countActiveRuns(){let $=0;for(let Z of this.runs.values())if(Z.status==="running")$++;return $}async executeQueuedRun($){let Z=$.currentActivity===YA;$.nextAttemptAt=void 0,$.status="running",$.startedAt=new Date,$.heartbeatAt=new Date,$.currentActivity="run_started",this.emitEvent({type:I.RunStarted,run:{...$}});let Q=setInterval(()=>{if($.status!=="running")return;this.recordRunProgress($,"heartbeat")},2000);try{let W=Z?_S($):$.message,J=await this.routeToTeammate($.agentId,W,{taskId:$.taskId,continueConversation:$.continueConversation});$.status="completed",$.result=J,$.endedAt=new Date,$.currentActivity="completed",this.emitEvent({type:I.RunCompleted,run:{...$}})}catch(W){let J=W instanceof Error?W.message:String(W??"Unknown error");$.error=J,$.endedAt=new Date;let X=this.members.get($.agentId);if(XA(X,W))$.status="cancelled",$.currentActivity="cancelled",this.emitEvent({type:I.RunCancelled,run:{...$},reason:J});else if($.retryCount<$.maxRetries)$.retryCount++,$.status="queued",$.nextAttemptAt=new Date(Date.now()+Math.min(30000,1000*2**$.retryCount)),this.runQueue.push($.id),this.recordRunProgress($,`retry_scheduled_${$.retryCount}`);else $.status="failed",$.currentActivity="failed",this.emitEvent({type:I.RunFailed,run:{...$}})}finally{clearInterval(Q),this.dispatchQueuedRuns()}}listRuns($){let Z=$?.includeCompleted??!0;return Array.from(this.runs.values()).filter((Q)=>{if(!Z&&!["running","queued"].includes(Q.status))return!1;if($?.status&&Q.status!==$.status)return!1;if($?.agentId&&Q.agentId!==$.agentId)return!1;return!0}).map((Q)=>({...Q}))}getRun($){let Z=this.runs.get($);return Z?{...Z}:void 0}async awaitRun($,Z=250){let Q=this.runs.get($);if(!Q)throw Error(`Run "${$}" was not found`);while(Q.status==="queued"||Q.status==="running")await jA(Z);return{...Q}}async awaitAllRuns($=250){while(Array.from(this.runs.values()).some((Z)=>["queued","running"].includes(Z.status)))await jA($);return this.listRuns()}cancelRun($,Z){let Q=this.runs.get($);if(!Q)throw Error(`Run "${$}" was not found`);if(Q.status==="completed"||Q.status==="failed")return{...Q};Q.status="cancelled",Q.error=Z,Q.endedAt=new Date,Q.currentActivity="cancelled";let W=this.runQueue.indexOf($);if(W>=0)this.runQueue.splice(W,1);return this.emitEvent({type:I.RunCancelled,run:{...Q},reason:Z}),{...Q}}recoverActiveRuns($="runtime_recovered"){let Z=[];for(let Q of this.runs.values()){if(!["queued","running"].includes(Q.status))continue;let W=this.members.get(Q.agentId);if(!W||W.role!=="teammate"||!W.agent){Q.status="interrupted",Q.error="teammate_unavailable_after_recovery",Q.endedAt=new Date,Q.currentActivity="interrupted",this.emitEvent({type:I.RunInterrupted,run:{...Q},reason:Q.error});continue}let J=new Date;if(Q.status="queued",Q.error=void 0,Q.endedAt=void 0,Q.heartbeatAt=J,Q.lastProgressAt=J,Q.lastProgressMessage=$,Q.currentActivity=YA,!this.runQueue.includes(Q.id))this.runQueue.push(Q.id);Z.push({...Q}),this.emitEvent({type:I.RunQueued,run:{...Q}})}return this.dispatchQueuedRuns(),Z}markStaleRunsInterrupted($="runtime_recovered"){let Z=[];for(let Q of this.runs.values()){if(!["queued","running"].includes(Q.status))continue;Q.status="interrupted",Q.error=$,Q.endedAt=new Date,Q.currentActivity="interrupted",Z.push({...Q}),this.emitEvent({type:I.RunInterrupted,run:{...Q},reason:$})}return this.runQueue.length=0,this.clearQueuedRunDispatchTimer(),Z}sendMessage($,Z,Q,W,J){if(!this.members.has($))throw Error(`Unknown sender "${$}"`);let X=this.members.get(Z);if(!X)throw Error(`Unknown recipient "${Z}"`);let Y={id:`msg_${String(++this.messageCounter).padStart(5,"0")}`,teamId:this.teamId,fromAgentId:$,toAgentId:Z,subject:Q,body:W,taskId:J,sentAt:new Date};if(this.mailbox.push(Y),this.emitEvent({type:I.TeamMessage,message:{...Y}}),X.role==="teammate"&&X.runningCount>0&&X.agent)X.pendingSteerMessage=`[MAILBOX] You got a message from ${$}. Subject: "${Q}". Use the team_read_mailbox tool to read it at your convenience.`;return{...Y}}broadcast($,Z,Q,W){let J=[];for(let X of this.members.values()){if(X.agentId===$)continue;if(X.role==="lead")continue;J.push(this.sendMessage($,X.agentId,Z,Q,W?.taskId))}return J}appendMissionLog($){if(!this.members.has($.agentId))throw Error(`Unknown team member "${$.agentId}"`);let Z={id:`log_${String(++this.missionCounter).padStart(6,"0")}`,ts:new Date,teamId:this.teamId,agentId:$.agentId,taskId:$.taskId,kind:$.kind,summary:$.summary,evidence:$.evidence,nextAction:$.nextAction};this.missionLog.push(Z);let Q=this.members.get($.agentId);if(Q)Q.lastMissionAt=Date.now(),Q.lastMissionStep=this.missionStepCounter;return this.emitEvent({type:I.TeamMissionLog,entry:{...Z}}),{...Z}}createOutcome($){let Z={id:`out_${String(++this.outcomeCounter).padStart(4,"0")}`,teamId:this.teamId,title:$.title,status:"draft",requiredSections:[...new Set($.requiredSections)],createdBy:$.createdBy,createdAt:new Date};return this.outcomes.set(Z.id,Z),this.emitEvent({type:I.OutcomeCreated,outcome:{...Z}}),{...Z}}listOutcomes(){return Array.from(this.outcomes.values()).map(($)=>({...$}))}attachOutcomeFragment($){let Z=this.outcomes.get($.outcomeId);if(!Z)throw Error(`Outcome "${$.outcomeId}" was not found`);if(!Z.requiredSections.includes($.section))throw Error(`Section "${$.section}" is not part of outcome "${$.outcomeId}"`);let Q={id:`frag_${String(++this.outcomeFragmentCounter).padStart(5,"0")}`,teamId:this.teamId,outcomeId:$.outcomeId,section:$.section,sourceAgentId:$.sourceAgentId,sourceRunId:$.sourceRunId,content:$.content,status:"draft",createdAt:new Date};if(this.outcomeFragments.set(Q.id,Q),Z.status==="draft")Z.status="in_review";return this.emitEvent({type:I.OutcomeFragmentAttached,fragment:{...Q}}),{...Q}}reviewOutcomeFragment($){let Z=this.outcomeFragments.get($.fragmentId);if(!Z)throw Error(`Fragment "${$.fragmentId}" was not found`);return Z.status=$.approved?"reviewed":"rejected",Z.reviewedBy=$.reviewedBy,Z.reviewedAt=new Date,this.emitEvent({type:I.OutcomeFragmentReviewed,fragment:{...Z}}),{...Z}}listOutcomeFragments($){return Array.from(this.outcomeFragments.values()).filter((Z)=>Z.outcomeId===$).map((Z)=>({...Z}))}finalizeOutcome($){let Z=this.outcomes.get($);if(!Z)throw Error(`Outcome "${$}" was not found`);let Q=this.listOutcomeFragments($);for(let W of Z.requiredSections)if(!Q.some((X)=>X.section===W&&X.status==="reviewed"))throw Error(`Outcome "${$}" cannot be finalized. Section "${W}" is missing a reviewed fragment.`);return Z.status="finalized",Z.finalizedAt=new Date,this.emitEvent({type:I.OutcomeFinalized,outcome:{...Z}}),{...Z}}cleanup(){for(let $ of this.members.values())if($.role==="teammate"&&$.runningCount>0)throw Error(`Cannot cleanup team while teammate "${$.agentId}" is still running`);if(Array.from(this.runs.values()).some(($)=>["queued","running"].includes($.status)))throw Error("Cannot cleanup team while async teammate runs are still active");for(let $ of this.members.values())if($.role==="teammate")try{$.agent?.abort()}catch(Z){if(!oJ(Z))throw Z}this.tasks.clear(),this.mailbox.length=0,this.missionLog.length=0,this.runs.clear(),this.runQueue.length=0,this.clearQueuedRunDispatchTimer(),this.outcomes.clear(),this.outcomeFragments.clear();for(let[$,Z]of this.members.entries())if(Z.role==="teammate")this.members.delete($)}requireTask($){let Z=this.tasks.get($);if(!Z)throw Error(`Task "${$}" was not found`);return Z}assertDependenciesResolved($){let Z=this.getUnresolvedDependencies($);if(Z.length>0)throw Error(`Task "${$.id}" is blocked by "${Z[0]}"`)}getUnresolvedDependencies($){return $.dependsOn.filter((Z)=>{let Q=this.tasks.get(Z);return!Q||Q.status!=="completed"})}trackMeaningfulEvent($,Z){if(this.recordRunActivityFromAgentEvent($,Z),Z.type==="iteration_end"&&Z.hadToolCalls){this.recordProgressStep($,`Completed iteration ${Z.iteration} with ${Z.toolCallCount} tool call(s)`);return}if(Z.type==="content_end"&&Z.contentType==="tool"&&!Z.error){this.recordProgressStep($,`Finished tool "${Z.toolName??"unknown"}"`);return}if(Z.type==="done"){this.appendMissionLog({agentId:$,kind:"done",summary:`Completed a delegated run (${Z.iterations} iterations)`});return}if(Z.type==="error")this.appendMissionLog({agentId:$,kind:"error",summary:Z.error.message})}recordRunActivityFromAgentEvent($,Z){let Q;switch(Z.type){case"iteration_start":Q=`iteration_${Z.iteration}_started`;break;case"content_start":if(Z.contentType==="tool")Q=`running_tool_${Z.toolName??"unknown"}`;break;case"content_end":if(Z.contentType==="tool")Q=Z.error?this.formatProgressErrorActivity(`tool_${Z.toolName??"unknown"}_error`,Z.error):`finished_tool_${Z.toolName??"unknown"}`;break;case"done":Q="finalizing_response";break;case"error":Q=this.formatProgressErrorActivity("run_error",Z.error.message);break;default:break}if(!Q)return;for(let W of this.runs.values()){if(W.agentId!==$||W.status!=="running")continue;this.recordRunProgress(W,Q)}}recordRunProgress($,Z){let Q=new Date;$.heartbeatAt=Q,$.lastProgressAt=Q,$.lastProgressMessage=Z,$.currentActivity=Z,this.emitEvent({type:I.RunProgress,run:{...$},message:Z})}formatProgressErrorActivity($,Z){let Q=Z.replace(/\s+/g," ").trim();if(Q.length===0)return $;let W=Q.length>240?`${Q.slice(0,237).trimEnd()}...`:Q;return`${$}: ${W}`}recordProgressStep($,Z,Q,W=!1){this.missionStepCounter++;let J=this.members.get($);if(!J)return;let X=this.missionStepCounter-J.lastMissionStep,Y=Date.now()-J.lastMissionAt;if(!W&&X<this.missionLogIntervalSteps&&Y<this.missionLogIntervalMs)return;this.appendMissionLog({agentId:$,taskId:Q,kind:"progress",summary:Z})}buildMailboxNotification($){if($.length===0)return"";let Z=[`[MAILBOX] You have ${$.length} unread message(s):`];for(let Q of $)Z.push(`--- Message from ${Q.fromAgentId} | subject: ${Q.subject} ---`),Z.push(Q.body);return Z.push("---"),Z.join(`
|
|
525
|
+
${Z}`:Z,Y=Q?.continueConversation?await W.agent.continue(X):await W.agent.run(X);return this.emitEvent({type:I.TaskEnd,agentId:$,result:Y}),this.recordProgressStep($,`Completed a delegated run (${Y.iterations} iterations)`,Q?.taskId,!0),Y}catch(J){let X=J instanceof Error?J:Error(String(J));if(this.emitEvent({type:I.TaskEnd,agentId:$,error:X,messages:W.agent.getMessages()}),!XA(W,X))this.appendMissionLog({agentId:$,taskId:Q?.taskId,kind:"error",summary:X.message});throw X}finally{if(W.runningCount--,W.runningCount<=0&&this.members.get($)?.status!=="stopped")W.status="idle"}}startTeammateRun($,Z,Q){let W=`run_${String(++this.runCounter).padStart(5,"0")}`,J={id:W,agentId:$,taskId:Q?.taskId,status:"queued",message:Z,priority:Q?.priority??0,retryCount:0,maxRetries:Math.max(0,Q?.maxRetries??0),continueConversation:Q?.continueConversation,startedAt:new Date(0),leaseOwner:Q?.leaseOwner,heartbeatAt:void 0,lastProgressAt:new Date,lastProgressMessage:"queued",currentActivity:"queued"};return this.runs.set(W,J),this.runQueue.push(W),this.emitEvent({type:I.RunQueued,run:{...J}}),this.dispatchQueuedRuns(),{...J}}dispatchQueuedRuns(){this.clearQueuedRunDispatchTimer();let $;while(this.countActiveRuns()<this.maxConcurrentRuns&&this.runQueue.length>0){let Z=this.selectNextDispatchableQueuedRun();$=Z.nextDelayedAttemptAt;let Q=Z.index;if(Q<0){this.scheduleQueuedRunDispatch($);return}let[W]=this.runQueue.splice(Q,1),J=W?this.runs.get(W):void 0;if(!J||J.status!=="queued")continue;this.executeQueuedRun(J)}this.scheduleQueuedRunDispatch($)}selectNextDispatchableQueuedRun(){let $=-1,Z=Number.NEGATIVE_INFINITY,Q,W=Date.now();for(let J=0;J<this.runQueue.length;J++){let X=this.runs.get(this.runQueue[J]);if(!X||X.status!=="queued")continue;if(X.nextAttemptAt&&X.nextAttemptAt.getTime()>W){if(!Q||X.nextAttemptAt<Q)Q=X.nextAttemptAt;continue}if(X.priority>Z)Z=X.priority,$=J}return{index:$,nextDelayedAttemptAt:Q}}scheduleQueuedRunDispatch($){if(!$)return;let Z=Math.max(0,$.getTime()-Date.now());this.queuedRunDispatchTimer=setTimeout(()=>{this.queuedRunDispatchTimer=void 0,this.dispatchQueuedRuns()},Z)}clearQueuedRunDispatchTimer(){if(!this.queuedRunDispatchTimer)return;clearTimeout(this.queuedRunDispatchTimer),this.queuedRunDispatchTimer=void 0}countActiveRuns(){let $=0;for(let Z of this.runs.values())if(Z.status==="running")$++;return $}async executeQueuedRun($){let Z=$.currentActivity===YA;$.nextAttemptAt=void 0,$.status="running",$.startedAt=new Date,$.heartbeatAt=new Date,$.currentActivity="run_started",this.emitEvent({type:I.RunStarted,run:{...$}});let Q=setInterval(()=>{if($.status!=="running")return;this.recordRunProgress($,"heartbeat")},2000);try{let W=Z?zS($):$.message,J=await this.routeToTeammate($.agentId,W,{taskId:$.taskId,continueConversation:$.continueConversation});$.status="completed",$.result=J,$.endedAt=new Date,$.currentActivity="completed",this.emitEvent({type:I.RunCompleted,run:{...$}})}catch(W){let J=W instanceof Error?W.message:String(W??"Unknown error");$.error=J,$.endedAt=new Date;let X=this.members.get($.agentId);if(XA(X,W))$.status="cancelled",$.currentActivity="cancelled",this.emitEvent({type:I.RunCancelled,run:{...$},reason:J});else if($.retryCount<$.maxRetries)$.retryCount++,$.status="queued",$.nextAttemptAt=new Date(Date.now()+Math.min(30000,1000*2**$.retryCount)),this.runQueue.push($.id),this.recordRunProgress($,`retry_scheduled_${$.retryCount}`);else $.status="failed",$.currentActivity="failed",this.emitEvent({type:I.RunFailed,run:{...$}})}finally{clearInterval(Q),this.dispatchQueuedRuns()}}listRuns($){let Z=$?.includeCompleted??!0;return Array.from(this.runs.values()).filter((Q)=>{if(!Z&&!["running","queued"].includes(Q.status))return!1;if($?.status&&Q.status!==$.status)return!1;if($?.agentId&&Q.agentId!==$.agentId)return!1;return!0}).map((Q)=>({...Q}))}getRun($){let Z=this.runs.get($);return Z?{...Z}:void 0}async awaitRun($,Z=250){let Q=this.runs.get($);if(!Q)throw Error(`Run "${$}" was not found`);while(Q.status==="queued"||Q.status==="running")await jA(Z);return{...Q}}async awaitAllRuns($=250){while(Array.from(this.runs.values()).some((Z)=>["queued","running"].includes(Z.status)))await jA($);return this.listRuns()}cancelRun($,Z){let Q=this.runs.get($);if(!Q)throw Error(`Run "${$}" was not found`);if(Q.status==="completed"||Q.status==="failed")return{...Q};Q.status="cancelled",Q.error=Z,Q.endedAt=new Date,Q.currentActivity="cancelled";let W=this.runQueue.indexOf($);if(W>=0)this.runQueue.splice(W,1);return this.emitEvent({type:I.RunCancelled,run:{...Q},reason:Z}),{...Q}}recoverActiveRuns($="runtime_recovered"){let Z=[];for(let Q of this.runs.values()){if(!["queued","running"].includes(Q.status))continue;let W=this.members.get(Q.agentId);if(!W||W.role!=="teammate"||!W.agent){Q.status="interrupted",Q.error="teammate_unavailable_after_recovery",Q.endedAt=new Date,Q.currentActivity="interrupted",this.emitEvent({type:I.RunInterrupted,run:{...Q},reason:Q.error});continue}let J=new Date;if(Q.status="queued",Q.error=void 0,Q.endedAt=void 0,Q.heartbeatAt=J,Q.lastProgressAt=J,Q.lastProgressMessage=$,Q.currentActivity=YA,!this.runQueue.includes(Q.id))this.runQueue.push(Q.id);Z.push({...Q}),this.emitEvent({type:I.RunQueued,run:{...Q}})}return this.dispatchQueuedRuns(),Z}markStaleRunsInterrupted($="runtime_recovered"){let Z=[];for(let Q of this.runs.values()){if(!["queued","running"].includes(Q.status))continue;Q.status="interrupted",Q.error=$,Q.endedAt=new Date,Q.currentActivity="interrupted",Z.push({...Q}),this.emitEvent({type:I.RunInterrupted,run:{...Q},reason:$})}return this.runQueue.length=0,this.clearQueuedRunDispatchTimer(),Z}sendMessage($,Z,Q,W,J){if(!this.members.has($))throw Error(`Unknown sender "${$}"`);let X=this.members.get(Z);if(!X)throw Error(`Unknown recipient "${Z}"`);let Y={id:`msg_${String(++this.messageCounter).padStart(5,"0")}`,teamId:this.teamId,fromAgentId:$,toAgentId:Z,subject:Q,body:W,taskId:J,sentAt:new Date};if(this.mailbox.push(Y),this.emitEvent({type:I.TeamMessage,message:{...Y}}),X.role==="teammate"&&X.runningCount>0&&X.agent)X.pendingSteerMessage=`[MAILBOX] You got a message from ${$}. Subject: "${Q}". Use the team_read_mailbox tool to read it at your convenience.`;return{...Y}}broadcast($,Z,Q,W){let J=[];for(let X of this.members.values()){if(X.agentId===$)continue;if(X.role==="lead")continue;J.push(this.sendMessage($,X.agentId,Z,Q,W?.taskId))}return J}appendMissionLog($){if(!this.members.has($.agentId))throw Error(`Unknown team member "${$.agentId}"`);let Z={id:`log_${String(++this.missionCounter).padStart(6,"0")}`,ts:new Date,teamId:this.teamId,agentId:$.agentId,taskId:$.taskId,kind:$.kind,summary:$.summary,evidence:$.evidence,nextAction:$.nextAction};this.missionLog.push(Z);let Q=this.members.get($.agentId);if(Q)Q.lastMissionAt=Date.now(),Q.lastMissionStep=this.missionStepCounter;return this.emitEvent({type:I.TeamMissionLog,entry:{...Z}}),{...Z}}createOutcome($){let Z={id:`out_${String(++this.outcomeCounter).padStart(4,"0")}`,teamId:this.teamId,title:$.title,status:"draft",requiredSections:[...new Set($.requiredSections)],createdBy:$.createdBy,createdAt:new Date};return this.outcomes.set(Z.id,Z),this.emitEvent({type:I.OutcomeCreated,outcome:{...Z}}),{...Z}}listOutcomes(){return Array.from(this.outcomes.values()).map(($)=>({...$}))}attachOutcomeFragment($){let Z=this.outcomes.get($.outcomeId);if(!Z)throw Error(`Outcome "${$.outcomeId}" was not found`);if(!Z.requiredSections.includes($.section))throw Error(`Section "${$.section}" is not part of outcome "${$.outcomeId}"`);let Q={id:`frag_${String(++this.outcomeFragmentCounter).padStart(5,"0")}`,teamId:this.teamId,outcomeId:$.outcomeId,section:$.section,sourceAgentId:$.sourceAgentId,sourceRunId:$.sourceRunId,content:$.content,status:"draft",createdAt:new Date};if(this.outcomeFragments.set(Q.id,Q),Z.status==="draft")Z.status="in_review";return this.emitEvent({type:I.OutcomeFragmentAttached,fragment:{...Q}}),{...Q}}reviewOutcomeFragment($){let Z=this.outcomeFragments.get($.fragmentId);if(!Z)throw Error(`Fragment "${$.fragmentId}" was not found`);return Z.status=$.approved?"reviewed":"rejected",Z.reviewedBy=$.reviewedBy,Z.reviewedAt=new Date,this.emitEvent({type:I.OutcomeFragmentReviewed,fragment:{...Z}}),{...Z}}listOutcomeFragments($){return Array.from(this.outcomeFragments.values()).filter((Z)=>Z.outcomeId===$).map((Z)=>({...Z}))}finalizeOutcome($){let Z=this.outcomes.get($);if(!Z)throw Error(`Outcome "${$}" was not found`);let Q=this.listOutcomeFragments($);for(let W of Z.requiredSections)if(!Q.some((X)=>X.section===W&&X.status==="reviewed"))throw Error(`Outcome "${$}" cannot be finalized. Section "${W}" is missing a reviewed fragment.`);return Z.status="finalized",Z.finalizedAt=new Date,this.emitEvent({type:I.OutcomeFinalized,outcome:{...Z}}),{...Z}}cleanup(){for(let $ of this.members.values())if($.role==="teammate"&&$.runningCount>0)throw Error(`Cannot cleanup team while teammate "${$.agentId}" is still running`);if(Array.from(this.runs.values()).some(($)=>["queued","running"].includes($.status)))throw Error("Cannot cleanup team while async teammate runs are still active");for(let $ of this.members.values())if($.role==="teammate")try{$.agent?.abort()}catch(Z){if(!oJ(Z))throw Z}this.tasks.clear(),this.mailbox.length=0,this.missionLog.length=0,this.runs.clear(),this.runQueue.length=0,this.clearQueuedRunDispatchTimer(),this.outcomes.clear(),this.outcomeFragments.clear();for(let[$,Z]of this.members.entries())if(Z.role==="teammate")this.members.delete($)}requireTask($){let Z=this.tasks.get($);if(!Z)throw Error(`Task "${$}" was not found`);return Z}assertDependenciesResolved($){let Z=this.getUnresolvedDependencies($);if(Z.length>0)throw Error(`Task "${$.id}" is blocked by "${Z[0]}"`)}getUnresolvedDependencies($){return $.dependsOn.filter((Z)=>{let Q=this.tasks.get(Z);return!Q||Q.status!=="completed"})}trackMeaningfulEvent($,Z){if(this.recordRunActivityFromAgentEvent($,Z),Z.type==="iteration_end"&&Z.hadToolCalls){this.recordProgressStep($,`Completed iteration ${Z.iteration} with ${Z.toolCallCount} tool call(s)`);return}if(Z.type==="content_end"&&Z.contentType==="tool"&&!Z.error){this.recordProgressStep($,`Finished tool "${Z.toolName??"unknown"}"`);return}if(Z.type==="done"){this.appendMissionLog({agentId:$,kind:"done",summary:`Completed a delegated run (${Z.iterations} iterations)`});return}if(Z.type==="error")this.appendMissionLog({agentId:$,kind:"error",summary:Z.error.message})}recordRunActivityFromAgentEvent($,Z){let Q;switch(Z.type){case"iteration_start":Q=`iteration_${Z.iteration}_started`;break;case"content_start":if(Z.contentType==="tool")Q=`running_tool_${Z.toolName??"unknown"}`;break;case"content_end":if(Z.contentType==="tool")Q=Z.error?this.formatProgressErrorActivity(`tool_${Z.toolName??"unknown"}_error`,Z.error):`finished_tool_${Z.toolName??"unknown"}`;break;case"done":Q="finalizing_response";break;case"error":Q=this.formatProgressErrorActivity("run_error",Z.error.message);break;default:break}if(!Q)return;for(let W of this.runs.values()){if(W.agentId!==$||W.status!=="running")continue;this.recordRunProgress(W,Q)}}recordRunProgress($,Z){let Q=new Date;$.heartbeatAt=Q,$.lastProgressAt=Q,$.lastProgressMessage=Z,$.currentActivity=Z,this.emitEvent({type:I.RunProgress,run:{...$},message:Z})}formatProgressErrorActivity($,Z){let Q=Z.replace(/\s+/g," ").trim();if(Q.length===0)return $;let W=Q.length>240?`${Q.slice(0,237).trimEnd()}...`:Q;return`${$}: ${W}`}recordProgressStep($,Z,Q,W=!1){this.missionStepCounter++;let J=this.members.get($);if(!J)return;let X=this.missionStepCounter-J.lastMissionStep,Y=Date.now()-J.lastMissionAt;if(!W&&X<this.missionLogIntervalSteps&&Y<this.missionLogIntervalMs)return;this.appendMissionLog({agentId:$,taskId:Q,kind:"progress",summary:Z})}buildMailboxNotification($){if($.length===0)return"";let Z=[`[MAILBOX] You have ${$.length} unread message(s):`];for(let Q of $)Z.push(`--- Message from ${Q.fromAgentId} | subject: ${Q.subject} ---`),Z.push(Q.body);return Z.push("---"),Z.join(`
|
|
526
526
|
`)}emitEvent($){try{this.onTeamEvent?.($)}catch{}}}function jA($){return new Promise((Z)=>setTimeout(Z,$))}function B4($,Z){let Q=0;for(let W of $){if(!W.startsWith(Z))continue;let J=Number.parseInt(W.slice(Z.length),10);if(Number.isFinite(J))Q=Math.max(Q,J)}return Q}function eJ($,Z){switch(Z.type){case"run_queued":case"run_started":$.activeTeamRunIds.add(Z.run.id);break;case"run_completed":case"run_failed":case"run_cancelled":case"run_interrupted":{let Q;if(Z.type==="run_failed")Q=Z.run.error;else if(Z.type==="run_cancelled"||Z.type==="run_interrupted")Q=Z.run.error??Z.reason;$.activeTeamRunIds.delete(Z.run.id),$.pendingTeamRunUpdates.push({runId:Z.run.id,agentId:Z.run.agentId,taskId:Z.run.taskId,status:Z.type.replace("run_",""),error:Q,iterations:Z.run.result?.iterations}),iQ($);break}default:break}}async function $X($,Z,Q){switch(Z.type){case"run_progress":await Q("onTeamTaskProgress",$,Z.run.agentId,Z.message,{kind:Z.message==="heartbeat"?"heartbeat":"progress"});break;case"agent_event":if(Z.event.type==="content_start"&&Z.event.contentType==="text"&&typeof Z.event.text==="string"){let W=Z.event.text.replace(/\s+/g," ").trim().slice(0,120);if(W)await Q("onTeamTaskProgress",$,Z.agentId,W,{kind:"text"})}break;case"task_start":await Q("onTeamTaskStart",$,Z.agentId,Z.message);break;case"task_end":{if(Z.error)await Q("onTeamTaskEnd",$,Z.agentId,"failed",`[error] ${Z.error.message}`,void 0,Z.messages);else if(Z.result?.finishReason==="aborted")await Q("onTeamTaskEnd",$,Z.agentId,"cancelled","[done] aborted",Z.result,Z.result.messages);else await Q("onTeamTaskEnd",$,Z.agentId,"completed",`[done] ${Z.result?.finishReason??"completed"}`,Z.result,Z.result?.messages);break}default:break}}function ZX($,Z,Q,W){if(!$.runtime.teamRuntime)return;let J=$.runtime.teamRuntime.getTeamName();W({type:"team_progress",payload:{sessionId:Z,teamName:J,lifecycle:H4({teamName:J,sessionId:Z,event:Q}),summary:V4(J,$.runtime.teamRuntime.exportState())}})}function m5($){return $.activeTeamRunIds.size>0||$.pendingTeamRunUpdates.length>0}function QX($,Z){if($.aborting)return!1;if(!(Z==="completed"||Z==="max_iterations"))return!1;return $.config.enableAgentTeams===!0&&m5($)}function iQ($){let Z=$.teamRunWaiters.splice(0);for(let Q of Z)Q()}async function WX($){while(!0){if($.aborting)return[];if($.pendingTeamRunUpdates.length>0){let Z=[...$.pendingTeamRunUpdates];return $.pendingTeamRunUpdates.length=0,Z}if($.activeTeamRunIds.size===0)return[];await new Promise((Z)=>{$.teamRunWaiters.push(Z)})}}function JX($,Z){let Q=Z.map((X)=>{let Y=[`- ${X.runId} (${X.agentId}) -> ${X.status}`];if(X.taskId)Y.push(` task=${X.taskId}`);if(typeof X.iterations==="number")Y.push(` iterations=${X.iterations}`);if(X.error)Y.push(` error=${X.error}`);return Y.join("")}),W=$.activeTeamRunIds.size,J=W>0?`There are still ${W} teammate run(s) in progress. Continue coordination and decide whether to wait for more updates.`:"No teammate runs are currently in progress. Continue coordination using these updates.";return v5(`System-delivered teammate async run updates:
|
|
527
527
|
${Q.join(`
|
|
528
528
|
`)}
|
|
529
529
|
|
|
530
|
-
${J}`,$.config.mode)}function v5($,Z){return
|
|
531
|
-
`,"utf8"),
|
|
530
|
+
${J}`,$.config.mode)}function v5($,Z){return TS($,Z==="plan"?"plan":Z==="yolo"?"yolo":"act")}var XX=4;class e1{adapter;manifestStore;teamChildren;static STALE_REASON="failed_external_process_exit";static STALE_SOURCE="stale_session_reconciler";static TEAM_HEARTBEAT_LOG_INTERVAL_MS=30000;constructor($,Z={}){this.adapter=$;this.manifestStore=new nJ($,Z.messagesArtifactUploader,Z.logger),this.teamChildren=new pQ($,this.manifestStore,(Q,W,J)=>this.toPersistedMessages(Q,W,J),e1.TEAM_HEARTBEAT_LOG_INTERVAL_MS)}toPersistedMessages($,Z,Q){if(!$)return;return Z?IZ(Z.messages,Z,Q):kZ($)}ensureSessionsDir(){return this.manifestStore.ensureSessionsDir()}writeSessionManifest($,Z){this.manifestStore.writeSessionManifest($,Z)}readSessionManifest($){return this.manifestStore.readSessionManifest($)}async createRootSessionWithArtifacts($){let Z=$.startedAt??J0(),Q=$.sessionId.trim(),W=Q.length>0?Q:`${Date.now()}_${qS(5)}`,J=this.manifestStore.artifacts.sessionMessagesPath(W),X=this.manifestStore.artifacts.sessionManifestPath(W),Y=c6({metadata:$.metadata,prompt:$.prompt}),j={version:1,session_id:W,source:$.source,pid:$.pid,started_at:Z,status:"running",interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspace_root:$.workspaceRoot,team_name:$.teamName,enable_tools:$.enableTools,enable_spawn:$.enableSpawn,enable_teams:$.enableTeams,prompt:$.prompt?.trim()||void 0,metadata:Y,messages_path:J};return await this.adapter.upsertSession({sessionId:W,source:$.source,pid:$.pid,startedAt:Z,endedAt:null,exitCode:null,status:"running",statusLock:0,interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspaceRoot:$.workspaceRoot,teamName:$.teamName??null,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,parentSessionId:null,parentAgentId:null,agentId:null,conversationId:null,isSubagent:!1,prompt:j.prompt??null,metadata:M$(j.metadata),hookPath:"",messagesPath:J,updatedAt:J0()}),this.manifestStore.initializeMessagesFile(W,J,Z),this.manifestStore.writeSessionManifest(X,j),{manifestPath:X,messagesPath:J,manifest:j}}async updateSessionStatus($,Z,Q){let W;if((await XG(()=>this.adapter.getSession($),async(X)=>{return W=H0(Z)?void 0:J0(),this.adapter.updateSession({sessionId:$,status:Z,endedAt:W??null,exitCode:H0(Z)?null:typeof Q==="number"?Q:null,expectedStatusLock:X.statusLock})},XX)).updated){if(Z==="cancelled")await this.teamChildren.applyStatusToRunningChildSessions($,"cancelled");return{updated:!0,endedAt:W}}return{updated:!1}}async updateSession($){for(let Z=0;Z<XX;Z++){let Q=await this.adapter.getSession($.sessionId);if(!Q)return{updated:!1};let W=Q.metadata??void 0,J=$.metadata!==void 0?M$($.metadata)??{}:M$(W)??{},X=L2(typeof W?.title==="string"?W.title:void 0),Y=$.title!==void 0?L2($.title):X??y3($.prompt);if(Y)J.title=Y;else delete J.title;let j=$.metadata!==void 0||$.prompt!==void 0||$.title!==void 0;if(!(await this.adapter.updateSession({sessionId:$.sessionId,prompt:$.prompt,metadata:j?Object.keys(J).length>0?J:null:void 0,title:Y,expectedStatusLock:Q.statusLock})).updated)continue;let{path:H,manifest:B}=this.manifestStore.readManifestFile($.sessionId);if(B){if($.prompt!==void 0)B.prompt=$.prompt??void 0;let G=$.metadata!==void 0?M$($.metadata)??{}:M$(B.metadata)??{};if(Y)G.title=Y;B.metadata=Object.keys(G).length>0?G:void 0,this.manifestStore.writeSessionManifest(H,B)}return{updated:!0}}return{updated:!1}}queueSpawnRequest($){return this.teamChildren.queueSpawnRequest($)}upsertSubagentSession($){return this.teamChildren.upsertSubagentSession($)}upsertSubagentSessionFromHook($){return this.teamChildren.upsertSubagentSessionFromHook($)}appendSubagentHookAudit($,Z){return this.teamChildren.appendSubagentHookAudit(Z),Promise.resolve()}persistSessionMessages($,Z,Q){let W=kZ(Z);return this.manifestStore.persistSessionMessages($,W,Q)}applySubagentStatus($,Z){return this.teamChildren.applySubagentStatus($,Z)}applySubagentStatusBySessionId($,Z){return this.teamChildren.applySubagentStatusBySessionId($,Z)}applyStatusToRunningChildSessions($,Z){return this.teamChildren.applyStatusToRunningChildSessions($,Z)}onTeamTaskStart($,Z,Q){return this.teamChildren.onTeamTaskStart($,Z,Q)}onTeamTaskEnd($,Z,Q,W,J,X){return this.teamChildren.onTeamTaskEnd($,Z,Q,W,J,X)}onTeamTaskProgress($,Z,Q,W){return this.teamChildren.onTeamTaskProgress($,Z,Q,W)}handleSubAgentStart($,Z){return this.teamChildren.handleSubAgentStart($,Z)}handleSubAgentEnd($,Z){return this.teamChildren.handleSubAgentEnd($,Z)}isPidAlive($){if(!Number.isFinite($)||$<=0)return!1;try{return process.kill(Math.floor($),0),!0}catch(Z){return typeof Z==="object"&&Z!==null&&"code"in Z&&Z.code==="EPERM"}}async reconcileDeadRunningSession($){if(H0($.status)===!1||this.isPidAlive($.pid))return $;let Z=J0(),Q=e1.STALE_REASON;for(let W=0;W<XX;W++){let J=await this.adapter.getSession($.sessionId);if(!J)return;if(H0(J.status)===!1)return J;let X={...J.metadata??{},terminal_marker:Q,terminal_marker_at:Z,terminal_marker_pid:J.pid,terminal_marker_source:e1.STALE_SOURCE},Y=await this.adapter.updateSession({sessionId:J.sessionId,status:"failed",endedAt:Z,exitCode:1,metadata:X,expectedStatusLock:J.statusLock});if(!Y.updated)continue;await this.teamChildren.applyStatusToRunningChildSessions(J.sessionId,"failed");let j=JG(J,{status:"failed",endedAt:Z,exitCode:1,metadata:X}),{path:V}=this.manifestStore.readManifestFile(J.sessionId);return this.manifestStore.writeSessionManifest(V,j),this.manifestStore.appendStaleSessionHookLog(Z,J.sessionId,J.pid,Q,e1.STALE_SOURCE),{...J,status:"failed",endedAt:Z,exitCode:1,metadata:X,statusLock:Y.statusLock,updatedAt:Z}}return await this.adapter.getSession($.sessionId)}async listSessions($=200){let Z=Math.max(1,Math.floor($)),Q=Math.min(Z*5,2000);return await this.reconcileDeadSessions(Q),(await this.adapter.listSessions({limit:Q})).slice(0,Z).map((J)=>{let X=M$(J.metadata??void 0),Y=this.manifestStore.readSessionManifest(J.sessionId),j=L2(typeof Y?.metadata?.title==="string"?Y.metadata.title:void 0),V=j?{...X??{},title:j}:X;return{...J,metadata:V}})}async reconcileDeadSessions($=2000){let Z=Math.max(1,Math.floor($)),Q=(await Promise.all(["idle","running","pending"].map((J)=>this.adapter.listSessions({limit:Z,status:J})))).flat(),W=0;for(let J of Q){let X=await this.reconcileDeadRunningSession(J);if(X&&X.status!==J.status)W++}return W}async deleteSession($){let Z=$.trim();if(!Z)throw Error("session id is required");let Q=await this.adapter.getSession(Z);if(!Q)return{deleted:!1};if(await this.adapter.deleteSession(Z,!1),!Q.isSubagent){let W=await this.adapter.listSessions({limit:2000,parentSessionId:Z});await this.adapter.deleteSession(Z,!0),await Promise.allSettled(W.map(async(J)=>{await $J(J.cwd,J.sessionId),J5(J.messagesPath),J5(this.manifestStore.artifacts.sessionManifestPath(J.sessionId,!1)),this.manifestStore.artifacts.removeSessionDirIfEmpty(J.sessionId)}))}if(await $J(Q.cwd,Z),J5(Q.messagesPath),J5(this.manifestStore.artifacts.sessionManifestPath(Z,!1)),Q.isSubagent)this.manifestStore.artifacts.removeSessionDirIfEmpty(Z);else{let W=new Set([this.manifestStore.artifacts.sessionArtifactsDir(Z)]);for(let J of[Q.messagesPath])if(typeof J==="string"&&J.trim().length>0)W.add(OS(J));for(let J of W)this.manifestStore.artifacts.removeDir(J)}return{deleted:!0}}}function jX(){return new Date().toISOString()}function KA($,Z){let Q=`${$}.tmp`;ES(Q,`${JSON.stringify(Z,null,2)}
|
|
531
|
+
`,"utf8"),RS(Q,$)}class FA{sessionsDirPath;constructor($=NS()){this.sessionsDirPath=$}ensureSessionsDir(){if(!YX(this.sessionsDirPath))MS(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}indexPath(){return GA(this.ensureSessionsDir(),"sessions.index.json")}spawnQueuePath(){return GA(this.ensureSessionsDir(),"subagent-spawn-queue.json")}readIndex(){let $=this.indexPath();if(!YX($))return{version:1,sessions:{}};try{let Z=JSON.parse(BA($,"utf8"));if(Z?.version===1&&Z.sessions)return Z}catch{}return{version:1,sessions:{}}}writeIndex($){KA(this.indexPath(),$)}readQueue(){let $=this.spawnQueuePath();if(!YX($))return{version:1,nextId:1,requests:[]};try{let Z=JSON.parse(BA($,"utf8"));if(Z?.version===1&&typeof Z.nextId==="number"&&Array.isArray(Z.requests))return Z}catch{}return{version:1,nextId:1,requests:[]}}writeQueue($){KA(this.spawnQueuePath(),$)}async upsertSession($){let Z=this.readIndex();Z.sessions[$.sessionId]=$,this.writeIndex(Z)}async getSession($){return this.readIndex().sessions[$]}async listSessions($){return Object.values(this.readIndex().sessions).filter((Z)=>$.parentSessionId!==void 0?Z.parentSessionId===$.parentSessionId:!0).filter((Z)=>$.status!==void 0?Z.status===$.status:!0).sort((Z,Q)=>Q.startedAt.localeCompare(Z.startedAt)).slice(0,$.limit)}async updateSession($){let Z=this.readIndex(),Q=Z.sessions[$.sessionId];if(!Q)return{updated:!1,statusLock:0};if($.expectedStatusLock!==void 0&&Q.statusLock!==$.expectedStatusLock)return{updated:!1,statusLock:Q.statusLock};let W=$.expectedStatusLock!==void 0?$.expectedStatusLock+1:Q.statusLock,J={...Q,status:$.status??Q.status,endedAt:$.endedAt!==void 0?$.endedAt:Q.endedAt??null,exitCode:$.exitCode!==void 0?$.exitCode:Q.exitCode??null,prompt:$.prompt!==void 0?$.prompt:Q.prompt??null,metadata:$.metadata!==void 0?$.metadata??null:Q.metadata??null,parentSessionId:$.parentSessionId!==void 0?$.parentSessionId??null:Q.parentSessionId??null,parentAgentId:$.parentAgentId!==void 0?$.parentAgentId??null:Q.parentAgentId??null,agentId:$.agentId!==void 0?$.agentId??null:Q.agentId??null,conversationId:$.conversationId!==void 0?$.conversationId??null:Q.conversationId??null,statusLock:W,isSubagent:$.setRunning||$.parentSessionId!==void 0?!0:Q.isSubagent,updatedAt:jX()};if($.setRunning)J.status="running",J.endedAt=null,J.exitCode=null;return Z.sessions[$.sessionId]=J,this.writeIndex(Z),{updated:!0,statusLock:J.statusLock}}async deleteSession($,Z){let Q=this.readIndex();if(!Q.sessions[$])return!1;if(delete Q.sessions[$],Z){for(let J of Object.values(Q.sessions))if(J.parentSessionId===$)delete Q.sessions[J.sessionId]}return this.writeIndex(Q),!0}async enqueueSpawnRequest($){let Z=this.readQueue();Z.requests.push({id:Z.nextId,rootSessionId:$.rootSessionId,parentAgentId:$.parentAgentId,task:$.task,systemPrompt:$.systemPrompt,createdAt:jX()}),Z.nextId+=1,this.writeQueue(Z)}async claimSpawnRequest($,Z){let Q=this.readQueue(),W=Q.requests.find((J)=>J.rootSessionId===$&&J.parentAgentId===Z&&!J.consumedAt);if(!W)return;return W.consumedAt=jX(),this.writeQueue(Q),W.task}}class VX extends e1{constructor($,Z={}){super(new FA($),Z)}ensureSessionsDir(){return super.ensureSessionsDir()}}var UA={};N(UA,{CoreSessionService:()=>z1});import{existsSync as wS,mkdirSync as CS}from"node:fs";import{resolveSessionDataDir as PS}from"@cline/shared/storage";var HX=`
|
|
532
532
|
session_id AS sessionId,
|
|
533
533
|
source,
|
|
534
534
|
pid,
|
|
@@ -555,7 +555,7 @@ ${J}`,$.config.mode)}function v5($,Z){return zS($,Z==="plan"?"plan":Z==="yolo"?"
|
|
|
555
555
|
metadata_json AS metadata,
|
|
556
556
|
hook_path AS hookPath,
|
|
557
557
|
messages_path AS messagesPath,
|
|
558
|
-
updated_at AS updatedAt`;function BX($){$.interactive=$.interactive===1,$.enableTools=$.enableTools===1,$.enableSpawn=$.enableSpawn===1,$.enableTeams=$.enableTeams===1,$.isSubagent=$.isSubagent===1;let Z=$.metadata;if(typeof Z==="string"&&Z.trim())try{let Q=JSON.parse(Z);$.metadata=Q&&typeof Q==="object"&&!Array.isArray(Q)?Q:null}catch{$.metadata=null}else $.metadata=null;return $}function GX($){if(!$||Object.keys($).length===0)return null;return JSON.stringify($)}function AA($){return{...$,tasks:$.tasks.map((Z)=>({...Z,createdAt:new Date(Z.createdAt),updatedAt:new Date(Z.updatedAt)})),mailbox:$.mailbox.map((Z)=>({...Z,sentAt:new Date(Z.sentAt),readAt:Z.readAt?new Date(Z.readAt):void 0})),missionLog:$.missionLog.map((Z)=>({...Z,ts:new Date(Z.ts)})),runs:($.runs??[]).map((Z)=>({...Z,startedAt:new Date(Z.startedAt),endedAt:Z.endedAt?new Date(Z.endedAt):void 0,nextAttemptAt:Z.nextAttemptAt?new Date(Z.nextAttemptAt):void 0,heartbeatAt:Z.heartbeatAt?new Date(Z.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),finalizedAt:Z.finalizedAt?new Date(Z.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),reviewedAt:Z.reviewedAt?new Date(Z.reviewedAt):void 0}))}}class fA{store;sessionsDirPath;constructor($,Z=
|
|
558
|
+
updated_at AS updatedAt`;function BX($){$.interactive=$.interactive===1,$.enableTools=$.enableTools===1,$.enableSpawn=$.enableSpawn===1,$.enableTeams=$.enableTeams===1,$.isSubagent=$.isSubagent===1;let Z=$.metadata;if(typeof Z==="string"&&Z.trim())try{let Q=JSON.parse(Z);$.metadata=Q&&typeof Q==="object"&&!Array.isArray(Q)?Q:null}catch{$.metadata=null}else $.metadata=null;return $}function GX($){if(!$||Object.keys($).length===0)return null;return JSON.stringify($)}function AA($){return{...$,tasks:$.tasks.map((Z)=>({...Z,createdAt:new Date(Z.createdAt),updatedAt:new Date(Z.updatedAt)})),mailbox:$.mailbox.map((Z)=>({...Z,sentAt:new Date(Z.sentAt),readAt:Z.readAt?new Date(Z.readAt):void 0})),missionLog:$.missionLog.map((Z)=>({...Z,ts:new Date(Z.ts)})),runs:($.runs??[]).map((Z)=>({...Z,startedAt:new Date(Z.startedAt),endedAt:Z.endedAt?new Date(Z.endedAt):void 0,nextAttemptAt:Z.nextAttemptAt?new Date(Z.nextAttemptAt):void 0,heartbeatAt:Z.heartbeatAt?new Date(Z.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),finalizedAt:Z.finalizedAt?new Date(Z.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),reviewedAt:Z.reviewedAt?new Date(Z.reviewedAt):void 0}))}}class fA{store;sessionsDirPath;constructor($,Z=PS()){this.store=$;this.sessionsDirPath=Z}ensureSessionsDir(){if(!wS(this.sessionsDirPath))CS(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}async upsertSession($){this.store.run(`INSERT OR REPLACE INTO sessions (
|
|
559
559
|
session_id, source, pid, started_at, ended_at, exit_code, status, status_lock, interactive,
|
|
560
560
|
provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
|
|
561
561
|
parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
|
|
@@ -576,12 +576,12 @@ ${J}`,$.config.mode)}function v5($,Z){return zS($,Z==="plan"?"plan":Z==="yolo"?"
|
|
|
576
576
|
provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
|
|
577
577
|
parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
|
|
578
578
|
metadata_json, transcript_path, hook_path, messages_path, updated_at
|
|
579
|
-
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.sessionId,$.source,$.pid,$.startedAt,null,null,"running",0,$.interactive?1:0,$.provider,$.model,$.cwd,$.workspaceRoot,$.teamName??null,$.enableTools?1:0,$.enableSpawn?1:0,$.enableTeams?1:0,null,null,null,null,0,$.prompt??null,$.metadata?JSON.stringify($.metadata):null,"","",$.messagesPath,J0()])}}function PS($){if($.backendMode)return $.backendMode;if(process.env.CLINE_VCR?.trim())return"local";let Z=process.env.CLINE_SESSION_BACKEND_MODE?.trim().toLowerCase();if(Z==="local"||Z==="hub"||Z==="remote")return Z;return"auto"}var c5,u5;function SS($,Z){if($!=="auto"&&$!=="hub")return;if(Z.hub?.endpoint?.trim())return;a9(Z.hub?.workspaceRoot?.trim()||Z.hub?.cwd?.trim()||process.cwd())}async function bS($){await $.reconcileDeadSessions?.().catch(()=>{})}function _A($){try{let Z=new L1;return Z.init(),new z1(Z,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}catch(Z){return $.telemetry?.capture({event:"session_backend_fallback",properties:{requestedBackend:"sqlite",fallbackBackend:"file"}}),LA($.telemetry,{component:"core",operation:"session_backend.sqlite_init",error:Z,severity:"warn",handled:!0,context:{requestedBackend:"sqlite",fallbackBackend:"file"}}),new VX(void 0,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}}function DA($,Z,Q){return new T1({sessionService:Q??$.sessionService??_A($),capabilities:$.capabilities,telemetry:$.telemetry,toolPolicies:$.toolPolicies,distinctId:Z,fetch:$.fetch})}async function KX($){if(c5)return c5;if(u5)return await u5;return u5=(async()=>{return c5=_A($),await bS(c5),c5})().finally(()=>{u5=void 0}),await u5}async function K4($){let Z=P0($.distinctId);$.telemetry?.setDistinctId(Z);let Q=PS($);if(SS(Q,$),Q==="remote"){let W=$.remote?.endpoint?.trim();if(!W)throw Error("Remote runtime mode requires `remote.endpoint` to be configured.");return $.logger?.log("Using remote runtime host",{endpoint:W}),new X4({endpoint:W,authToken:$.remote?.authToken,clientType:$.remote?.clientType,displayName:$.remote?.displayName,workspaceRoot:$.remote?.workspaceRoot,cwd:$.remote?.cwd,capabilities:$.capabilities})}if(Q==="hub"){let W=$.hub?.endpoint?.trim(),J=W||await $2({strategy:$.hub?.strategy??"require-hub",workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});if(!J)throw Error("No compatible hub runtime is available.");return $.logger?.log("Using hub runtime host",{url:J,explicitEndpoint:W||void 0}),new o1({url:J,authToken:$.hub?.authToken,clientType:$.hub?.clientType,displayName:$.hub?.displayName,capabilities:$.capabilities,telemetry:$.telemetry},{workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd})}if(Q==="auto"){let W=await o4({endpoint:$.hub?.endpoint,strategy:$.hub?.strategy??"prefer-hub",workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});if(W){$.logger?.log("Using discovered local hub runtime host",{url:W});let J=new o1({url:W,authToken:$.hub?.authToken,clientType:$.hub?.clientType,displayName:$.hub?.displayName,capabilities:$.capabilities,telemetry:$.telemetry},{workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});try{return await J.connect(),J}catch(X){$.logger?.log("Falling back to local runtime host",{reason:"hub_connect_failed",severity:"warn",error:X}),LA($.telemetry,{component:"core",operation:"runtime_host.hub_connect",error:X,severity:"warn",handled:!0,context:{backendMode:"auto",fallbackBackend:"local"}})}}return $.logger?.log("Falling back to local runtime host",{reason:"compatible_hub_unavailable",severity:"warn"}),DA($,Z)}return DA($,Z)}var NA={};N(NA,{createCheckpointComparePlan:()=>aQ,compareCheckpointToWorkspace:()=>d5,buildCheckpointWorkspaceDiff:()=>sQ});import{execFile as kS}from"node:child_process";import*as RA from"node:fs/promises";import*as f4 from"node:path";import{promisify as IS}from"node:util";var qA={};N(qA,{trimMessagesToCheckpoint:()=>OA,trimMessagesBeforeCheckpoint:()=>AX,readSessionCheckpointHistory:()=>I2,findCheckpointForRun:()=>A4,createRestoredCheckpointMetadata:()=>FX,createCheckpointRestorePlan:()=>fX,applyCheckpointToWorktree:()=>UX});import{execFile as yS}from"node:child_process";import{promisify as hS}from"node:util";var F4=hS(yS);function I2($){let Z=$?.metadata?.checkpoint&&typeof $.metadata.checkpoint==="object"&&!Array.isArray($.metadata.checkpoint)?$.metadata.checkpoint:void 0;return(Array.isArray(Z?.history)?Z.history:[]).filter((W)=>!!W&&typeof W==="object"&&!Array.isArray(W)).flatMap((W)=>{let J=String(W.ref??"").trim(),X=Number(W.createdAt??0),Y=Number(W.runCount??0);if(J.length===0||!Number.isFinite(X)||!Number.isInteger(Y)||Y<1)return[];let j=W.kind==="stash"||W.kind==="commit"?W.kind:void 0;return[{ref:J,createdAt:X,runCount:Y,...j?{kind:j}:{}}]})}function FX($,Z){let Q=I2($).filter((J)=>J.runCount<=Z),W=Q.at(-1);return W?{latest:W,history:Q}:void 0}function A4($,Z){return $.reduce((Q,W)=>{if(W.runCount>Z)return Q;if(!Q||W.runCount>Q.runCount)return W;return Q},void 0)}function TA($,Z){let Q=0;for(let W=0;W<$.length;W+=1){let J=$[W];if(J?.role!=="user")continue;if(("metadata"in J&&J.metadata&&typeof J.metadata==="object"?J.metadata:void 0)?.kind==="recovery_notice")continue;if(Q+=1,Q===Z)return W}throw Error(`Could not find user message for checkpoint run ${Z}`)}function OA($,Z){let Q=TA($,Z);return $.slice(0,Q+1)}function AX($,Z){let Q=TA($,Z);return $.slice(0,Q)}function fX($){let Z=$.checkpointRunCount;if(!Number.isInteger(Z)||Z<1)throw Error("checkpointRunCount must be a positive integer");let Q=A4(I2($.session),Z);if(!Q)throw Error(`No checkpoint found at or before run ${Z} in session ${$.session.sessionId}`);let W=($.cwd?.trim()||$.session.cwd||$.session.workspaceRoot).trim();if(!W)throw Error("cwd or workspaceRoot is required to restore a checkpoint");return{checkpoint:Q,cwd:W,...$.restoreMessages!==!1?{messages:OA($.messages??[],Z)}:{}}}async function UX($,Z){if((await F4("git",["-C",$,"rev-parse","--is-inside-work-tree"],{windowsHide:!0})).stdout.trim()!=="true")throw Error(`${$} is not a git repository`);if(await F4("git",["-C",$,"cat-file","-e",`${Z.ref}^{commit}`],{windowsHide:!0}),await F4("git",["-C",$,"reset","--hard"],{windowsHide:!0}),await F4("git",["-C",$,"clean","-fd"],{windowsHide:!0}),Z.kind==="commit"){await F4("git",["-C",$,"reset","--hard",Z.ref],{windowsHide:!0});return}await F4("git",["-C",$,"stash","apply",Z.ref],{windowsHide:!0})}var xS=IS(kS),gS=52428800;async function nQ($,Z){let{stdout:Q}=await xS("git",["-C",$,...Z],{windowsHide:!0,maxBuffer:gS,encoding:"utf8"});return Q}function MA($){return $.split("\x00").filter(Boolean)}function EA($,Z){let Q=f4.resolve($,Z),W=f4.relative($,Q);if(W.startsWith("..")||f4.isAbsolute(W))throw Error(`Checkpoint diff path escapes workspace: ${Z}`);return Q}async function mS($,Z,Q){try{return await nQ($,["show",`${Z}:${Q}`])}catch{return""}}async function vS($,Z){try{return await RA.readFile(EA($,Z),"utf8")}catch{return""}}async function cS($,Z){await nQ($,["cat-file","-e",`${Z.ref}^{tree}`]);let[Q,W]=await Promise.all([nQ($,["diff","--name-only","-z",Z.ref,"--"]),nQ($,["ls-files","--others","--exclude-standard","-z"])]);return[...new Set([...MA(Q),...MA(W)])].sort((X,Y)=>X.localeCompare(Y))}function aQ($){let Z=$.checkpointRunCount;if(!Number.isInteger(Z)||Z<1)throw Error("checkpointRunCount must be a positive integer");let Q=A4(I2($.session),Z);if(!Q)throw Error(`No checkpoint found at or before run ${Z} in session ${$.session.sessionId}`);let W=($.cwd?.trim()||$.session.cwd||$.session.workspaceRoot).trim();if(!W)throw Error("cwd or workspaceRoot is required to compare a checkpoint");return{checkpoint:Q,cwd:W}}async function sQ($,Z){let Q=await cS($,Z);return(await Promise.all(Q.map(async(J)=>{let[X,Y]=await Promise.all([mS($,Z.ref,J),vS($,J)]);return{filePath:EA($,J),leftContent:X,rightContent:Y}}))).filter((J)=>J.leftContent!==J.rightContent)}async function d5($){let Z=aQ($),Q=await sQ(Z.cwd,Z.checkpoint);return{...Z,diffs:Q}}var PA={};N(PA,{NoOpFeatureFlagsProvider:()=>g2,FeatureFlagsService:()=>x2});import{existsSync as uS,mkdirSync as dS,readFileSync as lS,writeFileSync as pS}from"node:fs";import{dirname as rS}from"node:path";import{FEATURE_FLAGS as wA,FeatureFlagDefaultValue as DX}from"@cline/shared";var iS=3600000,nS=604800000,CA=1;class x2{provider;telemetry;logger;cacheTtlMs;cacheFilePath;persistentCacheMaxAgeMs;context;cache=new Map;cacheInfo={updateTime:0,userId:null};constructor($){this.provider=$.provider,this.telemetry=$.telemetry,this.logger=$.logger,this.cacheTtlMs=$.cacheTtlMs??iS,this.cacheFilePath=$.cacheFilePath,this.persistentCacheMaxAgeMs=$.persistentCacheMaxAgeMs??nS,this.context={...$.context??{}},this.hydrateFromPersistentCache()}setContext($){this.context={...$}}hydrateCache($){this.cacheInfo={updateTime:$.updateTime,userId:$.userId,flagsPayload:$.flagsPayload},this.rebuildCacheFromSnapshot($.flagsPayload)}getCacheSnapshot(){return{updateTime:this.cacheInfo.updateTime,userId:this.cacheInfo.userId,flagsPayload:this.cacheInfo.flagsPayload}}async poll($){let Z=$??this.context.userId??null,Q=Date.now();if(Q-this.cacheInfo.updateTime<this.cacheTtlMs){if(this.cacheInfo.userId===Z)return}let W=this.cacheInfo;this.cacheInfo={updateTime:Q,userId:Z||null};try{let J=await this.provider.getAllFlagsAndPayloads({flagKeys:wA.length>0?wA:void 0,context:{...this.context,userId:Z}});if(this.cacheInfo.userId!==Z)return;this.cacheInfo.flagsPayload=J,this.rebuildCacheFromSnapshot(J),this.writePersistentCache()}catch(J){if(this.cacheInfo.userId!==Z)return;throw this.cacheInfo=W.updateTime?W:{updateTime:0,userId:null},this.logger?.error?.("Error polling SDK feature flags",{error:J}),J}}hydrateFromPersistentCache(){let $=this.readPersistentCache();if($)this.hydrateCache($)}isFeatureFlagPayload($){if($===null||typeof $==="string"||typeof $==="number"||typeof $==="boolean")return!0;if(Array.isArray($))return $.every((Z)=>this.isFeatureFlagPayload(Z));if(typeof $==="object")return Object.values($).every((Z)=>this.isFeatureFlagPayload(Z));return!1}readPayloadRecord($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=Object.entries($).filter(([,W])=>this.isFeatureFlagPayload(W));if(Z.length===0)return;let Q={};for(let[W,J]of Z)Q[W]=J;return Q}readPersistentCache(){try{if(!this.cacheFilePath||!uS(this.cacheFilePath))return;let $=JSON.parse(lS(this.cacheFilePath,"utf8"));if(!$||typeof $!=="object")return;let Z=$;if(Z.version!==CA||typeof Z.updatedAt!=="number"||!Number.isFinite(Z.updatedAt)||Date.now()-Z.updatedAt>this.persistentCacheMaxAgeMs)return;return{updateTime:Z.updatedAt,userId:Z.userId??null,flagsPayload:{featureFlags:this.readPayloadRecord(Z.flagsPayload?.featureFlags),featureFlagPayloads:this.readPayloadRecord(Z.flagsPayload?.featureFlagPayloads)}}}catch($){this.logger?.error?.("Error reading SDK feature flags cache",{error:$});return}}writePersistentCache(){try{if(!this.cacheFilePath)return;dS(rS(this.cacheFilePath),{recursive:!0,mode:448});let $=this.getCacheSnapshot(),Z={version:CA,updatedAt:$.updateTime,userId:$.userId,flagsPayload:$.flagsPayload};pS(this.cacheFilePath,`${JSON.stringify(Z,null,2)}
|
|
580
|
-
`,"utf8")}catch($){this.logger?.error?.("Error writing SDK feature flags cache",{error:$})}}getReturnedFlagKeys($){return[...new Set([...Object.keys($?.featureFlags??{}),...Object.keys($?.featureFlagPayloads??{})])]}rebuildCacheFromSnapshot($){let Z=new Map;for(let Q of this.getReturnedFlagKeys($)){let W=this.getFeatureFlag(Q);Z.set(Q,W??!1)}this.cache=Z}getFeatureFlag($){try{let Z=this.cacheInfo.flagsPayload?.featureFlagPayloads?.[$],Q=this.cacheInfo.flagsPayload?.featureFlags?.[$],W=Z??Q??DX[$]??void 0;if(!this.cache.has($)||this.cache.get($)!==W)this.telemetry?.capture({event:m.FEATURE_FLAGS.FLAG_CALLED,properties:{$feature_flag:$,$feature_flag_response:Q}});return W}catch(Z){return this.logger?.error?.(`Error checking SDK feature flag ${$}`,{error:Z}),DX[$]??!1}}getBooleanFlagEnabled($){return this.cache.get($)===!0}getFlagPayload($){return this.cache.get($)??DX[$]}getProvider(){return this.provider}get enabled(){return this.provider.enabled}getSettings(){return this.provider.getSettings()}test($,Z){if(process.env.IS_TEST==="true")this.cache.set($,Z)}async dispose(){await this.provider.dispose()}}class g2{async getAllFlagsAndPayloads(){return{}}enabled=!1;getSettings(){return{enabled:!1,timeoutMs:1000}}async dispose(){}}J8();class l5{clientName;runtimeAddress;automation;settings;featureFlags;pendingPrompts;host;prepare;capabilities;logger;telemetry;distinctId;automationService;activeSessionBootstraps=new Map;unsubscribeBootstrapCleanup;constructor($,Z,Q,W,J,X,Y,j,V,H){this.clientName=Z,this.runtimeAddress=Q,this.host=$,this.prepare=W,this.capabilities=J,this.logger=X,this.telemetry=Y,this.distinctId=j,this.featureFlags=V,this.settings=fF($),this.pendingPrompts=UF($),this.automation=new UJ(()=>{if(!this.automationService)throw Error("ClineCore automation is not enabled. Pass `automation: true` or automation options to ClineCore.create().");return this.automationService}),this.automationService=H?new P5({workspaceRoot:H.workspaceRoot??process.cwd(),specs:{cronSpecsDir:H.cronSpecsDir??H.cronDir,scope:GK(H.cronScope),workspaceRoot:H.workspaceRoot},runtimeHandlers:KK({host:$,getExtensionContext:()=>zQ({automationService:this.automationService,automation:this.automation,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}),dbPath:H.dbPath,logger:H.logger,pollIntervalMs:H.pollIntervalMs,claimLeaseSeconds:H.claimLeaseSeconds,globalMaxConcurrency:H.globalMaxConcurrency,watcherDebounceMs:H.watcherDebounceMs}):void 0,this.unsubscribeBootstrapCleanup=this.host.subscribe((B)=>{if(B.type!=="ended")return;this.disposeSessionBootstrap(B.payload.sessionId)})}static async create($={}){let Z=P0($.distinctId),Q=M0($.capabilities),W={...$,capabilities:Q,distinctId:Z},J=await K4(W),X=BK($.automation),Y=$.featureFlags||new x2({provider:new g2,telemetry:$.telemetry,logger:$.logger,context:{distinctId:Z,clientName:$.clientName}}),j=new l5(J,$.clientName,J.runtimeAddress,$.prepare,Q,$.logger,$.telemetry,Z,Y,X?{...X,logger:$.logger}:void 0);if(X&&X.autoStart!==!1)await j.automation.start();return j}async disposeSessionBootstrap($){let Z=this.activeSessionBootstraps.get($);if(!Z)return;this.activeSessionBootstraps.delete($),await Promise.resolve(Z.dispose?.())}async start($){let Z=DF($),Q=await this.prepare?.(Z);try{let W=Q?await Q.applyToStartSessionInput(Z):Z,J=await this.host.startSession(yJ(W,{defaultCapabilities:this.capabilities,withExtensionContext:(X)=>zQ({automationService:this.automationService,automation:this.automation,context:X,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}));if(Q)if(await this.host.getSession(J.sessionId))this.activeSessionBootstraps.set(J.sessionId,Q);else await Promise.resolve(Q.dispose?.());return LF({input:W,sessionId:J.sessionId,telemetry:this.telemetry,clientName:this.clientName,runtimeAddress:this.runtimeAddress}),J}catch(W){throw await Promise.resolve(Q?.dispose?.()),W}}send=(...$)=>this.host.runTurn(...$);getAccumulatedUsage=(...$)=>{return this.host.getAccumulatedUsage?.(...$)??Promise.resolve(void 0)};abort=(...$)=>this.host.abort(...$);stop=async($)=>{await this.host.stopSession($),await this.disposeSessionBootstrap($)};dispose=async(...$)=>{try{await this.automationService?.dispose(),await this.host.dispose(...$)}finally{this.unsubscribeBootstrapCleanup();let Z=[...this.activeSessionBootstraps.keys()];await Promise.allSettled(Z.map((Q)=>this.disposeSessionBootstrap(Q)))}};get=(...$)=>this.host.getSession(...$);listHistory=async($={})=>await cQ(this.host,$);list=async($=200,Z={})=>await this.listHistory({...Z,limit:$});delete=async($)=>{let Z=await this.host.deleteSession($);if(Z)await this.disposeSessionBootstrap($);return Z};update=(...$)=>this.host.updateSession(...$);readMessages=(...$)=>this.host.readSessionMessages(...$);async restore($){let Z=$.start?yJ($.start,{defaultCapabilities:this.capabilities,withExtensionContext:(Q)=>zQ({automationService:this.automationService,automation:this.automation,context:Q,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}):void 0;return this.host.restoreSession({sessionId:$.sessionId,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd,restore:$.restore,start:Z})}async compareCheckpoint($){let Z=$.sessionId.trim();if(!Z)throw Error("sessionId is required");let Q=await this.host.getSession(Z);if(!Q)throw Error(`Session ${Z} not found`);return d5({session:Q,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd})}ingestHookEvent=(...$)=>this.host.dispatchHookEvent(...$);subscribe($,Z){return this.host.subscribe($,Z)}updateSessionModel=(...$)=>{return this.host.updateSessionModel?.(...$)??Promise.resolve()}}var bA={};N(bA,{resolvePluginSkillDirectoriesFromPaths:()=>n1,resolvePluginConfigSearchPaths:()=>i6,resolveAndLoadAgentPlugins:()=>g8,resolveAgentPluginPaths:()=>i1,loadAgentPluginsFromPathsWithDiagnostics:()=>z2,loadAgentPluginsFromPaths:()=>gZ,loadAgentPluginFromPath:()=>p6,discoverPluginModulePaths:()=>n6});var kA={};N(kA,{toHookConfigFileName:()=>o6,runSubprocessEvent:()=>U4,runHook:()=>L4,resolveHooksConfigSearchPaths:()=>a6,parseHookEventPayload:()=>D4,mergeAgentHooks:()=>M2,listHookConfigFiles:()=>N$,createSubprocessHooks:()=>eQ,createHookConfigFileHooks:()=>t6,createHookConfigFileExtension:()=>u8,createHookAuditHooks:()=>c8,createAgentHooksExtension:()=>m8,HookEventPayloadSchema:()=>tQ,HookEventNameSchema:()=>oQ,HookConfigFileName:()=>v8,HOOK_CONFIG_FILE_EVENT_MAP:()=>s6,HOOKS_CONFIG_DIRECTORY_NAME:()=>lZ});import{HookEventNameSchema as oQ,HookEventPayloadSchema as tQ,parseHookEventPayload as D4,resolveHookSessionContext as
|
|
581
|
-
`).map((X)=>X.trim()).filter(Boolean).filter((X)=>X.startsWith("HOOK_CONTROL\t")).map((X)=>X.slice(13)),J=W.length>0?W[W.length-1]:Z;try{return{parsedJson:JSON.parse(J)}}catch(X){return{parseError:X instanceof Error?X.message:"Failed to parse subprocess stdout JSON"}}}function eS($,Z){let Q=$ instanceof Error?$:Error(String($)),W=Q,J=Z.join(" ");if(W.code==="EACCES")return Error(`Failed to execute hook command "${J}" (EACCES). Configure hooks with an explicit interpreter/command array (for example: ["bash", "/path/to/script"]) or make the script executable with a valid shebang.`);return Error(`Failed to execute hook command "${J}": ${Q.message}`)}async function $b($,Z){let Q=$.stdin;if(!Q)throw Error("runSubprocessEvent failed to create stdin pipe");await new Promise((W,J)=>{let X=(Y)=>{Q.off("error",X);let j=Y.code;if(j==="EPIPE"||j==="ERR_STREAM_DESTROYED"){W();return}J(Y)};Q.once("error",X),Q.end(Z,(Y)=>{if(Q.off("error",X),Y){let j=Y.code;if(j==="EPIPE"||j==="ERR_STREAM_DESTROYED"){W();return}J(Y);return}W()})})}async function U4($,Z){let Q=sS(Z.command,{env:Z.env,debugRole:"hook"});if(!Array.isArray(Q)||Q.length===0)throw Error("runSubprocessEvent requires a non-empty command");let W=!!Z.detached,J=aS(Q[0],Q.slice(1),{cwd:Z.cwd,env:oS(Z.env),stdio:W?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:W,windowsHide:!0}),X=new Promise((K)=>{J.once("spawn",()=>{try{Z.onSpawn?.({command:Q,pid:J.pid??void 0,detached:W})}catch{}K()})}),Y=new Promise((K,F)=>{J.once("error",(A)=>{F(eS(A,Q))})});if(await $b(J,JSON.stringify($)),W){await Promise.race([X,Y]),J.unref();return}if(!J.stdout||!J.stderr)throw Error("runSubprocessEvent failed to create stdout/stderr pipes");let j="",V="",H=!1,B;J.stdout.on("data",(K)=>{j+=K.toString()}),J.stderr.on("data",(K)=>{V+=K.toString()});let G=new Promise((K)=>{if((Z.timeoutMs??0)>0)B=setTimeout(()=>{H=!0,J.kill("SIGKILL")},Z.timeoutMs);J.once("close",(F)=>{if(B)clearTimeout(B);let{parsedJson:A,parseError:L}=tS(j);K({exitCode:F,stdout:j,stderr:V,parsedJson:A,parseError:L,timedOut:H})})});return await Promise.race([G,Y])}var Qb=m2.object({contextModification:m2.string().optional(),cancel:m2.boolean().optional(),review:m2.boolean().optional(),errorMessage:m2.string().optional(),context:m2.string().optional(),overrideInput:m2.unknown().optional()}).passthrough();var Wb=["agent","hook"];async function L4($,Z={}){let Q=Z.command??Wb;return await U4($,{command:Q,cwd:Z.cwd,env:Z.env,detached:Z.detached,timeoutMs:Z.timeoutMs,onSpawn:Z.onSpawn})}function hA($){return $ instanceof Error?$:Error(String($))}function Jb($){if(!$||typeof $!=="object")return;let Z=Qb.safeParse($);if(!Z.success)return;let Q=Z.data;if(!(("cancel"in Q)||("review"in Q)||("context"in Q)||("contextModification"in Q)||("overrideInput"in Q)||("errorMessage"in Q)))return;let J=typeof Q.context==="string"?Q.context:typeof Q.contextModification==="string"?Q.contextModification:typeof Q.errorMessage==="string"&&Q.errorMessage.length>0?Q.errorMessage:void 0;return{cancel:typeof Q.cancel==="boolean"?Q.cancel:void 0,review:typeof Q.review==="boolean"?Q.review:void 0,context:J,overrideInput:Object.hasOwn(Q,"overrideInput")?Q.overrideInput:void 0}}function yA($){if(!$||typeof $!=="object")return{};let Z={};for(let[Q,W]of Object.entries($))if(typeof W==="string")Z[Q]=W;else Z[Q]=JSON.stringify(W);return Z}function $$($,Z,Q){let W=Q.env??process.env,J=W.CLINE_USER_ID?.trim()||W.USER?.trim()||"unknown",X=Q.cwd||process.cwd();return{clineVersion:W.CLINE_VERSION?.trim()||"",hookName:$,timestamp:new Date().toISOString(),taskId:Z.conversationId,sessionContext:Zb(Q.sessionContext,{hookName:$,conversationId:Z.conversationId,agentId:Z.agentId,parentAgentId:Z.parentAgentId}),workspaceRoots:X?[X]:[],workspaceInfo:Q.workspaceInfo,userId:J,agent_id:Z.agentId,parent_agent_id:Z.parentAgentId}}function Xb($){return{name:$.name,message:$.message,stack:$.stack}}function Yb($){let Z=String($??"").toLowerCase();return Z.includes("cancel")||Z.includes("abort")||Z.includes("interrupt")}function jb($){return{agentId:$.snapshot.agentId,conversationId:$.snapshot.conversationId??$.snapshot.runId??$.snapshot.agentId,parentAgentId:$.snapshot.parentAgentId??null}}function Vb($){return $.filter((Z)=>Z.type==="text"&&typeof Z.text==="string").map((Z)=>Z.text).join("")}function Hb($){return{id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:$.input,output:$.result.output,error:$.result.isError?String($.result.output):void 0,durationMs:$.durationMs,startedAt:$.startedAt,endedAt:$.endedAt}}function Bb($){if(!$)return;let Z={};if($.cancel===!0)Z.stop=!0;if($.overrideInput!==void 0)Z.input=$.overrideInput;return Object.keys(Z).length>0?Z:void 0}async function v2($,Z){try{let Q=await L4($,{command:Z.command,cwd:Z.cwd,env:Z.env,detached:!0,onSpawn:Z.onSpawn});Z.onDispatch?.({payload:$,result:Q,detached:!0})}catch(Q){Z.onDispatchError?.(hA(Q),$)}}function eQ($={}){return{hooks:{beforeRun:async(j)=>{let V=jb(j);if(($.env??process.env).CLINE_HOOK_AGENT_RESUME==="1"){let B={...$$("agent_resume",V,$),hookName:"agent_resume",taskResume:{taskMetadata:{},previousState:{}}};await v2(B,$)}else{let B={...$$("agent_start",V,$),hookName:"agent_start",taskStart:{taskMetadata:{}}};await v2(B,$)}return},beforeTool:async(j)=>{let V={agentId:j.snapshot.agentId,conversationId:j.snapshot.conversationId??j.snapshot.runId??j.snapshot.agentId,parentAgentId:j.snapshot.parentAgentId??null},H={...$$("tool_call",V,$),hookName:"tool_call",iteration:j.snapshot.iteration,tool_call:{id:j.toolCall.toolCallId,name:j.toolCall.toolName,input:j.input},preToolUse:{toolName:j.toolCall.toolName,parameters:yA(j.input)}};try{let B=await L4(H,{command:$.command,cwd:$.cwd,env:$.env,detached:!1,timeoutMs:$.timeoutMs,onSpawn:$.onSpawn});if($.onDispatch?.({payload:H,result:B,detached:!1}),B?.timedOut)throw Error("tool_call hook command timed out");if(B?.parseError)throw Error(`tool_call hook produced invalid control JSON: ${B.parseError}`);return Bb(Jb(B?.parsedJson))}catch(B){$.onDispatchError?.(hA(B),H);return}},afterTool:async(j)=>{let V=Hb(j),H={agentId:j.snapshot.agentId,conversationId:j.snapshot.conversationId??j.snapshot.runId??j.snapshot.agentId,parentAgentId:j.snapshot.parentAgentId??null},B={...$$("tool_result",H,$),hookName:"tool_result",iteration:j.snapshot.iteration,tool_result:V,postToolUse:{toolName:V.name,parameters:yA(V.input),result:typeof V.output==="string"?V.output:JSON.stringify(V.output),success:!V.error,executionTimeMs:V.durationMs}};await v2(B,$);return},afterRun:async({snapshot:j,result:V})=>{let H={agentId:j.agentId,conversationId:j.conversationId??j.runId??j.agentId,parentAgentId:j.parentAgentId??null};if(V.status==="completed"){let K={...$$("agent_end",H,$),hookName:"agent_end",iteration:V.iterations,turn:{outputText:V.outputText,status:V.status},taskComplete:{taskMetadata:{}}};await v2(K,$);return}let B=V.status==="aborted"||Yb(V.error?.message)?"agent_abort":"agent_error",G=B==="agent_error"?{...$$(B,H,$),hookName:B,iteration:V.iterations,error:Xb(V.error??Error("Agent run failed")),taskCancel:{taskMetadata:{}}}:{...$$(B,H,$),hookName:B,reason:V.error?.message,taskCancel:{taskMetadata:{}}};await v2(G,$)},onEvent:async(j)=>{if(j.type!=="message-added"||j.message.role!=="user")return;let V={agentId:j.snapshot.agentId,conversationId:j.snapshot.conversationId??j.snapshot.runId??j.snapshot.agentId,parentAgentId:j.snapshot.parentAgentId??null},H={...$$("prompt_submit",V,$),hookName:"prompt_submit",userPromptSubmit:{prompt:Vb(j.message.content),attachments:[]}};await v2(H,$)}},shutdown:async({agentId:j,conversationId:V,parentAgentId:H,reason:B})=>{let G={...$$("session_shutdown",{agentId:j,conversationId:V,parentAgentId:H},$),hookName:"session_shutdown",reason:B};await v2(G,$)}}}$7();var xA={};N(xA,{registerRemoteConfigSessionBlobUpload:()=>W7,readRemoteConfigSessionBlobUploadMetadata:()=>LX,prepareRemoteConfigCoreIntegration:()=>zX,createRemoteConfigSessionMessagesArtifactUploader:()=>_X,buildRemoteConfigSessionBlobUploadMetadata:()=>Z7,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY:()=>Q7});import{buildRemoteConfigSessionBlobUploadMetadata as Z7,clearRemoteConfigSessionBlobUpload as Gb,createClineTelemetryServiceConfig as Kb,createSessionId as Fb,createRemoteConfigSessionMessagesArtifactUploader as Ab,prepareRemoteConfigRuntime as fb,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY as Q7,readRemoteConfigSessionBlobUploadMetadata as LX,registerRemoteConfigSessionBlobUpload as W7}from"@cline/shared";function Ub($,Z){let Q=$.telemetry||Z.telemetryService?{...Z.telemetryService??{},...$.telemetry??{}}:void 0;if(!Q)return;return h1(Kb(Q)).telemetry}function _X(){let $=Ab();return{async uploadMessagesFile(Z){await $.uploadMessagesFile(Z)}}}async function zX($){let Z=await fb($),Q=Ub(Z,$),W=[Z.pluginDefinition],J=Z.claims?.subject,X=Z7(Z.bundle?.remoteConfig,J),Y;return{prepared:Z,extensions:W,telemetry:Q,applyToStartSessionInput(j){let V=j.config.extensions??[],H=j.config.telemetry,B=X?j.config.sessionId?.trim()||Fb():j.config.sessionId;if(B&&X)Y=B;let G=B&&X?W7(B,Z.bundle?.remoteConfig,J):void 0,K=G?{...j.sessionMetadata??{},[Q7]:G}:j.sessionMetadata;return{...j,...K?{sessionMetadata:K}:{},config:{...j.config,...B?{sessionId:B}:{},extensions:[...V,...W],telemetry:Q??H}}},async dispose(){if(Y)Gb(Y)}}}var lA={};N(lA,{createTeamName:()=>Y7,DefaultRuntimeBuilder:()=>T4});import{hasRuntimeConfigExtension as Pb}from"@cline/shared";import{nanoid as Sb}from"nanoid";$1();var dA={};N(dA,{createLocalTeamStore:()=>MX,SqliteTeamStore:()=>c2,FileTeamStore:()=>p5});import{appendFileSync as Db,existsSync as _4,mkdirSync as gA,readdirSync as Lb,readFileSync as mA,renameSync as _b,writeFileSync as zb}from"node:fs";import{join as TX}from"node:path";import{resolveTeamDataDir as Tb}from"@cline/shared/storage";function vA(){return new Date().toISOString()}function OX($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function cA($){return{...$,tasks:$.tasks.map((Z)=>({...Z,createdAt:new Date(Z.createdAt),updatedAt:new Date(Z.updatedAt)})),mailbox:$.mailbox.map((Z)=>({...Z,sentAt:new Date(Z.sentAt),readAt:Z.readAt?new Date(Z.readAt):void 0})),missionLog:$.missionLog.map((Z)=>({...Z,ts:new Date(Z.ts)})),runs:($.runs??[]).map((Z)=>({...Z,startedAt:new Date(Z.startedAt),endedAt:Z.endedAt?new Date(Z.endedAt):void 0,nextAttemptAt:Z.nextAttemptAt?new Date(Z.nextAttemptAt):void 0,heartbeatAt:Z.heartbeatAt?new Date(Z.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),finalizedAt:Z.finalizedAt?new Date(Z.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),reviewedAt:Z.reviewedAt?new Date(Z.reviewedAt):void 0}))}}class p5{teamDirPath;constructor($={}){this.teamDirPath=$.teamDir??Tb()}init(){this.ensureTeamDir()}listTeamNames(){if(!_4(this.teamDirPath))return[];return Lb(this.teamDirPath,{withFileTypes:!0}).filter(($)=>$.isDirectory()).filter(($)=>_4(this.statePath($.name))).map(($)=>$.name).sort()}readState($){let Z=this.readEnvelope($);return Z?.teamState?cA(Z.teamState):void 0}readHistory($,Z=200){let Q=this.historyPath($);if(!_4(Q))return[];return mA(Q,"utf8").split(`
|
|
582
|
-
`).map((W)=>W.trim()).filter(Boolean).map((W)=>{try{return JSON.parse(W)}catch{return}}).filter((W)=>W!==void 0).reverse().slice(0,Z)}loadRuntime($){let Z=this.readEnvelope($);return{state:Z?.teamState?cA(Z.teamState):void 0,teammates:Z?.teammates??[],interruptedRunIds:[]}}handleTeamEvent($,Z){this.ensureTeamSubdir($),
|
|
583
|
-
`,"utf8")}persistRuntime($,Z,Q){this.ensureTeamSubdir($);let W={version:1,updatedAt:vA(),teamState:Z,teammates:Q},J=this.statePath($),X=`${J}.tmp`;
|
|
584
|
-
`,"utf8"),
|
|
579
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.sessionId,$.source,$.pid,$.startedAt,null,null,"running",0,$.interactive?1:0,$.provider,$.model,$.cwd,$.workspaceRoot,$.teamName??null,$.enableTools?1:0,$.enableSpawn?1:0,$.enableTeams?1:0,null,null,null,null,0,$.prompt??null,$.metadata?JSON.stringify($.metadata):null,"","",$.messagesPath,J0()])}}function SS($){if($.backendMode)return $.backendMode;if(process.env.CLINE_VCR?.trim())return"local";let Z=process.env.CLINE_SESSION_BACKEND_MODE?.trim().toLowerCase();if(Z==="local"||Z==="hub"||Z==="remote")return Z;return"auto"}var c5,u5;function bS($,Z){if($!=="auto"&&$!=="hub")return;if(Z.hub?.endpoint?.trim())return;a9(Z.hub?.workspaceRoot?.trim()||Z.hub?.cwd?.trim()||process.cwd())}async function yS($){await $.reconcileDeadSessions?.().catch(()=>{})}function _A($){try{let Z=new L1;return Z.init(),new z1(Z,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}catch(Z){return $.telemetry?.capture({event:"session_backend_fallback",properties:{requestedBackend:"sqlite",fallbackBackend:"file"}}),LA($.telemetry,{component:"core",operation:"session_backend.sqlite_init",error:Z,severity:"warn",handled:!0,context:{requestedBackend:"sqlite",fallbackBackend:"file"}}),new VX(void 0,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}}function DA($,Z,Q){return new T1({sessionService:Q??$.sessionService??_A($),capabilities:$.capabilities,telemetry:$.telemetry,toolPolicies:$.toolPolicies,distinctId:Z,fetch:$.fetch})}async function KX($){if(c5)return c5;if(u5)return await u5;return u5=(async()=>{return c5=_A($),await yS(c5),c5})().finally(()=>{u5=void 0}),await u5}async function K4($){let Z=P0($.distinctId);$.telemetry?.setDistinctId(Z);let Q=SS($);if(bS(Q,$),Q==="remote"){let W=$.remote?.endpoint?.trim();if(!W)throw Error("Remote runtime mode requires `remote.endpoint` to be configured.");return $.logger?.log("Using remote runtime host",{endpoint:W}),new X4({endpoint:W,authToken:$.remote?.authToken,clientType:$.remote?.clientType,displayName:$.remote?.displayName,workspaceRoot:$.remote?.workspaceRoot,cwd:$.remote?.cwd,capabilities:$.capabilities})}if(Q==="hub"){let W=$.hub?.endpoint?.trim(),J=W||await $2({strategy:$.hub?.strategy??"require-hub",workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});if(!J)throw Error("No compatible hub runtime is available.");return $.logger?.log("Using hub runtime host",{url:J,explicitEndpoint:W||void 0}),new o1({url:J,authToken:$.hub?.authToken,clientType:$.hub?.clientType,displayName:$.hub?.displayName,capabilities:$.capabilities,telemetry:$.telemetry},{workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd})}if(Q==="auto"){let W=await o4({endpoint:$.hub?.endpoint,strategy:$.hub?.strategy??"prefer-hub",workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});if(W){$.logger?.log("Using discovered local hub runtime host",{url:W});let J=new o1({url:W,authToken:$.hub?.authToken,clientType:$.hub?.clientType,displayName:$.hub?.displayName,capabilities:$.capabilities,telemetry:$.telemetry},{workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});try{return await J.connect(),J}catch(X){$.logger?.log("Falling back to local runtime host",{reason:"hub_connect_failed",severity:"warn",error:X}),LA($.telemetry,{component:"core",operation:"runtime_host.hub_connect",error:X,severity:"warn",handled:!0,context:{backendMode:"auto",fallbackBackend:"local"}})}}return $.logger?.log("Falling back to local runtime host",{reason:"compatible_hub_unavailable",severity:"warn"}),DA($,Z)}return DA($,Z)}var NA={};N(NA,{createCheckpointComparePlan:()=>aQ,compareCheckpointToWorkspace:()=>d5,buildCheckpointWorkspaceDiff:()=>sQ});import{execFile as IS}from"node:child_process";import*as RA from"node:fs/promises";import*as f4 from"node:path";import{promisify as xS}from"node:util";var qA={};N(qA,{trimMessagesToCheckpoint:()=>OA,trimMessagesBeforeCheckpoint:()=>AX,readSessionCheckpointHistory:()=>I2,findCheckpointForRun:()=>A4,createRestoredCheckpointMetadata:()=>FX,createCheckpointRestorePlan:()=>fX,applyCheckpointToWorktree:()=>UX});import{execFile as hS}from"node:child_process";import{promisify as kS}from"node:util";var F4=kS(hS);function I2($){let Z=$?.metadata?.checkpoint&&typeof $.metadata.checkpoint==="object"&&!Array.isArray($.metadata.checkpoint)?$.metadata.checkpoint:void 0;return(Array.isArray(Z?.history)?Z.history:[]).filter((W)=>!!W&&typeof W==="object"&&!Array.isArray(W)).flatMap((W)=>{let J=String(W.ref??"").trim(),X=Number(W.createdAt??0),Y=Number(W.runCount??0);if(J.length===0||!Number.isFinite(X)||!Number.isInteger(Y)||Y<1)return[];let j=W.kind==="stash"||W.kind==="commit"?W.kind:void 0;return[{ref:J,createdAt:X,runCount:Y,...j?{kind:j}:{}}]})}function FX($,Z){let Q=I2($).filter((J)=>J.runCount<=Z),W=Q.at(-1);return W?{latest:W,history:Q}:void 0}function A4($,Z){return $.reduce((Q,W)=>{if(W.runCount>Z)return Q;if(!Q||W.runCount>Q.runCount)return W;return Q},void 0)}function TA($,Z){let Q=0;for(let W=0;W<$.length;W+=1){let J=$[W];if(J?.role!=="user")continue;if(("metadata"in J&&J.metadata&&typeof J.metadata==="object"?J.metadata:void 0)?.kind==="recovery_notice")continue;if(Q+=1,Q===Z)return W}throw Error(`Could not find user message for checkpoint run ${Z}`)}function OA($,Z){let Q=TA($,Z);return $.slice(0,Q+1)}function AX($,Z){let Q=TA($,Z);return $.slice(0,Q)}function fX($){let Z=$.checkpointRunCount;if(!Number.isInteger(Z)||Z<1)throw Error("checkpointRunCount must be a positive integer");let Q=A4(I2($.session),Z);if(!Q)throw Error(`No checkpoint found at or before run ${Z} in session ${$.session.sessionId}`);let W=($.cwd?.trim()||$.session.cwd||$.session.workspaceRoot).trim();if(!W)throw Error("cwd or workspaceRoot is required to restore a checkpoint");return{checkpoint:Q,cwd:W,...$.restoreMessages!==!1?{messages:OA($.messages??[],Z)}:{}}}async function UX($,Z){if((await F4("git",["-C",$,"rev-parse","--is-inside-work-tree"],{windowsHide:!0})).stdout.trim()!=="true")throw Error(`${$} is not a git repository`);if(await F4("git",["-C",$,"cat-file","-e",`${Z.ref}^{commit}`],{windowsHide:!0}),await F4("git",["-C",$,"reset","--hard"],{windowsHide:!0}),await F4("git",["-C",$,"clean","-fd"],{windowsHide:!0}),Z.kind==="commit"){await F4("git",["-C",$,"reset","--hard",Z.ref],{windowsHide:!0});return}await F4("git",["-C",$,"stash","apply",Z.ref],{windowsHide:!0})}var gS=xS(IS),mS=52428800;async function nQ($,Z){let{stdout:Q}=await gS("git",["-C",$,...Z],{windowsHide:!0,maxBuffer:mS,encoding:"utf8"});return Q}function MA($){return $.split("\x00").filter(Boolean)}function EA($,Z){let Q=f4.resolve($,Z),W=f4.relative($,Q);if(W.startsWith("..")||f4.isAbsolute(W))throw Error(`Checkpoint diff path escapes workspace: ${Z}`);return Q}async function vS($,Z,Q){try{return await nQ($,["show",`${Z}:${Q}`])}catch{return""}}async function cS($,Z){try{return await RA.readFile(EA($,Z),"utf8")}catch{return""}}async function uS($,Z){await nQ($,["cat-file","-e",`${Z.ref}^{tree}`]);let[Q,W]=await Promise.all([nQ($,["diff","--name-only","-z",Z.ref,"--"]),nQ($,["ls-files","--others","--exclude-standard","-z"])]);return[...new Set([...MA(Q),...MA(W)])].sort((X,Y)=>X.localeCompare(Y))}function aQ($){let Z=$.checkpointRunCount;if(!Number.isInteger(Z)||Z<1)throw Error("checkpointRunCount must be a positive integer");let Q=A4(I2($.session),Z);if(!Q)throw Error(`No checkpoint found at or before run ${Z} in session ${$.session.sessionId}`);let W=($.cwd?.trim()||$.session.cwd||$.session.workspaceRoot).trim();if(!W)throw Error("cwd or workspaceRoot is required to compare a checkpoint");return{checkpoint:Q,cwd:W}}async function sQ($,Z){let Q=await uS($,Z);return(await Promise.all(Q.map(async(J)=>{let[X,Y]=await Promise.all([vS($,Z.ref,J),cS($,J)]);return{filePath:EA($,J),leftContent:X,rightContent:Y}}))).filter((J)=>J.leftContent!==J.rightContent)}async function d5($){let Z=aQ($),Q=await sQ(Z.cwd,Z.checkpoint);return{...Z,diffs:Q}}var PA={};N(PA,{NoOpFeatureFlagsProvider:()=>g2,FeatureFlagsService:()=>x2});import{existsSync as dS,mkdirSync as lS,readFileSync as pS,writeFileSync as rS}from"node:fs";import{dirname as iS}from"node:path";import{FEATURE_FLAGS as wA,FeatureFlagDefaultValue as DX}from"@cline/shared";var nS=3600000,aS=604800000,CA=1;class x2{provider;telemetry;logger;cacheTtlMs;cacheFilePath;persistentCacheMaxAgeMs;context;cache=new Map;cacheInfo={updateTime:0,userId:null};constructor($){this.provider=$.provider,this.telemetry=$.telemetry,this.logger=$.logger,this.cacheTtlMs=$.cacheTtlMs??nS,this.cacheFilePath=$.cacheFilePath,this.persistentCacheMaxAgeMs=$.persistentCacheMaxAgeMs??aS,this.context={...$.context??{}},this.hydrateFromPersistentCache()}setContext($){this.context={...$}}hydrateCache($){this.cacheInfo={updateTime:$.updateTime,userId:$.userId,flagsPayload:$.flagsPayload},this.rebuildCacheFromSnapshot($.flagsPayload)}getCacheSnapshot(){return{updateTime:this.cacheInfo.updateTime,userId:this.cacheInfo.userId,flagsPayload:this.cacheInfo.flagsPayload}}async poll($){let Z=$??this.context.userId??null,Q=Date.now();if(Q-this.cacheInfo.updateTime<this.cacheTtlMs){if(this.cacheInfo.userId===Z)return}let W=this.cacheInfo;this.cacheInfo={updateTime:Q,userId:Z||null};try{let J=await this.provider.getAllFlagsAndPayloads({flagKeys:wA.length>0?wA:void 0,context:{...this.context,userId:Z}});if(this.cacheInfo.userId!==Z)return;this.cacheInfo.flagsPayload=J,this.rebuildCacheFromSnapshot(J),this.writePersistentCache()}catch(J){if(this.cacheInfo.userId!==Z)return;throw this.cacheInfo=W.updateTime?W:{updateTime:0,userId:null},this.logger?.error?.("Error polling SDK feature flags",{error:J}),J}}hydrateFromPersistentCache(){let $=this.readPersistentCache();if($)this.hydrateCache($)}isFeatureFlagPayload($){if($===null||typeof $==="string"||typeof $==="number"||typeof $==="boolean")return!0;if(Array.isArray($))return $.every((Z)=>this.isFeatureFlagPayload(Z));if(typeof $==="object")return Object.values($).every((Z)=>this.isFeatureFlagPayload(Z));return!1}readPayloadRecord($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=Object.entries($).filter(([,W])=>this.isFeatureFlagPayload(W));if(Z.length===0)return;let Q={};for(let[W,J]of Z)Q[W]=J;return Q}readPersistentCache(){try{if(!this.cacheFilePath||!dS(this.cacheFilePath))return;let $=JSON.parse(pS(this.cacheFilePath,"utf8"));if(!$||typeof $!=="object")return;let Z=$;if(Z.version!==CA||typeof Z.updatedAt!=="number"||!Number.isFinite(Z.updatedAt)||Date.now()-Z.updatedAt>this.persistentCacheMaxAgeMs)return;return{updateTime:Z.updatedAt,userId:Z.userId??null,flagsPayload:{featureFlags:this.readPayloadRecord(Z.flagsPayload?.featureFlags),featureFlagPayloads:this.readPayloadRecord(Z.flagsPayload?.featureFlagPayloads)}}}catch($){this.logger?.error?.("Error reading SDK feature flags cache",{error:$});return}}writePersistentCache(){try{if(!this.cacheFilePath)return;lS(iS(this.cacheFilePath),{recursive:!0,mode:448});let $=this.getCacheSnapshot(),Z={version:CA,updatedAt:$.updateTime,userId:$.userId,flagsPayload:$.flagsPayload};rS(this.cacheFilePath,`${JSON.stringify(Z,null,2)}
|
|
580
|
+
`,"utf8")}catch($){this.logger?.error?.("Error writing SDK feature flags cache",{error:$})}}getReturnedFlagKeys($){return[...new Set([...Object.keys($?.featureFlags??{}),...Object.keys($?.featureFlagPayloads??{})])]}rebuildCacheFromSnapshot($){let Z=new Map;for(let Q of this.getReturnedFlagKeys($)){let W=this.getFeatureFlag(Q);Z.set(Q,W??!1)}this.cache=Z}getFeatureFlag($){try{let Z=this.cacheInfo.flagsPayload?.featureFlagPayloads?.[$],Q=this.cacheInfo.flagsPayload?.featureFlags?.[$],W=Z??Q??DX[$]??void 0;if(!this.cache.has($)||this.cache.get($)!==W)this.telemetry?.capture({event:m.FEATURE_FLAGS.FLAG_CALLED,properties:{$feature_flag:$,$feature_flag_response:Q}});return W}catch(Z){return this.logger?.error?.(`Error checking SDK feature flag ${$}`,{error:Z}),DX[$]??!1}}getBooleanFlagEnabled($){return this.cache.get($)===!0}getFlagPayload($){return this.cache.get($)??DX[$]}getProvider(){return this.provider}get enabled(){return this.provider.enabled}getSettings(){return this.provider.getSettings()}test($,Z){if(process.env.IS_TEST==="true")this.cache.set($,Z)}async dispose(){await this.provider.dispose()}}class g2{async getAllFlagsAndPayloads(){return{}}enabled=!1;getSettings(){return{enabled:!1,timeoutMs:1000}}async dispose(){}}J8();class l5{clientName;runtimeAddress;automation;settings;featureFlags;pendingPrompts;host;prepare;capabilities;logger;telemetry;distinctId;automationService;activeSessionBootstraps=new Map;unsubscribeBootstrapCleanup;constructor($,Z,Q,W,J,X,Y,j,V,H){this.clientName=Z,this.runtimeAddress=Q,this.host=$,this.prepare=W,this.capabilities=J,this.logger=X,this.telemetry=Y,this.distinctId=j,this.featureFlags=V,this.settings=fF($),this.pendingPrompts=UF($),this.automation=new UJ(()=>{if(!this.automationService)throw Error("ClineCore automation is not enabled. Pass `automation: true` or automation options to ClineCore.create().");return this.automationService}),this.automationService=H?new P5({workspaceRoot:H.workspaceRoot??process.cwd(),specs:{cronSpecsDir:H.cronSpecsDir??H.cronDir,scope:GK(H.cronScope),workspaceRoot:H.workspaceRoot},runtimeHandlers:KK({host:$,getExtensionContext:()=>zQ({automationService:this.automationService,automation:this.automation,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}),dbPath:H.dbPath,logger:H.logger,pollIntervalMs:H.pollIntervalMs,claimLeaseSeconds:H.claimLeaseSeconds,globalMaxConcurrency:H.globalMaxConcurrency,watcherDebounceMs:H.watcherDebounceMs}):void 0,this.unsubscribeBootstrapCleanup=this.host.subscribe((B)=>{if(B.type!=="ended")return;this.disposeSessionBootstrap(B.payload.sessionId)})}static async create($={}){let Z=P0($.distinctId),Q=M0($.capabilities),W={...$,capabilities:Q,distinctId:Z},J=await K4(W),X=BK($.automation),Y=$.featureFlags||new x2({provider:new g2,telemetry:$.telemetry,logger:$.logger,context:{distinctId:Z,clientName:$.clientName}}),j=new l5(J,$.clientName,J.runtimeAddress,$.prepare,Q,$.logger,$.telemetry,Z,Y,X?{...X,logger:$.logger}:void 0);if(X&&X.autoStart!==!1)await j.automation.start();return j}async disposeSessionBootstrap($){let Z=this.activeSessionBootstraps.get($);if(!Z)return;this.activeSessionBootstraps.delete($),await Promise.resolve(Z.dispose?.())}async start($){let Z=DF($),Q=await this.prepare?.(Z);try{let W=Q?await Q.applyToStartSessionInput(Z):Z,J=await this.host.startSession(yJ(W,{defaultCapabilities:this.capabilities,withExtensionContext:(X)=>zQ({automationService:this.automationService,automation:this.automation,context:X,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}));if(Q)if(await this.host.getSession(J.sessionId))this.activeSessionBootstraps.set(J.sessionId,Q);else await Promise.resolve(Q.dispose?.());return LF({input:W,sessionId:J.sessionId,telemetry:this.telemetry,clientName:this.clientName,runtimeAddress:this.runtimeAddress}),J}catch(W){throw await Promise.resolve(Q?.dispose?.()),W}}send=(...$)=>this.host.runTurn(...$);getAccumulatedUsage=(...$)=>{return this.host.getAccumulatedUsage?.(...$)??Promise.resolve(void 0)};abort=(...$)=>this.host.abort(...$);stop=async($)=>{await this.host.stopSession($),await this.disposeSessionBootstrap($)};dispose=async(...$)=>{try{await this.automationService?.dispose(),await this.host.dispose(...$)}finally{this.unsubscribeBootstrapCleanup();let Z=[...this.activeSessionBootstraps.keys()];await Promise.allSettled(Z.map((Q)=>this.disposeSessionBootstrap(Q)))}};get=(...$)=>this.host.getSession(...$);listHistory=async($={})=>await cQ(this.host,$);list=async($=200,Z={})=>await this.listHistory({...Z,limit:$});delete=async($)=>{let Z=await this.host.deleteSession($);if(Z)await this.disposeSessionBootstrap($);return Z};update=(...$)=>this.host.updateSession(...$);readMessages=(...$)=>this.host.readSessionMessages(...$);async restore($){let Z=$.start?yJ($.start,{defaultCapabilities:this.capabilities,withExtensionContext:(Q)=>zQ({automationService:this.automationService,automation:this.automation,context:Q,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}):void 0;return this.host.restoreSession({sessionId:$.sessionId,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd,restore:$.restore,start:Z})}async compareCheckpoint($){let Z=$.sessionId.trim();if(!Z)throw Error("sessionId is required");let Q=await this.host.getSession(Z);if(!Q)throw Error(`Session ${Z} not found`);return d5({session:Q,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd})}ingestHookEvent=(...$)=>this.host.dispatchHookEvent(...$);subscribe($,Z){return this.host.subscribe($,Z)}updateSessionModel=(...$)=>{return this.host.updateSessionModel?.(...$)??Promise.resolve()}}var bA={};N(bA,{resolvePluginSkillDirectoriesFromPaths:()=>n1,resolvePluginConfigSearchPaths:()=>i6,resolveAndLoadAgentPlugins:()=>g8,resolveAgentPluginPaths:()=>i1,loadAgentPluginsFromPathsWithDiagnostics:()=>z2,loadAgentPluginsFromPaths:()=>gZ,loadAgentPluginFromPath:()=>p6,discoverPluginModulePaths:()=>n6});var kA={};N(kA,{toHookConfigFileName:()=>o6,runSubprocessEvent:()=>U4,runHook:()=>L4,resolveHooksConfigSearchPaths:()=>a6,parseHookEventPayload:()=>D4,mergeAgentHooks:()=>M2,listHookConfigFiles:()=>N$,createSubprocessHooks:()=>eQ,createHookConfigFileHooks:()=>t6,createHookConfigFileExtension:()=>u8,createHookAuditHooks:()=>c8,createAgentHooksExtension:()=>m8,HookEventPayloadSchema:()=>tQ,HookEventNameSchema:()=>oQ,HookConfigFileName:()=>v8,HOOK_CONFIG_FILE_EVENT_MAP:()=>s6,HOOKS_CONFIG_DIRECTORY_NAME:()=>lZ});import{HookEventNameSchema as oQ,HookEventPayloadSchema as tQ,parseHookEventPayload as D4,resolveHookSessionContext as Qb}from"@cline/shared";import{z as m2}from"zod";import{spawn as sS}from"node:child_process";import{augmentNodeCommandForDebug as oS,withResolvedClineBuildEnv as tS}from"@cline/shared";function eS($){let Z=$.trim();if(!Z)return{};let W=Z.split(`
|
|
581
|
+
`).map((X)=>X.trim()).filter(Boolean).filter((X)=>X.startsWith("HOOK_CONTROL\t")).map((X)=>X.slice(13)),J=W.length>0?W[W.length-1]:Z;try{return{parsedJson:JSON.parse(J)}}catch(X){return{parseError:X instanceof Error?X.message:"Failed to parse subprocess stdout JSON"}}}function $b($,Z){let Q=$ instanceof Error?$:Error(String($)),W=Q,J=Z.join(" ");if(W.code==="EACCES")return Error(`Failed to execute hook command "${J}" (EACCES). Configure hooks with an explicit interpreter/command array (for example: ["bash", "/path/to/script"]) or make the script executable with a valid shebang.`);return Error(`Failed to execute hook command "${J}": ${Q.message}`)}async function Zb($,Z){let Q=$.stdin;if(!Q)throw Error("runSubprocessEvent failed to create stdin pipe");await new Promise((W,J)=>{let X=(Y)=>{Q.off("error",X);let j=Y.code;if(j==="EPIPE"||j==="ERR_STREAM_DESTROYED"){W();return}J(Y)};Q.once("error",X),Q.end(Z,(Y)=>{if(Q.off("error",X),Y){let j=Y.code;if(j==="EPIPE"||j==="ERR_STREAM_DESTROYED"){W();return}J(Y);return}W()})})}async function U4($,Z){let Q=oS(Z.command,{env:Z.env,debugRole:"hook"});if(!Array.isArray(Q)||Q.length===0)throw Error("runSubprocessEvent requires a non-empty command");let W=!!Z.detached,J=sS(Q[0],Q.slice(1),{cwd:Z.cwd,env:tS(Z.env),stdio:W?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:W,windowsHide:!0}),X=new Promise((K)=>{J.once("spawn",()=>{try{Z.onSpawn?.({command:Q,pid:J.pid??void 0,detached:W})}catch{}K()})}),Y=new Promise((K,F)=>{J.once("error",(A)=>{F($b(A,Q))})});if(await Zb(J,JSON.stringify($)),W){await Promise.race([X,Y]),J.unref();return}if(!J.stdout||!J.stderr)throw Error("runSubprocessEvent failed to create stdout/stderr pipes");let j="",V="",H=!1,B;J.stdout.on("data",(K)=>{j+=K.toString()}),J.stderr.on("data",(K)=>{V+=K.toString()});let G=new Promise((K)=>{if((Z.timeoutMs??0)>0)B=setTimeout(()=>{H=!0,J.kill("SIGKILL")},Z.timeoutMs);J.once("close",(F)=>{if(B)clearTimeout(B);let{parsedJson:A,parseError:L}=eS(j);K({exitCode:F,stdout:j,stderr:V,parsedJson:A,parseError:L,timedOut:H})})});return await Promise.race([G,Y])}var Wb=m2.object({contextModification:m2.string().optional(),cancel:m2.boolean().optional(),review:m2.boolean().optional(),errorMessage:m2.string().optional(),context:m2.string().optional(),overrideInput:m2.unknown().optional()}).passthrough();var Jb=["agent","hook"];async function L4($,Z={}){let Q=Z.command??Jb;return await U4($,{command:Q,cwd:Z.cwd,env:Z.env,detached:Z.detached,timeoutMs:Z.timeoutMs,onSpawn:Z.onSpawn})}function hA($){return $ instanceof Error?$:Error(String($))}function Xb($){if(!$||typeof $!=="object")return;let Z=Wb.safeParse($);if(!Z.success)return;let Q=Z.data;if(!(("cancel"in Q)||("review"in Q)||("context"in Q)||("contextModification"in Q)||("overrideInput"in Q)||("errorMessage"in Q)))return;let J=typeof Q.context==="string"?Q.context:typeof Q.contextModification==="string"?Q.contextModification:typeof Q.errorMessage==="string"&&Q.errorMessage.length>0?Q.errorMessage:void 0;return{cancel:typeof Q.cancel==="boolean"?Q.cancel:void 0,review:typeof Q.review==="boolean"?Q.review:void 0,context:J,overrideInput:Object.hasOwn(Q,"overrideInput")?Q.overrideInput:void 0}}function yA($){if(!$||typeof $!=="object")return{};let Z={};for(let[Q,W]of Object.entries($))if(typeof W==="string")Z[Q]=W;else Z[Q]=JSON.stringify(W);return Z}function $$($,Z,Q){let W=Q.env??process.env,J=W.CLINE_USER_ID?.trim()||W.USER?.trim()||"unknown",X=Q.cwd||process.cwd();return{clineVersion:W.CLINE_VERSION?.trim()||"",hookName:$,timestamp:new Date().toISOString(),taskId:Z.conversationId,sessionContext:Qb(Q.sessionContext,{hookName:$,conversationId:Z.conversationId,agentId:Z.agentId,parentAgentId:Z.parentAgentId}),workspaceRoots:X?[X]:[],workspaceInfo:Q.workspaceInfo,userId:J,agent_id:Z.agentId,parent_agent_id:Z.parentAgentId}}function Yb($){return{name:$.name,message:$.message,stack:$.stack}}function jb($){let Z=String($??"").toLowerCase();return Z.includes("cancel")||Z.includes("abort")||Z.includes("interrupt")}function Vb($){return{agentId:$.snapshot.agentId,conversationId:$.snapshot.conversationId??$.snapshot.runId??$.snapshot.agentId,parentAgentId:$.snapshot.parentAgentId??null}}function Hb($){return $.filter((Z)=>Z.type==="text"&&typeof Z.text==="string").map((Z)=>Z.text).join("")}function Bb($){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 Gb($){if(!$)return;let Z={};if($.cancel===!0)Z.stop=!0;if($.overrideInput!==void 0)Z.input=$.overrideInput;return Object.keys(Z).length>0?Z:void 0}async function v2($,Z){try{let Q=await L4($,{command:Z.command,cwd:Z.cwd,env:Z.env,detached:!0,onSpawn:Z.onSpawn});Z.onDispatch?.({payload:$,result:Q,detached:!0})}catch(Q){Z.onDispatchError?.(hA(Q),$)}}function eQ($={}){return{hooks:{beforeRun:async(j)=>{let V=Vb(j);if(($.env??process.env).CLINE_HOOK_AGENT_RESUME==="1"){let B={...$$("agent_resume",V,$),hookName:"agent_resume",taskResume:{taskMetadata:{},previousState:{}}};await v2(B,$)}else{let B={...$$("agent_start",V,$),hookName:"agent_start",taskStart:{taskMetadata:{}}};await v2(B,$)}return},beforeTool:async(j)=>{let V={agentId:j.snapshot.agentId,conversationId:j.snapshot.conversationId??j.snapshot.runId??j.snapshot.agentId,parentAgentId:j.snapshot.parentAgentId??null},H={...$$("tool_call",V,$),hookName:"tool_call",iteration:j.snapshot.iteration,tool_call:{id:j.toolCall.toolCallId,name:j.toolCall.toolName,input:j.input},preToolUse:{toolName:j.toolCall.toolName,parameters:yA(j.input)}};try{let B=await L4(H,{command:$.command,cwd:$.cwd,env:$.env,detached:!1,timeoutMs:$.timeoutMs,onSpawn:$.onSpawn});if($.onDispatch?.({payload:H,result:B,detached:!1}),B?.timedOut)throw Error("tool_call hook command timed out");if(B?.parseError)throw Error(`tool_call hook produced invalid control JSON: ${B.parseError}`);return Gb(Xb(B?.parsedJson))}catch(B){$.onDispatchError?.(hA(B),H);return}},afterTool:async(j)=>{let V=Bb(j),H={agentId:j.snapshot.agentId,conversationId:j.snapshot.conversationId??j.snapshot.runId??j.snapshot.agentId,parentAgentId:j.snapshot.parentAgentId??null},B={...$$("tool_result",H,$),hookName:"tool_result",iteration:j.snapshot.iteration,tool_result:V,postToolUse:{toolName:V.name,parameters:yA(V.input),result:typeof V.output==="string"?V.output:JSON.stringify(V.output),success:!V.error,executionTimeMs:V.durationMs}};await v2(B,$);return},afterRun:async({snapshot:j,result:V})=>{let H={agentId:j.agentId,conversationId:j.conversationId??j.runId??j.agentId,parentAgentId:j.parentAgentId??null};if(V.status==="completed"){let K={...$$("agent_end",H,$),hookName:"agent_end",iteration:V.iterations,turn:{outputText:V.outputText,status:V.status},taskComplete:{taskMetadata:{}}};await v2(K,$);return}let B=V.status==="aborted"||jb(V.error?.message)?"agent_abort":"agent_error",G=B==="agent_error"?{...$$(B,H,$),hookName:B,iteration:V.iterations,error:Yb(V.error??Error("Agent run failed")),taskCancel:{taskMetadata:{}}}:{...$$(B,H,$),hookName:B,reason:V.error?.message,taskCancel:{taskMetadata:{}}};await v2(G,$)},onEvent:async(j)=>{if(j.type!=="message-added"||j.message.role!=="user")return;let V={agentId:j.snapshot.agentId,conversationId:j.snapshot.conversationId??j.snapshot.runId??j.snapshot.agentId,parentAgentId:j.snapshot.parentAgentId??null},H={...$$("prompt_submit",V,$),hookName:"prompt_submit",userPromptSubmit:{prompt:Hb(j.message.content),attachments:[]}};await v2(H,$)}},shutdown:async({agentId:j,conversationId:V,parentAgentId:H,reason:B})=>{let G={...$$("session_shutdown",{agentId:j,conversationId:V,parentAgentId:H},$),hookName:"session_shutdown",reason:B};await v2(G,$)}}}$7();var xA={};N(xA,{registerRemoteConfigSessionBlobUpload:()=>W7,readRemoteConfigSessionBlobUploadMetadata:()=>LX,prepareRemoteConfigCoreIntegration:()=>zX,createRemoteConfigSessionMessagesArtifactUploader:()=>_X,buildRemoteConfigSessionBlobUploadMetadata:()=>Z7,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY:()=>Q7});import{buildRemoteConfigSessionBlobUploadMetadata as Z7,clearRemoteConfigSessionBlobUpload as Kb,createClineTelemetryServiceConfig as Fb,createSessionId as Ab,createRemoteConfigSessionMessagesArtifactUploader as fb,prepareRemoteConfigRuntime as Ub,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY as Q7,readRemoteConfigSessionBlobUploadMetadata as LX,registerRemoteConfigSessionBlobUpload as W7}from"@cline/shared";function Db($,Z){let Q=$.telemetry||Z.telemetryService?{...Z.telemetryService??{},...$.telemetry??{}}:void 0;if(!Q)return;return h1(Fb(Q)).telemetry}function _X(){let $=fb();return{async uploadMessagesFile(Z){await $.uploadMessagesFile(Z)}}}async function zX($){let Z=await Ub($),Q=Db(Z,$),W=[Z.pluginDefinition],J=Z.claims?.subject,X=Z7(Z.bundle?.remoteConfig,J),Y;return{prepared:Z,extensions:W,telemetry:Q,applyToStartSessionInput(j){let V=j.config.extensions??[],H=j.config.telemetry,B=X?j.config.sessionId?.trim()||Ab():j.config.sessionId;if(B&&X)Y=B;let G=B&&X?W7(B,Z.bundle?.remoteConfig,J):void 0,K=G?{...j.sessionMetadata??{},[Q7]:G}:j.sessionMetadata;return{...j,...K?{sessionMetadata:K}:{},config:{...j.config,...B?{sessionId:B}:{},extensions:[...V,...W],telemetry:Q??H}}},async dispose(){if(Y)Kb(Y)}}}var lA={};N(lA,{createTeamName:()=>Y7,DefaultRuntimeBuilder:()=>T4});import{hasRuntimeConfigExtension as Sb}from"@cline/shared";import{nanoid as bb}from"nanoid";$1();var dA={};N(dA,{createLocalTeamStore:()=>MX,SqliteTeamStore:()=>c2,FileTeamStore:()=>p5});import{appendFileSync as Lb,existsSync as _4,mkdirSync as gA,readdirSync as _b,readFileSync as mA,renameSync as zb,writeFileSync as Tb}from"node:fs";import{join as TX}from"node:path";import{resolveTeamDataDir as Ob}from"@cline/shared/storage";function vA(){return new Date().toISOString()}function OX($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function cA($){return{...$,tasks:$.tasks.map((Z)=>({...Z,createdAt:new Date(Z.createdAt),updatedAt:new Date(Z.updatedAt)})),mailbox:$.mailbox.map((Z)=>({...Z,sentAt:new Date(Z.sentAt),readAt:Z.readAt?new Date(Z.readAt):void 0})),missionLog:$.missionLog.map((Z)=>({...Z,ts:new Date(Z.ts)})),runs:($.runs??[]).map((Z)=>({...Z,startedAt:new Date(Z.startedAt),endedAt:Z.endedAt?new Date(Z.endedAt):void 0,nextAttemptAt:Z.nextAttemptAt?new Date(Z.nextAttemptAt):void 0,heartbeatAt:Z.heartbeatAt?new Date(Z.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),finalizedAt:Z.finalizedAt?new Date(Z.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),reviewedAt:Z.reviewedAt?new Date(Z.reviewedAt):void 0}))}}class p5{teamDirPath;constructor($={}){this.teamDirPath=$.teamDir??Ob()}init(){this.ensureTeamDir()}listTeamNames(){if(!_4(this.teamDirPath))return[];return _b(this.teamDirPath,{withFileTypes:!0}).filter(($)=>$.isDirectory()).filter(($)=>_4(this.statePath($.name))).map(($)=>$.name).sort()}readState($){let Z=this.readEnvelope($);return Z?.teamState?cA(Z.teamState):void 0}readHistory($,Z=200){let Q=this.historyPath($);if(!_4(Q))return[];return mA(Q,"utf8").split(`
|
|
582
|
+
`).map((W)=>W.trim()).filter(Boolean).map((W)=>{try{return JSON.parse(W)}catch{return}}).filter((W)=>W!==void 0).reverse().slice(0,Z)}loadRuntime($){let Z=this.readEnvelope($);return{state:Z?.teamState?cA(Z.teamState):void 0,teammates:Z?.teammates??[],interruptedRunIds:[]}}handleTeamEvent($,Z){this.ensureTeamSubdir($),Lb(this.historyPath($),`${JSON.stringify({ts:vA(),eventType:Z.type,payload:Z})}
|
|
583
|
+
`,"utf8")}persistRuntime($,Z,Q){this.ensureTeamSubdir($);let W={version:1,updatedAt:vA(),teamState:Z,teammates:Q},J=this.statePath($),X=`${J}.tmp`;Tb(X,`${JSON.stringify(W,null,2)}
|
|
584
|
+
`,"utf8"),zb(X,J)}markInProgressRunsInterrupted($,Z){let Q=this.readEnvelope($);if(!Q?.teamState?.runs?.length)return[];let W=Q.teamState.runs.filter((X)=>X.status==="queued"||X.status==="running").map((X)=>X.id);if(W.length===0)return[];let J=new Date;return Q.teamState={...Q.teamState,runs:Q.teamState.runs.map((X)=>X.status==="queued"||X.status==="running"?{...X,status:"interrupted",error:Z,endedAt:J}:X)},this.persistRuntime($,Q.teamState,Q.teammates),W}ensureTeamDir(){if(!_4(this.teamDirPath))gA(this.teamDirPath,{recursive:!0});return this.teamDirPath}ensureTeamSubdir($){let Z=TX(this.ensureTeamDir(),OX($));if(!_4(Z))gA(Z,{recursive:!0});return Z}statePath($){return TX(this.ensureTeamDir(),OX($),"state.json")}historyPath($){return TX(this.ensureTeamDir(),OX($),"task-history.jsonl")}readEnvelope($){let Z=this.statePath($);if(!_4(Z))return;try{let Q=JSON.parse(mA(Z,"utf8"));if(Q?.version===1&&Q.teamState)return Q}catch{}return}}import{existsSync as qb,mkdirSync as Mb}from"node:fs";import{join as Rb}from"node:path";import{safeJsonParse as uA}from"@cline/shared";import{loadSqliteDb as Eb,nowIso as qX}from"@cline/shared/db";import{resolveDbDataDir as Nb}from"@cline/shared/storage";function wb(){return Nb()}function z4($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function Cb($){let Z=uA($);if(!Array.isArray(Z))return[];let Q=[];for(let W of Z){if(!W||typeof W!=="object")continue;let J=W,X=J.agentId,Y=J.rolePrompt;if(typeof X!=="string"||!X.trim())continue;if(typeof Y!=="string"||!Y.trim())continue;let j={agentId:X.trim(),rolePrompt:Y};if(typeof J.modelId==="string"&&J.modelId.trim())j.modelId=J.modelId.trim();if(typeof J.maxIterations==="number"&&Number.isFinite(J.maxIterations))j.maxIterations=Math.max(1,Math.floor(J.maxIterations));Q.push(j)}return Q}function Pb($){return{...$,tasks:$.tasks.map((Z)=>({...Z,createdAt:new Date(Z.createdAt),updatedAt:new Date(Z.updatedAt)})),mailbox:$.mailbox.map((Z)=>({...Z,sentAt:new Date(Z.sentAt),readAt:Z.readAt?new Date(Z.readAt):void 0})),missionLog:$.missionLog.map((Z)=>({...Z,ts:new Date(Z.ts)})),runs:($.runs??[]).map((Z)=>({...Z,startedAt:new Date(Z.startedAt),endedAt:Z.endedAt?new Date(Z.endedAt):void 0,nextAttemptAt:Z.nextAttemptAt?new Date(Z.nextAttemptAt):void 0,heartbeatAt:Z.heartbeatAt?new Date(Z.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),finalizedAt:Z.finalizedAt?new Date(Z.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),reviewedAt:Z.reviewedAt?new Date(Z.reviewedAt):void 0}))}}class c2{teamDirPath;db;constructor($={}){this.teamDirPath=$.teamDir??wb()}init(){this.getRawDb()}ensureTeamDir(){if(!qb(this.teamDirPath))Mb(this.teamDirPath,{recursive:!0});return this.teamDirPath}dbPath(){return Rb(this.ensureTeamDir(),"teams.db")}getRawDb(){if(this.db)return this.db;let $=Eb(this.dbPath());return this.ensureSchema($),this.db=$,$}ensureSchema($){if($.exec("PRAGMA journal_mode = WAL;"),$.exec("PRAGMA busy_timeout = 5000;"),$.exec(`
|
|
585
585
|
CREATE TABLE IF NOT EXISTS team_store_schema_version (
|
|
586
586
|
lock INTEGER PRIMARY KEY CHECK (lock = 1),
|
|
587
587
|
version INTEGER NOT NULL
|
|
@@ -665,7 +665,7 @@ ${J}`,$.config.mode)}function v5($,Z){return zS($,Z==="plan"?"plan":Z==="yolo"?"
|
|
|
665
665
|
version INTEGER NOT NULL DEFAULT 1,
|
|
666
666
|
PRIMARY KEY(team_name, fragment_id)
|
|
667
667
|
);
|
|
668
|
-
`)}run($,Z=[]){return this.getRawDb().prepare($).run(...Z)}queryOne($,Z=[]){return this.getRawDb().prepare($).get(...Z)??void 0}queryAll($,Z=[]){return this.getRawDb().prepare($).all(...Z)}withTransaction($){let Z=this.getRawDb();Z.exec("BEGIN IMMEDIATE;");try{$(),Z.exec("COMMIT;")}catch(Q){try{Z.exec("ROLLBACK;")}catch{}throw Q}}listTeamNames(){return this.queryAll("SELECT team_name FROM team_runtime_snapshot ORDER BY team_name ASC").map(($)=>$.team_name)}readState($){let Z=this.queryOne("SELECT team_name, state_json, teammates_json, updated_at FROM team_runtime_snapshot WHERE team_name = ?",[z4($)]);if(!Z)return;let Q=uA(Z.state_json);if(!Q)return;try{return
|
|
668
|
+
`)}run($,Z=[]){return this.getRawDb().prepare($).run(...Z)}queryOne($,Z=[]){return this.getRawDb().prepare($).get(...Z)??void 0}queryAll($,Z=[]){return this.getRawDb().prepare($).all(...Z)}withTransaction($){let Z=this.getRawDb();Z.exec("BEGIN IMMEDIATE;");try{$(),Z.exec("COMMIT;")}catch(Q){try{Z.exec("ROLLBACK;")}catch{}throw Q}}listTeamNames(){return this.queryAll("SELECT team_name FROM team_runtime_snapshot ORDER BY team_name ASC").map(($)=>$.team_name)}readState($){let Z=this.queryOne("SELECT team_name, state_json, teammates_json, updated_at FROM team_runtime_snapshot WHERE team_name = ?",[z4($)]);if(!Z)return;let Q=uA(Z.state_json);if(!Q)return;try{return Pb(Q)}catch{return}}readHistory($,Z=200){return this.queryAll("SELECT event_type, payload_json, ts FROM team_events WHERE team_name = ? ORDER BY id DESC LIMIT ?",[z4($),Z]).flatMap((Q)=>{try{return[{eventType:Q.event_type,payload:JSON.parse(Q.payload_json),ts:Q.ts}]}catch{return[]}})}loadRuntime($){let Z=z4($),Q=this.readState(Z),W=this.queryOne("SELECT team_name, state_json, teammates_json, updated_at FROM team_runtime_snapshot WHERE team_name = ?",[Z]),J=W?Cb(W.teammates_json):[];return{state:Q,teammates:J,interruptedRunIds:[]}}appendTeamEvent($,Z,Q,W){this.run(`INSERT INTO team_events (team_name, ts, event_type, payload_json, causation_id, correlation_id)
|
|
669
669
|
VALUES (?, ?, ?, ?, NULL, ?)`,[z4($),qX(),Z,JSON.stringify(Q),W??null])}persistRuntime($,Z,Q){let W=z4($),J=qX();this.withTransaction(()=>{this.run(`INSERT INTO team_runtime_snapshot (team_name, state_json, teammates_json, updated_at)
|
|
670
670
|
VALUES (?, ?, ?, ?)
|
|
671
671
|
ON CONFLICT(team_name) DO UPDATE SET
|
|
@@ -712,43 +712,43 @@ ${J}`,$.config.mode)}function v5($,Z){return zS($,Z==="plan"?"plan":Z==="yolo"?"
|
|
|
712
712
|
reviewed_by = excluded.reviewed_by,
|
|
713
713
|
reviewed_at = excluded.reviewed_at,
|
|
714
714
|
version = team_outcome_fragments.version + 1`,[W,X.outcomeId,X.id,X.section,X.sourceAgentId,X.sourceRunId??null,X.content,X.status,X.reviewedBy??null,X.reviewedAt?X.reviewedAt.toISOString():null])})}markInProgressRunsInterrupted($,Z){let Q=z4($),W=this.queryAll("SELECT run_id FROM team_runs WHERE team_name = ? AND status IN ('queued', 'running')",[Q]);if(W.length===0)return[];let J=qX();return this.run(`UPDATE team_runs SET status = 'interrupted', error = ?, ended_at = ?, version = version + 1
|
|
715
|
-
WHERE team_name = ? AND status IN ('queued', 'running')`,[Z,J,Q]),W.map((X)=>X.run_id)}handleTeamEvent($,Z){this.appendTeamEvent($,Z.type,Z)}}function MX($={}){try{let Z=new c2($);return Z.init(),Z}catch{let Z=new p5({teamDir:$.teamDir});return Z.init(),Z}}function J7($,Z){return
|
|
716
|
-
`,"utf8");let V=Z.timeoutMs??300000,H=Z.pollIntervalMs??200,B=Date.now();while(Date.now()-B<V){try{let G=await
|
|
717
|
-
`,"utf8")}function oA($){return{pluginPaths:[...new Set(($.pluginPaths??[]).map((Z)=>Z.trim()).filter((Z)=>Z.length>0))],pluginNames:[...new Set(($.pluginNames??[]).map((Z)=>Z.trim()).filter((Z)=>Z.length>0))]}}function B7($){if(!u2($))return;let Z=$.metadata;return u2(Z)?Z:void 0}function H7($,Z){let Q=B7($);if(!Q||Q.source!=="plugin")return!1;let W=typeof Q.pluginName==="string"?Q.pluginName:typeof Q.plugin==="string"?Q.plugin:void 0,J=typeof Q.pluginPath==="string"?Q.pluginPath:void 0;if(Z.pluginName&&W===Z.pluginName){if(!Z.pluginPath||J===Z.pluginPath)return!0}if(J&&Z.pluginPath&&(J===Z.pluginPath||V7(Z.pluginPath,J)||V7(J,Z.pluginPath)))return!0;if(W&&Z.pluginNames?.some((X)=>X===W))return!0;if(J&&Z.pluginPaths?.some((X)=>J===X||V7(X,J)||V7(J,X)))return!0;return!1}function jy($){let Z=u2($.existing?.oauth)?{oauth:$.existing.oauth}:{};return{transport:$.registration.transport.type==="stdio"&&$.registration.transport.cwd===void 0?{...$.registration.transport,cwd:sA($.pluginPath)}:$.registration.transport,...$.disabled?{disabled:!0}:{},...Z,metadata:{...$.registration.metadata??{},source:"plugin",pluginName:$.pluginName,pluginPath:$.pluginPath}}}async function Vy($){if($.pluginPaths.length===0)return{plugins:[],servers:[],failures:[]};let Z=await x8({pluginPaths:[...$.pluginPaths],cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,workspaceInfo:$.workspacePath?{rootPath:$.workspacePath}:void 0});try{let Q=[],W=[],J=(Z.failures??[]).map((X)=>({pluginPath:X.pluginPath,pluginName:X.pluginName,message:X.message}));for(let X of Z.extensions??[]){let Y=X.__clinePluginPath;if(!Y)continue;if(!X.setup){Q.push({pluginName:X.name,pluginPath:Y});continue}let j=[],V={registerTool:(H)=>{},registerCommand:()=>{},registerMessageBuilder:()=>{},registerRule:()=>{},registerProvider:()=>{},registerAutomationEventType:()=>{},registerMcpServer:(H)=>{if(!X.manifest.capabilities.includes("mcp"))throw Error('registerMcpServer requires the "mcp" capability');j.push(H)}};try{await X.setup(V,{workspaceInfo:$.workspacePath?{rootPath:$.workspacePath}:void 0})}catch(H){J.push({pluginPath:Y,pluginName:X.name,message:H instanceof Error?H.message:String(H)});continue}Q.push({pluginName:X.name,pluginPath:Y});for(let H of j)W.push({pluginName:X.name,pluginPath:Y,server:{...H,metadata:{...H.metadata??{},source:"plugin",pluginName:X.name,pluginPath:Y}}})}return{plugins:Q,servers:W,failures:J}}finally{await Z.shutdown().catch(()=>{})}}async function i5($){let Z=$.settingsPath??Z0(),Q={mutations:[],failures:[]},W;try{W=await Vy($)}catch(H){for(let B of $.pluginPaths)Q.failures.push({pluginPath:B,message:H instanceof Error?H.message:String(H)});return Q}Q.failures.push(...W.failures);let J;try{J=CX(Z)}catch(H){for(let B of $.pluginPaths)Q.failures.push({pluginPath:B,message:H instanceof Error?H.message:String(H)});return Q}let X=PX(J),Y=new Map,j=new Map;for(let H of W.plugins)Y.set(H.pluginPath,new Set),j.set(H.pluginPath,H.pluginName);let V=hQ(W.servers.map((H)=>({server:H.server,owner:H,ownerLabel:H.pluginName})));for(let H of V){let B=H.owner;if(!Y.has(B.pluginPath))Y.set(B.pluginPath,new Set);if(H.name)Y.get(B.pluginPath)?.add(H.name);if(!H.registration){Q.mutations.push({name:H.name,pluginName:B.pluginName,pluginPath:B.pluginPath,action:"skipped",reason:H.loadError??"invalid MCP server registration"});continue}let G=X[H.registration.name];if(G!==void 0){if(!H7(G,{pluginName:B.pluginName,pluginPath:B.pluginPath})){Q.mutations.push({name:H.registration.name,pluginName:B.pluginName,pluginPath:B.pluginPath,action:"skipped",reason:"MCP server name is already configured"});continue}}X[H.registration.name]=jy({registration:H.registration,pluginName:B.pluginName,pluginPath:B.pluginPath,existing:u2(G)?G:void 0}),Q.mutations.push({name:H.registration.name,pluginName:B.pluginName,pluginPath:B.pluginPath,action:G===void 0?"created":"updated"})}for(let[H,B]of Object.entries(X)){let G=B7(B),K=typeof G?.pluginPath==="string"?G.pluginPath:"",F=Y.get(K);if(F&&H7(B,{pluginPath:K})&&!F.has(H))delete X[H],Q.mutations.push({name:H,pluginName:typeof G?.pluginName==="string"?G.pluginName:j.get(K)??"plugin",pluginPath:K,action:"removed",reason:"plugin no longer declares this MCP server"})}if(Q.mutations.some((H)=>H.action!=="skipped"))try{SX(Z,J,X)}catch(H){for(let B of $.pluginPaths)Q.failures.push({pluginPath:B,message:H instanceof Error?H.message:String(H)})}return Q}function bX($){let Z=$.settingsPath??Z0(),Q;try{Q=CX(Z)}catch{return[]}let W=PX(Q),J=oA($),X=[];for(let[Y,j]of Object.entries(W)){if(!u2(j)||!H7(j,J))continue;let V=B7(j);W[Y]={...j,disabled:!0},X.push({name:Y,pluginName:typeof V?.pluginName==="string"?V.pluginName:"plugin",pluginPath:typeof V?.pluginPath==="string"?V.pluginPath:"",action:"disabled"})}if(X.length>0)SX(Z,Q,W);return X}function n5($){let Z=$.settingsPath??Z0(),Q;try{Q=CX(Z)}catch{return[]}let W=PX(Q),J=oA($),X=[];for(let[Y,j]of Object.entries(W)){if(!H7(j,J))continue;let V=B7(j);delete W[Y],X.push({name:Y,pluginName:typeof V?.pluginName==="string"?V.pluginName:"plugin",pluginPath:typeof V?.pluginPath==="string"?V.pluginPath:"",action:"removed"})}if(X.length>0)SX(Z,Q,W);return X}var gX="_installed",_y="package",zy=new Map([["git",2],["local",1],["npm",1],["official",1],["remote",1]]);function hX($){return $.trim().toLowerCase()}function V1($,Z){let Q=Z?.trim();if(!Q)return;$.add(Q)}function Ty($){return $.replace(/-[0-9a-f]{12}$/i,"")}function kX($){let Z=Ay($);return Z?$.slice(0,-Z.length):$}function IX($){if(!q4($))return;try{let Z=JSON.parse(By($,"utf8"));return typeof Z.name==="string"?Z.name.trim():void 0}catch{return}}function mX($,Z){let Q=Uy(Z,$);return Q===""||!Q.startsWith("..")&&!fy(Q)}function eA($){let Q=O4($).split(yX),W=Q.lastIndexOf(gX);if(W<0)return;let J=Q[W+1];if(!J)return;let X=zy.get(J)??1,Y=W+2+X;if(Q.length<Y)return;let j=Q.slice(0,Y).join(yX)||yX;return q4(j)?j:void 0}function G7($){try{return Hy($,{withFileTypes:!0})}catch{return[]}}function Oy($){let Z=Z$($,gX);if(!q4(Z))return[];let Q=[];for(let W of G7(Z)){if(!W.isDirectory())continue;let J=Z$(Z,W.name);if(W.name==="git"){for(let X of G7(J)){if(!X.isDirectory())continue;let Y=Z$(J,X.name);for(let j of G7(Y))if(j.isDirectory())Q.push(Z$(Y,j.name))}continue}for(let X of G7(J))if(X.isDirectory())Q.push(Z$(J,X.name))}return Q.sort((W,J)=>W.localeCompare(J))}function $f($){try{return Dy($)}catch{return[]}}function xX($){let Z=$f($),Q=new Set;V1(Q,a0($)),V1(Q,Ty(a0($))),V1(Q,IX(Z$($,"package.json"))),V1(Q,IX(Z$($,_y,"package.json")));for(let W of Z)V1(Q,a0(W)),V1(Q,kX(a0(W)));return{installPath:$,entryPaths:Z,names:[...Q].sort((W,J)=>W.localeCompare(J)),installed:!0}}function qy($,Z){let Q=O4($),W=Z.find((Y)=>mX(Q,Y));if(!W)return;let J=m$(Q);while(J!==W&&J!==m$(J)){if(q4(Z$(J,"package.json")))return J;J=m$(J)}let X=a0(Q);if((X==="index.ts"||X==="index.js")&&m$(Q)!==W)return m$(Q);return Q}function Zf($,Z){let Q=qy($,Z);if(!Q)return;let W=new Set;return V1(W,a0($)),V1(W,kX(a0($))),V1(W,a0(Q)),V1(W,kX(a0(Q))),V1(W,IX(Z$(Q,"package.json"))),{installPath:Q,entryPaths:[$],names:[...W].sort((J,X)=>J.localeCompare(X)),installed:!1}}function My($){let Z=$.workspaceRoot?.trim()||$.cwd?.trim()||process.cwd();return Ly(Z).filter((Q)=>q4(Q))}function Ry($){let Z=new Map;for(let Q of $){for(let W of Oy(Q))Z.set(W,xX(W));for(let W of $f(Q)){let J=eA(W);if(J){if(!Z.has(J))Z.set(J,xX(J));continue}let X=Zf(W,$);if(X)Z.set(X.installPath,X)}}return[...Z.values()].sort((Q,W)=>Q.installPath.localeCompare(W.installPath))}function Ey($,Z){let Q=hX(Z);if(!Q)return!1;if(hX($.installPath)===Q)return!0;return $.names.some((W)=>hX(W)===Q)}function Ny($,Z,Q){let W=O4($);for(let X of Z){if(mX(W,X.installPath))return X;if(X.entryPaths.some((Y)=>O4(Y)===W))return X}let J=eA(W);if(J)return xX(J);if(q4(W))return Zf(W,Q);return}function wy($){let Z=z0(),Q=Z.disabledPlugins;if(!Q?.length)return;let W=Q.filter((J)=>{let X=O4(J);if(mX(X,$.installPath))return!1;return!$.entryPaths.some((Y)=>O4(Y)===X)});if(W.length===Q.length)return;B1({...Z,disabledPlugins:W})}function Cy($){let Z=m$($);while(Z!==m$(Z)&&a0(Z)!==gX){try{Gy(Z)}catch{return}Z=m$(Z)}}function Py($){return`${$.names[0]??a0($.installPath)} at ${$.installPath}`}async function a5($){let Z=My($),Q=Ry(Z),W=$.path?.trim(),J=$.name?.trim(),X;if(W){if(X=Ny(W,Q,Z),!X)throw Error(`No plugin found at ${W}`)}else{if(!J)throw Error("plugin uninstall requires a plugin name");let j=Q.filter((V)=>Ey(V,J));if(j.length===0)throw Error(`No plugin found matching "${J}"`);if(j.length>1)throw Error(`Multiple plugins match "${J}": ${j.map(Py).join(", ")}`);X=j[0]}let Y=Fy(X.installPath,{throwIfNoEntry:!1});if(!Y)throw Error(`Plugin install path does not exist: ${X.installPath}`);if(n5({pluginPaths:[X.installPath,...X.entryPaths],pluginNames:X.names}),Ky(X.installPath,{recursive:Y.isDirectory(),force:!0}),wy(X),X.installed)Cy(X.installPath);return{name:J||X.names[0]||a0(X.installPath),installPath:X.installPath,removedPaths:[X.installPath],entryPaths:X.entryPaths}}var vX=120000,s5=12000,gy=/(api[_ -]?key|access[_ -]?token|refresh[_ -]?token|auth(?:orization)?[_ -]?token|token|secret|password|authorization|credential)/i,my=/((?:^|[^\w])(?:[a-z0-9_]*?(?:api[_ -]?key|access[_ -]?token|refresh[_ -]?token|auth(?:orization)?[_ -]?token|token|secret|password|credential)[a-z0-9_]*)\s*[:=]\s*)(.+)$/gi,vy=/((?:^|[^\w])authorization\s*[:=]\s*)bearer\s+([^\s,"'}\]]+)/gi,cy=/((?:^|[^\w])authorization\s*[:=])(?!\s*bearer\b)\s*(.+)$/gi;function cX($){return $.install?.args??[]}function uy(){return process.env.HOME?.trim()||process.env.USERPROFILE?.trim()||yy()}function dy($){let Z=0,Q=$.length;while(Z<Q&&($[Z]==="."||$[Z]==="-"))Z++;while(Q>Z&&($[Q-1]==="."||$[Q-1]==="-"))Q--;return $.slice(Z,Q)}function ly($){return dy($.toLowerCase().replace(/[^a-z0-9._]+/g,"-")).slice(0,255)||"skill"}function Xf($){return $.split(/\r?\n/).map((Z)=>{if(!gy.test(Z))return Z;return Z.replace(my,"$1[redacted]").replace(vy,"$1Bearer [redacted]").replace(/\b(Bearer)\s+(?!\[redacted\])([^\s,"'}\]]+)/gi,"$1 [redacted]").replace(cy,"$1 [redacted]").replace(/((?:^|[^\w])(?:api\s+key|access\s+token|refresh\s+token|auth(?:orization)?\s+token|secret|password|credential)\s+(?:is\s+)?)(\S+)/gi,"$1[redacted]")}).join(`
|
|
718
|
-
`).slice(-s5)}function
|
|
719
|
-
`)).trim();return Z.length>0?Z:void 0}function
|
|
720
|
-
Timed out after ${vX/1000}s.`,Y.kill("SIGTERM")},vX);H.unref?.(),B.unref?.(),Y.stdout?.on("data",(G)=>{if(j+=String(G),j.length>s5*2)j=j.slice(-s5)}),Y.stderr?.on("data",(G)=>{if(V+=String(G),V.length>s5*2)V=V.slice(-s5)}),Y.once("error",(G)=>{clearTimeout(B),clearTimeout(H),W(G)}),Y.once("close",(G,K)=>{J=!0,clearTimeout(B),clearTimeout(H),Q({exitCode:X?124:G??(K==="SIGINT"?130:1),stdout:j,stderr:V})})});function uX($){return`${$.type}:${$.id}`}function o5($){let Z=cX($);if(Z.length===0)throw Error("Marketplace install args are required.");return r5(Z).name}function K7($,Z={}){let Q=o5($),W=Z.mcpSettingsPath??
|
|
715
|
+
WHERE team_name = ? AND status IN ('queued', 'running')`,[Z,J,Q]),W.map((X)=>X.run_id)}handleTeamEvent($,Z){this.appendTeamEvent($,Z.type,Z)}}function MX($={}){try{let Z=new c2($);return Z.init(),Z}catch{let Z=new p5({teamDir:$.teamDir});return Z.init(),Z}}function J7($,Z){return Sb($,Z)}function yb($,Z){let Q=Z?.["*"]??{},W=Z?.[$]??{};return{...Q,...W}.enabled!==!1}function hb($,Z){return $.filter((Q)=>yb(Q.name,Z))}function RX($,Z){return y1(hb($,Z))}var kb={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 Ib($){let Z=$.trim().toLowerCase();return kb[Z]??Z}function xb($,Z){if(Z.tools===void 0)return $;let Q=new Set(Z.tools.map(Ib));if(Z.skills!==void 0)Q.add("skills");return $.filter((W)=>Q.has(W.name))}function Y7(){return`team-${bb(5)}`}function X7($,Z,Q,W,J,X,Y,j){let V=u0[l1({mode:Q})],H=M8(Z,W,Q,J??q8);return RX(U2({cwd:$,...V,enableSkills:!!Y,...H,executors:{...Y?{skills:Y}:{},...j??{}}}),X)}function gb($){return X7($.cwd,$.providerId,$.mode,$.modelId,$.toolRoutingRules,$.toolPolicies,mb,$.toolExecutors).some((Z)=>Z.name==="skills")}var mb=async()=>"";async function vb($){let Z=Z0();if(!s1({filePath:Z}))return{tools:[]};let Q=new b2({clientFactory:$4({settingsPath:Z})}),W;try{W=await S2(Q,{filePath:Z})}catch(j){await Q.dispose().catch(()=>{});let V=j instanceof Error?j.message:String(j);return $?.log(`[mcp] Failed to load MCP settings, skipping MCP tools: ${V}`),{tools:[]}}let J=W.filter((j)=>j.disabled!==!0),X=await Promise.allSettled(J.map((j)=>Q4({serverName:j.name,provider:Q}))),Y=[];for(let[j,V]of X.entries())if(V.status==="fulfilled")Y.push(...V.value);else{let H=V.reason instanceof Error?V.reason.message:String(V.reason);$?.log(`[mcp] Failed to load tools from MCP server "${J[j].name}", skipping: ${H}`)}return{tools:Y,shutdown:async()=>{await Q.dispose()}}}function cb($,Z){if(!$)return;for(let Q of $.getTeammateIds())try{$.shutdownTeammate(Q,Z)}catch{}}function ub($){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 db($){let Z=u0[l1({mode:$.mode})];return{sessionId:$.sessionId||"",mode:$.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act",enableTools:$.enableTools!==!1,enableSpawnAgent:$.enableSpawnAgent??Z.enableSpawnAgent??!0,enableAgentTeams:$.enableAgentTeams??Z.enableAgentTeams??!0,disableMcpSettingsTools:$.disableMcpSettingsTools===!0,yolo:$.yolo===!0,missionLogIntervalSteps:typeof $.missionLogIntervalSteps==="number"&&Number.isFinite($.missionLogIntervalSteps)?$.missionLogIntervalSteps:3,missionLogIntervalMs:typeof $.missionLogIntervalMs==="number"&&Number.isFinite($.missionLogIntervalMs)?$.missionLogIntervalMs:120000}}class T4{teamRuntimeEntries=new Map;async build($){let{config:Z,hooks:Q,extensions:W,logger:J,telemetry:X,createSpawnTool:Y,onTeamRestored:j,userInstructionService:V,configExtensions:H,toolExecutors:B}=$,G=$.onTeamEvent??(()=>{}),K=db(Z),F=Z.workspaceRoot??Z.cwd,A=$.toolPolicies??Z.toolPolicies,L=G1(),f=[],D=Z.teamName?.trim()||Y7(),U=Z.sessionId?.trim()||D,T=K.enableSpawnAgent?Y4({workspaceRoot:F}):{configs:[],errors:[]},q=T.configs.some((v)=>v.skills!==void 0),z=J7(H,"rules"),_=J7(H,"skills"),E=_||q,C=J7(H,"workflows"),y=J7(H,"plugins"),l=z||_||C,o=!1,t=Boolean(V),Q0=V,e0;for(let v of T.errors)(J??Z.logger)?.log?.(`[agents] Failed to load agent config at ${v.path}: ${v.error.message}`);if(!Q0&&(l||q))Q0=b$({skills:E?{workspacePath:F,includePluginSkills:y,pluginSkillDirectories:y?$.pluginSkillDirectories:void 0,pluginPaths:Z.pluginPaths,cwd:Z.cwd}:{workspacePath:F},rules:{workspacePath:Z.cwd},workflows:{workspacePath:Z.cwd}});if(Q0)await Q0.start().catch(()=>{});let l$=K.enableTools&&_&&Boolean(Q0)&&Q0?.hasConfiguredSkills(Z.skills)===!0&&gb({cwd:Z.cwd,providerId:Z.providerId,mode:K.mode,modelId:Z.modelId,toolRoutingRules:Z.toolRoutingRules,toolPolicies:A,toolExecutors:B}),r=Q0&&l?Q0.createExtension({includeRules:z,includeSkills:_,includeWorkflows:C,registerSkillsTool:l$,allowedSkillNames:Z.skills}):void 0,M1=r?[...W??Z.extensions??[],r]:W??Z.extensions;if(K.enableTools){if(f.push(...X7(Z.cwd,Z.providerId,K.mode,Z.modelId,Z.toolRoutingRules,A,void 0,B)),!K.disableMcpSettingsTools){let v=await vb(Z.logger);f.push(...v.tools),e0=v.shutdown}}let P,B0=K.enableAgentTeams?MX():void 0,G0=B0?.loadRuntime(U),C0=G0?.state,n2=G0?.teammates??[],R1=new Map(n2.map((v)=>[v.agentId,v])),H1=Z.sessionId||D,C4,a2=[],K9=!1,E1=T$({providerId:Z.providerId,modelId:Z.modelId,cwd:Z.cwd,apiKey:Z.apiKey??"",baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking,maxTokensPerTurn:Z.maxTokensPerTurn,maxIterations:Z.maxIterations,hooks:Q,extensions:M1,logger:J??Z.logger,telemetry:$.telemetry??Z.telemetry,workspaceMetadata:Z.workspaceMetadata});if(K.enableSpawnAgent){if(T.configs.length>0)f.push(...RX(j4({configProvider:E1,agents:T.configs,createSubAgentTools:(v)=>K.enableTools?xb(X7(Z.cwd,v.providerId??Z.providerId,K.mode,v.modelId??Z.modelId,Z.toolRoutingRules,A,v.skills!==void 0&&Q0?.createSkillsExecutor?Q0.createSkillsExecutor(v.skills):void 0,B),v):[],hookErrorMode:Z.hookErrorMode,toolPolicies:A,requestToolApproval:$.requestToolApproval,onSubAgentEvent:$.onSubAgentEvent,onSubAgentStart:$.onSubAgentStart,onSubAgentEnd:$.onSubAgentEnd}),A))}if(!this.teamRuntimeEntries.has(H1))this.teamRuntimeEntries.set(H1,{delegatedAgentConfigProvider:E1});let F9=()=>{if(!K.enableAgentTeams)return;let v=this.teamRuntimeEntries.get(H1)??{delegatedAgentConfigProvider:E1};if(this.teamRuntimeEntries.set(H1,v),P=v.runtime,!P){if(P=new k2({teamName:D,leadAgentId:Z.sessionId||"lead",missionLogIntervalSteps:K.missionLogIntervalSteps,missionLogIntervalMs:K.missionLogIntervalMs,onTeamEvent:(Y0)=>{if(G(Y0),P&&B0){if(Y0.type==="teammate_spawned"&&Y0.teammate?.rolePrompt){let N1={agentId:Y0.agentId,rolePrompt:Y0.teammate.rolePrompt,modelId:Y0.teammate.modelId,maxIterations:Y0.teammate.maxIterations};R1.set(N1.agentId,N1)}if(Y0.type==="teammate_shutdown"&&!ub(Y0.reason))R1.delete(Y0.agentId);B0.handleTeamEvent(U,Y0),B0.persistRuntime(U,P.exportState(),Array.from(R1.values()))}}}),C0)P.hydrateState(C0),K9=!0;v.runtime=P}if(!o){if(!P)return;o=!0;let Y0=w8({runtime:P,leadAgentId:Z.sessionId||"lead",restoredFromPersistence:Boolean(C0),restoredTeammates:n2,includeLeadSpawnTool:!0,includeLeadManagementTools:!0,onLeadToolsUnlocked:(N1)=>{a2=N1,C4?.addTools(N1)},createBaseTools:K.enableTools?()=>X7(Z.cwd,Z.providerId,K.mode,Z.modelId,Z.toolRoutingRules,A,void 0,B):void 0,teammateConfigProvider:E1});if(K9)P.recoverActiveRuns("runtime_recovered");if(Y0.restoredFromPersistence)j?.();f.push(...Y0.tools)}return P};if(K.enableSpawnAgent&&Y){let v=Y();f.push({...v,execute:async(Y0,N1)=>{return F9(),v.execute(Y0,N1)}})}if(K.enableAgentTeams)F9();let s2=RX(f,A),$W=s2.some((v)=>v.name==="submit_and_exit"&&v.lifecycle?.completesRun===!0),A9=K.enableAgentTeams?()=>{let v=this.teamRuntimeEntries.get(H1)?.runtime;if(!v)return;let Y0=v.listTasks(),N1=Y0.some((J$)=>J$.status==="in_progress"||J$.status==="pending"),Zj=v.listRuns({}),zD=Zj.some((J$)=>J$.status==="running"||J$.status==="queued");if(N1||zD){let J$=Y0.filter((x0)=>x0.status==="in_progress"||x0.status==="pending").map((x0)=>`${x0.id} (${x0.status}): ${x0.title}`).join(", "),Qj=Zj.filter((x0)=>x0.status==="running"||x0.status==="queued").map((x0)=>`${x0.id} (${x0.status})`).join(", "),ZW=[];if(J$)ZW.push(`Unfinished tasks: ${J$}`);if(Qj)ZW.push(`Active runs: ${Qj}`);return`[SYSTEM] You still have team obligations. ${ZW.join(". ")}. Use team_run_task to delegate work, or team_task with action=complete to mark tasks done, or team_await_runs to wait for active runs. Do NOT stop until all tasks are completed.`}return}:void 0,_D=$W?{requireCompletionTool:!0,...A9?{completionGuard:A9}:{}}:A9?{completionGuard:A9}:void 0;return{tools:s2,logger:J??Z.logger,telemetry:X??Z.telemetry,teamRuntime:P,teamRestoredFromPersistence:Boolean(C0),delegatedAgentConfigProvider:this.teamRuntimeEntries.get(H1)?.delegatedAgentConfigProvider??E1,extensions:M1,completionPolicy:_D,registerLeadAgent:(v)=>{if(C4=v,a2.length>0)v.addTools(y1(a2,[...L]))},shutdown:async(v)=>{if(cb(P,v),this.teamRuntimeEntries.delete(H1),await e0?.(),!t)Q0?.stop()}}}}var rA={};N(rA,{requestDesktopToolApproval:()=>NX});import{mkdir as lb,readFile as pb,unlink as rb,writeFile as ib}from"node:fs/promises";import{join as pA}from"node:path";function nb($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function ab($){return new Promise((Z)=>setTimeout(Z,$))}async function EX($){try{await rb($)}catch{}}async function NX($,Z={}){let Q=Z.approvalDir?.trim(),W=Z.sessionId?.trim();if(!Q||!W)return{approved:!1,reason:"Desktop tool approval IPC is not configured"};await lb(Q,{recursive:!0});let J=nb(`${$.toolCallId}`),X=pA(Q,`${W}.request.${J}.json`),Y=pA(Q,`${W}.decision.${J}.json`),j=Z.nowIso??(()=>new Date().toISOString());await ib(X,`${JSON.stringify({requestId:J,sessionId:W,createdAt:j(),toolCallId:$.toolCallId,toolName:$.toolName,input:$.input,iteration:$.iteration,agentId:$.agentId,conversationId:$.conversationId},null,2)}
|
|
716
|
+
`,"utf8");let V=Z.timeoutMs??300000,H=Z.pollIntervalMs??200,B=Date.now();while(Date.now()-B<V){try{let G=await pb(Y,"utf8"),K=JSON.parse(G),F={approved:K.approved===!0,reason:typeof K.reason==="string"?K.reason:void 0};return await Promise.all([EX(Y),EX(X)]),F}catch{}await ab(H)}return await EX(X),{approved:!1,reason:"Tool approval request timed out"}}$1();var nA={};N(nA,{parseMcpInstallArgs:()=>r5,installMcpServer:()=>wX,buildMcpInstallTransport:()=>j7});function sb($){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 ob($){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 tb($){let Z=$.indexOf(":");if(Z<=0)throw Error(`Invalid MCP header "${$}". Expected "Header-Name: header value".`);let Q=$.slice(0,Z).trim(),W=$.slice(Z+1).trim();if(!Q||!W)throw Error(`Invalid MCP header "${$}". Expected "Header-Name: header value".`);if(!/^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/.test(Q))throw Error(`Invalid MCP header name "${Q}".`);return[Q,W]}function eb($){let Z=$.indexOf("<");return Z>=0&&$.indexOf(">",Z+1)>Z+1}function iA($){let Z=[...$.headers??[]],Q=[],W=$.transport,J=$.targetArgs??[];for(let X=0;X<J.length;X++){let Y=J[X];if($.parseTransport&&Y==="--transport"){let j=J[X+1];if(!j)throw Error("--transport requires a value");W=j,X++;continue}if($.parseTransport&&Y?.startsWith("--transport=")){W=Y.slice(12);continue}if(Y==="--header"){let j=J[X+1];if(!j)throw Error("--header requires a value");Z.push(j),X++;continue}if(Y?.startsWith("--header=")){Z.push(Y.slice(9));continue}Q.push(Y)}return{headers:Z,targetArgs:Q,transport:W}}function $y($){if($.length===0)return{warnings:[]};let Z={},Q=[];for(let W of $){let[J,X]=tb(W);if(Z[J]=X,eb(X))Q.push(`Header "${J}" looks like it contains a placeholder. Update it in MCP settings before using this server.`)}return{headers:Z,warnings:Q}}function j7($){let Z=$.name.trim();if(!Z)throw Error("MCP server name is required");let{headers:Q,targetArgs:W,transport:J}=iA({headers:$.headers,targetArgs:$.targetArgs,transport:$.transport}),X=sb(J),{headers:Y,warnings:j}=$y(Q);if(X==="stdio"){if(Q.length>0)throw Error("Stdio MCP installs do not support request headers.");let[H,...B]=W;if(!H?.trim())throw Error("Stdio MCP install requires a command after the server name, for example: cline mcp install fs --yes -- npx -y @modelcontextprotocol/server-filesystem /tmp");return{name:Z,transport:{type:X,command:H,args:B.length>0?B:void 0},warnings:j}}if(W.length!==1)throw Error("Remote MCP install requires exactly one URL argument after the server name.");let V=W[0]?.trim()??"";return ob(V),{name:Z,transport:Y?{type:X,url:V,headers:Y}:{type:X,url:V},warnings:j}}function r5($){let[Z,...Q]=$;if(!Z)throw Error("Marketplace MCP install args must start with a server name.");return{name:Z,...iA({parseTransport:!0,targetArgs:Q})}}function Zy($,Z,Q){j1(Q,(W)=>{let J=W.mcpServers,X=J&&typeof J==="object"&&!Array.isArray(J)?{...J}:{};X[$]={transport:Z},W.mcpServers=X})}function wX($){let{name:Z,transport:Q,warnings:W}=j7($);return Zy(Z,Q,$.settingsPath??Z0()),{name:Z,status:"installed",transport:Q,warnings:W}}var Yf={};N(Yf,{uninstallMarketplaceSkill:()=>A7,uninstallMarketplacePlugin:()=>f7,uninstallMarketplaceMcpServerFromSettings:()=>K7,uninstallMarketplaceEntry:()=>dX,resolveMarketplaceMcpServerName:()=>o5,marketplaceEntryKey:()=>uX,isMarketplaceSkillInstalled:()=>F7,getMarketplaceSkillCandidates:()=>t5,getGlobalMarketplaceSkillPaths:()=>e5,findInstalledGlobalMarketplaceSkillName:()=>$9});import{spawn as by}from"node:child_process";import{existsSync as Jf,rmSync as yy}from"node:fs";import{homedir as hy,platform as ky}from"node:os";import{dirname as Iy,join as Wf}from"node:path";import{resolveClineDir as xy,resolveMcpSettingsPath as gy}from"@cline/shared/storage";$1();var Qf={};N(Qf,{uninstallPlugin:()=>a5});import{existsSync as q4,readdirSync as By,readFileSync as Gy,rmdirSync as Ky,rmSync as Fy,statSync as Ay}from"node:fs";import{basename as a0,dirname as m$,extname as fy,isAbsolute as Uy,join as Z$,relative as Dy,resolve as O4,sep as yX}from"node:path";import{discoverPluginModulePaths as Ly,resolvePluginConfigSearchPaths as _y}from"@cline/shared/storage";var tA={};N(tA,{syncPluginMcpServersToSettings:()=>i5,removePluginMcpServersFromSettings:()=>n5,disablePluginMcpServersInSettings:()=>bX});import{existsSync as Qy,mkdirSync as Wy,readFileSync as Jy,writeFileSync as Xy}from"node:fs";import{dirname as sA,isAbsolute as Yy,relative as jy,resolve as aA}from"node:path";function u2($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function V7($,Z){let Q=jy(aA($),aA(Z));return Q===""||!Q.startsWith("..")&&!Yy(Q)}function CX($){if(!Qy($))return{mcpServers:{}};try{let Z=JSON.parse(Jy($,"utf8"));if(u2(Z))return Z}catch(Z){throw Error(`Invalid MCP settings at "${$}": ${Z instanceof Error?Z.message:String(Z)}`)}throw Error(`Invalid MCP settings at "${$}": expected an object`)}function PX($){if(u2($.mcpServers))return{...$.mcpServers};return{}}function SX($,Z,Q){Wy(sA($),{recursive:!0}),Xy($,`${JSON.stringify({...Z,mcpServers:Q},null,2)}
|
|
717
|
+
`,"utf8")}function oA($){return{pluginPaths:[...new Set(($.pluginPaths??[]).map((Z)=>Z.trim()).filter((Z)=>Z.length>0))],pluginNames:[...new Set(($.pluginNames??[]).map((Z)=>Z.trim()).filter((Z)=>Z.length>0))]}}function B7($){if(!u2($))return;let Z=$.metadata;return u2(Z)?Z:void 0}function H7($,Z){let Q=B7($);if(!Q||Q.source!=="plugin")return!1;let W=typeof Q.pluginName==="string"?Q.pluginName:typeof Q.plugin==="string"?Q.plugin:void 0,J=typeof Q.pluginPath==="string"?Q.pluginPath:void 0;if(Z.pluginName&&W===Z.pluginName){if(!Z.pluginPath||J===Z.pluginPath)return!0}if(J&&Z.pluginPath&&(J===Z.pluginPath||V7(Z.pluginPath,J)||V7(J,Z.pluginPath)))return!0;if(W&&Z.pluginNames?.some((X)=>X===W))return!0;if(J&&Z.pluginPaths?.some((X)=>J===X||V7(X,J)||V7(J,X)))return!0;return!1}function Vy($){let Z=u2($.existing?.oauth)?{oauth:$.existing.oauth}:{};return{transport:$.registration.transport.type==="stdio"&&$.registration.transport.cwd===void 0?{...$.registration.transport,cwd:sA($.pluginPath)}:$.registration.transport,...$.disabled?{disabled:!0}:{},...Z,metadata:{...$.registration.metadata??{},source:"plugin",pluginName:$.pluginName,pluginPath:$.pluginPath}}}async function Hy($){if($.pluginPaths.length===0)return{plugins:[],servers:[],failures:[]};let Z=await x8({pluginPaths:[...$.pluginPaths],cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,workspaceInfo:$.workspacePath?{rootPath:$.workspacePath}:void 0});try{let Q=[],W=[],J=(Z.failures??[]).map((X)=>({pluginPath:X.pluginPath,pluginName:X.pluginName,message:X.message}));for(let X of Z.extensions??[]){let Y=X.__clinePluginPath;if(!Y)continue;if(!X.setup){Q.push({pluginName:X.name,pluginPath:Y});continue}let j=[],V={registerTool:(H)=>{},registerCommand:()=>{},registerMessageBuilder:()=>{},registerRule:()=>{},registerProvider:()=>{},registerAutomationEventType:()=>{},registerMcpServer:(H)=>{if(!X.manifest.capabilities.includes("mcp"))throw Error('registerMcpServer requires the "mcp" capability');j.push(H)}};try{await X.setup(V,{workspaceInfo:$.workspacePath?{rootPath:$.workspacePath}:void 0})}catch(H){J.push({pluginPath:Y,pluginName:X.name,message:H instanceof Error?H.message:String(H)});continue}Q.push({pluginName:X.name,pluginPath:Y});for(let H of j)W.push({pluginName:X.name,pluginPath:Y,server:{...H,metadata:{...H.metadata??{},source:"plugin",pluginName:X.name,pluginPath:Y}}})}return{plugins:Q,servers:W,failures:J}}finally{await Z.shutdown().catch(()=>{})}}async function i5($){let Z=$.settingsPath??Z0(),Q={mutations:[],failures:[]},W;try{W=await Hy($)}catch(H){for(let B of $.pluginPaths)Q.failures.push({pluginPath:B,message:H instanceof Error?H.message:String(H)});return Q}Q.failures.push(...W.failures);let J;try{J=CX(Z)}catch(H){for(let B of $.pluginPaths)Q.failures.push({pluginPath:B,message:H instanceof Error?H.message:String(H)});return Q}let X=PX(J),Y=new Map,j=new Map;for(let H of W.plugins)Y.set(H.pluginPath,new Set),j.set(H.pluginPath,H.pluginName);let V=hQ(W.servers.map((H)=>({server:H.server,owner:H,ownerLabel:H.pluginName})));for(let H of V){let B=H.owner;if(!Y.has(B.pluginPath))Y.set(B.pluginPath,new Set);if(H.name)Y.get(B.pluginPath)?.add(H.name);if(!H.registration){Q.mutations.push({name:H.name,pluginName:B.pluginName,pluginPath:B.pluginPath,action:"skipped",reason:H.loadError??"invalid MCP server registration"});continue}let G=X[H.registration.name];if(G!==void 0){if(!H7(G,{pluginName:B.pluginName,pluginPath:B.pluginPath})){Q.mutations.push({name:H.registration.name,pluginName:B.pluginName,pluginPath:B.pluginPath,action:"skipped",reason:"MCP server name is already configured"});continue}}X[H.registration.name]=Vy({registration:H.registration,pluginName:B.pluginName,pluginPath:B.pluginPath,existing:u2(G)?G:void 0}),Q.mutations.push({name:H.registration.name,pluginName:B.pluginName,pluginPath:B.pluginPath,action:G===void 0?"created":"updated"})}for(let[H,B]of Object.entries(X)){let G=B7(B),K=typeof G?.pluginPath==="string"?G.pluginPath:"",F=Y.get(K);if(F&&H7(B,{pluginPath:K})&&!F.has(H))delete X[H],Q.mutations.push({name:H,pluginName:typeof G?.pluginName==="string"?G.pluginName:j.get(K)??"plugin",pluginPath:K,action:"removed",reason:"plugin no longer declares this MCP server"})}if(Q.mutations.some((H)=>H.action!=="skipped"))try{SX(Z,J,X)}catch(H){for(let B of $.pluginPaths)Q.failures.push({pluginPath:B,message:H instanceof Error?H.message:String(H)})}return Q}function bX($){let Z=$.settingsPath??Z0(),Q;try{Q=CX(Z)}catch{return[]}let W=PX(Q),J=oA($),X=[];for(let[Y,j]of Object.entries(W)){if(!u2(j)||!H7(j,J))continue;let V=B7(j);W[Y]={...j,disabled:!0},X.push({name:Y,pluginName:typeof V?.pluginName==="string"?V.pluginName:"plugin",pluginPath:typeof V?.pluginPath==="string"?V.pluginPath:"",action:"disabled"})}if(X.length>0)SX(Z,Q,W);return X}function n5($){let Z=$.settingsPath??Z0(),Q;try{Q=CX(Z)}catch{return[]}let W=PX(Q),J=oA($),X=[];for(let[Y,j]of Object.entries(W)){if(!H7(j,J))continue;let V=B7(j);delete W[Y],X.push({name:Y,pluginName:typeof V?.pluginName==="string"?V.pluginName:"plugin",pluginPath:typeof V?.pluginPath==="string"?V.pluginPath:"",action:"removed"})}if(X.length>0)SX(Z,Q,W);return X}var gX="_installed",zy="package",Ty=new Map([["git",2],["local",1],["npm",1],["official",1],["remote",1]]);function hX($){return $.trim().toLowerCase()}function V1($,Z){let Q=Z?.trim();if(!Q)return;$.add(Q)}function Oy($){return $.replace(/-[0-9a-f]{12}$/i,"")}function kX($){let Z=fy($);return Z?$.slice(0,-Z.length):$}function IX($){if(!q4($))return;try{let Z=JSON.parse(Gy($,"utf8"));return typeof Z.name==="string"?Z.name.trim():void 0}catch{return}}function mX($,Z){let Q=Dy(Z,$);return Q===""||!Q.startsWith("..")&&!Uy(Q)}function eA($){let Q=O4($).split(yX),W=Q.lastIndexOf(gX);if(W<0)return;let J=Q[W+1];if(!J)return;let X=Ty.get(J)??1,Y=W+2+X;if(Q.length<Y)return;let j=Q.slice(0,Y).join(yX)||yX;return q4(j)?j:void 0}function G7($){try{return By($,{withFileTypes:!0})}catch{return[]}}function qy($){let Z=Z$($,gX);if(!q4(Z))return[];let Q=[];for(let W of G7(Z)){if(!W.isDirectory())continue;let J=Z$(Z,W.name);if(W.name==="git"){for(let X of G7(J)){if(!X.isDirectory())continue;let Y=Z$(J,X.name);for(let j of G7(Y))if(j.isDirectory())Q.push(Z$(Y,j.name))}continue}for(let X of G7(J))if(X.isDirectory())Q.push(Z$(J,X.name))}return Q.sort((W,J)=>W.localeCompare(J))}function $f($){try{return Ly($)}catch{return[]}}function xX($){let Z=$f($),Q=new Set;V1(Q,a0($)),V1(Q,Oy(a0($))),V1(Q,IX(Z$($,"package.json"))),V1(Q,IX(Z$($,zy,"package.json")));for(let W of Z)V1(Q,a0(W)),V1(Q,kX(a0(W)));return{installPath:$,entryPaths:Z,names:[...Q].sort((W,J)=>W.localeCompare(J)),installed:!0}}function My($,Z){let Q=O4($),W=Z.find((Y)=>mX(Q,Y));if(!W)return;let J=m$(Q);while(J!==W&&J!==m$(J)){if(q4(Z$(J,"package.json")))return J;J=m$(J)}let X=a0(Q);if((X==="index.ts"||X==="index.js")&&m$(Q)!==W)return m$(Q);return Q}function Zf($,Z){let Q=My($,Z);if(!Q)return;let W=new Set;return V1(W,a0($)),V1(W,kX(a0($))),V1(W,a0(Q)),V1(W,kX(a0(Q))),V1(W,IX(Z$(Q,"package.json"))),{installPath:Q,entryPaths:[$],names:[...W].sort((J,X)=>J.localeCompare(X)),installed:!1}}function Ry($){let Z=$.workspaceRoot?.trim()||$.cwd?.trim()||process.cwd();return _y(Z).filter((Q)=>q4(Q))}function Ey($){let Z=new Map;for(let Q of $){for(let W of qy(Q))Z.set(W,xX(W));for(let W of $f(Q)){let J=eA(W);if(J){if(!Z.has(J))Z.set(J,xX(J));continue}let X=Zf(W,$);if(X)Z.set(X.installPath,X)}}return[...Z.values()].sort((Q,W)=>Q.installPath.localeCompare(W.installPath))}function Ny($,Z){let Q=hX(Z);if(!Q)return!1;if(hX($.installPath)===Q)return!0;return $.names.some((W)=>hX(W)===Q)}function wy($,Z,Q){let W=O4($);for(let X of Z){if(mX(W,X.installPath))return X;if(X.entryPaths.some((Y)=>O4(Y)===W))return X}let J=eA(W);if(J)return xX(J);if(q4(W))return Zf(W,Q);return}function Cy($){let Z=z0(),Q=Z.disabledPlugins;if(!Q?.length)return;let W=Q.filter((J)=>{let X=O4(J);if(mX(X,$.installPath))return!1;return!$.entryPaths.some((Y)=>O4(Y)===X)});if(W.length===Q.length)return;B1({...Z,disabledPlugins:W})}function Py($){let Z=m$($);while(Z!==m$(Z)&&a0(Z)!==gX){try{Ky(Z)}catch{return}Z=m$(Z)}}function Sy($){return`${$.names[0]??a0($.installPath)} at ${$.installPath}`}async function a5($){let Z=Ry($),Q=Ey(Z),W=$.path?.trim(),J=$.name?.trim(),X;if(W){if(X=wy(W,Q,Z),!X)throw Error(`No plugin found at ${W}`)}else{if(!J)throw Error("plugin uninstall requires a plugin name");let j=Q.filter((V)=>Ny(V,J));if(j.length===0)throw Error(`No plugin found matching "${J}"`);if(j.length>1)throw Error(`Multiple plugins match "${J}": ${j.map(Sy).join(", ")}`);X=j[0]}let Y=Ay(X.installPath,{throwIfNoEntry:!1});if(!Y)throw Error(`Plugin install path does not exist: ${X.installPath}`);if(n5({pluginPaths:[X.installPath,...X.entryPaths],pluginNames:X.names}),Fy(X.installPath,{recursive:Y.isDirectory(),force:!0}),Cy(X),X.installed)Py(X.installPath);return{name:J||X.names[0]||a0(X.installPath),installPath:X.installPath,removedPaths:[X.installPath],entryPaths:X.entryPaths}}var vX=120000,s5=12000,my=/(api[_ -]?key|access[_ -]?token|refresh[_ -]?token|auth(?:orization)?[_ -]?token|token|secret|password|authorization|credential)/i,vy=/((?:^|[^\w])(?:[a-z0-9_]*?(?:api[_ -]?key|access[_ -]?token|refresh[_ -]?token|auth(?:orization)?[_ -]?token|token|secret|password|credential)[a-z0-9_]*)\s*[:=]\s*)(.+)$/gi,cy=/((?:^|[^\w])authorization\s*[:=]\s*)bearer\s+([^\s,"'}\]]+)/gi,uy=/((?:^|[^\w])authorization\s*[:=])(?!\s*bearer\b)\s*(.+)$/gi;function cX($){return $.install?.args??[]}function dy(){return process.env.HOME?.trim()||process.env.USERPROFILE?.trim()||hy()}function ly($){let Z=0,Q=$.length;while(Z<Q&&($[Z]==="."||$[Z]==="-"))Z++;while(Q>Z&&($[Q-1]==="."||$[Q-1]==="-"))Q--;return $.slice(Z,Q)}function py($){return ly($.toLowerCase().replace(/[^a-z0-9._]+/g,"-")).slice(0,255)||"skill"}function Xf($){return $.split(/\r?\n/).map((Z)=>{if(!my.test(Z))return Z;return Z.replace(vy,"$1[redacted]").replace(cy,"$1Bearer [redacted]").replace(/\b(Bearer)\s+(?!\[redacted\])([^\s,"'}\]]+)/gi,"$1 [redacted]").replace(uy,"$1 [redacted]").replace(/((?:^|[^\w])(?:api\s+key|access\s+token|refresh\s+token|auth(?:orization)?\s+token|secret|password|credential)\s+(?:is\s+)?)(\S+)/gi,"$1[redacted]")}).join(`
|
|
718
|
+
`).slice(-s5)}function ry($){let Z=Xf([$.stdout,$.stderr].filter(Boolean).join(`
|
|
719
|
+
`)).trim();return Z.length>0?Z:void 0}function iy($){if($==="")return'""';if(/^[a-zA-Z0-9_./:=@%+,-]+$/.test($))return $;return JSON.stringify($)}function ny($,Z){return[$,...Z].map((Q)=>iy(Xf(Q).trim())).join(" ")}var ay=async($,Z)=>new Promise((Q,W)=>{let J=!1,X=!1,Y=by($,Z,{env:process.env,shell:ky()==="win32",stdio:["ignore","pipe","pipe"],windowsHide:!0}),j="",V="",H=setTimeout(()=>{if(!J)Y.kill("SIGKILL")},vX+5000),B=setTimeout(()=>{X=!0,V+=`
|
|
720
|
+
Timed out after ${vX/1000}s.`,Y.kill("SIGTERM")},vX);H.unref?.(),B.unref?.(),Y.stdout?.on("data",(G)=>{if(j+=String(G),j.length>s5*2)j=j.slice(-s5)}),Y.stderr?.on("data",(G)=>{if(V+=String(G),V.length>s5*2)V=V.slice(-s5)}),Y.once("error",(G)=>{clearTimeout(B),clearTimeout(H),W(G)}),Y.once("close",(G,K)=>{J=!0,clearTimeout(B),clearTimeout(H),Q({exitCode:X?124:G??(K==="SIGINT"?130:1),stdout:j,stderr:V})})});function uX($){return`${$.type}:${$.id}`}function o5($){let Z=cX($);if(Z.length===0)throw Error("Marketplace install args are required.");return r5(Z).name}function K7($,Z={}){let Q=o5($),W=Z.mcpSettingsPath??gy(),J=j1(W,(X)=>{let Y=X.mcpServers&&typeof X.mcpServers==="object"&&!Array.isArray(X.mcpServers)?X.mcpServers:{},j=Object.hasOwn(Y,Q);if(j)delete Y[Q];return X.mcpServers=Y,j});return{name:Q,deleted:J}}function t5($){let Z=new Set,Q=(J)=>{let X=py(J??"");if(X&&X!=="skill")Z.add(X)};Q($.id),Q($.name);let W=cX($);for(let J=0;J<W.length;J++){let X=W[J];if((X==="--skill"||X==="-s")&&W[J+1]){Q(W[J+1]),J++;continue}let Y=X.split("@").at(1);if(Y)Q(Y)}return[...Z]}function e5($){return[Wf(xy(),"skills",$,"SKILL.md"),Wf(dy(),".agents","skills",$,"SKILL.md")].filter((Z,Q,W)=>W.indexOf(Z)===Q)}function $9($){if($.type!=="skill")return;return t5($).find((Z)=>e5(Z).some((Q)=>Jf(Q)))}function F7($){return $9($)!==void 0}function sy($){let Z=[];if($.type!=="skill")return Z;for(let Q of t5($))for(let W of e5(Q)){if(!Jf(W))continue;let J=Iy(W);yy(J,{recursive:!0,force:!0}),Z.push(J)}return Z}async function A7($,Z={}){let Q=$9($);if(!Q)return{id:$.id,type:"skill",status:"uninstalled",message:`${$.name??$.id} is not installed.`};let W="npx",J=["-y","skills@latest","remove",Q,"-g","-y"],X=ny(W,J),Y=Z.spawnCommand??ay,j;try{j=await Y(W,J)}catch(B){throw Error(`Failed to start ${$.name??$.id} uninstall command:
|
|
721
721
|
${X}
|
|
722
|
-
${B instanceof Error?B.message:String(B)}`)}let V=
|
|
722
|
+
${B instanceof Error?B.message:String(B)}`)}let V=ry(j);if(j.exitCode!==0)throw Error(`${$.name??$.id} uninstall failed with exit code ${j.exitCode}.
|
|
723
723
|
Command:
|
|
724
724
|
${X}${V?`
|
|
725
725
|
|
|
726
|
-
${V}`:""}`);let H=
|
|
726
|
+
${V}`:""}`);let H=sy($);if(F7($))throw Error(`Skill uninstall completed, but ${$.name??$.id} is still present in Cline's global skills directories.`);return{id:$.id,type:"skill",status:"uninstalled",message:`Uninstalled ${$.name??$.id}.`,output:[V,...H.map((B)=>`Removed: ${B}`)].filter(Boolean).join(`
|
|
727
727
|
`)||void 0}}async function f7($,Z={}){let[Q]=cX($),W=Q?.trim()||$.id;if(!W)throw Error("Plugin marketplace uninstalls require a plugin name.");let J=await a5({name:W,workspaceRoot:Z.workspaceRoot});return{id:$.id,type:"plugin",status:"uninstalled",message:`Uninstalled ${$.name??J.name??$.id}.`,output:[`Path: ${J.installPath}`,...J.removedPaths.map((X)=>`Removed: ${X}`)].join(`
|
|
728
|
-
`)}}async function dX($,Z={}){if($.type==="mcp"){let Q=o5($);if(Z.deleteMcpServer)await Z.deleteMcpServer(Q);else K7($,Z);return{id:$.id,type:$.type,status:"uninstalled",message:`Uninstalled ${$.name??Q??$.id}.`}}if($.type==="skill")return A7($,Z);if($.type==="plugin")return f7($,Z);throw Error(`Unsupported marketplace entry type: ${$.type}`)}var zf={};N(zf,{parsePluginSource:()=>M7,isOfficialPluginSlug:()=>q7,installPlugin:()=>aX,collectPluginMcpOAuthCandidates:()=>R7});import{spawn as
|
|
729
|
-
`,"utf8")}function
|
|
730
|
-
`,"utf8")}async function w7($,Z){await
|
|
731
|
-
`,"utf8")}function Ef($,Z){return{id:$,name:Z.name??$,supportsAttachments:Z.capabilities?.includes("files"),supportsVision:Z.capabilities?.includes("images"),supportsReasoning:Z.capabilities?.includes("reasoning")||Z.thinkingConfig!=null}}function Nf($){if(!$||$.length===0)return;let Z=new Set;if($.includes("reasoning"))Z.add("reasoning");if($.includes("prompt-cache"))Z.add("prompt-cache");if($.includes("tools"))Z.add("tools");return Z.size>0?[...Z]:void 0}function wf($){let Z=new Set;if(!$||$.length===0)return[...Z];if($.includes("streaming"))Z.add("streaming");if($.includes("tools"))Z.add("tools");if($.includes("reasoning"))Z.add("reasoning");if($.includes("prompt-cache"))Z.add("prompt-cache");if($.includes("vision"))Z.add("images"),Z.add("files");return[...Z]}function sh($){return $!=null&&typeof $.name==="string"&&typeof $.baseUrl==="string"}function Cf($,Z){return $??Z??"openai-chat"}function Pf($,Z,Q){return $??Q??(Z==="openai-responses"?"openai":"openai-compatible")}function Sf($,Z,Q){let W=new Set(Z?.capabilities??Q??[]);if(Z?.supportsVision)W.add("images");if(Z?.supportsAttachments)W.add("files");if(Z?.supportsReasoning)W.add("reasoning");return{id:$,name:Z?.name??$,maxTokens:Z?.maxTokens,contextWindow:Z?.contextWindow,maxInputTokens:Z?.maxInputTokens,capabilities:W.size>0?[...W]:void 0}}function oh($,Z){for(let[Q,W]of Object.entries(Z??{})){let J=W.id?.trim()||Q.trim();if(!J)continue;h0.registerModel($,J,Sf(J,W))}}function th($,Z,Q){return{...Z??{},id:$,name:Z?.name??$,capabilities:Z?.capabilities??Q}}function eh($){return Object.assign({},...h0.resolveProviderModelCatalogKeys($).map((Q)=>h0.getGeneratedModelsForProvider(Q)))}function $k($){let Z=$.provider.trim();if(!Z||h0.isBuiltInProviderId(Z))return;let Q=$.baseUrl?.trim();if(!Q)return;let W=h0.MODEL_COLLECTIONS_BY_PROVIDER_ID[Z],J=eh(Z),X=wf($.capabilities),Y=X.length>0?X:void 0,j=$.model?.trim(),V={...J,...W?.models??{}};if(j)V[j]=th(j,V[j],Y);let H=Object.keys(V).filter(Boolean),B=j||H[0];if(!B)return;let G=Cf($.protocol,W?.provider.protocol),K=Pf($.client,G,W?.provider.client);h0.registerProvider({provider:{id:Z,name:W?.provider.name??qf(Z),description:W?.provider.description,protocol:G,client:K,baseUrl:Q,modelsSourceUrl:W?.provider.modelsSourceUrl,defaultModelId:B,capabilities:Nf($.capabilities)??W?.provider.capabilities,source:"file"},models:V})}function C7($){for(let Z of Object.values($.providers))$k(Z.settings)}function Z9($,Z){let Q=Z.models??{};if(!sh(Z.provider)){oh($,Q);return}let W=wf(Z.provider.capabilities),J=Object.entries(Q).map(([H,B])=>({id:B.id?.trim()||H.trim(),model:B})).filter(({id:H})=>H.length>0),X=Z.provider.defaultModelId?.trim()||J[0]?.id||"default",Y=Cf(Z.provider.protocol,void 0),j=Pf(Z.provider.client,Y,void 0),V=Object.fromEntries(J.map(({id:H,model:B})=>[H,{...Sf(H,B,W.length>0?W:void 0),status:"active"}]));h0.registerProvider({provider:{id:$,name:Z.provider.name.trim()||qf($),protocol:Y,client:j,baseUrl:Z.provider.baseUrl,modelsSourceUrl:Z.provider.modelsSourceUrl,defaultModelId:X,capabilities:Nf(Z.provider.capabilities),source:"file"},models:V})}function bf($){let Z=l2($);if(E7.has(Z))return;let Q=oX(Z);for(let[W,J]of Object.entries(Q.providers))Z9(W,J);E7.add(Z)}async function P7($){let Z=l2($);if(E7.has(Z))return;let Q=await E4(Z);for(let[W,J]of Object.entries(Q.providers))Z9(W,J);E7.add(Z)}var hf="cline-pass";function Zk($){return $.apiKey??$.auth?.apiKey}function Qk($){return($.auth?.accessToken?.trim()??"").length>0}function kf($){return $.split(/[-_]/).filter(Boolean).map((Z)=>Z.charAt(0).toUpperCase()+Z.slice(1)).join(" ")}function Wk($){let Z=$.split(/\s+/).filter(Boolean);if(Z.length===0)return"?";if(Z.length===1)return Z[0].slice(0,2).toUpperCase();return`${Z[0][0]}${Z[1][0]}`.toUpperCase()}function Jk($){let Z=["#c4956a","#6b8aad","#e8963a","#5b9bd5","#6bbd7b","#9b7dd4","#d07f68","#57a6a1"],Q=0;for(let W of $)Q=Q*31+W.charCodeAt(0)>>>0;return Z[Q%Z.length]}function If($){return Object.entries($).sort(([Z],[Q])=>Z.localeCompare(Q)).map(([Z,Q])=>Ef(Z,Q))}async function Xk($,Z){let Q=await w0.getModelsForProvider($),W=$===hf;if(!Z&&!W)return Q;let J=await Z5($,{loadLatestOnInit:W,loadPrivateOnAuth:!0,failOnError:!1},Z);if($==="litellm"&&J?.knownModels)return J.knownModels;if(W&&J?.knownModels)return J.knownModels;return J?.knownModels?{...Q,...J.knownModels}:Q}function tX($){return[...new Set(($??[]).map((Z)=>Z.trim()).filter(Boolean))]}function Yk($){if(!$?.length)return;return[...new Set($)]}function jk($,Z){return Yk([...$??[],...Z??[]])}function Vk($){let Z=$?.popularRank;return typeof Z==="number"&&Number.isFinite(Z)?Z:Number.MAX_SAFE_INTEGER}function Hk($){if(!$||typeof $!=="object")return!1;let Z=$;return typeof Z.path==="string"&&Z.path.trim().length>0&&typeof Z.label==="string"&&Z.label.trim().length>0&&["text","password","url","number","select","boolean"].includes(String(Z.type))}function Bk($){let Z=$?.configFields;if(!Array.isArray(Z))return;return Z.filter(Hk)}var S7={path:"apiKey",label:"API Key",type:"password",placeholder:"Enter API key...",description:"API key issued by the provider.",secret:!0},yf={path:"baseUrl",label:"Base URL",type:"url",placeholder:"https://...",description:"Base endpoint used for provider requests."};function Gk($){if(!$)return[S7];if($.source!=="system")return $.baseUrl?[S7,yf]:[S7];let Z=[];if($.env?.length)Z.push(S7);if($.baseUrl)Z.push(yf);return Z}function Kk($,Z){return Z.split(".").reduce((Q,W)=>{if(!Q||typeof Q!=="object")return;return Q[W]},$)}function Fk($){if(typeof $==="string"||typeof $==="number"||typeof $==="boolean"||$===null)return $;return}function Ak($,Z,Q){if(!$?.length)return;let W={};for(let J of $){let Y=Fk(J.path==="baseUrl"&&Z?.baseUrl===void 0?Q?.baseUrl:Kk(Z,J.path))??J.defaultValue;if(Y!==void 0)W[J.path]=Y}return W}function xf($){let Z=Object.entries($??{}).filter(([Q])=>Q.trim().length>0);return Z.length>0?Object.fromEntries(Z):void 0}function eX($,Z){let Q=Z?.includes("vision")??!1,W=Z?.includes("reasoning")??!1;return Object.fromEntries($.map((J)=>[J,{id:J,name:J,supportsVision:Q,supportsAttachments:Q,supportsReasoning:W}]))}async function gf($){if(!$.shouldRecompute)return $.fallbackModelIds??[];let Z=$.modelsSourceUrl?await iZ($.modelsSourceUrl,$.providerId):[];return[...new Set([...$.explicitModels??[],...Z])]}function mf($,Z){let Q=$.read(),W=!1;if(Q.providers[Z])delete Q.providers[Z],W=!0;if(Q.lastUsedProvider===Z)delete Q.lastUsedProvider,W=!0;if(W)$.write(Q);w0.unregisterProvider(Z)}async function $Y($,Z){let Q=Z.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let W=Z.baseUrl.trim(),J=Z.apiKey?.trim()??"";if(!W&&!J){let A=l2($);if((await E4(A)).providers[Q]){let f=await h7($,{providerId:Q});return{providerId:Q,settingsPath:f.settingsPath,modelsPath:f.modelsPath,modelsCount:0}}return mf($,Q),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:A,modelsCount:0}}if(w0.hasProvider(Q))throw Error(`provider "${Q}" already exists`);let X=Z.name.trim();if(!X)throw Error("name is required");if(!W)throw Error("baseUrl is required");let Y=tX(Z.models),j=Z.modelsSourceUrl?.trim(),V=await gf({providerId:Q,explicitModels:Y,modelsSourceUrl:j,shouldRecompute:!0});if(V.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let H=Z.defaultModelId?.trim()&&V.includes(Z.defaultModelId.trim())?Z.defaultModelId.trim():V[0],B=Z.capabilities?.length?[...new Set(Z.capabilities)]:void 0,G=xf(Z.headers);$.saveProviderSettings({provider:Q,apiKey:J||void 0,baseUrl:W,headers:G,timeout:Z.timeoutMs,model:H,protocol:Z.protocol,client:Z.client},{setLastUsed:!1});let K=l2($),F=await E4(K);return F.providers[Q]={provider:{name:X,baseUrl:W,defaultModelId:H,protocol:Z.protocol,client:Z.client,capabilities:B,modelsSourceUrl:j},models:eX(V,B)},await w7(K,F),Z9(Q,F.providers[Q]),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:K,modelsCount:V.length}}async function y7($,Z){let Q=Z.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let W=l2($),J=await E4(W),X=J.providers[Q];if(!X){let q=$.getProviderSettings(Q);if(!q)throw Error(`provider "${Q}" does not exist`);let z=Z.modelsSourceUrl?.trim(),_=tX(Z.models)[0]??q.model?.trim();if(!_&&!z)throw Error(`provider "${Q}" cannot be updated because no model is configured`);X={provider:{name:Z.name?.trim()||kf(Q),baseUrl:Z.baseUrl?.trim()??q.baseUrl?.trim()??"",defaultModelId:_,protocol:q.protocol,client:q.client,capabilities:q.capabilities},models:_?eX([_],q.capabilities):{}}}if(!X.provider)throw Error(`provider "${Q}" cannot be updated because it is a model overlay (no provider metadata)`);let Y=Z.name?.trim()??X.provider.name.trim();if(!Y)throw Error("name is required");let j=Z.baseUrl?.trim()??X.provider.baseUrl.trim();if(!j)throw Error("baseUrl is required");let V=Z.capabilities===void 0?X.provider.capabilities:Z.capabilities===null?void 0:[...new Set(Z.capabilities)],H=Z.protocol===void 0?X.provider.protocol:Z.protocol??void 0,B=Z.client===void 0?X.provider.client:Z.client??void 0,G=tX(Z.models),K=Z.modelsSourceUrl===void 0?X.provider.modelsSourceUrl:Z.modelsSourceUrl?.trim()||void 0,F=Z.models!==void 0||Z.modelsSourceUrl!==void 0&&!!K,A=Object.keys(X.models??{}).map((q)=>q.trim()).filter(Boolean),L=await gf({providerId:Q,explicitModels:G,modelsSourceUrl:K,fallbackModelIds:A,shouldRecompute:F});if(L.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let f=Z.defaultModelId===void 0?X.provider.defaultModelId?.trim():Z.defaultModelId?.trim(),D=f&&L.includes(f)?f:L[0],T={...$.getProviderSettings(Q)??{},provider:Q,baseUrl:j,model:D};if(H)T.protocol=H;else delete T.protocol;if(B)T.client=B;else delete T.client;if(Z.apiKey!==void 0){let q=Z.apiKey?.trim()??"";if(q)T.apiKey=q;else delete T.apiKey}if(Z.headers!==void 0){let q=xf(Z.headers);if(q)T.headers=q;else delete T.headers}if(Z.timeoutMs!==void 0)if(typeof Z.timeoutMs==="number")T.timeout=Z.timeoutMs;else delete T.timeout;return $.saveProviderSettings(T,{setLastUsed:!1}),J.providers[Q]={provider:{name:Y,baseUrl:j,defaultModelId:D,protocol:H,client:B,capabilities:V,modelsSourceUrl:K},models:eX(L,V)},await w7(W,J),Z9(Q,J.providers[Q]),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:W,modelsCount:L.length}}async function h7($,Z){let Q=Z.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let W=l2($),J=await E4(W);if(!J.providers[Q])throw Error(`provider "${Q}" does not exist`);return delete J.providers[Q],await w7(W,J),w0.unregisterProvider(Q),mf($,Q),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:W}}async function ZY($,Z={}){let Q=$.read(),W=w0.getProviderIds(),J=await Promise.all(W.map(async(Y)=>{let[j,V]=await Promise.all([w0.getProvider(Y),w0.getModelsForProvider(Y)]),H=If(V),B=Q.providers[Y]?.settings,G=j?.name??kf(Y),K=jk(j?.capabilities,B?.capabilities),F=Bk(j?.metadata)??Gk(j);return{provider:{id:Y,name:G,models:H.length,color:Jk(Y),letter:Wk(G),enabled:Boolean(B),apiKey:B?Zk(B):void 0,oauthAccessTokenPresent:B?Qk(B):void 0,baseUrl:B?.baseUrl??j?.baseUrl,defaultModelId:j?.defaultModelId,protocol:B?.protocol??j?.protocol,client:B?.client??j?.client,capabilities:K,authDescription:"This provider uses API keys for authentication.",baseUrlDescription:"The base endpoint to use for provider requests.",configFields:F,configValues:Ak(F,B,j),modelList:H},rank:Vk(j?.metadata)}}));J.sort((Y,j)=>{if(Y.rank!==j.rank)return Y.rank-j.rank;return Y.provider.name.localeCompare(j.provider.name)||Y.provider.id.localeCompare(j.provider.id)});let X=J.map((Y)=>Y.provider);if(Z.isClinePassEnabled!==!0)X=X.filter((Y)=>Y.id!==hf);return{providers:X,settingsPath:$.getFilePath()}}async function QY($,Z){let Q=$.trim(),W=await Xk(Q,Z),J=If(W);return{providerId:Q,models:J}}function b7($){return $!=null&&typeof $==="object"&&!Array.isArray($)}function vf($,Z){if(!b7(Z))return b7($)?{...$}:void 0;let Q=b7($)?{...$}:{};for(let[W,J]of Object.entries(Z)){if(J==null||J===""){delete Q[W];continue}if(b7(J)){let X=vf(Q[W],J);if(X&&Object.keys(X).length>0)Q[W]=X;else delete Q[W];continue}Q[W]=J}return Object.keys(Q).length>0?Q:void 0}function WY($,Z){let Q=Z.providerId.trim();if(Z.enabled===!1){let X=$.read();if(delete X.providers[Q],X.lastUsedProvider===Q)delete X.lastUsedProvider;return $.write(X),{providerId:Q,enabled:!1,settingsPath:$.getFilePath()}}let J={...$.getProviderSettings(Q)??{},provider:Q};for(let X of["apiKey","baseUrl","model","region"])if(Object.hasOwn(Z,X)&&typeof Z[X]==="string")if(Z[X].trim().length===0)delete J[X];else J[X]=Z[X];for(let X of["maxTokens","contextWindow","timeout","apiLine","protocol","client","routingProviderId","capabilities"])if(Object.hasOwn(Z,X))J[X]=Z[X];for(let X of["auth","headers","reasoning","aws","gcp","azure","sap","oca"])if(Object.hasOwn(Z,X)&&Z[X]!=null){let Y=vf(J[X],Z[X]);if(Y)J[X]=Y;else delete J[X]}return $.saveProviderSettings(J,{setLastUsed:!1}),{providerId:Q,enabled:!0,settingsPath:$.getFilePath()}}async function JY($,Z){let Q=Z.trim(),W=$.getProviderSettings(Q),X=w0.MODEL_COLLECTIONS_BY_PROVIDER_ID[Q]?.provider,Y=W?.baseUrl?.trim()||X?.baseUrl?.trim(),j=nZ(Y,X?.baseUrl,X?.modelsSourceUrl);if(!W||!X||!Y||!j)return{providerId:Q,refreshed:!1};let V=await y7($,{providerId:Q,name:X.name,baseUrl:Y,apiKey:W.apiKey,headers:W.headers??null,timeoutMs:W.timeout??null,modelsSourceUrl:j,protocol:W.protocol??X.protocol??null,client:W.client??X.client??null,capabilities:W.capabilities??null});return{providerId:Q,refreshed:!0,modelsCount:V.modelsCount}}function XY($){let Z=$.trim().toLowerCase(),Q=j0(Z);if(Q)return Q.providerId;throw Error(`provider "${$}" does not support OAuth login`)}async function YY($,Z,Q,W){let J=j0($);if(!J)throw Error(`provider "${$}" does not support OAuth login`);let X=n8({onPrompt:async(Y)=>Y.defaultValue??"",openUrl:Q,onOpenUrlError:({error:Y})=>{throw Y instanceof Error?Y:Error(String(Y))}});return J.login({settings:Z,callbacks:X,telemetry:W})}function jY($,Z,Q,W,J){return W2({manager:$,providerId:Z,settings:Q,credentials:W,setLastUsed:J?.setLastUsed})}async function VY($,Z,Q,W){let J=n8({onPrompt:async(X)=>X.defaultValue??"",openUrl:Q,onOpenUrlError:({error:X})=>{throw X instanceof Error?X:Error(String(X))}});return X6($,Z,{callbacks:J,telemetry:W})}function HY($){let Z=$?.auth?.accessToken?.trim()||$?.apiKey?.trim();return Z&&Z.length>0?Z:void 0}var uf={};N(uf,{getProviderConfigFields:()=>BY});import*as k7 from"@cline/llms";var fk=["apiKey","baseUrl","azureApiVersion","awsRegion","awsProfile","gcpProjectId","gcpRegion","sapClientId","sapClientSecret","sapTokenUrl","sapResourceGroup","sapDeploymentId"],Uk={"openai-compatible":{description:"For Azure AI Foundry deployments, use a Base URL ending at /openai/deployments/<deployment> and set the Azure API version.",fields:{azureApiVersion:{label:"Azure API Version (optional)",placeholder:"2025-01-01-preview",note:"Required for Azure AI Foundry deployment URLs.",optional:!0}}},vertex:{mode:"replace",description:"Vertex AI can use Google Cloud Application Default Credentials with a project/region. An API key is optional for supported Gemini models.",fields:{gcpProjectId:{label:"Google Cloud Project ID",placeholder:"my-gcp-project"},gcpRegion:{label:"Google Cloud Region",placeholder:"us-central1",defaultValue:"us-central1"},apiKey:{label:"API Key (optional)",placeholder:"Leave blank to use Google Cloud credentials",optional:!0}}},bedrock:{mode:"replace",description:"AWS region is required for Bedrock. It can be auto-filled from AWS_REGION, AWS_DEFAULT_REGION, or ~/.aws/config.",fields:{awsRegion:{label:"AWS Region",placeholder:"us-east-1"},apiKey:{label:"AWS Bedrock API Key (optional)",placeholder:"Leave blank to use AWS profile/default chain",optional:!0},awsProfile:{label:"AWS Profile Name (optional)",placeholder:"default",optional:!0}}},ollama:{fields:{apiKey:{note:"Keep empty if no API key for local inference."}}},sapaicore:{mode:"replace",description:"SAP AI Core uses OAuth client credentials and an AI Core API URL, not a generic API key.",fields:{baseUrl:{label:"AI Core Base URL",placeholder:"https://api.ai.<region>.aws.ml.hana.ondemand.com"},sapClientId:{label:"Client ID",placeholder:"sb-...|xsuaa_std!b..."},sapClientSecret:{label:"Client Secret",placeholder:"SAP AI Core client secret"},sapTokenUrl:{label:"Token URL",placeholder:"https://<subdomain>.authentication.sap.hana.ondemand.com"},sapResourceGroup:{label:"Resource Group",placeholder:"default",optional:!0},sapDeploymentId:{label:"Deployment ID",placeholder:"SAP AI Core deployment id",optional:!0}}}};function Dk($,Z){let Q={};for(let W of fk){let J=$[W],X=Z[W];if(J||X)Q[W]={...J,...X}}return Q}function Lk($){let Z=Uk[$.providerId];if(!Z)return $;return{...$,description:Z.description??$.description,fields:Z.mode==="replace"?Z.fields:Dk($.fields,Z.fields)}}var _k=new Set(["ollama","lmstudio","litellm","openai-compatible"]);function zk($,Z){if(!Z?.provider.baseUrl)return!1;if(Z.provider.source!=="system")return!0;return _k.has($)}function BY($){let Z=k7.normalizeProviderId($);if(Q2(Z))return{providerId:Z,authMethod:"oauth",fields:{}};let Q=k7.MODEL_COLLECTIONS_BY_PROVIDER_ID[Z];if(Q?.provider.capabilities?.includes("local-auth"))return{providerId:Z,authMethod:"local",fields:{}};let W=Q?.provider.baseUrl,J={apiKey:{}};if(zk(Z,Q))J.baseUrl={defaultValue:W};return Lk({providerId:Z,authMethod:"api-key",fields:J})}var rf={};N(rf,{resolveLegacyClineAuth:()=>FY,migrateLegacyProviderSettings:()=>Q9});import{existsSync as Tk,readFileSync as Ok}from"node:fs";import{dirname as qk,join as GY}from"node:path";import*as N4 from"@cline/llms";import{resolveClineDataDir as Mk}from"@cline/shared/storage";var I7="openai",pf=N4.BUILT_IN_PROVIDER.OPENAI_COMPATIBLE,df=128000;function FY($){let Z=$?.trim();if(!Z)return;try{let Q=JSON.parse(Z);if(!Q)return;let W=typeof Q.expiresAt==="number"&&Number.isFinite(Q.expiresAt)?Q.expiresAt<10000000000?Q.expiresAt*1000:Q.expiresAt:void 0;return{accessToken:Q.idToken,refreshToken:Q.refreshToken,expiresAt:W,accountId:Q.userInfo?.id}}catch{return}}function b($){let Z=$?.trim();return Z?Z:void 0}function Rk($){return $==="credentials"?"iam":$}function lf($){if(!Tk($))return;try{let Z=Ok($,"utf8"),Q=JSON.parse(Z);if(Q&&typeof Q==="object"&&!Array.isArray(Q))return Q}catch{}return}function Ek($){let Z=$.dataDir??Mk(),Q=$.globalStatePath??GY(Z,"globalState.json"),W=$.secretsPath??GY(Z,"secrets.json"),J=lf(Q),X=lf(W);if(!J&&!X)return;return{globalState:J??{},secrets:X??{}}}function KY($){if($===I7)return pf;return $}function Nk($,Z,Q,W){let J=Q==="plan"?"planMode":"actMode",X=Z===W?b(Q==="plan"?$.planModeApiModelId:$.actModeApiModelId):void 0,j={openrouter:`${J}OpenRouterModelId`,cline:`${J}ClineModelId`,openai:`${J}OpenAiModelId`,ollama:`${J}OllamaModelId`,lmstudio:`${J}LmStudioModelId`,litellm:`${J}LiteLlmModelId`,requesty:`${J}RequestyModelId`,together:`${J}TogetherModelId`,fireworks:`${J}FireworksModelId`,sapaicore:`${J}SapAiCoreModelId`,groq:`${J}GroqModelId`,baseten:`${J}BasetenModelId`,huggingface:`${J}HuggingFaceModelId`,"huawei-cloud-maas":`${J}HuaweiCloudMaasModelId`,oca:`${J}OcaModelId`,aihubmix:`${J}AihubmixModelId`,hicap:`${J}HicapModelId`,nousResearch:`${J}NousResearchModelId`,"vercel-ai-gateway":`${J}VercelAiGatewayModelId`}[Z];return(j?b(typeof $[j]==="string"?$[j]:void 0):void 0)??X}function wk($,Z,Q){let W=Q==="plan"?$.planModeThinkingBudgetTokens:$.actModeThinkingBudgetTokens,J=[...Z==="oca"?[$.actModeOcaReasoningEffort,$.planModeOcaReasoningEffort]:[],...Z==="gemini"?[$.geminiActModeThinkingLevel,$.geminiPlanModeThinkingLevel]:[],$.actModeReasoningEffort,$.planModeReasoningEffort].map(b).find(Boolean),X=J==="none"||J==="low"||J==="medium"||J==="high"||J==="xhigh"?J:void 0,Y=typeof W==="number"&&Number.isInteger(W)&&W>0?W:void 0;if(!X&&Y===void 0)return;return{...X?{effort:X}:{},...Y!==void 0?{budgetTokens:Y}:{}}}function Ck($){let Z=$["openai-codex-oauth-credentials"];if(!Z)return;try{let Q=JSON.parse(Z),W=b(Q.access_token),J=b(Q.refresh_token),X=b(Q.accountId);if(!W&&!J&&!X)return;return{...W?{apiKey:W}:{},auth:{...W?{accessToken:W}:{},...J?{refreshToken:J}:{},...X?{accountId:X}:{}}}}catch{return}}function Pk($){let Z=N4.getGeneratedModelsForProvider($),W=N4.getProviderCollectionSync($)?.provider.defaultModelId;if(W&&Z[W])return W;return Object.keys(Z)[0]??void 0}function Sk($,Z,Q,W){let J=KY($),X=b(W==="plan"?Z.planModeApiProvider:Z.actModeApiProvider),Y=Nk(Z,$,W,X)??Pk(J),j=wk(Z,J,W),V=typeof Z.requestTimeoutMs==="number"&&Number.isInteger(Z.requestTimeoutMs)&&Z.requestTimeoutMs>0?Z.requestTimeoutMs:void 0,H={anthropic:Q.apiKey,cline:Q.clineApiKey,openai:Q.openAiApiKey,"openai-native":Q.openAiNativeApiKey,openrouter:Q.openRouterApiKey,bedrock:Q.awsBedrockApiKey,gemini:Q.geminiApiKey,ollama:Q.ollamaApiKey,deepseek:Q.deepSeekApiKey,requesty:Q.requestyApiKey,together:Q.togetherApiKey,fireworks:Q.fireworksApiKey,qwen:Q.qwenApiKey,doubao:Q.doubaoApiKey,mistral:Q.mistralApiKey,litellm:Q.liteLlmApiKey,asksage:Q.asksageApiKey,xai:Q.xaiApiKey,moonshot:Q.moonshotApiKey,zai:Q.zaiApiKey,huggingface:Q.huggingFaceApiKey,nebius:Q.nebiusApiKey,sambanova:Q.sambanovaApiKey,cerebras:Q.cerebrasApiKey,groq:Q.groqApiKey,"huawei-cloud-maas":Q.huaweiCloudMaasApiKey,baseten:Q.basetenApiKey,"vercel-ai-gateway":Q.vercelAiGatewayApiKey,dify:Q.difyApiKey,minimax:Q.minimaxApiKey,hicap:Q.hicapApiKey,aihubmix:Q.aihubmixApiKey,nousResearch:Q.nousResearchApiKey,oca:Q.ocaApiKey},B={};if($==="openai-codex")Object.assign(B,Ck(Q));if($==="cline")try{let D=b(Q["cline:clineAccountId"]);if(D)B.auth={...B.auth??{},...FY(D)}}catch{}if($===I7&&Z.openAiHeaders)B.headers=Z.openAiHeaders;if($==="bedrock"){let D=Rk(Z.awsAuthentication),U=D==="profile"||Z.awsUseProfile===!0;B.aws={accessKey:b(Q.awsAccessKey),secretKey:b(Q.awsSecretKey),sessionToken:b(Q.awsSessionToken),region:b(Z.awsRegion),authentication:D,profile:U?b(Z.awsProfile):void 0,usePromptCache:Z.awsBedrockUsePromptCache,useCrossRegionInference:Z.awsUseCrossRegionInference,useGlobalInference:Z.awsUseGlobalInference,endpoint:b(Z.awsBedrockEndpoint),customModelBaseId:b(W==="plan"?Z.planModeAwsBedrockCustomModelBaseId:Z.actModeAwsBedrockCustomModelBaseId)}}if($==="vertex")B.gcp={projectId:b(Z.vertexProjectId),region:b(Z.vertexRegion)};if($===I7&&(Z.azureApiVersion||Z.azureIdentity!==void 0))B.azure={apiVersion:b(Z.azureApiVersion),useIdentity:Z.azureIdentity};if($==="sapaicore"){let D=Z.sapAiCoreUseOrchestrationMode??!0;B.sap={clientId:b(Q.sapAiCoreClientId),clientSecret:b(Q.sapAiCoreClientSecret),tokenUrl:b(Z.sapAiCoreTokenUrl),resourceGroup:b(Z.sapAiResourceGroup),deploymentId:D?void 0:b(W==="plan"?Z.planModeSapAiCoreDeploymentId:Z.actModeSapAiCoreDeploymentId),useOrchestrationMode:D}}if($==="oca"){B.oca={mode:Z.ocaMode};let D=b(Q.ocaRefreshToken);if(D)B.auth={...B.auth??{},refreshToken:D}}if($==="qwen")B.apiLine=Z.qwenApiLine;if($==="moonshot")B.apiLine=Z.moonshotApiLine;if($==="zai")B.apiLine=Z.zaiApiLine;if($==="minimax")B.apiLine=Z.minimaxApiLine;let G={anthropic:Z.anthropicBaseUrl,openai:Z.openAiBaseUrl,ollama:Z.ollamaBaseUrl,lmstudio:Z.lmStudioBaseUrl,litellm:Z.liteLlmBaseUrl,gemini:Z.geminiBaseUrl,requesty:Z.requestyBaseUrl,asksage:Z.asksageApiUrl,dify:Z.difyBaseUrl,oca:Z.ocaBaseUrl,aihubmix:Z.aihubmixBaseUrl,sapaicore:Z.sapAiCoreBaseUrl},K=b(H[$]),F=b(G[$]),A={provider:J,...K?{apiKey:K}:{},...Y?{model:Y}:{},...F?{baseUrl:F}:{},...j?{reasoning:j}:{},...V?{timeout:V}:{},...B},L=p8.safeParse(A);if(!L.success)return;return Object.keys(A).filter((D)=>D!=="provider").length>0?L.data:void 0}function bk($,Z){if($!==pf)return;if(!Z.baseUrl||!Z.model)return;return{provider:{name:"OpenAI Compatible",baseUrl:Z.baseUrl,defaultModelId:Z.model},models:{[Z.model]:{id:Z.model,name:Z.model,contextWindow:df,maxInputTokens:df,capabilities:["streaming","tools","images"]}}}}function yk($,Z){let Q=new Set;for(let J of[$.actModeApiProvider,$.planModeApiProvider]){let X=b(J);if(X)Q.add(X)}if(b(Z.apiKey))Q.add("anthropic");if(b(Z.openRouterApiKey))Q.add("openrouter");if(b(Z.openAiApiKey))Q.add(I7);if(b(Z.openAiNativeApiKey))Q.add("openai-native");if(b(Z["openai-codex-oauth-credentials"]))Q.add("openai-codex");if(b(Z.geminiApiKey))Q.add("gemini");if(b(Z.ollamaApiKey))Q.add("ollama");if(b(Z.awsAccessKey)||b(Z.awsBedrockApiKey)||$.awsAuthentication!==void 0||$.awsUseProfile===!0||b($.awsProfile))Q.add("bedrock");if(b($.vertexProjectId)||b($.vertexRegion))Q.add("vertex");if(b(Z.clineApiKey))Q.add("cline");let W=FY(b(Z["cline:clineAccountId"]));if(W?.accessToken||W?.refreshToken||W?.accountId)Q.add("cline");if(b(Z.ocaApiKey))Q.add("oca");if(b(Z.sapAiCoreClientId)||b(Z.sapAiCoreClientSecret)||b($.sapAiCoreTokenUrl)||b($.sapAiCoreBaseUrl)||b($.sapAiResourceGroup)||$.sapAiCoreUseOrchestrationMode!==void 0)Q.add("sapaicore");return Q}function Q9($){let Z=$.providerSettingsManager.read(),Q=Ek($);if(!Q)return{migrated:!1,providerCount:Object.keys(Z.providers).length,lastUsedProvider:Z.lastUsedProvider};let{globalState:W,secrets:J}=Q,X=W.mode==="plan"?"plan":"act",Y=yk(W,J),j=S$();j.providers={...Z.providers},j.lastUsedProvider=Z.lastUsedProvider;let V=new Date().toISOString(),H=0,B=GY(qk($.providerSettingsManager.getFilePath()),"models.json"),G=oX(B),K=0;for(let L of Y){let f=KY(L);if(j.providers[f])continue;let D=Sk(L,W,J,X);if(!D)continue;j.providers[f]={settings:D,updatedAt:V,tokenSource:"migration"},H+=1;let U=bk(f,D);if(U&&!G.providers[f])G.providers[f]=U,K+=1}if(H===0&&K===0)return{migrated:!1,providerCount:Object.keys(Z.providers).length,lastUsedProvider:Z.lastUsedProvider};let F=b(X==="plan"?W.planModeApiProvider:W.actModeApiProvider),A=F?KY(F):void 0;if(j.lastUsedProvider=Z.lastUsedProvider??(A&&j.providers[A]?A:Object.keys(j.providers)[0]),$.providerSettingsManager.write(j),K>0)Rf(B,G);return{migrated:H>0||K>0,providerCount:Object.keys(j.providers).length,lastUsedProvider:j.lastUsedProvider}}$7();_0();u9();var nf={};N(nf,{SessionVersioningService:()=>c$,SessionVersioningError:()=>k0});class k0 extends Error{code;constructor($,Z){super(Z);this.code=$;this.name="SessionVersioningError"}}function hk($){let Z=$.sessionId.trim();if(!Z)throw new k0("invalid_restore","sessionId is required");if(!$.restoreMessages&&!$.restoreWorkspace)throw new k0("invalid_restore","restore.messages or restore.workspace must be true");if($.restoreMessages&&$.requiresStart)throw new k0("invalid_restore","start is required when restore.messages is true");if(!Number.isInteger($.checkpointRunCount)||$.checkpointRunCount<1)throw new k0("invalid_restore","checkpointRunCount must be a positive integer");return Z}class c${async restoreCheckpoint($){let Z=$.restore?.messages!==!1,Q=$.restore?.workspace!==!1,W=hk({sessionId:$.sessionId,restoreMessages:Z,restoreWorkspace:Q,requiresStart:$.start===void 0,checkpointRunCount:$.checkpointRunCount}),J=await $.getSession(W);if(!J)throw new k0("session_not_found",`Session ${W} not found`);let X=Z?await $.readMessages(W):void 0;if(Z&&X?.length===0)throw new k0("session_messages_not_found",`No messages found for session ${W}`);let Y=fX({session:J,messages:X,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd,restoreMessages:Z});if(Q)await($.applyWorkspaceCheckpoint??UX)(Y.cwd,Y.checkpoint);let j=U1({session:J,messages:X});if(!Z)return{checkpoint:Y.checkpoint,sourceSnapshot:j};let V=FX(J,$.checkpointRunCount),H=$.restore?.omitCheckpointMessageFromSession?AX(X??[],$.checkpointRunCount):Y.messages??[],B={sourceSession:J,sourceMessages:X,sourceSnapshot:j,plan:Y,restoredCheckpointMetadata:V,initialMessages:H,restoreMessages:Z,restoreWorkspace:Q,checkpointRunCount:$.checkpointRunCount};if(!$.start||!$.startSession)throw new k0("invalid_restore","start is required when restore.messages is true");let G=$.buildStartInput?await $.buildStartInput(B,$.start):$.start,K=await $.startSession(G),F=$.getStartedSessionId?.(K);if(F)await($.retainCheckpointRefs??bG)(Y.cwd,F,V?.history??[]);let A=F&&$.readRestoredSession?await $.readRestoredSession(F):void 0;return{sessionId:F,startResult:K,messages:Y.messages,checkpoint:Y.checkpoint,sourceSnapshot:j,...A?{restoredSnapshot:U1({session:A,messages:H})}:{}}}}var af={};N(af,{FileTeamPersistenceStore:()=>x7});import{appendFileSync as kk,existsSync as AY,mkdirSync as Ik,readFileSync as xk,renameSync as gk,unlinkSync as mk,writeFileSync as vk}from"node:fs";import{join as fY}from"node:path";import{resolveTeamDataDir as ck}from"@cline/shared/storage";function uk($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}class x7{dirPath;statePath;taskHistoryPath;teammateSpecs=new Map;constructor($){let Z=uk($.teamName),Q=$.baseDir?.trim()||ck();this.dirPath=fY(Q,Z),this.statePath=fY(this.dirPath,"state.json"),this.taskHistoryPath=fY(this.dirPath,"task-history.jsonl")}loadState(){if(!AY(this.statePath))return;try{let $=xk(this.statePath,"utf8"),Z=JSON.parse($);if(Z.version!==1||!Z.teamState)return;for(let Q of Z.teammates??[])this.teammateSpecs.set(Q.agentId,Q);return AA(Z.teamState)}catch{return}}getTeammateSpecs(){return Array.from(this.teammateSpecs.values())}upsertTeammateSpec($){this.teammateSpecs.set($.agentId,$)}removeTeammateSpec($){this.teammateSpecs.delete($)}persist($){if(!this.hasPersistableState($)){this.clearPersistedState();return}this.ensureDir();let Z={version:1,updatedAt:new Date().toISOString(),teamState:$.exportState(),teammates:Array.from(this.teammateSpecs.values())},Q=`${this.statePath}.tmp`;vk(Q,`${JSON.stringify(Z,null,2)}
|
|
732
|
-
`,"utf8"),
|
|
733
|
-
`,"utf8")}ensureDir(){if(!AY(this.dirPath))Ik(this.dirPath,{recursive:!0})}hasPersistableState($){let Z=$.exportState();if(this.teammateSpecs.size>0)return!0;if(Z.members.some((Q)=>Q.role==="teammate"))return!0;return Z.tasks.length>0||Z.mailbox.length>0||Z.missionLog.length>0}clearPersistedState(){if(AY(this.statePath))mk(this.statePath)}}var sf={};N(sf,{ChatViewStateSchema:()=>UY,ChatSummarySchema:()=>u7,ChatSessionStatusSchema:()=>m7,ChatSessionConfigSchema:()=>g7,ChatMessageSchema:()=>c7,ChatMessageRoleSchema:()=>v7});import{z as h}from"zod";var g7=h.object({workspaceRoot:h.string().min(1),cwd:h.string().optional(),provider:h.string().min(1),model:h.string().min(1),mode:h.enum(["act","plan"]).default("act"),apiKey:h.string(),systemPrompt:h.string().optional(),rules:h.string().optional(),maxIterations:h.number().int().positive().optional(),enableTools:h.boolean(),enableSpawn:h.boolean().optional(),enableTeams:h.boolean().optional(),autoApproveTools:h.boolean().optional(),missionStepInterval:h.number().int().positive().optional(),missionTimeIntervalMs:h.number().int().positive().optional()}),m7=h.enum(["idle","starting","running","pending","stopping","completed","cancelled","failed","error"]),v7=h.enum(["user","assistant","tool","system","status","error"]),c7=h.object({id:h.string().min(1),sessionId:h.string().nullable(),role:v7,content:h.string(),createdAt:h.number().int().nonnegative(),meta:h.object({stream:h.enum(["stdout","stderr"]).optional(),toolName:h.string().optional(),iteration:h.number().int().nonnegative().optional(),agentId:h.string().optional(),conversationId:h.string().optional(),hookEventName:h.string().optional(),inputTokens:h.number().int().nonnegative().optional(),outputTokens:h.number().int().nonnegative().optional(),checkpoint:h.object({ref:h.string(),createdAt:h.number().int().nonnegative(),runCount:h.number().int().positive(),kind:h.enum(["stash","commit"]).optional()}).optional()}).optional()}),u7=h.object({toolCalls:h.number().int().nonnegative(),tokensIn:h.number().int().nonnegative(),tokensOut:h.number().int().nonnegative()}),UY=h.object({sessionId:h.string().nullable(),status:m7,config:g7,messages:h.array(c7),rawTranscript:h.string(),error:h.string().nullable(),summary:u7});var of={};N(of,{CORE_BUILD_VERSION:()=>DY});var DY=rj;import{Agent as kI,createAgentRuntime as II}from"@cline/agents";var tf={};N(tf,{fetchClineRecommendedModels:()=>_Y,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>d7});import{getClineEnvironmentConfig as dk}from"@cline/shared";var lk=5000,d7={recommended:[{id:"anthropic/claude-opus-4.6",name:"Claude Opus 4.6",description:"Most intelligent model for agents and coding",tags:["BEST"]},{id:"anthropic/claude-sonnet-4.6",name:"Claude Sonnet 4.6",description:"Strong coding and agent performance",tags:["NEW"]},{id:"google/gemini-3.1-pro-preview",name:"Gemini 3.1 Pro Preview",description:"1M context window, strong coding performance",tags:["NEW"]},{id:"openai/gpt-5.3-codex",name:"GPT-5.3 Codex",description:"OpenAI's latest with strong coding abilities",tags:["NEW"]}],free:[{id:"kwaipilot/kat-coder-pro",name:"KwaiKAT Kat Coder Pro",description:"Advanced agentic coding model",tags:["FREE"]},{id:"arcee-ai/trinity-large-preview:free",name:"Arcee AI Trinity Large Preview",description:"Advanced large preview model",tags:["FREE"]}],clinePass:[]};function pk($){return{recommended:$.recommended.map((Z)=>({...Z,tags:[...Z.tags]})),free:$.free.map((Z)=>({...Z,tags:[...Z.tags]})),clinePass:$.clinePass.map((Z)=>({...Z,tags:[...Z.tags]}))}}function LY($){if(!$||typeof $!=="object")return null;let Z=$;if(typeof Z.id!=="string"||Z.id.length===0)return null;return{id:Z.id,name:typeof Z.name==="string"&&Z.name.length>0?Z.name:Z.id,description:typeof Z.description==="string"?Z.description:"",tags:Array.isArray(Z.tags)?Z.tags.filter((Q)=>typeof Q==="string"):[]}}function rk($){if(!$||typeof $!=="object")return null;let Z=$,Q=Array.isArray(Z.recommended)?Z.recommended:[],W=Array.isArray(Z.free)?Z.free:[],J=Array.isArray(Z.clinePass)?Z.clinePass:[],X=Q.map(LY).filter((V)=>V!==null),Y=W.map(LY).filter((V)=>V!==null),j=J.map(LY).filter((V)=>V!==null);if(X.length===0&&Y.length===0&&j.length===0)return null;return{recommended:X,free:Y,clinePass:j}}function ik($){let Z=$.baseUrl?.trim();if(Z)return Z;let Q=dk().apiBaseUrl;try{return($.providerSettingsManager??new q1).getProviderSettings("cline")?.baseUrl?.trim()||Q}catch{return Q}}async function nk($,Z,Q){let W=new AbortController,J=setTimeout(()=>W.abort(),Q);try{return await $(Z,{signal:W.signal})}finally{clearTimeout(J)}}async function _Y($={}){try{let Z=ik($),Q=$.fetchImpl??fetch,W=await nk(Q,`${Z}/api/v1/ai/cline/recommended-models`,$.timeoutMs??lk);if(!W.ok)throw Error(`HTTP ${W.status}`);let J=await W.json(),X=rk(J);if(X)return X}catch{}return pk(d7)}var ef={};N(ef,{loadLlmsConfigFromFile:()=>TY,defineLlmsConfig:()=>zY});import{readFile as ak}from"node:fs/promises";import sk from"node:path";function zY($){return $}async function TY($){let Z=sk.resolve($),Q=await ak(Z,"utf8"),W;try{W=JSON.parse(Q)}catch(J){let X=J instanceof Error?J.message:String(J);throw Error(`Failed to parse JSON config at "${Z}": ${X}`)}return ok(W,Z)}function ok($,Z){if(!$||typeof $!=="object")throw Error(`Invalid llms config in "${Z}": expected an object.`);let W=$.providers;if(!Array.isArray(W))throw Error(`Invalid llms config in "${Z}": "providers" must be an array.`);if(!W.length)throw Error(`Invalid llms config in "${Z}": "providers" cannot be empty.`);return $}var XU={};N(XU,{createLlmsSdk:()=>qY,DefaultLlmsSdk:()=>W9});import{BUILT_IN_PROVIDER_IDS as QU,createHandler as $I,createHandlerAsync as ZI,getProviderCollection as QI,hasProvider as WU,registerAsyncHandler as WI,registerHandler as JI,registerModel as XI,registerProvider as JU}from"@cline/llms";function $U($){return $?{...$}:{}}function tk($,Z){if($)return $;if(!Z)return;let Q=globalThis.process;if(!Q?.env)return;return Q.env[Z]}function ek($,Z){if(!Z.length)throw Error(`Provider "${$}" must include at least one model.`)}function ZU($){let Z=Object.keys($.collection.models);return{id:$.collection.provider.id,name:$.collection.provider.name,description:$.collection.provider.description,protocol:$.collection.provider.protocol,baseUrl:$.collection.provider.baseUrl,capabilities:$.collection.provider.capabilities,env:$.collection.provider.env,models:Z,defaultModel:$.collection.provider.defaultModelId,modelCount:Z.length}}class OY{providers=new Map;register($){ek($.id,$.models);let Z=$.defaultModel??$.models[0];if(!Z)throw Error(`Provider "${$.id}" must define a default model.`);if(!$.models.includes(Z))throw Error(`Default model "${Z}" is not included in configured models for "${$.id}".`);let Q=this.providers.get($.id);this.providers.set($.id,{id:$.id,models:new Set([...Q?.models??[],...$.models]),defaultModel:Z,defaults:{...Q?.defaults??{},...$U($.defaults)}})}registerSelectionConfig($){this.register({id:$.id,models:$.models,defaultModel:$.defaultModel,defaults:{apiKey:tk($.apiKey,$.apiKeyEnv),routingProviderId:$.builtinProviderId,baseUrl:$.baseUrl,headers:$.headers,timeoutMs:$.timeoutMs,capabilities:$.capabilities,...$U($.settings)}})}registerModel($,Z){let Q=this.providers.get($);if(!Q){this.providers.set($,{id:$,models:new Set([Z]),defaultModel:Z,defaults:{}});return}Q.models.add(Z)}createHandlerConfig($){let Z=this.require($.providerId),Q=$.modelId??Z.defaultModel;if(!Z.models.has(Q))throw Error(`Model "${Q}" is not configured for provider "${$.providerId}".`);return{providerId:$.providerId,modelId:Q,...Z.defaults,...$.overrides}}list(){return Array.from(this.providers.values()).map(($)=>({id:$.id,models:Array.from($.models),defaultModel:$.defaultModel}))}getModels($){return Array.from(this.require($).models)}hasProvider($){return this.providers.has($)}hasModel($,Z){return this.providers.get($)?.models.has(Z)??!1}require($){let Z=this.providers.get($);if(!Z)throw Error(`Provider "${$}" is not configured in this SDK instance.`);return Z}}class W9{configuredProviders=new OY;constructor($){this.applyConfig($)}createHandler($){return $I(this.configuredProviders.createHandlerConfig($))}async createHandlerAsync($){return ZI(this.configuredProviders.createHandlerConfig($))}registerProvider($){if(JU($.collection),$.handlerFactory&&$.asyncHandlerFactory)throw Error(`Provider "${$.collection.provider.id}" cannot register both sync and async handlers.`);if($.handlerFactory)JI($.collection.provider.id,$.handlerFactory);if($.asyncHandlerFactory)WI($.collection.provider.id,$.asyncHandlerFactory);this.configuredProviders.register({id:$.collection.provider.id,models:$.exposeModels??Object.keys($.collection.models),defaultModel:$.defaultModel??$.collection.provider.defaultModelId,defaults:$.defaults})}registerBuiltinProvider($){let Z=$.exposeModels??Object.keys($.models),Q=$.defaultModel??Z[0];if(!Q)throw Error(`Provider "${$.id}" must define a default model.`);JU({provider:{id:$.id,name:$.name??$.id,description:$.description,protocol:$.protocol,baseUrl:$.baseUrl,defaultModelId:Q,client:$.client??"openai-compatible",capabilities:$.capabilities,env:$.env,source:"system"},models:$.models}),this.configuredProviders.register({id:$.id,models:Z,defaultModel:Q,defaults:{routingProviderId:$.builtinProviderId,...$.defaults??{}}})}registerModel($){XI($.providerId,$.modelId,$.info),this.configuredProviders.registerModel($.providerId,$.modelId)}getProviders(){return this.configuredProviders.list()}getBuiltInProviderIds(){return[...QU]}async getBuiltInProviders(){return(await Promise.all(QU.map((Z)=>QI(Z)))).filter((Z)=>Z!==void 0).map((Z)=>ZU({collection:Z}))}getModels($){return this.configuredProviders.getModels($)}isProviderConfigured($){return this.configuredProviders.hasProvider($)}isModelConfigured($,Z){return this.configuredProviders.hasModel($,Z)}applyConfig($){for(let Z of $.providers)this.configuredProviders.registerSelectionConfig(Z);for(let Z of $.models??[])this.registerModel(Z);for(let Z of $.customProviders??[])this.registerProvider(Z);for(let Z of this.configuredProviders.list()){let Q=WU(Z.id),W=this.configuredProviders.createHandlerConfig({providerId:Z.id,modelId:Z.defaultModel}).routingProviderId,J=typeof W==="string"&&WU(W);if(!Q&&!J)throw Error(`Provider "${Z.id}" is not known. Register it through customProviders/registerProvider, registerBuiltinProvider, or use a built-in provider ID.`)}}}function qY($){return new W9($)}UW();async function YI(){return Promise.resolve().then(() => ($7(),IA))}function cI(){return new Date().toISOString()}var uI="cline",dI="cline-pass";function lI($){if(FU($)!=="providers.json")return;let Z=EY($);if(FU(Z)!=="settings")return;return EY(Z)}class q1{filePath;dataDir;constructor($={}){if(this.filePath=$.filePath??vI(),this.dataDir=$.dataDir??lI(this.filePath),this.dataDir||!$.filePath)Q9({providerSettingsManager:this,dataDir:this.dataDir});if(bf(this),C7(this.read()),RY(this.filePath))try{KU(this.filePath,384)}catch{}}getFilePath(){return this.filePath}read(){if(!RY(this.filePath))return S$();try{let $=gI(this.filePath,"utf8"),Z=JSON.parse($),Q=r8.safeParse(Z);if(Q.success)return C7(Q.data),Q.data}catch{}return S$()}write($){let Z=r8.parse($),Q=EY(this.filePath);if(!RY(Q))xI(Q,{recursive:!0,mode:448});mI(this.filePath,`${JSON.stringify(Z,null,2)}
|
|
734
|
-
`,"utf8");try{KU(this.filePath,384)}catch{}C7(Z)}saveProviderSettings($,Z={}){let Q=p8.parse($),W=this.read(),J=Q.provider,X=Z.setLastUsed!==!1,Y=W.providers[J],j=Z.tokenSource??Y?.tokenSource??"manual",V={...W,providers:{...W.providers,[J]:{settings:Q,updatedAt:cI(),tokenSource:j}},lastUsedProvider:X?J:W.lastUsedProvider};return this.write(V),V}resolveProviderSettings($,Z){let Q=$.providers[Z]?.settings,J=j0(Z)?.storageProviderId;if(!J||J===Z)return Q;let X=$.providers[J]?.settings;if(!X)return Q;return p8.parse({...X.auth?{auth:X.auth}:{},...X.apiKey?{apiKey:X.apiKey}:{},...X.baseUrl?{baseUrl:X.baseUrl}:{},...Q??{},provider:Z})}getProviderSettings($){let Z=this.read();return this.resolveProviderSettings(Z,$)}resolveLastUsedProviderId($,Z){let Q=$.lastUsedProvider;if(Q===dI&&Z.isClinePassEnabled===!1)return uI;return Q}getLastUsedProviderSettings($={}){let Z=this.read(),Q=this.resolveLastUsedProviderId(Z,$);if(!Q)return;return this.resolveProviderSettings(Z,Q)}getProviderConfig($,Z){let Q=this.getProviderSettings($);if(!Q)return;return l0(Q,Z)}getLastUsedProviderConfig($={}){let Z=this.getLastUsedProviderSettings($);if(!Z)return;return l0(Z,$)}async refreshCatalog(){try{await d8({})}catch{}}}_0();J8();function pI($,Z){let Q=$?.expiresAt,W=Z?.expiresAt;return $?.accessToken===Z?.accessToken&&$?.refreshToken===Z?.refreshToken&&$?.accountId===Z?.accountId&&Q===W}class i7 extends Error{providerId;constructor($){super(`OAuth credentials for provider "${$}" are no longer valid. Re-run authentication for this provider.`);this.name="OAuthReauthRequiredError",this.providerId=$}}class NY{providerSettingsManager;telemetry;refreshInFlight=new Map;constructor($){this.providerSettingsManager=$?.providerSettingsManager??new q1,this.telemetry=$?.telemetry}async resolveProviderApiKey($){let Z=j0($.providerId);if(!Z)return null;return this.resolveWithSingleFlight(Z.providerId,Z.storageProviderId,$.forceRefresh)}async resolveWithSingleFlight($,Z,Q=!1){let W=this.refreshInFlight.get(Z);if(W)return W;let J=this.resolveProviderApiKeyInternal($,Z,Q).catch((X)=>{throw X}).finally(()=>{this.refreshInFlight.delete(Z)});return this.refreshInFlight.set(Z,J),J}async resolveProviderApiKeyInternal($,Z,Q){let W=j0($);if(!W)return null;let J=this.providerSettingsManager.getProviderSettings(Z);if(!J)return null;let X=Y6($,J);if(!X)return null;let Y=await W.refresh({settings:J,credentials:X,forceRefresh:Q,telemetry:this.telemetry});if(!Y)throw new i7($);let j=W2({manager:this.providerSettingsManager,providerId:$,settings:J,credentials:Y,setLastUsed:!1,save:!1}),V=!pI(J.auth,j.auth);if(V)this.providerSettingsManager.saveProviderSettings(j,{setLastUsed:!1,tokenSource:"oauth"});return{apiKey:W.getApiKey(j)??Y.access,accountId:Y.accountId,refreshed:V}}}import{normalizeUserInput as rI}from"@cline/shared";import{nanoid as iI}from"nanoid";class AU{list($){return $?s0($):[]}update($,Z){if(!$)return{sessionId:Z.sessionId,prompts:[],updated:!1};let Q=Z.promptId.trim(),W=$.pendingPrompts.findIndex((V)=>V.id===Q);if(W<0)return{sessionId:Z.sessionId,prompts:s0($),updated:!1};let J=$.pendingPrompts[W];if(!J)return{sessionId:Z.sessionId,prompts:s0($),updated:!1};let X=Z.prompt===void 0?J.prompt:rI(Z.prompt).trim();if(!X)throw Error("prompt cannot be empty");let Y=Z.delivery??J.delivery,j={...J,prompt:X,mode:Z.mode??J.mode,delivery:Y};return $.pendingPrompts.splice(W,1),nI($,j,W,J.delivery),{sessionId:Z.sessionId,prompts:s0($),prompt:n7(j),updated:!0}}delete($,Z){if(!$)return{sessionId:Z.sessionId,prompts:[],removed:!1};let Q=Z.promptId.trim(),W=$.pendingPrompts.findIndex((X)=>X.id===Q);if(W<0)return{sessionId:Z.sessionId,prompts:s0($),removed:!1};let[J]=$.pendingPrompts.splice(W,1);return{sessionId:Z.sessionId,prompts:s0($),prompt:J?n7(J):void 0,removed:!0}}enqueue($,Z){let{prompt:Q,mode:W,delivery:J,userImages:X,userFiles:Y}=Z,j=$.pendingPrompts.findIndex((V)=>V.prompt===Q);if(j>=0){let[V]=$.pendingPrompts.splice(j,1),H={...V,prompt:Q,mode:W??V.mode,userImages:X??V.userImages,userFiles:Y??V.userFiles};if(J==="steer"||V.delivery==="steer")$.pendingPrompts.unshift({...H,delivery:"steer"});else $.pendingPrompts.push(H)}else{let V={id:`pending_${Date.now()}_${iI(5)}`,prompt:Q,mode:W,delivery:J,userImages:X,userFiles:Y};if(J==="steer")$.pendingPrompts.unshift(V);else $.pendingPrompts.push(V)}return s0($)}consumeSteer($){let Z=$.pendingPrompts.findIndex((W)=>W.delivery==="steer");if(Z<0)return{prompts:s0($)};let[Q]=$.pendingPrompts.splice(Z,1);return{entry:Q,prompts:s0($)}}shiftNext($){return{entry:$.pendingPrompts.shift(),prompts:s0($)}}requeueFront($,Z){return $.pendingPrompts.unshift(Z),s0($)}clear($){return $.pendingPrompts.length=0,[]}}class wY{deps;service=new AU;constructor($){this.deps=$}list($){return this.service.list(this.deps.getSession($))}update($){let Z=this.deps.getSession($.sessionId);if(!Z||Z.aborting)return{sessionId:$.sessionId,prompts:[],updated:!1};let Q=this.service.update(Z,$);return this.emitPrompts(Z),this.scheduleDrain($.sessionId,Z),Q}delete($){let Z=this.deps.getSession($.sessionId);if(!Z||Z.aborting)return{sessionId:$.sessionId,prompts:[],removed:!1};let Q=this.service.delete(Z,$);return this.emitPrompts(Z),this.scheduleDrain($.sessionId,Z),Q}enqueue($,Z){let Q=this.deps.getSession($);if(!Q||Q.aborting)return;this.service.enqueue(Q,Z),this.emitPrompts(Q),this.scheduleDrain($,Q)}consumeSteer($){let Z=this.deps.getSession($);if(!Z)return;let{entry:Q}=this.service.consumeSteer(Z);if(!Q)return;return this.emitPrompts(Z),this.emitSubmitted(Z,Q),Q}clearAborted($){if($.pendingPrompts.length===0)return;this.service.clear($),this.emitPrompts($)}emitPrompts($){this.deps.emit({type:"pending_prompts",payload:{sessionId:$.sessionId,prompts:s0($)}})}scheduleDrain($,Z){if(Z.pendingPrompts.length===0||Z.aborting||Z.drainingPendingPrompts||!Z.agent.canStartRun())return;queueMicrotask(()=>{this.drain($)})}async drain($){let Z=this.deps.getSession($);if(!Z)return;if(Z.aborting||Z.drainingPendingPrompts)return;if(!Z.agent.canStartRun())return;let{entry:Q}=this.service.shiftNext(Z);if(!Q)return;this.emitPrompts(Z),this.emitSubmitted(Z,Q),Z.drainingPendingPrompts=!0;let W=!0;try{await this.deps.send({sessionId:$,prompt:Q.prompt,...Q.mode?{mode:Q.mode}:{},userImages:Q.userImages,userFiles:Q.userFiles})}catch{W=!1,this.service.requeueFront(Z,Q),this.emitPrompts(Z)}finally{if(Z.drainingPendingPrompts=!1,W&&Z.pendingPrompts.length>0&&Z.status!=="failed"&&Z.status!=="cancelled")queueMicrotask(()=>{this.drain($)})}}emitSubmitted($,Z){let Q=n7(Z);this.deps.emit({type:"pending_prompt_submitted",payload:{sessionId:$.sessionId,id:Q.id,prompt:Q.prompt,delivery:Q.delivery,attachmentCount:Q.attachmentCount,userImages:Q.userImages,userFiles:Q.userFiles}})}}function n7($){return{id:$.id,prompt:$.prompt,delivery:$.delivery,attachmentCount:($.userImages?.length??0)+($.userFiles?.length??0),userImages:$.userImages,userFiles:$.userFiles}}function s0($){return $.pendingPrompts.map(n7)}function nI($,Z,Q,W){if(Z.delivery==="steer")$.pendingPrompts.unshift(Z);else if(W==="steer")$.pendingPrompts.push(Z);else $.pendingPrompts.splice(Q,0,Z)}_0();class PY{deps;constructor($){this.deps=$}dispatchAgentEvent($,Z,Q){let W=this.deps.getSession($),J={sessionId:$,config:Z,liveSession:W,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit},X=x3(Q),Y=!!W&&(!X.agentId||X.agentId===CY(W.agent));g3(J,Q,Y?{isPrimaryAgentEvent:!0,agentId:CY(W.agent),conversationId:W.agent.getConversationId(),...W?.runtime.teamRuntime?{teamRole:"lead"}:{}}:{isPrimaryAgentEvent:!1})}async handleTeamEvent($,Z){let Q=this.deps.getSession($);if(Q){if(eJ(Q,Z),Z.type==="agent_event"){let W={sessionId:$,config:Q.config,liveSession:Q,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit};g3(W,Z.event,{agentId:Z.agentId,teamRole:"teammate",teamAgentId:Z.agentId,isPrimaryAgentEvent:!1})}if(Z.type==="teammate_spawned"){let W=r1({agentId:Z.teammate.runtimeAgentId??Z.agentId,conversationId:Z.teammate.conversationId,parentAgentId:Z.teammate.parentAgentId,createdByAgentId:CY(Q.agent),teamId:Q.runtime.teamRuntime?.getTeamId(),teamName:Q.runtime.teamRuntime?.getTeamName(),teamRole:"teammate",teamAgentId:Z.agentId});if(W)H$(Q.config.telemetry,{ulid:$,modelId:Z.teammate.modelId??Q.config.modelId,provider:Q.config.providerId,...W})}}if(await $X($,Z,this.deps.invokeBackendOptional),Q)ZX(Q,$,Z,this.deps.emit)}async handlePluginEvent($,Z,Q){if(Z.name==="plugin_log"){this.handlePluginLog($,Z.payload);return}if(Z.name==="automation_event"){let V=this.deps.getSession($)?.config.extensionContext?.automation??Q;if(!V)return;let H=Z.payload&&typeof Z.payload==="object"?Z.payload:void 0;if(!H)return;await V.ingestEvent(H);return}if(Z.name!=="steer_message"&&Z.name!=="queue_message"&&Z.name!=="pending_prompt")return;let W=Z.payload&&typeof Z.payload==="object"?Z.payload:void 0,J=typeof W?.sessionId==="string"&&W.sessionId.trim().length>0?W.sessionId.trim():$,X=typeof W?.prompt==="string"?W.prompt.trim():"";if(!X)return;let Y=Z.name==="steer_message"?"steer":Z.name==="queue_message"?"queue":W?.delivery==="steer"?"steer":"queue";this.deps.enqueuePendingPrompt(J,{prompt:X,delivery:Y})}handlePluginLog($,Z,Q){let W=this.deps.getSession($),J=Q??W?.config.extensionContext?.logger??W?.config.logger;if(!J||!Z||typeof Z!=="object")return;let X=Z,Y=typeof X.message==="string"?X.message:"";if(!Y)return;let j=X.metadata&&typeof X.metadata==="object"?{...X.metadata}:{};if(j.sessionId??=$,typeof X.pluginName==="string"&&X.pluginName)j.pluginName=X.pluginName;if(X.level==="debug"){J.debug(Y,j);return}if(X.level==="error"){if(J.error)J.error(Y,j);else J.log(Y,{...j,severity:"error"});return}J.log(Y,j)}}function CY($){return $.getAgentId()}function SY($){return{sessionId:$.sessionId,source:$.source,pid:process.pid,startedAt:$.startedAt,endedAt:$.endedAt??null,exitCode:$.exitCode??null,status:$.status,interactive:$.interactive,provider:$.config.providerId,model:$.config.modelId,cwd:$.config.cwd,workspaceRoot:R$($.config),teamName:$.config.teamName?.trim()||void 0,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,parentSessionId:typeof $.sessionMetadata?.parentSessionId==="string"?$.sessionMetadata.parentSessionId:void 0,parentAgentId:typeof $.sessionMetadata?.parentAgentId==="string"?$.sessionMetadata.parentAgentId:void 0,agentId:typeof $.sessionMetadata?.agentId==="string"?$.sessionMetadata.agentId:void 0,conversationId:typeof $.sessionMetadata?.conversationId==="string"?$.sessionMetadata.conversationId:void 0,isSubagent:typeof $.sessionMetadata?.isSubagent==="boolean"?$.sessionMetadata.isSubagent:!1,prompt:$.pendingPrompt,metadata:$.sessionMetadata,messagesPath:$.artifacts?.messagesPath,updatedAt:$.updatedAt??$.endedAt??$.startedAt}}function bY($,Z){let Q=$[Z];return typeof Q==="function"?Q:null}async function fU($,Z,...Q){let W=bY($,Z);if(!W)throw Error(`session service method not available: ${Z}`);return Promise.resolve(W.apply($,Q))}async function UU($,Z,...Q){let W=bY($,Z);if(!W)return;await Promise.resolve(W.apply($,Q))}async function DU($,Z,...Q){let W=bY($,Z);if(!W)return;return await Promise.resolve(W.apply($,Q))}$1();_0();function yY($,Z,Q){return{onSubAgentEvent:(W)=>$.onAgentEvent(Q,Z,W),onSubAgentStart:(W)=>{let J=$.getSession(Q)?.runtime.teamRuntime;$.subAgentStarts.set(W.subAgentId,{startedAt:Date.now(),rootSessionId:Q});let X=r1({agentId:W.subAgentId,conversationId:W.conversationId,parentAgentId:W.parentAgentId,teamId:J?.getTeamId(),teamName:J?.getTeamName(),createdByAgentId:W.parentAgentId});if(X)H$(Z.telemetry,{ulid:Q,modelId:Z.modelId,provider:Z.providerId,...X});v4(Z.telemetry,{event:"started",ulid:Q,durationMs:0,parentId:W.parentAgentId,agentId:W.subAgentId,...X}),$.invokeBackendOptional("handleSubAgentStart",Q,W)},onSubAgentEnd:(W)=>{let J=$.getSession(Q)?.runtime.teamRuntime,X=$.subAgentStarts.get(W.subAgentId),Y=X?Date.now()-X.startedAt:0,j=W.result?.text?W.result.text.split(`
|
|
735
|
-
`).length:0;v4(Z.telemetry,{event:"ended",ulid:Q,durationMs:Y,outputLines:j,errorMessage:W.error?String(W.error):void 0,agentId:W.subAgentId,parentId:W.parentAgentId,...r1({agentId:W.subAgentId,conversationId:W.conversationId,parentAgentId:W.parentAgentId,teamId:J?.getTeamId(),teamName:J?.getTeamName(),createdByAgentId:W.parentAgentId})}),$.subAgentStarts.delete(W.subAgentId),$.invokeBackendOptional("handleSubAgentEnd",Q,W)}}}function hY($,Z,Q,W){let J=yY($,Z,Q);return q$({configProvider:{getRuntimeConfig:()=>$.getSession(Q)?.runtime.delegatedAgentConfigProvider?.getRuntimeConfig()??{providerId:Z.providerId,modelId:Z.modelId,cwd:Z.cwd,apiKey:Z.apiKey,baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking,maxIterations:Z.maxIterations,hooks:Z.hooks,extensions:Z.extensions,logger:Z.logger,telemetry:Z.telemetry},getConnectionConfig:()=>$.getSession(Q)?.runtime.delegatedAgentConfigProvider?.getConnectionConfig()??{providerId:Z.providerId,modelId:Z.modelId,apiKey:Z.apiKey,baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking},updateConnectionDefaults:()=>{}},createSubAgentTools:()=>{let Y=Z.enableTools?U2({cwd:Z.cwd,...u0[l1({mode:Z.mode})],executors:W}):[];if(Z.enableSpawnAgent)Y.push(hY($,Z,Q,W));return y1(Y)},...J})}import{readFile as aI,stat as sI}from"node:fs/promises";var oI=20480000;async function LU($){let Z=await sI($);if(!Z.isFile())throw Error("Path is not a file");if(Z.size>oI)throw Error("File is too large to read into context.");let Q=await aI($,"utf8");if(Q.includes("\x00"))throw Error("Cannot read binary file into context.");return Q}var _U=5000;function V9($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function Xx($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$,Q=V9(Z.inputTokens),W=V9(Z.outputTokens),J=V9(Z.cacheReadTokens),X=V9(Z.cacheWriteTokens),Y=V9(Z.totalCost);if(Q===void 0||W===void 0||J===void 0||X===void 0||Y===void 0)return;return{inputTokens:Q,outputTokens:W,cacheReadTokens:J,cacheWriteTokens:X,totalCost:Y}}function Yx($,Z){return{inputTokens:Math.max($.inputTokens,Z.inputTokens),outputTokens:Math.max($.outputTokens,Z.outputTokens),cacheReadTokens:Math.max($.cacheReadTokens,Z.cacheReadTokens),cacheWriteTokens:Math.max($.cacheWriteTokens,Z.cacheWriteTokens),totalCost:Math.max($.totalCost,Z.totalCost)}}class T1{runtimeAddress=void 0;pendingPrompts;sessionService;runtimeBuilder;createAgentInstance;toolExecutors;defaultCapabilities;defaultToolPolicies;providerSettingsManager;oauthTokenManager;defaultTelemetry;defaultFetch;events=new S5;sessions=new Map;usageBySession=new Map;aggregateUsageBySession=new Map;subAgentStarts=new Map;pendingPromptsController;eventBridge;sessionVersioning=new c$;constructor($){let Z=eI();if(Z)Jx(Z);let Q=P0($.distinctId);this.sessionService=$.sessionService,this.runtimeBuilder=$.runtimeBuilder??new T4,this.createAgentInstance=$.createAgent??((W)=>new z$(W)),this.defaultCapabilities=M0($.capabilities),this.toolExecutors=this.defaultCapabilities?.toolExecutors,this.defaultToolPolicies=$.toolPolicies,this.providerSettingsManager=$.providerSettingsManager??new q1,this.oauthTokenManager=$.oauthTokenManager??new NY({providerSettingsManager:this.providerSettingsManager,telemetry:$.telemetry}),this.defaultTelemetry=$.telemetry,this.defaultTelemetry?.setDistinctId(Q),this.defaultFetch=$.fetch,this.pendingPromptsController=new wY({getSession:(W)=>this.sessions.get(W),emit:(W)=>this.emit(W),send:(W)=>this.runTurn(W)}),this.pendingPrompts={list:async(W)=>this.pendingPromptsController.list(W.sessionId),update:async(W)=>this.pendingPromptsController.update(W),delete:async(W)=>this.pendingPromptsController.delete(W)},this.eventBridge=new PY({getSession:(W)=>this.sessions.get(W),usageBySession:this.usageBySession,aggregateUsageBySession:this.aggregateUsageBySession,emit:(W)=>this.emit(W),persistMessages:(W,J,X)=>{this.invoke("persistSessionMessages",W,J,X)},enqueuePendingPrompt:(W,J)=>this.pendingPromptsController.enqueue(W,J),invokeBackendOptional:(W,...J)=>this.invokeOptional(W,...J)})}async applyInitialOAuthCredentials($){if($.config.apiKey?.trim())return $;let Z=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId});if(!Z?.apiKey)return $;return{...$,config:{...$.config,apiKey:Z.apiKey}}}async startSession($){let Z=$.source??T0.CLI,Q=J0(),W=$.config.sessionId?.trim()??"",J=W||Zx(),X=await this.applyInitialOAuthCredentials($),Y=X.initialMessages??[],j=Y.length>0?b8(Y):D0(),V=await this.invokeOptionalValue("ensureSessionsDir")??"";if(!V)throw Error("session service method not available: ensureSessionsDir");let H=kY(V,J),B=kY(H,`${J}.messages.json`),G=kY(H,`${J}.json`),K=R$($.config),F=b0.parse({version:1,session_id:J,source:Z,pid:process.pid,started_at:Q,status:"running",interactive:$.interactive===!0,provider:X.config.providerId,model:X.config.modelId,cwd:X.config.cwd,workspace_root:K,team_name:X.config.teamName,enable_tools:X.config.enableTools,enable_spawn:X.config.enableSpawnAgent,enable_teams:X.config.enableAgentTeams,prompt:X.prompt?.trim()||void 0,messages_path:B}),A;if(W.length>0&&Y.length>0&&!X.prompt?.trim()){let P=await this.invokeOptionalValue("readSessionManifest",J);if(P)F=P,A={manifestPath:G,messagesPath:P.messages_path||B,manifest:P}}let f=await this.seedAggregateUsageFromArtifacts({initialUsage:j,sessionDir:H,rootMessagesPath:A?.messagesPath??B,manifest:F});this.usageBySession.set(J,j),this.aggregateUsageBySession.set(J,f);let D=M0(this.defaultCapabilities,$.capabilities),U=D?.toolExecutors??this.toolExecutors,T=$.localRuntime,q=T?.extensionContext?.logger??T?.logger,z=T?.extensionContext?.automation,_,E={getSession:(P)=>this.sessions.get(P),subAgentStarts:this.subAgentStarts,onAgentEvent:(P,B0,G0)=>this.eventBridge.dispatchAgentEvent(P,B0,G0),invokeBackendOptional:(P,...B0)=>this.invokeOptional(P,...B0)};_=await WK({input:X,localRuntime:$.localRuntime,sessionId:J,providerSettingsManager:this.providerSettingsManager,defaultTelemetry:this.defaultTelemetry,defaultCapabilities:D,defaultToolPolicies:this.defaultToolPolicies,defaultFetch:this.defaultFetch,onPluginEvent:(P)=>{if(P.name==="plugin_log"){this.eventBridge.handlePluginLog(J,P.payload,q);return}this.eventBridge.handlePluginEvent(J,P,z)},onTeamEvent:(P)=>{this.eventBridge.handleTeamEvent(J,P),_.config.onTeamEvent?.(P)},createSpawnTool:()=>hY(E,_.config,J,U),createSubAgentLifecycleCallbacks:(P)=>yY(E,P,J),readSessionMetadata:async()=>(await this.getSession(J))?.metadata,writeSessionMetadata:async(P)=>{await this.persistSessionMetadata(J,()=>P)}});let C=await this.runtimeBuilder.build(_.runtimeBuilderInput),y=_.config,l=_.providerConfig;if(C.teamRuntime&&!y.teamName?.trim())y.teamName=C.teamRuntime.getTeamName();let o=[...C.tools,...y.extraTools??[]],t=C.extensions??_.extensions,Q0={sessionId:J,providerId:l.providerId,modelId:l.modelId,apiKey:l.apiKey,baseUrl:l.baseUrl,headers:l.headers,knownModels:l.knownModels,providerConfig:l,thinking:y.thinking,reasoningEffort:y.reasoningEffort??l.reasoningEffort,maxTokensPerTurn:y.maxTokensPerTurn,systemPrompt:y.systemPrompt,maxIterations:y.maxIterations,execution:y.execution,prepareTurn:F6(y),tools:o,hooks:_.hooks,extensions:t,hookErrorMode:y.hookErrorMode,initialMessages:_.effectiveInput.initialMessages,userFileContentLoader:LU,toolPolicies:_.toolPolicies,requestToolApproval:_.requestToolApproval?async(P)=>{let B0=_.requestToolApproval,G0=this.sessions.get(J);if(G0)await this.markTurnPending(G0);try{if(!B0)return{approved:!1,reason:"Tool approval callback is not configured."};return await B0(P)}finally{let C0=this.sessions.get(J);if(C0?.status==="pending")await this.markTurnRunning(C0)}}:void 0,telemetry:y.telemetry,onConsecutiveMistakeLimitReached:y.onConsecutiveMistakeLimitReached,completionPolicy:C.completionPolicy,consumePendingUserMessage:()=>{let P=this.pendingPromptsController.consumeSteer(J);return P?v5(P.prompt,P.mode??y.mode):void 0},logger:C.logger??y.logger,extensionContext:y.extensionContext,onEvent:(P)=>this.eventBridge.dispatchAgentEvent(J,y,P)};Q0.hooks={...Q0.hooks,onEvent:async(P)=>{if(await _.hooks?.onEvent?.(P),P.type!=="assistant-message")return;let B0=this.sessions.get(J);if(!B0)return;let G0=B0.agent.getMessages();try{await this.invoke("persistSessionMessages",J,G0,y.systemPrompt)}catch(C0){y.logger?.error?.("Failed to persist session messages after assistant response",{sessionId:J,error:C0}),p2(y.telemetry,{component:"core",operation:"session.persist_messages_after_assistant_response",error:C0,severity:"warn",handled:!0,context:{sessionId:J,providerId:y.providerId,modelId:y.modelId}})}}};let e0=this.createAgentInstance(Q0);if(Q0.onEvent)e0.subscribeEvents(Q0.onEvent);C.registerLeadAgent?.(e0);let l$=r1({agentId:e0.getAgentId(),conversationId:e0.getConversationId(),teamId:C.teamRuntime?.getTeamId(),teamName:C.teamRuntime?.getTeamName(),teamRole:C.teamRuntime?"lead":void 0});if(XK(y,J,W.length>0,K,l$),l$)H$(y.telemetry,{ulid:J,modelId:y.modelId,provider:y.providerId,...l$});if(C.teamRuntime)b9(y.telemetry,{ulid:J,teamId:C.teamRuntime.getTeamId(),teamName:C.teamRuntime.getTeamName(),leadAgentId:e0.getAgentId(),restoredFromPersistence:C.teamRestoredFromPersistence===!0});let r={sessionId:J,config:y,sessionMetadata:X.sessionMetadata,...A?{artifacts:A}:{},source:Z,startedAt:A?.manifest.started_at??Q,updatedAt:A?.manifest.ended_at??A?.manifest.started_at??Q,pendingPrompt:F.prompt,runtime:C,agent:e0,started:!1,status:A?.manifest.status??"running",aborting:!1,interactive:$.interactive===!0,persistedMessages:Y,activeTeamRunIds:new Set,pendingTeamRunUpdates:[],teamRunWaiters:[],pendingPrompts:[],drainingPendingPrompts:!1,pluginSandboxShutdown:_.pluginSandboxShutdown,submitAndExitObserved:!1,lastInteractiveTurnFinishReason:void 0};if(this.sessions.set(J,r),this.emitStatus(J,"running"),Y.length>0&&!A){if(await this.ensureSessionPersisted(r),await this.invoke("persistSessionMessages",r.sessionId,Y,r.config.systemPrompt),!X.prompt?.trim())await this.updateStatus(r,"completed",0)}let M1;try{if(X.prompt?.trim())if(M1=await this.executeTurn(r,{prompt:X.prompt,userImages:X.userImages,userFiles:X.userFiles}),!r.interactive)await this.finalizeSingleRun(r,M1.finishReason);else await this.completeInteractiveTurn(r,M1.finishReason)}catch(P){if(r.interactive&&r.aborting)M1=await this.completeAbortedInteractiveTurn(r);else{p2(r.config.telemetry,{component:"core",operation:"session.start",error:P,severity:"error",handled:!1,context:{sessionId:r.sessionId,providerId:r.config.providerId,modelId:r.config.modelId}});try{await this.failSession(r)}catch(B0){r.config.logger?.error?.("Session failure cleanup threw",{sessionId:r.sessionId,error:B0})}throw P}}return{sessionId:J,manifest:F,manifestPath:G,messagesPath:B,result:M1}}async restoreSession($){return this.sessionVersioning.restoreCheckpoint({...$,getSession:(Z)=>this.getSession(Z),readMessages:(Z)=>this.readSessionMessages(Z),buildStartInput:(Z,Q)=>{let W=Z.restoredCheckpointMetadata?{...Q.sessionMetadata??{},checkpoint:Z.restoredCheckpointMetadata}:Q.sessionMetadata;return{...Q,...W?{sessionMetadata:W}:{},initialMessages:Z.initialMessages}},startSession:(Z)=>this.startSession(Z),getStartedSessionId:(Z)=>Z.sessionId,readRestoredSession:(Z)=>this.getSession(Z)})}async runTurn($){let Z=this.getSessionOrThrow($.sessionId),Q=Z.agent.canStartRun(),W=$.delivery??(Z.interactive&&!Q?"queue":void 0);if(Z.config.telemetry?.capture({event:"session.input_sent",properties:{sessionId:$.sessionId,promptLength:$.prompt.length,userImageCount:$.userImages?.length??0,userFileCount:$.userFiles?.length??0,delivery:W??"immediate"}}),W==="queue"||W==="steer"){this.pendingPromptsController.enqueue($.sessionId,{prompt:$.prompt,mode:$.mode,delivery:W,userImages:$.userImages,userFiles:$.userFiles});return}try{let J=await this.executeTurn(Z,{prompt:$.prompt,mode:$.mode,userImages:$.userImages,userFiles:$.userFiles});if(!Z.interactive)await this.finalizeSingleRun(Z,J.finishReason);else await this.completeInteractiveTurn(Z,J.finishReason);if(J.finishReason==="error"||J.finishReason==="aborted")return J;return queueMicrotask(()=>{this.pendingPromptsController.drain($.sessionId)}),J}catch(J){if(Z.interactive&&Z.aborting)return await this.completeAbortedInteractiveTurn(Z);throw p2(Z.config.telemetry,{component:"core",operation:"session.submit",error:J,severity:"error",handled:!1,context:{sessionId:Z.sessionId,providerId:Z.config.providerId,modelId:Z.config.modelId}}),await this.failSession(Z),J}}async getAccumulatedUsage($){let Z=dJ(this.usageBySession.get($)),Q=dJ(this.aggregateUsageBySession.get($));return Z||Q?{usage:Z,aggregateUsage:Q}:void 0}async abort($,Z){let Q=this.sessions.get($);if(!Q)return;Q.config.telemetry?.capture({event:"session.aborted",properties:{sessionId:$}}),Q.aborting=!0,this.pendingPromptsController.clearAborted(Q),Q.agent.abort(Z)}async stopSession($){let Z=this.sessions.get($);if(!Z)return;if(Z.config.telemetry?.capture({event:"session.stopped",properties:{sessionId:$}}),Z.interactive&&!H0(Z.status)){await this.releaseSessionRuntime(Z,"session_stop");return}if(Z.interactive&&Z.agent.canStartRun()){await this.shutdownSession(Z,{status:this.resolveInteractiveStopStatus(Z),exitCode:this.resolveInteractiveStopExitCode(Z),shutdownReason:"session_stop",endReason:"stopped"});return}Z.aborting=!0,Z.agent.abort(Error("session_stop")),await this.shutdownSession(Z,{status:"cancelled",exitCode:0,shutdownReason:"session_stop",endReason:"stopped"})}async dispose($="session_manager_dispose"){let Z=[...this.sessions.values()];if(Z.length===0)return;await Promise.allSettled(Z.map((Q)=>Q.interactive&&!H0(Q.status)?this.releaseSessionRuntime(Q,$):Q.interactive&&Q.agent.canStartRun()?this.shutdownSession(Q,{status:this.resolveInteractiveStopStatus(Q),exitCode:this.resolveInteractiveStopExitCode(Q),shutdownReason:$,endReason:"disposed"}):this.shutdownSession(Q,{status:"cancelled",exitCode:0,shutdownReason:$,endReason:"disposed"}))),this.usageBySession.clear(),this.aggregateUsageBySession.clear()}async getSession($){let Z=this.sessions.get($);if(Z)return SY(Z);let Q=$.trim();if(!Q)return;let W=await this.getRow(Q);if(W)return v6(W);let J=await this.readManifest(Q);return J?vQ(J):void 0}async listSessions($=200){let Q=(await this.listRows($)).map(v6),W=new Set(Q.map((J)=>J.sessionId));for(let J of this.sessions.values()){if(W.has(J.sessionId))continue;Q.unshift(SY(J))}return Q.slice(0,$)}async deleteSession($){if(this.sessions.has($))await this.stopSession($);let Z=await this.invoke("deleteSession",$);if(Z.deleted)this.usageBySession.delete($),this.aggregateUsageBySession.delete($);return Z.deleted}async updateSession($,Z){return{updated:(await this.invokeOptionalValue("updateSession",{sessionId:$,prompt:Z.prompt,metadata:Z.metadata,title:Z.title}))?.updated===!0}}async readSessionMessages($){let Z=$.trim();if(!Z)return[];let Q=await this.getRow(Z);if(Q?.messagesPath)return I$(Q.messagesPath);let W=await this.readManifest(Z);return I$(W?.messages_path)}async dispatchHookEvent($){await NF($,{queueSpawnRequest:(Z)=>this.invokeOptional("queueSpawnRequest",Z),upsertSubagentSessionFromHook:(Z)=>this.invokeOptionalValue("upsertSubagentSessionFromHook",Z),appendSubagentHookAudit:(Z,Q)=>this.invokeOptional("appendSubagentHookAudit",Z,Q),applySubagentStatus:(Z,Q)=>this.invokeOptional("applySubagentStatus",Z,Q)})}subscribe($,Z){return this.events.subscribe($,Z)}async updateSessionModel($,Z){let Q=this.getSessionOrThrow($);Q.config.modelId=Z,Q.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({modelId:Z}),Q.agent.updateConnection({modelId:Z})}handlePluginEvent($,Z,Q){return this.eventBridge.handlePluginEvent($,Z,Q)}async executeTurn($,Z){let Q=await this.prepareTurnInput($,Z),W=Q.prompt.trim();if(!W)throw Error("prompt cannot be empty");if(!$.artifacts&&!$.pendingPrompt)$.pendingPrompt=W;await this.ensureSessionPersisted($),await this.syncOAuthCredentials($),await this.markTurnRunning($);let J=await this.executeAgentTurn($,W,Q.userImages,Q.userFiles);while(QX($,J.finishReason)){let X=await WX($);if(X.length===0)break;let Y=JX($,X);J=await this.executeAgentTurn($,Y)}return J}async completeInteractiveTurn($,Z){if(m5($))return;$.lastInteractiveTurnFinishReason=Z,await this.markTurnIdle($),$.aborting=!1}resolveInteractiveStopStatus($){let Z=$.lastInteractiveTurnFinishReason;if(!Z)return"cancelled";switch(Z){case"completed":return"completed";case"error":return"failed";case"aborted":case"max_iterations":case"mistake_limit":return"cancelled"}return Z}resolveInteractiveStopExitCode($){return $.lastInteractiveTurnFinishReason==="error"?1:0}async completeAbortedInteractiveTurn($){let Z=new Date,Q=$.agent.getMessages(),W=D0();return $.persistedMessages=Q,$.started=$.started||Q.length>0,this.eventBridge.dispatchAgentEvent($.sessionId,$.config,{type:"done",reason:"aborted",text:"",iterations:0,usage:W}),await this.completeInteractiveTurn($,"aborted"),{text:"",usage:W,messages:Q,toolCalls:[],iterations:0,finishReason:"aborted",model:{id:$.config.modelId,provider:$.config.providerId},startedAt:Z,endedAt:Z,durationMs:0}}async executeAgentTurn($,Z,Q,W){let J=$.started||$.agent.getMessages().length>0,X=$.persistedMessages??$.agent.getMessages(),Y=this.usageBySession.get($.sessionId)??D0(),j=this.aggregateUsageBySession.get($.sessionId)??Y;$.turnUsageBaseline=Y,$.turnAggregateUsageBaseline=j,$.turnPrimaryUsage=D0(),$.turnUsageByAgent=new Map,E9($.config.telemetry,$.sessionId,$.config.mode),Q8($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,model:$.config.modelId,source:"user",mode:$.config.mode,...this.getSessionAgentTelemetryIdentity($)});try{let V=J?()=>$.agent.continue(Z,Q,W):()=>$.agent.run(Z,Q,W),H=await this.runWithAuthRetry($,V,X);$.started=!0;let B=IZ(H.messages,H,X);$.persistedMessages=B;let G=u6($.turnUsageByAgent?.values()??[]),K=f0(Y,H.usage),F=f0(f0(D0(),H.usage),G),A=f0(j,F);return this.usageBySession.set($.sessionId,K),this.aggregateUsageBySession.set($.sessionId,A),await this.persistSessionMetadata($.sessionId,(L)=>({...L??{},totalCost:K.totalCost,aggregatedAgentsCost:A.totalCost,usage:K,aggregateUsage:A})),await this.invoke("persistSessionMessages",$.sessionId,B,$.config.systemPrompt),this.observeTaskCompletionTool($,H),H}catch(V){throw p2($.config.telemetry,{component:"core",operation:"session.turn",error:V,severity:"error",handled:!1,context:{sessionId:$.sessionId,providerId:$.config.providerId,modelId:$.config.modelId}}),await this.invoke("persistSessionMessages",$.sessionId,$.agent.getMessages(),$.config.systemPrompt),V}finally{$.turnUsageBaseline=void 0,$.turnAggregateUsageBaseline=void 0,$.turnPrimaryUsage=void 0,$.turnUsageByAgent=void 0}}observeTaskCompletionTool($,Z){if($.submitAndExitObserved)return;if(!Z.toolCalls.some((W)=>W.name===U0.SUBMIT_AND_EXIT&&W.error===void 0))return;$.submitAndExitObserved=!0,g4($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"submit_and_exit",...this.getSessionAgentTelemetryIdentity($)})}async prepareTurnInput($,Z){let Q=R$($.config),W=Wx(Z.prompt).trim();if(!W)return{prompt:"",userImages:Z.userImages,userFiles:this.resolveAbsoluteFilePaths($.config.cwd,Z.userFiles)};let J=await T8(W,Q);YK($.config.telemetry,J);let X=v5(J.prompt,Z.mode??$.config.mode),Y=this.resolveAbsoluteFilePaths($.config.cwd,Z.userFiles),j=this.resolveAbsoluteFilePaths(Q,J.matchedFiles),V=Array.from(new Set([...Y,...j]));return{prompt:X,userImages:Z.userImages,userFiles:V.length>0?V:void 0}}async ensureSessionPersisted($){if($.artifacts)return;let Z=R$($.config);$.artifacts=await this.invoke("createRootSessionWithArtifacts",{sessionId:$.sessionId,source:$.source,pid:process.pid,interactive:$.interactive,provider:$.config.providerId,model:$.config.modelId,cwd:$.config.cwd,workspaceRoot:Z,teamName:$.config.teamName,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,prompt:$.pendingPrompt,metadata:$.sessionMetadata,startedAt:$.startedAt})}async markTurnRunning($){if($.status==="running")return;await this.updateStatus($,"running",null)}async markTurnPending($){if($.status==="pending")return;await this.updateStatus($,"pending",null)}async markTurnIdle($){if($.status==="idle")return;await this.updateStatus($,"idle",null)}async persistSessionMetadata($,Z){let Q=this.sessions.get($),W=await this.invokeOptionalValue("readSessionManifest",$)??Q?.artifacts?.manifest,J=Z(W?.metadata);if(!Q?.artifacts)return;if((await this.invokeOptionalValue("updateSession",{sessionId:$,metadata:J}))?.updated===!1)return;Q.sessionMetadata=J,Q.artifacts.manifest.metadata=J}async finalizeSingleRun($,Z){if(m5($))return;let Q=Z==="aborted"||$.aborting,W=Z==="error";await this.shutdownSession($,{status:Q?"cancelled":W?"failed":"completed",exitCode:W?1:0,shutdownReason:W?"session_error":"session_complete",endReason:Z})}async failSession($){await this.shutdownSession($,{status:"failed",exitCode:1,shutdownReason:"session_error",endReason:"error"})}async shutdownSession($,Z){if(Z.status==="completed"&&!$.submitAndExitObserved)g4($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"shutdown",...this.getSessionAgentTelemetryIdentity($)});iQ($);let Q=[],W=(J,X)=>{Q.push(X),$.config.logger?.log("Session shutdown cleanup failed",{sessionId:$.sessionId,stage:J,error:X,severity:"warn"}),p2($.config.telemetry,{component:"core",operation:"session.shutdown_cleanup",error:X,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:J,status:Z.status,shutdownReason:Z.shutdownReason,providerId:$.config.providerId,modelId:$.config.modelId}})};if($.artifacts){try{await this.updateStatus($,Z.status,Z.exitCode)}catch(J){W("update_status",J)}try{await $.agent.shutdown(Z.shutdownReason)}catch(J){W("agent_shutdown",J)}}try{await Promise.resolve($.runtime.shutdown(Z.shutdownReason))}catch(J){W("runtime_shutdown",J)}try{await $.pluginSandboxShutdown?.()}catch(J){W("plugin_sandbox_shutdown",J)}if(this.sessions.delete($.sessionId),this.emit({type:"ended",payload:{sessionId:$.sessionId,reason:Z.endReason,ts:Date.now()}}),Q.length>0&&Z.status==="failed")throw Q[0]}async releaseSessionRuntime($,Z){let Q=[],W=(J,X)=>{Q.push(X),$.config.logger?.log("Session runtime cleanup failed",{sessionId:$.sessionId,stage:J,error:X,severity:"warn"}),p2($.config.telemetry,{component:"core",operation:"session.runtime_cleanup",error:X,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:J,reason:Z,providerId:$.config.providerId,modelId:$.config.modelId}})};try{await $.agent.shutdown(Z)}catch(J){W("agent_shutdown",J)}try{await Promise.resolve($.runtime.shutdown(Z))}catch(J){W("runtime_shutdown",J)}try{await $.pluginSandboxShutdown?.()}catch(J){W("plugin_sandbox_shutdown",J)}if(this.sessions.delete($.sessionId),Q.length>0)throw Q[0]}async updateStatus($,Z,Q){if(!$.artifacts)return;let W=await this.invoke("updateSessionStatus",$.sessionId,Z,Q);if(!W.updated)return;let J=await this.invokeOptionalValue("readSessionManifest",$.sessionId)??$.artifacts.manifest;if(J.status=Z,H0(Z))delete J.ended_at,J.exit_code=null;else J.ended_at=W.endedAt??J0(),J.exit_code=typeof Q==="number"?Q:null;$.artifacts.manifest=J,$.status=Z,$.updatedAt=W.endedAt??J0(),$.endedAt=H0(Z)?null:J.ended_at,$.exitCode=J.exit_code,await this.invoke("writeSessionManifest",$.artifacts.manifestPath,J),this.emitStatus($.sessionId,Z)}async runWithAuthRetry($,Z,Q){try{return await Z()}catch(W){if(!Q2($.config.providerId)||!Qx(W))throw W;return await this.syncOAuthCredentials($,{forceRefresh:!0}),$.agent.restore(Q),Z()}}async syncOAuthCredentials($,Z){let Q=null;try{Q=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId,forceRefresh:Z?.forceRefresh})}catch(W){if(W instanceof i7)throw Error(`${W.providerId} requires re-authentication.`);throw W}if(!Q?.apiKey||$.config.apiKey===Q.apiKey)return;$.config.apiKey=Q.apiKey,$.agent.updateConnection({apiKey:Q.apiKey}),$.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({apiKey:Q.apiKey}),$.runtime.teamRuntime?.updateTeammateConnections({apiKey:Q.apiKey})}getSessionOrThrow($){let Z=this.sessions.get($);if(!Z){let Q=new k1($);throw p2(this.defaultTelemetry,{component:"core",operation:"session.active_lookup",error:Q,severity:"warn",handled:!0,context:{sessionId:$,activeSessionCount:this.sessions.size}}),Q}return Z}resolveAbsoluteFilePaths($,Z){if(!Z||Z.length===0)return[];let Q=Z.map((W)=>W.trim()).filter((W)=>W.length>0).map((W)=>$x(W)?W:IY($,W));return Array.from(new Set(Q))}getSessionAgentTelemetryIdentity($){return r1({agentId:$.agent.getAgentId(),conversationId:$.agent.getConversationId(),teamId:$.runtime.teamRuntime?.getTeamId(),teamName:$.runtime.teamRuntime?.getTeamName(),teamRole:$.runtime.teamRuntime?"lead":void 0})}async seedAggregateUsageFromArtifacts($){let Z=await this.summarizePersistedTeammateUsage($.sessionDir,$.rootMessagesPath,$.manifest.session_id),Q=f0($.initialUsage,Z);return this.withPersistedAggregateUsageFloor(Q,$.manifest)}async summarizePersistedTeammateUsage($,Z,Q){let W=IY(Z),J=`${Q}.messages.json`,X;try{X=tI($)}catch{return D0()}let Y=D0();for(let j of X){if(!j.endsWith(".messages.json"))continue;if(j===J)continue;let V=IY($,j);if(V===W)continue;let H=await I$(V);if(H.length===0)continue;Y=f0(Y,b8(H))}return Y}withPersistedAggregateUsageFloor($,Z){let Q=Xx(Z.metadata?.aggregateUsage);if(Q)return Yx($,Q);let W=Z.metadata?.aggregatedAgentsCost;if(typeof W!=="number"||!Number.isFinite(W)||W<=$.totalCost)return $;return{...$,totalCost:W}}emitStatus($,Z){this.emitSessionSnapshot($),this.emit({type:"status",payload:{sessionId:$,status:Z}})}async emitSessionSnapshot($){let Z=await this.getSession($);if(!Z)return;this.emit({type:"session_snapshot",payload:{sessionId:$,snapshot:U1({session:Z,messages:await this.readSessionMessages($),usage:this.usageBySession.get($),aggregateUsage:this.aggregateUsageBySession.get($)})}})}emit($){this.events.emit($)}async listRows($){return this.invoke("listSessions",Math.min(Math.max(1,Math.floor($)),_U))}async getRow($){let Z=$.trim();if(!Z)return;return(await this.listRows(_U)).find((W)=>W.sessionId===Z)}async readManifest($){let Z=$.trim();if(!Z)return;return await this.invokeOptionalValue("readSessionManifest",Z)}invoke($,...Z){return fU(this.sessionService,$,...Z)}invokeOptional($,...Z){return UU(this.sessionService,$,...Z)}invokeOptionalValue($,...Z){return DU(this.sessionService,$,...Z)}}function Vx($){return{text:$.text,usage:$.usage,inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,iterations:$.iterations,finishReason:$.finishReason,toolCalls:$.toolCalls.map((Z)=>({name:Z.name,input:Z.input,output:Z.output,error:Z.error,durationMs:Z.durationMs}))}}function Hx($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}function VU($={}){let Z=new T1({sessionService:new z1(new L1),fetch:$.fetch,telemetry:$.telemetry});return{async startSession(Q){let W=(Q.cwd?.trim()||Q.workspaceRoot).trim(),J=await Z.startSession({source:Q.source?.trim()||T0.CLI,interactive:!1,config:{providerId:jx(Q.provider),modelId:Q.model,apiKey:Q.apiKey?.trim()||void 0,cwd:W,workspaceRoot:Q.workspaceRoot,systemPrompt:Q.systemPrompt??"",mode:Hx(Q),maxIterations:Q.maxIterations,enableTools:Q.enableTools!==!1,enableSpawnAgent:Q.enableSpawn!==!1,enableAgentTeams:Q.enableTeams!==!1,disableMcpSettingsTools:Q.disableMcpSettingsTools,missionLogIntervalSteps:Q.missionStepInterval,missionLogIntervalMs:Q.missionTimeIntervalMs},toolPolicies:Q.toolPolicies??{"*":{autoApprove:Q.autoApproveTools!==!1}},localRuntime:{configExtensions:Q.configExtensions}});return{sessionId:J.sessionId,startResult:{sessionId:J.sessionId,manifestPath:J.manifestPath,messagesPath:J.messagesPath}}},async sendSession(Q,W){let J=await Z.runTurn({sessionId:Q,prompt:W.prompt,userImages:W.attachments?.userImages,userFiles:W.attachments?.userFiles?.map((X)=>X.content)});if(!J)throw Error("local hub schedule runtime returned no turn result");return{result:Vx(J)}},async abortSession(Q){return await Z.abort(Q,Error("hub schedule abort")),{applied:!0}},async stopSession(Q){return await Z.stopSession(Q),{applied:!0}}}}import{resolveClineBuildEnv as DD}from"@cline/shared";function Bx($){if(typeof $==="string")return $.trim()||void 0;if(!Array.isArray($))return;return $.map((Q)=>{if(Q&&typeof Q==="object"&&"type"in Q&&Q.type==="text"&&"text"in Q&&typeof Q.text==="string")return Q.text.trim();return""}).filter(Boolean).join(`
|
|
736
|
-
`).trim()||void 0}var zU=120,xY="...";function J9($){let Z=$.trim();if(!Z)return"";if(Buffer.byteLength(Z,"utf8")<=zU)return Z;let Q=zU-Buffer.byteLength(xY,"utf8");if(Q<=0)return xY;let W="";for(let J of Z){if(Buffer.byteLength(W+J,"utf8")>Q)break;W+=J}return`${W}${xY}`}async function TU($){let Z=$?.sessionId?.trim()||"unknown",Q=typeof $?.metadata?.messagesPath==="string"?$.metadata.messagesPath:void 0,J=[...await I$(Q)].reverse().find((V)=>V.role==="assistant"),X=J?Bx(J.content):void 0,Y=$?.workspaceRoot?.trim()||"workspace",j=typeof $?.metadata?.prompt==="string"?$.metadata.prompt.trim():Y;return{title:`Task completed (${Z})`,body:J9(X&&X.length>0?X:j.length>0?j:Y),severity:"info"}}import{captureSdkError as e7,createSessionId as Vg}from"@cline/shared";import{createSessionId as Ax}from"@cline/shared";import{createSessionId as Fx}from"@cline/shared";function Gx($){switch($){case"idle":return"idle";case"pending":return"pending";case"completed":return"completed";case"failed":return"failed";case"cancelled":return"aborted";default:return"running"}}function Kx($){let Z=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):{};if($.parentSessionId?.trim())Z.parentSessionId=$.parentSessionId;if($.parentAgentId?.trim())Z.parentAgentId=$.parentAgentId;if($.agentId?.trim())Z.agentId=$.agentId;if($.conversationId?.trim())Z.conversationId=$.conversationId;if($.messagesPath?.trim())Z.messagesPath=$.messagesPath;if($.prompt?.trim())Z.prompt=$.prompt;if($.provider?.trim())Z.provider=$.provider;if($.model?.trim())Z.model=$.model;if($.source?.trim())Z.source=$.source;if(typeof $.pid==="number")Z.pid=$.pid;return Object.keys(Z).length>0?Z:void 0}function a7($,Z,Q,W){return{sessionId:$.sessionId,workspaceRoot:$.workspaceRoot,cwd:$.cwd,createdAt:Date.parse($.startedAt),updatedAt:Date.parse($.updatedAt),createdByClientId:Z?.createdByClientId??"hub",status:Gx($.status),participants:Z?[...Z.participants.values()]:[],metadata:Kx($),runtimeOptions:{enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,mode:typeof $.metadata?.mode==="string"?$.metadata.mode:void 0,systemPrompt:typeof $.metadata?.systemPrompt==="string"?$.metadata.systemPrompt:void 0},runtimeSession:$.agentId?{agentId:$.agentId,team:$.teamName?{teamId:$.teamName}:void 0}:void 0,...Q?{usage:{...Q}}:{},...W?{aggregateUsage:{...W}}:{}}}function c($,Z){return{version:$.version,requestId:$.requestId,ok:!0,...Z!==void 0?{payload:Z}:{}}}function x($,Z,Q){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:Z,message:Q}}}function s7($){return $&&typeof $==="object"&&!Array.isArray($)?$:void 0}function I0($){if(typeof $.payload?.sessionId==="string")return $.payload.sessionId.trim();return $.sessionId?.trim()??""}function r2($,Z,Q){return{version:"v1",event:$,eventId:Fx("hevt_"),sessionId:Q,timestamp:Date.now(),payload:Z}}async function o0($,Z){let Q=await $.sessionHost.getSession(Z);if(!Q)return;let W=await $.sessionHost.getAccumulatedUsage?.(Z);return a7(Q,$.sessionState.get(Z),W?.usage,W?.aggregateUsage)}async function t0($,Z){let Q=await $.sessionHost.getSession(Z);if(!Q)return;let[W,J]=await Promise.all([typeof $.sessionHost.readSessionMessages==="function"?$.sessionHost.readSessionMessages(Z):[],$.sessionHost.getAccumulatedUsage?.(Z)]);return U1({session:Q,messages:W,usage:J?.usage,aggregateUsage:J?.aggregateUsage})}function o7($,Z,Q,W,J={}){let X=$.sessionState.get(Z);if(X){if(J.interactive!==void 0)X.interactive=J.interactive;if(!X.participants.has(Q))X.participants.set(Q,{clientId:Q,attachedAt:Date.now(),role:W});return X}let Y={createdByClientId:Q,interactive:J.interactive??!0,participants:new Map([[Q,{clientId:Q,attachedAt:Date.now(),role:W}]])};return $.sessionState.set(Z,Y),Y}async function gY($,Z){let Q=Ax("approval_"),W=Z.sessionId;if($.sessionState.get(W)?.interactive===!1)return{approved:!1,reason:"Tool approval requires an interactive session, but this session is non-interactive."};return await new Promise((X)=>{$.pendingApprovals.set(Q,{sessionId:W,resolve:X}),$.publish($.buildEvent("approval.requested",{approvalId:Q,sessionId:Z.sessionId,agentId:Z.agentId,conversationId:Z.conversationId,iteration:Z.iteration,toolCallId:Z.toolCallId,toolName:Z.toolName,inputJson:JSON.stringify(Z.input??null),policy:Z.policy},W))})}function mY($,Z,Q){let W=$.pendingApprovals.get(Z);if(!W)return;return $.pendingApprovals.delete(Z),W.resolve(Q),{sessionId:W.sessionId}}function vY($,Z,Q){let W=0;for(let[J,X]of[...$.pendingApprovals.entries()]){if(!Z({approvalId:J,sessionId:X.sessionId}))continue;$.pendingApprovals.delete(J),X.resolve({approved:!1,reason:Q}),$.publish($.buildEvent("approval.resolved",{approvalId:J,approved:!1,cancelled:!0,reason:Q},X.sessionId)),W+=1}return W}async function OU($,Z){let Q=typeof Z.payload?.approvalId==="string"?Z.payload.approvalId.trim():"";if(!$.pendingApprovals.get(Q))return x(Z,"approval_not_found",`Unknown approval: ${Q}`);let J=typeof Z.payload?.reason==="string"?Z.payload.reason:Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)&&typeof Z.payload.payload.reason==="string"?Z.payload.payload.reason:void 0,X=Z.payload?.approved===!0,Y=mY($,Q,{approved:X,reason:J});if(!Y)return x(Z,"approval_not_found",`Unknown approval: ${Q}`);return $.publish($.buildEvent("approval.resolved",{approvalId:Q,approved:X,reason:J},Y.sessionId)),c(Z,{approvalId:Q,approved:X})}import{createSessionId as Dx}from"@cline/shared";function fx($){if($ instanceof Error)return{name:$.name,message:$.message,stack:$.stack};if($===void 0)return;return $}var qU={debug:10,info:20,warn:30,error:40,silent:50};function Ux(){let $=process.env.CLINE_HUB_LOG_LEVEL?.trim().toLowerCase();if($==="debug"||$==="info"||$==="warn"||$==="error"||$==="silent")return $;return process.env.VITEST?"error":"info"}function u($,Z,Q={}){if(qU[$]<qU[Ux()])return;let W=JSON.stringify({ts:new Date().toISOString(),level:$,component:"hub",message:Z,...Object.fromEntries(Object.entries(Q).map(([J,X])=>[J,fx(X)]).filter(([,J])=>J!==void 0))});if($==="error"||$==="warn"){console.error(`[hub] ${W}`);return}console.log(`[hub] ${W}`)}function cY($,Z){let Q=Z instanceof Error?Z.stack||Z.message:String(Z);u("error",$,{error:Q})}async function MU($,Z,Q,W,J,X){let Y=Dx("capreq_"),j=performance.now();return u("info","capability.request.start",{requestId:Y,sessionId:Z,capabilityName:Q,targetClientId:J}),await new Promise((V,H)=>{$.pendingCapabilityRequests.set(Y,{sessionId:Z,targetClientId:J,capabilityName:Q,onProgress:X,resolve:(B)=>{if(u(B.ok?"info":"warn","capability.request.end",{requestId:Y,sessionId:Z,capabilityName:Q,targetClientId:J,ok:B.ok,error:B.error,durationMs:Math.round(performance.now()-j)}),!B.ok){H(Error(B.error||`Capability ${Q} was rejected by ${J}.`));return}V(B.payload)}}),$.publish($.buildEvent("capability.requested",{requestId:Y,targetClientId:J,capabilityName:Q,payload:W},Z)),u("info","capability.request.published",{requestId:Y,sessionId:Z,capabilityName:Q,targetClientId:J})})}function RU($,Z){let Q=typeof Z.payload?.requestId==="string"?Z.payload.requestId.trim():"",W=$.pendingCapabilityRequests.get(Q);if(!W)return x(Z,"capability_not_found",`Unknown capability request: ${Q}`);if((Z.clientId?.trim()||"")!==W.targetClientId)return x(Z,"capability_wrong_client",`Capability request ${Q} is owned by ${W.targetClientId}`);if(Z.sessionId?.trim()&&Z.sessionId.trim()!==W.sessionId)return x(Z,"capability_wrong_session",`Capability request ${Q} belongs to session ${W.sessionId}`);let X=Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)?Z.payload.payload:{};return W.onProgress?.(X),c(Z,{requestId:Q})}function u$($,Z,Q){let W=0;for(let[J,X]of[...$.pendingCapabilityRequests.entries()]){if(!Z({requestId:J,...X}))continue;$.pendingCapabilityRequests.delete(J),u("warn","capability.request.cancelled",{requestId:J,sessionId:X.sessionId,capabilityName:X.capabilityName,targetClientId:X.targetClientId,reason:Q}),X.resolve({ok:!1,error:Q}),$.publish($.buildEvent("capability.resolved",{requestId:J,capabilityName:X.capabilityName,targetClientId:X.targetClientId,ok:!1,cancelled:!0,error:Q},X.sessionId)),W+=1}return W}async function EU($,Z){let Q=typeof Z.payload?.sessionId==="string"?Z.payload.sessionId.trim():Z.sessionId?.trim()||"",W=typeof Z.payload?.capabilityName==="string"?Z.payload.capabilityName.trim():"",J=typeof Z.payload?.targetClientId==="string"?Z.payload.targetClientId.trim():"";if(!Q||!W||!J)return x(Z,"invalid_capability_request","capability.request requires sessionId, capabilityName, and targetClientId");try{let X=Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)?Z.payload.payload:{},Y=await $.requestCapability(Q,W,X,J);return c(Z,Y)}catch(X){return x(Z,"capability_request_failed",X instanceof Error?X.message:String(X))}}function NU($,Z){let Q=typeof Z.payload?.requestId==="string"?Z.payload.requestId.trim():"",W=$.pendingCapabilityRequests.get(Q);if(!W)return x(Z,"capability_not_found",`Unknown capability request: ${Q}`);let J=Z.clientId?.trim()||"";if(J!==W.targetClientId)return x(Z,"capability_wrong_client",`Capability request ${Q} is owned by ${W.targetClientId}`);if(Z.sessionId?.trim()&&Z.sessionId.trim()!==W.sessionId)return x(Z,"capability_wrong_session",`Capability request ${Q} belongs to session ${W.sessionId}`);$.pendingCapabilityRequests.delete(Q);let X=Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)?Z.payload.payload:void 0,Y=typeof Z.payload?.error==="string"?Z.payload.error:void 0,j=Z.payload?.ok===!0;return u(j?"info":"warn","capability.respond",{requestId:Q,sessionId:W.sessionId,capabilityName:W.capabilityName,targetClientId:W.targetClientId,respondedByClientId:J,ok:j,error:Y}),W.resolve({ok:j,payload:X,error:Y}),$.publish($.buildEvent("capability.resolved",{requestId:Q,capabilityName:W.capabilityName,targetClientId:W.targetClientId,respondedByClientId:J,ok:j,payload:X,error:Y},W.sessionId)),c(Z,{requestId:Q,ok:j})}import{createSessionId as Lx}from"@cline/shared";function wU($,Z){let Q=Z.payload,W=Q?.clientId?.trim()||Z.clientId?.trim()||Lx("client_");return $.clients.set(W,{clientId:W,clientType:Q?.clientType??"unknown",displayName:Q?.displayName,actorKind:Q?.actorKind??"client",connectedAt:Date.now(),lastSeenAt:Date.now(),transport:Q?.transport??"native",capabilities:Q?.capabilities??[],metadata:Q?.metadata,workspaceContext:Q?.workspaceContext}),$.publish($.buildEvent("hub.client.registered",{clientId:W,clientType:Q?.clientType??"unknown",displayName:Q?.displayName,connectedAt:Date.now()})),c(Z,{clientId:W})}function CU($,Z){let Q=Z.clientId?.trim(),W=Q?$.clients.get(Q):void 0;if(!Q||!W)return x(Z,"client_not_found","Client is not registered with this hub.");let J=s7(Z.payload?.metadata);if(W.lastSeenAt=Date.now(),J)W.metadata=JSON.parse(JSON.stringify(J));return c(Z)}function PU($,Z,Q){let W=Z.clientId?.trim();if(W)$.clients.delete(W),Q(W),$.publish($.buildEvent("hub.client.disconnected",{clientId:W}));return c(Z)}function SU($,Z){return c(Z,{clients:[...$.clients.values()]})}_0();import{existsSync as hU,mkdirSync as _x,readdirSync as zx,readFileSync as Tx,rmSync as Ox,writeFileSync as qx}from"node:fs";import{dirname as Mx,join as bU}from"node:path";import{CONNECTOR_PLATFORMS as Rx,connectorChannelsFromPlatforms as Ex,listConnectorCatalog as kU,shouldIncludeConnectorField as Nx}from"@cline/shared";import{resolveConnectorDataDir as wx,resolveConnectorSettingsPath as dY}from"@cline/shared/storage";var Cx=1,yU={startedAt:($)=>typeof $.startedAt==="string"?$.startedAt:void 0,port:($)=>typeof $.port==="number"?$.port:void 0,baseUrl:($)=>typeof $.baseUrl==="string"?$.baseUrl:void 0,connectionMode:($)=>typeof $.connectionMode==="string"?$.connectionMode:void 0,userName:($)=>typeof $.userName==="string"?$.userName:void 0,botUsername:($)=>typeof $.botUsername==="string"?$.botUsername:void 0,applicationId:($)=>typeof $.applicationId==="string"?$.applicationId:void 0,phoneNumberId:($)=>typeof $.phoneNumberId==="string"?$.phoneNumberId:void 0},Px={discord:{required:["userName","applicationId"],optional:["startedAt","port","baseUrl"]},telegram:{required:["botUsername"],optional:["startedAt"]},gchat:{required:["userName"],optional:["startedAt","port","baseUrl"]},linear:{required:["userName"],optional:["startedAt","port","baseUrl"]},slack:{required:["userName"],optional:["startedAt","connectionMode","port","baseUrl"]},whatsapp:{required:["userName"],optional:["startedAt","phoneNumberId","port","baseUrl"]}};function d$($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function H9($){return typeof $==="string"?$.trim():void 0}function IU($){if(!hU($))return;try{let Z=JSON.parse(Tx($,"utf8"));return d$(Z)?Z:void 0}catch{return}}function lY(){let $=IU(dY()),Z=d$($?.connectors)?$.connectors:{},Q={};for(let[W,J]of Object.entries(Z)){if(!d$(J))continue;let X=H9(J.type),Y=H9(J.configuredAt),j=H9(J.updatedAt);if(!X||!Y||!j)continue;let V=t7(J.values),H=d$(J.security)?{enabled:J.security.enabled===!0,values:t7(J.security.values)}:void 0;Q[W]={type:X,values:V,security:H,configuredAt:Y,updatedAt:j}}return{version:Cx,connectors:Q}}function xU($){let Z=dY();_x(Mx(Z),{recursive:!0}),qx(Z,`${JSON.stringify($,null,2)}
|
|
737
|
-
`,"utf8")}function t7($){if(!d$($))return{};let Z={};for(let[Q,W]of Object.entries($))if(typeof W==="string")Z[Q]=W.trim();return Z}function Sx($){if(!Number.isInteger($)||$<=0)return!1;try{return process.kill($,0),!0}catch{return!1}}function bx($){let Z=bU(wx(),$);if(!hU(Z))return[];return zx(Z).filter((Q)=>Q.endsWith(".json")&&!Q.endsWith(".threads.json")).map((Q)=>bU(Z,Q))}function yx($,Z,Q){let W=Z.botUsername??Z.userName??Z.applicationId??Z.phoneNumberId??String(Q);return`${$}:${W}`}function hx($,Z){let Q=IU(Z);if(!Q)return;let W=typeof Q.pid==="number"?Q.pid:void 0,J=typeof Q.hubUrl==="string"?Q.hubUrl:typeof Q.rpcAddress==="string"?Q.rpcAddress:void 0;if(!W||!J||!Sx(W))return;let X=Px[$];if(!X)return;let Y={};for(let j of X.required){let V=yU[j](Q);if(!V||typeof V==="string"&&!V.trim())return;Y[j]=V}for(let j of X.optional){let V=yU[j](Q);if(V!==void 0)Y[j]=V}return{id:yx($,Y,W),type:$,pid:W,hubUrl:J,...Y}}function kx(){let $=[];for(let{name:Z}of kU())for(let Q of bx(Z)){let W=hx(Z,Q);if(W)$.push(W)}return $.sort((Z,Q)=>{if(Z.type!==Q.type)return Z.type.localeCompare(Q.type);let W=Z.botUsername??Z.userName??"",J=Q.botUsername??Q.userName??"";return W.localeCompare(J)})}function Ix(){let $=lY();return Object.entries($.connectors).map(([Z,Q])=>({id:Z,type:Q.type,configuredAt:Q.configuredAt,updatedAt:Q.updatedAt})).sort((Z,Q)=>Z.type.localeCompare(Q.type))}function pY(){return{available:Ex(),active:kx(),configured:Ix()}}function xx($,Z){if($.required&&!Z[$.flag]?.trim())throw Error(`${$.label} is required`)}function gx($,Z){let Q={};for(let J of $.fields)Q[J.flag]=Z[J.flag]??J.initialValue??"";let W={};for(let J of $.fields){if(!Nx(J,Q))continue;xx(J,Q),W[J.flag]=Q[J.flag]}return W}function mx($){if(!d$($))throw Error("connector.configure payload must be an object.");let Z=H9($.channel);if(!Z)throw Error("channel is required");let Q=Rx.find((K)=>K.id===Z);if(!Q)throw Error(`unknown connector channel: ${Z}`);if(!new Set(kU().map((K)=>K.name)).has(Q.id))throw Error(`connector channel is not available: ${Z}`);let J=t7($.values),X=gx(Q,J),Y=d$($.security)?$.security:{},j=Y.enabled===!0,V=t7(Y.values);if(j&&Q.security)for(let K of Q.security.fields){let F=V[K.key];if(!F)throw Error(K.requiredMessage);let A=K.validate?.(F);if(A)throw Error(A)}let H=lY(),B=new Date().toISOString(),G=H.connectors[Z];return H.connectors[Z]={type:Z,values:X,security:j?{enabled:!0,values:V}:{enabled:!1,values:{}},configuredAt:G?.configuredAt??B,updatedAt:B},xU(H),pY()}function vx($){if(!d$($))throw Error("connector.delete_config payload must be an object.");let Z=H9($.channel);if(!Z)throw Error("channel is required");let Q=lY();if(delete Q.connectors[Z],Object.keys(Q.connectors).length>0)xU(Q);else Ox(dY(),{force:!0});return pY()}function cx($){return $==="connector.configure"||$==="connector.delete_config"}function uY($,Z,Q){if(!cx(Z.command))return;W8($.telemetry,{ulid:Z.sessionId??Z.requestId??"hub",tool:Z.command,success:Q})}async function gU($,Z){try{if(Z.command==="connector.channels")return c(Z,pY());if(Z.command==="connector.configure"){let Q=mx(Z.payload);return uY($,Z,!0),c(Z,Q)}if(Z.command==="connector.delete_config"){let Q=vx(Z.payload);return uY($,Z,!0),c(Z,Q)}return x(Z,"unsupported_connector_command",`unsupported connector command: ${Z.command}`)}catch(Q){return uY($,Z,!1),x(Z,"connector_command_failed",Q instanceof Error?Q.message:String(Q))}}var ux=30000;function dx($){if($==="aborted")return"run.aborted";if($==="error"||$==="failed")return"run.failed";return"run.completed"}function lx($){if($.finishReason!=="error")return;return $.text.trim()||void 0}function px($,Z,Q){let W=Q instanceof Error&&Q.message.trim()?Q.message:`Unknown session: ${Z}`;return x($,s$,W)}function rx($){return $?$:void 0}function ix($){let Z=typeof $.timeoutMs==="number"?$.timeoutMs:typeof $.timeout_ms==="number"?$.timeout_ms:void 0;if(Z&&Number.isFinite(Z)&&Z>0)return Math.floor(Z);let Q=typeof $.timeoutSeconds==="number"?$.timeoutSeconds:typeof $.timeout_seconds==="number"?$.timeout_seconds:void 0;if(Q&&Number.isFinite(Q)&&Q>0)return Math.floor(Q*1000);return}async function nx($,Z,Q,W){let J=performance.now(),X=!1,Y={command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Q.sessionId,timeoutMs:W},j=setInterval(()=>{if(X)return;let B=Math.round(performance.now()-J);u("warn","run.heartbeat",{...Y,elapsedMs:B}),$.publish($.buildEvent("run.heartbeat",{requestId:Z.requestId,elapsedMs:B,...W?{timeoutMs:W}:{}},Q.sessionId))},ux),V=$.sessionHost.runTurn(Q);V.then((B)=>{if(!X)return;u("warn","run.late_end",{...Y,elapsedMs:Math.round(performance.now()-J),finishReason:B?.finishReason})},(B)=>{if(!X)return;u("error","run.late_error",{...Y,elapsedMs:Math.round(performance.now()-J),error:B})});let H;try{if(!W)return await V;return await Promise.race([V,new Promise((B,G)=>{H=setTimeout(()=>{let K=`Hub run ${Z.command} timed out after ${W}ms.`;X=!0,clearInterval(j),G(Error(K)),u("error","run.timeout",{...Y,elapsedMs:Math.round(performance.now()-J)}),vY($,(F)=>F.sessionId===Q.sessionId,K),u$($,(F)=>F.sessionId===Q.sessionId,K),$.sessionHost.abort(Q.sessionId,K).catch((F)=>{u("error","run.timeout_abort_failed",{...Y,error:F})})},W)})])}finally{if(X=!0,clearInterval(j),H)clearTimeout(H)}}async function mU($,Z){let Q=I0(Z),W=Z.payload&&typeof Z.payload==="object"?Z.payload:{},J=typeof W.prompt==="string"?W.prompt:typeof W.input==="string"?W.input:"";if(!J.trim())return x(Z,"invalid_session_input","session input requires a prompt string");$.publish($.buildEvent("run.started",void 0,Q));let X=W.attachments&&typeof W.attachments==="object"&&!Array.isArray(W.attachments)?W.attachments:void 0,Y=Array.isArray(X?.userFiles)?X.userFiles.filter((B)=>typeof B==="string"):void 0,j=ix(W);$.suppressNextTerminalEventBySession.set(Q,"run.start.reply");let V;try{V=await nx($,Z,{sessionId:Q,prompt:J,mode:rx(W.mode),delivery:W.delivery==="queue"||W.delivery==="steer"?W.delivery:void 0,userImages:Array.isArray(X?.userImages)?X.userImages:void 0,userFiles:Y,timeoutMs:j},j)}catch(B){if($.suppressNextTerminalEventBySession.get(Q)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Q);if(I1(B))return px(Z,Q,B);throw $.publish($.buildEvent("run.failed",{reason:"error",error:B instanceof Error?B.message:String(B)},Q)),B}if(V){let B=await t0($,Q),G=lx(V);if($.publish($.buildEvent(dx(V.finishReason),{reason:V.finishReason,...G?{error:G}:{},result:V,...B?{snapshot:B}:{}},Q)),$.suppressNextTerminalEventBySession.get(Q)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Q)}else $.suppressNextTerminalEventBySession.delete(Q);let H=await t0($,Q);return c(Z,V||H?{...V?{result:V}:{},...H?{snapshot:H}:{}}:void 0)}async function vU($,Z){let Q=I0(Z),W=typeof Z.payload?.reason==="string"?Z.payload.reason:"Run was aborted before pending approval or capability request was resolved.";vY($,(J)=>J.sessionId===Q,W);try{await $.sessionHost.abort(Q,Z.payload?.reason)}catch(J){u("warn","run.abort_failed",{command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Q,error:J})}finally{u$($,(J)=>J.sessionId===Q,W)}return c(Z,{applied:!0})}async function cU($,Z){let Q=D4(Z.payload?.payload);if(!Q)return x(Z,"invalid_hook_payload","session.hook requires a valid hook event payload");return await $.sessionHost.dispatchHookEvent(Q),c(Z,{applied:!0})}async function uU($,Z){switch(Z.type){case"chunk":return;case"agent_event":await ax($,Z);return;case"hook":if(Z.payload.hookEventName==="tool_call")$.publish($.buildEvent("tool.started",{toolName:Z.payload.toolName},Z.payload.sessionId));else if(Z.payload.hookEventName==="tool_result")$.publish($.buildEvent("tool.finished",{toolName:Z.payload.toolName},Z.payload.sessionId));return;case"team_progress":{let Q={type:"team_progress_projection",version:1,sessionId:Z.payload.sessionId,summary:Z.payload.summary,lastEvent:Z.payload.lifecycle};$.publish($.buildEvent("team.progress",Q,Z.payload.sessionId));return}case"pending_prompts":$.publish($.buildEvent("session.pending_prompts",{sessionId:Z.payload.sessionId,prompts:Z.payload.prompts},Z.payload.sessionId));return;case"pending_prompt_submitted":{let Q={id:Z.payload.id,prompt:Z.payload.prompt,delivery:Z.payload.delivery,attachmentCount:Z.payload.attachmentCount,userImages:Z.payload.userImages,userFiles:Z.payload.userFiles};$.publish($.buildEvent("session.pending_prompt_submitted",{sessionId:Z.payload.sessionId,prompt:Q},Z.payload.sessionId));return}case"session_snapshot":$.publish($.buildEvent("session.updated",{sessionId:Z.payload.sessionId,snapshot:Z.payload.snapshot},Z.payload.sessionId));return;case"status":{let[Q,W]=await Promise.all([o0($,Z.payload.sessionId),t0($,Z.payload.sessionId)]);if(Q)$.publish($.buildEvent("session.updated",{session:Q,...W?{snapshot:W}:{}},Z.payload.sessionId));return}case"ended":await sx($,Z);return;default:return}}async function ax($,Z){let{sessionId:Q,event:W}=Z.payload;if(W.type==="iteration_start"){$.publish($.buildEvent("iteration.started",{iteration:W.iteration},Q));return}if(W.type==="iteration_end"){$.publish($.buildEvent("iteration.finished",{iteration:W.iteration,hadToolCalls:W.hadToolCalls,toolCallCount:W.toolCallCount},Q));return}if(W.type==="content_start"){if(W.contentType==="text"&&typeof W.text==="string"&&W.text.length>0){$.publish($.buildEvent("assistant.delta",{text:W.text},Q));return}if(W.contentType==="reasoning"){if(W.redacted&&!W.reasoning){$.publish($.buildEvent("reasoning.delta",{text:"",redacted:!0},Q));return}if(typeof W.reasoning==="string"&&W.reasoning.length>0)$.publish($.buildEvent("reasoning.delta",{text:W.reasoning,redacted:W.redacted===!0},Q));return}if(W.contentType==="tool"){$.publish($.buildEvent("tool.started",{toolCallId:W.toolCallId,toolName:W.toolName,input:W.input},Q));return}}if(W.type==="content_end"){switch(W.contentType){case"text":$.publish($.buildEvent("assistant.finished",{text:W.text},Q));break;case"reasoning":$.publish($.buildEvent("reasoning.finished",{reasoning:W.reasoning},Q));break;case"tool":$.publish($.buildEvent("tool.finished",{toolCallId:W.toolCallId,toolName:W.toolName,output:W.output,error:W.error},Q));break}return}if(W.type==="usage"){let J;try{J=await $.sessionHost.getAccumulatedUsage?.(Q)}catch{J=void 0}$.publish($.buildEvent("usage.updated",{sessionId:Q,delta:{inputTokens:W.inputTokens,outputTokens:W.outputTokens,cacheReadTokens:W.cacheReadTokens??0,cacheWriteTokens:W.cacheWriteTokens??0,totalCost:W.cost??0},totals:{inputTokens:W.totalInputTokens,outputTokens:W.totalOutputTokens,cacheReadTokens:W.totalCacheReadTokens??0,cacheWriteTokens:W.totalCacheWriteTokens??0,totalCost:W.totalCost??0},usage:J?.usage,aggregateUsage:J?.aggregateUsage,agent:{kind:Z.payload.teamRole==="teammate"?"teammate":W.parentAgentId?"subagent":"lead",agentId:W.agentId,conversationId:W.conversationId,parentAgentId:W.parentAgentId,teamAgentId:Z.payload.teamAgentId,teamRole:Z.payload.teamRole}},Q));return}if(W.type==="done")$.publish($.buildEvent("agent.done",{reason:W.reason,text:W.text,iterations:W.iterations,usage:W.usage},Q))}async function sx($,Z){let Q=$.suppressNextTerminalEventBySession.get(Z.payload.sessionId),W=Q===Z.payload.reason||Q==="run.start.reply";if(W)$.suppressNextTerminalEventBySession.delete(Z.payload.sessionId);let[J,X]=await Promise.all([o0($,Z.payload.sessionId),t0($,Z.payload.sessionId)]);if(Z.payload.reason==="completed"){let Y=await TU(J);$.publish($.buildEvent("ui.notify",Y,Z.payload.sessionId))}if(W)return;$.publish($.buildEvent(Z.payload.reason==="aborted"?"run.aborted":Z.payload.reason==="error"||Z.payload.reason==="failed"?"run.failed":"run.completed",{reason:Z.payload.reason,...X?{snapshot:X}:{}},Z.payload.sessionId))}import{createSessionId as pU,parseRuntimeConfigExtensions as rU}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as j10,HUB_COMPACTION_CAPABILITY as V10,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as H10,HUB_HOOK_CAPABILITY_PREFIX as B10,HUB_MISTAKE_LIMIT_CAPABILITY as G10,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as K10,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as F10,isHubToolExecutorName as ox}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as L10,HUB_COMPACTION_CAPABILITY as _10,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as z10,HUB_HOOK_CAPABILITY_PREFIX as T10,HUB_MISTAKE_LIMIT_CAPABILITY as O10,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as q10,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as M10}from"@cline/shared";var tx=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function i2($){return $&&typeof $==="object"&&!Array.isArray($)?JSON.parse(JSON.stringify($)):void 0}function ex($,Z){let Q=typeof $.name==="string"?$.name.trim():"",W=typeof $.description==="string"?$.description:"",J=typeof $.capabilityName==="string"?$.capabilityName.trim():"",X=i2($.inputSchema);if(!Q||!W||!X||!J||Z.has(J))return;return Z.add(J),{kind:"tool",capabilityName:J,name:Q,description:W,inputSchema:X,...i2($.lifecycle)?{lifecycle:i2($.lifecycle)}:{}}}function iY($){if(!Array.isArray($))return[];let Z=[],Q=new Set;for(let W of $){if(!W||typeof W!=="object"||Array.isArray(W))continue;let J=W,X=J.kind,Y=typeof J.capabilityName==="string"?J.capabilityName.trim():"";if(!Y||Q.has(Y))continue;if(X==="tool"){let j=ex(J,Q);if(j)Z.push(j);continue}if(X==="toolExecutor"){let j=J.executor;if(!ox(j))continue;Q.add(Y),Z.push({kind:"toolExecutor",capabilityName:Y,executor:j});continue}if(X==="hook"){let j=typeof J.name==="string"?J.name.trim():"";if(!j)continue;Q.add(Y),Z.push({kind:"hook",capabilityName:Y,name:j});continue}if(X==="compaction"){Q.add(Y),Z.push({kind:"compaction",capabilityName:Y,...i2(J.config)?{config:i2(J.config)}:{}});continue}if(X==="checkpoint"){Q.add(Y),Z.push({kind:"checkpoint",capabilityName:Y,...i2(J.config)?{config:i2(J.config)}:{}});continue}if(X==="mistakeLimit"){Q.add(Y),Z.push({kind:"mistakeLimit",capabilityName:Y});continue}if(X==="userInstructionService")Q.add(Y),Z.push({kind:"userInstructionService",capabilityName:Y})}return Z}function lU($){return{agentId:$.agentId,conversationId:$.conversationId,iteration:$.iteration,metadata:$.metadata}}function $g($){return Object.hasOwn($,"update")?$.update:$}function B9($){return $.trim().replace(/^\/+/,"").toLowerCase()}function Zg($){let Z=($??[]).map(B9).filter(Boolean);return Z.length>0?new Set(Z):void 0}function Qg($,Z,Q){if(!Q)return!0;let W=B9($),J=B9(Z),X=W.includes(":")?W.split(":").at(-1)??W:W,Y=J.includes(":")?J.split(":").at(-1)??J:J;return Q.has(W)||Q.has(J)||Q.has(X)||Q.has(Y)}function rY($,Z){let Q=Zg(Z);return $.records.skill.map((W)=>({id:W.id,name:W.item.name,description:"description"in W.item&&typeof W.item.description==="string"?W.item.description:void 0,disabled:W.item.disabled===!0,skill:W.item})).filter((W)=>Qg(W.id,W.name,Q))}function dU($,Z){let Q=async(W,J)=>{let X=B9(W),j=rY($,Z).filter((K)=>K.id===X||B9(K.name)===X||K.id.endsWith(`:${X}`)).filter((K)=>!K.disabled);if(j.length!==1)return j.length>1?`Skill "${W}" is ambiguous. Use one of: ${j.map((K)=>K.id).join(", ")}`:`Skill "${W}" not found.`;let V=j[0].skill,H=J?.trim(),B=H?`
|
|
728
|
+
`)}}async function dX($,Z={}){if($.type==="mcp"){let Q=o5($);if(Z.deleteMcpServer)await Z.deleteMcpServer(Q);else K7($,Z);return{id:$.id,type:$.type,status:"uninstalled",message:`Uninstalled ${$.name??Q??$.id}.`}}if($.type==="skill")return A7($,Z);if($.type==="plugin")return f7($,Z);throw Error(`Unsupported marketplace entry type: ${$.type}`)}var zf={};N(zf,{parsePluginSource:()=>M7,isOfficialPluginSlug:()=>q7,installPlugin:()=>aX,collectPluginMcpOAuthCandidates:()=>R7});import{spawn as oy}from"node:child_process";import{createHash as ty}from"node:crypto";import{existsSync as O1,mkdirSync as rX,readdirSync as ey,readFileSync as $h,renameSync as U7,rmSync as _7,statSync as iX}from"node:fs";import{cp as pX,mkdir as Af,writeFile as z7}from"node:fs/promises";import{homedir as jf}from"node:os";import{basename as W$,dirname as Vf,extname as Zh,join as n,relative as ff,resolve as v$,sep as Qh}from"node:path";import{isPluginModulePath as L7,resolveClineDir as Wh,resolvePluginModuleEntries as Jh}from"@cline/shared/storage";var M4="_installed",T7="package",Xh="https://github.com/cline/plugins.git",Hf=30000,D7=10485760,Bf="@cline/",Yh=["dependencies","devDependencies","optionalDependencies","peerDependencies"],jh={name:"cline-installed-plugin",private:!0,cline:{plugins:[]}};function O7($){if($==="~")return jf();if($.startsWith("~/"))return n(jf(),$.slice(2));return $}function Uf($){return $.split(Qh).join("/")}function d2($){return ty("sha256").update($).digest("hex").slice(0,12)}function Vh($){let Z=0;while(Z<$.length&&$[Z]==="-")Z++;let Q=$.length;while(Q>Z&&$[Q-1]==="-")Q--;return $.slice(Z,Q)}function Q$($){let Z="",Q=!1,W=$.startsWith("@")?$.slice(1):$;for(let X of W.slice(0,256)){if(X>="a"&&X<="z"||X>="A"&&X<="Z"||X>="0"&&X<="9"||X==="."||X==="_"||X==="-")Z+=X,Q=X==="-";else if(!Q)Z+="-",Q=!0;if(Z.length>=80)break}return Vh(Z)||"plugin"}function q7($){return/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test($.trim())}function Hh($){return $?.trim()||Xh}function Gf($){let Q=$.trim().match(/^(@?[^@/]+(?:\/[^@/]+)?)(?:@.+)?$/);if(!Q?.[1])throw Error(`Invalid npm plugin source: npm:${$}`);return{name:Q[1]}}function Bh($){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 Gh($){let Z=$.match(/^git@([^:]+):(.+)$/);if(Z){let Y=Z[2]??"",j=Y.indexOf("@");if(j<0)return{repo:$};return{repo:`git@${Z[1]}:${Y.slice(0,j)}`,ref:Y.slice(j+1)||void 0}}if($.includes("://"))try{let Y=new URL($),j=Y.pathname.replace(/^\/+/,""),V=j.indexOf("@");if(V<0)return{repo:$};return Y.pathname=`/${j.slice(0,V)}`,{repo:Y.toString().replace(/\/$/,""),ref:j.slice(V+1)||void 0}}catch{return{repo:$}}let Q=$.indexOf("/");if(Q<0)return{repo:$};let W=$.slice(0,Q),J=$.slice(Q+1),X=J.indexOf("@");if(X<0)return{repo:$};return{repo:`${W}/${J.slice(0,X)}`,ref:J.slice(X+1)||void 0}}function Kh($){try{return decodeURIComponent($)}catch{return $}}function Fh($){return W$(Kh($))||"plugin"}function Ah($){let Z=$.split("/").filter(Boolean);return Z.length>=5&&(Z[2]==="blob"||Z[2]==="raw")}function Kf($){if(!/^https?:\/\//i.test($))return null;let Z;try{Z=new URL($)}catch{return null}let Q=Z.hostname.toLowerCase(),W=Fh(Z.pathname),J=L7(W),X=(Q==="github.com"||Q==="www.github.com")&&Ah(Z.pathname);if(Z.protocol!=="https:"){if(X||Q==="raw.githubusercontent.com"||J)throw Error(`Remote plugin file URLs must use https: ${$}`);return null}if(Q==="github.com"||Q==="www.github.com"){let Y=Z.pathname.split("/").filter(Boolean);if(!X)return null;if(!J)throw Error(`Remote plugin file must be .js or .ts: ${$}`);return{type:"remote",url:`https://raw.githubusercontent.com/${[Y[0],Y[1],...Y.slice(3)].join("/")}`,filename:W}}if(Q==="raw.githubusercontent.com"){if(!J)throw Error(`Remote plugin file must be .js or .ts: ${$}`);return{type:"remote",url:Z.toString(),filename:W}}if(!J)return null;return{type:"remote",url:Z.toString(),filename:W}}function Ff($,Z={}){let Q=$.trim(),W=Q.startsWith("git:")&&!Q.startsWith("git://"),J=W?Q.slice(4).trim():Q;if(!Z.force&&!W&&!/^(https?|ssh|git):\/\//i.test(J))return null;let{repo:X,ref:Y}=Gh(J),j="",V="";if(X.startsWith("git@")){let G=X.match(/^git@([^:]+):(.+)$/);j=G?.[1]??"",V=G?.[2]??""}else if(/^(https?|ssh|git):\/\//i.test(X)){let G=new URL(X);j=G.hostname,V=G.pathname.replace(/^\/+/,"")}else{let G=X.indexOf("/");if(G<0)return null;j=X.slice(0,G),V=X.slice(G+1)}let H=V.replace(/\.git$/,"").replace(/^\/+/,"");if(!j||!H||H.split("/").length<2)return null;return{type:"git",repo:X.startsWith("git@")||/^(https?|ssh|git):\/\//i.test(X)?X:`https://${X}`,ref:Y,host:j,path:H}}function M7($,Z){let Q=$.trim();if(!Q)throw Error("plugin install requires a source");if(Z==="npm"){let Y=Q.startsWith("npm:")?Q.slice(4).trim():Q,{name:j}=Gf(Y);return{type:"npm",spec:Y,name:j}}if(Z==="git"){let Y=Ff(Q,{force:!0});if(!Y)throw Error(`Invalid git plugin source: ${$}`);return Y}if(Z==="local")return{type:"local",path:$};if(Z==="remote"){let Y=Kf(Q);if(!Y)throw Error(`Invalid remote plugin source: ${$}`);return Y}if(Q.startsWith("npm:")){let Y=Q.slice(4).trim(),{name:j}=Gf(Y);return{type:"npm",spec:Y,name:j}}if(Q.startsWith(".")||Q.startsWith("/")||Q==="~"||Q.startsWith("~/")||/^[A-Za-z]:[\\/]|^\\\\/.test(Q))return{type:"local",path:$};let J=Kf(Q);if(J)return J;let X=Ff(Q);if(X)return X;if(q7(Q))return{type:"official",slug:Q};if(Bh(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 fh($){return $?n($,".cline","plugins"):n(Wh(),"plugins")}function Uh($,Z,Q){if(Z.type==="npm")return n($,M4,"npm",`${Q$(Z.name)}-${d2(Q)}`);if(Z.type==="git")return n($,M4,"git",Q$(Z.host),`${Q$(Z.path)}-${d2(Q)}`);if(Z.type==="remote")return n($,M4,"remote",`${Q$(Z.filename)}-${d2(Q)}`);if(Z.type==="official")return n($,M4,"official",`${Q$(Z.slug)}-${d2(Q)}`);return n($,M4,"local",`${Q$(W$(O7(Z.path)))}-${d2(Q)}`)}function Dh($,Z,Q){if($.type==="npm")return`npm:${$.spec}`;if($.type==="git")return`git:${$.repo}${$.ref?`#${$.ref}`:""}`;if($.type==="remote")return`remote:${$.url}`;if($.type==="official")return`official:${Q}#plugins/${$.slug}`;return`local:${v$(Z,O7($.path))}`}function Lh($,Z){if($.type==="npm")return $.name;if($.type==="git")return Q$(W$($.path));if($.type==="remote")return Q$(W$($.filename,Zh($.filename)));if($.type==="official")return $.slug;return Q$(W$(v$(Z,O7($.path))))}async function R4($,Z,Q={}){await new Promise((W,J)=>{let X=oy($,Z,{cwd:Q.cwd,stdio:["ignore","ignore","pipe"],env:process.env,windowsHide:!0}),Y="";X.stderr.on("data",(j)=>{Y+=String(j)}),X.on("error",J),X.on("close",(j)=>{if(j===0){W();return}let V=Y.trim();J(Error(`${$} ${Z.join(" ")} failed with exit code ${j}${V?`: ${V}`:""}`))})})}function Df($){let Z=n($,"package.json");if(!O1(Z))return null;try{return JSON.parse($h(Z,"utf8"))}catch{return null}}function _h($){let Z=$?.cline?.plugins;if(!Array.isArray(Z))return[];return Z.flatMap((Q)=>{if(typeof Q==="string")return[Q];return Q.paths??[]})}async function zh($){let Z=n($,"package.json"),Q=Df($);if(!Q)return;let W=!1;for(let J of Yh){let X=Q[J];if(!X||typeof X!=="object")continue;for(let Y of Object.keys(X)){if(!Y.startsWith(Bf))continue;delete X[Y],delete Q.peerDependenciesMeta?.[Y],W=!0}if(Object.keys(X).length===0)delete Q[J]}if(Q.peerDependenciesMeta){for(let J of Object.keys(Q.peerDependenciesMeta)){if(!J.startsWith(Bf))continue;delete Q.peerDependenciesMeta[J],W=!0}if(Object.keys(Q.peerDependenciesMeta).length===0)delete Q.peerDependenciesMeta}if(!W)return;await z7(Z,`${JSON.stringify(Q,null,2)}
|
|
729
|
+
`,"utf8")}function Th($,Z){let Q=n($,"node_modules","@cline");if(!O1(Q))return;for(let W of _f(Q)){if(`@cline/${W.name}`===Z)continue;_7(n(Q,W.name),{recursive:!0,force:!0})}}function Lf($){let Z=_h(Df($)).map((X)=>v$($,X)).filter((X)=>O1(X)&&iX(X).isFile()&&L7(X));if(Z.length>0)return Z;let Q=Jh($);if(Q?.length)return Q;let W=[],J=[$];while(J.length>0){let X=J.pop();if(!X)continue;for(let Y of _f(X)){let j=n(X,Y.name);if(Y.name==="node_modules"||Y.name===".git")continue;if(Y.isDirectory()){J.push(j);continue}if(Y.isFile()&&!Y.name.startsWith(".")&&L7(j))W.push(j)}}return W.sort((X,Y)=>X.localeCompare(Y))}function _f($){try{return ey($,{withFileTypes:!0})}catch{return[]}}function Oh($,Z){let Q=Lf(Z);if(Q.length===0)throw Error(`No plugin entry files found in ${Z}`);return Q.map((W)=>`./${Uf(ff($,W))}`)}async function qh($,Z,Q){let W=Oh($,Z);return await z7(n($,"package.json"),JSON.stringify({...jh,name:Q,cline:{plugins:[{paths:W}]}},null,2),"utf8"),W}async function Mh($,Z,Q){let W=n(Z,T7);return await Af(W,{recursive:!0}),await z7(n(W,"package.json"),JSON.stringify({name:"cline-plugin-install",private:!0},null,2),"utf8"),await R4(Q,["install",$.spec,"--prefix",W,"--omit=dev","--omit=peer","--legacy-peer-deps","--no-audit","--no-fund","--package-lock=false"]),Th(W,$.name),n(W,"node_modules",$.name)}async function nX($,Z){if(!O1(n($,"package.json")))return;await zh($),await R4(Z,["install","--omit=dev","--omit=peer","--legacy-peer-deps","--no-audit","--no-fund","--package-lock=false"],{cwd:$})}async function Rh($,Z,Q){if($.ref?.startsWith("-"))throw Error(`Invalid git ref "${$.ref}".`);let W=n(Z,T7),J=["clone","--filter=blob:none"];if($.ref)J.push("--branch",$.ref);J.push("--",$.repo,W);try{await R4("git",J)}catch(X){if(!$.ref)throw X;await R4("git",["clone","--filter=blob:none","--",$.repo,W]),await R4("git",["checkout","--detach",$.ref],{cwd:W})}return await nX(W,Q),W}async function Eh($,Z,Q,W){let J=n(Z,"repo");await R4("git",["clone","--filter=blob:none","--depth","1","--",W,J]);let X=n(J,"plugins",$.slug);if(!O1(X)||!iX(X).isDirectory())throw Error(`Official Cline plugin "${$.slug}" was not found at plugins/${$.slug} in ${W}`);let Y=n(Z,T7);return await pX(X,Y,{recursive:!0,filter:(j)=>{let V=W$(j);return V!==".git"&&V!=="node_modules"}}),_7(J,{recursive:!0,force:!0}),await nX(Y,Q),Y}function lX($){return Error(`Remote plugin file from ${$} exceeds the ${D7} byte limit`)}function Nh($){let Z=$.headers.get("content-length");if(!Z)return;let Q=Number(Z);if(!Number.isFinite(Q)||Q<0)return;return Q}async function wh($,Z){let Q=Nh($);if(Q!==void 0&&Q>D7)throw lX(Z);if(!$.body){let Y=Buffer.from(await $.text(),"utf8");if(Y.byteLength>D7)throw lX(Z);return Y}let W=$.body.getReader(),J=[],X=0;try{while(!0){let{done:Y,value:j}=await W.read();if(Y)break;let V=Buffer.from(j);if(X+=V.byteLength,X>D7)throw await W.cancel().catch(()=>{return}),lX(Z);J.push(V)}return Buffer.concat(J,X)}finally{W.releaseLock()}}async function Ch($,Z){let Q=new AbortController,W=setTimeout(()=>{Q.abort()},Hf);try{let J=await fetch($.url,{signal:Q.signal});if(!J.ok){let Y=J.statusText?` ${J.statusText}`:"";throw Error(`Failed to download plugin file from ${$.url}: ${J.status}${Y}`)}let X=await wh(J,$.url);return rX(Z,{recursive:!0}),await z7(n(Z,$.filename),X),Z}catch(J){if(J instanceof Error&&J.name==="AbortError")throw Error(`Timed out downloading plugin file from ${$.url} after ${Hf}ms`);throw J}finally{clearTimeout(W)}}async function Ph($,Z,Q,W){let J=v$(Q,O7($.path));if(!O1(J))throw Error(`Plugin source path does not exist: ${J}`);let X=iX(J);if(X.isFile()){if(!L7(J))throw Error(`Plugin file must be .js or .ts: ${J}`);rX(Z,{recursive:!0});let j=n(Z,W$(J));return await pX(J,j),Z}if(!X.isDirectory())throw Error(`Plugin source must be a file or directory: ${J}`);let Y=n(Z,T7);return await pX(J,Y,{recursive:!0,filter:(j)=>{let V=W$(j);return V!==".git"&&V!=="node_modules"}}),await nX(Y,W),Y}function Sh($,Z){if(O1($)&&!Z)throw Error(`Plugin is already installed at ${$}. Use --force to replace it.`)}function bh($,Z,Q){if(rX(Vf(Z),{recursive:!0}),!O1(Z)){U7($,Z);return}if(!Q)throw Error(`Plugin is already installed at ${Z}. Use --force to replace it.`);let W=n(Vf(Z),`.replace-${W$(Z)}-${Date.now()}-${process.pid}-${d2(`${Z}:${Math.random()}`)}`);U7(Z,W);try{U7($,Z)}catch(J){if(!O1(Z)&&O1(W))U7(W,Z);throw J}try{_7(W,{recursive:!0,force:!0})}catch{}}function yh($){let Z=$.transport;if(Z.type==="stdio")return!1;return Z.headers!==void 0&&Object.keys(Z.headers).length>0}function hh($){let Z=$.oauth?.tokens?.access_token;return typeof Z==="string"&&Z.trim().length>0}function kh($){let Z=$.metadata;if(!Z||Z.source!=="plugin"||typeof Z.pluginName!=="string"||typeof Z.pluginPath!=="string")return;return{pluginName:Z.pluginName,pluginPath:Z.pluginPath}}function R7($){let Z=new Set($.pluginPaths.map((J)=>v$(J)));if(Z.size===0)return[];let Q;try{Q=p0({filePath:$.settingsPath??Z0()})}catch{return[]}let W=[];for(let J of Q){let X=kh(J);if(!X||!Z.has(v$(X.pluginPath)))continue;let Y=J.transport.type;if(Y==="stdio")continue;if(yh(J)||hh(J))continue;W.push({name:J.name,pluginName:X.pluginName,pluginPath:X.pluginPath,transportType:Y,lastError:J.oauth?.lastError})}return W.sort((J,X)=>J.name.localeCompare(X.name))}async function aX($){let Z=$.source.trim(),Q=M7(Z,$.sourceType),W=$.cwd?.trim(),J=W?v$(W):process.cwd(),X=fh(W?J:void 0),Y=Hh($.officialPluginsRepo),j=Dh(Q,J,Y),V=Uh(X,Q,j),H=Lh(Q,J),B=n(X,M4,".tmp"),G=n(B,`${Date.now()}-${process.pid}-${d2(`${Z}:${Math.random()}`)}`),K=$.npmCommand??(process.env.CLINE_NPM_COMMAND?.trim()||"npm"),F=$.force===!0;Sh(V,F),await Af(B,{recursive:!0});let A;try{if(Q.type==="npm")A=await Mh(Q,G,K);else if(Q.type==="git")A=await Rh(Q,G,K);else if(Q.type==="official")A=await Eh(Q,G,K,Y);else if(Q.type==="remote")A=await Ch(Q,G);else A=await Ph(Q,G,J,K);let L=(Q.type==="local"||Q.type==="remote")&&A===G?Lf(G).map((U)=>`./${Uf(ff(G,U))}`):await qh(G,A,H);if(L.length===0)throw Error(`No plugin entry files found for ${Z}`);bh(G,V,F);let f={source:Z,installPath:V,entryPaths:L.map((U)=>v$(V,U)),mcpSyncFailures:[],mcpOAuthCandidates:[]},D=await i5({pluginPaths:f.entryPaths,cwd:J,workspacePath:J});return f.mcpSyncFailures=D.failures,f.mcpOAuthCandidates=R7({pluginPaths:f.entryPaths}),f}catch(L){throw _7(G,{recursive:!0,force:!0}),L}}var cf={};N(cf,{updateLocalProvider:()=>y7,saveLocalProviderSettings:()=>WY,saveLocalProviderOAuthCredentials:()=>jY,resolveLocalClineAuthToken:()=>HY,refreshProviderModelsFromSource:()=>JY,normalizeOAuthProvider:()=>XY,loginLocalProvider:()=>YY,loginAndSaveLocalProviderOAuthCredentials:()=>VY,listLocalProviders:()=>ZY,getLocalProviderModels:()=>QY,ensureCustomProvidersLoaded:()=>P7,deleteLocalProvider:()=>h7,addLocalProvider:()=>$Y});import*as w0 from"@cline/llms";import{existsSync as Ih,mkdirSync as xh,readFileSync as gh,writeFileSync as mh}from"node:fs";import{mkdir as vh,readFile as ch,writeFile as uh}from"node:fs/promises";import{dirname as sX,join as dh}from"node:path";import*as h0 from"@cline/llms";import{ModelCapabilitySchema as lh,ProviderCapabilitySchema as ph,ProviderClientSchema as rh,ProviderProtocolSchema as ih}from"@cline/shared";import{z as a}from"zod";var nh=a.object({id:a.string().optional(),name:a.string().optional(),maxTokens:a.number().optional(),contextWindow:a.number().optional(),maxInputTokens:a.number().optional(),capabilities:a.array(lh).optional(),supportsVision:a.boolean().optional(),supportsAttachments:a.boolean().optional(),supportsReasoning:a.boolean().optional()}).passthrough(),ah=a.object({name:a.string(),baseUrl:a.string(),defaultModelId:a.string().optional(),protocol:ih.optional(),client:rh.optional(),capabilities:a.array(ph).optional(),modelsSourceUrl:a.string().optional()}).passthrough(),Tf=a.object({provider:ah.optional(),models:a.record(a.string(),nh).optional()}).passthrough(),Of=a.object({version:a.literal(1),providers:a.record(a.string(),Tf)}),sh=a.object({version:a.literal(1),providers:a.record(a.string(),a.unknown())}),E7=new Set;function qf($){return $.split(/[-_]/).filter(Boolean).map((Z)=>Z.charAt(0).toUpperCase()+Z.slice(1)).join(" ")}function l2($){return dh(sX($.getFilePath()),"models.json")}function N7(){return{version:1,providers:{}}}function Mf($){let Z=sh.safeParse($);if(!Z.success)return N7();let Q={};for(let[W,J]of Object.entries(Z.data.providers)){let X=Tf.safeParse(J);if(X.success)Q[W]=X.data}return{version:1,providers:Q}}function oX($){if(!Ih($))return N7();try{let Z=gh($,"utf8");return Mf(JSON.parse(Z))}catch{}return N7()}async function E4($){try{let Z=await ch($,"utf8");return Mf(JSON.parse(Z))}catch{}return N7()}function Rf($,Z){xh(sX($),{recursive:!0});let Q=Of.parse(Z);mh($,`${JSON.stringify(Q,null,2)}
|
|
730
|
+
`,"utf8")}async function w7($,Z){await vh(sX($),{recursive:!0});let Q=Of.parse(Z);await uh($,`${JSON.stringify(Q,null,2)}
|
|
731
|
+
`,"utf8")}function Ef($,Z){return{id:$,name:Z.name??$,supportsAttachments:Z.capabilities?.includes("files"),supportsVision:Z.capabilities?.includes("images"),supportsReasoning:Z.capabilities?.includes("reasoning")||Z.thinkingConfig!=null}}function Nf($){if(!$||$.length===0)return;let Z=new Set;if($.includes("reasoning"))Z.add("reasoning");if($.includes("prompt-cache"))Z.add("prompt-cache");if($.includes("tools"))Z.add("tools");return Z.size>0?[...Z]:void 0}function wf($){let Z=new Set;if(!$||$.length===0)return[...Z];if($.includes("streaming"))Z.add("streaming");if($.includes("tools"))Z.add("tools");if($.includes("reasoning"))Z.add("reasoning");if($.includes("prompt-cache"))Z.add("prompt-cache");if($.includes("vision"))Z.add("images"),Z.add("files");return[...Z]}function oh($){return $!=null&&typeof $.name==="string"&&typeof $.baseUrl==="string"}function Cf($,Z){return $??Z??"openai-chat"}function Pf($,Z,Q){return $??Q??(Z==="openai-responses"?"openai":"openai-compatible")}function Sf($,Z,Q){let W=new Set(Z?.capabilities??Q??[]);if(Z?.supportsVision)W.add("images");if(Z?.supportsAttachments)W.add("files");if(Z?.supportsReasoning)W.add("reasoning");return{id:$,name:Z?.name??$,maxTokens:Z?.maxTokens,contextWindow:Z?.contextWindow,maxInputTokens:Z?.maxInputTokens,capabilities:W.size>0?[...W]:void 0}}function th($,Z){for(let[Q,W]of Object.entries(Z??{})){let J=W.id?.trim()||Q.trim();if(!J)continue;h0.registerModel($,J,Sf(J,W))}}function eh($,Z,Q){return{...Z??{},id:$,name:Z?.name??$,capabilities:Z?.capabilities??Q}}function $k($){return Object.assign({},...h0.resolveProviderModelCatalogKeys($).map((Q)=>h0.getGeneratedModelsForProvider(Q)))}function Zk($){let Z=$.provider.trim();if(!Z||h0.isBuiltInProviderId(Z))return;let Q=$.baseUrl?.trim();if(!Q)return;let W=h0.MODEL_COLLECTIONS_BY_PROVIDER_ID[Z],J=$k(Z),X=wf($.capabilities),Y=X.length>0?X:void 0,j=$.model?.trim(),V={...J,...W?.models??{}};if(j)V[j]=eh(j,V[j],Y);let H=Object.keys(V).filter(Boolean),B=j||H[0];if(!B)return;let G=Cf($.protocol,W?.provider.protocol),K=Pf($.client,G,W?.provider.client);h0.registerProvider({provider:{id:Z,name:W?.provider.name??qf(Z),description:W?.provider.description,protocol:G,client:K,baseUrl:Q,modelsSourceUrl:W?.provider.modelsSourceUrl,defaultModelId:B,capabilities:Nf($.capabilities)??W?.provider.capabilities,source:"file"},models:V})}function C7($){for(let Z of Object.values($.providers))Zk(Z.settings)}function Z9($,Z){let Q=Z.models??{};if(!oh(Z.provider)){th($,Q);return}let W=wf(Z.provider.capabilities),J=Object.entries(Q).map(([H,B])=>({id:B.id?.trim()||H.trim(),model:B})).filter(({id:H})=>H.length>0),X=Z.provider.defaultModelId?.trim()||J[0]?.id||"default",Y=Cf(Z.provider.protocol,void 0),j=Pf(Z.provider.client,Y,void 0),V=Object.fromEntries(J.map(({id:H,model:B})=>[H,{...Sf(H,B,W.length>0?W:void 0),status:"active"}]));h0.registerProvider({provider:{id:$,name:Z.provider.name.trim()||qf($),protocol:Y,client:j,baseUrl:Z.provider.baseUrl,modelsSourceUrl:Z.provider.modelsSourceUrl,defaultModelId:X,capabilities:Nf(Z.provider.capabilities),source:"file"},models:V})}function bf($){let Z=l2($);if(E7.has(Z))return;let Q=oX(Z);for(let[W,J]of Object.entries(Q.providers))Z9(W,J);E7.add(Z)}async function P7($){let Z=l2($);if(E7.has(Z))return;let Q=await E4(Z);for(let[W,J]of Object.entries(Q.providers))Z9(W,J);E7.add(Z)}var hf="cline-pass";function Qk($){return $.apiKey??$.auth?.apiKey}function Wk($){return($.auth?.accessToken?.trim()??"").length>0}function kf($){return $.split(/[-_]/).filter(Boolean).map((Z)=>Z.charAt(0).toUpperCase()+Z.slice(1)).join(" ")}function Jk($){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 Xk($){let Z=["#c4956a","#6b8aad","#e8963a","#5b9bd5","#6bbd7b","#9b7dd4","#d07f68","#57a6a1"],Q=0;for(let W of $)Q=Q*31+W.charCodeAt(0)>>>0;return Z[Q%Z.length]}function If($){return Object.entries($).sort(([Z],[Q])=>Z.localeCompare(Q)).map(([Z,Q])=>Ef(Z,Q))}async function Yk($,Z){let Q=await w0.getModelsForProvider($),W=$===hf;if(!Z&&!W)return Q;let J=await Z5($,{loadLatestOnInit:W,loadPrivateOnAuth:!0,failOnError:!1},Z);if($==="litellm"&&J?.knownModels)return J.knownModels;if(W&&J?.knownModels)return J.knownModels;return J?.knownModels?{...Q,...J.knownModels}:Q}function tX($){return[...new Set(($??[]).map((Z)=>Z.trim()).filter(Boolean))]}function jk($){if(!$?.length)return;return[...new Set($)]}function Vk($,Z){return jk([...$??[],...Z??[]])}function Hk($){let Z=$?.popularRank;return typeof Z==="number"&&Number.isFinite(Z)?Z:Number.MAX_SAFE_INTEGER}function Bk($){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 Gk($){let Z=$?.configFields;if(!Array.isArray(Z))return;return Z.filter(Bk)}var S7={path:"apiKey",label:"API Key",type:"password",placeholder:"Enter API key...",description:"API key issued by the provider.",secret:!0},yf={path:"baseUrl",label:"Base URL",type:"url",placeholder:"https://...",description:"Base endpoint used for provider requests."};function Kk($){if(!$)return[S7];if($.source!=="system")return $.baseUrl?[S7,yf]:[S7];let Z=[];if($.env?.length)Z.push(S7);if($.baseUrl)Z.push(yf);return Z}function Fk($,Z){return Z.split(".").reduce((Q,W)=>{if(!Q||typeof Q!=="object")return;return Q[W]},$)}function Ak($){if(typeof $==="string"||typeof $==="number"||typeof $==="boolean"||$===null)return $;return}function fk($,Z,Q){if(!$?.length)return;let W={};for(let J of $){let Y=Ak(J.path==="baseUrl"&&Z?.baseUrl===void 0?Q?.baseUrl:Fk(Z,J.path))??J.defaultValue;if(Y!==void 0)W[J.path]=Y}return W}function xf($){let Z=Object.entries($??{}).filter(([Q])=>Q.trim().length>0);return Z.length>0?Object.fromEntries(Z):void 0}function eX($,Z){let Q=Z?.includes("vision")??!1,W=Z?.includes("reasoning")??!1;return Object.fromEntries($.map((J)=>[J,{id:J,name:J,supportsVision:Q,supportsAttachments:Q,supportsReasoning:W}]))}async function gf($){if(!$.shouldRecompute)return $.fallbackModelIds??[];let Z=$.modelsSourceUrl?await iZ($.modelsSourceUrl,$.providerId):[];return[...new Set([...$.explicitModels??[],...Z])]}function mf($,Z){let Q=$.read(),W=!1;if(Q.providers[Z])delete Q.providers[Z],W=!0;if(Q.lastUsedProvider===Z)delete Q.lastUsedProvider,W=!0;if(W)$.write(Q);w0.unregisterProvider(Z)}async function $Y($,Z){let Q=Z.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let W=Z.baseUrl.trim(),J=Z.apiKey?.trim()??"";if(!W&&!J){let A=l2($);if((await E4(A)).providers[Q]){let f=await h7($,{providerId:Q});return{providerId:Q,settingsPath:f.settingsPath,modelsPath:f.modelsPath,modelsCount:0}}return mf($,Q),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:A,modelsCount:0}}if(w0.hasProvider(Q))throw Error(`provider "${Q}" already exists`);let X=Z.name.trim();if(!X)throw Error("name is required");if(!W)throw Error("baseUrl is required");let Y=tX(Z.models),j=Z.modelsSourceUrl?.trim(),V=await gf({providerId:Q,explicitModels:Y,modelsSourceUrl:j,shouldRecompute:!0});if(V.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let H=Z.defaultModelId?.trim()&&V.includes(Z.defaultModelId.trim())?Z.defaultModelId.trim():V[0],B=Z.capabilities?.length?[...new Set(Z.capabilities)]:void 0,G=xf(Z.headers);$.saveProviderSettings({provider:Q,apiKey:J||void 0,baseUrl:W,headers:G,timeout:Z.timeoutMs,model:H,protocol:Z.protocol,client:Z.client},{setLastUsed:!1});let K=l2($),F=await E4(K);return F.providers[Q]={provider:{name:X,baseUrl:W,defaultModelId:H,protocol:Z.protocol,client:Z.client,capabilities:B,modelsSourceUrl:j},models:eX(V,B)},await w7(K,F),Z9(Q,F.providers[Q]),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:K,modelsCount:V.length}}async function y7($,Z){let Q=Z.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let W=l2($),J=await E4(W),X=J.providers[Q];if(!X){let q=$.getProviderSettings(Q);if(!q)throw Error(`provider "${Q}" does not exist`);let z=Z.modelsSourceUrl?.trim(),_=tX(Z.models)[0]??q.model?.trim();if(!_&&!z)throw Error(`provider "${Q}" cannot be updated because no model is configured`);X={provider:{name:Z.name?.trim()||kf(Q),baseUrl:Z.baseUrl?.trim()??q.baseUrl?.trim()??"",defaultModelId:_,protocol:q.protocol,client:q.client,capabilities:q.capabilities},models:_?eX([_],q.capabilities):{}}}if(!X.provider)throw Error(`provider "${Q}" cannot be updated because it is a model overlay (no provider metadata)`);let Y=Z.name?.trim()??X.provider.name.trim();if(!Y)throw Error("name is required");let j=Z.baseUrl?.trim()??X.provider.baseUrl.trim();if(!j)throw Error("baseUrl is required");let V=Z.capabilities===void 0?X.provider.capabilities:Z.capabilities===null?void 0:[...new Set(Z.capabilities)],H=Z.protocol===void 0?X.provider.protocol:Z.protocol??void 0,B=Z.client===void 0?X.provider.client:Z.client??void 0,G=tX(Z.models),K=Z.modelsSourceUrl===void 0?X.provider.modelsSourceUrl:Z.modelsSourceUrl?.trim()||void 0,F=Z.models!==void 0||Z.modelsSourceUrl!==void 0&&!!K,A=Object.keys(X.models??{}).map((q)=>q.trim()).filter(Boolean),L=await gf({providerId:Q,explicitModels:G,modelsSourceUrl:K,fallbackModelIds:A,shouldRecompute:F});if(L.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let f=Z.defaultModelId===void 0?X.provider.defaultModelId?.trim():Z.defaultModelId?.trim(),D=f&&L.includes(f)?f:L[0],T={...$.getProviderSettings(Q)??{},provider:Q,baseUrl:j,model:D};if(H)T.protocol=H;else delete T.protocol;if(B)T.client=B;else delete T.client;if(Z.apiKey!==void 0){let q=Z.apiKey?.trim()??"";if(q)T.apiKey=q;else delete T.apiKey}if(Z.headers!==void 0){let q=xf(Z.headers);if(q)T.headers=q;else delete T.headers}if(Z.timeoutMs!==void 0)if(typeof Z.timeoutMs==="number")T.timeout=Z.timeoutMs;else delete T.timeout;return $.saveProviderSettings(T,{setLastUsed:!1}),J.providers[Q]={provider:{name:Y,baseUrl:j,defaultModelId:D,protocol:H,client:B,capabilities:V,modelsSourceUrl:K},models:eX(L,V)},await w7(W,J),Z9(Q,J.providers[Q]),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:W,modelsCount:L.length}}async function h7($,Z){let Q=Z.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let W=l2($),J=await E4(W);if(!J.providers[Q])throw Error(`provider "${Q}" does not exist`);return delete J.providers[Q],await w7(W,J),w0.unregisterProvider(Q),mf($,Q),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:W}}async function ZY($,Z={}){let Q=$.read(),W=w0.getProviderIds(),J=await Promise.all(W.map(async(Y)=>{let[j,V]=await Promise.all([w0.getProvider(Y),w0.getModelsForProvider(Y)]),H=If(V),B=Q.providers[Y]?.settings,G=j?.name??kf(Y),K=Vk(j?.capabilities,B?.capabilities),F=Gk(j?.metadata)??Kk(j);return{provider:{id:Y,name:G,models:H.length,color:Xk(Y),letter:Jk(G),enabled:Boolean(B),apiKey:B?Qk(B):void 0,oauthAccessTokenPresent:B?Wk(B):void 0,baseUrl:B?.baseUrl??j?.baseUrl,defaultModelId:j?.defaultModelId,protocol:B?.protocol??j?.protocol,client:B?.client??j?.client,capabilities:K,authDescription:"This provider uses API keys for authentication.",baseUrlDescription:"The base endpoint to use for provider requests.",configFields:F,configValues:fk(F,B,j),modelList:H},rank:Hk(j?.metadata)}}));J.sort((Y,j)=>{if(Y.rank!==j.rank)return Y.rank-j.rank;return Y.provider.name.localeCompare(j.provider.name)||Y.provider.id.localeCompare(j.provider.id)});let X=J.map((Y)=>Y.provider);if(Z.isClinePassEnabled!==!0)X=X.filter((Y)=>Y.id!==hf);return{providers:X,settingsPath:$.getFilePath()}}async function QY($,Z){let Q=$.trim(),W=await Yk(Q,Z),J=If(W);return{providerId:Q,models:J}}function b7($){return $!=null&&typeof $==="object"&&!Array.isArray($)}function vf($,Z){if(!b7(Z))return b7($)?{...$}:void 0;let Q=b7($)?{...$}:{};for(let[W,J]of Object.entries(Z)){if(J==null||J===""){delete Q[W];continue}if(b7(J)){let X=vf(Q[W],J);if(X&&Object.keys(X).length>0)Q[W]=X;else delete Q[W];continue}Q[W]=J}return Object.keys(Q).length>0?Q:void 0}function WY($,Z){let Q=Z.providerId.trim();if(Z.enabled===!1){let X=$.read();if(delete X.providers[Q],X.lastUsedProvider===Q)delete X.lastUsedProvider;return $.write(X),{providerId:Q,enabled:!1,settingsPath:$.getFilePath()}}let J={...$.getProviderSettings(Q)??{},provider:Q};for(let X of["apiKey","baseUrl","model","region"])if(Object.hasOwn(Z,X)&&typeof Z[X]==="string")if(Z[X].trim().length===0)delete J[X];else J[X]=Z[X];for(let X of["maxTokens","contextWindow","timeout","apiLine","protocol","client","routingProviderId","capabilities"])if(Object.hasOwn(Z,X))J[X]=Z[X];for(let X of["auth","headers","reasoning","aws","gcp","azure","sap","oca"])if(Object.hasOwn(Z,X)&&Z[X]!=null){let Y=vf(J[X],Z[X]);if(Y)J[X]=Y;else delete J[X]}return $.saveProviderSettings(J,{setLastUsed:!1}),{providerId:Q,enabled:!0,settingsPath:$.getFilePath()}}async function JY($,Z){let Q=Z.trim(),W=$.getProviderSettings(Q),X=w0.MODEL_COLLECTIONS_BY_PROVIDER_ID[Q]?.provider,Y=W?.baseUrl?.trim()||X?.baseUrl?.trim(),j=nZ(Y,X?.baseUrl,X?.modelsSourceUrl);if(!W||!X||!Y||!j)return{providerId:Q,refreshed:!1};let V=await y7($,{providerId:Q,name:X.name,baseUrl:Y,apiKey:W.apiKey,headers:W.headers??null,timeoutMs:W.timeout??null,modelsSourceUrl:j,protocol:W.protocol??X.protocol??null,client:W.client??X.client??null,capabilities:W.capabilities??null});return{providerId:Q,refreshed:!0,modelsCount:V.modelsCount}}function XY($){let Z=$.trim().toLowerCase(),Q=j0(Z);if(Q)return Q.providerId;throw Error(`provider "${$}" does not support OAuth login`)}async function YY($,Z,Q,W){let J=j0($);if(!J)throw Error(`provider "${$}" does not support OAuth login`);let X=n8({onPrompt:async(Y)=>Y.defaultValue??"",openUrl:Q,onOpenUrlError:({error:Y})=>{throw Y instanceof Error?Y:Error(String(Y))}});return J.login({settings:Z,callbacks:X,telemetry:W})}function jY($,Z,Q,W,J){return W2({manager:$,providerId:Z,settings:Q,credentials:W,setLastUsed:J?.setLastUsed})}async function VY($,Z,Q,W){let J=n8({onPrompt:async(X)=>X.defaultValue??"",openUrl:Q,onOpenUrlError:({error:X})=>{throw X instanceof Error?X:Error(String(X))}});return X6($,Z,{callbacks:J,telemetry:W})}function HY($){let Z=$?.auth?.accessToken?.trim()||$?.apiKey?.trim();return Z&&Z.length>0?Z:void 0}var uf={};N(uf,{getProviderConfigFields:()=>BY});import*as k7 from"@cline/llms";var Uk=["apiKey","baseUrl","azureApiVersion","awsRegion","awsProfile","gcpProjectId","gcpRegion","sapClientId","sapClientSecret","sapTokenUrl","sapResourceGroup","sapDeploymentId"],Dk={"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 Lk($,Z){let Q={};for(let W of Uk){let J=$[W],X=Z[W];if(J||X)Q[W]={...J,...X}}return Q}function _k($){let Z=Dk[$.providerId];if(!Z)return $;return{...$,description:Z.description??$.description,fields:Z.mode==="replace"?Z.fields:Lk($.fields,Z.fields)}}var zk=new Set(["ollama","lmstudio","litellm","openai-compatible"]);function Tk($,Z){if(!Z?.provider.baseUrl)return!1;if(Z.provider.source!=="system")return!0;return zk.has($)}function BY($){let Z=k7.normalizeProviderId($);if(Q2(Z))return{providerId:Z,authMethod:"oauth",fields:{}};let Q=k7.MODEL_COLLECTIONS_BY_PROVIDER_ID[Z];if(Q?.provider.capabilities?.includes("local-auth"))return{providerId:Z,authMethod:"local",fields:{}};let W=Q?.provider.baseUrl,J={apiKey:{}};if(Tk(Z,Q))J.baseUrl={defaultValue:W};return _k({providerId:Z,authMethod:"api-key",fields:J})}var rf={};N(rf,{resolveLegacyClineAuth:()=>FY,migrateLegacyProviderSettings:()=>Q9});import{existsSync as Ok,readFileSync as qk}from"node:fs";import{dirname as Mk,join as GY}from"node:path";import*as N4 from"@cline/llms";import{resolveClineDataDir as Rk}from"@cline/shared/storage";var I7="openai",pf=N4.BUILT_IN_PROVIDER.OPENAI_COMPATIBLE,df=128000;function FY($){let Z=$?.trim();if(!Z)return;try{let Q=JSON.parse(Z);if(!Q)return;let W=typeof Q.expiresAt==="number"&&Number.isFinite(Q.expiresAt)?Q.expiresAt<10000000000?Q.expiresAt*1000:Q.expiresAt:void 0;return{accessToken:Q.idToken,refreshToken:Q.refreshToken,expiresAt:W,accountId:Q.userInfo?.id}}catch{return}}function b($){let Z=$?.trim();return Z?Z:void 0}function Ek($){return $==="credentials"?"iam":$}function lf($){if(!Ok($))return;try{let Z=qk($,"utf8"),Q=JSON.parse(Z);if(Q&&typeof Q==="object"&&!Array.isArray(Q))return Q}catch{}return}function Nk($){let Z=$.dataDir??Rk(),Q=$.globalStatePath??GY(Z,"globalState.json"),W=$.secretsPath??GY(Z,"secrets.json"),J=lf(Q),X=lf(W);if(!J&&!X)return;return{globalState:J??{},secrets:X??{}}}function KY($){if($===I7)return pf;return $}function wk($,Z,Q,W){let J=Q==="plan"?"planMode":"actMode",X=Z===W?b(Q==="plan"?$.planModeApiModelId:$.actModeApiModelId):void 0,j={openrouter:`${J}OpenRouterModelId`,cline:`${J}ClineModelId`,openai:`${J}OpenAiModelId`,ollama:`${J}OllamaModelId`,lmstudio:`${J}LmStudioModelId`,litellm:`${J}LiteLlmModelId`,requesty:`${J}RequestyModelId`,together:`${J}TogetherModelId`,fireworks:`${J}FireworksModelId`,sapaicore:`${J}SapAiCoreModelId`,groq:`${J}GroqModelId`,baseten:`${J}BasetenModelId`,huggingface:`${J}HuggingFaceModelId`,"huawei-cloud-maas":`${J}HuaweiCloudMaasModelId`,oca:`${J}OcaModelId`,aihubmix:`${J}AihubmixModelId`,hicap:`${J}HicapModelId`,nousResearch:`${J}NousResearchModelId`,"vercel-ai-gateway":`${J}VercelAiGatewayModelId`}[Z];return(j?b(typeof $[j]==="string"?$[j]:void 0):void 0)??X}function Ck($,Z,Q){let W=Q==="plan"?$.planModeThinkingBudgetTokens:$.actModeThinkingBudgetTokens,J=[...Z==="oca"?[$.actModeOcaReasoningEffort,$.planModeOcaReasoningEffort]:[],...Z==="gemini"?[$.geminiActModeThinkingLevel,$.geminiPlanModeThinkingLevel]:[],$.actModeReasoningEffort,$.planModeReasoningEffort].map(b).find(Boolean),X=J==="none"||J==="low"||J==="medium"||J==="high"||J==="xhigh"?J:void 0,Y=typeof W==="number"&&Number.isInteger(W)&&W>0?W:void 0;if(!X&&Y===void 0)return;return{...X?{effort:X}:{},...Y!==void 0?{budgetTokens:Y}:{}}}function Pk($){let Z=$["openai-codex-oauth-credentials"];if(!Z)return;try{let Q=JSON.parse(Z),W=b(Q.access_token),J=b(Q.refresh_token),X=b(Q.accountId);if(!W&&!J&&!X)return;return{...W?{apiKey:W}:{},auth:{...W?{accessToken:W}:{},...J?{refreshToken:J}:{},...X?{accountId:X}:{}}}}catch{return}}function Sk($){let Z=N4.getGeneratedModelsForProvider($),W=N4.getProviderCollectionSync($)?.provider.defaultModelId;if(W&&Z[W])return W;return Object.keys(Z)[0]??void 0}function bk($,Z,Q,W){let J=KY($),X=b(W==="plan"?Z.planModeApiProvider:Z.actModeApiProvider),Y=wk(Z,$,W,X)??Sk(J),j=Ck(Z,J,W),V=typeof Z.requestTimeoutMs==="number"&&Number.isInteger(Z.requestTimeoutMs)&&Z.requestTimeoutMs>0?Z.requestTimeoutMs:void 0,H={anthropic:Q.apiKey,cline:Q.clineApiKey,openai:Q.openAiApiKey,"openai-native":Q.openAiNativeApiKey,openrouter:Q.openRouterApiKey,bedrock:Q.awsBedrockApiKey,gemini:Q.geminiApiKey,ollama:Q.ollamaApiKey,deepseek:Q.deepSeekApiKey,requesty:Q.requestyApiKey,together:Q.togetherApiKey,fireworks:Q.fireworksApiKey,qwen:Q.qwenApiKey,doubao:Q.doubaoApiKey,mistral:Q.mistralApiKey,litellm:Q.liteLlmApiKey,asksage:Q.asksageApiKey,xai:Q.xaiApiKey,moonshot:Q.moonshotApiKey,zai:Q.zaiApiKey,huggingface:Q.huggingFaceApiKey,nebius:Q.nebiusApiKey,sambanova:Q.sambanovaApiKey,cerebras:Q.cerebrasApiKey,groq:Q.groqApiKey,"huawei-cloud-maas":Q.huaweiCloudMaasApiKey,baseten:Q.basetenApiKey,"vercel-ai-gateway":Q.vercelAiGatewayApiKey,dify:Q.difyApiKey,minimax:Q.minimaxApiKey,hicap:Q.hicapApiKey,aihubmix:Q.aihubmixApiKey,nousResearch:Q.nousResearchApiKey,oca:Q.ocaApiKey},B={};if($==="openai-codex")Object.assign(B,Pk(Q));if($==="cline")try{let D=b(Q["cline:clineAccountId"]);if(D)B.auth={...B.auth??{},...FY(D)}}catch{}if($===I7&&Z.openAiHeaders)B.headers=Z.openAiHeaders;if($==="bedrock"){let D=Ek(Z.awsAuthentication),U=D==="profile"||Z.awsUseProfile===!0;B.aws={accessKey:b(Q.awsAccessKey),secretKey:b(Q.awsSecretKey),sessionToken:b(Q.awsSessionToken),region:b(Z.awsRegion),authentication:D,profile:U?b(Z.awsProfile):void 0,usePromptCache:Z.awsBedrockUsePromptCache,useCrossRegionInference:Z.awsUseCrossRegionInference,useGlobalInference:Z.awsUseGlobalInference,endpoint:b(Z.awsBedrockEndpoint),customModelBaseId:b(W==="plan"?Z.planModeAwsBedrockCustomModelBaseId:Z.actModeAwsBedrockCustomModelBaseId)}}if($==="vertex")B.gcp={projectId:b(Z.vertexProjectId),region:b(Z.vertexRegion)};if($===I7&&(Z.azureApiVersion||Z.azureIdentity!==void 0))B.azure={apiVersion:b(Z.azureApiVersion),useIdentity:Z.azureIdentity};if($==="sapaicore"){let D=Z.sapAiCoreUseOrchestrationMode??!0;B.sap={clientId:b(Q.sapAiCoreClientId),clientSecret:b(Q.sapAiCoreClientSecret),tokenUrl:b(Z.sapAiCoreTokenUrl),resourceGroup:b(Z.sapAiResourceGroup),deploymentId:D?void 0:b(W==="plan"?Z.planModeSapAiCoreDeploymentId:Z.actModeSapAiCoreDeploymentId),useOrchestrationMode:D}}if($==="oca"){B.oca={mode:Z.ocaMode};let D=b(Q.ocaRefreshToken);if(D)B.auth={...B.auth??{},refreshToken:D}}if($==="qwen")B.apiLine=Z.qwenApiLine;if($==="moonshot")B.apiLine=Z.moonshotApiLine;if($==="zai")B.apiLine=Z.zaiApiLine;if($==="minimax")B.apiLine=Z.minimaxApiLine;let G={anthropic:Z.anthropicBaseUrl,openai:Z.openAiBaseUrl,ollama:Z.ollamaBaseUrl,lmstudio:Z.lmStudioBaseUrl,litellm:Z.liteLlmBaseUrl,gemini:Z.geminiBaseUrl,requesty:Z.requestyBaseUrl,asksage:Z.asksageApiUrl,dify:Z.difyBaseUrl,oca:Z.ocaBaseUrl,aihubmix:Z.aihubmixBaseUrl,sapaicore:Z.sapAiCoreBaseUrl},K=b(H[$]),F=b(G[$]),A={provider:J,...K?{apiKey:K}:{},...Y?{model:Y}:{},...F?{baseUrl:F}:{},...j?{reasoning:j}:{},...V?{timeout:V}:{},...B},L=p8.safeParse(A);if(!L.success)return;return Object.keys(A).filter((D)=>D!=="provider").length>0?L.data:void 0}function yk($,Z){if($!==pf)return;if(!Z.baseUrl||!Z.model)return;return{provider:{name:"OpenAI Compatible",baseUrl:Z.baseUrl,defaultModelId:Z.model},models:{[Z.model]:{id:Z.model,name:Z.model,contextWindow:df,maxInputTokens:df,capabilities:["streaming","tools","images"]}}}}function hk($,Z){let Q=new Set;for(let J of[$.actModeApiProvider,$.planModeApiProvider]){let X=b(J);if(X)Q.add(X)}if(b(Z.apiKey))Q.add("anthropic");if(b(Z.openRouterApiKey))Q.add("openrouter");if(b(Z.openAiApiKey))Q.add(I7);if(b(Z.openAiNativeApiKey))Q.add("openai-native");if(b(Z["openai-codex-oauth-credentials"]))Q.add("openai-codex");if(b(Z.geminiApiKey))Q.add("gemini");if(b(Z.ollamaApiKey))Q.add("ollama");if(b(Z.awsAccessKey)||b(Z.awsBedrockApiKey)||$.awsAuthentication!==void 0||$.awsUseProfile===!0||b($.awsProfile))Q.add("bedrock");if(b($.vertexProjectId)||b($.vertexRegion))Q.add("vertex");if(b(Z.clineApiKey))Q.add("cline");let W=FY(b(Z["cline:clineAccountId"]));if(W?.accessToken||W?.refreshToken||W?.accountId)Q.add("cline");if(b(Z.ocaApiKey))Q.add("oca");if(b(Z.sapAiCoreClientId)||b(Z.sapAiCoreClientSecret)||b($.sapAiCoreTokenUrl)||b($.sapAiCoreBaseUrl)||b($.sapAiResourceGroup)||$.sapAiCoreUseOrchestrationMode!==void 0)Q.add("sapaicore");return Q}function Q9($){let Z=$.providerSettingsManager.read(),Q=Nk($);if(!Q)return{migrated:!1,providerCount:Object.keys(Z.providers).length,lastUsedProvider:Z.lastUsedProvider};let{globalState:W,secrets:J}=Q,X=W.mode==="plan"?"plan":"act",Y=hk(W,J),j=S$();j.providers={...Z.providers},j.lastUsedProvider=Z.lastUsedProvider;let V=new Date().toISOString(),H=0,B=GY(Mk($.providerSettingsManager.getFilePath()),"models.json"),G=oX(B),K=0;for(let L of Y){let f=KY(L);if(j.providers[f])continue;let D=bk(L,W,J,X);if(!D)continue;j.providers[f]={settings:D,updatedAt:V,tokenSource:"migration"},H+=1;let U=yk(f,D);if(U&&!G.providers[f])G.providers[f]=U,K+=1}if(H===0&&K===0)return{migrated:!1,providerCount:Object.keys(Z.providers).length,lastUsedProvider:Z.lastUsedProvider};let F=b(X==="plan"?W.planModeApiProvider:W.actModeApiProvider),A=F?KY(F):void 0;if(j.lastUsedProvider=Z.lastUsedProvider??(A&&j.providers[A]?A:Object.keys(j.providers)[0]),$.providerSettingsManager.write(j),K>0)Rf(B,G);return{migrated:H>0||K>0,providerCount:Object.keys(j.providers).length,lastUsedProvider:j.lastUsedProvider}}$7();_0();u9();var nf={};N(nf,{SessionVersioningService:()=>c$,SessionVersioningError:()=>k0});class k0 extends Error{code;constructor($,Z){super(Z);this.code=$;this.name="SessionVersioningError"}}function kk($){let Z=$.sessionId.trim();if(!Z)throw new k0("invalid_restore","sessionId is required");if(!$.restoreMessages&&!$.restoreWorkspace)throw new k0("invalid_restore","restore.messages or restore.workspace must be true");if($.restoreMessages&&$.requiresStart)throw new k0("invalid_restore","start is required when restore.messages is true");if(!Number.isInteger($.checkpointRunCount)||$.checkpointRunCount<1)throw new k0("invalid_restore","checkpointRunCount must be a positive integer");return Z}class c${async restoreCheckpoint($){let Z=$.restore?.messages!==!1,Q=$.restore?.workspace!==!1,W=kk({sessionId:$.sessionId,restoreMessages:Z,restoreWorkspace:Q,requiresStart:$.start===void 0,checkpointRunCount:$.checkpointRunCount}),J=await $.getSession(W);if(!J)throw new k0("session_not_found",`Session ${W} not found`);let X=Z?await $.readMessages(W):void 0;if(Z&&X?.length===0)throw new k0("session_messages_not_found",`No messages found for session ${W}`);let Y=fX({session:J,messages:X,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd,restoreMessages:Z});if(Q)await($.applyWorkspaceCheckpoint??UX)(Y.cwd,Y.checkpoint);let j=U1({session:J,messages:X});if(!Z)return{checkpoint:Y.checkpoint,sourceSnapshot:j};let V=FX(J,$.checkpointRunCount),H=$.restore?.omitCheckpointMessageFromSession?AX(X??[],$.checkpointRunCount):Y.messages??[],B={sourceSession:J,sourceMessages:X,sourceSnapshot:j,plan:Y,restoredCheckpointMetadata:V,initialMessages:H,restoreMessages:Z,restoreWorkspace:Q,checkpointRunCount:$.checkpointRunCount};if(!$.start||!$.startSession)throw new k0("invalid_restore","start is required when restore.messages is true");let G=$.buildStartInput?await $.buildStartInput(B,$.start):$.start,K=await $.startSession(G),F=$.getStartedSessionId?.(K);if(F)await($.retainCheckpointRefs??bG)(Y.cwd,F,V?.history??[]);let A=F&&$.readRestoredSession?await $.readRestoredSession(F):void 0;return{sessionId:F,startResult:K,messages:Y.messages,checkpoint:Y.checkpoint,sourceSnapshot:j,...A?{restoredSnapshot:U1({session:A,messages:H})}:{}}}}var af={};N(af,{FileTeamPersistenceStore:()=>x7});import{appendFileSync as Ik,existsSync as AY,mkdirSync as xk,readFileSync as gk,renameSync as mk,unlinkSync as vk,writeFileSync as ck}from"node:fs";import{join as fY}from"node:path";import{resolveTeamDataDir as uk}from"@cline/shared/storage";function dk($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}class x7{dirPath;statePath;taskHistoryPath;teammateSpecs=new Map;constructor($){let Z=dk($.teamName),Q=$.baseDir?.trim()||uk();this.dirPath=fY(Q,Z),this.statePath=fY(this.dirPath,"state.json"),this.taskHistoryPath=fY(this.dirPath,"task-history.jsonl")}loadState(){if(!AY(this.statePath))return;try{let $=gk(this.statePath,"utf8"),Z=JSON.parse($);if(Z.version!==1||!Z.teamState)return;for(let Q of Z.teammates??[])this.teammateSpecs.set(Q.agentId,Q);return AA(Z.teamState)}catch{return}}getTeammateSpecs(){return Array.from(this.teammateSpecs.values())}upsertTeammateSpec($){this.teammateSpecs.set($.agentId,$)}removeTeammateSpec($){this.teammateSpecs.delete($)}persist($){if(!this.hasPersistableState($)){this.clearPersistedState();return}this.ensureDir();let Z={version:1,updatedAt:new Date().toISOString(),teamState:$.exportState(),teammates:Array.from(this.teammateSpecs.values())},Q=`${this.statePath}.tmp`;ck(Q,`${JSON.stringify(Z,null,2)}
|
|
732
|
+
`,"utf8"),mk(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(),Ik(this.taskHistoryPath,`${JSON.stringify({ts:new Date().toISOString(),type:$.type,task:Z})}
|
|
733
|
+
`,"utf8")}ensureDir(){if(!AY(this.dirPath))xk(this.dirPath,{recursive:!0})}hasPersistableState($){let Z=$.exportState();if(this.teammateSpecs.size>0)return!0;if(Z.members.some((Q)=>Q.role==="teammate"))return!0;return Z.tasks.length>0||Z.mailbox.length>0||Z.missionLog.length>0}clearPersistedState(){if(AY(this.statePath))vk(this.statePath)}}var sf={};N(sf,{ChatViewStateSchema:()=>UY,ChatSummarySchema:()=>u7,ChatSessionStatusSchema:()=>m7,ChatSessionConfigSchema:()=>g7,ChatMessageSchema:()=>c7,ChatMessageRoleSchema:()=>v7});import{z as h}from"zod";var g7=h.object({workspaceRoot:h.string().min(1),cwd:h.string().optional(),provider:h.string().min(1),model:h.string().min(1),mode:h.enum(["act","plan"]).default("act"),apiKey:h.string(),systemPrompt:h.string().optional(),rules:h.string().optional(),maxIterations:h.number().int().positive().optional(),enableTools:h.boolean(),enableSpawn:h.boolean().optional(),enableTeams:h.boolean().optional(),autoApproveTools:h.boolean().optional(),missionStepInterval:h.number().int().positive().optional(),missionTimeIntervalMs:h.number().int().positive().optional()}),m7=h.enum(["idle","starting","running","pending","stopping","completed","cancelled","failed","error"]),v7=h.enum(["user","assistant","tool","system","status","error"]),c7=h.object({id:h.string().min(1),sessionId:h.string().nullable(),role:v7,content:h.string(),createdAt:h.number().int().nonnegative(),meta:h.object({stream:h.enum(["stdout","stderr"]).optional(),toolName:h.string().optional(),iteration:h.number().int().nonnegative().optional(),agentId:h.string().optional(),conversationId:h.string().optional(),hookEventName:h.string().optional(),inputTokens:h.number().int().nonnegative().optional(),outputTokens:h.number().int().nonnegative().optional(),checkpoint:h.object({ref:h.string(),createdAt:h.number().int().nonnegative(),runCount:h.number().int().positive(),kind:h.enum(["stash","commit"]).optional()}).optional()}).optional()}),u7=h.object({toolCalls:h.number().int().nonnegative(),tokensIn:h.number().int().nonnegative(),tokensOut:h.number().int().nonnegative()}),UY=h.object({sessionId:h.string().nullable(),status:m7,config:g7,messages:h.array(c7),rawTranscript:h.string(),error:h.string().nullable(),summary:u7});var of={};N(of,{CORE_BUILD_VERSION:()=>DY});var DY=rj;import{Agent as II,createAgentRuntime as xI}from"@cline/agents";var tf={};N(tf,{fetchClineRecommendedModels:()=>_Y,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>d7});import{getClineEnvironmentConfig as lk}from"@cline/shared";var pk=5000,d7={recommended:[{id:"anthropic/claude-opus-4.6",name:"Claude Opus 4.6",description:"Most intelligent model for agents and coding",tags:["BEST"]},{id:"anthropic/claude-sonnet-4.6",name:"Claude Sonnet 4.6",description:"Strong coding and agent performance",tags:["NEW"]},{id:"google/gemini-3.1-pro-preview",name:"Gemini 3.1 Pro Preview",description:"1M context window, strong coding performance",tags:["NEW"]},{id:"openai/gpt-5.3-codex",name:"GPT-5.3 Codex",description:"OpenAI's latest with strong coding abilities",tags:["NEW"]}],free:[{id:"kwaipilot/kat-coder-pro",name:"KwaiKAT Kat Coder Pro",description:"Advanced agentic coding model",tags:["FREE"]},{id:"arcee-ai/trinity-large-preview:free",name:"Arcee AI Trinity Large Preview",description:"Advanced large preview model",tags:["FREE"]}],clinePass:[]};function rk($){return{recommended:$.recommended.map((Z)=>({...Z,tags:[...Z.tags]})),free:$.free.map((Z)=>({...Z,tags:[...Z.tags]})),clinePass:$.clinePass.map((Z)=>({...Z,tags:[...Z.tags]}))}}function LY($){if(!$||typeof $!=="object")return null;let Z=$;if(typeof Z.id!=="string"||Z.id.length===0)return null;return{id:Z.id,name:typeof Z.name==="string"&&Z.name.length>0?Z.name:Z.id,description:typeof Z.description==="string"?Z.description:"",tags:Array.isArray(Z.tags)?Z.tags.filter((Q)=>typeof Q==="string"):[]}}function ik($){if(!$||typeof $!=="object")return null;let Z=$,Q=Array.isArray(Z.recommended)?Z.recommended:[],W=Array.isArray(Z.free)?Z.free:[],J=Array.isArray(Z.clinePass)?Z.clinePass:[],X=Q.map(LY).filter((V)=>V!==null),Y=W.map(LY).filter((V)=>V!==null),j=J.map(LY).filter((V)=>V!==null);if(X.length===0&&Y.length===0&&j.length===0)return null;return{recommended:X,free:Y,clinePass:j}}function nk($){let Z=$.baseUrl?.trim();if(Z)return Z;let Q=lk().apiBaseUrl;try{return($.providerSettingsManager??new q1).getProviderSettings("cline")?.baseUrl?.trim()||Q}catch{return Q}}async function ak($,Z,Q){let W=new AbortController,J=setTimeout(()=>W.abort(),Q);try{return await $(Z,{signal:W.signal})}finally{clearTimeout(J)}}async function _Y($={}){try{let Z=nk($),Q=$.fetchImpl??fetch,W=await ak(Q,`${Z}/api/v1/ai/cline/recommended-models`,$.timeoutMs??pk);if(!W.ok)throw Error(`HTTP ${W.status}`);let J=await W.json(),X=ik(J);if(X)return X}catch{}return rk(d7)}var ef={};N(ef,{loadLlmsConfigFromFile:()=>TY,defineLlmsConfig:()=>zY});import{readFile as sk}from"node:fs/promises";import ok from"node:path";function zY($){return $}async function TY($){let Z=ok.resolve($),Q=await sk(Z,"utf8"),W;try{W=JSON.parse(Q)}catch(J){let X=J instanceof Error?J.message:String(J);throw Error(`Failed to parse JSON config at "${Z}": ${X}`)}return tk(W,Z)}function tk($,Z){if(!$||typeof $!=="object")throw Error(`Invalid llms config in "${Z}": expected an object.`);let W=$.providers;if(!Array.isArray(W))throw Error(`Invalid llms config in "${Z}": "providers" must be an array.`);if(!W.length)throw Error(`Invalid llms config in "${Z}": "providers" cannot be empty.`);return $}var XU={};N(XU,{createLlmsSdk:()=>qY,DefaultLlmsSdk:()=>W9});import{BUILT_IN_PROVIDER_IDS as QU,createHandler as ZI,createHandlerAsync as QI,getProviderCollection as WI,hasProvider as WU,registerAsyncHandler as JI,registerHandler as XI,registerModel as YI,registerProvider as JU}from"@cline/llms";function $U($){return $?{...$}:{}}function ek($,Z){if($)return $;if(!Z)return;let Q=globalThis.process;if(!Q?.env)return;return Q.env[Z]}function $I($,Z){if(!Z.length)throw Error(`Provider "${$}" must include at least one model.`)}function ZU($){let Z=Object.keys($.collection.models);return{id:$.collection.provider.id,name:$.collection.provider.name,description:$.collection.provider.description,protocol:$.collection.provider.protocol,baseUrl:$.collection.provider.baseUrl,capabilities:$.collection.provider.capabilities,env:$.collection.provider.env,models:Z,defaultModel:$.collection.provider.defaultModelId,modelCount:Z.length}}class OY{providers=new Map;register($){$I($.id,$.models);let Z=$.defaultModel??$.models[0];if(!Z)throw Error(`Provider "${$.id}" must define a default model.`);if(!$.models.includes(Z))throw Error(`Default model "${Z}" is not included in configured models for "${$.id}".`);let Q=this.providers.get($.id);this.providers.set($.id,{id:$.id,models:new Set([...Q?.models??[],...$.models]),defaultModel:Z,defaults:{...Q?.defaults??{},...$U($.defaults)}})}registerSelectionConfig($){this.register({id:$.id,models:$.models,defaultModel:$.defaultModel,defaults:{apiKey:ek($.apiKey,$.apiKeyEnv),routingProviderId:$.builtinProviderId,baseUrl:$.baseUrl,headers:$.headers,timeoutMs:$.timeoutMs,capabilities:$.capabilities,...$U($.settings)}})}registerModel($,Z){let Q=this.providers.get($);if(!Q){this.providers.set($,{id:$,models:new Set([Z]),defaultModel:Z,defaults:{}});return}Q.models.add(Z)}createHandlerConfig($){let Z=this.require($.providerId),Q=$.modelId??Z.defaultModel;if(!Z.models.has(Q))throw Error(`Model "${Q}" is not configured for provider "${$.providerId}".`);return{providerId:$.providerId,modelId:Q,...Z.defaults,...$.overrides}}list(){return Array.from(this.providers.values()).map(($)=>({id:$.id,models:Array.from($.models),defaultModel:$.defaultModel}))}getModels($){return Array.from(this.require($).models)}hasProvider($){return this.providers.has($)}hasModel($,Z){return this.providers.get($)?.models.has(Z)??!1}require($){let Z=this.providers.get($);if(!Z)throw Error(`Provider "${$}" is not configured in this SDK instance.`);return Z}}class W9{configuredProviders=new OY;constructor($){this.applyConfig($)}createHandler($){return ZI(this.configuredProviders.createHandlerConfig($))}async createHandlerAsync($){return QI(this.configuredProviders.createHandlerConfig($))}registerProvider($){if(JU($.collection),$.handlerFactory&&$.asyncHandlerFactory)throw Error(`Provider "${$.collection.provider.id}" cannot register both sync and async handlers.`);if($.handlerFactory)XI($.collection.provider.id,$.handlerFactory);if($.asyncHandlerFactory)JI($.collection.provider.id,$.asyncHandlerFactory);this.configuredProviders.register({id:$.collection.provider.id,models:$.exposeModels??Object.keys($.collection.models),defaultModel:$.defaultModel??$.collection.provider.defaultModelId,defaults:$.defaults})}registerBuiltinProvider($){let Z=$.exposeModels??Object.keys($.models),Q=$.defaultModel??Z[0];if(!Q)throw Error(`Provider "${$.id}" must define a default model.`);JU({provider:{id:$.id,name:$.name??$.id,description:$.description,protocol:$.protocol,baseUrl:$.baseUrl,defaultModelId:Q,client:$.client??"openai-compatible",capabilities:$.capabilities,env:$.env,source:"system"},models:$.models}),this.configuredProviders.register({id:$.id,models:Z,defaultModel:Q,defaults:{routingProviderId:$.builtinProviderId,...$.defaults??{}}})}registerModel($){YI($.providerId,$.modelId,$.info),this.configuredProviders.registerModel($.providerId,$.modelId)}getProviders(){return this.configuredProviders.list()}getBuiltInProviderIds(){return[...QU]}async getBuiltInProviders(){return(await Promise.all(QU.map((Z)=>WI(Z)))).filter((Z)=>Z!==void 0).map((Z)=>ZU({collection:Z}))}getModels($){return this.configuredProviders.getModels($)}isProviderConfigured($){return this.configuredProviders.hasProvider($)}isModelConfigured($,Z){return this.configuredProviders.hasModel($,Z)}applyConfig($){for(let Z of $.providers)this.configuredProviders.registerSelectionConfig(Z);for(let Z of $.models??[])this.registerModel(Z);for(let Z of $.customProviders??[])this.registerProvider(Z);for(let Z of this.configuredProviders.list()){let Q=WU(Z.id),W=this.configuredProviders.createHandlerConfig({providerId:Z.id,modelId:Z.defaultModel}).routingProviderId,J=typeof W==="string"&&WU(W);if(!Q&&!J)throw Error(`Provider "${Z.id}" is not known. Register it through customProviders/registerProvider, registerBuiltinProvider, or use a built-in provider ID.`)}}}function qY($){return new W9($)}UW();async function jI(){return Promise.resolve().then(() => ($7(),IA))}function uI(){return new Date().toISOString()}var dI="cline",lI="cline-pass";function pI($){if(FU($)!=="providers.json")return;let Z=EY($);if(FU(Z)!=="settings")return;return EY(Z)}class q1{filePath;dataDir;constructor($={}){if(this.filePath=$.filePath??cI(),this.dataDir=$.dataDir??pI(this.filePath),this.dataDir||!$.filePath)Q9({providerSettingsManager:this,dataDir:this.dataDir});if(bf(this),C7(this.read()),RY(this.filePath))try{KU(this.filePath,384)}catch{}}getFilePath(){return this.filePath}read(){if(!RY(this.filePath))return S$();try{let $=mI(this.filePath,"utf8"),Z=JSON.parse($),Q=r8.safeParse(Z);if(Q.success)return C7(Q.data),Q.data}catch{}return S$()}write($){let Z=r8.parse($),Q=EY(this.filePath);if(!RY(Q))gI(Q,{recursive:!0,mode:448});vI(this.filePath,`${JSON.stringify(Z,null,2)}
|
|
734
|
+
`,"utf8");try{KU(this.filePath,384)}catch{}C7(Z)}saveProviderSettings($,Z={}){let Q=p8.parse($),W=this.read(),J=Q.provider,X=Z.setLastUsed!==!1,Y=W.providers[J],j=Z.tokenSource??Y?.tokenSource??"manual",V={...W,providers:{...W.providers,[J]:{settings:Q,updatedAt:uI(),tokenSource:j}},lastUsedProvider:X?J:W.lastUsedProvider};return this.write(V),V}resolveProviderSettings($,Z){let Q=$.providers[Z]?.settings,J=j0(Z)?.storageProviderId;if(!J||J===Z)return Q;let X=$.providers[J]?.settings;if(!X)return Q;return p8.parse({...X.auth?{auth:X.auth}:{},...X.apiKey?{apiKey:X.apiKey}:{},...X.baseUrl?{baseUrl:X.baseUrl}:{},...Q??{},provider:Z})}getProviderSettings($){let Z=this.read();return this.resolveProviderSettings(Z,$)}resolveLastUsedProviderId($,Z){let Q=$.lastUsedProvider;if(Q===lI&&Z.isClinePassEnabled===!1)return dI;return Q}getLastUsedProviderSettings($={}){let Z=this.read(),Q=this.resolveLastUsedProviderId(Z,$);if(!Q)return;return this.resolveProviderSettings(Z,Q)}getProviderConfig($,Z){let Q=this.getProviderSettings($);if(!Q)return;return l0(Q,Z)}getLastUsedProviderConfig($={}){let Z=this.getLastUsedProviderSettings($);if(!Z)return;return l0(Z,$)}async refreshCatalog(){try{await d8({})}catch{}}}_0();J8();function rI($,Z){let Q=$?.expiresAt,W=Z?.expiresAt;return $?.accessToken===Z?.accessToken&&$?.refreshToken===Z?.refreshToken&&$?.accountId===Z?.accountId&&Q===W}class i7 extends Error{providerId;constructor($){super(`OAuth credentials for provider "${$}" are no longer valid. Re-run authentication for this provider.`);this.name="OAuthReauthRequiredError",this.providerId=$}}class NY{providerSettingsManager;telemetry;refreshInFlight=new Map;constructor($){this.providerSettingsManager=$?.providerSettingsManager??new q1,this.telemetry=$?.telemetry}async resolveProviderApiKey($){let Z=j0($.providerId);if(!Z)return null;return this.resolveWithSingleFlight(Z.providerId,Z.storageProviderId,$.forceRefresh)}async resolveWithSingleFlight($,Z,Q=!1){let W=this.refreshInFlight.get(Z);if(W)return W;let J=this.resolveProviderApiKeyInternal($,Z,Q).catch((X)=>{throw X}).finally(()=>{this.refreshInFlight.delete(Z)});return this.refreshInFlight.set(Z,J),J}async resolveProviderApiKeyInternal($,Z,Q){let W=j0($);if(!W)return null;let J=this.providerSettingsManager.getProviderSettings(Z);if(!J)return null;let X=Y6($,J);if(!X)return null;let Y=await W.refresh({settings:J,credentials:X,forceRefresh:Q,telemetry:this.telemetry});if(!Y)throw new i7($);let j=W2({manager:this.providerSettingsManager,providerId:$,settings:J,credentials:Y,setLastUsed:!1,save:!1}),V=!rI(J.auth,j.auth);if(V)this.providerSettingsManager.saveProviderSettings(j,{setLastUsed:!1,tokenSource:"oauth"});return{apiKey:W.getApiKey(j)??Y.access,accountId:Y.accountId,refreshed:V}}}import{normalizeUserInput as iI}from"@cline/shared";import{nanoid as nI}from"nanoid";class AU{list($){return $?s0($):[]}update($,Z){if(!$)return{sessionId:Z.sessionId,prompts:[],updated:!1};let Q=Z.promptId.trim(),W=$.pendingPrompts.findIndex((V)=>V.id===Q);if(W<0)return{sessionId:Z.sessionId,prompts:s0($),updated:!1};let J=$.pendingPrompts[W];if(!J)return{sessionId:Z.sessionId,prompts:s0($),updated:!1};let X=Z.prompt===void 0?J.prompt:iI(Z.prompt).trim();if(!X)throw Error("prompt cannot be empty");let Y=Z.delivery??J.delivery,j={...J,prompt:X,mode:Z.mode??J.mode,delivery:Y};return $.pendingPrompts.splice(W,1),aI($,j,W,J.delivery),{sessionId:Z.sessionId,prompts:s0($),prompt:n7(j),updated:!0}}delete($,Z){if(!$)return{sessionId:Z.sessionId,prompts:[],removed:!1};let Q=Z.promptId.trim(),W=$.pendingPrompts.findIndex((X)=>X.id===Q);if(W<0)return{sessionId:Z.sessionId,prompts:s0($),removed:!1};let[J]=$.pendingPrompts.splice(W,1);return{sessionId:Z.sessionId,prompts:s0($),prompt:J?n7(J):void 0,removed:!0}}enqueue($,Z){let{prompt:Q,mode:W,delivery:J,userImages:X,userFiles:Y}=Z,j=$.pendingPrompts.findIndex((V)=>V.prompt===Q);if(j>=0){let[V]=$.pendingPrompts.splice(j,1),H={...V,prompt:Q,mode:W??V.mode,userImages:X??V.userImages,userFiles:Y??V.userFiles};if(J==="steer"||V.delivery==="steer")$.pendingPrompts.unshift({...H,delivery:"steer"});else $.pendingPrompts.push(H)}else{let V={id:`pending_${Date.now()}_${nI(5)}`,prompt:Q,mode:W,delivery:J,userImages:X,userFiles:Y};if(J==="steer")$.pendingPrompts.unshift(V);else $.pendingPrompts.push(V)}return s0($)}consumeSteer($){let Z=$.pendingPrompts.findIndex((W)=>W.delivery==="steer");if(Z<0)return{prompts:s0($)};let[Q]=$.pendingPrompts.splice(Z,1);return{entry:Q,prompts:s0($)}}shiftNext($){return{entry:$.pendingPrompts.shift(),prompts:s0($)}}requeueFront($,Z){return $.pendingPrompts.unshift(Z),s0($)}clear($){return $.pendingPrompts.length=0,[]}}class wY{deps;service=new AU;constructor($){this.deps=$}list($){return this.service.list(this.deps.getSession($))}update($){let Z=this.deps.getSession($.sessionId);if(!Z||Z.aborting)return{sessionId:$.sessionId,prompts:[],updated:!1};let Q=this.service.update(Z,$);return this.emitPrompts(Z),this.scheduleDrain($.sessionId,Z),Q}delete($){let Z=this.deps.getSession($.sessionId);if(!Z||Z.aborting)return{sessionId:$.sessionId,prompts:[],removed:!1};let Q=this.service.delete(Z,$);return this.emitPrompts(Z),this.scheduleDrain($.sessionId,Z),Q}enqueue($,Z){let Q=this.deps.getSession($);if(!Q||Q.aborting)return;this.service.enqueue(Q,Z),this.emitPrompts(Q),this.scheduleDrain($,Q)}consumeSteer($){let Z=this.deps.getSession($);if(!Z)return;let{entry:Q}=this.service.consumeSteer(Z);if(!Q)return;return this.emitPrompts(Z),this.emitSubmitted(Z,Q),Q}clearAborted($){if($.pendingPrompts.length===0)return;this.service.clear($),this.emitPrompts($)}emitPrompts($){this.deps.emit({type:"pending_prompts",payload:{sessionId:$.sessionId,prompts:s0($)}})}scheduleDrain($,Z){if(Z.pendingPrompts.length===0||Z.aborting||Z.drainingPendingPrompts||!Z.agent.canStartRun())return;queueMicrotask(()=>{this.drain($)})}async drain($){let Z=this.deps.getSession($);if(!Z)return;if(Z.aborting||Z.drainingPendingPrompts)return;if(!Z.agent.canStartRun())return;let{entry:Q}=this.service.shiftNext(Z);if(!Q)return;this.emitPrompts(Z),this.emitSubmitted(Z,Q),Z.drainingPendingPrompts=!0;let W=!0;try{await this.deps.send({sessionId:$,prompt:Q.prompt,...Q.mode?{mode:Q.mode}:{},userImages:Q.userImages,userFiles:Q.userFiles})}catch{W=!1,this.service.requeueFront(Z,Q),this.emitPrompts(Z)}finally{if(Z.drainingPendingPrompts=!1,W&&Z.pendingPrompts.length>0&&Z.status!=="failed"&&Z.status!=="cancelled")queueMicrotask(()=>{this.drain($)})}}emitSubmitted($,Z){let Q=n7(Z);this.deps.emit({type:"pending_prompt_submitted",payload:{sessionId:$.sessionId,id:Q.id,prompt:Q.prompt,delivery:Q.delivery,attachmentCount:Q.attachmentCount,userImages:Q.userImages,userFiles:Q.userFiles}})}}function n7($){return{id:$.id,prompt:$.prompt,delivery:$.delivery,attachmentCount:($.userImages?.length??0)+($.userFiles?.length??0),userImages:$.userImages,userFiles:$.userFiles}}function s0($){return $.pendingPrompts.map(n7)}function aI($,Z,Q,W){if(Z.delivery==="steer")$.pendingPrompts.unshift(Z);else if(W==="steer")$.pendingPrompts.push(Z);else $.pendingPrompts.splice(Q,0,Z)}_0();class PY{deps;constructor($){this.deps=$}dispatchAgentEvent($,Z,Q){let W=this.deps.getSession($),J={sessionId:$,config:Z,liveSession:W,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit},X=x3(Q),Y=!!W&&(!X.agentId||X.agentId===CY(W.agent));g3(J,Q,Y?{isPrimaryAgentEvent:!0,agentId:CY(W.agent),conversationId:W.agent.getConversationId(),...W?.runtime.teamRuntime?{teamRole:"lead"}:{}}:{isPrimaryAgentEvent:!1})}async handleTeamEvent($,Z){let Q=this.deps.getSession($);if(Q){if(eJ(Q,Z),Z.type==="agent_event"){let W={sessionId:$,config:Q.config,liveSession:Q,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit};g3(W,Z.event,{agentId:Z.agentId,teamRole:"teammate",teamAgentId:Z.agentId,isPrimaryAgentEvent:!1})}if(Z.type==="teammate_spawned"){let W=r1({agentId:Z.teammate.runtimeAgentId??Z.agentId,conversationId:Z.teammate.conversationId,parentAgentId:Z.teammate.parentAgentId,createdByAgentId:CY(Q.agent),teamId:Q.runtime.teamRuntime?.getTeamId(),teamName:Q.runtime.teamRuntime?.getTeamName(),teamRole:"teammate",teamAgentId:Z.agentId});if(W)H$(Q.config.telemetry,{ulid:$,modelId:Z.teammate.modelId??Q.config.modelId,provider:Q.config.providerId,...W})}}if(await $X($,Z,this.deps.invokeBackendOptional),Q)ZX(Q,$,Z,this.deps.emit)}async handlePluginEvent($,Z,Q){if(Z.name==="plugin_log"){this.handlePluginLog($,Z.payload);return}if(Z.name==="automation_event"){let V=this.deps.getSession($)?.config.extensionContext?.automation??Q;if(!V)return;let H=Z.payload&&typeof Z.payload==="object"?Z.payload:void 0;if(!H)return;await V.ingestEvent(H);return}if(Z.name!=="steer_message"&&Z.name!=="queue_message"&&Z.name!=="pending_prompt")return;let W=Z.payload&&typeof Z.payload==="object"?Z.payload:void 0,J=typeof W?.sessionId==="string"&&W.sessionId.trim().length>0?W.sessionId.trim():$,X=typeof W?.prompt==="string"?W.prompt.trim():"";if(!X)return;let Y=Z.name==="steer_message"?"steer":Z.name==="queue_message"?"queue":W?.delivery==="steer"?"steer":"queue";this.deps.enqueuePendingPrompt(J,{prompt:X,delivery:Y})}handlePluginLog($,Z,Q){let W=this.deps.getSession($),J=Q??W?.config.extensionContext?.logger??W?.config.logger;if(!J||!Z||typeof Z!=="object")return;let X=Z,Y=typeof X.message==="string"?X.message:"";if(!Y)return;let j=X.metadata&&typeof X.metadata==="object"?{...X.metadata}:{};if(j.sessionId??=$,typeof X.pluginName==="string"&&X.pluginName)j.pluginName=X.pluginName;if(X.level==="debug"){J.debug(Y,j);return}if(X.level==="error"){if(J.error)J.error(Y,j);else J.log(Y,{...j,severity:"error"});return}J.log(Y,j)}}function CY($){return $.getAgentId()}function SY($){return{sessionId:$.sessionId,source:$.source,pid:process.pid,startedAt:$.startedAt,endedAt:$.endedAt??null,exitCode:$.exitCode??null,status:$.status,interactive:$.interactive,provider:$.config.providerId,model:$.config.modelId,cwd:$.config.cwd,workspaceRoot:R$($.config),teamName:$.config.teamName?.trim()||void 0,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,parentSessionId:typeof $.sessionMetadata?.parentSessionId==="string"?$.sessionMetadata.parentSessionId:void 0,parentAgentId:typeof $.sessionMetadata?.parentAgentId==="string"?$.sessionMetadata.parentAgentId:void 0,agentId:typeof $.sessionMetadata?.agentId==="string"?$.sessionMetadata.agentId:void 0,conversationId:typeof $.sessionMetadata?.conversationId==="string"?$.sessionMetadata.conversationId:void 0,isSubagent:typeof $.sessionMetadata?.isSubagent==="boolean"?$.sessionMetadata.isSubagent:!1,prompt:$.pendingPrompt,metadata:$.sessionMetadata,messagesPath:$.artifacts?.messagesPath,updatedAt:$.updatedAt??$.endedAt??$.startedAt}}function bY($,Z){let Q=$[Z];return typeof Q==="function"?Q:null}async function fU($,Z,...Q){let W=bY($,Z);if(!W)throw Error(`session service method not available: ${Z}`);return Promise.resolve(W.apply($,Q))}async function UU($,Z,...Q){let W=bY($,Z);if(!W)return;await Promise.resolve(W.apply($,Q))}async function DU($,Z,...Q){let W=bY($,Z);if(!W)return;return await Promise.resolve(W.apply($,Q))}$1();_0();function yY($,Z,Q){return{onSubAgentEvent:(W)=>$.onAgentEvent(Q,Z,W),onSubAgentStart:(W)=>{let J=$.getSession(Q)?.runtime.teamRuntime;$.subAgentStarts.set(W.subAgentId,{startedAt:Date.now(),rootSessionId:Q});let X=r1({agentId:W.subAgentId,conversationId:W.conversationId,parentAgentId:W.parentAgentId,teamId:J?.getTeamId(),teamName:J?.getTeamName(),createdByAgentId:W.parentAgentId});if(X)H$(Z.telemetry,{ulid:Q,modelId:Z.modelId,provider:Z.providerId,...X});v4(Z.telemetry,{event:"started",ulid:Q,durationMs:0,parentId:W.parentAgentId,agentId:W.subAgentId,...X}),$.invokeBackendOptional("handleSubAgentStart",Q,W)},onSubAgentEnd:(W)=>{let J=$.getSession(Q)?.runtime.teamRuntime,X=$.subAgentStarts.get(W.subAgentId),Y=X?Date.now()-X.startedAt:0,j=W.result?.text?W.result.text.split(`
|
|
735
|
+
`).length:0;v4(Z.telemetry,{event:"ended",ulid:Q,durationMs:Y,outputLines:j,errorMessage:W.error?String(W.error):void 0,agentId:W.subAgentId,parentId:W.parentAgentId,...r1({agentId:W.subAgentId,conversationId:W.conversationId,parentAgentId:W.parentAgentId,teamId:J?.getTeamId(),teamName:J?.getTeamName(),createdByAgentId:W.parentAgentId})}),$.subAgentStarts.delete(W.subAgentId),$.invokeBackendOptional("handleSubAgentEnd",Q,W)}}}function hY($,Z,Q,W){let J=yY($,Z,Q);return q$({configProvider:{getRuntimeConfig:()=>$.getSession(Q)?.runtime.delegatedAgentConfigProvider?.getRuntimeConfig()??{providerId:Z.providerId,modelId:Z.modelId,cwd:Z.cwd,apiKey:Z.apiKey,baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking,maxIterations:Z.maxIterations,hooks:Z.hooks,extensions:Z.extensions,logger:Z.logger,telemetry:Z.telemetry},getConnectionConfig:()=>$.getSession(Q)?.runtime.delegatedAgentConfigProvider?.getConnectionConfig()??{providerId:Z.providerId,modelId:Z.modelId,apiKey:Z.apiKey,baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking},updateConnectionDefaults:()=>{}},createSubAgentTools:()=>{let Y=Z.enableTools?U2({cwd:Z.cwd,...u0[l1({mode:Z.mode})],executors:W}):[];if(Z.enableSpawnAgent)Y.push(hY($,Z,Q,W));return y1(Y)},...J})}import{readFile as sI,stat as oI}from"node:fs/promises";var tI=20480000;async function LU($){let Z=await oI($);if(!Z.isFile())throw Error("Path is not a file");if(Z.size>tI)throw Error("File is too large to read into context.");let Q=await sI($,"utf8");if(Q.includes("\x00"))throw Error("Cannot read binary file into context.");return Q}var _U=5000;function V9($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function Yx($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$,Q=V9(Z.inputTokens),W=V9(Z.outputTokens),J=V9(Z.cacheReadTokens),X=V9(Z.cacheWriteTokens),Y=V9(Z.totalCost);if(Q===void 0||W===void 0||J===void 0||X===void 0||Y===void 0)return;return{inputTokens:Q,outputTokens:W,cacheReadTokens:J,cacheWriteTokens:X,totalCost:Y}}function jx($,Z){return{inputTokens:Math.max($.inputTokens,Z.inputTokens),outputTokens:Math.max($.outputTokens,Z.outputTokens),cacheReadTokens:Math.max($.cacheReadTokens,Z.cacheReadTokens),cacheWriteTokens:Math.max($.cacheWriteTokens,Z.cacheWriteTokens),totalCost:Math.max($.totalCost,Z.totalCost)}}class T1{runtimeAddress=void 0;pendingPrompts;sessionService;runtimeBuilder;createAgentInstance;toolExecutors;defaultCapabilities;defaultToolPolicies;providerSettingsManager;oauthTokenManager;defaultTelemetry;defaultFetch;events=new S5;sessions=new Map;usageBySession=new Map;aggregateUsageBySession=new Map;subAgentStarts=new Map;pendingPromptsController;eventBridge;sessionVersioning=new c$;constructor($){let Z=$x();if(Z)Xx(Z);let Q=P0($.distinctId);this.sessionService=$.sessionService,this.runtimeBuilder=$.runtimeBuilder??new T4,this.createAgentInstance=$.createAgent??((W)=>new z$(W)),this.defaultCapabilities=M0($.capabilities),this.toolExecutors=this.defaultCapabilities?.toolExecutors,this.defaultToolPolicies=$.toolPolicies,this.providerSettingsManager=$.providerSettingsManager??new q1,this.oauthTokenManager=$.oauthTokenManager??new NY({providerSettingsManager:this.providerSettingsManager,telemetry:$.telemetry}),this.defaultTelemetry=$.telemetry,this.defaultTelemetry?.setDistinctId(Q),this.defaultFetch=$.fetch,this.pendingPromptsController=new wY({getSession:(W)=>this.sessions.get(W),emit:(W)=>this.emit(W),send:(W)=>this.runTurn(W)}),this.pendingPrompts={list:async(W)=>this.pendingPromptsController.list(W.sessionId),update:async(W)=>this.pendingPromptsController.update(W),delete:async(W)=>this.pendingPromptsController.delete(W)},this.eventBridge=new PY({getSession:(W)=>this.sessions.get(W),usageBySession:this.usageBySession,aggregateUsageBySession:this.aggregateUsageBySession,emit:(W)=>this.emit(W),persistMessages:(W,J,X)=>{this.invoke("persistSessionMessages",W,J,X)},enqueuePendingPrompt:(W,J)=>this.pendingPromptsController.enqueue(W,J),invokeBackendOptional:(W,...J)=>this.invokeOptional(W,...J)})}async applyInitialOAuthCredentials($){if($.config.apiKey?.trim())return $;let Z=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId});if(!Z?.apiKey)return $;return{...$,config:{...$.config,apiKey:Z.apiKey}}}async startSession($){let Z=$.source??T0.CLI,Q=J0(),W=$.config.sessionId?.trim()??"",J=W||Qx(),X=await this.applyInitialOAuthCredentials($),Y=X.initialMessages??[],j=Y.length>0?b8(Y):D0(),V=await this.invokeOptionalValue("ensureSessionsDir")??"";if(!V)throw Error("session service method not available: ensureSessionsDir");let H=kY(V,J),B=kY(H,`${J}.messages.json`),G=kY(H,`${J}.json`),K=R$($.config),F=b0.parse({version:1,session_id:J,source:Z,pid:process.pid,started_at:Q,status:"running",interactive:$.interactive===!0,provider:X.config.providerId,model:X.config.modelId,cwd:X.config.cwd,workspace_root:K,team_name:X.config.teamName,enable_tools:X.config.enableTools,enable_spawn:X.config.enableSpawnAgent,enable_teams:X.config.enableAgentTeams,prompt:X.prompt?.trim()||void 0,messages_path:B}),A;if(W.length>0&&Y.length>0&&!X.prompt?.trim()){let P=await this.invokeOptionalValue("readSessionManifest",J);if(P)F=P,A={manifestPath:G,messagesPath:P.messages_path||B,manifest:P}}let f=await this.seedAggregateUsageFromArtifacts({initialUsage:j,sessionDir:H,rootMessagesPath:A?.messagesPath??B,manifest:F});this.usageBySession.set(J,j),this.aggregateUsageBySession.set(J,f);let D=M0(this.defaultCapabilities,$.capabilities),U=D?.toolExecutors??this.toolExecutors,T=$.localRuntime,q=T?.extensionContext?.logger??T?.logger,z=T?.extensionContext?.automation,_,E={getSession:(P)=>this.sessions.get(P),subAgentStarts:this.subAgentStarts,onAgentEvent:(P,B0,G0)=>this.eventBridge.dispatchAgentEvent(P,B0,G0),invokeBackendOptional:(P,...B0)=>this.invokeOptional(P,...B0)};_=await WK({input:X,localRuntime:$.localRuntime,sessionId:J,providerSettingsManager:this.providerSettingsManager,defaultTelemetry:this.defaultTelemetry,defaultCapabilities:D,defaultToolPolicies:this.defaultToolPolicies,defaultFetch:this.defaultFetch,onPluginEvent:(P)=>{if(P.name==="plugin_log"){this.eventBridge.handlePluginLog(J,P.payload,q);return}this.eventBridge.handlePluginEvent(J,P,z)},onTeamEvent:(P)=>{this.eventBridge.handleTeamEvent(J,P),_.config.onTeamEvent?.(P)},createSpawnTool:()=>hY(E,_.config,J,U),createSubAgentLifecycleCallbacks:(P)=>yY(E,P,J),readSessionMetadata:async()=>(await this.getSession(J))?.metadata,writeSessionMetadata:async(P)=>{await this.persistSessionMetadata(J,()=>P)}});let C=await this.runtimeBuilder.build(_.runtimeBuilderInput),y=_.config,l=_.providerConfig;if(C.teamRuntime&&!y.teamName?.trim())y.teamName=C.teamRuntime.getTeamName();let o=[...C.tools,...y.extraTools??[]],t=C.extensions??_.extensions,Q0={sessionId:J,providerId:l.providerId,modelId:l.modelId,apiKey:l.apiKey,baseUrl:l.baseUrl,headers:l.headers,knownModels:l.knownModels,providerConfig:l,thinking:y.thinking,reasoningEffort:y.reasoningEffort??l.reasoningEffort,maxTokensPerTurn:y.maxTokensPerTurn,systemPrompt:y.systemPrompt,maxIterations:y.maxIterations,execution:y.execution,prepareTurn:F6(y),tools:o,hooks:_.hooks,extensions:t,hookErrorMode:y.hookErrorMode,initialMessages:_.effectiveInput.initialMessages,userFileContentLoader:LU,toolPolicies:_.toolPolicies,requestToolApproval:_.requestToolApproval?async(P)=>{let B0=_.requestToolApproval,G0=this.sessions.get(J);if(G0)await this.markTurnPending(G0);try{if(!B0)return{approved:!1,reason:"Tool approval callback is not configured."};return await B0(P)}finally{let C0=this.sessions.get(J);if(C0?.status==="pending")await this.markTurnRunning(C0)}}:void 0,telemetry:y.telemetry,onConsecutiveMistakeLimitReached:y.onConsecutiveMistakeLimitReached,completionPolicy:C.completionPolicy,consumePendingUserMessage:()=>{let P=this.pendingPromptsController.consumeSteer(J);return P?v5(P.prompt,P.mode??y.mode):void 0},logger:C.logger??y.logger,extensionContext:y.extensionContext,onEvent:(P)=>this.eventBridge.dispatchAgentEvent(J,y,P)};Q0.hooks={...Q0.hooks,onEvent:async(P)=>{if(await _.hooks?.onEvent?.(P),P.type!=="assistant-message")return;let B0=this.sessions.get(J);if(!B0)return;let G0=B0.agent.getMessages();try{await this.invoke("persistSessionMessages",J,G0,y.systemPrompt)}catch(C0){y.logger?.error?.("Failed to persist session messages after assistant response",{sessionId:J,error:C0}),p2(y.telemetry,{component:"core",operation:"session.persist_messages_after_assistant_response",error:C0,severity:"warn",handled:!0,context:{sessionId:J,providerId:y.providerId,modelId:y.modelId}})}}};let e0=this.createAgentInstance(Q0);if(Q0.onEvent)e0.subscribeEvents(Q0.onEvent);C.registerLeadAgent?.(e0);let l$=r1({agentId:e0.getAgentId(),conversationId:e0.getConversationId(),teamId:C.teamRuntime?.getTeamId(),teamName:C.teamRuntime?.getTeamName(),teamRole:C.teamRuntime?"lead":void 0});if(XK(y,J,W.length>0,K,l$),l$)H$(y.telemetry,{ulid:J,modelId:y.modelId,provider:y.providerId,...l$});if(C.teamRuntime)b9(y.telemetry,{ulid:J,teamId:C.teamRuntime.getTeamId(),teamName:C.teamRuntime.getTeamName(),leadAgentId:e0.getAgentId(),restoredFromPersistence:C.teamRestoredFromPersistence===!0});let r={sessionId:J,config:y,sessionMetadata:X.sessionMetadata,...A?{artifacts:A}:{},source:Z,startedAt:A?.manifest.started_at??Q,updatedAt:A?.manifest.ended_at??A?.manifest.started_at??Q,pendingPrompt:F.prompt,runtime:C,agent:e0,started:!1,status:A?.manifest.status??"running",aborting:!1,interactive:$.interactive===!0,persistedMessages:Y,activeTeamRunIds:new Set,pendingTeamRunUpdates:[],teamRunWaiters:[],pendingPrompts:[],drainingPendingPrompts:!1,pluginSandboxShutdown:_.pluginSandboxShutdown,submitAndExitObserved:!1,lastInteractiveTurnFinishReason:void 0};if(this.sessions.set(J,r),this.emitStatus(J,"running"),Y.length>0&&!A){if(await this.ensureSessionPersisted(r),await this.invoke("persistSessionMessages",r.sessionId,Y,r.config.systemPrompt),!X.prompt?.trim())await this.updateStatus(r,"completed",0)}let M1;try{if(X.prompt?.trim())if(M1=await this.executeTurn(r,{prompt:X.prompt,userImages:X.userImages,userFiles:X.userFiles}),!r.interactive)await this.finalizeSingleRun(r,M1.finishReason);else await this.completeInteractiveTurn(r,M1.finishReason)}catch(P){if(r.interactive&&r.aborting)M1=await this.completeAbortedInteractiveTurn(r);else{p2(r.config.telemetry,{component:"core",operation:"session.start",error:P,severity:"error",handled:!1,context:{sessionId:r.sessionId,providerId:r.config.providerId,modelId:r.config.modelId}});try{await this.failSession(r)}catch(B0){r.config.logger?.error?.("Session failure cleanup threw",{sessionId:r.sessionId,error:B0})}throw P}}return{sessionId:J,manifest:F,manifestPath:G,messagesPath:B,result:M1}}async restoreSession($){return this.sessionVersioning.restoreCheckpoint({...$,getSession:(Z)=>this.getSession(Z),readMessages:(Z)=>this.readSessionMessages(Z),buildStartInput:(Z,Q)=>{let W=Z.restoredCheckpointMetadata?{...Q.sessionMetadata??{},checkpoint:Z.restoredCheckpointMetadata}:Q.sessionMetadata;return{...Q,...W?{sessionMetadata:W}:{},initialMessages:Z.initialMessages}},startSession:(Z)=>this.startSession(Z),getStartedSessionId:(Z)=>Z.sessionId,readRestoredSession:(Z)=>this.getSession(Z)})}async runTurn($){let Z=this.getSessionOrThrow($.sessionId),Q=Z.agent.canStartRun(),W=$.delivery??(Z.interactive&&!Q?"queue":void 0);if(Z.config.telemetry?.capture({event:"session.input_sent",properties:{sessionId:$.sessionId,promptLength:$.prompt.length,userImageCount:$.userImages?.length??0,userFileCount:$.userFiles?.length??0,delivery:W??"immediate"}}),W==="queue"||W==="steer"){this.pendingPromptsController.enqueue($.sessionId,{prompt:$.prompt,mode:$.mode,delivery:W,userImages:$.userImages,userFiles:$.userFiles});return}try{let J=await this.executeTurn(Z,{prompt:$.prompt,mode:$.mode,userImages:$.userImages,userFiles:$.userFiles});if(!Z.interactive)await this.finalizeSingleRun(Z,J.finishReason);else await this.completeInteractiveTurn(Z,J.finishReason);if(J.finishReason==="error"||J.finishReason==="aborted")return J;return queueMicrotask(()=>{this.pendingPromptsController.drain($.sessionId)}),J}catch(J){if(Z.interactive&&Z.aborting)return await this.completeAbortedInteractiveTurn(Z);throw p2(Z.config.telemetry,{component:"core",operation:"session.submit",error:J,severity:"error",handled:!1,context:{sessionId:Z.sessionId,providerId:Z.config.providerId,modelId:Z.config.modelId}}),await this.failSession(Z),J}}async getAccumulatedUsage($){let Z=dJ(this.usageBySession.get($)),Q=dJ(this.aggregateUsageBySession.get($));return Z||Q?{usage:Z,aggregateUsage:Q}:void 0}async abort($,Z){let Q=this.sessions.get($);if(!Q)return;Q.config.telemetry?.capture({event:"session.aborted",properties:{sessionId:$}}),Q.aborting=!0,this.pendingPromptsController.clearAborted(Q),Q.agent.abort(Z)}async stopSession($){let Z=this.sessions.get($);if(!Z)return;if(Z.config.telemetry?.capture({event:"session.stopped",properties:{sessionId:$}}),Z.interactive&&!H0(Z.status)){await this.releaseSessionRuntime(Z,"session_stop");return}if(Z.interactive&&Z.agent.canStartRun()){await this.shutdownSession(Z,{status:this.resolveInteractiveStopStatus(Z),exitCode:this.resolveInteractiveStopExitCode(Z),shutdownReason:"session_stop",endReason:"stopped"});return}Z.aborting=!0,Z.agent.abort(Error("session_stop")),await this.shutdownSession(Z,{status:"cancelled",exitCode:0,shutdownReason:"session_stop",endReason:"stopped"})}async dispose($="session_manager_dispose"){let Z=[...this.sessions.values()];if(Z.length===0)return;await Promise.allSettled(Z.map((Q)=>Q.interactive&&!H0(Q.status)?this.releaseSessionRuntime(Q,$):Q.interactive&&Q.agent.canStartRun()?this.shutdownSession(Q,{status:this.resolveInteractiveStopStatus(Q),exitCode:this.resolveInteractiveStopExitCode(Q),shutdownReason:$,endReason:"disposed"}):this.shutdownSession(Q,{status:"cancelled",exitCode:0,shutdownReason:$,endReason:"disposed"}))),this.usageBySession.clear(),this.aggregateUsageBySession.clear()}async getSession($){let Z=this.sessions.get($);if(Z)return SY(Z);let Q=$.trim();if(!Q)return;let W=await this.getRow(Q);if(W)return v6(W);let J=await this.readManifest(Q);return J?vQ(J):void 0}async listSessions($=200){let Q=(await this.listRows($)).map(v6),W=new Set(Q.map((J)=>J.sessionId));for(let J of this.sessions.values()){if(W.has(J.sessionId))continue;Q.unshift(SY(J))}return Q.slice(0,$)}async deleteSession($){if(this.sessions.has($))await this.stopSession($);let Z=await this.invoke("deleteSession",$);if(Z.deleted)this.usageBySession.delete($),this.aggregateUsageBySession.delete($);return Z.deleted}async updateSession($,Z){return{updated:(await this.invokeOptionalValue("updateSession",{sessionId:$,prompt:Z.prompt,metadata:Z.metadata,title:Z.title}))?.updated===!0}}async readSessionMessages($){let Z=$.trim();if(!Z)return[];let Q=await this.getRow(Z);if(Q?.messagesPath)return I$(Q.messagesPath);let W=await this.readManifest(Z);return I$(W?.messages_path)}async dispatchHookEvent($){await NF($,{queueSpawnRequest:(Z)=>this.invokeOptional("queueSpawnRequest",Z),upsertSubagentSessionFromHook:(Z)=>this.invokeOptionalValue("upsertSubagentSessionFromHook",Z),appendSubagentHookAudit:(Z,Q)=>this.invokeOptional("appendSubagentHookAudit",Z,Q),applySubagentStatus:(Z,Q)=>this.invokeOptional("applySubagentStatus",Z,Q)})}subscribe($,Z){return this.events.subscribe($,Z)}async updateSessionModel($,Z){let Q=this.getSessionOrThrow($);Q.config.modelId=Z,Q.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({modelId:Z}),Q.agent.updateConnection({modelId:Z})}handlePluginEvent($,Z,Q){return this.eventBridge.handlePluginEvent($,Z,Q)}async executeTurn($,Z){let Q=await this.prepareTurnInput($,Z),W=Q.prompt.trim();if(!W)throw Error("prompt cannot be empty");if(!$.artifacts&&!$.pendingPrompt)$.pendingPrompt=W;await this.ensureSessionPersisted($),await this.syncOAuthCredentials($),await this.markTurnRunning($);let J=await this.executeAgentTurn($,W,Q.userImages,Q.userFiles);while(QX($,J.finishReason)){let X=await WX($);if(X.length===0)break;let Y=JX($,X);J=await this.executeAgentTurn($,Y)}return J}async completeInteractiveTurn($,Z){if(m5($))return;$.lastInteractiveTurnFinishReason=Z,await this.markTurnIdle($),$.aborting=!1}resolveInteractiveStopStatus($){let Z=$.lastInteractiveTurnFinishReason;if(!Z)return"cancelled";switch(Z){case"completed":return"completed";case"error":return"failed";case"aborted":case"max_iterations":case"mistake_limit":return"cancelled"}return Z}resolveInteractiveStopExitCode($){return $.lastInteractiveTurnFinishReason==="error"?1:0}async completeAbortedInteractiveTurn($){let Z=new Date,Q=$.agent.getMessages(),W=D0();return $.persistedMessages=Q,$.started=$.started||Q.length>0,this.eventBridge.dispatchAgentEvent($.sessionId,$.config,{type:"done",reason:"aborted",text:"",iterations:0,usage:W}),await this.completeInteractiveTurn($,"aborted"),{text:"",usage:W,messages:Q,toolCalls:[],iterations:0,finishReason:"aborted",model:{id:$.config.modelId,provider:$.config.providerId},startedAt:Z,endedAt:Z,durationMs:0}}async executeAgentTurn($,Z,Q,W){let J=$.started||$.agent.getMessages().length>0,X=$.persistedMessages??$.agent.getMessages(),Y=this.usageBySession.get($.sessionId)??D0(),j=this.aggregateUsageBySession.get($.sessionId)??Y;$.turnUsageBaseline=Y,$.turnAggregateUsageBaseline=j,$.turnPrimaryUsage=D0(),$.turnUsageByAgent=new Map,E9($.config.telemetry,$.sessionId,$.config.mode),Q8($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,model:$.config.modelId,source:"user",mode:$.config.mode,...this.getSessionAgentTelemetryIdentity($)});try{let V=J?()=>$.agent.continue(Z,Q,W):()=>$.agent.run(Z,Q,W),H=await this.runWithAuthRetry($,V,X);$.started=!0;let B=IZ(H.messages,H,X);$.persistedMessages=B;let G=u6($.turnUsageByAgent?.values()??[]),K=f0(Y,H.usage),F=f0(f0(D0(),H.usage),G),A=f0(j,F);return this.usageBySession.set($.sessionId,K),this.aggregateUsageBySession.set($.sessionId,A),await this.persistSessionMetadata($.sessionId,(L)=>({...L??{},totalCost:K.totalCost,aggregatedAgentsCost:A.totalCost,usage:K,aggregateUsage:A})),await this.invoke("persistSessionMessages",$.sessionId,B,$.config.systemPrompt),this.observeTaskCompletionTool($,H),H}catch(V){throw p2($.config.telemetry,{component:"core",operation:"session.turn",error:V,severity:"error",handled:!1,context:{sessionId:$.sessionId,providerId:$.config.providerId,modelId:$.config.modelId}}),await this.invoke("persistSessionMessages",$.sessionId,$.agent.getMessages(),$.config.systemPrompt),V}finally{$.turnUsageBaseline=void 0,$.turnAggregateUsageBaseline=void 0,$.turnPrimaryUsage=void 0,$.turnUsageByAgent=void 0}}observeTaskCompletionTool($,Z){if($.submitAndExitObserved)return;if(!Z.toolCalls.some((W)=>W.name===U0.SUBMIT_AND_EXIT&&W.error===void 0))return;$.submitAndExitObserved=!0,g4($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"submit_and_exit",...this.getSessionAgentTelemetryIdentity($)})}async prepareTurnInput($,Z){let Q=R$($.config),W=Jx(Z.prompt).trim();if(!W)return{prompt:"",userImages:Z.userImages,userFiles:this.resolveAbsoluteFilePaths($.config.cwd,Z.userFiles)};let J=await T8(W,Q);YK($.config.telemetry,J);let X=v5(J.prompt,Z.mode??$.config.mode),Y=this.resolveAbsoluteFilePaths($.config.cwd,Z.userFiles),j=this.resolveAbsoluteFilePaths(Q,J.matchedFiles),V=Array.from(new Set([...Y,...j]));return{prompt:X,userImages:Z.userImages,userFiles:V.length>0?V:void 0}}async ensureSessionPersisted($){if($.artifacts)return;let Z=R$($.config);$.artifacts=await this.invoke("createRootSessionWithArtifacts",{sessionId:$.sessionId,source:$.source,pid:process.pid,interactive:$.interactive,provider:$.config.providerId,model:$.config.modelId,cwd:$.config.cwd,workspaceRoot:Z,teamName:$.config.teamName,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,prompt:$.pendingPrompt,metadata:$.sessionMetadata,startedAt:$.startedAt})}async markTurnRunning($){if($.status==="running")return;await this.updateStatus($,"running",null)}async markTurnPending($){if($.status==="pending")return;await this.updateStatus($,"pending",null)}async markTurnIdle($){if($.status==="idle")return;await this.updateStatus($,"idle",null)}async persistSessionMetadata($,Z){let Q=this.sessions.get($),W=await this.invokeOptionalValue("readSessionManifest",$)??Q?.artifacts?.manifest,J=Z(W?.metadata);if(!Q?.artifacts)return;if((await this.invokeOptionalValue("updateSession",{sessionId:$,metadata:J}))?.updated===!1)return;Q.sessionMetadata=J,Q.artifacts.manifest.metadata=J}async finalizeSingleRun($,Z){if(m5($))return;let Q=Z==="aborted"||$.aborting,W=Z==="error";await this.shutdownSession($,{status:Q?"cancelled":W?"failed":"completed",exitCode:W?1:0,shutdownReason:W?"session_error":"session_complete",endReason:Z})}async failSession($){await this.shutdownSession($,{status:"failed",exitCode:1,shutdownReason:"session_error",endReason:"error"})}async shutdownSession($,Z){if(Z.status==="completed"&&!$.submitAndExitObserved)g4($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"shutdown",...this.getSessionAgentTelemetryIdentity($)});iQ($);let Q=[],W=(J,X)=>{Q.push(X),$.config.logger?.log("Session shutdown cleanup failed",{sessionId:$.sessionId,stage:J,error:X,severity:"warn"}),p2($.config.telemetry,{component:"core",operation:"session.shutdown_cleanup",error:X,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:J,status:Z.status,shutdownReason:Z.shutdownReason,providerId:$.config.providerId,modelId:$.config.modelId}})};if($.artifacts){try{await this.updateStatus($,Z.status,Z.exitCode)}catch(J){W("update_status",J)}try{await $.agent.shutdown(Z.shutdownReason)}catch(J){W("agent_shutdown",J)}}try{await Promise.resolve($.runtime.shutdown(Z.shutdownReason))}catch(J){W("runtime_shutdown",J)}try{await $.pluginSandboxShutdown?.()}catch(J){W("plugin_sandbox_shutdown",J)}if(this.sessions.delete($.sessionId),this.emit({type:"ended",payload:{sessionId:$.sessionId,reason:Z.endReason,ts:Date.now()}}),Q.length>0&&Z.status==="failed")throw Q[0]}async releaseSessionRuntime($,Z){let Q=[],W=(J,X)=>{Q.push(X),$.config.logger?.log("Session runtime cleanup failed",{sessionId:$.sessionId,stage:J,error:X,severity:"warn"}),p2($.config.telemetry,{component:"core",operation:"session.runtime_cleanup",error:X,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:J,reason:Z,providerId:$.config.providerId,modelId:$.config.modelId}})};try{await $.agent.shutdown(Z)}catch(J){W("agent_shutdown",J)}try{await Promise.resolve($.runtime.shutdown(Z))}catch(J){W("runtime_shutdown",J)}try{await $.pluginSandboxShutdown?.()}catch(J){W("plugin_sandbox_shutdown",J)}if(this.sessions.delete($.sessionId),Q.length>0)throw Q[0]}async updateStatus($,Z,Q){if(!$.artifacts)return;let W=await this.invoke("updateSessionStatus",$.sessionId,Z,Q);if(!W.updated)return;let J=await this.invokeOptionalValue("readSessionManifest",$.sessionId)??$.artifacts.manifest;if(J.status=Z,H0(Z))delete J.ended_at,J.exit_code=null;else J.ended_at=W.endedAt??J0(),J.exit_code=typeof Q==="number"?Q:null;$.artifacts.manifest=J,$.status=Z,$.updatedAt=W.endedAt??J0(),$.endedAt=H0(Z)?null:J.ended_at,$.exitCode=J.exit_code,await this.invoke("writeSessionManifest",$.artifacts.manifestPath,J),this.emitStatus($.sessionId,Z)}async runWithAuthRetry($,Z,Q){try{return await Z()}catch(W){if(!Q2($.config.providerId)||!Wx(W))throw W;return await this.syncOAuthCredentials($,{forceRefresh:!0}),$.agent.restore(Q),Z()}}async syncOAuthCredentials($,Z){let Q=null;try{Q=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId,forceRefresh:Z?.forceRefresh})}catch(W){if(W instanceof i7)throw Error(`${W.providerId} requires re-authentication.`);throw W}if(!Q?.apiKey||$.config.apiKey===Q.apiKey)return;$.config.apiKey=Q.apiKey,$.agent.updateConnection({apiKey:Q.apiKey}),$.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({apiKey:Q.apiKey}),$.runtime.teamRuntime?.updateTeammateConnections({apiKey:Q.apiKey})}getSessionOrThrow($){let Z=this.sessions.get($);if(!Z){let Q=new k1($);throw p2(this.defaultTelemetry,{component:"core",operation:"session.active_lookup",error:Q,severity:"warn",handled:!0,context:{sessionId:$,activeSessionCount:this.sessions.size}}),Q}return Z}resolveAbsoluteFilePaths($,Z){if(!Z||Z.length===0)return[];let Q=Z.map((W)=>W.trim()).filter((W)=>W.length>0).map((W)=>Zx(W)?W:IY($,W));return Array.from(new Set(Q))}getSessionAgentTelemetryIdentity($){return r1({agentId:$.agent.getAgentId(),conversationId:$.agent.getConversationId(),teamId:$.runtime.teamRuntime?.getTeamId(),teamName:$.runtime.teamRuntime?.getTeamName(),teamRole:$.runtime.teamRuntime?"lead":void 0})}async seedAggregateUsageFromArtifacts($){let Z=await this.summarizePersistedTeammateUsage($.sessionDir,$.rootMessagesPath,$.manifest.session_id),Q=f0($.initialUsage,Z);return this.withPersistedAggregateUsageFloor(Q,$.manifest)}async summarizePersistedTeammateUsage($,Z,Q){let W=IY(Z),J=`${Q}.messages.json`,X;try{X=eI($)}catch{return D0()}let Y=D0();for(let j of X){if(!j.endsWith(".messages.json"))continue;if(j===J)continue;let V=IY($,j);if(V===W)continue;let H=await I$(V);if(H.length===0)continue;Y=f0(Y,b8(H))}return Y}withPersistedAggregateUsageFloor($,Z){let Q=Yx(Z.metadata?.aggregateUsage);if(Q)return jx($,Q);let W=Z.metadata?.aggregatedAgentsCost;if(typeof W!=="number"||!Number.isFinite(W)||W<=$.totalCost)return $;return{...$,totalCost:W}}emitStatus($,Z){this.emitSessionSnapshot($),this.emit({type:"status",payload:{sessionId:$,status:Z}})}async emitSessionSnapshot($){let Z=await this.getSession($);if(!Z)return;this.emit({type:"session_snapshot",payload:{sessionId:$,snapshot:U1({session:Z,messages:await this.readSessionMessages($),usage:this.usageBySession.get($),aggregateUsage:this.aggregateUsageBySession.get($)})}})}emit($){this.events.emit($)}async listRows($){return this.invoke("listSessions",Math.min(Math.max(1,Math.floor($)),_U))}async getRow($){let Z=$.trim();if(!Z)return;return(await this.listRows(_U)).find((W)=>W.sessionId===Z)}async readManifest($){let Z=$.trim();if(!Z)return;return await this.invokeOptionalValue("readSessionManifest",Z)}invoke($,...Z){return fU(this.sessionService,$,...Z)}invokeOptional($,...Z){return UU(this.sessionService,$,...Z)}invokeOptionalValue($,...Z){return DU(this.sessionService,$,...Z)}}function Hx($){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 Bx($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}function VU($={}){let Z=new T1({sessionService:new z1(new L1),fetch:$.fetch,telemetry:$.telemetry});return{async startSession(Q){let W=(Q.cwd?.trim()||Q.workspaceRoot).trim(),J=await Z.startSession({source:Q.source?.trim()||T0.CLI,interactive:!1,config:{providerId:Vx(Q.provider),modelId:Q.model,apiKey:Q.apiKey?.trim()||void 0,cwd:W,workspaceRoot:Q.workspaceRoot,systemPrompt:Q.systemPrompt??"",mode:Bx(Q),maxIterations:Q.maxIterations,enableTools:Q.enableTools!==!1,enableSpawnAgent:Q.enableSpawn!==!1,enableAgentTeams:Q.enableTeams!==!1,disableMcpSettingsTools:Q.disableMcpSettingsTools,missionLogIntervalSteps:Q.missionStepInterval,missionLogIntervalMs:Q.missionTimeIntervalMs},toolPolicies:Q.toolPolicies??{"*":{autoApprove:Q.autoApproveTools!==!1}},localRuntime:{configExtensions:Q.configExtensions}});return{sessionId:J.sessionId,startResult:{sessionId:J.sessionId,manifestPath:J.manifestPath,messagesPath:J.messagesPath}}},async sendSession(Q,W){let J=await Z.runTurn({sessionId:Q,prompt:W.prompt,userImages:W.attachments?.userImages,userFiles:W.attachments?.userFiles?.map((X)=>X.content)});if(!J)throw Error("local hub schedule runtime returned no turn result");return{result:Hx(J)}},async abortSession(Q){return await Z.abort(Q,Error("hub schedule abort")),{applied:!0}},async stopSession(Q){return await Z.stopSession(Q),{applied:!0}}}}import{resolveClineBuildEnv as DD}from"@cline/shared";function Gx($){if(typeof $==="string")return $.trim()||void 0;if(!Array.isArray($))return;return $.map((Q)=>{if(Q&&typeof Q==="object"&&"type"in Q&&Q.type==="text"&&"text"in Q&&typeof Q.text==="string")return Q.text.trim();return""}).filter(Boolean).join(`
|
|
736
|
+
`).trim()||void 0}var zU=120,xY="...";function J9($){let Z=$.trim();if(!Z)return"";if(Buffer.byteLength(Z,"utf8")<=zU)return Z;let Q=zU-Buffer.byteLength(xY,"utf8");if(Q<=0)return xY;let W="";for(let J of Z){if(Buffer.byteLength(W+J,"utf8")>Q)break;W+=J}return`${W}${xY}`}async function TU($){let Z=$?.sessionId?.trim()||"unknown",Q=typeof $?.metadata?.messagesPath==="string"?$.metadata.messagesPath:void 0,J=[...await I$(Q)].reverse().find((V)=>V.role==="assistant"),X=J?Gx(J.content):void 0,Y=$?.workspaceRoot?.trim()||"workspace",j=typeof $?.metadata?.prompt==="string"?$.metadata.prompt.trim():Y;return{title:`Task completed (${Z})`,body:J9(X&&X.length>0?X:j.length>0?j:Y),severity:"info"}}import{captureSdkError as e7,createSessionId as Hg}from"@cline/shared";import{createSessionId as fx}from"@cline/shared";import{createSessionId as Ax}from"@cline/shared";function Kx($){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 Fx($){let Z=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):{};if($.parentSessionId?.trim())Z.parentSessionId=$.parentSessionId;if($.parentAgentId?.trim())Z.parentAgentId=$.parentAgentId;if($.agentId?.trim())Z.agentId=$.agentId;if($.conversationId?.trim())Z.conversationId=$.conversationId;if($.messagesPath?.trim())Z.messagesPath=$.messagesPath;if($.prompt?.trim())Z.prompt=$.prompt;if($.provider?.trim())Z.provider=$.provider;if($.model?.trim())Z.model=$.model;if($.source?.trim())Z.source=$.source;if(typeof $.pid==="number")Z.pid=$.pid;return Object.keys(Z).length>0?Z:void 0}function a7($,Z,Q,W){return{sessionId:$.sessionId,workspaceRoot:$.workspaceRoot,cwd:$.cwd,createdAt:Date.parse($.startedAt),updatedAt:Date.parse($.updatedAt),createdByClientId:Z?.createdByClientId??"hub",status:Kx($.status),participants:Z?[...Z.participants.values()]:[],metadata:Fx($),runtimeOptions:{enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,mode:typeof $.metadata?.mode==="string"?$.metadata.mode:void 0,systemPrompt:typeof $.metadata?.systemPrompt==="string"?$.metadata.systemPrompt:void 0},runtimeSession:$.agentId?{agentId:$.agentId,team:$.teamName?{teamId:$.teamName}:void 0}:void 0,...Q?{usage:{...Q}}:{},...W?{aggregateUsage:{...W}}:{}}}function c($,Z){return{version:$.version,requestId:$.requestId,ok:!0,...Z!==void 0?{payload:Z}:{}}}function x($,Z,Q){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:Z,message:Q}}}function s7($){return $&&typeof $==="object"&&!Array.isArray($)?$:void 0}function I0($){if(typeof $.payload?.sessionId==="string")return $.payload.sessionId.trim();return $.sessionId?.trim()??""}function r2($,Z,Q){return{version:"v1",event:$,eventId:Ax("hevt_"),sessionId:Q,timestamp:Date.now(),payload:Z}}async function o0($,Z){let Q=await $.sessionHost.getSession(Z);if(!Q)return;let W=await $.sessionHost.getAccumulatedUsage?.(Z);return a7(Q,$.sessionState.get(Z),W?.usage,W?.aggregateUsage)}async function t0($,Z){let Q=await $.sessionHost.getSession(Z);if(!Q)return;let[W,J]=await Promise.all([typeof $.sessionHost.readSessionMessages==="function"?$.sessionHost.readSessionMessages(Z):[],$.sessionHost.getAccumulatedUsage?.(Z)]);return U1({session:Q,messages:W,usage:J?.usage,aggregateUsage:J?.aggregateUsage})}function o7($,Z,Q,W,J={}){let X=$.sessionState.get(Z);if(X){if(J.interactive!==void 0)X.interactive=J.interactive;if(!X.participants.has(Q))X.participants.set(Q,{clientId:Q,attachedAt:Date.now(),role:W});return X}let Y={createdByClientId:Q,interactive:J.interactive??!0,participants:new Map([[Q,{clientId:Q,attachedAt:Date.now(),role:W}]])};return $.sessionState.set(Z,Y),Y}async function gY($,Z){let Q=fx("approval_"),W=Z.sessionId;if($.sessionState.get(W)?.interactive===!1)return{approved:!1,reason:"Tool approval requires an interactive session, but this session is non-interactive."};return await new Promise((X)=>{$.pendingApprovals.set(Q,{sessionId:W,resolve:X}),$.publish($.buildEvent("approval.requested",{approvalId:Q,sessionId:Z.sessionId,agentId:Z.agentId,conversationId:Z.conversationId,iteration:Z.iteration,toolCallId:Z.toolCallId,toolName:Z.toolName,inputJson:JSON.stringify(Z.input??null),policy:Z.policy},W))})}function mY($,Z,Q){let W=$.pendingApprovals.get(Z);if(!W)return;return $.pendingApprovals.delete(Z),W.resolve(Q),{sessionId:W.sessionId}}function vY($,Z,Q){let W=0;for(let[J,X]of[...$.pendingApprovals.entries()]){if(!Z({approvalId:J,sessionId:X.sessionId}))continue;$.pendingApprovals.delete(J),X.resolve({approved:!1,reason:Q}),$.publish($.buildEvent("approval.resolved",{approvalId:J,approved:!1,cancelled:!0,reason:Q},X.sessionId)),W+=1}return W}async function OU($,Z){let Q=typeof Z.payload?.approvalId==="string"?Z.payload.approvalId.trim():"";if(!$.pendingApprovals.get(Q))return x(Z,"approval_not_found",`Unknown approval: ${Q}`);let J=typeof Z.payload?.reason==="string"?Z.payload.reason:Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)&&typeof Z.payload.payload.reason==="string"?Z.payload.payload.reason:void 0,X=Z.payload?.approved===!0,Y=mY($,Q,{approved:X,reason:J});if(!Y)return x(Z,"approval_not_found",`Unknown approval: ${Q}`);return $.publish($.buildEvent("approval.resolved",{approvalId:Q,approved:X,reason:J},Y.sessionId)),c(Z,{approvalId:Q,approved:X})}import{createSessionId as Lx}from"@cline/shared";function Ux($){if($ instanceof Error)return{name:$.name,message:$.message,stack:$.stack};if($===void 0)return;return $}var qU={debug:10,info:20,warn:30,error:40,silent:50};function Dx(){let $=process.env.CLINE_HUB_LOG_LEVEL?.trim().toLowerCase();if($==="debug"||$==="info"||$==="warn"||$==="error"||$==="silent")return $;return process.env.VITEST?"error":"info"}function u($,Z,Q={}){if(qU[$]<qU[Dx()])return;let W=JSON.stringify({ts:new Date().toISOString(),level:$,component:"hub",message:Z,...Object.fromEntries(Object.entries(Q).map(([J,X])=>[J,Ux(X)]).filter(([,J])=>J!==void 0))});if($==="error"||$==="warn"){console.error(`[hub] ${W}`);return}console.log(`[hub] ${W}`)}function cY($,Z){let Q=Z instanceof Error?Z.stack||Z.message:String(Z);u("error",$,{error:Q})}async function MU($,Z,Q,W,J,X){let Y=Lx("capreq_"),j=performance.now();return u("info","capability.request.start",{requestId:Y,sessionId:Z,capabilityName:Q,targetClientId:J}),await new Promise((V,H)=>{$.pendingCapabilityRequests.set(Y,{sessionId:Z,targetClientId:J,capabilityName:Q,onProgress:X,resolve:(B)=>{if(u(B.ok?"info":"warn","capability.request.end",{requestId:Y,sessionId:Z,capabilityName:Q,targetClientId:J,ok:B.ok,error:B.error,durationMs:Math.round(performance.now()-j)}),!B.ok){H(Error(B.error||`Capability ${Q} was rejected by ${J}.`));return}V(B.payload)}}),$.publish($.buildEvent("capability.requested",{requestId:Y,targetClientId:J,capabilityName:Q,payload:W},Z)),u("info","capability.request.published",{requestId:Y,sessionId:Z,capabilityName:Q,targetClientId:J})})}function RU($,Z){let Q=typeof Z.payload?.requestId==="string"?Z.payload.requestId.trim():"",W=$.pendingCapabilityRequests.get(Q);if(!W)return x(Z,"capability_not_found",`Unknown capability request: ${Q}`);if((Z.clientId?.trim()||"")!==W.targetClientId)return x(Z,"capability_wrong_client",`Capability request ${Q} is owned by ${W.targetClientId}`);if(Z.sessionId?.trim()&&Z.sessionId.trim()!==W.sessionId)return x(Z,"capability_wrong_session",`Capability request ${Q} belongs to session ${W.sessionId}`);let X=Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)?Z.payload.payload:{};return W.onProgress?.(X),c(Z,{requestId:Q})}function u$($,Z,Q){let W=0;for(let[J,X]of[...$.pendingCapabilityRequests.entries()]){if(!Z({requestId:J,...X}))continue;$.pendingCapabilityRequests.delete(J),u("warn","capability.request.cancelled",{requestId:J,sessionId:X.sessionId,capabilityName:X.capabilityName,targetClientId:X.targetClientId,reason:Q}),X.resolve({ok:!1,error:Q}),$.publish($.buildEvent("capability.resolved",{requestId:J,capabilityName:X.capabilityName,targetClientId:X.targetClientId,ok:!1,cancelled:!0,error:Q},X.sessionId)),W+=1}return W}async function EU($,Z){let Q=typeof Z.payload?.sessionId==="string"?Z.payload.sessionId.trim():Z.sessionId?.trim()||"",W=typeof Z.payload?.capabilityName==="string"?Z.payload.capabilityName.trim():"",J=typeof Z.payload?.targetClientId==="string"?Z.payload.targetClientId.trim():"";if(!Q||!W||!J)return x(Z,"invalid_capability_request","capability.request requires sessionId, capabilityName, and targetClientId");try{let X=Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)?Z.payload.payload:{},Y=await $.requestCapability(Q,W,X,J);return c(Z,Y)}catch(X){return x(Z,"capability_request_failed",X instanceof Error?X.message:String(X))}}function NU($,Z){let Q=typeof Z.payload?.requestId==="string"?Z.payload.requestId.trim():"",W=$.pendingCapabilityRequests.get(Q);if(!W)return x(Z,"capability_not_found",`Unknown capability request: ${Q}`);let J=Z.clientId?.trim()||"";if(J!==W.targetClientId)return x(Z,"capability_wrong_client",`Capability request ${Q} is owned by ${W.targetClientId}`);if(Z.sessionId?.trim()&&Z.sessionId.trim()!==W.sessionId)return x(Z,"capability_wrong_session",`Capability request ${Q} belongs to session ${W.sessionId}`);$.pendingCapabilityRequests.delete(Q);let X=Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)?Z.payload.payload:void 0,Y=typeof Z.payload?.error==="string"?Z.payload.error:void 0,j=Z.payload?.ok===!0;return u(j?"info":"warn","capability.respond",{requestId:Q,sessionId:W.sessionId,capabilityName:W.capabilityName,targetClientId:W.targetClientId,respondedByClientId:J,ok:j,error:Y}),W.resolve({ok:j,payload:X,error:Y}),$.publish($.buildEvent("capability.resolved",{requestId:Q,capabilityName:W.capabilityName,targetClientId:W.targetClientId,respondedByClientId:J,ok:j,payload:X,error:Y},W.sessionId)),c(Z,{requestId:Q,ok:j})}import{createSessionId as _x}from"@cline/shared";function wU($,Z){let Q=Z.payload,W=Q?.clientId?.trim()||Z.clientId?.trim()||_x("client_");return $.clients.set(W,{clientId:W,clientType:Q?.clientType??"unknown",displayName:Q?.displayName,actorKind:Q?.actorKind??"client",connectedAt:Date.now(),lastSeenAt:Date.now(),transport:Q?.transport??"native",capabilities:Q?.capabilities??[],metadata:Q?.metadata,workspaceContext:Q?.workspaceContext}),$.publish($.buildEvent("hub.client.registered",{clientId:W,clientType:Q?.clientType??"unknown",displayName:Q?.displayName,connectedAt:Date.now()})),c(Z,{clientId:W})}function CU($,Z){let Q=Z.clientId?.trim(),W=Q?$.clients.get(Q):void 0;if(!Q||!W)return x(Z,"client_not_found","Client is not registered with this hub.");let J=s7(Z.payload?.metadata);if(W.lastSeenAt=Date.now(),J)W.metadata=JSON.parse(JSON.stringify(J));return c(Z)}function PU($,Z,Q){let W=Z.clientId?.trim();if(W)$.clients.delete(W),Q(W),$.publish($.buildEvent("hub.client.disconnected",{clientId:W}));return c(Z)}function SU($,Z){return c(Z,{clients:[...$.clients.values()]})}_0();import{existsSync as hU,mkdirSync as zx,readdirSync as Tx,readFileSync as Ox,rmSync as qx,writeFileSync as Mx}from"node:fs";import{dirname as Rx,join as bU}from"node:path";import{CONNECTOR_PLATFORMS as Ex,connectorChannelsFromPlatforms as Nx,listConnectorCatalog as kU,shouldIncludeConnectorField as wx}from"@cline/shared";import{resolveConnectorDataDir as Cx,resolveConnectorSettingsPath as dY}from"@cline/shared/storage";var Px=1,yU={startedAt:($)=>typeof $.startedAt==="string"?$.startedAt:void 0,port:($)=>typeof $.port==="number"?$.port:void 0,baseUrl:($)=>typeof $.baseUrl==="string"?$.baseUrl:void 0,connectionMode:($)=>typeof $.connectionMode==="string"?$.connectionMode:void 0,userName:($)=>typeof $.userName==="string"?$.userName:void 0,botUsername:($)=>typeof $.botUsername==="string"?$.botUsername:void 0,applicationId:($)=>typeof $.applicationId==="string"?$.applicationId:void 0,phoneNumberId:($)=>typeof $.phoneNumberId==="string"?$.phoneNumberId:void 0},Sx={discord:{required:["userName","applicationId"],optional:["startedAt","port","baseUrl"]},telegram:{required:["botUsername"],optional:["startedAt"]},gchat:{required:["userName"],optional:["startedAt","port","baseUrl"]},linear:{required:["userName"],optional:["startedAt","port","baseUrl"]},slack:{required:["userName"],optional:["startedAt","connectionMode","port","baseUrl"]},whatsapp:{required:["userName"],optional:["startedAt","phoneNumberId","port","baseUrl"]}};function d$($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function H9($){return typeof $==="string"?$.trim():void 0}function IU($){if(!hU($))return;try{let Z=JSON.parse(Ox($,"utf8"));return d$(Z)?Z:void 0}catch{return}}function lY(){let $=IU(dY()),Z=d$($?.connectors)?$.connectors:{},Q={};for(let[W,J]of Object.entries(Z)){if(!d$(J))continue;let X=H9(J.type),Y=H9(J.configuredAt),j=H9(J.updatedAt);if(!X||!Y||!j)continue;let V=t7(J.values),H=d$(J.security)?{enabled:J.security.enabled===!0,values:t7(J.security.values)}:void 0;Q[W]={type:X,values:V,security:H,configuredAt:Y,updatedAt:j}}return{version:Px,connectors:Q}}function xU($){let Z=dY();zx(Rx(Z),{recursive:!0}),Mx(Z,`${JSON.stringify($,null,2)}
|
|
737
|
+
`,"utf8")}function t7($){if(!d$($))return{};let Z={};for(let[Q,W]of Object.entries($))if(typeof W==="string")Z[Q]=W.trim();return Z}function bx($){if(!Number.isInteger($)||$<=0)return!1;try{return process.kill($,0),!0}catch{return!1}}function yx($){let Z=bU(Cx(),$);if(!hU(Z))return[];return Tx(Z).filter((Q)=>Q.endsWith(".json")&&!Q.endsWith(".threads.json")).map((Q)=>bU(Z,Q))}function hx($,Z,Q){let W=Z.botUsername??Z.userName??Z.applicationId??Z.phoneNumberId??String(Q);return`${$}:${W}`}function kx($,Z){let Q=IU(Z);if(!Q)return;let W=typeof Q.pid==="number"?Q.pid:void 0,J=typeof Q.hubUrl==="string"?Q.hubUrl:typeof Q.rpcAddress==="string"?Q.rpcAddress:void 0;if(!W||!J||!bx(W))return;let X=Sx[$];if(!X)return;let Y={};for(let j of X.required){let V=yU[j](Q);if(!V||typeof V==="string"&&!V.trim())return;Y[j]=V}for(let j of X.optional){let V=yU[j](Q);if(V!==void 0)Y[j]=V}return{id:hx($,Y,W),type:$,pid:W,hubUrl:J,...Y}}function Ix(){let $=[];for(let{name:Z}of kU())for(let Q of yx(Z)){let W=kx(Z,Q);if(W)$.push(W)}return $.sort((Z,Q)=>{if(Z.type!==Q.type)return Z.type.localeCompare(Q.type);let W=Z.botUsername??Z.userName??"",J=Q.botUsername??Q.userName??"";return W.localeCompare(J)})}function xx(){let $=lY();return Object.entries($.connectors).map(([Z,Q])=>({id:Z,type:Q.type,configuredAt:Q.configuredAt,updatedAt:Q.updatedAt})).sort((Z,Q)=>Z.type.localeCompare(Q.type))}function pY(){return{available:Nx(),active:Ix(),configured:xx()}}function gx($,Z){if($.required&&!Z[$.flag]?.trim())throw Error(`${$.label} is required`)}function mx($,Z){let Q={};for(let J of $.fields)Q[J.flag]=Z[J.flag]??J.initialValue??"";let W={};for(let J of $.fields){if(!wx(J,Q))continue;gx(J,Q),W[J.flag]=Q[J.flag]}return W}function vx($){if(!d$($))throw Error("connector.configure payload must be an object.");let Z=H9($.channel);if(!Z)throw Error("channel is required");let Q=Ex.find((K)=>K.id===Z);if(!Q)throw Error(`unknown connector channel: ${Z}`);if(!new Set(kU().map((K)=>K.name)).has(Q.id))throw Error(`connector channel is not available: ${Z}`);let J=t7($.values),X=mx(Q,J),Y=d$($.security)?$.security:{},j=Y.enabled===!0,V=t7(Y.values);if(j&&Q.security)for(let K of Q.security.fields){let F=V[K.key];if(!F)throw Error(K.requiredMessage);let A=K.validate?.(F);if(A)throw Error(A)}let H=lY(),B=new Date().toISOString(),G=H.connectors[Z];return H.connectors[Z]={type:Z,values:X,security:j?{enabled:!0,values:V}:{enabled:!1,values:{}},configuredAt:G?.configuredAt??B,updatedAt:B},xU(H),pY()}function cx($){if(!d$($))throw Error("connector.delete_config payload must be an object.");let Z=H9($.channel);if(!Z)throw Error("channel is required");let Q=lY();if(delete Q.connectors[Z],Object.keys(Q.connectors).length>0)xU(Q);else qx(dY(),{force:!0});return pY()}function ux($){return $==="connector.configure"||$==="connector.delete_config"}function uY($,Z,Q){if(!ux(Z.command))return;W8($.telemetry,{ulid:Z.sessionId??Z.requestId??"hub",tool:Z.command,success:Q})}async function gU($,Z){try{if(Z.command==="connector.channels")return c(Z,pY());if(Z.command==="connector.configure"){let Q=vx(Z.payload);return uY($,Z,!0),c(Z,Q)}if(Z.command==="connector.delete_config"){let Q=cx(Z.payload);return uY($,Z,!0),c(Z,Q)}return x(Z,"unsupported_connector_command",`unsupported connector command: ${Z.command}`)}catch(Q){return uY($,Z,!1),x(Z,"connector_command_failed",Q instanceof Error?Q.message:String(Q))}}var dx=30000;function lx($){if($==="aborted")return"run.aborted";if($==="error"||$==="failed")return"run.failed";return"run.completed"}function px($){if($.finishReason!=="error")return;return $.text.trim()||void 0}function rx($,Z,Q){let W=Q instanceof Error&&Q.message.trim()?Q.message:`Unknown session: ${Z}`;return x($,s$,W)}function ix($){return $?$:void 0}function nx($){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 ax($,Z,Q,W){let J=performance.now(),X=!1,Y={command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Q.sessionId,timeoutMs:W},j=setInterval(()=>{if(X)return;let B=Math.round(performance.now()-J);u("warn","run.heartbeat",{...Y,elapsedMs:B}),$.publish($.buildEvent("run.heartbeat",{requestId:Z.requestId,elapsedMs:B,...W?{timeoutMs:W}:{}},Q.sessionId))},dx),V=$.sessionHost.runTurn(Q);V.then((B)=>{if(!X)return;u("warn","run.late_end",{...Y,elapsedMs:Math.round(performance.now()-J),finishReason:B?.finishReason})},(B)=>{if(!X)return;u("error","run.late_error",{...Y,elapsedMs:Math.round(performance.now()-J),error:B})});let H;try{if(!W)return await V;return await Promise.race([V,new Promise((B,G)=>{H=setTimeout(()=>{let K=`Hub run ${Z.command} timed out after ${W}ms.`;X=!0,clearInterval(j),G(Error(K)),u("error","run.timeout",{...Y,elapsedMs:Math.round(performance.now()-J)}),vY($,(F)=>F.sessionId===Q.sessionId,K),u$($,(F)=>F.sessionId===Q.sessionId,K),$.sessionHost.abort(Q.sessionId,K).catch((F)=>{u("error","run.timeout_abort_failed",{...Y,error:F})})},W)})])}finally{if(X=!0,clearInterval(j),H)clearTimeout(H)}}async function mU($,Z){let Q=I0(Z),W=Z.payload&&typeof Z.payload==="object"?Z.payload:{},J=typeof W.prompt==="string"?W.prompt:typeof W.input==="string"?W.input:"";if(!J.trim())return x(Z,"invalid_session_input","session input requires a prompt string");$.publish($.buildEvent("run.started",void 0,Q));let X=W.attachments&&typeof W.attachments==="object"&&!Array.isArray(W.attachments)?W.attachments:void 0,Y=Array.isArray(X?.userFiles)?X.userFiles.filter((B)=>typeof B==="string"):void 0,j=nx(W);$.suppressNextTerminalEventBySession.set(Q,"run.start.reply");let V;try{V=await ax($,Z,{sessionId:Q,prompt:J,mode:ix(W.mode),delivery:W.delivery==="queue"||W.delivery==="steer"?W.delivery:void 0,userImages:Array.isArray(X?.userImages)?X.userImages:void 0,userFiles:Y,timeoutMs:j},j)}catch(B){if($.suppressNextTerminalEventBySession.get(Q)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Q);if(I1(B))return rx(Z,Q,B);throw $.publish($.buildEvent("run.failed",{reason:"error",error:B instanceof Error?B.message:String(B)},Q)),B}if(V){let B=await t0($,Q),G=px(V);if($.publish($.buildEvent(lx(V.finishReason),{reason:V.finishReason,...G?{error:G}:{},result:V,...B?{snapshot:B}:{}},Q)),$.suppressNextTerminalEventBySession.get(Q)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Q)}else $.suppressNextTerminalEventBySession.delete(Q);let H=await t0($,Q);return c(Z,V||H?{...V?{result:V}:{},...H?{snapshot:H}:{}}:void 0)}async function vU($,Z){let Q=I0(Z),W=typeof Z.payload?.reason==="string"?Z.payload.reason:"Run was aborted before pending approval or capability request was resolved.";vY($,(J)=>J.sessionId===Q,W);try{await $.sessionHost.abort(Q,Z.payload?.reason)}catch(J){u("warn","run.abort_failed",{command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Q,error:J})}finally{u$($,(J)=>J.sessionId===Q,W)}return c(Z,{applied:!0})}async function cU($,Z){let Q=D4(Z.payload?.payload);if(!Q)return x(Z,"invalid_hook_payload","session.hook requires a valid hook event payload");return await $.sessionHost.dispatchHookEvent(Q),c(Z,{applied:!0})}async function uU($,Z){switch(Z.type){case"chunk":return;case"agent_event":await sx($,Z);return;case"hook":if(Z.payload.hookEventName==="tool_call")$.publish($.buildEvent("tool.started",{toolName:Z.payload.toolName},Z.payload.sessionId));else if(Z.payload.hookEventName==="tool_result")$.publish($.buildEvent("tool.finished",{toolName:Z.payload.toolName},Z.payload.sessionId));return;case"team_progress":{let Q={type:"team_progress_projection",version:1,sessionId:Z.payload.sessionId,summary:Z.payload.summary,lastEvent:Z.payload.lifecycle};$.publish($.buildEvent("team.progress",Q,Z.payload.sessionId));return}case"pending_prompts":$.publish($.buildEvent("session.pending_prompts",{sessionId:Z.payload.sessionId,prompts:Z.payload.prompts},Z.payload.sessionId));return;case"pending_prompt_submitted":{let Q={id:Z.payload.id,prompt:Z.payload.prompt,delivery:Z.payload.delivery,attachmentCount:Z.payload.attachmentCount,userImages:Z.payload.userImages,userFiles:Z.payload.userFiles};$.publish($.buildEvent("session.pending_prompt_submitted",{sessionId:Z.payload.sessionId,prompt:Q},Z.payload.sessionId));return}case"session_snapshot":$.publish($.buildEvent("session.updated",{sessionId:Z.payload.sessionId,snapshot:Z.payload.snapshot},Z.payload.sessionId));return;case"status":{let[Q,W]=await Promise.all([o0($,Z.payload.sessionId),t0($,Z.payload.sessionId)]);if(Q)$.publish($.buildEvent("session.updated",{session:Q,...W?{snapshot:W}:{}},Z.payload.sessionId));return}case"ended":await ox($,Z);return;default:return}}async function sx($,Z){let{sessionId:Q,event:W}=Z.payload;if(W.type==="iteration_start"){$.publish($.buildEvent("iteration.started",{iteration:W.iteration},Q));return}if(W.type==="iteration_end"){$.publish($.buildEvent("iteration.finished",{iteration:W.iteration,hadToolCalls:W.hadToolCalls,toolCallCount:W.toolCallCount},Q));return}if(W.type==="content_start"){if(W.contentType==="text"&&typeof W.text==="string"&&W.text.length>0){$.publish($.buildEvent("assistant.delta",{text:W.text},Q));return}if(W.contentType==="reasoning"){if(W.redacted&&!W.reasoning){$.publish($.buildEvent("reasoning.delta",{text:"",redacted:!0},Q));return}if(typeof W.reasoning==="string"&&W.reasoning.length>0)$.publish($.buildEvent("reasoning.delta",{text:W.reasoning,redacted:W.redacted===!0},Q));return}if(W.contentType==="tool"){$.publish($.buildEvent("tool.started",{toolCallId:W.toolCallId,toolName:W.toolName,input:W.input},Q));return}}if(W.type==="content_end"){switch(W.contentType){case"text":$.publish($.buildEvent("assistant.finished",{text:W.text},Q));break;case"reasoning":$.publish($.buildEvent("reasoning.finished",{reasoning:W.reasoning},Q));break;case"tool":$.publish($.buildEvent("tool.finished",{toolCallId:W.toolCallId,toolName:W.toolName,output:W.output,error:W.error},Q));break}return}if(W.type==="usage"){let J;try{J=await $.sessionHost.getAccumulatedUsage?.(Q)}catch{J=void 0}$.publish($.buildEvent("usage.updated",{sessionId:Q,delta:{inputTokens:W.inputTokens,outputTokens:W.outputTokens,cacheReadTokens:W.cacheReadTokens??0,cacheWriteTokens:W.cacheWriteTokens??0,totalCost:W.cost??0},totals:{inputTokens:W.totalInputTokens,outputTokens:W.totalOutputTokens,cacheReadTokens:W.totalCacheReadTokens??0,cacheWriteTokens:W.totalCacheWriteTokens??0,totalCost:W.totalCost??0},usage:J?.usage,aggregateUsage:J?.aggregateUsage,agent:{kind:Z.payload.teamRole==="teammate"?"teammate":W.parentAgentId?"subagent":"lead",agentId:W.agentId,conversationId:W.conversationId,parentAgentId:W.parentAgentId,teamAgentId:Z.payload.teamAgentId,teamRole:Z.payload.teamRole}},Q));return}if(W.type==="done")$.publish($.buildEvent("agent.done",{reason:W.reason,text:W.text,iterations:W.iterations,usage:W.usage},Q))}async function ox($,Z){let Q=$.suppressNextTerminalEventBySession.get(Z.payload.sessionId),W=Q===Z.payload.reason||Q==="run.start.reply";if(W)$.suppressNextTerminalEventBySession.delete(Z.payload.sessionId);let[J,X]=await Promise.all([o0($,Z.payload.sessionId),t0($,Z.payload.sessionId)]);if(Z.payload.reason==="completed"){let Y=await TU(J);$.publish($.buildEvent("ui.notify",Y,Z.payload.sessionId))}if(W)return;$.publish($.buildEvent(Z.payload.reason==="aborted"?"run.aborted":Z.payload.reason==="error"||Z.payload.reason==="failed"?"run.failed":"run.completed",{reason:Z.payload.reason,...X?{snapshot:X}:{}},Z.payload.sessionId))}import{createSessionId as pU,parseRuntimeConfigExtensions as rU}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as V10,HUB_COMPACTION_CAPABILITY as H10,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as B10,HUB_HOOK_CAPABILITY_PREFIX as G10,HUB_MISTAKE_LIMIT_CAPABILITY as K10,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as F10,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as A10,isHubToolExecutorName as tx}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as _10,HUB_COMPACTION_CAPABILITY as z10,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as T10,HUB_HOOK_CAPABILITY_PREFIX as O10,HUB_MISTAKE_LIMIT_CAPABILITY as q10,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as M10,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as R10}from"@cline/shared";var ex=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function i2($){return $&&typeof $==="object"&&!Array.isArray($)?JSON.parse(JSON.stringify($)):void 0}function $g($,Z){let Q=typeof $.name==="string"?$.name.trim():"",W=typeof $.description==="string"?$.description:"",J=typeof $.capabilityName==="string"?$.capabilityName.trim():"",X=i2($.inputSchema);if(!Q||!W||!X||!J||Z.has(J))return;return Z.add(J),{kind:"tool",capabilityName:J,name:Q,description:W,inputSchema:X,...i2($.lifecycle)?{lifecycle:i2($.lifecycle)}:{}}}function iY($){if(!Array.isArray($))return[];let Z=[],Q=new Set;for(let W of $){if(!W||typeof W!=="object"||Array.isArray(W))continue;let J=W,X=J.kind,Y=typeof J.capabilityName==="string"?J.capabilityName.trim():"";if(!Y||Q.has(Y))continue;if(X==="tool"){let j=$g(J,Q);if(j)Z.push(j);continue}if(X==="toolExecutor"){let j=J.executor;if(!tx(j))continue;Q.add(Y),Z.push({kind:"toolExecutor",capabilityName:Y,executor:j});continue}if(X==="hook"){let j=typeof J.name==="string"?J.name.trim():"";if(!j)continue;Q.add(Y),Z.push({kind:"hook",capabilityName:Y,name:j});continue}if(X==="compaction"){Q.add(Y),Z.push({kind:"compaction",capabilityName:Y,...i2(J.config)?{config:i2(J.config)}:{}});continue}if(X==="checkpoint"){Q.add(Y),Z.push({kind:"checkpoint",capabilityName:Y,...i2(J.config)?{config:i2(J.config)}:{}});continue}if(X==="mistakeLimit"){Q.add(Y),Z.push({kind:"mistakeLimit",capabilityName:Y});continue}if(X==="userInstructionService")Q.add(Y),Z.push({kind:"userInstructionService",capabilityName:Y})}return Z}function lU($){return{agentId:$.agentId,conversationId:$.conversationId,iteration:$.iteration,metadata:$.metadata}}function Zg($){return Object.hasOwn($,"update")?$.update:$}function B9($){return $.trim().replace(/^\/+/,"").toLowerCase()}function Qg($){let Z=($??[]).map(B9).filter(Boolean);return Z.length>0?new Set(Z):void 0}function Wg($,Z,Q){if(!Q)return!0;let W=B9($),J=B9(Z),X=W.includes(":")?W.split(":").at(-1)??W:W,Y=J.includes(":")?J.split(":").at(-1)??J:J;return Q.has(W)||Q.has(J)||Q.has(X)||Q.has(Y)}function rY($,Z){let Q=Qg(Z);return $.records.skill.map((W)=>({id:W.id,name:W.item.name,description:"description"in W.item&&typeof W.item.description==="string"?W.item.description:void 0,disabled:W.item.disabled===!0,skill:W.item})).filter((W)=>Wg(W.id,W.name,Q))}function dU($,Z){let Q=async(W,J)=>{let X=B9(W),j=rY($,Z).filter((K)=>K.id===X||B9(K.name)===X||K.id.endsWith(`:${X}`)).filter((K)=>!K.disabled);if(j.length!==1)return j.length>1?`Skill "${W}" is ambiguous. Use one of: ${j.map((K)=>K.id).join(", ")}`:`Skill "${W}" not found.`;let V=j[0].skill,H=J?.trim(),B=H?`
|
|
738
738
|
<command-args>${H}</command-args>`:"",G=V.description?.trim()?`Description: ${V.description.trim()}
|
|
739
739
|
|
|
740
740
|
`:"";return`<command-name>${V.name}</command-name>${B}
|
|
741
741
|
<command-instructions>
|
|
742
742
|
${G}${V.instructions}
|
|
743
|
-
</command-instructions>`};return Object.defineProperty(Q,"configuredSkills",{get:()=>rY($,Z).map(({skill:W,...J})=>J),enumerable:!0}),Q}function
|
|
743
|
+
</command-instructions>`};return Object.defineProperty(Q,"configuredSkills",{get:()=>rY($,Z).map(({skill:W,...J})=>J),enumerable:!0}),Q}function Jg($,Z,Q,W){let J={records:{skill:[],rule:[],workflow:[]},runtimeCommands:[]},X=async()=>{let Y=await W($,Q.capabilityName,{},Z);if(Y?.snapshot)J=Y.snapshot};return{start:X,stop:()=>{},refreshType:async()=>{await X()},listRecords:(Y)=>[...J.records[Y]],listRuntimeCommands:()=>[...J.runtimeCommands],resolveRuntimeSlashCommand:(Y)=>{if(!Y.startsWith("/")||Y.length<2)return Y;let V=Y.match(/^\/(\S+)/)?.[1];if(!V)return Y;let H=J.runtimeCommands.find((B)=>B.name===V);return H?`${H.instructions}${Y.slice(V.length+1)}`:Y},hasConfiguredSkills:(Y)=>rY(J,Y).some((j)=>!j.disabled),createSkillsExecutor:(Y)=>dU(J,Y),createExtension:(Y)=>({name:"cline-hub-user-instructions",manifest:{capabilities:[Y.includeRules?"rules":void 0,Y.registerSkillsTool?"tools":void 0,Y.includeSkills||Y.includeWorkflows?"commands":void 0].filter((j)=>Boolean(j))},setup(j){if(Y.includeRules)j.registerRule({id:"cline-hub-user-instructions:rules",source:"hub-user-instructions",content:()=>t2(J.records.rule.map((V)=>V.item).filter((V)=>V.disabled!==!0))});if(Y.registerSkillsTool)j.registerTool(V2(dU(J,Y.allowedSkillNames)));for(let V of J.runtimeCommands.filter((H)=>H.kind==="skill"&&Y.includeSkills||H.kind==="workflow"&&Y.includeWorkflows))j.registerCommand({name:V.name,description:V.description,handler:(H)=>{let B=H.trim();return B?`${V.instructions}
|
|
744
744
|
|
|
745
|
-
${B}`:V.instructions}})}})}}function Jg($,Z,Q,W){let J=Q.map((X)=>[X.executor,async(...Y)=>{let j=Y.at(-1),V=Y.slice(0,-1);return(await W($,X.capabilityName,{executor:X.executor,args:V,context:lU(j)},Z))?.result}]);return J.length>0?Object.fromEntries(J):void 0}function Xg($,Z,Q,W){if(Q.length===0)return;return Q.map((J)=>({name:J.name,description:J.description,inputSchema:J.inputSchema,lifecycle:J.lifecycle,async execute(X,Y){return(await W($,J.capabilityName,{toolName:J.name,input:X,context:lU(Y)},Z,Y.emitUpdate?(V)=>{Y.emitUpdate?.($g(V))}:void 0))?.result}}))}function Yg($,Z,Q,W){let J=new Map(Q.map((Y)=>[Y.name,Y])),X={};for(let Y of tx){let j=J.get(Y);if(!j)continue;X[Y]=async(V)=>{return(await W($,j.capabilityName,{context:V},Z))?.control}}return Object.keys(X).length>0?X:void 0}function nY($){let Z=$.contributions.filter((V)=>V.kind==="toolExecutor"),Q=$.contributions.filter((V)=>V.kind==="tool"),W=$.contributions.filter((V)=>V.kind==="hook"),J=$.contributions.find((V)=>V.kind==="compaction"),X=$.contributions.find((V)=>V.kind==="checkpoint"),Y=$.contributions.find((V)=>V.kind==="mistakeLimit"),j=$.contributions.find((V)=>V.kind==="userInstructionService");return{hasClientContributions:$.contributions.length>0,toolExecutors:Jg($.sessionId,$.targetClientId,Z,$.requestCapability),localRuntime:{...W.length>0?{hooks:Yg($.sessionId,$.targetClientId,W,$.requestCapability)}:{},...Q.length>0?{extraTools:Xg($.sessionId,$.targetClientId,Q,$.requestCapability)}:{},...J?{compaction:{...$.sessionConfig?.compaction??{},...J.config,compact:async(V)=>{return(await $.requestCapability($.sessionId,J.capabilityName,{context:V},$.targetClientId))?.result}}}:{},...X?{checkpoint:{...$.sessionConfig?.checkpoint??{},...X.config,createCheckpoint:async(V)=>{return(await $.requestCapability($.sessionId,X.capabilityName,{context:V},$.targetClientId))?.result}}}:{},...Y?{onConsecutiveMistakeLimitReached:async(V)=>{return(await $.requestCapability($.sessionId,Y.capabilityName,{context:V},$.targetClientId))?.result}}:{},...j?{userInstructionService:Wg($.sessionId,$.targetClientId,j,$.requestCapability)}:{}}}}var iU="hubCapabilityOwnerClientId";function nU($,Z){$[iU]=Z}function jg($){let Z=$?.[iU];return typeof Z==="string"&&Z.trim()?Z.trim():void 0}async function aU($,Z,Q){let W=performance.now(),J={command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Z.sessionId};u("info","session.create.begin",J);let X=Z.payload&&typeof Z.payload==="object"?Z.payload:{},Y=X.metadata&&typeof X.metadata==="object"?JSON.parse(JSON.stringify(X.metadata)):{},j=X.sessionConfig&&typeof X.sessionConfig==="object"?JSON.parse(JSON.stringify(X.sessionConfig)):void 0,V=X.runtimeOptions&&typeof X.runtimeOptions==="object"?X.runtimeOptions:{};if(typeof j?.mode==="string")Y.mode=j.mode;else if(typeof V.mode==="string")Y.mode=V.mode;if(typeof j?.systemPrompt==="string")Y.systemPrompt=j.systemPrompt;else if(typeof V.systemPrompt==="string")Y.systemPrompt=V.systemPrompt;if(j?.checkpoint?.enabled===!0)Y.checkpointEnabled=!0;else if(V.checkpointEnabled===!0)Y.checkpointEnabled=!0;let H=X.modelSelection&&typeof X.modelSelection==="object"?X.modelSelection:{},B=typeof X.workspaceRoot==="string"&&X.workspaceRoot.trim()?X.workspaceRoot.trim():typeof X.cwd==="string"&&X.cwd.trim()?X.cwd.trim():"";if(!B)return u("warn","session.create.invalid",{...J,reason:"missing_workspace_root"}),x(Z,"invalid_session_create","session.create requires workspaceRoot or cwd");let G=Z.clientId?.trim()||"hub-client",K=iY(V.clientContributions);if(u("info","session.create.contributions_parsed",{...J,clientId:G,workspaceRoot:B,cwd:typeof X.cwd==="string"?X.cwd:void 0,contributionCount:K.length}),K.length>0)nU(Y,G);let A=(typeof j?.sessionId==="string"?j.sessionId.trim():"")||pU(),L=rU(V.configExtensions);u("info","session.create.runtime_build.begin",{...J,sessionId:A,configExtensionCount:L?.length??0});let f=nY({sessionId:A,targetClientId:G,contributions:K,sessionConfig:j,requestCapability:$.requestCapability});u("info","session.create.start_session.begin",{...J,sessionId:A,provider:j?.providerId??(typeof H.provider==="string"?H.provider:typeof Y.provider==="string"?Y.provider:"hub"),model:j?.modelId??(typeof H.model==="string"?H.model:typeof Y.model==="string"?Y.model:"hub")});let D=await $.sessionHost.startSession({source:typeof Y.source==="string"?Y.source:void 0,interactive:Y.interactive!==!1,sessionMetadata:Object.keys(Y).length>0?Y:void 0,initialMessages:Array.isArray(X.initialMessages)?X.initialMessages:void 0,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:L,...f.localRuntime},capabilities:{toolExecutors:f.toolExecutors,requestToolApproval:Q},config:{...j??{},sessionId:A,providerId:j?.providerId??(typeof H.provider==="string"?H.provider:typeof Y.provider==="string"?Y.provider:"hub"),modelId:j?.modelId??(typeof H.model==="string"?H.model:typeof Y.model==="string"?Y.model:"hub"),apiKey:j?.apiKey??(typeof H.apiKey==="string"?H.apiKey:void 0),cwd:j?.cwd??(typeof X.cwd==="string"&&X.cwd.trim()?X.cwd.trim():B),workspaceRoot:j?.workspaceRoot??B,systemPrompt:j?.systemPrompt??(typeof V.systemPrompt==="string"?V.systemPrompt:""),mode:j?.mode??(V.mode==="plan"||V.mode==="yolo"?V.mode:"act"),maxIterations:j?.maxIterations??(typeof V.maxIterations==="number"?V.maxIterations:void 0),enableTools:j?.enableTools??V.enableTools!==!1,enableSpawnAgent:j?.enableSpawnAgent??V.enableSpawn!==!1,enableAgentTeams:j?.enableAgentTeams??V.enableTeams!==!1,checkpoint:j?.checkpoint??(V.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:j?.teamName??(typeof Y.teamName==="string"?Y.teamName:void 0)},toolPolicies:X.toolPolicies&&typeof X.toolPolicies==="object"&&!Array.isArray(X.toolPolicies)?JSON.parse(JSON.stringify(X.toolPolicies)):V.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0});u("info","session.create.start_session.end",{...J,sessionId:D.sessionId,elapsedMs:Math.round(performance.now()-W),hasImmediateResult:!!D.result}),o7($,D.sessionId,G,"creator",{interactive:Y.interactive!==!1}),u("info","session.create.read_records.begin",{...J,sessionId:D.sessionId});let[U,T]=await Promise.all([o0($,D.sessionId),t0($,D.sessionId)]);if(u("info","session.create.read_records.end",{...J,sessionId:D.sessionId,hasSession:!!U,hasSnapshot:!!T,elapsedMs:Math.round(performance.now()-W)}),U)$.publish($.buildEvent("session.created",{session:U,...T?{snapshot:T}:{}},D.sessionId));return u("info","session.create.reply",{...J,sessionId:D.sessionId,elapsedMs:Math.round(performance.now()-W)}),c(Z,{session:U,...T?{snapshot:T}:{}})}async function sU($,Z,Q){let W=Z.payload&&typeof Z.payload==="object"?Z.payload:{},J=typeof W.sessionId==="string"?W.sessionId.trim():Z.sessionId?.trim()||"",X=W.checkpointRunCount;if(!J)return x(Z,"invalid_restore","session.restore requires a session id");let Y=W.restore&&typeof W.restore==="object"?W.restore:{},j=Y.messages!==!1;if(typeof X!=="number")return x(Z,"invalid_restore","checkpointRunCount must be a positive integer");try{let V=W.sessionConfig&&typeof W.sessionConfig==="object"?JSON.parse(JSON.stringify(W.sessionConfig)):void 0;if(j&&!V)return x(Z,"invalid_restore","sessionConfig is required when restore.messages is true");let H=W.runtimeOptions&&typeof W.runtimeOptions==="object"?W.runtimeOptions:{},B=W.metadata&&typeof W.metadata==="object"?JSON.parse(JSON.stringify(W.metadata)):{};if(typeof V?.mode==="string")B.mode=V.mode;else if(typeof H.mode==="string")B.mode=H.mode;if(typeof V?.systemPrompt==="string")B.systemPrompt=V.systemPrompt;else if(typeof H.systemPrompt==="string")B.systemPrompt=H.systemPrompt;if(V?.checkpoint?.enabled===!0)B.checkpointEnabled=!0;else if(H.checkpointEnabled===!0)B.checkpointEnabled=!0;let G=W.modelSelection&&typeof W.modelSelection==="object"?W.modelSelection:{},K=Z.clientId?.trim()||"hub-client",F=iY(H.clientContributions);if(F.length>0)nU(B,K);let L=(typeof V?.sessionId==="string"?V.sessionId.trim():"")||pU(),f=rU(H.configExtensions),D=nY({sessionId:L,targetClientId:K,contributions:F,sessionConfig:V,requestCapability:$.requestCapability}),T=await new c$().restoreCheckpoint({sessionId:J,checkpointRunCount:X,restore:{messages:Y.messages,workspace:Y.workspace,omitCheckpointMessageFromSession:Y.omitCheckpointMessageFromSession===!0},start:V,cwd:typeof V?.cwd==="string"&&V.cwd.trim()||typeof V?.workspaceRoot==="string"&&V.workspaceRoot.trim()||void 0,getSession:(E)=>$.sessionHost.getSession(E),readMessages:(E)=>$.sessionHost.readSessionMessages(E),buildStartInput:(E)=>{if(E.restoredCheckpointMetadata)B.checkpoint=E.restoredCheckpointMetadata;let C=typeof W.workspaceRoot==="string"&&W.workspaceRoot.trim()?W.workspaceRoot.trim():typeof W.cwd==="string"&&W.cwd.trim()?W.cwd.trim():E.sourceSession.workspaceRoot||E.sourceSession.cwd;return{source:typeof B.source==="string"?B.source:void 0,interactive:B.interactive!==!1,sessionMetadata:{...B,restoredFromSessionId:J,restoredCheckpointRunCount:X},initialMessages:E.initialMessages,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:f,...D.localRuntime},capabilities:{toolExecutors:D.toolExecutors,requestToolApproval:Q},config:{...V??{},sessionId:L,providerId:V?.providerId??(typeof G.provider==="string"?G.provider:E.sourceSession.provider),modelId:V?.modelId??(typeof G.model==="string"?G.model:E.sourceSession.model),apiKey:V?.apiKey??(typeof G.apiKey==="string"?G.apiKey:""),cwd:V?.cwd??E.plan.cwd,workspaceRoot:V?.workspaceRoot??C,systemPrompt:V?.systemPrompt??(typeof H.systemPrompt==="string"?H.systemPrompt:""),mode:V?.mode??(H.mode==="plan"||H.mode==="yolo"?H.mode:"act"),maxIterations:V?.maxIterations??(typeof H.maxIterations==="number"?H.maxIterations:void 0),enableTools:V?.enableTools??H.enableTools!==!1,enableSpawnAgent:V?.enableSpawnAgent??H.enableSpawn!==!1,enableAgentTeams:V?.enableAgentTeams??H.enableTeams!==!1,checkpoint:V?.checkpoint??(H.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:V?.teamName??(typeof B.teamName==="string"?B.teamName:void 0)},toolPolicies:W.toolPolicies&&typeof W.toolPolicies==="object"&&!Array.isArray(W.toolPolicies)?JSON.parse(JSON.stringify(W.toolPolicies)):H.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0}},startSession:(E)=>$.sessionHost.startSession(E),getStartedSessionId:(E)=>E.sessionId,readRestoredSession:(E)=>$.sessionHost.getSession(E)});if(!j)return c(Z,{checkpoint:T.checkpoint});let q=T.startResult;if(!q)return x(Z,"restore_failed","Checkpoint restore did not start a session");o7($,q.sessionId,K,"creator",{interactive:B.interactive!==!1});let[z,_]=await Promise.all([o0($,q.sessionId),t0($,q.sessionId)]);if(z)$.publish($.buildEvent("session.created",{session:z,..._?{snapshot:_}:{}},q.sessionId));return c(Z,{session:z,..._?{snapshot:_}:{},messages:T.messages??[],checkpoint:T.checkpoint})}catch(V){if(V instanceof k0)return x(Z,V.code,V.code==="session_not_found"?`Unknown session: ${J}`:V.message);return x(Z,"restore_failed",V instanceof Error?V.message:String(V))}}async function oU($,Z){let Q=I0(Z);if(!Q)return x(Z,"invalid_session_attach","session.attach requires a session id");o7($,Q,Z.clientId?.trim()||"hub-client","participant");let W=await o0($,Q);if(W)$.publish($.buildEvent("session.attached",{session:W},Q));return W?c(Z,{session:W}):x(Z,"session_not_found",`Unknown session: ${Q}`)}async function tU($,Z){let Q=I0(Z);if(!Q)return x(Z,"invalid_session_detach","session.detach requires a session id");let W=Z.clientId?.trim()||"hub-client",[J]=await Promise.all([o0($,Q)]),X=jg(J?.metadata)??W,Y=$.sessionState.get(Q);if(Y){if(Y.participants.delete(W),Y.createdByClientId===W)Y.createdByClientId=X;if(Y.participants.size===0)$.sessionState.delete(Q)}u$($,(H)=>H.sessionId===Q&&H.targetClientId===W,`Capability owner client ${W} detached before request was resolved.`);let[j,V]=await Promise.all([o0($,Q),t0($,Q)]);return $.publish($.buildEvent("session.detached",j?{session:j,...V?{snapshot:V}:{},clientId:W}:{clientId:W},Q)),c(Z)}async function eU($,Z){let Q=I0(Z),W=Z.payload?.includeSnapshot===!0,[J,X]=await Promise.all([o0($,Q),W?t0($,Q):Promise.resolve(void 0)]);return J?c(Z,{session:J,...X?{snapshot:X}:{}}):x(Z,"session_not_found",`Unknown session: ${Q}`)}async function $D($,Z){let Q=I0(Z);if(!Q)return x(Z,"invalid_session_id","session.messages requires a session id");if(!await o0($,Q))return x(Z,"session_not_found",`Unknown session: ${Q}`);let J=await $.sessionHost.readSessionMessages(Q);return c(Z,{sessionId:Q,messages:J})}async function ZD($,Z){let Q=typeof Z.payload?.limit==="number"?Z.payload.limit:200,J=(await $.sessionHost.listSessions(Q)).map((X)=>a7(X,$.sessionState.get(X.sessionId)));return c(Z,{sessions:J})}async function QD($,Z){let Q=I0(Z),W=s7(Z.payload?.metadata),J=await $.sessionHost.updateSession(Q,{metadata:W}),[X,Y]=await Promise.all([o0($,Q),t0($,Q)]);if(X)$.publish($.buildEvent("session.updated",{session:X,...Y?{snapshot:Y}:{}},Q));return{version:Z.version,requestId:Z.requestId,ok:J.updated,payload:{updated:J.updated,session:X,...Y?{snapshot:Y}:{}}}}async function WD($,Z){let Q=I0(Z),W=await $.sessionHost.deleteSession(Q);return $.sessionState.delete(Q),c(Z,{deleted:W})}async function JD($,Z){let Q=I0(Z),W=$.sessionHost.pendingPrompts;if(!W)return x(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let J=await W.list({sessionId:Q});return c(Z,{sessionId:Q,prompts:J})}async function XD($,Z){let Q=I0(Z),W=typeof Z.payload?.promptId==="string"?Z.payload.promptId.trim():"",J=typeof Z.payload?.prompt==="string"?Z.payload.prompt:void 0,X=Z.payload?.delivery==="queue"||Z.payload?.delivery==="steer"?Z.payload.delivery:void 0,Y=$.sessionHost.pendingPrompts;if(!Y)return x(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let j=await Y.update({sessionId:Q,promptId:W,prompt:J,delivery:X});return c(Z,j)}async function YD($,Z){let Q=I0(Z),W=typeof Z.payload?.promptId==="string"?Z.payload.promptId.trim():"",J=$.sessionHost.pendingPrompts;if(!J)return x(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let X=await J.delete({sessionId:Q,promptId:W});return c(Z,X)}function jD($){switch($){case"schedule.create":return"schedule.created";case"schedule.update":case"schedule.enable":case"schedule.disable":return"schedule.updated";case"schedule.delete":return"schedule.deleted";case"schedule.trigger":return"schedule.triggered";default:return}}var Hg=new Set(["skills","workflows","rules","tools","mcp"]);function aY($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function G9($,Z){let Q=$[Z];if(Q===void 0)return;if(typeof Q!=="string")throw Error(`settings payload '${Z}' must be a string.`);return Q}function Bg($,Z){let Q=$[Z];if(Q===void 0)return;if(typeof Q!=="boolean")throw Error(`settings payload '${Z}' must be a boolean.`);return Q}function VD($){if($===void 0)return{};if(!aY($))throw Error("settings.list payload must be an object.");return{cwd:G9($,"cwd"),workspaceRoot:G9($,"workspaceRoot"),availabilityContext:aY($.availabilityContext)?$.availabilityContext:void 0}}function Gg($){if(!aY($))throw Error("settings.toggle payload must be an object.");let{type:Z}=$;if(typeof Z!=="string"||!Hg.has(Z))throw Error("settings.toggle payload 'type' must be one of: skills, workflows, rules, tools, mcp.");return{...VD($),type:Z,id:G9($,"id"),path:G9($,"path"),name:G9($,"name"),enabled:Bg($,"enabled")}}class w4{options;clients=new Map;listeners=new Map;sessionState=new Map;pendingApprovals=new Map;pendingCapabilityRequests=new Map;suppressNextTerminalEventBySession=new Map;schedules;scheduleCommands;settings;cronService;sessionHost;hubId=Vg("hub_");ctx;constructor($){this.options=$;if(this.sessionHost=$.sessionHost??new T1({sessionService:new z1(new L1),fetch:$.fetch,telemetry:$.telemetry}),this.ctx={clients:this.clients,sessionState:this.sessionState,pendingApprovals:this.pendingApprovals,pendingCapabilityRequests:this.pendingCapabilityRequests,suppressNextTerminalEventBySession:this.suppressNextTerminalEventBySession,telemetry:$.telemetry,sessionHost:this.sessionHost,publish:(Z)=>this.publish(Z),buildEvent:r2,requestCapability:(Z,Q,W,J,X)=>MU(this.ctx,Z,Q,W,J,X)},this.schedules=new Z8({...$.scheduleOptions,runtimeHandlers:$.runtimeHandlers,eventPublisher:(Z,Q)=>{let W=Z==="schedule.execution.completed"?"schedule.execution_completed":Z==="schedule.execution.failed"?"schedule.execution_failed":void 0;if(!W)return;this.publish(r2(W,Q&&typeof Q==="object"?Q:void 0))}}),this.scheduleCommands=new o2(this.schedules),this.settings=$.settingsService??new k$,$.cronOptions)this.cronService=new P5({runtimeHandlers:$.runtimeHandlers,...$.cronOptions});this.sessionHost.subscribe((Z)=>{uU(this.ctx,Z).catch((Q)=>{cY("session event handling failed",Q),e7(this.options.telemetry,{component:"core",operation:"hub.session_event_project",error:Q,severity:"error",handled:!0,context:{eventType:Z.type,sessionId:Z.payload.sessionId}})})})}getCronService(){return this.cronService}getHubId(){return this.hubId}async start(){if(await this.schedules.start(),this.cronService)try{await this.cronService.start()}catch($){console.error("[hub] cron service start failed",$)}}async stop(){for(let $ of this.pendingApprovals.keys())mY(this.ctx,$,{approved:!1,reason:"Hub shutting down before approval was resolved."});if(u$(this.ctx,()=>!0,"Hub shutting down before capability request was resolved."),await this.sessionHost.dispose("hub_server_stop"),await this.schedules.dispose(),this.cronService)try{await this.cronService.dispose()}catch($){console.error("[hub] cron service stop failed",$)}}async handleCommand($){try{let Z=await this.dispatchCommand($);return this.captureFailedReply($,Z),Z}catch(Z){throw e7(this.options.telemetry,{component:"core",operation:"hub.command",error:Z,severity:"error",handled:!1,context:this.commandTelemetryContext($)}),Z}}async dispatchCommand($){switch($.command){case"client.register":return wU(this.ctx,$);case"client.update":return CU(this.ctx,$);case"client.unregister":return PU(this.ctx,$,(Z)=>{this.listeners.delete(Z),this.detachClientFromSessions(Z)});case"client.list":return SU(this.ctx,$);case"session.create":return await aU(this.ctx,$,(Z)=>gY(this.ctx,Z));case"session.restore":return await sU(this.ctx,$,(Z)=>gY(this.ctx,Z));case"session.attach":return await oU(this.ctx,$);case"session.detach":return await tU(this.ctx,$);case"session.get":return await eU(this.ctx,$);case"session.messages":return await $D(this.ctx,$);case"session.list":return await ZD(this.ctx,$);case"session.update":return await QD(this.ctx,$);case"session.pending_prompts":return await JD(this.ctx,$);case"session.update_pending_prompt":return await XD(this.ctx,$);case"session.remove_pending_prompt":return await YD(this.ctx,$);case"session.delete":return await WD(this.ctx,$);case"session.hook":return await cU(this.ctx,$);case"run.start":case"session.send_input":return await mU(this.ctx,$);case"run.abort":return await vU(this.ctx,$);case"capability.request":return await EU(this.ctx,$);case"approval.respond":return await OU(this.ctx,$);case"capability.respond":return NU(this.ctx,$);case"capability.progress":return RU(this.ctx,$);case"ui.notify":return this.publish(r2("ui.notify",$.payload??{})),c($);case"ui.show_window":return this.publish(r2("ui.show_window",$.payload??{})),c($);case"settings.list":return await this.handleSettingsList($);case"settings.toggle":return await this.handleSettingsToggle($);case"connector.channels":case"connector.configure":case"connector.delete_config":return await gU(this.ctx,$);case"settings.get":case"settings.patch":return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"not_implemented",message:`${$.command} is not implemented yet.`}};default:{let Z=await this.scheduleCommands.handleCommand($);if(Z.ok){let Q=jD($.command);if(Q)this.publish(r2(Q,Z.payload))}return Z}}}captureFailedReply($,Z){if(Z.ok||!Z.error||!Kg(Z.error.code))return;e7(this.options.telemetry,{component:"core",operation:"hub.command_reply",error:Error(Z.error.message),severity:Z.error.code==="session_not_found"?"warn":"error",handled:!0,context:{...this.commandTelemetryContext($),errorCode:Z.error.code}})}commandTelemetryContext($){return{command:$.command,requestId:$.requestId,clientId:$.clientId,sessionId:typeof $.payload?.sessionId==="string"?$.payload.sessionId:$.sessionId}}async handleSettingsList($){try{let Z=await this.settings.list(VD($.payload));return{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:Z}}}catch(Z){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_list_failed",message:Z instanceof Error?Z.message:String(Z)}}}}async handleSettingsToggle($){try{let Z=await this.settings.toggle(Gg($.payload));return this.publish(r2("settings.changed",{types:Z.changedTypes,snapshot:Z.snapshot})),{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:Z.snapshot,changedTypes:Z.changedTypes}}}catch(Z){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_toggle_failed",message:Z instanceof Error?Z.message:String(Z)}}}}subscribe($,Z,Q){let W=this.listeners.get($)??new Set,J={sessionId:Q?.sessionId,listener:Z};return W.add(J),this.listeners.set($,W),()=>{let X=this.listeners.get($);if(!X)return;if(X.delete(J),X.size===0)this.listeners.delete($)}}detachClientFromSessions($){for(let[Z,Q]of this.sessionState.entries())if(Q.participants.delete($),Q.participants.size===0)this.sessionState.delete(Z);u$(this.ctx,(Z)=>Z.targetClientId===$,`Capability owner client ${$} disconnected before request was resolved.`)}publish($){for(let Z of this.listeners.values())for(let Q of Z){if(Q.sessionId&&Q.sessionId!==$.sessionId)continue;try{Q.listener($)}catch(W){cY(`listener threw while publishing ${$.event}`,W),e7(this.options.telemetry,{component:"core",operation:"hub.publish",error:W,severity:"warn",handled:!0,context:{event:$.event,sessionId:$.sessionId}})}}}}function Kg($){return $==="session_not_found"||$==="session_messages_not_found"||$==="hub_command_timeout"||$.endsWith("_failed")}import{timingSafeEqual as Ug}from"node:crypto";import Dg from"node:http";import Lg from"node:net";import{URL as eY}from"node:url";import{CURRENT_HUB_PROTOCOL_VERSION as GD,HUB_CAPABILITIES as _g,isHubProtocolCompatible as zg,MAX_CLIENT_HUB_PROTOCOL_VERSION as KD,MIN_CLIENT_HUB_PROTOCOL_VERSION as FD}from"@cline/shared";import{WebSocketServer as Tg}from"ws";import{captureSdkError as HD,HUB_COMMAND_SLOW_LOG_MS as Fg,resolveHubCommandTimeoutMs as Ag,safeJsonParse as fg}from"@cline/shared";function sY($){return{command:$.envelope.command,requestId:$.envelope.requestId,clientId:$.envelope.clientId,sessionId:$.envelope.sessionId}}function BD($,Z,Q){return{version:$.envelope.version,requestId:$.envelope.requestId,ok:!1,error:{code:Z,message:Q}}}class X9{transport;telemetry;constructor($,Z){this.transport=$;this.telemetry=Z}attach($){let Z=new Map,Q=new Set,W=!1,J=(V)=>{try{$.send(JSON.stringify(V))}catch(H){console.error(`[hub] failed to send websocket frame: ${H instanceof Error?H.stack||H.message:String(H)}`)}},X=(V)=>{J({kind:"event",envelope:V})},Y=async(V)=>{try{let H=JSON.parse(V.data);switch(H.kind){case"command":{let B=performance.now(),G=!1,K=sY(H);u("info","command.start",K);let F=setTimeout(()=>{if(G)return;u("warn","command.slow",{...K,elapsedMs:Math.round(performance.now()-B)})},Fg),A=this.transport.command(H.envelope);A.then((q)=>{if(!G)return;u(q.ok?"warn":"error","command.late_end",{...K,elapsedMs:Math.round(performance.now()-B),ok:q.ok,errorCode:q.error?.code,errorMessage:q.error?.message})},(q)=>{if(!G)return;u("error","command.late_error",{...K,elapsedMs:Math.round(performance.now()-B),error:q})});let L=!1,f,D,U=Ag(H.envelope.command,H.envelope.timeoutMs);try{D=U===null?await A:await Promise.race([A,new Promise((q)=>{f=setTimeout(()=>{L=!0,HD(this.telemetry,{component:"core",operation:"hub.command_timeout",error:Error(`Hub command ${H.envelope.command} did not complete within ${U}ms.`),severity:"error",handled:!0,context:{...K,timeoutMs:U}}),q(BD(H,"hub_command_timeout",`Hub command ${H.envelope.command} did not complete within ${U}ms. Check hub-daemon.log for command.start/command.slow logs with requestId ${H.envelope.requestId}.`))},U)})])}catch(q){if(clearTimeout(F),f)clearTimeout(f);throw q}if(G=L,clearTimeout(F),f)clearTimeout(f);let T=Math.round(performance.now()-B);if(L)u("error","command.timeout",{...K,durationMs:T,timeoutMs:U});else u(D.ok?"info":"warn","command.end",{...K,durationMs:T,ok:D.ok,errorCode:D.error?.code,errorMessage:D.error?.message});if(H.envelope.command==="client.register"&&D.ok){let z=(H.envelope.payload??{}).clientId?.trim()||H.envelope.clientId?.trim();if(z)Q.add(z)}else if(H.envelope.command==="client.unregister"&&D.ok){let q=H.envelope.clientId?.trim();if(q)Q.delete(q)}J({kind:"reply",envelope:D});break}case"stream.subscribe":{let B=`${H.clientId}:${H.sessionId??"*"}`;if(Z.has(B))break;let G=await this.transport.subscribe(H.clientId,X,{sessionId:H.sessionId});Z.set(B,G);break}case"stream.unsubscribe":{let B=`${H.clientId}:${H.sessionId??"*"}`;Z.get(B)?.(),Z.delete(B);break}case"reply":case"event":break}}catch(H){let B=typeof V.data==="string"?fg(V.data):void 0;if(!B||B.kind!=="command"){u("error","rejected malformed websocket frame",{error:H});return}u("error","command.error",{...sY(B),error:H}),HD(this.telemetry,{component:"core",operation:"hub.websocket_command",error:H,severity:"error",handled:!0,context:sY(B)}),J({kind:"reply",envelope:BD(B,"command_failed",H instanceof Error?H.message:"Unknown hub error")})}},j=()=>{if(W)return;W=!0;for(let V of Z.values())V();Z.clear();for(let V of Q)this.transport.command({version:"v1",command:"client.unregister",clientId:V});Q.clear(),$.removeEventListener("message",Y),$.removeEventListener("close",j)};return $.addEventListener("message",Y),$.addEventListener("close",j),j}}class Y9{transport;constructor($){this.transport=$}command($){return this.transport.handleCommand($)}subscribe($,Z,Q){return this.transport.subscribe($,Z,Q)}}function Og($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString();if($ instanceof ArrayBuffer)return Buffer.from($).toString();if(Array.isArray($))return Buffer.concat($.map((Z)=>Buffer.from(Z))).toString();return String($)}function qg($){return{send(Z){$.send(Z)},addEventListener(Z,Q){if(Z==="message"){$.on("message",(W)=>{Q({data:Og(W)})});return}$.on("close",Q)},removeEventListener(){}}}function Mg($){try{$.write(`HTTP/1.1 400 Bad Request\r
|
|
745
|
+
${B}`:V.instructions}})}})}}function Xg($,Z,Q,W){let J=Q.map((X)=>[X.executor,async(...Y)=>{let j=Y.at(-1),V=Y.slice(0,-1);return(await W($,X.capabilityName,{executor:X.executor,args:V,context:lU(j)},Z))?.result}]);return J.length>0?Object.fromEntries(J):void 0}function Yg($,Z,Q,W){if(Q.length===0)return;return Q.map((J)=>({name:J.name,description:J.description,inputSchema:J.inputSchema,lifecycle:J.lifecycle,async execute(X,Y){return(await W($,J.capabilityName,{toolName:J.name,input:X,context:lU(Y)},Z,Y.emitUpdate?(V)=>{Y.emitUpdate?.(Zg(V))}:void 0))?.result}}))}function jg($,Z,Q,W){let J=new Map(Q.map((Y)=>[Y.name,Y])),X={};for(let Y of ex){let j=J.get(Y);if(!j)continue;X[Y]=async(V)=>{return(await W($,j.capabilityName,{context:V},Z))?.control}}return Object.keys(X).length>0?X:void 0}function nY($){let Z=$.contributions.filter((V)=>V.kind==="toolExecutor"),Q=$.contributions.filter((V)=>V.kind==="tool"),W=$.contributions.filter((V)=>V.kind==="hook"),J=$.contributions.find((V)=>V.kind==="compaction"),X=$.contributions.find((V)=>V.kind==="checkpoint"),Y=$.contributions.find((V)=>V.kind==="mistakeLimit"),j=$.contributions.find((V)=>V.kind==="userInstructionService");return{hasClientContributions:$.contributions.length>0,toolExecutors:Xg($.sessionId,$.targetClientId,Z,$.requestCapability),localRuntime:{...W.length>0?{hooks:jg($.sessionId,$.targetClientId,W,$.requestCapability)}:{},...Q.length>0?{extraTools:Yg($.sessionId,$.targetClientId,Q,$.requestCapability)}:{},...J?{compaction:{...$.sessionConfig?.compaction??{},...J.config,compact:async(V)=>{return(await $.requestCapability($.sessionId,J.capabilityName,{context:V},$.targetClientId))?.result}}}:{},...X?{checkpoint:{...$.sessionConfig?.checkpoint??{},...X.config,createCheckpoint:async(V)=>{return(await $.requestCapability($.sessionId,X.capabilityName,{context:V},$.targetClientId))?.result}}}:{},...Y?{onConsecutiveMistakeLimitReached:async(V)=>{return(await $.requestCapability($.sessionId,Y.capabilityName,{context:V},$.targetClientId))?.result}}:{},...j?{userInstructionService:Jg($.sessionId,$.targetClientId,j,$.requestCapability)}:{}}}}var iU="hubCapabilityOwnerClientId";function nU($,Z){$[iU]=Z}function Vg($){let Z=$?.[iU];return typeof Z==="string"&&Z.trim()?Z.trim():void 0}async function aU($,Z,Q){let W=performance.now(),J={command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Z.sessionId};u("info","session.create.begin",J);let X=Z.payload&&typeof Z.payload==="object"?Z.payload:{},Y=X.metadata&&typeof X.metadata==="object"?JSON.parse(JSON.stringify(X.metadata)):{},j=X.sessionConfig&&typeof X.sessionConfig==="object"?JSON.parse(JSON.stringify(X.sessionConfig)):void 0,V=X.runtimeOptions&&typeof X.runtimeOptions==="object"?X.runtimeOptions:{};if(typeof j?.mode==="string")Y.mode=j.mode;else if(typeof V.mode==="string")Y.mode=V.mode;if(typeof j?.systemPrompt==="string")Y.systemPrompt=j.systemPrompt;else if(typeof V.systemPrompt==="string")Y.systemPrompt=V.systemPrompt;if(j?.checkpoint?.enabled===!0)Y.checkpointEnabled=!0;else if(V.checkpointEnabled===!0)Y.checkpointEnabled=!0;let H=X.modelSelection&&typeof X.modelSelection==="object"?X.modelSelection:{},B=typeof X.workspaceRoot==="string"&&X.workspaceRoot.trim()?X.workspaceRoot.trim():typeof X.cwd==="string"&&X.cwd.trim()?X.cwd.trim():"";if(!B)return u("warn","session.create.invalid",{...J,reason:"missing_workspace_root"}),x(Z,"invalid_session_create","session.create requires workspaceRoot or cwd");let G=Z.clientId?.trim()||"hub-client",K=iY(V.clientContributions);if(u("info","session.create.contributions_parsed",{...J,clientId:G,workspaceRoot:B,cwd:typeof X.cwd==="string"?X.cwd:void 0,contributionCount:K.length}),K.length>0)nU(Y,G);let A=(typeof j?.sessionId==="string"?j.sessionId.trim():"")||pU(),L=rU(V.configExtensions);u("info","session.create.runtime_build.begin",{...J,sessionId:A,configExtensionCount:L?.length??0});let f=nY({sessionId:A,targetClientId:G,contributions:K,sessionConfig:j,requestCapability:$.requestCapability});u("info","session.create.start_session.begin",{...J,sessionId:A,provider:j?.providerId??(typeof H.provider==="string"?H.provider:typeof Y.provider==="string"?Y.provider:"hub"),model:j?.modelId??(typeof H.model==="string"?H.model:typeof Y.model==="string"?Y.model:"hub")});let D=await $.sessionHost.startSession({source:typeof Y.source==="string"?Y.source:void 0,interactive:Y.interactive!==!1,sessionMetadata:Object.keys(Y).length>0?Y:void 0,initialMessages:Array.isArray(X.initialMessages)?X.initialMessages:void 0,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:L,...f.localRuntime},capabilities:{toolExecutors:f.toolExecutors,requestToolApproval:Q},config:{...j??{},sessionId:A,providerId:j?.providerId??(typeof H.provider==="string"?H.provider:typeof Y.provider==="string"?Y.provider:"hub"),modelId:j?.modelId??(typeof H.model==="string"?H.model:typeof Y.model==="string"?Y.model:"hub"),apiKey:j?.apiKey??(typeof H.apiKey==="string"?H.apiKey:void 0),cwd:j?.cwd??(typeof X.cwd==="string"&&X.cwd.trim()?X.cwd.trim():B),workspaceRoot:j?.workspaceRoot??B,systemPrompt:j?.systemPrompt??(typeof V.systemPrompt==="string"?V.systemPrompt:""),mode:j?.mode??(V.mode==="plan"||V.mode==="yolo"?V.mode:"act"),maxIterations:j?.maxIterations??(typeof V.maxIterations==="number"?V.maxIterations:void 0),enableTools:j?.enableTools??V.enableTools!==!1,enableSpawnAgent:j?.enableSpawnAgent??V.enableSpawn!==!1,enableAgentTeams:j?.enableAgentTeams??V.enableTeams!==!1,checkpoint:j?.checkpoint??(V.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:j?.teamName??(typeof Y.teamName==="string"?Y.teamName:void 0)},toolPolicies:X.toolPolicies&&typeof X.toolPolicies==="object"&&!Array.isArray(X.toolPolicies)?JSON.parse(JSON.stringify(X.toolPolicies)):V.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0});u("info","session.create.start_session.end",{...J,sessionId:D.sessionId,elapsedMs:Math.round(performance.now()-W),hasImmediateResult:!!D.result}),o7($,D.sessionId,G,"creator",{interactive:Y.interactive!==!1}),u("info","session.create.read_records.begin",{...J,sessionId:D.sessionId});let[U,T]=await Promise.all([o0($,D.sessionId),t0($,D.sessionId)]);if(u("info","session.create.read_records.end",{...J,sessionId:D.sessionId,hasSession:!!U,hasSnapshot:!!T,elapsedMs:Math.round(performance.now()-W)}),U)$.publish($.buildEvent("session.created",{session:U,...T?{snapshot:T}:{}},D.sessionId));return u("info","session.create.reply",{...J,sessionId:D.sessionId,elapsedMs:Math.round(performance.now()-W)}),c(Z,{session:U,...T?{snapshot:T}:{}})}async function sU($,Z,Q){let W=Z.payload&&typeof Z.payload==="object"?Z.payload:{},J=typeof W.sessionId==="string"?W.sessionId.trim():Z.sessionId?.trim()||"",X=W.checkpointRunCount;if(!J)return x(Z,"invalid_restore","session.restore requires a session id");let Y=W.restore&&typeof W.restore==="object"?W.restore:{},j=Y.messages!==!1;if(typeof X!=="number")return x(Z,"invalid_restore","checkpointRunCount must be a positive integer");try{let V=W.sessionConfig&&typeof W.sessionConfig==="object"?JSON.parse(JSON.stringify(W.sessionConfig)):void 0;if(j&&!V)return x(Z,"invalid_restore","sessionConfig is required when restore.messages is true");let H=W.runtimeOptions&&typeof W.runtimeOptions==="object"?W.runtimeOptions:{},B=W.metadata&&typeof W.metadata==="object"?JSON.parse(JSON.stringify(W.metadata)):{};if(typeof V?.mode==="string")B.mode=V.mode;else if(typeof H.mode==="string")B.mode=H.mode;if(typeof V?.systemPrompt==="string")B.systemPrompt=V.systemPrompt;else if(typeof H.systemPrompt==="string")B.systemPrompt=H.systemPrompt;if(V?.checkpoint?.enabled===!0)B.checkpointEnabled=!0;else if(H.checkpointEnabled===!0)B.checkpointEnabled=!0;let G=W.modelSelection&&typeof W.modelSelection==="object"?W.modelSelection:{},K=Z.clientId?.trim()||"hub-client",F=iY(H.clientContributions);if(F.length>0)nU(B,K);let L=(typeof V?.sessionId==="string"?V.sessionId.trim():"")||pU(),f=rU(H.configExtensions),D=nY({sessionId:L,targetClientId:K,contributions:F,sessionConfig:V,requestCapability:$.requestCapability}),T=await new c$().restoreCheckpoint({sessionId:J,checkpointRunCount:X,restore:{messages:Y.messages,workspace:Y.workspace,omitCheckpointMessageFromSession:Y.omitCheckpointMessageFromSession===!0},start:V,cwd:typeof V?.cwd==="string"&&V.cwd.trim()||typeof V?.workspaceRoot==="string"&&V.workspaceRoot.trim()||void 0,getSession:(E)=>$.sessionHost.getSession(E),readMessages:(E)=>$.sessionHost.readSessionMessages(E),buildStartInput:(E)=>{if(E.restoredCheckpointMetadata)B.checkpoint=E.restoredCheckpointMetadata;let C=typeof W.workspaceRoot==="string"&&W.workspaceRoot.trim()?W.workspaceRoot.trim():typeof W.cwd==="string"&&W.cwd.trim()?W.cwd.trim():E.sourceSession.workspaceRoot||E.sourceSession.cwd;return{source:typeof B.source==="string"?B.source:void 0,interactive:B.interactive!==!1,sessionMetadata:{...B,restoredFromSessionId:J,restoredCheckpointRunCount:X},initialMessages:E.initialMessages,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:f,...D.localRuntime},capabilities:{toolExecutors:D.toolExecutors,requestToolApproval:Q},config:{...V??{},sessionId:L,providerId:V?.providerId??(typeof G.provider==="string"?G.provider:E.sourceSession.provider),modelId:V?.modelId??(typeof G.model==="string"?G.model:E.sourceSession.model),apiKey:V?.apiKey??(typeof G.apiKey==="string"?G.apiKey:""),cwd:V?.cwd??E.plan.cwd,workspaceRoot:V?.workspaceRoot??C,systemPrompt:V?.systemPrompt??(typeof H.systemPrompt==="string"?H.systemPrompt:""),mode:V?.mode??(H.mode==="plan"||H.mode==="yolo"?H.mode:"act"),maxIterations:V?.maxIterations??(typeof H.maxIterations==="number"?H.maxIterations:void 0),enableTools:V?.enableTools??H.enableTools!==!1,enableSpawnAgent:V?.enableSpawnAgent??H.enableSpawn!==!1,enableAgentTeams:V?.enableAgentTeams??H.enableTeams!==!1,checkpoint:V?.checkpoint??(H.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:V?.teamName??(typeof B.teamName==="string"?B.teamName:void 0)},toolPolicies:W.toolPolicies&&typeof W.toolPolicies==="object"&&!Array.isArray(W.toolPolicies)?JSON.parse(JSON.stringify(W.toolPolicies)):H.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0}},startSession:(E)=>$.sessionHost.startSession(E),getStartedSessionId:(E)=>E.sessionId,readRestoredSession:(E)=>$.sessionHost.getSession(E)});if(!j)return c(Z,{checkpoint:T.checkpoint});let q=T.startResult;if(!q)return x(Z,"restore_failed","Checkpoint restore did not start a session");o7($,q.sessionId,K,"creator",{interactive:B.interactive!==!1});let[z,_]=await Promise.all([o0($,q.sessionId),t0($,q.sessionId)]);if(z)$.publish($.buildEvent("session.created",{session:z,..._?{snapshot:_}:{}},q.sessionId));return c(Z,{session:z,..._?{snapshot:_}:{},messages:T.messages??[],checkpoint:T.checkpoint})}catch(V){if(V instanceof k0)return x(Z,V.code,V.code==="session_not_found"?`Unknown session: ${J}`:V.message);return x(Z,"restore_failed",V instanceof Error?V.message:String(V))}}async function oU($,Z){let Q=I0(Z);if(!Q)return x(Z,"invalid_session_attach","session.attach requires a session id");o7($,Q,Z.clientId?.trim()||"hub-client","participant");let W=await o0($,Q);if(W)$.publish($.buildEvent("session.attached",{session:W},Q));return W?c(Z,{session:W}):x(Z,"session_not_found",`Unknown session: ${Q}`)}async function tU($,Z){let Q=I0(Z);if(!Q)return x(Z,"invalid_session_detach","session.detach requires a session id");let W=Z.clientId?.trim()||"hub-client",[J]=await Promise.all([o0($,Q)]),X=Vg(J?.metadata)??W,Y=$.sessionState.get(Q);if(Y){if(Y.participants.delete(W),Y.createdByClientId===W)Y.createdByClientId=X;if(Y.participants.size===0)$.sessionState.delete(Q)}u$($,(H)=>H.sessionId===Q&&H.targetClientId===W,`Capability owner client ${W} detached before request was resolved.`);let[j,V]=await Promise.all([o0($,Q),t0($,Q)]);return $.publish($.buildEvent("session.detached",j?{session:j,...V?{snapshot:V}:{},clientId:W}:{clientId:W},Q)),c(Z)}async function eU($,Z){let Q=I0(Z),W=Z.payload?.includeSnapshot===!0,[J,X]=await Promise.all([o0($,Q),W?t0($,Q):Promise.resolve(void 0)]);return J?c(Z,{session:J,...X?{snapshot:X}:{}}):x(Z,"session_not_found",`Unknown session: ${Q}`)}async function $D($,Z){let Q=I0(Z);if(!Q)return x(Z,"invalid_session_id","session.messages requires a session id");if(!await o0($,Q))return x(Z,"session_not_found",`Unknown session: ${Q}`);let J=await $.sessionHost.readSessionMessages(Q);return c(Z,{sessionId:Q,messages:J})}async function ZD($,Z){let Q=typeof Z.payload?.limit==="number"?Z.payload.limit:200,J=(await $.sessionHost.listSessions(Q)).map((X)=>a7(X,$.sessionState.get(X.sessionId)));return c(Z,{sessions:J})}async function QD($,Z){let Q=I0(Z),W=s7(Z.payload?.metadata),J=await $.sessionHost.updateSession(Q,{metadata:W}),[X,Y]=await Promise.all([o0($,Q),t0($,Q)]);if(X)$.publish($.buildEvent("session.updated",{session:X,...Y?{snapshot:Y}:{}},Q));return{version:Z.version,requestId:Z.requestId,ok:J.updated,payload:{updated:J.updated,session:X,...Y?{snapshot:Y}:{}}}}async function WD($,Z){let Q=I0(Z),W=await $.sessionHost.deleteSession(Q);return $.sessionState.delete(Q),c(Z,{deleted:W})}async function JD($,Z){let Q=I0(Z),W=$.sessionHost.pendingPrompts;if(!W)return x(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let J=await W.list({sessionId:Q});return c(Z,{sessionId:Q,prompts:J})}async function XD($,Z){let Q=I0(Z),W=typeof Z.payload?.promptId==="string"?Z.payload.promptId.trim():"",J=typeof Z.payload?.prompt==="string"?Z.payload.prompt:void 0,X=Z.payload?.delivery==="queue"||Z.payload?.delivery==="steer"?Z.payload.delivery:void 0,Y=$.sessionHost.pendingPrompts;if(!Y)return x(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let j=await Y.update({sessionId:Q,promptId:W,prompt:J,delivery:X});return c(Z,j)}async function YD($,Z){let Q=I0(Z),W=typeof Z.payload?.promptId==="string"?Z.payload.promptId.trim():"",J=$.sessionHost.pendingPrompts;if(!J)return x(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let X=await J.delete({sessionId:Q,promptId:W});return c(Z,X)}function jD($){switch($){case"schedule.create":return"schedule.created";case"schedule.update":case"schedule.enable":case"schedule.disable":return"schedule.updated";case"schedule.delete":return"schedule.deleted";case"schedule.trigger":return"schedule.triggered";default:return}}var Bg=new Set(["skills","workflows","rules","tools","mcp"]);function aY($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function G9($,Z){let Q=$[Z];if(Q===void 0)return;if(typeof Q!=="string")throw Error(`settings payload '${Z}' must be a string.`);return Q}function Gg($,Z){let Q=$[Z];if(Q===void 0)return;if(typeof Q!=="boolean")throw Error(`settings payload '${Z}' must be a boolean.`);return Q}function VD($){if($===void 0)return{};if(!aY($))throw Error("settings.list payload must be an object.");return{cwd:G9($,"cwd"),workspaceRoot:G9($,"workspaceRoot"),availabilityContext:aY($.availabilityContext)?$.availabilityContext:void 0}}function Kg($){if(!aY($))throw Error("settings.toggle payload must be an object.");let{type:Z}=$;if(typeof Z!=="string"||!Bg.has(Z))throw Error("settings.toggle payload 'type' must be one of: skills, workflows, rules, tools, mcp.");return{...VD($),type:Z,id:G9($,"id"),path:G9($,"path"),name:G9($,"name"),enabled:Gg($,"enabled")}}class w4{options;clients=new Map;listeners=new Map;sessionState=new Map;pendingApprovals=new Map;pendingCapabilityRequests=new Map;suppressNextTerminalEventBySession=new Map;schedules;scheduleCommands;settings;cronService;sessionHost;hubId=Hg("hub_");ctx;constructor($){this.options=$;if(this.sessionHost=$.sessionHost??new T1({sessionService:new z1(new L1),fetch:$.fetch,telemetry:$.telemetry}),this.ctx={clients:this.clients,sessionState:this.sessionState,pendingApprovals:this.pendingApprovals,pendingCapabilityRequests:this.pendingCapabilityRequests,suppressNextTerminalEventBySession:this.suppressNextTerminalEventBySession,telemetry:$.telemetry,sessionHost:this.sessionHost,publish:(Z)=>this.publish(Z),buildEvent:r2,requestCapability:(Z,Q,W,J,X)=>MU(this.ctx,Z,Q,W,J,X)},this.schedules=new Z8({...$.scheduleOptions,runtimeHandlers:$.runtimeHandlers,eventPublisher:(Z,Q)=>{let W=Z==="schedule.execution.completed"?"schedule.execution_completed":Z==="schedule.execution.failed"?"schedule.execution_failed":void 0;if(!W)return;this.publish(r2(W,Q&&typeof Q==="object"?Q:void 0))}}),this.scheduleCommands=new o2(this.schedules),this.settings=$.settingsService??new k$,$.cronOptions)this.cronService=new P5({runtimeHandlers:$.runtimeHandlers,...$.cronOptions});this.sessionHost.subscribe((Z)=>{uU(this.ctx,Z).catch((Q)=>{cY("session event handling failed",Q),e7(this.options.telemetry,{component:"core",operation:"hub.session_event_project",error:Q,severity:"error",handled:!0,context:{eventType:Z.type,sessionId:Z.payload.sessionId}})})})}getCronService(){return this.cronService}getHubId(){return this.hubId}async start(){if(await this.schedules.start(),this.cronService)try{await this.cronService.start()}catch($){console.error("[hub] cron service start failed",$)}}async stop(){for(let $ of this.pendingApprovals.keys())mY(this.ctx,$,{approved:!1,reason:"Hub shutting down before approval was resolved."});if(u$(this.ctx,()=>!0,"Hub shutting down before capability request was resolved."),await this.sessionHost.dispose("hub_server_stop"),await this.schedules.dispose(),this.cronService)try{await this.cronService.dispose()}catch($){console.error("[hub] cron service stop failed",$)}}async handleCommand($){try{let Z=await this.dispatchCommand($);return this.captureFailedReply($,Z),Z}catch(Z){throw e7(this.options.telemetry,{component:"core",operation:"hub.command",error:Z,severity:"error",handled:!1,context:this.commandTelemetryContext($)}),Z}}async dispatchCommand($){switch($.command){case"client.register":return wU(this.ctx,$);case"client.update":return CU(this.ctx,$);case"client.unregister":return PU(this.ctx,$,(Z)=>{this.listeners.delete(Z),this.detachClientFromSessions(Z)});case"client.list":return SU(this.ctx,$);case"session.create":return await aU(this.ctx,$,(Z)=>gY(this.ctx,Z));case"session.restore":return await sU(this.ctx,$,(Z)=>gY(this.ctx,Z));case"session.attach":return await oU(this.ctx,$);case"session.detach":return await tU(this.ctx,$);case"session.get":return await eU(this.ctx,$);case"session.messages":return await $D(this.ctx,$);case"session.list":return await ZD(this.ctx,$);case"session.update":return await QD(this.ctx,$);case"session.pending_prompts":return await JD(this.ctx,$);case"session.update_pending_prompt":return await XD(this.ctx,$);case"session.remove_pending_prompt":return await YD(this.ctx,$);case"session.delete":return await WD(this.ctx,$);case"session.hook":return await cU(this.ctx,$);case"run.start":case"session.send_input":return await mU(this.ctx,$);case"run.abort":return await vU(this.ctx,$);case"capability.request":return await EU(this.ctx,$);case"approval.respond":return await OU(this.ctx,$);case"capability.respond":return NU(this.ctx,$);case"capability.progress":return RU(this.ctx,$);case"ui.notify":return this.publish(r2("ui.notify",$.payload??{})),c($);case"ui.show_window":return this.publish(r2("ui.show_window",$.payload??{})),c($);case"settings.list":return await this.handleSettingsList($);case"settings.toggle":return await this.handleSettingsToggle($);case"connector.channels":case"connector.configure":case"connector.delete_config":return await gU(this.ctx,$);case"settings.get":case"settings.patch":return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"not_implemented",message:`${$.command} is not implemented yet.`}};default:{let Z=await this.scheduleCommands.handleCommand($);if(Z.ok){let Q=jD($.command);if(Q)this.publish(r2(Q,Z.payload))}return Z}}}captureFailedReply($,Z){if(Z.ok||!Z.error||!Fg(Z.error.code))return;e7(this.options.telemetry,{component:"core",operation:"hub.command_reply",error:Error(Z.error.message),severity:Z.error.code==="session_not_found"?"warn":"error",handled:!0,context:{...this.commandTelemetryContext($),errorCode:Z.error.code}})}commandTelemetryContext($){return{command:$.command,requestId:$.requestId,clientId:$.clientId,sessionId:typeof $.payload?.sessionId==="string"?$.payload.sessionId:$.sessionId}}async handleSettingsList($){try{let Z=await this.settings.list(VD($.payload));return{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:Z}}}catch(Z){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_list_failed",message:Z instanceof Error?Z.message:String(Z)}}}}async handleSettingsToggle($){try{let Z=await this.settings.toggle(Kg($.payload));return this.publish(r2("settings.changed",{types:Z.changedTypes,snapshot:Z.snapshot})),{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:Z.snapshot,changedTypes:Z.changedTypes}}}catch(Z){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_toggle_failed",message:Z instanceof Error?Z.message:String(Z)}}}}subscribe($,Z,Q){let W=this.listeners.get($)??new Set,J={sessionId:Q?.sessionId,listener:Z};return W.add(J),this.listeners.set($,W),()=>{let X=this.listeners.get($);if(!X)return;if(X.delete(J),X.size===0)this.listeners.delete($)}}detachClientFromSessions($){for(let[Z,Q]of this.sessionState.entries())if(Q.participants.delete($),Q.participants.size===0)this.sessionState.delete(Z);u$(this.ctx,(Z)=>Z.targetClientId===$,`Capability owner client ${$} disconnected before request was resolved.`)}publish($){for(let Z of this.listeners.values())for(let Q of Z){if(Q.sessionId&&Q.sessionId!==$.sessionId)continue;try{Q.listener($)}catch(W){cY(`listener threw while publishing ${$.event}`,W),e7(this.options.telemetry,{component:"core",operation:"hub.publish",error:W,severity:"warn",handled:!0,context:{event:$.event,sessionId:$.sessionId}})}}}}function Fg($){return $==="session_not_found"||$==="session_messages_not_found"||$==="hub_command_timeout"||$.endsWith("_failed")}import{timingSafeEqual as Dg}from"node:crypto";import Lg from"node:http";import _g from"node:net";import{URL as eY}from"node:url";import{CURRENT_HUB_PROTOCOL_VERSION as GD,HUB_CAPABILITIES as zg,isHubProtocolCompatible as Tg,MAX_CLIENT_HUB_PROTOCOL_VERSION as KD,MIN_CLIENT_HUB_PROTOCOL_VERSION as FD}from"@cline/shared";import{WebSocketServer as Og}from"ws";import{captureSdkError as HD,HUB_COMMAND_SLOW_LOG_MS as Ag,resolveHubCommandTimeoutMs as fg,safeJsonParse as Ug}from"@cline/shared";function sY($){return{command:$.envelope.command,requestId:$.envelope.requestId,clientId:$.envelope.clientId,sessionId:$.envelope.sessionId}}function BD($,Z,Q){return{version:$.envelope.version,requestId:$.envelope.requestId,ok:!1,error:{code:Z,message:Q}}}class X9{transport;telemetry;constructor($,Z){this.transport=$;this.telemetry=Z}attach($){let Z=new Map,Q=new Set,W=!1,J=(V)=>{try{$.send(JSON.stringify(V))}catch(H){console.error(`[hub] failed to send websocket frame: ${H instanceof Error?H.stack||H.message:String(H)}`)}},X=(V)=>{J({kind:"event",envelope:V})},Y=async(V)=>{try{let H=JSON.parse(V.data);switch(H.kind){case"command":{let B=performance.now(),G=!1,K=sY(H);u("info","command.start",K);let F=setTimeout(()=>{if(G)return;u("warn","command.slow",{...K,elapsedMs:Math.round(performance.now()-B)})},Ag),A=this.transport.command(H.envelope);A.then((q)=>{if(!G)return;u(q.ok?"warn":"error","command.late_end",{...K,elapsedMs:Math.round(performance.now()-B),ok:q.ok,errorCode:q.error?.code,errorMessage:q.error?.message})},(q)=>{if(!G)return;u("error","command.late_error",{...K,elapsedMs:Math.round(performance.now()-B),error:q})});let L=!1,f,D,U=fg(H.envelope.command,H.envelope.timeoutMs);try{D=U===null?await A:await Promise.race([A,new Promise((q)=>{f=setTimeout(()=>{L=!0,HD(this.telemetry,{component:"core",operation:"hub.command_timeout",error:Error(`Hub command ${H.envelope.command} did not complete within ${U}ms.`),severity:"error",handled:!0,context:{...K,timeoutMs:U}}),q(BD(H,"hub_command_timeout",`Hub command ${H.envelope.command} did not complete within ${U}ms. Check hub-daemon.log for command.start/command.slow logs with requestId ${H.envelope.requestId}.`))},U)})])}catch(q){if(clearTimeout(F),f)clearTimeout(f);throw q}if(G=L,clearTimeout(F),f)clearTimeout(f);let T=Math.round(performance.now()-B);if(L)u("error","command.timeout",{...K,durationMs:T,timeoutMs:U});else u(D.ok?"info":"warn","command.end",{...K,durationMs:T,ok:D.ok,errorCode:D.error?.code,errorMessage:D.error?.message});if(H.envelope.command==="client.register"&&D.ok){let z=(H.envelope.payload??{}).clientId?.trim()||H.envelope.clientId?.trim();if(z)Q.add(z)}else if(H.envelope.command==="client.unregister"&&D.ok){let q=H.envelope.clientId?.trim();if(q)Q.delete(q)}J({kind:"reply",envelope:D});break}case"stream.subscribe":{let B=`${H.clientId}:${H.sessionId??"*"}`;if(Z.has(B))break;let G=await this.transport.subscribe(H.clientId,X,{sessionId:H.sessionId});Z.set(B,G);break}case"stream.unsubscribe":{let B=`${H.clientId}:${H.sessionId??"*"}`;Z.get(B)?.(),Z.delete(B);break}case"reply":case"event":break}}catch(H){let B=typeof V.data==="string"?Ug(V.data):void 0;if(!B||B.kind!=="command"){u("error","rejected malformed websocket frame",{error:H});return}u("error","command.error",{...sY(B),error:H}),HD(this.telemetry,{component:"core",operation:"hub.websocket_command",error:H,severity:"error",handled:!0,context:sY(B)}),J({kind:"reply",envelope:BD(B,"command_failed",H instanceof Error?H.message:"Unknown hub error")})}},j=()=>{if(W)return;W=!0;for(let V of Z.values())V();Z.clear();for(let V of Q)this.transport.command({version:"v1",command:"client.unregister",clientId:V});Q.clear(),$.removeEventListener("message",Y),$.removeEventListener("close",j)};return $.addEventListener("message",Y),$.addEventListener("close",j),j}}class Y9{transport;constructor($){this.transport=$}command($){return this.transport.handleCommand($)}subscribe($,Z,Q){return this.transport.subscribe($,Z,Q)}}function qg($){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 Mg($){return{send(Z){$.send(Z)},addEventListener(Z,Q){if(Z==="message"){$.on("message",(W)=>{Q({data:qg(W)})});return}$.on("close",Q)},removeEventListener(){}}}function Rg($){try{$.write(`HTTP/1.1 400 Bad Request\r
|
|
746
746
|
Connection: close\r
|
|
747
747
|
Content-Length: 0\r
|
|
748
748
|
\r
|
|
749
|
-
`),$.end()}catch{$.destroy()}}function
|
|
749
|
+
`),$.end()}catch{$.destroy()}}function Eg($){try{$.write(`HTTP/1.1 401 Unauthorized\r
|
|
750
750
|
Connection: close\r
|
|
751
751
|
Content-Length: 0\r
|
|
752
752
|
\r
|
|
753
|
-
`),$.end()}catch{$.destroy()}}function oY($,Z){if(!$||!Z)return!1;let Q=Buffer.from($,"utf8"),W=Buffer.from(Z,"utf8");return Q.length===W.length&&
|
|
754
|
-
Caused by: ${$.stack}`;return X}async function
|
|
753
|
+
`),$.end()}catch{$.destroy()}}function oY($,Z){if(!$||!Z)return!1;let Q=Buffer.from($,"utf8"),W=Buffer.from(Z,"utf8");return Q.length===W.length&&Dg(Q,W)}function AD($,Z){let Q=$&&typeof $==="object"&&"code"in $&&typeof $.code==="string"?$.code:void 0,W=$ instanceof Error?$.message:typeof $==="string"?$:"Unknown startup error",J=`Failed to start hub server on ${Z.host}:${Z.port}${Z.pathname}: ${W}`,X=Error(Q?`${J} (${Q})`:J);if(Q)$.code=Q,X.code=Q;if($ instanceof Error&&$.stack)X.stack=`${X.name}: ${X.message}
|
|
754
|
+
Caused by: ${$.stack}`;return X}async function Ng($){return await new Promise((Z,Q)=>{let W=_g.createServer();W.once("error",Q),W.listen(0,$,()=>{let J=W.address();if(!J||typeof J==="string"){W.close(()=>Q(Error("Failed to resolve free port")));return}let X=J.port;W.close((Y)=>{if(Y){Q(Y);return}Z(X)})})})}function wg($){return $ instanceof Error&&"code"in $&&$.code==="EADDRINUSE"}var tY=new Map,fD="cline-hub-auth.",Cg=30000;function $j($){return Array.isArray($)?$.join(","):$??""}function UD($){return $===32||$===9}function l7($){let Z=$j($).trim(),Q="bearer";if(Z.length<=6||Z.slice(0,6).toLowerCase()!=="bearer"||!UD(Z.charCodeAt(6)))return null;let W=7;while(W<Z.length&&UD(Z.charCodeAt(W)))W+=1;return Z.slice(W).trim()||null}function Pg($){for(let Z of $j($).split(",")){let Q=Z.trim();if(Q.startsWith(fD))return Q.slice(fD.length).trim()||null}return null}function p7($){let Z=$.trim().toLowerCase();return Z==="localhost"||Z==="127.0.0.1"||Z==="::1"||Z==="[::1]"}function MY($){let Z=$j($).trim();if(!Z)return!1;try{return p7(new eY(Z).hostname)}catch{return!1}}async function j9($){let Z=$.owner??x1(),Q=$.host??"127.0.0.1",W=$.pathname??"/hub",J=$.port??V8(),X=J===0?await Ng(Q):J,Y=X,j=Z1(Q,X,W),V=l9(),H=d9(),B=new w4($);await B.start();let G=new X9(new Y9(B),$.telemetry),K=new Set,F=new Date().toISOString(),A={protocolVersion:GD,minClientProtocolVersion:FD,maxClientProtocolVersion:KD,capabilities:zg,coreVersion:n4.version,buildId:V,pid:process.pid,startedAt:F},L=new Set,f,D,U=async()=>{if(D)return D;return D=(async()=>{if(f)clearInterval(f),f=void 0;for(let _ of L)_.terminate?.();L.clear();for(let _ of K)_();if(K.clear(),await new Promise((_,E)=>{q.close((C)=>{if(C){E(C);return}_()})}),await new Promise((_,E)=>{T.close((C)=>{if(C){E(C);return}_()})}),await B.stop(),(await K0(Z.discoveryPath))?.url===j)await S0(Z.discoveryPath)})(),D},T=Lg.createServer((z,_)=>{if((z.url??"/")==="/health"){let C=JSON.stringify({ok:!0,protocolVersion:A.protocolVersion,minClientProtocolVersion:A.minClientProtocolVersion,maxClientProtocolVersion:A.maxClientProtocolVersion,coreVersion:A.coreVersion,host:Q,port:Y,url:j});_.statusCode=200,_.setHeader("content-type","application/json"),_.end(C);return}if((z.url??"/")==="/status"){if(!oY(l7(z.headers.authorization),H)){_.statusCode=401,_.end("Unauthorized");return}let C=JSON.stringify({hubId:B.getHubId(),...A,authToken:H,host:Q,port:Y,url:j,updatedAt:new Date().toISOString()});_.statusCode=200,_.setHeader("content-type","application/json"),_.end(C);return}if((z.url??"/")==="/version"){_.statusCode=200,_.setHeader("content-type","application/json"),_.end(JSON.stringify(A));return}if(new eY(z.url??"/",`http://${Q}:${Y}`).pathname==="/shutdown"&&z.method==="POST"){if(!oY(l7(z.headers.authorization),H)){_.statusCode=401,_.end("Unauthorized");return}_.statusCode=202,_.setHeader("content-type","application/json"),_.end(JSON.stringify({ok:!0})),queueMicrotask(()=>{U()});return}_.statusCode=404,_.end("Not found")}),q=new Og({noServer:!0});f=setInterval(()=>{for(let z of L){if(z.isAlive===!1){try{z.terminate?.()}catch{}L.delete(z);continue}z.isAlive=!1;try{z.ping?.()}catch{try{z.terminate?.()}catch{}L.delete(z)}}},Cg),T.on("upgrade",(z,_,E)=>{if(new eY(z.url??"/",`http://${Q}:${Y}`).pathname!==W){_.destroy();return}if(!(oY(Pg(z.headers["sec-websocket-protocol"]),H)||p7(Q)&&MY(z.headers.origin))){Eg(_);return}try{q.handleUpgrade(z,_,E,(l)=>{let o=l;o.isAlive=!0,o.on("pong",()=>{o.isAlive=!0}),L.add(o);let t=G.attach(Mg(l));K.add(t),l.once("close",()=>{L.delete(o),t(),K.delete(t)})})}catch{Rg(_)}});try{await new Promise((z,_)=>{T.once("error",(E)=>{_(AD(E,{host:Q,port:X,pathname:W}))}),T.listen(X,Q,()=>{let E=T.address();if(!E||typeof E==="string"){_(AD(Error("Failed to resolve hub port"),{host:Q,port:X,pathname:W}));return}Y=E.port,j=Z1(Q,Y,W),z()})})}catch(z){if(f)clearInterval(f),f=void 0;throw await B.stop().catch(()=>{return}),z}return await p9(Z.discoveryPath,{hubId:B.getHubId(),protocolVersion:GD,minClientProtocolVersion:FD,maxClientProtocolVersion:KD,capabilities:[...A.capabilities],coreVersion:n4.version,buildId:V,authToken:H,host:Q,port:Y,url:j,pid:process.pid,startedAt:F,updatedAt:F}),{host:Q,port:Y,url:j,authToken:H,close:U}}async function r7($){let Z=$.owner??x1(),Q=$.host!==void 0||$.port!==void 0||$.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),W=$.host??"127.0.0.1",J=$.port??V8(),X=$.pathname??"/hub",Y=Z1(W,J,X),j=Z.discoveryPath,V=(B)=>{if(!Q)B$(B.url,B.authToken);return B},H=tY.get(j);if(H){let B=await H;if(B.url===Y)return V({server:B,url:B.url,authToken:B.authToken,action:"reuse"})}return await r9(Z.discoveryPath,async()=>{let B=await K0(Z.discoveryPath);if(B?.url&&(B.url===Y||$.allowPortFallback===!0)){let F=await g1(B.url,{authToken:B.authToken});if(F?.url&&Tg(F).compatible&&await A1(F.url,{authToken:B.authToken}))return V({url:F.url,authToken:B.authToken,action:"reuse"})}if(B?.url)await S0(Z.discoveryPath);let K=async(F)=>{let A=j9({...F,owner:Z});tY.set(j,A);try{let L=await A;return V({server:L,url:L.url,authToken:L.authToken,action:"started"})}catch(L){throw tY.delete(j),L}};try{return await K($)}catch(F){if(!$.allowPortFallback||!wg(F))throw F;return await K({...$,port:0})}})}function LD(){return DD()==="production"?F1():Q1()}function Sg($){return DD()!=="production"&&!$}async function HU($){let Z=K1({host:$.host,port:$.port,pathname:$.pathname});return await j9({...$,...Z,owner:LD()})}async function BU($){let Z=$.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Q=K1({host:$.host,port:$.port,pathname:$.pathname});return await r7({...$,...Q,allowPortFallback:$.allowPortFallback??Sg(Z),owner:LD()})}export{p9 as writeHubDiscovery,r9 as withHubStartupLock,A1 as verifyHubConnection,J9 as truncateNotificationBody,OW as toHubStatusUrl,i9 as toHubHealthUrl,hW as stopLocalHubServerGracefully,j9 as startHubWebSocketServer,HU as startHubServer,H8 as spawnDetachedHubServerWithRetry,wW as spawnDetachedHubServer,_V as sendHubCommand,t9 as restartLocalHubIfIdleAfterStartupTimeout,QV as resolveWorkspaceHubOwnerContext,Q1 as resolveSharedHubOwnerContext,F1 as resolveProductionHubOwnerContext,kW as resolveHubUrl,x1 as resolveHubOwnerContext,K1 as resolveHubEndpointOptions,l9 as resolveHubBuildId,V8 as resolveDefaultHubPort,NW as resolveDefaultHubPathname,EW as resolveDefaultHubHost,o4 as resolveCompatibleLocalHubUrl,tj as resolveClineDir,o$ as resolveClineDataDir,s4 as requestHubShutdown,B$ as rememberRecoverableLocalHubUrl,K0 as readHubDiscovery,l7 as readBearerToken,g1 as probeHubServer,LV as probeHubConnection,a9 as prewarmDetachedHubServer,G$ as normalizeHubWebSocketUrl,MY as isLocalHubOrigin,p7 as isLocalHubHostName,bW as isHubReconnectableTransportError,o9 as isHubCommandTimeoutError,$V as isDiscoveryFilePresent,r7 as ensureHubWebSocketServer,BU as ensureHubServer,VV as ensureDetachedHubServer,$2 as ensureCompatibleLocalHubUrl,VU as createLocalHubScheduleRuntimeHandlers,ej as createInMemoryHubOwnerContext,Z1 as createHubServerUrl,d9 as createHubAuthToken,h1 as createConfiguredTelemetryService,j8 as createConfiguredTelemetryHandle,e9 as connectToHub,S0 as clearHubDiscovery,W1 as NodeHubClient,Y9 as NativeHubTransportAdapter,gW as HubUIClient,R0 as HubTransportError,xW as HubSessionClient,w4 as HubServerTransport,Z8 as HubScheduleService,o2 as HubScheduleCommandService,B8 as HubCommandError,MW as DEFAULT_HUB_PORT,RW as DEFAULT_HUB_PATHNAME,qW as DEFAULT_HUB_HOST,X9 as BrowserWebSocketHubAdapter};
|